summaryrefslogtreecommitdiff
path: root/Build/source/libs/icu/icu-50.1/layout
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/libs/icu/icu-50.1/layout')
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/AlternateSubstSubtables.cpp51
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/AlternateSubstSubtables.h38
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/AnchorTables.cpp106
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/AnchorTables.h54
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/ArabicLayoutEngine.cpp217
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/ArabicLayoutEngine.h241
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/ArabicShaping.cpp272
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/ArabicShaping.h83
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/AttachmentPosnSubtables.h42
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/CanonData.cpp3619
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/CanonShaping.cpp81
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/CanonShaping.h30
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/CharSubstitutionFilter.h81
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/ClassDefinitionTables.cpp120
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/ClassDefinitionTables.h55
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/ContextualGlyphInsertion.h46
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/ContextualGlyphSubstProc.cpp79
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/ContextualGlyphSubstProc.h65
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/ContextualGlyphSubstitution.h41
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/ContextualSubstSubtables.cpp569
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/ContextualSubstSubtables.h205
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/CoverageTables.cpp91
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/CoverageTables.h44
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/CursiveAttachmentSubtables.cpp53
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/CursiveAttachmentSubtables.h41
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/DefaultCharMapper.h57
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/DeviceTables.cpp46
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/DeviceTables.h39
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/ExtensionSubtables.cpp45
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/ExtensionSubtables.h35
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/Features.cpp61
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/GDEFMarkFilter.cpp31
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/GDEFMarkFilter.h37
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/GXLayoutEngine.cpp69
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/GXLayoutEngine.h126
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/GlyphDefinitionTables.cpp34
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/GlyphDefinitionTables.h96
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/GlyphIterator.cpp530
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/GlyphIterator.h105
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/GlyphLookupTables.cpp32
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/GlyphLookupTables.h34
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/GlyphPositionAdjustments.cpp185
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/GlyphPositionAdjustments.h376
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/GlyphPositioningTables.cpp38
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/GlyphPositioningTables.h51
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/GlyphPosnLookupProc.cpp161
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/GlyphPosnLookupProc.h52
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/GlyphSubstLookupProc.cpp132
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/GlyphSubstLookupProc.h55
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/GlyphSubstitutionTables.cpp39
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/GlyphSubstitutionTables.h55
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/HanLayoutEngine.cpp84
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/HanLayoutEngine.h105
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/HangulLayoutEngine.cpp338
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/HangulLayoutEngine.h127
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/ICUFeatures.h44
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/IndicClassTables.cpp467
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/IndicLayoutEngine.cpp135
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/IndicLayoutEngine.h167
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/IndicRearrangement.h65
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/IndicRearrangementProcessor.cpp398
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/IndicRearrangementProcessor.h63
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/IndicReordering.cpp1186
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/IndicReordering.h345
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/KernTable.cpp231
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/KernTable.h51
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/KhmerLayoutEngine.cpp81
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/KhmerLayoutEngine.h131
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/KhmerReordering.cpp499
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/KhmerReordering.h132
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/LEFontInstance.cpp154
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/LEFontInstance.h541
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/LEGlyphFilter.h45
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/LEGlyphStorage.cpp719
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/LEGlyphStorage.h556
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/LEInsertionList.cpp96
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/LEInsertionList.h177
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/LELanguages.h111
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/LEScripts.h243
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/LESwaps.h100
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/LETypes.h572
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/LayoutEngine.cpp678
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/LayoutEngine.h505
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/LayoutTables.h26
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/LigatureSubstProc.cpp117
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/LigatureSubstProc.h71
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/LigatureSubstSubtables.cpp68
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/LigatureSubstSubtables.h45
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/LigatureSubstitution.h51
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/LookupProcessor.cpp316
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/LookupProcessor.h80
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/LookupTables.cpp85
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/LookupTables.h90
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/Lookups.cpp44
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/Lookups.h65
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/MPreFixups.cpp105
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/MPreFixups.h42
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/Makefile.in240
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/MarkArrays.cpp39
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/MarkArrays.h39
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/MarkToBasePosnSubtables.cpp115
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/MarkToBasePosnSubtables.h43
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/MarkToLigaturePosnSubtables.cpp103
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/MarkToLigaturePosnSubtables.h49
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/MarkToMarkPosnSubtables.cpp97
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/MarkToMarkPosnSubtables.h43
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/MirroredCharData.cpp108
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/MorphStateTables.h28
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/MorphTables.cpp96
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/MorphTables.h85
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/MultipleSubstSubtables.cpp95
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/MultipleSubstSubtables.h38
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/NonContextualGlyphSubst.h30
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/NonContextualGlyphSubstProc.cpp60
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/NonContextualGlyphSubstProc.h43
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/OpenTypeLayoutEngine.cpp452
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/OpenTypeLayoutEngine.h397
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/OpenTypeTables.h50
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/OpenTypeUtilities.cpp179
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/OpenTypeUtilities.h34
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/PairPositioningSubtables.cpp171
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/PairPositioningSubtables.h84
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/ScriptAndLanguage.cpp84
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/ScriptAndLanguage.h52
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/ScriptAndLanguageTags.cpp253
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/ScriptAndLanguageTags.h269
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/SegmentArrayProcessor.cpp60
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/SegmentArrayProcessor.h58
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/SegmentSingleProcessor.cpp54
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/SegmentSingleProcessor.h58
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/ShapingTypeData.cpp100
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/SimpleArrayProcessor.cpp51
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/SimpleArrayProcessor.h58
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/SinglePositioningSubtables.cpp72
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/SinglePositioningSubtables.h49
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/SingleSubstitutionSubtables.cpp79
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/SingleSubstitutionSubtables.h46
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/SingleTableProcessor.cpp51
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/SingleTableProcessor.h57
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/StateTableProcessor.cpp77
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/StateTableProcessor.h58
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/StateTables.h65
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/SubstitutionLookups.cpp51
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/SubstitutionLookups.h44
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/SubtableProcessor.cpp31
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/SubtableProcessor.h46
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/ThaiLayoutEngine.cpp123
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/ThaiLayoutEngine.h144
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/ThaiShaping.cpp307
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/ThaiShaping.h108
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/ThaiStateTables.cpp87
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/TibetanLayoutEngine.cpp87
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/TibetanLayoutEngine.h131
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/TibetanReordering.cpp389
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/TibetanReordering.h151
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/TrimmedArrayProcessor.cpp55
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/TrimmedArrayProcessor.h60
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/ValueRecords.cpp360
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/ValueRecords.h72
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/layout.rc108
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/layout.vcxproj552
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/layout.vcxproj.filters508
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/loengine.cpp163
-rw-r--r--Build/source/libs/icu/icu-50.1/layout/loengine.h225
164 files changed, 27367 insertions, 0 deletions
diff --git a/Build/source/libs/icu/icu-50.1/layout/AlternateSubstSubtables.cpp b/Build/source/libs/icu/icu-50.1/layout/AlternateSubstSubtables.cpp
new file mode 100644
index 00000000000..6c8758bc993
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/AlternateSubstSubtables.cpp
@@ -0,0 +1,51 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
+ *
+ */
+
+#include "LETypes.h"
+#include "LEGlyphFilter.h"
+#include "OpenTypeTables.h"
+#include "GlyphSubstitutionTables.h"
+#include "AlternateSubstSubtables.h"
+#include "GlyphIterator.h"
+#include "LESwaps.h"
+
+U_NAMESPACE_BEGIN
+
+le_uint32 AlternateSubstitutionSubtable::process(GlyphIterator *glyphIterator, const LEGlyphFilter *filter) const
+{
+ // NOTE: For now, we'll just pick the first alternative...
+ LEGlyphID glyph = glyphIterator->getCurrGlyphID();
+ le_int32 coverageIndex = getGlyphCoverage(glyph);
+
+ if (coverageIndex >= 0) {
+ le_uint16 altSetCount = SWAPW(alternateSetCount);
+
+ if (coverageIndex < altSetCount) {
+ Offset alternateSetTableOffset = SWAPW(alternateSetTableOffsetArray[coverageIndex]);
+ const AlternateSetTable *alternateSetTable =
+ (const AlternateSetTable *) ((char *) this + alternateSetTableOffset);
+ le_int32 altIndex = glyphIterator->getFeatureParam();
+
+ if (altIndex < SWAPW(alternateSetTable->glyphCount)) {
+ TTGlyphID alternate = SWAPW(alternateSetTable->alternateArray[altIndex]);
+
+ if (filter == NULL || filter->accept(LE_SET_GLYPH(glyph, alternate))) {
+ glyphIterator->setCurrGlyphID(alternate);
+ }
+
+ return 1;
+ }
+
+ // feature param was out of range for the glyph
+ }
+
+ // XXXX If we get here, the table's mal-formed...
+ }
+
+ return 0;
+}
+
+U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-50.1/layout/AlternateSubstSubtables.h b/Build/source/libs/icu/icu-50.1/layout/AlternateSubstSubtables.h
new file mode 100644
index 00000000000..41e3bc9409d
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/AlternateSubstSubtables.h
@@ -0,0 +1,38 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
+ *
+ */
+
+#ifndef __ALTERNATESUBSTITUTIONSUBTABLES_H
+#define __ALTERNATESUBSTITUTIONSUBTABLES_H
+
+/**
+ * \file
+ * \internal
+ */
+
+#include "LETypes.h"
+#include "LEGlyphFilter.h"
+#include "OpenTypeTables.h"
+#include "GlyphSubstitutionTables.h"
+#include "GlyphIterator.h"
+
+U_NAMESPACE_BEGIN
+
+struct AlternateSetTable
+{
+ le_uint16 glyphCount;
+ TTGlyphID alternateArray[ANY_NUMBER];
+};
+
+struct AlternateSubstitutionSubtable : GlyphSubstitutionSubtable
+{
+ le_uint16 alternateSetCount;
+ Offset alternateSetTableOffsetArray[ANY_NUMBER];
+
+ le_uint32 process(GlyphIterator *glyphIterator, const LEGlyphFilter *filter = NULL) const;
+};
+
+U_NAMESPACE_END
+#endif
diff --git a/Build/source/libs/icu/icu-50.1/layout/AnchorTables.cpp b/Build/source/libs/icu/icu-50.1/layout/AnchorTables.cpp
new file mode 100644
index 00000000000..24f3cf31df4
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/AnchorTables.cpp
@@ -0,0 +1,106 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
+ *
+ */
+
+#include "LETypes.h"
+#include "LEFontInstance.h"
+#include "DeviceTables.h"
+#include "AnchorTables.h"
+#include "LESwaps.h"
+
+U_NAMESPACE_BEGIN
+
+void AnchorTable::getAnchor(LEGlyphID glyphID, const LEFontInstance *fontInstance,
+ LEPoint &anchor) const
+{
+ switch(SWAPW(anchorFormat)) {
+ case 1:
+ {
+ const Format1AnchorTable *f1 = (const Format1AnchorTable *) this;
+
+ f1->getAnchor(fontInstance, anchor);
+ break;
+ }
+
+ case 2:
+ {
+ const Format2AnchorTable *f2 = (const Format2AnchorTable *) this;
+
+ f2->getAnchor(glyphID, fontInstance, anchor);
+ break;
+ }
+
+ case 3:
+ {
+ const Format3AnchorTable *f3 = (const Format3AnchorTable *) this;
+
+ f3->getAnchor(fontInstance, anchor);
+ break;
+ }
+
+ default:
+ // unknown format: just use x, y coordinate, like format 1...
+ const Format1AnchorTable *f1 = (const Format1AnchorTable *) this;
+
+ f1->getAnchor(fontInstance, anchor);
+ break;
+ }
+}
+
+void Format1AnchorTable::getAnchor(const LEFontInstance *fontInstance, LEPoint &anchor) const
+{
+ le_int16 x = SWAPW(xCoordinate);
+ le_int16 y = SWAPW(yCoordinate);
+ LEPoint pixels;
+
+ fontInstance->transformFunits(x, y, pixels);
+
+ fontInstance->pixelsToUnits(pixels, anchor);
+}
+
+void Format2AnchorTable::getAnchor(LEGlyphID glyphID, const LEFontInstance *fontInstance, LEPoint &anchor) const
+{
+ LEPoint point;
+
+ if (! fontInstance->getGlyphPoint(glyphID, SWAPW(anchorPoint), point)) {
+ le_int16 x = SWAPW(xCoordinate);
+ le_int16 y = SWAPW(yCoordinate);
+
+ fontInstance->transformFunits(x, y, point);
+ }
+
+
+ fontInstance->pixelsToUnits(point, anchor);
+}
+
+void Format3AnchorTable::getAnchor(const LEFontInstance *fontInstance, LEPoint &anchor) const
+{
+ le_int16 x = SWAPW(xCoordinate);
+ le_int16 y = SWAPW(yCoordinate);
+ LEPoint pixels;
+ Offset dtxOffset = SWAPW(xDeviceTableOffset);
+ Offset dtyOffset = SWAPW(yDeviceTableOffset);
+
+ fontInstance->transformFunits(x, y, pixels);
+
+ if (dtxOffset != 0) {
+ const DeviceTable *dtx = (const DeviceTable *) ((char *) this + dtxOffset);
+ le_int16 adjx = dtx->getAdjustment((le_int16) fontInstance->getXPixelsPerEm());
+
+ pixels.fX += adjx;
+ }
+
+ if (dtyOffset != 0) {
+ const DeviceTable *dty = (const DeviceTable *) ((char *) this + dtyOffset);
+ le_int16 adjy = dty->getAdjustment((le_int16) fontInstance->getYPixelsPerEm());
+
+ pixels.fY += adjy;
+ }
+
+ fontInstance->pixelsToUnits(pixels, anchor);
+}
+
+U_NAMESPACE_END
+
diff --git a/Build/source/libs/icu/icu-50.1/layout/AnchorTables.h b/Build/source/libs/icu/icu-50.1/layout/AnchorTables.h
new file mode 100644
index 00000000000..71825c5ca16
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/AnchorTables.h
@@ -0,0 +1,54 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
+ *
+ */
+
+#ifndef __ANCHORTABLES_H
+#define __ANCHORTABLES_H
+
+/**
+ * \file
+ * \internal
+ */
+
+#include "LETypes.h"
+#include "LEFontInstance.h"
+#include "OpenTypeTables.h"
+
+U_NAMESPACE_BEGIN
+
+struct AnchorTable
+{
+ le_uint16 anchorFormat;
+ le_int16 xCoordinate;
+ le_int16 yCoordinate;
+
+ void getAnchor(LEGlyphID glyphID, const LEFontInstance *fontInstance,
+ LEPoint &anchor) const;
+};
+
+struct Format1AnchorTable : AnchorTable
+{
+ void getAnchor(const LEFontInstance *fontInstance, LEPoint &anchor) const;
+};
+
+struct Format2AnchorTable : AnchorTable
+{
+ le_uint16 anchorPoint;
+
+ void getAnchor(LEGlyphID glyphID, const LEFontInstance *fontInstance, LEPoint &anchor) const;
+};
+
+struct Format3AnchorTable : AnchorTable
+{
+ Offset xDeviceTableOffset;
+ Offset yDeviceTableOffset;
+
+ void getAnchor(const LEFontInstance *fontInstance, LEPoint &anchor) const;
+};
+
+U_NAMESPACE_END
+#endif
+
+
diff --git a/Build/source/libs/icu/icu-50.1/layout/ArabicLayoutEngine.cpp b/Build/source/libs/icu/icu-50.1/layout/ArabicLayoutEngine.cpp
new file mode 100644
index 00000000000..c0f780e4480
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/ArabicLayoutEngine.cpp
@@ -0,0 +1,217 @@
+
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2008 - All Rights Reserved
+ *
+ */
+
+#include "LETypes.h"
+#include "LEScripts.h"
+#include "LEGlyphFilter.h"
+#include "LEGlyphStorage.h"
+#include "LayoutEngine.h"
+#include "OpenTypeLayoutEngine.h"
+#include "ArabicLayoutEngine.h"
+#include "ScriptAndLanguageTags.h"
+#include "CharSubstitutionFilter.h"
+
+#include "GlyphSubstitutionTables.h"
+#include "GlyphDefinitionTables.h"
+#include "GlyphPositioningTables.h"
+
+#include "GDEFMarkFilter.h"
+
+#include "ArabicShaping.h"
+#include "CanonShaping.h"
+
+U_NAMESPACE_BEGIN
+
+le_bool CharSubstitutionFilter::accept(LEGlyphID glyph) const
+{
+ return fFontInstance->canDisplay((LEUnicode) glyph);
+}
+
+UOBJECT_DEFINE_RTTI_IMPLEMENTATION(ArabicOpenTypeLayoutEngine)
+
+ArabicOpenTypeLayoutEngine::ArabicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
+ le_int32 typoFlags, const GlyphSubstitutionTableHeader *gsubTable, LEErrorCode &success)
+ : OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable, success)
+{
+ fFeatureMap = ArabicShaping::getFeatureMap(fFeatureMapCount);
+ fFeatureOrder = TRUE;
+}
+
+ArabicOpenTypeLayoutEngine::ArabicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
+ le_int32 typoFlags, LEErrorCode &success)
+ : OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, success)
+{
+ fFeatureMap = ArabicShaping::getFeatureMap(fFeatureMapCount);
+
+ // NOTE: We don't need to set fFeatureOrder to TRUE here
+ // because this constructor is only called by the constructor
+ // for UnicodeArabicOpenTypeLayoutEngine, which uses a pre-built
+ // GSUB table that has the features in the correct order.
+
+ //fFeatureOrder = TRUE;
+}
+
+ArabicOpenTypeLayoutEngine::~ArabicOpenTypeLayoutEngine()
+{
+ // nothing to do
+}
+
+// Input: characters
+// Output: characters, char indices, tags
+// Returns: output character count
+le_int32 ArabicOpenTypeLayoutEngine::characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
+ LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success)
+{
+ if (LE_FAILURE(success)) {
+ return 0;
+ }
+
+ if (chars == NULL || offset < 0 || count < 0 || max < 0 || offset >= max || offset + count > max) {
+ success = LE_ILLEGAL_ARGUMENT_ERROR;
+ return 0;
+ }
+
+ outChars = LE_NEW_ARRAY(LEUnicode, count);
+
+ if (outChars == NULL) {
+ success = LE_MEMORY_ALLOCATION_ERROR;
+ return 0;
+ }
+
+ glyphStorage.allocateGlyphArray(count, rightToLeft, success);
+ glyphStorage.allocateAuxData(success);
+
+ if (LE_FAILURE(success)) {
+ LE_DELETE_ARRAY(outChars);
+ return 0;
+ }
+
+ CanonShaping::reorderMarks(&chars[offset], count, rightToLeft, outChars, glyphStorage);
+
+ // Note: This processes the *original* character array so we can get context
+ // for the first and last characters. This is OK because only the marks
+ // will have been reordered, and they don't contribute to shaping.
+ ArabicShaping::shape(chars, offset, count, max, rightToLeft, glyphStorage);
+
+ return count;
+}
+
+void ArabicOpenTypeLayoutEngine::adjustGlyphPositions(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool reverse,
+ LEGlyphStorage &glyphStorage, LEErrorCode &success)
+{
+ if (LE_FAILURE(success)) {
+ return;
+ }
+
+ if (chars == NULL || offset < 0 || count < 0) {
+ success = LE_ILLEGAL_ARGUMENT_ERROR;
+ return;
+ }
+
+ if (fGPOSTable != NULL) {
+ OpenTypeLayoutEngine::adjustGlyphPositions(chars, offset, count, reverse, glyphStorage, success);
+ } else if (fGDEFTable != NULL) {
+ GDEFMarkFilter filter(fGDEFTable);
+
+ adjustMarkGlyphs(glyphStorage, &filter, success);
+ } else {
+ GlyphDefinitionTableHeader *gdefTable = (GlyphDefinitionTableHeader *) CanonShaping::glyphDefinitionTable;
+ GDEFMarkFilter filter(gdefTable);
+
+ adjustMarkGlyphs(&chars[offset], count, reverse, glyphStorage, &filter, success);
+ }
+}
+
+UnicodeArabicOpenTypeLayoutEngine::UnicodeArabicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, le_int32 typoFlags, LEErrorCode &success)
+ : ArabicOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, success)
+{
+ fGSUBTable = (const GlyphSubstitutionTableHeader *) CanonShaping::glyphSubstitutionTable;
+ fGDEFTable = (const GlyphDefinitionTableHeader *) CanonShaping::glyphDefinitionTable;
+
+ fSubstitutionFilter = new CharSubstitutionFilter(fontInstance);
+}
+
+UnicodeArabicOpenTypeLayoutEngine::~UnicodeArabicOpenTypeLayoutEngine()
+{
+ delete fSubstitutionFilter;
+}
+
+// "glyphs", "indices" -> glyphs, indices
+le_int32 UnicodeArabicOpenTypeLayoutEngine::glyphPostProcessing(LEGlyphStorage &tempGlyphStorage, LEGlyphStorage &glyphStorage, LEErrorCode &success)
+{
+ if (LE_FAILURE(success)) {
+ return 0;
+ }
+
+ // FIXME: we could avoid the memory allocation and copy if we
+ // made a clone of mapCharsToGlyphs which took the fake glyphs
+ // directly.
+ le_int32 tempGlyphCount = tempGlyphStorage.getGlyphCount();
+ LEUnicode *tempChars = LE_NEW_ARRAY(LEUnicode, tempGlyphCount);
+
+ if (tempChars == NULL) {
+ success = LE_MEMORY_ALLOCATION_ERROR;
+ return 0;
+ }
+
+ for (le_int32 i = 0; i < tempGlyphCount; i += 1) {
+ tempChars[i] = (LEUnicode) LE_GET_GLYPH(tempGlyphStorage[i]);
+ }
+
+ glyphStorage.adoptCharIndicesArray(tempGlyphStorage);
+
+ ArabicOpenTypeLayoutEngine::mapCharsToGlyphs(tempChars, 0, tempGlyphCount, FALSE, TRUE, glyphStorage, success);
+
+ LE_DELETE_ARRAY(tempChars);
+
+ return tempGlyphCount;
+}
+
+void UnicodeArabicOpenTypeLayoutEngine::mapCharsToGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool reverse, le_bool /*mirror*/, LEGlyphStorage &glyphStorage, LEErrorCode &success)
+{
+ if (LE_FAILURE(success)) {
+ return;
+ }
+
+ if (chars == NULL || offset < 0 || count < 0) {
+ success = LE_ILLEGAL_ARGUMENT_ERROR;
+ return;
+ }
+
+ le_int32 i, dir = 1, out = 0;
+
+ if (reverse) {
+ out = count - 1;
+ dir = -1;
+ }
+
+ glyphStorage.allocateGlyphArray(count, reverse, success);
+
+ for (i = 0; i < count; i += 1, out += dir) {
+ glyphStorage[out] = (LEGlyphID) chars[offset + i];
+ }
+}
+
+void UnicodeArabicOpenTypeLayoutEngine::adjustGlyphPositions(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool reverse,
+ LEGlyphStorage &glyphStorage, LEErrorCode &success)
+{
+ if (LE_FAILURE(success)) {
+ return;
+ }
+
+ if (chars == NULL || offset < 0 || count < 0) {
+ success = LE_ILLEGAL_ARGUMENT_ERROR;
+ return;
+ }
+
+ GDEFMarkFilter filter(fGDEFTable);
+
+ adjustMarkGlyphs(&chars[offset], count, reverse, glyphStorage, &filter, success);
+}
+
+U_NAMESPACE_END
+
diff --git a/Build/source/libs/icu/icu-50.1/layout/ArabicLayoutEngine.h b/Build/source/libs/icu/icu-50.1/layout/ArabicLayoutEngine.h
new file mode 100644
index 00000000000..a449701f181
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/ArabicLayoutEngine.h
@@ -0,0 +1,241 @@
+
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2008 - All Rights Reserved
+ *
+ */
+
+#ifndef __ARABICLAYOUTENGINE_H
+#define __ARABICLAYOUTENGINE_H
+
+#include "LETypes.h"
+#include "LEFontInstance.h"
+#include "LEGlyphFilter.h"
+#include "LayoutEngine.h"
+#include "OpenTypeLayoutEngine.h"
+
+#include "GlyphSubstitutionTables.h"
+#include "GlyphDefinitionTables.h"
+#include "GlyphPositioningTables.h"
+
+U_NAMESPACE_BEGIN
+
+/**
+ * This class implements OpenType layout for Arabic fonts. It overrides
+ * the characerProcessing method to assign the correct OpenType feature
+ * tags for the Arabic contextual forms. It also overrides the adjustGlyphPositions
+ * method to guarantee that all vowel and accent glyphs have zero advance width.
+ *
+ * @internal
+ */
+class ArabicOpenTypeLayoutEngine : public OpenTypeLayoutEngine
+{
+public:
+ /**
+ * This is the main constructor. It constructs an instance of ArabicOpenTypeLayoutEngine for
+ * a particular font, script and language. It takes the GSUB table as a parameter since
+ * LayoutEngine::layoutEngineFactory has to read the GSUB table to know that it has an
+ * Indic OpenType font.
+ *
+ * @param fontInstance - the font
+ * @param scriptCode - the script
+ * @param langaugeCode - the language
+ * @param gsubTable - the GSUB table
+ * @param success - set to an error code if the operation fails
+ *
+ * @see LayoutEngine::layoutEngineFactory
+ * @see OpenTypeLayoutEngine
+ * @see ScriptAndLanguageTags.h for script and language codes
+ *
+ * @internal
+ */
+ ArabicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
+ le_int32 typoFlags, const GlyphSubstitutionTableHeader *gsubTable, LEErrorCode &success);
+
+ /**
+ * This constructor is used when the font requires a "canned" GSUB table which can't be known
+ * until after this constructor has been invoked.
+ *
+ * @param fontInstance - the font
+ * @param scriptCode - the script
+ * @param langaugeCode - the language
+ * @param success - set to an error code if the operation fails
+ *
+ * @see OpenTypeLayoutEngine
+ * @see ScriptAndLanguageTags.h for script and language codes
+ *
+ * @internal
+ */
+ ArabicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
+ le_int32 typoFlags, LEErrorCode &success);
+
+ /**
+ * The destructor, virtual for correct polymorphic invocation.
+ *
+ * @internal
+ */
+ virtual ~ArabicOpenTypeLayoutEngine();
+
+ /**
+ * ICU "poor man's RTTI", returns a UClassID for the actual class.
+ *
+ * @stable ICU 2.8
+ */
+ virtual UClassID getDynamicClassID() const;
+
+ /**
+ * ICU "poor man's RTTI", returns a UClassID for this class.
+ *
+ * @stable ICU 2.8
+ */
+ static UClassID getStaticClassID();
+
+protected:
+
+ /**
+ * This method does Arabic OpenType character processing. It assigns the OpenType feature
+ * tags to the characters to generate the correct contextual forms and ligatures.
+ *
+ * Input parameters:
+ * @param chars - the input character context
+ * @param offset - the index of the first character to process
+ * @param count - the number of characters to process
+ * @param max - the number of characters in the input context
+ * @param rightToLeft - <code>TRUE</code> if the characters are in a right to left directional run
+ *
+ * Output parameters:
+ * @param outChars - the output character arrayt
+ * @param charIndices - the output character index array
+ * @param featureTags - the output feature tag array
+ * @param success - set to an error code if the operation fails
+ *
+ * @return the output character count
+ *
+ * @internal
+ */
+ virtual le_int32 characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
+ LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success);
+
+ /**
+ * This method applies the GPOS table if it is present, otherwise it ensures that all vowel
+ * and accent glyphs have a zero advance width by calling the adjustMarkGlyphs method.
+ * If the font contains a GDEF table, that is used to identify voewls and accents. Otherwise
+ * the character codes are used.
+ *
+ * @param chars - the input character context
+ * @param offset - the offset of the first character to process
+ * @param count - the number of characters to process
+ * @param reverse - <code>TRUE</code> if the glyphs in the glyph array have been reordered
+ * @param glyphs - the input glyph array
+ * @param glyphCount - the number of glyphs
+ * @param positions - the position array, will be updated as needed
+ * @param success - output parameter set to an error code if the operation fails
+ *
+ * @internal
+ */
+ virtual void adjustGlyphPositions(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool reverse, LEGlyphStorage &glyphStorage, LEErrorCode &success);
+
+ // static void adjustMarkGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool rightToLeft, LEGlyphStorage &glyphStorage, LEErrorCode &success);
+
+};
+
+/**
+ * The class implements OpenType layout for Arabic fonts which don't
+ * contain a GSUB table, using a canned GSUB table based on Unicode
+ * Arabic Presentation Forms. It overrides the mapCharsToGlyphs method
+ * to use the Presentation Forms as logical glyph indices. It overrides the
+ * glyphPostProcessing method to convert the Presentation Forms to actual
+ * glyph indices.
+ *
+ * @see ArabicOpenTypeLayoutEngine
+ *
+ * @internal
+ */
+class UnicodeArabicOpenTypeLayoutEngine : public ArabicOpenTypeLayoutEngine
+{
+public:
+ /**
+ * This constructs an instance of UnicodeArabicOpenTypeLayoutEngine for a specific font,
+ * script and language.
+ *
+ * @param fontInstance - the font
+ * @param scriptCode - the script
+ * @param languageCode - the language
+ * @param success - set to an error code if the operation fails
+ *
+ * @see LEFontInstance
+ * @see ScriptAndLanguageTags.h for script and language codes
+ *
+ * @internal
+ */
+ UnicodeArabicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
+ le_int32 typoFlags, LEErrorCode &success);
+
+ /**
+ * The destructor, virtual for correct polymorphic invocation.
+ *
+ * @internal
+ */
+ virtual ~UnicodeArabicOpenTypeLayoutEngine();
+
+protected:
+
+ /**
+ * This method converts the Arabic Presentation Forms in the temp glyph array
+ * into actual glyph indices using ArabicOpenTypeLayoutEngine::mapCharsToGlyps.
+ *
+ * Input paramters:
+ * @param tempGlyphs - the input presentation forms
+ * @param tempCharIndices - the input character index array
+ * @param tempGlyphCount - the number of Presentation Froms
+ *
+ * Output parameters:
+ * @param glyphs - the output glyph index array
+ * @param charIndices - the output character index array
+ * @param success - set to an error code if the operation fails
+ *
+ * @return the number of glyph indices in the output glyph index array
+ *
+ * @internal
+ */
+ virtual le_int32 glyphPostProcessing(LEGlyphStorage &tempGlyphStorage, LEGlyphStorage &glyphStorage, LEErrorCode &success);
+
+ /**
+ * This method copies the input characters into the output glyph index array,
+ * for use by the canned GSUB table. It also generates the character index array.
+ *
+ * Input parameters:
+ * @param chars - the input character context
+ * @param offset - the offset of the first character to be mapped
+ * @param count - the number of characters to be mapped
+ * @param reverse - if <code>TRUE</code>, the output will be in reverse order
+ * @param mirror - if <code>TRUE</code>, do character mirroring
+ * @param glyphStorage - the glyph storage object. Glyph and char index arrays will be updated.
+ *
+ * @param success - set to an error code if the operation fails
+ *
+ * @internal
+ */
+ virtual void mapCharsToGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool reverse, le_bool mirror,
+ LEGlyphStorage &glyphStorage, LEErrorCode &success);
+
+ /**
+ * This method ensures that all vowel and accent glyphs have a zero advance width by calling
+ * the adjustMarkGlyphs method. The character codes are used to identify the vowel and mark
+ * glyphs.
+ *
+ * @param chars - the input character context
+ * @param offset - the offset of the first character to process
+ * @param count - the number of characters to process
+ * @param reverse - <code>TRUE</code> if the glyphs in the glyph array have been reordered
+ * @param glyphStorage - the glyph storage object. The glyph positions will be updated as needed.
+ * @param success - output parameter set to an error code if the operation fails
+ *
+ * @internal
+ */
+ virtual void adjustGlyphPositions(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool reverse, LEGlyphStorage &glyphStorage, LEErrorCode &success);
+};
+
+U_NAMESPACE_END
+#endif
+
diff --git a/Build/source/libs/icu/icu-50.1/layout/ArabicShaping.cpp b/Build/source/libs/icu/icu-50.1/layout/ArabicShaping.cpp
new file mode 100644
index 00000000000..5433305e9fb
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/ArabicShaping.cpp
@@ -0,0 +1,272 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2008 - All Rights Reserved
+ *
+ */
+
+#include "LETypes.h"
+#include "OpenTypeTables.h"
+#include "ArabicShaping.h"
+#include "LEGlyphStorage.h"
+#include "ClassDefinitionTables.h"
+
+U_NAMESPACE_BEGIN
+
+// This table maps Unicode joining types to
+// ShapeTypes.
+const ArabicShaping::ShapeType ArabicShaping::shapeTypes[] =
+{
+ ArabicShaping::ST_NOSHAPE_NONE, // [U]
+ ArabicShaping::ST_NOSHAPE_DUAL, // [C]
+ ArabicShaping::ST_DUAL, // [D]
+ ArabicShaping::ST_LEFT, // [L]
+ ArabicShaping::ST_RIGHT, // [R]
+ ArabicShaping::ST_TRANSPARENT // [T]
+};
+
+// Draft Mongolian shaping classes, not provided by the Unicode data files at this time
+enum {
+ _c_ = ArabicShaping::ST_NOSHAPE_DUAL,
+ _d_ = ArabicShaping::ST_DUAL,
+ _n_ = ArabicShaping::ST_NONE,
+ _r_ = ArabicShaping::ST_RIGHT,
+ _t_ = ArabicShaping::ST_TRANSPARENT,
+ _x_ = ArabicShaping::ST_NOSHAPE_NONE
+};
+
+const ArabicShaping::ShapeType ArabicShaping::mongolianTypes[] =
+{
+ _n_, _n_, _n_, _n_, _n_, _n_, _n_, _n_, _n_, _n_, _n_, _t_, _t_, _t_, _t_, _n_, // 0x1800 - 0x180f
+ _n_, _n_, _n_, _n_, _n_, _n_, _n_, _n_, _n_, _n_, _n_, _n_, _n_, _n_, _n_, _n_, // 0x1810 - 0x181f
+ _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, // 0x1820 - 0x182f
+ _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, // 0x1830 - 0x183f
+ _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, // 0x1840 - 0x184f
+ _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, // 0x1850 - 0x185f
+ _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, // 0x1860 - 0x186f
+ _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _n_, _n_, _n_, _n_, _n_, _n_, _n_, _n_, // 0x1870 - 0x187f
+ _n_, _n_, _n_, _n_, _n_, _n_, _n_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, // 0x1880 - 0x188f
+ _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, // 0x1890 - 0x189f
+ _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _d_, _t_, _n_, _n_, _n_, _n_, _n_, _n_ // 0x18a0 - 0x18af
+};
+
+/*
+ shaping array holds types for Arabic chars between 0610 and 0700
+ other values are either unshaped, or transparent if a mark or format
+ code, except for format codes 200c (zero-width non-joiner) and 200d
+ (dual-width joiner) which are both unshaped and non_joining or
+ dual-joining, respectively.
+*/
+ArabicShaping::ShapeType ArabicShaping::getShapeType(LEUnicode c)
+{
+ const ClassDefinitionTable *joiningTypes = (const ClassDefinitionTable *) ArabicShaping::shapingTypeTable;
+ le_int32 joiningType = joiningTypes->getGlyphClass(c);
+
+ if (joiningType == ArabicShaping::JT_RIGHT_JOINING) { // check for Syriac exceptions ALAPH, DALATH, RISH
+ if (c == 0x0710)
+ return ArabicShaping::ST_ALAPH;
+ if (c == 0x0715 || c == 0x0716 || c == 0x072A || c == 0x072F)
+ return ArabicShaping::ST_DALATH_RISH;
+ }
+
+ if (joiningType == 0) { // check for Mongolian range, not supported by ArabicShaping::shapingTypeTable
+ if (c >= 0x1800 && c <= 0x18af)
+ return ArabicShaping::mongolianTypes[c - 0x1800];
+ }
+
+ if (joiningType >= 0 && joiningType < ArabicShaping::JT_COUNT) {
+ return ArabicShaping::shapeTypes[joiningType];
+ }
+
+ return ArabicShaping::ST_NOSHAPE_NONE;
+}
+
+#define isolFeatureTag LE_ISOL_FEATURE_TAG
+#define initFeatureTag LE_INIT_FEATURE_TAG
+#define mediFeatureTag LE_MEDI_FEATURE_TAG
+#define med2FeatureTag LE_MED2_FEATURE_TAG
+#define finaFeatureTag LE_FINA_FEATURE_TAG
+#define fin2FeatureTag LE_FIN2_FEATURE_TAG
+#define fin3FeatureTag LE_FIN3_FEATURE_TAG
+#define ligaFeatureTag LE_LIGA_FEATURE_TAG
+#define msetFeatureTag LE_MSET_FEATURE_TAG
+#define markFeatureTag LE_MARK_FEATURE_TAG
+#define ccmpFeatureTag LE_CCMP_FEATURE_TAG
+#define rligFeatureTag LE_RLIG_FEATURE_TAG
+#define caltFeatureTag LE_CALT_FEATURE_TAG
+#define dligFeatureTag LE_DLIG_FEATURE_TAG
+#define cswhFeatureTag LE_CSWH_FEATURE_TAG
+#define cursFeatureTag LE_CURS_FEATURE_TAG
+#define kernFeatureTag LE_KERN_FEATURE_TAG
+#define mkmkFeatureTag LE_MKMK_FEATURE_TAG
+
+// NOTE:
+// The isol, fina, init and medi features must be
+// defined in the above order, and have masks that
+// are all in the same byte.
+#define isolFeatureMask 0x80000000UL
+#define finaFeatureMask 0x40000000UL
+#define initFeatureMask 0x20000000UL
+#define mediFeatureMask 0x10000000UL
+#define fin2FeatureMask 0x08000000UL
+#define fin3FeatureMask 0x04000000UL
+#define med2FeatureMask 0x03000000UL /* two bits, from shifting either fin2 or fin3 */
+
+#define ccmpFeatureMask 0x00800000UL
+#define rligFeatureMask 0x00400000UL
+#define caltFeatureMask 0x00200000UL
+#define ligaFeatureMask 0x00100000UL
+#define dligFeatureMask 0x00080000UL
+#define cswhFeatureMask 0x00040000UL
+#define msetFeatureMask 0x00020000UL
+#define cursFeatureMask 0x00010000UL
+#define kernFeatureMask 0x00008000UL
+#define markFeatureMask 0x00004000UL
+#define mkmkFeatureMask 0x00002000UL
+
+#define NO_FEATURES 0
+#define ISOL_FEATURES (isolFeatureMask | ligaFeatureMask | msetFeatureMask | markFeatureMask | ccmpFeatureMask | rligFeatureMask | caltFeatureMask | dligFeatureMask | cswhFeatureMask | cursFeatureMask | kernFeatureMask | mkmkFeatureMask)
+
+#define SHAPE_MASK 0xFF000000UL
+
+static const FeatureMap featureMap[] = {
+ {ccmpFeatureTag, ccmpFeatureMask},
+ {isolFeatureTag, isolFeatureMask},
+ {finaFeatureTag, finaFeatureMask},
+ {fin2FeatureTag, fin2FeatureMask},
+ {fin3FeatureTag, fin3FeatureMask},
+ {mediFeatureTag, mediFeatureMask},
+ {med2FeatureTag, med2FeatureMask},
+ {initFeatureTag, initFeatureMask},
+ {rligFeatureTag, rligFeatureMask},
+ {caltFeatureTag, caltFeatureMask},
+ {ligaFeatureTag, ligaFeatureMask},
+ {dligFeatureTag, dligFeatureMask},
+ {cswhFeatureTag, cswhFeatureMask},
+ {msetFeatureTag, msetFeatureMask},
+ {cursFeatureTag, cursFeatureMask},
+ {kernFeatureTag, kernFeatureMask},
+ {markFeatureTag, markFeatureMask},
+ {mkmkFeatureTag, mkmkFeatureMask}
+};
+
+const FeatureMap *ArabicShaping::getFeatureMap(le_int32 &count)
+{
+ count = LE_ARRAY_SIZE(featureMap);
+
+ return featureMap;
+}
+
+void ArabicShaping::adjustTags(le_int32 outIndex, le_int32 shapeOffset, LEGlyphStorage &glyphStorage)
+{
+ LEErrorCode success = LE_NO_ERROR;
+ FeatureMask featureMask = (FeatureMask) glyphStorage.getAuxData(outIndex, success);
+ FeatureMask shape = featureMask & SHAPE_MASK;
+
+ shape >>= shapeOffset;
+
+ glyphStorage.setAuxData(outIndex, ((featureMask & ~SHAPE_MASK) | shape), success);
+}
+
+void ArabicShaping::shape(const LEUnicode *chars, le_int32 offset, le_int32 charCount, le_int32 charMax,
+ le_bool rightToLeft, LEGlyphStorage &glyphStorage)
+{
+ // iterate in logical order, store tags in visible order
+ //
+ // the effective right char is the most recently encountered
+ // non-transparent char
+ //
+ // four boolean states:
+ // the effective right char shapes
+ // the effective right char causes left shaping
+ // the current char shapes
+ // the current char causes right shaping
+ //
+ // if both cause shaping, then
+ // shaper.shape(errout, 2) (isolate to initial, or final to medial)
+ // shaper.shape(out, 1) (isolate to final)
+
+ // special cases for Syriac ALAPH:
+ // final ALAPH is fin2 when effective right char shapes but does not cause left shaping, and is not DALATH/RISH
+ // final ALAPH is fin3 when effective right char is DALATH/RISH
+ // medial ALAPH is med2 when effective right char shapes but does not cause left shaping
+ // using one of:
+ // shaper.shape(out, 4) (isolate to fin2)
+ // shaper.shape(out, 5) (isolate to fin3)
+
+ ShapeType rightType = ST_NOSHAPE_NONE, leftType = ST_NOSHAPE_NONE;
+ LEErrorCode success = LE_NO_ERROR;
+ le_int32 i;
+
+ for (i = offset - 1; i >= 0; i -= 1) {
+ rightType = getShapeType(chars[i]);
+
+ if (rightType != ST_TRANSPARENT) {
+ break;
+ }
+ }
+
+ for (i = offset + charCount; i < charMax; i += 1) {
+ leftType = getShapeType(chars[i]);
+
+ if (leftType != ST_TRANSPARENT) {
+ break;
+ }
+ }
+
+ // erout is effective right logical index
+ le_int32 erout = -1;
+ le_bool rightShapes = FALSE;
+ le_bool rightCauses = (rightType & MASK_SHAPE_LEFT) != 0;
+ le_int32 in, e, out = 0, dir = 1;
+
+ if (rightToLeft) {
+ out = charCount - 1;
+ erout = charCount;
+ dir = -1;
+ }
+
+ for (in = offset, e = offset + charCount; in < e; in += 1, out += dir) {
+ LEUnicode c = chars[in];
+ ShapeType t = getShapeType(c);
+
+ if (t == ST_NOSHAPE_NONE) {
+ glyphStorage.setAuxData(out, NO_FEATURES, success);
+ } else {
+ glyphStorage.setAuxData(out, ISOL_FEATURES, success);
+ }
+
+ if ((t & MASK_TRANSPARENT) != 0) {
+ continue;
+ }
+
+ le_bool curShapes = (t & MASK_NOSHAPE) == 0;
+ le_bool curCauses = (t & MASK_SHAPE_RIGHT) != 0;
+
+ if (rightCauses && curCauses) {
+ if (rightShapes) {
+ adjustTags(erout, 2, glyphStorage);
+ }
+
+ if (curShapes) {
+ adjustTags(out, 1, glyphStorage);
+ }
+ } else if (t == ST_ALAPH) {
+ if (rightType == ST_DALATH_RISH) {
+ adjustTags(out, 5, glyphStorage);
+ } else if (rightShapes && !rightCauses) {
+ adjustTags(out, 4, glyphStorage);
+ }
+ }
+
+ rightShapes = curShapes;
+ rightCauses = (t & MASK_SHAPE_LEFT) != 0;
+ rightType = t; // remember this; might need to know if it was DALATH/RISH
+ erout = out;
+ }
+
+ if (rightShapes && rightCauses && (leftType & MASK_SHAPE_RIGHT) != 0) {
+ adjustTags(erout, 2, glyphStorage);
+ }
+}
+
+U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-50.1/layout/ArabicShaping.h b/Build/source/libs/icu/icu-50.1/layout/ArabicShaping.h
new file mode 100644
index 00000000000..e90cee000a5
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/ArabicShaping.h
@@ -0,0 +1,83 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
+ *
+ */
+
+#ifndef __ARABICSHAPING_H
+#define __ARABICSHAPING_H
+
+/**
+ * \file
+ * \internal
+ */
+
+#include "LETypes.h"
+#include "OpenTypeTables.h"
+
+U_NAMESPACE_BEGIN
+
+class LEGlyphStorage;
+
+class ArabicShaping /* not : public UObject because all methods are static */ {
+public:
+ // Joining types
+ enum JoiningTypes
+ {
+ JT_NON_JOINING = 0,
+ JT_JOIN_CAUSING = 1,
+ JT_DUAL_JOINING = 2,
+ JT_LEFT_JOINING = 3,
+ JT_RIGHT_JOINING = 4,
+ JT_TRANSPARENT = 5,
+ JT_COUNT = 6
+ };
+
+ // shaping bit masks
+ enum ShapingBitMasks
+ {
+ MASK_SHAPE_RIGHT = 1, // if this bit set, shapes to right
+ MASK_SHAPE_LEFT = 2, // if this bit set, shapes to left
+ MASK_TRANSPARENT = 4, // if this bit set, is transparent (ignore other bits)
+ MASK_NOSHAPE = 8, // if this bit set, don't shape this char, i.e. tatweel
+
+ MASK_ALAPH = 16, // if this bit set, char is Syriac ALAPH
+ MASK_DALATH_RISH = 32 // if this bit set, char is Syriac DALATH/RISH
+ };
+
+ // shaping values
+ enum ShapeTypeValues
+ {
+ ST_NONE = 0,
+ ST_RIGHT = MASK_SHAPE_RIGHT,
+ ST_LEFT = MASK_SHAPE_LEFT,
+ ST_DUAL = MASK_SHAPE_RIGHT | MASK_SHAPE_LEFT,
+ ST_TRANSPARENT = MASK_TRANSPARENT,
+ ST_NOSHAPE_DUAL = MASK_NOSHAPE | ST_DUAL,
+ ST_NOSHAPE_NONE = MASK_NOSHAPE,
+ ST_ALAPH = MASK_ALAPH | MASK_SHAPE_RIGHT,
+ ST_DALATH_RISH = MASK_DALATH_RISH | MASK_SHAPE_RIGHT
+ };
+
+ typedef le_int32 ShapeType;
+
+ static void shape(const LEUnicode *chars, le_int32 offset, le_int32 charCount, le_int32 charMax,
+ le_bool rightToLeft, LEGlyphStorage &glyphStorage);
+
+ static const FeatureMap *getFeatureMap(le_int32 &count);
+
+private:
+ // forbid instantiation
+ ArabicShaping();
+
+ static ShapeType getShapeType(LEUnicode c);
+
+ static const le_uint8 shapingTypeTable[];
+ static const ShapeType shapeTypes[];
+ static const ShapeType mongolianTypes[];
+
+ static void adjustTags(le_int32 outIndex, le_int32 shapeOffset, LEGlyphStorage &glyphStorage);
+};
+
+U_NAMESPACE_END
+#endif
diff --git a/Build/source/libs/icu/icu-50.1/layout/AttachmentPosnSubtables.h b/Build/source/libs/icu/icu-50.1/layout/AttachmentPosnSubtables.h
new file mode 100644
index 00000000000..7f8406dc19f
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/AttachmentPosnSubtables.h
@@ -0,0 +1,42 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
+ *
+ */
+
+#ifndef __ATTACHMENTPOSITIONINGSUBTABLES_H
+#define __ATTACHMENTPOSITIONINGSUBTABLES_H
+
+/**
+ * \file
+ * \internal
+ */
+
+#include "LETypes.h"
+#include "OpenTypeTables.h"
+#include "GlyphPositioningTables.h"
+#include "ValueRecords.h"
+#include "GlyphIterator.h"
+
+U_NAMESPACE_BEGIN
+
+struct AttachmentPositioningSubtable : GlyphPositioningSubtable
+{
+ Offset baseCoverageTableOffset;
+ le_uint16 classCount;
+ Offset markArrayOffset;
+ Offset baseArrayOffset;
+
+ inline le_int32 getBaseCoverage(LEGlyphID baseGlyphId) const;
+
+ le_uint32 process(GlyphIterator *glyphIterator) const;
+};
+
+inline le_int32 AttachmentPositioningSubtable::getBaseCoverage(LEGlyphID baseGlyphID) const
+{
+ return getGlyphCoverage(baseCoverageTableOffset, baseGlyphID);
+}
+
+U_NAMESPACE_END
+#endif
+
diff --git a/Build/source/libs/icu/icu-50.1/layout/CanonData.cpp b/Build/source/libs/icu/icu-50.1/layout/CanonData.cpp
new file mode 100644
index 00000000000..f4fe33bb47a
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/CanonData.cpp
@@ -0,0 +1,3619 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2008. All Rights Reserved.
+ *
+ * WARNING: THIS FILE IS MACHINE GENERATED. DO NOT HAND EDIT IT UNLESS
+ * YOU REALLY KNOW WHAT YOU'RE DOING.
+ *
+ * Generated on: 03/12/2008 03:14:34 PM HST
+ */
+
+#include "LETypes.h"
+#include "CanonShaping.h"
+
+U_NAMESPACE_BEGIN
+
+const le_uint8 CanonShaping::glyphSubstitutionTable[] = {
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x0A, 0x01, 0x34, 0x02, 0x46, 0x00, 0x10, 0x61, 0x72, 0x61, 0x62,
+ 0x00, 0x62, 0x62, 0x61, 0x6C, 0x69, 0x00, 0x76, 0x62, 0x65, 0x6E, 0x67, 0x00, 0x82, 0x63, 0x79,
+ 0x72, 0x6C, 0x00, 0x8E, 0x64, 0x65, 0x76, 0x61, 0x00, 0x9A, 0x67, 0x72, 0x65, 0x6B, 0x00, 0xA6,
+ 0x68, 0x69, 0x72, 0x61, 0x00, 0xB2, 0x6B, 0x61, 0x6E, 0x61, 0x00, 0xBE, 0x6B, 0x6E, 0x64, 0x61,
+ 0x00, 0xCA, 0x6C, 0x61, 0x74, 0x6E, 0x00, 0xD6, 0x6D, 0x6C, 0x79, 0x6D, 0x00, 0xE2, 0x6D, 0x79,
+ 0x6D, 0x72, 0x00, 0xEE, 0x6F, 0x72, 0x79, 0x61, 0x00, 0xFA, 0x73, 0x69, 0x6E, 0x68, 0x01, 0x06,
+ 0x74, 0x61, 0x6D, 0x6C, 0x01, 0x12, 0x74, 0x65, 0x6C, 0x75, 0x01, 0x1E, 0x00, 0x04, 0x00, 0x00,
+ 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x05, 0x00, 0x00, 0x00, 0x11, 0x00, 0x13, 0x00, 0x10, 0x00, 0x12,
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x01, 0x00, 0x0F, 0x00, 0x04, 0x00, 0x00,
+ 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x01, 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF,
+ 0x00, 0x01, 0x00, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x01, 0x00, 0x03,
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x01, 0x00, 0x04, 0x00, 0x04, 0x00, 0x00,
+ 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x01, 0x00, 0x05, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF,
+ 0x00, 0x01, 0x00, 0x07, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x01, 0x00, 0x06,
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x01, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00,
+ 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x01, 0x00, 0x09, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF,
+ 0x00, 0x01, 0x00, 0x0A, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x01, 0x00, 0x0B,
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x01, 0x00, 0x0C, 0x00, 0x04, 0x00, 0x00,
+ 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x01, 0x00, 0x0D, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF,
+ 0x00, 0x01, 0x00, 0x0E, 0x00, 0x14, 0x63, 0x63, 0x6D, 0x70, 0x00, 0x7A, 0x63, 0x63, 0x6D, 0x70,
+ 0x00, 0x82, 0x63, 0x63, 0x6D, 0x70, 0x00, 0x8A, 0x63, 0x63, 0x6D, 0x70, 0x00, 0x92, 0x63, 0x63,
+ 0x6D, 0x70, 0x00, 0x9A, 0x63, 0x63, 0x6D, 0x70, 0x00, 0xA2, 0x63, 0x63, 0x6D, 0x70, 0x00, 0xAA,
+ 0x63, 0x63, 0x6D, 0x70, 0x00, 0xB2, 0x63, 0x63, 0x6D, 0x70, 0x00, 0xBA, 0x63, 0x63, 0x6D, 0x70,
+ 0x00, 0xC2, 0x63, 0x63, 0x6D, 0x70, 0x00, 0xCA, 0x63, 0x63, 0x6D, 0x70, 0x00, 0xD2, 0x63, 0x63,
+ 0x6D, 0x70, 0x00, 0xDA, 0x63, 0x63, 0x6D, 0x70, 0x00, 0xE2, 0x63, 0x63, 0x6D, 0x70, 0x00, 0xEA,
+ 0x63, 0x63, 0x6D, 0x70, 0x00, 0xF2, 0x66, 0x69, 0x6E, 0x61, 0x00, 0xFA, 0x69, 0x6E, 0x69, 0x74,
+ 0x01, 0x00, 0x6C, 0x69, 0x67, 0x61, 0x01, 0x06, 0x6D, 0x65, 0x64, 0x69, 0x01, 0x0C, 0x00, 0x00,
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x06, 0x00, 0x07, 0x00, 0x00,
+ 0x00, 0x02, 0x00, 0x08, 0x00, 0x09, 0x00, 0x00, 0x00, 0x02, 0x00, 0x0A, 0x00, 0x0B, 0x00, 0x00,
+ 0x00, 0x02, 0x00, 0x0C, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x02, 0x00, 0x0E, 0x00, 0x0F, 0x00, 0x00,
+ 0x00, 0x02, 0x00, 0x10, 0x00, 0x11, 0x00, 0x00, 0x00, 0x02, 0x00, 0x12, 0x00, 0x13, 0x00, 0x00,
+ 0x00, 0x02, 0x00, 0x14, 0x00, 0x15, 0x00, 0x00, 0x00, 0x02, 0x00, 0x16, 0x00, 0x17, 0x00, 0x00,
+ 0x00, 0x02, 0x00, 0x18, 0x00, 0x19, 0x00, 0x00, 0x00, 0x02, 0x00, 0x1A, 0x00, 0x1B, 0x00, 0x00,
+ 0x00, 0x02, 0x00, 0x1C, 0x00, 0x1D, 0x00, 0x00, 0x00, 0x02, 0x00, 0x1E, 0x00, 0x1F, 0x00, 0x00,
+ 0x00, 0x02, 0x00, 0x20, 0x00, 0x21, 0x00, 0x00, 0x00, 0x02, 0x00, 0x22, 0x00, 0x23, 0x00, 0x00,
+ 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x05,
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0x00, 0x24, 0x00, 0x4A, 0x00, 0xC0, 0x01, 0x22, 0x01, 0xEC,
+ 0x02, 0xB6, 0x03, 0xF0, 0x14, 0xFE, 0x15, 0x26, 0x15, 0x4C, 0x17, 0xFE, 0x1A, 0x74, 0x1A, 0xB0,
+ 0x1A, 0xE0, 0x4E, 0xDA, 0x8B, 0xBC, 0x8D, 0x2A, 0x8E, 0x4A, 0x8E, 0xA0, 0x8E, 0xFC, 0x90, 0xA2,
+ 0x91, 0xEA, 0xB1, 0xA2, 0xD5, 0x1E, 0xD5, 0x54, 0xD5, 0x84, 0xD5, 0xA4, 0xD5, 0xC0, 0xD5, 0xF0,
+ 0xD6, 0x20, 0xD6, 0x68, 0xD6, 0xBA, 0xD6, 0xFE, 0xD7, 0x38, 0xD7, 0x58, 0xD7, 0x74, 0xD8, 0x20,
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01, 0x00, 0x5E, 0x00, 0x06, 0x00, 0x12,
+ 0x00, 0x2C, 0x00, 0x36, 0x00, 0x40, 0x00, 0x4A, 0x00, 0x54, 0x00, 0x03, 0x00, 0x08, 0x00, 0x0E,
+ 0x00, 0x14, 0x06, 0x22, 0x00, 0x02, 0x06, 0x53, 0x06, 0x23, 0x00, 0x02, 0x06, 0x54, 0x06, 0x25,
+ 0x00, 0x02, 0x06, 0x55, 0x00, 0x01, 0x00, 0x04, 0x06, 0x24, 0x00, 0x02, 0x06, 0x54, 0x00, 0x01,
+ 0x00, 0x04, 0x06, 0x26, 0x00, 0x02, 0x06, 0x54, 0x00, 0x01, 0x00, 0x04, 0x06, 0xC2, 0x00, 0x02,
+ 0x06, 0x54, 0x00, 0x01, 0x00, 0x04, 0x06, 0xD3, 0x00, 0x02, 0x06, 0x54, 0x00, 0x01, 0x00, 0x04,
+ 0x06, 0xC0, 0x00, 0x02, 0x06, 0x54, 0x00, 0x01, 0x00, 0x06, 0x06, 0x27, 0x06, 0x48, 0x06, 0x4A,
+ 0x06, 0xC1, 0x06, 0xD2, 0x06, 0xD5, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01,
+ 0x00, 0x46, 0x00, 0x08, 0x00, 0x16, 0x00, 0x1C, 0x00, 0x22, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x34,
+ 0x00, 0x3A, 0x00, 0x40, 0x00, 0x02, 0x06, 0x27, 0x06, 0x53, 0x00, 0x02, 0x06, 0x27, 0x06, 0x54,
+ 0x00, 0x02, 0x06, 0x48, 0x06, 0x54, 0x00, 0x02, 0x06, 0x27, 0x06, 0x55, 0x00, 0x02, 0x06, 0x4A,
+ 0x06, 0x54, 0x00, 0x02, 0x06, 0xD5, 0x06, 0x54, 0x00, 0x02, 0x06, 0xC1, 0x06, 0x54, 0x00, 0x02,
+ 0x06, 0xD2, 0x06, 0x54, 0x00, 0x01, 0x00, 0x08, 0x06, 0x22, 0x06, 0x23, 0x06, 0x24, 0x06, 0x25,
+ 0x06, 0x26, 0x06, 0xC0, 0x06, 0xC2, 0x06, 0xD3, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08,
+ 0x00, 0x02, 0x00, 0x62, 0x00, 0x2E, 0xFE, 0x8B, 0xFE, 0x91, 0xFE, 0x97, 0xFE, 0x9B, 0xFE, 0x9F,
+ 0xFE, 0xA3, 0xFE, 0xA7, 0xFE, 0xB3, 0xFE, 0xB7, 0xFE, 0xBB, 0xFE, 0xBF, 0xFE, 0xC3, 0xFE, 0xC7,
+ 0xFE, 0xCB, 0xFE, 0xCF, 0xFE, 0xD3, 0xFE, 0xD7, 0xFE, 0xDB, 0xFE, 0xDF, 0xFE, 0xE3, 0xFE, 0xE7,
+ 0xFE, 0xEB, 0xFB, 0xE8, 0xFE, 0xF3, 0xFB, 0x68, 0xFB, 0x60, 0xFB, 0x54, 0xFB, 0x58, 0xFB, 0x64,
+ 0xFB, 0x5C, 0xFB, 0x78, 0xFB, 0x74, 0xFB, 0x7C, 0xFB, 0x80, 0xFB, 0x6C, 0xFB, 0x70, 0xFB, 0x90,
+ 0xFB, 0xD5, 0xFB, 0x94, 0xFB, 0x9C, 0xFB, 0x98, 0xFB, 0xA2, 0xFB, 0xAC, 0xFB, 0xA8, 0xFB, 0xFE,
+ 0xFB, 0xE6, 0x00, 0x01, 0x00, 0x2E, 0x06, 0x26, 0x06, 0x28, 0x06, 0x2A, 0x06, 0x2B, 0x06, 0x2C,
+ 0x06, 0x2D, 0x06, 0x2E, 0x06, 0x33, 0x06, 0x34, 0x06, 0x35, 0x06, 0x36, 0x06, 0x37, 0x06, 0x38,
+ 0x06, 0x39, 0x06, 0x3A, 0x06, 0x41, 0x06, 0x42, 0x06, 0x43, 0x06, 0x44, 0x06, 0x45, 0x06, 0x46,
+ 0x06, 0x47, 0x06, 0x49, 0x06, 0x4A, 0x06, 0x79, 0x06, 0x7A, 0x06, 0x7B, 0x06, 0x7E, 0x06, 0x7F,
+ 0x06, 0x80, 0x06, 0x83, 0x06, 0x84, 0x06, 0x86, 0x06, 0x87, 0x06, 0xA4, 0x06, 0xA6, 0x06, 0xA9,
+ 0x06, 0xAD, 0x06, 0xAF, 0x06, 0xB1, 0x06, 0xB3, 0x06, 0xBB, 0x06, 0xBE, 0x06, 0xC1, 0x06, 0xCC,
+ 0x06, 0xD0, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x02, 0x00, 0x62, 0x00, 0x2E,
+ 0xFE, 0x8C, 0xFE, 0x92, 0xFE, 0x98, 0xFE, 0x9C, 0xFE, 0xA0, 0xFE, 0xA4, 0xFE, 0xA8, 0xFE, 0xB4,
+ 0xFE, 0xB8, 0xFE, 0xBC, 0xFE, 0xC0, 0xFE, 0xC4, 0xFE, 0xC8, 0xFE, 0xCC, 0xFE, 0xD0, 0xFE, 0xD4,
+ 0xFE, 0xD8, 0xFE, 0xDC, 0xFE, 0xE0, 0xFE, 0xE4, 0xFE, 0xE8, 0xFE, 0xEC, 0xFB, 0xE9, 0xFE, 0xF4,
+ 0xFB, 0x69, 0xFB, 0x61, 0xFB, 0x55, 0xFB, 0x59, 0xFB, 0x65, 0xFB, 0x5D, 0xFB, 0x79, 0xFB, 0x75,
+ 0xFB, 0x7D, 0xFB, 0x81, 0xFB, 0x6D, 0xFB, 0x71, 0xFB, 0x91, 0xFB, 0xD6, 0xFB, 0x95, 0xFB, 0x9D,
+ 0xFB, 0x99, 0xFB, 0xA3, 0xFB, 0xAD, 0xFB, 0xA9, 0xFB, 0xFF, 0xFB, 0xE7, 0x00, 0x01, 0x00, 0x2E,
+ 0x06, 0x26, 0x06, 0x28, 0x06, 0x2A, 0x06, 0x2B, 0x06, 0x2C, 0x06, 0x2D, 0x06, 0x2E, 0x06, 0x33,
+ 0x06, 0x34, 0x06, 0x35, 0x06, 0x36, 0x06, 0x37, 0x06, 0x38, 0x06, 0x39, 0x06, 0x3A, 0x06, 0x41,
+ 0x06, 0x42, 0x06, 0x43, 0x06, 0x44, 0x06, 0x45, 0x06, 0x46, 0x06, 0x47, 0x06, 0x49, 0x06, 0x4A,
+ 0x06, 0x79, 0x06, 0x7A, 0x06, 0x7B, 0x06, 0x7E, 0x06, 0x7F, 0x06, 0x80, 0x06, 0x83, 0x06, 0x84,
+ 0x06, 0x86, 0x06, 0x87, 0x06, 0xA4, 0x06, 0xA6, 0x06, 0xA9, 0x06, 0xAD, 0x06, 0xAF, 0x06, 0xB1,
+ 0x06, 0xB3, 0x06, 0xBB, 0x06, 0xBE, 0x06, 0xC1, 0x06, 0xCC, 0x06, 0xD0, 0x00, 0x01, 0x00, 0x00,
+ 0x00, 0x01, 0x00, 0x08, 0x00, 0x02, 0x00, 0x9A, 0x00, 0x4A, 0xFE, 0x82, 0xFE, 0x84, 0xFE, 0x86,
+ 0xFE, 0x88, 0xFE, 0x8A, 0xFE, 0x8E, 0xFE, 0x90, 0xFE, 0x94, 0xFE, 0x96, 0xFE, 0x9A, 0xFE, 0x9E,
+ 0xFE, 0xA2, 0xFE, 0xA6, 0xFE, 0xAA, 0xFE, 0xAC, 0xFE, 0xAE, 0xFE, 0xB0, 0xFE, 0xB2, 0xFE, 0xB6,
+ 0xFE, 0xBA, 0xFE, 0xBE, 0xFE, 0xC2, 0xFE, 0xC6, 0xFE, 0xCA, 0xFE, 0xCE, 0xFE, 0xD2, 0xFE, 0xD6,
+ 0xFE, 0xDA, 0xFE, 0xDE, 0xFE, 0xE2, 0xFE, 0xE6, 0xFE, 0xEA, 0xFE, 0xEE, 0xFE, 0xF0, 0xFE, 0xF2,
+ 0xFB, 0x51, 0xFB, 0x67, 0xFB, 0x5F, 0xFB, 0x53, 0xFB, 0x57, 0xFB, 0x63, 0xFB, 0x5B, 0xFB, 0x77,
+ 0xFB, 0x73, 0xFB, 0x7B, 0xFB, 0x7F, 0xFB, 0x89, 0xFB, 0x85, 0xFB, 0x83, 0xFB, 0x87, 0xFB, 0x8D,
+ 0xFB, 0x8B, 0xFB, 0x6B, 0xFB, 0x6F, 0xFB, 0x8F, 0xFB, 0xD4, 0xFB, 0x93, 0xFB, 0x9B, 0xFB, 0x97,
+ 0xFB, 0x9F, 0xFB, 0xA1, 0xFB, 0xAB, 0xFB, 0xA5, 0xFB, 0xA7, 0xFB, 0xE1, 0xFB, 0xDA, 0xFB, 0xD8,
+ 0xFB, 0xDC, 0xFB, 0xE3, 0xFB, 0xDF, 0xFB, 0xFD, 0xFB, 0xE5, 0xFB, 0xAF, 0xFB, 0xB1, 0x00, 0x01,
+ 0x00, 0x4A, 0x06, 0x22, 0x06, 0x23, 0x06, 0x24, 0x06, 0x25, 0x06, 0x26, 0x06, 0x27, 0x06, 0x28,
+ 0x06, 0x29, 0x06, 0x2A, 0x06, 0x2B, 0x06, 0x2C, 0x06, 0x2D, 0x06, 0x2E, 0x06, 0x2F, 0x06, 0x30,
+ 0x06, 0x31, 0x06, 0x32, 0x06, 0x33, 0x06, 0x34, 0x06, 0x35, 0x06, 0x36, 0x06, 0x37, 0x06, 0x38,
+ 0x06, 0x39, 0x06, 0x3A, 0x06, 0x41, 0x06, 0x42, 0x06, 0x43, 0x06, 0x44, 0x06, 0x45, 0x06, 0x46,
+ 0x06, 0x47, 0x06, 0x48, 0x06, 0x49, 0x06, 0x4A, 0x06, 0x71, 0x06, 0x79, 0x06, 0x7A, 0x06, 0x7B,
+ 0x06, 0x7E, 0x06, 0x7F, 0x06, 0x80, 0x06, 0x83, 0x06, 0x84, 0x06, 0x86, 0x06, 0x87, 0x06, 0x88,
+ 0x06, 0x8C, 0x06, 0x8D, 0x06, 0x8E, 0x06, 0x91, 0x06, 0x98, 0x06, 0xA4, 0x06, 0xA6, 0x06, 0xA9,
+ 0x06, 0xAD, 0x06, 0xAF, 0x06, 0xB1, 0x06, 0xB3, 0x06, 0xBA, 0x06, 0xBB, 0x06, 0xBE, 0x06, 0xC0,
+ 0x06, 0xC1, 0x06, 0xC5, 0x06, 0xC6, 0x06, 0xC7, 0x06, 0xC8, 0x06, 0xC9, 0x06, 0xCB, 0x06, 0xCC,
+ 0x06, 0xD0, 0x06, 0xD2, 0x06, 0xD3, 0x00, 0x04, 0x00, 0x08, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01,
+ 0x10, 0x98, 0x00, 0x35, 0x00, 0x70, 0x00, 0x7A, 0x01, 0x0C, 0x01, 0x86, 0x01, 0xA8, 0x01, 0xB2,
+ 0x02, 0x0C, 0x02, 0x62, 0x03, 0x02, 0x03, 0x8A, 0x03, 0xB4, 0x03, 0xF6, 0x04, 0x46, 0x04, 0x8A,
+ 0x04, 0xBC, 0x04, 0xEC, 0x05, 0x26, 0x05, 0x38, 0x05, 0x42, 0x05, 0x64, 0x05, 0xF8, 0x06, 0x6C,
+ 0x06, 0xEC, 0x07, 0x80, 0x08, 0x1E, 0x08, 0x56, 0x08, 0xBA, 0x08, 0xF2, 0x09, 0x38, 0x09, 0x66,
+ 0x09, 0x78, 0x09, 0x82, 0x09, 0xD4, 0x0A, 0x0E, 0x0A, 0x40, 0x0A, 0x70, 0x0A, 0xCC, 0x0A, 0xF2,
+ 0x0B, 0x38, 0x0B, 0x68, 0x0B, 0xDC, 0x0C, 0x2A, 0x0C, 0xD6, 0x0D, 0x72, 0x0E, 0x16, 0x0E, 0x50,
+ 0x0E, 0xC8, 0x0F, 0x5A, 0x0F, 0xA8, 0x0F, 0xB6, 0x0F, 0xC0, 0x0F, 0xCA, 0x10, 0x2E, 0x00, 0x01,
+ 0x00, 0x04, 0xFB, 0xDD, 0x00, 0x02, 0x06, 0x74, 0x00, 0x12, 0x00, 0x26, 0x00, 0x2C, 0x00, 0x32,
+ 0x00, 0x38, 0x00, 0x3E, 0x00, 0x44, 0x00, 0x4A, 0x00, 0x50, 0x00, 0x56, 0x00, 0x5C, 0x00, 0x62,
+ 0x00, 0x68, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x7A, 0x00, 0x80, 0x00, 0x86, 0x00, 0x8C, 0xFB, 0xEC,
+ 0x00, 0x02, 0x00, 0x01, 0xFB, 0xF0, 0x00, 0x02, 0xFB, 0xD8, 0xFB, 0xF2, 0x00, 0x02, 0xFB, 0xDA,
+ 0xFB, 0xF4, 0x00, 0x02, 0xFB, 0xDC, 0xFB, 0xF6, 0x00, 0x02, 0xFB, 0xE5, 0xFB, 0xF8, 0x00, 0x02,
+ 0xFB, 0xE7, 0xFB, 0xEA, 0x00, 0x02, 0xFE, 0x8E, 0xFC, 0x00, 0x00, 0x02, 0xFE, 0x9E, 0xFC, 0x97,
+ 0x00, 0x02, 0xFE, 0xA0, 0xFC, 0x01, 0x00, 0x02, 0xFE, 0xA2, 0xFC, 0x98, 0x00, 0x02, 0xFE, 0xA4,
+ 0xFC, 0x99, 0x00, 0x02, 0xFE, 0xA8, 0xFC, 0x02, 0x00, 0x02, 0xFE, 0xE2, 0xFC, 0x9A, 0x00, 0x02,
+ 0xFE, 0xE4, 0xFC, 0x9B, 0x00, 0x02, 0xFE, 0xEC, 0xFB, 0xEE, 0x00, 0x02, 0xFE, 0xEE, 0xFB, 0xF9,
+ 0x00, 0x02, 0xFE, 0xF0, 0xFB, 0xFB, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x0F, 0x00, 0x20, 0x00, 0x26,
+ 0x00, 0x2C, 0x00, 0x32, 0x00, 0x38, 0x00, 0x3E, 0x00, 0x44, 0x00, 0x4A, 0x00, 0x50, 0x00, 0x56,
+ 0x00, 0x5C, 0x00, 0x62, 0x00, 0x68, 0x00, 0x6E, 0x00, 0x74, 0xFB, 0xED, 0x00, 0x02, 0x00, 0x01,
+ 0xFB, 0xF1, 0x00, 0x02, 0xFB, 0xD8, 0xFB, 0xF3, 0x00, 0x02, 0xFB, 0xDA, 0xFB, 0xF5, 0x00, 0x02,
+ 0xFB, 0xDC, 0xFB, 0xF7, 0x00, 0x02, 0xFB, 0xE5, 0xFB, 0xEB, 0x00, 0x02, 0xFE, 0x8E, 0xFC, 0x64,
+ 0x00, 0x02, 0xFE, 0xAE, 0xFC, 0x65, 0x00, 0x02, 0xFE, 0xB0, 0xFC, 0x66, 0x00, 0x02, 0xFE, 0xE2,
+ 0xFC, 0xDF, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0x67, 0x00, 0x02, 0xFE, 0xE6, 0xFC, 0xE0, 0x00, 0x02,
+ 0xFE, 0xEC, 0xFB, 0xEF, 0x00, 0x02, 0xFE, 0xEE, 0xFB, 0xFA, 0x00, 0x02, 0xFE, 0xF0, 0xFC, 0x69,
+ 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x03, 0x00, 0x08, 0x00, 0x0E, 0x00, 0x18, 0xFD, 0x3D, 0x00, 0x02,
+ 0x06, 0x4B, 0xFD, 0xF3, 0x00, 0x04, 0xFE, 0xDB, 0xFE, 0x92, 0xFE, 0xAE, 0xFD, 0xF2, 0x00, 0x04,
+ 0xFE, 0xDF, 0xFE, 0xE0, 0xFE, 0xEA, 0x00, 0x01, 0x00, 0x04, 0xFD, 0x3C, 0x00, 0x02, 0x06, 0x4B,
+ 0x00, 0x0B, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x00, 0x2A, 0x00, 0x30, 0x00, 0x36, 0x00, 0x3C,
+ 0x00, 0x42, 0x00, 0x48, 0x00, 0x4E, 0x00, 0x54, 0xFC, 0x05, 0x00, 0x02, 0xFE, 0x9E, 0xFC, 0x9C,
+ 0x00, 0x02, 0xFE, 0xA0, 0xFC, 0x06, 0x00, 0x02, 0xFE, 0xA2, 0xFC, 0x9D, 0x00, 0x02, 0xFE, 0xA4,
+ 0xFC, 0x07, 0x00, 0x02, 0xFE, 0xA6, 0xFC, 0x9E, 0x00, 0x02, 0xFE, 0xA8, 0xFC, 0x08, 0x00, 0x02,
+ 0xFE, 0xE2, 0xFC, 0x9F, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0xA0, 0x00, 0x02, 0xFE, 0xEC, 0xFC, 0x09,
+ 0x00, 0x02, 0xFE, 0xF0, 0xFC, 0x0A, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x0A, 0x00, 0x16, 0x00, 0x1E,
+ 0x00, 0x26, 0x00, 0x2C, 0x00, 0x32, 0x00, 0x38, 0x00, 0x3E, 0x00, 0x44, 0x00, 0x4A, 0x00, 0x50,
+ 0xFD, 0xC2, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xF2, 0xFD, 0x9E, 0x00, 0x03, 0xFE, 0xA8, 0xFE, 0xF2,
+ 0xFC, 0x6A, 0x00, 0x02, 0xFE, 0xAE, 0xFC, 0x6B, 0x00, 0x02, 0xFE, 0xB0, 0xFC, 0x6C, 0x00, 0x02,
+ 0xFE, 0xE2, 0xFC, 0xE1, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0x6D, 0x00, 0x02, 0xFE, 0xE6, 0xFC, 0xE2,
+ 0x00, 0x02, 0xFE, 0xEC, 0xFC, 0x6E, 0x00, 0x02, 0xFE, 0xF0, 0xFC, 0x6F, 0x00, 0x02, 0xFE, 0xF2,
+ 0x00, 0x12, 0x00, 0x26, 0x00, 0x2C, 0x00, 0x34, 0x00, 0x3A, 0x00, 0x40, 0x00, 0x48, 0x00, 0x50,
+ 0x00, 0x56, 0x00, 0x5C, 0x00, 0x64, 0x00, 0x6A, 0x00, 0x70, 0x00, 0x78, 0x00, 0x80, 0x00, 0x88,
+ 0x00, 0x8E, 0x00, 0x94, 0x00, 0x9A, 0xFC, 0x0B, 0x00, 0x02, 0xFE, 0x9E, 0xFD, 0x50, 0x00, 0x03,
+ 0xFE, 0xA0, 0xFE, 0xE4, 0xFC, 0xA1, 0x00, 0x02, 0xFE, 0xA0, 0xFC, 0x0C, 0x00, 0x02, 0xFE, 0xA2,
+ 0xFD, 0x52, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xA0, 0xFD, 0x53, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xE4,
+ 0xFC, 0xA2, 0x00, 0x02, 0xFE, 0xA4, 0xFC, 0x0D, 0x00, 0x02, 0xFE, 0xA6, 0xFD, 0x54, 0x00, 0x03,
+ 0xFE, 0xA8, 0xFE, 0xE4, 0xFC, 0xA3, 0x00, 0x02, 0xFE, 0xA8, 0xFC, 0x0E, 0x00, 0x02, 0xFE, 0xE2,
+ 0xFD, 0x55, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xA0, 0xFD, 0x56, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xA4,
+ 0xFD, 0x57, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xA8, 0xFC, 0xA4, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0xA5,
+ 0x00, 0x02, 0xFE, 0xEC, 0xFC, 0x0F, 0x00, 0x02, 0xFE, 0xF0, 0xFC, 0x10, 0x00, 0x02, 0xFE, 0xF2,
+ 0x00, 0x0F, 0x00, 0x20, 0x00, 0x28, 0x00, 0x30, 0x00, 0x38, 0x00, 0x40, 0x00, 0x48, 0x00, 0x4E,
+ 0x00, 0x54, 0x00, 0x5A, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x70, 0x00, 0x76, 0x00, 0x7C, 0x00, 0x82,
+ 0xFD, 0xA0, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xF0, 0xFD, 0x9F, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xF2,
+ 0xFD, 0x51, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0x9E, 0xFD, 0xA2, 0x00, 0x03, 0xFE, 0xA8, 0xFE, 0xF0,
+ 0xFD, 0xA1, 0x00, 0x03, 0xFE, 0xA8, 0xFE, 0xF2, 0xFC, 0x70, 0x00, 0x02, 0xFE, 0xAE, 0xFC, 0x71,
+ 0x00, 0x02, 0xFE, 0xB0, 0xFC, 0x72, 0x00, 0x02, 0xFE, 0xE2, 0xFD, 0xA4, 0x00, 0x03, 0xFE, 0xE4,
+ 0xFE, 0xF0, 0xFD, 0xA3, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xF2, 0xFC, 0xE3, 0x00, 0x02, 0xFE, 0xE4,
+ 0xFC, 0x73, 0x00, 0x02, 0xFE, 0xE6, 0xFC, 0xE4, 0x00, 0x02, 0xFE, 0xEC, 0xFC, 0x74, 0x00, 0x02,
+ 0xFE, 0xF0, 0xFC, 0x75, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18,
+ 0x00, 0x1E, 0x00, 0x24, 0xFC, 0x11, 0x00, 0x02, 0xFE, 0x9E, 0xFC, 0x12, 0x00, 0x02, 0xFE, 0xE2,
+ 0xFC, 0xA6, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0x13, 0x00, 0x02, 0xFE, 0xF0, 0xFC, 0x14, 0x00, 0x02,
+ 0xFE, 0xF2, 0x00, 0x08, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x00, 0x2A, 0x00, 0x30,
+ 0x00, 0x36, 0x00, 0x3C, 0xFC, 0x76, 0x00, 0x02, 0xFE, 0xAE, 0xFC, 0x77, 0x00, 0x02, 0xFE, 0xB0,
+ 0xFC, 0x78, 0x00, 0x02, 0xFE, 0xE2, 0xFC, 0xE5, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0x79, 0x00, 0x02,
+ 0xFE, 0xE6, 0xFC, 0xE6, 0x00, 0x02, 0xFE, 0xEC, 0xFC, 0x7A, 0x00, 0x02, 0xFE, 0xF0, 0xFC, 0x7B,
+ 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x08, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x30, 0x00, 0x36,
+ 0x00, 0x3E, 0x00, 0x44, 0x00, 0x4A, 0xFC, 0x15, 0x00, 0x02, 0xFE, 0xA2, 0xFC, 0xA7, 0x00, 0x02,
+ 0xFE, 0xA4, 0xFD, 0xFB, 0x00, 0x08, 0xFE, 0xDE, 0x00, 0x20, 0xFE, 0x9F, 0xFE, 0xE0, 0xFE, 0x8E,
+ 0xFE, 0xDF, 0xFE, 0xEA, 0xFC, 0x16, 0x00, 0x02, 0xFE, 0xE2, 0xFD, 0x59, 0x00, 0x03, 0xFE, 0xE4,
+ 0xFE, 0xA4, 0xFC, 0xA8, 0x00, 0x02, 0xFE, 0xE4, 0xFD, 0x01, 0x00, 0x02, 0xFE, 0xF0, 0xFD, 0x02,
+ 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x07, 0x00, 0x10, 0x00, 0x18, 0x00, 0x20, 0x00, 0x28, 0x00, 0x30,
+ 0x00, 0x38, 0x00, 0x3E, 0xFD, 0xA6, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xF0, 0xFD, 0xBE, 0x00, 0x03,
+ 0xFE, 0xA4, 0xFE, 0xF2, 0xFD, 0x58, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xA2, 0xFD, 0xA7, 0x00, 0x03,
+ 0xFE, 0xE4, 0xFE, 0xF0, 0xFD, 0xA5, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xF2, 0xFD, 0x1D, 0x00, 0x02,
+ 0xFE, 0xF0, 0xFD, 0x1E, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x06, 0x00, 0x0E, 0x00, 0x14, 0x00, 0x1A,
+ 0x00, 0x20, 0x00, 0x26, 0x00, 0x2C, 0xFC, 0x17, 0x00, 0x02, 0xFE, 0x9E, 0xFC, 0xA9, 0x00, 0x02,
+ 0xFE, 0xA0, 0xFC, 0x18, 0x00, 0x02, 0xFE, 0xE2, 0xFC, 0xAA, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0xFF,
+ 0x00, 0x02, 0xFE, 0xF0, 0xFD, 0x00, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x14,
+ 0x00, 0x1C, 0x00, 0x24, 0x00, 0x2A, 0xFD, 0xBF, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xF2, 0xFD, 0x5B,
+ 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xF0, 0xFD, 0x5A, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xF2, 0xFD, 0x1B,
+ 0x00, 0x02, 0xFE, 0xF0, 0xFD, 0x1C, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x07, 0x00, 0x10, 0x00, 0x16,
+ 0x00, 0x1C, 0x00, 0x22, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x34, 0xFC, 0x19, 0x00, 0x02, 0xFE, 0x9E,
+ 0xFC, 0xAB, 0x00, 0x02, 0xFE, 0xA0, 0xFC, 0x1A, 0x00, 0x02, 0xFE, 0xA2, 0xFC, 0x1B, 0x00, 0x02,
+ 0xFE, 0xE2, 0xFC, 0xAC, 0x00, 0x02, 0xFE, 0xE4, 0xFD, 0x03, 0x00, 0x02, 0xFE, 0xF0, 0xFD, 0x04,
+ 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0xFD, 0x1F, 0x00, 0x02, 0xFE, 0xF0,
+ 0xFD, 0x20, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x01, 0x00, 0x04, 0xFC, 0x5B, 0x00, 0x02, 0x06, 0x70,
+ 0x00, 0x03, 0x00, 0x08, 0x00, 0x0E, 0x00, 0x18, 0xFC, 0x5C, 0x00, 0x02, 0x06, 0x70, 0xFD, 0xFC,
+ 0x00, 0x04, 0xFB, 0xFE, 0xFE, 0x8E, 0xFE, 0xDD, 0xFD, 0xF6, 0x00, 0x04, 0xFE, 0xB3, 0xFE, 0xEE,
+ 0xFE, 0xDD, 0x00, 0x11, 0x00, 0x24, 0x00, 0x2A, 0x00, 0x32, 0x00, 0x38, 0x00, 0x3E, 0x00, 0x46,
+ 0x00, 0x4C, 0x00, 0x52, 0x00, 0x58, 0x00, 0x5E, 0x00, 0x64, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x7C,
+ 0x00, 0x82, 0x00, 0x88, 0x00, 0x8E, 0xFC, 0x1C, 0x00, 0x02, 0xFE, 0x9E, 0xFD, 0x5D, 0x00, 0x03,
+ 0xFE, 0xA0, 0xFE, 0xA4, 0xFC, 0xAD, 0x00, 0x02, 0xFE, 0xA0, 0xFC, 0x1D, 0x00, 0x02, 0xFE, 0xA2,
+ 0xFD, 0x5C, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xA0, 0xFC, 0xAE, 0x00, 0x02, 0xFE, 0xA4, 0xFC, 0x1E,
+ 0x00, 0x02, 0xFE, 0xA6, 0xFC, 0xAF, 0x00, 0x02, 0xFE, 0xA8, 0xFD, 0x0E, 0x00, 0x02, 0xFE, 0xAE,
+ 0xFC, 0x1F, 0x00, 0x02, 0xFE, 0xE2, 0xFD, 0x61, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xA0, 0xFD, 0x60,
+ 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xA4, 0xFD, 0x63, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xE4, 0xFC, 0xB0,
+ 0x00, 0x02, 0xFE, 0xE4, 0xFD, 0x31, 0x00, 0x02, 0xFE, 0xEC, 0xFC, 0xFB, 0x00, 0x02, 0xFE, 0xF0,
+ 0xFC, 0xFC, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x0D, 0x00, 0x1C, 0x00, 0x24, 0x00, 0x2A, 0x00, 0x30,
+ 0x00, 0x38, 0x00, 0x40, 0x00, 0x46, 0x00, 0x4C, 0x00, 0x54, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x68,
+ 0x00, 0x6E, 0xFD, 0x5E, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xF0, 0xFD, 0x34, 0x00, 0x02, 0xFE, 0xA0,
+ 0xFD, 0x35, 0x00, 0x02, 0xFE, 0xA4, 0xFD, 0xA8, 0x00, 0x03, 0xFE, 0xA8, 0xFE, 0xF0, 0xFD, 0xC6,
+ 0x00, 0x03, 0xFE, 0xA8, 0xFE, 0xF2, 0xFD, 0x36, 0x00, 0x02, 0xFE, 0xA8, 0xFD, 0x2A, 0x00, 0x02,
+ 0xFE, 0xAE, 0xFD, 0x5F, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xA2, 0xFD, 0x62, 0x00, 0x03, 0xFE, 0xE4,
+ 0xFE, 0xE2, 0xFC, 0xE7, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0xE8, 0x00, 0x02, 0xFE, 0xEC, 0xFD, 0x17,
+ 0x00, 0x02, 0xFE, 0xF0, 0xFD, 0x18, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x0F, 0x00, 0x20, 0x00, 0x26,
+ 0x00, 0x2C, 0x00, 0x32, 0x00, 0x3A, 0x00, 0x40, 0x00, 0x46, 0x00, 0x4C, 0x00, 0x52, 0x00, 0x58,
+ 0x00, 0x60, 0x00, 0x68, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x7A, 0xFD, 0x09, 0x00, 0x02, 0xFE, 0x9E,
+ 0xFD, 0x2D, 0x00, 0x02, 0xFE, 0xA0, 0xFD, 0x0A, 0x00, 0x02, 0xFE, 0xA2, 0xFD, 0x68, 0x00, 0x03,
+ 0xFE, 0xA4, 0xFE, 0xE4, 0xFD, 0x2E, 0x00, 0x02, 0xFE, 0xA4, 0xFD, 0x0B, 0x00, 0x02, 0xFE, 0xA6,
+ 0xFD, 0x2F, 0x00, 0x02, 0xFE, 0xA8, 0xFD, 0x0D, 0x00, 0x02, 0xFE, 0xAE, 0xFD, 0x0C, 0x00, 0x02,
+ 0xFE, 0xE2, 0xFD, 0x6B, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xA8, 0xFD, 0x6D, 0x00, 0x03, 0xFE, 0xE4,
+ 0xFE, 0xE4, 0xFD, 0x30, 0x00, 0x02, 0xFE, 0xE4, 0xFD, 0x32, 0x00, 0x02, 0xFE, 0xEC, 0xFC, 0xFD,
+ 0x00, 0x02, 0xFE, 0xF0, 0xFC, 0xFE, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x11, 0x00, 0x24, 0x00, 0x2A,
+ 0x00, 0x32, 0x00, 0x38, 0x00, 0x3E, 0x00, 0x46, 0x00, 0x4E, 0x00, 0x54, 0x00, 0x5A, 0x00, 0x60,
+ 0x00, 0x66, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x7C, 0x00, 0x82, 0x00, 0x88, 0x00, 0x8E, 0xFD, 0x25,
+ 0x00, 0x02, 0xFE, 0x9E, 0xFD, 0x69, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xF2, 0xFD, 0x37, 0x00, 0x02,
+ 0xFE, 0xA0, 0xFD, 0x26, 0x00, 0x02, 0xFE, 0xA2, 0xFD, 0x67, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xE2,
+ 0xFD, 0xAA, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xF2, 0xFD, 0x38, 0x00, 0x02, 0xFE, 0xA4, 0xFD, 0x27,
+ 0x00, 0x02, 0xFE, 0xA6, 0xFD, 0x39, 0x00, 0x02, 0xFE, 0xA8, 0xFD, 0x29, 0x00, 0x02, 0xFE, 0xAE,
+ 0xFD, 0x28, 0x00, 0x02, 0xFE, 0xE2, 0xFD, 0x6A, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xA6, 0xFD, 0x6C,
+ 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xE2, 0xFC, 0xE9, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0xEA, 0x00, 0x02,
+ 0xFE, 0xEC, 0xFD, 0x19, 0x00, 0x02, 0xFE, 0xF0, 0xFD, 0x1A, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x0E,
+ 0x00, 0x1E, 0x00, 0x24, 0x00, 0x2C, 0x00, 0x32, 0x00, 0x38, 0x00, 0x3E, 0x00, 0x46, 0x00, 0x50,
+ 0x00, 0x76, 0x00, 0x7E, 0x00, 0x84, 0x00, 0x8C, 0x00, 0x92, 0x00, 0x98, 0xFC, 0x20, 0x00, 0x02,
+ 0xFE, 0xA2, 0xFD, 0x65, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xA4, 0xFC, 0xB1, 0x00, 0x02, 0xFE, 0xA4,
+ 0xFC, 0xB2, 0x00, 0x02, 0xFE, 0xA8, 0xFD, 0x0F, 0x00, 0x02, 0xFE, 0xAE, 0xFD, 0xF0, 0x00, 0x03,
+ 0xFE, 0xE0, 0xFB, 0xAF, 0xFD, 0xF5, 0x00, 0x04, 0xFE, 0xE0, 0xFE, 0xCC, 0xFE, 0xE2, 0xFD, 0xFA,
+ 0x00, 0x12, 0xFE, 0xE0, 0xFE, 0xF0, 0x00, 0x20, 0xFE, 0x8D, 0xFE, 0xDF, 0xFE, 0xE0, 0xFE, 0xEA,
+ 0x00, 0x20, 0xFE, 0xCB, 0xFE, 0xE0, 0xFE, 0xF4, 0xFE, 0xEA, 0x00, 0x20, 0xFE, 0xED, 0xFE, 0xB3,
+ 0xFE, 0xE0, 0xFE, 0xE2, 0xFD, 0xF9, 0x00, 0x03, 0xFE, 0xE0, 0xFE, 0xF0, 0xFC, 0x21, 0x00, 0x02,
+ 0xFE, 0xE2, 0xFD, 0xC5, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xE4, 0xFC, 0xB3, 0x00, 0x02, 0xFE, 0xE4,
+ 0xFD, 0x05, 0x00, 0x02, 0xFE, 0xF0, 0xFD, 0x06, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x06, 0x00, 0x0E,
+ 0x00, 0x16, 0x00, 0x1E, 0x00, 0x24, 0x00, 0x2C, 0x00, 0x32, 0xFD, 0x64, 0x00, 0x03, 0xFE, 0xA4,
+ 0xFE, 0xA2, 0xFD, 0xA9, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xF2, 0xFD, 0x2B, 0x00, 0x02, 0xFE, 0xAE,
+ 0xFD, 0x66, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xE2, 0xFD, 0x21, 0x00, 0x02, 0xFE, 0xF0, 0xFD, 0x22,
+ 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x0C, 0x00, 0x1A, 0x00, 0x20, 0x00, 0x26, 0x00, 0x2C, 0x00, 0x32,
+ 0x00, 0x38, 0x00, 0x40, 0x00, 0x46, 0x00, 0x4C, 0x00, 0x52, 0x00, 0x58, 0x00, 0x5E, 0xFC, 0x22,
+ 0x00, 0x02, 0xFE, 0x9E, 0xFC, 0xB4, 0x00, 0x02, 0xFE, 0xA0, 0xFC, 0x23, 0x00, 0x02, 0xFE, 0xA2,
+ 0xFC, 0xB5, 0x00, 0x02, 0xFE, 0xA4, 0xFC, 0x24, 0x00, 0x02, 0xFE, 0xA6, 0xFD, 0x70, 0x00, 0x03,
+ 0xFE, 0xA8, 0xFE, 0xE4, 0xFC, 0xB6, 0x00, 0x02, 0xFE, 0xA8, 0xFD, 0x10, 0x00, 0x02, 0xFE, 0xAE,
+ 0xFC, 0x25, 0x00, 0x02, 0xFE, 0xE2, 0xFC, 0xB7, 0x00, 0x02, 0xFE, 0xE4, 0xFD, 0x07, 0x00, 0x02,
+ 0xFE, 0xF0, 0xFD, 0x08, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x06, 0x00, 0x0E, 0x00, 0x16, 0x00, 0x1E,
+ 0x00, 0x26, 0x00, 0x2C, 0x00, 0x32, 0xFD, 0x6E, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xF0, 0xFD, 0xAB,
+ 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xF2, 0xFD, 0x6F, 0x00, 0x03, 0xFE, 0xA8, 0xFE, 0xE2, 0xFD, 0x2C,
+ 0x00, 0x02, 0xFE, 0xAE, 0xFD, 0x23, 0x00, 0x02, 0xFE, 0xF0, 0xFD, 0x24, 0x00, 0x02, 0xFE, 0xF2,
+ 0x00, 0x08, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x00, 0x2C, 0x00, 0x34, 0x00, 0x3A,
+ 0x00, 0x40, 0xFC, 0x26, 0x00, 0x02, 0xFE, 0xA2, 0xFC, 0xB8, 0x00, 0x02, 0xFE, 0xA4, 0xFC, 0x27,
+ 0x00, 0x02, 0xFE, 0xE2, 0xFD, 0x72, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xA4, 0xFD, 0x73, 0x00, 0x03,
+ 0xFE, 0xE4, 0xFE, 0xE4, 0xFD, 0x33, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0xF5, 0x00, 0x02, 0xFE, 0xF0,
+ 0xFC, 0xF6, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x14, 0x00, 0x1C, 0x00, 0x22,
+ 0x00, 0x28, 0xFD, 0x71, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xA2, 0xFD, 0x74, 0x00, 0x03, 0xFE, 0xE4,
+ 0xFE, 0xF2, 0xFD, 0x3A, 0x00, 0x02, 0xFE, 0xE4, 0xFD, 0x11, 0x00, 0x02, 0xFE, 0xF0, 0xFD, 0x12,
+ 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0xFC, 0x28, 0x00, 0x02, 0xFE, 0xE2,
+ 0xFC, 0xB9, 0x00, 0x02, 0xFE, 0xE4, 0x00, 0x01, 0x00, 0x04, 0xFD, 0x3B, 0x00, 0x02, 0xFE, 0xE4,
+ 0x00, 0x09, 0x00, 0x14, 0x00, 0x1A, 0x00, 0x22, 0x00, 0x28, 0x00, 0x32, 0x00, 0x38, 0x00, 0x40,
+ 0x00, 0x46, 0x00, 0x4C, 0xFC, 0x29, 0x00, 0x02, 0xFE, 0x9E, 0xFD, 0xC4, 0x00, 0x03, 0xFE, 0xA0,
+ 0xFE, 0xE4, 0xFC, 0xBA, 0x00, 0x02, 0xFE, 0xA0, 0xFD, 0xF7, 0x00, 0x04, 0xFE, 0xE0, 0xFE, 0xF4,
+ 0xFE, 0xEA, 0xFC, 0x2A, 0x00, 0x02, 0xFE, 0xE2, 0xFD, 0x77, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xE4,
+ 0xFC, 0xBB, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0xF7, 0x00, 0x02, 0xFE, 0xF0, 0xFC, 0xF8, 0x00, 0x02,
+ 0xFE, 0xF2, 0x00, 0x06, 0x00, 0x0E, 0x00, 0x16, 0x00, 0x1E, 0x00, 0x26, 0x00, 0x2E, 0x00, 0x34,
+ 0xFD, 0x75, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xE2, 0xFD, 0x76, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xE2,
+ 0xFD, 0x78, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xF0, 0xFD, 0xB6, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xF2,
+ 0xFD, 0x13, 0x00, 0x02, 0xFE, 0xF0, 0xFD, 0x14, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x06, 0x00, 0x0E,
+ 0x00, 0x14, 0x00, 0x1A, 0x00, 0x20, 0x00, 0x26, 0x00, 0x2C, 0xFC, 0x2B, 0x00, 0x02, 0xFE, 0x9E,
+ 0xFC, 0xBC, 0x00, 0x02, 0xFE, 0xA0, 0xFC, 0x2C, 0x00, 0x02, 0xFE, 0xE2, 0xFC, 0xBD, 0x00, 0x02,
+ 0xFE, 0xE4, 0xFC, 0xF9, 0x00, 0x02, 0xFE, 0xF0, 0xFC, 0xFA, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x05,
+ 0x00, 0x0C, 0x00, 0x14, 0x00, 0x1C, 0x00, 0x24, 0x00, 0x2A, 0xFD, 0x79, 0x00, 0x03, 0xFE, 0xE4,
+ 0xFE, 0xE2, 0xFD, 0x7B, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xF0, 0xFD, 0x7A, 0x00, 0x03, 0xFE, 0xE4,
+ 0xFE, 0xF2, 0xFD, 0x15, 0x00, 0x02, 0xFE, 0xF0, 0xFD, 0x16, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x0B,
+ 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x00, 0x2A, 0x00, 0x30, 0x00, 0x36, 0x00, 0x3E, 0x00, 0x44,
+ 0x00, 0x4A, 0x00, 0x50, 0x00, 0x56, 0xFC, 0x2D, 0x00, 0x02, 0xFE, 0x9E, 0xFC, 0xBE, 0x00, 0x02,
+ 0xFE, 0xA0, 0xFC, 0x2E, 0x00, 0x02, 0xFE, 0xA2, 0xFC, 0xBF, 0x00, 0x02, 0xFE, 0xA4, 0xFC, 0x2F,
+ 0x00, 0x02, 0xFE, 0xA6, 0xFD, 0x7D, 0x00, 0x03, 0xFE, 0xA8, 0xFE, 0xE4, 0xFC, 0xC0, 0x00, 0x02,
+ 0xFE, 0xA8, 0xFC, 0x30, 0x00, 0x02, 0xFE, 0xE2, 0xFC, 0xC1, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0x31,
+ 0x00, 0x02, 0xFE, 0xF0, 0xFC, 0x32, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x04, 0x00, 0x0A, 0x00, 0x12,
+ 0x00, 0x1A, 0x00, 0x20, 0xFD, 0x7C, 0x00, 0x03, 0xFE, 0xA8, 0xFE, 0xE2, 0xFD, 0xC1, 0x00, 0x03,
+ 0xFE, 0xE4, 0xFE, 0xF2, 0xFC, 0x7C, 0x00, 0x02, 0xFE, 0xF0, 0xFC, 0x7D, 0x00, 0x02, 0xFE, 0xF2,
+ 0x00, 0x08, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x26, 0x00, 0x2C, 0x00, 0x34, 0x00, 0x3A,
+ 0x00, 0x40, 0xFC, 0x33, 0x00, 0x02, 0xFE, 0xA2, 0xFC, 0xC2, 0x00, 0x02, 0xFE, 0xA4, 0xFD, 0xF1,
+ 0x00, 0x03, 0xFE, 0xE0, 0xFB, 0xAF, 0xFC, 0x34, 0x00, 0x02, 0xFE, 0xE2, 0xFD, 0xB4, 0x00, 0x03,
+ 0xFE, 0xE4, 0xFE, 0xA4, 0xFC, 0xC3, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0x35, 0x00, 0x02, 0xFE, 0xF0,
+ 0xFC, 0x36, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x14, 0x00, 0x1C, 0x00, 0x24,
+ 0x00, 0x2A, 0xFD, 0x7E, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xA2, 0xFD, 0x7F, 0x00, 0x03, 0xFE, 0xE4,
+ 0xFE, 0xE2, 0xFD, 0xB2, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xF2, 0xFC, 0x7E, 0x00, 0x02, 0xFE, 0xF0,
+ 0xFC, 0x7F, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x0E, 0x00, 0x1E, 0x00, 0x24, 0x00, 0x2A, 0x00, 0x30,
+ 0x00, 0x36, 0x00, 0x3C, 0x00, 0x42, 0x00, 0x48, 0x00, 0x4E, 0x00, 0x54, 0x00, 0x5A, 0x00, 0x62,
+ 0x00, 0x68, 0x00, 0x6E, 0xFC, 0x37, 0x00, 0x02, 0xFE, 0x8E, 0xFC, 0x38, 0x00, 0x02, 0xFE, 0x9E,
+ 0xFC, 0xC4, 0x00, 0x02, 0xFE, 0xA0, 0xFC, 0x39, 0x00, 0x02, 0xFE, 0xA2, 0xFC, 0xC5, 0x00, 0x02,
+ 0xFE, 0xA4, 0xFC, 0x3A, 0x00, 0x02, 0xFE, 0xA6, 0xFC, 0xC6, 0x00, 0x02, 0xFE, 0xA8, 0xFC, 0x3B,
+ 0x00, 0x02, 0xFE, 0xDE, 0xFC, 0xC7, 0x00, 0x02, 0xFE, 0xE0, 0xFC, 0x3C, 0x00, 0x02, 0xFE, 0xE2,
+ 0xFD, 0xC3, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xE4, 0xFC, 0xC8, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0x3D,
+ 0x00, 0x02, 0xFE, 0xF0, 0xFC, 0x3E, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x09, 0x00, 0x14, 0x00, 0x1A,
+ 0x00, 0x20, 0x00, 0x26, 0x00, 0x2C, 0x00, 0x34, 0x00, 0x3C, 0x00, 0x42, 0x00, 0x48, 0xFC, 0x80,
+ 0x00, 0x02, 0xFE, 0x8E, 0xFC, 0x81, 0x00, 0x02, 0xFE, 0xDE, 0xFC, 0xEB, 0x00, 0x02, 0xFE, 0xE0,
+ 0xFC, 0x82, 0x00, 0x02, 0xFE, 0xE2, 0xFD, 0xBB, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xE2, 0xFD, 0xB7,
+ 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xF2, 0xFC, 0xEC, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0x83, 0x00, 0x02,
+ 0xFE, 0xF0, 0xFC, 0x84, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x14, 0x00, 0x2A, 0x00, 0x30, 0x00, 0x36,
+ 0x00, 0x3C, 0x00, 0x42, 0x00, 0x48, 0x00, 0x50, 0x00, 0x58, 0x00, 0x5E, 0x00, 0x64, 0x00, 0x6C,
+ 0x00, 0x72, 0x00, 0x78, 0x00, 0x80, 0x00, 0x86, 0x00, 0x8C, 0x00, 0x94, 0x00, 0x9A, 0x00, 0xA0,
+ 0x00, 0xA6, 0xFE, 0xF5, 0x00, 0x02, 0xFE, 0x82, 0xFE, 0xF7, 0x00, 0x02, 0xFE, 0x84, 0xFE, 0xF9,
+ 0x00, 0x02, 0xFE, 0x88, 0xFE, 0xFB, 0x00, 0x02, 0xFE, 0x8E, 0xFC, 0x3F, 0x00, 0x02, 0xFE, 0x9E,
+ 0xFD, 0x83, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xA0, 0xFD, 0xBA, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xE4,
+ 0xFC, 0xC9, 0x00, 0x02, 0xFE, 0xA0, 0xFC, 0x40, 0x00, 0x02, 0xFE, 0xA2, 0xFD, 0xB5, 0x00, 0x03,
+ 0xFE, 0xA4, 0xFE, 0xE4, 0xFC, 0xCA, 0x00, 0x02, 0xFE, 0xA4, 0xFC, 0x41, 0x00, 0x02, 0xFE, 0xA6,
+ 0xFD, 0x86, 0x00, 0x03, 0xFE, 0xA8, 0xFE, 0xE4, 0xFC, 0xCB, 0x00, 0x02, 0xFE, 0xA8, 0xFC, 0x42,
+ 0x00, 0x02, 0xFE, 0xE2, 0xFD, 0x88, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xA4, 0xFC, 0xCC, 0x00, 0x02,
+ 0xFE, 0xE4, 0xFC, 0xCD, 0x00, 0x02, 0xFE, 0xEC, 0xFC, 0x43, 0x00, 0x02, 0xFE, 0xF0, 0xFC, 0x44,
+ 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x11, 0x00, 0x24, 0x00, 0x2A, 0x00, 0x30, 0x00, 0x36, 0x00, 0x3C,
+ 0x00, 0x44, 0x00, 0x4C, 0x00, 0x54, 0x00, 0x5C, 0x00, 0x64, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x7A,
+ 0x00, 0x82, 0x00, 0x8A, 0x00, 0x90, 0x00, 0x96, 0xFE, 0xF6, 0x00, 0x02, 0xFE, 0x82, 0xFE, 0xF8,
+ 0x00, 0x02, 0xFE, 0x84, 0xFE, 0xFA, 0x00, 0x02, 0xFE, 0x88, 0xFE, 0xFC, 0x00, 0x02, 0xFE, 0x8E,
+ 0xFD, 0x84, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0x9E, 0xFD, 0xBC, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xE2,
+ 0xFD, 0xAC, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xF2, 0xFD, 0x80, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xE2,
+ 0xFD, 0x82, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xF0, 0xFD, 0x81, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xF2,
+ 0xFD, 0x85, 0x00, 0x03, 0xFE, 0xA8, 0xFE, 0xE2, 0xFC, 0x85, 0x00, 0x02, 0xFE, 0xE2, 0xFD, 0x87,
+ 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xA2, 0xFD, 0xAD, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xF2, 0xFC, 0xED,
+ 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0x86, 0x00, 0x02, 0xFE, 0xF0, 0xFC, 0x87, 0x00, 0x02, 0xFE, 0xF2,
+ 0x00, 0x12, 0x00, 0x26, 0x00, 0x2C, 0x00, 0x34, 0x00, 0x3C, 0x00, 0x44, 0x00, 0x4A, 0x00, 0x50,
+ 0x00, 0x58, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x70, 0x00, 0x76, 0x00, 0x7E, 0x00, 0x86, 0x00, 0x8C,
+ 0x00, 0x92, 0x00, 0x98, 0x00, 0x9E, 0xFC, 0x45, 0x00, 0x02, 0xFE, 0x9E, 0xFD, 0x8C, 0x00, 0x03,
+ 0xFE, 0xA0, 0xFE, 0xA4, 0xFD, 0x92, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xA8, 0xFD, 0x8D, 0x00, 0x03,
+ 0xFE, 0xA0, 0xFE, 0xE4, 0xFC, 0xCE, 0x00, 0x02, 0xFE, 0xA0, 0xFC, 0x46, 0x00, 0x02, 0xFE, 0xA2,
+ 0xFD, 0x89, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xA0, 0xFD, 0xF4, 0x00, 0x04, 0xFE, 0xA4, 0xFE, 0xE4,
+ 0xFE, 0xAA, 0xFD, 0x8A, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xE4, 0xFC, 0xCF, 0x00, 0x02, 0xFE, 0xA4,
+ 0xFC, 0x47, 0x00, 0x02, 0xFE, 0xA6, 0xFD, 0x8E, 0x00, 0x03, 0xFE, 0xA8, 0xFE, 0xA0, 0xFD, 0x8F,
+ 0x00, 0x03, 0xFE, 0xA8, 0xFE, 0xE4, 0xFC, 0xD0, 0x00, 0x02, 0xFE, 0xA8, 0xFC, 0x48, 0x00, 0x02,
+ 0xFE, 0xE2, 0xFC, 0xD1, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0x49, 0x00, 0x02, 0xFE, 0xF0, 0xFC, 0x4A,
+ 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x06, 0x00, 0x0E, 0x00, 0x14, 0x00, 0x1C, 0x00, 0x24, 0x00, 0x2C,
+ 0x00, 0x32, 0xFC, 0x88, 0x00, 0x02, 0xFE, 0x8E, 0xFD, 0xC0, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xF2,
+ 0xFD, 0x8B, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xF2, 0xFD, 0xB9, 0x00, 0x03, 0xFE, 0xA8, 0xFE, 0xF2,
+ 0xFC, 0x89, 0x00, 0x02, 0xFE, 0xE2, 0xFD, 0xB1, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xF2, 0x00, 0x0E,
+ 0x00, 0x1E, 0x00, 0x24, 0x00, 0x2C, 0x00, 0x34, 0x00, 0x3A, 0x00, 0x40, 0x00, 0x48, 0x00, 0x4E,
+ 0x00, 0x54, 0x00, 0x5A, 0x00, 0x60, 0x00, 0x66, 0x00, 0x6C, 0x00, 0x72, 0xFC, 0x4B, 0x00, 0x02,
+ 0xFE, 0x9E, 0xFD, 0xB8, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xA4, 0xFD, 0x98, 0x00, 0x03, 0xFE, 0xA0,
+ 0xFE, 0xE4, 0xFC, 0xD2, 0x00, 0x02, 0xFE, 0xA0, 0xFC, 0x4C, 0x00, 0x02, 0xFE, 0xA2, 0xFD, 0x95,
+ 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xE4, 0xFC, 0xD3, 0x00, 0x02, 0xFE, 0xA4, 0xFC, 0x4D, 0x00, 0x02,
+ 0xFE, 0xA6, 0xFC, 0xD4, 0x00, 0x02, 0xFE, 0xA8, 0xFC, 0x4E, 0x00, 0x02, 0xFE, 0xE2, 0xFC, 0xD5,
+ 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0xD6, 0x00, 0x02, 0xFE, 0xEC, 0xFC, 0x4F, 0x00, 0x02, 0xFE, 0xF0,
+ 0xFC, 0x50, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x10, 0x00, 0x22, 0x00, 0x2A, 0x00, 0x32, 0x00, 0x3A,
+ 0x00, 0x42, 0x00, 0x4A, 0x00, 0x52, 0x00, 0x58, 0x00, 0x5E, 0x00, 0x64, 0x00, 0x6C, 0x00, 0x74,
+ 0x00, 0x7A, 0x00, 0x80, 0x00, 0x86, 0x00, 0x8C, 0xFD, 0xBD, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xA2,
+ 0xFD, 0x97, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xE2, 0xFD, 0x99, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xF0,
+ 0xFD, 0xC7, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xF2, 0xFD, 0x96, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xF0,
+ 0xFD, 0xB3, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xF2, 0xFC, 0x8A, 0x00, 0x02, 0xFE, 0xAE, 0xFC, 0x8B,
+ 0x00, 0x02, 0xFE, 0xB0, 0xFC, 0x8C, 0x00, 0x02, 0xFE, 0xE2, 0xFD, 0x9B, 0x00, 0x03, 0xFE, 0xE4,
+ 0xFE, 0xF0, 0xFD, 0x9A, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xF2, 0xFC, 0xEE, 0x00, 0x02, 0xFE, 0xE4,
+ 0xFC, 0x8D, 0x00, 0x02, 0xFE, 0xE6, 0xFC, 0xEF, 0x00, 0x02, 0xFE, 0xEC, 0xFC, 0x8E, 0x00, 0x02,
+ 0xFE, 0xF0, 0xFC, 0x8F, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x09, 0x00, 0x14, 0x00, 0x1A, 0x00, 0x20,
+ 0x00, 0x26, 0x00, 0x2C, 0x00, 0x34, 0x00, 0x3C, 0x00, 0x42, 0x00, 0x48, 0xFC, 0xD9, 0x00, 0x02,
+ 0x06, 0x70, 0xFC, 0x51, 0x00, 0x02, 0xFE, 0x9E, 0xFC, 0xD7, 0x00, 0x02, 0xFE, 0xA0, 0xFC, 0x52,
+ 0x00, 0x02, 0xFE, 0xE2, 0xFD, 0x93, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xA0, 0xFD, 0x94, 0x00, 0x03,
+ 0xFE, 0xE4, 0xFE, 0xE4, 0xFC, 0xD8, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0x53, 0x00, 0x02, 0xFE, 0xF0,
+ 0xFC, 0x54, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x01, 0x00, 0x04, 0xFD, 0xF8, 0x00, 0x04, 0xFE, 0xB3,
+ 0xFE, 0xE0, 0xFE, 0xE2, 0x00, 0x01, 0x00, 0x04, 0xFC, 0x5D, 0x00, 0x02, 0x06, 0x70, 0x00, 0x01,
+ 0x00, 0x04, 0xFC, 0x90, 0x00, 0x02, 0x06, 0x70, 0x00, 0x0C, 0x00, 0x1A, 0x00, 0x20, 0x00, 0x26,
+ 0x00, 0x2C, 0x00, 0x32, 0x00, 0x38, 0x00, 0x3E, 0x00, 0x44, 0x00, 0x4C, 0x00, 0x52, 0x00, 0x58,
+ 0x00, 0x5E, 0xFC, 0x55, 0x00, 0x02, 0xFE, 0x9E, 0xFC, 0xDA, 0x00, 0x02, 0xFE, 0xA0, 0xFC, 0x56,
+ 0x00, 0x02, 0xFE, 0xA2, 0xFC, 0xDB, 0x00, 0x02, 0xFE, 0xA4, 0xFC, 0x57, 0x00, 0x02, 0xFE, 0xA6,
+ 0xFC, 0xDC, 0x00, 0x02, 0xFE, 0xA8, 0xFC, 0x58, 0x00, 0x02, 0xFE, 0xE2, 0xFD, 0x9D, 0x00, 0x03,
+ 0xFE, 0xE4, 0xFE, 0xE4, 0xFC, 0xDD, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0xDE, 0x00, 0x02, 0xFE, 0xEC,
+ 0xFC, 0x59, 0x00, 0x02, 0xFE, 0xF0, 0xFC, 0x5A, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x0C, 0x00, 0x1A,
+ 0x00, 0x22, 0x00, 0x2A, 0x00, 0x30, 0x00, 0x36, 0x00, 0x3C, 0x00, 0x44, 0x00, 0x4C, 0x00, 0x52,
+ 0x00, 0x58, 0x00, 0x5E, 0x00, 0x64, 0xFD, 0xAF, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xF2, 0xFD, 0xAE,
+ 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xF2, 0xFC, 0x91, 0x00, 0x02, 0xFE, 0xAE, 0xFC, 0x92, 0x00, 0x02,
+ 0xFE, 0xB0, 0xFC, 0x93, 0x00, 0x02, 0xFE, 0xE2, 0xFD, 0x9C, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xE2,
+ 0xFD, 0xB0, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xF2, 0xFC, 0xF0, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0x94,
+ 0x00, 0x02, 0xFE, 0xE6, 0xFC, 0xF1, 0x00, 0x02, 0xFE, 0xEC, 0xFC, 0x95, 0x00, 0x02, 0xFE, 0xF0,
+ 0xFC, 0x96, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x01, 0x00, 0x35, 0xFB, 0xD7, 0xFE, 0x8B, 0xFE, 0x8C,
+ 0xFE, 0x8D, 0xFE, 0x8E, 0xFE, 0x91, 0xFE, 0x92, 0xFE, 0x97, 0xFE, 0x98, 0xFE, 0x9B, 0xFE, 0x9C,
+ 0xFE, 0x9F, 0xFE, 0xA0, 0xFE, 0xA3, 0xFE, 0xA4, 0xFE, 0xA7, 0xFE, 0xA8, 0xFE, 0xAB, 0xFE, 0xAD,
+ 0xFE, 0xB3, 0xFE, 0xB4, 0xFE, 0xB7, 0xFE, 0xB8, 0xFE, 0xBB, 0xFE, 0xBC, 0xFE, 0xBF, 0xFE, 0xC0,
+ 0xFE, 0xC3, 0xFE, 0xC4, 0xFE, 0xC7, 0xFE, 0xC8, 0xFE, 0xCB, 0xFE, 0xCC, 0xFE, 0xCF, 0xFE, 0xD0,
+ 0xFE, 0xD3, 0xFE, 0xD4, 0xFE, 0xD7, 0xFE, 0xD8, 0xFE, 0xDB, 0xFE, 0xDC, 0xFE, 0xDF, 0xFE, 0xE0,
+ 0xFE, 0xE3, 0xFE, 0xE4, 0xFE, 0xE7, 0xFE, 0xE8, 0xFE, 0xEB, 0xFE, 0xED, 0xFE, 0xEF, 0xFE, 0xF0,
+ 0xFE, 0xF3, 0xFE, 0xF4, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01, 0x00, 0x1A,
+ 0x00, 0x01, 0x00, 0x08, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x09, 0xCB, 0x00, 0x02, 0x09, 0xBE,
+ 0x09, 0xCC, 0x00, 0x02, 0x09, 0xD7, 0x00, 0x01, 0x00, 0x01, 0x09, 0xC7, 0x00, 0x02, 0x00, 0x00,
+ 0x00, 0x01, 0x00, 0x08, 0x00, 0x01, 0x00, 0x16, 0x00, 0x02, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x02,
+ 0x09, 0xC7, 0x09, 0xBE, 0x00, 0x02, 0x09, 0xC7, 0x09, 0xD7, 0x00, 0x01, 0x00, 0x02, 0x09, 0xCB,
+ 0x09, 0xCC, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01, 0x02, 0x66, 0x00, 0x20,
+ 0x00, 0x46, 0x00, 0x50, 0x00, 0x62, 0x00, 0x74, 0x00, 0x96, 0x00, 0xA8, 0x00, 0xB2, 0x00, 0xDC,
+ 0x00, 0xEE, 0x00, 0xF8, 0x01, 0x1A, 0x01, 0x24, 0x01, 0x2E, 0x01, 0x38, 0x01, 0x4A, 0x01, 0x5C,
+ 0x01, 0x7E, 0x01, 0x90, 0x01, 0x9A, 0x01, 0xC4, 0x01, 0xD6, 0x01, 0xE0, 0x02, 0x02, 0x02, 0x0C,
+ 0x02, 0x16, 0x02, 0x20, 0x02, 0x2A, 0x02, 0x34, 0x02, 0x3E, 0x02, 0x48, 0x02, 0x52, 0x02, 0x5C,
+ 0x00, 0x01, 0x00, 0x04, 0x04, 0x07, 0x00, 0x02, 0x03, 0x08, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C,
+ 0x04, 0xD0, 0x00, 0x02, 0x03, 0x06, 0x04, 0xD2, 0x00, 0x02, 0x03, 0x08, 0x00, 0x02, 0x00, 0x06,
+ 0x00, 0x0C, 0x04, 0x03, 0x00, 0x02, 0x03, 0x01, 0x04, 0x03, 0x00, 0x02, 0x03, 0x41, 0x00, 0x04,
+ 0x00, 0x0A, 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C, 0x04, 0x00, 0x00, 0x02, 0x03, 0x00, 0x04, 0xD6,
+ 0x00, 0x02, 0x03, 0x06, 0x04, 0x01, 0x00, 0x02, 0x03, 0x08, 0x04, 0x00, 0x00, 0x02, 0x03, 0x40,
+ 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x04, 0xC1, 0x00, 0x02, 0x03, 0x06, 0x04, 0xDC, 0x00, 0x02,
+ 0x03, 0x08, 0x00, 0x01, 0x00, 0x04, 0x04, 0xDE, 0x00, 0x02, 0x03, 0x08, 0x00, 0x05, 0x00, 0x0C,
+ 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x04, 0x0D, 0x00, 0x02, 0x03, 0x00, 0x04, 0xE2,
+ 0x00, 0x02, 0x03, 0x04, 0x04, 0x19, 0x00, 0x02, 0x03, 0x06, 0x04, 0xE4, 0x00, 0x02, 0x03, 0x08,
+ 0x04, 0x0D, 0x00, 0x02, 0x03, 0x40, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x04, 0x0C, 0x00, 0x02,
+ 0x03, 0x01, 0x04, 0x0C, 0x00, 0x02, 0x03, 0x41, 0x00, 0x01, 0x00, 0x04, 0x04, 0xE6, 0x00, 0x02,
+ 0x03, 0x08, 0x00, 0x04, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C, 0x04, 0xEE, 0x00, 0x02,
+ 0x03, 0x04, 0x04, 0x0E, 0x00, 0x02, 0x03, 0x06, 0x04, 0xF0, 0x00, 0x02, 0x03, 0x08, 0x04, 0xF2,
+ 0x00, 0x02, 0x03, 0x0B, 0x00, 0x01, 0x00, 0x04, 0x04, 0xF4, 0x00, 0x02, 0x03, 0x08, 0x00, 0x01,
+ 0x00, 0x04, 0x04, 0xF8, 0x00, 0x02, 0x03, 0x08, 0x00, 0x01, 0x00, 0x04, 0x04, 0xEC, 0x00, 0x02,
+ 0x03, 0x08, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x04, 0xD1, 0x00, 0x02, 0x03, 0x06, 0x04, 0xD3,
+ 0x00, 0x02, 0x03, 0x08, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x04, 0x53, 0x00, 0x02, 0x03, 0x01,
+ 0x04, 0x53, 0x00, 0x02, 0x03, 0x41, 0x00, 0x04, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C,
+ 0x04, 0x50, 0x00, 0x02, 0x03, 0x00, 0x04, 0xD7, 0x00, 0x02, 0x03, 0x06, 0x04, 0x51, 0x00, 0x02,
+ 0x03, 0x08, 0x04, 0x50, 0x00, 0x02, 0x03, 0x40, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x04, 0xC2,
+ 0x00, 0x02, 0x03, 0x06, 0x04, 0xDD, 0x00, 0x02, 0x03, 0x08, 0x00, 0x01, 0x00, 0x04, 0x04, 0xDF,
+ 0x00, 0x02, 0x03, 0x08, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24,
+ 0x04, 0x5D, 0x00, 0x02, 0x03, 0x00, 0x04, 0xE3, 0x00, 0x02, 0x03, 0x04, 0x04, 0x39, 0x00, 0x02,
+ 0x03, 0x06, 0x04, 0xE5, 0x00, 0x02, 0x03, 0x08, 0x04, 0x5D, 0x00, 0x02, 0x03, 0x40, 0x00, 0x02,
+ 0x00, 0x06, 0x00, 0x0C, 0x04, 0x5C, 0x00, 0x02, 0x03, 0x01, 0x04, 0x5C, 0x00, 0x02, 0x03, 0x41,
+ 0x00, 0x01, 0x00, 0x04, 0x04, 0xE7, 0x00, 0x02, 0x03, 0x08, 0x00, 0x04, 0x00, 0x0A, 0x00, 0x10,
+ 0x00, 0x16, 0x00, 0x1C, 0x04, 0xEF, 0x00, 0x02, 0x03, 0x04, 0x04, 0x5E, 0x00, 0x02, 0x03, 0x06,
+ 0x04, 0xF1, 0x00, 0x02, 0x03, 0x08, 0x04, 0xF3, 0x00, 0x02, 0x03, 0x0B, 0x00, 0x01, 0x00, 0x04,
+ 0x04, 0xF5, 0x00, 0x02, 0x03, 0x08, 0x00, 0x01, 0x00, 0x04, 0x04, 0xF9, 0x00, 0x02, 0x03, 0x08,
+ 0x00, 0x01, 0x00, 0x04, 0x04, 0xED, 0x00, 0x02, 0x03, 0x08, 0x00, 0x01, 0x00, 0x04, 0x04, 0x57,
+ 0x00, 0x02, 0x03, 0x08, 0x00, 0x01, 0x00, 0x04, 0x04, 0x76, 0x00, 0x02, 0x03, 0x0F, 0x00, 0x01,
+ 0x00, 0x04, 0x04, 0x77, 0x00, 0x02, 0x03, 0x0F, 0x00, 0x01, 0x00, 0x04, 0x04, 0xDA, 0x00, 0x02,
+ 0x03, 0x08, 0x00, 0x01, 0x00, 0x04, 0x04, 0xDB, 0x00, 0x02, 0x03, 0x08, 0x00, 0x01, 0x00, 0x04,
+ 0x04, 0xEA, 0x00, 0x02, 0x03, 0x08, 0x00, 0x01, 0x00, 0x04, 0x04, 0xEB, 0x00, 0x02, 0x03, 0x08,
+ 0x00, 0x01, 0x00, 0x20, 0x04, 0x06, 0x04, 0x10, 0x04, 0x13, 0x04, 0x15, 0x04, 0x16, 0x04, 0x17,
+ 0x04, 0x18, 0x04, 0x1A, 0x04, 0x1E, 0x04, 0x23, 0x04, 0x27, 0x04, 0x2B, 0x04, 0x2D, 0x04, 0x30,
+ 0x04, 0x33, 0x04, 0x35, 0x04, 0x36, 0x04, 0x37, 0x04, 0x38, 0x04, 0x3A, 0x04, 0x3E, 0x04, 0x43,
+ 0x04, 0x47, 0x04, 0x4B, 0x04, 0x4D, 0x04, 0x56, 0x04, 0x74, 0x04, 0x75, 0x04, 0xD8, 0x04, 0xD9,
+ 0x04, 0xE8, 0x04, 0xE9, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x0A, 0x02, 0x1C, 0x00, 0x01,
+ 0x01, 0xA6, 0x00, 0x34, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x7A, 0x00, 0x80, 0x00, 0x86, 0x00, 0x8C,
+ 0x00, 0x92, 0x00, 0x98, 0x00, 0x9E, 0x00, 0xA4, 0x00, 0xAA, 0x00, 0xB0, 0x00, 0xB6, 0x00, 0xBC,
+ 0x00, 0xC2, 0x00, 0xC8, 0x00, 0xCE, 0x00, 0xD4, 0x00, 0xDA, 0x00, 0xE0, 0x00, 0xE6, 0x00, 0xEC,
+ 0x00, 0xF2, 0x00, 0xF8, 0x00, 0xFE, 0x01, 0x04, 0x01, 0x0A, 0x01, 0x10, 0x01, 0x16, 0x01, 0x1C,
+ 0x01, 0x22, 0x01, 0x28, 0x01, 0x2E, 0x01, 0x34, 0x01, 0x3A, 0x01, 0x40, 0x01, 0x46, 0x01, 0x4C,
+ 0x01, 0x52, 0x01, 0x58, 0x01, 0x5E, 0x01, 0x64, 0x01, 0x6A, 0x01, 0x70, 0x01, 0x76, 0x01, 0x7C,
+ 0x01, 0x82, 0x01, 0x88, 0x01, 0x8E, 0x01, 0x94, 0x01, 0x9A, 0x01, 0xA0, 0x00, 0x02, 0x04, 0x15,
+ 0x03, 0x00, 0x00, 0x02, 0x04, 0x15, 0x03, 0x08, 0x00, 0x02, 0x04, 0x13, 0x03, 0x01, 0x00, 0x02,
+ 0x04, 0x06, 0x03, 0x08, 0x00, 0x02, 0x04, 0x1A, 0x03, 0x01, 0x00, 0x02, 0x04, 0x18, 0x03, 0x00,
+ 0x00, 0x02, 0x04, 0x23, 0x03, 0x06, 0x00, 0x02, 0x04, 0x18, 0x03, 0x06, 0x00, 0x02, 0x04, 0x38,
+ 0x03, 0x06, 0x00, 0x02, 0x04, 0x35, 0x03, 0x00, 0x00, 0x02, 0x04, 0x35, 0x03, 0x08, 0x00, 0x02,
+ 0x04, 0x33, 0x03, 0x01, 0x00, 0x02, 0x04, 0x56, 0x03, 0x08, 0x00, 0x02, 0x04, 0x3A, 0x03, 0x01,
+ 0x00, 0x02, 0x04, 0x38, 0x03, 0x00, 0x00, 0x02, 0x04, 0x43, 0x03, 0x06, 0x00, 0x02, 0x04, 0x74,
+ 0x03, 0x0F, 0x00, 0x02, 0x04, 0x75, 0x03, 0x0F, 0x00, 0x02, 0x04, 0x16, 0x03, 0x06, 0x00, 0x02,
+ 0x04, 0x36, 0x03, 0x06, 0x00, 0x02, 0x04, 0x10, 0x03, 0x06, 0x00, 0x02, 0x04, 0x30, 0x03, 0x06,
+ 0x00, 0x02, 0x04, 0x10, 0x03, 0x08, 0x00, 0x02, 0x04, 0x30, 0x03, 0x08, 0x00, 0x02, 0x04, 0x15,
+ 0x03, 0x06, 0x00, 0x02, 0x04, 0x35, 0x03, 0x06, 0x00, 0x02, 0x04, 0xD8, 0x03, 0x08, 0x00, 0x02,
+ 0x04, 0xD9, 0x03, 0x08, 0x00, 0x02, 0x04, 0x16, 0x03, 0x08, 0x00, 0x02, 0x04, 0x36, 0x03, 0x08,
+ 0x00, 0x02, 0x04, 0x17, 0x03, 0x08, 0x00, 0x02, 0x04, 0x37, 0x03, 0x08, 0x00, 0x02, 0x04, 0x18,
+ 0x03, 0x04, 0x00, 0x02, 0x04, 0x38, 0x03, 0x04, 0x00, 0x02, 0x04, 0x18, 0x03, 0x08, 0x00, 0x02,
+ 0x04, 0x38, 0x03, 0x08, 0x00, 0x02, 0x04, 0x1E, 0x03, 0x08, 0x00, 0x02, 0x04, 0x3E, 0x03, 0x08,
+ 0x00, 0x02, 0x04, 0xE8, 0x03, 0x08, 0x00, 0x02, 0x04, 0xE9, 0x03, 0x08, 0x00, 0x02, 0x04, 0x2D,
+ 0x03, 0x08, 0x00, 0x02, 0x04, 0x4D, 0x03, 0x08, 0x00, 0x02, 0x04, 0x23, 0x03, 0x04, 0x00, 0x02,
+ 0x04, 0x43, 0x03, 0x04, 0x00, 0x02, 0x04, 0x23, 0x03, 0x08, 0x00, 0x02, 0x04, 0x43, 0x03, 0x08,
+ 0x00, 0x02, 0x04, 0x23, 0x03, 0x0B, 0x00, 0x02, 0x04, 0x43, 0x03, 0x0B, 0x00, 0x02, 0x04, 0x27,
+ 0x03, 0x08, 0x00, 0x02, 0x04, 0x47, 0x03, 0x08, 0x00, 0x02, 0x04, 0x2B, 0x03, 0x08, 0x00, 0x02,
+ 0x04, 0x4B, 0x03, 0x08, 0x00, 0x01, 0x00, 0x34, 0x04, 0x00, 0x04, 0x01, 0x04, 0x03, 0x04, 0x07,
+ 0x04, 0x0C, 0x04, 0x0D, 0x04, 0x0E, 0x04, 0x19, 0x04, 0x39, 0x04, 0x50, 0x04, 0x51, 0x04, 0x53,
+ 0x04, 0x57, 0x04, 0x5C, 0x04, 0x5D, 0x04, 0x5E, 0x04, 0x76, 0x04, 0x77, 0x04, 0xC1, 0x04, 0xC2,
+ 0x04, 0xD0, 0x04, 0xD1, 0x04, 0xD2, 0x04, 0xD3, 0x04, 0xD6, 0x04, 0xD7, 0x04, 0xDA, 0x04, 0xDB,
+ 0x04, 0xDC, 0x04, 0xDD, 0x04, 0xDE, 0x04, 0xDF, 0x04, 0xE2, 0x04, 0xE3, 0x04, 0xE4, 0x04, 0xE5,
+ 0x04, 0xE6, 0x04, 0xE7, 0x04, 0xEA, 0x04, 0xEB, 0x04, 0xEC, 0x04, 0xED, 0x04, 0xEE, 0x04, 0xEF,
+ 0x04, 0xF0, 0x04, 0xF1, 0x04, 0xF2, 0x04, 0xF3, 0x04, 0xF4, 0x04, 0xF5, 0x04, 0xF8, 0x04, 0xF9,
+ 0x00, 0x01, 0x00, 0x46, 0x00, 0x08, 0x00, 0x16, 0x00, 0x1C, 0x00, 0x22, 0x00, 0x28, 0x00, 0x2E,
+ 0x00, 0x34, 0x00, 0x3A, 0x00, 0x40, 0x00, 0x02, 0x04, 0x15, 0x03, 0x40, 0x00, 0x02, 0x04, 0x13,
+ 0x03, 0x41, 0x00, 0x02, 0x04, 0x1A, 0x03, 0x41, 0x00, 0x02, 0x04, 0x18, 0x03, 0x40, 0x00, 0x02,
+ 0x04, 0x35, 0x03, 0x40, 0x00, 0x02, 0x04, 0x33, 0x03, 0x41, 0x00, 0x02, 0x04, 0x3A, 0x03, 0x41,
+ 0x00, 0x02, 0x04, 0x38, 0x03, 0x40, 0x00, 0x01, 0x00, 0x08, 0x04, 0x00, 0x04, 0x03, 0x04, 0x0C,
+ 0x04, 0x0D, 0x04, 0x50, 0x04, 0x53, 0x04, 0x5C, 0x04, 0x5D, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01,
+ 0x00, 0x08, 0x00, 0x01, 0x00, 0x2A, 0x00, 0x03, 0x00, 0x0C, 0x00, 0x16, 0x00, 0x20, 0x00, 0x01,
+ 0x00, 0x04, 0x09, 0x29, 0x00, 0x02, 0x09, 0x3C, 0x00, 0x01, 0x00, 0x04, 0x09, 0x31, 0x00, 0x02,
+ 0x09, 0x3C, 0x00, 0x01, 0x00, 0x04, 0x09, 0x34, 0x00, 0x02, 0x09, 0x3C, 0x00, 0x01, 0x00, 0x03,
+ 0x09, 0x28, 0x09, 0x30, 0x09, 0x33, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01,
+ 0x00, 0x1E, 0x00, 0x03, 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18, 0x00, 0x02, 0x09, 0x28, 0x09, 0x3C,
+ 0x00, 0x02, 0x09, 0x30, 0x09, 0x3C, 0x00, 0x02, 0x09, 0x33, 0x09, 0x3C, 0x00, 0x01, 0x00, 0x03,
+ 0x09, 0x29, 0x09, 0x31, 0x09, 0x34, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01,
+ 0x33, 0x04, 0x00, 0x75, 0x00, 0xF0, 0x01, 0x1A, 0x04, 0x5A, 0x05, 0x0C, 0x08, 0x3C, 0x09, 0x24,
+ 0x09, 0xD6, 0x09, 0xE0, 0x0A, 0x54, 0x0D, 0x84, 0x0D, 0x8E, 0x0D, 0x98, 0x11, 0x44, 0x11, 0xF6,
+ 0x15, 0x92, 0x16, 0xBC, 0x17, 0x6E, 0x17, 0x88, 0x18, 0xB2, 0x1C, 0x4E, 0x1C, 0x78, 0x1C, 0xA2,
+ 0x1C, 0xAC, 0x1C, 0xC6, 0x1D, 0x5C, 0x1D, 0xF2, 0x1D, 0xFC, 0x1E, 0x06, 0x1E, 0x10, 0x1E, 0x1A,
+ 0x1E, 0x24, 0x1E, 0x2E, 0x1E, 0xC4, 0x1F, 0x5A, 0x1F, 0x64, 0x1F, 0x6E, 0x1F, 0x78, 0x1F, 0x82,
+ 0x1F, 0x8C, 0x1F, 0x96, 0x1F, 0xB8, 0x1F, 0xDA, 0x1F, 0xFC, 0x20, 0x1E, 0x20, 0xB4, 0x21, 0x4A,
+ 0x21, 0x54, 0x21, 0x5E, 0x21, 0x68, 0x21, 0x72, 0x21, 0x7C, 0x21, 0x86, 0x22, 0x1C, 0x22, 0xB2,
+ 0x22, 0xBC, 0x22, 0xC6, 0x22, 0xD0, 0x22, 0xDA, 0x22, 0xE4, 0x22, 0xEE, 0x23, 0x18, 0x23, 0x42,
+ 0x23, 0x6C, 0x23, 0x96, 0x23, 0xB8, 0x23, 0xDA, 0x23, 0xFC, 0x24, 0x1E, 0x24, 0x48, 0x24, 0x72,
+ 0x24, 0x9C, 0x25, 0x32, 0x25, 0xC8, 0x25, 0xD2, 0x25, 0xDC, 0x25, 0xE6, 0x25, 0xF0, 0x25, 0xFA,
+ 0x26, 0x04, 0x26, 0x9A, 0x27, 0x30, 0x27, 0x3A, 0x27, 0x44, 0x27, 0x4E, 0x27, 0x58, 0x27, 0x62,
+ 0x27, 0x6C, 0x27, 0x76, 0x27, 0x80, 0x27, 0x8A, 0x27, 0x94, 0x27, 0x9E, 0x27, 0xA8, 0x27, 0xD2,
+ 0x27, 0xFC, 0x28, 0x26, 0x28, 0x50, 0x28, 0x7A, 0x28, 0xA4, 0x28, 0xCE, 0x28, 0xF8, 0x29, 0x22,
+ 0x29, 0x4C, 0x29, 0x76, 0x29, 0xA0, 0x2A, 0x78, 0x2A, 0x82, 0x2B, 0x32, 0x2C, 0x5C, 0x2C, 0x86,
+ 0x2D, 0x5E, 0x2D, 0x68, 0x2E, 0x18, 0x2E, 0xF0, 0x2E, 0xFA, 0x2F, 0xAA, 0x2F, 0xD4, 0x00, 0x05,
+ 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x1F, 0xED, 0x00, 0x02, 0x03, 0x00,
+ 0x03, 0x85, 0x00, 0x02, 0x03, 0x01, 0x1F, 0xED, 0x00, 0x02, 0x03, 0x40, 0x03, 0x85, 0x00, 0x02,
+ 0x03, 0x41, 0x1F, 0xC1, 0x00, 0x02, 0x03, 0x42, 0x00, 0x4C, 0x00, 0x9A, 0x00, 0xA0, 0x00, 0xA6,
+ 0x00, 0xAC, 0x00, 0xB2, 0x00, 0xBC, 0x00, 0xC4, 0x00, 0xCE, 0x00, 0xD6, 0x00, 0xE0, 0x00, 0xE8,
+ 0x00, 0xF2, 0x00, 0xFA, 0x01, 0x04, 0x01, 0x0C, 0x01, 0x16, 0x01, 0x20, 0x01, 0x2A, 0x01, 0x34,
+ 0x01, 0x3E, 0x01, 0x46, 0x01, 0x4C, 0x01, 0x56, 0x01, 0x5E, 0x01, 0x68, 0x01, 0x70, 0x01, 0x7A,
+ 0x01, 0x82, 0x01, 0x8C, 0x01, 0x94, 0x01, 0x9E, 0x01, 0xA6, 0x01, 0xB0, 0x01, 0xBA, 0x01, 0xC4,
+ 0x01, 0xCE, 0x01, 0xD8, 0x01, 0xE0, 0x01, 0xE6, 0x01, 0xEC, 0x01, 0xF2, 0x01, 0xFC, 0x02, 0x04,
+ 0x02, 0x0E, 0x02, 0x16, 0x02, 0x20, 0x02, 0x28, 0x02, 0x32, 0x02, 0x3A, 0x02, 0x44, 0x02, 0x4C,
+ 0x02, 0x56, 0x02, 0x60, 0x02, 0x6A, 0x02, 0x74, 0x02, 0x7E, 0x02, 0x86, 0x02, 0x8C, 0x02, 0x96,
+ 0x02, 0xA0, 0x02, 0xAA, 0x02, 0xB4, 0x02, 0xBE, 0x02, 0xC6, 0x02, 0xD0, 0x02, 0xDA, 0x02, 0xE4,
+ 0x02, 0xEE, 0x02, 0xF8, 0x03, 0x00, 0x03, 0x0A, 0x03, 0x14, 0x03, 0x1E, 0x03, 0x28, 0x03, 0x32,
+ 0x03, 0x3A, 0x1F, 0xBA, 0x00, 0x02, 0x03, 0x00, 0x03, 0x86, 0x00, 0x02, 0x03, 0x01, 0x1F, 0xB9,
+ 0x00, 0x02, 0x03, 0x04, 0x1F, 0xB8, 0x00, 0x02, 0x03, 0x06, 0x1F, 0x8A, 0x00, 0x04, 0x03, 0x13,
+ 0x03, 0x00, 0x03, 0x45, 0x1F, 0x0A, 0x00, 0x03, 0x03, 0x13, 0x03, 0x00, 0x1F, 0x8C, 0x00, 0x04,
+ 0x03, 0x13, 0x03, 0x01, 0x03, 0x45, 0x1F, 0x0C, 0x00, 0x03, 0x03, 0x13, 0x03, 0x01, 0x1F, 0x8A,
+ 0x00, 0x04, 0x03, 0x13, 0x03, 0x40, 0x03, 0x45, 0x1F, 0x0A, 0x00, 0x03, 0x03, 0x13, 0x03, 0x40,
+ 0x1F, 0x8C, 0x00, 0x04, 0x03, 0x13, 0x03, 0x41, 0x03, 0x45, 0x1F, 0x0C, 0x00, 0x03, 0x03, 0x13,
+ 0x03, 0x41, 0x1F, 0x8E, 0x00, 0x04, 0x03, 0x13, 0x03, 0x42, 0x03, 0x45, 0x1F, 0x0E, 0x00, 0x03,
+ 0x03, 0x13, 0x03, 0x42, 0x1F, 0x8A, 0x00, 0x04, 0x03, 0x13, 0x03, 0x45, 0x03, 0x00, 0x1F, 0x8C,
+ 0x00, 0x04, 0x03, 0x13, 0x03, 0x45, 0x03, 0x01, 0x1F, 0x8A, 0x00, 0x04, 0x03, 0x13, 0x03, 0x45,
+ 0x03, 0x40, 0x1F, 0x8C, 0x00, 0x04, 0x03, 0x13, 0x03, 0x45, 0x03, 0x41, 0x1F, 0x8E, 0x00, 0x04,
+ 0x03, 0x13, 0x03, 0x45, 0x03, 0x42, 0x1F, 0x88, 0x00, 0x03, 0x03, 0x13, 0x03, 0x45, 0x1F, 0x08,
+ 0x00, 0x02, 0x03, 0x13, 0x1F, 0x8B, 0x00, 0x04, 0x03, 0x14, 0x03, 0x00, 0x03, 0x45, 0x1F, 0x0B,
+ 0x00, 0x03, 0x03, 0x14, 0x03, 0x00, 0x1F, 0x8D, 0x00, 0x04, 0x03, 0x14, 0x03, 0x01, 0x03, 0x45,
+ 0x1F, 0x0D, 0x00, 0x03, 0x03, 0x14, 0x03, 0x01, 0x1F, 0x8B, 0x00, 0x04, 0x03, 0x14, 0x03, 0x40,
+ 0x03, 0x45, 0x1F, 0x0B, 0x00, 0x03, 0x03, 0x14, 0x03, 0x40, 0x1F, 0x8D, 0x00, 0x04, 0x03, 0x14,
+ 0x03, 0x41, 0x03, 0x45, 0x1F, 0x0D, 0x00, 0x03, 0x03, 0x14, 0x03, 0x41, 0x1F, 0x8F, 0x00, 0x04,
+ 0x03, 0x14, 0x03, 0x42, 0x03, 0x45, 0x1F, 0x0F, 0x00, 0x03, 0x03, 0x14, 0x03, 0x42, 0x1F, 0x8B,
+ 0x00, 0x04, 0x03, 0x14, 0x03, 0x45, 0x03, 0x00, 0x1F, 0x8D, 0x00, 0x04, 0x03, 0x14, 0x03, 0x45,
+ 0x03, 0x01, 0x1F, 0x8B, 0x00, 0x04, 0x03, 0x14, 0x03, 0x45, 0x03, 0x40, 0x1F, 0x8D, 0x00, 0x04,
+ 0x03, 0x14, 0x03, 0x45, 0x03, 0x41, 0x1F, 0x8F, 0x00, 0x04, 0x03, 0x14, 0x03, 0x45, 0x03, 0x42,
+ 0x1F, 0x89, 0x00, 0x03, 0x03, 0x14, 0x03, 0x45, 0x1F, 0x09, 0x00, 0x02, 0x03, 0x14, 0x1F, 0xBA,
+ 0x00, 0x02, 0x03, 0x40, 0x03, 0x86, 0x00, 0x02, 0x03, 0x41, 0x1F, 0x8A, 0x00, 0x04, 0x03, 0x43,
+ 0x03, 0x00, 0x03, 0x45, 0x1F, 0x0A, 0x00, 0x03, 0x03, 0x43, 0x03, 0x00, 0x1F, 0x8C, 0x00, 0x04,
+ 0x03, 0x43, 0x03, 0x01, 0x03, 0x45, 0x1F, 0x0C, 0x00, 0x03, 0x03, 0x43, 0x03, 0x01, 0x1F, 0x8A,
+ 0x00, 0x04, 0x03, 0x43, 0x03, 0x40, 0x03, 0x45, 0x1F, 0x0A, 0x00, 0x03, 0x03, 0x43, 0x03, 0x40,
+ 0x1F, 0x8C, 0x00, 0x04, 0x03, 0x43, 0x03, 0x41, 0x03, 0x45, 0x1F, 0x0C, 0x00, 0x03, 0x03, 0x43,
+ 0x03, 0x41, 0x1F, 0x8E, 0x00, 0x04, 0x03, 0x43, 0x03, 0x42, 0x03, 0x45, 0x1F, 0x0E, 0x00, 0x03,
+ 0x03, 0x43, 0x03, 0x42, 0x1F, 0x8A, 0x00, 0x04, 0x03, 0x43, 0x03, 0x45, 0x03, 0x00, 0x1F, 0x8C,
+ 0x00, 0x04, 0x03, 0x43, 0x03, 0x45, 0x03, 0x01, 0x1F, 0x8A, 0x00, 0x04, 0x03, 0x43, 0x03, 0x45,
+ 0x03, 0x40, 0x1F, 0x8C, 0x00, 0x04, 0x03, 0x43, 0x03, 0x45, 0x03, 0x41, 0x1F, 0x8E, 0x00, 0x04,
+ 0x03, 0x43, 0x03, 0x45, 0x03, 0x42, 0x1F, 0x88, 0x00, 0x03, 0x03, 0x43, 0x03, 0x45, 0x1F, 0x08,
+ 0x00, 0x02, 0x03, 0x43, 0x1F, 0x8A, 0x00, 0x04, 0x03, 0x45, 0x03, 0x13, 0x03, 0x00, 0x1F, 0x8C,
+ 0x00, 0x04, 0x03, 0x45, 0x03, 0x13, 0x03, 0x01, 0x1F, 0x8A, 0x00, 0x04, 0x03, 0x45, 0x03, 0x13,
+ 0x03, 0x40, 0x1F, 0x8C, 0x00, 0x04, 0x03, 0x45, 0x03, 0x13, 0x03, 0x41, 0x1F, 0x8E, 0x00, 0x04,
+ 0x03, 0x45, 0x03, 0x13, 0x03, 0x42, 0x1F, 0x88, 0x00, 0x03, 0x03, 0x45, 0x03, 0x13, 0x1F, 0x8B,
+ 0x00, 0x04, 0x03, 0x45, 0x03, 0x14, 0x03, 0x00, 0x1F, 0x8D, 0x00, 0x04, 0x03, 0x45, 0x03, 0x14,
+ 0x03, 0x01, 0x1F, 0x8B, 0x00, 0x04, 0x03, 0x45, 0x03, 0x14, 0x03, 0x40, 0x1F, 0x8D, 0x00, 0x04,
+ 0x03, 0x45, 0x03, 0x14, 0x03, 0x41, 0x1F, 0x8F, 0x00, 0x04, 0x03, 0x45, 0x03, 0x14, 0x03, 0x42,
+ 0x1F, 0x89, 0x00, 0x03, 0x03, 0x45, 0x03, 0x14, 0x1F, 0x8A, 0x00, 0x04, 0x03, 0x45, 0x03, 0x43,
+ 0x03, 0x00, 0x1F, 0x8C, 0x00, 0x04, 0x03, 0x45, 0x03, 0x43, 0x03, 0x01, 0x1F, 0x8A, 0x00, 0x04,
+ 0x03, 0x45, 0x03, 0x43, 0x03, 0x40, 0x1F, 0x8C, 0x00, 0x04, 0x03, 0x45, 0x03, 0x43, 0x03, 0x41,
+ 0x1F, 0x8E, 0x00, 0x04, 0x03, 0x45, 0x03, 0x43, 0x03, 0x42, 0x1F, 0x88, 0x00, 0x03, 0x03, 0x45,
+ 0x03, 0x43, 0x1F, 0xBC, 0x00, 0x02, 0x03, 0x45, 0x00, 0x13, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x34,
+ 0x00, 0x3C, 0x00, 0x44, 0x00, 0x4C, 0x00, 0x54, 0x00, 0x5A, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x72,
+ 0x00, 0x7A, 0x00, 0x80, 0x00, 0x86, 0x00, 0x8C, 0x00, 0x94, 0x00, 0x9C, 0x00, 0xA4, 0x00, 0xAC,
+ 0x1F, 0xC8, 0x00, 0x02, 0x03, 0x00, 0x03, 0x88, 0x00, 0x02, 0x03, 0x01, 0x1F, 0x1A, 0x00, 0x03,
+ 0x03, 0x13, 0x03, 0x00, 0x1F, 0x1C, 0x00, 0x03, 0x03, 0x13, 0x03, 0x01, 0x1F, 0x1A, 0x00, 0x03,
+ 0x03, 0x13, 0x03, 0x40, 0x1F, 0x1C, 0x00, 0x03, 0x03, 0x13, 0x03, 0x41, 0x1F, 0x18, 0x00, 0x02,
+ 0x03, 0x13, 0x1F, 0x1B, 0x00, 0x03, 0x03, 0x14, 0x03, 0x00, 0x1F, 0x1D, 0x00, 0x03, 0x03, 0x14,
+ 0x03, 0x01, 0x1F, 0x1B, 0x00, 0x03, 0x03, 0x14, 0x03, 0x40, 0x1F, 0x1D, 0x00, 0x03, 0x03, 0x14,
+ 0x03, 0x41, 0x1F, 0x19, 0x00, 0x02, 0x03, 0x14, 0x1F, 0xC8, 0x00, 0x02, 0x03, 0x40, 0x03, 0x88,
+ 0x00, 0x02, 0x03, 0x41, 0x1F, 0x1A, 0x00, 0x03, 0x03, 0x43, 0x03, 0x00, 0x1F, 0x1C, 0x00, 0x03,
+ 0x03, 0x43, 0x03, 0x01, 0x1F, 0x1A, 0x00, 0x03, 0x03, 0x43, 0x03, 0x40, 0x1F, 0x1C, 0x00, 0x03,
+ 0x03, 0x43, 0x03, 0x41, 0x1F, 0x18, 0x00, 0x02, 0x03, 0x43, 0x00, 0x4A, 0x00, 0x96, 0x00, 0x9C,
+ 0x00, 0xA2, 0x00, 0xAC, 0x00, 0xB4, 0x00, 0xBE, 0x00, 0xC6, 0x00, 0xD0, 0x00, 0xD8, 0x00, 0xE2,
+ 0x00, 0xEA, 0x00, 0xF4, 0x00, 0xFC, 0x01, 0x06, 0x01, 0x10, 0x01, 0x1A, 0x01, 0x24, 0x01, 0x2E,
+ 0x01, 0x36, 0x01, 0x3C, 0x01, 0x46, 0x01, 0x4E, 0x01, 0x58, 0x01, 0x60, 0x01, 0x6A, 0x01, 0x72,
+ 0x01, 0x7C, 0x01, 0x84, 0x01, 0x8E, 0x01, 0x96, 0x01, 0xA0, 0x01, 0xAA, 0x01, 0xB4, 0x01, 0xBE,
+ 0x01, 0xC8, 0x01, 0xD0, 0x01, 0xD6, 0x01, 0xDC, 0x01, 0xE2, 0x01, 0xEC, 0x01, 0xF4, 0x01, 0xFE,
+ 0x02, 0x06, 0x02, 0x10, 0x02, 0x18, 0x02, 0x22, 0x02, 0x2A, 0x02, 0x34, 0x02, 0x3C, 0x02, 0x46,
+ 0x02, 0x50, 0x02, 0x5A, 0x02, 0x64, 0x02, 0x6E, 0x02, 0x76, 0x02, 0x7C, 0x02, 0x86, 0x02, 0x90,
+ 0x02, 0x9A, 0x02, 0xA4, 0x02, 0xAE, 0x02, 0xB6, 0x02, 0xC0, 0x02, 0xCA, 0x02, 0xD4, 0x02, 0xDE,
+ 0x02, 0xE8, 0x02, 0xF0, 0x02, 0xFA, 0x03, 0x04, 0x03, 0x0E, 0x03, 0x18, 0x03, 0x22, 0x03, 0x2A,
+ 0x1F, 0xCA, 0x00, 0x02, 0x03, 0x00, 0x03, 0x89, 0x00, 0x02, 0x03, 0x01, 0x1F, 0x9A, 0x00, 0x04,
+ 0x03, 0x13, 0x03, 0x00, 0x03, 0x45, 0x1F, 0x2A, 0x00, 0x03, 0x03, 0x13, 0x03, 0x00, 0x1F, 0x9C,
+ 0x00, 0x04, 0x03, 0x13, 0x03, 0x01, 0x03, 0x45, 0x1F, 0x2C, 0x00, 0x03, 0x03, 0x13, 0x03, 0x01,
+ 0x1F, 0x9A, 0x00, 0x04, 0x03, 0x13, 0x03, 0x40, 0x03, 0x45, 0x1F, 0x2A, 0x00, 0x03, 0x03, 0x13,
+ 0x03, 0x40, 0x1F, 0x9C, 0x00, 0x04, 0x03, 0x13, 0x03, 0x41, 0x03, 0x45, 0x1F, 0x2C, 0x00, 0x03,
+ 0x03, 0x13, 0x03, 0x41, 0x1F, 0x9E, 0x00, 0x04, 0x03, 0x13, 0x03, 0x42, 0x03, 0x45, 0x1F, 0x2E,
+ 0x00, 0x03, 0x03, 0x13, 0x03, 0x42, 0x1F, 0x9A, 0x00, 0x04, 0x03, 0x13, 0x03, 0x45, 0x03, 0x00,
+ 0x1F, 0x9C, 0x00, 0x04, 0x03, 0x13, 0x03, 0x45, 0x03, 0x01, 0x1F, 0x9A, 0x00, 0x04, 0x03, 0x13,
+ 0x03, 0x45, 0x03, 0x40, 0x1F, 0x9C, 0x00, 0x04, 0x03, 0x13, 0x03, 0x45, 0x03, 0x41, 0x1F, 0x9E,
+ 0x00, 0x04, 0x03, 0x13, 0x03, 0x45, 0x03, 0x42, 0x1F, 0x98, 0x00, 0x03, 0x03, 0x13, 0x03, 0x45,
+ 0x1F, 0x28, 0x00, 0x02, 0x03, 0x13, 0x1F, 0x9B, 0x00, 0x04, 0x03, 0x14, 0x03, 0x00, 0x03, 0x45,
+ 0x1F, 0x2B, 0x00, 0x03, 0x03, 0x14, 0x03, 0x00, 0x1F, 0x9D, 0x00, 0x04, 0x03, 0x14, 0x03, 0x01,
+ 0x03, 0x45, 0x1F, 0x2D, 0x00, 0x03, 0x03, 0x14, 0x03, 0x01, 0x1F, 0x9B, 0x00, 0x04, 0x03, 0x14,
+ 0x03, 0x40, 0x03, 0x45, 0x1F, 0x2B, 0x00, 0x03, 0x03, 0x14, 0x03, 0x40, 0x1F, 0x9D, 0x00, 0x04,
+ 0x03, 0x14, 0x03, 0x41, 0x03, 0x45, 0x1F, 0x2D, 0x00, 0x03, 0x03, 0x14, 0x03, 0x41, 0x1F, 0x9F,
+ 0x00, 0x04, 0x03, 0x14, 0x03, 0x42, 0x03, 0x45, 0x1F, 0x2F, 0x00, 0x03, 0x03, 0x14, 0x03, 0x42,
+ 0x1F, 0x9B, 0x00, 0x04, 0x03, 0x14, 0x03, 0x45, 0x03, 0x00, 0x1F, 0x9D, 0x00, 0x04, 0x03, 0x14,
+ 0x03, 0x45, 0x03, 0x01, 0x1F, 0x9B, 0x00, 0x04, 0x03, 0x14, 0x03, 0x45, 0x03, 0x40, 0x1F, 0x9D,
+ 0x00, 0x04, 0x03, 0x14, 0x03, 0x45, 0x03, 0x41, 0x1F, 0x9F, 0x00, 0x04, 0x03, 0x14, 0x03, 0x45,
+ 0x03, 0x42, 0x1F, 0x99, 0x00, 0x03, 0x03, 0x14, 0x03, 0x45, 0x1F, 0x29, 0x00, 0x02, 0x03, 0x14,
+ 0x1F, 0xCA, 0x00, 0x02, 0x03, 0x40, 0x03, 0x89, 0x00, 0x02, 0x03, 0x41, 0x1F, 0x9A, 0x00, 0x04,
+ 0x03, 0x43, 0x03, 0x00, 0x03, 0x45, 0x1F, 0x2A, 0x00, 0x03, 0x03, 0x43, 0x03, 0x00, 0x1F, 0x9C,
+ 0x00, 0x04, 0x03, 0x43, 0x03, 0x01, 0x03, 0x45, 0x1F, 0x2C, 0x00, 0x03, 0x03, 0x43, 0x03, 0x01,
+ 0x1F, 0x9A, 0x00, 0x04, 0x03, 0x43, 0x03, 0x40, 0x03, 0x45, 0x1F, 0x2A, 0x00, 0x03, 0x03, 0x43,
+ 0x03, 0x40, 0x1F, 0x9C, 0x00, 0x04, 0x03, 0x43, 0x03, 0x41, 0x03, 0x45, 0x1F, 0x2C, 0x00, 0x03,
+ 0x03, 0x43, 0x03, 0x41, 0x1F, 0x9E, 0x00, 0x04, 0x03, 0x43, 0x03, 0x42, 0x03, 0x45, 0x1F, 0x2E,
+ 0x00, 0x03, 0x03, 0x43, 0x03, 0x42, 0x1F, 0x9A, 0x00, 0x04, 0x03, 0x43, 0x03, 0x45, 0x03, 0x00,
+ 0x1F, 0x9C, 0x00, 0x04, 0x03, 0x43, 0x03, 0x45, 0x03, 0x01, 0x1F, 0x9A, 0x00, 0x04, 0x03, 0x43,
+ 0x03, 0x45, 0x03, 0x40, 0x1F, 0x9C, 0x00, 0x04, 0x03, 0x43, 0x03, 0x45, 0x03, 0x41, 0x1F, 0x9E,
+ 0x00, 0x04, 0x03, 0x43, 0x03, 0x45, 0x03, 0x42, 0x1F, 0x98, 0x00, 0x03, 0x03, 0x43, 0x03, 0x45,
+ 0x1F, 0x28, 0x00, 0x02, 0x03, 0x43, 0x1F, 0x9A, 0x00, 0x04, 0x03, 0x45, 0x03, 0x13, 0x03, 0x00,
+ 0x1F, 0x9C, 0x00, 0x04, 0x03, 0x45, 0x03, 0x13, 0x03, 0x01, 0x1F, 0x9A, 0x00, 0x04, 0x03, 0x45,
+ 0x03, 0x13, 0x03, 0x40, 0x1F, 0x9C, 0x00, 0x04, 0x03, 0x45, 0x03, 0x13, 0x03, 0x41, 0x1F, 0x9E,
+ 0x00, 0x04, 0x03, 0x45, 0x03, 0x13, 0x03, 0x42, 0x1F, 0x98, 0x00, 0x03, 0x03, 0x45, 0x03, 0x13,
+ 0x1F, 0x9B, 0x00, 0x04, 0x03, 0x45, 0x03, 0x14, 0x03, 0x00, 0x1F, 0x9D, 0x00, 0x04, 0x03, 0x45,
+ 0x03, 0x14, 0x03, 0x01, 0x1F, 0x9B, 0x00, 0x04, 0x03, 0x45, 0x03, 0x14, 0x03, 0x40, 0x1F, 0x9D,
+ 0x00, 0x04, 0x03, 0x45, 0x03, 0x14, 0x03, 0x41, 0x1F, 0x9F, 0x00, 0x04, 0x03, 0x45, 0x03, 0x14,
+ 0x03, 0x42, 0x1F, 0x99, 0x00, 0x03, 0x03, 0x45, 0x03, 0x14, 0x1F, 0x9A, 0x00, 0x04, 0x03, 0x45,
+ 0x03, 0x43, 0x03, 0x00, 0x1F, 0x9C, 0x00, 0x04, 0x03, 0x45, 0x03, 0x43, 0x03, 0x01, 0x1F, 0x9A,
+ 0x00, 0x04, 0x03, 0x45, 0x03, 0x43, 0x03, 0x40, 0x1F, 0x9C, 0x00, 0x04, 0x03, 0x45, 0x03, 0x43,
+ 0x03, 0x41, 0x1F, 0x9E, 0x00, 0x04, 0x03, 0x45, 0x03, 0x43, 0x03, 0x42, 0x1F, 0x98, 0x00, 0x03,
+ 0x03, 0x45, 0x03, 0x43, 0x1F, 0xCC, 0x00, 0x02, 0x03, 0x45, 0x00, 0x19, 0x00, 0x34, 0x00, 0x3A,
+ 0x00, 0x40, 0x00, 0x46, 0x00, 0x4C, 0x00, 0x52, 0x00, 0x5A, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x72,
+ 0x00, 0x7A, 0x00, 0x80, 0x00, 0x88, 0x00, 0x90, 0x00, 0x98, 0x00, 0xA0, 0x00, 0xA8, 0x00, 0xAE,
+ 0x00, 0xB4, 0x00, 0xBA, 0x00, 0xC2, 0x00, 0xCA, 0x00, 0xD2, 0x00, 0xDA, 0x00, 0xE2, 0x1F, 0xDA,
+ 0x00, 0x02, 0x03, 0x00, 0x03, 0x8A, 0x00, 0x02, 0x03, 0x01, 0x1F, 0xD9, 0x00, 0x02, 0x03, 0x04,
+ 0x1F, 0xD8, 0x00, 0x02, 0x03, 0x06, 0x03, 0xAA, 0x00, 0x02, 0x03, 0x08, 0x1F, 0x3A, 0x00, 0x03,
+ 0x03, 0x13, 0x03, 0x00, 0x1F, 0x3C, 0x00, 0x03, 0x03, 0x13, 0x03, 0x01, 0x1F, 0x3A, 0x00, 0x03,
+ 0x03, 0x13, 0x03, 0x40, 0x1F, 0x3C, 0x00, 0x03, 0x03, 0x13, 0x03, 0x41, 0x1F, 0x3E, 0x00, 0x03,
+ 0x03, 0x13, 0x03, 0x42, 0x1F, 0x38, 0x00, 0x02, 0x03, 0x13, 0x1F, 0x3B, 0x00, 0x03, 0x03, 0x14,
+ 0x03, 0x00, 0x1F, 0x3D, 0x00, 0x03, 0x03, 0x14, 0x03, 0x01, 0x1F, 0x3B, 0x00, 0x03, 0x03, 0x14,
+ 0x03, 0x40, 0x1F, 0x3D, 0x00, 0x03, 0x03, 0x14, 0x03, 0x41, 0x1F, 0x3F, 0x00, 0x03, 0x03, 0x14,
+ 0x03, 0x42, 0x1F, 0x39, 0x00, 0x02, 0x03, 0x14, 0x1F, 0xDA, 0x00, 0x02, 0x03, 0x40, 0x03, 0x8A,
+ 0x00, 0x02, 0x03, 0x41, 0x1F, 0x3A, 0x00, 0x03, 0x03, 0x43, 0x03, 0x00, 0x1F, 0x3C, 0x00, 0x03,
+ 0x03, 0x43, 0x03, 0x01, 0x1F, 0x3A, 0x00, 0x03, 0x03, 0x43, 0x03, 0x40, 0x1F, 0x3C, 0x00, 0x03,
+ 0x03, 0x43, 0x03, 0x41, 0x1F, 0x3E, 0x00, 0x03, 0x03, 0x43, 0x03, 0x42, 0x1F, 0x38, 0x00, 0x02,
+ 0x03, 0x43, 0x00, 0x13, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x34, 0x00, 0x3C, 0x00, 0x44, 0x00, 0x4C,
+ 0x00, 0x54, 0x00, 0x5A, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x72, 0x00, 0x7A, 0x00, 0x80, 0x00, 0x86,
+ 0x00, 0x8C, 0x00, 0x94, 0x00, 0x9C, 0x00, 0xA4, 0x00, 0xAC, 0x1F, 0xF8, 0x00, 0x02, 0x03, 0x00,
+ 0x03, 0x8C, 0x00, 0x02, 0x03, 0x01, 0x1F, 0x4A, 0x00, 0x03, 0x03, 0x13, 0x03, 0x00, 0x1F, 0x4C,
+ 0x00, 0x03, 0x03, 0x13, 0x03, 0x01, 0x1F, 0x4A, 0x00, 0x03, 0x03, 0x13, 0x03, 0x40, 0x1F, 0x4C,
+ 0x00, 0x03, 0x03, 0x13, 0x03, 0x41, 0x1F, 0x48, 0x00, 0x02, 0x03, 0x13, 0x1F, 0x4B, 0x00, 0x03,
+ 0x03, 0x14, 0x03, 0x00, 0x1F, 0x4D, 0x00, 0x03, 0x03, 0x14, 0x03, 0x01, 0x1F, 0x4B, 0x00, 0x03,
+ 0x03, 0x14, 0x03, 0x40, 0x1F, 0x4D, 0x00, 0x03, 0x03, 0x14, 0x03, 0x41, 0x1F, 0x49, 0x00, 0x02,
+ 0x03, 0x14, 0x1F, 0xF8, 0x00, 0x02, 0x03, 0x40, 0x03, 0x8C, 0x00, 0x02, 0x03, 0x41, 0x1F, 0x4A,
+ 0x00, 0x03, 0x03, 0x43, 0x03, 0x00, 0x1F, 0x4C, 0x00, 0x03, 0x03, 0x43, 0x03, 0x01, 0x1F, 0x4A,
+ 0x00, 0x03, 0x03, 0x43, 0x03, 0x40, 0x1F, 0x4C, 0x00, 0x03, 0x03, 0x43, 0x03, 0x41, 0x1F, 0x48,
+ 0x00, 0x02, 0x03, 0x43, 0x00, 0x01, 0x00, 0x04, 0x1F, 0xEC, 0x00, 0x02, 0x03, 0x14, 0x00, 0x0D,
+ 0x00, 0x1C, 0x00, 0x22, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x34, 0x00, 0x3A, 0x00, 0x42, 0x00, 0x4A,
+ 0x00, 0x52, 0x00, 0x5A, 0x00, 0x62, 0x00, 0x68, 0x00, 0x6E, 0x1F, 0xEA, 0x00, 0x02, 0x03, 0x00,
+ 0x03, 0x8E, 0x00, 0x02, 0x03, 0x01, 0x1F, 0xE9, 0x00, 0x02, 0x03, 0x04, 0x1F, 0xE8, 0x00, 0x02,
+ 0x03, 0x06, 0x03, 0xAB, 0x00, 0x02, 0x03, 0x08, 0x1F, 0x5B, 0x00, 0x03, 0x03, 0x14, 0x03, 0x00,
+ 0x1F, 0x5D, 0x00, 0x03, 0x03, 0x14, 0x03, 0x01, 0x1F, 0x5B, 0x00, 0x03, 0x03, 0x14, 0x03, 0x40,
+ 0x1F, 0x5D, 0x00, 0x03, 0x03, 0x14, 0x03, 0x41, 0x1F, 0x5F, 0x00, 0x03, 0x03, 0x14, 0x03, 0x42,
+ 0x1F, 0x59, 0x00, 0x02, 0x03, 0x14, 0x1F, 0xEA, 0x00, 0x02, 0x03, 0x40, 0x03, 0x8E, 0x00, 0x02,
+ 0x03, 0x41, 0x00, 0x4A, 0x00, 0x96, 0x00, 0x9C, 0x00, 0xA2, 0x00, 0xAC, 0x00, 0xB4, 0x00, 0xBE,
+ 0x00, 0xC6, 0x00, 0xD0, 0x00, 0xD8, 0x00, 0xE2, 0x00, 0xEA, 0x00, 0xF4, 0x00, 0xFC, 0x01, 0x06,
+ 0x01, 0x10, 0x01, 0x1A, 0x01, 0x24, 0x01, 0x2E, 0x01, 0x36, 0x01, 0x3C, 0x01, 0x46, 0x01, 0x4E,
+ 0x01, 0x58, 0x01, 0x60, 0x01, 0x6A, 0x01, 0x72, 0x01, 0x7C, 0x01, 0x84, 0x01, 0x8E, 0x01, 0x96,
+ 0x01, 0xA0, 0x01, 0xAA, 0x01, 0xB4, 0x01, 0xBE, 0x01, 0xC8, 0x01, 0xD0, 0x01, 0xD6, 0x01, 0xDC,
+ 0x01, 0xE2, 0x01, 0xEC, 0x01, 0xF4, 0x01, 0xFE, 0x02, 0x06, 0x02, 0x10, 0x02, 0x18, 0x02, 0x22,
+ 0x02, 0x2A, 0x02, 0x34, 0x02, 0x3C, 0x02, 0x46, 0x02, 0x50, 0x02, 0x5A, 0x02, 0x64, 0x02, 0x6E,
+ 0x02, 0x76, 0x02, 0x7C, 0x02, 0x86, 0x02, 0x90, 0x02, 0x9A, 0x02, 0xA4, 0x02, 0xAE, 0x02, 0xB6,
+ 0x02, 0xC0, 0x02, 0xCA, 0x02, 0xD4, 0x02, 0xDE, 0x02, 0xE8, 0x02, 0xF0, 0x02, 0xFA, 0x03, 0x04,
+ 0x03, 0x0E, 0x03, 0x18, 0x03, 0x22, 0x03, 0x2A, 0x1F, 0xFA, 0x00, 0x02, 0x03, 0x00, 0x03, 0x8F,
+ 0x00, 0x02, 0x03, 0x01, 0x1F, 0xAA, 0x00, 0x04, 0x03, 0x13, 0x03, 0x00, 0x03, 0x45, 0x1F, 0x6A,
+ 0x00, 0x03, 0x03, 0x13, 0x03, 0x00, 0x1F, 0xAC, 0x00, 0x04, 0x03, 0x13, 0x03, 0x01, 0x03, 0x45,
+ 0x1F, 0x6C, 0x00, 0x03, 0x03, 0x13, 0x03, 0x01, 0x1F, 0xAA, 0x00, 0x04, 0x03, 0x13, 0x03, 0x40,
+ 0x03, 0x45, 0x1F, 0x6A, 0x00, 0x03, 0x03, 0x13, 0x03, 0x40, 0x1F, 0xAC, 0x00, 0x04, 0x03, 0x13,
+ 0x03, 0x41, 0x03, 0x45, 0x1F, 0x6C, 0x00, 0x03, 0x03, 0x13, 0x03, 0x41, 0x1F, 0xAE, 0x00, 0x04,
+ 0x03, 0x13, 0x03, 0x42, 0x03, 0x45, 0x1F, 0x6E, 0x00, 0x03, 0x03, 0x13, 0x03, 0x42, 0x1F, 0xAA,
+ 0x00, 0x04, 0x03, 0x13, 0x03, 0x45, 0x03, 0x00, 0x1F, 0xAC, 0x00, 0x04, 0x03, 0x13, 0x03, 0x45,
+ 0x03, 0x01, 0x1F, 0xAA, 0x00, 0x04, 0x03, 0x13, 0x03, 0x45, 0x03, 0x40, 0x1F, 0xAC, 0x00, 0x04,
+ 0x03, 0x13, 0x03, 0x45, 0x03, 0x41, 0x1F, 0xAE, 0x00, 0x04, 0x03, 0x13, 0x03, 0x45, 0x03, 0x42,
+ 0x1F, 0xA8, 0x00, 0x03, 0x03, 0x13, 0x03, 0x45, 0x1F, 0x68, 0x00, 0x02, 0x03, 0x13, 0x1F, 0xAB,
+ 0x00, 0x04, 0x03, 0x14, 0x03, 0x00, 0x03, 0x45, 0x1F, 0x6B, 0x00, 0x03, 0x03, 0x14, 0x03, 0x00,
+ 0x1F, 0xAD, 0x00, 0x04, 0x03, 0x14, 0x03, 0x01, 0x03, 0x45, 0x1F, 0x6D, 0x00, 0x03, 0x03, 0x14,
+ 0x03, 0x01, 0x1F, 0xAB, 0x00, 0x04, 0x03, 0x14, 0x03, 0x40, 0x03, 0x45, 0x1F, 0x6B, 0x00, 0x03,
+ 0x03, 0x14, 0x03, 0x40, 0x1F, 0xAD, 0x00, 0x04, 0x03, 0x14, 0x03, 0x41, 0x03, 0x45, 0x1F, 0x6D,
+ 0x00, 0x03, 0x03, 0x14, 0x03, 0x41, 0x1F, 0xAF, 0x00, 0x04, 0x03, 0x14, 0x03, 0x42, 0x03, 0x45,
+ 0x1F, 0x6F, 0x00, 0x03, 0x03, 0x14, 0x03, 0x42, 0x1F, 0xAB, 0x00, 0x04, 0x03, 0x14, 0x03, 0x45,
+ 0x03, 0x00, 0x1F, 0xAD, 0x00, 0x04, 0x03, 0x14, 0x03, 0x45, 0x03, 0x01, 0x1F, 0xAB, 0x00, 0x04,
+ 0x03, 0x14, 0x03, 0x45, 0x03, 0x40, 0x1F, 0xAD, 0x00, 0x04, 0x03, 0x14, 0x03, 0x45, 0x03, 0x41,
+ 0x1F, 0xAF, 0x00, 0x04, 0x03, 0x14, 0x03, 0x45, 0x03, 0x42, 0x1F, 0xA9, 0x00, 0x03, 0x03, 0x14,
+ 0x03, 0x45, 0x1F, 0x69, 0x00, 0x02, 0x03, 0x14, 0x1F, 0xFA, 0x00, 0x02, 0x03, 0x40, 0x03, 0x8F,
+ 0x00, 0x02, 0x03, 0x41, 0x1F, 0xAA, 0x00, 0x04, 0x03, 0x43, 0x03, 0x00, 0x03, 0x45, 0x1F, 0x6A,
+ 0x00, 0x03, 0x03, 0x43, 0x03, 0x00, 0x1F, 0xAC, 0x00, 0x04, 0x03, 0x43, 0x03, 0x01, 0x03, 0x45,
+ 0x1F, 0x6C, 0x00, 0x03, 0x03, 0x43, 0x03, 0x01, 0x1F, 0xAA, 0x00, 0x04, 0x03, 0x43, 0x03, 0x40,
+ 0x03, 0x45, 0x1F, 0x6A, 0x00, 0x03, 0x03, 0x43, 0x03, 0x40, 0x1F, 0xAC, 0x00, 0x04, 0x03, 0x43,
+ 0x03, 0x41, 0x03, 0x45, 0x1F, 0x6C, 0x00, 0x03, 0x03, 0x43, 0x03, 0x41, 0x1F, 0xAE, 0x00, 0x04,
+ 0x03, 0x43, 0x03, 0x42, 0x03, 0x45, 0x1F, 0x6E, 0x00, 0x03, 0x03, 0x43, 0x03, 0x42, 0x1F, 0xAA,
+ 0x00, 0x04, 0x03, 0x43, 0x03, 0x45, 0x03, 0x00, 0x1F, 0xAC, 0x00, 0x04, 0x03, 0x43, 0x03, 0x45,
+ 0x03, 0x01, 0x1F, 0xAA, 0x00, 0x04, 0x03, 0x43, 0x03, 0x45, 0x03, 0x40, 0x1F, 0xAC, 0x00, 0x04,
+ 0x03, 0x43, 0x03, 0x45, 0x03, 0x41, 0x1F, 0xAE, 0x00, 0x04, 0x03, 0x43, 0x03, 0x45, 0x03, 0x42,
+ 0x1F, 0xA8, 0x00, 0x03, 0x03, 0x43, 0x03, 0x45, 0x1F, 0x68, 0x00, 0x02, 0x03, 0x43, 0x1F, 0xAA,
+ 0x00, 0x04, 0x03, 0x45, 0x03, 0x13, 0x03, 0x00, 0x1F, 0xAC, 0x00, 0x04, 0x03, 0x45, 0x03, 0x13,
+ 0x03, 0x01, 0x1F, 0xAA, 0x00, 0x04, 0x03, 0x45, 0x03, 0x13, 0x03, 0x40, 0x1F, 0xAC, 0x00, 0x04,
+ 0x03, 0x45, 0x03, 0x13, 0x03, 0x41, 0x1F, 0xAE, 0x00, 0x04, 0x03, 0x45, 0x03, 0x13, 0x03, 0x42,
+ 0x1F, 0xA8, 0x00, 0x03, 0x03, 0x45, 0x03, 0x13, 0x1F, 0xAB, 0x00, 0x04, 0x03, 0x45, 0x03, 0x14,
+ 0x03, 0x00, 0x1F, 0xAD, 0x00, 0x04, 0x03, 0x45, 0x03, 0x14, 0x03, 0x01, 0x1F, 0xAB, 0x00, 0x04,
+ 0x03, 0x45, 0x03, 0x14, 0x03, 0x40, 0x1F, 0xAD, 0x00, 0x04, 0x03, 0x45, 0x03, 0x14, 0x03, 0x41,
+ 0x1F, 0xAF, 0x00, 0x04, 0x03, 0x45, 0x03, 0x14, 0x03, 0x42, 0x1F, 0xA9, 0x00, 0x03, 0x03, 0x45,
+ 0x03, 0x14, 0x1F, 0xAA, 0x00, 0x04, 0x03, 0x45, 0x03, 0x43, 0x03, 0x00, 0x1F, 0xAC, 0x00, 0x04,
+ 0x03, 0x45, 0x03, 0x43, 0x03, 0x01, 0x1F, 0xAA, 0x00, 0x04, 0x03, 0x45, 0x03, 0x43, 0x03, 0x40,
+ 0x1F, 0xAC, 0x00, 0x04, 0x03, 0x45, 0x03, 0x43, 0x03, 0x41, 0x1F, 0xAE, 0x00, 0x04, 0x03, 0x45,
+ 0x03, 0x43, 0x03, 0x42, 0x1F, 0xA8, 0x00, 0x03, 0x03, 0x45, 0x03, 0x43, 0x1F, 0xFC, 0x00, 0x02,
+ 0x03, 0x45, 0x00, 0x01, 0x00, 0x04, 0x1F, 0xB4, 0x00, 0x02, 0x03, 0x45, 0x00, 0x01, 0x00, 0x04,
+ 0x1F, 0xC4, 0x00, 0x02, 0x03, 0x45, 0x00, 0x57, 0x00, 0xB0, 0x00, 0xB8, 0x00, 0xBE, 0x00, 0xC6,
+ 0x00, 0xCC, 0x00, 0xD2, 0x00, 0xD8, 0x00, 0xE2, 0x00, 0xEA, 0x00, 0xF4, 0x00, 0xFC, 0x01, 0x06,
+ 0x01, 0x0E, 0x01, 0x18, 0x01, 0x20, 0x01, 0x2A, 0x01, 0x32, 0x01, 0x3C, 0x01, 0x46, 0x01, 0x50,
+ 0x01, 0x5A, 0x01, 0x64, 0x01, 0x6C, 0x01, 0x72, 0x01, 0x7C, 0x01, 0x84, 0x01, 0x8E, 0x01, 0x96,
+ 0x01, 0xA0, 0x01, 0xA8, 0x01, 0xB2, 0x01, 0xBA, 0x01, 0xC4, 0x01, 0xCC, 0x01, 0xD6, 0x01, 0xE0,
+ 0x01, 0xEA, 0x01, 0xF4, 0x01, 0xFE, 0x02, 0x06, 0x02, 0x0C, 0x02, 0x14, 0x02, 0x1A, 0x02, 0x22,
+ 0x02, 0x28, 0x02, 0x30, 0x02, 0x36, 0x02, 0x40, 0x02, 0x48, 0x02, 0x52, 0x02, 0x5A, 0x02, 0x64,
+ 0x02, 0x6C, 0x02, 0x76, 0x02, 0x7E, 0x02, 0x88, 0x02, 0x90, 0x02, 0x9A, 0x02, 0xA4, 0x02, 0xAE,
+ 0x02, 0xB8, 0x02, 0xC2, 0x02, 0xCA, 0x02, 0xD0, 0x02, 0xD8, 0x02, 0xE0, 0x02, 0xEA, 0x02, 0xF4,
+ 0x02, 0xFE, 0x03, 0x08, 0x03, 0x12, 0x03, 0x1A, 0x03, 0x24, 0x03, 0x2E, 0x03, 0x38, 0x03, 0x42,
+ 0x03, 0x4C, 0x03, 0x54, 0x03, 0x5C, 0x03, 0x64, 0x03, 0x6C, 0x03, 0x76, 0x03, 0x80, 0x03, 0x8A,
+ 0x03, 0x94, 0x03, 0x9E, 0x03, 0xA6, 0x1F, 0xB2, 0x00, 0x03, 0x03, 0x00, 0x03, 0x45, 0x1F, 0x70,
+ 0x00, 0x02, 0x03, 0x00, 0x1F, 0xB4, 0x00, 0x03, 0x03, 0x01, 0x03, 0x45, 0x03, 0xAC, 0x00, 0x02,
+ 0x03, 0x01, 0x1F, 0xB1, 0x00, 0x02, 0x03, 0x04, 0x1F, 0xB0, 0x00, 0x02, 0x03, 0x06, 0x1F, 0x82,
+ 0x00, 0x04, 0x03, 0x13, 0x03, 0x00, 0x03, 0x45, 0x1F, 0x02, 0x00, 0x03, 0x03, 0x13, 0x03, 0x00,
+ 0x1F, 0x84, 0x00, 0x04, 0x03, 0x13, 0x03, 0x01, 0x03, 0x45, 0x1F, 0x04, 0x00, 0x03, 0x03, 0x13,
+ 0x03, 0x01, 0x1F, 0x82, 0x00, 0x04, 0x03, 0x13, 0x03, 0x40, 0x03, 0x45, 0x1F, 0x02, 0x00, 0x03,
+ 0x03, 0x13, 0x03, 0x40, 0x1F, 0x84, 0x00, 0x04, 0x03, 0x13, 0x03, 0x41, 0x03, 0x45, 0x1F, 0x04,
+ 0x00, 0x03, 0x03, 0x13, 0x03, 0x41, 0x1F, 0x86, 0x00, 0x04, 0x03, 0x13, 0x03, 0x42, 0x03, 0x45,
+ 0x1F, 0x06, 0x00, 0x03, 0x03, 0x13, 0x03, 0x42, 0x1F, 0x82, 0x00, 0x04, 0x03, 0x13, 0x03, 0x45,
+ 0x03, 0x00, 0x1F, 0x84, 0x00, 0x04, 0x03, 0x13, 0x03, 0x45, 0x03, 0x01, 0x1F, 0x82, 0x00, 0x04,
+ 0x03, 0x13, 0x03, 0x45, 0x03, 0x40, 0x1F, 0x84, 0x00, 0x04, 0x03, 0x13, 0x03, 0x45, 0x03, 0x41,
+ 0x1F, 0x86, 0x00, 0x04, 0x03, 0x13, 0x03, 0x45, 0x03, 0x42, 0x1F, 0x80, 0x00, 0x03, 0x03, 0x13,
+ 0x03, 0x45, 0x1F, 0x00, 0x00, 0x02, 0x03, 0x13, 0x1F, 0x83, 0x00, 0x04, 0x03, 0x14, 0x03, 0x00,
+ 0x03, 0x45, 0x1F, 0x03, 0x00, 0x03, 0x03, 0x14, 0x03, 0x00, 0x1F, 0x85, 0x00, 0x04, 0x03, 0x14,
+ 0x03, 0x01, 0x03, 0x45, 0x1F, 0x05, 0x00, 0x03, 0x03, 0x14, 0x03, 0x01, 0x1F, 0x83, 0x00, 0x04,
+ 0x03, 0x14, 0x03, 0x40, 0x03, 0x45, 0x1F, 0x03, 0x00, 0x03, 0x03, 0x14, 0x03, 0x40, 0x1F, 0x85,
+ 0x00, 0x04, 0x03, 0x14, 0x03, 0x41, 0x03, 0x45, 0x1F, 0x05, 0x00, 0x03, 0x03, 0x14, 0x03, 0x41,
+ 0x1F, 0x87, 0x00, 0x04, 0x03, 0x14, 0x03, 0x42, 0x03, 0x45, 0x1F, 0x07, 0x00, 0x03, 0x03, 0x14,
+ 0x03, 0x42, 0x1F, 0x83, 0x00, 0x04, 0x03, 0x14, 0x03, 0x45, 0x03, 0x00, 0x1F, 0x85, 0x00, 0x04,
+ 0x03, 0x14, 0x03, 0x45, 0x03, 0x01, 0x1F, 0x83, 0x00, 0x04, 0x03, 0x14, 0x03, 0x45, 0x03, 0x40,
+ 0x1F, 0x85, 0x00, 0x04, 0x03, 0x14, 0x03, 0x45, 0x03, 0x41, 0x1F, 0x87, 0x00, 0x04, 0x03, 0x14,
+ 0x03, 0x45, 0x03, 0x42, 0x1F, 0x81, 0x00, 0x03, 0x03, 0x14, 0x03, 0x45, 0x1F, 0x01, 0x00, 0x02,
+ 0x03, 0x14, 0x1F, 0xB2, 0x00, 0x03, 0x03, 0x40, 0x03, 0x45, 0x1F, 0x70, 0x00, 0x02, 0x03, 0x40,
+ 0x1F, 0xB4, 0x00, 0x03, 0x03, 0x41, 0x03, 0x45, 0x03, 0xAC, 0x00, 0x02, 0x03, 0x41, 0x1F, 0xB7,
+ 0x00, 0x03, 0x03, 0x42, 0x03, 0x45, 0x1F, 0xB6, 0x00, 0x02, 0x03, 0x42, 0x1F, 0x82, 0x00, 0x04,
+ 0x03, 0x43, 0x03, 0x00, 0x03, 0x45, 0x1F, 0x02, 0x00, 0x03, 0x03, 0x43, 0x03, 0x00, 0x1F, 0x84,
+ 0x00, 0x04, 0x03, 0x43, 0x03, 0x01, 0x03, 0x45, 0x1F, 0x04, 0x00, 0x03, 0x03, 0x43, 0x03, 0x01,
+ 0x1F, 0x82, 0x00, 0x04, 0x03, 0x43, 0x03, 0x40, 0x03, 0x45, 0x1F, 0x02, 0x00, 0x03, 0x03, 0x43,
+ 0x03, 0x40, 0x1F, 0x84, 0x00, 0x04, 0x03, 0x43, 0x03, 0x41, 0x03, 0x45, 0x1F, 0x04, 0x00, 0x03,
+ 0x03, 0x43, 0x03, 0x41, 0x1F, 0x86, 0x00, 0x04, 0x03, 0x43, 0x03, 0x42, 0x03, 0x45, 0x1F, 0x06,
+ 0x00, 0x03, 0x03, 0x43, 0x03, 0x42, 0x1F, 0x82, 0x00, 0x04, 0x03, 0x43, 0x03, 0x45, 0x03, 0x00,
+ 0x1F, 0x84, 0x00, 0x04, 0x03, 0x43, 0x03, 0x45, 0x03, 0x01, 0x1F, 0x82, 0x00, 0x04, 0x03, 0x43,
+ 0x03, 0x45, 0x03, 0x40, 0x1F, 0x84, 0x00, 0x04, 0x03, 0x43, 0x03, 0x45, 0x03, 0x41, 0x1F, 0x86,
+ 0x00, 0x04, 0x03, 0x43, 0x03, 0x45, 0x03, 0x42, 0x1F, 0x80, 0x00, 0x03, 0x03, 0x43, 0x03, 0x45,
+ 0x1F, 0x00, 0x00, 0x02, 0x03, 0x43, 0x1F, 0xB2, 0x00, 0x03, 0x03, 0x45, 0x03, 0x00, 0x1F, 0xB4,
+ 0x00, 0x03, 0x03, 0x45, 0x03, 0x01, 0x1F, 0x82, 0x00, 0x04, 0x03, 0x45, 0x03, 0x13, 0x03, 0x00,
+ 0x1F, 0x84, 0x00, 0x04, 0x03, 0x45, 0x03, 0x13, 0x03, 0x01, 0x1F, 0x82, 0x00, 0x04, 0x03, 0x45,
+ 0x03, 0x13, 0x03, 0x40, 0x1F, 0x84, 0x00, 0x04, 0x03, 0x45, 0x03, 0x13, 0x03, 0x41, 0x1F, 0x86,
+ 0x00, 0x04, 0x03, 0x45, 0x03, 0x13, 0x03, 0x42, 0x1F, 0x80, 0x00, 0x03, 0x03, 0x45, 0x03, 0x13,
+ 0x1F, 0x83, 0x00, 0x04, 0x03, 0x45, 0x03, 0x14, 0x03, 0x00, 0x1F, 0x85, 0x00, 0x04, 0x03, 0x45,
+ 0x03, 0x14, 0x03, 0x01, 0x1F, 0x83, 0x00, 0x04, 0x03, 0x45, 0x03, 0x14, 0x03, 0x40, 0x1F, 0x85,
+ 0x00, 0x04, 0x03, 0x45, 0x03, 0x14, 0x03, 0x41, 0x1F, 0x87, 0x00, 0x04, 0x03, 0x45, 0x03, 0x14,
+ 0x03, 0x42, 0x1F, 0x81, 0x00, 0x03, 0x03, 0x45, 0x03, 0x14, 0x1F, 0xB2, 0x00, 0x03, 0x03, 0x45,
+ 0x03, 0x40, 0x1F, 0xB4, 0x00, 0x03, 0x03, 0x45, 0x03, 0x41, 0x1F, 0xB7, 0x00, 0x03, 0x03, 0x45,
+ 0x03, 0x42, 0x1F, 0x82, 0x00, 0x04, 0x03, 0x45, 0x03, 0x43, 0x03, 0x00, 0x1F, 0x84, 0x00, 0x04,
+ 0x03, 0x45, 0x03, 0x43, 0x03, 0x01, 0x1F, 0x82, 0x00, 0x04, 0x03, 0x45, 0x03, 0x43, 0x03, 0x40,
+ 0x1F, 0x84, 0x00, 0x04, 0x03, 0x45, 0x03, 0x43, 0x03, 0x41, 0x1F, 0x86, 0x00, 0x04, 0x03, 0x45,
+ 0x03, 0x43, 0x03, 0x42, 0x1F, 0x80, 0x00, 0x03, 0x03, 0x45, 0x03, 0x43, 0x1F, 0xB3, 0x00, 0x02,
+ 0x03, 0x45, 0x00, 0x13, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x34, 0x00, 0x3C, 0x00, 0x44, 0x00, 0x4C,
+ 0x00, 0x54, 0x00, 0x5A, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x72, 0x00, 0x7A, 0x00, 0x80, 0x00, 0x86,
+ 0x00, 0x8C, 0x00, 0x94, 0x00, 0x9C, 0x00, 0xA4, 0x00, 0xAC, 0x1F, 0x72, 0x00, 0x02, 0x03, 0x00,
+ 0x03, 0xAD, 0x00, 0x02, 0x03, 0x01, 0x1F, 0x12, 0x00, 0x03, 0x03, 0x13, 0x03, 0x00, 0x1F, 0x14,
+ 0x00, 0x03, 0x03, 0x13, 0x03, 0x01, 0x1F, 0x12, 0x00, 0x03, 0x03, 0x13, 0x03, 0x40, 0x1F, 0x14,
+ 0x00, 0x03, 0x03, 0x13, 0x03, 0x41, 0x1F, 0x10, 0x00, 0x02, 0x03, 0x13, 0x1F, 0x13, 0x00, 0x03,
+ 0x03, 0x14, 0x03, 0x00, 0x1F, 0x15, 0x00, 0x03, 0x03, 0x14, 0x03, 0x01, 0x1F, 0x13, 0x00, 0x03,
+ 0x03, 0x14, 0x03, 0x40, 0x1F, 0x15, 0x00, 0x03, 0x03, 0x14, 0x03, 0x41, 0x1F, 0x11, 0x00, 0x02,
+ 0x03, 0x14, 0x1F, 0x72, 0x00, 0x02, 0x03, 0x40, 0x03, 0xAD, 0x00, 0x02, 0x03, 0x41, 0x1F, 0x12,
+ 0x00, 0x03, 0x03, 0x43, 0x03, 0x00, 0x1F, 0x14, 0x00, 0x03, 0x03, 0x43, 0x03, 0x01, 0x1F, 0x12,
+ 0x00, 0x03, 0x03, 0x43, 0x03, 0x40, 0x1F, 0x14, 0x00, 0x03, 0x03, 0x43, 0x03, 0x41, 0x1F, 0x10,
+ 0x00, 0x02, 0x03, 0x43, 0x00, 0x55, 0x00, 0xAC, 0x00, 0xB4, 0x00, 0xBA, 0x00, 0xC2, 0x00, 0xC8,
+ 0x00, 0xD2, 0x00, 0xDA, 0x00, 0xE4, 0x00, 0xEC, 0x00, 0xF6, 0x00, 0xFE, 0x01, 0x08, 0x01, 0x10,
+ 0x01, 0x1A, 0x01, 0x22, 0x01, 0x2C, 0x01, 0x36, 0x01, 0x40, 0x01, 0x4A, 0x01, 0x54, 0x01, 0x5C,
+ 0x01, 0x62, 0x01, 0x6C, 0x01, 0x74, 0x01, 0x7E, 0x01, 0x86, 0x01, 0x90, 0x01, 0x98, 0x01, 0xA2,
+ 0x01, 0xAA, 0x01, 0xB4, 0x01, 0xBC, 0x01, 0xC6, 0x01, 0xD0, 0x01, 0xDA, 0x01, 0xE4, 0x01, 0xEE,
+ 0x01, 0xF6, 0x01, 0xFC, 0x02, 0x04, 0x02, 0x0A, 0x02, 0x12, 0x02, 0x18, 0x02, 0x20, 0x02, 0x26,
+ 0x02, 0x30, 0x02, 0x38, 0x02, 0x42, 0x02, 0x4A, 0x02, 0x54, 0x02, 0x5C, 0x02, 0x66, 0x02, 0x6E,
+ 0x02, 0x78, 0x02, 0x80, 0x02, 0x8A, 0x02, 0x94, 0x02, 0x9E, 0x02, 0xA8, 0x02, 0xB2, 0x02, 0xBA,
+ 0x02, 0xC0, 0x02, 0xC8, 0x02, 0xD0, 0x02, 0xDA, 0x02, 0xE4, 0x02, 0xEE, 0x02, 0xF8, 0x03, 0x02,
+ 0x03, 0x0A, 0x03, 0x14, 0x03, 0x1E, 0x03, 0x28, 0x03, 0x32, 0x03, 0x3C, 0x03, 0x44, 0x03, 0x4C,
+ 0x03, 0x54, 0x03, 0x5C, 0x03, 0x66, 0x03, 0x70, 0x03, 0x7A, 0x03, 0x84, 0x03, 0x8E, 0x03, 0x96,
+ 0x1F, 0xC2, 0x00, 0x03, 0x03, 0x00, 0x03, 0x45, 0x1F, 0x74, 0x00, 0x02, 0x03, 0x00, 0x1F, 0xC4,
+ 0x00, 0x03, 0x03, 0x01, 0x03, 0x45, 0x03, 0xAE, 0x00, 0x02, 0x03, 0x01, 0x1F, 0x92, 0x00, 0x04,
+ 0x03, 0x13, 0x03, 0x00, 0x03, 0x45, 0x1F, 0x22, 0x00, 0x03, 0x03, 0x13, 0x03, 0x00, 0x1F, 0x94,
+ 0x00, 0x04, 0x03, 0x13, 0x03, 0x01, 0x03, 0x45, 0x1F, 0x24, 0x00, 0x03, 0x03, 0x13, 0x03, 0x01,
+ 0x1F, 0x92, 0x00, 0x04, 0x03, 0x13, 0x03, 0x40, 0x03, 0x45, 0x1F, 0x22, 0x00, 0x03, 0x03, 0x13,
+ 0x03, 0x40, 0x1F, 0x94, 0x00, 0x04, 0x03, 0x13, 0x03, 0x41, 0x03, 0x45, 0x1F, 0x24, 0x00, 0x03,
+ 0x03, 0x13, 0x03, 0x41, 0x1F, 0x96, 0x00, 0x04, 0x03, 0x13, 0x03, 0x42, 0x03, 0x45, 0x1F, 0x26,
+ 0x00, 0x03, 0x03, 0x13, 0x03, 0x42, 0x1F, 0x92, 0x00, 0x04, 0x03, 0x13, 0x03, 0x45, 0x03, 0x00,
+ 0x1F, 0x94, 0x00, 0x04, 0x03, 0x13, 0x03, 0x45, 0x03, 0x01, 0x1F, 0x92, 0x00, 0x04, 0x03, 0x13,
+ 0x03, 0x45, 0x03, 0x40, 0x1F, 0x94, 0x00, 0x04, 0x03, 0x13, 0x03, 0x45, 0x03, 0x41, 0x1F, 0x96,
+ 0x00, 0x04, 0x03, 0x13, 0x03, 0x45, 0x03, 0x42, 0x1F, 0x90, 0x00, 0x03, 0x03, 0x13, 0x03, 0x45,
+ 0x1F, 0x20, 0x00, 0x02, 0x03, 0x13, 0x1F, 0x93, 0x00, 0x04, 0x03, 0x14, 0x03, 0x00, 0x03, 0x45,
+ 0x1F, 0x23, 0x00, 0x03, 0x03, 0x14, 0x03, 0x00, 0x1F, 0x95, 0x00, 0x04, 0x03, 0x14, 0x03, 0x01,
+ 0x03, 0x45, 0x1F, 0x25, 0x00, 0x03, 0x03, 0x14, 0x03, 0x01, 0x1F, 0x93, 0x00, 0x04, 0x03, 0x14,
+ 0x03, 0x40, 0x03, 0x45, 0x1F, 0x23, 0x00, 0x03, 0x03, 0x14, 0x03, 0x40, 0x1F, 0x95, 0x00, 0x04,
+ 0x03, 0x14, 0x03, 0x41, 0x03, 0x45, 0x1F, 0x25, 0x00, 0x03, 0x03, 0x14, 0x03, 0x41, 0x1F, 0x97,
+ 0x00, 0x04, 0x03, 0x14, 0x03, 0x42, 0x03, 0x45, 0x1F, 0x27, 0x00, 0x03, 0x03, 0x14, 0x03, 0x42,
+ 0x1F, 0x93, 0x00, 0x04, 0x03, 0x14, 0x03, 0x45, 0x03, 0x00, 0x1F, 0x95, 0x00, 0x04, 0x03, 0x14,
+ 0x03, 0x45, 0x03, 0x01, 0x1F, 0x93, 0x00, 0x04, 0x03, 0x14, 0x03, 0x45, 0x03, 0x40, 0x1F, 0x95,
+ 0x00, 0x04, 0x03, 0x14, 0x03, 0x45, 0x03, 0x41, 0x1F, 0x97, 0x00, 0x04, 0x03, 0x14, 0x03, 0x45,
+ 0x03, 0x42, 0x1F, 0x91, 0x00, 0x03, 0x03, 0x14, 0x03, 0x45, 0x1F, 0x21, 0x00, 0x02, 0x03, 0x14,
+ 0x1F, 0xC2, 0x00, 0x03, 0x03, 0x40, 0x03, 0x45, 0x1F, 0x74, 0x00, 0x02, 0x03, 0x40, 0x1F, 0xC4,
+ 0x00, 0x03, 0x03, 0x41, 0x03, 0x45, 0x03, 0xAE, 0x00, 0x02, 0x03, 0x41, 0x1F, 0xC7, 0x00, 0x03,
+ 0x03, 0x42, 0x03, 0x45, 0x1F, 0xC6, 0x00, 0x02, 0x03, 0x42, 0x1F, 0x92, 0x00, 0x04, 0x03, 0x43,
+ 0x03, 0x00, 0x03, 0x45, 0x1F, 0x22, 0x00, 0x03, 0x03, 0x43, 0x03, 0x00, 0x1F, 0x94, 0x00, 0x04,
+ 0x03, 0x43, 0x03, 0x01, 0x03, 0x45, 0x1F, 0x24, 0x00, 0x03, 0x03, 0x43, 0x03, 0x01, 0x1F, 0x92,
+ 0x00, 0x04, 0x03, 0x43, 0x03, 0x40, 0x03, 0x45, 0x1F, 0x22, 0x00, 0x03, 0x03, 0x43, 0x03, 0x40,
+ 0x1F, 0x94, 0x00, 0x04, 0x03, 0x43, 0x03, 0x41, 0x03, 0x45, 0x1F, 0x24, 0x00, 0x03, 0x03, 0x43,
+ 0x03, 0x41, 0x1F, 0x96, 0x00, 0x04, 0x03, 0x43, 0x03, 0x42, 0x03, 0x45, 0x1F, 0x26, 0x00, 0x03,
+ 0x03, 0x43, 0x03, 0x42, 0x1F, 0x92, 0x00, 0x04, 0x03, 0x43, 0x03, 0x45, 0x03, 0x00, 0x1F, 0x94,
+ 0x00, 0x04, 0x03, 0x43, 0x03, 0x45, 0x03, 0x01, 0x1F, 0x92, 0x00, 0x04, 0x03, 0x43, 0x03, 0x45,
+ 0x03, 0x40, 0x1F, 0x94, 0x00, 0x04, 0x03, 0x43, 0x03, 0x45, 0x03, 0x41, 0x1F, 0x96, 0x00, 0x04,
+ 0x03, 0x43, 0x03, 0x45, 0x03, 0x42, 0x1F, 0x90, 0x00, 0x03, 0x03, 0x43, 0x03, 0x45, 0x1F, 0x20,
+ 0x00, 0x02, 0x03, 0x43, 0x1F, 0xC2, 0x00, 0x03, 0x03, 0x45, 0x03, 0x00, 0x1F, 0xC4, 0x00, 0x03,
+ 0x03, 0x45, 0x03, 0x01, 0x1F, 0x92, 0x00, 0x04, 0x03, 0x45, 0x03, 0x13, 0x03, 0x00, 0x1F, 0x94,
+ 0x00, 0x04, 0x03, 0x45, 0x03, 0x13, 0x03, 0x01, 0x1F, 0x92, 0x00, 0x04, 0x03, 0x45, 0x03, 0x13,
+ 0x03, 0x40, 0x1F, 0x94, 0x00, 0x04, 0x03, 0x45, 0x03, 0x13, 0x03, 0x41, 0x1F, 0x96, 0x00, 0x04,
+ 0x03, 0x45, 0x03, 0x13, 0x03, 0x42, 0x1F, 0x90, 0x00, 0x03, 0x03, 0x45, 0x03, 0x13, 0x1F, 0x93,
+ 0x00, 0x04, 0x03, 0x45, 0x03, 0x14, 0x03, 0x00, 0x1F, 0x95, 0x00, 0x04, 0x03, 0x45, 0x03, 0x14,
+ 0x03, 0x01, 0x1F, 0x93, 0x00, 0x04, 0x03, 0x45, 0x03, 0x14, 0x03, 0x40, 0x1F, 0x95, 0x00, 0x04,
+ 0x03, 0x45, 0x03, 0x14, 0x03, 0x41, 0x1F, 0x97, 0x00, 0x04, 0x03, 0x45, 0x03, 0x14, 0x03, 0x42,
+ 0x1F, 0x91, 0x00, 0x03, 0x03, 0x45, 0x03, 0x14, 0x1F, 0xC2, 0x00, 0x03, 0x03, 0x45, 0x03, 0x40,
+ 0x1F, 0xC4, 0x00, 0x03, 0x03, 0x45, 0x03, 0x41, 0x1F, 0xC7, 0x00, 0x03, 0x03, 0x45, 0x03, 0x42,
+ 0x1F, 0x92, 0x00, 0x04, 0x03, 0x45, 0x03, 0x43, 0x03, 0x00, 0x1F, 0x94, 0x00, 0x04, 0x03, 0x45,
+ 0x03, 0x43, 0x03, 0x01, 0x1F, 0x92, 0x00, 0x04, 0x03, 0x45, 0x03, 0x43, 0x03, 0x40, 0x1F, 0x94,
+ 0x00, 0x04, 0x03, 0x45, 0x03, 0x43, 0x03, 0x41, 0x1F, 0x96, 0x00, 0x04, 0x03, 0x45, 0x03, 0x43,
+ 0x03, 0x42, 0x1F, 0x90, 0x00, 0x03, 0x03, 0x45, 0x03, 0x43, 0x1F, 0xC3, 0x00, 0x02, 0x03, 0x45,
+ 0x00, 0x20, 0x00, 0x42, 0x00, 0x48, 0x00, 0x4E, 0x00, 0x54, 0x00, 0x5A, 0x00, 0x62, 0x00, 0x6A,
+ 0x00, 0x72, 0x00, 0x7A, 0x00, 0x82, 0x00, 0x88, 0x00, 0x90, 0x00, 0x98, 0x00, 0xA0, 0x00, 0xA8,
+ 0x00, 0xB0, 0x00, 0xB6, 0x00, 0xBE, 0x00, 0xC6, 0x00, 0xCE, 0x00, 0xD6, 0x00, 0xDE, 0x00, 0xE4,
+ 0x00, 0xEA, 0x00, 0xF0, 0x00, 0xF6, 0x00, 0xFE, 0x01, 0x06, 0x01, 0x0E, 0x01, 0x16, 0x01, 0x1E,
+ 0x01, 0x24, 0x1F, 0x76, 0x00, 0x02, 0x03, 0x00, 0x03, 0xAF, 0x00, 0x02, 0x03, 0x01, 0x1F, 0xD1,
+ 0x00, 0x02, 0x03, 0x04, 0x1F, 0xD0, 0x00, 0x02, 0x03, 0x06, 0x1F, 0xD2, 0x00, 0x03, 0x03, 0x08,
+ 0x03, 0x00, 0x03, 0x90, 0x00, 0x03, 0x03, 0x08, 0x03, 0x01, 0x1F, 0xD2, 0x00, 0x03, 0x03, 0x08,
+ 0x03, 0x40, 0x03, 0x90, 0x00, 0x03, 0x03, 0x08, 0x03, 0x41, 0x1F, 0xD7, 0x00, 0x03, 0x03, 0x08,
+ 0x03, 0x42, 0x03, 0xCA, 0x00, 0x02, 0x03, 0x08, 0x1F, 0x32, 0x00, 0x03, 0x03, 0x13, 0x03, 0x00,
+ 0x1F, 0x34, 0x00, 0x03, 0x03, 0x13, 0x03, 0x01, 0x1F, 0x32, 0x00, 0x03, 0x03, 0x13, 0x03, 0x40,
+ 0x1F, 0x34, 0x00, 0x03, 0x03, 0x13, 0x03, 0x41, 0x1F, 0x36, 0x00, 0x03, 0x03, 0x13, 0x03, 0x42,
+ 0x1F, 0x30, 0x00, 0x02, 0x03, 0x13, 0x1F, 0x33, 0x00, 0x03, 0x03, 0x14, 0x03, 0x00, 0x1F, 0x35,
+ 0x00, 0x03, 0x03, 0x14, 0x03, 0x01, 0x1F, 0x33, 0x00, 0x03, 0x03, 0x14, 0x03, 0x40, 0x1F, 0x35,
+ 0x00, 0x03, 0x03, 0x14, 0x03, 0x41, 0x1F, 0x37, 0x00, 0x03, 0x03, 0x14, 0x03, 0x42, 0x1F, 0x31,
+ 0x00, 0x02, 0x03, 0x14, 0x1F, 0x76, 0x00, 0x02, 0x03, 0x40, 0x03, 0xAF, 0x00, 0x02, 0x03, 0x41,
+ 0x1F, 0xD6, 0x00, 0x02, 0x03, 0x42, 0x1F, 0x32, 0x00, 0x03, 0x03, 0x43, 0x03, 0x00, 0x1F, 0x34,
+ 0x00, 0x03, 0x03, 0x43, 0x03, 0x01, 0x1F, 0x32, 0x00, 0x03, 0x03, 0x43, 0x03, 0x40, 0x1F, 0x34,
+ 0x00, 0x03, 0x03, 0x43, 0x03, 0x41, 0x1F, 0x36, 0x00, 0x03, 0x03, 0x43, 0x03, 0x42, 0x1F, 0x30,
+ 0x00, 0x02, 0x03, 0x43, 0x03, 0x90, 0x00, 0x02, 0x03, 0x44, 0x00, 0x13, 0x00, 0x28, 0x00, 0x2E,
+ 0x00, 0x34, 0x00, 0x3C, 0x00, 0x44, 0x00, 0x4C, 0x00, 0x54, 0x00, 0x5A, 0x00, 0x62, 0x00, 0x6A,
+ 0x00, 0x72, 0x00, 0x7A, 0x00, 0x80, 0x00, 0x86, 0x00, 0x8C, 0x00, 0x94, 0x00, 0x9C, 0x00, 0xA4,
+ 0x00, 0xAC, 0x1F, 0x78, 0x00, 0x02, 0x03, 0x00, 0x03, 0xCC, 0x00, 0x02, 0x03, 0x01, 0x1F, 0x42,
+ 0x00, 0x03, 0x03, 0x13, 0x03, 0x00, 0x1F, 0x44, 0x00, 0x03, 0x03, 0x13, 0x03, 0x01, 0x1F, 0x42,
+ 0x00, 0x03, 0x03, 0x13, 0x03, 0x40, 0x1F, 0x44, 0x00, 0x03, 0x03, 0x13, 0x03, 0x41, 0x1F, 0x40,
+ 0x00, 0x02, 0x03, 0x13, 0x1F, 0x43, 0x00, 0x03, 0x03, 0x14, 0x03, 0x00, 0x1F, 0x45, 0x00, 0x03,
+ 0x03, 0x14, 0x03, 0x01, 0x1F, 0x43, 0x00, 0x03, 0x03, 0x14, 0x03, 0x40, 0x1F, 0x45, 0x00, 0x03,
+ 0x03, 0x14, 0x03, 0x41, 0x1F, 0x41, 0x00, 0x02, 0x03, 0x14, 0x1F, 0x78, 0x00, 0x02, 0x03, 0x40,
+ 0x03, 0xCC, 0x00, 0x02, 0x03, 0x41, 0x1F, 0x42, 0x00, 0x03, 0x03, 0x43, 0x03, 0x00, 0x1F, 0x44,
+ 0x00, 0x03, 0x03, 0x43, 0x03, 0x01, 0x1F, 0x42, 0x00, 0x03, 0x03, 0x43, 0x03, 0x40, 0x1F, 0x44,
+ 0x00, 0x03, 0x03, 0x43, 0x03, 0x41, 0x1F, 0x40, 0x00, 0x02, 0x03, 0x43, 0x00, 0x03, 0x00, 0x08,
+ 0x00, 0x0E, 0x00, 0x14, 0x1F, 0xE4, 0x00, 0x02, 0x03, 0x13, 0x1F, 0xE5, 0x00, 0x02, 0x03, 0x14,
+ 0x1F, 0xE4, 0x00, 0x02, 0x03, 0x43, 0x00, 0x20, 0x00, 0x42, 0x00, 0x48, 0x00, 0x4E, 0x00, 0x54,
+ 0x00, 0x5A, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x72, 0x00, 0x7A, 0x00, 0x82, 0x00, 0x88, 0x00, 0x90,
+ 0x00, 0x98, 0x00, 0xA0, 0x00, 0xA8, 0x00, 0xB0, 0x00, 0xB6, 0x00, 0xBE, 0x00, 0xC6, 0x00, 0xCE,
+ 0x00, 0xD6, 0x00, 0xDE, 0x00, 0xE4, 0x00, 0xEA, 0x00, 0xF0, 0x00, 0xF6, 0x00, 0xFE, 0x01, 0x06,
+ 0x01, 0x0E, 0x01, 0x16, 0x01, 0x1E, 0x01, 0x24, 0x1F, 0x7A, 0x00, 0x02, 0x03, 0x00, 0x03, 0xCD,
+ 0x00, 0x02, 0x03, 0x01, 0x1F, 0xE1, 0x00, 0x02, 0x03, 0x04, 0x1F, 0xE0, 0x00, 0x02, 0x03, 0x06,
+ 0x1F, 0xE2, 0x00, 0x03, 0x03, 0x08, 0x03, 0x00, 0x03, 0xB0, 0x00, 0x03, 0x03, 0x08, 0x03, 0x01,
+ 0x1F, 0xE2, 0x00, 0x03, 0x03, 0x08, 0x03, 0x40, 0x03, 0xB0, 0x00, 0x03, 0x03, 0x08, 0x03, 0x41,
+ 0x1F, 0xE7, 0x00, 0x03, 0x03, 0x08, 0x03, 0x42, 0x03, 0xCB, 0x00, 0x02, 0x03, 0x08, 0x1F, 0x52,
+ 0x00, 0x03, 0x03, 0x13, 0x03, 0x00, 0x1F, 0x54, 0x00, 0x03, 0x03, 0x13, 0x03, 0x01, 0x1F, 0x52,
+ 0x00, 0x03, 0x03, 0x13, 0x03, 0x40, 0x1F, 0x54, 0x00, 0x03, 0x03, 0x13, 0x03, 0x41, 0x1F, 0x56,
+ 0x00, 0x03, 0x03, 0x13, 0x03, 0x42, 0x1F, 0x50, 0x00, 0x02, 0x03, 0x13, 0x1F, 0x53, 0x00, 0x03,
+ 0x03, 0x14, 0x03, 0x00, 0x1F, 0x55, 0x00, 0x03, 0x03, 0x14, 0x03, 0x01, 0x1F, 0x53, 0x00, 0x03,
+ 0x03, 0x14, 0x03, 0x40, 0x1F, 0x55, 0x00, 0x03, 0x03, 0x14, 0x03, 0x41, 0x1F, 0x57, 0x00, 0x03,
+ 0x03, 0x14, 0x03, 0x42, 0x1F, 0x51, 0x00, 0x02, 0x03, 0x14, 0x1F, 0x7A, 0x00, 0x02, 0x03, 0x40,
+ 0x03, 0xCD, 0x00, 0x02, 0x03, 0x41, 0x1F, 0xE6, 0x00, 0x02, 0x03, 0x42, 0x1F, 0x52, 0x00, 0x03,
+ 0x03, 0x43, 0x03, 0x00, 0x1F, 0x54, 0x00, 0x03, 0x03, 0x43, 0x03, 0x01, 0x1F, 0x52, 0x00, 0x03,
+ 0x03, 0x43, 0x03, 0x40, 0x1F, 0x54, 0x00, 0x03, 0x03, 0x43, 0x03, 0x41, 0x1F, 0x56, 0x00, 0x03,
+ 0x03, 0x43, 0x03, 0x42, 0x1F, 0x50, 0x00, 0x02, 0x03, 0x43, 0x03, 0xB0, 0x00, 0x02, 0x03, 0x44,
+ 0x00, 0x55, 0x00, 0xAC, 0x00, 0xB4, 0x00, 0xBA, 0x00, 0xC2, 0x00, 0xC8, 0x00, 0xD2, 0x00, 0xDA,
+ 0x00, 0xE4, 0x00, 0xEC, 0x00, 0xF6, 0x00, 0xFE, 0x01, 0x08, 0x01, 0x10, 0x01, 0x1A, 0x01, 0x22,
+ 0x01, 0x2C, 0x01, 0x36, 0x01, 0x40, 0x01, 0x4A, 0x01, 0x54, 0x01, 0x5C, 0x01, 0x62, 0x01, 0x6C,
+ 0x01, 0x74, 0x01, 0x7E, 0x01, 0x86, 0x01, 0x90, 0x01, 0x98, 0x01, 0xA2, 0x01, 0xAA, 0x01, 0xB4,
+ 0x01, 0xBC, 0x01, 0xC6, 0x01, 0xD0, 0x01, 0xDA, 0x01, 0xE4, 0x01, 0xEE, 0x01, 0xF6, 0x01, 0xFC,
+ 0x02, 0x04, 0x02, 0x0A, 0x02, 0x12, 0x02, 0x18, 0x02, 0x20, 0x02, 0x26, 0x02, 0x30, 0x02, 0x38,
+ 0x02, 0x42, 0x02, 0x4A, 0x02, 0x54, 0x02, 0x5C, 0x02, 0x66, 0x02, 0x6E, 0x02, 0x78, 0x02, 0x80,
+ 0x02, 0x8A, 0x02, 0x94, 0x02, 0x9E, 0x02, 0xA8, 0x02, 0xB2, 0x02, 0xBA, 0x02, 0xC0, 0x02, 0xC8,
+ 0x02, 0xD0, 0x02, 0xDA, 0x02, 0xE4, 0x02, 0xEE, 0x02, 0xF8, 0x03, 0x02, 0x03, 0x0A, 0x03, 0x14,
+ 0x03, 0x1E, 0x03, 0x28, 0x03, 0x32, 0x03, 0x3C, 0x03, 0x44, 0x03, 0x4C, 0x03, 0x54, 0x03, 0x5C,
+ 0x03, 0x66, 0x03, 0x70, 0x03, 0x7A, 0x03, 0x84, 0x03, 0x8E, 0x03, 0x96, 0x1F, 0xF2, 0x00, 0x03,
+ 0x03, 0x00, 0x03, 0x45, 0x1F, 0x7C, 0x00, 0x02, 0x03, 0x00, 0x1F, 0xF4, 0x00, 0x03, 0x03, 0x01,
+ 0x03, 0x45, 0x03, 0xCE, 0x00, 0x02, 0x03, 0x01, 0x1F, 0xA2, 0x00, 0x04, 0x03, 0x13, 0x03, 0x00,
+ 0x03, 0x45, 0x1F, 0x62, 0x00, 0x03, 0x03, 0x13, 0x03, 0x00, 0x1F, 0xA4, 0x00, 0x04, 0x03, 0x13,
+ 0x03, 0x01, 0x03, 0x45, 0x1F, 0x64, 0x00, 0x03, 0x03, 0x13, 0x03, 0x01, 0x1F, 0xA2, 0x00, 0x04,
+ 0x03, 0x13, 0x03, 0x40, 0x03, 0x45, 0x1F, 0x62, 0x00, 0x03, 0x03, 0x13, 0x03, 0x40, 0x1F, 0xA4,
+ 0x00, 0x04, 0x03, 0x13, 0x03, 0x41, 0x03, 0x45, 0x1F, 0x64, 0x00, 0x03, 0x03, 0x13, 0x03, 0x41,
+ 0x1F, 0xA6, 0x00, 0x04, 0x03, 0x13, 0x03, 0x42, 0x03, 0x45, 0x1F, 0x66, 0x00, 0x03, 0x03, 0x13,
+ 0x03, 0x42, 0x1F, 0xA2, 0x00, 0x04, 0x03, 0x13, 0x03, 0x45, 0x03, 0x00, 0x1F, 0xA4, 0x00, 0x04,
+ 0x03, 0x13, 0x03, 0x45, 0x03, 0x01, 0x1F, 0xA2, 0x00, 0x04, 0x03, 0x13, 0x03, 0x45, 0x03, 0x40,
+ 0x1F, 0xA4, 0x00, 0x04, 0x03, 0x13, 0x03, 0x45, 0x03, 0x41, 0x1F, 0xA6, 0x00, 0x04, 0x03, 0x13,
+ 0x03, 0x45, 0x03, 0x42, 0x1F, 0xA0, 0x00, 0x03, 0x03, 0x13, 0x03, 0x45, 0x1F, 0x60, 0x00, 0x02,
+ 0x03, 0x13, 0x1F, 0xA3, 0x00, 0x04, 0x03, 0x14, 0x03, 0x00, 0x03, 0x45, 0x1F, 0x63, 0x00, 0x03,
+ 0x03, 0x14, 0x03, 0x00, 0x1F, 0xA5, 0x00, 0x04, 0x03, 0x14, 0x03, 0x01, 0x03, 0x45, 0x1F, 0x65,
+ 0x00, 0x03, 0x03, 0x14, 0x03, 0x01, 0x1F, 0xA3, 0x00, 0x04, 0x03, 0x14, 0x03, 0x40, 0x03, 0x45,
+ 0x1F, 0x63, 0x00, 0x03, 0x03, 0x14, 0x03, 0x40, 0x1F, 0xA5, 0x00, 0x04, 0x03, 0x14, 0x03, 0x41,
+ 0x03, 0x45, 0x1F, 0x65, 0x00, 0x03, 0x03, 0x14, 0x03, 0x41, 0x1F, 0xA7, 0x00, 0x04, 0x03, 0x14,
+ 0x03, 0x42, 0x03, 0x45, 0x1F, 0x67, 0x00, 0x03, 0x03, 0x14, 0x03, 0x42, 0x1F, 0xA3, 0x00, 0x04,
+ 0x03, 0x14, 0x03, 0x45, 0x03, 0x00, 0x1F, 0xA5, 0x00, 0x04, 0x03, 0x14, 0x03, 0x45, 0x03, 0x01,
+ 0x1F, 0xA3, 0x00, 0x04, 0x03, 0x14, 0x03, 0x45, 0x03, 0x40, 0x1F, 0xA5, 0x00, 0x04, 0x03, 0x14,
+ 0x03, 0x45, 0x03, 0x41, 0x1F, 0xA7, 0x00, 0x04, 0x03, 0x14, 0x03, 0x45, 0x03, 0x42, 0x1F, 0xA1,
+ 0x00, 0x03, 0x03, 0x14, 0x03, 0x45, 0x1F, 0x61, 0x00, 0x02, 0x03, 0x14, 0x1F, 0xF2, 0x00, 0x03,
+ 0x03, 0x40, 0x03, 0x45, 0x1F, 0x7C, 0x00, 0x02, 0x03, 0x40, 0x1F, 0xF4, 0x00, 0x03, 0x03, 0x41,
+ 0x03, 0x45, 0x03, 0xCE, 0x00, 0x02, 0x03, 0x41, 0x1F, 0xF7, 0x00, 0x03, 0x03, 0x42, 0x03, 0x45,
+ 0x1F, 0xF6, 0x00, 0x02, 0x03, 0x42, 0x1F, 0xA2, 0x00, 0x04, 0x03, 0x43, 0x03, 0x00, 0x03, 0x45,
+ 0x1F, 0x62, 0x00, 0x03, 0x03, 0x43, 0x03, 0x00, 0x1F, 0xA4, 0x00, 0x04, 0x03, 0x43, 0x03, 0x01,
+ 0x03, 0x45, 0x1F, 0x64, 0x00, 0x03, 0x03, 0x43, 0x03, 0x01, 0x1F, 0xA2, 0x00, 0x04, 0x03, 0x43,
+ 0x03, 0x40, 0x03, 0x45, 0x1F, 0x62, 0x00, 0x03, 0x03, 0x43, 0x03, 0x40, 0x1F, 0xA4, 0x00, 0x04,
+ 0x03, 0x43, 0x03, 0x41, 0x03, 0x45, 0x1F, 0x64, 0x00, 0x03, 0x03, 0x43, 0x03, 0x41, 0x1F, 0xA6,
+ 0x00, 0x04, 0x03, 0x43, 0x03, 0x42, 0x03, 0x45, 0x1F, 0x66, 0x00, 0x03, 0x03, 0x43, 0x03, 0x42,
+ 0x1F, 0xA2, 0x00, 0x04, 0x03, 0x43, 0x03, 0x45, 0x03, 0x00, 0x1F, 0xA4, 0x00, 0x04, 0x03, 0x43,
+ 0x03, 0x45, 0x03, 0x01, 0x1F, 0xA2, 0x00, 0x04, 0x03, 0x43, 0x03, 0x45, 0x03, 0x40, 0x1F, 0xA4,
+ 0x00, 0x04, 0x03, 0x43, 0x03, 0x45, 0x03, 0x41, 0x1F, 0xA6, 0x00, 0x04, 0x03, 0x43, 0x03, 0x45,
+ 0x03, 0x42, 0x1F, 0xA0, 0x00, 0x03, 0x03, 0x43, 0x03, 0x45, 0x1F, 0x60, 0x00, 0x02, 0x03, 0x43,
+ 0x1F, 0xF2, 0x00, 0x03, 0x03, 0x45, 0x03, 0x00, 0x1F, 0xF4, 0x00, 0x03, 0x03, 0x45, 0x03, 0x01,
+ 0x1F, 0xA2, 0x00, 0x04, 0x03, 0x45, 0x03, 0x13, 0x03, 0x00, 0x1F, 0xA4, 0x00, 0x04, 0x03, 0x45,
+ 0x03, 0x13, 0x03, 0x01, 0x1F, 0xA2, 0x00, 0x04, 0x03, 0x45, 0x03, 0x13, 0x03, 0x40, 0x1F, 0xA4,
+ 0x00, 0x04, 0x03, 0x45, 0x03, 0x13, 0x03, 0x41, 0x1F, 0xA6, 0x00, 0x04, 0x03, 0x45, 0x03, 0x13,
+ 0x03, 0x42, 0x1F, 0xA0, 0x00, 0x03, 0x03, 0x45, 0x03, 0x13, 0x1F, 0xA3, 0x00, 0x04, 0x03, 0x45,
+ 0x03, 0x14, 0x03, 0x00, 0x1F, 0xA5, 0x00, 0x04, 0x03, 0x45, 0x03, 0x14, 0x03, 0x01, 0x1F, 0xA3,
+ 0x00, 0x04, 0x03, 0x45, 0x03, 0x14, 0x03, 0x40, 0x1F, 0xA5, 0x00, 0x04, 0x03, 0x45, 0x03, 0x14,
+ 0x03, 0x41, 0x1F, 0xA7, 0x00, 0x04, 0x03, 0x45, 0x03, 0x14, 0x03, 0x42, 0x1F, 0xA1, 0x00, 0x03,
+ 0x03, 0x45, 0x03, 0x14, 0x1F, 0xF2, 0x00, 0x03, 0x03, 0x45, 0x03, 0x40, 0x1F, 0xF4, 0x00, 0x03,
+ 0x03, 0x45, 0x03, 0x41, 0x1F, 0xF7, 0x00, 0x03, 0x03, 0x45, 0x03, 0x42, 0x1F, 0xA2, 0x00, 0x04,
+ 0x03, 0x45, 0x03, 0x43, 0x03, 0x00, 0x1F, 0xA4, 0x00, 0x04, 0x03, 0x45, 0x03, 0x43, 0x03, 0x01,
+ 0x1F, 0xA2, 0x00, 0x04, 0x03, 0x45, 0x03, 0x43, 0x03, 0x40, 0x1F, 0xA4, 0x00, 0x04, 0x03, 0x45,
+ 0x03, 0x43, 0x03, 0x41, 0x1F, 0xA6, 0x00, 0x04, 0x03, 0x45, 0x03, 0x43, 0x03, 0x42, 0x1F, 0xA0,
+ 0x00, 0x03, 0x03, 0x45, 0x03, 0x43, 0x1F, 0xF3, 0x00, 0x02, 0x03, 0x45, 0x00, 0x05, 0x00, 0x0C,
+ 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x1F, 0xD2, 0x00, 0x02, 0x03, 0x00, 0x03, 0x90,
+ 0x00, 0x02, 0x03, 0x01, 0x1F, 0xD2, 0x00, 0x02, 0x03, 0x40, 0x03, 0x90, 0x00, 0x02, 0x03, 0x41,
+ 0x1F, 0xD7, 0x00, 0x02, 0x03, 0x42, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E,
+ 0x00, 0x24, 0x1F, 0xE2, 0x00, 0x02, 0x03, 0x00, 0x03, 0xB0, 0x00, 0x02, 0x03, 0x01, 0x1F, 0xE2,
+ 0x00, 0x02, 0x03, 0x40, 0x03, 0xB0, 0x00, 0x02, 0x03, 0x41, 0x1F, 0xE7, 0x00, 0x02, 0x03, 0x42,
+ 0x00, 0x01, 0x00, 0x04, 0x1F, 0xF4, 0x00, 0x02, 0x03, 0x45, 0x00, 0x03, 0x00, 0x08, 0x00, 0x0E,
+ 0x00, 0x14, 0x03, 0xD3, 0x00, 0x02, 0x03, 0x01, 0x03, 0xD4, 0x00, 0x02, 0x03, 0x08, 0x03, 0xD3,
+ 0x00, 0x02, 0x03, 0x41, 0x00, 0x10, 0x00, 0x22, 0x00, 0x2A, 0x00, 0x30, 0x00, 0x38, 0x00, 0x3E,
+ 0x00, 0x46, 0x00, 0x4C, 0x00, 0x54, 0x00, 0x5A, 0x00, 0x62, 0x00, 0x68, 0x00, 0x70, 0x00, 0x78,
+ 0x00, 0x80, 0x00, 0x88, 0x00, 0x90, 0x1F, 0x82, 0x00, 0x03, 0x03, 0x00, 0x03, 0x45, 0x1F, 0x02,
+ 0x00, 0x02, 0x03, 0x00, 0x1F, 0x84, 0x00, 0x03, 0x03, 0x01, 0x03, 0x45, 0x1F, 0x04, 0x00, 0x02,
+ 0x03, 0x01, 0x1F, 0x82, 0x00, 0x03, 0x03, 0x40, 0x03, 0x45, 0x1F, 0x02, 0x00, 0x02, 0x03, 0x40,
+ 0x1F, 0x84, 0x00, 0x03, 0x03, 0x41, 0x03, 0x45, 0x1F, 0x04, 0x00, 0x02, 0x03, 0x41, 0x1F, 0x86,
+ 0x00, 0x03, 0x03, 0x42, 0x03, 0x45, 0x1F, 0x06, 0x00, 0x02, 0x03, 0x42, 0x1F, 0x82, 0x00, 0x03,
+ 0x03, 0x45, 0x03, 0x00, 0x1F, 0x84, 0x00, 0x03, 0x03, 0x45, 0x03, 0x01, 0x1F, 0x82, 0x00, 0x03,
+ 0x03, 0x45, 0x03, 0x40, 0x1F, 0x84, 0x00, 0x03, 0x03, 0x45, 0x03, 0x41, 0x1F, 0x86, 0x00, 0x03,
+ 0x03, 0x45, 0x03, 0x42, 0x1F, 0x80, 0x00, 0x02, 0x03, 0x45, 0x00, 0x10, 0x00, 0x22, 0x00, 0x2A,
+ 0x00, 0x30, 0x00, 0x38, 0x00, 0x3E, 0x00, 0x46, 0x00, 0x4C, 0x00, 0x54, 0x00, 0x5A, 0x00, 0x62,
+ 0x00, 0x68, 0x00, 0x70, 0x00, 0x78, 0x00, 0x80, 0x00, 0x88, 0x00, 0x90, 0x1F, 0x83, 0x00, 0x03,
+ 0x03, 0x00, 0x03, 0x45, 0x1F, 0x03, 0x00, 0x02, 0x03, 0x00, 0x1F, 0x85, 0x00, 0x03, 0x03, 0x01,
+ 0x03, 0x45, 0x1F, 0x05, 0x00, 0x02, 0x03, 0x01, 0x1F, 0x83, 0x00, 0x03, 0x03, 0x40, 0x03, 0x45,
+ 0x1F, 0x03, 0x00, 0x02, 0x03, 0x40, 0x1F, 0x85, 0x00, 0x03, 0x03, 0x41, 0x03, 0x45, 0x1F, 0x05,
+ 0x00, 0x02, 0x03, 0x41, 0x1F, 0x87, 0x00, 0x03, 0x03, 0x42, 0x03, 0x45, 0x1F, 0x07, 0x00, 0x02,
+ 0x03, 0x42, 0x1F, 0x83, 0x00, 0x03, 0x03, 0x45, 0x03, 0x00, 0x1F, 0x85, 0x00, 0x03, 0x03, 0x45,
+ 0x03, 0x01, 0x1F, 0x83, 0x00, 0x03, 0x03, 0x45, 0x03, 0x40, 0x1F, 0x85, 0x00, 0x03, 0x03, 0x45,
+ 0x03, 0x41, 0x1F, 0x87, 0x00, 0x03, 0x03, 0x45, 0x03, 0x42, 0x1F, 0x81, 0x00, 0x02, 0x03, 0x45,
+ 0x00, 0x01, 0x00, 0x04, 0x1F, 0x82, 0x00, 0x02, 0x03, 0x45, 0x00, 0x01, 0x00, 0x04, 0x1F, 0x83,
+ 0x00, 0x02, 0x03, 0x45, 0x00, 0x01, 0x00, 0x04, 0x1F, 0x84, 0x00, 0x02, 0x03, 0x45, 0x00, 0x01,
+ 0x00, 0x04, 0x1F, 0x85, 0x00, 0x02, 0x03, 0x45, 0x00, 0x01, 0x00, 0x04, 0x1F, 0x86, 0x00, 0x02,
+ 0x03, 0x45, 0x00, 0x01, 0x00, 0x04, 0x1F, 0x87, 0x00, 0x02, 0x03, 0x45, 0x00, 0x10, 0x00, 0x22,
+ 0x00, 0x2A, 0x00, 0x30, 0x00, 0x38, 0x00, 0x3E, 0x00, 0x46, 0x00, 0x4C, 0x00, 0x54, 0x00, 0x5A,
+ 0x00, 0x62, 0x00, 0x68, 0x00, 0x70, 0x00, 0x78, 0x00, 0x80, 0x00, 0x88, 0x00, 0x90, 0x1F, 0x8A,
+ 0x00, 0x03, 0x03, 0x00, 0x03, 0x45, 0x1F, 0x0A, 0x00, 0x02, 0x03, 0x00, 0x1F, 0x8C, 0x00, 0x03,
+ 0x03, 0x01, 0x03, 0x45, 0x1F, 0x0C, 0x00, 0x02, 0x03, 0x01, 0x1F, 0x8A, 0x00, 0x03, 0x03, 0x40,
+ 0x03, 0x45, 0x1F, 0x0A, 0x00, 0x02, 0x03, 0x40, 0x1F, 0x8C, 0x00, 0x03, 0x03, 0x41, 0x03, 0x45,
+ 0x1F, 0x0C, 0x00, 0x02, 0x03, 0x41, 0x1F, 0x8E, 0x00, 0x03, 0x03, 0x42, 0x03, 0x45, 0x1F, 0x0E,
+ 0x00, 0x02, 0x03, 0x42, 0x1F, 0x8A, 0x00, 0x03, 0x03, 0x45, 0x03, 0x00, 0x1F, 0x8C, 0x00, 0x03,
+ 0x03, 0x45, 0x03, 0x01, 0x1F, 0x8A, 0x00, 0x03, 0x03, 0x45, 0x03, 0x40, 0x1F, 0x8C, 0x00, 0x03,
+ 0x03, 0x45, 0x03, 0x41, 0x1F, 0x8E, 0x00, 0x03, 0x03, 0x45, 0x03, 0x42, 0x1F, 0x88, 0x00, 0x02,
+ 0x03, 0x45, 0x00, 0x10, 0x00, 0x22, 0x00, 0x2A, 0x00, 0x30, 0x00, 0x38, 0x00, 0x3E, 0x00, 0x46,
+ 0x00, 0x4C, 0x00, 0x54, 0x00, 0x5A, 0x00, 0x62, 0x00, 0x68, 0x00, 0x70, 0x00, 0x78, 0x00, 0x80,
+ 0x00, 0x88, 0x00, 0x90, 0x1F, 0x8B, 0x00, 0x03, 0x03, 0x00, 0x03, 0x45, 0x1F, 0x0B, 0x00, 0x02,
+ 0x03, 0x00, 0x1F, 0x8D, 0x00, 0x03, 0x03, 0x01, 0x03, 0x45, 0x1F, 0x0D, 0x00, 0x02, 0x03, 0x01,
+ 0x1F, 0x8B, 0x00, 0x03, 0x03, 0x40, 0x03, 0x45, 0x1F, 0x0B, 0x00, 0x02, 0x03, 0x40, 0x1F, 0x8D,
+ 0x00, 0x03, 0x03, 0x41, 0x03, 0x45, 0x1F, 0x0D, 0x00, 0x02, 0x03, 0x41, 0x1F, 0x8F, 0x00, 0x03,
+ 0x03, 0x42, 0x03, 0x45, 0x1F, 0x0F, 0x00, 0x02, 0x03, 0x42, 0x1F, 0x8B, 0x00, 0x03, 0x03, 0x45,
+ 0x03, 0x00, 0x1F, 0x8D, 0x00, 0x03, 0x03, 0x45, 0x03, 0x01, 0x1F, 0x8B, 0x00, 0x03, 0x03, 0x45,
+ 0x03, 0x40, 0x1F, 0x8D, 0x00, 0x03, 0x03, 0x45, 0x03, 0x41, 0x1F, 0x8F, 0x00, 0x03, 0x03, 0x45,
+ 0x03, 0x42, 0x1F, 0x89, 0x00, 0x02, 0x03, 0x45, 0x00, 0x01, 0x00, 0x04, 0x1F, 0x8A, 0x00, 0x02,
+ 0x03, 0x45, 0x00, 0x01, 0x00, 0x04, 0x1F, 0x8B, 0x00, 0x02, 0x03, 0x45, 0x00, 0x01, 0x00, 0x04,
+ 0x1F, 0x8C, 0x00, 0x02, 0x03, 0x45, 0x00, 0x01, 0x00, 0x04, 0x1F, 0x8D, 0x00, 0x02, 0x03, 0x45,
+ 0x00, 0x01, 0x00, 0x04, 0x1F, 0x8E, 0x00, 0x02, 0x03, 0x45, 0x00, 0x01, 0x00, 0x04, 0x1F, 0x8F,
+ 0x00, 0x02, 0x03, 0x45, 0x00, 0x04, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C, 0x1F, 0x12,
+ 0x00, 0x02, 0x03, 0x00, 0x1F, 0x14, 0x00, 0x02, 0x03, 0x01, 0x1F, 0x12, 0x00, 0x02, 0x03, 0x40,
+ 0x1F, 0x14, 0x00, 0x02, 0x03, 0x41, 0x00, 0x04, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C,
+ 0x1F, 0x13, 0x00, 0x02, 0x03, 0x00, 0x1F, 0x15, 0x00, 0x02, 0x03, 0x01, 0x1F, 0x13, 0x00, 0x02,
+ 0x03, 0x40, 0x1F, 0x15, 0x00, 0x02, 0x03, 0x41, 0x00, 0x04, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x16,
+ 0x00, 0x1C, 0x1F, 0x1A, 0x00, 0x02, 0x03, 0x00, 0x1F, 0x1C, 0x00, 0x02, 0x03, 0x01, 0x1F, 0x1A,
+ 0x00, 0x02, 0x03, 0x40, 0x1F, 0x1C, 0x00, 0x02, 0x03, 0x41, 0x00, 0x04, 0x00, 0x0A, 0x00, 0x10,
+ 0x00, 0x16, 0x00, 0x1C, 0x1F, 0x1B, 0x00, 0x02, 0x03, 0x00, 0x1F, 0x1D, 0x00, 0x02, 0x03, 0x01,
+ 0x1F, 0x1B, 0x00, 0x02, 0x03, 0x40, 0x1F, 0x1D, 0x00, 0x02, 0x03, 0x41, 0x00, 0x10, 0x00, 0x22,
+ 0x00, 0x2A, 0x00, 0x30, 0x00, 0x38, 0x00, 0x3E, 0x00, 0x46, 0x00, 0x4C, 0x00, 0x54, 0x00, 0x5A,
+ 0x00, 0x62, 0x00, 0x68, 0x00, 0x70, 0x00, 0x78, 0x00, 0x80, 0x00, 0x88, 0x00, 0x90, 0x1F, 0x92,
+ 0x00, 0x03, 0x03, 0x00, 0x03, 0x45, 0x1F, 0x22, 0x00, 0x02, 0x03, 0x00, 0x1F, 0x94, 0x00, 0x03,
+ 0x03, 0x01, 0x03, 0x45, 0x1F, 0x24, 0x00, 0x02, 0x03, 0x01, 0x1F, 0x92, 0x00, 0x03, 0x03, 0x40,
+ 0x03, 0x45, 0x1F, 0x22, 0x00, 0x02, 0x03, 0x40, 0x1F, 0x94, 0x00, 0x03, 0x03, 0x41, 0x03, 0x45,
+ 0x1F, 0x24, 0x00, 0x02, 0x03, 0x41, 0x1F, 0x96, 0x00, 0x03, 0x03, 0x42, 0x03, 0x45, 0x1F, 0x26,
+ 0x00, 0x02, 0x03, 0x42, 0x1F, 0x92, 0x00, 0x03, 0x03, 0x45, 0x03, 0x00, 0x1F, 0x94, 0x00, 0x03,
+ 0x03, 0x45, 0x03, 0x01, 0x1F, 0x92, 0x00, 0x03, 0x03, 0x45, 0x03, 0x40, 0x1F, 0x94, 0x00, 0x03,
+ 0x03, 0x45, 0x03, 0x41, 0x1F, 0x96, 0x00, 0x03, 0x03, 0x45, 0x03, 0x42, 0x1F, 0x90, 0x00, 0x02,
+ 0x03, 0x45, 0x00, 0x10, 0x00, 0x22, 0x00, 0x2A, 0x00, 0x30, 0x00, 0x38, 0x00, 0x3E, 0x00, 0x46,
+ 0x00, 0x4C, 0x00, 0x54, 0x00, 0x5A, 0x00, 0x62, 0x00, 0x68, 0x00, 0x70, 0x00, 0x78, 0x00, 0x80,
+ 0x00, 0x88, 0x00, 0x90, 0x1F, 0x93, 0x00, 0x03, 0x03, 0x00, 0x03, 0x45, 0x1F, 0x23, 0x00, 0x02,
+ 0x03, 0x00, 0x1F, 0x95, 0x00, 0x03, 0x03, 0x01, 0x03, 0x45, 0x1F, 0x25, 0x00, 0x02, 0x03, 0x01,
+ 0x1F, 0x93, 0x00, 0x03, 0x03, 0x40, 0x03, 0x45, 0x1F, 0x23, 0x00, 0x02, 0x03, 0x40, 0x1F, 0x95,
+ 0x00, 0x03, 0x03, 0x41, 0x03, 0x45, 0x1F, 0x25, 0x00, 0x02, 0x03, 0x41, 0x1F, 0x97, 0x00, 0x03,
+ 0x03, 0x42, 0x03, 0x45, 0x1F, 0x27, 0x00, 0x02, 0x03, 0x42, 0x1F, 0x93, 0x00, 0x03, 0x03, 0x45,
+ 0x03, 0x00, 0x1F, 0x95, 0x00, 0x03, 0x03, 0x45, 0x03, 0x01, 0x1F, 0x93, 0x00, 0x03, 0x03, 0x45,
+ 0x03, 0x40, 0x1F, 0x95, 0x00, 0x03, 0x03, 0x45, 0x03, 0x41, 0x1F, 0x97, 0x00, 0x03, 0x03, 0x45,
+ 0x03, 0x42, 0x1F, 0x91, 0x00, 0x02, 0x03, 0x45, 0x00, 0x01, 0x00, 0x04, 0x1F, 0x92, 0x00, 0x02,
+ 0x03, 0x45, 0x00, 0x01, 0x00, 0x04, 0x1F, 0x93, 0x00, 0x02, 0x03, 0x45, 0x00, 0x01, 0x00, 0x04,
+ 0x1F, 0x94, 0x00, 0x02, 0x03, 0x45, 0x00, 0x01, 0x00, 0x04, 0x1F, 0x95, 0x00, 0x02, 0x03, 0x45,
+ 0x00, 0x01, 0x00, 0x04, 0x1F, 0x96, 0x00, 0x02, 0x03, 0x45, 0x00, 0x01, 0x00, 0x04, 0x1F, 0x97,
+ 0x00, 0x02, 0x03, 0x45, 0x00, 0x10, 0x00, 0x22, 0x00, 0x2A, 0x00, 0x30, 0x00, 0x38, 0x00, 0x3E,
+ 0x00, 0x46, 0x00, 0x4C, 0x00, 0x54, 0x00, 0x5A, 0x00, 0x62, 0x00, 0x68, 0x00, 0x70, 0x00, 0x78,
+ 0x00, 0x80, 0x00, 0x88, 0x00, 0x90, 0x1F, 0x9A, 0x00, 0x03, 0x03, 0x00, 0x03, 0x45, 0x1F, 0x2A,
+ 0x00, 0x02, 0x03, 0x00, 0x1F, 0x9C, 0x00, 0x03, 0x03, 0x01, 0x03, 0x45, 0x1F, 0x2C, 0x00, 0x02,
+ 0x03, 0x01, 0x1F, 0x9A, 0x00, 0x03, 0x03, 0x40, 0x03, 0x45, 0x1F, 0x2A, 0x00, 0x02, 0x03, 0x40,
+ 0x1F, 0x9C, 0x00, 0x03, 0x03, 0x41, 0x03, 0x45, 0x1F, 0x2C, 0x00, 0x02, 0x03, 0x41, 0x1F, 0x9E,
+ 0x00, 0x03, 0x03, 0x42, 0x03, 0x45, 0x1F, 0x2E, 0x00, 0x02, 0x03, 0x42, 0x1F, 0x9A, 0x00, 0x03,
+ 0x03, 0x45, 0x03, 0x00, 0x1F, 0x9C, 0x00, 0x03, 0x03, 0x45, 0x03, 0x01, 0x1F, 0x9A, 0x00, 0x03,
+ 0x03, 0x45, 0x03, 0x40, 0x1F, 0x9C, 0x00, 0x03, 0x03, 0x45, 0x03, 0x41, 0x1F, 0x9E, 0x00, 0x03,
+ 0x03, 0x45, 0x03, 0x42, 0x1F, 0x98, 0x00, 0x02, 0x03, 0x45, 0x00, 0x10, 0x00, 0x22, 0x00, 0x2A,
+ 0x00, 0x30, 0x00, 0x38, 0x00, 0x3E, 0x00, 0x46, 0x00, 0x4C, 0x00, 0x54, 0x00, 0x5A, 0x00, 0x62,
+ 0x00, 0x68, 0x00, 0x70, 0x00, 0x78, 0x00, 0x80, 0x00, 0x88, 0x00, 0x90, 0x1F, 0x9B, 0x00, 0x03,
+ 0x03, 0x00, 0x03, 0x45, 0x1F, 0x2B, 0x00, 0x02, 0x03, 0x00, 0x1F, 0x9D, 0x00, 0x03, 0x03, 0x01,
+ 0x03, 0x45, 0x1F, 0x2D, 0x00, 0x02, 0x03, 0x01, 0x1F, 0x9B, 0x00, 0x03, 0x03, 0x40, 0x03, 0x45,
+ 0x1F, 0x2B, 0x00, 0x02, 0x03, 0x40, 0x1F, 0x9D, 0x00, 0x03, 0x03, 0x41, 0x03, 0x45, 0x1F, 0x2D,
+ 0x00, 0x02, 0x03, 0x41, 0x1F, 0x9F, 0x00, 0x03, 0x03, 0x42, 0x03, 0x45, 0x1F, 0x2F, 0x00, 0x02,
+ 0x03, 0x42, 0x1F, 0x9B, 0x00, 0x03, 0x03, 0x45, 0x03, 0x00, 0x1F, 0x9D, 0x00, 0x03, 0x03, 0x45,
+ 0x03, 0x01, 0x1F, 0x9B, 0x00, 0x03, 0x03, 0x45, 0x03, 0x40, 0x1F, 0x9D, 0x00, 0x03, 0x03, 0x45,
+ 0x03, 0x41, 0x1F, 0x9F, 0x00, 0x03, 0x03, 0x45, 0x03, 0x42, 0x1F, 0x99, 0x00, 0x02, 0x03, 0x45,
+ 0x00, 0x01, 0x00, 0x04, 0x1F, 0x9A, 0x00, 0x02, 0x03, 0x45, 0x00, 0x01, 0x00, 0x04, 0x1F, 0x9B,
+ 0x00, 0x02, 0x03, 0x45, 0x00, 0x01, 0x00, 0x04, 0x1F, 0x9C, 0x00, 0x02, 0x03, 0x45, 0x00, 0x01,
+ 0x00, 0x04, 0x1F, 0x9D, 0x00, 0x02, 0x03, 0x45, 0x00, 0x01, 0x00, 0x04, 0x1F, 0x9E, 0x00, 0x02,
+ 0x03, 0x45, 0x00, 0x01, 0x00, 0x04, 0x1F, 0x9F, 0x00, 0x02, 0x03, 0x45, 0x00, 0x05, 0x00, 0x0C,
+ 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x1F, 0x32, 0x00, 0x02, 0x03, 0x00, 0x1F, 0x34,
+ 0x00, 0x02, 0x03, 0x01, 0x1F, 0x32, 0x00, 0x02, 0x03, 0x40, 0x1F, 0x34, 0x00, 0x02, 0x03, 0x41,
+ 0x1F, 0x36, 0x00, 0x02, 0x03, 0x42, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E,
+ 0x00, 0x24, 0x1F, 0x33, 0x00, 0x02, 0x03, 0x00, 0x1F, 0x35, 0x00, 0x02, 0x03, 0x01, 0x1F, 0x33,
+ 0x00, 0x02, 0x03, 0x40, 0x1F, 0x35, 0x00, 0x02, 0x03, 0x41, 0x1F, 0x37, 0x00, 0x02, 0x03, 0x42,
+ 0x00, 0x05, 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x1F, 0x3A, 0x00, 0x02,
+ 0x03, 0x00, 0x1F, 0x3C, 0x00, 0x02, 0x03, 0x01, 0x1F, 0x3A, 0x00, 0x02, 0x03, 0x40, 0x1F, 0x3C,
+ 0x00, 0x02, 0x03, 0x41, 0x1F, 0x3E, 0x00, 0x02, 0x03, 0x42, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x12,
+ 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x1F, 0x3B, 0x00, 0x02, 0x03, 0x00, 0x1F, 0x3D, 0x00, 0x02,
+ 0x03, 0x01, 0x1F, 0x3B, 0x00, 0x02, 0x03, 0x40, 0x1F, 0x3D, 0x00, 0x02, 0x03, 0x41, 0x1F, 0x3F,
+ 0x00, 0x02, 0x03, 0x42, 0x00, 0x04, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C, 0x1F, 0x42,
+ 0x00, 0x02, 0x03, 0x00, 0x1F, 0x44, 0x00, 0x02, 0x03, 0x01, 0x1F, 0x42, 0x00, 0x02, 0x03, 0x40,
+ 0x1F, 0x44, 0x00, 0x02, 0x03, 0x41, 0x00, 0x04, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C,
+ 0x1F, 0x43, 0x00, 0x02, 0x03, 0x00, 0x1F, 0x45, 0x00, 0x02, 0x03, 0x01, 0x1F, 0x43, 0x00, 0x02,
+ 0x03, 0x40, 0x1F, 0x45, 0x00, 0x02, 0x03, 0x41, 0x00, 0x04, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x16,
+ 0x00, 0x1C, 0x1F, 0x4A, 0x00, 0x02, 0x03, 0x00, 0x1F, 0x4C, 0x00, 0x02, 0x03, 0x01, 0x1F, 0x4A,
+ 0x00, 0x02, 0x03, 0x40, 0x1F, 0x4C, 0x00, 0x02, 0x03, 0x41, 0x00, 0x04, 0x00, 0x0A, 0x00, 0x10,
+ 0x00, 0x16, 0x00, 0x1C, 0x1F, 0x4B, 0x00, 0x02, 0x03, 0x00, 0x1F, 0x4D, 0x00, 0x02, 0x03, 0x01,
+ 0x1F, 0x4B, 0x00, 0x02, 0x03, 0x40, 0x1F, 0x4D, 0x00, 0x02, 0x03, 0x41, 0x00, 0x05, 0x00, 0x0C,
+ 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x1F, 0x52, 0x00, 0x02, 0x03, 0x00, 0x1F, 0x54,
+ 0x00, 0x02, 0x03, 0x01, 0x1F, 0x52, 0x00, 0x02, 0x03, 0x40, 0x1F, 0x54, 0x00, 0x02, 0x03, 0x41,
+ 0x1F, 0x56, 0x00, 0x02, 0x03, 0x42, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E,
+ 0x00, 0x24, 0x1F, 0x53, 0x00, 0x02, 0x03, 0x00, 0x1F, 0x55, 0x00, 0x02, 0x03, 0x01, 0x1F, 0x53,
+ 0x00, 0x02, 0x03, 0x40, 0x1F, 0x55, 0x00, 0x02, 0x03, 0x41, 0x1F, 0x57, 0x00, 0x02, 0x03, 0x42,
+ 0x00, 0x05, 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x1F, 0x5B, 0x00, 0x02,
+ 0x03, 0x00, 0x1F, 0x5D, 0x00, 0x02, 0x03, 0x01, 0x1F, 0x5B, 0x00, 0x02, 0x03, 0x40, 0x1F, 0x5D,
+ 0x00, 0x02, 0x03, 0x41, 0x1F, 0x5F, 0x00, 0x02, 0x03, 0x42, 0x00, 0x10, 0x00, 0x22, 0x00, 0x2A,
+ 0x00, 0x30, 0x00, 0x38, 0x00, 0x3E, 0x00, 0x46, 0x00, 0x4C, 0x00, 0x54, 0x00, 0x5A, 0x00, 0x62,
+ 0x00, 0x68, 0x00, 0x70, 0x00, 0x78, 0x00, 0x80, 0x00, 0x88, 0x00, 0x90, 0x1F, 0xA2, 0x00, 0x03,
+ 0x03, 0x00, 0x03, 0x45, 0x1F, 0x62, 0x00, 0x02, 0x03, 0x00, 0x1F, 0xA4, 0x00, 0x03, 0x03, 0x01,
+ 0x03, 0x45, 0x1F, 0x64, 0x00, 0x02, 0x03, 0x01, 0x1F, 0xA2, 0x00, 0x03, 0x03, 0x40, 0x03, 0x45,
+ 0x1F, 0x62, 0x00, 0x02, 0x03, 0x40, 0x1F, 0xA4, 0x00, 0x03, 0x03, 0x41, 0x03, 0x45, 0x1F, 0x64,
+ 0x00, 0x02, 0x03, 0x41, 0x1F, 0xA6, 0x00, 0x03, 0x03, 0x42, 0x03, 0x45, 0x1F, 0x66, 0x00, 0x02,
+ 0x03, 0x42, 0x1F, 0xA2, 0x00, 0x03, 0x03, 0x45, 0x03, 0x00, 0x1F, 0xA4, 0x00, 0x03, 0x03, 0x45,
+ 0x03, 0x01, 0x1F, 0xA2, 0x00, 0x03, 0x03, 0x45, 0x03, 0x40, 0x1F, 0xA4, 0x00, 0x03, 0x03, 0x45,
+ 0x03, 0x41, 0x1F, 0xA6, 0x00, 0x03, 0x03, 0x45, 0x03, 0x42, 0x1F, 0xA0, 0x00, 0x02, 0x03, 0x45,
+ 0x00, 0x10, 0x00, 0x22, 0x00, 0x2A, 0x00, 0x30, 0x00, 0x38, 0x00, 0x3E, 0x00, 0x46, 0x00, 0x4C,
+ 0x00, 0x54, 0x00, 0x5A, 0x00, 0x62, 0x00, 0x68, 0x00, 0x70, 0x00, 0x78, 0x00, 0x80, 0x00, 0x88,
+ 0x00, 0x90, 0x1F, 0xA3, 0x00, 0x03, 0x03, 0x00, 0x03, 0x45, 0x1F, 0x63, 0x00, 0x02, 0x03, 0x00,
+ 0x1F, 0xA5, 0x00, 0x03, 0x03, 0x01, 0x03, 0x45, 0x1F, 0x65, 0x00, 0x02, 0x03, 0x01, 0x1F, 0xA3,
+ 0x00, 0x03, 0x03, 0x40, 0x03, 0x45, 0x1F, 0x63, 0x00, 0x02, 0x03, 0x40, 0x1F, 0xA5, 0x00, 0x03,
+ 0x03, 0x41, 0x03, 0x45, 0x1F, 0x65, 0x00, 0x02, 0x03, 0x41, 0x1F, 0xA7, 0x00, 0x03, 0x03, 0x42,
+ 0x03, 0x45, 0x1F, 0x67, 0x00, 0x02, 0x03, 0x42, 0x1F, 0xA3, 0x00, 0x03, 0x03, 0x45, 0x03, 0x00,
+ 0x1F, 0xA5, 0x00, 0x03, 0x03, 0x45, 0x03, 0x01, 0x1F, 0xA3, 0x00, 0x03, 0x03, 0x45, 0x03, 0x40,
+ 0x1F, 0xA5, 0x00, 0x03, 0x03, 0x45, 0x03, 0x41, 0x1F, 0xA7, 0x00, 0x03, 0x03, 0x45, 0x03, 0x42,
+ 0x1F, 0xA1, 0x00, 0x02, 0x03, 0x45, 0x00, 0x01, 0x00, 0x04, 0x1F, 0xA2, 0x00, 0x02, 0x03, 0x45,
+ 0x00, 0x01, 0x00, 0x04, 0x1F, 0xA3, 0x00, 0x02, 0x03, 0x45, 0x00, 0x01, 0x00, 0x04, 0x1F, 0xA4,
+ 0x00, 0x02, 0x03, 0x45, 0x00, 0x01, 0x00, 0x04, 0x1F, 0xA5, 0x00, 0x02, 0x03, 0x45, 0x00, 0x01,
+ 0x00, 0x04, 0x1F, 0xA6, 0x00, 0x02, 0x03, 0x45, 0x00, 0x01, 0x00, 0x04, 0x1F, 0xA7, 0x00, 0x02,
+ 0x03, 0x45, 0x00, 0x10, 0x00, 0x22, 0x00, 0x2A, 0x00, 0x30, 0x00, 0x38, 0x00, 0x3E, 0x00, 0x46,
+ 0x00, 0x4C, 0x00, 0x54, 0x00, 0x5A, 0x00, 0x62, 0x00, 0x68, 0x00, 0x70, 0x00, 0x78, 0x00, 0x80,
+ 0x00, 0x88, 0x00, 0x90, 0x1F, 0xAA, 0x00, 0x03, 0x03, 0x00, 0x03, 0x45, 0x1F, 0x6A, 0x00, 0x02,
+ 0x03, 0x00, 0x1F, 0xAC, 0x00, 0x03, 0x03, 0x01, 0x03, 0x45, 0x1F, 0x6C, 0x00, 0x02, 0x03, 0x01,
+ 0x1F, 0xAA, 0x00, 0x03, 0x03, 0x40, 0x03, 0x45, 0x1F, 0x6A, 0x00, 0x02, 0x03, 0x40, 0x1F, 0xAC,
+ 0x00, 0x03, 0x03, 0x41, 0x03, 0x45, 0x1F, 0x6C, 0x00, 0x02, 0x03, 0x41, 0x1F, 0xAE, 0x00, 0x03,
+ 0x03, 0x42, 0x03, 0x45, 0x1F, 0x6E, 0x00, 0x02, 0x03, 0x42, 0x1F, 0xAA, 0x00, 0x03, 0x03, 0x45,
+ 0x03, 0x00, 0x1F, 0xAC, 0x00, 0x03, 0x03, 0x45, 0x03, 0x01, 0x1F, 0xAA, 0x00, 0x03, 0x03, 0x45,
+ 0x03, 0x40, 0x1F, 0xAC, 0x00, 0x03, 0x03, 0x45, 0x03, 0x41, 0x1F, 0xAE, 0x00, 0x03, 0x03, 0x45,
+ 0x03, 0x42, 0x1F, 0xA8, 0x00, 0x02, 0x03, 0x45, 0x00, 0x10, 0x00, 0x22, 0x00, 0x2A, 0x00, 0x30,
+ 0x00, 0x38, 0x00, 0x3E, 0x00, 0x46, 0x00, 0x4C, 0x00, 0x54, 0x00, 0x5A, 0x00, 0x62, 0x00, 0x68,
+ 0x00, 0x70, 0x00, 0x78, 0x00, 0x80, 0x00, 0x88, 0x00, 0x90, 0x1F, 0xAB, 0x00, 0x03, 0x03, 0x00,
+ 0x03, 0x45, 0x1F, 0x6B, 0x00, 0x02, 0x03, 0x00, 0x1F, 0xAD, 0x00, 0x03, 0x03, 0x01, 0x03, 0x45,
+ 0x1F, 0x6D, 0x00, 0x02, 0x03, 0x01, 0x1F, 0xAB, 0x00, 0x03, 0x03, 0x40, 0x03, 0x45, 0x1F, 0x6B,
+ 0x00, 0x02, 0x03, 0x40, 0x1F, 0xAD, 0x00, 0x03, 0x03, 0x41, 0x03, 0x45, 0x1F, 0x6D, 0x00, 0x02,
+ 0x03, 0x41, 0x1F, 0xAF, 0x00, 0x03, 0x03, 0x42, 0x03, 0x45, 0x1F, 0x6F, 0x00, 0x02, 0x03, 0x42,
+ 0x1F, 0xAB, 0x00, 0x03, 0x03, 0x45, 0x03, 0x00, 0x1F, 0xAD, 0x00, 0x03, 0x03, 0x45, 0x03, 0x01,
+ 0x1F, 0xAB, 0x00, 0x03, 0x03, 0x45, 0x03, 0x40, 0x1F, 0xAD, 0x00, 0x03, 0x03, 0x45, 0x03, 0x41,
+ 0x1F, 0xAF, 0x00, 0x03, 0x03, 0x45, 0x03, 0x42, 0x1F, 0xA9, 0x00, 0x02, 0x03, 0x45, 0x00, 0x01,
+ 0x00, 0x04, 0x1F, 0xAA, 0x00, 0x02, 0x03, 0x45, 0x00, 0x01, 0x00, 0x04, 0x1F, 0xAB, 0x00, 0x02,
+ 0x03, 0x45, 0x00, 0x01, 0x00, 0x04, 0x1F, 0xAC, 0x00, 0x02, 0x03, 0x45, 0x00, 0x01, 0x00, 0x04,
+ 0x1F, 0xAD, 0x00, 0x02, 0x03, 0x45, 0x00, 0x01, 0x00, 0x04, 0x1F, 0xAE, 0x00, 0x02, 0x03, 0x45,
+ 0x00, 0x01, 0x00, 0x04, 0x1F, 0xAF, 0x00, 0x02, 0x03, 0x45, 0x00, 0x01, 0x00, 0x04, 0x1F, 0xB2,
+ 0x00, 0x02, 0x03, 0x45, 0x00, 0x01, 0x00, 0x04, 0x1F, 0xB4, 0x00, 0x02, 0x03, 0x45, 0x00, 0x01,
+ 0x00, 0x04, 0x1F, 0xC2, 0x00, 0x02, 0x03, 0x45, 0x00, 0x01, 0x00, 0x04, 0x1F, 0xC4, 0x00, 0x02,
+ 0x03, 0x45, 0x00, 0x01, 0x00, 0x04, 0x1F, 0xF2, 0x00, 0x02, 0x03, 0x45, 0x00, 0x01, 0x00, 0x04,
+ 0x1F, 0xF4, 0x00, 0x02, 0x03, 0x45, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E,
+ 0x00, 0x24, 0x1F, 0x82, 0x00, 0x02, 0x03, 0x00, 0x1F, 0x84, 0x00, 0x02, 0x03, 0x01, 0x1F, 0x82,
+ 0x00, 0x02, 0x03, 0x40, 0x1F, 0x84, 0x00, 0x02, 0x03, 0x41, 0x1F, 0x86, 0x00, 0x02, 0x03, 0x42,
+ 0x00, 0x05, 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x1F, 0x83, 0x00, 0x02,
+ 0x03, 0x00, 0x1F, 0x85, 0x00, 0x02, 0x03, 0x01, 0x1F, 0x83, 0x00, 0x02, 0x03, 0x40, 0x1F, 0x85,
+ 0x00, 0x02, 0x03, 0x41, 0x1F, 0x87, 0x00, 0x02, 0x03, 0x42, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x12,
+ 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x1F, 0x8A, 0x00, 0x02, 0x03, 0x00, 0x1F, 0x8C, 0x00, 0x02,
+ 0x03, 0x01, 0x1F, 0x8A, 0x00, 0x02, 0x03, 0x40, 0x1F, 0x8C, 0x00, 0x02, 0x03, 0x41, 0x1F, 0x8E,
+ 0x00, 0x02, 0x03, 0x42, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24,
+ 0x1F, 0x8B, 0x00, 0x02, 0x03, 0x00, 0x1F, 0x8D, 0x00, 0x02, 0x03, 0x01, 0x1F, 0x8B, 0x00, 0x02,
+ 0x03, 0x40, 0x1F, 0x8D, 0x00, 0x02, 0x03, 0x41, 0x1F, 0x8F, 0x00, 0x02, 0x03, 0x42, 0x00, 0x05,
+ 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x1F, 0x92, 0x00, 0x02, 0x03, 0x00,
+ 0x1F, 0x94, 0x00, 0x02, 0x03, 0x01, 0x1F, 0x92, 0x00, 0x02, 0x03, 0x40, 0x1F, 0x94, 0x00, 0x02,
+ 0x03, 0x41, 0x1F, 0x96, 0x00, 0x02, 0x03, 0x42, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18,
+ 0x00, 0x1E, 0x00, 0x24, 0x1F, 0x93, 0x00, 0x02, 0x03, 0x00, 0x1F, 0x95, 0x00, 0x02, 0x03, 0x01,
+ 0x1F, 0x93, 0x00, 0x02, 0x03, 0x40, 0x1F, 0x95, 0x00, 0x02, 0x03, 0x41, 0x1F, 0x97, 0x00, 0x02,
+ 0x03, 0x42, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x1F, 0x9A,
+ 0x00, 0x02, 0x03, 0x00, 0x1F, 0x9C, 0x00, 0x02, 0x03, 0x01, 0x1F, 0x9A, 0x00, 0x02, 0x03, 0x40,
+ 0x1F, 0x9C, 0x00, 0x02, 0x03, 0x41, 0x1F, 0x9E, 0x00, 0x02, 0x03, 0x42, 0x00, 0x05, 0x00, 0x0C,
+ 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x1F, 0x9B, 0x00, 0x02, 0x03, 0x00, 0x1F, 0x9D,
+ 0x00, 0x02, 0x03, 0x01, 0x1F, 0x9B, 0x00, 0x02, 0x03, 0x40, 0x1F, 0x9D, 0x00, 0x02, 0x03, 0x41,
+ 0x1F, 0x9F, 0x00, 0x02, 0x03, 0x42, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E,
+ 0x00, 0x24, 0x1F, 0xA2, 0x00, 0x02, 0x03, 0x00, 0x1F, 0xA4, 0x00, 0x02, 0x03, 0x01, 0x1F, 0xA2,
+ 0x00, 0x02, 0x03, 0x40, 0x1F, 0xA4, 0x00, 0x02, 0x03, 0x41, 0x1F, 0xA6, 0x00, 0x02, 0x03, 0x42,
+ 0x00, 0x05, 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x1F, 0xA3, 0x00, 0x02,
+ 0x03, 0x00, 0x1F, 0xA5, 0x00, 0x02, 0x03, 0x01, 0x1F, 0xA3, 0x00, 0x02, 0x03, 0x40, 0x1F, 0xA5,
+ 0x00, 0x02, 0x03, 0x41, 0x1F, 0xA7, 0x00, 0x02, 0x03, 0x42, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x12,
+ 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x1F, 0xAA, 0x00, 0x02, 0x03, 0x00, 0x1F, 0xAC, 0x00, 0x02,
+ 0x03, 0x01, 0x1F, 0xAA, 0x00, 0x02, 0x03, 0x40, 0x1F, 0xAC, 0x00, 0x02, 0x03, 0x41, 0x1F, 0xAE,
+ 0x00, 0x02, 0x03, 0x42, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24,
+ 0x1F, 0xAB, 0x00, 0x02, 0x03, 0x00, 0x1F, 0xAD, 0x00, 0x02, 0x03, 0x01, 0x1F, 0xAB, 0x00, 0x02,
+ 0x03, 0x40, 0x1F, 0xAD, 0x00, 0x02, 0x03, 0x41, 0x1F, 0xAF, 0x00, 0x02, 0x03, 0x42, 0x00, 0x17,
+ 0x00, 0x30, 0x00, 0x36, 0x00, 0x3C, 0x00, 0x44, 0x00, 0x4C, 0x00, 0x54, 0x00, 0x5C, 0x00, 0x64,
+ 0x00, 0x6A, 0x00, 0x72, 0x00, 0x7A, 0x00, 0x82, 0x00, 0x8A, 0x00, 0x92, 0x00, 0x98, 0x00, 0x9E,
+ 0x00, 0xA4, 0x00, 0xAA, 0x00, 0xB2, 0x00, 0xBA, 0x00, 0xC2, 0x00, 0xCA, 0x00, 0xD2, 0x1F, 0xB2,
+ 0x00, 0x02, 0x03, 0x00, 0x1F, 0xB4, 0x00, 0x02, 0x03, 0x01, 0x1F, 0x82, 0x00, 0x03, 0x03, 0x13,
+ 0x03, 0x00, 0x1F, 0x84, 0x00, 0x03, 0x03, 0x13, 0x03, 0x01, 0x1F, 0x82, 0x00, 0x03, 0x03, 0x13,
+ 0x03, 0x40, 0x1F, 0x84, 0x00, 0x03, 0x03, 0x13, 0x03, 0x41, 0x1F, 0x86, 0x00, 0x03, 0x03, 0x13,
+ 0x03, 0x42, 0x1F, 0x80, 0x00, 0x02, 0x03, 0x13, 0x1F, 0x83, 0x00, 0x03, 0x03, 0x14, 0x03, 0x00,
+ 0x1F, 0x85, 0x00, 0x03, 0x03, 0x14, 0x03, 0x01, 0x1F, 0x83, 0x00, 0x03, 0x03, 0x14, 0x03, 0x40,
+ 0x1F, 0x85, 0x00, 0x03, 0x03, 0x14, 0x03, 0x41, 0x1F, 0x87, 0x00, 0x03, 0x03, 0x14, 0x03, 0x42,
+ 0x1F, 0x81, 0x00, 0x02, 0x03, 0x14, 0x1F, 0xB2, 0x00, 0x02, 0x03, 0x40, 0x1F, 0xB4, 0x00, 0x02,
+ 0x03, 0x41, 0x1F, 0xB7, 0x00, 0x02, 0x03, 0x42, 0x1F, 0x82, 0x00, 0x03, 0x03, 0x43, 0x03, 0x00,
+ 0x1F, 0x84, 0x00, 0x03, 0x03, 0x43, 0x03, 0x01, 0x1F, 0x82, 0x00, 0x03, 0x03, 0x43, 0x03, 0x40,
+ 0x1F, 0x84, 0x00, 0x03, 0x03, 0x43, 0x03, 0x41, 0x1F, 0x86, 0x00, 0x03, 0x03, 0x43, 0x03, 0x42,
+ 0x1F, 0x80, 0x00, 0x02, 0x03, 0x43, 0x00, 0x01, 0x00, 0x04, 0x1F, 0xB7, 0x00, 0x02, 0x03, 0x45,
+ 0x00, 0x12, 0x00, 0x26, 0x00, 0x2E, 0x00, 0x36, 0x00, 0x3E, 0x00, 0x46, 0x00, 0x4E, 0x00, 0x54,
+ 0x00, 0x5C, 0x00, 0x64, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x7C, 0x00, 0x82, 0x00, 0x8A, 0x00, 0x92,
+ 0x00, 0x9A, 0x00, 0xA2, 0x00, 0xAA, 0x1F, 0x8A, 0x00, 0x03, 0x03, 0x13, 0x03, 0x00, 0x1F, 0x8C,
+ 0x00, 0x03, 0x03, 0x13, 0x03, 0x01, 0x1F, 0x8A, 0x00, 0x03, 0x03, 0x13, 0x03, 0x40, 0x1F, 0x8C,
+ 0x00, 0x03, 0x03, 0x13, 0x03, 0x41, 0x1F, 0x8E, 0x00, 0x03, 0x03, 0x13, 0x03, 0x42, 0x1F, 0x88,
+ 0x00, 0x02, 0x03, 0x13, 0x1F, 0x8B, 0x00, 0x03, 0x03, 0x14, 0x03, 0x00, 0x1F, 0x8D, 0x00, 0x03,
+ 0x03, 0x14, 0x03, 0x01, 0x1F, 0x8B, 0x00, 0x03, 0x03, 0x14, 0x03, 0x40, 0x1F, 0x8D, 0x00, 0x03,
+ 0x03, 0x14, 0x03, 0x41, 0x1F, 0x8F, 0x00, 0x03, 0x03, 0x14, 0x03, 0x42, 0x1F, 0x89, 0x00, 0x02,
+ 0x03, 0x14, 0x1F, 0x8A, 0x00, 0x03, 0x03, 0x43, 0x03, 0x00, 0x1F, 0x8C, 0x00, 0x03, 0x03, 0x43,
+ 0x03, 0x01, 0x1F, 0x8A, 0x00, 0x03, 0x03, 0x43, 0x03, 0x40, 0x1F, 0x8C, 0x00, 0x03, 0x03, 0x43,
+ 0x03, 0x41, 0x1F, 0x8E, 0x00, 0x03, 0x03, 0x43, 0x03, 0x42, 0x1F, 0x88, 0x00, 0x02, 0x03, 0x43,
+ 0x00, 0x20, 0x00, 0x42, 0x00, 0x48, 0x00, 0x4E, 0x00, 0x54, 0x00, 0x5A, 0x00, 0x62, 0x00, 0x6A,
+ 0x00, 0x72, 0x00, 0x7A, 0x00, 0x82, 0x00, 0x88, 0x00, 0x90, 0x00, 0x98, 0x00, 0xA0, 0x00, 0xA8,
+ 0x00, 0xB0, 0x00, 0xB6, 0x00, 0xBE, 0x00, 0xC6, 0x00, 0xCE, 0x00, 0xD6, 0x00, 0xDE, 0x00, 0xE4,
+ 0x00, 0xEA, 0x00, 0xF0, 0x00, 0xF6, 0x00, 0xFE, 0x01, 0x06, 0x01, 0x0E, 0x01, 0x16, 0x01, 0x1E,
+ 0x01, 0x24, 0x1F, 0x76, 0x00, 0x02, 0x03, 0x00, 0x03, 0xAF, 0x00, 0x02, 0x03, 0x01, 0x1F, 0xD1,
+ 0x00, 0x02, 0x03, 0x04, 0x1F, 0xD0, 0x00, 0x02, 0x03, 0x06, 0x1F, 0xD2, 0x00, 0x03, 0x03, 0x08,
+ 0x03, 0x00, 0x03, 0x90, 0x00, 0x03, 0x03, 0x08, 0x03, 0x01, 0x1F, 0xD2, 0x00, 0x03, 0x03, 0x08,
+ 0x03, 0x40, 0x03, 0x90, 0x00, 0x03, 0x03, 0x08, 0x03, 0x41, 0x1F, 0xD7, 0x00, 0x03, 0x03, 0x08,
+ 0x03, 0x42, 0x03, 0xCA, 0x00, 0x02, 0x03, 0x08, 0x1F, 0x32, 0x00, 0x03, 0x03, 0x13, 0x03, 0x00,
+ 0x1F, 0x34, 0x00, 0x03, 0x03, 0x13, 0x03, 0x01, 0x1F, 0x32, 0x00, 0x03, 0x03, 0x13, 0x03, 0x40,
+ 0x1F, 0x34, 0x00, 0x03, 0x03, 0x13, 0x03, 0x41, 0x1F, 0x36, 0x00, 0x03, 0x03, 0x13, 0x03, 0x42,
+ 0x1F, 0x30, 0x00, 0x02, 0x03, 0x13, 0x1F, 0x33, 0x00, 0x03, 0x03, 0x14, 0x03, 0x00, 0x1F, 0x35,
+ 0x00, 0x03, 0x03, 0x14, 0x03, 0x01, 0x1F, 0x33, 0x00, 0x03, 0x03, 0x14, 0x03, 0x40, 0x1F, 0x35,
+ 0x00, 0x03, 0x03, 0x14, 0x03, 0x41, 0x1F, 0x37, 0x00, 0x03, 0x03, 0x14, 0x03, 0x42, 0x1F, 0x31,
+ 0x00, 0x02, 0x03, 0x14, 0x1F, 0x76, 0x00, 0x02, 0x03, 0x40, 0x03, 0xAF, 0x00, 0x02, 0x03, 0x41,
+ 0x1F, 0xD6, 0x00, 0x02, 0x03, 0x42, 0x1F, 0x32, 0x00, 0x03, 0x03, 0x43, 0x03, 0x00, 0x1F, 0x34,
+ 0x00, 0x03, 0x03, 0x43, 0x03, 0x01, 0x1F, 0x32, 0x00, 0x03, 0x03, 0x43, 0x03, 0x40, 0x1F, 0x34,
+ 0x00, 0x03, 0x03, 0x43, 0x03, 0x41, 0x1F, 0x36, 0x00, 0x03, 0x03, 0x43, 0x03, 0x42, 0x1F, 0x30,
+ 0x00, 0x02, 0x03, 0x43, 0x03, 0x90, 0x00, 0x02, 0x03, 0x44, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x12,
+ 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x1F, 0xCD, 0x00, 0x02, 0x03, 0x00, 0x1F, 0xCE, 0x00, 0x02,
+ 0x03, 0x01, 0x1F, 0xCD, 0x00, 0x02, 0x03, 0x40, 0x1F, 0xCE, 0x00, 0x02, 0x03, 0x41, 0x1F, 0xCF,
+ 0x00, 0x02, 0x03, 0x42, 0x00, 0x17, 0x00, 0x30, 0x00, 0x36, 0x00, 0x3C, 0x00, 0x44, 0x00, 0x4C,
+ 0x00, 0x54, 0x00, 0x5C, 0x00, 0x64, 0x00, 0x6A, 0x00, 0x72, 0x00, 0x7A, 0x00, 0x82, 0x00, 0x8A,
+ 0x00, 0x92, 0x00, 0x98, 0x00, 0x9E, 0x00, 0xA4, 0x00, 0xAA, 0x00, 0xB2, 0x00, 0xBA, 0x00, 0xC2,
+ 0x00, 0xCA, 0x00, 0xD2, 0x1F, 0xC2, 0x00, 0x02, 0x03, 0x00, 0x1F, 0xC4, 0x00, 0x02, 0x03, 0x01,
+ 0x1F, 0x92, 0x00, 0x03, 0x03, 0x13, 0x03, 0x00, 0x1F, 0x94, 0x00, 0x03, 0x03, 0x13, 0x03, 0x01,
+ 0x1F, 0x92, 0x00, 0x03, 0x03, 0x13, 0x03, 0x40, 0x1F, 0x94, 0x00, 0x03, 0x03, 0x13, 0x03, 0x41,
+ 0x1F, 0x96, 0x00, 0x03, 0x03, 0x13, 0x03, 0x42, 0x1F, 0x90, 0x00, 0x02, 0x03, 0x13, 0x1F, 0x93,
+ 0x00, 0x03, 0x03, 0x14, 0x03, 0x00, 0x1F, 0x95, 0x00, 0x03, 0x03, 0x14, 0x03, 0x01, 0x1F, 0x93,
+ 0x00, 0x03, 0x03, 0x14, 0x03, 0x40, 0x1F, 0x95, 0x00, 0x03, 0x03, 0x14, 0x03, 0x41, 0x1F, 0x97,
+ 0x00, 0x03, 0x03, 0x14, 0x03, 0x42, 0x1F, 0x91, 0x00, 0x02, 0x03, 0x14, 0x1F, 0xC2, 0x00, 0x02,
+ 0x03, 0x40, 0x1F, 0xC4, 0x00, 0x02, 0x03, 0x41, 0x1F, 0xC7, 0x00, 0x02, 0x03, 0x42, 0x1F, 0x92,
+ 0x00, 0x03, 0x03, 0x43, 0x03, 0x00, 0x1F, 0x94, 0x00, 0x03, 0x03, 0x43, 0x03, 0x01, 0x1F, 0x92,
+ 0x00, 0x03, 0x03, 0x43, 0x03, 0x40, 0x1F, 0x94, 0x00, 0x03, 0x03, 0x43, 0x03, 0x41, 0x1F, 0x96,
+ 0x00, 0x03, 0x03, 0x43, 0x03, 0x42, 0x1F, 0x90, 0x00, 0x02, 0x03, 0x43, 0x00, 0x01, 0x00, 0x04,
+ 0x1F, 0xC7, 0x00, 0x02, 0x03, 0x45, 0x00, 0x12, 0x00, 0x26, 0x00, 0x2E, 0x00, 0x36, 0x00, 0x3E,
+ 0x00, 0x46, 0x00, 0x4E, 0x00, 0x54, 0x00, 0x5C, 0x00, 0x64, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x7C,
+ 0x00, 0x82, 0x00, 0x8A, 0x00, 0x92, 0x00, 0x9A, 0x00, 0xA2, 0x00, 0xAA, 0x1F, 0x9A, 0x00, 0x03,
+ 0x03, 0x13, 0x03, 0x00, 0x1F, 0x9C, 0x00, 0x03, 0x03, 0x13, 0x03, 0x01, 0x1F, 0x9A, 0x00, 0x03,
+ 0x03, 0x13, 0x03, 0x40, 0x1F, 0x9C, 0x00, 0x03, 0x03, 0x13, 0x03, 0x41, 0x1F, 0x9E, 0x00, 0x03,
+ 0x03, 0x13, 0x03, 0x42, 0x1F, 0x98, 0x00, 0x02, 0x03, 0x13, 0x1F, 0x9B, 0x00, 0x03, 0x03, 0x14,
+ 0x03, 0x00, 0x1F, 0x9D, 0x00, 0x03, 0x03, 0x14, 0x03, 0x01, 0x1F, 0x9B, 0x00, 0x03, 0x03, 0x14,
+ 0x03, 0x40, 0x1F, 0x9D, 0x00, 0x03, 0x03, 0x14, 0x03, 0x41, 0x1F, 0x9F, 0x00, 0x03, 0x03, 0x14,
+ 0x03, 0x42, 0x1F, 0x99, 0x00, 0x02, 0x03, 0x14, 0x1F, 0x9A, 0x00, 0x03, 0x03, 0x43, 0x03, 0x00,
+ 0x1F, 0x9C, 0x00, 0x03, 0x03, 0x43, 0x03, 0x01, 0x1F, 0x9A, 0x00, 0x03, 0x03, 0x43, 0x03, 0x40,
+ 0x1F, 0x9C, 0x00, 0x03, 0x03, 0x43, 0x03, 0x41, 0x1F, 0x9E, 0x00, 0x03, 0x03, 0x43, 0x03, 0x42,
+ 0x1F, 0x98, 0x00, 0x02, 0x03, 0x43, 0x00, 0x17, 0x00, 0x30, 0x00, 0x36, 0x00, 0x3C, 0x00, 0x44,
+ 0x00, 0x4C, 0x00, 0x54, 0x00, 0x5C, 0x00, 0x64, 0x00, 0x6A, 0x00, 0x72, 0x00, 0x7A, 0x00, 0x82,
+ 0x00, 0x8A, 0x00, 0x92, 0x00, 0x98, 0x00, 0x9E, 0x00, 0xA4, 0x00, 0xAA, 0x00, 0xB2, 0x00, 0xBA,
+ 0x00, 0xC2, 0x00, 0xCA, 0x00, 0xD2, 0x1F, 0xF2, 0x00, 0x02, 0x03, 0x00, 0x1F, 0xF4, 0x00, 0x02,
+ 0x03, 0x01, 0x1F, 0xA2, 0x00, 0x03, 0x03, 0x13, 0x03, 0x00, 0x1F, 0xA4, 0x00, 0x03, 0x03, 0x13,
+ 0x03, 0x01, 0x1F, 0xA2, 0x00, 0x03, 0x03, 0x13, 0x03, 0x40, 0x1F, 0xA4, 0x00, 0x03, 0x03, 0x13,
+ 0x03, 0x41, 0x1F, 0xA6, 0x00, 0x03, 0x03, 0x13, 0x03, 0x42, 0x1F, 0xA0, 0x00, 0x02, 0x03, 0x13,
+ 0x1F, 0xA3, 0x00, 0x03, 0x03, 0x14, 0x03, 0x00, 0x1F, 0xA5, 0x00, 0x03, 0x03, 0x14, 0x03, 0x01,
+ 0x1F, 0xA3, 0x00, 0x03, 0x03, 0x14, 0x03, 0x40, 0x1F, 0xA5, 0x00, 0x03, 0x03, 0x14, 0x03, 0x41,
+ 0x1F, 0xA7, 0x00, 0x03, 0x03, 0x14, 0x03, 0x42, 0x1F, 0xA1, 0x00, 0x02, 0x03, 0x14, 0x1F, 0xF2,
+ 0x00, 0x02, 0x03, 0x40, 0x1F, 0xF4, 0x00, 0x02, 0x03, 0x41, 0x1F, 0xF7, 0x00, 0x02, 0x03, 0x42,
+ 0x1F, 0xA2, 0x00, 0x03, 0x03, 0x43, 0x03, 0x00, 0x1F, 0xA4, 0x00, 0x03, 0x03, 0x43, 0x03, 0x01,
+ 0x1F, 0xA2, 0x00, 0x03, 0x03, 0x43, 0x03, 0x40, 0x1F, 0xA4, 0x00, 0x03, 0x03, 0x43, 0x03, 0x41,
+ 0x1F, 0xA6, 0x00, 0x03, 0x03, 0x43, 0x03, 0x42, 0x1F, 0xA0, 0x00, 0x02, 0x03, 0x43, 0x00, 0x01,
+ 0x00, 0x04, 0x1F, 0xF7, 0x00, 0x02, 0x03, 0x45, 0x00, 0x12, 0x00, 0x26, 0x00, 0x2E, 0x00, 0x36,
+ 0x00, 0x3E, 0x00, 0x46, 0x00, 0x4E, 0x00, 0x54, 0x00, 0x5C, 0x00, 0x64, 0x00, 0x6C, 0x00, 0x74,
+ 0x00, 0x7C, 0x00, 0x82, 0x00, 0x8A, 0x00, 0x92, 0x00, 0x9A, 0x00, 0xA2, 0x00, 0xAA, 0x1F, 0xAA,
+ 0x00, 0x03, 0x03, 0x13, 0x03, 0x00, 0x1F, 0xAC, 0x00, 0x03, 0x03, 0x13, 0x03, 0x01, 0x1F, 0xAA,
+ 0x00, 0x03, 0x03, 0x13, 0x03, 0x40, 0x1F, 0xAC, 0x00, 0x03, 0x03, 0x13, 0x03, 0x41, 0x1F, 0xAE,
+ 0x00, 0x03, 0x03, 0x13, 0x03, 0x42, 0x1F, 0xA8, 0x00, 0x02, 0x03, 0x13, 0x1F, 0xAB, 0x00, 0x03,
+ 0x03, 0x14, 0x03, 0x00, 0x1F, 0xAD, 0x00, 0x03, 0x03, 0x14, 0x03, 0x01, 0x1F, 0xAB, 0x00, 0x03,
+ 0x03, 0x14, 0x03, 0x40, 0x1F, 0xAD, 0x00, 0x03, 0x03, 0x14, 0x03, 0x41, 0x1F, 0xAF, 0x00, 0x03,
+ 0x03, 0x14, 0x03, 0x42, 0x1F, 0xA9, 0x00, 0x02, 0x03, 0x14, 0x1F, 0xAA, 0x00, 0x03, 0x03, 0x43,
+ 0x03, 0x00, 0x1F, 0xAC, 0x00, 0x03, 0x03, 0x43, 0x03, 0x01, 0x1F, 0xAA, 0x00, 0x03, 0x03, 0x43,
+ 0x03, 0x40, 0x1F, 0xAC, 0x00, 0x03, 0x03, 0x43, 0x03, 0x41, 0x1F, 0xAE, 0x00, 0x03, 0x03, 0x43,
+ 0x03, 0x42, 0x1F, 0xA8, 0x00, 0x02, 0x03, 0x43, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18,
+ 0x00, 0x1E, 0x00, 0x24, 0x1F, 0xDD, 0x00, 0x02, 0x03, 0x00, 0x1F, 0xDE, 0x00, 0x02, 0x03, 0x01,
+ 0x1F, 0xDD, 0x00, 0x02, 0x03, 0x40, 0x1F, 0xDE, 0x00, 0x02, 0x03, 0x41, 0x1F, 0xDF, 0x00, 0x02,
+ 0x03, 0x42, 0x00, 0x4A, 0x00, 0x96, 0x00, 0x9C, 0x00, 0xA2, 0x00, 0xAC, 0x00, 0xB4, 0x00, 0xBE,
+ 0x00, 0xC6, 0x00, 0xD0, 0x00, 0xD8, 0x00, 0xE2, 0x00, 0xEA, 0x00, 0xF4, 0x00, 0xFC, 0x01, 0x06,
+ 0x01, 0x10, 0x01, 0x1A, 0x01, 0x24, 0x01, 0x2E, 0x01, 0x36, 0x01, 0x3C, 0x01, 0x46, 0x01, 0x4E,
+ 0x01, 0x58, 0x01, 0x60, 0x01, 0x6A, 0x01, 0x72, 0x01, 0x7C, 0x01, 0x84, 0x01, 0x8E, 0x01, 0x96,
+ 0x01, 0xA0, 0x01, 0xAA, 0x01, 0xB4, 0x01, 0xBE, 0x01, 0xC8, 0x01, 0xD0, 0x01, 0xD6, 0x01, 0xDC,
+ 0x01, 0xE2, 0x01, 0xEC, 0x01, 0xF4, 0x01, 0xFE, 0x02, 0x06, 0x02, 0x10, 0x02, 0x18, 0x02, 0x22,
+ 0x02, 0x2A, 0x02, 0x34, 0x02, 0x3C, 0x02, 0x46, 0x02, 0x50, 0x02, 0x5A, 0x02, 0x64, 0x02, 0x6E,
+ 0x02, 0x76, 0x02, 0x7C, 0x02, 0x86, 0x02, 0x90, 0x02, 0x9A, 0x02, 0xA4, 0x02, 0xAE, 0x02, 0xB6,
+ 0x02, 0xC0, 0x02, 0xCA, 0x02, 0xD4, 0x02, 0xDE, 0x02, 0xE8, 0x02, 0xF0, 0x02, 0xFA, 0x03, 0x04,
+ 0x03, 0x0E, 0x03, 0x18, 0x03, 0x22, 0x03, 0x2A, 0x1F, 0xFA, 0x00, 0x02, 0x03, 0x00, 0x03, 0x8F,
+ 0x00, 0x02, 0x03, 0x01, 0x1F, 0xAA, 0x00, 0x04, 0x03, 0x13, 0x03, 0x00, 0x03, 0x45, 0x1F, 0x6A,
+ 0x00, 0x03, 0x03, 0x13, 0x03, 0x00, 0x1F, 0xAC, 0x00, 0x04, 0x03, 0x13, 0x03, 0x01, 0x03, 0x45,
+ 0x1F, 0x6C, 0x00, 0x03, 0x03, 0x13, 0x03, 0x01, 0x1F, 0xAA, 0x00, 0x04, 0x03, 0x13, 0x03, 0x40,
+ 0x03, 0x45, 0x1F, 0x6A, 0x00, 0x03, 0x03, 0x13, 0x03, 0x40, 0x1F, 0xAC, 0x00, 0x04, 0x03, 0x13,
+ 0x03, 0x41, 0x03, 0x45, 0x1F, 0x6C, 0x00, 0x03, 0x03, 0x13, 0x03, 0x41, 0x1F, 0xAE, 0x00, 0x04,
+ 0x03, 0x13, 0x03, 0x42, 0x03, 0x45, 0x1F, 0x6E, 0x00, 0x03, 0x03, 0x13, 0x03, 0x42, 0x1F, 0xAA,
+ 0x00, 0x04, 0x03, 0x13, 0x03, 0x45, 0x03, 0x00, 0x1F, 0xAC, 0x00, 0x04, 0x03, 0x13, 0x03, 0x45,
+ 0x03, 0x01, 0x1F, 0xAA, 0x00, 0x04, 0x03, 0x13, 0x03, 0x45, 0x03, 0x40, 0x1F, 0xAC, 0x00, 0x04,
+ 0x03, 0x13, 0x03, 0x45, 0x03, 0x41, 0x1F, 0xAE, 0x00, 0x04, 0x03, 0x13, 0x03, 0x45, 0x03, 0x42,
+ 0x1F, 0xA8, 0x00, 0x03, 0x03, 0x13, 0x03, 0x45, 0x1F, 0x68, 0x00, 0x02, 0x03, 0x13, 0x1F, 0xAB,
+ 0x00, 0x04, 0x03, 0x14, 0x03, 0x00, 0x03, 0x45, 0x1F, 0x6B, 0x00, 0x03, 0x03, 0x14, 0x03, 0x00,
+ 0x1F, 0xAD, 0x00, 0x04, 0x03, 0x14, 0x03, 0x01, 0x03, 0x45, 0x1F, 0x6D, 0x00, 0x03, 0x03, 0x14,
+ 0x03, 0x01, 0x1F, 0xAB, 0x00, 0x04, 0x03, 0x14, 0x03, 0x40, 0x03, 0x45, 0x1F, 0x6B, 0x00, 0x03,
+ 0x03, 0x14, 0x03, 0x40, 0x1F, 0xAD, 0x00, 0x04, 0x03, 0x14, 0x03, 0x41, 0x03, 0x45, 0x1F, 0x6D,
+ 0x00, 0x03, 0x03, 0x14, 0x03, 0x41, 0x1F, 0xAF, 0x00, 0x04, 0x03, 0x14, 0x03, 0x42, 0x03, 0x45,
+ 0x1F, 0x6F, 0x00, 0x03, 0x03, 0x14, 0x03, 0x42, 0x1F, 0xAB, 0x00, 0x04, 0x03, 0x14, 0x03, 0x45,
+ 0x03, 0x00, 0x1F, 0xAD, 0x00, 0x04, 0x03, 0x14, 0x03, 0x45, 0x03, 0x01, 0x1F, 0xAB, 0x00, 0x04,
+ 0x03, 0x14, 0x03, 0x45, 0x03, 0x40, 0x1F, 0xAD, 0x00, 0x04, 0x03, 0x14, 0x03, 0x45, 0x03, 0x41,
+ 0x1F, 0xAF, 0x00, 0x04, 0x03, 0x14, 0x03, 0x45, 0x03, 0x42, 0x1F, 0xA9, 0x00, 0x03, 0x03, 0x14,
+ 0x03, 0x45, 0x1F, 0x69, 0x00, 0x02, 0x03, 0x14, 0x1F, 0xFA, 0x00, 0x02, 0x03, 0x40, 0x03, 0x8F,
+ 0x00, 0x02, 0x03, 0x41, 0x1F, 0xAA, 0x00, 0x04, 0x03, 0x43, 0x03, 0x00, 0x03, 0x45, 0x1F, 0x6A,
+ 0x00, 0x03, 0x03, 0x43, 0x03, 0x00, 0x1F, 0xAC, 0x00, 0x04, 0x03, 0x43, 0x03, 0x01, 0x03, 0x45,
+ 0x1F, 0x6C, 0x00, 0x03, 0x03, 0x43, 0x03, 0x01, 0x1F, 0xAA, 0x00, 0x04, 0x03, 0x43, 0x03, 0x40,
+ 0x03, 0x45, 0x1F, 0x6A, 0x00, 0x03, 0x03, 0x43, 0x03, 0x40, 0x1F, 0xAC, 0x00, 0x04, 0x03, 0x43,
+ 0x03, 0x41, 0x03, 0x45, 0x1F, 0x6C, 0x00, 0x03, 0x03, 0x43, 0x03, 0x41, 0x1F, 0xAE, 0x00, 0x04,
+ 0x03, 0x43, 0x03, 0x42, 0x03, 0x45, 0x1F, 0x6E, 0x00, 0x03, 0x03, 0x43, 0x03, 0x42, 0x1F, 0xAA,
+ 0x00, 0x04, 0x03, 0x43, 0x03, 0x45, 0x03, 0x00, 0x1F, 0xAC, 0x00, 0x04, 0x03, 0x43, 0x03, 0x45,
+ 0x03, 0x01, 0x1F, 0xAA, 0x00, 0x04, 0x03, 0x43, 0x03, 0x45, 0x03, 0x40, 0x1F, 0xAC, 0x00, 0x04,
+ 0x03, 0x43, 0x03, 0x45, 0x03, 0x41, 0x1F, 0xAE, 0x00, 0x04, 0x03, 0x43, 0x03, 0x45, 0x03, 0x42,
+ 0x1F, 0xA8, 0x00, 0x03, 0x03, 0x43, 0x03, 0x45, 0x1F, 0x68, 0x00, 0x02, 0x03, 0x43, 0x1F, 0xAA,
+ 0x00, 0x04, 0x03, 0x45, 0x03, 0x13, 0x03, 0x00, 0x1F, 0xAC, 0x00, 0x04, 0x03, 0x45, 0x03, 0x13,
+ 0x03, 0x01, 0x1F, 0xAA, 0x00, 0x04, 0x03, 0x45, 0x03, 0x13, 0x03, 0x40, 0x1F, 0xAC, 0x00, 0x04,
+ 0x03, 0x45, 0x03, 0x13, 0x03, 0x41, 0x1F, 0xAE, 0x00, 0x04, 0x03, 0x45, 0x03, 0x13, 0x03, 0x42,
+ 0x1F, 0xA8, 0x00, 0x03, 0x03, 0x45, 0x03, 0x13, 0x1F, 0xAB, 0x00, 0x04, 0x03, 0x45, 0x03, 0x14,
+ 0x03, 0x00, 0x1F, 0xAD, 0x00, 0x04, 0x03, 0x45, 0x03, 0x14, 0x03, 0x01, 0x1F, 0xAB, 0x00, 0x04,
+ 0x03, 0x45, 0x03, 0x14, 0x03, 0x40, 0x1F, 0xAD, 0x00, 0x04, 0x03, 0x45, 0x03, 0x14, 0x03, 0x41,
+ 0x1F, 0xAF, 0x00, 0x04, 0x03, 0x45, 0x03, 0x14, 0x03, 0x42, 0x1F, 0xA9, 0x00, 0x03, 0x03, 0x45,
+ 0x03, 0x14, 0x1F, 0xAA, 0x00, 0x04, 0x03, 0x45, 0x03, 0x43, 0x03, 0x00, 0x1F, 0xAC, 0x00, 0x04,
+ 0x03, 0x45, 0x03, 0x43, 0x03, 0x01, 0x1F, 0xAA, 0x00, 0x04, 0x03, 0x45, 0x03, 0x43, 0x03, 0x40,
+ 0x1F, 0xAC, 0x00, 0x04, 0x03, 0x45, 0x03, 0x43, 0x03, 0x41, 0x1F, 0xAE, 0x00, 0x04, 0x03, 0x45,
+ 0x03, 0x43, 0x03, 0x42, 0x1F, 0xA8, 0x00, 0x03, 0x03, 0x45, 0x03, 0x43, 0x1F, 0xFC, 0x00, 0x02,
+ 0x03, 0x45, 0x00, 0x01, 0x00, 0x75, 0x00, 0xA8, 0x03, 0x91, 0x03, 0x95, 0x03, 0x97, 0x03, 0x99,
+ 0x03, 0x9F, 0x03, 0xA1, 0x03, 0xA5, 0x03, 0xA9, 0x03, 0xAC, 0x03, 0xAE, 0x03, 0xB1, 0x03, 0xB5,
+ 0x03, 0xB7, 0x03, 0xB9, 0x03, 0xBF, 0x03, 0xC1, 0x03, 0xC5, 0x03, 0xC9, 0x03, 0xCA, 0x03, 0xCB,
+ 0x03, 0xCE, 0x03, 0xD2, 0x1F, 0x00, 0x1F, 0x01, 0x1F, 0x02, 0x1F, 0x03, 0x1F, 0x04, 0x1F, 0x05,
+ 0x1F, 0x06, 0x1F, 0x07, 0x1F, 0x08, 0x1F, 0x09, 0x1F, 0x0A, 0x1F, 0x0B, 0x1F, 0x0C, 0x1F, 0x0D,
+ 0x1F, 0x0E, 0x1F, 0x0F, 0x1F, 0x10, 0x1F, 0x11, 0x1F, 0x18, 0x1F, 0x19, 0x1F, 0x20, 0x1F, 0x21,
+ 0x1F, 0x22, 0x1F, 0x23, 0x1F, 0x24, 0x1F, 0x25, 0x1F, 0x26, 0x1F, 0x27, 0x1F, 0x28, 0x1F, 0x29,
+ 0x1F, 0x2A, 0x1F, 0x2B, 0x1F, 0x2C, 0x1F, 0x2D, 0x1F, 0x2E, 0x1F, 0x2F, 0x1F, 0x30, 0x1F, 0x31,
+ 0x1F, 0x38, 0x1F, 0x39, 0x1F, 0x40, 0x1F, 0x41, 0x1F, 0x48, 0x1F, 0x49, 0x1F, 0x50, 0x1F, 0x51,
+ 0x1F, 0x59, 0x1F, 0x60, 0x1F, 0x61, 0x1F, 0x62, 0x1F, 0x63, 0x1F, 0x64, 0x1F, 0x65, 0x1F, 0x66,
+ 0x1F, 0x67, 0x1F, 0x68, 0x1F, 0x69, 0x1F, 0x6A, 0x1F, 0x6B, 0x1F, 0x6C, 0x1F, 0x6D, 0x1F, 0x6E,
+ 0x1F, 0x6F, 0x1F, 0x70, 0x1F, 0x71, 0x1F, 0x74, 0x1F, 0x75, 0x1F, 0x7C, 0x1F, 0x7D, 0x1F, 0x80,
+ 0x1F, 0x81, 0x1F, 0x88, 0x1F, 0x89, 0x1F, 0x90, 0x1F, 0x91, 0x1F, 0x98, 0x1F, 0x99, 0x1F, 0xA0,
+ 0x1F, 0xA1, 0x1F, 0xA8, 0x1F, 0xA9, 0x1F, 0xB3, 0x1F, 0xB6, 0x1F, 0xBC, 0x1F, 0xBE, 0x1F, 0xBF,
+ 0x1F, 0xC3, 0x1F, 0xC6, 0x1F, 0xCC, 0x1F, 0xF3, 0x1F, 0xF6, 0x1F, 0xFC, 0x1F, 0xFE, 0x21, 0x26,
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x4C, 0x09, 0x66, 0x11, 0x1A, 0x17, 0x08, 0x1C, 0xC2,
+ 0x20, 0xBC, 0x24, 0x9E, 0x27, 0x3C, 0x29, 0x7A, 0x2B, 0x42, 0x2D, 0x22, 0x2E, 0xD2, 0x30, 0x80,
+ 0x31, 0xE8, 0x33, 0x50, 0x34, 0xB8, 0x35, 0x94, 0x36, 0x70, 0x37, 0x4C, 0x38, 0x1A, 0x38, 0xE8,
+ 0x39, 0xB6, 0x3A, 0x68, 0x3B, 0x1A, 0x3B, 0x40, 0x3B, 0x66, 0x3B, 0x8C, 0x3B, 0xB2, 0x3B, 0xD8,
+ 0x3B, 0xFE, 0x3C, 0x24, 0x3C, 0x4A, 0x3C, 0x70, 0x3C, 0x96, 0x3C, 0xBC, 0x00, 0x01, 0x07, 0x46,
+ 0x00, 0xE8, 0x01, 0xD6, 0x01, 0xDC, 0x01, 0xE2, 0x01, 0xE8, 0x01, 0xEE, 0x01, 0xF4, 0x01, 0xFA,
+ 0x02, 0x00, 0x02, 0x06, 0x02, 0x0C, 0x02, 0x12, 0x02, 0x18, 0x02, 0x1E, 0x02, 0x24, 0x02, 0x2A,
+ 0x02, 0x30, 0x02, 0x36, 0x02, 0x3C, 0x02, 0x42, 0x02, 0x48, 0x02, 0x4E, 0x02, 0x54, 0x02, 0x5A,
+ 0x02, 0x60, 0x02, 0x66, 0x02, 0x6C, 0x02, 0x72, 0x02, 0x78, 0x02, 0x7E, 0x02, 0x84, 0x02, 0x8A,
+ 0x02, 0x90, 0x02, 0x96, 0x02, 0x9C, 0x02, 0xA2, 0x02, 0xA8, 0x02, 0xAE, 0x02, 0xB4, 0x02, 0xBA,
+ 0x02, 0xC0, 0x02, 0xC6, 0x02, 0xCC, 0x02, 0xD2, 0x02, 0xD8, 0x02, 0xDE, 0x02, 0xE4, 0x02, 0xEA,
+ 0x02, 0xF0, 0x02, 0xF6, 0x02, 0xFC, 0x03, 0x02, 0x03, 0x08, 0x03, 0x0E, 0x03, 0x14, 0x03, 0x1A,
+ 0x03, 0x20, 0x03, 0x26, 0x03, 0x2C, 0x03, 0x32, 0x03, 0x38, 0x03, 0x3E, 0x03, 0x44, 0x03, 0x4A,
+ 0x03, 0x50, 0x03, 0x56, 0x03, 0x5C, 0x03, 0x62, 0x03, 0x68, 0x03, 0x6E, 0x03, 0x74, 0x03, 0x7A,
+ 0x03, 0x80, 0x03, 0x86, 0x03, 0x8C, 0x03, 0x92, 0x03, 0x98, 0x03, 0x9E, 0x03, 0xA4, 0x03, 0xAA,
+ 0x03, 0xB0, 0x03, 0xB6, 0x03, 0xBC, 0x03, 0xC2, 0x03, 0xC8, 0x03, 0xCE, 0x03, 0xD4, 0x03, 0xDA,
+ 0x03, 0xE0, 0x03, 0xE6, 0x03, 0xEC, 0x03, 0xF2, 0x03, 0xF8, 0x03, 0xFE, 0x04, 0x04, 0x04, 0x0A,
+ 0x04, 0x10, 0x04, 0x16, 0x04, 0x1C, 0x04, 0x22, 0x04, 0x28, 0x04, 0x2E, 0x04, 0x34, 0x04, 0x3A,
+ 0x04, 0x40, 0x04, 0x46, 0x04, 0x4C, 0x04, 0x52, 0x04, 0x58, 0x04, 0x5E, 0x04, 0x64, 0x04, 0x6A,
+ 0x04, 0x70, 0x04, 0x76, 0x04, 0x7C, 0x04, 0x82, 0x04, 0x88, 0x04, 0x8E, 0x04, 0x94, 0x04, 0x9A,
+ 0x04, 0xA0, 0x04, 0xA6, 0x04, 0xAC, 0x04, 0xB2, 0x04, 0xB8, 0x04, 0xBE, 0x04, 0xC4, 0x04, 0xCA,
+ 0x04, 0xD0, 0x04, 0xD6, 0x04, 0xDC, 0x04, 0xE2, 0x04, 0xE8, 0x04, 0xEE, 0x04, 0xF4, 0x04, 0xFA,
+ 0x05, 0x00, 0x05, 0x06, 0x05, 0x0C, 0x05, 0x12, 0x05, 0x18, 0x05, 0x1E, 0x05, 0x24, 0x05, 0x2A,
+ 0x05, 0x30, 0x05, 0x36, 0x05, 0x3C, 0x05, 0x42, 0x05, 0x48, 0x05, 0x4E, 0x05, 0x54, 0x05, 0x5A,
+ 0x05, 0x60, 0x05, 0x66, 0x05, 0x6C, 0x05, 0x72, 0x05, 0x78, 0x05, 0x7E, 0x05, 0x84, 0x05, 0x8A,
+ 0x05, 0x90, 0x05, 0x96, 0x05, 0x9C, 0x05, 0xA2, 0x05, 0xA8, 0x05, 0xAE, 0x05, 0xB4, 0x05, 0xBA,
+ 0x05, 0xC0, 0x05, 0xC6, 0x05, 0xCC, 0x05, 0xD2, 0x05, 0xD8, 0x05, 0xDE, 0x05, 0xE4, 0x05, 0xEA,
+ 0x05, 0xF0, 0x05, 0xF6, 0x05, 0xFC, 0x06, 0x02, 0x06, 0x08, 0x06, 0x0E, 0x06, 0x14, 0x06, 0x1A,
+ 0x06, 0x20, 0x06, 0x26, 0x06, 0x2C, 0x06, 0x32, 0x06, 0x38, 0x06, 0x3E, 0x06, 0x44, 0x06, 0x4A,
+ 0x06, 0x50, 0x06, 0x56, 0x06, 0x5C, 0x06, 0x62, 0x06, 0x68, 0x06, 0x6E, 0x06, 0x74, 0x06, 0x7A,
+ 0x06, 0x80, 0x06, 0x86, 0x06, 0x8C, 0x06, 0x92, 0x06, 0x98, 0x06, 0x9E, 0x06, 0xA4, 0x06, 0xAA,
+ 0x06, 0xB0, 0x06, 0xB6, 0x06, 0xBC, 0x06, 0xC2, 0x06, 0xC8, 0x06, 0xCE, 0x06, 0xD4, 0x06, 0xDA,
+ 0x06, 0xE0, 0x06, 0xE6, 0x06, 0xEC, 0x06, 0xF2, 0x06, 0xF8, 0x06, 0xFE, 0x07, 0x04, 0x07, 0x0A,
+ 0x07, 0x10, 0x07, 0x16, 0x07, 0x1C, 0x07, 0x22, 0x07, 0x28, 0x07, 0x2E, 0x07, 0x34, 0x07, 0x3A,
+ 0x07, 0x40, 0x00, 0x02, 0x00, 0xA8, 0x03, 0x01, 0x00, 0x02, 0x03, 0x91, 0x03, 0x01, 0x00, 0x02,
+ 0x03, 0x95, 0x03, 0x01, 0x00, 0x02, 0x03, 0x97, 0x03, 0x01, 0x00, 0x02, 0x03, 0x99, 0x03, 0x01,
+ 0x00, 0x02, 0x03, 0x9F, 0x03, 0x01, 0x00, 0x02, 0x03, 0xA5, 0x03, 0x01, 0x00, 0x02, 0x03, 0xA9,
+ 0x03, 0x01, 0x00, 0x02, 0x03, 0xB9, 0x03, 0x44, 0x00, 0x02, 0x03, 0x99, 0x03, 0x08, 0x00, 0x02,
+ 0x03, 0xA5, 0x03, 0x08, 0x00, 0x02, 0x03, 0xB1, 0x03, 0x01, 0x00, 0x02, 0x03, 0xB5, 0x03, 0x01,
+ 0x00, 0x02, 0x03, 0xB7, 0x03, 0x01, 0x00, 0x02, 0x03, 0xB9, 0x03, 0x01, 0x00, 0x02, 0x03, 0xC5,
+ 0x03, 0x44, 0x00, 0x02, 0x03, 0xB9, 0x03, 0x08, 0x00, 0x02, 0x03, 0xC5, 0x03, 0x08, 0x00, 0x02,
+ 0x03, 0xBF, 0x03, 0x01, 0x00, 0x02, 0x03, 0xC5, 0x03, 0x01, 0x00, 0x02, 0x03, 0xC9, 0x03, 0x01,
+ 0x00, 0x02, 0x03, 0xD2, 0x03, 0x01, 0x00, 0x02, 0x03, 0xD2, 0x03, 0x08, 0x00, 0x02, 0x03, 0xB1,
+ 0x03, 0x13, 0x00, 0x02, 0x03, 0xB1, 0x03, 0x14, 0x00, 0x02, 0x1F, 0x00, 0x03, 0x00, 0x00, 0x02,
+ 0x1F, 0x01, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x00, 0x03, 0x01, 0x00, 0x02, 0x1F, 0x01, 0x03, 0x01,
+ 0x00, 0x02, 0x1F, 0x00, 0x03, 0x42, 0x00, 0x02, 0x1F, 0x01, 0x03, 0x42, 0x00, 0x02, 0x03, 0x91,
+ 0x03, 0x13, 0x00, 0x02, 0x03, 0x91, 0x03, 0x14, 0x00, 0x02, 0x1F, 0x08, 0x03, 0x00, 0x00, 0x02,
+ 0x1F, 0x09, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x08, 0x03, 0x01, 0x00, 0x02, 0x1F, 0x09, 0x03, 0x01,
+ 0x00, 0x02, 0x1F, 0x08, 0x03, 0x42, 0x00, 0x02, 0x1F, 0x09, 0x03, 0x42, 0x00, 0x02, 0x03, 0xB5,
+ 0x03, 0x13, 0x00, 0x02, 0x03, 0xB5, 0x03, 0x14, 0x00, 0x02, 0x1F, 0x10, 0x03, 0x00, 0x00, 0x02,
+ 0x1F, 0x11, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x10, 0x03, 0x01, 0x00, 0x02, 0x1F, 0x11, 0x03, 0x01,
+ 0x00, 0x02, 0x03, 0x95, 0x03, 0x13, 0x00, 0x02, 0x03, 0x95, 0x03, 0x14, 0x00, 0x02, 0x1F, 0x18,
+ 0x03, 0x00, 0x00, 0x02, 0x1F, 0x19, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x18, 0x03, 0x01, 0x00, 0x02,
+ 0x1F, 0x19, 0x03, 0x01, 0x00, 0x02, 0x03, 0xB7, 0x03, 0x13, 0x00, 0x02, 0x03, 0xB7, 0x03, 0x14,
+ 0x00, 0x02, 0x1F, 0x20, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x21, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x20,
+ 0x03, 0x01, 0x00, 0x02, 0x1F, 0x21, 0x03, 0x01, 0x00, 0x02, 0x1F, 0x20, 0x03, 0x42, 0x00, 0x02,
+ 0x1F, 0x21, 0x03, 0x42, 0x00, 0x02, 0x03, 0x97, 0x03, 0x13, 0x00, 0x02, 0x03, 0x97, 0x03, 0x14,
+ 0x00, 0x02, 0x1F, 0x28, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x29, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x28,
+ 0x03, 0x01, 0x00, 0x02, 0x1F, 0x29, 0x03, 0x01, 0x00, 0x02, 0x1F, 0x28, 0x03, 0x42, 0x00, 0x02,
+ 0x1F, 0x29, 0x03, 0x42, 0x00, 0x02, 0x03, 0xB9, 0x03, 0x13, 0x00, 0x02, 0x03, 0xB9, 0x03, 0x14,
+ 0x00, 0x02, 0x1F, 0x30, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x31, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x30,
+ 0x03, 0x01, 0x00, 0x02, 0x1F, 0x31, 0x03, 0x01, 0x00, 0x02, 0x1F, 0x30, 0x03, 0x42, 0x00, 0x02,
+ 0x1F, 0x31, 0x03, 0x42, 0x00, 0x02, 0x03, 0x99, 0x03, 0x13, 0x00, 0x02, 0x03, 0x99, 0x03, 0x14,
+ 0x00, 0x02, 0x1F, 0x38, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x39, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x38,
+ 0x03, 0x01, 0x00, 0x02, 0x1F, 0x39, 0x03, 0x01, 0x00, 0x02, 0x1F, 0x38, 0x03, 0x42, 0x00, 0x02,
+ 0x1F, 0x39, 0x03, 0x42, 0x00, 0x02, 0x03, 0xBF, 0x03, 0x13, 0x00, 0x02, 0x03, 0xBF, 0x03, 0x14,
+ 0x00, 0x02, 0x1F, 0x40, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x41, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x40,
+ 0x03, 0x01, 0x00, 0x02, 0x1F, 0x41, 0x03, 0x01, 0x00, 0x02, 0x03, 0x9F, 0x03, 0x13, 0x00, 0x02,
+ 0x03, 0x9F, 0x03, 0x14, 0x00, 0x02, 0x1F, 0x48, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x49, 0x03, 0x00,
+ 0x00, 0x02, 0x1F, 0x48, 0x03, 0x01, 0x00, 0x02, 0x1F, 0x49, 0x03, 0x01, 0x00, 0x02, 0x03, 0xC5,
+ 0x03, 0x13, 0x00, 0x02, 0x03, 0xC5, 0x03, 0x14, 0x00, 0x02, 0x1F, 0x50, 0x03, 0x00, 0x00, 0x02,
+ 0x1F, 0x51, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x50, 0x03, 0x01, 0x00, 0x02, 0x1F, 0x51, 0x03, 0x01,
+ 0x00, 0x02, 0x1F, 0x50, 0x03, 0x42, 0x00, 0x02, 0x1F, 0x51, 0x03, 0x42, 0x00, 0x02, 0x03, 0xA5,
+ 0x03, 0x14, 0x00, 0x02, 0x1F, 0x59, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x59, 0x03, 0x01, 0x00, 0x02,
+ 0x1F, 0x59, 0x03, 0x42, 0x00, 0x02, 0x03, 0xC9, 0x03, 0x13, 0x00, 0x02, 0x03, 0xC9, 0x03, 0x14,
+ 0x00, 0x02, 0x1F, 0x60, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x61, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x60,
+ 0x03, 0x01, 0x00, 0x02, 0x1F, 0x61, 0x03, 0x01, 0x00, 0x02, 0x1F, 0x60, 0x03, 0x42, 0x00, 0x02,
+ 0x1F, 0x61, 0x03, 0x42, 0x00, 0x02, 0x03, 0xA9, 0x03, 0x13, 0x00, 0x02, 0x03, 0xA9, 0x03, 0x14,
+ 0x00, 0x02, 0x1F, 0x68, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x69, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x68,
+ 0x03, 0x01, 0x00, 0x02, 0x1F, 0x69, 0x03, 0x01, 0x00, 0x02, 0x1F, 0x68, 0x03, 0x42, 0x00, 0x02,
+ 0x1F, 0x69, 0x03, 0x42, 0x00, 0x02, 0x03, 0xB1, 0x03, 0x00, 0x00, 0x02, 0x03, 0xB5, 0x03, 0x00,
+ 0x00, 0x02, 0x03, 0xB7, 0x03, 0x00, 0x00, 0x02, 0x03, 0xB9, 0x03, 0x00, 0x00, 0x02, 0x03, 0xBF,
+ 0x03, 0x00, 0x00, 0x02, 0x03, 0xC5, 0x03, 0x00, 0x00, 0x02, 0x03, 0xC9, 0x03, 0x00, 0x00, 0x02,
+ 0x1F, 0x00, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x01, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x02, 0x03, 0x45,
+ 0x00, 0x02, 0x1F, 0x03, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x04, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x05,
+ 0x03, 0x45, 0x00, 0x02, 0x1F, 0x06, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x07, 0x03, 0x45, 0x00, 0x02,
+ 0x1F, 0x08, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x09, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x0A, 0x03, 0x45,
+ 0x00, 0x02, 0x1F, 0x0B, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x0C, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x0D,
+ 0x03, 0x45, 0x00, 0x02, 0x1F, 0x0E, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x0F, 0x03, 0x45, 0x00, 0x02,
+ 0x1F, 0x20, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x21, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x22, 0x03, 0x45,
+ 0x00, 0x02, 0x1F, 0x23, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x24, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x25,
+ 0x03, 0x45, 0x00, 0x02, 0x1F, 0x26, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x27, 0x03, 0x45, 0x00, 0x02,
+ 0x1F, 0x28, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x29, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x2A, 0x03, 0x45,
+ 0x00, 0x02, 0x1F, 0x2B, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x2C, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x2D,
+ 0x03, 0x45, 0x00, 0x02, 0x1F, 0x2E, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x2F, 0x03, 0x45, 0x00, 0x02,
+ 0x1F, 0x60, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x61, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x62, 0x03, 0x45,
+ 0x00, 0x02, 0x1F, 0x63, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x64, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x65,
+ 0x03, 0x45, 0x00, 0x02, 0x1F, 0x66, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x67, 0x03, 0x45, 0x00, 0x02,
+ 0x1F, 0x68, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x69, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x6A, 0x03, 0x45,
+ 0x00, 0x02, 0x1F, 0x6B, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x6C, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x6D,
+ 0x03, 0x45, 0x00, 0x02, 0x1F, 0x6E, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x6F, 0x03, 0x45, 0x00, 0x02,
+ 0x03, 0xB1, 0x03, 0x06, 0x00, 0x02, 0x03, 0xB1, 0x03, 0x04, 0x00, 0x02, 0x1F, 0x70, 0x03, 0x45,
+ 0x00, 0x02, 0x03, 0xB1, 0x03, 0x45, 0x00, 0x02, 0x03, 0xAC, 0x03, 0x45, 0x00, 0x02, 0x03, 0xB1,
+ 0x03, 0x42, 0x00, 0x02, 0x1F, 0xB3, 0x03, 0x42, 0x00, 0x02, 0x03, 0x91, 0x03, 0x06, 0x00, 0x02,
+ 0x03, 0x91, 0x03, 0x04, 0x00, 0x02, 0x03, 0x91, 0x03, 0x00, 0x00, 0x02, 0x03, 0x91, 0x03, 0x45,
+ 0x00, 0x02, 0x00, 0xA8, 0x03, 0x42, 0x00, 0x02, 0x1F, 0x74, 0x03, 0x45, 0x00, 0x02, 0x03, 0xB7,
+ 0x03, 0x45, 0x00, 0x02, 0x03, 0xAE, 0x03, 0x45, 0x00, 0x02, 0x03, 0xB7, 0x03, 0x42, 0x00, 0x02,
+ 0x1F, 0xC3, 0x03, 0x42, 0x00, 0x02, 0x03, 0x95, 0x03, 0x00, 0x00, 0x02, 0x03, 0x97, 0x03, 0x00,
+ 0x00, 0x02, 0x03, 0x97, 0x03, 0x45, 0x00, 0x02, 0x1F, 0xBF, 0x03, 0x00, 0x00, 0x02, 0x1F, 0xBF,
+ 0x03, 0x01, 0x00, 0x02, 0x1F, 0xBF, 0x03, 0x42, 0x00, 0x02, 0x03, 0xB9, 0x03, 0x06, 0x00, 0x02,
+ 0x03, 0xB9, 0x03, 0x04, 0x00, 0x02, 0x03, 0xCA, 0x03, 0x00, 0x00, 0x02, 0x03, 0xB9, 0x03, 0x42,
+ 0x00, 0x02, 0x03, 0xCA, 0x03, 0x42, 0x00, 0x02, 0x03, 0x99, 0x03, 0x06, 0x00, 0x02, 0x03, 0x99,
+ 0x03, 0x04, 0x00, 0x02, 0x03, 0x99, 0x03, 0x00, 0x00, 0x02, 0x1F, 0xFE, 0x03, 0x00, 0x00, 0x02,
+ 0x1F, 0xFE, 0x03, 0x01, 0x00, 0x02, 0x1F, 0xFE, 0x03, 0x42, 0x00, 0x02, 0x03, 0xC5, 0x03, 0x06,
+ 0x00, 0x02, 0x03, 0xC5, 0x03, 0x04, 0x00, 0x02, 0x03, 0xCB, 0x03, 0x00, 0x00, 0x02, 0x03, 0xC1,
+ 0x03, 0x13, 0x00, 0x02, 0x03, 0xC1, 0x03, 0x14, 0x00, 0x02, 0x03, 0xC5, 0x03, 0x42, 0x00, 0x02,
+ 0x03, 0xCB, 0x03, 0x42, 0x00, 0x02, 0x03, 0xA5, 0x03, 0x06, 0x00, 0x02, 0x03, 0xA5, 0x03, 0x04,
+ 0x00, 0x02, 0x03, 0xA5, 0x03, 0x00, 0x00, 0x02, 0x03, 0xA1, 0x03, 0x14, 0x00, 0x02, 0x00, 0xA8,
+ 0x03, 0x00, 0x00, 0x02, 0x1F, 0x7C, 0x03, 0x45, 0x00, 0x02, 0x03, 0xC9, 0x03, 0x45, 0x00, 0x02,
+ 0x03, 0xCE, 0x03, 0x45, 0x00, 0x02, 0x03, 0xC9, 0x03, 0x42, 0x00, 0x02, 0x1F, 0xF3, 0x03, 0x42,
+ 0x00, 0x02, 0x03, 0x9F, 0x03, 0x00, 0x00, 0x02, 0x03, 0xA9, 0x03, 0x00, 0x00, 0x02, 0x03, 0xA9,
+ 0x03, 0x45, 0x00, 0x01, 0x00, 0xE8, 0x03, 0x85, 0x03, 0x86, 0x03, 0x88, 0x03, 0x89, 0x03, 0x8A,
+ 0x03, 0x8C, 0x03, 0x8E, 0x03, 0x8F, 0x03, 0x90, 0x03, 0xAA, 0x03, 0xAB, 0x03, 0xAC, 0x03, 0xAD,
+ 0x03, 0xAE, 0x03, 0xAF, 0x03, 0xB0, 0x03, 0xCA, 0x03, 0xCB, 0x03, 0xCC, 0x03, 0xCD, 0x03, 0xCE,
+ 0x03, 0xD3, 0x03, 0xD4, 0x1F, 0x00, 0x1F, 0x01, 0x1F, 0x02, 0x1F, 0x03, 0x1F, 0x04, 0x1F, 0x05,
+ 0x1F, 0x06, 0x1F, 0x07, 0x1F, 0x08, 0x1F, 0x09, 0x1F, 0x0A, 0x1F, 0x0B, 0x1F, 0x0C, 0x1F, 0x0D,
+ 0x1F, 0x0E, 0x1F, 0x0F, 0x1F, 0x10, 0x1F, 0x11, 0x1F, 0x12, 0x1F, 0x13, 0x1F, 0x14, 0x1F, 0x15,
+ 0x1F, 0x18, 0x1F, 0x19, 0x1F, 0x1A, 0x1F, 0x1B, 0x1F, 0x1C, 0x1F, 0x1D, 0x1F, 0x20, 0x1F, 0x21,
+ 0x1F, 0x22, 0x1F, 0x23, 0x1F, 0x24, 0x1F, 0x25, 0x1F, 0x26, 0x1F, 0x27, 0x1F, 0x28, 0x1F, 0x29,
+ 0x1F, 0x2A, 0x1F, 0x2B, 0x1F, 0x2C, 0x1F, 0x2D, 0x1F, 0x2E, 0x1F, 0x2F, 0x1F, 0x30, 0x1F, 0x31,
+ 0x1F, 0x32, 0x1F, 0x33, 0x1F, 0x34, 0x1F, 0x35, 0x1F, 0x36, 0x1F, 0x37, 0x1F, 0x38, 0x1F, 0x39,
+ 0x1F, 0x3A, 0x1F, 0x3B, 0x1F, 0x3C, 0x1F, 0x3D, 0x1F, 0x3E, 0x1F, 0x3F, 0x1F, 0x40, 0x1F, 0x41,
+ 0x1F, 0x42, 0x1F, 0x43, 0x1F, 0x44, 0x1F, 0x45, 0x1F, 0x48, 0x1F, 0x49, 0x1F, 0x4A, 0x1F, 0x4B,
+ 0x1F, 0x4C, 0x1F, 0x4D, 0x1F, 0x50, 0x1F, 0x51, 0x1F, 0x52, 0x1F, 0x53, 0x1F, 0x54, 0x1F, 0x55,
+ 0x1F, 0x56, 0x1F, 0x57, 0x1F, 0x59, 0x1F, 0x5B, 0x1F, 0x5D, 0x1F, 0x5F, 0x1F, 0x60, 0x1F, 0x61,
+ 0x1F, 0x62, 0x1F, 0x63, 0x1F, 0x64, 0x1F, 0x65, 0x1F, 0x66, 0x1F, 0x67, 0x1F, 0x68, 0x1F, 0x69,
+ 0x1F, 0x6A, 0x1F, 0x6B, 0x1F, 0x6C, 0x1F, 0x6D, 0x1F, 0x6E, 0x1F, 0x6F, 0x1F, 0x70, 0x1F, 0x72,
+ 0x1F, 0x74, 0x1F, 0x76, 0x1F, 0x78, 0x1F, 0x7A, 0x1F, 0x7C, 0x1F, 0x80, 0x1F, 0x81, 0x1F, 0x82,
+ 0x1F, 0x83, 0x1F, 0x84, 0x1F, 0x85, 0x1F, 0x86, 0x1F, 0x87, 0x1F, 0x88, 0x1F, 0x89, 0x1F, 0x8A,
+ 0x1F, 0x8B, 0x1F, 0x8C, 0x1F, 0x8D, 0x1F, 0x8E, 0x1F, 0x8F, 0x1F, 0x90, 0x1F, 0x91, 0x1F, 0x92,
+ 0x1F, 0x93, 0x1F, 0x94, 0x1F, 0x95, 0x1F, 0x96, 0x1F, 0x97, 0x1F, 0x98, 0x1F, 0x99, 0x1F, 0x9A,
+ 0x1F, 0x9B, 0x1F, 0x9C, 0x1F, 0x9D, 0x1F, 0x9E, 0x1F, 0x9F, 0x1F, 0xA0, 0x1F, 0xA1, 0x1F, 0xA2,
+ 0x1F, 0xA3, 0x1F, 0xA4, 0x1F, 0xA5, 0x1F, 0xA6, 0x1F, 0xA7, 0x1F, 0xA8, 0x1F, 0xA9, 0x1F, 0xAA,
+ 0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD, 0x1F, 0xAE, 0x1F, 0xAF, 0x1F, 0xB0, 0x1F, 0xB1, 0x1F, 0xB2,
+ 0x1F, 0xB3, 0x1F, 0xB4, 0x1F, 0xB6, 0x1F, 0xB7, 0x1F, 0xB8, 0x1F, 0xB9, 0x1F, 0xBA, 0x1F, 0xBC,
+ 0x1F, 0xC1, 0x1F, 0xC2, 0x1F, 0xC3, 0x1F, 0xC4, 0x1F, 0xC6, 0x1F, 0xC7, 0x1F, 0xC8, 0x1F, 0xCA,
+ 0x1F, 0xCC, 0x1F, 0xCD, 0x1F, 0xCE, 0x1F, 0xCF, 0x1F, 0xD0, 0x1F, 0xD1, 0x1F, 0xD2, 0x1F, 0xD6,
+ 0x1F, 0xD7, 0x1F, 0xD8, 0x1F, 0xD9, 0x1F, 0xDA, 0x1F, 0xDD, 0x1F, 0xDE, 0x1F, 0xDF, 0x1F, 0xE0,
+ 0x1F, 0xE1, 0x1F, 0xE2, 0x1F, 0xE4, 0x1F, 0xE5, 0x1F, 0xE6, 0x1F, 0xE7, 0x1F, 0xE8, 0x1F, 0xE9,
+ 0x1F, 0xEA, 0x1F, 0xEC, 0x1F, 0xED, 0x1F, 0xF2, 0x1F, 0xF3, 0x1F, 0xF4, 0x1F, 0xF6, 0x1F, 0xF7,
+ 0x1F, 0xF8, 0x1F, 0xFA, 0x1F, 0xFC, 0x00, 0x01, 0x06, 0x30, 0x00, 0xC0, 0x01, 0x86, 0x01, 0x8C,
+ 0x01, 0x92, 0x01, 0x98, 0x01, 0x9E, 0x01, 0xA4, 0x01, 0xAA, 0x01, 0xB0, 0x01, 0xB6, 0x01, 0xBC,
+ 0x01, 0xC2, 0x01, 0xC8, 0x01, 0xCE, 0x01, 0xD4, 0x01, 0xDA, 0x01, 0xE0, 0x01, 0xE6, 0x01, 0xEC,
+ 0x01, 0xF2, 0x01, 0xF8, 0x01, 0xFE, 0x02, 0x04, 0x02, 0x0A, 0x02, 0x10, 0x02, 0x16, 0x02, 0x1E,
+ 0x02, 0x26, 0x02, 0x2C, 0x02, 0x32, 0x02, 0x38, 0x02, 0x3E, 0x02, 0x44, 0x02, 0x4C, 0x02, 0x54,
+ 0x02, 0x5A, 0x02, 0x60, 0x02, 0x66, 0x02, 0x6C, 0x02, 0x72, 0x02, 0x78, 0x02, 0x7E, 0x02, 0x84,
+ 0x02, 0x8A, 0x02, 0x90, 0x02, 0x96, 0x02, 0x9C, 0x02, 0xA2, 0x02, 0xA8, 0x02, 0xAE, 0x02, 0xB6,
+ 0x02, 0xBE, 0x02, 0xC4, 0x02, 0xCA, 0x02, 0xD0, 0x02, 0xD6, 0x02, 0xDC, 0x02, 0xE4, 0x02, 0xEC,
+ 0x02, 0xF2, 0x02, 0xF8, 0x02, 0xFE, 0x03, 0x04, 0x03, 0x0A, 0x03, 0x10, 0x03, 0x18, 0x03, 0x20,
+ 0x03, 0x26, 0x03, 0x2C, 0x03, 0x32, 0x03, 0x38, 0x03, 0x3E, 0x03, 0x46, 0x03, 0x4E, 0x03, 0x54,
+ 0x03, 0x5A, 0x03, 0x60, 0x03, 0x66, 0x03, 0x6C, 0x03, 0x72, 0x03, 0x78, 0x03, 0x7E, 0x03, 0x84,
+ 0x03, 0x8A, 0x03, 0x90, 0x03, 0x96, 0x03, 0x9C, 0x03, 0xA2, 0x03, 0xA8, 0x03, 0xB0, 0x03, 0xB8,
+ 0x03, 0xBE, 0x03, 0xC4, 0x03, 0xCC, 0x03, 0xD2, 0x03, 0xD8, 0x03, 0xDE, 0x03, 0xE4, 0x03, 0xEA,
+ 0x03, 0xF2, 0x03, 0xFA, 0x04, 0x00, 0x04, 0x06, 0x04, 0x0C, 0x04, 0x12, 0x04, 0x18, 0x04, 0x1E,
+ 0x04, 0x26, 0x04, 0x2E, 0x04, 0x34, 0x04, 0x3A, 0x04, 0x40, 0x04, 0x46, 0x04, 0x4C, 0x04, 0x52,
+ 0x04, 0x58, 0x04, 0x5E, 0x04, 0x64, 0x04, 0x6A, 0x04, 0x70, 0x04, 0x76, 0x04, 0x7C, 0x04, 0x82,
+ 0x04, 0x88, 0x04, 0x8E, 0x04, 0x94, 0x04, 0x9A, 0x04, 0xA0, 0x04, 0xA6, 0x04, 0xAC, 0x04, 0xB2,
+ 0x04, 0xB8, 0x04, 0xBE, 0x04, 0xC4, 0x04, 0xCA, 0x04, 0xD0, 0x04, 0xD6, 0x04, 0xDC, 0x04, 0xE2,
+ 0x04, 0xE8, 0x04, 0xEE, 0x04, 0xF4, 0x04, 0xFA, 0x05, 0x00, 0x05, 0x06, 0x05, 0x0C, 0x05, 0x12,
+ 0x05, 0x18, 0x05, 0x1E, 0x05, 0x24, 0x05, 0x2A, 0x05, 0x30, 0x05, 0x36, 0x05, 0x3C, 0x05, 0x42,
+ 0x05, 0x48, 0x05, 0x4E, 0x05, 0x54, 0x05, 0x5A, 0x05, 0x60, 0x05, 0x66, 0x05, 0x6C, 0x05, 0x72,
+ 0x05, 0x78, 0x05, 0x7E, 0x05, 0x84, 0x05, 0x8A, 0x05, 0x90, 0x05, 0x96, 0x05, 0x9C, 0x05, 0xA2,
+ 0x05, 0xA8, 0x05, 0xAE, 0x05, 0xB4, 0x05, 0xBA, 0x05, 0xC0, 0x05, 0xC6, 0x05, 0xCC, 0x05, 0xD2,
+ 0x05, 0xDA, 0x05, 0xE0, 0x05, 0xE6, 0x05, 0xEC, 0x05, 0xF2, 0x05, 0xF8, 0x06, 0x00, 0x06, 0x06,
+ 0x06, 0x0C, 0x06, 0x12, 0x06, 0x18, 0x06, 0x1E, 0x06, 0x24, 0x06, 0x2A, 0x00, 0x02, 0x00, 0xA8,
+ 0x03, 0x41, 0x00, 0x02, 0x03, 0x91, 0x03, 0x41, 0x00, 0x02, 0x03, 0x95, 0x03, 0x41, 0x00, 0x02,
+ 0x03, 0x97, 0x03, 0x41, 0x00, 0x02, 0x03, 0x99, 0x03, 0x41, 0x00, 0x02, 0x03, 0x9F, 0x03, 0x41,
+ 0x00, 0x02, 0x03, 0xA5, 0x03, 0x41, 0x00, 0x02, 0x03, 0xA9, 0x03, 0x41, 0x00, 0x02, 0x03, 0xCA,
+ 0x03, 0x01, 0x00, 0x02, 0x03, 0xB1, 0x03, 0x41, 0x00, 0x02, 0x03, 0xB5, 0x03, 0x41, 0x00, 0x02,
+ 0x03, 0xB7, 0x03, 0x41, 0x00, 0x02, 0x03, 0xB9, 0x03, 0x41, 0x00, 0x02, 0x03, 0xCB, 0x03, 0x01,
+ 0x00, 0x02, 0x1F, 0xBE, 0x03, 0x08, 0x00, 0x02, 0x03, 0xBF, 0x03, 0x41, 0x00, 0x02, 0x03, 0xC5,
+ 0x03, 0x41, 0x00, 0x02, 0x03, 0xC9, 0x03, 0x41, 0x00, 0x02, 0x03, 0xD2, 0x03, 0x41, 0x00, 0x02,
+ 0x03, 0xB1, 0x03, 0x43, 0x00, 0x02, 0x1F, 0x00, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x01, 0x03, 0x40,
+ 0x00, 0x02, 0x1F, 0x00, 0x03, 0x41, 0x00, 0x02, 0x1F, 0x01, 0x03, 0x41, 0x00, 0x03, 0x03, 0xB1,
+ 0x03, 0x13, 0x03, 0x42, 0x00, 0x03, 0x03, 0xB1, 0x03, 0x14, 0x03, 0x42, 0x00, 0x02, 0x03, 0x91,
+ 0x03, 0x43, 0x00, 0x02, 0x1F, 0x08, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x09, 0x03, 0x40, 0x00, 0x02,
+ 0x1F, 0x08, 0x03, 0x41, 0x00, 0x02, 0x1F, 0x09, 0x03, 0x41, 0x00, 0x03, 0x03, 0x91, 0x03, 0x13,
+ 0x03, 0x42, 0x00, 0x03, 0x03, 0x91, 0x03, 0x14, 0x03, 0x42, 0x00, 0x02, 0x03, 0xB5, 0x03, 0x43,
+ 0x00, 0x02, 0x1F, 0x10, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x11, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x10,
+ 0x03, 0x41, 0x00, 0x02, 0x1F, 0x11, 0x03, 0x41, 0x00, 0x02, 0x03, 0x95, 0x03, 0x43, 0x00, 0x02,
+ 0x1F, 0x18, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x19, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x18, 0x03, 0x41,
+ 0x00, 0x02, 0x1F, 0x19, 0x03, 0x41, 0x00, 0x02, 0x03, 0xB7, 0x03, 0x43, 0x00, 0x02, 0x1F, 0x20,
+ 0x03, 0x40, 0x00, 0x02, 0x1F, 0x21, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x20, 0x03, 0x41, 0x00, 0x02,
+ 0x1F, 0x21, 0x03, 0x41, 0x00, 0x03, 0x03, 0xB7, 0x03, 0x13, 0x03, 0x42, 0x00, 0x03, 0x03, 0xB7,
+ 0x03, 0x14, 0x03, 0x42, 0x00, 0x02, 0x03, 0x97, 0x03, 0x43, 0x00, 0x02, 0x1F, 0x28, 0x03, 0x40,
+ 0x00, 0x02, 0x1F, 0x29, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x28, 0x03, 0x41, 0x00, 0x02, 0x1F, 0x29,
+ 0x03, 0x41, 0x00, 0x03, 0x03, 0x97, 0x03, 0x13, 0x03, 0x42, 0x00, 0x03, 0x03, 0x97, 0x03, 0x14,
+ 0x03, 0x42, 0x00, 0x02, 0x03, 0xB9, 0x03, 0x43, 0x00, 0x02, 0x1F, 0xBE, 0x03, 0x14, 0x00, 0x02,
+ 0x1F, 0x30, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x31, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x30, 0x03, 0x41,
+ 0x00, 0x02, 0x1F, 0x31, 0x03, 0x41, 0x00, 0x03, 0x03, 0xB9, 0x03, 0x13, 0x03, 0x42, 0x00, 0x03,
+ 0x03, 0xB9, 0x03, 0x14, 0x03, 0x42, 0x00, 0x02, 0x03, 0x99, 0x03, 0x43, 0x00, 0x02, 0x1F, 0x38,
+ 0x03, 0x40, 0x00, 0x02, 0x1F, 0x39, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x38, 0x03, 0x41, 0x00, 0x02,
+ 0x1F, 0x39, 0x03, 0x41, 0x00, 0x03, 0x03, 0x99, 0x03, 0x13, 0x03, 0x42, 0x00, 0x03, 0x03, 0x99,
+ 0x03, 0x14, 0x03, 0x42, 0x00, 0x02, 0x03, 0xBF, 0x03, 0x43, 0x00, 0x02, 0x1F, 0x40, 0x03, 0x40,
+ 0x00, 0x02, 0x1F, 0x41, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x40, 0x03, 0x41, 0x00, 0x02, 0x1F, 0x41,
+ 0x03, 0x41, 0x00, 0x02, 0x03, 0x9F, 0x03, 0x43, 0x00, 0x02, 0x1F, 0x48, 0x03, 0x40, 0x00, 0x02,
+ 0x1F, 0x49, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x48, 0x03, 0x41, 0x00, 0x02, 0x1F, 0x49, 0x03, 0x41,
+ 0x00, 0x02, 0x03, 0xC5, 0x03, 0x43, 0x00, 0x02, 0x1F, 0x50, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x51,
+ 0x03, 0x40, 0x00, 0x02, 0x1F, 0x50, 0x03, 0x41, 0x00, 0x02, 0x1F, 0x51, 0x03, 0x41, 0x00, 0x03,
+ 0x03, 0xC5, 0x03, 0x13, 0x03, 0x42, 0x00, 0x03, 0x03, 0xC5, 0x03, 0x14, 0x03, 0x42, 0x00, 0x02,
+ 0x1F, 0x59, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x59, 0x03, 0x41, 0x00, 0x03, 0x03, 0xA5, 0x03, 0x14,
+ 0x03, 0x42, 0x00, 0x02, 0x03, 0xC9, 0x03, 0x43, 0x00, 0x02, 0x1F, 0x60, 0x03, 0x40, 0x00, 0x02,
+ 0x1F, 0x61, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x60, 0x03, 0x41, 0x00, 0x02, 0x1F, 0x61, 0x03, 0x41,
+ 0x00, 0x03, 0x03, 0xC9, 0x03, 0x13, 0x03, 0x42, 0x00, 0x03, 0x03, 0xC9, 0x03, 0x14, 0x03, 0x42,
+ 0x00, 0x02, 0x03, 0xA9, 0x03, 0x43, 0x00, 0x02, 0x21, 0x26, 0x03, 0x14, 0x00, 0x02, 0x1F, 0x68,
+ 0x03, 0x40, 0x00, 0x02, 0x1F, 0x69, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x68, 0x03, 0x41, 0x00, 0x02,
+ 0x1F, 0x69, 0x03, 0x41, 0x00, 0x03, 0x03, 0xA9, 0x03, 0x13, 0x03, 0x42, 0x00, 0x03, 0x03, 0xA9,
+ 0x03, 0x14, 0x03, 0x42, 0x00, 0x02, 0x03, 0xB1, 0x03, 0x40, 0x00, 0x02, 0x03, 0xB5, 0x03, 0x40,
+ 0x00, 0x02, 0x03, 0xB7, 0x03, 0x40, 0x00, 0x02, 0x03, 0xB9, 0x03, 0x40, 0x00, 0x02, 0x03, 0xBF,
+ 0x03, 0x40, 0x00, 0x02, 0x03, 0xC5, 0x03, 0x40, 0x00, 0x02, 0x03, 0xC9, 0x03, 0x40, 0x00, 0x02,
+ 0x1F, 0xB3, 0x03, 0x13, 0x00, 0x02, 0x1F, 0xB3, 0x03, 0x14, 0x00, 0x02, 0x1F, 0x80, 0x03, 0x00,
+ 0x00, 0x02, 0x1F, 0x81, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x80, 0x03, 0x01, 0x00, 0x02, 0x1F, 0x81,
+ 0x03, 0x01, 0x00, 0x02, 0x1F, 0x80, 0x03, 0x42, 0x00, 0x02, 0x1F, 0x81, 0x03, 0x42, 0x00, 0x02,
+ 0x1F, 0xBC, 0x03, 0x13, 0x00, 0x02, 0x1F, 0xBC, 0x03, 0x14, 0x00, 0x02, 0x1F, 0x88, 0x03, 0x00,
+ 0x00, 0x02, 0x1F, 0x89, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x88, 0x03, 0x01, 0x00, 0x02, 0x1F, 0x89,
+ 0x03, 0x01, 0x00, 0x02, 0x1F, 0x88, 0x03, 0x42, 0x00, 0x02, 0x1F, 0x89, 0x03, 0x42, 0x00, 0x02,
+ 0x1F, 0xC3, 0x03, 0x13, 0x00, 0x02, 0x1F, 0xC3, 0x03, 0x14, 0x00, 0x02, 0x1F, 0x90, 0x03, 0x00,
+ 0x00, 0x02, 0x1F, 0x91, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x90, 0x03, 0x01, 0x00, 0x02, 0x1F, 0x91,
+ 0x03, 0x01, 0x00, 0x02, 0x1F, 0x90, 0x03, 0x42, 0x00, 0x02, 0x1F, 0x91, 0x03, 0x42, 0x00, 0x02,
+ 0x1F, 0xCC, 0x03, 0x13, 0x00, 0x02, 0x1F, 0xCC, 0x03, 0x14, 0x00, 0x02, 0x1F, 0x98, 0x03, 0x00,
+ 0x00, 0x02, 0x1F, 0x99, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x98, 0x03, 0x01, 0x00, 0x02, 0x1F, 0x99,
+ 0x03, 0x01, 0x00, 0x02, 0x1F, 0x98, 0x03, 0x42, 0x00, 0x02, 0x1F, 0x99, 0x03, 0x42, 0x00, 0x02,
+ 0x1F, 0xF3, 0x03, 0x13, 0x00, 0x02, 0x1F, 0xF3, 0x03, 0x14, 0x00, 0x02, 0x1F, 0xA0, 0x03, 0x00,
+ 0x00, 0x02, 0x1F, 0xA1, 0x03, 0x00, 0x00, 0x02, 0x1F, 0xA0, 0x03, 0x01, 0x00, 0x02, 0x1F, 0xA1,
+ 0x03, 0x01, 0x00, 0x02, 0x1F, 0xA0, 0x03, 0x42, 0x00, 0x02, 0x1F, 0xA1, 0x03, 0x42, 0x00, 0x02,
+ 0x1F, 0xFC, 0x03, 0x13, 0x00, 0x02, 0x1F, 0xFC, 0x03, 0x14, 0x00, 0x02, 0x1F, 0xA8, 0x03, 0x00,
+ 0x00, 0x02, 0x1F, 0xA9, 0x03, 0x00, 0x00, 0x02, 0x1F, 0xA8, 0x03, 0x01, 0x00, 0x02, 0x1F, 0xA9,
+ 0x03, 0x01, 0x00, 0x02, 0x1F, 0xA8, 0x03, 0x42, 0x00, 0x02, 0x1F, 0xA9, 0x03, 0x42, 0x00, 0x02,
+ 0x1F, 0xB3, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x71, 0x03, 0x45, 0x00, 0x02, 0x1F, 0xB6, 0x03, 0x45,
+ 0x00, 0x02, 0x03, 0x91, 0x03, 0x40, 0x00, 0x02, 0x1F, 0xC3, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x75,
+ 0x03, 0x45, 0x00, 0x02, 0x1F, 0xC6, 0x03, 0x45, 0x00, 0x02, 0x03, 0x95, 0x03, 0x40, 0x00, 0x02,
+ 0x03, 0x97, 0x03, 0x40, 0x00, 0x02, 0x1F, 0xBF, 0x03, 0x40, 0x00, 0x02, 0x1F, 0xBF, 0x03, 0x41,
+ 0x00, 0x02, 0x1F, 0xBE, 0x03, 0x06, 0x00, 0x02, 0x1F, 0xBE, 0x03, 0x04, 0x00, 0x02, 0x03, 0xCA,
+ 0x03, 0x40, 0x00, 0x02, 0x1F, 0xBE, 0x03, 0x42, 0x00, 0x03, 0x03, 0xB9, 0x03, 0x08, 0x03, 0x42,
+ 0x00, 0x02, 0x03, 0x99, 0x03, 0x40, 0x00, 0x02, 0x1F, 0xFE, 0x03, 0x40, 0x00, 0x02, 0x1F, 0xFE,
+ 0x03, 0x41, 0x00, 0x02, 0x03, 0xCB, 0x03, 0x40, 0x00, 0x02, 0x03, 0xC1, 0x03, 0x43, 0x00, 0x03,
+ 0x03, 0xC5, 0x03, 0x08, 0x03, 0x42, 0x00, 0x02, 0x03, 0xA5, 0x03, 0x40, 0x00, 0x02, 0x00, 0xA8,
+ 0x03, 0x40, 0x00, 0x02, 0x1F, 0xF3, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x7D, 0x03, 0x45, 0x00, 0x02,
+ 0x1F, 0xF6, 0x03, 0x45, 0x00, 0x02, 0x03, 0x9F, 0x03, 0x40, 0x00, 0x02, 0x03, 0xA9, 0x03, 0x40,
+ 0x00, 0x02, 0x21, 0x26, 0x03, 0x45, 0x00, 0x01, 0x00, 0xC0, 0x03, 0x85, 0x03, 0x86, 0x03, 0x88,
+ 0x03, 0x89, 0x03, 0x8A, 0x03, 0x8C, 0x03, 0x8E, 0x03, 0x8F, 0x03, 0x90, 0x03, 0xAC, 0x03, 0xAD,
+ 0x03, 0xAE, 0x03, 0xAF, 0x03, 0xB0, 0x03, 0xCA, 0x03, 0xCC, 0x03, 0xCD, 0x03, 0xCE, 0x03, 0xD3,
+ 0x1F, 0x00, 0x1F, 0x02, 0x1F, 0x03, 0x1F, 0x04, 0x1F, 0x05, 0x1F, 0x06, 0x1F, 0x07, 0x1F, 0x08,
+ 0x1F, 0x0A, 0x1F, 0x0B, 0x1F, 0x0C, 0x1F, 0x0D, 0x1F, 0x0E, 0x1F, 0x0F, 0x1F, 0x10, 0x1F, 0x12,
+ 0x1F, 0x13, 0x1F, 0x14, 0x1F, 0x15, 0x1F, 0x18, 0x1F, 0x1A, 0x1F, 0x1B, 0x1F, 0x1C, 0x1F, 0x1D,
+ 0x1F, 0x20, 0x1F, 0x22, 0x1F, 0x23, 0x1F, 0x24, 0x1F, 0x25, 0x1F, 0x26, 0x1F, 0x27, 0x1F, 0x28,
+ 0x1F, 0x2A, 0x1F, 0x2B, 0x1F, 0x2C, 0x1F, 0x2D, 0x1F, 0x2E, 0x1F, 0x2F, 0x1F, 0x30, 0x1F, 0x31,
+ 0x1F, 0x32, 0x1F, 0x33, 0x1F, 0x34, 0x1F, 0x35, 0x1F, 0x36, 0x1F, 0x37, 0x1F, 0x38, 0x1F, 0x3A,
+ 0x1F, 0x3B, 0x1F, 0x3C, 0x1F, 0x3D, 0x1F, 0x3E, 0x1F, 0x3F, 0x1F, 0x40, 0x1F, 0x42, 0x1F, 0x43,
+ 0x1F, 0x44, 0x1F, 0x45, 0x1F, 0x48, 0x1F, 0x4A, 0x1F, 0x4B, 0x1F, 0x4C, 0x1F, 0x4D, 0x1F, 0x50,
+ 0x1F, 0x52, 0x1F, 0x53, 0x1F, 0x54, 0x1F, 0x55, 0x1F, 0x56, 0x1F, 0x57, 0x1F, 0x5B, 0x1F, 0x5D,
+ 0x1F, 0x5F, 0x1F, 0x60, 0x1F, 0x62, 0x1F, 0x63, 0x1F, 0x64, 0x1F, 0x65, 0x1F, 0x66, 0x1F, 0x67,
+ 0x1F, 0x68, 0x1F, 0x69, 0x1F, 0x6A, 0x1F, 0x6B, 0x1F, 0x6C, 0x1F, 0x6D, 0x1F, 0x6E, 0x1F, 0x6F,
+ 0x1F, 0x70, 0x1F, 0x72, 0x1F, 0x74, 0x1F, 0x76, 0x1F, 0x78, 0x1F, 0x7A, 0x1F, 0x7C, 0x1F, 0x80,
+ 0x1F, 0x81, 0x1F, 0x82, 0x1F, 0x83, 0x1F, 0x84, 0x1F, 0x85, 0x1F, 0x86, 0x1F, 0x87, 0x1F, 0x88,
+ 0x1F, 0x89, 0x1F, 0x8A, 0x1F, 0x8B, 0x1F, 0x8C, 0x1F, 0x8D, 0x1F, 0x8E, 0x1F, 0x8F, 0x1F, 0x90,
+ 0x1F, 0x91, 0x1F, 0x92, 0x1F, 0x93, 0x1F, 0x94, 0x1F, 0x95, 0x1F, 0x96, 0x1F, 0x97, 0x1F, 0x98,
+ 0x1F, 0x99, 0x1F, 0x9A, 0x1F, 0x9B, 0x1F, 0x9C, 0x1F, 0x9D, 0x1F, 0x9E, 0x1F, 0x9F, 0x1F, 0xA0,
+ 0x1F, 0xA1, 0x1F, 0xA2, 0x1F, 0xA3, 0x1F, 0xA4, 0x1F, 0xA5, 0x1F, 0xA6, 0x1F, 0xA7, 0x1F, 0xA8,
+ 0x1F, 0xA9, 0x1F, 0xAA, 0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD, 0x1F, 0xAE, 0x1F, 0xAF, 0x1F, 0xB2,
+ 0x1F, 0xB4, 0x1F, 0xB7, 0x1F, 0xBA, 0x1F, 0xC2, 0x1F, 0xC4, 0x1F, 0xC7, 0x1F, 0xC8, 0x1F, 0xCA,
+ 0x1F, 0xCD, 0x1F, 0xCE, 0x1F, 0xD0, 0x1F, 0xD1, 0x1F, 0xD2, 0x1F, 0xD6, 0x1F, 0xD7, 0x1F, 0xDA,
+ 0x1F, 0xDD, 0x1F, 0xDE, 0x1F, 0xE2, 0x1F, 0xE4, 0x1F, 0xE7, 0x1F, 0xEA, 0x1F, 0xED, 0x1F, 0xF2,
+ 0x1F, 0xF4, 0x1F, 0xF7, 0x1F, 0xF8, 0x1F, 0xFA, 0x1F, 0xFC, 0x00, 0x01, 0x04, 0xE0, 0x00, 0x85,
+ 0x01, 0x10, 0x01, 0x16, 0x01, 0x1C, 0x01, 0x22, 0x01, 0x28, 0x01, 0x30, 0x01, 0x38, 0x01, 0x40,
+ 0x01, 0x48, 0x01, 0x50, 0x01, 0x58, 0x01, 0x60, 0x01, 0x68, 0x01, 0x70, 0x01, 0x78, 0x01, 0x80,
+ 0x01, 0x88, 0x01, 0x90, 0x01, 0x98, 0x01, 0xA0, 0x01, 0xA8, 0x01, 0xB0, 0x01, 0xB8, 0x01, 0xC0,
+ 0x01, 0xC8, 0x01, 0xD0, 0x01, 0xD8, 0x01, 0xE0, 0x01, 0xE8, 0x01, 0xF0, 0x01, 0xF8, 0x02, 0x00,
+ 0x02, 0x08, 0x02, 0x0E, 0x02, 0x16, 0x02, 0x1E, 0x02, 0x26, 0x02, 0x2E, 0x02, 0x36, 0x02, 0x3E,
+ 0x02, 0x46, 0x02, 0x4E, 0x02, 0x56, 0x02, 0x5E, 0x02, 0x66, 0x02, 0x6E, 0x02, 0x76, 0x02, 0x7E,
+ 0x02, 0x86, 0x02, 0x8E, 0x02, 0x96, 0x02, 0x9E, 0x02, 0xA6, 0x02, 0xAE, 0x02, 0xB6, 0x02, 0xBE,
+ 0x02, 0xC6, 0x02, 0xCE, 0x02, 0xD6, 0x02, 0xDE, 0x02, 0xE6, 0x02, 0xEE, 0x02, 0xF6, 0x02, 0xFE,
+ 0x03, 0x06, 0x03, 0x0C, 0x03, 0x14, 0x03, 0x1C, 0x03, 0x24, 0x03, 0x2C, 0x03, 0x34, 0x03, 0x3C,
+ 0x03, 0x42, 0x03, 0x48, 0x03, 0x50, 0x03, 0x56, 0x03, 0x5C, 0x03, 0x62, 0x03, 0x68, 0x03, 0x70,
+ 0x03, 0x78, 0x03, 0x7E, 0x03, 0x86, 0x03, 0x8C, 0x03, 0x92, 0x03, 0x98, 0x03, 0x9E, 0x03, 0xA6,
+ 0x03, 0xAE, 0x03, 0xB4, 0x03, 0xBC, 0x03, 0xC2, 0x03, 0xC8, 0x03, 0xCE, 0x03, 0xD4, 0x03, 0xDC,
+ 0x03, 0xE4, 0x03, 0xEA, 0x03, 0xF2, 0x03, 0xF8, 0x03, 0xFE, 0x04, 0x04, 0x04, 0x0A, 0x04, 0x12,
+ 0x04, 0x1A, 0x04, 0x20, 0x04, 0x28, 0x04, 0x2E, 0x04, 0x34, 0x04, 0x3A, 0x04, 0x40, 0x04, 0x48,
+ 0x04, 0x50, 0x04, 0x56, 0x04, 0x5E, 0x04, 0x64, 0x04, 0x6A, 0x04, 0x70, 0x04, 0x76, 0x04, 0x7E,
+ 0x04, 0x86, 0x04, 0x8C, 0x04, 0x92, 0x04, 0x9A, 0x04, 0xA0, 0x04, 0xA6, 0x04, 0xAE, 0x04, 0xB6,
+ 0x04, 0xBE, 0x04, 0xC6, 0x04, 0xCC, 0x04, 0xD2, 0x04, 0xDA, 0x00, 0x02, 0x21, 0x26, 0x03, 0x01,
+ 0x00, 0x02, 0x03, 0xCA, 0x03, 0x41, 0x00, 0x02, 0x1F, 0xBE, 0x03, 0x01, 0x00, 0x02, 0x03, 0xCB,
+ 0x03, 0x41, 0x00, 0x03, 0x03, 0xB1, 0x03, 0x13, 0x03, 0x00, 0x00, 0x03, 0x03, 0xB1, 0x03, 0x14,
+ 0x03, 0x00, 0x00, 0x03, 0x03, 0xB1, 0x03, 0x13, 0x03, 0x01, 0x00, 0x03, 0x03, 0xB1, 0x03, 0x14,
+ 0x03, 0x01, 0x00, 0x03, 0x03, 0xB1, 0x03, 0x43, 0x03, 0x42, 0x00, 0x03, 0x03, 0x91, 0x03, 0x13,
+ 0x03, 0x00, 0x00, 0x03, 0x03, 0x91, 0x03, 0x14, 0x03, 0x00, 0x00, 0x03, 0x03, 0x91, 0x03, 0x13,
+ 0x03, 0x01, 0x00, 0x03, 0x03, 0x91, 0x03, 0x14, 0x03, 0x01, 0x00, 0x03, 0x03, 0x91, 0x03, 0x43,
+ 0x03, 0x42, 0x00, 0x03, 0x03, 0xB5, 0x03, 0x13, 0x03, 0x00, 0x00, 0x03, 0x03, 0xB5, 0x03, 0x14,
+ 0x03, 0x00, 0x00, 0x03, 0x03, 0xB5, 0x03, 0x13, 0x03, 0x01, 0x00, 0x03, 0x03, 0xB5, 0x03, 0x14,
+ 0x03, 0x01, 0x00, 0x03, 0x03, 0x95, 0x03, 0x13, 0x03, 0x00, 0x00, 0x03, 0x03, 0x95, 0x03, 0x14,
+ 0x03, 0x00, 0x00, 0x03, 0x03, 0x95, 0x03, 0x13, 0x03, 0x01, 0x00, 0x03, 0x03, 0x95, 0x03, 0x14,
+ 0x03, 0x01, 0x00, 0x03, 0x03, 0xB7, 0x03, 0x13, 0x03, 0x00, 0x00, 0x03, 0x03, 0xB7, 0x03, 0x14,
+ 0x03, 0x00, 0x00, 0x03, 0x03, 0xB7, 0x03, 0x13, 0x03, 0x01, 0x00, 0x03, 0x03, 0xB7, 0x03, 0x14,
+ 0x03, 0x01, 0x00, 0x03, 0x03, 0xB7, 0x03, 0x43, 0x03, 0x42, 0x00, 0x03, 0x03, 0x97, 0x03, 0x13,
+ 0x03, 0x00, 0x00, 0x03, 0x03, 0x97, 0x03, 0x14, 0x03, 0x00, 0x00, 0x03, 0x03, 0x97, 0x03, 0x13,
+ 0x03, 0x01, 0x00, 0x03, 0x03, 0x97, 0x03, 0x14, 0x03, 0x01, 0x00, 0x03, 0x03, 0x97, 0x03, 0x43,
+ 0x03, 0x42, 0x00, 0x02, 0x1F, 0xBE, 0x03, 0x13, 0x00, 0x03, 0x03, 0xB9, 0x03, 0x13, 0x03, 0x00,
+ 0x00, 0x03, 0x03, 0xB9, 0x03, 0x14, 0x03, 0x00, 0x00, 0x03, 0x03, 0xB9, 0x03, 0x13, 0x03, 0x01,
+ 0x00, 0x03, 0x03, 0xB9, 0x03, 0x14, 0x03, 0x01, 0x00, 0x03, 0x03, 0xB9, 0x03, 0x43, 0x03, 0x42,
+ 0x00, 0x03, 0x1F, 0xBE, 0x03, 0x14, 0x03, 0x42, 0x00, 0x03, 0x03, 0x99, 0x03, 0x13, 0x03, 0x00,
+ 0x00, 0x03, 0x03, 0x99, 0x03, 0x14, 0x03, 0x00, 0x00, 0x03, 0x03, 0x99, 0x03, 0x13, 0x03, 0x01,
+ 0x00, 0x03, 0x03, 0x99, 0x03, 0x14, 0x03, 0x01, 0x00, 0x03, 0x03, 0x99, 0x03, 0x43, 0x03, 0x42,
+ 0x00, 0x03, 0x03, 0xBF, 0x03, 0x13, 0x03, 0x00, 0x00, 0x03, 0x03, 0xBF, 0x03, 0x14, 0x03, 0x00,
+ 0x00, 0x03, 0x03, 0xBF, 0x03, 0x13, 0x03, 0x01, 0x00, 0x03, 0x03, 0xBF, 0x03, 0x14, 0x03, 0x01,
+ 0x00, 0x03, 0x03, 0x9F, 0x03, 0x13, 0x03, 0x00, 0x00, 0x03, 0x03, 0x9F, 0x03, 0x14, 0x03, 0x00,
+ 0x00, 0x03, 0x03, 0x9F, 0x03, 0x13, 0x03, 0x01, 0x00, 0x03, 0x03, 0x9F, 0x03, 0x14, 0x03, 0x01,
+ 0x00, 0x03, 0x03, 0xC5, 0x03, 0x13, 0x03, 0x00, 0x00, 0x03, 0x03, 0xC5, 0x03, 0x14, 0x03, 0x00,
+ 0x00, 0x03, 0x03, 0xC5, 0x03, 0x13, 0x03, 0x01, 0x00, 0x03, 0x03, 0xC5, 0x03, 0x14, 0x03, 0x01,
+ 0x00, 0x03, 0x03, 0xC5, 0x03, 0x43, 0x03, 0x42, 0x00, 0x03, 0x03, 0xA5, 0x03, 0x14, 0x03, 0x00,
+ 0x00, 0x03, 0x03, 0xA5, 0x03, 0x14, 0x03, 0x01, 0x00, 0x03, 0x03, 0xC9, 0x03, 0x13, 0x03, 0x00,
+ 0x00, 0x03, 0x03, 0xC9, 0x03, 0x14, 0x03, 0x00, 0x00, 0x03, 0x03, 0xC9, 0x03, 0x13, 0x03, 0x01,
+ 0x00, 0x03, 0x03, 0xC9, 0x03, 0x14, 0x03, 0x01, 0x00, 0x03, 0x03, 0xC9, 0x03, 0x43, 0x03, 0x42,
+ 0x00, 0x02, 0x21, 0x26, 0x03, 0x13, 0x00, 0x03, 0x03, 0xA9, 0x03, 0x13, 0x03, 0x00, 0x00, 0x03,
+ 0x03, 0xA9, 0x03, 0x14, 0x03, 0x00, 0x00, 0x03, 0x03, 0xA9, 0x03, 0x13, 0x03, 0x01, 0x00, 0x03,
+ 0x03, 0xA9, 0x03, 0x14, 0x03, 0x01, 0x00, 0x03, 0x03, 0xA9, 0x03, 0x43, 0x03, 0x42, 0x00, 0x03,
+ 0x21, 0x26, 0x03, 0x14, 0x03, 0x42, 0x00, 0x02, 0x1F, 0xBE, 0x03, 0x00, 0x00, 0x02, 0x1F, 0xB3,
+ 0x03, 0x43, 0x00, 0x03, 0x03, 0xB1, 0x03, 0x14, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x80, 0x03, 0x40,
+ 0x00, 0x02, 0x1F, 0x81, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x80, 0x03, 0x41, 0x00, 0x02, 0x1F, 0x81,
+ 0x03, 0x41, 0x00, 0x03, 0x1F, 0x00, 0x03, 0x42, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x01, 0x03, 0x42,
+ 0x03, 0x45, 0x00, 0x02, 0x1F, 0xBC, 0x03, 0x43, 0x00, 0x03, 0x03, 0x91, 0x03, 0x14, 0x03, 0x45,
+ 0x00, 0x02, 0x1F, 0x88, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x89, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x88,
+ 0x03, 0x41, 0x00, 0x02, 0x1F, 0x89, 0x03, 0x41, 0x00, 0x03, 0x1F, 0x08, 0x03, 0x42, 0x03, 0x45,
+ 0x00, 0x03, 0x1F, 0x09, 0x03, 0x42, 0x03, 0x45, 0x00, 0x02, 0x1F, 0xC3, 0x03, 0x43, 0x00, 0x03,
+ 0x03, 0xB7, 0x03, 0x14, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x90, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x91,
+ 0x03, 0x40, 0x00, 0x02, 0x1F, 0x90, 0x03, 0x41, 0x00, 0x02, 0x1F, 0x91, 0x03, 0x41, 0x00, 0x03,
+ 0x1F, 0x20, 0x03, 0x42, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x21, 0x03, 0x42, 0x03, 0x45, 0x00, 0x02,
+ 0x1F, 0xCC, 0x03, 0x43, 0x00, 0x03, 0x03, 0x97, 0x03, 0x14, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x98,
+ 0x03, 0x40, 0x00, 0x02, 0x1F, 0x99, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x98, 0x03, 0x41, 0x00, 0x02,
+ 0x1F, 0x99, 0x03, 0x41, 0x00, 0x03, 0x1F, 0x28, 0x03, 0x42, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x29,
+ 0x03, 0x42, 0x03, 0x45, 0x00, 0x02, 0x1F, 0xF3, 0x03, 0x43, 0x00, 0x03, 0x03, 0xC9, 0x03, 0x14,
+ 0x03, 0x45, 0x00, 0x02, 0x1F, 0xA0, 0x03, 0x40, 0x00, 0x02, 0x1F, 0xA1, 0x03, 0x40, 0x00, 0x02,
+ 0x1F, 0xA0, 0x03, 0x41, 0x00, 0x02, 0x1F, 0xA1, 0x03, 0x41, 0x00, 0x03, 0x1F, 0x60, 0x03, 0x42,
+ 0x03, 0x45, 0x00, 0x03, 0x1F, 0x61, 0x03, 0x42, 0x03, 0x45, 0x00, 0x02, 0x1F, 0xFC, 0x03, 0x43,
+ 0x00, 0x03, 0x03, 0xA9, 0x03, 0x14, 0x03, 0x45, 0x00, 0x02, 0x1F, 0xA8, 0x03, 0x40, 0x00, 0x02,
+ 0x1F, 0xA9, 0x03, 0x40, 0x00, 0x02, 0x1F, 0xA8, 0x03, 0x41, 0x00, 0x02, 0x1F, 0xA9, 0x03, 0x41,
+ 0x00, 0x03, 0x1F, 0x68, 0x03, 0x42, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x69, 0x03, 0x42, 0x03, 0x45,
+ 0x00, 0x02, 0x1F, 0xB3, 0x03, 0x40, 0x00, 0x02, 0x1F, 0xB3, 0x03, 0x01, 0x00, 0x03, 0x03, 0xB1,
+ 0x03, 0x42, 0x03, 0x45, 0x00, 0x02, 0x1F, 0xC3, 0x03, 0x40, 0x00, 0x02, 0x1F, 0xC3, 0x03, 0x01,
+ 0x00, 0x03, 0x03, 0xB7, 0x03, 0x42, 0x03, 0x45, 0x00, 0x03, 0x03, 0xB9, 0x03, 0x08, 0x03, 0x00,
+ 0x00, 0x03, 0x1F, 0xBE, 0x03, 0x08, 0x03, 0x42, 0x00, 0x03, 0x03, 0xC5, 0x03, 0x08, 0x03, 0x00,
+ 0x00, 0x02, 0x1F, 0xF3, 0x03, 0x40, 0x00, 0x02, 0x1F, 0xF3, 0x03, 0x01, 0x00, 0x03, 0x03, 0xC9,
+ 0x03, 0x42, 0x03, 0x45, 0x00, 0x02, 0x21, 0x26, 0x03, 0x00, 0x00, 0x01, 0x00, 0x85, 0x03, 0x8F,
+ 0x03, 0x90, 0x03, 0xAF, 0x03, 0xB0, 0x1F, 0x02, 0x1F, 0x03, 0x1F, 0x04, 0x1F, 0x05, 0x1F, 0x06,
+ 0x1F, 0x0A, 0x1F, 0x0B, 0x1F, 0x0C, 0x1F, 0x0D, 0x1F, 0x0E, 0x1F, 0x12, 0x1F, 0x13, 0x1F, 0x14,
+ 0x1F, 0x15, 0x1F, 0x1A, 0x1F, 0x1B, 0x1F, 0x1C, 0x1F, 0x1D, 0x1F, 0x22, 0x1F, 0x23, 0x1F, 0x24,
+ 0x1F, 0x25, 0x1F, 0x26, 0x1F, 0x2A, 0x1F, 0x2B, 0x1F, 0x2C, 0x1F, 0x2D, 0x1F, 0x2E, 0x1F, 0x30,
+ 0x1F, 0x32, 0x1F, 0x33, 0x1F, 0x34, 0x1F, 0x35, 0x1F, 0x36, 0x1F, 0x37, 0x1F, 0x3A, 0x1F, 0x3B,
+ 0x1F, 0x3C, 0x1F, 0x3D, 0x1F, 0x3E, 0x1F, 0x42, 0x1F, 0x43, 0x1F, 0x44, 0x1F, 0x45, 0x1F, 0x4A,
+ 0x1F, 0x4B, 0x1F, 0x4C, 0x1F, 0x4D, 0x1F, 0x52, 0x1F, 0x53, 0x1F, 0x54, 0x1F, 0x55, 0x1F, 0x56,
+ 0x1F, 0x5B, 0x1F, 0x5D, 0x1F, 0x62, 0x1F, 0x63, 0x1F, 0x64, 0x1F, 0x65, 0x1F, 0x66, 0x1F, 0x68,
+ 0x1F, 0x6A, 0x1F, 0x6B, 0x1F, 0x6C, 0x1F, 0x6D, 0x1F, 0x6E, 0x1F, 0x6F, 0x1F, 0x76, 0x1F, 0x80,
+ 0x1F, 0x81, 0x1F, 0x82, 0x1F, 0x83, 0x1F, 0x84, 0x1F, 0x85, 0x1F, 0x86, 0x1F, 0x87, 0x1F, 0x88,
+ 0x1F, 0x89, 0x1F, 0x8A, 0x1F, 0x8B, 0x1F, 0x8C, 0x1F, 0x8D, 0x1F, 0x8E, 0x1F, 0x8F, 0x1F, 0x90,
+ 0x1F, 0x91, 0x1F, 0x92, 0x1F, 0x93, 0x1F, 0x94, 0x1F, 0x95, 0x1F, 0x96, 0x1F, 0x97, 0x1F, 0x98,
+ 0x1F, 0x99, 0x1F, 0x9A, 0x1F, 0x9B, 0x1F, 0x9C, 0x1F, 0x9D, 0x1F, 0x9E, 0x1F, 0x9F, 0x1F, 0xA0,
+ 0x1F, 0xA1, 0x1F, 0xA2, 0x1F, 0xA3, 0x1F, 0xA4, 0x1F, 0xA5, 0x1F, 0xA6, 0x1F, 0xA7, 0x1F, 0xA8,
+ 0x1F, 0xA9, 0x1F, 0xAA, 0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD, 0x1F, 0xAE, 0x1F, 0xAF, 0x1F, 0xB2,
+ 0x1F, 0xB4, 0x1F, 0xB7, 0x1F, 0xC2, 0x1F, 0xC4, 0x1F, 0xC7, 0x1F, 0xD2, 0x1F, 0xD7, 0x1F, 0xE2,
+ 0x1F, 0xF2, 0x1F, 0xF4, 0x1F, 0xF7, 0x1F, 0xFA, 0x00, 0x01, 0x04, 0xC0, 0x00, 0x7B, 0x00, 0xFC,
+ 0x01, 0x02, 0x01, 0x08, 0x01, 0x0E, 0x01, 0x16, 0x01, 0x1E, 0x01, 0x26, 0x01, 0x2E, 0x01, 0x36,
+ 0x01, 0x3E, 0x01, 0x46, 0x01, 0x4E, 0x01, 0x56, 0x01, 0x5E, 0x01, 0x66, 0x01, 0x6E, 0x01, 0x76,
+ 0x01, 0x7E, 0x01, 0x86, 0x01, 0x8E, 0x01, 0x96, 0x01, 0x9E, 0x01, 0xA6, 0x01, 0xAE, 0x01, 0xB6,
+ 0x01, 0xBE, 0x01, 0xC6, 0x01, 0xCE, 0x01, 0xD6, 0x01, 0xDC, 0x01, 0xE4, 0x01, 0xEC, 0x01, 0xF4,
+ 0x01, 0xFC, 0x02, 0x04, 0x02, 0x0C, 0x02, 0x14, 0x02, 0x1C, 0x02, 0x24, 0x02, 0x2C, 0x02, 0x34,
+ 0x02, 0x3C, 0x02, 0x44, 0x02, 0x4C, 0x02, 0x54, 0x02, 0x5C, 0x02, 0x64, 0x02, 0x6C, 0x02, 0x74,
+ 0x02, 0x7C, 0x02, 0x84, 0x02, 0x8C, 0x02, 0x94, 0x02, 0x9C, 0x02, 0xA4, 0x02, 0xAC, 0x02, 0xB4,
+ 0x02, 0xBA, 0x02, 0xC2, 0x02, 0xCA, 0x02, 0xD2, 0x02, 0xDA, 0x02, 0xE2, 0x02, 0xE8, 0x02, 0xF0,
+ 0x02, 0xF8, 0x03, 0x00, 0x03, 0x08, 0x03, 0x10, 0x03, 0x18, 0x03, 0x20, 0x03, 0x28, 0x03, 0x30,
+ 0x03, 0x38, 0x03, 0x40, 0x03, 0x48, 0x03, 0x50, 0x03, 0x58, 0x03, 0x60, 0x03, 0x68, 0x03, 0x70,
+ 0x03, 0x78, 0x03, 0x80, 0x03, 0x88, 0x03, 0x90, 0x03, 0x98, 0x03, 0xA0, 0x03, 0xA8, 0x03, 0xB0,
+ 0x03, 0xB8, 0x03, 0xC0, 0x03, 0xC8, 0x03, 0xD0, 0x03, 0xD8, 0x03, 0xE0, 0x03, 0xE8, 0x03, 0xF0,
+ 0x03, 0xF8, 0x04, 0x00, 0x04, 0x08, 0x04, 0x10, 0x04, 0x18, 0x04, 0x20, 0x04, 0x28, 0x04, 0x30,
+ 0x04, 0x38, 0x04, 0x40, 0x04, 0x48, 0x04, 0x50, 0x04, 0x58, 0x04, 0x60, 0x04, 0x68, 0x04, 0x70,
+ 0x04, 0x76, 0x04, 0x7E, 0x04, 0x86, 0x04, 0x8C, 0x04, 0x94, 0x04, 0x9C, 0x04, 0xA4, 0x04, 0xAC,
+ 0x04, 0xB2, 0x04, 0xBA, 0x00, 0x02, 0x21, 0x26, 0x03, 0x41, 0x00, 0x02, 0x1F, 0xBE, 0x03, 0x44,
+ 0x00, 0x02, 0x1F, 0xBE, 0x03, 0x41, 0x00, 0x03, 0x03, 0xC5, 0x03, 0x08, 0x03, 0x01, 0x00, 0x03,
+ 0x03, 0xB1, 0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x03, 0xB1, 0x03, 0x14, 0x03, 0x40, 0x00, 0x03,
+ 0x03, 0xB1, 0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x03, 0xB1, 0x03, 0x14, 0x03, 0x41, 0x00, 0x03,
+ 0x03, 0x91, 0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x03, 0x91, 0x03, 0x14, 0x03, 0x40, 0x00, 0x03,
+ 0x03, 0x91, 0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x03, 0x91, 0x03, 0x14, 0x03, 0x41, 0x00, 0x03,
+ 0x03, 0xB5, 0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x03, 0xB5, 0x03, 0x14, 0x03, 0x40, 0x00, 0x03,
+ 0x03, 0xB5, 0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x03, 0xB5, 0x03, 0x14, 0x03, 0x41, 0x00, 0x03,
+ 0x03, 0x95, 0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x03, 0x95, 0x03, 0x14, 0x03, 0x40, 0x00, 0x03,
+ 0x03, 0x95, 0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x03, 0x95, 0x03, 0x14, 0x03, 0x41, 0x00, 0x03,
+ 0x03, 0xB7, 0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x03, 0xB7, 0x03, 0x14, 0x03, 0x40, 0x00, 0x03,
+ 0x03, 0xB7, 0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x03, 0xB7, 0x03, 0x14, 0x03, 0x41, 0x00, 0x03,
+ 0x03, 0x97, 0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x03, 0x97, 0x03, 0x14, 0x03, 0x40, 0x00, 0x03,
+ 0x03, 0x97, 0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x03, 0x97, 0x03, 0x14, 0x03, 0x41, 0x00, 0x02,
+ 0x1F, 0xBE, 0x03, 0x43, 0x00, 0x03, 0x03, 0xB9, 0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x03, 0xB9,
+ 0x03, 0x14, 0x03, 0x40, 0x00, 0x03, 0x03, 0xB9, 0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x03, 0xB9,
+ 0x03, 0x14, 0x03, 0x41, 0x00, 0x03, 0x1F, 0xBE, 0x03, 0x13, 0x03, 0x42, 0x00, 0x03, 0x03, 0x99,
+ 0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x03, 0x99, 0x03, 0x14, 0x03, 0x40, 0x00, 0x03, 0x03, 0x99,
+ 0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x03, 0x99, 0x03, 0x14, 0x03, 0x41, 0x00, 0x03, 0x03, 0xBF,
+ 0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x03, 0xBF, 0x03, 0x14, 0x03, 0x40, 0x00, 0x03, 0x03, 0xBF,
+ 0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x03, 0xBF, 0x03, 0x14, 0x03, 0x41, 0x00, 0x03, 0x03, 0x9F,
+ 0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x03, 0x9F, 0x03, 0x14, 0x03, 0x40, 0x00, 0x03, 0x03, 0x9F,
+ 0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x03, 0x9F, 0x03, 0x14, 0x03, 0x41, 0x00, 0x03, 0x03, 0xC5,
+ 0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x03, 0xC5, 0x03, 0x14, 0x03, 0x40, 0x00, 0x03, 0x03, 0xC5,
+ 0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x03, 0xC5, 0x03, 0x14, 0x03, 0x41, 0x00, 0x03, 0x03, 0xA5,
+ 0x03, 0x14, 0x03, 0x40, 0x00, 0x03, 0x03, 0xA5, 0x03, 0x14, 0x03, 0x41, 0x00, 0x03, 0x03, 0xC9,
+ 0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x03, 0xC9, 0x03, 0x14, 0x03, 0x40, 0x00, 0x03, 0x03, 0xC9,
+ 0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x03, 0xC9, 0x03, 0x14, 0x03, 0x41, 0x00, 0x02, 0x21, 0x26,
+ 0x03, 0x43, 0x00, 0x03, 0x03, 0xA9, 0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x03, 0xA9, 0x03, 0x14,
+ 0x03, 0x40, 0x00, 0x03, 0x03, 0xA9, 0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x03, 0xA9, 0x03, 0x14,
+ 0x03, 0x41, 0x00, 0x03, 0x21, 0x26, 0x03, 0x13, 0x03, 0x42, 0x00, 0x02, 0x1F, 0xBE, 0x03, 0x40,
+ 0x00, 0x03, 0x03, 0xB1, 0x03, 0x13, 0x03, 0x45, 0x00, 0x03, 0x03, 0xB1, 0x03, 0x45, 0x03, 0x14,
+ 0x00, 0x03, 0x1F, 0x00, 0x03, 0x00, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x01, 0x03, 0x00, 0x03, 0x45,
+ 0x00, 0x03, 0x1F, 0x00, 0x03, 0x01, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x01, 0x03, 0x01, 0x03, 0x45,
+ 0x00, 0x03, 0x1F, 0x00, 0x03, 0x45, 0x03, 0x42, 0x00, 0x03, 0x1F, 0x01, 0x03, 0x45, 0x03, 0x42,
+ 0x00, 0x03, 0x03, 0x91, 0x03, 0x13, 0x03, 0x45, 0x00, 0x03, 0x03, 0x91, 0x03, 0x45, 0x03, 0x14,
+ 0x00, 0x03, 0x1F, 0x08, 0x03, 0x00, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x09, 0x03, 0x00, 0x03, 0x45,
+ 0x00, 0x03, 0x1F, 0x08, 0x03, 0x01, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x09, 0x03, 0x01, 0x03, 0x45,
+ 0x00, 0x03, 0x1F, 0x08, 0x03, 0x45, 0x03, 0x42, 0x00, 0x03, 0x1F, 0x09, 0x03, 0x45, 0x03, 0x42,
+ 0x00, 0x03, 0x03, 0xB7, 0x03, 0x13, 0x03, 0x45, 0x00, 0x03, 0x03, 0xB7, 0x03, 0x45, 0x03, 0x14,
+ 0x00, 0x03, 0x1F, 0x20, 0x03, 0x00, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x21, 0x03, 0x00, 0x03, 0x45,
+ 0x00, 0x03, 0x1F, 0x20, 0x03, 0x01, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x21, 0x03, 0x01, 0x03, 0x45,
+ 0x00, 0x03, 0x1F, 0x20, 0x03, 0x45, 0x03, 0x42, 0x00, 0x03, 0x1F, 0x21, 0x03, 0x45, 0x03, 0x42,
+ 0x00, 0x03, 0x03, 0x97, 0x03, 0x13, 0x03, 0x45, 0x00, 0x03, 0x03, 0x97, 0x03, 0x45, 0x03, 0x14,
+ 0x00, 0x03, 0x1F, 0x28, 0x03, 0x00, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x29, 0x03, 0x00, 0x03, 0x45,
+ 0x00, 0x03, 0x1F, 0x28, 0x03, 0x01, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x29, 0x03, 0x01, 0x03, 0x45,
+ 0x00, 0x03, 0x1F, 0x28, 0x03, 0x45, 0x03, 0x42, 0x00, 0x03, 0x1F, 0x29, 0x03, 0x45, 0x03, 0x42,
+ 0x00, 0x03, 0x03, 0xC9, 0x03, 0x13, 0x03, 0x45, 0x00, 0x03, 0x03, 0xC9, 0x03, 0x45, 0x03, 0x14,
+ 0x00, 0x03, 0x1F, 0x60, 0x03, 0x00, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x61, 0x03, 0x00, 0x03, 0x45,
+ 0x00, 0x03, 0x1F, 0x60, 0x03, 0x01, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x61, 0x03, 0x01, 0x03, 0x45,
+ 0x00, 0x03, 0x1F, 0x60, 0x03, 0x45, 0x03, 0x42, 0x00, 0x03, 0x1F, 0x61, 0x03, 0x45, 0x03, 0x42,
+ 0x00, 0x03, 0x03, 0xA9, 0x03, 0x13, 0x03, 0x45, 0x00, 0x03, 0x03, 0xA9, 0x03, 0x45, 0x03, 0x14,
+ 0x00, 0x03, 0x1F, 0x68, 0x03, 0x00, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x69, 0x03, 0x00, 0x03, 0x45,
+ 0x00, 0x03, 0x1F, 0x68, 0x03, 0x01, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x69, 0x03, 0x01, 0x03, 0x45,
+ 0x00, 0x03, 0x1F, 0x68, 0x03, 0x45, 0x03, 0x42, 0x00, 0x03, 0x1F, 0x69, 0x03, 0x45, 0x03, 0x42,
+ 0x00, 0x03, 0x03, 0xB1, 0x03, 0x00, 0x03, 0x45, 0x00, 0x02, 0x1F, 0xB3, 0x03, 0x41, 0x00, 0x03,
+ 0x03, 0xB1, 0x03, 0x45, 0x03, 0x42, 0x00, 0x03, 0x03, 0xB7, 0x03, 0x00, 0x03, 0x45, 0x00, 0x02,
+ 0x1F, 0xC3, 0x03, 0x41, 0x00, 0x03, 0x03, 0xB7, 0x03, 0x45, 0x03, 0x42, 0x00, 0x03, 0x03, 0xB9,
+ 0x03, 0x08, 0x03, 0x40, 0x00, 0x03, 0x03, 0xC5, 0x03, 0x08, 0x03, 0x40, 0x00, 0x03, 0x03, 0xC9,
+ 0x03, 0x00, 0x03, 0x45, 0x00, 0x02, 0x1F, 0xF3, 0x03, 0x41, 0x00, 0x03, 0x03, 0xC9, 0x03, 0x45,
+ 0x03, 0x42, 0x00, 0x02, 0x21, 0x26, 0x03, 0x40, 0x00, 0x01, 0x00, 0x7B, 0x03, 0x8F, 0x03, 0x90,
+ 0x03, 0xAF, 0x03, 0xB0, 0x1F, 0x02, 0x1F, 0x03, 0x1F, 0x04, 0x1F, 0x05, 0x1F, 0x0A, 0x1F, 0x0B,
+ 0x1F, 0x0C, 0x1F, 0x0D, 0x1F, 0x12, 0x1F, 0x13, 0x1F, 0x14, 0x1F, 0x15, 0x1F, 0x1A, 0x1F, 0x1B,
+ 0x1F, 0x1C, 0x1F, 0x1D, 0x1F, 0x22, 0x1F, 0x23, 0x1F, 0x24, 0x1F, 0x25, 0x1F, 0x2A, 0x1F, 0x2B,
+ 0x1F, 0x2C, 0x1F, 0x2D, 0x1F, 0x30, 0x1F, 0x32, 0x1F, 0x33, 0x1F, 0x34, 0x1F, 0x35, 0x1F, 0x36,
+ 0x1F, 0x3A, 0x1F, 0x3B, 0x1F, 0x3C, 0x1F, 0x3D, 0x1F, 0x42, 0x1F, 0x43, 0x1F, 0x44, 0x1F, 0x45,
+ 0x1F, 0x4A, 0x1F, 0x4B, 0x1F, 0x4C, 0x1F, 0x4D, 0x1F, 0x52, 0x1F, 0x53, 0x1F, 0x54, 0x1F, 0x55,
+ 0x1F, 0x5B, 0x1F, 0x5D, 0x1F, 0x62, 0x1F, 0x63, 0x1F, 0x64, 0x1F, 0x65, 0x1F, 0x68, 0x1F, 0x6A,
+ 0x1F, 0x6B, 0x1F, 0x6C, 0x1F, 0x6D, 0x1F, 0x6E, 0x1F, 0x76, 0x1F, 0x80, 0x1F, 0x81, 0x1F, 0x82,
+ 0x1F, 0x83, 0x1F, 0x84, 0x1F, 0x85, 0x1F, 0x86, 0x1F, 0x87, 0x1F, 0x88, 0x1F, 0x89, 0x1F, 0x8A,
+ 0x1F, 0x8B, 0x1F, 0x8C, 0x1F, 0x8D, 0x1F, 0x8E, 0x1F, 0x8F, 0x1F, 0x90, 0x1F, 0x91, 0x1F, 0x92,
+ 0x1F, 0x93, 0x1F, 0x94, 0x1F, 0x95, 0x1F, 0x96, 0x1F, 0x97, 0x1F, 0x98, 0x1F, 0x99, 0x1F, 0x9A,
+ 0x1F, 0x9B, 0x1F, 0x9C, 0x1F, 0x9D, 0x1F, 0x9E, 0x1F, 0x9F, 0x1F, 0xA0, 0x1F, 0xA1, 0x1F, 0xA2,
+ 0x1F, 0xA3, 0x1F, 0xA4, 0x1F, 0xA5, 0x1F, 0xA6, 0x1F, 0xA7, 0x1F, 0xA8, 0x1F, 0xA9, 0x1F, 0xAA,
+ 0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD, 0x1F, 0xAE, 0x1F, 0xAF, 0x1F, 0xB2, 0x1F, 0xB4, 0x1F, 0xB7,
+ 0x1F, 0xC2, 0x1F, 0xC4, 0x1F, 0xC7, 0x1F, 0xD2, 0x1F, 0xE2, 0x1F, 0xF2, 0x1F, 0xF4, 0x1F, 0xF7,
+ 0x1F, 0xFA, 0x00, 0x01, 0x03, 0x4E, 0x00, 0x54, 0x00, 0xAE, 0x00, 0xB6, 0x00, 0xBE, 0x00, 0xC6,
+ 0x00, 0xCE, 0x00, 0xD6, 0x00, 0xDE, 0x00, 0xE6, 0x00, 0xEE, 0x00, 0xF6, 0x00, 0xFE, 0x01, 0x06,
+ 0x01, 0x0E, 0x01, 0x16, 0x01, 0x1E, 0x01, 0x26, 0x01, 0x2E, 0x01, 0x36, 0x01, 0x3E, 0x01, 0x46,
+ 0x01, 0x4E, 0x01, 0x56, 0x01, 0x5E, 0x01, 0x66, 0x01, 0x6E, 0x01, 0x76, 0x01, 0x7E, 0x01, 0x86,
+ 0x01, 0x8E, 0x01, 0x96, 0x01, 0x9E, 0x01, 0xA6, 0x01, 0xAE, 0x01, 0xB6, 0x01, 0xBE, 0x01, 0xC6,
+ 0x01, 0xCE, 0x01, 0xD6, 0x01, 0xDE, 0x01, 0xE6, 0x01, 0xEE, 0x01, 0xF6, 0x01, 0xFE, 0x02, 0x06,
+ 0x02, 0x0E, 0x02, 0x16, 0x02, 0x1E, 0x02, 0x26, 0x02, 0x2E, 0x02, 0x36, 0x02, 0x3E, 0x02, 0x46,
+ 0x02, 0x4E, 0x02, 0x56, 0x02, 0x5E, 0x02, 0x66, 0x02, 0x6E, 0x02, 0x76, 0x02, 0x7E, 0x02, 0x86,
+ 0x02, 0x8E, 0x02, 0x96, 0x02, 0x9E, 0x02, 0xA6, 0x02, 0xAE, 0x02, 0xB6, 0x02, 0xBE, 0x02, 0xC6,
+ 0x02, 0xCE, 0x02, 0xD6, 0x02, 0xDE, 0x02, 0xE6, 0x02, 0xEE, 0x02, 0xF6, 0x02, 0xFE, 0x03, 0x06,
+ 0x03, 0x0E, 0x03, 0x16, 0x03, 0x1E, 0x03, 0x26, 0x03, 0x2E, 0x03, 0x36, 0x03, 0x3E, 0x03, 0x46,
+ 0x00, 0x03, 0x03, 0xB9, 0x03, 0x08, 0x03, 0x01, 0x00, 0x03, 0x03, 0xC5, 0x03, 0x08, 0x03, 0x41,
+ 0x00, 0x03, 0x03, 0xB1, 0x03, 0x43, 0x03, 0x00, 0x00, 0x03, 0x03, 0xB1, 0x03, 0x43, 0x03, 0x01,
+ 0x00, 0x03, 0x03, 0x91, 0x03, 0x43, 0x03, 0x00, 0x00, 0x03, 0x03, 0x91, 0x03, 0x43, 0x03, 0x01,
+ 0x00, 0x03, 0x03, 0xB5, 0x03, 0x43, 0x03, 0x00, 0x00, 0x03, 0x03, 0xB5, 0x03, 0x43, 0x03, 0x01,
+ 0x00, 0x03, 0x03, 0x95, 0x03, 0x43, 0x03, 0x00, 0x00, 0x03, 0x03, 0x95, 0x03, 0x43, 0x03, 0x01,
+ 0x00, 0x03, 0x03, 0xB7, 0x03, 0x43, 0x03, 0x00, 0x00, 0x03, 0x03, 0xB7, 0x03, 0x43, 0x03, 0x01,
+ 0x00, 0x03, 0x03, 0x97, 0x03, 0x43, 0x03, 0x00, 0x00, 0x03, 0x03, 0x97, 0x03, 0x43, 0x03, 0x01,
+ 0x00, 0x03, 0x03, 0xB9, 0x03, 0x43, 0x03, 0x00, 0x00, 0x03, 0x1F, 0xBE, 0x03, 0x14, 0x03, 0x00,
+ 0x00, 0x03, 0x03, 0xB9, 0x03, 0x43, 0x03, 0x01, 0x00, 0x03, 0x1F, 0xBE, 0x03, 0x14, 0x03, 0x01,
+ 0x00, 0x03, 0x1F, 0xBE, 0x03, 0x43, 0x03, 0x42, 0x00, 0x03, 0x03, 0x99, 0x03, 0x43, 0x03, 0x00,
+ 0x00, 0x03, 0x03, 0x99, 0x03, 0x43, 0x03, 0x01, 0x00, 0x03, 0x03, 0xBF, 0x03, 0x43, 0x03, 0x00,
+ 0x00, 0x03, 0x03, 0xBF, 0x03, 0x43, 0x03, 0x01, 0x00, 0x03, 0x03, 0x9F, 0x03, 0x43, 0x03, 0x00,
+ 0x00, 0x03, 0x03, 0x9F, 0x03, 0x43, 0x03, 0x01, 0x00, 0x03, 0x03, 0xC5, 0x03, 0x43, 0x03, 0x00,
+ 0x00, 0x03, 0x03, 0xC5, 0x03, 0x43, 0x03, 0x01, 0x00, 0x03, 0x03, 0xC9, 0x03, 0x43, 0x03, 0x00,
+ 0x00, 0x03, 0x03, 0xC9, 0x03, 0x43, 0x03, 0x01, 0x00, 0x03, 0x03, 0xA9, 0x03, 0x43, 0x03, 0x00,
+ 0x00, 0x03, 0x21, 0x26, 0x03, 0x14, 0x03, 0x00, 0x00, 0x03, 0x03, 0xA9, 0x03, 0x43, 0x03, 0x01,
+ 0x00, 0x03, 0x21, 0x26, 0x03, 0x14, 0x03, 0x01, 0x00, 0x03, 0x21, 0x26, 0x03, 0x43, 0x03, 0x42,
+ 0x00, 0x03, 0x03, 0xB1, 0x03, 0x43, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x00, 0x03, 0x40, 0x03, 0x45,
+ 0x00, 0x03, 0x1F, 0x01, 0x03, 0x40, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x00, 0x03, 0x41, 0x03, 0x45,
+ 0x00, 0x03, 0x1F, 0x01, 0x03, 0x41, 0x03, 0x45, 0x00, 0x03, 0x1F, 0xB3, 0x03, 0x13, 0x03, 0x42,
+ 0x00, 0x03, 0x1F, 0xB3, 0x03, 0x14, 0x03, 0x42, 0x00, 0x03, 0x03, 0x91, 0x03, 0x43, 0x03, 0x45,
+ 0x00, 0x03, 0x1F, 0x08, 0x03, 0x40, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x09, 0x03, 0x40, 0x03, 0x45,
+ 0x00, 0x03, 0x1F, 0x08, 0x03, 0x41, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x09, 0x03, 0x41, 0x03, 0x45,
+ 0x00, 0x03, 0x1F, 0xBC, 0x03, 0x13, 0x03, 0x42, 0x00, 0x03, 0x1F, 0xBC, 0x03, 0x14, 0x03, 0x42,
+ 0x00, 0x03, 0x03, 0xB7, 0x03, 0x43, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x20, 0x03, 0x40, 0x03, 0x45,
+ 0x00, 0x03, 0x1F, 0x21, 0x03, 0x40, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x20, 0x03, 0x41, 0x03, 0x45,
+ 0x00, 0x03, 0x1F, 0x21, 0x03, 0x41, 0x03, 0x45, 0x00, 0x03, 0x1F, 0xC3, 0x03, 0x13, 0x03, 0x42,
+ 0x00, 0x03, 0x1F, 0xC3, 0x03, 0x14, 0x03, 0x42, 0x00, 0x03, 0x03, 0x97, 0x03, 0x43, 0x03, 0x45,
+ 0x00, 0x03, 0x1F, 0x28, 0x03, 0x40, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x29, 0x03, 0x40, 0x03, 0x45,
+ 0x00, 0x03, 0x1F, 0x28, 0x03, 0x41, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x29, 0x03, 0x41, 0x03, 0x45,
+ 0x00, 0x03, 0x1F, 0xCC, 0x03, 0x13, 0x03, 0x42, 0x00, 0x03, 0x1F, 0xCC, 0x03, 0x14, 0x03, 0x42,
+ 0x00, 0x03, 0x03, 0xC9, 0x03, 0x43, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x60, 0x03, 0x40, 0x03, 0x45,
+ 0x00, 0x03, 0x1F, 0x61, 0x03, 0x40, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x60, 0x03, 0x41, 0x03, 0x45,
+ 0x00, 0x03, 0x1F, 0x61, 0x03, 0x41, 0x03, 0x45, 0x00, 0x03, 0x1F, 0xF3, 0x03, 0x13, 0x03, 0x42,
+ 0x00, 0x03, 0x1F, 0xF3, 0x03, 0x14, 0x03, 0x42, 0x00, 0x03, 0x03, 0xA9, 0x03, 0x43, 0x03, 0x45,
+ 0x00, 0x03, 0x21, 0x26, 0x03, 0x14, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x68, 0x03, 0x40, 0x03, 0x45,
+ 0x00, 0x03, 0x1F, 0x69, 0x03, 0x40, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x68, 0x03, 0x41, 0x03, 0x45,
+ 0x00, 0x03, 0x1F, 0x69, 0x03, 0x41, 0x03, 0x45, 0x00, 0x03, 0x1F, 0xFC, 0x03, 0x13, 0x03, 0x42,
+ 0x00, 0x03, 0x1F, 0xFC, 0x03, 0x14, 0x03, 0x42, 0x00, 0x03, 0x03, 0xB1, 0x03, 0x40, 0x03, 0x45,
+ 0x00, 0x03, 0x03, 0xB1, 0x03, 0x01, 0x03, 0x45, 0x00, 0x03, 0x03, 0xB7, 0x03, 0x40, 0x03, 0x45,
+ 0x00, 0x03, 0x03, 0xB7, 0x03, 0x01, 0x03, 0x45, 0x00, 0x03, 0x1F, 0xBE, 0x03, 0x08, 0x03, 0x00,
+ 0x00, 0x03, 0x03, 0xC9, 0x03, 0x40, 0x03, 0x45, 0x00, 0x03, 0x03, 0xC9, 0x03, 0x01, 0x03, 0x45,
+ 0x00, 0x01, 0x00, 0x54, 0x03, 0x90, 0x03, 0xB0, 0x1F, 0x02, 0x1F, 0x04, 0x1F, 0x0A, 0x1F, 0x0C,
+ 0x1F, 0x12, 0x1F, 0x14, 0x1F, 0x1A, 0x1F, 0x1C, 0x1F, 0x22, 0x1F, 0x24, 0x1F, 0x2A, 0x1F, 0x2C,
+ 0x1F, 0x32, 0x1F, 0x33, 0x1F, 0x34, 0x1F, 0x35, 0x1F, 0x36, 0x1F, 0x3A, 0x1F, 0x3C, 0x1F, 0x42,
+ 0x1F, 0x44, 0x1F, 0x4A, 0x1F, 0x4C, 0x1F, 0x52, 0x1F, 0x54, 0x1F, 0x62, 0x1F, 0x64, 0x1F, 0x6A,
+ 0x1F, 0x6B, 0x1F, 0x6C, 0x1F, 0x6D, 0x1F, 0x6E, 0x1F, 0x80, 0x1F, 0x82, 0x1F, 0x83, 0x1F, 0x84,
+ 0x1F, 0x85, 0x1F, 0x86, 0x1F, 0x87, 0x1F, 0x88, 0x1F, 0x8A, 0x1F, 0x8B, 0x1F, 0x8C, 0x1F, 0x8D,
+ 0x1F, 0x8E, 0x1F, 0x8F, 0x1F, 0x90, 0x1F, 0x92, 0x1F, 0x93, 0x1F, 0x94, 0x1F, 0x95, 0x1F, 0x96,
+ 0x1F, 0x97, 0x1F, 0x98, 0x1F, 0x9A, 0x1F, 0x9B, 0x1F, 0x9C, 0x1F, 0x9D, 0x1F, 0x9E, 0x1F, 0x9F,
+ 0x1F, 0xA0, 0x1F, 0xA2, 0x1F, 0xA3, 0x1F, 0xA4, 0x1F, 0xA5, 0x1F, 0xA6, 0x1F, 0xA7, 0x1F, 0xA8,
+ 0x1F, 0xA9, 0x1F, 0xAA, 0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD, 0x1F, 0xAE, 0x1F, 0xAF, 0x1F, 0xB2,
+ 0x1F, 0xB4, 0x1F, 0xC2, 0x1F, 0xC4, 0x1F, 0xD2, 0x1F, 0xF2, 0x1F, 0xF4, 0x00, 0x01, 0x03, 0x3C,
+ 0x00, 0x51, 0x00, 0xA8, 0x00, 0xB0, 0x00, 0xB8, 0x00, 0xC0, 0x00, 0xC8, 0x00, 0xD0, 0x00, 0xD8,
+ 0x00, 0xE0, 0x00, 0xE8, 0x00, 0xF0, 0x00, 0xF8, 0x01, 0x00, 0x01, 0x08, 0x01, 0x10, 0x01, 0x18,
+ 0x01, 0x20, 0x01, 0x28, 0x01, 0x30, 0x01, 0x38, 0x01, 0x40, 0x01, 0x48, 0x01, 0x50, 0x01, 0x58,
+ 0x01, 0x60, 0x01, 0x68, 0x01, 0x70, 0x01, 0x78, 0x01, 0x80, 0x01, 0x88, 0x01, 0x90, 0x01, 0x98,
+ 0x01, 0xA0, 0x01, 0xA8, 0x01, 0xB0, 0x01, 0xB8, 0x01, 0xC0, 0x01, 0xC8, 0x01, 0xD0, 0x01, 0xDA,
+ 0x01, 0xE2, 0x01, 0xEA, 0x01, 0xF2, 0x01, 0xFA, 0x02, 0x02, 0x02, 0x0A, 0x02, 0x14, 0x02, 0x1C,
+ 0x02, 0x24, 0x02, 0x2C, 0x02, 0x34, 0x02, 0x3C, 0x02, 0x44, 0x02, 0x4E, 0x02, 0x56, 0x02, 0x5E,
+ 0x02, 0x66, 0x02, 0x6E, 0x02, 0x76, 0x02, 0x7E, 0x02, 0x88, 0x02, 0x90, 0x02, 0x98, 0x02, 0xA0,
+ 0x02, 0xA8, 0x02, 0xB0, 0x02, 0xB8, 0x02, 0xC2, 0x02, 0xCA, 0x02, 0xD2, 0x02, 0xDA, 0x02, 0xE2,
+ 0x02, 0xEA, 0x02, 0xF2, 0x02, 0xFA, 0x03, 0x04, 0x03, 0x0C, 0x03, 0x14, 0x03, 0x1C, 0x03, 0x24,
+ 0x03, 0x2C, 0x03, 0x34, 0x00, 0x03, 0x03, 0xB9, 0x03, 0x08, 0x03, 0x41, 0x00, 0x03, 0x03, 0xB1,
+ 0x03, 0x43, 0x03, 0x40, 0x00, 0x03, 0x03, 0xB1, 0x03, 0x43, 0x03, 0x41, 0x00, 0x03, 0x03, 0x91,
+ 0x03, 0x43, 0x03, 0x40, 0x00, 0x03, 0x03, 0x91, 0x03, 0x43, 0x03, 0x41, 0x00, 0x03, 0x03, 0xB5,
+ 0x03, 0x43, 0x03, 0x40, 0x00, 0x03, 0x03, 0xB5, 0x03, 0x43, 0x03, 0x41, 0x00, 0x03, 0x03, 0x95,
+ 0x03, 0x43, 0x03, 0x40, 0x00, 0x03, 0x03, 0x95, 0x03, 0x43, 0x03, 0x41, 0x00, 0x03, 0x03, 0xB7,
+ 0x03, 0x43, 0x03, 0x40, 0x00, 0x03, 0x03, 0xB7, 0x03, 0x43, 0x03, 0x41, 0x00, 0x03, 0x03, 0x97,
+ 0x03, 0x43, 0x03, 0x40, 0x00, 0x03, 0x03, 0x97, 0x03, 0x43, 0x03, 0x41, 0x00, 0x03, 0x03, 0xB9,
+ 0x03, 0x43, 0x03, 0x40, 0x00, 0x03, 0x1F, 0xBE, 0x03, 0x14, 0x03, 0x40, 0x00, 0x03, 0x03, 0xB9,
+ 0x03, 0x43, 0x03, 0x41, 0x00, 0x03, 0x1F, 0xBE, 0x03, 0x14, 0x03, 0x41, 0x00, 0x03, 0x03, 0x99,
+ 0x03, 0x43, 0x03, 0x40, 0x00, 0x03, 0x03, 0x99, 0x03, 0x43, 0x03, 0x41, 0x00, 0x03, 0x03, 0xBF,
+ 0x03, 0x43, 0x03, 0x40, 0x00, 0x03, 0x03, 0xBF, 0x03, 0x43, 0x03, 0x41, 0x00, 0x03, 0x03, 0x9F,
+ 0x03, 0x43, 0x03, 0x40, 0x00, 0x03, 0x03, 0x9F, 0x03, 0x43, 0x03, 0x41, 0x00, 0x03, 0x03, 0xC5,
+ 0x03, 0x43, 0x03, 0x40, 0x00, 0x03, 0x03, 0xC5, 0x03, 0x43, 0x03, 0x41, 0x00, 0x03, 0x03, 0xC9,
+ 0x03, 0x43, 0x03, 0x40, 0x00, 0x03, 0x03, 0xC9, 0x03, 0x43, 0x03, 0x41, 0x00, 0x03, 0x03, 0xA9,
+ 0x03, 0x43, 0x03, 0x40, 0x00, 0x03, 0x21, 0x26, 0x03, 0x14, 0x03, 0x40, 0x00, 0x03, 0x03, 0xA9,
+ 0x03, 0x43, 0x03, 0x41, 0x00, 0x03, 0x21, 0x26, 0x03, 0x14, 0x03, 0x41, 0x00, 0x03, 0x03, 0xB1,
+ 0x03, 0x45, 0x03, 0x13, 0x00, 0x03, 0x1F, 0x00, 0x03, 0x45, 0x03, 0x00, 0x00, 0x03, 0x1F, 0x01,
+ 0x03, 0x45, 0x03, 0x00, 0x00, 0x03, 0x1F, 0x00, 0x03, 0x45, 0x03, 0x01, 0x00, 0x03, 0x1F, 0x01,
+ 0x03, 0x45, 0x03, 0x01, 0x00, 0x03, 0x1F, 0xB3, 0x03, 0x43, 0x03, 0x42, 0x00, 0x04, 0x03, 0xB1,
+ 0x03, 0x14, 0x03, 0x42, 0x03, 0x45, 0x00, 0x03, 0x03, 0x91, 0x03, 0x45, 0x03, 0x13, 0x00, 0x03,
+ 0x1F, 0x08, 0x03, 0x45, 0x03, 0x00, 0x00, 0x03, 0x1F, 0x09, 0x03, 0x45, 0x03, 0x00, 0x00, 0x03,
+ 0x1F, 0x08, 0x03, 0x45, 0x03, 0x01, 0x00, 0x03, 0x1F, 0x09, 0x03, 0x45, 0x03, 0x01, 0x00, 0x03,
+ 0x1F, 0xBC, 0x03, 0x43, 0x03, 0x42, 0x00, 0x04, 0x03, 0x91, 0x03, 0x14, 0x03, 0x42, 0x03, 0x45,
+ 0x00, 0x03, 0x03, 0xB7, 0x03, 0x45, 0x03, 0x13, 0x00, 0x03, 0x1F, 0x20, 0x03, 0x45, 0x03, 0x00,
+ 0x00, 0x03, 0x1F, 0x21, 0x03, 0x45, 0x03, 0x00, 0x00, 0x03, 0x1F, 0x20, 0x03, 0x45, 0x03, 0x01,
+ 0x00, 0x03, 0x1F, 0x21, 0x03, 0x45, 0x03, 0x01, 0x00, 0x03, 0x1F, 0xC3, 0x03, 0x43, 0x03, 0x42,
+ 0x00, 0x04, 0x03, 0xB7, 0x03, 0x14, 0x03, 0x42, 0x03, 0x45, 0x00, 0x03, 0x03, 0x97, 0x03, 0x45,
+ 0x03, 0x13, 0x00, 0x03, 0x1F, 0x28, 0x03, 0x45, 0x03, 0x00, 0x00, 0x03, 0x1F, 0x29, 0x03, 0x45,
+ 0x03, 0x00, 0x00, 0x03, 0x1F, 0x28, 0x03, 0x45, 0x03, 0x01, 0x00, 0x03, 0x1F, 0x29, 0x03, 0x45,
+ 0x03, 0x01, 0x00, 0x03, 0x1F, 0xCC, 0x03, 0x43, 0x03, 0x42, 0x00, 0x04, 0x03, 0x97, 0x03, 0x14,
+ 0x03, 0x42, 0x03, 0x45, 0x00, 0x03, 0x03, 0xC9, 0x03, 0x45, 0x03, 0x13, 0x00, 0x03, 0x1F, 0x60,
+ 0x03, 0x45, 0x03, 0x00, 0x00, 0x03, 0x1F, 0x61, 0x03, 0x45, 0x03, 0x00, 0x00, 0x03, 0x1F, 0x60,
+ 0x03, 0x45, 0x03, 0x01, 0x00, 0x03, 0x1F, 0x61, 0x03, 0x45, 0x03, 0x01, 0x00, 0x03, 0x1F, 0xF3,
+ 0x03, 0x43, 0x03, 0x42, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x14, 0x03, 0x42, 0x03, 0x45, 0x00, 0x03,
+ 0x03, 0xA9, 0x03, 0x45, 0x03, 0x13, 0x00, 0x03, 0x21, 0x26, 0x03, 0x45, 0x03, 0x14, 0x00, 0x03,
+ 0x1F, 0x68, 0x03, 0x45, 0x03, 0x00, 0x00, 0x03, 0x1F, 0x69, 0x03, 0x45, 0x03, 0x00, 0x00, 0x03,
+ 0x1F, 0x68, 0x03, 0x45, 0x03, 0x01, 0x00, 0x03, 0x1F, 0x69, 0x03, 0x45, 0x03, 0x01, 0x00, 0x03,
+ 0x1F, 0xFC, 0x03, 0x43, 0x03, 0x42, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x14, 0x03, 0x42, 0x03, 0x45,
+ 0x00, 0x03, 0x03, 0xB1, 0x03, 0x45, 0x03, 0x00, 0x00, 0x03, 0x03, 0xB1, 0x03, 0x41, 0x03, 0x45,
+ 0x00, 0x03, 0x03, 0xB7, 0x03, 0x45, 0x03, 0x00, 0x00, 0x03, 0x03, 0xB7, 0x03, 0x41, 0x03, 0x45,
+ 0x00, 0x03, 0x1F, 0xBE, 0x03, 0x08, 0x03, 0x40, 0x00, 0x03, 0x03, 0xC9, 0x03, 0x45, 0x03, 0x00,
+ 0x00, 0x03, 0x03, 0xC9, 0x03, 0x41, 0x03, 0x45, 0x00, 0x01, 0x00, 0x51, 0x03, 0x90, 0x1F, 0x02,
+ 0x1F, 0x04, 0x1F, 0x0A, 0x1F, 0x0C, 0x1F, 0x12, 0x1F, 0x14, 0x1F, 0x1A, 0x1F, 0x1C, 0x1F, 0x22,
+ 0x1F, 0x24, 0x1F, 0x2A, 0x1F, 0x2C, 0x1F, 0x32, 0x1F, 0x33, 0x1F, 0x34, 0x1F, 0x35, 0x1F, 0x3A,
+ 0x1F, 0x3C, 0x1F, 0x42, 0x1F, 0x44, 0x1F, 0x4A, 0x1F, 0x4C, 0x1F, 0x52, 0x1F, 0x54, 0x1F, 0x62,
+ 0x1F, 0x64, 0x1F, 0x6A, 0x1F, 0x6B, 0x1F, 0x6C, 0x1F, 0x6D, 0x1F, 0x80, 0x1F, 0x82, 0x1F, 0x83,
+ 0x1F, 0x84, 0x1F, 0x85, 0x1F, 0x86, 0x1F, 0x87, 0x1F, 0x88, 0x1F, 0x8A, 0x1F, 0x8B, 0x1F, 0x8C,
+ 0x1F, 0x8D, 0x1F, 0x8E, 0x1F, 0x8F, 0x1F, 0x90, 0x1F, 0x92, 0x1F, 0x93, 0x1F, 0x94, 0x1F, 0x95,
+ 0x1F, 0x96, 0x1F, 0x97, 0x1F, 0x98, 0x1F, 0x9A, 0x1F, 0x9B, 0x1F, 0x9C, 0x1F, 0x9D, 0x1F, 0x9E,
+ 0x1F, 0x9F, 0x1F, 0xA0, 0x1F, 0xA2, 0x1F, 0xA3, 0x1F, 0xA4, 0x1F, 0xA5, 0x1F, 0xA6, 0x1F, 0xA7,
+ 0x1F, 0xA8, 0x1F, 0xA9, 0x1F, 0xAA, 0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD, 0x1F, 0xAE, 0x1F, 0xAF,
+ 0x1F, 0xB2, 0x1F, 0xB4, 0x1F, 0xC2, 0x1F, 0xC4, 0x1F, 0xD2, 0x1F, 0xF2, 0x1F, 0xF4, 0x00, 0x01,
+ 0x02, 0x30, 0x00, 0x35, 0x00, 0x70, 0x00, 0x78, 0x00, 0x80, 0x00, 0x88, 0x00, 0x90, 0x00, 0x98,
+ 0x00, 0xA0, 0x00, 0xA8, 0x00, 0xB0, 0x00, 0xB8, 0x00, 0xC0, 0x00, 0xCA, 0x00, 0xD4, 0x00, 0xDC,
+ 0x00, 0xE4, 0x00, 0xEC, 0x00, 0xF4, 0x00, 0xFC, 0x01, 0x06, 0x01, 0x10, 0x01, 0x18, 0x01, 0x20,
+ 0x01, 0x28, 0x01, 0x30, 0x01, 0x38, 0x01, 0x42, 0x01, 0x4C, 0x01, 0x54, 0x01, 0x5C, 0x01, 0x64,
+ 0x01, 0x6C, 0x01, 0x74, 0x01, 0x7E, 0x01, 0x88, 0x01, 0x90, 0x01, 0x98, 0x01, 0xA0, 0x01, 0xA8,
+ 0x01, 0xB0, 0x01, 0xBA, 0x01, 0xC4, 0x01, 0xCC, 0x01, 0xD4, 0x01, 0xDC, 0x01, 0xE4, 0x01, 0xEC,
+ 0x01, 0xF6, 0x02, 0x00, 0x02, 0x08, 0x02, 0x10, 0x02, 0x18, 0x02, 0x20, 0x02, 0x28, 0x00, 0x03,
+ 0x1F, 0xBE, 0x03, 0x08, 0x03, 0x01, 0x00, 0x03, 0x1F, 0xBE, 0x03, 0x13, 0x03, 0x00, 0x00, 0x03,
+ 0x1F, 0xBE, 0x03, 0x13, 0x03, 0x01, 0x00, 0x03, 0x21, 0x26, 0x03, 0x13, 0x03, 0x00, 0x00, 0x03,
+ 0x21, 0x26, 0x03, 0x13, 0x03, 0x01, 0x00, 0x03, 0x03, 0xB1, 0x03, 0x45, 0x03, 0x43, 0x00, 0x03,
+ 0x1F, 0x00, 0x03, 0x45, 0x03, 0x40, 0x00, 0x03, 0x1F, 0x01, 0x03, 0x45, 0x03, 0x40, 0x00, 0x03,
+ 0x1F, 0x00, 0x03, 0x45, 0x03, 0x41, 0x00, 0x03, 0x1F, 0x01, 0x03, 0x45, 0x03, 0x41, 0x00, 0x04,
+ 0x03, 0xB1, 0x03, 0x13, 0x03, 0x42, 0x03, 0x45, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x14, 0x03, 0x45,
+ 0x03, 0x42, 0x00, 0x03, 0x03, 0x91, 0x03, 0x45, 0x03, 0x43, 0x00, 0x03, 0x1F, 0x08, 0x03, 0x45,
+ 0x03, 0x40, 0x00, 0x03, 0x1F, 0x09, 0x03, 0x45, 0x03, 0x40, 0x00, 0x03, 0x1F, 0x08, 0x03, 0x45,
+ 0x03, 0x41, 0x00, 0x03, 0x1F, 0x09, 0x03, 0x45, 0x03, 0x41, 0x00, 0x04, 0x03, 0x91, 0x03, 0x13,
+ 0x03, 0x42, 0x03, 0x45, 0x00, 0x04, 0x03, 0x91, 0x03, 0x14, 0x03, 0x45, 0x03, 0x42, 0x00, 0x03,
+ 0x03, 0xB7, 0x03, 0x45, 0x03, 0x43, 0x00, 0x03, 0x1F, 0x20, 0x03, 0x45, 0x03, 0x40, 0x00, 0x03,
+ 0x1F, 0x21, 0x03, 0x45, 0x03, 0x40, 0x00, 0x03, 0x1F, 0x20, 0x03, 0x45, 0x03, 0x41, 0x00, 0x03,
+ 0x1F, 0x21, 0x03, 0x45, 0x03, 0x41, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x13, 0x03, 0x42, 0x03, 0x45,
+ 0x00, 0x04, 0x03, 0xB7, 0x03, 0x14, 0x03, 0x45, 0x03, 0x42, 0x00, 0x03, 0x03, 0x97, 0x03, 0x45,
+ 0x03, 0x43, 0x00, 0x03, 0x1F, 0x28, 0x03, 0x45, 0x03, 0x40, 0x00, 0x03, 0x1F, 0x29, 0x03, 0x45,
+ 0x03, 0x40, 0x00, 0x03, 0x1F, 0x28, 0x03, 0x45, 0x03, 0x41, 0x00, 0x03, 0x1F, 0x29, 0x03, 0x45,
+ 0x03, 0x41, 0x00, 0x04, 0x03, 0x97, 0x03, 0x13, 0x03, 0x42, 0x03, 0x45, 0x00, 0x04, 0x03, 0x97,
+ 0x03, 0x14, 0x03, 0x45, 0x03, 0x42, 0x00, 0x03, 0x03, 0xC9, 0x03, 0x45, 0x03, 0x43, 0x00, 0x03,
+ 0x1F, 0x60, 0x03, 0x45, 0x03, 0x40, 0x00, 0x03, 0x1F, 0x61, 0x03, 0x45, 0x03, 0x40, 0x00, 0x03,
+ 0x1F, 0x60, 0x03, 0x45, 0x03, 0x41, 0x00, 0x03, 0x1F, 0x61, 0x03, 0x45, 0x03, 0x41, 0x00, 0x04,
+ 0x03, 0xC9, 0x03, 0x13, 0x03, 0x42, 0x03, 0x45, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x14, 0x03, 0x45,
+ 0x03, 0x42, 0x00, 0x03, 0x03, 0xA9, 0x03, 0x45, 0x03, 0x43, 0x00, 0x03, 0x1F, 0x68, 0x03, 0x45,
+ 0x03, 0x40, 0x00, 0x03, 0x1F, 0x69, 0x03, 0x45, 0x03, 0x40, 0x00, 0x03, 0x1F, 0x68, 0x03, 0x45,
+ 0x03, 0x41, 0x00, 0x03, 0x1F, 0x69, 0x03, 0x45, 0x03, 0x41, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x13,
+ 0x03, 0x42, 0x03, 0x45, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x14, 0x03, 0x45, 0x03, 0x42, 0x00, 0x03,
+ 0x03, 0xB1, 0x03, 0x45, 0x03, 0x40, 0x00, 0x03, 0x03, 0xB1, 0x03, 0x45, 0x03, 0x01, 0x00, 0x03,
+ 0x03, 0xB7, 0x03, 0x45, 0x03, 0x40, 0x00, 0x03, 0x03, 0xB7, 0x03, 0x45, 0x03, 0x01, 0x00, 0x03,
+ 0x03, 0xC9, 0x03, 0x45, 0x03, 0x40, 0x00, 0x03, 0x03, 0xC9, 0x03, 0x45, 0x03, 0x01, 0x00, 0x01,
+ 0x00, 0x35, 0x03, 0x90, 0x1F, 0x32, 0x1F, 0x34, 0x1F, 0x6A, 0x1F, 0x6C, 0x1F, 0x80, 0x1F, 0x82,
+ 0x1F, 0x83, 0x1F, 0x84, 0x1F, 0x85, 0x1F, 0x86, 0x1F, 0x87, 0x1F, 0x88, 0x1F, 0x8A, 0x1F, 0x8B,
+ 0x1F, 0x8C, 0x1F, 0x8D, 0x1F, 0x8E, 0x1F, 0x8F, 0x1F, 0x90, 0x1F, 0x92, 0x1F, 0x93, 0x1F, 0x94,
+ 0x1F, 0x95, 0x1F, 0x96, 0x1F, 0x97, 0x1F, 0x98, 0x1F, 0x9A, 0x1F, 0x9B, 0x1F, 0x9C, 0x1F, 0x9D,
+ 0x1F, 0x9E, 0x1F, 0x9F, 0x1F, 0xA0, 0x1F, 0xA2, 0x1F, 0xA3, 0x1F, 0xA4, 0x1F, 0xA5, 0x1F, 0xA6,
+ 0x1F, 0xA7, 0x1F, 0xA8, 0x1F, 0xAA, 0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD, 0x1F, 0xAE, 0x1F, 0xAF,
+ 0x1F, 0xB2, 0x1F, 0xB4, 0x1F, 0xC2, 0x1F, 0xC4, 0x1F, 0xF2, 0x1F, 0xF4, 0x00, 0x01, 0x01, 0xE0,
+ 0x00, 0x2D, 0x00, 0x60, 0x00, 0x68, 0x00, 0x70, 0x00, 0x78, 0x00, 0x80, 0x00, 0x88, 0x00, 0x90,
+ 0x00, 0x98, 0x00, 0xA0, 0x00, 0xA8, 0x00, 0xB2, 0x00, 0xBC, 0x00, 0xC4, 0x00, 0xCC, 0x00, 0xD4,
+ 0x00, 0xDC, 0x00, 0xE6, 0x00, 0xF0, 0x00, 0xF8, 0x01, 0x00, 0x01, 0x08, 0x01, 0x10, 0x01, 0x1A,
+ 0x01, 0x24, 0x01, 0x2C, 0x01, 0x34, 0x01, 0x3C, 0x01, 0x44, 0x01, 0x4E, 0x01, 0x58, 0x01, 0x60,
+ 0x01, 0x68, 0x01, 0x70, 0x01, 0x78, 0x01, 0x82, 0x01, 0x8C, 0x01, 0x94, 0x01, 0x9C, 0x01, 0xA4,
+ 0x01, 0xAC, 0x01, 0xB4, 0x01, 0xBE, 0x01, 0xC8, 0x01, 0xD0, 0x01, 0xD8, 0x00, 0x03, 0x1F, 0xBE,
+ 0x03, 0x08, 0x03, 0x41, 0x00, 0x03, 0x1F, 0xBE, 0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x1F, 0xBE,
+ 0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x21, 0x26, 0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x21, 0x26,
+ 0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x1F, 0xB3, 0x03, 0x13, 0x03, 0x00, 0x00, 0x03, 0x1F, 0xB3,
+ 0x03, 0x14, 0x03, 0x00, 0x00, 0x03, 0x1F, 0xB3, 0x03, 0x13, 0x03, 0x01, 0x00, 0x03, 0x1F, 0xB3,
+ 0x03, 0x14, 0x03, 0x01, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x13, 0x03, 0x45, 0x03, 0x42, 0x00, 0x04,
+ 0x03, 0xB1, 0x03, 0x45, 0x03, 0x14, 0x03, 0x42, 0x00, 0x03, 0x1F, 0xBC, 0x03, 0x13, 0x03, 0x00,
+ 0x00, 0x03, 0x1F, 0xBC, 0x03, 0x14, 0x03, 0x00, 0x00, 0x03, 0x1F, 0xBC, 0x03, 0x13, 0x03, 0x01,
+ 0x00, 0x03, 0x1F, 0xBC, 0x03, 0x14, 0x03, 0x01, 0x00, 0x04, 0x03, 0x91, 0x03, 0x13, 0x03, 0x45,
+ 0x03, 0x42, 0x00, 0x04, 0x03, 0x91, 0x03, 0x45, 0x03, 0x14, 0x03, 0x42, 0x00, 0x03, 0x1F, 0xC3,
+ 0x03, 0x13, 0x03, 0x00, 0x00, 0x03, 0x1F, 0xC3, 0x03, 0x14, 0x03, 0x00, 0x00, 0x03, 0x1F, 0xC3,
+ 0x03, 0x13, 0x03, 0x01, 0x00, 0x03, 0x1F, 0xC3, 0x03, 0x14, 0x03, 0x01, 0x00, 0x04, 0x03, 0xB7,
+ 0x03, 0x13, 0x03, 0x45, 0x03, 0x42, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x45, 0x03, 0x14, 0x03, 0x42,
+ 0x00, 0x03, 0x1F, 0xCC, 0x03, 0x13, 0x03, 0x00, 0x00, 0x03, 0x1F, 0xCC, 0x03, 0x14, 0x03, 0x00,
+ 0x00, 0x03, 0x1F, 0xCC, 0x03, 0x13, 0x03, 0x01, 0x00, 0x03, 0x1F, 0xCC, 0x03, 0x14, 0x03, 0x01,
+ 0x00, 0x04, 0x03, 0x97, 0x03, 0x13, 0x03, 0x45, 0x03, 0x42, 0x00, 0x04, 0x03, 0x97, 0x03, 0x45,
+ 0x03, 0x14, 0x03, 0x42, 0x00, 0x03, 0x1F, 0xF3, 0x03, 0x13, 0x03, 0x00, 0x00, 0x03, 0x1F, 0xF3,
+ 0x03, 0x14, 0x03, 0x00, 0x00, 0x03, 0x1F, 0xF3, 0x03, 0x13, 0x03, 0x01, 0x00, 0x03, 0x1F, 0xF3,
+ 0x03, 0x14, 0x03, 0x01, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x13, 0x03, 0x45, 0x03, 0x42, 0x00, 0x04,
+ 0x03, 0xC9, 0x03, 0x45, 0x03, 0x14, 0x03, 0x42, 0x00, 0x03, 0x21, 0x26, 0x03, 0x13, 0x03, 0x45,
+ 0x00, 0x03, 0x1F, 0xFC, 0x03, 0x13, 0x03, 0x00, 0x00, 0x03, 0x1F, 0xFC, 0x03, 0x14, 0x03, 0x00,
+ 0x00, 0x03, 0x1F, 0xFC, 0x03, 0x13, 0x03, 0x01, 0x00, 0x03, 0x1F, 0xFC, 0x03, 0x14, 0x03, 0x01,
+ 0x00, 0x04, 0x03, 0xA9, 0x03, 0x13, 0x03, 0x45, 0x03, 0x42, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x45,
+ 0x03, 0x14, 0x03, 0x42, 0x00, 0x03, 0x03, 0xB1, 0x03, 0x45, 0x03, 0x41, 0x00, 0x03, 0x03, 0xB7,
+ 0x03, 0x45, 0x03, 0x41, 0x00, 0x03, 0x03, 0xC9, 0x03, 0x45, 0x03, 0x41, 0x00, 0x01, 0x00, 0x2D,
+ 0x03, 0x90, 0x1F, 0x32, 0x1F, 0x34, 0x1F, 0x6A, 0x1F, 0x6C, 0x1F, 0x82, 0x1F, 0x83, 0x1F, 0x84,
+ 0x1F, 0x85, 0x1F, 0x86, 0x1F, 0x87, 0x1F, 0x8A, 0x1F, 0x8B, 0x1F, 0x8C, 0x1F, 0x8D, 0x1F, 0x8E,
+ 0x1F, 0x8F, 0x1F, 0x92, 0x1F, 0x93, 0x1F, 0x94, 0x1F, 0x95, 0x1F, 0x96, 0x1F, 0x97, 0x1F, 0x9A,
+ 0x1F, 0x9B, 0x1F, 0x9C, 0x1F, 0x9D, 0x1F, 0x9E, 0x1F, 0x9F, 0x1F, 0xA2, 0x1F, 0xA3, 0x1F, 0xA4,
+ 0x1F, 0xA5, 0x1F, 0xA6, 0x1F, 0xA7, 0x1F, 0xA8, 0x1F, 0xAA, 0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD,
+ 0x1F, 0xAE, 0x1F, 0xAF, 0x1F, 0xB4, 0x1F, 0xC4, 0x1F, 0xF4, 0x00, 0x01, 0x01, 0x7C, 0x00, 0x24,
+ 0x00, 0x4E, 0x00, 0x56, 0x00, 0x5E, 0x00, 0x66, 0x00, 0x6E, 0x00, 0x76, 0x00, 0x7E, 0x00, 0x86,
+ 0x00, 0x8E, 0x00, 0x98, 0x00, 0xA0, 0x00, 0xA8, 0x00, 0xB0, 0x00, 0xB8, 0x00, 0xC2, 0x00, 0xCA,
+ 0x00, 0xD2, 0x00, 0xDA, 0x00, 0xE2, 0x00, 0xEC, 0x00, 0xF4, 0x00, 0xFC, 0x01, 0x04, 0x01, 0x0C,
+ 0x01, 0x16, 0x01, 0x1E, 0x01, 0x26, 0x01, 0x2E, 0x01, 0x36, 0x01, 0x40, 0x01, 0x48, 0x01, 0x50,
+ 0x01, 0x58, 0x01, 0x60, 0x01, 0x68, 0x01, 0x72, 0x00, 0x03, 0x1F, 0xBE, 0x03, 0x43, 0x03, 0x00,
+ 0x00, 0x03, 0x1F, 0xBE, 0x03, 0x43, 0x03, 0x01, 0x00, 0x03, 0x21, 0x26, 0x03, 0x43, 0x03, 0x00,
+ 0x00, 0x03, 0x21, 0x26, 0x03, 0x43, 0x03, 0x01, 0x00, 0x03, 0x1F, 0xB3, 0x03, 0x13, 0x03, 0x40,
+ 0x00, 0x03, 0x1F, 0xB3, 0x03, 0x14, 0x03, 0x40, 0x00, 0x03, 0x1F, 0xB3, 0x03, 0x13, 0x03, 0x41,
+ 0x00, 0x03, 0x1F, 0xB3, 0x03, 0x14, 0x03, 0x41, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x43, 0x03, 0x42,
+ 0x03, 0x45, 0x00, 0x03, 0x1F, 0xBC, 0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x1F, 0xBC, 0x03, 0x14,
+ 0x03, 0x40, 0x00, 0x03, 0x1F, 0xBC, 0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x1F, 0xBC, 0x03, 0x14,
+ 0x03, 0x41, 0x00, 0x04, 0x03, 0x91, 0x03, 0x43, 0x03, 0x42, 0x03, 0x45, 0x00, 0x03, 0x1F, 0xC3,
+ 0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x1F, 0xC3, 0x03, 0x14, 0x03, 0x40, 0x00, 0x03, 0x1F, 0xC3,
+ 0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x1F, 0xC3, 0x03, 0x14, 0x03, 0x41, 0x00, 0x04, 0x03, 0xB7,
+ 0x03, 0x43, 0x03, 0x42, 0x03, 0x45, 0x00, 0x03, 0x1F, 0xCC, 0x03, 0x13, 0x03, 0x40, 0x00, 0x03,
+ 0x1F, 0xCC, 0x03, 0x14, 0x03, 0x40, 0x00, 0x03, 0x1F, 0xCC, 0x03, 0x13, 0x03, 0x41, 0x00, 0x03,
+ 0x1F, 0xCC, 0x03, 0x14, 0x03, 0x41, 0x00, 0x04, 0x03, 0x97, 0x03, 0x43, 0x03, 0x42, 0x03, 0x45,
+ 0x00, 0x03, 0x1F, 0xF3, 0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x1F, 0xF3, 0x03, 0x14, 0x03, 0x40,
+ 0x00, 0x03, 0x1F, 0xF3, 0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x1F, 0xF3, 0x03, 0x14, 0x03, 0x41,
+ 0x00, 0x04, 0x03, 0xC9, 0x03, 0x43, 0x03, 0x42, 0x03, 0x45, 0x00, 0x03, 0x21, 0x26, 0x03, 0x43,
+ 0x03, 0x45, 0x00, 0x03, 0x1F, 0xFC, 0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x1F, 0xFC, 0x03, 0x14,
+ 0x03, 0x40, 0x00, 0x03, 0x1F, 0xFC, 0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x1F, 0xFC, 0x03, 0x14,
+ 0x03, 0x41, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x43, 0x03, 0x42, 0x03, 0x45, 0x00, 0x04, 0x21, 0x26,
+ 0x03, 0x14, 0x03, 0x42, 0x03, 0x45, 0x00, 0x01, 0x00, 0x24, 0x1F, 0x32, 0x1F, 0x34, 0x1F, 0x6A,
+ 0x1F, 0x6C, 0x1F, 0x82, 0x1F, 0x83, 0x1F, 0x84, 0x1F, 0x85, 0x1F, 0x86, 0x1F, 0x8A, 0x1F, 0x8B,
+ 0x1F, 0x8C, 0x1F, 0x8D, 0x1F, 0x8E, 0x1F, 0x92, 0x1F, 0x93, 0x1F, 0x94, 0x1F, 0x95, 0x1F, 0x96,
+ 0x1F, 0x9A, 0x1F, 0x9B, 0x1F, 0x9C, 0x1F, 0x9D, 0x1F, 0x9E, 0x1F, 0xA2, 0x1F, 0xA3, 0x1F, 0xA4,
+ 0x1F, 0xA5, 0x1F, 0xA6, 0x1F, 0xA8, 0x1F, 0xAA, 0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD, 0x1F, 0xAE,
+ 0x1F, 0xAF, 0x00, 0x01, 0x01, 0x94, 0x00, 0x24, 0x00, 0x4E, 0x00, 0x56, 0x00, 0x5E, 0x00, 0x66,
+ 0x00, 0x6E, 0x00, 0x76, 0x00, 0x80, 0x00, 0x88, 0x00, 0x92, 0x00, 0x9C, 0x00, 0xA4, 0x00, 0xAE,
+ 0x00, 0xB6, 0x00, 0xC0, 0x00, 0xCA, 0x00, 0xD2, 0x00, 0xDC, 0x00, 0xE4, 0x00, 0xEE, 0x00, 0xF8,
+ 0x01, 0x00, 0x01, 0x0A, 0x01, 0x12, 0x01, 0x1C, 0x01, 0x26, 0x01, 0x2E, 0x01, 0x38, 0x01, 0x40,
+ 0x01, 0x4A, 0x01, 0x54, 0x01, 0x5C, 0x01, 0x64, 0x01, 0x6E, 0x01, 0x76, 0x01, 0x80, 0x01, 0x8A,
+ 0x00, 0x03, 0x1F, 0xBE, 0x03, 0x43, 0x03, 0x40, 0x00, 0x03, 0x1F, 0xBE, 0x03, 0x43, 0x03, 0x41,
+ 0x00, 0x03, 0x21, 0x26, 0x03, 0x43, 0x03, 0x40, 0x00, 0x03, 0x21, 0x26, 0x03, 0x43, 0x03, 0x41,
+ 0x00, 0x03, 0x1F, 0xB3, 0x03, 0x43, 0x03, 0x00, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x14, 0x03, 0x00,
+ 0x03, 0x45, 0x00, 0x03, 0x1F, 0xB3, 0x03, 0x43, 0x03, 0x01, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x14,
+ 0x03, 0x01, 0x03, 0x45, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x43, 0x03, 0x45, 0x03, 0x42, 0x00, 0x03,
+ 0x1F, 0xBC, 0x03, 0x43, 0x03, 0x00, 0x00, 0x04, 0x03, 0x91, 0x03, 0x14, 0x03, 0x00, 0x03, 0x45,
+ 0x00, 0x03, 0x1F, 0xBC, 0x03, 0x43, 0x03, 0x01, 0x00, 0x04, 0x03, 0x91, 0x03, 0x14, 0x03, 0x01,
+ 0x03, 0x45, 0x00, 0x04, 0x03, 0x91, 0x03, 0x43, 0x03, 0x45, 0x03, 0x42, 0x00, 0x03, 0x1F, 0xC3,
+ 0x03, 0x43, 0x03, 0x00, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x14, 0x03, 0x00, 0x03, 0x45, 0x00, 0x03,
+ 0x1F, 0xC3, 0x03, 0x43, 0x03, 0x01, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x14, 0x03, 0x01, 0x03, 0x45,
+ 0x00, 0x04, 0x03, 0xB7, 0x03, 0x43, 0x03, 0x45, 0x03, 0x42, 0x00, 0x03, 0x1F, 0xCC, 0x03, 0x43,
+ 0x03, 0x00, 0x00, 0x04, 0x03, 0x97, 0x03, 0x14, 0x03, 0x00, 0x03, 0x45, 0x00, 0x03, 0x1F, 0xCC,
+ 0x03, 0x43, 0x03, 0x01, 0x00, 0x04, 0x03, 0x97, 0x03, 0x14, 0x03, 0x01, 0x03, 0x45, 0x00, 0x04,
+ 0x03, 0x97, 0x03, 0x43, 0x03, 0x45, 0x03, 0x42, 0x00, 0x03, 0x1F, 0xF3, 0x03, 0x43, 0x03, 0x00,
+ 0x00, 0x04, 0x03, 0xC9, 0x03, 0x14, 0x03, 0x00, 0x03, 0x45, 0x00, 0x03, 0x1F, 0xF3, 0x03, 0x43,
+ 0x03, 0x01, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x14, 0x03, 0x01, 0x03, 0x45, 0x00, 0x04, 0x03, 0xC9,
+ 0x03, 0x43, 0x03, 0x45, 0x03, 0x42, 0x00, 0x03, 0x21, 0x26, 0x03, 0x45, 0x03, 0x13, 0x00, 0x03,
+ 0x1F, 0xFC, 0x03, 0x43, 0x03, 0x00, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x14, 0x03, 0x00, 0x03, 0x45,
+ 0x00, 0x03, 0x1F, 0xFC, 0x03, 0x43, 0x03, 0x01, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x14, 0x03, 0x01,
+ 0x03, 0x45, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x43, 0x03, 0x45, 0x03, 0x42, 0x00, 0x04, 0x21, 0x26,
+ 0x03, 0x14, 0x03, 0x45, 0x03, 0x42, 0x00, 0x01, 0x00, 0x24, 0x1F, 0x32, 0x1F, 0x34, 0x1F, 0x6A,
+ 0x1F, 0x6C, 0x1F, 0x82, 0x1F, 0x83, 0x1F, 0x84, 0x1F, 0x85, 0x1F, 0x86, 0x1F, 0x8A, 0x1F, 0x8B,
+ 0x1F, 0x8C, 0x1F, 0x8D, 0x1F, 0x8E, 0x1F, 0x92, 0x1F, 0x93, 0x1F, 0x94, 0x1F, 0x95, 0x1F, 0x96,
+ 0x1F, 0x9A, 0x1F, 0x9B, 0x1F, 0x9C, 0x1F, 0x9D, 0x1F, 0x9E, 0x1F, 0xA2, 0x1F, 0xA3, 0x1F, 0xA4,
+ 0x1F, 0xA5, 0x1F, 0xA6, 0x1F, 0xA8, 0x1F, 0xAA, 0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD, 0x1F, 0xAE,
+ 0x1F, 0xAF, 0x00, 0x01, 0x01, 0x6C, 0x00, 0x20, 0x00, 0x46, 0x00, 0x4E, 0x00, 0x58, 0x00, 0x60,
+ 0x00, 0x6A, 0x00, 0x74, 0x00, 0x7C, 0x00, 0x86, 0x00, 0x8E, 0x00, 0x98, 0x00, 0xA2, 0x00, 0xAA,
+ 0x00, 0xB4, 0x00, 0xBC, 0x00, 0xC6, 0x00, 0xD0, 0x00, 0xD8, 0x00, 0xE2, 0x00, 0xEA, 0x00, 0xF4,
+ 0x00, 0xFE, 0x01, 0x06, 0x01, 0x10, 0x01, 0x18, 0x01, 0x22, 0x01, 0x2C, 0x01, 0x34, 0x01, 0x3C,
+ 0x01, 0x46, 0x01, 0x4E, 0x01, 0x58, 0x01, 0x62, 0x00, 0x03, 0x1F, 0xB3, 0x03, 0x43, 0x03, 0x40,
+ 0x00, 0x04, 0x03, 0xB1, 0x03, 0x14, 0x03, 0x40, 0x03, 0x45, 0x00, 0x03, 0x1F, 0xB3, 0x03, 0x43,
+ 0x03, 0x41, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x14, 0x03, 0x41, 0x03, 0x45, 0x00, 0x04, 0x03, 0xB1,
+ 0x03, 0x45, 0x03, 0x13, 0x03, 0x42, 0x00, 0x03, 0x1F, 0xBC, 0x03, 0x43, 0x03, 0x40, 0x00, 0x04,
+ 0x03, 0x91, 0x03, 0x14, 0x03, 0x40, 0x03, 0x45, 0x00, 0x03, 0x1F, 0xBC, 0x03, 0x43, 0x03, 0x41,
+ 0x00, 0x04, 0x03, 0x91, 0x03, 0x14, 0x03, 0x41, 0x03, 0x45, 0x00, 0x04, 0x03, 0x91, 0x03, 0x45,
+ 0x03, 0x13, 0x03, 0x42, 0x00, 0x03, 0x1F, 0xC3, 0x03, 0x43, 0x03, 0x40, 0x00, 0x04, 0x03, 0xB7,
+ 0x03, 0x14, 0x03, 0x40, 0x03, 0x45, 0x00, 0x03, 0x1F, 0xC3, 0x03, 0x43, 0x03, 0x41, 0x00, 0x04,
+ 0x03, 0xB7, 0x03, 0x14, 0x03, 0x41, 0x03, 0x45, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x45, 0x03, 0x13,
+ 0x03, 0x42, 0x00, 0x03, 0x1F, 0xCC, 0x03, 0x43, 0x03, 0x40, 0x00, 0x04, 0x03, 0x97, 0x03, 0x14,
+ 0x03, 0x40, 0x03, 0x45, 0x00, 0x03, 0x1F, 0xCC, 0x03, 0x43, 0x03, 0x41, 0x00, 0x04, 0x03, 0x97,
+ 0x03, 0x14, 0x03, 0x41, 0x03, 0x45, 0x00, 0x04, 0x03, 0x97, 0x03, 0x45, 0x03, 0x13, 0x03, 0x42,
+ 0x00, 0x03, 0x1F, 0xF3, 0x03, 0x43, 0x03, 0x40, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x14, 0x03, 0x40,
+ 0x03, 0x45, 0x00, 0x03, 0x1F, 0xF3, 0x03, 0x43, 0x03, 0x41, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x14,
+ 0x03, 0x41, 0x03, 0x45, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x45, 0x03, 0x13, 0x03, 0x42, 0x00, 0x03,
+ 0x21, 0x26, 0x03, 0x45, 0x03, 0x43, 0x00, 0x03, 0x1F, 0xFC, 0x03, 0x43, 0x03, 0x40, 0x00, 0x04,
+ 0x03, 0xA9, 0x03, 0x14, 0x03, 0x40, 0x03, 0x45, 0x00, 0x03, 0x1F, 0xFC, 0x03, 0x43, 0x03, 0x41,
+ 0x00, 0x04, 0x03, 0xA9, 0x03, 0x14, 0x03, 0x41, 0x03, 0x45, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x45,
+ 0x03, 0x13, 0x03, 0x42, 0x00, 0x04, 0x21, 0x26, 0x03, 0x45, 0x03, 0x14, 0x03, 0x42, 0x00, 0x01,
+ 0x00, 0x20, 0x1F, 0x82, 0x1F, 0x83, 0x1F, 0x84, 0x1F, 0x85, 0x1F, 0x86, 0x1F, 0x8A, 0x1F, 0x8B,
+ 0x1F, 0x8C, 0x1F, 0x8D, 0x1F, 0x8E, 0x1F, 0x92, 0x1F, 0x93, 0x1F, 0x94, 0x1F, 0x95, 0x1F, 0x96,
+ 0x1F, 0x9A, 0x1F, 0x9B, 0x1F, 0x9C, 0x1F, 0x9D, 0x1F, 0x9E, 0x1F, 0xA2, 0x1F, 0xA3, 0x1F, 0xA4,
+ 0x1F, 0xA5, 0x1F, 0xA6, 0x1F, 0xA8, 0x1F, 0xAA, 0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD, 0x1F, 0xAE,
+ 0x1F, 0xAF, 0x00, 0x01, 0x01, 0x6E, 0x00, 0x1E, 0x00, 0x42, 0x00, 0x4C, 0x00, 0x56, 0x00, 0x60,
+ 0x00, 0x6A, 0x00, 0x74, 0x00, 0x7E, 0x00, 0x88, 0x00, 0x92, 0x00, 0x9C, 0x00, 0xA6, 0x00, 0xB0,
+ 0x00, 0xBA, 0x00, 0xC4, 0x00, 0xCE, 0x00, 0xD8, 0x00, 0xE2, 0x00, 0xEC, 0x00, 0xF6, 0x01, 0x00,
+ 0x01, 0x0A, 0x01, 0x14, 0x01, 0x1E, 0x01, 0x28, 0x01, 0x32, 0x01, 0x3C, 0x01, 0x46, 0x01, 0x50,
+ 0x01, 0x5A, 0x01, 0x64, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x13, 0x03, 0x00, 0x03, 0x45, 0x00, 0x04,
+ 0x03, 0xB1, 0x03, 0x14, 0x03, 0x45, 0x03, 0x00, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x13, 0x03, 0x01,
+ 0x03, 0x45, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x14, 0x03, 0x45, 0x03, 0x01, 0x00, 0x04, 0x03, 0xB1,
+ 0x03, 0x45, 0x03, 0x43, 0x03, 0x42, 0x00, 0x04, 0x03, 0x91, 0x03, 0x13, 0x03, 0x00, 0x03, 0x45,
+ 0x00, 0x04, 0x03, 0x91, 0x03, 0x14, 0x03, 0x45, 0x03, 0x00, 0x00, 0x04, 0x03, 0x91, 0x03, 0x13,
+ 0x03, 0x01, 0x03, 0x45, 0x00, 0x04, 0x03, 0x91, 0x03, 0x14, 0x03, 0x45, 0x03, 0x01, 0x00, 0x04,
+ 0x03, 0x91, 0x03, 0x45, 0x03, 0x43, 0x03, 0x42, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x13, 0x03, 0x00,
+ 0x03, 0x45, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x14, 0x03, 0x45, 0x03, 0x00, 0x00, 0x04, 0x03, 0xB7,
+ 0x03, 0x13, 0x03, 0x01, 0x03, 0x45, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x14, 0x03, 0x45, 0x03, 0x01,
+ 0x00, 0x04, 0x03, 0xB7, 0x03, 0x45, 0x03, 0x43, 0x03, 0x42, 0x00, 0x04, 0x03, 0x97, 0x03, 0x13,
+ 0x03, 0x00, 0x03, 0x45, 0x00, 0x04, 0x03, 0x97, 0x03, 0x14, 0x03, 0x45, 0x03, 0x00, 0x00, 0x04,
+ 0x03, 0x97, 0x03, 0x13, 0x03, 0x01, 0x03, 0x45, 0x00, 0x04, 0x03, 0x97, 0x03, 0x14, 0x03, 0x45,
+ 0x03, 0x01, 0x00, 0x04, 0x03, 0x97, 0x03, 0x45, 0x03, 0x43, 0x03, 0x42, 0x00, 0x04, 0x03, 0xC9,
+ 0x03, 0x13, 0x03, 0x00, 0x03, 0x45, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x14, 0x03, 0x45, 0x03, 0x00,
+ 0x00, 0x04, 0x03, 0xC9, 0x03, 0x13, 0x03, 0x01, 0x03, 0x45, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x14,
+ 0x03, 0x45, 0x03, 0x01, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x45, 0x03, 0x43, 0x03, 0x42, 0x00, 0x04,
+ 0x03, 0xA9, 0x03, 0x13, 0x03, 0x00, 0x03, 0x45, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x14, 0x03, 0x45,
+ 0x03, 0x00, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x13, 0x03, 0x01, 0x03, 0x45, 0x00, 0x04, 0x03, 0xA9,
+ 0x03, 0x14, 0x03, 0x45, 0x03, 0x01, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x45, 0x03, 0x43, 0x03, 0x42,
+ 0x00, 0x01, 0x00, 0x1E, 0x1F, 0x82, 0x1F, 0x83, 0x1F, 0x84, 0x1F, 0x85, 0x1F, 0x86, 0x1F, 0x8A,
+ 0x1F, 0x8B, 0x1F, 0x8C, 0x1F, 0x8D, 0x1F, 0x8E, 0x1F, 0x92, 0x1F, 0x93, 0x1F, 0x94, 0x1F, 0x95,
+ 0x1F, 0x96, 0x1F, 0x9A, 0x1F, 0x9B, 0x1F, 0x9C, 0x1F, 0x9D, 0x1F, 0x9E, 0x1F, 0xA2, 0x1F, 0xA3,
+ 0x1F, 0xA4, 0x1F, 0xA5, 0x1F, 0xA6, 0x1F, 0xAA, 0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD, 0x1F, 0xAE,
+ 0x00, 0x01, 0x01, 0x32, 0x00, 0x19, 0x00, 0x38, 0x00, 0x42, 0x00, 0x4C, 0x00, 0x56, 0x00, 0x60,
+ 0x00, 0x6A, 0x00, 0x74, 0x00, 0x7E, 0x00, 0x88, 0x00, 0x92, 0x00, 0x9C, 0x00, 0xA6, 0x00, 0xB0,
+ 0x00, 0xBA, 0x00, 0xC4, 0x00, 0xCE, 0x00, 0xD8, 0x00, 0xE2, 0x00, 0xEC, 0x00, 0xF6, 0x01, 0x00,
+ 0x01, 0x0A, 0x01, 0x14, 0x01, 0x1E, 0x01, 0x28, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x13, 0x03, 0x40,
+ 0x03, 0x45, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x14, 0x03, 0x45, 0x03, 0x40, 0x00, 0x04, 0x03, 0xB1,
+ 0x03, 0x13, 0x03, 0x41, 0x03, 0x45, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x14, 0x03, 0x45, 0x03, 0x41,
+ 0x00, 0x04, 0x03, 0x91, 0x03, 0x13, 0x03, 0x40, 0x03, 0x45, 0x00, 0x04, 0x03, 0x91, 0x03, 0x14,
+ 0x03, 0x45, 0x03, 0x40, 0x00, 0x04, 0x03, 0x91, 0x03, 0x13, 0x03, 0x41, 0x03, 0x45, 0x00, 0x04,
+ 0x03, 0x91, 0x03, 0x14, 0x03, 0x45, 0x03, 0x41, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x13, 0x03, 0x40,
+ 0x03, 0x45, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x14, 0x03, 0x45, 0x03, 0x40, 0x00, 0x04, 0x03, 0xB7,
+ 0x03, 0x13, 0x03, 0x41, 0x03, 0x45, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x14, 0x03, 0x45, 0x03, 0x41,
+ 0x00, 0x04, 0x03, 0x97, 0x03, 0x13, 0x03, 0x40, 0x03, 0x45, 0x00, 0x04, 0x03, 0x97, 0x03, 0x14,
+ 0x03, 0x45, 0x03, 0x40, 0x00, 0x04, 0x03, 0x97, 0x03, 0x13, 0x03, 0x41, 0x03, 0x45, 0x00, 0x04,
+ 0x03, 0x97, 0x03, 0x14, 0x03, 0x45, 0x03, 0x41, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x13, 0x03, 0x40,
+ 0x03, 0x45, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x14, 0x03, 0x45, 0x03, 0x40, 0x00, 0x04, 0x03, 0xC9,
+ 0x03, 0x13, 0x03, 0x41, 0x03, 0x45, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x14, 0x03, 0x45, 0x03, 0x41,
+ 0x00, 0x04, 0x03, 0xA9, 0x03, 0x13, 0x03, 0x40, 0x03, 0x45, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x14,
+ 0x03, 0x45, 0x03, 0x40, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x13, 0x03, 0x41, 0x03, 0x45, 0x00, 0x04,
+ 0x03, 0xA9, 0x03, 0x14, 0x03, 0x45, 0x03, 0x41, 0x00, 0x04, 0x21, 0x26, 0x03, 0x13, 0x03, 0x42,
+ 0x03, 0x45, 0x00, 0x01, 0x00, 0x19, 0x1F, 0x82, 0x1F, 0x83, 0x1F, 0x84, 0x1F, 0x85, 0x1F, 0x8A,
+ 0x1F, 0x8B, 0x1F, 0x8C, 0x1F, 0x8D, 0x1F, 0x92, 0x1F, 0x93, 0x1F, 0x94, 0x1F, 0x95, 0x1F, 0x9A,
+ 0x1F, 0x9B, 0x1F, 0x9C, 0x1F, 0x9D, 0x1F, 0xA2, 0x1F, 0xA3, 0x1F, 0xA4, 0x1F, 0xA5, 0x1F, 0xAA,
+ 0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD, 0x1F, 0xAE, 0x00, 0x01, 0x01, 0x32, 0x00, 0x19, 0x00, 0x38,
+ 0x00, 0x42, 0x00, 0x4C, 0x00, 0x56, 0x00, 0x60, 0x00, 0x6A, 0x00, 0x74, 0x00, 0x7E, 0x00, 0x88,
+ 0x00, 0x92, 0x00, 0x9C, 0x00, 0xA6, 0x00, 0xB0, 0x00, 0xBA, 0x00, 0xC4, 0x00, 0xCE, 0x00, 0xD8,
+ 0x00, 0xE2, 0x00, 0xEC, 0x00, 0xF6, 0x01, 0x00, 0x01, 0x0A, 0x01, 0x14, 0x01, 0x1E, 0x01, 0x28,
+ 0x00, 0x04, 0x03, 0xB1, 0x03, 0x13, 0x03, 0x45, 0x03, 0x00, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x45,
+ 0x03, 0x14, 0x03, 0x00, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x13, 0x03, 0x45, 0x03, 0x01, 0x00, 0x04,
+ 0x03, 0xB1, 0x03, 0x45, 0x03, 0x14, 0x03, 0x01, 0x00, 0x04, 0x03, 0x91, 0x03, 0x13, 0x03, 0x45,
+ 0x03, 0x00, 0x00, 0x04, 0x03, 0x91, 0x03, 0x45, 0x03, 0x14, 0x03, 0x00, 0x00, 0x04, 0x03, 0x91,
+ 0x03, 0x13, 0x03, 0x45, 0x03, 0x01, 0x00, 0x04, 0x03, 0x91, 0x03, 0x45, 0x03, 0x14, 0x03, 0x01,
+ 0x00, 0x04, 0x03, 0xB7, 0x03, 0x13, 0x03, 0x45, 0x03, 0x00, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x45,
+ 0x03, 0x14, 0x03, 0x00, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x13, 0x03, 0x45, 0x03, 0x01, 0x00, 0x04,
+ 0x03, 0xB7, 0x03, 0x45, 0x03, 0x14, 0x03, 0x01, 0x00, 0x04, 0x03, 0x97, 0x03, 0x13, 0x03, 0x45,
+ 0x03, 0x00, 0x00, 0x04, 0x03, 0x97, 0x03, 0x45, 0x03, 0x14, 0x03, 0x00, 0x00, 0x04, 0x03, 0x97,
+ 0x03, 0x13, 0x03, 0x45, 0x03, 0x01, 0x00, 0x04, 0x03, 0x97, 0x03, 0x45, 0x03, 0x14, 0x03, 0x01,
+ 0x00, 0x04, 0x03, 0xC9, 0x03, 0x13, 0x03, 0x45, 0x03, 0x00, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x45,
+ 0x03, 0x14, 0x03, 0x00, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x13, 0x03, 0x45, 0x03, 0x01, 0x00, 0x04,
+ 0x03, 0xC9, 0x03, 0x45, 0x03, 0x14, 0x03, 0x01, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x13, 0x03, 0x45,
+ 0x03, 0x00, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x45, 0x03, 0x14, 0x03, 0x00, 0x00, 0x04, 0x03, 0xA9,
+ 0x03, 0x13, 0x03, 0x45, 0x03, 0x01, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x45, 0x03, 0x14, 0x03, 0x01,
+ 0x00, 0x04, 0x21, 0x26, 0x03, 0x13, 0x03, 0x45, 0x03, 0x42, 0x00, 0x01, 0x00, 0x19, 0x1F, 0x82,
+ 0x1F, 0x83, 0x1F, 0x84, 0x1F, 0x85, 0x1F, 0x8A, 0x1F, 0x8B, 0x1F, 0x8C, 0x1F, 0x8D, 0x1F, 0x92,
+ 0x1F, 0x93, 0x1F, 0x94, 0x1F, 0x95, 0x1F, 0x9A, 0x1F, 0x9B, 0x1F, 0x9C, 0x1F, 0x9D, 0x1F, 0xA2,
+ 0x1F, 0xA3, 0x1F, 0xA4, 0x1F, 0xA5, 0x1F, 0xAA, 0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD, 0x1F, 0xAE,
+ 0x00, 0x01, 0x01, 0x32, 0x00, 0x19, 0x00, 0x38, 0x00, 0x42, 0x00, 0x4C, 0x00, 0x56, 0x00, 0x60,
+ 0x00, 0x6A, 0x00, 0x74, 0x00, 0x7E, 0x00, 0x88, 0x00, 0x92, 0x00, 0x9C, 0x00, 0xA6, 0x00, 0xB0,
+ 0x00, 0xBA, 0x00, 0xC4, 0x00, 0xCE, 0x00, 0xD8, 0x00, 0xE2, 0x00, 0xEC, 0x00, 0xF6, 0x01, 0x00,
+ 0x01, 0x0A, 0x01, 0x14, 0x01, 0x1E, 0x01, 0x28, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x13, 0x03, 0x45,
+ 0x03, 0x40, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x45, 0x03, 0x14, 0x03, 0x40, 0x00, 0x04, 0x03, 0xB1,
+ 0x03, 0x13, 0x03, 0x45, 0x03, 0x41, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x45, 0x03, 0x14, 0x03, 0x41,
+ 0x00, 0x04, 0x03, 0x91, 0x03, 0x13, 0x03, 0x45, 0x03, 0x40, 0x00, 0x04, 0x03, 0x91, 0x03, 0x45,
+ 0x03, 0x14, 0x03, 0x40, 0x00, 0x04, 0x03, 0x91, 0x03, 0x13, 0x03, 0x45, 0x03, 0x41, 0x00, 0x04,
+ 0x03, 0x91, 0x03, 0x45, 0x03, 0x14, 0x03, 0x41, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x13, 0x03, 0x45,
+ 0x03, 0x40, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x45, 0x03, 0x14, 0x03, 0x40, 0x00, 0x04, 0x03, 0xB7,
+ 0x03, 0x13, 0x03, 0x45, 0x03, 0x41, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x45, 0x03, 0x14, 0x03, 0x41,
+ 0x00, 0x04, 0x03, 0x97, 0x03, 0x13, 0x03, 0x45, 0x03, 0x40, 0x00, 0x04, 0x03, 0x97, 0x03, 0x45,
+ 0x03, 0x14, 0x03, 0x40, 0x00, 0x04, 0x03, 0x97, 0x03, 0x13, 0x03, 0x45, 0x03, 0x41, 0x00, 0x04,
+ 0x03, 0x97, 0x03, 0x45, 0x03, 0x14, 0x03, 0x41, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x13, 0x03, 0x45,
+ 0x03, 0x40, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x45, 0x03, 0x14, 0x03, 0x40, 0x00, 0x04, 0x03, 0xC9,
+ 0x03, 0x13, 0x03, 0x45, 0x03, 0x41, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x45, 0x03, 0x14, 0x03, 0x41,
+ 0x00, 0x04, 0x03, 0xA9, 0x03, 0x13, 0x03, 0x45, 0x03, 0x40, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x45,
+ 0x03, 0x14, 0x03, 0x40, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x13, 0x03, 0x45, 0x03, 0x41, 0x00, 0x04,
+ 0x03, 0xA9, 0x03, 0x45, 0x03, 0x14, 0x03, 0x41, 0x00, 0x04, 0x21, 0x26, 0x03, 0x43, 0x03, 0x42,
+ 0x03, 0x45, 0x00, 0x01, 0x00, 0x19, 0x1F, 0x82, 0x1F, 0x83, 0x1F, 0x84, 0x1F, 0x85, 0x1F, 0x8A,
+ 0x1F, 0x8B, 0x1F, 0x8C, 0x1F, 0x8D, 0x1F, 0x92, 0x1F, 0x93, 0x1F, 0x94, 0x1F, 0x95, 0x1F, 0x9A,
+ 0x1F, 0x9B, 0x1F, 0x9C, 0x1F, 0x9D, 0x1F, 0xA2, 0x1F, 0xA3, 0x1F, 0xA4, 0x1F, 0xA5, 0x1F, 0xAA,
+ 0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD, 0x1F, 0xAE, 0x00, 0x01, 0x00, 0xBA, 0x00, 0x0F, 0x00, 0x24,
+ 0x00, 0x2E, 0x00, 0x38, 0x00, 0x42, 0x00, 0x4C, 0x00, 0x56, 0x00, 0x60, 0x00, 0x6A, 0x00, 0x74,
+ 0x00, 0x7E, 0x00, 0x88, 0x00, 0x92, 0x00, 0x9C, 0x00, 0xA6, 0x00, 0xB0, 0x00, 0x04, 0x03, 0xB1,
+ 0x03, 0x43, 0x03, 0x00, 0x03, 0x45, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x43, 0x03, 0x01, 0x03, 0x45,
+ 0x00, 0x04, 0x03, 0x91, 0x03, 0x43, 0x03, 0x00, 0x03, 0x45, 0x00, 0x04, 0x03, 0x91, 0x03, 0x43,
+ 0x03, 0x01, 0x03, 0x45, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x43, 0x03, 0x00, 0x03, 0x45, 0x00, 0x04,
+ 0x03, 0xB7, 0x03, 0x43, 0x03, 0x01, 0x03, 0x45, 0x00, 0x04, 0x03, 0x97, 0x03, 0x43, 0x03, 0x00,
+ 0x03, 0x45, 0x00, 0x04, 0x03, 0x97, 0x03, 0x43, 0x03, 0x01, 0x03, 0x45, 0x00, 0x04, 0x03, 0xC9,
+ 0x03, 0x43, 0x03, 0x00, 0x03, 0x45, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x43, 0x03, 0x01, 0x03, 0x45,
+ 0x00, 0x04, 0x03, 0xA9, 0x03, 0x43, 0x03, 0x00, 0x03, 0x45, 0x00, 0x04, 0x21, 0x26, 0x03, 0x14,
+ 0x03, 0x00, 0x03, 0x45, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x43, 0x03, 0x01, 0x03, 0x45, 0x00, 0x04,
+ 0x21, 0x26, 0x03, 0x14, 0x03, 0x01, 0x03, 0x45, 0x00, 0x04, 0x21, 0x26, 0x03, 0x43, 0x03, 0x45,
+ 0x03, 0x42, 0x00, 0x01, 0x00, 0x0F, 0x1F, 0x82, 0x1F, 0x84, 0x1F, 0x8A, 0x1F, 0x8C, 0x1F, 0x92,
+ 0x1F, 0x94, 0x1F, 0x9A, 0x1F, 0x9C, 0x1F, 0xA2, 0x1F, 0xA4, 0x1F, 0xAA, 0x1F, 0xAB, 0x1F, 0xAC,
+ 0x1F, 0xAD, 0x1F, 0xAE, 0x00, 0x01, 0x00, 0xBA, 0x00, 0x0F, 0x00, 0x24, 0x00, 0x2E, 0x00, 0x38,
+ 0x00, 0x42, 0x00, 0x4C, 0x00, 0x56, 0x00, 0x60, 0x00, 0x6A, 0x00, 0x74, 0x00, 0x7E, 0x00, 0x88,
+ 0x00, 0x92, 0x00, 0x9C, 0x00, 0xA6, 0x00, 0xB0, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x43, 0x03, 0x40,
+ 0x03, 0x45, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x43, 0x03, 0x41, 0x03, 0x45, 0x00, 0x04, 0x03, 0x91,
+ 0x03, 0x43, 0x03, 0x40, 0x03, 0x45, 0x00, 0x04, 0x03, 0x91, 0x03, 0x43, 0x03, 0x41, 0x03, 0x45,
+ 0x00, 0x04, 0x03, 0xB7, 0x03, 0x43, 0x03, 0x40, 0x03, 0x45, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x43,
+ 0x03, 0x41, 0x03, 0x45, 0x00, 0x04, 0x03, 0x97, 0x03, 0x43, 0x03, 0x40, 0x03, 0x45, 0x00, 0x04,
+ 0x03, 0x97, 0x03, 0x43, 0x03, 0x41, 0x03, 0x45, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x43, 0x03, 0x40,
+ 0x03, 0x45, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x43, 0x03, 0x41, 0x03, 0x45, 0x00, 0x04, 0x03, 0xA9,
+ 0x03, 0x43, 0x03, 0x40, 0x03, 0x45, 0x00, 0x04, 0x21, 0x26, 0x03, 0x14, 0x03, 0x40, 0x03, 0x45,
+ 0x00, 0x04, 0x03, 0xA9, 0x03, 0x43, 0x03, 0x41, 0x03, 0x45, 0x00, 0x04, 0x21, 0x26, 0x03, 0x14,
+ 0x03, 0x41, 0x03, 0x45, 0x00, 0x04, 0x21, 0x26, 0x03, 0x45, 0x03, 0x13, 0x03, 0x42, 0x00, 0x01,
+ 0x00, 0x0F, 0x1F, 0x82, 0x1F, 0x84, 0x1F, 0x8A, 0x1F, 0x8C, 0x1F, 0x92, 0x1F, 0x94, 0x1F, 0x9A,
+ 0x1F, 0x9C, 0x1F, 0xA2, 0x1F, 0xA4, 0x1F, 0xAA, 0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD, 0x1F, 0xAE,
+ 0x00, 0x01, 0x00, 0xBA, 0x00, 0x0F, 0x00, 0x24, 0x00, 0x2E, 0x00, 0x38, 0x00, 0x42, 0x00, 0x4C,
+ 0x00, 0x56, 0x00, 0x60, 0x00, 0x6A, 0x00, 0x74, 0x00, 0x7E, 0x00, 0x88, 0x00, 0x92, 0x00, 0x9C,
+ 0x00, 0xA6, 0x00, 0xB0, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x43, 0x03, 0x45, 0x03, 0x00, 0x00, 0x04,
+ 0x03, 0xB1, 0x03, 0x43, 0x03, 0x45, 0x03, 0x01, 0x00, 0x04, 0x03, 0x91, 0x03, 0x43, 0x03, 0x45,
+ 0x03, 0x00, 0x00, 0x04, 0x03, 0x91, 0x03, 0x43, 0x03, 0x45, 0x03, 0x01, 0x00, 0x04, 0x03, 0xB7,
+ 0x03, 0x43, 0x03, 0x45, 0x03, 0x00, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x43, 0x03, 0x45, 0x03, 0x01,
+ 0x00, 0x04, 0x03, 0x97, 0x03, 0x43, 0x03, 0x45, 0x03, 0x00, 0x00, 0x04, 0x03, 0x97, 0x03, 0x43,
+ 0x03, 0x45, 0x03, 0x01, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x43, 0x03, 0x45, 0x03, 0x00, 0x00, 0x04,
+ 0x03, 0xC9, 0x03, 0x43, 0x03, 0x45, 0x03, 0x01, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x43, 0x03, 0x45,
+ 0x03, 0x00, 0x00, 0x04, 0x21, 0x26, 0x03, 0x14, 0x03, 0x45, 0x03, 0x00, 0x00, 0x04, 0x03, 0xA9,
+ 0x03, 0x43, 0x03, 0x45, 0x03, 0x01, 0x00, 0x04, 0x21, 0x26, 0x03, 0x14, 0x03, 0x45, 0x03, 0x01,
+ 0x00, 0x04, 0x21, 0x26, 0x03, 0x45, 0x03, 0x43, 0x03, 0x42, 0x00, 0x01, 0x00, 0x0F, 0x1F, 0x82,
+ 0x1F, 0x84, 0x1F, 0x8A, 0x1F, 0x8C, 0x1F, 0x92, 0x1F, 0x94, 0x1F, 0x9A, 0x1F, 0x9C, 0x1F, 0xA2,
+ 0x1F, 0xA4, 0x1F, 0xAA, 0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD, 0x1F, 0xAE, 0x00, 0x01, 0x00, 0xAE,
+ 0x00, 0x0E, 0x00, 0x22, 0x00, 0x2C, 0x00, 0x36, 0x00, 0x40, 0x00, 0x4A, 0x00, 0x54, 0x00, 0x5E,
+ 0x00, 0x68, 0x00, 0x72, 0x00, 0x7C, 0x00, 0x86, 0x00, 0x90, 0x00, 0x9A, 0x00, 0xA4, 0x00, 0x04,
+ 0x03, 0xB1, 0x03, 0x43, 0x03, 0x45, 0x03, 0x40, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x43, 0x03, 0x45,
+ 0x03, 0x41, 0x00, 0x04, 0x03, 0x91, 0x03, 0x43, 0x03, 0x45, 0x03, 0x40, 0x00, 0x04, 0x03, 0x91,
+ 0x03, 0x43, 0x03, 0x45, 0x03, 0x41, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x43, 0x03, 0x45, 0x03, 0x40,
+ 0x00, 0x04, 0x03, 0xB7, 0x03, 0x43, 0x03, 0x45, 0x03, 0x41, 0x00, 0x04, 0x03, 0x97, 0x03, 0x43,
+ 0x03, 0x45, 0x03, 0x40, 0x00, 0x04, 0x03, 0x97, 0x03, 0x43, 0x03, 0x45, 0x03, 0x41, 0x00, 0x04,
+ 0x03, 0xC9, 0x03, 0x43, 0x03, 0x45, 0x03, 0x40, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x43, 0x03, 0x45,
+ 0x03, 0x41, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x43, 0x03, 0x45, 0x03, 0x40, 0x00, 0x04, 0x21, 0x26,
+ 0x03, 0x14, 0x03, 0x45, 0x03, 0x40, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x43, 0x03, 0x45, 0x03, 0x41,
+ 0x00, 0x04, 0x21, 0x26, 0x03, 0x14, 0x03, 0x45, 0x03, 0x41, 0x00, 0x01, 0x00, 0x0E, 0x1F, 0x82,
+ 0x1F, 0x84, 0x1F, 0x8A, 0x1F, 0x8C, 0x1F, 0x92, 0x1F, 0x94, 0x1F, 0x9A, 0x1F, 0x9C, 0x1F, 0xA2,
+ 0x1F, 0xA4, 0x1F, 0xAA, 0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD, 0x00, 0x01, 0x00, 0xAE, 0x00, 0x0E,
+ 0x00, 0x22, 0x00, 0x2C, 0x00, 0x36, 0x00, 0x40, 0x00, 0x4A, 0x00, 0x54, 0x00, 0x5E, 0x00, 0x68,
+ 0x00, 0x72, 0x00, 0x7C, 0x00, 0x86, 0x00, 0x90, 0x00, 0x9A, 0x00, 0xA4, 0x00, 0x04, 0x03, 0xB1,
+ 0x03, 0x45, 0x03, 0x13, 0x03, 0x00, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x45, 0x03, 0x13, 0x03, 0x01,
+ 0x00, 0x04, 0x03, 0x91, 0x03, 0x45, 0x03, 0x13, 0x03, 0x00, 0x00, 0x04, 0x03, 0x91, 0x03, 0x45,
+ 0x03, 0x13, 0x03, 0x01, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x45, 0x03, 0x13, 0x03, 0x00, 0x00, 0x04,
+ 0x03, 0xB7, 0x03, 0x45, 0x03, 0x13, 0x03, 0x01, 0x00, 0x04, 0x03, 0x97, 0x03, 0x45, 0x03, 0x13,
+ 0x03, 0x00, 0x00, 0x04, 0x03, 0x97, 0x03, 0x45, 0x03, 0x13, 0x03, 0x01, 0x00, 0x04, 0x03, 0xC9,
+ 0x03, 0x45, 0x03, 0x13, 0x03, 0x00, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x45, 0x03, 0x13, 0x03, 0x01,
+ 0x00, 0x04, 0x03, 0xA9, 0x03, 0x45, 0x03, 0x13, 0x03, 0x00, 0x00, 0x04, 0x21, 0x26, 0x03, 0x45,
+ 0x03, 0x14, 0x03, 0x00, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x45, 0x03, 0x13, 0x03, 0x01, 0x00, 0x04,
+ 0x21, 0x26, 0x03, 0x45, 0x03, 0x14, 0x03, 0x01, 0x00, 0x01, 0x00, 0x0E, 0x1F, 0x82, 0x1F, 0x84,
+ 0x1F, 0x8A, 0x1F, 0x8C, 0x1F, 0x92, 0x1F, 0x94, 0x1F, 0x9A, 0x1F, 0x9C, 0x1F, 0xA2, 0x1F, 0xA4,
+ 0x1F, 0xAA, 0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD, 0x00, 0x01, 0x00, 0xAE, 0x00, 0x0E, 0x00, 0x22,
+ 0x00, 0x2C, 0x00, 0x36, 0x00, 0x40, 0x00, 0x4A, 0x00, 0x54, 0x00, 0x5E, 0x00, 0x68, 0x00, 0x72,
+ 0x00, 0x7C, 0x00, 0x86, 0x00, 0x90, 0x00, 0x9A, 0x00, 0xA4, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x45,
+ 0x03, 0x13, 0x03, 0x40, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x45, 0x03, 0x13, 0x03, 0x41, 0x00, 0x04,
+ 0x03, 0x91, 0x03, 0x45, 0x03, 0x13, 0x03, 0x40, 0x00, 0x04, 0x03, 0x91, 0x03, 0x45, 0x03, 0x13,
+ 0x03, 0x41, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x45, 0x03, 0x13, 0x03, 0x40, 0x00, 0x04, 0x03, 0xB7,
+ 0x03, 0x45, 0x03, 0x13, 0x03, 0x41, 0x00, 0x04, 0x03, 0x97, 0x03, 0x45, 0x03, 0x13, 0x03, 0x40,
+ 0x00, 0x04, 0x03, 0x97, 0x03, 0x45, 0x03, 0x13, 0x03, 0x41, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x45,
+ 0x03, 0x13, 0x03, 0x40, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x45, 0x03, 0x13, 0x03, 0x41, 0x00, 0x04,
+ 0x03, 0xA9, 0x03, 0x45, 0x03, 0x13, 0x03, 0x40, 0x00, 0x04, 0x21, 0x26, 0x03, 0x45, 0x03, 0x14,
+ 0x03, 0x40, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x45, 0x03, 0x13, 0x03, 0x41, 0x00, 0x04, 0x21, 0x26,
+ 0x03, 0x45, 0x03, 0x14, 0x03, 0x41, 0x00, 0x01, 0x00, 0x0E, 0x1F, 0x82, 0x1F, 0x84, 0x1F, 0x8A,
+ 0x1F, 0x8C, 0x1F, 0x92, 0x1F, 0x94, 0x1F, 0x9A, 0x1F, 0x9C, 0x1F, 0xA2, 0x1F, 0xA4, 0x1F, 0xAA,
+ 0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD, 0x00, 0x01, 0x00, 0x96, 0x00, 0x0C, 0x00, 0x1E, 0x00, 0x28,
+ 0x00, 0x32, 0x00, 0x3C, 0x00, 0x46, 0x00, 0x50, 0x00, 0x5A, 0x00, 0x64, 0x00, 0x6E, 0x00, 0x78,
+ 0x00, 0x82, 0x00, 0x8C, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x45, 0x03, 0x43, 0x03, 0x00, 0x00, 0x04,
+ 0x03, 0xB1, 0x03, 0x45, 0x03, 0x43, 0x03, 0x01, 0x00, 0x04, 0x03, 0x91, 0x03, 0x45, 0x03, 0x43,
+ 0x03, 0x00, 0x00, 0x04, 0x03, 0x91, 0x03, 0x45, 0x03, 0x43, 0x03, 0x01, 0x00, 0x04, 0x03, 0xB7,
+ 0x03, 0x45, 0x03, 0x43, 0x03, 0x00, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x45, 0x03, 0x43, 0x03, 0x01,
+ 0x00, 0x04, 0x03, 0x97, 0x03, 0x45, 0x03, 0x43, 0x03, 0x00, 0x00, 0x04, 0x03, 0x97, 0x03, 0x45,
+ 0x03, 0x43, 0x03, 0x01, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x45, 0x03, 0x43, 0x03, 0x00, 0x00, 0x04,
+ 0x03, 0xC9, 0x03, 0x45, 0x03, 0x43, 0x03, 0x01, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x45, 0x03, 0x43,
+ 0x03, 0x00, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x45, 0x03, 0x43, 0x03, 0x01, 0x00, 0x01, 0x00, 0x0C,
+ 0x1F, 0x82, 0x1F, 0x84, 0x1F, 0x8A, 0x1F, 0x8C, 0x1F, 0x92, 0x1F, 0x94, 0x1F, 0x9A, 0x1F, 0x9C,
+ 0x1F, 0xA2, 0x1F, 0xA4, 0x1F, 0xAA, 0x1F, 0xAC, 0x00, 0x01, 0x00, 0x96, 0x00, 0x0C, 0x00, 0x1E,
+ 0x00, 0x28, 0x00, 0x32, 0x00, 0x3C, 0x00, 0x46, 0x00, 0x50, 0x00, 0x5A, 0x00, 0x64, 0x00, 0x6E,
+ 0x00, 0x78, 0x00, 0x82, 0x00, 0x8C, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x45, 0x03, 0x43, 0x03, 0x40,
+ 0x00, 0x04, 0x03, 0xB1, 0x03, 0x45, 0x03, 0x43, 0x03, 0x41, 0x00, 0x04, 0x03, 0x91, 0x03, 0x45,
+ 0x03, 0x43, 0x03, 0x40, 0x00, 0x04, 0x03, 0x91, 0x03, 0x45, 0x03, 0x43, 0x03, 0x41, 0x00, 0x04,
+ 0x03, 0xB7, 0x03, 0x45, 0x03, 0x43, 0x03, 0x40, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x45, 0x03, 0x43,
+ 0x03, 0x41, 0x00, 0x04, 0x03, 0x97, 0x03, 0x45, 0x03, 0x43, 0x03, 0x40, 0x00, 0x04, 0x03, 0x97,
+ 0x03, 0x45, 0x03, 0x43, 0x03, 0x41, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x45, 0x03, 0x43, 0x03, 0x40,
+ 0x00, 0x04, 0x03, 0xC9, 0x03, 0x45, 0x03, 0x43, 0x03, 0x41, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x45,
+ 0x03, 0x43, 0x03, 0x40, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x45, 0x03, 0x43, 0x03, 0x41, 0x00, 0x01,
+ 0x00, 0x0C, 0x1F, 0x82, 0x1F, 0x84, 0x1F, 0x8A, 0x1F, 0x8C, 0x1F, 0x92, 0x1F, 0x94, 0x1F, 0x9A,
+ 0x1F, 0x9C, 0x1F, 0xA2, 0x1F, 0xA4, 0x1F, 0xAA, 0x1F, 0xAC, 0x00, 0x01, 0x00, 0x1E, 0x00, 0x02,
+ 0x00, 0x0A, 0x00, 0x14, 0x00, 0x04, 0x21, 0x26, 0x03, 0x13, 0x03, 0x00, 0x03, 0x45, 0x00, 0x04,
+ 0x21, 0x26, 0x03, 0x13, 0x03, 0x01, 0x03, 0x45, 0x00, 0x01, 0x00, 0x02, 0x1F, 0xAA, 0x1F, 0xAC,
+ 0x00, 0x01, 0x00, 0x1E, 0x00, 0x02, 0x00, 0x0A, 0x00, 0x14, 0x00, 0x04, 0x21, 0x26, 0x03, 0x13,
+ 0x03, 0x40, 0x03, 0x45, 0x00, 0x04, 0x21, 0x26, 0x03, 0x13, 0x03, 0x41, 0x03, 0x45, 0x00, 0x01,
+ 0x00, 0x02, 0x1F, 0xAA, 0x1F, 0xAC, 0x00, 0x01, 0x00, 0x1E, 0x00, 0x02, 0x00, 0x0A, 0x00, 0x14,
+ 0x00, 0x04, 0x21, 0x26, 0x03, 0x13, 0x03, 0x45, 0x03, 0x00, 0x00, 0x04, 0x21, 0x26, 0x03, 0x13,
+ 0x03, 0x45, 0x03, 0x01, 0x00, 0x01, 0x00, 0x02, 0x1F, 0xAA, 0x1F, 0xAC, 0x00, 0x01, 0x00, 0x1E,
+ 0x00, 0x02, 0x00, 0x0A, 0x00, 0x14, 0x00, 0x04, 0x21, 0x26, 0x03, 0x13, 0x03, 0x45, 0x03, 0x40,
+ 0x00, 0x04, 0x21, 0x26, 0x03, 0x13, 0x03, 0x45, 0x03, 0x41, 0x00, 0x01, 0x00, 0x02, 0x1F, 0xAA,
+ 0x1F, 0xAC, 0x00, 0x01, 0x00, 0x1E, 0x00, 0x02, 0x00, 0x0A, 0x00, 0x14, 0x00, 0x04, 0x21, 0x26,
+ 0x03, 0x43, 0x03, 0x00, 0x03, 0x45, 0x00, 0x04, 0x21, 0x26, 0x03, 0x43, 0x03, 0x01, 0x03, 0x45,
+ 0x00, 0x01, 0x00, 0x02, 0x1F, 0xAA, 0x1F, 0xAC, 0x00, 0x01, 0x00, 0x1E, 0x00, 0x02, 0x00, 0x0A,
+ 0x00, 0x14, 0x00, 0x04, 0x21, 0x26, 0x03, 0x43, 0x03, 0x40, 0x03, 0x45, 0x00, 0x04, 0x21, 0x26,
+ 0x03, 0x43, 0x03, 0x41, 0x03, 0x45, 0x00, 0x01, 0x00, 0x02, 0x1F, 0xAA, 0x1F, 0xAC, 0x00, 0x01,
+ 0x00, 0x1E, 0x00, 0x02, 0x00, 0x0A, 0x00, 0x14, 0x00, 0x04, 0x21, 0x26, 0x03, 0x43, 0x03, 0x45,
+ 0x03, 0x00, 0x00, 0x04, 0x21, 0x26, 0x03, 0x43, 0x03, 0x45, 0x03, 0x01, 0x00, 0x01, 0x00, 0x02,
+ 0x1F, 0xAA, 0x1F, 0xAC, 0x00, 0x01, 0x00, 0x1E, 0x00, 0x02, 0x00, 0x0A, 0x00, 0x14, 0x00, 0x04,
+ 0x21, 0x26, 0x03, 0x43, 0x03, 0x45, 0x03, 0x40, 0x00, 0x04, 0x21, 0x26, 0x03, 0x43, 0x03, 0x45,
+ 0x03, 0x41, 0x00, 0x01, 0x00, 0x02, 0x1F, 0xAA, 0x1F, 0xAC, 0x00, 0x01, 0x00, 0x1E, 0x00, 0x02,
+ 0x00, 0x0A, 0x00, 0x14, 0x00, 0x04, 0x21, 0x26, 0x03, 0x45, 0x03, 0x13, 0x03, 0x00, 0x00, 0x04,
+ 0x21, 0x26, 0x03, 0x45, 0x03, 0x13, 0x03, 0x01, 0x00, 0x01, 0x00, 0x02, 0x1F, 0xAA, 0x1F, 0xAC,
+ 0x00, 0x01, 0x00, 0x1E, 0x00, 0x02, 0x00, 0x0A, 0x00, 0x14, 0x00, 0x04, 0x21, 0x26, 0x03, 0x45,
+ 0x03, 0x13, 0x03, 0x40, 0x00, 0x04, 0x21, 0x26, 0x03, 0x45, 0x03, 0x13, 0x03, 0x41, 0x00, 0x01,
+ 0x00, 0x02, 0x1F, 0xAA, 0x1F, 0xAC, 0x00, 0x01, 0x00, 0x1E, 0x00, 0x02, 0x00, 0x0A, 0x00, 0x14,
+ 0x00, 0x04, 0x21, 0x26, 0x03, 0x45, 0x03, 0x43, 0x03, 0x00, 0x00, 0x04, 0x21, 0x26, 0x03, 0x45,
+ 0x03, 0x43, 0x03, 0x01, 0x00, 0x01, 0x00, 0x02, 0x1F, 0xAA, 0x1F, 0xAC, 0x00, 0x01, 0x00, 0x1E,
+ 0x00, 0x02, 0x00, 0x0A, 0x00, 0x14, 0x00, 0x04, 0x21, 0x26, 0x03, 0x45, 0x03, 0x43, 0x03, 0x40,
+ 0x00, 0x04, 0x21, 0x26, 0x03, 0x45, 0x03, 0x43, 0x03, 0x41, 0x00, 0x01, 0x00, 0x02, 0x1F, 0xAA,
+ 0x1F, 0xAC, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01, 0x01, 0x36, 0x00, 0x16,
+ 0x00, 0x32, 0x00, 0x3C, 0x00, 0x46, 0x00, 0x50, 0x00, 0x5A, 0x00, 0x64, 0x00, 0x6E, 0x00, 0x78,
+ 0x00, 0x82, 0x00, 0x8C, 0x00, 0x96, 0x00, 0xA0, 0x00, 0xAA, 0x00, 0xB4, 0x00, 0xBE, 0x00, 0xC8,
+ 0x00, 0xD2, 0x00, 0xE4, 0x00, 0xF6, 0x01, 0x08, 0x01, 0x1A, 0x01, 0x2C, 0x00, 0x01, 0x00, 0x04,
+ 0x30, 0x94, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0x4C, 0x00, 0x02, 0x30, 0x99,
+ 0x00, 0x01, 0x00, 0x04, 0x30, 0x4E, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0x50,
+ 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0x52, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01,
+ 0x00, 0x04, 0x30, 0x54, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0x56, 0x00, 0x02,
+ 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0x58, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04,
+ 0x30, 0x5A, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0x5C, 0x00, 0x02, 0x30, 0x99,
+ 0x00, 0x01, 0x00, 0x04, 0x30, 0x5E, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0x60,
+ 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0x62, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01,
+ 0x00, 0x04, 0x30, 0x65, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0x67, 0x00, 0x02,
+ 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0x69, 0x00, 0x02, 0x30, 0x99, 0x00, 0x02, 0x00, 0x06,
+ 0x00, 0x0C, 0x30, 0x70, 0x00, 0x02, 0x30, 0x99, 0x30, 0x71, 0x00, 0x02, 0x30, 0x9A, 0x00, 0x02,
+ 0x00, 0x06, 0x00, 0x0C, 0x30, 0x73, 0x00, 0x02, 0x30, 0x99, 0x30, 0x74, 0x00, 0x02, 0x30, 0x9A,
+ 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x30, 0x76, 0x00, 0x02, 0x30, 0x99, 0x30, 0x77, 0x00, 0x02,
+ 0x30, 0x9A, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x30, 0x79, 0x00, 0x02, 0x30, 0x99, 0x30, 0x7A,
+ 0x00, 0x02, 0x30, 0x9A, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x30, 0x7C, 0x00, 0x02, 0x30, 0x99,
+ 0x30, 0x7D, 0x00, 0x02, 0x30, 0x9A, 0x00, 0x01, 0x00, 0x04, 0x30, 0x9E, 0x00, 0x02, 0x30, 0x99,
+ 0x00, 0x01, 0x00, 0x16, 0x30, 0x46, 0x30, 0x4B, 0x30, 0x4D, 0x30, 0x4F, 0x30, 0x51, 0x30, 0x53,
+ 0x30, 0x55, 0x30, 0x57, 0x30, 0x59, 0x30, 0x5B, 0x30, 0x5D, 0x30, 0x5F, 0x30, 0x61, 0x30, 0x64,
+ 0x30, 0x66, 0x30, 0x68, 0x30, 0x6F, 0x30, 0x72, 0x30, 0x75, 0x30, 0x78, 0x30, 0x7B, 0x30, 0x9D,
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01, 0x00, 0xDE, 0x00, 0x1B, 0x00, 0x3C,
+ 0x00, 0x42, 0x00, 0x48, 0x00, 0x4E, 0x00, 0x54, 0x00, 0x5A, 0x00, 0x60, 0x00, 0x66, 0x00, 0x6C,
+ 0x00, 0x72, 0x00, 0x78, 0x00, 0x7E, 0x00, 0x84, 0x00, 0x8A, 0x00, 0x90, 0x00, 0x96, 0x00, 0x9C,
+ 0x00, 0xA2, 0x00, 0xA8, 0x00, 0xAE, 0x00, 0xB4, 0x00, 0xBA, 0x00, 0xC0, 0x00, 0xC6, 0x00, 0xCC,
+ 0x00, 0xD2, 0x00, 0xD8, 0x00, 0x02, 0x30, 0x4B, 0x30, 0x99, 0x00, 0x02, 0x30, 0x4D, 0x30, 0x99,
+ 0x00, 0x02, 0x30, 0x4F, 0x30, 0x99, 0x00, 0x02, 0x30, 0x51, 0x30, 0x99, 0x00, 0x02, 0x30, 0x53,
+ 0x30, 0x99, 0x00, 0x02, 0x30, 0x55, 0x30, 0x99, 0x00, 0x02, 0x30, 0x57, 0x30, 0x99, 0x00, 0x02,
+ 0x30, 0x59, 0x30, 0x99, 0x00, 0x02, 0x30, 0x5B, 0x30, 0x99, 0x00, 0x02, 0x30, 0x5D, 0x30, 0x99,
+ 0x00, 0x02, 0x30, 0x5F, 0x30, 0x99, 0x00, 0x02, 0x30, 0x61, 0x30, 0x99, 0x00, 0x02, 0x30, 0x64,
+ 0x30, 0x99, 0x00, 0x02, 0x30, 0x66, 0x30, 0x99, 0x00, 0x02, 0x30, 0x68, 0x30, 0x99, 0x00, 0x02,
+ 0x30, 0x6F, 0x30, 0x99, 0x00, 0x02, 0x30, 0x6F, 0x30, 0x9A, 0x00, 0x02, 0x30, 0x72, 0x30, 0x99,
+ 0x00, 0x02, 0x30, 0x72, 0x30, 0x9A, 0x00, 0x02, 0x30, 0x75, 0x30, 0x99, 0x00, 0x02, 0x30, 0x75,
+ 0x30, 0x9A, 0x00, 0x02, 0x30, 0x78, 0x30, 0x99, 0x00, 0x02, 0x30, 0x78, 0x30, 0x9A, 0x00, 0x02,
+ 0x30, 0x7B, 0x30, 0x99, 0x00, 0x02, 0x30, 0x7B, 0x30, 0x9A, 0x00, 0x02, 0x30, 0x46, 0x30, 0x99,
+ 0x00, 0x02, 0x30, 0x9D, 0x30, 0x99, 0x00, 0x01, 0x00, 0x1B, 0x30, 0x4C, 0x30, 0x4E, 0x30, 0x50,
+ 0x30, 0x52, 0x30, 0x54, 0x30, 0x56, 0x30, 0x58, 0x30, 0x5A, 0x30, 0x5C, 0x30, 0x5E, 0x30, 0x60,
+ 0x30, 0x62, 0x30, 0x65, 0x30, 0x67, 0x30, 0x69, 0x30, 0x70, 0x30, 0x71, 0x30, 0x73, 0x30, 0x74,
+ 0x30, 0x76, 0x30, 0x77, 0x30, 0x79, 0x30, 0x7A, 0x30, 0x7C, 0x30, 0x7D, 0x30, 0x94, 0x30, 0x9E,
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01, 0x00, 0x44, 0x00, 0x03, 0x00, 0x0C,
+ 0x00, 0x16, 0x00, 0x3A, 0x00, 0x01, 0x00, 0x04, 0x0C, 0xC0, 0x00, 0x02, 0x0C, 0xD5, 0x00, 0x04,
+ 0x00, 0x0A, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x0C, 0xCB, 0x00, 0x03, 0x0C, 0xC2, 0x0C, 0xD5,
+ 0x0C, 0xCA, 0x00, 0x02, 0x0C, 0xC2, 0x0C, 0xC7, 0x00, 0x02, 0x0C, 0xD5, 0x0C, 0xC8, 0x00, 0x02,
+ 0x0C, 0xD6, 0x00, 0x01, 0x00, 0x04, 0x0C, 0xCB, 0x00, 0x02, 0x0C, 0xD5, 0x00, 0x01, 0x00, 0x03,
+ 0x0C, 0xBF, 0x0C, 0xC6, 0x0C, 0xCA, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x0A, 0x00, 0x46,
+ 0x00, 0x01, 0x00, 0x2E, 0x00, 0x05, 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C, 0x00, 0x22, 0x00, 0x28,
+ 0x00, 0x02, 0x0C, 0xBF, 0x0C, 0xD5, 0x00, 0x02, 0x0C, 0xC6, 0x0C, 0xD5, 0x00, 0x02, 0x0C, 0xC6,
+ 0x0C, 0xD6, 0x00, 0x02, 0x0C, 0xC6, 0x0C, 0xC2, 0x00, 0x02, 0x0C, 0xCA, 0x0C, 0xD5, 0x00, 0x01,
+ 0x00, 0x05, 0x0C, 0xC0, 0x0C, 0xC7, 0x0C, 0xC8, 0x0C, 0xCA, 0x0C, 0xCB, 0x00, 0x01, 0x00, 0x10,
+ 0x00, 0x01, 0x00, 0x08, 0x00, 0x03, 0x0C, 0xC6, 0x0C, 0xC2, 0x0C, 0xD5, 0x00, 0x01, 0x00, 0x01,
+ 0x0C, 0xCB, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01, 0x01, 0x66, 0x00, 0x1A,
+ 0x00, 0x3A, 0x00, 0x44, 0x00, 0x4E, 0x00, 0x58, 0x00, 0x62, 0x00, 0x6C, 0x00, 0x76, 0x00, 0x80,
+ 0x00, 0x8A, 0x00, 0x94, 0x00, 0x9E, 0x00, 0xA8, 0x00, 0xB2, 0x00, 0xBC, 0x00, 0xC6, 0x00, 0xD0,
+ 0x00, 0xDA, 0x00, 0xEC, 0x00, 0xFE, 0x01, 0x10, 0x01, 0x22, 0x01, 0x34, 0x01, 0x3E, 0x01, 0x48,
+ 0x01, 0x52, 0x01, 0x5C, 0x00, 0x01, 0x00, 0x04, 0x30, 0xF4, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01,
+ 0x00, 0x04, 0x30, 0xAC, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0xAE, 0x00, 0x02,
+ 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0xB0, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04,
+ 0x30, 0xB2, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0xB4, 0x00, 0x02, 0x30, 0x99,
+ 0x00, 0x01, 0x00, 0x04, 0x30, 0xB6, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0xB8,
+ 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0xBA, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01,
+ 0x00, 0x04, 0x30, 0xBC, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0xBE, 0x00, 0x02,
+ 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0xC0, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04,
+ 0x30, 0xC2, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0xC5, 0x00, 0x02, 0x30, 0x99,
+ 0x00, 0x01, 0x00, 0x04, 0x30, 0xC7, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0xC9,
+ 0x00, 0x02, 0x30, 0x99, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x30, 0xD0, 0x00, 0x02, 0x30, 0x99,
+ 0x30, 0xD1, 0x00, 0x02, 0x30, 0x9A, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x30, 0xD3, 0x00, 0x02,
+ 0x30, 0x99, 0x30, 0xD4, 0x00, 0x02, 0x30, 0x9A, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x30, 0xD6,
+ 0x00, 0x02, 0x30, 0x99, 0x30, 0xD7, 0x00, 0x02, 0x30, 0x9A, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C,
+ 0x30, 0xD9, 0x00, 0x02, 0x30, 0x99, 0x30, 0xDA, 0x00, 0x02, 0x30, 0x9A, 0x00, 0x02, 0x00, 0x06,
+ 0x00, 0x0C, 0x30, 0xDC, 0x00, 0x02, 0x30, 0x99, 0x30, 0xDD, 0x00, 0x02, 0x30, 0x9A, 0x00, 0x01,
+ 0x00, 0x04, 0x30, 0xF7, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0xF8, 0x00, 0x02,
+ 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0xF9, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04,
+ 0x30, 0xFA, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0xFE, 0x00, 0x02, 0x30, 0x99,
+ 0x00, 0x01, 0x00, 0x1A, 0x30, 0xA6, 0x30, 0xAB, 0x30, 0xAD, 0x30, 0xAF, 0x30, 0xB1, 0x30, 0xB3,
+ 0x30, 0xB5, 0x30, 0xB7, 0x30, 0xB9, 0x30, 0xBB, 0x30, 0xBD, 0x30, 0xBF, 0x30, 0xC1, 0x30, 0xC4,
+ 0x30, 0xC6, 0x30, 0xC8, 0x30, 0xCF, 0x30, 0xD2, 0x30, 0xD5, 0x30, 0xD8, 0x30, 0xDB, 0x30, 0xEF,
+ 0x30, 0xF0, 0x30, 0xF1, 0x30, 0xF2, 0x30, 0xFD, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08,
+ 0x00, 0x01, 0x00, 0xFE, 0x00, 0x1F, 0x00, 0x44, 0x00, 0x4A, 0x00, 0x50, 0x00, 0x56, 0x00, 0x5C,
+ 0x00, 0x62, 0x00, 0x68, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x7A, 0x00, 0x80, 0x00, 0x86, 0x00, 0x8C,
+ 0x00, 0x92, 0x00, 0x98, 0x00, 0x9E, 0x00, 0xA4, 0x00, 0xAA, 0x00, 0xB0, 0x00, 0xB6, 0x00, 0xBC,
+ 0x00, 0xC2, 0x00, 0xC8, 0x00, 0xCE, 0x00, 0xD4, 0x00, 0xDA, 0x00, 0xE0, 0x00, 0xE6, 0x00, 0xEC,
+ 0x00, 0xF2, 0x00, 0xF8, 0x00, 0x02, 0x30, 0xAB, 0x30, 0x99, 0x00, 0x02, 0x30, 0xAD, 0x30, 0x99,
+ 0x00, 0x02, 0x30, 0xAF, 0x30, 0x99, 0x00, 0x02, 0x30, 0xB1, 0x30, 0x99, 0x00, 0x02, 0x30, 0xB3,
+ 0x30, 0x99, 0x00, 0x02, 0x30, 0xB5, 0x30, 0x99, 0x00, 0x02, 0x30, 0xB7, 0x30, 0x99, 0x00, 0x02,
+ 0x30, 0xB9, 0x30, 0x99, 0x00, 0x02, 0x30, 0xBB, 0x30, 0x99, 0x00, 0x02, 0x30, 0xBD, 0x30, 0x99,
+ 0x00, 0x02, 0x30, 0xBF, 0x30, 0x99, 0x00, 0x02, 0x30, 0xC1, 0x30, 0x99, 0x00, 0x02, 0x30, 0xC4,
+ 0x30, 0x99, 0x00, 0x02, 0x30, 0xC6, 0x30, 0x99, 0x00, 0x02, 0x30, 0xC8, 0x30, 0x99, 0x00, 0x02,
+ 0x30, 0xCF, 0x30, 0x99, 0x00, 0x02, 0x30, 0xCF, 0x30, 0x9A, 0x00, 0x02, 0x30, 0xD2, 0x30, 0x99,
+ 0x00, 0x02, 0x30, 0xD2, 0x30, 0x9A, 0x00, 0x02, 0x30, 0xD5, 0x30, 0x99, 0x00, 0x02, 0x30, 0xD5,
+ 0x30, 0x9A, 0x00, 0x02, 0x30, 0xD8, 0x30, 0x99, 0x00, 0x02, 0x30, 0xD8, 0x30, 0x9A, 0x00, 0x02,
+ 0x30, 0xDB, 0x30, 0x99, 0x00, 0x02, 0x30, 0xDB, 0x30, 0x9A, 0x00, 0x02, 0x30, 0xA6, 0x30, 0x99,
+ 0x00, 0x02, 0x30, 0xEF, 0x30, 0x99, 0x00, 0x02, 0x30, 0xF0, 0x30, 0x99, 0x00, 0x02, 0x30, 0xF1,
+ 0x30, 0x99, 0x00, 0x02, 0x30, 0xF2, 0x30, 0x99, 0x00, 0x02, 0x30, 0xFD, 0x30, 0x99, 0x00, 0x01,
+ 0x00, 0x1F, 0x30, 0xAC, 0x30, 0xAE, 0x30, 0xB0, 0x30, 0xB2, 0x30, 0xB4, 0x30, 0xB6, 0x30, 0xB8,
+ 0x30, 0xBA, 0x30, 0xBC, 0x30, 0xBE, 0x30, 0xC0, 0x30, 0xC2, 0x30, 0xC5, 0x30, 0xC7, 0x30, 0xC9,
+ 0x30, 0xD0, 0x30, 0xD1, 0x30, 0xD3, 0x30, 0xD4, 0x30, 0xD6, 0x30, 0xD7, 0x30, 0xD9, 0x30, 0xDA,
+ 0x30, 0xDC, 0x30, 0xDD, 0x30, 0xF4, 0x30, 0xF7, 0x30, 0xF8, 0x30, 0xF9, 0x30, 0xFA, 0x30, 0xFE,
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01, 0x1E, 0x9A, 0x00, 0x89, 0x01, 0x18,
+ 0x02, 0x72, 0x02, 0x8C, 0x02, 0xE6, 0x03, 0x18, 0x04, 0x3E, 0x04, 0x48, 0x04, 0x8A, 0x04, 0xC4,
+ 0x05, 0x6A, 0x05, 0x74, 0x05, 0xA6, 0x05, 0xF4, 0x06, 0x16, 0x06, 0x70, 0x08, 0x56, 0x08, 0x70,
+ 0x08, 0xCE, 0x09, 0x42, 0x09, 0x7C, 0x0B, 0x14, 0x0B, 0x26, 0x0B, 0x68, 0x0B, 0x7A, 0x0B, 0xD4,
+ 0x0C, 0x0E, 0x0D, 0x68, 0x0D, 0x82, 0x0D, 0xDC, 0x0E, 0x0E, 0x0F, 0x34, 0x0F, 0x3E, 0x0F, 0x80,
+ 0x0F, 0xC2, 0x10, 0x60, 0x10, 0x72, 0x10, 0xA4, 0x10, 0xF2, 0x11, 0x14, 0x11, 0x6E, 0x13, 0x54,
+ 0x13, 0x6E, 0x13, 0xCC, 0x14, 0x40, 0x14, 0x82, 0x16, 0x1A, 0x16, 0x2C, 0x16, 0x76, 0x16, 0x88,
+ 0x16, 0xEA, 0x17, 0x24, 0x17, 0x5E, 0x17, 0x68, 0x17, 0x7A, 0x17, 0x94, 0x17, 0xA6, 0x17, 0xE0,
+ 0x17, 0xF2, 0x17, 0xFC, 0x18, 0x06, 0x18, 0x40, 0x18, 0x6A, 0x18, 0x74, 0x18, 0x86, 0x18, 0x90,
+ 0x18, 0x9A, 0x18, 0xCC, 0x19, 0x06, 0x19, 0x10, 0x19, 0x22, 0x19, 0x3C, 0x19, 0x4E, 0x19, 0x88,
+ 0x19, 0x9A, 0x19, 0xA4, 0x19, 0xAE, 0x19, 0xE8, 0x1A, 0x12, 0x1A, 0x1C, 0x1A, 0x2E, 0x1A, 0x38,
+ 0x1A, 0x42, 0x1A, 0x74, 0x1A, 0xAE, 0x1A, 0xE8, 0x1A, 0xF2, 0x1A, 0xFC, 0x1B, 0x1E, 0x1B, 0x40,
+ 0x1B, 0x4A, 0x1B, 0x54, 0x1B, 0x7E, 0x1B, 0xA8, 0x1B, 0xB2, 0x1B, 0xBC, 0x1B, 0xC6, 0x1B, 0xD0,
+ 0x1B, 0xEA, 0x1C, 0x04, 0x1C, 0x0E, 0x1C, 0x18, 0x1C, 0x22, 0x1C, 0x5C, 0x1C, 0x96, 0x1C, 0xD0,
+ 0x1D, 0x0A, 0x1D, 0x14, 0x1D, 0x1E, 0x1D, 0x28, 0x1D, 0x32, 0x1D, 0x3C, 0x1D, 0x46, 0x1D, 0x50,
+ 0x1D, 0x5A, 0x1D, 0x64, 0x1D, 0x6E, 0x1D, 0x78, 0x1D, 0x82, 0x1D, 0x8C, 0x1D, 0x96, 0x1D, 0xA0,
+ 0x1D, 0xAA, 0x1D, 0xB4, 0x1D, 0xBE, 0x1D, 0xD0, 0x1D, 0xE2, 0x1D, 0xEC, 0x1D, 0xF6, 0x1E, 0x08,
+ 0x1E, 0x1A, 0x1E, 0x24, 0x1E, 0x2E, 0x1E, 0x38, 0x1E, 0x42, 0x1E, 0x4C, 0x1E, 0x56, 0x1E, 0x88,
+ 0x00, 0x26, 0x00, 0x4E, 0x00, 0x54, 0x00, 0x5A, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x72, 0x00, 0x7A,
+ 0x00, 0x82, 0x00, 0x8A, 0x00, 0x92, 0x00, 0x98, 0x00, 0x9E, 0x00, 0xA4, 0x00, 0xAC, 0x00, 0xB4,
+ 0x00, 0xBC, 0x00, 0xC4, 0x00, 0xCC, 0x00, 0xD4, 0x00, 0xDC, 0x00, 0xE2, 0x00, 0xEA, 0x00, 0xF0,
+ 0x00, 0xF8, 0x00, 0xFE, 0x01, 0x04, 0x01, 0x0C, 0x01, 0x14, 0x01, 0x1A, 0x01, 0x20, 0x01, 0x26,
+ 0x01, 0x2C, 0x01, 0x34, 0x01, 0x3C, 0x01, 0x42, 0x01, 0x48, 0x01, 0x4E, 0x01, 0x54, 0x00, 0xC0,
+ 0x00, 0x02, 0x03, 0x00, 0x00, 0xC1, 0x00, 0x02, 0x03, 0x01, 0x1E, 0xA6, 0x00, 0x03, 0x03, 0x02,
+ 0x03, 0x00, 0x1E, 0xA4, 0x00, 0x03, 0x03, 0x02, 0x03, 0x01, 0x1E, 0xAA, 0x00, 0x03, 0x03, 0x02,
+ 0x03, 0x03, 0x1E, 0xA8, 0x00, 0x03, 0x03, 0x02, 0x03, 0x09, 0x1E, 0xAC, 0x00, 0x03, 0x03, 0x02,
+ 0x03, 0x23, 0x1E, 0xA6, 0x00, 0x03, 0x03, 0x02, 0x03, 0x40, 0x1E, 0xA4, 0x00, 0x03, 0x03, 0x02,
+ 0x03, 0x41, 0x00, 0xC2, 0x00, 0x02, 0x03, 0x02, 0x00, 0xC3, 0x00, 0x02, 0x03, 0x03, 0x01, 0x00,
+ 0x00, 0x02, 0x03, 0x04, 0x1E, 0xB0, 0x00, 0x03, 0x03, 0x06, 0x03, 0x00, 0x1E, 0xAE, 0x00, 0x03,
+ 0x03, 0x06, 0x03, 0x01, 0x1E, 0xB4, 0x00, 0x03, 0x03, 0x06, 0x03, 0x03, 0x1E, 0xB2, 0x00, 0x03,
+ 0x03, 0x06, 0x03, 0x09, 0x1E, 0xB6, 0x00, 0x03, 0x03, 0x06, 0x03, 0x23, 0x1E, 0xB0, 0x00, 0x03,
+ 0x03, 0x06, 0x03, 0x40, 0x1E, 0xAE, 0x00, 0x03, 0x03, 0x06, 0x03, 0x41, 0x01, 0x02, 0x00, 0x02,
+ 0x03, 0x06, 0x01, 0xE0, 0x00, 0x03, 0x03, 0x07, 0x03, 0x04, 0x02, 0x26, 0x00, 0x02, 0x03, 0x07,
+ 0x01, 0xDE, 0x00, 0x03, 0x03, 0x08, 0x03, 0x04, 0x00, 0xC4, 0x00, 0x02, 0x03, 0x08, 0x1E, 0xA2,
+ 0x00, 0x02, 0x03, 0x09, 0x01, 0xFA, 0x00, 0x03, 0x03, 0x0A, 0x03, 0x01, 0x01, 0xFA, 0x00, 0x03,
+ 0x03, 0x0A, 0x03, 0x41, 0x00, 0xC5, 0x00, 0x02, 0x03, 0x0A, 0x01, 0xCD, 0x00, 0x02, 0x03, 0x0C,
+ 0x02, 0x00, 0x00, 0x02, 0x03, 0x0F, 0x02, 0x02, 0x00, 0x02, 0x03, 0x11, 0x1E, 0xAC, 0x00, 0x03,
+ 0x03, 0x23, 0x03, 0x02, 0x1E, 0xB6, 0x00, 0x03, 0x03, 0x23, 0x03, 0x06, 0x1E, 0xA0, 0x00, 0x02,
+ 0x03, 0x23, 0x1E, 0x00, 0x00, 0x02, 0x03, 0x25, 0x01, 0x04, 0x00, 0x02, 0x03, 0x28, 0x00, 0xC0,
+ 0x00, 0x02, 0x03, 0x40, 0x00, 0xC1, 0x00, 0x02, 0x03, 0x41, 0x00, 0x03, 0x00, 0x08, 0x00, 0x0E,
+ 0x00, 0x14, 0x1E, 0x02, 0x00, 0x02, 0x03, 0x07, 0x1E, 0x04, 0x00, 0x02, 0x03, 0x23, 0x1E, 0x06,
+ 0x00, 0x02, 0x03, 0x31, 0x00, 0x0A, 0x00, 0x16, 0x00, 0x1E, 0x00, 0x24, 0x00, 0x2A, 0x00, 0x30,
+ 0x00, 0x36, 0x00, 0x3E, 0x00, 0x46, 0x00, 0x4C, 0x00, 0x54, 0x1E, 0x08, 0x00, 0x03, 0x03, 0x01,
+ 0x03, 0x27, 0x01, 0x06, 0x00, 0x02, 0x03, 0x01, 0x01, 0x08, 0x00, 0x02, 0x03, 0x02, 0x01, 0x0A,
+ 0x00, 0x02, 0x03, 0x07, 0x01, 0x0C, 0x00, 0x02, 0x03, 0x0C, 0x1E, 0x08, 0x00, 0x03, 0x03, 0x27,
+ 0x03, 0x01, 0x1E, 0x08, 0x00, 0x03, 0x03, 0x27, 0x03, 0x41, 0x00, 0xC7, 0x00, 0x02, 0x03, 0x27,
+ 0x1E, 0x08, 0x00, 0x03, 0x03, 0x41, 0x03, 0x27, 0x01, 0x06, 0x00, 0x02, 0x03, 0x41, 0x00, 0x06,
+ 0x00, 0x0E, 0x00, 0x14, 0x00, 0x1A, 0x00, 0x20, 0x00, 0x26, 0x00, 0x2C, 0x1E, 0x0A, 0x00, 0x02,
+ 0x03, 0x07, 0x01, 0x0E, 0x00, 0x02, 0x03, 0x0C, 0x1E, 0x0C, 0x00, 0x02, 0x03, 0x23, 0x1E, 0x10,
+ 0x00, 0x02, 0x03, 0x27, 0x1E, 0x12, 0x00, 0x02, 0x03, 0x2D, 0x1E, 0x0E, 0x00, 0x02, 0x03, 0x31,
+ 0x00, 0x21, 0x00, 0x44, 0x00, 0x4A, 0x00, 0x50, 0x00, 0x58, 0x00, 0x60, 0x00, 0x68, 0x00, 0x70,
+ 0x00, 0x78, 0x00, 0x80, 0x00, 0x88, 0x00, 0x8E, 0x00, 0x94, 0x00, 0x9C, 0x00, 0xA4, 0x00, 0xAC,
+ 0x00, 0xB4, 0x00, 0xBA, 0x00, 0xC2, 0x00, 0xC8, 0x00, 0xCE, 0x00, 0xD4, 0x00, 0xDA, 0x00, 0xE0,
+ 0x00, 0xE6, 0x00, 0xEC, 0x00, 0xF4, 0x00, 0xFA, 0x01, 0x02, 0x01, 0x08, 0x01, 0x0E, 0x01, 0x14,
+ 0x01, 0x1A, 0x01, 0x20, 0x00, 0xC8, 0x00, 0x02, 0x03, 0x00, 0x00, 0xC9, 0x00, 0x02, 0x03, 0x01,
+ 0x1E, 0xC0, 0x00, 0x03, 0x03, 0x02, 0x03, 0x00, 0x1E, 0xBE, 0x00, 0x03, 0x03, 0x02, 0x03, 0x01,
+ 0x1E, 0xC4, 0x00, 0x03, 0x03, 0x02, 0x03, 0x03, 0x1E, 0xC2, 0x00, 0x03, 0x03, 0x02, 0x03, 0x09,
+ 0x1E, 0xC6, 0x00, 0x03, 0x03, 0x02, 0x03, 0x23, 0x1E, 0xC0, 0x00, 0x03, 0x03, 0x02, 0x03, 0x40,
+ 0x1E, 0xBE, 0x00, 0x03, 0x03, 0x02, 0x03, 0x41, 0x00, 0xCA, 0x00, 0x02, 0x03, 0x02, 0x1E, 0xBC,
+ 0x00, 0x02, 0x03, 0x03, 0x1E, 0x14, 0x00, 0x03, 0x03, 0x04, 0x03, 0x00, 0x1E, 0x16, 0x00, 0x03,
+ 0x03, 0x04, 0x03, 0x01, 0x1E, 0x14, 0x00, 0x03, 0x03, 0x04, 0x03, 0x40, 0x1E, 0x16, 0x00, 0x03,
+ 0x03, 0x04, 0x03, 0x41, 0x01, 0x12, 0x00, 0x02, 0x03, 0x04, 0x1E, 0x1C, 0x00, 0x03, 0x03, 0x06,
+ 0x03, 0x27, 0x01, 0x14, 0x00, 0x02, 0x03, 0x06, 0x01, 0x16, 0x00, 0x02, 0x03, 0x07, 0x00, 0xCB,
+ 0x00, 0x02, 0x03, 0x08, 0x1E, 0xBA, 0x00, 0x02, 0x03, 0x09, 0x01, 0x1A, 0x00, 0x02, 0x03, 0x0C,
+ 0x02, 0x04, 0x00, 0x02, 0x03, 0x0F, 0x02, 0x06, 0x00, 0x02, 0x03, 0x11, 0x1E, 0xC6, 0x00, 0x03,
+ 0x03, 0x23, 0x03, 0x02, 0x1E, 0xB8, 0x00, 0x02, 0x03, 0x23, 0x1E, 0x1C, 0x00, 0x03, 0x03, 0x27,
+ 0x03, 0x06, 0x02, 0x28, 0x00, 0x02, 0x03, 0x27, 0x01, 0x18, 0x00, 0x02, 0x03, 0x28, 0x1E, 0x18,
+ 0x00, 0x02, 0x03, 0x2D, 0x1E, 0x1A, 0x00, 0x02, 0x03, 0x30, 0x00, 0xC8, 0x00, 0x02, 0x03, 0x40,
+ 0x00, 0xC9, 0x00, 0x02, 0x03, 0x41, 0x00, 0x01, 0x00, 0x04, 0x1E, 0x1E, 0x00, 0x02, 0x03, 0x07,
+ 0x00, 0x08, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x00, 0x2A, 0x00, 0x30, 0x00, 0x36,
+ 0x00, 0x3C, 0x01, 0xF4, 0x00, 0x02, 0x03, 0x01, 0x01, 0x1C, 0x00, 0x02, 0x03, 0x02, 0x1E, 0x20,
+ 0x00, 0x02, 0x03, 0x04, 0x01, 0x1E, 0x00, 0x02, 0x03, 0x06, 0x01, 0x20, 0x00, 0x02, 0x03, 0x07,
+ 0x01, 0xE6, 0x00, 0x02, 0x03, 0x0C, 0x01, 0x22, 0x00, 0x02, 0x03, 0x27, 0x01, 0xF4, 0x00, 0x02,
+ 0x03, 0x41, 0x00, 0x07, 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C, 0x00, 0x22, 0x00, 0x28, 0x00, 0x2E,
+ 0x00, 0x34, 0x01, 0x24, 0x00, 0x02, 0x03, 0x02, 0x1E, 0x22, 0x00, 0x02, 0x03, 0x07, 0x1E, 0x26,
+ 0x00, 0x02, 0x03, 0x08, 0x02, 0x1E, 0x00, 0x02, 0x03, 0x0C, 0x1E, 0x24, 0x00, 0x02, 0x03, 0x23,
+ 0x1E, 0x28, 0x00, 0x02, 0x03, 0x27, 0x1E, 0x2A, 0x00, 0x02, 0x03, 0x2E, 0x00, 0x14, 0x00, 0x2A,
+ 0x00, 0x30, 0x00, 0x36, 0x00, 0x3C, 0x00, 0x42, 0x00, 0x48, 0x00, 0x4E, 0x00, 0x54, 0x00, 0x5C,
+ 0x00, 0x64, 0x00, 0x6A, 0x00, 0x70, 0x00, 0x76, 0x00, 0x7C, 0x00, 0x82, 0x00, 0x88, 0x00, 0x8E,
+ 0x00, 0x94, 0x00, 0x9A, 0x00, 0xA0, 0x00, 0xCC, 0x00, 0x02, 0x03, 0x00, 0x00, 0xCD, 0x00, 0x02,
+ 0x03, 0x01, 0x00, 0xCE, 0x00, 0x02, 0x03, 0x02, 0x01, 0x28, 0x00, 0x02, 0x03, 0x03, 0x01, 0x2A,
+ 0x00, 0x02, 0x03, 0x04, 0x01, 0x2C, 0x00, 0x02, 0x03, 0x06, 0x01, 0x30, 0x00, 0x02, 0x03, 0x07,
+ 0x1E, 0x2E, 0x00, 0x03, 0x03, 0x08, 0x03, 0x01, 0x1E, 0x2E, 0x00, 0x03, 0x03, 0x08, 0x03, 0x41,
+ 0x00, 0xCF, 0x00, 0x02, 0x03, 0x08, 0x1E, 0xC8, 0x00, 0x02, 0x03, 0x09, 0x01, 0xCF, 0x00, 0x02,
+ 0x03, 0x0C, 0x02, 0x08, 0x00, 0x02, 0x03, 0x0F, 0x02, 0x0A, 0x00, 0x02, 0x03, 0x11, 0x1E, 0xCA,
+ 0x00, 0x02, 0x03, 0x23, 0x01, 0x2E, 0x00, 0x02, 0x03, 0x28, 0x1E, 0x2C, 0x00, 0x02, 0x03, 0x30,
+ 0x00, 0xCC, 0x00, 0x02, 0x03, 0x40, 0x00, 0xCD, 0x00, 0x02, 0x03, 0x41, 0x1E, 0x2E, 0x00, 0x02,
+ 0x03, 0x44, 0x00, 0x01, 0x00, 0x04, 0x01, 0x34, 0x00, 0x02, 0x03, 0x02, 0x00, 0x06, 0x00, 0x0E,
+ 0x00, 0x14, 0x00, 0x1A, 0x00, 0x20, 0x00, 0x26, 0x00, 0x2C, 0x1E, 0x30, 0x00, 0x02, 0x03, 0x01,
+ 0x01, 0xE8, 0x00, 0x02, 0x03, 0x0C, 0x1E, 0x32, 0x00, 0x02, 0x03, 0x23, 0x01, 0x36, 0x00, 0x02,
+ 0x03, 0x27, 0x1E, 0x34, 0x00, 0x02, 0x03, 0x31, 0x1E, 0x30, 0x00, 0x02, 0x03, 0x41, 0x00, 0x09,
+ 0x00, 0x14, 0x00, 0x1A, 0x00, 0x22, 0x00, 0x28, 0x00, 0x30, 0x00, 0x36, 0x00, 0x3C, 0x00, 0x42,
+ 0x00, 0x48, 0x01, 0x39, 0x00, 0x02, 0x03, 0x01, 0x1E, 0x38, 0x00, 0x03, 0x03, 0x04, 0x03, 0x23,
+ 0x01, 0x3D, 0x00, 0x02, 0x03, 0x0C, 0x1E, 0x38, 0x00, 0x03, 0x03, 0x23, 0x03, 0x04, 0x1E, 0x36,
+ 0x00, 0x02, 0x03, 0x23, 0x01, 0x3B, 0x00, 0x02, 0x03, 0x27, 0x1E, 0x3C, 0x00, 0x02, 0x03, 0x2D,
+ 0x1E, 0x3A, 0x00, 0x02, 0x03, 0x31, 0x01, 0x39, 0x00, 0x02, 0x03, 0x41, 0x00, 0x04, 0x00, 0x0A,
+ 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C, 0x1E, 0x3E, 0x00, 0x02, 0x03, 0x01, 0x1E, 0x40, 0x00, 0x02,
+ 0x03, 0x07, 0x1E, 0x42, 0x00, 0x02, 0x03, 0x23, 0x1E, 0x3E, 0x00, 0x02, 0x03, 0x41, 0x00, 0x0B,
+ 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x00, 0x2A, 0x00, 0x30, 0x00, 0x36, 0x00, 0x3C, 0x00, 0x42,
+ 0x00, 0x48, 0x00, 0x4E, 0x00, 0x54, 0x01, 0xF8, 0x00, 0x02, 0x03, 0x00, 0x01, 0x43, 0x00, 0x02,
+ 0x03, 0x01, 0x00, 0xD1, 0x00, 0x02, 0x03, 0x03, 0x1E, 0x44, 0x00, 0x02, 0x03, 0x07, 0x01, 0x47,
+ 0x00, 0x02, 0x03, 0x0C, 0x1E, 0x46, 0x00, 0x02, 0x03, 0x23, 0x01, 0x45, 0x00, 0x02, 0x03, 0x27,
+ 0x1E, 0x4A, 0x00, 0x02, 0x03, 0x2D, 0x1E, 0x48, 0x00, 0x02, 0x03, 0x31, 0x01, 0xF8, 0x00, 0x02,
+ 0x03, 0x40, 0x01, 0x43, 0x00, 0x02, 0x03, 0x41, 0x00, 0x34, 0x00, 0x6A, 0x00, 0x72, 0x00, 0x78,
+ 0x00, 0x80, 0x00, 0x86, 0x00, 0x8E, 0x00, 0x96, 0x00, 0x9E, 0x00, 0xA6, 0x00, 0xAE, 0x00, 0xB6,
+ 0x00, 0xBE, 0x00, 0xC4, 0x00, 0xCC, 0x00, 0xD4, 0x00, 0xDC, 0x00, 0xE4, 0x00, 0xEC, 0x00, 0xF2,
+ 0x00, 0xFA, 0x01, 0x02, 0x01, 0x0A, 0x01, 0x12, 0x01, 0x1A, 0x01, 0x20, 0x01, 0x26, 0x01, 0x2E,
+ 0x01, 0x34, 0x01, 0x3C, 0x01, 0x42, 0x01, 0x4A, 0x01, 0x50, 0x01, 0x56, 0x01, 0x5C, 0x01, 0x62,
+ 0x01, 0x68, 0x01, 0x70, 0x01, 0x78, 0x01, 0x80, 0x01, 0x88, 0x01, 0x90, 0x01, 0x98, 0x01, 0xA0,
+ 0x01, 0xA6, 0x01, 0xAE, 0x01, 0xB6, 0x01, 0xBC, 0x01, 0xC4, 0x01, 0xCA, 0x01, 0xD2, 0x01, 0xD8,
+ 0x01, 0xE0, 0x1E, 0xDC, 0x00, 0x03, 0x03, 0x00, 0x03, 0x1B, 0x00, 0xD2, 0x00, 0x02, 0x03, 0x00,
+ 0x1E, 0xDA, 0x00, 0x03, 0x03, 0x01, 0x03, 0x1B, 0x00, 0xD3, 0x00, 0x02, 0x03, 0x01, 0x1E, 0xD2,
+ 0x00, 0x03, 0x03, 0x02, 0x03, 0x00, 0x1E, 0xD0, 0x00, 0x03, 0x03, 0x02, 0x03, 0x01, 0x1E, 0xD6,
+ 0x00, 0x03, 0x03, 0x02, 0x03, 0x03, 0x1E, 0xD4, 0x00, 0x03, 0x03, 0x02, 0x03, 0x09, 0x1E, 0xD8,
+ 0x00, 0x03, 0x03, 0x02, 0x03, 0x23, 0x1E, 0xD2, 0x00, 0x03, 0x03, 0x02, 0x03, 0x40, 0x1E, 0xD0,
+ 0x00, 0x03, 0x03, 0x02, 0x03, 0x41, 0x00, 0xD4, 0x00, 0x02, 0x03, 0x02, 0x1E, 0x4C, 0x00, 0x03,
+ 0x03, 0x03, 0x03, 0x01, 0x02, 0x2C, 0x00, 0x03, 0x03, 0x03, 0x03, 0x04, 0x1E, 0x4E, 0x00, 0x03,
+ 0x03, 0x03, 0x03, 0x08, 0x1E, 0xE0, 0x00, 0x03, 0x03, 0x03, 0x03, 0x1B, 0x1E, 0x4C, 0x00, 0x03,
+ 0x03, 0x03, 0x03, 0x41, 0x00, 0xD5, 0x00, 0x02, 0x03, 0x03, 0x1E, 0x50, 0x00, 0x03, 0x03, 0x04,
+ 0x03, 0x00, 0x1E, 0x52, 0x00, 0x03, 0x03, 0x04, 0x03, 0x01, 0x01, 0xEC, 0x00, 0x03, 0x03, 0x04,
+ 0x03, 0x28, 0x1E, 0x50, 0x00, 0x03, 0x03, 0x04, 0x03, 0x40, 0x1E, 0x52, 0x00, 0x03, 0x03, 0x04,
+ 0x03, 0x41, 0x01, 0x4C, 0x00, 0x02, 0x03, 0x04, 0x01, 0x4E, 0x00, 0x02, 0x03, 0x06, 0x02, 0x30,
+ 0x00, 0x03, 0x03, 0x07, 0x03, 0x04, 0x02, 0x2E, 0x00, 0x02, 0x03, 0x07, 0x02, 0x2A, 0x00, 0x03,
+ 0x03, 0x08, 0x03, 0x04, 0x00, 0xD6, 0x00, 0x02, 0x03, 0x08, 0x1E, 0xDE, 0x00, 0x03, 0x03, 0x09,
+ 0x03, 0x1B, 0x1E, 0xCE, 0x00, 0x02, 0x03, 0x09, 0x01, 0x50, 0x00, 0x02, 0x03, 0x0B, 0x01, 0xD1,
+ 0x00, 0x02, 0x03, 0x0C, 0x02, 0x0C, 0x00, 0x02, 0x03, 0x0F, 0x02, 0x0E, 0x00, 0x02, 0x03, 0x11,
+ 0x1E, 0xDC, 0x00, 0x03, 0x03, 0x1B, 0x03, 0x00, 0x1E, 0xDA, 0x00, 0x03, 0x03, 0x1B, 0x03, 0x01,
+ 0x1E, 0xE0, 0x00, 0x03, 0x03, 0x1B, 0x03, 0x03, 0x1E, 0xDE, 0x00, 0x03, 0x03, 0x1B, 0x03, 0x09,
+ 0x1E, 0xE2, 0x00, 0x03, 0x03, 0x1B, 0x03, 0x23, 0x1E, 0xDC, 0x00, 0x03, 0x03, 0x1B, 0x03, 0x40,
+ 0x1E, 0xDA, 0x00, 0x03, 0x03, 0x1B, 0x03, 0x41, 0x01, 0xA0, 0x00, 0x02, 0x03, 0x1B, 0x1E, 0xD8,
+ 0x00, 0x03, 0x03, 0x23, 0x03, 0x02, 0x1E, 0xE2, 0x00, 0x03, 0x03, 0x23, 0x03, 0x1B, 0x1E, 0xCC,
+ 0x00, 0x02, 0x03, 0x23, 0x01, 0xEC, 0x00, 0x03, 0x03, 0x28, 0x03, 0x04, 0x01, 0xEA, 0x00, 0x02,
+ 0x03, 0x28, 0x1E, 0xDC, 0x00, 0x03, 0x03, 0x40, 0x03, 0x1B, 0x00, 0xD2, 0x00, 0x02, 0x03, 0x40,
+ 0x1E, 0xDA, 0x00, 0x03, 0x03, 0x41, 0x03, 0x1B, 0x00, 0xD3, 0x00, 0x02, 0x03, 0x41, 0x00, 0x03,
+ 0x00, 0x08, 0x00, 0x0E, 0x00, 0x14, 0x1E, 0x54, 0x00, 0x02, 0x03, 0x01, 0x1E, 0x56, 0x00, 0x02,
+ 0x03, 0x07, 0x1E, 0x54, 0x00, 0x02, 0x03, 0x41, 0x00, 0x0B, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x26,
+ 0x00, 0x2C, 0x00, 0x32, 0x00, 0x38, 0x00, 0x3E, 0x00, 0x46, 0x00, 0x4C, 0x00, 0x52, 0x00, 0x58,
+ 0x01, 0x54, 0x00, 0x02, 0x03, 0x01, 0x1E, 0x5C, 0x00, 0x03, 0x03, 0x04, 0x03, 0x23, 0x1E, 0x58,
+ 0x00, 0x02, 0x03, 0x07, 0x01, 0x58, 0x00, 0x02, 0x03, 0x0C, 0x02, 0x10, 0x00, 0x02, 0x03, 0x0F,
+ 0x02, 0x12, 0x00, 0x02, 0x03, 0x11, 0x1E, 0x5C, 0x00, 0x03, 0x03, 0x23, 0x03, 0x04, 0x1E, 0x5A,
+ 0x00, 0x02, 0x03, 0x23, 0x01, 0x56, 0x00, 0x02, 0x03, 0x27, 0x1E, 0x5E, 0x00, 0x02, 0x03, 0x31,
+ 0x01, 0x54, 0x00, 0x02, 0x03, 0x41, 0x00, 0x0D, 0x00, 0x1C, 0x00, 0x24, 0x00, 0x2A, 0x00, 0x30,
+ 0x00, 0x38, 0x00, 0x3E, 0x00, 0x46, 0x00, 0x4C, 0x00, 0x54, 0x00, 0x5A, 0x00, 0x60, 0x00, 0x66,
+ 0x00, 0x6E, 0x1E, 0x64, 0x00, 0x03, 0x03, 0x01, 0x03, 0x07, 0x01, 0x5A, 0x00, 0x02, 0x03, 0x01,
+ 0x01, 0x5C, 0x00, 0x02, 0x03, 0x02, 0x1E, 0x68, 0x00, 0x03, 0x03, 0x07, 0x03, 0x23, 0x1E, 0x60,
+ 0x00, 0x02, 0x03, 0x07, 0x1E, 0x66, 0x00, 0x03, 0x03, 0x0C, 0x03, 0x07, 0x01, 0x60, 0x00, 0x02,
+ 0x03, 0x0C, 0x1E, 0x68, 0x00, 0x03, 0x03, 0x23, 0x03, 0x07, 0x1E, 0x62, 0x00, 0x02, 0x03, 0x23,
+ 0x02, 0x18, 0x00, 0x02, 0x03, 0x26, 0x01, 0x5E, 0x00, 0x02, 0x03, 0x27, 0x1E, 0x64, 0x00, 0x03,
+ 0x03, 0x41, 0x03, 0x07, 0x01, 0x5A, 0x00, 0x02, 0x03, 0x41, 0x00, 0x07, 0x00, 0x10, 0x00, 0x16,
+ 0x00, 0x1C, 0x00, 0x22, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x34, 0x1E, 0x6A, 0x00, 0x02, 0x03, 0x07,
+ 0x01, 0x64, 0x00, 0x02, 0x03, 0x0C, 0x1E, 0x6C, 0x00, 0x02, 0x03, 0x23, 0x02, 0x1A, 0x00, 0x02,
+ 0x03, 0x26, 0x01, 0x62, 0x00, 0x02, 0x03, 0x27, 0x1E, 0x70, 0x00, 0x02, 0x03, 0x2D, 0x1E, 0x6E,
+ 0x00, 0x02, 0x03, 0x31, 0x00, 0x2D, 0x00, 0x5C, 0x00, 0x64, 0x00, 0x6A, 0x00, 0x72, 0x00, 0x78,
+ 0x00, 0x7E, 0x00, 0x86, 0x00, 0x8E, 0x00, 0x96, 0x00, 0x9C, 0x00, 0xA4, 0x00, 0xAA, 0x00, 0xB0,
+ 0x00, 0xB8, 0x00, 0xC0, 0x00, 0xC8, 0x00, 0xD0, 0x00, 0xD8, 0x00, 0xE0, 0x00, 0xE6, 0x00, 0xEE,
+ 0x00, 0xF4, 0x00, 0xFA, 0x01, 0x00, 0x01, 0x06, 0x01, 0x0C, 0x01, 0x12, 0x01, 0x1A, 0x01, 0x22,
+ 0x01, 0x2A, 0x01, 0x32, 0x01, 0x3A, 0x01, 0x42, 0x01, 0x4A, 0x01, 0x50, 0x01, 0x58, 0x01, 0x5E,
+ 0x01, 0x64, 0x01, 0x6A, 0x01, 0x70, 0x01, 0x76, 0x01, 0x7E, 0x01, 0x84, 0x01, 0x8C, 0x01, 0x92,
+ 0x1E, 0xEA, 0x00, 0x03, 0x03, 0x00, 0x03, 0x1B, 0x00, 0xD9, 0x00, 0x02, 0x03, 0x00, 0x1E, 0xE8,
+ 0x00, 0x03, 0x03, 0x01, 0x03, 0x1B, 0x00, 0xDA, 0x00, 0x02, 0x03, 0x01, 0x00, 0xDB, 0x00, 0x02,
+ 0x03, 0x02, 0x1E, 0x78, 0x00, 0x03, 0x03, 0x03, 0x03, 0x01, 0x1E, 0xEE, 0x00, 0x03, 0x03, 0x03,
+ 0x03, 0x1B, 0x1E, 0x78, 0x00, 0x03, 0x03, 0x03, 0x03, 0x41, 0x01, 0x68, 0x00, 0x02, 0x03, 0x03,
+ 0x1E, 0x7A, 0x00, 0x03, 0x03, 0x04, 0x03, 0x08, 0x01, 0x6A, 0x00, 0x02, 0x03, 0x04, 0x01, 0x6C,
+ 0x00, 0x02, 0x03, 0x06, 0x01, 0xDB, 0x00, 0x03, 0x03, 0x08, 0x03, 0x00, 0x01, 0xD7, 0x00, 0x03,
+ 0x03, 0x08, 0x03, 0x01, 0x01, 0xD5, 0x00, 0x03, 0x03, 0x08, 0x03, 0x04, 0x01, 0xD9, 0x00, 0x03,
+ 0x03, 0x08, 0x03, 0x0C, 0x01, 0xDB, 0x00, 0x03, 0x03, 0x08, 0x03, 0x40, 0x01, 0xD7, 0x00, 0x03,
+ 0x03, 0x08, 0x03, 0x41, 0x00, 0xDC, 0x00, 0x02, 0x03, 0x08, 0x1E, 0xEC, 0x00, 0x03, 0x03, 0x09,
+ 0x03, 0x1B, 0x1E, 0xE6, 0x00, 0x02, 0x03, 0x09, 0x01, 0x6E, 0x00, 0x02, 0x03, 0x0A, 0x01, 0x70,
+ 0x00, 0x02, 0x03, 0x0B, 0x01, 0xD3, 0x00, 0x02, 0x03, 0x0C, 0x02, 0x14, 0x00, 0x02, 0x03, 0x0F,
+ 0x02, 0x16, 0x00, 0x02, 0x03, 0x11, 0x1E, 0xEA, 0x00, 0x03, 0x03, 0x1B, 0x03, 0x00, 0x1E, 0xE8,
+ 0x00, 0x03, 0x03, 0x1B, 0x03, 0x01, 0x1E, 0xEE, 0x00, 0x03, 0x03, 0x1B, 0x03, 0x03, 0x1E, 0xEC,
+ 0x00, 0x03, 0x03, 0x1B, 0x03, 0x09, 0x1E, 0xF0, 0x00, 0x03, 0x03, 0x1B, 0x03, 0x23, 0x1E, 0xEA,
+ 0x00, 0x03, 0x03, 0x1B, 0x03, 0x40, 0x1E, 0xE8, 0x00, 0x03, 0x03, 0x1B, 0x03, 0x41, 0x01, 0xAF,
+ 0x00, 0x02, 0x03, 0x1B, 0x1E, 0xF0, 0x00, 0x03, 0x03, 0x23, 0x03, 0x1B, 0x1E, 0xE4, 0x00, 0x02,
+ 0x03, 0x23, 0x1E, 0x72, 0x00, 0x02, 0x03, 0x24, 0x01, 0x72, 0x00, 0x02, 0x03, 0x28, 0x1E, 0x76,
+ 0x00, 0x02, 0x03, 0x2D, 0x1E, 0x74, 0x00, 0x02, 0x03, 0x30, 0x1E, 0xEA, 0x00, 0x03, 0x03, 0x40,
+ 0x03, 0x1B, 0x00, 0xD9, 0x00, 0x02, 0x03, 0x40, 0x1E, 0xE8, 0x00, 0x03, 0x03, 0x41, 0x03, 0x1B,
+ 0x00, 0xDA, 0x00, 0x02, 0x03, 0x41, 0x01, 0xD7, 0x00, 0x02, 0x03, 0x44, 0x00, 0x02, 0x00, 0x06,
+ 0x00, 0x0C, 0x1E, 0x7C, 0x00, 0x02, 0x03, 0x03, 0x1E, 0x7E, 0x00, 0x02, 0x03, 0x23, 0x00, 0x08,
+ 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x00, 0x2A, 0x00, 0x30, 0x00, 0x36, 0x00, 0x3C,
+ 0x1E, 0x80, 0x00, 0x02, 0x03, 0x00, 0x1E, 0x82, 0x00, 0x02, 0x03, 0x01, 0x01, 0x74, 0x00, 0x02,
+ 0x03, 0x02, 0x1E, 0x86, 0x00, 0x02, 0x03, 0x07, 0x1E, 0x84, 0x00, 0x02, 0x03, 0x08, 0x1E, 0x88,
+ 0x00, 0x02, 0x03, 0x23, 0x1E, 0x80, 0x00, 0x02, 0x03, 0x40, 0x1E, 0x82, 0x00, 0x02, 0x03, 0x41,
+ 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x1E, 0x8A, 0x00, 0x02, 0x03, 0x07, 0x1E, 0x8C, 0x00, 0x02,
+ 0x03, 0x08, 0x00, 0x0B, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x00, 0x2A, 0x00, 0x30, 0x00, 0x36,
+ 0x00, 0x3C, 0x00, 0x42, 0x00, 0x48, 0x00, 0x4E, 0x00, 0x54, 0x1E, 0xF2, 0x00, 0x02, 0x03, 0x00,
+ 0x00, 0xDD, 0x00, 0x02, 0x03, 0x01, 0x01, 0x76, 0x00, 0x02, 0x03, 0x02, 0x1E, 0xF8, 0x00, 0x02,
+ 0x03, 0x03, 0x02, 0x32, 0x00, 0x02, 0x03, 0x04, 0x1E, 0x8E, 0x00, 0x02, 0x03, 0x07, 0x01, 0x78,
+ 0x00, 0x02, 0x03, 0x08, 0x1E, 0xF6, 0x00, 0x02, 0x03, 0x09, 0x1E, 0xF4, 0x00, 0x02, 0x03, 0x23,
+ 0x1E, 0xF2, 0x00, 0x02, 0x03, 0x40, 0x00, 0xDD, 0x00, 0x02, 0x03, 0x41, 0x00, 0x07, 0x00, 0x10,
+ 0x00, 0x16, 0x00, 0x1C, 0x00, 0x22, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x34, 0x01, 0x79, 0x00, 0x02,
+ 0x03, 0x01, 0x1E, 0x90, 0x00, 0x02, 0x03, 0x02, 0x01, 0x7B, 0x00, 0x02, 0x03, 0x07, 0x01, 0x7D,
+ 0x00, 0x02, 0x03, 0x0C, 0x1E, 0x92, 0x00, 0x02, 0x03, 0x23, 0x1E, 0x94, 0x00, 0x02, 0x03, 0x31,
+ 0x01, 0x79, 0x00, 0x02, 0x03, 0x41, 0x00, 0x26, 0x00, 0x4E, 0x00, 0x54, 0x00, 0x5A, 0x00, 0x62,
+ 0x00, 0x6A, 0x00, 0x72, 0x00, 0x7A, 0x00, 0x82, 0x00, 0x8A, 0x00, 0x92, 0x00, 0x98, 0x00, 0x9E,
+ 0x00, 0xA4, 0x00, 0xAC, 0x00, 0xB4, 0x00, 0xBC, 0x00, 0xC4, 0x00, 0xCC, 0x00, 0xD4, 0x00, 0xDC,
+ 0x00, 0xE2, 0x00, 0xEA, 0x00, 0xF0, 0x00, 0xF8, 0x00, 0xFE, 0x01, 0x04, 0x01, 0x0C, 0x01, 0x14,
+ 0x01, 0x1A, 0x01, 0x20, 0x01, 0x26, 0x01, 0x2C, 0x01, 0x34, 0x01, 0x3C, 0x01, 0x42, 0x01, 0x48,
+ 0x01, 0x4E, 0x01, 0x54, 0x00, 0xE0, 0x00, 0x02, 0x03, 0x00, 0x00, 0xE1, 0x00, 0x02, 0x03, 0x01,
+ 0x1E, 0xA7, 0x00, 0x03, 0x03, 0x02, 0x03, 0x00, 0x1E, 0xA5, 0x00, 0x03, 0x03, 0x02, 0x03, 0x01,
+ 0x1E, 0xAB, 0x00, 0x03, 0x03, 0x02, 0x03, 0x03, 0x1E, 0xA9, 0x00, 0x03, 0x03, 0x02, 0x03, 0x09,
+ 0x1E, 0xAD, 0x00, 0x03, 0x03, 0x02, 0x03, 0x23, 0x1E, 0xA7, 0x00, 0x03, 0x03, 0x02, 0x03, 0x40,
+ 0x1E, 0xA5, 0x00, 0x03, 0x03, 0x02, 0x03, 0x41, 0x00, 0xE2, 0x00, 0x02, 0x03, 0x02, 0x00, 0xE3,
+ 0x00, 0x02, 0x03, 0x03, 0x01, 0x01, 0x00, 0x02, 0x03, 0x04, 0x1E, 0xB1, 0x00, 0x03, 0x03, 0x06,
+ 0x03, 0x00, 0x1E, 0xAF, 0x00, 0x03, 0x03, 0x06, 0x03, 0x01, 0x1E, 0xB5, 0x00, 0x03, 0x03, 0x06,
+ 0x03, 0x03, 0x1E, 0xB3, 0x00, 0x03, 0x03, 0x06, 0x03, 0x09, 0x1E, 0xB7, 0x00, 0x03, 0x03, 0x06,
+ 0x03, 0x23, 0x1E, 0xB1, 0x00, 0x03, 0x03, 0x06, 0x03, 0x40, 0x1E, 0xAF, 0x00, 0x03, 0x03, 0x06,
+ 0x03, 0x41, 0x01, 0x03, 0x00, 0x02, 0x03, 0x06, 0x01, 0xE1, 0x00, 0x03, 0x03, 0x07, 0x03, 0x04,
+ 0x02, 0x27, 0x00, 0x02, 0x03, 0x07, 0x01, 0xDF, 0x00, 0x03, 0x03, 0x08, 0x03, 0x04, 0x00, 0xE4,
+ 0x00, 0x02, 0x03, 0x08, 0x1E, 0xA3, 0x00, 0x02, 0x03, 0x09, 0x01, 0xFB, 0x00, 0x03, 0x03, 0x0A,
+ 0x03, 0x01, 0x01, 0xFB, 0x00, 0x03, 0x03, 0x0A, 0x03, 0x41, 0x00, 0xE5, 0x00, 0x02, 0x03, 0x0A,
+ 0x01, 0xCE, 0x00, 0x02, 0x03, 0x0C, 0x02, 0x01, 0x00, 0x02, 0x03, 0x0F, 0x02, 0x03, 0x00, 0x02,
+ 0x03, 0x11, 0x1E, 0xAD, 0x00, 0x03, 0x03, 0x23, 0x03, 0x02, 0x1E, 0xB7, 0x00, 0x03, 0x03, 0x23,
+ 0x03, 0x06, 0x1E, 0xA1, 0x00, 0x02, 0x03, 0x23, 0x1E, 0x01, 0x00, 0x02, 0x03, 0x25, 0x01, 0x05,
+ 0x00, 0x02, 0x03, 0x28, 0x00, 0xE0, 0x00, 0x02, 0x03, 0x40, 0x00, 0xE1, 0x00, 0x02, 0x03, 0x41,
+ 0x00, 0x03, 0x00, 0x08, 0x00, 0x0E, 0x00, 0x14, 0x1E, 0x03, 0x00, 0x02, 0x03, 0x07, 0x1E, 0x05,
+ 0x00, 0x02, 0x03, 0x23, 0x1E, 0x07, 0x00, 0x02, 0x03, 0x31, 0x00, 0x0A, 0x00, 0x16, 0x00, 0x1E,
+ 0x00, 0x24, 0x00, 0x2A, 0x00, 0x30, 0x00, 0x36, 0x00, 0x3E, 0x00, 0x46, 0x00, 0x4C, 0x00, 0x54,
+ 0x1E, 0x09, 0x00, 0x03, 0x03, 0x01, 0x03, 0x27, 0x01, 0x07, 0x00, 0x02, 0x03, 0x01, 0x01, 0x09,
+ 0x00, 0x02, 0x03, 0x02, 0x01, 0x0B, 0x00, 0x02, 0x03, 0x07, 0x01, 0x0D, 0x00, 0x02, 0x03, 0x0C,
+ 0x1E, 0x09, 0x00, 0x03, 0x03, 0x27, 0x03, 0x01, 0x1E, 0x09, 0x00, 0x03, 0x03, 0x27, 0x03, 0x41,
+ 0x00, 0xE7, 0x00, 0x02, 0x03, 0x27, 0x1E, 0x09, 0x00, 0x03, 0x03, 0x41, 0x03, 0x27, 0x01, 0x07,
+ 0x00, 0x02, 0x03, 0x41, 0x00, 0x06, 0x00, 0x0E, 0x00, 0x14, 0x00, 0x1A, 0x00, 0x20, 0x00, 0x26,
+ 0x00, 0x2C, 0x1E, 0x0B, 0x00, 0x02, 0x03, 0x07, 0x01, 0x0F, 0x00, 0x02, 0x03, 0x0C, 0x1E, 0x0D,
+ 0x00, 0x02, 0x03, 0x23, 0x1E, 0x11, 0x00, 0x02, 0x03, 0x27, 0x1E, 0x13, 0x00, 0x02, 0x03, 0x2D,
+ 0x1E, 0x0F, 0x00, 0x02, 0x03, 0x31, 0x00, 0x21, 0x00, 0x44, 0x00, 0x4A, 0x00, 0x50, 0x00, 0x58,
+ 0x00, 0x60, 0x00, 0x68, 0x00, 0x70, 0x00, 0x78, 0x00, 0x80, 0x00, 0x88, 0x00, 0x8E, 0x00, 0x94,
+ 0x00, 0x9C, 0x00, 0xA4, 0x00, 0xAC, 0x00, 0xB4, 0x00, 0xBA, 0x00, 0xC2, 0x00, 0xC8, 0x00, 0xCE,
+ 0x00, 0xD4, 0x00, 0xDA, 0x00, 0xE0, 0x00, 0xE6, 0x00, 0xEC, 0x00, 0xF4, 0x00, 0xFA, 0x01, 0x02,
+ 0x01, 0x08, 0x01, 0x0E, 0x01, 0x14, 0x01, 0x1A, 0x01, 0x20, 0x00, 0xE8, 0x00, 0x02, 0x03, 0x00,
+ 0x00, 0xE9, 0x00, 0x02, 0x03, 0x01, 0x1E, 0xC1, 0x00, 0x03, 0x03, 0x02, 0x03, 0x00, 0x1E, 0xBF,
+ 0x00, 0x03, 0x03, 0x02, 0x03, 0x01, 0x1E, 0xC5, 0x00, 0x03, 0x03, 0x02, 0x03, 0x03, 0x1E, 0xC3,
+ 0x00, 0x03, 0x03, 0x02, 0x03, 0x09, 0x1E, 0xC7, 0x00, 0x03, 0x03, 0x02, 0x03, 0x23, 0x1E, 0xC1,
+ 0x00, 0x03, 0x03, 0x02, 0x03, 0x40, 0x1E, 0xBF, 0x00, 0x03, 0x03, 0x02, 0x03, 0x41, 0x00, 0xEA,
+ 0x00, 0x02, 0x03, 0x02, 0x1E, 0xBD, 0x00, 0x02, 0x03, 0x03, 0x1E, 0x15, 0x00, 0x03, 0x03, 0x04,
+ 0x03, 0x00, 0x1E, 0x17, 0x00, 0x03, 0x03, 0x04, 0x03, 0x01, 0x1E, 0x15, 0x00, 0x03, 0x03, 0x04,
+ 0x03, 0x40, 0x1E, 0x17, 0x00, 0x03, 0x03, 0x04, 0x03, 0x41, 0x01, 0x13, 0x00, 0x02, 0x03, 0x04,
+ 0x1E, 0x1D, 0x00, 0x03, 0x03, 0x06, 0x03, 0x27, 0x01, 0x15, 0x00, 0x02, 0x03, 0x06, 0x01, 0x17,
+ 0x00, 0x02, 0x03, 0x07, 0x00, 0xEB, 0x00, 0x02, 0x03, 0x08, 0x1E, 0xBB, 0x00, 0x02, 0x03, 0x09,
+ 0x01, 0x1B, 0x00, 0x02, 0x03, 0x0C, 0x02, 0x05, 0x00, 0x02, 0x03, 0x0F, 0x02, 0x07, 0x00, 0x02,
+ 0x03, 0x11, 0x1E, 0xC7, 0x00, 0x03, 0x03, 0x23, 0x03, 0x02, 0x1E, 0xB9, 0x00, 0x02, 0x03, 0x23,
+ 0x1E, 0x1D, 0x00, 0x03, 0x03, 0x27, 0x03, 0x06, 0x02, 0x29, 0x00, 0x02, 0x03, 0x27, 0x01, 0x19,
+ 0x00, 0x02, 0x03, 0x28, 0x1E, 0x19, 0x00, 0x02, 0x03, 0x2D, 0x1E, 0x1B, 0x00, 0x02, 0x03, 0x30,
+ 0x00, 0xE8, 0x00, 0x02, 0x03, 0x40, 0x00, 0xE9, 0x00, 0x02, 0x03, 0x41, 0x00, 0x01, 0x00, 0x04,
+ 0x1E, 0x1F, 0x00, 0x02, 0x03, 0x07, 0x00, 0x08, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24,
+ 0x00, 0x2A, 0x00, 0x30, 0x00, 0x36, 0x00, 0x3C, 0x01, 0xF5, 0x00, 0x02, 0x03, 0x01, 0x01, 0x1D,
+ 0x00, 0x02, 0x03, 0x02, 0x1E, 0x21, 0x00, 0x02, 0x03, 0x04, 0x01, 0x1F, 0x00, 0x02, 0x03, 0x06,
+ 0x01, 0x21, 0x00, 0x02, 0x03, 0x07, 0x01, 0xE7, 0x00, 0x02, 0x03, 0x0C, 0x01, 0x23, 0x00, 0x02,
+ 0x03, 0x27, 0x01, 0xF5, 0x00, 0x02, 0x03, 0x41, 0x00, 0x08, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E,
+ 0x00, 0x24, 0x00, 0x2A, 0x00, 0x30, 0x00, 0x36, 0x00, 0x3C, 0x01, 0x25, 0x00, 0x02, 0x03, 0x02,
+ 0x1E, 0x23, 0x00, 0x02, 0x03, 0x07, 0x1E, 0x27, 0x00, 0x02, 0x03, 0x08, 0x02, 0x1F, 0x00, 0x02,
+ 0x03, 0x0C, 0x1E, 0x25, 0x00, 0x02, 0x03, 0x23, 0x1E, 0x29, 0x00, 0x02, 0x03, 0x27, 0x1E, 0x2B,
+ 0x00, 0x02, 0x03, 0x2E, 0x1E, 0x96, 0x00, 0x02, 0x03, 0x31, 0x00, 0x13, 0x00, 0x28, 0x00, 0x2E,
+ 0x00, 0x34, 0x00, 0x3A, 0x00, 0x40, 0x00, 0x46, 0x00, 0x4C, 0x00, 0x54, 0x00, 0x5C, 0x00, 0x62,
+ 0x00, 0x68, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x7A, 0x00, 0x80, 0x00, 0x86, 0x00, 0x8C, 0x00, 0x92,
+ 0x00, 0x98, 0x00, 0xEC, 0x00, 0x02, 0x03, 0x00, 0x00, 0xED, 0x00, 0x02, 0x03, 0x01, 0x00, 0xEE,
+ 0x00, 0x02, 0x03, 0x02, 0x01, 0x29, 0x00, 0x02, 0x03, 0x03, 0x01, 0x2B, 0x00, 0x02, 0x03, 0x04,
+ 0x01, 0x2D, 0x00, 0x02, 0x03, 0x06, 0x1E, 0x2F, 0x00, 0x03, 0x03, 0x08, 0x03, 0x01, 0x1E, 0x2F,
+ 0x00, 0x03, 0x03, 0x08, 0x03, 0x41, 0x00, 0xEF, 0x00, 0x02, 0x03, 0x08, 0x1E, 0xC9, 0x00, 0x02,
+ 0x03, 0x09, 0x01, 0xD0, 0x00, 0x02, 0x03, 0x0C, 0x02, 0x09, 0x00, 0x02, 0x03, 0x0F, 0x02, 0x0B,
+ 0x00, 0x02, 0x03, 0x11, 0x1E, 0xCB, 0x00, 0x02, 0x03, 0x23, 0x01, 0x2F, 0x00, 0x02, 0x03, 0x28,
+ 0x1E, 0x2D, 0x00, 0x02, 0x03, 0x30, 0x00, 0xEC, 0x00, 0x02, 0x03, 0x40, 0x00, 0xED, 0x00, 0x02,
+ 0x03, 0x41, 0x1E, 0x2F, 0x00, 0x02, 0x03, 0x44, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x01, 0x35,
+ 0x00, 0x02, 0x03, 0x02, 0x01, 0xF0, 0x00, 0x02, 0x03, 0x0C, 0x00, 0x06, 0x00, 0x0E, 0x00, 0x14,
+ 0x00, 0x1A, 0x00, 0x20, 0x00, 0x26, 0x00, 0x2C, 0x1E, 0x31, 0x00, 0x02, 0x03, 0x01, 0x01, 0xE9,
+ 0x00, 0x02, 0x03, 0x0C, 0x1E, 0x33, 0x00, 0x02, 0x03, 0x23, 0x01, 0x37, 0x00, 0x02, 0x03, 0x27,
+ 0x1E, 0x35, 0x00, 0x02, 0x03, 0x31, 0x1E, 0x31, 0x00, 0x02, 0x03, 0x41, 0x00, 0x09, 0x00, 0x14,
+ 0x00, 0x1A, 0x00, 0x22, 0x00, 0x28, 0x00, 0x30, 0x00, 0x36, 0x00, 0x3C, 0x00, 0x42, 0x00, 0x48,
+ 0x01, 0x3A, 0x00, 0x02, 0x03, 0x01, 0x1E, 0x39, 0x00, 0x03, 0x03, 0x04, 0x03, 0x23, 0x01, 0x3E,
+ 0x00, 0x02, 0x03, 0x0C, 0x1E, 0x39, 0x00, 0x03, 0x03, 0x23, 0x03, 0x04, 0x1E, 0x37, 0x00, 0x02,
+ 0x03, 0x23, 0x01, 0x3C, 0x00, 0x02, 0x03, 0x27, 0x1E, 0x3D, 0x00, 0x02, 0x03, 0x2D, 0x1E, 0x3B,
+ 0x00, 0x02, 0x03, 0x31, 0x01, 0x3A, 0x00, 0x02, 0x03, 0x41, 0x00, 0x04, 0x00, 0x0A, 0x00, 0x10,
+ 0x00, 0x16, 0x00, 0x1C, 0x1E, 0x3F, 0x00, 0x02, 0x03, 0x01, 0x1E, 0x41, 0x00, 0x02, 0x03, 0x07,
+ 0x1E, 0x43, 0x00, 0x02, 0x03, 0x23, 0x1E, 0x3F, 0x00, 0x02, 0x03, 0x41, 0x00, 0x0B, 0x00, 0x18,
+ 0x00, 0x1E, 0x00, 0x24, 0x00, 0x2A, 0x00, 0x30, 0x00, 0x36, 0x00, 0x3C, 0x00, 0x42, 0x00, 0x48,
+ 0x00, 0x4E, 0x00, 0x54, 0x01, 0xF9, 0x00, 0x02, 0x03, 0x00, 0x01, 0x44, 0x00, 0x02, 0x03, 0x01,
+ 0x00, 0xF1, 0x00, 0x02, 0x03, 0x03, 0x1E, 0x45, 0x00, 0x02, 0x03, 0x07, 0x01, 0x48, 0x00, 0x02,
+ 0x03, 0x0C, 0x1E, 0x47, 0x00, 0x02, 0x03, 0x23, 0x01, 0x46, 0x00, 0x02, 0x03, 0x27, 0x1E, 0x4B,
+ 0x00, 0x02, 0x03, 0x2D, 0x1E, 0x49, 0x00, 0x02, 0x03, 0x31, 0x01, 0xF9, 0x00, 0x02, 0x03, 0x40,
+ 0x01, 0x44, 0x00, 0x02, 0x03, 0x41, 0x00, 0x34, 0x00, 0x6A, 0x00, 0x72, 0x00, 0x78, 0x00, 0x80,
+ 0x00, 0x86, 0x00, 0x8E, 0x00, 0x96, 0x00, 0x9E, 0x00, 0xA6, 0x00, 0xAE, 0x00, 0xB6, 0x00, 0xBE,
+ 0x00, 0xC4, 0x00, 0xCC, 0x00, 0xD4, 0x00, 0xDC, 0x00, 0xE4, 0x00, 0xEC, 0x00, 0xF2, 0x00, 0xFA,
+ 0x01, 0x02, 0x01, 0x0A, 0x01, 0x12, 0x01, 0x1A, 0x01, 0x20, 0x01, 0x26, 0x01, 0x2E, 0x01, 0x34,
+ 0x01, 0x3C, 0x01, 0x42, 0x01, 0x4A, 0x01, 0x50, 0x01, 0x56, 0x01, 0x5C, 0x01, 0x62, 0x01, 0x68,
+ 0x01, 0x70, 0x01, 0x78, 0x01, 0x80, 0x01, 0x88, 0x01, 0x90, 0x01, 0x98, 0x01, 0xA0, 0x01, 0xA6,
+ 0x01, 0xAE, 0x01, 0xB6, 0x01, 0xBC, 0x01, 0xC4, 0x01, 0xCA, 0x01, 0xD2, 0x01, 0xD8, 0x01, 0xE0,
+ 0x1E, 0xDD, 0x00, 0x03, 0x03, 0x00, 0x03, 0x1B, 0x00, 0xF2, 0x00, 0x02, 0x03, 0x00, 0x1E, 0xDB,
+ 0x00, 0x03, 0x03, 0x01, 0x03, 0x1B, 0x00, 0xF3, 0x00, 0x02, 0x03, 0x01, 0x1E, 0xD3, 0x00, 0x03,
+ 0x03, 0x02, 0x03, 0x00, 0x1E, 0xD1, 0x00, 0x03, 0x03, 0x02, 0x03, 0x01, 0x1E, 0xD7, 0x00, 0x03,
+ 0x03, 0x02, 0x03, 0x03, 0x1E, 0xD5, 0x00, 0x03, 0x03, 0x02, 0x03, 0x09, 0x1E, 0xD9, 0x00, 0x03,
+ 0x03, 0x02, 0x03, 0x23, 0x1E, 0xD3, 0x00, 0x03, 0x03, 0x02, 0x03, 0x40, 0x1E, 0xD1, 0x00, 0x03,
+ 0x03, 0x02, 0x03, 0x41, 0x00, 0xF4, 0x00, 0x02, 0x03, 0x02, 0x1E, 0x4D, 0x00, 0x03, 0x03, 0x03,
+ 0x03, 0x01, 0x02, 0x2D, 0x00, 0x03, 0x03, 0x03, 0x03, 0x04, 0x1E, 0x4F, 0x00, 0x03, 0x03, 0x03,
+ 0x03, 0x08, 0x1E, 0xE1, 0x00, 0x03, 0x03, 0x03, 0x03, 0x1B, 0x1E, 0x4D, 0x00, 0x03, 0x03, 0x03,
+ 0x03, 0x41, 0x00, 0xF5, 0x00, 0x02, 0x03, 0x03, 0x1E, 0x51, 0x00, 0x03, 0x03, 0x04, 0x03, 0x00,
+ 0x1E, 0x53, 0x00, 0x03, 0x03, 0x04, 0x03, 0x01, 0x01, 0xED, 0x00, 0x03, 0x03, 0x04, 0x03, 0x28,
+ 0x1E, 0x51, 0x00, 0x03, 0x03, 0x04, 0x03, 0x40, 0x1E, 0x53, 0x00, 0x03, 0x03, 0x04, 0x03, 0x41,
+ 0x01, 0x4D, 0x00, 0x02, 0x03, 0x04, 0x01, 0x4F, 0x00, 0x02, 0x03, 0x06, 0x02, 0x31, 0x00, 0x03,
+ 0x03, 0x07, 0x03, 0x04, 0x02, 0x2F, 0x00, 0x02, 0x03, 0x07, 0x02, 0x2B, 0x00, 0x03, 0x03, 0x08,
+ 0x03, 0x04, 0x00, 0xF6, 0x00, 0x02, 0x03, 0x08, 0x1E, 0xDF, 0x00, 0x03, 0x03, 0x09, 0x03, 0x1B,
+ 0x1E, 0xCF, 0x00, 0x02, 0x03, 0x09, 0x01, 0x51, 0x00, 0x02, 0x03, 0x0B, 0x01, 0xD2, 0x00, 0x02,
+ 0x03, 0x0C, 0x02, 0x0D, 0x00, 0x02, 0x03, 0x0F, 0x02, 0x0F, 0x00, 0x02, 0x03, 0x11, 0x1E, 0xDD,
+ 0x00, 0x03, 0x03, 0x1B, 0x03, 0x00, 0x1E, 0xDB, 0x00, 0x03, 0x03, 0x1B, 0x03, 0x01, 0x1E, 0xE1,
+ 0x00, 0x03, 0x03, 0x1B, 0x03, 0x03, 0x1E, 0xDF, 0x00, 0x03, 0x03, 0x1B, 0x03, 0x09, 0x1E, 0xE3,
+ 0x00, 0x03, 0x03, 0x1B, 0x03, 0x23, 0x1E, 0xDD, 0x00, 0x03, 0x03, 0x1B, 0x03, 0x40, 0x1E, 0xDB,
+ 0x00, 0x03, 0x03, 0x1B, 0x03, 0x41, 0x01, 0xA1, 0x00, 0x02, 0x03, 0x1B, 0x1E, 0xD9, 0x00, 0x03,
+ 0x03, 0x23, 0x03, 0x02, 0x1E, 0xE3, 0x00, 0x03, 0x03, 0x23, 0x03, 0x1B, 0x1E, 0xCD, 0x00, 0x02,
+ 0x03, 0x23, 0x01, 0xED, 0x00, 0x03, 0x03, 0x28, 0x03, 0x04, 0x01, 0xEB, 0x00, 0x02, 0x03, 0x28,
+ 0x1E, 0xDD, 0x00, 0x03, 0x03, 0x40, 0x03, 0x1B, 0x00, 0xF2, 0x00, 0x02, 0x03, 0x40, 0x1E, 0xDB,
+ 0x00, 0x03, 0x03, 0x41, 0x03, 0x1B, 0x00, 0xF3, 0x00, 0x02, 0x03, 0x41, 0x00, 0x03, 0x00, 0x08,
+ 0x00, 0x0E, 0x00, 0x14, 0x1E, 0x55, 0x00, 0x02, 0x03, 0x01, 0x1E, 0x57, 0x00, 0x02, 0x03, 0x07,
+ 0x1E, 0x55, 0x00, 0x02, 0x03, 0x41, 0x00, 0x0B, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x26, 0x00, 0x2C,
+ 0x00, 0x32, 0x00, 0x38, 0x00, 0x3E, 0x00, 0x46, 0x00, 0x4C, 0x00, 0x52, 0x00, 0x58, 0x01, 0x55,
+ 0x00, 0x02, 0x03, 0x01, 0x1E, 0x5D, 0x00, 0x03, 0x03, 0x04, 0x03, 0x23, 0x1E, 0x59, 0x00, 0x02,
+ 0x03, 0x07, 0x01, 0x59, 0x00, 0x02, 0x03, 0x0C, 0x02, 0x11, 0x00, 0x02, 0x03, 0x0F, 0x02, 0x13,
+ 0x00, 0x02, 0x03, 0x11, 0x1E, 0x5D, 0x00, 0x03, 0x03, 0x23, 0x03, 0x04, 0x1E, 0x5B, 0x00, 0x02,
+ 0x03, 0x23, 0x01, 0x57, 0x00, 0x02, 0x03, 0x27, 0x1E, 0x5F, 0x00, 0x02, 0x03, 0x31, 0x01, 0x55,
+ 0x00, 0x02, 0x03, 0x41, 0x00, 0x0D, 0x00, 0x1C, 0x00, 0x24, 0x00, 0x2A, 0x00, 0x30, 0x00, 0x38,
+ 0x00, 0x3E, 0x00, 0x46, 0x00, 0x4C, 0x00, 0x54, 0x00, 0x5A, 0x00, 0x60, 0x00, 0x66, 0x00, 0x6E,
+ 0x1E, 0x65, 0x00, 0x03, 0x03, 0x01, 0x03, 0x07, 0x01, 0x5B, 0x00, 0x02, 0x03, 0x01, 0x01, 0x5D,
+ 0x00, 0x02, 0x03, 0x02, 0x1E, 0x69, 0x00, 0x03, 0x03, 0x07, 0x03, 0x23, 0x1E, 0x61, 0x00, 0x02,
+ 0x03, 0x07, 0x1E, 0x67, 0x00, 0x03, 0x03, 0x0C, 0x03, 0x07, 0x01, 0x61, 0x00, 0x02, 0x03, 0x0C,
+ 0x1E, 0x69, 0x00, 0x03, 0x03, 0x23, 0x03, 0x07, 0x1E, 0x63, 0x00, 0x02, 0x03, 0x23, 0x02, 0x19,
+ 0x00, 0x02, 0x03, 0x26, 0x01, 0x5F, 0x00, 0x02, 0x03, 0x27, 0x1E, 0x65, 0x00, 0x03, 0x03, 0x41,
+ 0x03, 0x07, 0x01, 0x5B, 0x00, 0x02, 0x03, 0x41, 0x00, 0x08, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E,
+ 0x00, 0x24, 0x00, 0x2A, 0x00, 0x30, 0x00, 0x36, 0x00, 0x3C, 0x1E, 0x6B, 0x00, 0x02, 0x03, 0x07,
+ 0x1E, 0x97, 0x00, 0x02, 0x03, 0x08, 0x01, 0x65, 0x00, 0x02, 0x03, 0x0C, 0x1E, 0x6D, 0x00, 0x02,
+ 0x03, 0x23, 0x02, 0x1B, 0x00, 0x02, 0x03, 0x26, 0x01, 0x63, 0x00, 0x02, 0x03, 0x27, 0x1E, 0x71,
+ 0x00, 0x02, 0x03, 0x2D, 0x1E, 0x6F, 0x00, 0x02, 0x03, 0x31, 0x00, 0x2D, 0x00, 0x5C, 0x00, 0x64,
+ 0x00, 0x6A, 0x00, 0x72, 0x00, 0x78, 0x00, 0x7E, 0x00, 0x86, 0x00, 0x8E, 0x00, 0x96, 0x00, 0x9C,
+ 0x00, 0xA4, 0x00, 0xAA, 0x00, 0xB0, 0x00, 0xB8, 0x00, 0xC0, 0x00, 0xC8, 0x00, 0xD0, 0x00, 0xD8,
+ 0x00, 0xE0, 0x00, 0xE6, 0x00, 0xEE, 0x00, 0xF4, 0x00, 0xFA, 0x01, 0x00, 0x01, 0x06, 0x01, 0x0C,
+ 0x01, 0x12, 0x01, 0x1A, 0x01, 0x22, 0x01, 0x2A, 0x01, 0x32, 0x01, 0x3A, 0x01, 0x42, 0x01, 0x4A,
+ 0x01, 0x50, 0x01, 0x58, 0x01, 0x5E, 0x01, 0x64, 0x01, 0x6A, 0x01, 0x70, 0x01, 0x76, 0x01, 0x7E,
+ 0x01, 0x84, 0x01, 0x8C, 0x01, 0x92, 0x1E, 0xEB, 0x00, 0x03, 0x03, 0x00, 0x03, 0x1B, 0x00, 0xF9,
+ 0x00, 0x02, 0x03, 0x00, 0x1E, 0xE9, 0x00, 0x03, 0x03, 0x01, 0x03, 0x1B, 0x00, 0xFA, 0x00, 0x02,
+ 0x03, 0x01, 0x00, 0xFB, 0x00, 0x02, 0x03, 0x02, 0x1E, 0x79, 0x00, 0x03, 0x03, 0x03, 0x03, 0x01,
+ 0x1E, 0xEF, 0x00, 0x03, 0x03, 0x03, 0x03, 0x1B, 0x1E, 0x79, 0x00, 0x03, 0x03, 0x03, 0x03, 0x41,
+ 0x01, 0x69, 0x00, 0x02, 0x03, 0x03, 0x1E, 0x7B, 0x00, 0x03, 0x03, 0x04, 0x03, 0x08, 0x01, 0x6B,
+ 0x00, 0x02, 0x03, 0x04, 0x01, 0x6D, 0x00, 0x02, 0x03, 0x06, 0x01, 0xDC, 0x00, 0x03, 0x03, 0x08,
+ 0x03, 0x00, 0x01, 0xD8, 0x00, 0x03, 0x03, 0x08, 0x03, 0x01, 0x01, 0xD6, 0x00, 0x03, 0x03, 0x08,
+ 0x03, 0x04, 0x01, 0xDA, 0x00, 0x03, 0x03, 0x08, 0x03, 0x0C, 0x01, 0xDC, 0x00, 0x03, 0x03, 0x08,
+ 0x03, 0x40, 0x01, 0xD8, 0x00, 0x03, 0x03, 0x08, 0x03, 0x41, 0x00, 0xFC, 0x00, 0x02, 0x03, 0x08,
+ 0x1E, 0xED, 0x00, 0x03, 0x03, 0x09, 0x03, 0x1B, 0x1E, 0xE7, 0x00, 0x02, 0x03, 0x09, 0x01, 0x6F,
+ 0x00, 0x02, 0x03, 0x0A, 0x01, 0x71, 0x00, 0x02, 0x03, 0x0B, 0x01, 0xD4, 0x00, 0x02, 0x03, 0x0C,
+ 0x02, 0x15, 0x00, 0x02, 0x03, 0x0F, 0x02, 0x17, 0x00, 0x02, 0x03, 0x11, 0x1E, 0xEB, 0x00, 0x03,
+ 0x03, 0x1B, 0x03, 0x00, 0x1E, 0xE9, 0x00, 0x03, 0x03, 0x1B, 0x03, 0x01, 0x1E, 0xEF, 0x00, 0x03,
+ 0x03, 0x1B, 0x03, 0x03, 0x1E, 0xED, 0x00, 0x03, 0x03, 0x1B, 0x03, 0x09, 0x1E, 0xF1, 0x00, 0x03,
+ 0x03, 0x1B, 0x03, 0x23, 0x1E, 0xEB, 0x00, 0x03, 0x03, 0x1B, 0x03, 0x40, 0x1E, 0xE9, 0x00, 0x03,
+ 0x03, 0x1B, 0x03, 0x41, 0x01, 0xB0, 0x00, 0x02, 0x03, 0x1B, 0x1E, 0xF1, 0x00, 0x03, 0x03, 0x23,
+ 0x03, 0x1B, 0x1E, 0xE5, 0x00, 0x02, 0x03, 0x23, 0x1E, 0x73, 0x00, 0x02, 0x03, 0x24, 0x01, 0x73,
+ 0x00, 0x02, 0x03, 0x28, 0x1E, 0x77, 0x00, 0x02, 0x03, 0x2D, 0x1E, 0x75, 0x00, 0x02, 0x03, 0x30,
+ 0x1E, 0xEB, 0x00, 0x03, 0x03, 0x40, 0x03, 0x1B, 0x00, 0xF9, 0x00, 0x02, 0x03, 0x40, 0x1E, 0xE9,
+ 0x00, 0x03, 0x03, 0x41, 0x03, 0x1B, 0x00, 0xFA, 0x00, 0x02, 0x03, 0x41, 0x01, 0xD8, 0x00, 0x02,
+ 0x03, 0x44, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x1E, 0x7D, 0x00, 0x02, 0x03, 0x03, 0x1E, 0x7F,
+ 0x00, 0x02, 0x03, 0x23, 0x00, 0x09, 0x00, 0x14, 0x00, 0x1A, 0x00, 0x20, 0x00, 0x26, 0x00, 0x2C,
+ 0x00, 0x32, 0x00, 0x38, 0x00, 0x3E, 0x00, 0x44, 0x1E, 0x81, 0x00, 0x02, 0x03, 0x00, 0x1E, 0x83,
+ 0x00, 0x02, 0x03, 0x01, 0x01, 0x75, 0x00, 0x02, 0x03, 0x02, 0x1E, 0x87, 0x00, 0x02, 0x03, 0x07,
+ 0x1E, 0x85, 0x00, 0x02, 0x03, 0x08, 0x1E, 0x98, 0x00, 0x02, 0x03, 0x0A, 0x1E, 0x89, 0x00, 0x02,
+ 0x03, 0x23, 0x1E, 0x81, 0x00, 0x02, 0x03, 0x40, 0x1E, 0x83, 0x00, 0x02, 0x03, 0x41, 0x00, 0x02,
+ 0x00, 0x06, 0x00, 0x0C, 0x1E, 0x8B, 0x00, 0x02, 0x03, 0x07, 0x1E, 0x8D, 0x00, 0x02, 0x03, 0x08,
+ 0x00, 0x0C, 0x00, 0x1A, 0x00, 0x20, 0x00, 0x26, 0x00, 0x2C, 0x00, 0x32, 0x00, 0x38, 0x00, 0x3E,
+ 0x00, 0x44, 0x00, 0x4A, 0x00, 0x50, 0x00, 0x56, 0x00, 0x5C, 0x1E, 0xF3, 0x00, 0x02, 0x03, 0x00,
+ 0x00, 0xFD, 0x00, 0x02, 0x03, 0x01, 0x01, 0x77, 0x00, 0x02, 0x03, 0x02, 0x1E, 0xF9, 0x00, 0x02,
+ 0x03, 0x03, 0x02, 0x33, 0x00, 0x02, 0x03, 0x04, 0x1E, 0x8F, 0x00, 0x02, 0x03, 0x07, 0x00, 0xFF,
+ 0x00, 0x02, 0x03, 0x08, 0x1E, 0xF7, 0x00, 0x02, 0x03, 0x09, 0x1E, 0x99, 0x00, 0x02, 0x03, 0x0A,
+ 0x1E, 0xF5, 0x00, 0x02, 0x03, 0x23, 0x1E, 0xF3, 0x00, 0x02, 0x03, 0x40, 0x00, 0xFD, 0x00, 0x02,
+ 0x03, 0x41, 0x00, 0x07, 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C, 0x00, 0x22, 0x00, 0x28, 0x00, 0x2E,
+ 0x00, 0x34, 0x01, 0x7A, 0x00, 0x02, 0x03, 0x01, 0x1E, 0x91, 0x00, 0x02, 0x03, 0x02, 0x01, 0x7C,
+ 0x00, 0x02, 0x03, 0x07, 0x01, 0x7E, 0x00, 0x02, 0x03, 0x0C, 0x1E, 0x93, 0x00, 0x02, 0x03, 0x23,
+ 0x1E, 0x95, 0x00, 0x02, 0x03, 0x31, 0x01, 0x7A, 0x00, 0x02, 0x03, 0x41, 0x00, 0x07, 0x00, 0x10,
+ 0x00, 0x16, 0x00, 0x1C, 0x00, 0x22, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x34, 0x1E, 0xA6, 0x00, 0x02,
+ 0x03, 0x00, 0x1E, 0xA4, 0x00, 0x02, 0x03, 0x01, 0x1E, 0xAA, 0x00, 0x02, 0x03, 0x03, 0x1E, 0xA8,
+ 0x00, 0x02, 0x03, 0x09, 0x1E, 0xAC, 0x00, 0x02, 0x03, 0x23, 0x1E, 0xA6, 0x00, 0x02, 0x03, 0x40,
+ 0x1E, 0xA4, 0x00, 0x02, 0x03, 0x41, 0x00, 0x01, 0x00, 0x04, 0x01, 0xDE, 0x00, 0x02, 0x03, 0x04,
+ 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x01, 0xFA, 0x00, 0x02, 0x03, 0x01, 0x01, 0xFA, 0x00, 0x02,
+ 0x03, 0x41, 0x00, 0x03, 0x00, 0x08, 0x00, 0x0E, 0x00, 0x14, 0x01, 0xFC, 0x00, 0x02, 0x03, 0x01,
+ 0x01, 0xE2, 0x00, 0x02, 0x03, 0x04, 0x01, 0xFC, 0x00, 0x02, 0x03, 0x41, 0x00, 0x02, 0x00, 0x06,
+ 0x00, 0x0C, 0x1E, 0x08, 0x00, 0x02, 0x03, 0x01, 0x1E, 0x08, 0x00, 0x02, 0x03, 0x41, 0x00, 0x07,
+ 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C, 0x00, 0x22, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x34, 0x1E, 0xC0,
+ 0x00, 0x02, 0x03, 0x00, 0x1E, 0xBE, 0x00, 0x02, 0x03, 0x01, 0x1E, 0xC4, 0x00, 0x02, 0x03, 0x03,
+ 0x1E, 0xC2, 0x00, 0x02, 0x03, 0x09, 0x1E, 0xC6, 0x00, 0x02, 0x03, 0x23, 0x1E, 0xC0, 0x00, 0x02,
+ 0x03, 0x40, 0x1E, 0xBE, 0x00, 0x02, 0x03, 0x41, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x1E, 0x2E,
+ 0x00, 0x02, 0x03, 0x01, 0x1E, 0x2E, 0x00, 0x02, 0x03, 0x41, 0x00, 0x01, 0x00, 0x04, 0x1E, 0xDC,
+ 0x00, 0x02, 0x03, 0x1B, 0x00, 0x01, 0x00, 0x04, 0x1E, 0xDA, 0x00, 0x02, 0x03, 0x1B, 0x00, 0x07,
+ 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C, 0x00, 0x22, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x34, 0x1E, 0xD2,
+ 0x00, 0x02, 0x03, 0x00, 0x1E, 0xD0, 0x00, 0x02, 0x03, 0x01, 0x1E, 0xD6, 0x00, 0x02, 0x03, 0x03,
+ 0x1E, 0xD4, 0x00, 0x02, 0x03, 0x09, 0x1E, 0xD8, 0x00, 0x02, 0x03, 0x23, 0x1E, 0xD2, 0x00, 0x02,
+ 0x03, 0x40, 0x1E, 0xD0, 0x00, 0x02, 0x03, 0x41, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18,
+ 0x00, 0x1E, 0x00, 0x24, 0x1E, 0x4C, 0x00, 0x02, 0x03, 0x01, 0x02, 0x2C, 0x00, 0x02, 0x03, 0x04,
+ 0x1E, 0x4E, 0x00, 0x02, 0x03, 0x08, 0x1E, 0xE0, 0x00, 0x02, 0x03, 0x1B, 0x1E, 0x4C, 0x00, 0x02,
+ 0x03, 0x41, 0x00, 0x01, 0x00, 0x04, 0x02, 0x2A, 0x00, 0x02, 0x03, 0x04, 0x00, 0x02, 0x00, 0x06,
+ 0x00, 0x0C, 0x01, 0xFE, 0x00, 0x02, 0x03, 0x01, 0x01, 0xFE, 0x00, 0x02, 0x03, 0x41, 0x00, 0x01,
+ 0x00, 0x04, 0x1E, 0xEA, 0x00, 0x02, 0x03, 0x1B, 0x00, 0x01, 0x00, 0x04, 0x1E, 0xE8, 0x00, 0x02,
+ 0x03, 0x1B, 0x00, 0x06, 0x00, 0x0E, 0x00, 0x14, 0x00, 0x1A, 0x00, 0x20, 0x00, 0x26, 0x00, 0x2C,
+ 0x01, 0xDB, 0x00, 0x02, 0x03, 0x00, 0x01, 0xD7, 0x00, 0x02, 0x03, 0x01, 0x01, 0xD5, 0x00, 0x02,
+ 0x03, 0x04, 0x01, 0xD9, 0x00, 0x02, 0x03, 0x0C, 0x01, 0xDB, 0x00, 0x02, 0x03, 0x40, 0x01, 0xD7,
+ 0x00, 0x02, 0x03, 0x41, 0x00, 0x07, 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C, 0x00, 0x22, 0x00, 0x28,
+ 0x00, 0x2E, 0x00, 0x34, 0x1E, 0xA7, 0x00, 0x02, 0x03, 0x00, 0x1E, 0xA5, 0x00, 0x02, 0x03, 0x01,
+ 0x1E, 0xAB, 0x00, 0x02, 0x03, 0x03, 0x1E, 0xA9, 0x00, 0x02, 0x03, 0x09, 0x1E, 0xAD, 0x00, 0x02,
+ 0x03, 0x23, 0x1E, 0xA7, 0x00, 0x02, 0x03, 0x40, 0x1E, 0xA5, 0x00, 0x02, 0x03, 0x41, 0x00, 0x01,
+ 0x00, 0x04, 0x01, 0xDF, 0x00, 0x02, 0x03, 0x04, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x01, 0xFB,
+ 0x00, 0x02, 0x03, 0x01, 0x01, 0xFB, 0x00, 0x02, 0x03, 0x41, 0x00, 0x03, 0x00, 0x08, 0x00, 0x0E,
+ 0x00, 0x14, 0x01, 0xFD, 0x00, 0x02, 0x03, 0x01, 0x01, 0xE3, 0x00, 0x02, 0x03, 0x04, 0x01, 0xFD,
+ 0x00, 0x02, 0x03, 0x41, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x1E, 0x09, 0x00, 0x02, 0x03, 0x01,
+ 0x1E, 0x09, 0x00, 0x02, 0x03, 0x41, 0x00, 0x07, 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C, 0x00, 0x22,
+ 0x00, 0x28, 0x00, 0x2E, 0x00, 0x34, 0x1E, 0xC1, 0x00, 0x02, 0x03, 0x00, 0x1E, 0xBF, 0x00, 0x02,
+ 0x03, 0x01, 0x1E, 0xC5, 0x00, 0x02, 0x03, 0x03, 0x1E, 0xC3, 0x00, 0x02, 0x03, 0x09, 0x1E, 0xC7,
+ 0x00, 0x02, 0x03, 0x23, 0x1E, 0xC1, 0x00, 0x02, 0x03, 0x40, 0x1E, 0xBF, 0x00, 0x02, 0x03, 0x41,
+ 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x1E, 0x2F, 0x00, 0x02, 0x03, 0x01, 0x1E, 0x2F, 0x00, 0x02,
+ 0x03, 0x41, 0x00, 0x01, 0x00, 0x04, 0x1E, 0xDD, 0x00, 0x02, 0x03, 0x1B, 0x00, 0x01, 0x00, 0x04,
+ 0x1E, 0xDB, 0x00, 0x02, 0x03, 0x1B, 0x00, 0x07, 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C, 0x00, 0x22,
+ 0x00, 0x28, 0x00, 0x2E, 0x00, 0x34, 0x1E, 0xD3, 0x00, 0x02, 0x03, 0x00, 0x1E, 0xD1, 0x00, 0x02,
+ 0x03, 0x01, 0x1E, 0xD7, 0x00, 0x02, 0x03, 0x03, 0x1E, 0xD5, 0x00, 0x02, 0x03, 0x09, 0x1E, 0xD9,
+ 0x00, 0x02, 0x03, 0x23, 0x1E, 0xD3, 0x00, 0x02, 0x03, 0x40, 0x1E, 0xD1, 0x00, 0x02, 0x03, 0x41,
+ 0x00, 0x05, 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x1E, 0x4D, 0x00, 0x02,
+ 0x03, 0x01, 0x02, 0x2D, 0x00, 0x02, 0x03, 0x04, 0x1E, 0x4F, 0x00, 0x02, 0x03, 0x08, 0x1E, 0xE1,
+ 0x00, 0x02, 0x03, 0x1B, 0x1E, 0x4D, 0x00, 0x02, 0x03, 0x41, 0x00, 0x01, 0x00, 0x04, 0x02, 0x2B,
+ 0x00, 0x02, 0x03, 0x04, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x01, 0xFF, 0x00, 0x02, 0x03, 0x01,
+ 0x01, 0xFF, 0x00, 0x02, 0x03, 0x41, 0x00, 0x01, 0x00, 0x04, 0x1E, 0xEB, 0x00, 0x02, 0x03, 0x1B,
+ 0x00, 0x01, 0x00, 0x04, 0x1E, 0xE9, 0x00, 0x02, 0x03, 0x1B, 0x00, 0x06, 0x00, 0x0E, 0x00, 0x14,
+ 0x00, 0x1A, 0x00, 0x20, 0x00, 0x26, 0x00, 0x2C, 0x01, 0xDC, 0x00, 0x02, 0x03, 0x00, 0x01, 0xD8,
+ 0x00, 0x02, 0x03, 0x01, 0x01, 0xD6, 0x00, 0x02, 0x03, 0x04, 0x01, 0xDA, 0x00, 0x02, 0x03, 0x0C,
+ 0x01, 0xDC, 0x00, 0x02, 0x03, 0x40, 0x01, 0xD8, 0x00, 0x02, 0x03, 0x41, 0x00, 0x07, 0x00, 0x10,
+ 0x00, 0x16, 0x00, 0x1C, 0x00, 0x22, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x34, 0x1E, 0xB0, 0x00, 0x02,
+ 0x03, 0x00, 0x1E, 0xAE, 0x00, 0x02, 0x03, 0x01, 0x1E, 0xB4, 0x00, 0x02, 0x03, 0x03, 0x1E, 0xB2,
+ 0x00, 0x02, 0x03, 0x09, 0x1E, 0xB6, 0x00, 0x02, 0x03, 0x23, 0x1E, 0xB0, 0x00, 0x02, 0x03, 0x40,
+ 0x1E, 0xAE, 0x00, 0x02, 0x03, 0x41, 0x00, 0x07, 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C, 0x00, 0x22,
+ 0x00, 0x28, 0x00, 0x2E, 0x00, 0x34, 0x1E, 0xB1, 0x00, 0x02, 0x03, 0x00, 0x1E, 0xAF, 0x00, 0x02,
+ 0x03, 0x01, 0x1E, 0xB5, 0x00, 0x02, 0x03, 0x03, 0x1E, 0xB3, 0x00, 0x02, 0x03, 0x09, 0x1E, 0xB7,
+ 0x00, 0x02, 0x03, 0x23, 0x1E, 0xB1, 0x00, 0x02, 0x03, 0x40, 0x1E, 0xAF, 0x00, 0x02, 0x03, 0x41,
+ 0x00, 0x01, 0x00, 0x04, 0x1E, 0x08, 0x00, 0x02, 0x03, 0x27, 0x00, 0x01, 0x00, 0x04, 0x1E, 0x09,
+ 0x00, 0x02, 0x03, 0x27, 0x00, 0x04, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C, 0x1E, 0x14,
+ 0x00, 0x02, 0x03, 0x00, 0x1E, 0x16, 0x00, 0x02, 0x03, 0x01, 0x1E, 0x14, 0x00, 0x02, 0x03, 0x40,
+ 0x1E, 0x16, 0x00, 0x02, 0x03, 0x41, 0x00, 0x04, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C,
+ 0x1E, 0x15, 0x00, 0x02, 0x03, 0x00, 0x1E, 0x17, 0x00, 0x02, 0x03, 0x01, 0x1E, 0x15, 0x00, 0x02,
+ 0x03, 0x40, 0x1E, 0x17, 0x00, 0x02, 0x03, 0x41, 0x00, 0x01, 0x00, 0x04, 0x1E, 0x1C, 0x00, 0x02,
+ 0x03, 0x27, 0x00, 0x01, 0x00, 0x04, 0x1E, 0x1D, 0x00, 0x02, 0x03, 0x27, 0x00, 0x05, 0x00, 0x0C,
+ 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x1E, 0x50, 0x00, 0x02, 0x03, 0x00, 0x1E, 0x52,
+ 0x00, 0x02, 0x03, 0x01, 0x01, 0xEC, 0x00, 0x02, 0x03, 0x28, 0x1E, 0x50, 0x00, 0x02, 0x03, 0x40,
+ 0x1E, 0x52, 0x00, 0x02, 0x03, 0x41, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E,
+ 0x00, 0x24, 0x1E, 0x51, 0x00, 0x02, 0x03, 0x00, 0x1E, 0x53, 0x00, 0x02, 0x03, 0x01, 0x01, 0xED,
+ 0x00, 0x02, 0x03, 0x28, 0x1E, 0x51, 0x00, 0x02, 0x03, 0x40, 0x1E, 0x53, 0x00, 0x02, 0x03, 0x41,
+ 0x00, 0x01, 0x00, 0x04, 0x1E, 0x64, 0x00, 0x02, 0x03, 0x07, 0x00, 0x01, 0x00, 0x04, 0x1E, 0x65,
+ 0x00, 0x02, 0x03, 0x07, 0x00, 0x01, 0x00, 0x04, 0x1E, 0x66, 0x00, 0x02, 0x03, 0x07, 0x00, 0x01,
+ 0x00, 0x04, 0x1E, 0x67, 0x00, 0x02, 0x03, 0x07, 0x00, 0x03, 0x00, 0x08, 0x00, 0x0E, 0x00, 0x14,
+ 0x1E, 0x78, 0x00, 0x02, 0x03, 0x01, 0x1E, 0xEE, 0x00, 0x02, 0x03, 0x1B, 0x1E, 0x78, 0x00, 0x02,
+ 0x03, 0x41, 0x00, 0x03, 0x00, 0x08, 0x00, 0x0E, 0x00, 0x14, 0x1E, 0x79, 0x00, 0x02, 0x03, 0x01,
+ 0x1E, 0xEF, 0x00, 0x02, 0x03, 0x1B, 0x1E, 0x79, 0x00, 0x02, 0x03, 0x41, 0x00, 0x01, 0x00, 0x04,
+ 0x1E, 0x7A, 0x00, 0x02, 0x03, 0x08, 0x00, 0x01, 0x00, 0x04, 0x1E, 0x7B, 0x00, 0x02, 0x03, 0x08,
+ 0x00, 0x01, 0x00, 0x04, 0x1E, 0x9B, 0x00, 0x02, 0x03, 0x07, 0x00, 0x07, 0x00, 0x10, 0x00, 0x16,
+ 0x00, 0x1C, 0x00, 0x22, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x34, 0x1E, 0xDC, 0x00, 0x02, 0x03, 0x00,
+ 0x1E, 0xDA, 0x00, 0x02, 0x03, 0x01, 0x1E, 0xE0, 0x00, 0x02, 0x03, 0x03, 0x1E, 0xDE, 0x00, 0x02,
+ 0x03, 0x09, 0x1E, 0xE2, 0x00, 0x02, 0x03, 0x23, 0x1E, 0xDC, 0x00, 0x02, 0x03, 0x40, 0x1E, 0xDA,
+ 0x00, 0x02, 0x03, 0x41, 0x00, 0x07, 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C, 0x00, 0x22, 0x00, 0x28,
+ 0x00, 0x2E, 0x00, 0x34, 0x1E, 0xDD, 0x00, 0x02, 0x03, 0x00, 0x1E, 0xDB, 0x00, 0x02, 0x03, 0x01,
+ 0x1E, 0xE1, 0x00, 0x02, 0x03, 0x03, 0x1E, 0xDF, 0x00, 0x02, 0x03, 0x09, 0x1E, 0xE3, 0x00, 0x02,
+ 0x03, 0x23, 0x1E, 0xDD, 0x00, 0x02, 0x03, 0x40, 0x1E, 0xDB, 0x00, 0x02, 0x03, 0x41, 0x00, 0x07,
+ 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C, 0x00, 0x22, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x34, 0x1E, 0xEA,
+ 0x00, 0x02, 0x03, 0x00, 0x1E, 0xE8, 0x00, 0x02, 0x03, 0x01, 0x1E, 0xEE, 0x00, 0x02, 0x03, 0x03,
+ 0x1E, 0xEC, 0x00, 0x02, 0x03, 0x09, 0x1E, 0xF0, 0x00, 0x02, 0x03, 0x23, 0x1E, 0xEA, 0x00, 0x02,
+ 0x03, 0x40, 0x1E, 0xE8, 0x00, 0x02, 0x03, 0x41, 0x00, 0x07, 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C,
+ 0x00, 0x22, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x34, 0x1E, 0xEB, 0x00, 0x02, 0x03, 0x00, 0x1E, 0xE9,
+ 0x00, 0x02, 0x03, 0x01, 0x1E, 0xEF, 0x00, 0x02, 0x03, 0x03, 0x1E, 0xED, 0x00, 0x02, 0x03, 0x09,
+ 0x1E, 0xF1, 0x00, 0x02, 0x03, 0x23, 0x1E, 0xEB, 0x00, 0x02, 0x03, 0x40, 0x1E, 0xE9, 0x00, 0x02,
+ 0x03, 0x41, 0x00, 0x01, 0x00, 0x04, 0x01, 0xEE, 0x00, 0x02, 0x03, 0x0C, 0x00, 0x01, 0x00, 0x04,
+ 0x01, 0xEC, 0x00, 0x02, 0x03, 0x04, 0x00, 0x01, 0x00, 0x04, 0x01, 0xED, 0x00, 0x02, 0x03, 0x04,
+ 0x00, 0x01, 0x00, 0x04, 0x01, 0xE0, 0x00, 0x02, 0x03, 0x04, 0x00, 0x01, 0x00, 0x04, 0x01, 0xE1,
+ 0x00, 0x02, 0x03, 0x04, 0x00, 0x01, 0x00, 0x04, 0x1E, 0x1C, 0x00, 0x02, 0x03, 0x06, 0x00, 0x01,
+ 0x00, 0x04, 0x1E, 0x1D, 0x00, 0x02, 0x03, 0x06, 0x00, 0x01, 0x00, 0x04, 0x02, 0x30, 0x00, 0x02,
+ 0x03, 0x04, 0x00, 0x01, 0x00, 0x04, 0x02, 0x31, 0x00, 0x02, 0x03, 0x04, 0x00, 0x01, 0x00, 0x04,
+ 0x01, 0xEF, 0x00, 0x02, 0x03, 0x0C, 0x00, 0x01, 0x00, 0x04, 0x1E, 0x38, 0x00, 0x02, 0x03, 0x04,
+ 0x00, 0x01, 0x00, 0x04, 0x1E, 0x39, 0x00, 0x02, 0x03, 0x04, 0x00, 0x01, 0x00, 0x04, 0x1E, 0x5C,
+ 0x00, 0x02, 0x03, 0x04, 0x00, 0x01, 0x00, 0x04, 0x1E, 0x5D, 0x00, 0x02, 0x03, 0x04, 0x00, 0x01,
+ 0x00, 0x04, 0x1E, 0x68, 0x00, 0x02, 0x03, 0x23, 0x00, 0x01, 0x00, 0x04, 0x1E, 0x69, 0x00, 0x02,
+ 0x03, 0x23, 0x00, 0x01, 0x00, 0x04, 0x1E, 0x68, 0x00, 0x02, 0x03, 0x07, 0x00, 0x01, 0x00, 0x04,
+ 0x1E, 0x69, 0x00, 0x02, 0x03, 0x07, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x1E, 0xAC, 0x00, 0x02,
+ 0x03, 0x02, 0x1E, 0xB6, 0x00, 0x02, 0x03, 0x06, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x1E, 0xAD,
+ 0x00, 0x02, 0x03, 0x02, 0x1E, 0xB7, 0x00, 0x02, 0x03, 0x06, 0x00, 0x01, 0x00, 0x04, 0x1E, 0xC6,
+ 0x00, 0x02, 0x03, 0x02, 0x00, 0x01, 0x00, 0x04, 0x1E, 0xC7, 0x00, 0x02, 0x03, 0x02, 0x00, 0x02,
+ 0x00, 0x06, 0x00, 0x0C, 0x1E, 0xD8, 0x00, 0x02, 0x03, 0x02, 0x1E, 0xE2, 0x00, 0x02, 0x03, 0x1B,
+ 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x1E, 0xD9, 0x00, 0x02, 0x03, 0x02, 0x1E, 0xE3, 0x00, 0x02,
+ 0x03, 0x1B, 0x00, 0x01, 0x00, 0x04, 0x1E, 0xDE, 0x00, 0x02, 0x03, 0x1B, 0x00, 0x01, 0x00, 0x04,
+ 0x1E, 0xDF, 0x00, 0x02, 0x03, 0x1B, 0x00, 0x01, 0x00, 0x04, 0x1E, 0xF0, 0x00, 0x02, 0x03, 0x1B,
+ 0x00, 0x01, 0x00, 0x04, 0x1E, 0xF1, 0x00, 0x02, 0x03, 0x1B, 0x00, 0x01, 0x00, 0x04, 0x1E, 0xEC,
+ 0x00, 0x02, 0x03, 0x1B, 0x00, 0x01, 0x00, 0x04, 0x1E, 0xED, 0x00, 0x02, 0x03, 0x1B, 0x00, 0x06,
+ 0x00, 0x0E, 0x00, 0x14, 0x00, 0x1A, 0x00, 0x20, 0x00, 0x26, 0x00, 0x2C, 0x1E, 0x30, 0x00, 0x02,
+ 0x03, 0x01, 0x01, 0xE8, 0x00, 0x02, 0x03, 0x0C, 0x1E, 0x32, 0x00, 0x02, 0x03, 0x23, 0x01, 0x36,
+ 0x00, 0x02, 0x03, 0x27, 0x1E, 0x34, 0x00, 0x02, 0x03, 0x31, 0x1E, 0x30, 0x00, 0x02, 0x03, 0x41,
+ 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x01, 0xFA, 0x00, 0x02, 0x03, 0x01, 0x01, 0xFA, 0x00, 0x02,
+ 0x03, 0x41, 0x00, 0x01, 0x00, 0x89, 0x00, 0x41, 0x00, 0x42, 0x00, 0x43, 0x00, 0x44, 0x00, 0x45,
+ 0x00, 0x46, 0x00, 0x47, 0x00, 0x48, 0x00, 0x49, 0x00, 0x4A, 0x00, 0x4B, 0x00, 0x4C, 0x00, 0x4D,
+ 0x00, 0x4E, 0x00, 0x4F, 0x00, 0x50, 0x00, 0x52, 0x00, 0x53, 0x00, 0x54, 0x00, 0x55, 0x00, 0x56,
+ 0x00, 0x57, 0x00, 0x58, 0x00, 0x59, 0x00, 0x5A, 0x00, 0x61, 0x00, 0x62, 0x00, 0x63, 0x00, 0x64,
+ 0x00, 0x65, 0x00, 0x66, 0x00, 0x67, 0x00, 0x68, 0x00, 0x69, 0x00, 0x6A, 0x00, 0x6B, 0x00, 0x6C,
+ 0x00, 0x6D, 0x00, 0x6E, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x72, 0x00, 0x73, 0x00, 0x74, 0x00, 0x75,
+ 0x00, 0x76, 0x00, 0x77, 0x00, 0x78, 0x00, 0x79, 0x00, 0x7A, 0x00, 0xC2, 0x00, 0xC4, 0x00, 0xC5,
+ 0x00, 0xC6, 0x00, 0xC7, 0x00, 0xCA, 0x00, 0xCF, 0x00, 0xD2, 0x00, 0xD3, 0x00, 0xD4, 0x00, 0xD5,
+ 0x00, 0xD6, 0x00, 0xD8, 0x00, 0xD9, 0x00, 0xDA, 0x00, 0xDC, 0x00, 0xE2, 0x00, 0xE4, 0x00, 0xE5,
+ 0x00, 0xE6, 0x00, 0xE7, 0x00, 0xEA, 0x00, 0xEF, 0x00, 0xF2, 0x00, 0xF3, 0x00, 0xF4, 0x00, 0xF5,
+ 0x00, 0xF6, 0x00, 0xF8, 0x00, 0xF9, 0x00, 0xFA, 0x00, 0xFC, 0x01, 0x02, 0x01, 0x03, 0x01, 0x06,
+ 0x01, 0x07, 0x01, 0x12, 0x01, 0x13, 0x01, 0x14, 0x01, 0x15, 0x01, 0x4C, 0x01, 0x4D, 0x01, 0x5A,
+ 0x01, 0x5B, 0x01, 0x60, 0x01, 0x61, 0x01, 0x68, 0x01, 0x69, 0x01, 0x6A, 0x01, 0x6B, 0x01, 0x7F,
+ 0x01, 0xA0, 0x01, 0xA1, 0x01, 0xAF, 0x01, 0xB0, 0x01, 0xB7, 0x01, 0xEA, 0x01, 0xEB, 0x02, 0x26,
+ 0x02, 0x27, 0x02, 0x28, 0x02, 0x29, 0x02, 0x2E, 0x02, 0x2F, 0x02, 0x92, 0x1E, 0x36, 0x1E, 0x37,
+ 0x1E, 0x5A, 0x1E, 0x5B, 0x1E, 0x60, 0x1E, 0x61, 0x1E, 0x62, 0x1E, 0x63, 0x1E, 0xA0, 0x1E, 0xA1,
+ 0x1E, 0xB8, 0x1E, 0xB9, 0x1E, 0xCC, 0x1E, 0xCD, 0x1E, 0xCE, 0x1E, 0xCF, 0x1E, 0xE4, 0x1E, 0xE5,
+ 0x1E, 0xE6, 0x1E, 0xE7, 0x21, 0x2A, 0x21, 0x2B, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x14,
+ 0x13, 0x88, 0x1A, 0x9E, 0x1E, 0x3C, 0x21, 0xAE, 0x22, 0x6C, 0x22, 0xFA, 0x00, 0x01, 0x0F, 0x8E,
+ 0x01, 0xF1, 0x03, 0xE8, 0x03, 0xEE, 0x03, 0xF4, 0x03, 0xFA, 0x04, 0x00, 0x04, 0x06, 0x04, 0x0C,
+ 0x04, 0x12, 0x04, 0x18, 0x04, 0x1E, 0x04, 0x24, 0x04, 0x2A, 0x04, 0x30, 0x04, 0x36, 0x04, 0x3C,
+ 0x04, 0x42, 0x04, 0x48, 0x04, 0x4E, 0x04, 0x54, 0x04, 0x5A, 0x04, 0x60, 0x04, 0x66, 0x04, 0x6C,
+ 0x04, 0x72, 0x04, 0x78, 0x04, 0x7E, 0x04, 0x84, 0x04, 0x8A, 0x04, 0x90, 0x04, 0x96, 0x04, 0x9C,
+ 0x04, 0xA2, 0x04, 0xA8, 0x04, 0xAE, 0x04, 0xB4, 0x04, 0xBA, 0x04, 0xC0, 0x04, 0xC6, 0x04, 0xCC,
+ 0x04, 0xD2, 0x04, 0xD8, 0x04, 0xDE, 0x04, 0xE4, 0x04, 0xEA, 0x04, 0xF0, 0x04, 0xF6, 0x04, 0xFC,
+ 0x05, 0x02, 0x05, 0x08, 0x05, 0x0E, 0x05, 0x14, 0x05, 0x1A, 0x05, 0x20, 0x05, 0x26, 0x05, 0x2C,
+ 0x05, 0x32, 0x05, 0x38, 0x05, 0x3E, 0x05, 0x44, 0x05, 0x4A, 0x05, 0x50, 0x05, 0x56, 0x05, 0x5C,
+ 0x05, 0x62, 0x05, 0x68, 0x05, 0x6E, 0x05, 0x74, 0x05, 0x7A, 0x05, 0x80, 0x05, 0x86, 0x05, 0x8C,
+ 0x05, 0x92, 0x05, 0x98, 0x05, 0x9E, 0x05, 0xA4, 0x05, 0xAA, 0x05, 0xB0, 0x05, 0xB6, 0x05, 0xBC,
+ 0x05, 0xC2, 0x05, 0xC8, 0x05, 0xCE, 0x05, 0xD4, 0x05, 0xDA, 0x05, 0xE0, 0x05, 0xE6, 0x05, 0xEC,
+ 0x05, 0xF2, 0x05, 0xF8, 0x05, 0xFE, 0x06, 0x04, 0x06, 0x0A, 0x06, 0x10, 0x06, 0x16, 0x06, 0x1C,
+ 0x06, 0x22, 0x06, 0x28, 0x06, 0x2E, 0x06, 0x34, 0x06, 0x3A, 0x06, 0x40, 0x06, 0x46, 0x06, 0x4C,
+ 0x06, 0x52, 0x06, 0x58, 0x06, 0x5E, 0x06, 0x64, 0x06, 0x6A, 0x06, 0x70, 0x06, 0x76, 0x06, 0x7C,
+ 0x06, 0x82, 0x06, 0x88, 0x06, 0x8E, 0x06, 0x94, 0x06, 0x9A, 0x06, 0xA0, 0x06, 0xA6, 0x06, 0xAC,
+ 0x06, 0xB2, 0x06, 0xB8, 0x06, 0xBE, 0x06, 0xC4, 0x06, 0xCA, 0x06, 0xD0, 0x06, 0xD6, 0x06, 0xDC,
+ 0x06, 0xE2, 0x06, 0xE8, 0x06, 0xEE, 0x06, 0xF4, 0x06, 0xFA, 0x07, 0x00, 0x07, 0x06, 0x07, 0x0C,
+ 0x07, 0x12, 0x07, 0x18, 0x07, 0x1E, 0x07, 0x24, 0x07, 0x2A, 0x07, 0x30, 0x07, 0x36, 0x07, 0x3C,
+ 0x07, 0x42, 0x07, 0x48, 0x07, 0x4E, 0x07, 0x54, 0x07, 0x5A, 0x07, 0x60, 0x07, 0x66, 0x07, 0x6C,
+ 0x07, 0x72, 0x07, 0x78, 0x07, 0x7E, 0x07, 0x84, 0x07, 0x8A, 0x07, 0x90, 0x07, 0x96, 0x07, 0x9C,
+ 0x07, 0xA2, 0x07, 0xA8, 0x07, 0xAE, 0x07, 0xB4, 0x07, 0xBA, 0x07, 0xC0, 0x07, 0xC6, 0x07, 0xCC,
+ 0x07, 0xD2, 0x07, 0xD8, 0x07, 0xDE, 0x07, 0xE4, 0x07, 0xEA, 0x07, 0xF0, 0x07, 0xF6, 0x07, 0xFC,
+ 0x08, 0x02, 0x08, 0x08, 0x08, 0x0E, 0x08, 0x14, 0x08, 0x1A, 0x08, 0x20, 0x08, 0x26, 0x08, 0x2C,
+ 0x08, 0x32, 0x08, 0x38, 0x08, 0x3E, 0x08, 0x44, 0x08, 0x4A, 0x08, 0x50, 0x08, 0x56, 0x08, 0x5C,
+ 0x08, 0x62, 0x08, 0x68, 0x08, 0x6E, 0x08, 0x74, 0x08, 0x7A, 0x08, 0x80, 0x08, 0x86, 0x08, 0x8C,
+ 0x08, 0x92, 0x08, 0x98, 0x08, 0x9E, 0x08, 0xA4, 0x08, 0xAA, 0x08, 0xB0, 0x08, 0xB6, 0x08, 0xBC,
+ 0x08, 0xC2, 0x08, 0xC8, 0x08, 0xCE, 0x08, 0xD4, 0x08, 0xDA, 0x08, 0xE0, 0x08, 0xE6, 0x08, 0xEC,
+ 0x08, 0xF2, 0x08, 0xF8, 0x08, 0xFE, 0x09, 0x04, 0x09, 0x0A, 0x09, 0x10, 0x09, 0x16, 0x09, 0x1C,
+ 0x09, 0x22, 0x09, 0x28, 0x09, 0x2E, 0x09, 0x34, 0x09, 0x3A, 0x09, 0x40, 0x09, 0x46, 0x09, 0x4C,
+ 0x09, 0x52, 0x09, 0x58, 0x09, 0x5E, 0x09, 0x64, 0x09, 0x6A, 0x09, 0x70, 0x09, 0x76, 0x09, 0x7C,
+ 0x09, 0x82, 0x09, 0x88, 0x09, 0x8E, 0x09, 0x94, 0x09, 0x9A, 0x09, 0xA0, 0x09, 0xA6, 0x09, 0xAC,
+ 0x09, 0xB2, 0x09, 0xB8, 0x09, 0xBE, 0x09, 0xC4, 0x09, 0xCA, 0x09, 0xD0, 0x09, 0xD6, 0x09, 0xDC,
+ 0x09, 0xE2, 0x09, 0xE8, 0x09, 0xEE, 0x09, 0xF4, 0x09, 0xFA, 0x0A, 0x00, 0x0A, 0x06, 0x0A, 0x0C,
+ 0x0A, 0x12, 0x0A, 0x18, 0x0A, 0x1E, 0x0A, 0x24, 0x0A, 0x2A, 0x0A, 0x30, 0x0A, 0x36, 0x0A, 0x3C,
+ 0x0A, 0x42, 0x0A, 0x48, 0x0A, 0x4E, 0x0A, 0x54, 0x0A, 0x5A, 0x0A, 0x60, 0x0A, 0x66, 0x0A, 0x6C,
+ 0x0A, 0x72, 0x0A, 0x78, 0x0A, 0x7E, 0x0A, 0x84, 0x0A, 0x8A, 0x0A, 0x90, 0x0A, 0x96, 0x0A, 0x9C,
+ 0x0A, 0xA2, 0x0A, 0xA8, 0x0A, 0xAE, 0x0A, 0xB4, 0x0A, 0xBA, 0x0A, 0xC0, 0x0A, 0xC6, 0x0A, 0xCC,
+ 0x0A, 0xD2, 0x0A, 0xD8, 0x0A, 0xDE, 0x0A, 0xE4, 0x0A, 0xEA, 0x0A, 0xF0, 0x0A, 0xF6, 0x0A, 0xFC,
+ 0x0B, 0x02, 0x0B, 0x08, 0x0B, 0x0E, 0x0B, 0x14, 0x0B, 0x1A, 0x0B, 0x20, 0x0B, 0x26, 0x0B, 0x2C,
+ 0x0B, 0x32, 0x0B, 0x38, 0x0B, 0x3E, 0x0B, 0x44, 0x0B, 0x4A, 0x0B, 0x50, 0x0B, 0x56, 0x0B, 0x5C,
+ 0x0B, 0x62, 0x0B, 0x68, 0x0B, 0x6E, 0x0B, 0x74, 0x0B, 0x7A, 0x0B, 0x80, 0x0B, 0x86, 0x0B, 0x8C,
+ 0x0B, 0x92, 0x0B, 0x98, 0x0B, 0x9E, 0x0B, 0xA4, 0x0B, 0xAA, 0x0B, 0xB0, 0x0B, 0xB6, 0x0B, 0xBC,
+ 0x0B, 0xC2, 0x0B, 0xC8, 0x0B, 0xCE, 0x0B, 0xD4, 0x0B, 0xDA, 0x0B, 0xE0, 0x0B, 0xE6, 0x0B, 0xEC,
+ 0x0B, 0xF2, 0x0B, 0xF8, 0x0B, 0xFE, 0x0C, 0x04, 0x0C, 0x0A, 0x0C, 0x10, 0x0C, 0x16, 0x0C, 0x1C,
+ 0x0C, 0x22, 0x0C, 0x28, 0x0C, 0x2E, 0x0C, 0x34, 0x0C, 0x3A, 0x0C, 0x40, 0x0C, 0x46, 0x0C, 0x4C,
+ 0x0C, 0x52, 0x0C, 0x58, 0x0C, 0x5E, 0x0C, 0x64, 0x0C, 0x6A, 0x0C, 0x70, 0x0C, 0x76, 0x0C, 0x7C,
+ 0x0C, 0x82, 0x0C, 0x88, 0x0C, 0x8E, 0x0C, 0x94, 0x0C, 0x9A, 0x0C, 0xA0, 0x0C, 0xA6, 0x0C, 0xAC,
+ 0x0C, 0xB2, 0x0C, 0xB8, 0x0C, 0xBE, 0x0C, 0xC4, 0x0C, 0xCA, 0x0C, 0xD0, 0x0C, 0xD6, 0x0C, 0xDC,
+ 0x0C, 0xE2, 0x0C, 0xE8, 0x0C, 0xEE, 0x0C, 0xF4, 0x0C, 0xFA, 0x0D, 0x00, 0x0D, 0x06, 0x0D, 0x0C,
+ 0x0D, 0x12, 0x0D, 0x18, 0x0D, 0x1E, 0x0D, 0x24, 0x0D, 0x2A, 0x0D, 0x30, 0x0D, 0x36, 0x0D, 0x3C,
+ 0x0D, 0x42, 0x0D, 0x48, 0x0D, 0x4E, 0x0D, 0x54, 0x0D, 0x5A, 0x0D, 0x60, 0x0D, 0x66, 0x0D, 0x6C,
+ 0x0D, 0x72, 0x0D, 0x78, 0x0D, 0x7E, 0x0D, 0x84, 0x0D, 0x8A, 0x0D, 0x90, 0x0D, 0x96, 0x0D, 0x9C,
+ 0x0D, 0xA2, 0x0D, 0xA8, 0x0D, 0xAE, 0x0D, 0xB4, 0x0D, 0xBA, 0x0D, 0xC0, 0x0D, 0xC6, 0x0D, 0xCC,
+ 0x0D, 0xD2, 0x0D, 0xD8, 0x0D, 0xDE, 0x0D, 0xE4, 0x0D, 0xEA, 0x0D, 0xF0, 0x0D, 0xF6, 0x0D, 0xFC,
+ 0x0E, 0x02, 0x0E, 0x08, 0x0E, 0x0E, 0x0E, 0x14, 0x0E, 0x1A, 0x0E, 0x20, 0x0E, 0x26, 0x0E, 0x2C,
+ 0x0E, 0x32, 0x0E, 0x38, 0x0E, 0x3E, 0x0E, 0x44, 0x0E, 0x4A, 0x0E, 0x50, 0x0E, 0x56, 0x0E, 0x5C,
+ 0x0E, 0x62, 0x0E, 0x68, 0x0E, 0x6E, 0x0E, 0x74, 0x0E, 0x7A, 0x0E, 0x80, 0x0E, 0x86, 0x0E, 0x8C,
+ 0x0E, 0x92, 0x0E, 0x98, 0x0E, 0x9E, 0x0E, 0xA4, 0x0E, 0xAA, 0x0E, 0xB0, 0x0E, 0xB6, 0x0E, 0xBC,
+ 0x0E, 0xC2, 0x0E, 0xC8, 0x0E, 0xCE, 0x0E, 0xD4, 0x0E, 0xDA, 0x0E, 0xE0, 0x0E, 0xE6, 0x0E, 0xEC,
+ 0x0E, 0xF2, 0x0E, 0xF8, 0x0E, 0xFE, 0x0F, 0x04, 0x0F, 0x0A, 0x0F, 0x10, 0x0F, 0x16, 0x0F, 0x1C,
+ 0x0F, 0x22, 0x0F, 0x28, 0x0F, 0x2E, 0x0F, 0x34, 0x0F, 0x3A, 0x0F, 0x40, 0x0F, 0x46, 0x0F, 0x4C,
+ 0x0F, 0x52, 0x0F, 0x58, 0x0F, 0x5E, 0x0F, 0x64, 0x0F, 0x6A, 0x0F, 0x70, 0x0F, 0x76, 0x0F, 0x7C,
+ 0x0F, 0x82, 0x0F, 0x88, 0x00, 0x02, 0x00, 0x41, 0x03, 0x00, 0x00, 0x02, 0x00, 0x41, 0x03, 0x01,
+ 0x00, 0x02, 0x00, 0x41, 0x03, 0x02, 0x00, 0x02, 0x00, 0x41, 0x03, 0x03, 0x00, 0x02, 0x00, 0x41,
+ 0x03, 0x08, 0x00, 0x02, 0x00, 0x41, 0x03, 0x0A, 0x00, 0x02, 0x00, 0x43, 0x03, 0x27, 0x00, 0x02,
+ 0x00, 0x45, 0x03, 0x00, 0x00, 0x02, 0x00, 0x45, 0x03, 0x01, 0x00, 0x02, 0x00, 0x45, 0x03, 0x02,
+ 0x00, 0x02, 0x00, 0x45, 0x03, 0x08, 0x00, 0x02, 0x00, 0x49, 0x03, 0x00, 0x00, 0x02, 0x00, 0x49,
+ 0x03, 0x01, 0x00, 0x02, 0x00, 0x49, 0x03, 0x02, 0x00, 0x02, 0x00, 0x49, 0x03, 0x08, 0x00, 0x02,
+ 0x00, 0x4E, 0x03, 0x03, 0x00, 0x02, 0x00, 0x4F, 0x03, 0x00, 0x00, 0x02, 0x00, 0x4F, 0x03, 0x01,
+ 0x00, 0x02, 0x00, 0x4F, 0x03, 0x02, 0x00, 0x02, 0x00, 0x4F, 0x03, 0x03, 0x00, 0x02, 0x00, 0x4F,
+ 0x03, 0x08, 0x00, 0x02, 0x00, 0x55, 0x03, 0x00, 0x00, 0x02, 0x00, 0x55, 0x03, 0x01, 0x00, 0x02,
+ 0x00, 0x55, 0x03, 0x02, 0x00, 0x02, 0x00, 0x55, 0x03, 0x08, 0x00, 0x02, 0x00, 0x59, 0x03, 0x01,
+ 0x00, 0x02, 0x00, 0x61, 0x03, 0x00, 0x00, 0x02, 0x00, 0x61, 0x03, 0x01, 0x00, 0x02, 0x00, 0x61,
+ 0x03, 0x02, 0x00, 0x02, 0x00, 0x61, 0x03, 0x03, 0x00, 0x02, 0x00, 0x61, 0x03, 0x08, 0x00, 0x02,
+ 0x00, 0x61, 0x03, 0x0A, 0x00, 0x02, 0x00, 0x63, 0x03, 0x27, 0x00, 0x02, 0x00, 0x65, 0x03, 0x00,
+ 0x00, 0x02, 0x00, 0x65, 0x03, 0x01, 0x00, 0x02, 0x00, 0x65, 0x03, 0x02, 0x00, 0x02, 0x00, 0x65,
+ 0x03, 0x08, 0x00, 0x02, 0x00, 0x69, 0x03, 0x00, 0x00, 0x02, 0x00, 0x69, 0x03, 0x01, 0x00, 0x02,
+ 0x00, 0x69, 0x03, 0x02, 0x00, 0x02, 0x00, 0x69, 0x03, 0x08, 0x00, 0x02, 0x00, 0x6E, 0x03, 0x03,
+ 0x00, 0x02, 0x00, 0x6F, 0x03, 0x00, 0x00, 0x02, 0x00, 0x6F, 0x03, 0x01, 0x00, 0x02, 0x00, 0x6F,
+ 0x03, 0x02, 0x00, 0x02, 0x00, 0x6F, 0x03, 0x03, 0x00, 0x02, 0x00, 0x6F, 0x03, 0x08, 0x00, 0x02,
+ 0x00, 0x75, 0x03, 0x00, 0x00, 0x02, 0x00, 0x75, 0x03, 0x01, 0x00, 0x02, 0x00, 0x75, 0x03, 0x02,
+ 0x00, 0x02, 0x00, 0x75, 0x03, 0x08, 0x00, 0x02, 0x00, 0x79, 0x03, 0x01, 0x00, 0x02, 0x00, 0x79,
+ 0x03, 0x08, 0x00, 0x02, 0x00, 0x41, 0x03, 0x04, 0x00, 0x02, 0x00, 0x61, 0x03, 0x04, 0x00, 0x02,
+ 0x00, 0x41, 0x03, 0x06, 0x00, 0x02, 0x00, 0x61, 0x03, 0x06, 0x00, 0x02, 0x00, 0x41, 0x03, 0x28,
+ 0x00, 0x02, 0x00, 0x61, 0x03, 0x28, 0x00, 0x02, 0x00, 0x43, 0x03, 0x01, 0x00, 0x02, 0x00, 0x63,
+ 0x03, 0x01, 0x00, 0x02, 0x00, 0x43, 0x03, 0x02, 0x00, 0x02, 0x00, 0x63, 0x03, 0x02, 0x00, 0x02,
+ 0x00, 0x43, 0x03, 0x07, 0x00, 0x02, 0x00, 0x63, 0x03, 0x07, 0x00, 0x02, 0x00, 0x43, 0x03, 0x0C,
+ 0x00, 0x02, 0x00, 0x63, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x44, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x64,
+ 0x03, 0x0C, 0x00, 0x02, 0x00, 0x45, 0x03, 0x04, 0x00, 0x02, 0x00, 0x65, 0x03, 0x04, 0x00, 0x02,
+ 0x00, 0x45, 0x03, 0x06, 0x00, 0x02, 0x00, 0x65, 0x03, 0x06, 0x00, 0x02, 0x00, 0x45, 0x03, 0x07,
+ 0x00, 0x02, 0x00, 0x65, 0x03, 0x07, 0x00, 0x02, 0x00, 0x45, 0x03, 0x28, 0x00, 0x02, 0x00, 0x65,
+ 0x03, 0x28, 0x00, 0x02, 0x00, 0x45, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x65, 0x03, 0x0C, 0x00, 0x02,
+ 0x00, 0x47, 0x03, 0x02, 0x00, 0x02, 0x00, 0x67, 0x03, 0x02, 0x00, 0x02, 0x00, 0x47, 0x03, 0x06,
+ 0x00, 0x02, 0x00, 0x67, 0x03, 0x06, 0x00, 0x02, 0x00, 0x47, 0x03, 0x07, 0x00, 0x02, 0x00, 0x67,
+ 0x03, 0x07, 0x00, 0x02, 0x00, 0x47, 0x03, 0x27, 0x00, 0x02, 0x00, 0x67, 0x03, 0x27, 0x00, 0x02,
+ 0x00, 0x48, 0x03, 0x02, 0x00, 0x02, 0x00, 0x68, 0x03, 0x02, 0x00, 0x02, 0x00, 0x49, 0x03, 0x03,
+ 0x00, 0x02, 0x00, 0x69, 0x03, 0x03, 0x00, 0x02, 0x00, 0x49, 0x03, 0x04, 0x00, 0x02, 0x00, 0x69,
+ 0x03, 0x04, 0x00, 0x02, 0x00, 0x49, 0x03, 0x06, 0x00, 0x02, 0x00, 0x69, 0x03, 0x06, 0x00, 0x02,
+ 0x00, 0x49, 0x03, 0x28, 0x00, 0x02, 0x00, 0x69, 0x03, 0x28, 0x00, 0x02, 0x00, 0x49, 0x03, 0x07,
+ 0x00, 0x02, 0x00, 0x4A, 0x03, 0x02, 0x00, 0x02, 0x00, 0x6A, 0x03, 0x02, 0x00, 0x02, 0x00, 0x4B,
+ 0x03, 0x27, 0x00, 0x02, 0x00, 0x6B, 0x03, 0x27, 0x00, 0x02, 0x00, 0x4C, 0x03, 0x01, 0x00, 0x02,
+ 0x00, 0x6C, 0x03, 0x01, 0x00, 0x02, 0x00, 0x4C, 0x03, 0x27, 0x00, 0x02, 0x00, 0x6C, 0x03, 0x27,
+ 0x00, 0x02, 0x00, 0x4C, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x6C, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x4E,
+ 0x03, 0x01, 0x00, 0x02, 0x00, 0x6E, 0x03, 0x01, 0x00, 0x02, 0x00, 0x4E, 0x03, 0x27, 0x00, 0x02,
+ 0x00, 0x6E, 0x03, 0x27, 0x00, 0x02, 0x00, 0x4E, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x6E, 0x03, 0x0C,
+ 0x00, 0x02, 0x00, 0x4F, 0x03, 0x04, 0x00, 0x02, 0x00, 0x6F, 0x03, 0x04, 0x00, 0x02, 0x00, 0x4F,
+ 0x03, 0x06, 0x00, 0x02, 0x00, 0x6F, 0x03, 0x06, 0x00, 0x02, 0x00, 0x4F, 0x03, 0x0B, 0x00, 0x02,
+ 0x00, 0x6F, 0x03, 0x0B, 0x00, 0x02, 0x00, 0x52, 0x03, 0x01, 0x00, 0x02, 0x00, 0x72, 0x03, 0x01,
+ 0x00, 0x02, 0x00, 0x52, 0x03, 0x27, 0x00, 0x02, 0x00, 0x72, 0x03, 0x27, 0x00, 0x02, 0x00, 0x52,
+ 0x03, 0x0C, 0x00, 0x02, 0x00, 0x72, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x53, 0x03, 0x01, 0x00, 0x02,
+ 0x00, 0x73, 0x03, 0x01, 0x00, 0x02, 0x00, 0x53, 0x03, 0x02, 0x00, 0x02, 0x00, 0x73, 0x03, 0x02,
+ 0x00, 0x02, 0x00, 0x53, 0x03, 0x27, 0x00, 0x02, 0x00, 0x73, 0x03, 0x27, 0x00, 0x02, 0x00, 0x53,
+ 0x03, 0x0C, 0x00, 0x02, 0x00, 0x73, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x54, 0x03, 0x27, 0x00, 0x02,
+ 0x00, 0x74, 0x03, 0x27, 0x00, 0x02, 0x00, 0x54, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x74, 0x03, 0x0C,
+ 0x00, 0x02, 0x00, 0x55, 0x03, 0x03, 0x00, 0x02, 0x00, 0x75, 0x03, 0x03, 0x00, 0x02, 0x00, 0x55,
+ 0x03, 0x04, 0x00, 0x02, 0x00, 0x75, 0x03, 0x04, 0x00, 0x02, 0x00, 0x55, 0x03, 0x06, 0x00, 0x02,
+ 0x00, 0x75, 0x03, 0x06, 0x00, 0x02, 0x00, 0x55, 0x03, 0x0A, 0x00, 0x02, 0x00, 0x75, 0x03, 0x0A,
+ 0x00, 0x02, 0x00, 0x55, 0x03, 0x0B, 0x00, 0x02, 0x00, 0x75, 0x03, 0x0B, 0x00, 0x02, 0x00, 0x55,
+ 0x03, 0x28, 0x00, 0x02, 0x00, 0x75, 0x03, 0x28, 0x00, 0x02, 0x00, 0x57, 0x03, 0x02, 0x00, 0x02,
+ 0x00, 0x77, 0x03, 0x02, 0x00, 0x02, 0x00, 0x59, 0x03, 0x02, 0x00, 0x02, 0x00, 0x79, 0x03, 0x02,
+ 0x00, 0x02, 0x00, 0x59, 0x03, 0x08, 0x00, 0x02, 0x00, 0x5A, 0x03, 0x01, 0x00, 0x02, 0x00, 0x7A,
+ 0x03, 0x01, 0x00, 0x02, 0x00, 0x5A, 0x03, 0x07, 0x00, 0x02, 0x00, 0x7A, 0x03, 0x07, 0x00, 0x02,
+ 0x00, 0x5A, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x7A, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x4F, 0x03, 0x1B,
+ 0x00, 0x02, 0x00, 0x6F, 0x03, 0x1B, 0x00, 0x02, 0x00, 0x55, 0x03, 0x1B, 0x00, 0x02, 0x00, 0x75,
+ 0x03, 0x1B, 0x00, 0x02, 0x00, 0x41, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x61, 0x03, 0x0C, 0x00, 0x02,
+ 0x00, 0x49, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x69, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x4F, 0x03, 0x0C,
+ 0x00, 0x02, 0x00, 0x6F, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x55, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x75,
+ 0x03, 0x0C, 0x00, 0x02, 0x00, 0xDC, 0x03, 0x04, 0x00, 0x02, 0x00, 0xFC, 0x03, 0x04, 0x00, 0x02,
+ 0x00, 0x55, 0x03, 0x44, 0x00, 0x02, 0x00, 0x75, 0x03, 0x44, 0x00, 0x02, 0x00, 0xDC, 0x03, 0x0C,
+ 0x00, 0x02, 0x00, 0xFC, 0x03, 0x0C, 0x00, 0x02, 0x00, 0xDC, 0x03, 0x00, 0x00, 0x02, 0x00, 0xFC,
+ 0x03, 0x00, 0x00, 0x02, 0x00, 0xC4, 0x03, 0x04, 0x00, 0x02, 0x00, 0xE4, 0x03, 0x04, 0x00, 0x02,
+ 0x02, 0x26, 0x03, 0x04, 0x00, 0x02, 0x02, 0x27, 0x03, 0x04, 0x00, 0x02, 0x00, 0xC6, 0x03, 0x04,
+ 0x00, 0x02, 0x00, 0xE6, 0x03, 0x04, 0x00, 0x02, 0x00, 0x47, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x67,
+ 0x03, 0x0C, 0x00, 0x02, 0x00, 0x4B, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x6B, 0x03, 0x0C, 0x00, 0x02,
+ 0x00, 0x4F, 0x03, 0x28, 0x00, 0x02, 0x00, 0x6F, 0x03, 0x28, 0x00, 0x02, 0x01, 0x4C, 0x03, 0x28,
+ 0x00, 0x02, 0x01, 0x4D, 0x03, 0x28, 0x00, 0x02, 0x01, 0xB7, 0x03, 0x0C, 0x00, 0x02, 0x02, 0x92,
+ 0x03, 0x0C, 0x00, 0x02, 0x00, 0x6A, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x47, 0x03, 0x01, 0x00, 0x02,
+ 0x00, 0x67, 0x03, 0x01, 0x00, 0x02, 0x00, 0x4E, 0x03, 0x00, 0x00, 0x02, 0x00, 0x6E, 0x03, 0x00,
+ 0x00, 0x02, 0x00, 0xC5, 0x03, 0x01, 0x00, 0x02, 0x00, 0xE5, 0x03, 0x01, 0x00, 0x02, 0x00, 0xC6,
+ 0x03, 0x01, 0x00, 0x02, 0x00, 0xE6, 0x03, 0x01, 0x00, 0x02, 0x00, 0xD8, 0x03, 0x01, 0x00, 0x02,
+ 0x00, 0xF8, 0x03, 0x01, 0x00, 0x02, 0x00, 0x41, 0x03, 0x0F, 0x00, 0x02, 0x00, 0x61, 0x03, 0x0F,
+ 0x00, 0x02, 0x00, 0x41, 0x03, 0x11, 0x00, 0x02, 0x00, 0x61, 0x03, 0x11, 0x00, 0x02, 0x00, 0x45,
+ 0x03, 0x0F, 0x00, 0x02, 0x00, 0x65, 0x03, 0x0F, 0x00, 0x02, 0x00, 0x45, 0x03, 0x11, 0x00, 0x02,
+ 0x00, 0x65, 0x03, 0x11, 0x00, 0x02, 0x00, 0x49, 0x03, 0x0F, 0x00, 0x02, 0x00, 0x69, 0x03, 0x0F,
+ 0x00, 0x02, 0x00, 0x49, 0x03, 0x11, 0x00, 0x02, 0x00, 0x69, 0x03, 0x11, 0x00, 0x02, 0x00, 0x4F,
+ 0x03, 0x0F, 0x00, 0x02, 0x00, 0x6F, 0x03, 0x0F, 0x00, 0x02, 0x00, 0x4F, 0x03, 0x11, 0x00, 0x02,
+ 0x00, 0x6F, 0x03, 0x11, 0x00, 0x02, 0x00, 0x52, 0x03, 0x0F, 0x00, 0x02, 0x00, 0x72, 0x03, 0x0F,
+ 0x00, 0x02, 0x00, 0x52, 0x03, 0x11, 0x00, 0x02, 0x00, 0x72, 0x03, 0x11, 0x00, 0x02, 0x00, 0x55,
+ 0x03, 0x0F, 0x00, 0x02, 0x00, 0x75, 0x03, 0x0F, 0x00, 0x02, 0x00, 0x55, 0x03, 0x11, 0x00, 0x02,
+ 0x00, 0x75, 0x03, 0x11, 0x00, 0x02, 0x00, 0x53, 0x03, 0x26, 0x00, 0x02, 0x00, 0x73, 0x03, 0x26,
+ 0x00, 0x02, 0x00, 0x54, 0x03, 0x26, 0x00, 0x02, 0x00, 0x74, 0x03, 0x26, 0x00, 0x02, 0x00, 0x48,
+ 0x03, 0x0C, 0x00, 0x02, 0x00, 0x68, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x41, 0x03, 0x07, 0x00, 0x02,
+ 0x00, 0x61, 0x03, 0x07, 0x00, 0x02, 0x00, 0x45, 0x03, 0x27, 0x00, 0x02, 0x00, 0x65, 0x03, 0x27,
+ 0x00, 0x02, 0x00, 0xD6, 0x03, 0x04, 0x00, 0x02, 0x00, 0xF6, 0x03, 0x04, 0x00, 0x02, 0x00, 0xD5,
+ 0x03, 0x04, 0x00, 0x02, 0x00, 0xF5, 0x03, 0x04, 0x00, 0x02, 0x00, 0x4F, 0x03, 0x07, 0x00, 0x02,
+ 0x00, 0x6F, 0x03, 0x07, 0x00, 0x02, 0x02, 0x2E, 0x03, 0x04, 0x00, 0x02, 0x02, 0x2F, 0x03, 0x04,
+ 0x00, 0x02, 0x00, 0x59, 0x03, 0x04, 0x00, 0x02, 0x00, 0x79, 0x03, 0x04, 0x00, 0x02, 0x00, 0x41,
+ 0x03, 0x25, 0x00, 0x02, 0x00, 0x61, 0x03, 0x25, 0x00, 0x02, 0x00, 0x42, 0x03, 0x07, 0x00, 0x02,
+ 0x00, 0x62, 0x03, 0x07, 0x00, 0x02, 0x00, 0x42, 0x03, 0x23, 0x00, 0x02, 0x00, 0x62, 0x03, 0x23,
+ 0x00, 0x02, 0x00, 0x42, 0x03, 0x31, 0x00, 0x02, 0x00, 0x62, 0x03, 0x31, 0x00, 0x02, 0x00, 0xC7,
+ 0x03, 0x01, 0x00, 0x02, 0x00, 0xE7, 0x03, 0x01, 0x00, 0x02, 0x00, 0x44, 0x03, 0x07, 0x00, 0x02,
+ 0x00, 0x64, 0x03, 0x07, 0x00, 0x02, 0x00, 0x44, 0x03, 0x23, 0x00, 0x02, 0x00, 0x64, 0x03, 0x23,
+ 0x00, 0x02, 0x00, 0x44, 0x03, 0x31, 0x00, 0x02, 0x00, 0x64, 0x03, 0x31, 0x00, 0x02, 0x00, 0x44,
+ 0x03, 0x27, 0x00, 0x02, 0x00, 0x64, 0x03, 0x27, 0x00, 0x02, 0x00, 0x44, 0x03, 0x2D, 0x00, 0x02,
+ 0x00, 0x64, 0x03, 0x2D, 0x00, 0x02, 0x01, 0x12, 0x03, 0x00, 0x00, 0x02, 0x01, 0x13, 0x03, 0x00,
+ 0x00, 0x02, 0x01, 0x12, 0x03, 0x01, 0x00, 0x02, 0x01, 0x13, 0x03, 0x01, 0x00, 0x02, 0x00, 0x45,
+ 0x03, 0x2D, 0x00, 0x02, 0x00, 0x65, 0x03, 0x2D, 0x00, 0x02, 0x00, 0x45, 0x03, 0x30, 0x00, 0x02,
+ 0x00, 0x65, 0x03, 0x30, 0x00, 0x02, 0x01, 0x14, 0x03, 0x27, 0x00, 0x02, 0x01, 0x15, 0x03, 0x27,
+ 0x00, 0x02, 0x00, 0x46, 0x03, 0x07, 0x00, 0x02, 0x00, 0x66, 0x03, 0x07, 0x00, 0x02, 0x00, 0x47,
+ 0x03, 0x04, 0x00, 0x02, 0x00, 0x67, 0x03, 0x04, 0x00, 0x02, 0x00, 0x48, 0x03, 0x07, 0x00, 0x02,
+ 0x00, 0x68, 0x03, 0x07, 0x00, 0x02, 0x00, 0x48, 0x03, 0x23, 0x00, 0x02, 0x00, 0x68, 0x03, 0x23,
+ 0x00, 0x02, 0x00, 0x48, 0x03, 0x08, 0x00, 0x02, 0x00, 0x68, 0x03, 0x08, 0x00, 0x02, 0x00, 0x48,
+ 0x03, 0x27, 0x00, 0x02, 0x00, 0x68, 0x03, 0x27, 0x00, 0x02, 0x00, 0x48, 0x03, 0x2E, 0x00, 0x02,
+ 0x00, 0x68, 0x03, 0x2E, 0x00, 0x02, 0x00, 0x49, 0x03, 0x30, 0x00, 0x02, 0x00, 0x69, 0x03, 0x30,
+ 0x00, 0x02, 0x00, 0x49, 0x03, 0x44, 0x00, 0x02, 0x00, 0x69, 0x03, 0x44, 0x00, 0x02, 0x00, 0x4B,
+ 0x03, 0x01, 0x00, 0x02, 0x00, 0x6B, 0x03, 0x01, 0x00, 0x02, 0x00, 0x4B, 0x03, 0x23, 0x00, 0x02,
+ 0x00, 0x6B, 0x03, 0x23, 0x00, 0x02, 0x00, 0x4B, 0x03, 0x31, 0x00, 0x02, 0x00, 0x6B, 0x03, 0x31,
+ 0x00, 0x02, 0x00, 0x4C, 0x03, 0x23, 0x00, 0x02, 0x00, 0x6C, 0x03, 0x23, 0x00, 0x02, 0x1E, 0x36,
+ 0x03, 0x04, 0x00, 0x02, 0x1E, 0x37, 0x03, 0x04, 0x00, 0x02, 0x00, 0x4C, 0x03, 0x31, 0x00, 0x02,
+ 0x00, 0x6C, 0x03, 0x31, 0x00, 0x02, 0x00, 0x4C, 0x03, 0x2D, 0x00, 0x02, 0x00, 0x6C, 0x03, 0x2D,
+ 0x00, 0x02, 0x00, 0x4D, 0x03, 0x01, 0x00, 0x02, 0x00, 0x6D, 0x03, 0x01, 0x00, 0x02, 0x00, 0x4D,
+ 0x03, 0x07, 0x00, 0x02, 0x00, 0x6D, 0x03, 0x07, 0x00, 0x02, 0x00, 0x4D, 0x03, 0x23, 0x00, 0x02,
+ 0x00, 0x6D, 0x03, 0x23, 0x00, 0x02, 0x00, 0x4E, 0x03, 0x07, 0x00, 0x02, 0x00, 0x6E, 0x03, 0x07,
+ 0x00, 0x02, 0x00, 0x4E, 0x03, 0x23, 0x00, 0x02, 0x00, 0x6E, 0x03, 0x23, 0x00, 0x02, 0x00, 0x4E,
+ 0x03, 0x31, 0x00, 0x02, 0x00, 0x6E, 0x03, 0x31, 0x00, 0x02, 0x00, 0x4E, 0x03, 0x2D, 0x00, 0x02,
+ 0x00, 0x6E, 0x03, 0x2D, 0x00, 0x02, 0x00, 0xD5, 0x03, 0x01, 0x00, 0x02, 0x00, 0xF5, 0x03, 0x01,
+ 0x00, 0x02, 0x00, 0xD5, 0x03, 0x08, 0x00, 0x02, 0x00, 0xF5, 0x03, 0x08, 0x00, 0x02, 0x01, 0x4C,
+ 0x03, 0x00, 0x00, 0x02, 0x01, 0x4D, 0x03, 0x00, 0x00, 0x02, 0x01, 0x4C, 0x03, 0x01, 0x00, 0x02,
+ 0x01, 0x4D, 0x03, 0x01, 0x00, 0x02, 0x00, 0x50, 0x03, 0x01, 0x00, 0x02, 0x00, 0x70, 0x03, 0x01,
+ 0x00, 0x02, 0x00, 0x50, 0x03, 0x07, 0x00, 0x02, 0x00, 0x70, 0x03, 0x07, 0x00, 0x02, 0x00, 0x52,
+ 0x03, 0x07, 0x00, 0x02, 0x00, 0x72, 0x03, 0x07, 0x00, 0x02, 0x00, 0x52, 0x03, 0x23, 0x00, 0x02,
+ 0x00, 0x72, 0x03, 0x23, 0x00, 0x02, 0x1E, 0x5A, 0x03, 0x04, 0x00, 0x02, 0x1E, 0x5B, 0x03, 0x04,
+ 0x00, 0x02, 0x00, 0x52, 0x03, 0x31, 0x00, 0x02, 0x00, 0x72, 0x03, 0x31, 0x00, 0x02, 0x00, 0x53,
+ 0x03, 0x07, 0x00, 0x02, 0x00, 0x73, 0x03, 0x07, 0x00, 0x02, 0x00, 0x53, 0x03, 0x23, 0x00, 0x02,
+ 0x00, 0x73, 0x03, 0x23, 0x00, 0x02, 0x01, 0x5A, 0x03, 0x07, 0x00, 0x02, 0x01, 0x5B, 0x03, 0x07,
+ 0x00, 0x02, 0x01, 0x60, 0x03, 0x07, 0x00, 0x02, 0x01, 0x61, 0x03, 0x07, 0x00, 0x02, 0x1E, 0x60,
+ 0x03, 0x23, 0x00, 0x02, 0x1E, 0x61, 0x03, 0x23, 0x00, 0x02, 0x00, 0x54, 0x03, 0x07, 0x00, 0x02,
+ 0x00, 0x74, 0x03, 0x07, 0x00, 0x02, 0x00, 0x54, 0x03, 0x23, 0x00, 0x02, 0x00, 0x74, 0x03, 0x23,
+ 0x00, 0x02, 0x00, 0x54, 0x03, 0x31, 0x00, 0x02, 0x00, 0x74, 0x03, 0x31, 0x00, 0x02, 0x00, 0x54,
+ 0x03, 0x2D, 0x00, 0x02, 0x00, 0x74, 0x03, 0x2D, 0x00, 0x02, 0x00, 0x55, 0x03, 0x24, 0x00, 0x02,
+ 0x00, 0x75, 0x03, 0x24, 0x00, 0x02, 0x00, 0x55, 0x03, 0x30, 0x00, 0x02, 0x00, 0x75, 0x03, 0x30,
+ 0x00, 0x02, 0x00, 0x55, 0x03, 0x2D, 0x00, 0x02, 0x00, 0x75, 0x03, 0x2D, 0x00, 0x02, 0x01, 0x68,
+ 0x03, 0x01, 0x00, 0x02, 0x01, 0x69, 0x03, 0x01, 0x00, 0x02, 0x01, 0x6A, 0x03, 0x08, 0x00, 0x02,
+ 0x01, 0x6B, 0x03, 0x08, 0x00, 0x02, 0x00, 0x56, 0x03, 0x03, 0x00, 0x02, 0x00, 0x76, 0x03, 0x03,
+ 0x00, 0x02, 0x00, 0x56, 0x03, 0x23, 0x00, 0x02, 0x00, 0x76, 0x03, 0x23, 0x00, 0x02, 0x00, 0x57,
+ 0x03, 0x00, 0x00, 0x02, 0x00, 0x77, 0x03, 0x00, 0x00, 0x02, 0x00, 0x57, 0x03, 0x01, 0x00, 0x02,
+ 0x00, 0x77, 0x03, 0x01, 0x00, 0x02, 0x00, 0x57, 0x03, 0x08, 0x00, 0x02, 0x00, 0x77, 0x03, 0x08,
+ 0x00, 0x02, 0x00, 0x57, 0x03, 0x07, 0x00, 0x02, 0x00, 0x77, 0x03, 0x07, 0x00, 0x02, 0x00, 0x57,
+ 0x03, 0x23, 0x00, 0x02, 0x00, 0x77, 0x03, 0x23, 0x00, 0x02, 0x00, 0x58, 0x03, 0x07, 0x00, 0x02,
+ 0x00, 0x78, 0x03, 0x07, 0x00, 0x02, 0x00, 0x58, 0x03, 0x08, 0x00, 0x02, 0x00, 0x78, 0x03, 0x08,
+ 0x00, 0x02, 0x00, 0x59, 0x03, 0x07, 0x00, 0x02, 0x00, 0x79, 0x03, 0x07, 0x00, 0x02, 0x00, 0x5A,
+ 0x03, 0x02, 0x00, 0x02, 0x00, 0x7A, 0x03, 0x02, 0x00, 0x02, 0x00, 0x5A, 0x03, 0x23, 0x00, 0x02,
+ 0x00, 0x7A, 0x03, 0x23, 0x00, 0x02, 0x00, 0x5A, 0x03, 0x31, 0x00, 0x02, 0x00, 0x7A, 0x03, 0x31,
+ 0x00, 0x02, 0x00, 0x68, 0x03, 0x31, 0x00, 0x02, 0x00, 0x74, 0x03, 0x08, 0x00, 0x02, 0x00, 0x77,
+ 0x03, 0x0A, 0x00, 0x02, 0x00, 0x79, 0x03, 0x0A, 0x00, 0x02, 0x01, 0x7F, 0x03, 0x07, 0x00, 0x02,
+ 0x00, 0x41, 0x03, 0x23, 0x00, 0x02, 0x00, 0x61, 0x03, 0x23, 0x00, 0x02, 0x00, 0x41, 0x03, 0x09,
+ 0x00, 0x02, 0x00, 0x61, 0x03, 0x09, 0x00, 0x02, 0x00, 0xC2, 0x03, 0x01, 0x00, 0x02, 0x00, 0xE2,
+ 0x03, 0x01, 0x00, 0x02, 0x00, 0xC2, 0x03, 0x00, 0x00, 0x02, 0x00, 0xE2, 0x03, 0x00, 0x00, 0x02,
+ 0x00, 0xC2, 0x03, 0x09, 0x00, 0x02, 0x00, 0xE2, 0x03, 0x09, 0x00, 0x02, 0x00, 0xC2, 0x03, 0x03,
+ 0x00, 0x02, 0x00, 0xE2, 0x03, 0x03, 0x00, 0x02, 0x00, 0xC2, 0x03, 0x23, 0x00, 0x02, 0x00, 0xE2,
+ 0x03, 0x23, 0x00, 0x02, 0x01, 0x02, 0x03, 0x01, 0x00, 0x02, 0x01, 0x03, 0x03, 0x01, 0x00, 0x02,
+ 0x01, 0x02, 0x03, 0x00, 0x00, 0x02, 0x01, 0x03, 0x03, 0x00, 0x00, 0x02, 0x01, 0x02, 0x03, 0x09,
+ 0x00, 0x02, 0x01, 0x03, 0x03, 0x09, 0x00, 0x02, 0x01, 0x02, 0x03, 0x03, 0x00, 0x02, 0x01, 0x03,
+ 0x03, 0x03, 0x00, 0x02, 0x01, 0x02, 0x03, 0x23, 0x00, 0x02, 0x01, 0x03, 0x03, 0x23, 0x00, 0x02,
+ 0x00, 0x45, 0x03, 0x23, 0x00, 0x02, 0x00, 0x65, 0x03, 0x23, 0x00, 0x02, 0x00, 0x45, 0x03, 0x09,
+ 0x00, 0x02, 0x00, 0x65, 0x03, 0x09, 0x00, 0x02, 0x00, 0x45, 0x03, 0x03, 0x00, 0x02, 0x00, 0x65,
+ 0x03, 0x03, 0x00, 0x02, 0x00, 0xCA, 0x03, 0x01, 0x00, 0x02, 0x00, 0xEA, 0x03, 0x01, 0x00, 0x02,
+ 0x00, 0xCA, 0x03, 0x00, 0x00, 0x02, 0x00, 0xEA, 0x03, 0x00, 0x00, 0x02, 0x00, 0xCA, 0x03, 0x09,
+ 0x00, 0x02, 0x00, 0xEA, 0x03, 0x09, 0x00, 0x02, 0x00, 0xCA, 0x03, 0x03, 0x00, 0x02, 0x00, 0xEA,
+ 0x03, 0x03, 0x00, 0x02, 0x00, 0xCA, 0x03, 0x23, 0x00, 0x02, 0x00, 0xEA, 0x03, 0x23, 0x00, 0x02,
+ 0x00, 0x49, 0x03, 0x09, 0x00, 0x02, 0x00, 0x69, 0x03, 0x09, 0x00, 0x02, 0x00, 0x49, 0x03, 0x23,
+ 0x00, 0x02, 0x00, 0x69, 0x03, 0x23, 0x00, 0x02, 0x00, 0x4F, 0x03, 0x23, 0x00, 0x02, 0x00, 0x6F,
+ 0x03, 0x23, 0x00, 0x02, 0x00, 0x4F, 0x03, 0x09, 0x00, 0x02, 0x00, 0x6F, 0x03, 0x09, 0x00, 0x02,
+ 0x00, 0xD4, 0x03, 0x01, 0x00, 0x02, 0x00, 0xF4, 0x03, 0x01, 0x00, 0x02, 0x00, 0xD4, 0x03, 0x00,
+ 0x00, 0x02, 0x00, 0xF4, 0x03, 0x00, 0x00, 0x02, 0x00, 0xD4, 0x03, 0x09, 0x00, 0x02, 0x00, 0xF4,
+ 0x03, 0x09, 0x00, 0x02, 0x00, 0xD4, 0x03, 0x03, 0x00, 0x02, 0x00, 0xF4, 0x03, 0x03, 0x00, 0x02,
+ 0x00, 0xD4, 0x03, 0x23, 0x00, 0x02, 0x00, 0xF4, 0x03, 0x23, 0x00, 0x02, 0x00, 0xD3, 0x03, 0x1B,
+ 0x00, 0x02, 0x00, 0xF3, 0x03, 0x1B, 0x00, 0x02, 0x00, 0xD2, 0x03, 0x1B, 0x00, 0x02, 0x00, 0xF2,
+ 0x03, 0x1B, 0x00, 0x02, 0x01, 0xA0, 0x03, 0x09, 0x00, 0x02, 0x01, 0xA1, 0x03, 0x09, 0x00, 0x02,
+ 0x00, 0xD5, 0x03, 0x1B, 0x00, 0x02, 0x00, 0xF5, 0x03, 0x1B, 0x00, 0x02, 0x01, 0xA0, 0x03, 0x23,
+ 0x00, 0x02, 0x01, 0xA1, 0x03, 0x23, 0x00, 0x02, 0x00, 0x55, 0x03, 0x23, 0x00, 0x02, 0x00, 0x75,
+ 0x03, 0x23, 0x00, 0x02, 0x00, 0x55, 0x03, 0x09, 0x00, 0x02, 0x00, 0x75, 0x03, 0x09, 0x00, 0x02,
+ 0x00, 0xDA, 0x03, 0x1B, 0x00, 0x02, 0x00, 0xFA, 0x03, 0x1B, 0x00, 0x02, 0x00, 0xD9, 0x03, 0x1B,
+ 0x00, 0x02, 0x00, 0xF9, 0x03, 0x1B, 0x00, 0x02, 0x01, 0xAF, 0x03, 0x09, 0x00, 0x02, 0x01, 0xB0,
+ 0x03, 0x09, 0x00, 0x02, 0x01, 0x68, 0x03, 0x1B, 0x00, 0x02, 0x01, 0x69, 0x03, 0x1B, 0x00, 0x02,
+ 0x01, 0xAF, 0x03, 0x23, 0x00, 0x02, 0x01, 0xB0, 0x03, 0x23, 0x00, 0x02, 0x00, 0x59, 0x03, 0x00,
+ 0x00, 0x02, 0x00, 0x79, 0x03, 0x00, 0x00, 0x02, 0x00, 0x59, 0x03, 0x23, 0x00, 0x02, 0x00, 0x79,
+ 0x03, 0x23, 0x00, 0x02, 0x00, 0x59, 0x03, 0x09, 0x00, 0x02, 0x00, 0x79, 0x03, 0x09, 0x00, 0x02,
+ 0x00, 0x59, 0x03, 0x03, 0x00, 0x02, 0x00, 0x79, 0x03, 0x03, 0x00, 0x01, 0x01, 0xF1, 0x00, 0xC0,
+ 0x00, 0xC1, 0x00, 0xC2, 0x00, 0xC3, 0x00, 0xC4, 0x00, 0xC5, 0x00, 0xC7, 0x00, 0xC8, 0x00, 0xC9,
+ 0x00, 0xCA, 0x00, 0xCB, 0x00, 0xCC, 0x00, 0xCD, 0x00, 0xCE, 0x00, 0xCF, 0x00, 0xD1, 0x00, 0xD2,
+ 0x00, 0xD3, 0x00, 0xD4, 0x00, 0xD5, 0x00, 0xD6, 0x00, 0xD9, 0x00, 0xDA, 0x00, 0xDB, 0x00, 0xDC,
+ 0x00, 0xDD, 0x00, 0xE0, 0x00, 0xE1, 0x00, 0xE2, 0x00, 0xE3, 0x00, 0xE4, 0x00, 0xE5, 0x00, 0xE7,
+ 0x00, 0xE8, 0x00, 0xE9, 0x00, 0xEA, 0x00, 0xEB, 0x00, 0xEC, 0x00, 0xED, 0x00, 0xEE, 0x00, 0xEF,
+ 0x00, 0xF1, 0x00, 0xF2, 0x00, 0xF3, 0x00, 0xF4, 0x00, 0xF5, 0x00, 0xF6, 0x00, 0xF9, 0x00, 0xFA,
+ 0x00, 0xFB, 0x00, 0xFC, 0x00, 0xFD, 0x00, 0xFF, 0x01, 0x00, 0x01, 0x01, 0x01, 0x02, 0x01, 0x03,
+ 0x01, 0x04, 0x01, 0x05, 0x01, 0x06, 0x01, 0x07, 0x01, 0x08, 0x01, 0x09, 0x01, 0x0A, 0x01, 0x0B,
+ 0x01, 0x0C, 0x01, 0x0D, 0x01, 0x0E, 0x01, 0x0F, 0x01, 0x12, 0x01, 0x13, 0x01, 0x14, 0x01, 0x15,
+ 0x01, 0x16, 0x01, 0x17, 0x01, 0x18, 0x01, 0x19, 0x01, 0x1A, 0x01, 0x1B, 0x01, 0x1C, 0x01, 0x1D,
+ 0x01, 0x1E, 0x01, 0x1F, 0x01, 0x20, 0x01, 0x21, 0x01, 0x22, 0x01, 0x23, 0x01, 0x24, 0x01, 0x25,
+ 0x01, 0x28, 0x01, 0x29, 0x01, 0x2A, 0x01, 0x2B, 0x01, 0x2C, 0x01, 0x2D, 0x01, 0x2E, 0x01, 0x2F,
+ 0x01, 0x30, 0x01, 0x34, 0x01, 0x35, 0x01, 0x36, 0x01, 0x37, 0x01, 0x39, 0x01, 0x3A, 0x01, 0x3B,
+ 0x01, 0x3C, 0x01, 0x3D, 0x01, 0x3E, 0x01, 0x43, 0x01, 0x44, 0x01, 0x45, 0x01, 0x46, 0x01, 0x47,
+ 0x01, 0x48, 0x01, 0x4C, 0x01, 0x4D, 0x01, 0x4E, 0x01, 0x4F, 0x01, 0x50, 0x01, 0x51, 0x01, 0x54,
+ 0x01, 0x55, 0x01, 0x56, 0x01, 0x57, 0x01, 0x58, 0x01, 0x59, 0x01, 0x5A, 0x01, 0x5B, 0x01, 0x5C,
+ 0x01, 0x5D, 0x01, 0x5E, 0x01, 0x5F, 0x01, 0x60, 0x01, 0x61, 0x01, 0x62, 0x01, 0x63, 0x01, 0x64,
+ 0x01, 0x65, 0x01, 0x68, 0x01, 0x69, 0x01, 0x6A, 0x01, 0x6B, 0x01, 0x6C, 0x01, 0x6D, 0x01, 0x6E,
+ 0x01, 0x6F, 0x01, 0x70, 0x01, 0x71, 0x01, 0x72, 0x01, 0x73, 0x01, 0x74, 0x01, 0x75, 0x01, 0x76,
+ 0x01, 0x77, 0x01, 0x78, 0x01, 0x79, 0x01, 0x7A, 0x01, 0x7B, 0x01, 0x7C, 0x01, 0x7D, 0x01, 0x7E,
+ 0x01, 0xA0, 0x01, 0xA1, 0x01, 0xAF, 0x01, 0xB0, 0x01, 0xCD, 0x01, 0xCE, 0x01, 0xCF, 0x01, 0xD0,
+ 0x01, 0xD1, 0x01, 0xD2, 0x01, 0xD3, 0x01, 0xD4, 0x01, 0xD5, 0x01, 0xD6, 0x01, 0xD7, 0x01, 0xD8,
+ 0x01, 0xD9, 0x01, 0xDA, 0x01, 0xDB, 0x01, 0xDC, 0x01, 0xDE, 0x01, 0xDF, 0x01, 0xE0, 0x01, 0xE1,
+ 0x01, 0xE2, 0x01, 0xE3, 0x01, 0xE6, 0x01, 0xE7, 0x01, 0xE8, 0x01, 0xE9, 0x01, 0xEA, 0x01, 0xEB,
+ 0x01, 0xEC, 0x01, 0xED, 0x01, 0xEE, 0x01, 0xEF, 0x01, 0xF0, 0x01, 0xF4, 0x01, 0xF5, 0x01, 0xF8,
+ 0x01, 0xF9, 0x01, 0xFA, 0x01, 0xFB, 0x01, 0xFC, 0x01, 0xFD, 0x01, 0xFE, 0x01, 0xFF, 0x02, 0x00,
+ 0x02, 0x01, 0x02, 0x02, 0x02, 0x03, 0x02, 0x04, 0x02, 0x05, 0x02, 0x06, 0x02, 0x07, 0x02, 0x08,
+ 0x02, 0x09, 0x02, 0x0A, 0x02, 0x0B, 0x02, 0x0C, 0x02, 0x0D, 0x02, 0x0E, 0x02, 0x0F, 0x02, 0x10,
+ 0x02, 0x11, 0x02, 0x12, 0x02, 0x13, 0x02, 0x14, 0x02, 0x15, 0x02, 0x16, 0x02, 0x17, 0x02, 0x18,
+ 0x02, 0x19, 0x02, 0x1A, 0x02, 0x1B, 0x02, 0x1E, 0x02, 0x1F, 0x02, 0x26, 0x02, 0x27, 0x02, 0x28,
+ 0x02, 0x29, 0x02, 0x2A, 0x02, 0x2B, 0x02, 0x2C, 0x02, 0x2D, 0x02, 0x2E, 0x02, 0x2F, 0x02, 0x30,
+ 0x02, 0x31, 0x02, 0x32, 0x02, 0x33, 0x1E, 0x00, 0x1E, 0x01, 0x1E, 0x02, 0x1E, 0x03, 0x1E, 0x04,
+ 0x1E, 0x05, 0x1E, 0x06, 0x1E, 0x07, 0x1E, 0x08, 0x1E, 0x09, 0x1E, 0x0A, 0x1E, 0x0B, 0x1E, 0x0C,
+ 0x1E, 0x0D, 0x1E, 0x0E, 0x1E, 0x0F, 0x1E, 0x10, 0x1E, 0x11, 0x1E, 0x12, 0x1E, 0x13, 0x1E, 0x14,
+ 0x1E, 0x15, 0x1E, 0x16, 0x1E, 0x17, 0x1E, 0x18, 0x1E, 0x19, 0x1E, 0x1A, 0x1E, 0x1B, 0x1E, 0x1C,
+ 0x1E, 0x1D, 0x1E, 0x1E, 0x1E, 0x1F, 0x1E, 0x20, 0x1E, 0x21, 0x1E, 0x22, 0x1E, 0x23, 0x1E, 0x24,
+ 0x1E, 0x25, 0x1E, 0x26, 0x1E, 0x27, 0x1E, 0x28, 0x1E, 0x29, 0x1E, 0x2A, 0x1E, 0x2B, 0x1E, 0x2C,
+ 0x1E, 0x2D, 0x1E, 0x2E, 0x1E, 0x2F, 0x1E, 0x30, 0x1E, 0x31, 0x1E, 0x32, 0x1E, 0x33, 0x1E, 0x34,
+ 0x1E, 0x35, 0x1E, 0x36, 0x1E, 0x37, 0x1E, 0x38, 0x1E, 0x39, 0x1E, 0x3A, 0x1E, 0x3B, 0x1E, 0x3C,
+ 0x1E, 0x3D, 0x1E, 0x3E, 0x1E, 0x3F, 0x1E, 0x40, 0x1E, 0x41, 0x1E, 0x42, 0x1E, 0x43, 0x1E, 0x44,
+ 0x1E, 0x45, 0x1E, 0x46, 0x1E, 0x47, 0x1E, 0x48, 0x1E, 0x49, 0x1E, 0x4A, 0x1E, 0x4B, 0x1E, 0x4C,
+ 0x1E, 0x4D, 0x1E, 0x4E, 0x1E, 0x4F, 0x1E, 0x50, 0x1E, 0x51, 0x1E, 0x52, 0x1E, 0x53, 0x1E, 0x54,
+ 0x1E, 0x55, 0x1E, 0x56, 0x1E, 0x57, 0x1E, 0x58, 0x1E, 0x59, 0x1E, 0x5A, 0x1E, 0x5B, 0x1E, 0x5C,
+ 0x1E, 0x5D, 0x1E, 0x5E, 0x1E, 0x5F, 0x1E, 0x60, 0x1E, 0x61, 0x1E, 0x62, 0x1E, 0x63, 0x1E, 0x64,
+ 0x1E, 0x65, 0x1E, 0x66, 0x1E, 0x67, 0x1E, 0x68, 0x1E, 0x69, 0x1E, 0x6A, 0x1E, 0x6B, 0x1E, 0x6C,
+ 0x1E, 0x6D, 0x1E, 0x6E, 0x1E, 0x6F, 0x1E, 0x70, 0x1E, 0x71, 0x1E, 0x72, 0x1E, 0x73, 0x1E, 0x74,
+ 0x1E, 0x75, 0x1E, 0x76, 0x1E, 0x77, 0x1E, 0x78, 0x1E, 0x79, 0x1E, 0x7A, 0x1E, 0x7B, 0x1E, 0x7C,
+ 0x1E, 0x7D, 0x1E, 0x7E, 0x1E, 0x7F, 0x1E, 0x80, 0x1E, 0x81, 0x1E, 0x82, 0x1E, 0x83, 0x1E, 0x84,
+ 0x1E, 0x85, 0x1E, 0x86, 0x1E, 0x87, 0x1E, 0x88, 0x1E, 0x89, 0x1E, 0x8A, 0x1E, 0x8B, 0x1E, 0x8C,
+ 0x1E, 0x8D, 0x1E, 0x8E, 0x1E, 0x8F, 0x1E, 0x90, 0x1E, 0x91, 0x1E, 0x92, 0x1E, 0x93, 0x1E, 0x94,
+ 0x1E, 0x95, 0x1E, 0x96, 0x1E, 0x97, 0x1E, 0x98, 0x1E, 0x99, 0x1E, 0x9B, 0x1E, 0xA0, 0x1E, 0xA1,
+ 0x1E, 0xA2, 0x1E, 0xA3, 0x1E, 0xA4, 0x1E, 0xA5, 0x1E, 0xA6, 0x1E, 0xA7, 0x1E, 0xA8, 0x1E, 0xA9,
+ 0x1E, 0xAA, 0x1E, 0xAB, 0x1E, 0xAC, 0x1E, 0xAD, 0x1E, 0xAE, 0x1E, 0xAF, 0x1E, 0xB0, 0x1E, 0xB1,
+ 0x1E, 0xB2, 0x1E, 0xB3, 0x1E, 0xB4, 0x1E, 0xB5, 0x1E, 0xB6, 0x1E, 0xB7, 0x1E, 0xB8, 0x1E, 0xB9,
+ 0x1E, 0xBA, 0x1E, 0xBB, 0x1E, 0xBC, 0x1E, 0xBD, 0x1E, 0xBE, 0x1E, 0xBF, 0x1E, 0xC0, 0x1E, 0xC1,
+ 0x1E, 0xC2, 0x1E, 0xC3, 0x1E, 0xC4, 0x1E, 0xC5, 0x1E, 0xC6, 0x1E, 0xC7, 0x1E, 0xC8, 0x1E, 0xC9,
+ 0x1E, 0xCA, 0x1E, 0xCB, 0x1E, 0xCC, 0x1E, 0xCD, 0x1E, 0xCE, 0x1E, 0xCF, 0x1E, 0xD0, 0x1E, 0xD1,
+ 0x1E, 0xD2, 0x1E, 0xD3, 0x1E, 0xD4, 0x1E, 0xD5, 0x1E, 0xD6, 0x1E, 0xD7, 0x1E, 0xD8, 0x1E, 0xD9,
+ 0x1E, 0xDA, 0x1E, 0xDB, 0x1E, 0xDC, 0x1E, 0xDD, 0x1E, 0xDE, 0x1E, 0xDF, 0x1E, 0xE0, 0x1E, 0xE1,
+ 0x1E, 0xE2, 0x1E, 0xE3, 0x1E, 0xE4, 0x1E, 0xE5, 0x1E, 0xE6, 0x1E, 0xE7, 0x1E, 0xE8, 0x1E, 0xE9,
+ 0x1E, 0xEA, 0x1E, 0xEB, 0x1E, 0xEC, 0x1E, 0xED, 0x1E, 0xEE, 0x1E, 0xEF, 0x1E, 0xF0, 0x1E, 0xF1,
+ 0x1E, 0xF2, 0x1E, 0xF3, 0x1E, 0xF4, 0x1E, 0xF5, 0x1E, 0xF6, 0x1E, 0xF7, 0x1E, 0xF8, 0x1E, 0xF9,
+ 0x00, 0x01, 0x05, 0xBA, 0x00, 0xAC, 0x01, 0x5E, 0x01, 0x64, 0x01, 0x6A, 0x01, 0x70, 0x01, 0x76,
+ 0x01, 0x7C, 0x01, 0x82, 0x01, 0x88, 0x01, 0x8E, 0x01, 0x94, 0x01, 0x9A, 0x01, 0xA0, 0x01, 0xA6,
+ 0x01, 0xAC, 0x01, 0xB2, 0x01, 0xB8, 0x01, 0xBE, 0x01, 0xC4, 0x01, 0xCA, 0x01, 0xD0, 0x01, 0xD6,
+ 0x01, 0xDC, 0x01, 0xE2, 0x01, 0xE8, 0x01, 0xEE, 0x01, 0xF4, 0x01, 0xFA, 0x02, 0x00, 0x02, 0x06,
+ 0x02, 0x0C, 0x02, 0x12, 0x02, 0x18, 0x02, 0x1E, 0x02, 0x24, 0x02, 0x2A, 0x02, 0x30, 0x02, 0x38,
+ 0x02, 0x40, 0x02, 0x46, 0x02, 0x4C, 0x02, 0x54, 0x02, 0x5C, 0x02, 0x62, 0x02, 0x68, 0x02, 0x70,
+ 0x02, 0x78, 0x02, 0x80, 0x02, 0x88, 0x02, 0x8E, 0x02, 0x94, 0x02, 0x9A, 0x02, 0xA0, 0x02, 0xA6,
+ 0x02, 0xAC, 0x02, 0xB2, 0x02, 0xB8, 0x02, 0xBE, 0x02, 0xC4, 0x02, 0xCA, 0x02, 0xD0, 0x02, 0xD6,
+ 0x02, 0xDE, 0x02, 0xE6, 0x02, 0xEE, 0x02, 0xF6, 0x02, 0xFE, 0x03, 0x06, 0x03, 0x0C, 0x03, 0x12,
+ 0x03, 0x18, 0x03, 0x1E, 0x03, 0x24, 0x03, 0x2A, 0x03, 0x30, 0x03, 0x36, 0x03, 0x3C, 0x03, 0x42,
+ 0x03, 0x48, 0x03, 0x4E, 0x03, 0x54, 0x03, 0x5A, 0x03, 0x62, 0x03, 0x6A, 0x03, 0x70, 0x03, 0x76,
+ 0x03, 0x7C, 0x03, 0x82, 0x03, 0x8A, 0x03, 0x92, 0x03, 0x98, 0x03, 0x9E, 0x03, 0xA4, 0x03, 0xAA,
+ 0x03, 0xB0, 0x03, 0xB6, 0x03, 0xBE, 0x03, 0xC6, 0x03, 0xCE, 0x03, 0xD6, 0x03, 0xDE, 0x03, 0xE6,
+ 0x03, 0xEC, 0x03, 0xF2, 0x03, 0xF8, 0x03, 0xFE, 0x04, 0x06, 0x04, 0x0E, 0x04, 0x14, 0x04, 0x1A,
+ 0x04, 0x20, 0x04, 0x26, 0x04, 0x2C, 0x04, 0x32, 0x04, 0x38, 0x04, 0x3E, 0x04, 0x46, 0x04, 0x4E,
+ 0x04, 0x56, 0x04, 0x5E, 0x04, 0x64, 0x04, 0x6A, 0x04, 0x70, 0x04, 0x76, 0x04, 0x7C, 0x04, 0x82,
+ 0x04, 0x8A, 0x04, 0x92, 0x04, 0x9A, 0x04, 0xA2, 0x04, 0xA8, 0x04, 0xAE, 0x04, 0xB4, 0x04, 0xBA,
+ 0x04, 0xC0, 0x04, 0xC6, 0x04, 0xCE, 0x04, 0xD6, 0x04, 0xDE, 0x04, 0xE6, 0x04, 0xEC, 0x04, 0xF2,
+ 0x04, 0xF8, 0x04, 0xFE, 0x05, 0x04, 0x05, 0x0A, 0x05, 0x12, 0x05, 0x1A, 0x05, 0x22, 0x05, 0x2A,
+ 0x05, 0x30, 0x05, 0x36, 0x05, 0x3C, 0x05, 0x42, 0x05, 0x48, 0x05, 0x4E, 0x05, 0x54, 0x05, 0x5A,
+ 0x05, 0x60, 0x05, 0x66, 0x05, 0x6C, 0x05, 0x72, 0x05, 0x78, 0x05, 0x7E, 0x05, 0x84, 0x05, 0x8A,
+ 0x05, 0x90, 0x05, 0x96, 0x05, 0x9C, 0x05, 0xA2, 0x05, 0xA8, 0x05, 0xAE, 0x05, 0xB4, 0x00, 0x02,
+ 0x00, 0x41, 0x03, 0x40, 0x00, 0x02, 0x00, 0x41, 0x03, 0x41, 0x00, 0x02, 0x00, 0x45, 0x03, 0x40,
+ 0x00, 0x02, 0x00, 0x45, 0x03, 0x41, 0x00, 0x02, 0x00, 0x49, 0x03, 0x40, 0x00, 0x02, 0x00, 0x49,
+ 0x03, 0x41, 0x00, 0x02, 0x00, 0x4F, 0x03, 0x40, 0x00, 0x02, 0x00, 0x4F, 0x03, 0x41, 0x00, 0x02,
+ 0x00, 0x55, 0x03, 0x40, 0x00, 0x02, 0x00, 0x55, 0x03, 0x41, 0x00, 0x02, 0x00, 0x59, 0x03, 0x41,
+ 0x00, 0x02, 0x00, 0x61, 0x03, 0x40, 0x00, 0x02, 0x00, 0x61, 0x03, 0x41, 0x00, 0x02, 0x00, 0x65,
+ 0x03, 0x40, 0x00, 0x02, 0x00, 0x65, 0x03, 0x41, 0x00, 0x02, 0x00, 0x69, 0x03, 0x40, 0x00, 0x02,
+ 0x00, 0x69, 0x03, 0x41, 0x00, 0x02, 0x00, 0x6F, 0x03, 0x40, 0x00, 0x02, 0x00, 0x6F, 0x03, 0x41,
+ 0x00, 0x02, 0x00, 0x75, 0x03, 0x40, 0x00, 0x02, 0x00, 0x75, 0x03, 0x41, 0x00, 0x02, 0x00, 0x79,
+ 0x03, 0x41, 0x00, 0x02, 0x00, 0x43, 0x03, 0x41, 0x00, 0x02, 0x00, 0x63, 0x03, 0x41, 0x00, 0x02,
+ 0x21, 0x2A, 0x03, 0x27, 0x00, 0x02, 0x00, 0x4C, 0x03, 0x41, 0x00, 0x02, 0x00, 0x6C, 0x03, 0x41,
+ 0x00, 0x02, 0x00, 0x4E, 0x03, 0x41, 0x00, 0x02, 0x00, 0x6E, 0x03, 0x41, 0x00, 0x02, 0x00, 0x52,
+ 0x03, 0x41, 0x00, 0x02, 0x00, 0x72, 0x03, 0x41, 0x00, 0x02, 0x00, 0x53, 0x03, 0x41, 0x00, 0x02,
+ 0x00, 0x73, 0x03, 0x41, 0x00, 0x02, 0x00, 0x5A, 0x03, 0x41, 0x00, 0x02, 0x00, 0x7A, 0x03, 0x41,
+ 0x00, 0x03, 0x00, 0x55, 0x03, 0x08, 0x03, 0x04, 0x00, 0x03, 0x00, 0x75, 0x03, 0x08, 0x03, 0x04,
+ 0x00, 0x02, 0x00, 0xDC, 0x03, 0x01, 0x00, 0x02, 0x00, 0xFC, 0x03, 0x01, 0x00, 0x03, 0x00, 0x55,
+ 0x03, 0x08, 0x03, 0x0C, 0x00, 0x03, 0x00, 0x75, 0x03, 0x08, 0x03, 0x0C, 0x00, 0x02, 0x00, 0xDC,
+ 0x03, 0x40, 0x00, 0x02, 0x00, 0xFC, 0x03, 0x40, 0x00, 0x03, 0x00, 0x41, 0x03, 0x08, 0x03, 0x04,
+ 0x00, 0x03, 0x00, 0x61, 0x03, 0x08, 0x03, 0x04, 0x00, 0x03, 0x00, 0x41, 0x03, 0x07, 0x03, 0x04,
+ 0x00, 0x03, 0x00, 0x61, 0x03, 0x07, 0x03, 0x04, 0x00, 0x02, 0x21, 0x2A, 0x03, 0x0C, 0x00, 0x02,
+ 0x01, 0xEA, 0x03, 0x04, 0x00, 0x02, 0x01, 0xEB, 0x03, 0x04, 0x00, 0x02, 0x00, 0x47, 0x03, 0x41,
+ 0x00, 0x02, 0x00, 0x67, 0x03, 0x41, 0x00, 0x02, 0x00, 0x4E, 0x03, 0x40, 0x00, 0x02, 0x00, 0x6E,
+ 0x03, 0x40, 0x00, 0x02, 0x00, 0xC5, 0x03, 0x41, 0x00, 0x02, 0x00, 0xE5, 0x03, 0x41, 0x00, 0x02,
+ 0x00, 0xC6, 0x03, 0x41, 0x00, 0x02, 0x00, 0xE6, 0x03, 0x41, 0x00, 0x02, 0x00, 0xD8, 0x03, 0x41,
+ 0x00, 0x02, 0x00, 0xF8, 0x03, 0x41, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x08, 0x03, 0x04, 0x00, 0x03,
+ 0x00, 0x6F, 0x03, 0x08, 0x03, 0x04, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x03, 0x03, 0x04, 0x00, 0x03,
+ 0x00, 0x6F, 0x03, 0x03, 0x03, 0x04, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x07, 0x03, 0x04, 0x00, 0x03,
+ 0x00, 0x6F, 0x03, 0x07, 0x03, 0x04, 0x00, 0x02, 0x00, 0xC7, 0x03, 0x41, 0x00, 0x02, 0x00, 0xE7,
+ 0x03, 0x41, 0x00, 0x02, 0x01, 0x12, 0x03, 0x40, 0x00, 0x02, 0x01, 0x13, 0x03, 0x40, 0x00, 0x02,
+ 0x01, 0x12, 0x03, 0x41, 0x00, 0x02, 0x01, 0x13, 0x03, 0x41, 0x00, 0x02, 0x02, 0x28, 0x03, 0x06,
+ 0x00, 0x02, 0x02, 0x29, 0x03, 0x06, 0x00, 0x02, 0x00, 0xCF, 0x03, 0x01, 0x00, 0x02, 0x00, 0xEF,
+ 0x03, 0x01, 0x00, 0x02, 0x00, 0x4B, 0x03, 0x41, 0x00, 0x02, 0x00, 0x6B, 0x03, 0x41, 0x00, 0x02,
+ 0x21, 0x2A, 0x03, 0x23, 0x00, 0x02, 0x21, 0x2A, 0x03, 0x31, 0x00, 0x03, 0x00, 0x4C, 0x03, 0x04,
+ 0x03, 0x23, 0x00, 0x03, 0x00, 0x6C, 0x03, 0x04, 0x03, 0x23, 0x00, 0x02, 0x00, 0x4D, 0x03, 0x41,
+ 0x00, 0x02, 0x00, 0x6D, 0x03, 0x41, 0x00, 0x02, 0x00, 0xD5, 0x03, 0x41, 0x00, 0x02, 0x00, 0xF5,
+ 0x03, 0x41, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x03, 0x03, 0x08, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x03,
+ 0x03, 0x08, 0x00, 0x02, 0x01, 0x4C, 0x03, 0x40, 0x00, 0x02, 0x01, 0x4D, 0x03, 0x40, 0x00, 0x02,
+ 0x01, 0x4C, 0x03, 0x41, 0x00, 0x02, 0x01, 0x4D, 0x03, 0x41, 0x00, 0x02, 0x00, 0x50, 0x03, 0x41,
+ 0x00, 0x02, 0x00, 0x70, 0x03, 0x41, 0x00, 0x03, 0x00, 0x52, 0x03, 0x04, 0x03, 0x23, 0x00, 0x03,
+ 0x00, 0x72, 0x03, 0x04, 0x03, 0x23, 0x00, 0x03, 0x00, 0x53, 0x03, 0x01, 0x03, 0x07, 0x00, 0x03,
+ 0x00, 0x73, 0x03, 0x01, 0x03, 0x07, 0x00, 0x03, 0x00, 0x53, 0x03, 0x0C, 0x03, 0x07, 0x00, 0x03,
+ 0x00, 0x73, 0x03, 0x0C, 0x03, 0x07, 0x00, 0x02, 0x1E, 0x62, 0x03, 0x07, 0x00, 0x02, 0x1E, 0x63,
+ 0x03, 0x07, 0x00, 0x02, 0x01, 0x68, 0x03, 0x41, 0x00, 0x02, 0x01, 0x69, 0x03, 0x41, 0x00, 0x03,
+ 0x00, 0x55, 0x03, 0x04, 0x03, 0x08, 0x00, 0x03, 0x00, 0x75, 0x03, 0x04, 0x03, 0x08, 0x00, 0x02,
+ 0x00, 0x57, 0x03, 0x40, 0x00, 0x02, 0x00, 0x77, 0x03, 0x40, 0x00, 0x02, 0x00, 0x57, 0x03, 0x41,
+ 0x00, 0x02, 0x00, 0x77, 0x03, 0x41, 0x00, 0x02, 0x00, 0xC2, 0x03, 0x41, 0x00, 0x02, 0x00, 0xE2,
+ 0x03, 0x41, 0x00, 0x02, 0x00, 0xC2, 0x03, 0x40, 0x00, 0x02, 0x00, 0xE2, 0x03, 0x40, 0x00, 0x03,
+ 0x00, 0x41, 0x03, 0x02, 0x03, 0x09, 0x00, 0x03, 0x00, 0x61, 0x03, 0x02, 0x03, 0x09, 0x00, 0x03,
+ 0x00, 0x41, 0x03, 0x02, 0x03, 0x03, 0x00, 0x03, 0x00, 0x61, 0x03, 0x02, 0x03, 0x03, 0x00, 0x02,
+ 0x1E, 0xA0, 0x03, 0x02, 0x00, 0x02, 0x1E, 0xA1, 0x03, 0x02, 0x00, 0x02, 0x01, 0x02, 0x03, 0x41,
+ 0x00, 0x02, 0x01, 0x03, 0x03, 0x41, 0x00, 0x02, 0x01, 0x02, 0x03, 0x40, 0x00, 0x02, 0x01, 0x03,
+ 0x03, 0x40, 0x00, 0x03, 0x00, 0x41, 0x03, 0x06, 0x03, 0x09, 0x00, 0x03, 0x00, 0x61, 0x03, 0x06,
+ 0x03, 0x09, 0x00, 0x03, 0x00, 0x41, 0x03, 0x06, 0x03, 0x03, 0x00, 0x03, 0x00, 0x61, 0x03, 0x06,
+ 0x03, 0x03, 0x00, 0x02, 0x1E, 0xA0, 0x03, 0x06, 0x00, 0x02, 0x1E, 0xA1, 0x03, 0x06, 0x00, 0x02,
+ 0x00, 0xCA, 0x03, 0x41, 0x00, 0x02, 0x00, 0xEA, 0x03, 0x41, 0x00, 0x02, 0x00, 0xCA, 0x03, 0x40,
+ 0x00, 0x02, 0x00, 0xEA, 0x03, 0x40, 0x00, 0x03, 0x00, 0x45, 0x03, 0x02, 0x03, 0x09, 0x00, 0x03,
+ 0x00, 0x65, 0x03, 0x02, 0x03, 0x09, 0x00, 0x03, 0x00, 0x45, 0x03, 0x02, 0x03, 0x03, 0x00, 0x03,
+ 0x00, 0x65, 0x03, 0x02, 0x03, 0x03, 0x00, 0x02, 0x1E, 0xB8, 0x03, 0x02, 0x00, 0x02, 0x1E, 0xB9,
+ 0x03, 0x02, 0x00, 0x02, 0x00, 0xD4, 0x03, 0x41, 0x00, 0x02, 0x00, 0xF4, 0x03, 0x41, 0x00, 0x02,
+ 0x00, 0xD4, 0x03, 0x40, 0x00, 0x02, 0x00, 0xF4, 0x03, 0x40, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x02,
+ 0x03, 0x09, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x02, 0x03, 0x09, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x02,
+ 0x03, 0x03, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x02, 0x03, 0x03, 0x00, 0x02, 0x1E, 0xCC, 0x03, 0x02,
+ 0x00, 0x02, 0x1E, 0xCD, 0x03, 0x02, 0x00, 0x02, 0x01, 0xA0, 0x03, 0x01, 0x00, 0x02, 0x01, 0xA1,
+ 0x03, 0x01, 0x00, 0x02, 0x01, 0xA0, 0x03, 0x00, 0x00, 0x02, 0x01, 0xA1, 0x03, 0x00, 0x00, 0x02,
+ 0x1E, 0xCE, 0x03, 0x1B, 0x00, 0x02, 0x1E, 0xCF, 0x03, 0x1B, 0x00, 0x02, 0x01, 0xA0, 0x03, 0x03,
+ 0x00, 0x02, 0x01, 0xA1, 0x03, 0x03, 0x00, 0x02, 0x1E, 0xCC, 0x03, 0x1B, 0x00, 0x02, 0x1E, 0xCD,
+ 0x03, 0x1B, 0x00, 0x02, 0x01, 0xAF, 0x03, 0x01, 0x00, 0x02, 0x01, 0xB0, 0x03, 0x01, 0x00, 0x02,
+ 0x01, 0xAF, 0x03, 0x00, 0x00, 0x02, 0x01, 0xB0, 0x03, 0x00, 0x00, 0x02, 0x1E, 0xE6, 0x03, 0x1B,
+ 0x00, 0x02, 0x1E, 0xE7, 0x03, 0x1B, 0x00, 0x02, 0x01, 0xAF, 0x03, 0x03, 0x00, 0x02, 0x01, 0xB0,
+ 0x03, 0x03, 0x00, 0x02, 0x1E, 0xE4, 0x03, 0x1B, 0x00, 0x02, 0x1E, 0xE5, 0x03, 0x1B, 0x00, 0x02,
+ 0x00, 0x59, 0x03, 0x40, 0x00, 0x02, 0x00, 0x79, 0x03, 0x40, 0x00, 0x01, 0x00, 0xAC, 0x00, 0xC0,
+ 0x00, 0xC1, 0x00, 0xC8, 0x00, 0xC9, 0x00, 0xCC, 0x00, 0xCD, 0x00, 0xD2, 0x00, 0xD3, 0x00, 0xD9,
+ 0x00, 0xDA, 0x00, 0xDD, 0x00, 0xE0, 0x00, 0xE1, 0x00, 0xE8, 0x00, 0xE9, 0x00, 0xEC, 0x00, 0xED,
+ 0x00, 0xF2, 0x00, 0xF3, 0x00, 0xF9, 0x00, 0xFA, 0x00, 0xFD, 0x01, 0x06, 0x01, 0x07, 0x01, 0x36,
+ 0x01, 0x39, 0x01, 0x3A, 0x01, 0x43, 0x01, 0x44, 0x01, 0x54, 0x01, 0x55, 0x01, 0x5A, 0x01, 0x5B,
+ 0x01, 0x79, 0x01, 0x7A, 0x01, 0xD5, 0x01, 0xD6, 0x01, 0xD7, 0x01, 0xD8, 0x01, 0xD9, 0x01, 0xDA,
+ 0x01, 0xDB, 0x01, 0xDC, 0x01, 0xDE, 0x01, 0xDF, 0x01, 0xE0, 0x01, 0xE1, 0x01, 0xE8, 0x01, 0xEC,
+ 0x01, 0xED, 0x01, 0xF4, 0x01, 0xF5, 0x01, 0xF8, 0x01, 0xF9, 0x01, 0xFA, 0x01, 0xFB, 0x01, 0xFC,
+ 0x01, 0xFD, 0x01, 0xFE, 0x01, 0xFF, 0x02, 0x2A, 0x02, 0x2B, 0x02, 0x2C, 0x02, 0x2D, 0x02, 0x30,
+ 0x02, 0x31, 0x1E, 0x08, 0x1E, 0x09, 0x1E, 0x14, 0x1E, 0x15, 0x1E, 0x16, 0x1E, 0x17, 0x1E, 0x1C,
+ 0x1E, 0x1D, 0x1E, 0x2E, 0x1E, 0x2F, 0x1E, 0x30, 0x1E, 0x31, 0x1E, 0x32, 0x1E, 0x34, 0x1E, 0x38,
+ 0x1E, 0x39, 0x1E, 0x3E, 0x1E, 0x3F, 0x1E, 0x4C, 0x1E, 0x4D, 0x1E, 0x4E, 0x1E, 0x4F, 0x1E, 0x50,
+ 0x1E, 0x51, 0x1E, 0x52, 0x1E, 0x53, 0x1E, 0x54, 0x1E, 0x55, 0x1E, 0x5C, 0x1E, 0x5D, 0x1E, 0x64,
+ 0x1E, 0x65, 0x1E, 0x66, 0x1E, 0x67, 0x1E, 0x68, 0x1E, 0x69, 0x1E, 0x78, 0x1E, 0x79, 0x1E, 0x7A,
+ 0x1E, 0x7B, 0x1E, 0x80, 0x1E, 0x81, 0x1E, 0x82, 0x1E, 0x83, 0x1E, 0xA4, 0x1E, 0xA5, 0x1E, 0xA6,
+ 0x1E, 0xA7, 0x1E, 0xA8, 0x1E, 0xA9, 0x1E, 0xAA, 0x1E, 0xAB, 0x1E, 0xAC, 0x1E, 0xAD, 0x1E, 0xAE,
+ 0x1E, 0xAF, 0x1E, 0xB0, 0x1E, 0xB1, 0x1E, 0xB2, 0x1E, 0xB3, 0x1E, 0xB4, 0x1E, 0xB5, 0x1E, 0xB6,
+ 0x1E, 0xB7, 0x1E, 0xBE, 0x1E, 0xBF, 0x1E, 0xC0, 0x1E, 0xC1, 0x1E, 0xC2, 0x1E, 0xC3, 0x1E, 0xC4,
+ 0x1E, 0xC5, 0x1E, 0xC6, 0x1E, 0xC7, 0x1E, 0xD0, 0x1E, 0xD1, 0x1E, 0xD2, 0x1E, 0xD3, 0x1E, 0xD4,
+ 0x1E, 0xD5, 0x1E, 0xD6, 0x1E, 0xD7, 0x1E, 0xD8, 0x1E, 0xD9, 0x1E, 0xDA, 0x1E, 0xDB, 0x1E, 0xDC,
+ 0x1E, 0xDD, 0x1E, 0xDE, 0x1E, 0xDF, 0x1E, 0xE0, 0x1E, 0xE1, 0x1E, 0xE2, 0x1E, 0xE3, 0x1E, 0xE8,
+ 0x1E, 0xE9, 0x1E, 0xEA, 0x1E, 0xEB, 0x1E, 0xEC, 0x1E, 0xED, 0x1E, 0xEE, 0x1E, 0xEF, 0x1E, 0xF0,
+ 0x1E, 0xF1, 0x1E, 0xF2, 0x1E, 0xF3, 0x00, 0x01, 0x02, 0xFC, 0x00, 0x4F, 0x00, 0xA4, 0x00, 0xAA,
+ 0x00, 0xB0, 0x00, 0xB8, 0x00, 0xC0, 0x00, 0xC8, 0x00, 0xD0, 0x00, 0xD6, 0x00, 0xDE, 0x00, 0xE4,
+ 0x00, 0xEA, 0x00, 0xF2, 0x00, 0xFA, 0x01, 0x02, 0x01, 0x0A, 0x01, 0x12, 0x01, 0x1A, 0x01, 0x20,
+ 0x01, 0x26, 0x01, 0x2C, 0x01, 0x34, 0x01, 0x3C, 0x01, 0x44, 0x01, 0x4C, 0x01, 0x54, 0x01, 0x5C,
+ 0x01, 0x64, 0x01, 0x6C, 0x01, 0x74, 0x01, 0x7C, 0x01, 0x84, 0x01, 0x8C, 0x01, 0x94, 0x01, 0x9C,
+ 0x01, 0xA4, 0x01, 0xAC, 0x01, 0xB4, 0x01, 0xBC, 0x01, 0xC4, 0x01, 0xCC, 0x01, 0xD4, 0x01, 0xDC,
+ 0x01, 0xE4, 0x01, 0xEC, 0x01, 0xF4, 0x01, 0xFC, 0x02, 0x04, 0x02, 0x0C, 0x02, 0x14, 0x02, 0x1C,
+ 0x02, 0x24, 0x02, 0x2C, 0x02, 0x34, 0x02, 0x3C, 0x02, 0x44, 0x02, 0x4C, 0x02, 0x54, 0x02, 0x5C,
+ 0x02, 0x64, 0x02, 0x6C, 0x02, 0x72, 0x02, 0x78, 0x02, 0x7E, 0x02, 0x84, 0x02, 0x8C, 0x02, 0x94,
+ 0x02, 0x9C, 0x02, 0xA4, 0x02, 0xAC, 0x02, 0xB4, 0x02, 0xBA, 0x02, 0xC0, 0x02, 0xC6, 0x02, 0xCC,
+ 0x02, 0xD4, 0x02, 0xDC, 0x02, 0xE4, 0x02, 0xEC, 0x02, 0xF4, 0x00, 0x02, 0x00, 0xDC, 0x03, 0x41,
+ 0x00, 0x02, 0x00, 0xFC, 0x03, 0x41, 0x00, 0x03, 0x00, 0x55, 0x03, 0x08, 0x03, 0x00, 0x00, 0x03,
+ 0x00, 0x75, 0x03, 0x08, 0x03, 0x00, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x04, 0x03, 0x28, 0x00, 0x03,
+ 0x00, 0x6F, 0x03, 0x04, 0x03, 0x28, 0x00, 0x02, 0x21, 0x2B, 0x03, 0x01, 0x00, 0x03, 0x00, 0x61,
+ 0x03, 0x0A, 0x03, 0x01, 0x00, 0x02, 0x01, 0x06, 0x03, 0x27, 0x00, 0x02, 0x01, 0x07, 0x03, 0x27,
+ 0x00, 0x03, 0x00, 0x45, 0x03, 0x04, 0x03, 0x00, 0x00, 0x03, 0x00, 0x65, 0x03, 0x04, 0x03, 0x00,
+ 0x00, 0x03, 0x00, 0x45, 0x03, 0x04, 0x03, 0x01, 0x00, 0x03, 0x00, 0x65, 0x03, 0x04, 0x03, 0x01,
+ 0x00, 0x03, 0x00, 0x45, 0x03, 0x06, 0x03, 0x27, 0x00, 0x03, 0x00, 0x65, 0x03, 0x06, 0x03, 0x27,
+ 0x00, 0x02, 0x00, 0xCF, 0x03, 0x41, 0x00, 0x02, 0x00, 0xEF, 0x03, 0x41, 0x00, 0x02, 0x21, 0x2A,
+ 0x03, 0x01, 0x00, 0x03, 0x00, 0x4C, 0x03, 0x23, 0x03, 0x04, 0x00, 0x03, 0x00, 0x6C, 0x03, 0x23,
+ 0x03, 0x04, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x03, 0x03, 0x01, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x03,
+ 0x03, 0x01, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x04, 0x03, 0x00, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x04,
+ 0x03, 0x00, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x04, 0x03, 0x01, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x04,
+ 0x03, 0x01, 0x00, 0x03, 0x00, 0x52, 0x03, 0x23, 0x03, 0x04, 0x00, 0x03, 0x00, 0x72, 0x03, 0x23,
+ 0x03, 0x04, 0x00, 0x03, 0x00, 0x53, 0x03, 0x41, 0x03, 0x07, 0x00, 0x03, 0x00, 0x73, 0x03, 0x41,
+ 0x03, 0x07, 0x00, 0x03, 0x00, 0x53, 0x03, 0x07, 0x03, 0x23, 0x00, 0x03, 0x00, 0x73, 0x03, 0x07,
+ 0x03, 0x23, 0x00, 0x03, 0x00, 0x55, 0x03, 0x03, 0x03, 0x01, 0x00, 0x03, 0x00, 0x75, 0x03, 0x03,
+ 0x03, 0x01, 0x00, 0x03, 0x00, 0x41, 0x03, 0x02, 0x03, 0x01, 0x00, 0x03, 0x00, 0x61, 0x03, 0x02,
+ 0x03, 0x01, 0x00, 0x03, 0x00, 0x41, 0x03, 0x02, 0x03, 0x00, 0x00, 0x03, 0x00, 0x61, 0x03, 0x02,
+ 0x03, 0x00, 0x00, 0x03, 0x00, 0x41, 0x03, 0x02, 0x03, 0x23, 0x00, 0x03, 0x00, 0x61, 0x03, 0x02,
+ 0x03, 0x23, 0x00, 0x03, 0x00, 0x41, 0x03, 0x06, 0x03, 0x01, 0x00, 0x03, 0x00, 0x61, 0x03, 0x06,
+ 0x03, 0x01, 0x00, 0x03, 0x00, 0x41, 0x03, 0x06, 0x03, 0x00, 0x00, 0x03, 0x00, 0x61, 0x03, 0x06,
+ 0x03, 0x00, 0x00, 0x03, 0x00, 0x41, 0x03, 0x06, 0x03, 0x23, 0x00, 0x03, 0x00, 0x61, 0x03, 0x06,
+ 0x03, 0x23, 0x00, 0x03, 0x00, 0x45, 0x03, 0x02, 0x03, 0x01, 0x00, 0x03, 0x00, 0x65, 0x03, 0x02,
+ 0x03, 0x01, 0x00, 0x03, 0x00, 0x45, 0x03, 0x02, 0x03, 0x00, 0x00, 0x03, 0x00, 0x65, 0x03, 0x02,
+ 0x03, 0x00, 0x00, 0x03, 0x00, 0x45, 0x03, 0x02, 0x03, 0x23, 0x00, 0x03, 0x00, 0x65, 0x03, 0x02,
+ 0x03, 0x23, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x02, 0x03, 0x01, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x02,
+ 0x03, 0x01, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x02, 0x03, 0x00, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x02,
+ 0x03, 0x00, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x02, 0x03, 0x23, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x02,
+ 0x03, 0x23, 0x00, 0x02, 0x01, 0xA0, 0x03, 0x41, 0x00, 0x02, 0x01, 0xA1, 0x03, 0x41, 0x00, 0x02,
+ 0x01, 0xA0, 0x03, 0x40, 0x00, 0x02, 0x01, 0xA1, 0x03, 0x40, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x09,
+ 0x03, 0x1B, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x09, 0x03, 0x1B, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x03,
+ 0x03, 0x1B, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x03, 0x03, 0x1B, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x1B,
+ 0x03, 0x23, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x1B, 0x03, 0x23, 0x00, 0x02, 0x01, 0xAF, 0x03, 0x41,
+ 0x00, 0x02, 0x01, 0xB0, 0x03, 0x41, 0x00, 0x02, 0x01, 0xAF, 0x03, 0x40, 0x00, 0x02, 0x01, 0xB0,
+ 0x03, 0x40, 0x00, 0x03, 0x00, 0x55, 0x03, 0x09, 0x03, 0x1B, 0x00, 0x03, 0x00, 0x75, 0x03, 0x09,
+ 0x03, 0x1B, 0x00, 0x03, 0x00, 0x55, 0x03, 0x03, 0x03, 0x1B, 0x00, 0x03, 0x00, 0x75, 0x03, 0x03,
+ 0x03, 0x1B, 0x00, 0x03, 0x00, 0x55, 0x03, 0x1B, 0x03, 0x23, 0x00, 0x03, 0x00, 0x75, 0x03, 0x1B,
+ 0x03, 0x23, 0x00, 0x01, 0x00, 0x4F, 0x01, 0xD7, 0x01, 0xD8, 0x01, 0xDB, 0x01, 0xDC, 0x01, 0xEC,
+ 0x01, 0xED, 0x01, 0xFA, 0x01, 0xFB, 0x1E, 0x08, 0x1E, 0x09, 0x1E, 0x14, 0x1E, 0x15, 0x1E, 0x16,
+ 0x1E, 0x17, 0x1E, 0x1C, 0x1E, 0x1D, 0x1E, 0x2E, 0x1E, 0x2F, 0x1E, 0x30, 0x1E, 0x38, 0x1E, 0x39,
+ 0x1E, 0x4C, 0x1E, 0x4D, 0x1E, 0x50, 0x1E, 0x51, 0x1E, 0x52, 0x1E, 0x53, 0x1E, 0x5C, 0x1E, 0x5D,
+ 0x1E, 0x64, 0x1E, 0x65, 0x1E, 0x68, 0x1E, 0x69, 0x1E, 0x78, 0x1E, 0x79, 0x1E, 0xA4, 0x1E, 0xA5,
+ 0x1E, 0xA6, 0x1E, 0xA7, 0x1E, 0xAC, 0x1E, 0xAD, 0x1E, 0xAE, 0x1E, 0xAF, 0x1E, 0xB0, 0x1E, 0xB1,
+ 0x1E, 0xB6, 0x1E, 0xB7, 0x1E, 0xBE, 0x1E, 0xBF, 0x1E, 0xC0, 0x1E, 0xC1, 0x1E, 0xC6, 0x1E, 0xC7,
+ 0x1E, 0xD0, 0x1E, 0xD1, 0x1E, 0xD2, 0x1E, 0xD3, 0x1E, 0xD8, 0x1E, 0xD9, 0x1E, 0xDA, 0x1E, 0xDB,
+ 0x1E, 0xDC, 0x1E, 0xDD, 0x1E, 0xDE, 0x1E, 0xDF, 0x1E, 0xE0, 0x1E, 0xE1, 0x1E, 0xE2, 0x1E, 0xE3,
+ 0x1E, 0xE8, 0x1E, 0xE9, 0x1E, 0xEA, 0x1E, 0xEB, 0x1E, 0xEC, 0x1E, 0xED, 0x1E, 0xEE, 0x1E, 0xEF,
+ 0x1E, 0xF0, 0x1E, 0xF1, 0x00, 0x01, 0x02, 0xDC, 0x00, 0x49, 0x00, 0x98, 0x00, 0xA0, 0x00, 0xA8,
+ 0x00, 0xB0, 0x00, 0xB8, 0x00, 0xC0, 0x00, 0xC8, 0x00, 0xCE, 0x00, 0xD6, 0x00, 0xDE, 0x00, 0xE6,
+ 0x00, 0xEE, 0x00, 0xF6, 0x00, 0xFE, 0x01, 0x06, 0x01, 0x0E, 0x01, 0x16, 0x01, 0x1E, 0x01, 0x26,
+ 0x01, 0x2C, 0x01, 0x34, 0x01, 0x3C, 0x01, 0x44, 0x01, 0x4C, 0x01, 0x54, 0x01, 0x5C, 0x01, 0x64,
+ 0x01, 0x6C, 0x01, 0x74, 0x01, 0x7C, 0x01, 0x84, 0x01, 0x8C, 0x01, 0x94, 0x01, 0x9C, 0x01, 0xA4,
+ 0x01, 0xAC, 0x01, 0xB4, 0x01, 0xBC, 0x01, 0xC4, 0x01, 0xCC, 0x01, 0xD4, 0x01, 0xDC, 0x01, 0xE4,
+ 0x01, 0xEC, 0x01, 0xF4, 0x01, 0xFC, 0x02, 0x04, 0x02, 0x0C, 0x02, 0x14, 0x02, 0x1C, 0x02, 0x24,
+ 0x02, 0x2C, 0x02, 0x34, 0x02, 0x3C, 0x02, 0x44, 0x02, 0x4C, 0x02, 0x54, 0x02, 0x5C, 0x02, 0x64,
+ 0x02, 0x6C, 0x02, 0x74, 0x02, 0x7C, 0x02, 0x84, 0x02, 0x8C, 0x02, 0x94, 0x02, 0x9C, 0x02, 0xA4,
+ 0x02, 0xAC, 0x02, 0xB4, 0x02, 0xBC, 0x02, 0xC4, 0x02, 0xCC, 0x02, 0xD4, 0x00, 0x03, 0x00, 0x55,
+ 0x03, 0x08, 0x03, 0x01, 0x00, 0x03, 0x00, 0x75, 0x03, 0x08, 0x03, 0x01, 0x00, 0x03, 0x00, 0x55,
+ 0x03, 0x08, 0x03, 0x40, 0x00, 0x03, 0x00, 0x75, 0x03, 0x08, 0x03, 0x40, 0x00, 0x03, 0x00, 0x4F,
+ 0x03, 0x28, 0x03, 0x04, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x28, 0x03, 0x04, 0x00, 0x02, 0x21, 0x2B,
+ 0x03, 0x41, 0x00, 0x03, 0x00, 0x61, 0x03, 0x0A, 0x03, 0x41, 0x00, 0x03, 0x00, 0x43, 0x03, 0x01,
+ 0x03, 0x27, 0x00, 0x03, 0x00, 0x63, 0x03, 0x01, 0x03, 0x27, 0x00, 0x03, 0x00, 0x45, 0x03, 0x04,
+ 0x03, 0x40, 0x00, 0x03, 0x00, 0x65, 0x03, 0x04, 0x03, 0x40, 0x00, 0x03, 0x00, 0x45, 0x03, 0x04,
+ 0x03, 0x41, 0x00, 0x03, 0x00, 0x65, 0x03, 0x04, 0x03, 0x41, 0x00, 0x03, 0x00, 0x45, 0x03, 0x27,
+ 0x03, 0x06, 0x00, 0x03, 0x00, 0x65, 0x03, 0x27, 0x03, 0x06, 0x00, 0x03, 0x00, 0x49, 0x03, 0x08,
+ 0x03, 0x01, 0x00, 0x03, 0x00, 0x69, 0x03, 0x08, 0x03, 0x01, 0x00, 0x02, 0x21, 0x2A, 0x03, 0x41,
+ 0x00, 0x03, 0x00, 0x4F, 0x03, 0x03, 0x03, 0x41, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x03, 0x03, 0x41,
+ 0x00, 0x03, 0x00, 0x4F, 0x03, 0x04, 0x03, 0x40, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x04, 0x03, 0x40,
+ 0x00, 0x03, 0x00, 0x4F, 0x03, 0x04, 0x03, 0x41, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x04, 0x03, 0x41,
+ 0x00, 0x03, 0x00, 0x53, 0x03, 0x23, 0x03, 0x07, 0x00, 0x03, 0x00, 0x73, 0x03, 0x23, 0x03, 0x07,
+ 0x00, 0x03, 0x00, 0x55, 0x03, 0x03, 0x03, 0x41, 0x00, 0x03, 0x00, 0x75, 0x03, 0x03, 0x03, 0x41,
+ 0x00, 0x03, 0x00, 0x41, 0x03, 0x02, 0x03, 0x41, 0x00, 0x03, 0x00, 0x61, 0x03, 0x02, 0x03, 0x41,
+ 0x00, 0x03, 0x00, 0x41, 0x03, 0x02, 0x03, 0x40, 0x00, 0x03, 0x00, 0x61, 0x03, 0x02, 0x03, 0x40,
+ 0x00, 0x03, 0x00, 0x41, 0x03, 0x23, 0x03, 0x02, 0x00, 0x03, 0x00, 0x61, 0x03, 0x23, 0x03, 0x02,
+ 0x00, 0x03, 0x00, 0x41, 0x03, 0x06, 0x03, 0x41, 0x00, 0x03, 0x00, 0x61, 0x03, 0x06, 0x03, 0x41,
+ 0x00, 0x03, 0x00, 0x41, 0x03, 0x06, 0x03, 0x40, 0x00, 0x03, 0x00, 0x61, 0x03, 0x06, 0x03, 0x40,
+ 0x00, 0x03, 0x00, 0x41, 0x03, 0x23, 0x03, 0x06, 0x00, 0x03, 0x00, 0x61, 0x03, 0x23, 0x03, 0x06,
+ 0x00, 0x03, 0x00, 0x45, 0x03, 0x02, 0x03, 0x41, 0x00, 0x03, 0x00, 0x65, 0x03, 0x02, 0x03, 0x41,
+ 0x00, 0x03, 0x00, 0x45, 0x03, 0x02, 0x03, 0x40, 0x00, 0x03, 0x00, 0x65, 0x03, 0x02, 0x03, 0x40,
+ 0x00, 0x03, 0x00, 0x45, 0x03, 0x23, 0x03, 0x02, 0x00, 0x03, 0x00, 0x65, 0x03, 0x23, 0x03, 0x02,
+ 0x00, 0x03, 0x00, 0x4F, 0x03, 0x02, 0x03, 0x41, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x02, 0x03, 0x41,
+ 0x00, 0x03, 0x00, 0x4F, 0x03, 0x02, 0x03, 0x40, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x02, 0x03, 0x40,
+ 0x00, 0x03, 0x00, 0x4F, 0x03, 0x23, 0x03, 0x02, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x23, 0x03, 0x02,
+ 0x00, 0x03, 0x00, 0x4F, 0x03, 0x01, 0x03, 0x1B, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x01, 0x03, 0x1B,
+ 0x00, 0x03, 0x00, 0x4F, 0x03, 0x00, 0x03, 0x1B, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x00, 0x03, 0x1B,
+ 0x00, 0x03, 0x00, 0x4F, 0x03, 0x1B, 0x03, 0x09, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x1B, 0x03, 0x09,
+ 0x00, 0x03, 0x00, 0x4F, 0x03, 0x1B, 0x03, 0x03, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x1B, 0x03, 0x03,
+ 0x00, 0x03, 0x00, 0x4F, 0x03, 0x23, 0x03, 0x1B, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x23, 0x03, 0x1B,
+ 0x00, 0x03, 0x00, 0x55, 0x03, 0x01, 0x03, 0x1B, 0x00, 0x03, 0x00, 0x75, 0x03, 0x01, 0x03, 0x1B,
+ 0x00, 0x03, 0x00, 0x55, 0x03, 0x00, 0x03, 0x1B, 0x00, 0x03, 0x00, 0x75, 0x03, 0x00, 0x03, 0x1B,
+ 0x00, 0x03, 0x00, 0x55, 0x03, 0x1B, 0x03, 0x09, 0x00, 0x03, 0x00, 0x75, 0x03, 0x1B, 0x03, 0x09,
+ 0x00, 0x03, 0x00, 0x55, 0x03, 0x1B, 0x03, 0x03, 0x00, 0x03, 0x00, 0x75, 0x03, 0x1B, 0x03, 0x03,
+ 0x00, 0x03, 0x00, 0x55, 0x03, 0x23, 0x03, 0x1B, 0x00, 0x03, 0x00, 0x75, 0x03, 0x23, 0x03, 0x1B,
+ 0x00, 0x01, 0x00, 0x49, 0x01, 0xD7, 0x01, 0xD8, 0x01, 0xDB, 0x01, 0xDC, 0x01, 0xEC, 0x01, 0xED,
+ 0x01, 0xFA, 0x01, 0xFB, 0x1E, 0x08, 0x1E, 0x09, 0x1E, 0x14, 0x1E, 0x15, 0x1E, 0x16, 0x1E, 0x17,
+ 0x1E, 0x1C, 0x1E, 0x1D, 0x1E, 0x2E, 0x1E, 0x2F, 0x1E, 0x30, 0x1E, 0x4C, 0x1E, 0x4D, 0x1E, 0x50,
+ 0x1E, 0x51, 0x1E, 0x52, 0x1E, 0x53, 0x1E, 0x68, 0x1E, 0x69, 0x1E, 0x78, 0x1E, 0x79, 0x1E, 0xA4,
+ 0x1E, 0xA5, 0x1E, 0xA6, 0x1E, 0xA7, 0x1E, 0xAC, 0x1E, 0xAD, 0x1E, 0xAE, 0x1E, 0xAF, 0x1E, 0xB0,
+ 0x1E, 0xB1, 0x1E, 0xB6, 0x1E, 0xB7, 0x1E, 0xBE, 0x1E, 0xBF, 0x1E, 0xC0, 0x1E, 0xC1, 0x1E, 0xC6,
+ 0x1E, 0xC7, 0x1E, 0xD0, 0x1E, 0xD1, 0x1E, 0xD2, 0x1E, 0xD3, 0x1E, 0xD8, 0x1E, 0xD9, 0x1E, 0xDA,
+ 0x1E, 0xDB, 0x1E, 0xDC, 0x1E, 0xDD, 0x1E, 0xDE, 0x1E, 0xDF, 0x1E, 0xE0, 0x1E, 0xE1, 0x1E, 0xE2,
+ 0x1E, 0xE3, 0x1E, 0xE8, 0x1E, 0xE9, 0x1E, 0xEA, 0x1E, 0xEB, 0x1E, 0xEC, 0x1E, 0xED, 0x1E, 0xEE,
+ 0x1E, 0xEF, 0x1E, 0xF0, 0x1E, 0xF1, 0x00, 0x01, 0x00, 0x9C, 0x00, 0x0F, 0x00, 0x24, 0x00, 0x2C,
+ 0x00, 0x34, 0x00, 0x3C, 0x00, 0x44, 0x00, 0x4C, 0x00, 0x54, 0x00, 0x5C, 0x00, 0x64, 0x00, 0x6C,
+ 0x00, 0x74, 0x00, 0x7C, 0x00, 0x84, 0x00, 0x8C, 0x00, 0x94, 0x00, 0x03, 0x00, 0x55, 0x03, 0x08,
+ 0x03, 0x41, 0x00, 0x03, 0x00, 0x75, 0x03, 0x08, 0x03, 0x41, 0x00, 0x03, 0x00, 0x41, 0x03, 0x0A,
+ 0x03, 0x01, 0x00, 0x03, 0x00, 0x43, 0x03, 0x27, 0x03, 0x01, 0x00, 0x03, 0x00, 0x63, 0x03, 0x27,
+ 0x03, 0x01, 0x00, 0x03, 0x00, 0x49, 0x03, 0x08, 0x03, 0x41, 0x00, 0x03, 0x00, 0x69, 0x03, 0x08,
+ 0x03, 0x41, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x1B, 0x03, 0x01, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x1B,
+ 0x03, 0x01, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x1B, 0x03, 0x00, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x1B,
+ 0x03, 0x00, 0x00, 0x03, 0x00, 0x55, 0x03, 0x1B, 0x03, 0x01, 0x00, 0x03, 0x00, 0x75, 0x03, 0x1B,
+ 0x03, 0x01, 0x00, 0x03, 0x00, 0x55, 0x03, 0x1B, 0x03, 0x00, 0x00, 0x03, 0x00, 0x75, 0x03, 0x1B,
+ 0x03, 0x00, 0x00, 0x01, 0x00, 0x0F, 0x01, 0xD7, 0x01, 0xD8, 0x01, 0xFA, 0x1E, 0x08, 0x1E, 0x09,
+ 0x1E, 0x2E, 0x1E, 0x2F, 0x1E, 0xDA, 0x1E, 0xDB, 0x1E, 0xDC, 0x1E, 0xDD, 0x1E, 0xE8, 0x1E, 0xE9,
+ 0x1E, 0xEA, 0x1E, 0xEB, 0x00, 0x01, 0x00, 0x74, 0x00, 0x0B, 0x00, 0x1C, 0x00, 0x24, 0x00, 0x2C,
+ 0x00, 0x34, 0x00, 0x3C, 0x00, 0x44, 0x00, 0x4C, 0x00, 0x54, 0x00, 0x5C, 0x00, 0x64, 0x00, 0x6C,
+ 0x00, 0x03, 0x00, 0x41, 0x03, 0x0A, 0x03, 0x41, 0x00, 0x03, 0x00, 0x43, 0x03, 0x27, 0x03, 0x41,
+ 0x00, 0x03, 0x00, 0x63, 0x03, 0x27, 0x03, 0x41, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x1B, 0x03, 0x41,
+ 0x00, 0x03, 0x00, 0x6F, 0x03, 0x1B, 0x03, 0x41, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x1B, 0x03, 0x40,
+ 0x00, 0x03, 0x00, 0x6F, 0x03, 0x1B, 0x03, 0x40, 0x00, 0x03, 0x00, 0x55, 0x03, 0x1B, 0x03, 0x41,
+ 0x00, 0x03, 0x00, 0x75, 0x03, 0x1B, 0x03, 0x41, 0x00, 0x03, 0x00, 0x55, 0x03, 0x1B, 0x03, 0x40,
+ 0x00, 0x03, 0x00, 0x75, 0x03, 0x1B, 0x03, 0x40, 0x00, 0x01, 0x00, 0x0B, 0x01, 0xFA, 0x1E, 0x08,
+ 0x1E, 0x09, 0x1E, 0xDA, 0x1E, 0xDB, 0x1E, 0xDC, 0x1E, 0xDD, 0x1E, 0xE8, 0x1E, 0xE9, 0x1E, 0xEA,
+ 0x1E, 0xEB, 0x00, 0x01, 0x00, 0x6A, 0x00, 0x0A, 0x00, 0x1A, 0x00, 0x22, 0x00, 0x2A, 0x00, 0x32,
+ 0x00, 0x3A, 0x00, 0x42, 0x00, 0x4A, 0x00, 0x52, 0x00, 0x5A, 0x00, 0x62, 0x00, 0x03, 0x00, 0x43,
+ 0x03, 0x41, 0x03, 0x27, 0x00, 0x03, 0x00, 0x63, 0x03, 0x41, 0x03, 0x27, 0x00, 0x03, 0x00, 0x4F,
+ 0x03, 0x41, 0x03, 0x1B, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x41, 0x03, 0x1B, 0x00, 0x03, 0x00, 0x4F,
+ 0x03, 0x40, 0x03, 0x1B, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x40, 0x03, 0x1B, 0x00, 0x03, 0x00, 0x55,
+ 0x03, 0x41, 0x03, 0x1B, 0x00, 0x03, 0x00, 0x75, 0x03, 0x41, 0x03, 0x1B, 0x00, 0x03, 0x00, 0x55,
+ 0x03, 0x40, 0x03, 0x1B, 0x00, 0x03, 0x00, 0x75, 0x03, 0x40, 0x03, 0x1B, 0x00, 0x01, 0x00, 0x0A,
+ 0x1E, 0x08, 0x1E, 0x09, 0x1E, 0xDA, 0x1E, 0xDB, 0x1E, 0xDC, 0x1E, 0xDD, 0x1E, 0xE8, 0x1E, 0xE9,
+ 0x1E, 0xEA, 0x1E, 0xEB, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01, 0x00, 0x26,
+ 0x00, 0x02, 0x00, 0x0A, 0x00, 0x1C, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x0D, 0x4A, 0x00, 0x02,
+ 0x0D, 0x3E, 0x0D, 0x4C, 0x00, 0x02, 0x0D, 0x57, 0x00, 0x01, 0x00, 0x04, 0x0D, 0x4B, 0x00, 0x02,
+ 0x0D, 0x3E, 0x00, 0x01, 0x00, 0x02, 0x0D, 0x46, 0x0D, 0x47, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01,
+ 0x00, 0x08, 0x00, 0x01, 0x00, 0x1E, 0x00, 0x03, 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18, 0x00, 0x02,
+ 0x0D, 0x46, 0x0D, 0x3E, 0x00, 0x02, 0x0D, 0x47, 0x0D, 0x3E, 0x00, 0x02, 0x0D, 0x46, 0x0D, 0x57,
+ 0x00, 0x01, 0x00, 0x03, 0x0D, 0x4A, 0x0D, 0x4B, 0x0D, 0x4C, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01,
+ 0x00, 0x08, 0x00, 0x01, 0x00, 0x12, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01, 0x00, 0x04, 0x10, 0x26,
+ 0x00, 0x02, 0x10, 0x2E, 0x00, 0x01, 0x00, 0x01, 0x10, 0x25, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01,
+ 0x00, 0x08, 0x00, 0x01, 0x00, 0x0E, 0x00, 0x01, 0x00, 0x08, 0x00, 0x02, 0x10, 0x25, 0x10, 0x2E,
+ 0x00, 0x01, 0x00, 0x01, 0x10, 0x26, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01,
+ 0x00, 0x22, 0x00, 0x01, 0x00, 0x08, 0x00, 0x03, 0x00, 0x08, 0x00, 0x0E, 0x00, 0x14, 0x0B, 0x4B,
+ 0x00, 0x02, 0x0B, 0x3E, 0x0B, 0x48, 0x00, 0x02, 0x0B, 0x56, 0x0B, 0x4C, 0x00, 0x02, 0x0B, 0x57,
+ 0x00, 0x01, 0x00, 0x01, 0x0B, 0x47, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01,
+ 0x00, 0x1E, 0x00, 0x03, 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18, 0x00, 0x02, 0x0B, 0x47, 0x0B, 0x56,
+ 0x00, 0x02, 0x0B, 0x47, 0x0B, 0x3E, 0x00, 0x02, 0x0B, 0x47, 0x0B, 0x57, 0x00, 0x01, 0x00, 0x03,
+ 0x0B, 0x48, 0x0B, 0x4B, 0x0B, 0x4C, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01,
+ 0x00, 0x38, 0x00, 0x02, 0x00, 0x0A, 0x00, 0x2E, 0x00, 0x04, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x18,
+ 0x00, 0x1E, 0x0D, 0xDA, 0x00, 0x02, 0x0D, 0xCA, 0x0D, 0xDD, 0x00, 0x03, 0x0D, 0xCF, 0x0D, 0xCA,
+ 0x0D, 0xDC, 0x00, 0x02, 0x0D, 0xCF, 0x0D, 0xDE, 0x00, 0x02, 0x0D, 0xDF, 0x00, 0x01, 0x00, 0x04,
+ 0x0D, 0xDD, 0x00, 0x02, 0x0D, 0xCA, 0x00, 0x01, 0x00, 0x02, 0x0D, 0xD9, 0x0D, 0xDC, 0x00, 0x02,
+ 0x00, 0x00, 0x00, 0x02, 0x00, 0x0A, 0x00, 0x3C, 0x00, 0x01, 0x00, 0x26, 0x00, 0x04, 0x00, 0x0E,
+ 0x00, 0x14, 0x00, 0x1A, 0x00, 0x20, 0x00, 0x02, 0x0D, 0xD9, 0x0D, 0xCA, 0x00, 0x02, 0x0D, 0xD9,
+ 0x0D, 0xCF, 0x00, 0x02, 0x0D, 0xDC, 0x0D, 0xCA, 0x00, 0x02, 0x0D, 0xD9, 0x0D, 0xDF, 0x00, 0x01,
+ 0x00, 0x04, 0x0D, 0xDA, 0x0D, 0xDC, 0x0D, 0xDD, 0x0D, 0xDE, 0x00, 0x01, 0x00, 0x10, 0x00, 0x01,
+ 0x00, 0x08, 0x00, 0x03, 0x0D, 0xD9, 0x0D, 0xCF, 0x0D, 0xCA, 0x00, 0x01, 0x00, 0x01, 0x0D, 0xDD,
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01, 0x00, 0x32, 0x00, 0x03, 0x00, 0x0C,
+ 0x00, 0x16, 0x00, 0x28, 0x00, 0x01, 0x00, 0x04, 0x0B, 0x94, 0x00, 0x02, 0x0B, 0xD7, 0x00, 0x02,
+ 0x00, 0x06, 0x00, 0x0C, 0x0B, 0xCA, 0x00, 0x02, 0x0B, 0xBE, 0x0B, 0xCC, 0x00, 0x02, 0x0B, 0xD7,
+ 0x00, 0x01, 0x00, 0x04, 0x0B, 0xCB, 0x00, 0x02, 0x0B, 0xBE, 0x00, 0x01, 0x00, 0x03, 0x0B, 0x92,
+ 0x0B, 0xC6, 0x0B, 0xC7, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01, 0x00, 0x26,
+ 0x00, 0x04, 0x00, 0x0E, 0x00, 0x14, 0x00, 0x1A, 0x00, 0x20, 0x00, 0x02, 0x0B, 0x92, 0x0B, 0xD7,
+ 0x00, 0x02, 0x0B, 0xC6, 0x0B, 0xBE, 0x00, 0x02, 0x0B, 0xC7, 0x0B, 0xBE, 0x00, 0x02, 0x0B, 0xC6,
+ 0x0B, 0xD7, 0x00, 0x01, 0x00, 0x04, 0x0B, 0x94, 0x0B, 0xCA, 0x0B, 0xCB, 0x0B, 0xCC, 0x00, 0x04,
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01, 0x00, 0x12, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01,
+ 0x00, 0x04, 0x0C, 0x48, 0x00, 0x02, 0x0C, 0x56, 0x00, 0x01, 0x00, 0x01, 0x0C, 0x46, 0x00, 0x02,
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01, 0x00, 0x0E, 0x00, 0x01, 0x00, 0x08, 0x00, 0x02,
+ 0x0C, 0x46, 0x0C, 0x56, 0x00, 0x01, 0x00, 0x01, 0x0C, 0x48, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01,
+ 0x00, 0x08, 0x00, 0x01, 0x00, 0x8A, 0x00, 0x0B, 0x00, 0x1C, 0x00, 0x26, 0x00, 0x30, 0x00, 0x3A,
+ 0x00, 0x44, 0x00, 0x4E, 0x00, 0x58, 0x00, 0x62, 0x00, 0x6C, 0x00, 0x76, 0x00, 0x80, 0x00, 0x01,
+ 0x00, 0x04, 0x1B, 0x06, 0x00, 0x02, 0x1B, 0x35, 0x00, 0x01, 0x00, 0x04, 0x1B, 0x08, 0x00, 0x02,
+ 0x1B, 0x35, 0x00, 0x01, 0x00, 0x04, 0x1B, 0x0A, 0x00, 0x02, 0x1B, 0x35, 0x00, 0x01, 0x00, 0x04,
+ 0x1B, 0x0C, 0x00, 0x02, 0x1B, 0x35, 0x00, 0x01, 0x00, 0x04, 0x1B, 0x0E, 0x00, 0x02, 0x1B, 0x35,
+ 0x00, 0x01, 0x00, 0x04, 0x1B, 0x12, 0x00, 0x02, 0x1B, 0x35, 0x00, 0x01, 0x00, 0x04, 0x1B, 0x3B,
+ 0x00, 0x02, 0x1B, 0x35, 0x00, 0x01, 0x00, 0x04, 0x1B, 0x3D, 0x00, 0x02, 0x1B, 0x35, 0x00, 0x01,
+ 0x00, 0x04, 0x1B, 0x40, 0x00, 0x02, 0x1B, 0x35, 0x00, 0x01, 0x00, 0x04, 0x1B, 0x41, 0x00, 0x02,
+ 0x1B, 0x35, 0x00, 0x01, 0x00, 0x04, 0x1B, 0x43, 0x00, 0x02, 0x1B, 0x35, 0x00, 0x01, 0x00, 0x0B,
+ 0x1B, 0x05, 0x1B, 0x07, 0x1B, 0x09, 0x1B, 0x0B, 0x1B, 0x0D, 0x1B, 0x11, 0x1B, 0x3A, 0x1B, 0x3C,
+ 0x1B, 0x3E, 0x1B, 0x3F, 0x1B, 0x42, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01,
+ 0x00, 0x5E, 0x00, 0x0B, 0x00, 0x1C, 0x00, 0x22, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x34, 0x00, 0x3A,
+ 0x00, 0x40, 0x00, 0x46, 0x00, 0x4C, 0x00, 0x52, 0x00, 0x58, 0x00, 0x02, 0x1B, 0x05, 0x1B, 0x35,
+ 0x00, 0x02, 0x1B, 0x07, 0x1B, 0x35, 0x00, 0x02, 0x1B, 0x09, 0x1B, 0x35, 0x00, 0x02, 0x1B, 0x0B,
+ 0x1B, 0x35, 0x00, 0x02, 0x1B, 0x0D, 0x1B, 0x35, 0x00, 0x02, 0x1B, 0x11, 0x1B, 0x35, 0x00, 0x02,
+ 0x1B, 0x3A, 0x1B, 0x35, 0x00, 0x02, 0x1B, 0x3C, 0x1B, 0x35, 0x00, 0x02, 0x1B, 0x3E, 0x1B, 0x35,
+ 0x00, 0x02, 0x1B, 0x3F, 0x1B, 0x35, 0x00, 0x02, 0x1B, 0x42, 0x1B, 0x35, 0x00, 0x01, 0x00, 0x0B,
+ 0x1B, 0x06, 0x1B, 0x08, 0x1B, 0x0A, 0x1B, 0x0C, 0x1B, 0x0E, 0x1B, 0x12, 0x1B, 0x3B, 0x1B, 0x3D,
+ 0x1B, 0x40, 0x1B, 0x41, 0x1B, 0x43
+};
+
+const le_uint8 CanonShaping::glyphDefinitionTable[] = {
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x28,
+ 0x06, 0x0B, 0x06, 0x0F, 0x00, 0x01, 0x06, 0x10, 0x06, 0x15, 0x00, 0x03, 0x06, 0x1B, 0x06, 0x1B,
+ 0x00, 0x01, 0x06, 0x1E, 0x06, 0x1F, 0x00, 0x01, 0x06, 0x21, 0x06, 0x21, 0x00, 0x01, 0x06, 0x22,
+ 0x06, 0x26, 0x00, 0x02, 0x06, 0x27, 0x06, 0x3A, 0x00, 0x01, 0x06, 0x40, 0x06, 0x4A, 0x00, 0x01,
+ 0x06, 0x4B, 0x06, 0x5E, 0x00, 0x03, 0x06, 0x60, 0x06, 0x6F, 0x00, 0x01, 0x06, 0x70, 0x06, 0x70,
+ 0x00, 0x03, 0x06, 0x71, 0x06, 0xBF, 0x00, 0x01, 0x06, 0xC0, 0x06, 0xC0, 0x00, 0x02, 0x06, 0xC1,
+ 0x06, 0xC1, 0x00, 0x01, 0x06, 0xC2, 0x06, 0xC2, 0x00, 0x02, 0x06, 0xC3, 0x06, 0xD2, 0x00, 0x01,
+ 0x06, 0xD3, 0x06, 0xD3, 0x00, 0x02, 0x06, 0xD4, 0x06, 0xD5, 0x00, 0x01, 0x06, 0xD6, 0x06, 0xDC,
+ 0x00, 0x03, 0x06, 0xDE, 0x06, 0xE4, 0x00, 0x03, 0x06, 0xE5, 0x06, 0xE6, 0x00, 0x01, 0x06, 0xE7,
+ 0x06, 0xE8, 0x00, 0x03, 0x06, 0xE9, 0x06, 0xE9, 0x00, 0x01, 0x06, 0xEA, 0x06, 0xED, 0x00, 0x03,
+ 0x06, 0xEE, 0x06, 0xFF, 0x00, 0x01, 0x07, 0x50, 0x07, 0x6D, 0x00, 0x01, 0xFB, 0x50, 0xFB, 0xB1,
+ 0x00, 0x01, 0xFB, 0xD3, 0xFB, 0xDC, 0x00, 0x01, 0xFB, 0xDD, 0xFB, 0xDD, 0x00, 0x02, 0xFB, 0xDE,
+ 0xFB, 0xE9, 0x00, 0x01, 0xFB, 0xEA, 0xFB, 0xFB, 0x00, 0x02, 0xFB, 0xFC, 0xFB, 0xFF, 0x00, 0x01,
+ 0xFC, 0x00, 0xFC, 0x5D, 0x00, 0x02, 0xFC, 0x64, 0xFC, 0xF1, 0x00, 0x02, 0xFC, 0xF5, 0xFD, 0x3D,
+ 0x00, 0x02, 0xFD, 0x50, 0xFD, 0x8F, 0x00, 0x02, 0xFD, 0x92, 0xFD, 0xC7, 0x00, 0x02, 0xFD, 0xF0,
+ 0xFD, 0xFC, 0x00, 0x02, 0xFE, 0x80, 0xFE, 0xF4, 0x00, 0x01, 0xFE, 0xF5, 0xFE, 0xFC, 0x00, 0x02,
+ 0x00, 0x02, 0x00, 0xCE, 0x03, 0x00, 0x03, 0x14, 0x00, 0xE6, 0x03, 0x15, 0x03, 0x15, 0x00, 0xE8,
+ 0x03, 0x16, 0x03, 0x19, 0x00, 0xDC, 0x03, 0x1A, 0x03, 0x1A, 0x00, 0xE8, 0x03, 0x1B, 0x03, 0x1B,
+ 0x00, 0xD8, 0x03, 0x1C, 0x03, 0x20, 0x00, 0xDC, 0x03, 0x21, 0x03, 0x22, 0x00, 0xCA, 0x03, 0x23,
+ 0x03, 0x26, 0x00, 0xDC, 0x03, 0x27, 0x03, 0x28, 0x00, 0xCA, 0x03, 0x29, 0x03, 0x33, 0x00, 0xDC,
+ 0x03, 0x34, 0x03, 0x38, 0x00, 0x01, 0x03, 0x39, 0x03, 0x3C, 0x00, 0xDC, 0x03, 0x3D, 0x03, 0x44,
+ 0x00, 0xE6, 0x03, 0x45, 0x03, 0x45, 0x00, 0xF0, 0x03, 0x46, 0x03, 0x46, 0x00, 0xE6, 0x03, 0x47,
+ 0x03, 0x49, 0x00, 0xDC, 0x03, 0x4A, 0x03, 0x4C, 0x00, 0xE6, 0x03, 0x4D, 0x03, 0x4E, 0x00, 0xDC,
+ 0x03, 0x50, 0x03, 0x52, 0x00, 0xE6, 0x03, 0x53, 0x03, 0x56, 0x00, 0xDC, 0x03, 0x57, 0x03, 0x57,
+ 0x00, 0xE6, 0x03, 0x58, 0x03, 0x58, 0x00, 0xE8, 0x03, 0x59, 0x03, 0x5A, 0x00, 0xDC, 0x03, 0x5B,
+ 0x03, 0x5B, 0x00, 0xE6, 0x03, 0x5C, 0x03, 0x5C, 0x00, 0xE9, 0x03, 0x5D, 0x03, 0x5E, 0x00, 0xEA,
+ 0x03, 0x5F, 0x03, 0x5F, 0x00, 0xE9, 0x03, 0x60, 0x03, 0x61, 0x00, 0xEA, 0x03, 0x62, 0x03, 0x62,
+ 0x00, 0xE9, 0x03, 0x63, 0x03, 0x6F, 0x00, 0xE6, 0x04, 0x83, 0x04, 0x86, 0x00, 0xE6, 0x05, 0x91,
+ 0x05, 0x91, 0x00, 0xDC, 0x05, 0x92, 0x05, 0x95, 0x00, 0xE6, 0x05, 0x96, 0x05, 0x96, 0x00, 0xDC,
+ 0x05, 0x97, 0x05, 0x98, 0x00, 0xE6, 0x05, 0x99, 0x05, 0x99, 0x00, 0xE8, 0x05, 0x9A, 0x05, 0x9A,
+ 0x00, 0xDE, 0x05, 0x9B, 0x05, 0x9B, 0x00, 0xDC, 0x05, 0x9C, 0x05, 0xA1, 0x00, 0xE6, 0x05, 0xA2,
+ 0x05, 0xA7, 0x00, 0xDC, 0x05, 0xA8, 0x05, 0xA8, 0x00, 0xE6, 0x05, 0xA9, 0x05, 0xA9, 0x00, 0xE8,
+ 0x05, 0xAA, 0x05, 0xAA, 0x00, 0xDC, 0x05, 0xAB, 0x05, 0xAC, 0x00, 0xE6, 0x05, 0xAD, 0x05, 0xAD,
+ 0x00, 0xDE, 0x05, 0xAE, 0x05, 0xAE, 0x00, 0xE8, 0x05, 0xAF, 0x05, 0xAF, 0x00, 0xE6, 0x05, 0xB0,
+ 0x05, 0xB8, 0x00, 0xDC, 0x05, 0xB9, 0x05, 0xB9, 0x00, 0x1B, 0x05, 0xBA, 0x05, 0xBA, 0x00, 0x13,
+ 0x05, 0xBB, 0x05, 0xBB, 0x00, 0xDC, 0x05, 0xBC, 0x05, 0xBC, 0x00, 0x15, 0x05, 0xBD, 0x05, 0xBD,
+ 0x00, 0xDC, 0x05, 0xBF, 0x05, 0xBF, 0x00, 0x17, 0x05, 0xC1, 0x05, 0xC1, 0x00, 0x0A, 0x05, 0xC2,
+ 0x05, 0xC2, 0x00, 0x0B, 0x05, 0xC4, 0x05, 0xC4, 0x00, 0xE6, 0x05, 0xC5, 0x05, 0xC5, 0x00, 0xDC,
+ 0x05, 0xC7, 0x05, 0xC7, 0x00, 0x12, 0x06, 0x10, 0x06, 0x15, 0x00, 0xE6, 0x06, 0x4B, 0x06, 0x4C,
+ 0x00, 0x1F, 0x06, 0x4D, 0x06, 0x4D, 0x00, 0x1E, 0x06, 0x4E, 0x06, 0x4F, 0x00, 0x1F, 0x06, 0x50,
+ 0x06, 0x50, 0x00, 0x1E, 0x06, 0x51, 0x06, 0x51, 0x00, 0x1C, 0x06, 0x52, 0x06, 0x52, 0x00, 0x1F,
+ 0x06, 0x53, 0x06, 0x53, 0x00, 0x20, 0x06, 0x54, 0x06, 0x55, 0x00, 0x1B, 0x06, 0x56, 0x06, 0x56,
+ 0x00, 0x1D, 0x06, 0x57, 0x06, 0x58, 0x00, 0x1F, 0x06, 0x59, 0x06, 0x5B, 0x00, 0xE6, 0x06, 0x5C,
+ 0x06, 0x5C, 0x00, 0xDC, 0x06, 0x5D, 0x06, 0x5E, 0x00, 0xE6, 0x06, 0x70, 0x06, 0x70, 0x00, 0x1D,
+ 0x06, 0xD6, 0x06, 0xDC, 0x00, 0xE6, 0x06, 0xDF, 0x06, 0xE0, 0x00, 0xE6, 0x06, 0xE1, 0x06, 0xE1,
+ 0x00, 0x1F, 0x06, 0xE2, 0x06, 0xE2, 0x00, 0xE6, 0x06, 0xE3, 0x06, 0xE3, 0x00, 0xDC, 0x06, 0xE4,
+ 0x06, 0xE4, 0x00, 0xE6, 0x06, 0xE7, 0x06, 0xE8, 0x00, 0xE6, 0x06, 0xEA, 0x06, 0xEA, 0x00, 0xDC,
+ 0x06, 0xEB, 0x06, 0xEC, 0x00, 0xE6, 0x06, 0xED, 0x06, 0xED, 0x00, 0xDC, 0x07, 0x11, 0x07, 0x11,
+ 0x00, 0x24, 0x07, 0x30, 0x07, 0x30, 0x00, 0xE6, 0x07, 0x31, 0x07, 0x31, 0x00, 0xDC, 0x07, 0x32,
+ 0x07, 0x33, 0x00, 0xE6, 0x07, 0x34, 0x07, 0x34, 0x00, 0xDC, 0x07, 0x35, 0x07, 0x36, 0x00, 0xE6,
+ 0x07, 0x37, 0x07, 0x39, 0x00, 0xDC, 0x07, 0x3A, 0x07, 0x3A, 0x00, 0xE6, 0x07, 0x3B, 0x07, 0x3C,
+ 0x00, 0xDC, 0x07, 0x3D, 0x07, 0x3D, 0x00, 0xE6, 0x07, 0x3E, 0x07, 0x3E, 0x00, 0xDC, 0x07, 0x3F,
+ 0x07, 0x41, 0x00, 0xE6, 0x07, 0x42, 0x07, 0x42, 0x00, 0xDC, 0x07, 0x43, 0x07, 0x43, 0x00, 0xE6,
+ 0x07, 0x44, 0x07, 0x44, 0x00, 0xDC, 0x07, 0x45, 0x07, 0x45, 0x00, 0xE6, 0x07, 0x46, 0x07, 0x46,
+ 0x00, 0xDC, 0x07, 0x47, 0x07, 0x47, 0x00, 0xE6, 0x07, 0x48, 0x07, 0x48, 0x00, 0xDC, 0x07, 0x49,
+ 0x07, 0x4A, 0x00, 0xE6, 0x07, 0xEB, 0x07, 0xF1, 0x00, 0xE6, 0x07, 0xF2, 0x07, 0xF2, 0x00, 0xDC,
+ 0x07, 0xF3, 0x07, 0xF3, 0x00, 0xE6, 0x09, 0x3C, 0x09, 0x3C, 0x00, 0x07, 0x09, 0x4D, 0x09, 0x4D,
+ 0x00, 0x09, 0x09, 0x51, 0x09, 0x51, 0x00, 0xE6, 0x09, 0x52, 0x09, 0x52, 0x00, 0xDC, 0x09, 0x53,
+ 0x09, 0x54, 0x00, 0xE6, 0x09, 0xBC, 0x09, 0xBC, 0x00, 0x07, 0x09, 0xCD, 0x09, 0xCD, 0x00, 0x09,
+ 0x0A, 0x3C, 0x0A, 0x3C, 0x00, 0x07, 0x0A, 0x4D, 0x0A, 0x4D, 0x00, 0x09, 0x0A, 0xBC, 0x0A, 0xBC,
+ 0x00, 0x07, 0x0A, 0xCD, 0x0A, 0xCD, 0x00, 0x09, 0x0B, 0x3C, 0x0B, 0x3C, 0x00, 0x07, 0x0B, 0x4D,
+ 0x0B, 0x4D, 0x00, 0x09, 0x0B, 0xCD, 0x0B, 0xCD, 0x00, 0x09, 0x0C, 0x4D, 0x0C, 0x4D, 0x00, 0x09,
+ 0x0C, 0x55, 0x0C, 0x55, 0x00, 0x54, 0x0C, 0x56, 0x0C, 0x56, 0x00, 0x5B, 0x0C, 0xBC, 0x0C, 0xBC,
+ 0x00, 0x07, 0x0C, 0xCD, 0x0C, 0xCD, 0x00, 0x09, 0x0D, 0x4D, 0x0D, 0x4D, 0x00, 0x09, 0x0D, 0xCA,
+ 0x0D, 0xCA, 0x00, 0x09, 0x0E, 0x38, 0x0E, 0x39, 0x00, 0x67, 0x0E, 0x3A, 0x0E, 0x3A, 0x00, 0x09,
+ 0x0E, 0x48, 0x0E, 0x4B, 0x00, 0x6B, 0x0E, 0xB8, 0x0E, 0xB9, 0x00, 0x76, 0x0E, 0xC8, 0x0E, 0xCB,
+ 0x00, 0x7A, 0x0F, 0x18, 0x0F, 0x19, 0x00, 0xDC, 0x0F, 0x35, 0x0F, 0x35, 0x00, 0xDC, 0x0F, 0x37,
+ 0x0F, 0x37, 0x00, 0xDC, 0x0F, 0x39, 0x0F, 0x39, 0x00, 0xD8, 0x0F, 0x71, 0x0F, 0x71, 0x00, 0x81,
+ 0x0F, 0x72, 0x0F, 0x72, 0x00, 0x82, 0x0F, 0x74, 0x0F, 0x74, 0x00, 0x84, 0x0F, 0x7A, 0x0F, 0x7D,
+ 0x00, 0x82, 0x0F, 0x80, 0x0F, 0x80, 0x00, 0x82, 0x0F, 0x82, 0x0F, 0x83, 0x00, 0xE6, 0x0F, 0x84,
+ 0x0F, 0x84, 0x00, 0x09, 0x0F, 0x86, 0x0F, 0x87, 0x00, 0xE6, 0x0F, 0xC6, 0x0F, 0xC6, 0x00, 0xDC,
+ 0x10, 0x37, 0x10, 0x37, 0x00, 0x07, 0x10, 0x39, 0x10, 0x39, 0x00, 0x09, 0x13, 0x5F, 0x13, 0x5F,
+ 0x00, 0xE6, 0x17, 0x14, 0x17, 0x14, 0x00, 0x09, 0x17, 0x34, 0x17, 0x34, 0x00, 0x09, 0x17, 0xD2,
+ 0x17, 0xD2, 0x00, 0x09, 0x17, 0xDD, 0x17, 0xDD, 0x00, 0xE6, 0x18, 0xA9, 0x18, 0xA9, 0x00, 0xE4,
+ 0x19, 0x39, 0x19, 0x39, 0x00, 0xDE, 0x19, 0x3A, 0x19, 0x3A, 0x00, 0xE6, 0x19, 0x3B, 0x19, 0x3B,
+ 0x00, 0xDC, 0x1A, 0x17, 0x1A, 0x17, 0x00, 0xE6, 0x1A, 0x18, 0x1A, 0x18, 0x00, 0xDC, 0x1B, 0x34,
+ 0x1B, 0x34, 0x00, 0x07, 0x1B, 0x44, 0x1B, 0x44, 0x00, 0x09, 0x1B, 0x6B, 0x1B, 0x6B, 0x00, 0xE6,
+ 0x1B, 0x6C, 0x1B, 0x6C, 0x00, 0xDC, 0x1B, 0x6D, 0x1B, 0x73, 0x00, 0xE6, 0x1D, 0xC0, 0x1D, 0xC1,
+ 0x00, 0xE6, 0x1D, 0xC2, 0x1D, 0xC2, 0x00, 0xDC, 0x1D, 0xC3, 0x1D, 0xC9, 0x00, 0xE6, 0x1D, 0xCA,
+ 0x1D, 0xCA, 0x00, 0xDC, 0x1D, 0xFE, 0x1D, 0xFE, 0x00, 0xE6, 0x1D, 0xFF, 0x1D, 0xFF, 0x00, 0xDC,
+ 0x20, 0xD0, 0x20, 0xD1, 0x00, 0xE6, 0x20, 0xD2, 0x20, 0xD3, 0x00, 0x01, 0x20, 0xD4, 0x20, 0xD7,
+ 0x00, 0xE6, 0x20, 0xD8, 0x20, 0xDA, 0x00, 0x01, 0x20, 0xDB, 0x20, 0xDC, 0x00, 0xE6, 0x20, 0xE1,
+ 0x20, 0xE1, 0x00, 0xE6, 0x20, 0xE5, 0x20, 0xE6, 0x00, 0x01, 0x20, 0xE7, 0x20, 0xE7, 0x00, 0xE6,
+ 0x20, 0xE8, 0x20, 0xE8, 0x00, 0xDC, 0x20, 0xE9, 0x20, 0xE9, 0x00, 0xE6, 0x20, 0xEA, 0x20, 0xEB,
+ 0x00, 0x01, 0x20, 0xEC, 0x20, 0xEF, 0x00, 0xDC, 0x30, 0x2A, 0x30, 0x2A, 0x00, 0xDA, 0x30, 0x2B,
+ 0x30, 0x2B, 0x00, 0xE4, 0x30, 0x2C, 0x30, 0x2C, 0x00, 0xE8, 0x30, 0x2D, 0x30, 0x2D, 0x00, 0xDE,
+ 0x30, 0x2E, 0x30, 0x2F, 0x00, 0xE0, 0x30, 0x99, 0x30, 0x9A, 0x00, 0x08, 0xA8, 0x06, 0xA8, 0x06,
+ 0x00, 0x09, 0xFB, 0x1E, 0xFB, 0x1E, 0x00, 0x1A, 0xFE, 0x20, 0xFE, 0x23, 0x00, 0xE6, 0x0A, 0x0D,
+ 0x0A, 0x0D, 0x00, 0xDC, 0x0A, 0x0F, 0x0A, 0x0F, 0x00, 0xE6, 0x0A, 0x38, 0x0A, 0x38, 0x00, 0xE6,
+ 0x0A, 0x39, 0x0A, 0x39, 0x00, 0x01, 0x0A, 0x3A, 0x0A, 0x3A, 0x00, 0xDC, 0x0A, 0x3F, 0x0A, 0x3F,
+ 0x00, 0x09, 0xD1, 0x65, 0xD1, 0x66, 0x00, 0xD8, 0xD1, 0x67, 0xD1, 0x69, 0x00, 0x01, 0xD1, 0x6D,
+ 0xD1, 0x6D, 0x00, 0xE2, 0xD1, 0x6E, 0xD1, 0x72, 0x00, 0xD8, 0xD1, 0x7B, 0xD1, 0x82, 0x00, 0xDC,
+ 0xD1, 0x85, 0xD1, 0x89, 0x00, 0xE6, 0xD1, 0x8A, 0xD1, 0x8B, 0x00, 0xDC, 0xD1, 0xAA, 0xD1, 0xAD,
+ 0x00, 0xE6, 0xD2, 0x42, 0xD2, 0x44, 0x00, 0xE6
+};
+
+U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-50.1/layout/CanonShaping.cpp b/Build/source/libs/icu/icu-50.1/layout/CanonShaping.cpp
new file mode 100644
index 00000000000..ea109a77d98
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/CanonShaping.cpp
@@ -0,0 +1,81 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
+ *
+ */
+
+#include "LETypes.h"
+#include "LEGlyphStorage.h"
+#include "CanonShaping.h"
+#include "GlyphDefinitionTables.h"
+#include "ClassDefinitionTables.h"
+
+U_NAMESPACE_BEGIN
+
+void CanonShaping::sortMarks(le_int32 *indices, const le_int32 *combiningClasses, le_int32 index, le_int32 limit)
+{
+ for (le_int32 j = index + 1; j < limit; j += 1) {
+ le_int32 i;
+ le_int32 v = indices[j];
+ le_int32 c = combiningClasses[v];
+
+ for (i = j - 1; i >= index; i -= 1) {
+ if (c >= combiningClasses[indices[i]]) {
+ break;
+ }
+
+ indices[i + 1] = indices[i];
+ }
+
+ indices[i + 1] = v;
+ }
+}
+
+void CanonShaping::reorderMarks(const LEUnicode *inChars, le_int32 charCount, le_bool rightToLeft,
+ LEUnicode *outChars, LEGlyphStorage &glyphStorage)
+{
+ const GlyphDefinitionTableHeader *gdefTable = (const GlyphDefinitionTableHeader *) glyphDefinitionTable;
+ const ClassDefinitionTable *classTable = gdefTable->getMarkAttachClassDefinitionTable();
+ le_int32 *combiningClasses = LE_NEW_ARRAY(le_int32, charCount);
+ le_int32 *indices = LE_NEW_ARRAY(le_int32, charCount);
+ LEErrorCode status = LE_NO_ERROR;
+ le_int32 i;
+
+ for (i = 0; i < charCount; i += 1) {
+ combiningClasses[i] = classTable->getGlyphClass((LEGlyphID) inChars[i]);
+ indices[i] = i;
+ }
+
+ for (i = 0; i < charCount; i += 1) {
+ if (combiningClasses[i] != 0) {
+ le_int32 mark;
+
+ for (mark = i; mark < charCount; mark += 1) {
+ if (combiningClasses[mark] == 0) {
+ break;
+ }
+ }
+
+ sortMarks(indices, combiningClasses, i, mark);
+ }
+ }
+
+ le_int32 out = 0, dir = 1;
+
+ if (rightToLeft) {
+ out = charCount - 1;
+ dir = -1;
+ }
+
+ for (i = 0; i < charCount; i += 1, out += dir) {
+ le_int32 index = indices[i];
+
+ outChars[i] = inChars[index];
+ glyphStorage.setCharIndex(out, index, status);
+ }
+
+ LE_DELETE_ARRAY(indices);
+ LE_DELETE_ARRAY(combiningClasses);
+}
+
+U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-50.1/layout/CanonShaping.h b/Build/source/libs/icu/icu-50.1/layout/CanonShaping.h
new file mode 100644
index 00000000000..cdf19595b59
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/CanonShaping.h
@@ -0,0 +1,30 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2006 - All Rights Reserved
+ *
+ */
+
+#ifndef __CANONSHAPING_H
+#define __CANONSHAPING_H
+
+#include "LETypes.h"
+
+U_NAMESPACE_BEGIN
+
+class LEGlyphStorage;
+
+class U_LAYOUT_API CanonShaping /* not : public UObject because all members are static */
+{
+public:
+ static const le_uint8 glyphSubstitutionTable[];
+ static const le_uint8 glyphDefinitionTable[];
+
+ static void reorderMarks(const LEUnicode *inChars, le_int32 charCount, le_bool rightToLeft,
+ LEUnicode *outChars, LEGlyphStorage &glyphStorage);
+
+private:
+ static void sortMarks(le_int32 *indices, const le_int32 *combiningClasses, le_int32 index, le_int32 limit);
+};
+
+U_NAMESPACE_END
+#endif
diff --git a/Build/source/libs/icu/icu-50.1/layout/CharSubstitutionFilter.h b/Build/source/libs/icu/icu-50.1/layout/CharSubstitutionFilter.h
new file mode 100644
index 00000000000..780e8ad2cdf
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/CharSubstitutionFilter.h
@@ -0,0 +1,81 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
+ *
+ */
+
+#ifndef __CHARSUBSTITUTIONFILTER_H
+#define __CHARSUBSTITUTIONFILTER_H
+
+#include "LETypes.h"
+#include "LEGlyphFilter.h"
+
+U_NAMESPACE_BEGIN
+
+class LEFontInstance;
+
+/**
+ * This filter is used by character-based GSUB processors. It
+ * accepts only those characters which the given font can display.
+ *
+ * @internal
+ */
+class CharSubstitutionFilter : public UMemory, public LEGlyphFilter
+{
+private:
+ /**
+ * Holds the font which is used to test the characters.
+ *
+ * @internal
+ */
+ const LEFontInstance *fFontInstance;
+
+ /**
+ * The copy constructor. Not allowed!
+ *
+ * @internal
+ */
+ CharSubstitutionFilter(const CharSubstitutionFilter &other); // forbid copying of this class
+
+ /**
+ * The replacement operator. Not allowed!
+ *
+ * @internal
+ */
+ CharSubstitutionFilter &operator=(const CharSubstitutionFilter &other); // forbid copying of this class
+
+public:
+ /**
+ * The constructor.
+ *
+ * @param fontInstance - the font to use to test the characters.
+ *
+ * @internal
+ */
+ CharSubstitutionFilter(const LEFontInstance *fontInstance);
+
+ /**
+ * The destructor.
+ *
+ * @internal
+ */
+ ~CharSubstitutionFilter();
+
+ /**
+ * This method is used to test if a particular
+ * character can be displayed by the filter's
+ * font.
+ *
+ * @param glyph - the Unicode character code to be tested
+ *
+ * @return TRUE if the filter's font can display this character.
+ *
+ * @internal
+ */
+ le_bool accept(LEGlyphID glyph) const;
+};
+
+U_NAMESPACE_END
+#endif
+
+
diff --git a/Build/source/libs/icu/icu-50.1/layout/ClassDefinitionTables.cpp b/Build/source/libs/icu/icu-50.1/layout/ClassDefinitionTables.cpp
new file mode 100644
index 00000000000..471a2b3e1b2
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/ClassDefinitionTables.cpp
@@ -0,0 +1,120 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2010 - All Rights Reserved
+ *
+ */
+
+#include "LETypes.h"
+#include "OpenTypeTables.h"
+#include "OpenTypeUtilities.h"
+#include "ClassDefinitionTables.h"
+#include "LESwaps.h"
+
+U_NAMESPACE_BEGIN
+
+le_int32 ClassDefinitionTable::getGlyphClass(LEGlyphID glyphID) const
+{
+ switch(SWAPW(classFormat)) {
+ case 0:
+ return 0;
+
+ case 1:
+ {
+ const ClassDefFormat1Table *f1Table = (const ClassDefFormat1Table *) this;
+
+ return f1Table->getGlyphClass(glyphID);
+ }
+
+ case 2:
+ {
+ const ClassDefFormat2Table *f2Table = (const ClassDefFormat2Table *) this;
+
+ return f2Table->getGlyphClass(glyphID);
+ }
+
+ default:
+ return 0;
+ }
+}
+
+le_bool ClassDefinitionTable::hasGlyphClass(le_int32 glyphClass) const
+{
+ switch(SWAPW(classFormat)) {
+ case 0:
+ return 0;
+
+ case 1:
+ {
+ const ClassDefFormat1Table *f1Table = (const ClassDefFormat1Table *) this;
+
+ return f1Table->hasGlyphClass(glyphClass);
+ }
+
+ case 2:
+ {
+ const ClassDefFormat2Table *f2Table = (const ClassDefFormat2Table *) this;
+
+ return f2Table->hasGlyphClass(glyphClass);
+ }
+
+ default:
+ return 0;
+ }
+}
+
+le_int32 ClassDefFormat1Table::getGlyphClass(LEGlyphID glyphID) const
+{
+ TTGlyphID ttGlyphID = (TTGlyphID) LE_GET_GLYPH(glyphID);
+ TTGlyphID firstGlyph = SWAPW(startGlyph);
+ TTGlyphID lastGlyph = firstGlyph + SWAPW(glyphCount);
+
+ if (ttGlyphID >= firstGlyph && ttGlyphID < lastGlyph) {
+ return SWAPW(classValueArray[ttGlyphID - firstGlyph]);
+ }
+
+ return 0;
+}
+
+le_bool ClassDefFormat1Table::hasGlyphClass(le_int32 glyphClass) const
+{
+ le_uint16 count = SWAPW(glyphCount);
+ int i;
+
+ for (i = 0; i < count; i += 1) {
+ if (SWAPW(classValueArray[i]) == glyphClass) {
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
+
+le_int32 ClassDefFormat2Table::getGlyphClass(LEGlyphID glyphID) const
+{
+ TTGlyphID ttGlyph = (TTGlyphID) LE_GET_GLYPH(glyphID);
+ le_uint16 rangeCount = SWAPW(classRangeCount);
+ le_int32 rangeIndex =
+ OpenTypeUtilities::getGlyphRangeIndex(ttGlyph, classRangeRecordArray, rangeCount);
+
+ if (rangeIndex < 0) {
+ return 0;
+ }
+
+ return SWAPW(classRangeRecordArray[rangeIndex].rangeValue);
+}
+
+le_bool ClassDefFormat2Table::hasGlyphClass(le_int32 glyphClass) const
+{
+ le_uint16 rangeCount = SWAPW(classRangeCount);
+ int i;
+
+ for (i = 0; i < rangeCount; i += 1) {
+ if (SWAPW(classRangeRecordArray[i].rangeValue) == glyphClass) {
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
+
+U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-50.1/layout/ClassDefinitionTables.h b/Build/source/libs/icu/icu-50.1/layout/ClassDefinitionTables.h
new file mode 100644
index 00000000000..3dfe86e61a5
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/ClassDefinitionTables.h
@@ -0,0 +1,55 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
+ *
+ */
+
+#ifndef __CLASSDEFINITIONTABLES_H
+#define __CLASSDEFINITIONTABLES_H
+
+/**
+ * \file
+ * \internal
+ */
+
+#include "LETypes.h"
+#include "OpenTypeTables.h"
+
+U_NAMESPACE_BEGIN
+
+struct ClassDefinitionTable
+{
+ le_uint16 classFormat;
+
+ le_int32 getGlyphClass(LEGlyphID glyphID) const;
+ le_bool hasGlyphClass(le_int32 glyphClass) const;
+};
+
+struct ClassDefFormat1Table : ClassDefinitionTable
+{
+ TTGlyphID startGlyph;
+ le_uint16 glyphCount;
+ le_uint16 classValueArray[ANY_NUMBER];
+
+ le_int32 getGlyphClass(LEGlyphID glyphID) const;
+ le_bool hasGlyphClass(le_int32 glyphClass) const;
+};
+
+struct ClassRangeRecord
+{
+ TTGlyphID start;
+ TTGlyphID end;
+ le_uint16 classValue;
+};
+
+struct ClassDefFormat2Table : ClassDefinitionTable
+{
+ le_uint16 classRangeCount;
+ GlyphRangeRecord classRangeRecordArray[ANY_NUMBER];
+
+ le_int32 getGlyphClass(LEGlyphID glyphID) const;
+ le_bool hasGlyphClass(le_int32 glyphClass) const;
+};
+
+U_NAMESPACE_END
+#endif
diff --git a/Build/source/libs/icu/icu-50.1/layout/ContextualGlyphInsertion.h b/Build/source/libs/icu/icu-50.1/layout/ContextualGlyphInsertion.h
new file mode 100644
index 00000000000..ead88425ddc
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/ContextualGlyphInsertion.h
@@ -0,0 +1,46 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
+ *
+ */
+
+#ifndef __CONTEXTUALGLYPHINSERTION_H
+#define __CONTEXTUALGLYPHINSERTION_H
+
+/**
+ * \file
+ * \internal
+ */
+
+#include "LETypes.h"
+#include "LayoutTables.h"
+#include "StateTables.h"
+#include "MorphTables.h"
+#include "MorphStateTables.h"
+
+U_NAMESPACE_BEGIN
+
+struct ContextualGlyphInsertionHeader : MorphStateTableHeader
+{
+};
+
+enum ContextualGlyphInsertionFlags
+{
+ cgiSetMark = 0x8000,
+ cgiDontAdvance = 0x4000,
+ cgiCurrentIsKashidaLike = 0x2000,
+ cgiMarkedIsKashidaLike = 0x1000,
+ cgiCurrentInsertBefore = 0x0800,
+ cgiMarkInsertBefore = 0x0400,
+ cgiCurrentInsertCountMask = 0x03E0,
+ cgiMarkedInsertCountMask = 0x001F
+};
+
+struct LigatureSubstitutionStateEntry : StateEntry
+{
+ ByteOffset currentInsertionListOffset;
+ ByteOffset markedInsertionListOffset;
+};
+
+U_NAMESPACE_END
+#endif
diff --git a/Build/source/libs/icu/icu-50.1/layout/ContextualGlyphSubstProc.cpp b/Build/source/libs/icu/icu-50.1/layout/ContextualGlyphSubstProc.cpp
new file mode 100644
index 00000000000..94c4a60b075
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/ContextualGlyphSubstProc.cpp
@@ -0,0 +1,79 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
+ *
+ */
+
+#include "LETypes.h"
+#include "MorphTables.h"
+#include "StateTables.h"
+#include "MorphStateTables.h"
+#include "SubtableProcessor.h"
+#include "StateTableProcessor.h"
+#include "ContextualGlyphSubstProc.h"
+#include "LEGlyphStorage.h"
+#include "LESwaps.h"
+
+U_NAMESPACE_BEGIN
+
+UOBJECT_DEFINE_RTTI_IMPLEMENTATION(ContextualGlyphSubstitutionProcessor)
+
+ContextualGlyphSubstitutionProcessor::ContextualGlyphSubstitutionProcessor(const MorphSubtableHeader *morphSubtableHeader)
+ : StateTableProcessor(morphSubtableHeader)
+{
+ contextualGlyphSubstitutionHeader = (const ContextualGlyphSubstitutionHeader *) morphSubtableHeader;
+ substitutionTableOffset = SWAPW(contextualGlyphSubstitutionHeader->substitutionTableOffset);
+
+ entryTable = (const ContextualGlyphSubstitutionStateEntry *) ((char *) &stateTableHeader->stHeader + entryTableOffset);
+}
+
+ContextualGlyphSubstitutionProcessor::~ContextualGlyphSubstitutionProcessor()
+{
+}
+
+void ContextualGlyphSubstitutionProcessor::beginStateTable()
+{
+ markGlyph = 0;
+}
+
+ByteOffset ContextualGlyphSubstitutionProcessor::processStateEntry(LEGlyphStorage &glyphStorage, le_int32 &currGlyph, EntryTableIndex index)
+{
+ const ContextualGlyphSubstitutionStateEntry *entry = &entryTable[index];
+ ByteOffset newState = SWAPW(entry->newStateOffset);
+ le_int16 flags = SWAPW(entry->flags);
+ WordOffset markOffset = SWAPW(entry->markOffset);
+ WordOffset currOffset = SWAPW(entry->currOffset);
+
+ if (markOffset != 0) {
+ const le_int16 *table = (const le_int16 *) ((char *) &stateTableHeader->stHeader + markOffset * 2);
+ LEGlyphID mGlyph = glyphStorage[markGlyph];
+ TTGlyphID newGlyph = SWAPW(table[LE_GET_GLYPH(mGlyph)]);
+
+ glyphStorage[markGlyph] = LE_SET_GLYPH(mGlyph, newGlyph);
+ }
+
+ if (currOffset != 0) {
+ const le_int16 *table = (const le_int16 *) ((char *) &stateTableHeader->stHeader + currOffset * 2);
+ LEGlyphID thisGlyph = glyphStorage[currGlyph];
+ TTGlyphID newGlyph = SWAPW(table[LE_GET_GLYPH(thisGlyph)]);
+
+ glyphStorage[currGlyph] = LE_SET_GLYPH(thisGlyph, newGlyph);
+ }
+
+ if (flags & cgsSetMark) {
+ markGlyph = currGlyph;
+ }
+
+ if (!(flags & cgsDontAdvance)) {
+ // should handle reverse too!
+ currGlyph += 1;
+ }
+
+ return newState;
+}
+
+void ContextualGlyphSubstitutionProcessor::endStateTable()
+{
+}
+
+U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-50.1/layout/ContextualGlyphSubstProc.h b/Build/source/libs/icu/icu-50.1/layout/ContextualGlyphSubstProc.h
new file mode 100644
index 00000000000..b0c5a6b38c3
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/ContextualGlyphSubstProc.h
@@ -0,0 +1,65 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
+ *
+ */
+
+#ifndef __CONTEXTUALGLYPHSUBSTITUTIONPROCESSOR_H
+#define __CONTEXTUALGLYPHSUBSTITUTIONPROCESSOR_H
+
+/**
+ * \file
+ * \internal
+ */
+
+#include "LETypes.h"
+#include "MorphTables.h"
+#include "SubtableProcessor.h"
+#include "StateTableProcessor.h"
+#include "ContextualGlyphSubstitution.h"
+
+U_NAMESPACE_BEGIN
+
+class LEGlyphStorage;
+
+class ContextualGlyphSubstitutionProcessor : public StateTableProcessor
+{
+public:
+ virtual void beginStateTable();
+
+ virtual ByteOffset processStateEntry(LEGlyphStorage &glyphStorage, le_int32 &currGlyph, EntryTableIndex index);
+
+ virtual void endStateTable();
+
+ ContextualGlyphSubstitutionProcessor(const MorphSubtableHeader *morphSubtableHeader);
+ virtual ~ContextualGlyphSubstitutionProcessor();
+
+ /**
+ * ICU "poor man's RTTI", returns a UClassID for the actual class.
+ *
+ * @stable ICU 2.8
+ */
+ virtual UClassID getDynamicClassID() const;
+
+ /**
+ * ICU "poor man's RTTI", returns a UClassID for this class.
+ *
+ * @stable ICU 2.8
+ */
+ static UClassID getStaticClassID();
+
+private:
+ ContextualGlyphSubstitutionProcessor();
+
+protected:
+ ByteOffset substitutionTableOffset;
+ const ContextualGlyphSubstitutionStateEntry *entryTable;
+
+ le_int32 markGlyph;
+
+ const ContextualGlyphSubstitutionHeader *contextualGlyphSubstitutionHeader;
+
+};
+
+U_NAMESPACE_END
+#endif
diff --git a/Build/source/libs/icu/icu-50.1/layout/ContextualGlyphSubstitution.h b/Build/source/libs/icu/icu-50.1/layout/ContextualGlyphSubstitution.h
new file mode 100644
index 00000000000..72c23559db9
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/ContextualGlyphSubstitution.h
@@ -0,0 +1,41 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
+ *
+ */
+
+#ifndef __CONTEXTUALGLYPHSUBSTITUTION_H
+#define __CONTEXTUALGLYPHSUBSTITUTION_H
+
+/**
+ * \file
+ * \internal
+ */
+
+#include "LETypes.h"
+#include "LayoutTables.h"
+#include "StateTables.h"
+#include "MorphTables.h"
+
+U_NAMESPACE_BEGIN
+
+struct ContextualGlyphSubstitutionHeader : MorphStateTableHeader
+{
+ ByteOffset substitutionTableOffset;
+};
+
+enum ContextualGlyphSubstitutionFlags
+{
+ cgsSetMark = 0x8000,
+ cgsDontAdvance = 0x4000,
+ cgsReserved = 0x3FFF
+};
+
+struct ContextualGlyphSubstitutionStateEntry : StateEntry
+{
+ WordOffset markOffset;
+ WordOffset currOffset;
+};
+
+U_NAMESPACE_END
+#endif
diff --git a/Build/source/libs/icu/icu-50.1/layout/ContextualSubstSubtables.cpp b/Build/source/libs/icu/icu-50.1/layout/ContextualSubstSubtables.cpp
new file mode 100644
index 00000000000..b75e388807a
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/ContextualSubstSubtables.cpp
@@ -0,0 +1,569 @@
+/*
+ * (C) Copyright IBM Corp. 1998-2008 - All Rights Reserved
+ *
+ */
+
+#include "LETypes.h"
+#include "LEFontInstance.h"
+#include "OpenTypeTables.h"
+#include "GlyphSubstitutionTables.h"
+#include "ContextualSubstSubtables.h"
+#include "GlyphIterator.h"
+#include "LookupProcessor.h"
+#include "CoverageTables.h"
+#include "LESwaps.h"
+
+U_NAMESPACE_BEGIN
+
+/*
+ NOTE: This could be optimized somewhat by keeping track
+ of the previous sequenceIndex in the loop and doing next()
+ or prev() of the delta between that and the current
+ sequenceIndex instead of always resetting to the front.
+*/
+void ContextualSubstitutionBase::applySubstitutionLookups(
+ const LookupProcessor *lookupProcessor,
+ const SubstitutionLookupRecord *substLookupRecordArray,
+ le_uint16 substCount,
+ GlyphIterator *glyphIterator,
+ const LEFontInstance *fontInstance,
+ le_int32 position,
+ LEErrorCode& success)
+{
+ if (LE_FAILURE(success)) {
+ return;
+ }
+
+ GlyphIterator tempIterator(*glyphIterator);
+
+ for (le_int16 subst = 0; subst < substCount && LE_SUCCESS(success); subst += 1) {
+ le_uint16 sequenceIndex = SWAPW(substLookupRecordArray[subst].sequenceIndex);
+ le_uint16 lookupListIndex = SWAPW(substLookupRecordArray[subst].lookupListIndex);
+
+ tempIterator.setCurrStreamPosition(position);
+ tempIterator.next(sequenceIndex);
+
+ lookupProcessor->applySingleLookup(lookupListIndex, &tempIterator, fontInstance, success);
+ }
+}
+
+le_bool ContextualSubstitutionBase::matchGlyphIDs(const TTGlyphID *glyphArray, le_uint16 glyphCount,
+ GlyphIterator *glyphIterator, le_bool backtrack)
+{
+ le_int32 direction = 1;
+ le_int32 match = 0;
+
+ if (backtrack) {
+ match = glyphCount -1;
+ direction = -1;
+ }
+
+ while (glyphCount > 0) {
+ if (! glyphIterator->next()) {
+ return FALSE;
+ }
+
+ TTGlyphID glyph = (TTGlyphID) glyphIterator->getCurrGlyphID();
+
+ if (glyph != SWAPW(glyphArray[match])) {
+ return FALSE;
+ }
+
+ glyphCount -= 1;
+ match += direction;
+ }
+
+ return TRUE;
+}
+
+le_bool ContextualSubstitutionBase::matchGlyphClasses(const le_uint16 *classArray, le_uint16 glyphCount,
+ GlyphIterator *glyphIterator,
+ const ClassDefinitionTable *classDefinitionTable,
+ le_bool backtrack)
+{
+ le_int32 direction = 1;
+ le_int32 match = 0;
+
+ if (backtrack) {
+ match = glyphCount - 1;
+ direction = -1;
+ }
+
+ while (glyphCount > 0) {
+ if (! glyphIterator->next()) {
+ return FALSE;
+ }
+
+ LEGlyphID glyph = glyphIterator->getCurrGlyphID();
+ le_int32 glyphClass = classDefinitionTable->getGlyphClass(glyph);
+ le_int32 matchClass = SWAPW(classArray[match]);
+
+ if (glyphClass != matchClass) {
+ // Some fonts, e.g. Traditional Arabic, have classes
+ // in the class array which aren't in the class definition
+ // table. If we're looking for such a class, pretend that
+ // we found it.
+ if (classDefinitionTable->hasGlyphClass(matchClass)) {
+ return FALSE;
+ }
+ }
+
+ glyphCount -= 1;
+ match += direction;
+ }
+
+ return TRUE;
+}
+
+le_bool ContextualSubstitutionBase::matchGlyphCoverages(const Offset *coverageTableOffsetArray, le_uint16 glyphCount,
+ GlyphIterator *glyphIterator, const char *offsetBase, le_bool backtrack)
+{
+ le_int32 direction = 1;
+ le_int32 glyph = 0;
+
+ if (backtrack) {
+ glyph = glyphCount - 1;
+ direction = -1;
+ }
+
+ while (glyphCount > 0) {
+ Offset coverageTableOffset = SWAPW(coverageTableOffsetArray[glyph]);
+ const CoverageTable *coverageTable = (const CoverageTable *) (offsetBase + coverageTableOffset);
+
+ if (! glyphIterator->next()) {
+ return FALSE;
+ }
+
+ if (coverageTable->getGlyphCoverage((LEGlyphID) glyphIterator->getCurrGlyphID()) < 0) {
+ return FALSE;
+ }
+
+ glyphCount -= 1;
+ glyph += direction;
+ }
+
+ return TRUE;
+}
+
+le_uint32 ContextualSubstitutionSubtable::process(const LookupProcessor *lookupProcessor,
+ GlyphIterator *glyphIterator,
+ const LEFontInstance *fontInstance,
+ LEErrorCode& success) const
+{
+ if (LE_FAILURE(success)) {
+ return 0;
+ }
+
+ switch(SWAPW(subtableFormat))
+ {
+ case 0:
+ return 0;
+
+ case 1:
+ {
+ const ContextualSubstitutionFormat1Subtable *subtable = (const ContextualSubstitutionFormat1Subtable *) this;
+ return subtable->process(lookupProcessor, glyphIterator, fontInstance, success);
+ }
+
+ case 2:
+ {
+ const ContextualSubstitutionFormat2Subtable *subtable = (const ContextualSubstitutionFormat2Subtable *) this;
+ return subtable->process(lookupProcessor, glyphIterator, fontInstance, success);
+ }
+
+ case 3:
+ {
+ const ContextualSubstitutionFormat3Subtable *subtable = (const ContextualSubstitutionFormat3Subtable *) this;
+ return subtable->process(lookupProcessor, glyphIterator, fontInstance, success);
+ }
+
+ default:
+ return 0;
+ }
+}
+
+le_uint32 ContextualSubstitutionFormat1Subtable::process(const LookupProcessor *lookupProcessor,
+ GlyphIterator *glyphIterator,
+ const LEFontInstance *fontInstance,
+ LEErrorCode& success) const
+{
+ if (LE_FAILURE(success)) {
+ return 0;
+ }
+
+ LEGlyphID glyph = glyphIterator->getCurrGlyphID();
+ le_int32 coverageIndex = getGlyphCoverage(glyph);
+
+ if (coverageIndex >= 0) {
+ le_uint16 srSetCount = SWAPW(subRuleSetCount);
+
+ if (coverageIndex < srSetCount) {
+ Offset subRuleSetTableOffset = SWAPW(subRuleSetTableOffsetArray[coverageIndex]);
+ const SubRuleSetTable *subRuleSetTable =
+ (const SubRuleSetTable *) ((char *) this + subRuleSetTableOffset);
+ le_uint16 subRuleCount = SWAPW(subRuleSetTable->subRuleCount);
+ le_int32 position = glyphIterator->getCurrStreamPosition();
+
+ for (le_uint16 subRule = 0; subRule < subRuleCount; subRule += 1) {
+ Offset subRuleTableOffset =
+ SWAPW(subRuleSetTable->subRuleTableOffsetArray[subRule]);
+ const SubRuleTable *subRuleTable =
+ (const SubRuleTable *) ((char *) subRuleSetTable + subRuleTableOffset);
+ le_uint16 matchCount = SWAPW(subRuleTable->glyphCount) - 1;
+ le_uint16 substCount = SWAPW(subRuleTable->substCount);
+
+ if (matchGlyphIDs(subRuleTable->inputGlyphArray, matchCount, glyphIterator)) {
+ const SubstitutionLookupRecord *substLookupRecordArray =
+ (const SubstitutionLookupRecord *) &subRuleTable->inputGlyphArray[matchCount];
+
+ applySubstitutionLookups(lookupProcessor, substLookupRecordArray, substCount, glyphIterator, fontInstance, position, success);
+
+ return matchCount + 1;
+ }
+
+ glyphIterator->setCurrStreamPosition(position);
+ }
+ }
+
+ // XXX If we get here, the table is mal-formed...
+ }
+
+ return 0;
+}
+
+le_uint32 ContextualSubstitutionFormat2Subtable::process(const LookupProcessor *lookupProcessor,
+ GlyphIterator *glyphIterator,
+ const LEFontInstance *fontInstance,
+ LEErrorCode& success) const
+{
+ if (LE_FAILURE(success)) {
+ return 0;
+ }
+
+ LEGlyphID glyph = glyphIterator->getCurrGlyphID();
+ le_int32 coverageIndex = getGlyphCoverage(glyph);
+
+ if (coverageIndex >= 0) {
+ const ClassDefinitionTable *classDefinitionTable =
+ (const ClassDefinitionTable *) ((char *) this + SWAPW(classDefTableOffset));
+ le_uint16 scSetCount = SWAPW(subClassSetCount);
+ le_int32 setClass = classDefinitionTable->getGlyphClass(glyphIterator->getCurrGlyphID());
+
+ if (setClass < scSetCount && subClassSetTableOffsetArray[setClass] != 0) {
+ Offset subClassSetTableOffset = SWAPW(subClassSetTableOffsetArray[setClass]);
+ const SubClassSetTable *subClassSetTable =
+ (const SubClassSetTable *) ((char *) this + subClassSetTableOffset);
+ le_uint16 subClassRuleCount = SWAPW(subClassSetTable->subClassRuleCount);
+ le_int32 position = glyphIterator->getCurrStreamPosition();
+
+ for (le_uint16 scRule = 0; scRule < subClassRuleCount; scRule += 1) {
+ Offset subClassRuleTableOffset =
+ SWAPW(subClassSetTable->subClassRuleTableOffsetArray[scRule]);
+ const SubClassRuleTable *subClassRuleTable =
+ (const SubClassRuleTable *) ((char *) subClassSetTable + subClassRuleTableOffset);
+ le_uint16 matchCount = SWAPW(subClassRuleTable->glyphCount) - 1;
+ le_uint16 substCount = SWAPW(subClassRuleTable->substCount);
+
+ if (matchGlyphClasses(subClassRuleTable->classArray, matchCount, glyphIterator, classDefinitionTable)) {
+ const SubstitutionLookupRecord *substLookupRecordArray =
+ (const SubstitutionLookupRecord *) &subClassRuleTable->classArray[matchCount];
+
+ applySubstitutionLookups(lookupProcessor, substLookupRecordArray, substCount, glyphIterator, fontInstance, position, success);
+
+ return matchCount + 1;
+ }
+
+ glyphIterator->setCurrStreamPosition(position);
+ }
+ }
+
+ // XXX If we get here, the table is mal-formed...
+ }
+
+ return 0;
+}
+
+le_uint32 ContextualSubstitutionFormat3Subtable::process(const LookupProcessor *lookupProcessor,
+ GlyphIterator *glyphIterator,
+ const LEFontInstance *fontInstance,
+ LEErrorCode& success)const
+{
+ if (LE_FAILURE(success)) {
+ return 0;
+ }
+
+ le_uint16 gCount = SWAPW(glyphCount);
+ le_uint16 subCount = SWAPW(substCount);
+ le_int32 position = glyphIterator->getCurrStreamPosition();
+
+ // Back up the glyph iterator so that we
+ // can call next() before the check, which
+ // will leave it pointing at the last glyph
+ // that matched when we're done.
+ glyphIterator->prev();
+
+ if (ContextualSubstitutionBase::matchGlyphCoverages(coverageTableOffsetArray, gCount, glyphIterator, (const char *) this)) {
+ const SubstitutionLookupRecord *substLookupRecordArray =
+ (const SubstitutionLookupRecord *) &coverageTableOffsetArray[gCount];
+
+ ContextualSubstitutionBase::applySubstitutionLookups(lookupProcessor, substLookupRecordArray, subCount, glyphIterator, fontInstance, position, success);
+
+ return gCount + 1;
+ }
+
+ glyphIterator->setCurrStreamPosition(position);
+
+ return 0;
+}
+
+le_uint32 ChainingContextualSubstitutionSubtable::process(const LookupProcessor *lookupProcessor,
+ GlyphIterator *glyphIterator,
+ const LEFontInstance *fontInstance,
+ LEErrorCode& success) const
+{
+ if (LE_FAILURE(success)) {
+ return 0;
+ }
+
+ switch(SWAPW(subtableFormat))
+ {
+ case 0:
+ return 0;
+
+ case 1:
+ {
+ const ChainingContextualSubstitutionFormat1Subtable *subtable = (const ChainingContextualSubstitutionFormat1Subtable *) this;
+ return subtable->process(lookupProcessor, glyphIterator, fontInstance, success);
+ }
+
+ case 2:
+ {
+ const ChainingContextualSubstitutionFormat2Subtable *subtable = (const ChainingContextualSubstitutionFormat2Subtable *) this;
+ return subtable->process(lookupProcessor, glyphIterator, fontInstance, success);
+ }
+
+ case 3:
+ {
+ const ChainingContextualSubstitutionFormat3Subtable *subtable = (const ChainingContextualSubstitutionFormat3Subtable *) this;
+ return subtable->process(lookupProcessor, glyphIterator, fontInstance, success);
+ }
+
+ default:
+ return 0;
+ }
+}
+
+// NOTE: This could be a #define, but that seems to confuse
+// the Visual Studio .NET 2003 compiler on the calls to the
+// GlyphIterator constructor. It somehow can't decide if
+// emptyFeatureList matches an le_uint32 or an le_uint16...
+static const FeatureMask emptyFeatureList = 0x00000000UL;
+
+le_uint32 ChainingContextualSubstitutionFormat1Subtable::process(const LookupProcessor *lookupProcessor,
+ GlyphIterator *glyphIterator,
+ const LEFontInstance *fontInstance,
+ LEErrorCode& success) const
+{
+ if (LE_FAILURE(success)) {
+ return 0;
+ }
+
+ LEGlyphID glyph = glyphIterator->getCurrGlyphID();
+ le_int32 coverageIndex = getGlyphCoverage(glyph);
+
+ if (coverageIndex >= 0) {
+ le_uint16 srSetCount = SWAPW(chainSubRuleSetCount);
+
+ if (coverageIndex < srSetCount) {
+ Offset chainSubRuleSetTableOffset = SWAPW(chainSubRuleSetTableOffsetArray[coverageIndex]);
+ const ChainSubRuleSetTable *chainSubRuleSetTable =
+ (const ChainSubRuleSetTable *) ((char *) this + chainSubRuleSetTableOffset);
+ le_uint16 chainSubRuleCount = SWAPW(chainSubRuleSetTable->chainSubRuleCount);
+ le_int32 position = glyphIterator->getCurrStreamPosition();
+ GlyphIterator tempIterator(*glyphIterator, emptyFeatureList);
+
+ for (le_uint16 subRule = 0; subRule < chainSubRuleCount; subRule += 1) {
+ Offset chainSubRuleTableOffset =
+ SWAPW(chainSubRuleSetTable->chainSubRuleTableOffsetArray[subRule]);
+ const ChainSubRuleTable *chainSubRuleTable =
+ (const ChainSubRuleTable *) ((char *) chainSubRuleSetTable + chainSubRuleTableOffset);
+ le_uint16 backtrackGlyphCount = SWAPW(chainSubRuleTable->backtrackGlyphCount);
+ le_uint16 inputGlyphCount = (le_uint16) SWAPW(chainSubRuleTable->backtrackGlyphArray[backtrackGlyphCount]) - 1;
+ const TTGlyphID *inputGlyphArray = &chainSubRuleTable->backtrackGlyphArray[backtrackGlyphCount + 1];
+ le_uint16 lookaheadGlyphCount = (le_uint16) SWAPW(inputGlyphArray[inputGlyphCount]);
+ const TTGlyphID *lookaheadGlyphArray = &inputGlyphArray[inputGlyphCount + 1];
+ le_uint16 substCount = (le_uint16) SWAPW(lookaheadGlyphArray[lookaheadGlyphCount]);
+
+ tempIterator.setCurrStreamPosition(position);
+
+ if (! tempIterator.prev(backtrackGlyphCount)) {
+ continue;
+ }
+
+ tempIterator.prev();
+ if (! matchGlyphIDs(chainSubRuleTable->backtrackGlyphArray, backtrackGlyphCount, &tempIterator, TRUE)) {
+ continue;
+ }
+
+ tempIterator.setCurrStreamPosition(position);
+ tempIterator.next(inputGlyphCount);
+ if (!matchGlyphIDs(lookaheadGlyphArray, lookaheadGlyphCount, &tempIterator)) {
+ continue;
+ }
+
+ if (matchGlyphIDs(inputGlyphArray, inputGlyphCount, glyphIterator)) {
+ const SubstitutionLookupRecord *substLookupRecordArray =
+ (const SubstitutionLookupRecord *) &lookaheadGlyphArray[lookaheadGlyphCount + 1];
+
+ applySubstitutionLookups(lookupProcessor, substLookupRecordArray, substCount, glyphIterator, fontInstance, position, success);
+
+ return inputGlyphCount + 1;
+ }
+
+ glyphIterator->setCurrStreamPosition(position);
+ }
+ }
+
+ // XXX If we get here, the table is mal-formed...
+ }
+
+ return 0;
+}
+
+le_uint32 ChainingContextualSubstitutionFormat2Subtable::process(const LookupProcessor *lookupProcessor,
+ GlyphIterator *glyphIterator,
+ const LEFontInstance *fontInstance,
+ LEErrorCode& success) const
+{
+ if (LE_FAILURE(success)) {
+ return 0;
+ }
+
+ LEGlyphID glyph = glyphIterator->getCurrGlyphID();
+ le_int32 coverageIndex = getGlyphCoverage(glyph);
+
+ if (coverageIndex >= 0) {
+ const ClassDefinitionTable *backtrackClassDefinitionTable =
+ (const ClassDefinitionTable *) ((char *) this + SWAPW(backtrackClassDefTableOffset));
+ const ClassDefinitionTable *inputClassDefinitionTable =
+ (const ClassDefinitionTable *) ((char *) this + SWAPW(inputClassDefTableOffset));
+ const ClassDefinitionTable *lookaheadClassDefinitionTable =
+ (const ClassDefinitionTable *) ((char *) this + SWAPW(lookaheadClassDefTableOffset));
+ le_uint16 scSetCount = SWAPW(chainSubClassSetCount);
+ le_int32 setClass = inputClassDefinitionTable->getGlyphClass(glyphIterator->getCurrGlyphID());
+
+ if (setClass < scSetCount && chainSubClassSetTableOffsetArray[setClass] != 0) {
+ Offset chainSubClassSetTableOffset = SWAPW(chainSubClassSetTableOffsetArray[setClass]);
+ const ChainSubClassSetTable *chainSubClassSetTable =
+ (const ChainSubClassSetTable *) ((char *) this + chainSubClassSetTableOffset);
+ le_uint16 chainSubClassRuleCount = SWAPW(chainSubClassSetTable->chainSubClassRuleCount);
+ le_int32 position = glyphIterator->getCurrStreamPosition();
+ GlyphIterator tempIterator(*glyphIterator, emptyFeatureList);
+
+ for (le_uint16 scRule = 0; scRule < chainSubClassRuleCount; scRule += 1) {
+ Offset chainSubClassRuleTableOffset =
+ SWAPW(chainSubClassSetTable->chainSubClassRuleTableOffsetArray[scRule]);
+ const ChainSubClassRuleTable *chainSubClassRuleTable =
+ (const ChainSubClassRuleTable *) ((char *) chainSubClassSetTable + chainSubClassRuleTableOffset);
+ le_uint16 backtrackGlyphCount = SWAPW(chainSubClassRuleTable->backtrackGlyphCount);
+ le_uint16 inputGlyphCount = SWAPW(chainSubClassRuleTable->backtrackClassArray[backtrackGlyphCount]) - 1;
+ const le_uint16 *inputClassArray = &chainSubClassRuleTable->backtrackClassArray[backtrackGlyphCount + 1];
+ le_uint16 lookaheadGlyphCount = SWAPW(inputClassArray[inputGlyphCount]);
+ const le_uint16 *lookaheadClassArray = &inputClassArray[inputGlyphCount + 1];
+ le_uint16 substCount = SWAPW(lookaheadClassArray[lookaheadGlyphCount]);
+
+
+ tempIterator.setCurrStreamPosition(position);
+
+ if (! tempIterator.prev(backtrackGlyphCount)) {
+ continue;
+ }
+
+ tempIterator.prev();
+ if (! matchGlyphClasses(chainSubClassRuleTable->backtrackClassArray, backtrackGlyphCount,
+ &tempIterator, backtrackClassDefinitionTable, TRUE)) {
+ continue;
+ }
+
+ tempIterator.setCurrStreamPosition(position);
+ tempIterator.next(inputGlyphCount);
+ if (! matchGlyphClasses(lookaheadClassArray, lookaheadGlyphCount, &tempIterator, lookaheadClassDefinitionTable)) {
+ continue;
+ }
+
+ if (matchGlyphClasses(inputClassArray, inputGlyphCount, glyphIterator, inputClassDefinitionTable)) {
+ const SubstitutionLookupRecord *substLookupRecordArray =
+ (const SubstitutionLookupRecord *) &lookaheadClassArray[lookaheadGlyphCount + 1];
+
+ applySubstitutionLookups(lookupProcessor, substLookupRecordArray, substCount, glyphIterator, fontInstance, position, success);
+
+ return inputGlyphCount + 1;
+ }
+
+ glyphIterator->setCurrStreamPosition(position);
+ }
+ }
+
+ // XXX If we get here, the table is mal-formed...
+ }
+
+ return 0;
+}
+
+le_uint32 ChainingContextualSubstitutionFormat3Subtable::process(const LookupProcessor *lookupProcessor,
+ GlyphIterator *glyphIterator,
+ const LEFontInstance *fontInstance,
+ LEErrorCode & success) const
+{
+ if (LE_FAILURE(success)) {
+ return 0;
+ }
+
+ le_uint16 backtrkGlyphCount = SWAPW(backtrackGlyphCount);
+ le_uint16 inputGlyphCount = (le_uint16) SWAPW(backtrackCoverageTableOffsetArray[backtrkGlyphCount]);
+ const Offset *inputCoverageTableOffsetArray = &backtrackCoverageTableOffsetArray[backtrkGlyphCount + 1];
+ const le_uint16 lookaheadGlyphCount = (le_uint16) SWAPW(inputCoverageTableOffsetArray[inputGlyphCount]);
+ const Offset *lookaheadCoverageTableOffsetArray = &inputCoverageTableOffsetArray[inputGlyphCount + 1];
+ le_uint16 substCount = (le_uint16) SWAPW(lookaheadCoverageTableOffsetArray[lookaheadGlyphCount]);
+ le_int32 position = glyphIterator->getCurrStreamPosition();
+ GlyphIterator tempIterator(*glyphIterator, emptyFeatureList);
+
+ if (! tempIterator.prev(backtrkGlyphCount)) {
+ return 0;
+ }
+
+ tempIterator.prev();
+ if (! ContextualSubstitutionBase::matchGlyphCoverages(backtrackCoverageTableOffsetArray,
+ backtrkGlyphCount, &tempIterator, (const char *) this, TRUE)) {
+ return 0;
+ }
+
+ tempIterator.setCurrStreamPosition(position);
+ tempIterator.next(inputGlyphCount - 1);
+ if (! ContextualSubstitutionBase::matchGlyphCoverages(lookaheadCoverageTableOffsetArray,
+ lookaheadGlyphCount, &tempIterator, (const char *) this)) {
+ return 0;
+ }
+
+ // Back up the glyph iterator so that we
+ // can call next() before the check, which
+ // will leave it pointing at the last glyph
+ // that matched when we're done.
+ glyphIterator->prev();
+
+ if (ContextualSubstitutionBase::matchGlyphCoverages(inputCoverageTableOffsetArray,
+ inputGlyphCount, glyphIterator, (const char *) this)) {
+ const SubstitutionLookupRecord *substLookupRecordArray =
+ (const SubstitutionLookupRecord *) &lookaheadCoverageTableOffsetArray[lookaheadGlyphCount + 1];
+
+ ContextualSubstitutionBase::applySubstitutionLookups(lookupProcessor, substLookupRecordArray, substCount, glyphIterator, fontInstance, position, success);
+
+ return inputGlyphCount;
+ }
+
+ glyphIterator->setCurrStreamPosition(position);
+
+ return 0;
+}
+
+U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-50.1/layout/ContextualSubstSubtables.h b/Build/source/libs/icu/icu-50.1/layout/ContextualSubstSubtables.h
new file mode 100644
index 00000000000..2ca1c1a0536
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/ContextualSubstSubtables.h
@@ -0,0 +1,205 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2008 - All Rights Reserved
+ *
+ */
+
+#ifndef __CONTEXTUALSUBSTITUTIONSUBTABLES_H
+#define __CONTEXTUALSUBSTITUTIONSUBTABLES_H
+
+/**
+ * \file
+ * \internal
+ */
+
+#include "LETypes.h"
+#include "LEFontInstance.h"
+#include "OpenTypeTables.h"
+#include "GlyphSubstitutionTables.h"
+#include "GlyphIterator.h"
+#include "LookupProcessor.h"
+
+U_NAMESPACE_BEGIN
+
+struct SubstitutionLookupRecord
+{
+ le_uint16 sequenceIndex;
+ le_uint16 lookupListIndex;
+};
+
+struct ContextualSubstitutionBase : GlyphSubstitutionSubtable
+{
+ static le_bool matchGlyphIDs(
+ const TTGlyphID *glyphArray, le_uint16 glyphCount, GlyphIterator *glyphIterator,
+ le_bool backtrack = FALSE);
+
+ static le_bool matchGlyphClasses(
+ const le_uint16 *classArray, le_uint16 glyphCount, GlyphIterator *glyphIterator,
+ const ClassDefinitionTable *classDefinitionTable, le_bool backtrack = FALSE);
+
+ static le_bool matchGlyphCoverages(
+ const Offset *coverageTableOffsetArray, le_uint16 glyphCount,
+ GlyphIterator *glyphIterator, const char *offsetBase, le_bool backtrack = FALSE);
+
+ static void applySubstitutionLookups(
+ const LookupProcessor *lookupProcessor,
+ const SubstitutionLookupRecord *substLookupRecordArray,
+ le_uint16 substCount,
+ GlyphIterator *glyphIterator,
+ const LEFontInstance *fontInstance,
+ le_int32 position,
+ LEErrorCode& success);
+};
+
+struct ContextualSubstitutionSubtable : ContextualSubstitutionBase
+{
+ le_uint32 process(const LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode& success) const;
+};
+
+struct ContextualSubstitutionFormat1Subtable : ContextualSubstitutionSubtable
+{
+ le_uint16 subRuleSetCount;
+ Offset subRuleSetTableOffsetArray[ANY_NUMBER];
+
+ le_uint32 process(const LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode& success) const;
+};
+
+struct SubRuleSetTable
+{
+ le_uint16 subRuleCount;
+ Offset subRuleTableOffsetArray[ANY_NUMBER];
+
+};
+
+// NOTE: Multiple variable size arrays!!
+struct SubRuleTable
+{
+ le_uint16 glyphCount;
+ le_uint16 substCount;
+ TTGlyphID inputGlyphArray[ANY_NUMBER];
+ //SubstitutionLookupRecord substLookupRecordArray[ANY_NUMBER];
+};
+
+struct ContextualSubstitutionFormat2Subtable : ContextualSubstitutionSubtable
+{
+ Offset classDefTableOffset;
+ le_uint16 subClassSetCount;
+ Offset subClassSetTableOffsetArray[ANY_NUMBER];
+
+ le_uint32 process(const LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode& success) const;
+};
+
+struct SubClassSetTable
+{
+ le_uint16 subClassRuleCount;
+ Offset subClassRuleTableOffsetArray[ANY_NUMBER];
+};
+
+// NOTE: Multiple variable size arrays!!
+struct SubClassRuleTable
+{
+ le_uint16 glyphCount;
+ le_uint16 substCount;
+ le_uint16 classArray[ANY_NUMBER];
+ //SubstitutionLookupRecord substLookupRecordArray[ANY_NUMBER];
+};
+
+// NOTE: This isn't a subclass of GlyphSubstitutionSubtable 'cause
+// it has an array of coverage tables instead of a single coverage table...
+//
+// NOTE: Multiple variable size arrays!!
+struct ContextualSubstitutionFormat3Subtable
+{
+ le_uint16 substFormat;
+ le_uint16 glyphCount;
+ le_uint16 substCount;
+ Offset coverageTableOffsetArray[ANY_NUMBER];
+ //SubstitutionLookupRecord substLookupRecord[ANY_NUMBER];
+
+ le_uint32 process(const LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode& success) const;
+};
+
+struct ChainingContextualSubstitutionSubtable : ContextualSubstitutionBase
+{
+ le_uint32 process(const LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode& success) const;
+};
+
+struct ChainingContextualSubstitutionFormat1Subtable : ChainingContextualSubstitutionSubtable
+{
+ le_uint16 chainSubRuleSetCount;
+ Offset chainSubRuleSetTableOffsetArray[ANY_NUMBER];
+
+ le_uint32 process(const LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode& success) const;
+};
+
+struct ChainSubRuleSetTable
+{
+ le_uint16 chainSubRuleCount;
+ Offset chainSubRuleTableOffsetArray[ANY_NUMBER];
+
+};
+
+// NOTE: Multiple variable size arrays!!
+struct ChainSubRuleTable
+{
+ le_uint16 backtrackGlyphCount;
+ TTGlyphID backtrackGlyphArray[ANY_NUMBER];
+ //le_uint16 inputGlyphCount;
+ //TTGlyphID inputGlyphArray[ANY_NUMBER];
+ //le_uint16 lookaheadGlyphCount;
+ //TTGlyphID lookaheadGlyphArray[ANY_NUMBER];
+ //le_uint16 substCount;
+ //SubstitutionLookupRecord substLookupRecordArray[ANY_NUMBER];
+};
+
+struct ChainingContextualSubstitutionFormat2Subtable : ChainingContextualSubstitutionSubtable
+{
+ Offset backtrackClassDefTableOffset;
+ Offset inputClassDefTableOffset;
+ Offset lookaheadClassDefTableOffset;
+ le_uint16 chainSubClassSetCount;
+ Offset chainSubClassSetTableOffsetArray[ANY_NUMBER];
+
+ le_uint32 process(const LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode& success) const;
+};
+
+struct ChainSubClassSetTable
+{
+ le_uint16 chainSubClassRuleCount;
+ Offset chainSubClassRuleTableOffsetArray[ANY_NUMBER];
+};
+
+// NOTE: Multiple variable size arrays!!
+struct ChainSubClassRuleTable
+{
+ le_uint16 backtrackGlyphCount;
+ le_uint16 backtrackClassArray[ANY_NUMBER];
+ //le_uint16 inputGlyphCount;
+ //le_uint16 inputClassArray[ANY_NUMBER];
+ //le_uint16 lookaheadGlyphCount;
+ //le_uint16 lookaheadClassArray[ANY_NUMBER];
+ //le_uint16 substCount;
+ //SubstitutionLookupRecord substLookupRecordArray[ANY_NUMBER];
+};
+
+// NOTE: This isn't a subclass of GlyphSubstitutionSubtable 'cause
+// it has arrays of coverage tables instead of a single coverage table...
+//
+// NOTE: Multiple variable size arrays!!
+struct ChainingContextualSubstitutionFormat3Subtable
+{
+ le_uint16 substFormat;
+ le_uint16 backtrackGlyphCount;
+ Offset backtrackCoverageTableOffsetArray[ANY_NUMBER];
+ //le_uint16 inputGlyphCount;
+ //Offset inputCoverageTableOffsetArray[ANY_NUMBER];
+ //le_uint16 lookaheadGlyphCount;
+ //le_uint16 lookaheadCoverageTableOffsetArray[ANY_NUMBER];
+ //le_uint16 substCount;
+ //SubstitutionLookupRecord substLookupRecord[ANY_NUMBER];
+
+ le_uint32 process(const LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode& success) const;
+};
+
+U_NAMESPACE_END
+#endif
diff --git a/Build/source/libs/icu/icu-50.1/layout/CoverageTables.cpp b/Build/source/libs/icu/icu-50.1/layout/CoverageTables.cpp
new file mode 100644
index 00000000000..e5f1597f864
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/CoverageTables.cpp
@@ -0,0 +1,91 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2006 - All Rights Reserved
+ *
+ */
+
+#include "LETypes.h"
+#include "OpenTypeTables.h"
+#include "OpenTypeUtilities.h"
+#include "CoverageTables.h"
+#include "LESwaps.h"
+
+U_NAMESPACE_BEGIN
+
+le_int32 CoverageTable::getGlyphCoverage(LEGlyphID glyphID) const
+{
+ switch(SWAPW(coverageFormat))
+ {
+ case 0:
+ return -1;
+
+ case 1:
+ {
+ const CoverageFormat1Table *f1Table = (const CoverageFormat1Table *) this;
+
+ return f1Table->getGlyphCoverage(glyphID);
+ }
+
+ case 2:
+ {
+ const CoverageFormat2Table *f2Table = (const CoverageFormat2Table *) this;
+
+ return f2Table->getGlyphCoverage(glyphID);
+ }
+
+ default:
+ return -1;
+ }
+}
+
+le_int32 CoverageFormat1Table::getGlyphCoverage(LEGlyphID glyphID) const
+{
+ TTGlyphID ttGlyphID = (TTGlyphID) LE_GET_GLYPH(glyphID);
+ le_uint16 count = SWAPW(glyphCount);
+ le_uint8 bit = OpenTypeUtilities::highBit(count);
+ le_uint16 power = 1 << bit;
+ le_uint16 extra = count - power;
+ le_uint16 probe = power;
+ le_uint16 index = 0;
+
+ if (count == 0) {
+ return -1;
+ }
+
+ if (SWAPW(glyphArray[extra]) <= ttGlyphID) {
+ index = extra;
+ }
+
+ while (probe > (1 << 0)) {
+ probe >>= 1;
+
+ if (SWAPW(glyphArray[index + probe]) <= ttGlyphID) {
+ index += probe;
+ }
+ }
+
+ if (SWAPW(glyphArray[index]) == ttGlyphID) {
+ return index;
+ }
+
+ return -1;
+}
+
+le_int32 CoverageFormat2Table::getGlyphCoverage(LEGlyphID glyphID) const
+{
+ TTGlyphID ttGlyphID = (TTGlyphID) LE_GET_GLYPH(glyphID);
+ le_uint16 count = SWAPW(rangeCount);
+ le_int32 rangeIndex =
+ OpenTypeUtilities::getGlyphRangeIndex(ttGlyphID, rangeRecordArray, count);
+
+ if (rangeIndex < 0) {
+ return -1;
+ }
+
+ TTGlyphID firstInRange = SWAPW(rangeRecordArray[rangeIndex].firstGlyph);
+ le_uint16 startCoverageIndex = SWAPW(rangeRecordArray[rangeIndex].rangeValue);
+
+ return startCoverageIndex + (ttGlyphID - firstInRange);
+}
+
+U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-50.1/layout/CoverageTables.h b/Build/source/libs/icu/icu-50.1/layout/CoverageTables.h
new file mode 100644
index 00000000000..5e9dbaa15a7
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/CoverageTables.h
@@ -0,0 +1,44 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
+ *
+ */
+
+#ifndef __COVERAGETABLES_H
+#define __COVERAGETABLES_H
+
+/**
+ * \file
+ * \internal
+ */
+
+#include "LETypes.h"
+#include "OpenTypeTables.h"
+
+U_NAMESPACE_BEGIN
+
+struct CoverageTable
+{
+ le_uint16 coverageFormat;
+
+ le_int32 getGlyphCoverage(LEGlyphID glyphID) const;
+};
+
+struct CoverageFormat1Table : CoverageTable
+{
+ le_uint16 glyphCount;
+ TTGlyphID glyphArray[ANY_NUMBER];
+
+ le_int32 getGlyphCoverage(LEGlyphID glyphID) const;
+};
+
+struct CoverageFormat2Table : CoverageTable
+{
+ le_uint16 rangeCount;
+ GlyphRangeRecord rangeRecordArray[ANY_NUMBER];
+
+ le_int32 getGlyphCoverage(LEGlyphID glyphID) const;
+};
+
+U_NAMESPACE_END
+#endif
diff --git a/Build/source/libs/icu/icu-50.1/layout/CursiveAttachmentSubtables.cpp b/Build/source/libs/icu/icu-50.1/layout/CursiveAttachmentSubtables.cpp
new file mode 100644
index 00000000000..9d2144fcefa
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/CursiveAttachmentSubtables.cpp
@@ -0,0 +1,53 @@
+/*
+ * (C) Copyright IBM Corp. 1998 - 2007 - All Rights Reserved
+ *
+ */
+
+#include "LETypes.h"
+#include "OpenTypeTables.h"
+#include "GlyphPositioningTables.h"
+#include "CursiveAttachmentSubtables.h"
+#include "AnchorTables.h"
+#include "GlyphIterator.h"
+#include "OpenTypeUtilities.h"
+#include "LESwaps.h"
+
+U_NAMESPACE_BEGIN
+
+le_uint32 CursiveAttachmentSubtable::process(GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const
+{
+ LEGlyphID glyphID = glyphIterator->getCurrGlyphID();
+ le_int32 coverageIndex = getGlyphCoverage(glyphID);
+ le_uint16 eeCount = SWAPW(entryExitCount);
+
+ if (coverageIndex < 0 || coverageIndex >= eeCount) {
+ glyphIterator->setCursiveGlyph();
+ return 0;
+ }
+
+ LEPoint entryAnchor, exitAnchor;
+ Offset entryOffset = SWAPW(entryExitRecords[coverageIndex].entryAnchor);
+ Offset exitOffset = SWAPW(entryExitRecords[coverageIndex].exitAnchor);
+
+ if (entryOffset != 0) {
+ const AnchorTable *entryAnchorTable = (const AnchorTable *) ((char *) this + entryOffset);
+
+ entryAnchorTable->getAnchor(glyphID, fontInstance, entryAnchor);
+ glyphIterator->setCursiveEntryPoint(entryAnchor);
+ } else {
+ //glyphIterator->clearCursiveEntryPoint();
+ }
+
+ if (exitOffset != 0) {
+ const AnchorTable *exitAnchorTable = (const AnchorTable *) ((char *) this + exitOffset);
+
+ exitAnchorTable->getAnchor(glyphID, fontInstance, exitAnchor);
+ glyphIterator->setCursiveExitPoint(exitAnchor);
+ } else {
+ //glyphIterator->clearCursiveExitPoint();
+ }
+
+ return 1;
+}
+
+U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-50.1/layout/CursiveAttachmentSubtables.h b/Build/source/libs/icu/icu-50.1/layout/CursiveAttachmentSubtables.h
new file mode 100644
index 00000000000..5eefb2f9888
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/CursiveAttachmentSubtables.h
@@ -0,0 +1,41 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
+ *
+ */
+
+#ifndef __CURSIVEATTACHMENTSUBTABLES_H
+#define __CURSIVEATTACHMENTSUBTABLES_H
+
+/**
+ * \file
+ * \internal
+ */
+
+#include "LETypes.h"
+#include "OpenTypeTables.h"
+#include "GlyphPositioningTables.h"
+
+U_NAMESPACE_BEGIN
+
+class LEFontInstance;
+class GlyphIterator;
+
+struct EntryExitRecord
+{
+ Offset entryAnchor;
+ Offset exitAnchor;
+};
+
+struct CursiveAttachmentSubtable : GlyphPositioningSubtable
+{
+ le_uint16 entryExitCount;
+ EntryExitRecord entryExitRecords[ANY_NUMBER];
+
+ le_uint32 process(GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const;
+};
+
+U_NAMESPACE_END
+#endif
+
+
diff --git a/Build/source/libs/icu/icu-50.1/layout/DefaultCharMapper.h b/Build/source/libs/icu/icu-50.1/layout/DefaultCharMapper.h
new file mode 100644
index 00000000000..c0e1bc1c33b
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/DefaultCharMapper.h
@@ -0,0 +1,57 @@
+/*
+ * (C) Copyright IBM Corp. 1998-2007 - All Rights Reserved
+ *
+ */
+
+#ifndef __DEFAULTCHARMAPPER_H
+#define __DEFAULTCHARMAPPER_H
+
+/**
+ * \file
+ * \internal
+ */
+
+#include "LETypes.h"
+#include "LEFontInstance.h"
+
+U_NAMESPACE_BEGIN
+
+/**
+ * This class is an instance of LECharMapper which
+ * implements control character filtering and bidi
+ * mirroring.
+ *
+ * @see LECharMapper
+ */
+class DefaultCharMapper : public UMemory, public LECharMapper
+{
+private:
+ le_bool fFilterControls;
+ le_bool fMirror;
+
+ static const LEUnicode32 controlChars[];
+
+ static const le_int32 controlCharsCount;
+
+ static const LEUnicode32 mirroredChars[];
+ static const LEUnicode32 srahCderorrim[];
+
+ static const le_int32 mirroredCharsCount;
+
+public:
+ DefaultCharMapper(le_bool filterControls, le_bool mirror)
+ : fFilterControls(filterControls), fMirror(mirror)
+ {
+ // nothing
+ };
+
+ ~DefaultCharMapper()
+ {
+ // nada
+ };
+
+ LEUnicode32 mapChar(LEUnicode32 ch) const;
+};
+
+U_NAMESPACE_END
+#endif
diff --git a/Build/source/libs/icu/icu-50.1/layout/DeviceTables.cpp b/Build/source/libs/icu/icu-50.1/layout/DeviceTables.cpp
new file mode 100644
index 00000000000..0bbbf181496
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/DeviceTables.cpp
@@ -0,0 +1,46 @@
+/*
+ * @(#)DeviceTables.cpp 1.5 00/03/15
+ *
+ * (C) Copyright IBM Corp. 1998 - 2006 - All Rights Reserved
+ *
+ */
+
+#include "LETypes.h"
+#include "OpenTypeTables.h"
+#include "DeviceTables.h"
+#include "LESwaps.h"
+
+U_NAMESPACE_BEGIN
+
+const le_uint16 DeviceTable::fieldMasks[] = {0x0003, 0x000F, 0x00FF};
+const le_uint16 DeviceTable::fieldSignBits[] = {0x0002, 0x0008, 0x0080};
+const le_uint16 DeviceTable::fieldBits[] = { 2, 4, 8};
+
+#define FORMAT_COUNT LE_ARRAY_SIZE(fieldBits)
+
+le_int16 DeviceTable::getAdjustment(le_uint16 ppem) const
+{
+ le_uint16 start = SWAPW(startSize);
+ le_uint16 format = SWAPW(deltaFormat) - 1;
+ le_int16 result = 0;
+
+ if (ppem >= start && ppem <= SWAPW(endSize) && format < FORMAT_COUNT) {
+ le_uint16 sizeIndex = ppem - start;
+ le_uint16 bits = fieldBits[format];
+ le_uint16 count = 16 / bits;
+ le_uint16 word = SWAPW(deltaValues[sizeIndex / count]);
+ le_uint16 fieldIndex = sizeIndex % count;
+ le_uint16 shift = 16 - (bits * (fieldIndex + 1));
+ le_uint16 field = (word >> shift) & fieldMasks[format];
+
+ result = field;
+
+ if ((field & fieldSignBits[format]) != 0) {
+ result |= ~ fieldMasks[format];
+ }
+ }
+
+ return result;
+}
+
+U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-50.1/layout/DeviceTables.h b/Build/source/libs/icu/icu-50.1/layout/DeviceTables.h
new file mode 100644
index 00000000000..864bba1ad11
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/DeviceTables.h
@@ -0,0 +1,39 @@
+/*
+ * @(#)DeviceTables.h 1.5 00/03/15
+ *
+ * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
+ *
+ */
+
+#ifndef __DEVICETABLES_H
+#define __DEVICETABLES_H
+
+/**
+ * \file
+ * \internal
+ */
+
+#include "LETypes.h"
+#include "OpenTypeTables.h"
+
+U_NAMESPACE_BEGIN
+
+struct DeviceTable
+{
+ le_uint16 startSize;
+ le_uint16 endSize;
+ le_uint16 deltaFormat;
+ le_uint16 deltaValues[ANY_NUMBER];
+
+ le_int16 getAdjustment(le_uint16 ppem) const;
+
+private:
+ static const le_uint16 fieldMasks[];
+ static const le_uint16 fieldSignBits[];
+ static const le_uint16 fieldBits[];
+};
+
+U_NAMESPACE_END
+#endif
+
+
diff --git a/Build/source/libs/icu/icu-50.1/layout/ExtensionSubtables.cpp b/Build/source/libs/icu/icu-50.1/layout/ExtensionSubtables.cpp
new file mode 100644
index 00000000000..813caeb3708
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/ExtensionSubtables.cpp
@@ -0,0 +1,45 @@
+/*
+ * %W% %E%
+ *
+ * (C) Copyright IBM Corp. 2008-2011 - All Rights Reserved
+ *
+ */
+
+#include "LETypes.h"
+#include "OpenTypeTables.h"
+#include "GlyphSubstitutionTables.h"
+#include "LookupProcessor.h"
+#include "ExtensionSubtables.h"
+#include "GlyphIterator.h"
+#include "LESwaps.h"
+
+U_NAMESPACE_BEGIN
+
+// read a 32-bit value that might only be 16-bit-aligned in memory
+static inline le_uint32 READ_LONG(le_uint32 code) {
+ le_uint16* first = ((le_uint16*)&code);
+ le_uint16* second = (((le_uint16*)&code) + 1);
+ return (le_uint32)((SWAPW(*first) << 16) + SWAPW(*second));
+}
+
+// FIXME: should look at the format too... maybe have a sub-class for it?
+le_uint32 ExtensionSubtable::process(const LookupProcessor *lookupProcessor, le_uint16 lookupType,
+ GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode& success) const
+{
+ if (LE_FAILURE(success)) {
+ return 0;
+ }
+
+ le_uint16 elt = SWAPW(extensionLookupType);
+
+ if (elt != lookupType) {
+ le_uint32 extOffset = READ_LONG(extensionOffset);
+ LookupSubtable *subtable = (LookupSubtable *) ((char *) this + extOffset);
+
+ return lookupProcessor->applySubtable(subtable, elt, glyphIterator, fontInstance, success);
+ }
+
+ return 0;
+}
+
+U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-50.1/layout/ExtensionSubtables.h b/Build/source/libs/icu/icu-50.1/layout/ExtensionSubtables.h
new file mode 100644
index 00000000000..7d214af5ec2
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/ExtensionSubtables.h
@@ -0,0 +1,35 @@
+/*
+ * %W% %E%
+ *
+ * (C) Copyright IBM Corp. 2002-2008 - All Rights Reserved
+ *
+ */
+
+#ifndef __EXTENSIONSUBTABLES_H
+#define __EXTENSIONSUBTABLES_H
+
+/**
+ * \file
+ * \internal
+ */
+
+#include "LETypes.h"
+#include "OpenTypeTables.h"
+#include "GlyphSubstitutionTables.h"
+#include "LookupProcessor.h"
+#include "GlyphIterator.h"
+
+U_NAMESPACE_BEGIN
+
+struct ExtensionSubtable //: GlyphSubstitutionSubtable
+{
+ le_uint16 substFormat;
+ le_uint16 extensionLookupType;
+ le_uint32 extensionOffset;
+
+ le_uint32 process(const LookupProcessor *lookupProcessor, le_uint16 lookupType,
+ GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode& success) const;
+};
+
+U_NAMESPACE_END
+#endif
diff --git a/Build/source/libs/icu/icu-50.1/layout/Features.cpp b/Build/source/libs/icu/icu-50.1/layout/Features.cpp
new file mode 100644
index 00000000000..01419ecad80
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/Features.cpp
@@ -0,0 +1,61 @@
+/*
+ * @(#)Features.cpp 1.4 00/03/15
+ *
+ * (C) Copyright IBM Corp. 1998-2010 - All Rights Reserved
+ *
+ */
+
+#include "LETypes.h"
+#include "OpenTypeUtilities.h"
+#include "OpenTypeTables.h"
+#include "ICUFeatures.h"
+#include "LESwaps.h"
+
+U_NAMESPACE_BEGIN
+
+const FeatureTable *FeatureListTable::getFeatureTable(le_uint16 featureIndex, LETag *featureTag) const
+{
+ if (featureIndex >= SWAPW(featureCount)) {
+ return 0;
+ }
+
+ Offset featureTableOffset = featureRecordArray[featureIndex].featureTableOffset;
+
+ *featureTag = SWAPT(featureRecordArray[featureIndex].featureTag);
+
+ return (const FeatureTable *) ((char *) this + SWAPW(featureTableOffset));
+}
+
+/*
+ * Note: according to the OpenType Spec. v 1.4, the entries in the Feature
+ * List Table are sorted alphabetically by feature tag; however, there seem
+ * to be some fonts which have an unsorted list; that's why the binary search
+ * is #if 0'd out and replaced by a linear search.
+ *
+ * Also note: as of ICU 2.6, this method isn't called anyhow...
+ */
+const FeatureTable *FeatureListTable::getFeatureTable(LETag featureTag) const
+{
+#if 0
+ Offset featureTableOffset =
+ OpenTypeUtilities::getTagOffset(featureTag, (TagAndOffsetRecord *) featureRecordArray, SWAPW(featureCount));
+
+ if (featureTableOffset == 0) {
+ return 0;
+ }
+
+ return (const FeatureTable *) ((char *) this + SWAPW(featureTableOffset));
+#else
+ int count = SWAPW(featureCount);
+
+ for (int i = 0; i < count; i += 1) {
+ if (SWAPT(featureRecordArray[i].featureTag) == featureTag) {
+ return (const FeatureTable *) ((char *) this + SWAPW(featureRecordArray[i].featureTableOffset));
+ }
+ }
+
+ return 0;
+#endif
+}
+
+U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-50.1/layout/GDEFMarkFilter.cpp b/Build/source/libs/icu/icu-50.1/layout/GDEFMarkFilter.cpp
new file mode 100644
index 00000000000..344e07ab286
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/GDEFMarkFilter.cpp
@@ -0,0 +1,31 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998 - 2004 - All Rights Reserved
+ *
+ */
+
+#include "LETypes.h"
+#include "LEGlyphFilter.h"
+#include "GDEFMarkFilter.h"
+#include "GlyphDefinitionTables.h"
+
+U_NAMESPACE_BEGIN
+
+GDEFMarkFilter::GDEFMarkFilter(const GlyphDefinitionTableHeader *gdefTable)
+{
+ classDefTable = gdefTable->getGlyphClassDefinitionTable();
+}
+
+GDEFMarkFilter::~GDEFMarkFilter()
+{
+ // nothing to do?
+}
+
+le_bool GDEFMarkFilter::accept(LEGlyphID glyph) const
+{
+ le_int32 glyphClass = classDefTable->getGlyphClass(glyph);
+
+ return glyphClass == gcdMarkGlyph;
+}
+
+U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-50.1/layout/GDEFMarkFilter.h b/Build/source/libs/icu/icu-50.1/layout/GDEFMarkFilter.h
new file mode 100644
index 00000000000..5ae5b45fdfc
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/GDEFMarkFilter.h
@@ -0,0 +1,37 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
+ *
+ */
+
+#ifndef __GDEFMARKFILTER__H
+#define __GDEFMARKFILTER__H
+
+/**
+ * \file
+ * \internal
+ */
+
+#include "LETypes.h"
+#include "LEGlyphFilter.h"
+#include "GlyphDefinitionTables.h"
+
+U_NAMESPACE_BEGIN
+
+class GDEFMarkFilter : public UMemory, public LEGlyphFilter
+{
+private:
+ const GlyphClassDefinitionTable *classDefTable;
+
+ GDEFMarkFilter(const GDEFMarkFilter &other); // forbid copying of this class
+ GDEFMarkFilter &operator=(const GDEFMarkFilter &other); // forbid copying of this class
+
+public:
+ GDEFMarkFilter(const GlyphDefinitionTableHeader *gdefTable);
+ virtual ~GDEFMarkFilter();
+
+ virtual le_bool accept(LEGlyphID glyph) const;
+};
+
+U_NAMESPACE_END
+#endif
diff --git a/Build/source/libs/icu/icu-50.1/layout/GXLayoutEngine.cpp b/Build/source/libs/icu/icu-50.1/layout/GXLayoutEngine.cpp
new file mode 100644
index 00000000000..78f0162e489
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/GXLayoutEngine.cpp
@@ -0,0 +1,69 @@
+
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2008 - All Rights Reserved
+ *
+ */
+
+#include "LETypes.h"
+#include "LayoutEngine.h"
+#include "GXLayoutEngine.h"
+#include "LEGlyphStorage.h"
+
+#include "MorphTables.h"
+
+U_NAMESPACE_BEGIN
+
+UOBJECT_DEFINE_RTTI_IMPLEMENTATION(GXLayoutEngine)
+
+GXLayoutEngine::GXLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, const MorphTableHeader *morphTable, LEErrorCode &success)
+ : LayoutEngine(fontInstance, scriptCode, languageCode, 0, success), fMorphTable(morphTable)
+{
+ // nothing else to do?
+}
+
+GXLayoutEngine::~GXLayoutEngine()
+{
+ reset();
+}
+
+// apply 'mort' table
+le_int32 GXLayoutEngine::computeGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft, LEGlyphStorage &glyphStorage, LEErrorCode &success)
+{
+ if (LE_FAILURE(success)) {
+ return 0;
+ }
+
+ if (chars == NULL || offset < 0 || count < 0 || max < 0 || offset >= max || offset + count > max) {
+ success = LE_ILLEGAL_ARGUMENT_ERROR;
+ return 0;
+ }
+
+ mapCharsToGlyphs(chars, offset, count, FALSE, rightToLeft, glyphStorage, success);
+
+ if (LE_FAILURE(success)) {
+ return 0;
+ }
+
+ fMorphTable->process(glyphStorage);
+
+ return count;
+}
+
+// apply positional tables
+void GXLayoutEngine::adjustGlyphPositions(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool /*reverse*/,
+ LEGlyphStorage &/*glyphStorage*/, LEErrorCode &success)
+{
+ if (LE_FAILURE(success)) {
+ return;
+ }
+
+ if (chars == NULL || offset < 0 || count < 0) {
+ success = LE_ILLEGAL_ARGUMENT_ERROR;
+ return;
+ }
+
+ // FIXME: no positional processing yet...
+}
+
+U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-50.1/layout/GXLayoutEngine.h b/Build/source/libs/icu/icu-50.1/layout/GXLayoutEngine.h
new file mode 100644
index 00000000000..8d48a4e31f7
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/GXLayoutEngine.h
@@ -0,0 +1,126 @@
+
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2008 - All Rights Reserved
+ *
+ */
+
+#ifndef __GXLAYOUTENGINE_H
+#define __GXLAYOUTENGINE_H
+
+#include "LETypes.h"
+#include "LayoutEngine.h"
+
+#include "MorphTables.h"
+
+U_NAMESPACE_BEGIN
+
+class LEFontInstance;
+class LEGlyphStorage;
+
+/**
+ * This class implements layout for QuickDraw GX or Apple Advanced Typograyph (AAT)
+ * fonts. A font is a GX or AAT font if it contains a 'mort' table. See Apple's
+ * TrueType Reference Manual (http://fonts.apple.com/TTRefMan/index.html) for details.
+ * Information about 'mort' tables is in the chapter titled "Font Files."
+ *
+ * @internal
+ */
+class GXLayoutEngine : public LayoutEngine
+{
+public:
+ /**
+ * This is the main constructor. It constructs an instance of GXLayoutEngine for
+ * a particular font, script and language. It takes the 'mort' table as a parameter since
+ * LayoutEngine::layoutEngineFactory has to read the 'mort' table to know that it has a
+ * GX font.
+ *
+ * Note: GX and AAT fonts don't contain any script and language specific tables, so
+ * the script and language are ignored.
+ *
+ * @param fontInstance - the font
+ * @param scriptCode - the script
+ * @param langaugeCode - the language
+ * @param morphTable - the 'mort' table
+ * @param success - set to an error code if the operation fails
+ *
+ * @see LayoutEngine::layoutEngineFactory
+ * @see ScriptAndLangaugeTags.h for script and language codes
+ *
+ * @internal
+ */
+ GXLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, const MorphTableHeader *morphTable, LEErrorCode &success);
+
+ /**
+ * The destructor, virtual for correct polymorphic invocation.
+ *
+ * @internal
+ */
+ virtual ~GXLayoutEngine();
+
+ /**
+ * ICU "poor man's RTTI", returns a UClassID for the actual class.
+ *
+ * @stable ICU 2.8
+ */
+ virtual UClassID getDynamicClassID() const;
+
+ /**
+ * ICU "poor man's RTTI", returns a UClassID for this class.
+ *
+ * @stable ICU 2.8
+ */
+ static UClassID getStaticClassID();
+
+protected:
+
+ /**
+ * The address of the 'mort' table
+ *
+ * @internal
+ */
+ const MorphTableHeader *fMorphTable;
+
+ /**
+ * This method does GX layout using the font's 'mort' table. It converts the
+ * input character codes to glyph indices using mapCharsToGlyphs, and then
+ * applies the 'mort' table.
+ *
+ * Input parameters:
+ * @param chars - the input character context
+ * @param offset - the index of the first character to process
+ * @param count - the number of characters to process
+ * @param max - the number of characters in the input context
+ * @param rightToLeft - <code>TRUE</code> if the text is in a right to left directional run
+ * @param glyphStorage - the glyph storage object. The glyph and char index arrays will be set.
+ *
+ * Output parameters:
+ * @param success - set to an error code if the operation fails
+ *
+ * @return the number of glyphs in the glyph index array
+ *
+ * @internal
+ */
+ virtual le_int32 computeGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
+ LEGlyphStorage &glyphStorage, LEErrorCode &success);
+
+ /**
+ * This method adjusts the glyph positions using the font's
+ * 'kern', 'trak', 'bsln', 'opbd' and 'just' tables.
+ *
+ * Input parameters:
+ * @param glyphStorage - the object holding the glyph storage. The positions will be updated as needed.
+ *
+ * Output parameters:
+ * @param success - set to an error code if the operation fails
+ *
+ * @internal
+ */
+ virtual void adjustGlyphPositions(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool reverse,
+ LEGlyphStorage &glyphStorage, LEErrorCode &success);
+
+};
+
+U_NAMESPACE_END
+#endif
+
diff --git a/Build/source/libs/icu/icu-50.1/layout/GlyphDefinitionTables.cpp b/Build/source/libs/icu/icu-50.1/layout/GlyphDefinitionTables.cpp
new file mode 100644
index 00000000000..a51e6ba0813
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/GlyphDefinitionTables.cpp
@@ -0,0 +1,34 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998 - 2004 - All Rights Reserved
+ *
+ */
+
+#include "LETypes.h"
+#include "OpenTypeTables.h"
+#include "GlyphDefinitionTables.h"
+#include "LESwaps.h"
+
+U_NAMESPACE_BEGIN
+
+const GlyphClassDefinitionTable *GlyphDefinitionTableHeader::getGlyphClassDefinitionTable() const
+{
+ return (const GlyphClassDefinitionTable *) ((char *) this + SWAPW(glyphClassDefOffset));
+}
+
+const AttachmentListTable *GlyphDefinitionTableHeader::getAttachmentListTable() const
+{
+ return (const AttachmentListTable *) ((char *) this + SWAPW(attachListOffset));
+}
+
+const LigatureCaretListTable *GlyphDefinitionTableHeader::getLigatureCaretListTable() const
+{
+ return (const LigatureCaretListTable *) ((char *) this + SWAPW(ligCaretListOffset));
+}
+
+const MarkAttachClassDefinitionTable *GlyphDefinitionTableHeader::getMarkAttachClassDefinitionTable() const
+{
+ return (const MarkAttachClassDefinitionTable *) ((char *) this + SWAPW(MarkAttachClassDefOffset));
+}
+
+U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-50.1/layout/GlyphDefinitionTables.h b/Build/source/libs/icu/icu-50.1/layout/GlyphDefinitionTables.h
new file mode 100644
index 00000000000..e4cbbb6e1f5
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/GlyphDefinitionTables.h
@@ -0,0 +1,96 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
+ *
+ */
+
+#ifndef __GLYPHDEFINITIONTABLES_H
+#define __GLYPHDEFINITIONTABLES_H
+
+/**
+ * \file
+ * \internal
+ */
+
+#include "LETypes.h"
+#include "OpenTypeTables.h"
+#include "ClassDefinitionTables.h"
+
+U_NAMESPACE_BEGIN
+
+typedef ClassDefinitionTable GlyphClassDefinitionTable;
+
+enum GlyphClassDefinitions
+{
+ gcdNoGlyphClass = 0,
+ gcdSimpleGlyph = 1,
+ gcdLigatureGlyph = 2,
+ gcdMarkGlyph = 3,
+ gcdComponentGlyph = 4
+};
+
+struct AttachmentListTable
+{
+ Offset coverageTableOffset;
+ le_uint16 glyphCount;
+ Offset attachPointTableOffsetArray[ANY_NUMBER];
+};
+
+struct AttachPointTable
+{
+ le_uint16 pointCount;
+ le_uint16 pointIndexArray[ANY_NUMBER];
+};
+
+struct LigatureCaretListTable
+{
+ Offset coverageTableOffset;
+ le_uint16 ligGlyphCount;
+ Offset ligGlyphTableOffsetArray[ANY_NUMBER];
+};
+
+struct LigatureGlyphTable
+{
+ le_uint16 caretCount;
+ Offset caretValueTableOffsetArray[ANY_NUMBER];
+};
+
+struct CaretValueTable
+{
+ le_uint16 caretValueFormat;
+};
+
+struct CaretValueFormat1Table : CaretValueTable
+{
+ le_int16 coordinate;
+};
+
+struct CaretValueFormat2Table : CaretValueTable
+{
+ le_uint16 caretValuePoint;
+};
+
+struct CaretValueFormat3Table : CaretValueTable
+{
+ le_int16 coordinate;
+ Offset deviceTableOffset;
+};
+
+typedef ClassDefinitionTable MarkAttachClassDefinitionTable;
+
+struct GlyphDefinitionTableHeader
+{
+ fixed32 version;
+ Offset glyphClassDefOffset;
+ Offset attachListOffset;
+ Offset ligCaretListOffset;
+ Offset MarkAttachClassDefOffset;
+
+ const GlyphClassDefinitionTable *getGlyphClassDefinitionTable() const;
+ const AttachmentListTable *getAttachmentListTable()const ;
+ const LigatureCaretListTable *getLigatureCaretListTable() const;
+ const MarkAttachClassDefinitionTable *getMarkAttachClassDefinitionTable() const;
+};
+
+U_NAMESPACE_END
+#endif
diff --git a/Build/source/libs/icu/icu-50.1/layout/GlyphIterator.cpp b/Build/source/libs/icu/icu-50.1/layout/GlyphIterator.cpp
new file mode 100644
index 00000000000..90e962eb2a1
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/GlyphIterator.cpp
@@ -0,0 +1,530 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2008 - All Rights Reserved
+ *
+ */
+
+#include "LETypes.h"
+#include "OpenTypeTables.h"
+#include "GlyphDefinitionTables.h"
+#include "GlyphPositionAdjustments.h"
+#include "GlyphIterator.h"
+#include "LEGlyphStorage.h"
+#include "Lookups.h"
+#include "LESwaps.h"
+
+U_NAMESPACE_BEGIN
+
+GlyphIterator::GlyphIterator(LEGlyphStorage &theGlyphStorage, GlyphPositionAdjustments *theGlyphPositionAdjustments, le_bool rightToLeft, le_uint16 theLookupFlags,
+ FeatureMask theFeatureMask, const GlyphDefinitionTableHeader *theGlyphDefinitionTableHeader)
+ : direction(1), position(-1), nextLimit(-1), prevLimit(-1),
+ glyphStorage(theGlyphStorage), glyphPositionAdjustments(theGlyphPositionAdjustments),
+ srcIndex(-1), destIndex(-1), lookupFlags(theLookupFlags), featureMask(theFeatureMask), featureParam(0), glyphGroup(0),
+ glyphClassDefinitionTable(NULL), markAttachClassDefinitionTable(NULL)
+
+{
+ le_int32 glyphCount = glyphStorage.getGlyphCount();
+
+ if (theGlyphDefinitionTableHeader != NULL) {
+ glyphClassDefinitionTable = theGlyphDefinitionTableHeader->getGlyphClassDefinitionTable();
+ markAttachClassDefinitionTable = theGlyphDefinitionTableHeader->getMarkAttachClassDefinitionTable();
+ }
+
+ nextLimit = glyphCount;
+
+ if (rightToLeft) {
+ direction = -1;
+ position = glyphCount;
+ nextLimit = -1;
+ prevLimit = glyphCount;
+ }
+}
+
+GlyphIterator::GlyphIterator(GlyphIterator &that)
+ : glyphStorage(that.glyphStorage)
+{
+ direction = that.direction;
+ position = that.position;
+ nextLimit = that.nextLimit;
+ prevLimit = that.prevLimit;
+
+ glyphPositionAdjustments = that.glyphPositionAdjustments;
+ srcIndex = that.srcIndex;
+ destIndex = that.destIndex;
+ lookupFlags = that.lookupFlags;
+ featureMask = that.featureMask;
+ featureParam = that.featureParam;
+ glyphGroup = that.glyphGroup;
+ glyphClassDefinitionTable = that.glyphClassDefinitionTable;
+ markAttachClassDefinitionTable = that.markAttachClassDefinitionTable;
+}
+
+GlyphIterator::GlyphIterator(GlyphIterator &that, FeatureMask newFeatureMask, le_int32 newFeatureParam)
+ : glyphStorage(that.glyphStorage)
+{
+ direction = that.direction;
+ position = that.position;
+ nextLimit = that.nextLimit;
+ prevLimit = that.prevLimit;
+
+ glyphPositionAdjustments = that.glyphPositionAdjustments;
+ srcIndex = that.srcIndex;
+ destIndex = that.destIndex;
+ lookupFlags = that.lookupFlags;
+ featureMask = newFeatureMask;
+ featureParam = newFeatureParam;
+ glyphGroup = 0;
+ glyphClassDefinitionTable = that.glyphClassDefinitionTable;
+ markAttachClassDefinitionTable = that.markAttachClassDefinitionTable;
+}
+
+GlyphIterator::GlyphIterator(GlyphIterator &that, le_uint16 newLookupFlags)
+ : glyphStorage(that.glyphStorage)
+{
+ direction = that.direction;
+ position = that.position;
+ nextLimit = that.nextLimit;
+ prevLimit = that.prevLimit;
+
+ glyphPositionAdjustments = that.glyphPositionAdjustments;
+ srcIndex = that.srcIndex;
+ destIndex = that.destIndex;
+ lookupFlags = newLookupFlags;
+ featureMask = that.featureMask;
+ featureParam = that.featureParam;
+ glyphGroup = that.glyphGroup;
+ glyphClassDefinitionTable = that.glyphClassDefinitionTable;
+ markAttachClassDefinitionTable = that.markAttachClassDefinitionTable;
+}
+
+GlyphIterator::~GlyphIterator()
+{
+ // nothing to do, right?
+}
+
+void GlyphIterator::reset(le_uint16 newLookupFlags, FeatureMask newFeatureMask)
+{
+ position = prevLimit;
+ featureMask = newFeatureMask;
+ featureParam = 0;
+ glyphGroup = 0;
+ lookupFlags = newLookupFlags;
+}
+
+LEGlyphID *GlyphIterator::insertGlyphs(le_int32 count, LEErrorCode& success)
+{
+ return glyphStorage.insertGlyphs(position, count, success);
+}
+
+le_int32 GlyphIterator::applyInsertions()
+{
+ le_int32 newGlyphCount = glyphStorage.applyInsertions();
+
+ if (direction < 0) {
+ prevLimit = newGlyphCount;
+ } else {
+ nextLimit = newGlyphCount;
+ }
+
+ return newGlyphCount;
+}
+
+le_int32 GlyphIterator::getCurrStreamPosition() const
+{
+ return position;
+}
+
+le_int32 GlyphIterator::getFeatureParam() const
+{
+ return featureParam;
+}
+
+le_bool GlyphIterator::isRightToLeft() const
+{
+ return direction < 0;
+}
+
+le_bool GlyphIterator::ignoresMarks() const
+{
+ return (lookupFlags & lfIgnoreMarks) != 0;
+}
+
+le_bool GlyphIterator::baselineIsLogicalEnd() const
+{
+ return (lookupFlags & lfBaselineIsLogicalEnd) != 0;
+}
+
+LEGlyphID GlyphIterator::getCurrGlyphID() const
+{
+ if (direction < 0) {
+ if (position <= nextLimit || position >= prevLimit) {
+ return 0xFFFF;
+ }
+ } else {
+ if (position <= prevLimit || position >= nextLimit) {
+ return 0xFFFF;
+ }
+ }
+
+ return glyphStorage[position];
+}
+
+void GlyphIterator::getCursiveEntryPoint(LEPoint &entryPoint) const
+{
+ if (direction < 0) {
+ if (position <= nextLimit || position >= prevLimit) {
+ return;
+ }
+ } else {
+ if (position <= prevLimit || position >= nextLimit) {
+ return;
+ }
+ }
+
+ glyphPositionAdjustments->getEntryPoint(position, entryPoint);
+}
+
+void GlyphIterator::getCursiveExitPoint(LEPoint &exitPoint) const
+{
+ if (direction < 0) {
+ if (position <= nextLimit || position >= prevLimit) {
+ return;
+ }
+ } else {
+ if (position <= prevLimit || position >= nextLimit) {
+ return;
+ }
+ }
+
+ glyphPositionAdjustments->getExitPoint(position, exitPoint);
+}
+
+void GlyphIterator::setCurrGlyphID(TTGlyphID glyphID)
+{
+ LEGlyphID glyph = glyphStorage[position];
+
+ glyphStorage[position] = LE_SET_GLYPH(glyph, glyphID);
+}
+
+void GlyphIterator::setCurrStreamPosition(le_int32 newPosition)
+{
+ if (direction < 0) {
+ if (newPosition >= prevLimit) {
+ position = prevLimit;
+ return;
+ }
+
+ if (newPosition <= nextLimit) {
+ position = nextLimit;
+ return;
+ }
+ } else {
+ if (newPosition <= prevLimit) {
+ position = prevLimit;
+ return;
+ }
+
+ if (newPosition >= nextLimit) {
+ position = nextLimit;
+ return;
+ }
+ }
+
+ position = newPosition - direction;
+ next();
+}
+
+void GlyphIterator::setCurrGlyphBaseOffset(le_int32 baseOffset)
+{
+ if (direction < 0) {
+ if (position <= nextLimit || position >= prevLimit) {
+ return;
+ }
+ } else {
+ if (position <= prevLimit || position >= nextLimit) {
+ return;
+ }
+ }
+
+ glyphPositionAdjustments->setBaseOffset(position, baseOffset);
+}
+
+void GlyphIterator::adjustCurrGlyphPositionAdjustment(float xPlacementAdjust, float yPlacementAdjust,
+ float xAdvanceAdjust, float yAdvanceAdjust)
+{
+ if (direction < 0) {
+ if (position <= nextLimit || position >= prevLimit) {
+ return;
+ }
+ } else {
+ if (position <= prevLimit || position >= nextLimit) {
+ return;
+ }
+ }
+
+ glyphPositionAdjustments->adjustXPlacement(position, xPlacementAdjust);
+ glyphPositionAdjustments->adjustYPlacement(position, yPlacementAdjust);
+ glyphPositionAdjustments->adjustXAdvance(position, xAdvanceAdjust);
+ glyphPositionAdjustments->adjustYAdvance(position, yAdvanceAdjust);
+}
+
+void GlyphIterator::setCurrGlyphPositionAdjustment(float xPlacementAdjust, float yPlacementAdjust,
+ float xAdvanceAdjust, float yAdvanceAdjust)
+{
+ if (direction < 0) {
+ if (position <= nextLimit || position >= prevLimit) {
+ return;
+ }
+ } else {
+ if (position <= prevLimit || position >= nextLimit) {
+ return;
+ }
+ }
+
+ glyphPositionAdjustments->setXPlacement(position, xPlacementAdjust);
+ glyphPositionAdjustments->setYPlacement(position, yPlacementAdjust);
+ glyphPositionAdjustments->setXAdvance(position, xAdvanceAdjust);
+ glyphPositionAdjustments->setYAdvance(position, yAdvanceAdjust);
+}
+
+void GlyphIterator::clearCursiveEntryPoint()
+{
+ if (direction < 0) {
+ if (position <= nextLimit || position >= prevLimit) {
+ return;
+ }
+ } else {
+ if (position <= prevLimit || position >= nextLimit) {
+ return;
+ }
+ }
+
+ glyphPositionAdjustments->clearEntryPoint(position);
+}
+
+void GlyphIterator::clearCursiveExitPoint()
+{
+ if (direction < 0) {
+ if (position <= nextLimit || position >= prevLimit) {
+ return;
+ }
+ } else {
+ if (position <= prevLimit || position >= nextLimit) {
+ return;
+ }
+ }
+
+ glyphPositionAdjustments->clearExitPoint(position);
+}
+
+void GlyphIterator::setCursiveEntryPoint(LEPoint &entryPoint)
+{
+ if (direction < 0) {
+ if (position <= nextLimit || position >= prevLimit) {
+ return;
+ }
+ } else {
+ if (position <= prevLimit || position >= nextLimit) {
+ return;
+ }
+ }
+
+ glyphPositionAdjustments->setEntryPoint(position, entryPoint, baselineIsLogicalEnd());
+}
+
+void GlyphIterator::setCursiveExitPoint(LEPoint &exitPoint)
+{
+ if (direction < 0) {
+ if (position <= nextLimit || position >= prevLimit) {
+ return;
+ }
+ } else {
+ if (position <= prevLimit || position >= nextLimit) {
+ return;
+ }
+ }
+
+ glyphPositionAdjustments->setExitPoint(position, exitPoint, baselineIsLogicalEnd());
+}
+
+void GlyphIterator::setCursiveGlyph()
+{
+ if (direction < 0) {
+ if (position <= nextLimit || position >= prevLimit) {
+ return;
+ }
+ } else {
+ if (position <= prevLimit || position >= nextLimit) {
+ return;
+ }
+ }
+
+ glyphPositionAdjustments->setCursiveGlyph(position, baselineIsLogicalEnd());
+}
+
+le_bool GlyphIterator::filterGlyph(le_uint32 index) const
+{
+ LEGlyphID glyphID = glyphStorage[index];
+ le_int32 glyphClass = gcdNoGlyphClass;
+
+ if (LE_GET_GLYPH(glyphID) >= 0xFFFE) {
+ return TRUE;
+ }
+
+ if (glyphClassDefinitionTable != NULL) {
+ glyphClass = glyphClassDefinitionTable->getGlyphClass(glyphID);
+ }
+
+ switch (glyphClass)
+ {
+ case gcdNoGlyphClass:
+ return FALSE;
+
+ case gcdSimpleGlyph:
+ return (lookupFlags & lfIgnoreBaseGlyphs) != 0;
+
+ case gcdLigatureGlyph:
+ return (lookupFlags & lfIgnoreLigatures) != 0;
+
+ case gcdMarkGlyph:
+ {
+ if ((lookupFlags & lfIgnoreMarks) != 0) {
+ return TRUE;
+ }
+
+ le_uint16 markAttachType = (lookupFlags & lfMarkAttachTypeMask) >> lfMarkAttachTypeShift;
+
+ if ((markAttachType != 0) && (markAttachClassDefinitionTable != NULL)) {
+ return markAttachClassDefinitionTable->getGlyphClass(glyphID) != markAttachType;
+ }
+
+ return FALSE;
+ }
+
+ case gcdComponentGlyph:
+ return (lookupFlags & lfIgnoreBaseGlyphs) != 0;
+
+ default:
+ return FALSE;
+ }
+}
+
+le_bool GlyphIterator::hasFeatureTag(le_bool matchGroup)
+{
+ featureParam = 0;
+
+ if (featureMask == 0) {
+ return TRUE;
+ }
+
+ LEErrorCode success = LE_NO_ERROR;
+ FeatureMask fm = glyphStorage.getAuxData(position, success);
+
+ if (((fm & featureMask) == featureMask) && (!matchGroup || (le_int32)(fm & LE_GLYPH_GROUP_MASK) == glyphGroup)) {
+ const le_int32 *paramList = (const le_int32 *) glyphStorage.getAuxParam(position, success);
+ if (paramList != NULL) {
+ fm = featureMask;
+ while ((fm & 0x80000000UL) == 0) {
+ ++paramList;
+ fm <<= 1;
+ }
+ featureParam = *paramList;
+ }
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+le_bool GlyphIterator::findFeatureTag()
+{
+ //glyphGroup = 0;
+
+ while (nextInternal()) {
+ if (hasFeatureTag(FALSE)) {
+ LEErrorCode success = LE_NO_ERROR;
+
+ glyphGroup = (glyphStorage.getAuxData(position, success) & LE_GLYPH_GROUP_MASK);
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
+
+
+le_bool GlyphIterator::nextInternal(le_uint32 delta)
+{
+ le_int32 newPosition = position;
+
+ while (newPosition != nextLimit && delta > 0) {
+ do {
+ newPosition += direction;
+ } while (newPosition != nextLimit && filterGlyph(newPosition));
+
+ delta -= 1;
+ }
+
+ position = newPosition;
+
+ return position != nextLimit;
+}
+
+le_bool GlyphIterator::next(le_uint32 delta)
+{
+ return nextInternal(delta) && hasFeatureTag(TRUE);
+}
+
+le_bool GlyphIterator::prevInternal(le_uint32 delta)
+{
+ le_int32 newPosition = position;
+
+ while (newPosition != prevLimit && delta > 0) {
+ do {
+ newPosition -= direction;
+ } while (newPosition != prevLimit && filterGlyph(newPosition));
+
+ delta -= 1;
+ }
+
+ position = newPosition;
+
+ return position != prevLimit;
+}
+
+le_bool GlyphIterator::prev(le_uint32 delta)
+{
+ return prevInternal(delta) && hasFeatureTag(TRUE);
+}
+
+le_int32 GlyphIterator::getMarkComponent(le_int32 markPosition) const
+{
+ le_int32 component = 0;
+ le_int32 posn;
+
+ for (posn = position; posn != markPosition; posn += direction) {
+ if (glyphStorage[posn] == 0xFFFE) {
+ component += 1;
+ }
+ }
+
+ return component;
+}
+
+// This is basically prevInternal except that it
+// doesn't take a delta argument, and it doesn't
+// filter out 0xFFFE glyphs.
+le_bool GlyphIterator::findMark2Glyph()
+{
+ le_int32 newPosition = position;
+
+ do {
+ newPosition -= direction;
+ } while (newPosition != prevLimit && glyphStorage[newPosition] != 0xFFFE && filterGlyph(newPosition));
+
+ position = newPosition;
+
+ return position != prevLimit;
+}
+
+U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-50.1/layout/GlyphIterator.h b/Build/source/libs/icu/icu-50.1/layout/GlyphIterator.h
new file mode 100644
index 00000000000..5ab8bce1bd1
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/GlyphIterator.h
@@ -0,0 +1,105 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2008 - All Rights Reserved
+ *
+ */
+
+#ifndef __GLYPHITERATOR_H
+#define __GLYPHITERATOR_H
+
+/**
+ * \file
+ * \internal
+ */
+
+#include "LETypes.h"
+#include "OpenTypeTables.h"
+#include "GlyphDefinitionTables.h"
+
+U_NAMESPACE_BEGIN
+
+class LEGlyphStorage;
+class GlyphPositionAdjustments;
+
+class GlyphIterator : public UMemory {
+public:
+ GlyphIterator(LEGlyphStorage &theGlyphStorage, GlyphPositionAdjustments *theGlyphPositionAdjustments, le_bool rightToLeft, le_uint16 theLookupFlags,
+ FeatureMask theFeatureMask, const GlyphDefinitionTableHeader *theGlyphDefinitionTableHeader);
+
+ GlyphIterator(GlyphIterator &that);
+
+ GlyphIterator(GlyphIterator &that, FeatureMask newFeatureMask, le_int32 featureParam = 0);
+
+ GlyphIterator(GlyphIterator &that, le_uint16 newLookupFlags);
+
+ virtual ~GlyphIterator();
+
+ void reset(le_uint16 newLookupFlags, LETag newFeatureTag);
+
+ le_bool next(le_uint32 delta = 1);
+ le_bool prev(le_uint32 delta = 1);
+ le_bool findFeatureTag();
+
+ le_bool isRightToLeft() const;
+ le_bool ignoresMarks() const;
+
+ le_bool baselineIsLogicalEnd() const;
+
+ LEGlyphID getCurrGlyphID() const;
+ le_int32 getCurrStreamPosition() const;
+
+ le_int32 getMarkComponent(le_int32 markPosition) const;
+ le_bool findMark2Glyph();
+
+ le_int32 getFeatureParam() const;
+
+ void getCursiveEntryPoint(LEPoint &entryPoint) const;
+ void getCursiveExitPoint(LEPoint &exitPoint) const;
+
+ void setCurrGlyphID(TTGlyphID glyphID);
+ void setCurrStreamPosition(le_int32 position);
+ void setCurrGlyphBaseOffset(le_int32 baseOffset);
+ void adjustCurrGlyphPositionAdjustment(float xPlacementAdjust, float yPlacementAdjust,
+ float xAdvanceAdjust, float yAdvanceAdjust);
+
+ void setCurrGlyphPositionAdjustment(float xPlacementAdjust, float yPlacementAdjust,
+ float xAdvanceAdjust, float yAdvanceAdjust);
+
+ void clearCursiveEntryPoint();
+ void clearCursiveExitPoint();
+ void setCursiveEntryPoint(LEPoint &entryPoint);
+ void setCursiveExitPoint(LEPoint &exitPoint);
+ void setCursiveGlyph();
+
+ LEGlyphID *insertGlyphs(le_int32 count, LEErrorCode& success);
+ le_int32 applyInsertions();
+
+private:
+ le_bool filterGlyph(le_uint32 index) const;
+ le_bool hasFeatureTag(le_bool matchGroup); /* not const because it updates the featureParam field */
+ le_bool nextInternal(le_uint32 delta = 1);
+ le_bool prevInternal(le_uint32 delta = 1);
+
+ le_int32 direction;
+ le_int32 position;
+ le_int32 nextLimit;
+ le_int32 prevLimit;
+
+ LEGlyphStorage &glyphStorage;
+ GlyphPositionAdjustments *glyphPositionAdjustments;
+
+ le_int32 srcIndex;
+ le_int32 destIndex;
+ le_uint16 lookupFlags;
+ FeatureMask featureMask;
+ le_int32 featureParam;
+ le_int32 glyphGroup;
+
+ const GlyphClassDefinitionTable *glyphClassDefinitionTable;
+ const MarkAttachClassDefinitionTable *markAttachClassDefinitionTable;
+
+ GlyphIterator &operator=(const GlyphIterator &other); // forbid copying of this class
+};
+
+U_NAMESPACE_END
+#endif
diff --git a/Build/source/libs/icu/icu-50.1/layout/GlyphLookupTables.cpp b/Build/source/libs/icu/icu-50.1/layout/GlyphLookupTables.cpp
new file mode 100644
index 00000000000..fdc646fe4f8
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/GlyphLookupTables.cpp
@@ -0,0 +1,32 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
+ *
+ */
+
+#include "LETypes.h"
+#include "OpenTypeTables.h"
+#include "ScriptAndLanguage.h"
+#include "GlyphLookupTables.h"
+#include "LESwaps.h"
+
+U_NAMESPACE_BEGIN
+
+le_bool GlyphLookupTableHeader::coversScript(LETag scriptTag) const
+{
+ const ScriptListTable *scriptListTable = (const ScriptListTable *) ((char *)this + SWAPW(scriptListOffset));
+
+ return scriptListOffset != 0 && scriptListTable->findScript(scriptTag) != NULL;
+}
+
+le_bool GlyphLookupTableHeader::coversScriptAndLanguage(LETag scriptTag, LETag languageTag, le_bool exactMatch) const
+{
+ const ScriptListTable *scriptListTable = (const ScriptListTable *) ((char *)this + SWAPW(scriptListOffset));
+ const LangSysTable *langSysTable = scriptListTable->findLanguage(scriptTag, languageTag, exactMatch);
+
+ // FIXME: could check featureListOffset, lookupListOffset, and lookup count...
+ // Note: don't have to SWAPW langSysTable->featureCount to check for non-zero.
+ return langSysTable != NULL && langSysTable->featureCount != 0;
+}
+
+U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-50.1/layout/GlyphLookupTables.h b/Build/source/libs/icu/icu-50.1/layout/GlyphLookupTables.h
new file mode 100644
index 00000000000..65642d02e28
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/GlyphLookupTables.h
@@ -0,0 +1,34 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
+ *
+ */
+
+#ifndef __GLYPHLOOKUPTABLES_H
+#define __GLYPHLOOKUPTABLES_H
+
+/**
+ * \file
+ * \internal
+ */
+
+#include "LETypes.h"
+#include "OpenTypeTables.h"
+
+U_NAMESPACE_BEGIN
+
+struct GlyphLookupTableHeader
+{
+ fixed32 version;
+ Offset scriptListOffset;
+ Offset featureListOffset;
+ Offset lookupListOffset;
+
+ le_bool coversScript(LETag scriptTag) const;
+ le_bool coversScriptAndLanguage(LETag scriptTag, LETag languageTag, le_bool exactMatch = FALSE) const;
+};
+
+U_NAMESPACE_END
+
+#endif
+
diff --git a/Build/source/libs/icu/icu-50.1/layout/GlyphPositionAdjustments.cpp b/Build/source/libs/icu/icu-50.1/layout/GlyphPositionAdjustments.cpp
new file mode 100644
index 00000000000..900e1aeecef
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/GlyphPositionAdjustments.cpp
@@ -0,0 +1,185 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2008 - All Rights Reserved
+ *
+ */
+
+#include "LETypes.h"
+#include "GlyphPositionAdjustments.h"
+#include "LEGlyphStorage.h"
+#include "LEFontInstance.h"
+
+U_NAMESPACE_BEGIN
+
+#define CHECK_ALLOCATE_ARRAY(array, type, size) \
+ if (array == NULL) { \
+ array = (type *) new type[size]; \
+ }
+
+GlyphPositionAdjustments::GlyphPositionAdjustments(le_int32 glyphCount)
+ : fGlyphCount(glyphCount), fEntryExitPoints(NULL), fAdjustments(NULL)
+{
+ fAdjustments = (Adjustment *) new Adjustment[glyphCount];
+}
+
+GlyphPositionAdjustments::~GlyphPositionAdjustments()
+{
+ delete[] fEntryExitPoints;
+ delete[] fAdjustments;
+}
+
+const LEPoint *GlyphPositionAdjustments::getEntryPoint(le_int32 index, LEPoint &entryPoint) const
+{
+ if (fEntryExitPoints == NULL) {
+ return NULL;
+ }
+
+ return fEntryExitPoints[index].getEntryPoint(entryPoint);
+}
+
+const LEPoint *GlyphPositionAdjustments::getExitPoint(le_int32 index, LEPoint &exitPoint)const
+{
+ if (fEntryExitPoints == NULL) {
+ return NULL;
+ }
+
+ return fEntryExitPoints[index].getExitPoint(exitPoint);
+}
+
+void GlyphPositionAdjustments::clearEntryPoint(le_int32 index)
+{
+ CHECK_ALLOCATE_ARRAY(fEntryExitPoints, EntryExitPoint, fGlyphCount);
+
+ fEntryExitPoints[index].clearEntryPoint();
+}
+
+void GlyphPositionAdjustments::clearExitPoint(le_int32 index)
+{
+ CHECK_ALLOCATE_ARRAY(fEntryExitPoints, EntryExitPoint, fGlyphCount);
+
+ fEntryExitPoints[index].clearExitPoint();
+}
+
+void GlyphPositionAdjustments::setEntryPoint(le_int32 index, LEPoint &newEntryPoint, le_bool baselineIsLogicalEnd)
+{
+ CHECK_ALLOCATE_ARRAY(fEntryExitPoints, EntryExitPoint, fGlyphCount);
+
+ fEntryExitPoints[index].setEntryPoint(newEntryPoint, baselineIsLogicalEnd);
+}
+
+void GlyphPositionAdjustments::setExitPoint(le_int32 index, LEPoint &newExitPoint, le_bool baselineIsLogicalEnd)
+{
+ CHECK_ALLOCATE_ARRAY(fEntryExitPoints, EntryExitPoint, fGlyphCount);
+
+ fEntryExitPoints[index].setExitPoint(newExitPoint, baselineIsLogicalEnd);
+}
+
+void GlyphPositionAdjustments::setCursiveGlyph(le_int32 index, le_bool baselineIsLogicalEnd)
+{
+ CHECK_ALLOCATE_ARRAY(fEntryExitPoints, EntryExitPoint, fGlyphCount);
+
+ fEntryExitPoints[index].setCursiveGlyph(baselineIsLogicalEnd);
+}
+
+void GlyphPositionAdjustments::applyCursiveAdjustments(LEGlyphStorage &glyphStorage, le_bool rightToLeft, const LEFontInstance *fontInstance)
+{
+ if (! hasCursiveGlyphs()) {
+ return;
+ }
+
+ le_int32 start = 0, end = fGlyphCount, dir = 1;
+ le_int32 firstExitPoint = -1, lastExitPoint = -1;
+ LEPoint entryAnchor, exitAnchor, pixels;
+ LEGlyphID lastExitGlyphID = 0;
+ float baselineAdjustment = 0;
+
+ // This removes a possible warning about
+ // using exitAnchor before it's been initialized.
+ exitAnchor.fX = exitAnchor.fY = 0;
+
+ if (rightToLeft) {
+ start = fGlyphCount - 1;
+ end = -1;
+ dir = -1;
+ }
+
+ for (le_int32 i = start; i != end; i += dir) {
+ LEGlyphID glyphID = glyphStorage[i];
+
+ if (isCursiveGlyph(i)) {
+ if (lastExitPoint >= 0 && getEntryPoint(i, entryAnchor) != NULL) {
+ float anchorDiffX = exitAnchor.fX - entryAnchor.fX;
+ float anchorDiffY = exitAnchor.fY - entryAnchor.fY;
+
+ baselineAdjustment += anchorDiffY;
+ adjustYPlacement(i, baselineAdjustment);
+
+ if (rightToLeft) {
+ LEPoint secondAdvance;
+
+ fontInstance->getGlyphAdvance(glyphID, pixels);
+ fontInstance->pixelsToUnits(pixels, secondAdvance);
+
+ adjustXAdvance(i, -(anchorDiffX + secondAdvance.fX));
+ } else {
+ LEPoint firstAdvance;
+
+ fontInstance->getGlyphAdvance(lastExitGlyphID, pixels);
+ fontInstance->pixelsToUnits(pixels, firstAdvance);
+
+ adjustXAdvance(lastExitPoint, anchorDiffX - firstAdvance.fX);
+ }
+ }
+
+ lastExitPoint = i;
+
+ if (getExitPoint(i, exitAnchor) != NULL) {
+ if (firstExitPoint < 0) {
+ firstExitPoint = i;
+ }
+
+ lastExitGlyphID = glyphID;
+ } else {
+ if (baselineIsLogicalEnd(i) && firstExitPoint >= 0 && lastExitPoint >= 0) {
+ le_int32 limit = lastExitPoint /*+ dir*/;
+ LEPoint dummyAnchor;
+
+ if (getEntryPoint(i, dummyAnchor) != NULL) {
+ limit += dir;
+ }
+
+ for (le_int32 j = firstExitPoint; j != limit; j += dir) {
+ if (isCursiveGlyph(j)) {
+ adjustYPlacement(j, -baselineAdjustment);
+ }
+ }
+ }
+
+ firstExitPoint = lastExitPoint = -1;
+ baselineAdjustment = 0;
+ }
+ }
+ }
+}
+
+LEPoint *GlyphPositionAdjustments::EntryExitPoint::getEntryPoint(LEPoint &entryPoint) const
+{
+ if (fFlags & EEF_HAS_ENTRY_POINT) {
+ entryPoint = fEntryPoint;
+ return &entryPoint;
+ }
+
+ return NULL;
+}
+
+LEPoint *GlyphPositionAdjustments::EntryExitPoint::getExitPoint(LEPoint &exitPoint) const
+{
+ if (fFlags & EEF_HAS_EXIT_POINT) {
+ exitPoint = fExitPoint;
+ return &exitPoint;
+ }
+
+ return NULL;
+}
+
+U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-50.1/layout/GlyphPositionAdjustments.h b/Build/source/libs/icu/icu-50.1/layout/GlyphPositionAdjustments.h
new file mode 100644
index 00000000000..9c9e39bffe6
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/GlyphPositionAdjustments.h
@@ -0,0 +1,376 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2007 - All Rights Reserved
+ *
+ */
+
+#ifndef __GLYPHPOSITIONADJUSTMENTS_H
+#define __GLYPHPOSITIONADJUSTMENTS_H
+
+/**
+ * \file
+ * \internal
+ */
+
+#include "LETypes.h"
+#include "OpenTypeTables.h"
+
+U_NAMESPACE_BEGIN
+
+class LEGlyphStorage;
+class LEFontInstance;
+
+class GlyphPositionAdjustments : public UMemory
+{
+private:
+ class Adjustment : public UMemory {
+ public:
+
+ inline Adjustment();
+ inline Adjustment(float xPlace, float yPlace, float xAdv, float yAdv, le_int32 baseOff = -1);
+ inline ~Adjustment();
+
+ inline float getXPlacement() const;
+ inline float getYPlacement() const;
+ inline float getXAdvance() const;
+ inline float getYAdvance() const;
+
+ inline le_int32 getBaseOffset() const;
+
+ inline void setXPlacement(float newXPlacement);
+ inline void setYPlacement(float newYPlacement);
+ inline void setXAdvance(float newXAdvance);
+ inline void setYAdvance(float newYAdvance);
+
+ inline void setBaseOffset(le_int32 newBaseOffset);
+
+ inline void adjustXPlacement(float xAdjustment);
+ inline void adjustYPlacement(float yAdjustment);
+ inline void adjustXAdvance(float xAdjustment);
+ inline void adjustYAdvance(float yAdjustment);
+
+ private:
+ float xPlacement;
+ float yPlacement;
+ float xAdvance;
+ float yAdvance;
+
+ le_int32 baseOffset;
+
+ // allow copying of this class because all of its fields are simple types
+ };
+
+ class EntryExitPoint : public UMemory
+ {
+ public:
+ inline EntryExitPoint();
+ inline ~EntryExitPoint();
+
+ inline le_bool isCursiveGlyph() const;
+ inline le_bool baselineIsLogicalEnd() const;
+
+ LEPoint *getEntryPoint(LEPoint &entryPoint) const;
+ LEPoint *getExitPoint(LEPoint &exitPoint) const;
+
+ inline void clearEntryPoint();
+ inline void clearExitPoint();
+ inline void setEntryPoint(LEPoint &newEntryPoint, le_bool baselineIsLogicalEnd);
+ inline void setExitPoint(LEPoint &newExitPoint, le_bool baselineIsLogicalEnd);
+ inline void setCursiveGlyph(le_bool baselineIsLogicalEnd);
+
+ private:
+ enum EntryExitFlags
+ {
+ EEF_HAS_ENTRY_POINT = 0x80000000L,
+ EEF_HAS_EXIT_POINT = 0x40000000L,
+ EEF_IS_CURSIVE_GLYPH = 0x20000000L,
+ EEF_BASELINE_IS_LOGICAL_END = 0x10000000L
+ };
+
+ le_uint32 fFlags;
+ LEPoint fEntryPoint;
+ LEPoint fExitPoint;
+ };
+
+ le_int32 fGlyphCount;
+ EntryExitPoint *fEntryExitPoints;
+ Adjustment *fAdjustments;
+
+ GlyphPositionAdjustments();
+
+public:
+ GlyphPositionAdjustments(le_int32 glyphCount);
+ ~GlyphPositionAdjustments();
+
+ inline le_bool hasCursiveGlyphs() const;
+ inline le_bool isCursiveGlyph(le_int32 index) const;
+ inline le_bool baselineIsLogicalEnd(le_int32 index) const;
+
+ const LEPoint *getEntryPoint(le_int32 index, LEPoint &entryPoint) const;
+ const LEPoint *getExitPoint(le_int32 index, LEPoint &exitPoint) const;
+
+ inline float getXPlacement(le_int32 index) const;
+ inline float getYPlacement(le_int32 index) const;
+ inline float getXAdvance(le_int32 index) const;
+ inline float getYAdvance(le_int32 index) const;
+
+ inline le_int32 getBaseOffset(le_int32 index) const;
+
+ inline void setXPlacement(le_int32 index, float newXPlacement);
+ inline void setYPlacement(le_int32 index, float newYPlacement);
+ inline void setXAdvance(le_int32 index, float newXAdvance);
+ inline void setYAdvance(le_int32 index, float newYAdvance);
+
+ inline void setBaseOffset(le_int32 index, le_int32 newBaseOffset);
+
+ inline void adjustXPlacement(le_int32 index, float xAdjustment);
+ inline void adjustYPlacement(le_int32 index, float yAdjustment);
+ inline void adjustXAdvance(le_int32 index, float xAdjustment);
+ inline void adjustYAdvance(le_int32 index, float yAdjustment);
+
+ void clearEntryPoint(le_int32 index);
+ void clearExitPoint(le_int32 index);
+ void setEntryPoint(le_int32 index, LEPoint &newEntryPoint, le_bool baselineIsLogicalEnd);
+ void setExitPoint(le_int32 index, LEPoint &newExitPoint, le_bool baselineIsLogicalEnd);
+ void setCursiveGlyph(le_int32 index, le_bool baselineIsLogicalEnd);
+
+ void applyCursiveAdjustments(LEGlyphStorage &glyphStorage, le_bool rightToLeft, const LEFontInstance *fontInstance);
+};
+
+inline GlyphPositionAdjustments::Adjustment::Adjustment()
+ : xPlacement(0), yPlacement(0), xAdvance(0), yAdvance(0), baseOffset(-1)
+{
+ // nothing else to do!
+}
+
+inline GlyphPositionAdjustments::Adjustment::Adjustment(float xPlace, float yPlace, float xAdv, float yAdv, le_int32 baseOff)
+ : xPlacement(xPlace), yPlacement(yPlace), xAdvance(xAdv), yAdvance(yAdv), baseOffset(baseOff)
+{
+ // nothing else to do!
+}
+
+inline GlyphPositionAdjustments::Adjustment::~Adjustment()
+{
+ // nothing to do!
+}
+
+inline float GlyphPositionAdjustments::Adjustment::getXPlacement() const
+{
+ return xPlacement;
+}
+
+inline float GlyphPositionAdjustments::Adjustment::getYPlacement() const
+{
+ return yPlacement;
+}
+
+inline float GlyphPositionAdjustments::Adjustment::getXAdvance() const
+{
+ return xAdvance;
+}
+
+inline float GlyphPositionAdjustments::Adjustment::getYAdvance() const
+{
+ return yAdvance;
+}
+
+inline le_int32 GlyphPositionAdjustments::Adjustment::getBaseOffset() const
+{
+ return baseOffset;
+}
+
+inline void GlyphPositionAdjustments::Adjustment::setXPlacement(float newXPlacement)
+{
+ xPlacement = newXPlacement;
+}
+
+inline void GlyphPositionAdjustments::Adjustment::setYPlacement(float newYPlacement)
+{
+ yPlacement = newYPlacement;
+}
+
+inline void GlyphPositionAdjustments::Adjustment::setXAdvance(float newXAdvance)
+{
+ xAdvance = newXAdvance;
+}
+
+inline void GlyphPositionAdjustments::Adjustment::setYAdvance(float newYAdvance)
+{
+ yAdvance = newYAdvance;
+}
+
+inline void GlyphPositionAdjustments::Adjustment::setBaseOffset(le_int32 newBaseOffset)
+{
+ baseOffset = newBaseOffset;
+}
+
+inline void GlyphPositionAdjustments::Adjustment::adjustXPlacement(float xAdjustment)
+{
+ xPlacement += xAdjustment;
+}
+
+inline void GlyphPositionAdjustments::Adjustment::adjustYPlacement(float yAdjustment)
+{
+ yPlacement += yAdjustment;
+}
+
+inline void GlyphPositionAdjustments::Adjustment::adjustXAdvance(float xAdjustment)
+{
+ xAdvance += xAdjustment;
+}
+
+inline void GlyphPositionAdjustments::Adjustment::adjustYAdvance(float yAdjustment)
+{
+ yAdvance += yAdjustment;
+}
+
+inline GlyphPositionAdjustments::EntryExitPoint::EntryExitPoint()
+ : fFlags(0)
+{
+ fEntryPoint.fX = fEntryPoint.fY = fExitPoint.fX = fExitPoint.fY = 0;
+}
+
+inline GlyphPositionAdjustments::EntryExitPoint::~EntryExitPoint()
+{
+ // nothing special to do
+}
+
+inline le_bool GlyphPositionAdjustments::EntryExitPoint::isCursiveGlyph() const
+{
+ return (fFlags & EEF_IS_CURSIVE_GLYPH) != 0;
+}
+
+inline le_bool GlyphPositionAdjustments::EntryExitPoint::baselineIsLogicalEnd() const
+{
+ return (fFlags & EEF_BASELINE_IS_LOGICAL_END) != 0;
+}
+
+inline void GlyphPositionAdjustments::EntryExitPoint::clearEntryPoint()
+{
+ fFlags &= ~EEF_HAS_ENTRY_POINT;
+}
+
+inline void GlyphPositionAdjustments::EntryExitPoint::clearExitPoint()
+{
+ fFlags &= ~EEF_HAS_EXIT_POINT;
+}
+
+inline void GlyphPositionAdjustments::EntryExitPoint::setEntryPoint(LEPoint &newEntryPoint, le_bool baselineIsLogicalEnd)
+{
+ if (baselineIsLogicalEnd) {
+ fFlags |= (EEF_HAS_ENTRY_POINT | EEF_IS_CURSIVE_GLYPH | EEF_BASELINE_IS_LOGICAL_END);
+ } else {
+ fFlags |= (EEF_HAS_ENTRY_POINT | EEF_IS_CURSIVE_GLYPH);
+ }
+
+ fEntryPoint = newEntryPoint;
+}
+
+inline void GlyphPositionAdjustments::EntryExitPoint::setExitPoint(LEPoint &newExitPoint, le_bool baselineIsLogicalEnd)
+{
+ if (baselineIsLogicalEnd) {
+ fFlags |= (EEF_HAS_EXIT_POINT | EEF_IS_CURSIVE_GLYPH | EEF_BASELINE_IS_LOGICAL_END);
+ } else {
+ fFlags |= (EEF_HAS_EXIT_POINT | EEF_IS_CURSIVE_GLYPH);
+ }
+
+ fExitPoint = newExitPoint;
+}
+
+inline void GlyphPositionAdjustments::EntryExitPoint::setCursiveGlyph(le_bool baselineIsLogicalEnd)
+{
+ if (baselineIsLogicalEnd) {
+ fFlags |= (EEF_IS_CURSIVE_GLYPH | EEF_BASELINE_IS_LOGICAL_END);
+ } else {
+ fFlags |= EEF_IS_CURSIVE_GLYPH;
+ }
+}
+
+inline le_bool GlyphPositionAdjustments::isCursiveGlyph(le_int32 index) const
+{
+ return fEntryExitPoints != NULL && fEntryExitPoints[index].isCursiveGlyph();
+}
+
+inline le_bool GlyphPositionAdjustments::baselineIsLogicalEnd(le_int32 index) const
+{
+ return fEntryExitPoints != NULL && fEntryExitPoints[index].baselineIsLogicalEnd();
+}
+
+inline float GlyphPositionAdjustments::getXPlacement(le_int32 index) const
+{
+ return fAdjustments[index].getXPlacement();
+}
+
+inline float GlyphPositionAdjustments::getYPlacement(le_int32 index) const
+{
+ return fAdjustments[index].getYPlacement();
+}
+
+inline float GlyphPositionAdjustments::getXAdvance(le_int32 index) const
+{
+ return fAdjustments[index].getXAdvance();
+}
+
+inline float GlyphPositionAdjustments::getYAdvance(le_int32 index) const
+{
+ return fAdjustments[index].getYAdvance();
+}
+
+
+inline le_int32 GlyphPositionAdjustments::getBaseOffset(le_int32 index) const
+{
+ return fAdjustments[index].getBaseOffset();
+}
+
+inline void GlyphPositionAdjustments::setXPlacement(le_int32 index, float newXPlacement)
+{
+ fAdjustments[index].setXPlacement(newXPlacement);
+}
+
+inline void GlyphPositionAdjustments::setYPlacement(le_int32 index, float newYPlacement)
+{
+ fAdjustments[index].setYPlacement(newYPlacement);
+}
+
+inline void GlyphPositionAdjustments::setXAdvance(le_int32 index, float newXAdvance)
+{
+ fAdjustments[index].setXAdvance(newXAdvance);
+}
+
+inline void GlyphPositionAdjustments::setYAdvance(le_int32 index, float newYAdvance)
+{
+ fAdjustments[index].setYAdvance(newYAdvance);
+}
+
+inline void GlyphPositionAdjustments::setBaseOffset(le_int32 index, le_int32 newBaseOffset)
+{
+ fAdjustments[index].setBaseOffset(newBaseOffset);
+}
+
+inline void GlyphPositionAdjustments::adjustXPlacement(le_int32 index, float xAdjustment)
+{
+ fAdjustments[index].adjustXPlacement(xAdjustment);
+}
+
+inline void GlyphPositionAdjustments::adjustYPlacement(le_int32 index, float yAdjustment)
+{
+ fAdjustments[index].adjustYPlacement(yAdjustment);
+}
+
+inline void GlyphPositionAdjustments::adjustXAdvance(le_int32 index, float xAdjustment)
+{
+ fAdjustments[index].adjustXAdvance(xAdjustment);
+}
+
+inline void GlyphPositionAdjustments::adjustYAdvance(le_int32 index, float yAdjustment)
+{
+ fAdjustments[index].adjustYAdvance(yAdjustment);
+}
+
+inline le_bool GlyphPositionAdjustments::hasCursiveGlyphs() const
+{
+ return fEntryExitPoints != NULL;
+}
+
+U_NAMESPACE_END
+#endif
diff --git a/Build/source/libs/icu/icu-50.1/layout/GlyphPositioningTables.cpp b/Build/source/libs/icu/icu-50.1/layout/GlyphPositioningTables.cpp
new file mode 100644
index 00000000000..b973fb7ae99
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/GlyphPositioningTables.cpp
@@ -0,0 +1,38 @@
+/*
+ * (C) Copyright IBM Corp. 1998-2008 - All Rights Reserved
+ *
+ */
+
+#include "LETypes.h"
+#include "LEFontInstance.h"
+#include "OpenTypeTables.h"
+#include "Lookups.h"
+#include "GlyphDefinitionTables.h"
+#include "GlyphPositioningTables.h"
+#include "GlyphPosnLookupProc.h"
+#include "CursiveAttachmentSubtables.h"
+#include "LEGlyphStorage.h"
+#include "GlyphPositionAdjustments.h"
+
+U_NAMESPACE_BEGIN
+
+void GlyphPositioningTableHeader::process(LEGlyphStorage &glyphStorage, GlyphPositionAdjustments *glyphPositionAdjustments, le_bool rightToLeft,
+ LETag scriptTag, LETag languageTag,
+ const GlyphDefinitionTableHeader *glyphDefinitionTableHeader, LEErrorCode &success,
+ const LEFontInstance *fontInstance, const FeatureMap *featureMap, le_int32 featureMapCount, le_bool featureOrder) const
+{
+ if (LE_FAILURE(success)) {
+ return;
+ }
+
+ GlyphPositioningLookupProcessor processor(this, scriptTag, languageTag, featureMap, featureMapCount, featureOrder, success);
+ if (LE_FAILURE(success)) {
+ return;
+ }
+
+ processor.process(glyphStorage, glyphPositionAdjustments, rightToLeft, glyphDefinitionTableHeader, fontInstance, success);
+
+ glyphPositionAdjustments->applyCursiveAdjustments(glyphStorage, rightToLeft, fontInstance);
+}
+
+U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-50.1/layout/GlyphPositioningTables.h b/Build/source/libs/icu/icu-50.1/layout/GlyphPositioningTables.h
new file mode 100644
index 00000000000..590488cd679
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/GlyphPositioningTables.h
@@ -0,0 +1,51 @@
+/*
+ * (C) Copyright IBM Corp. 1998-2008 - All Rights Reserved
+ *
+ */
+
+#ifndef __GLYPHPOSITIONINGTABLES_H
+#define __GLYPHPOSITIONINGTABLES_H
+
+/**
+ * \file
+ * \internal
+ */
+
+#include "LETypes.h"
+#include "OpenTypeTables.h"
+#include "Lookups.h"
+#include "GlyphLookupTables.h"
+
+U_NAMESPACE_BEGIN
+
+class LEFontInstance;
+class LEGlyphStorage;
+class LEGlyphFilter;
+class GlyphPositionAdjustments;
+struct GlyphDefinitionTableHeader;
+
+struct GlyphPositioningTableHeader : public GlyphLookupTableHeader
+{
+ void process(LEGlyphStorage &glyphStorage, GlyphPositionAdjustments *glyphPositionAdjustments,
+ le_bool rightToLeft, LETag scriptTag, LETag languageTag,
+ const GlyphDefinitionTableHeader *glyphDefinitionTableHeader, LEErrorCode &success,
+ const LEFontInstance *fontInstance, const FeatureMap *featureMap, le_int32 featureMapCount, le_bool featureOrder) const;
+};
+
+enum GlyphPositioningSubtableTypes
+{
+ gpstSingle = 1,
+ gpstPair = 2,
+ gpstCursive = 3,
+ gpstMarkToBase = 4,
+ gpstMarkToLigature = 5,
+ gpstMarkToMark = 6,
+ gpstContext = 7,
+ gpstChainedContext = 8,
+ gpstExtension = 9
+};
+
+typedef LookupSubtable GlyphPositioningSubtable;
+
+U_NAMESPACE_END
+#endif
diff --git a/Build/source/libs/icu/icu-50.1/layout/GlyphPosnLookupProc.cpp b/Build/source/libs/icu/icu-50.1/layout/GlyphPosnLookupProc.cpp
new file mode 100644
index 00000000000..de325140364
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/GlyphPosnLookupProc.cpp
@@ -0,0 +1,161 @@
+/*
+ * (C) Copyright IBM Corp. 1998 - 2010 - All Rights Reserved
+ *
+ */
+
+#include "LETypes.h"
+#include "LEFontInstance.h"
+#include "OpenTypeTables.h"
+#include "ICUFeatures.h"
+#include "Lookups.h"
+#include "ScriptAndLanguage.h"
+#include "GlyphDefinitionTables.h"
+#include "GlyphPositioningTables.h"
+#include "SinglePositioningSubtables.h"
+#include "PairPositioningSubtables.h"
+#include "CursiveAttachmentSubtables.h"
+#include "MarkToBasePosnSubtables.h"
+#include "MarkToLigaturePosnSubtables.h"
+#include "MarkToMarkPosnSubtables.h"
+//#include "ContextualPositioningSubtables.h"
+#include "ContextualSubstSubtables.h"
+#include "ExtensionSubtables.h"
+#include "LookupProcessor.h"
+#include "GlyphPosnLookupProc.h"
+#include "LESwaps.h"
+
+U_NAMESPACE_BEGIN
+
+// Aside from the names, the contextual positioning subtables are
+// the same as the contextual substitution subtables.
+typedef ContextualSubstitutionSubtable ContextualPositioningSubtable;
+typedef ChainingContextualSubstitutionSubtable ChainingContextualPositioningSubtable;
+
+GlyphPositioningLookupProcessor::GlyphPositioningLookupProcessor(
+ const GlyphPositioningTableHeader *glyphPositioningTableHeader,
+ LETag scriptTag,
+ LETag languageTag,
+ const FeatureMap *featureMap,
+ le_int32 featureMapCount,
+ le_bool featureOrder,
+ LEErrorCode& success)
+ : LookupProcessor(
+ (char *) glyphPositioningTableHeader,
+ SWAPW(glyphPositioningTableHeader->scriptListOffset),
+ SWAPW(glyphPositioningTableHeader->featureListOffset),
+ SWAPW(glyphPositioningTableHeader->lookupListOffset),
+ scriptTag,
+ languageTag,
+ featureMap,
+ featureMapCount,
+ featureOrder,
+ success
+ )
+{
+ // anything?
+}
+
+GlyphPositioningLookupProcessor::GlyphPositioningLookupProcessor()
+{
+}
+
+le_uint32 GlyphPositioningLookupProcessor::applySubtable(const LookupSubtable *lookupSubtable, le_uint16 lookupType,
+ GlyphIterator *glyphIterator,
+ const LEFontInstance *fontInstance,
+ LEErrorCode& success) const
+{
+ if (LE_FAILURE(success)) {
+ return 0;
+ }
+
+ le_uint32 delta = 0;
+
+ switch(lookupType)
+ {
+ case 0:
+ break;
+
+ case gpstSingle:
+ {
+ const SinglePositioningSubtable *subtable = (const SinglePositioningSubtable *) lookupSubtable;
+
+ delta = subtable->process(glyphIterator, fontInstance);
+ break;
+ }
+
+ case gpstPair:
+ {
+ const PairPositioningSubtable *subtable = (const PairPositioningSubtable *) lookupSubtable;
+
+ delta = subtable->process(glyphIterator, fontInstance);
+ break;
+ }
+
+ case gpstCursive:
+ {
+ const CursiveAttachmentSubtable *subtable = (const CursiveAttachmentSubtable *) lookupSubtable;
+
+ delta = subtable->process(glyphIterator, fontInstance);
+ break;
+ }
+
+ case gpstMarkToBase:
+ {
+ const MarkToBasePositioningSubtable *subtable = (const MarkToBasePositioningSubtable *) lookupSubtable;
+
+ delta = subtable->process(glyphIterator, fontInstance);
+ break;
+ }
+
+ case gpstMarkToLigature:
+ {
+ const MarkToLigaturePositioningSubtable *subtable = (const MarkToLigaturePositioningSubtable *) lookupSubtable;
+
+ delta = subtable->process(glyphIterator, fontInstance);
+ break;
+ }
+
+ case gpstMarkToMark:
+ {
+ const MarkToMarkPositioningSubtable *subtable = (const MarkToMarkPositioningSubtable *) lookupSubtable;
+
+ delta = subtable->process(glyphIterator, fontInstance);
+ break;
+ }
+
+ case gpstContext:
+ {
+ const ContextualPositioningSubtable *subtable = (const ContextualPositioningSubtable *) lookupSubtable;
+
+ delta = subtable->process(this, glyphIterator, fontInstance, success);
+ break;
+ }
+
+ case gpstChainedContext:
+ {
+ const ChainingContextualPositioningSubtable *subtable = (const ChainingContextualPositioningSubtable *) lookupSubtable;
+
+ delta = subtable->process(this, glyphIterator, fontInstance, success);
+ break;
+ }
+
+ case gpstExtension:
+ {
+ const ExtensionSubtable *subtable = (const ExtensionSubtable *) lookupSubtable;
+
+ delta = subtable->process(this, lookupType, glyphIterator, fontInstance, success);
+ break;
+ }
+
+ default:
+ break;
+ }
+
+ return delta;
+}
+
+GlyphPositioningLookupProcessor::~GlyphPositioningLookupProcessor()
+{
+}
+
+U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-50.1/layout/GlyphPosnLookupProc.h b/Build/source/libs/icu/icu-50.1/layout/GlyphPosnLookupProc.h
new file mode 100644
index 00000000000..b251137caf6
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/GlyphPosnLookupProc.h
@@ -0,0 +1,52 @@
+/*
+ * (C) Copyright IBM Corp. 1998-2010 - All Rights Reserved
+ *
+ */
+
+#ifndef __GLYPHPOSITIONINGLOOKUPPROCESSOR_H
+#define __GLYPHPOSITIONINGLOOKUPPROCESSOR_H
+
+/**
+ * \file
+ * \internal
+ */
+
+#include "LETypes.h"
+#include "LEFontInstance.h"
+#include "OpenTypeTables.h"
+#include "Lookups.h"
+#include "ICUFeatures.h"
+#include "GlyphDefinitionTables.h"
+#include "GlyphPositioningTables.h"
+#include "GlyphIterator.h"
+#include "LookupProcessor.h"
+
+U_NAMESPACE_BEGIN
+
+class GlyphPositioningLookupProcessor : public LookupProcessor
+{
+public:
+ GlyphPositioningLookupProcessor(const GlyphPositioningTableHeader *glyphPositioningTableHeader,
+ LETag scriptTag,
+ LETag languageTag,
+ const FeatureMap *featureMap,
+ le_int32 featureMapCount,
+ le_bool featureOrder,
+ LEErrorCode& success);
+
+ virtual ~GlyphPositioningLookupProcessor();
+
+ virtual le_uint32 applySubtable(const LookupSubtable *lookupSubtable, le_uint16 lookupType, GlyphIterator *glyphIterator,
+ const LEFontInstance *fontInstance, LEErrorCode& success) const;
+
+protected:
+ GlyphPositioningLookupProcessor();
+
+private:
+
+ GlyphPositioningLookupProcessor(const GlyphPositioningLookupProcessor &other); // forbid copying of this class
+ GlyphPositioningLookupProcessor &operator=(const GlyphPositioningLookupProcessor &other); // forbid copying of this class
+};
+
+U_NAMESPACE_END
+#endif
diff --git a/Build/source/libs/icu/icu-50.1/layout/GlyphSubstLookupProc.cpp b/Build/source/libs/icu/icu-50.1/layout/GlyphSubstLookupProc.cpp
new file mode 100644
index 00000000000..195de9dce33
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/GlyphSubstLookupProc.cpp
@@ -0,0 +1,132 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2010 - All Rights Reserved
+ *
+ */
+
+#include "LETypes.h"
+#include "LEGlyphFilter.h"
+#include "LEFontInstance.h"
+#include "OpenTypeTables.h"
+#include "ICUFeatures.h"
+#include "Lookups.h"
+#include "ScriptAndLanguage.h"
+#include "GlyphDefinitionTables.h"
+#include "GlyphSubstitutionTables.h"
+#include "SingleSubstitutionSubtables.h"
+#include "MultipleSubstSubtables.h"
+#include "AlternateSubstSubtables.h"
+#include "LigatureSubstSubtables.h"
+#include "ContextualSubstSubtables.h"
+#include "ExtensionSubtables.h"
+#include "LookupProcessor.h"
+#include "GlyphSubstLookupProc.h"
+#include "LESwaps.h"
+
+U_NAMESPACE_BEGIN
+
+GlyphSubstitutionLookupProcessor::GlyphSubstitutionLookupProcessor(
+ const GlyphSubstitutionTableHeader *glyphSubstitutionTableHeader,
+ LETag scriptTag,
+ LETag languageTag,
+ const LEGlyphFilter *filter,
+ const FeatureMap *featureMap,
+ le_int32 featureMapCount,
+ le_bool featureOrder,
+ LEErrorCode& success)
+ : LookupProcessor(
+ (char *) glyphSubstitutionTableHeader,
+ SWAPW(glyphSubstitutionTableHeader->scriptListOffset),
+ SWAPW(glyphSubstitutionTableHeader->featureListOffset),
+ SWAPW(glyphSubstitutionTableHeader->lookupListOffset),
+ scriptTag, languageTag, featureMap, featureMapCount, featureOrder, success), fFilter(filter)
+{
+ // anything?
+}
+
+GlyphSubstitutionLookupProcessor::GlyphSubstitutionLookupProcessor()
+{
+}
+
+le_uint32 GlyphSubstitutionLookupProcessor::applySubtable(const LookupSubtable *lookupSubtable, le_uint16 lookupType,
+ GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode& success) const
+{
+ if (LE_FAILURE(success)) {
+ return 0;
+ }
+
+ le_uint32 delta = 0;
+
+ switch(lookupType)
+ {
+ case 0:
+ break;
+
+ case gsstSingle:
+ {
+ const SingleSubstitutionSubtable *subtable = (const SingleSubstitutionSubtable *) lookupSubtable;
+
+ delta = subtable->process(glyphIterator, fFilter);
+ break;
+ }
+
+ case gsstMultiple:
+ {
+ const MultipleSubstitutionSubtable *subtable = (const MultipleSubstitutionSubtable *) lookupSubtable;
+
+ delta = subtable->process(glyphIterator, success, fFilter);
+ break;
+ }
+
+ case gsstAlternate:
+ {
+ const AlternateSubstitutionSubtable *subtable = (const AlternateSubstitutionSubtable *) lookupSubtable;
+
+ delta = subtable->process(glyphIterator, fFilter);
+ break;
+ }
+
+ case gsstLigature:
+ {
+ const LigatureSubstitutionSubtable *subtable = (const LigatureSubstitutionSubtable *) lookupSubtable;
+
+ delta = subtable->process(glyphIterator, fFilter);
+ break;
+ }
+
+ case gsstContext:
+ {
+ const ContextualSubstitutionSubtable *subtable = (const ContextualSubstitutionSubtable *) lookupSubtable;
+
+ delta = subtable->process(this, glyphIterator, fontInstance, success);
+ break;
+ }
+
+ case gsstChainingContext:
+ {
+ const ChainingContextualSubstitutionSubtable *subtable = (const ChainingContextualSubstitutionSubtable *) lookupSubtable;
+
+ delta = subtable->process(this, glyphIterator, fontInstance, success);
+ break;
+ }
+
+ case gsstExtension:
+ {
+ const ExtensionSubtable *subtable = (const ExtensionSubtable *) lookupSubtable;
+
+ delta = subtable->process(this, lookupType, glyphIterator, fontInstance, success);
+ break;
+ }
+
+ default:
+ break;
+ }
+
+ return delta;
+}
+
+GlyphSubstitutionLookupProcessor::~GlyphSubstitutionLookupProcessor()
+{
+}
+
+U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-50.1/layout/GlyphSubstLookupProc.h b/Build/source/libs/icu/icu-50.1/layout/GlyphSubstLookupProc.h
new file mode 100644
index 00000000000..ef04db253d2
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/GlyphSubstLookupProc.h
@@ -0,0 +1,55 @@
+/*
+ * (C) Copyright IBM Corp. 1998-2010 - All Rights Reserved
+ *
+ */
+
+#ifndef __GLYPHSUBSTITUTIONLOOKUPPROCESSOR_H
+#define __GLYPHSUBSTITUTIONLOOKUPPROCESSOR_H
+
+/**
+ * \file
+ * \internal
+ */
+
+#include "LETypes.h"
+#include "LEGlyphFilter.h"
+#include "LEFontInstance.h"
+#include "OpenTypeTables.h"
+#include "Lookups.h"
+#include "ICUFeatures.h"
+#include "GlyphDefinitionTables.h"
+#include "GlyphSubstitutionTables.h"
+#include "GlyphIterator.h"
+#include "LookupProcessor.h"
+
+U_NAMESPACE_BEGIN
+
+class GlyphSubstitutionLookupProcessor : public LookupProcessor
+{
+public:
+ GlyphSubstitutionLookupProcessor(const GlyphSubstitutionTableHeader *glyphSubstitutionTableHeader,
+ LETag scriptTag,
+ LETag languageTag,
+ const LEGlyphFilter *filter,
+ const FeatureMap *featureMap,
+ le_int32 featureMapCount,
+ le_bool featureOrder,
+ LEErrorCode& success);
+
+ virtual ~GlyphSubstitutionLookupProcessor();
+
+ virtual le_uint32 applySubtable(const LookupSubtable *lookupSubtable, le_uint16 lookupType, GlyphIterator *glyphIterator,
+ const LEFontInstance *fontInstance, LEErrorCode& success) const;
+
+protected:
+ GlyphSubstitutionLookupProcessor();
+
+private:
+ const LEGlyphFilter *fFilter;
+
+ GlyphSubstitutionLookupProcessor(const GlyphSubstitutionLookupProcessor &other); // forbid copying of this class
+ GlyphSubstitutionLookupProcessor &operator=(const GlyphSubstitutionLookupProcessor &other); // forbid copying of this class
+};
+
+U_NAMESPACE_END
+#endif
diff --git a/Build/source/libs/icu/icu-50.1/layout/GlyphSubstitutionTables.cpp b/Build/source/libs/icu/icu-50.1/layout/GlyphSubstitutionTables.cpp
new file mode 100644
index 00000000000..bdd81277124
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/GlyphSubstitutionTables.cpp
@@ -0,0 +1,39 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2008 - All Rights Reserved
+ *
+ */
+
+#include "LETypes.h"
+#include "LEGlyphFilter.h"
+#include "OpenTypeTables.h"
+#include "Lookups.h"
+#include "GlyphDefinitionTables.h"
+#include "GlyphSubstitutionTables.h"
+#include "GlyphSubstLookupProc.h"
+#include "ScriptAndLanguage.h"
+#include "LEGlyphStorage.h"
+#include "LESwaps.h"
+
+U_NAMESPACE_BEGIN
+
+le_int32 GlyphSubstitutionTableHeader::process(LEGlyphStorage &glyphStorage,
+ le_bool rightToLeft,
+ LETag scriptTag,
+ LETag languageTag,
+ const GlyphDefinitionTableHeader *glyphDefinitionTableHeader,
+ const LEGlyphFilter *filter,
+ const FeatureMap *featureMap,
+ le_int32 featureMapCount,
+ le_bool featureOrder,
+ LEErrorCode &success) const
+{
+ if (LE_FAILURE(success)) {
+ return 0;
+ }
+
+ GlyphSubstitutionLookupProcessor processor(this, scriptTag, languageTag, filter, featureMap, featureMapCount, featureOrder, success);
+ return processor.process(glyphStorage, NULL, rightToLeft, glyphDefinitionTableHeader, NULL, success);
+}
+
+U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-50.1/layout/GlyphSubstitutionTables.h b/Build/source/libs/icu/icu-50.1/layout/GlyphSubstitutionTables.h
new file mode 100644
index 00000000000..b899bee4bfc
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/GlyphSubstitutionTables.h
@@ -0,0 +1,55 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2008 - All Rights Reserved
+ *
+ */
+
+#ifndef __GLYPHSUBSTITUTIONTABLES_H
+#define __GLYPHSUBSTITUTIONTABLES_H
+
+/**
+ * \file
+ * \internal
+ */
+
+#include "LETypes.h"
+#include "OpenTypeTables.h"
+#include "Lookups.h"
+#include "GlyphLookupTables.h"
+
+U_NAMESPACE_BEGIN
+
+class LEGlyphStorage;
+class LEGlyphFilter;
+struct GlyphDefinitionTableHeader;
+
+struct GlyphSubstitutionTableHeader : public GlyphLookupTableHeader
+{
+ le_int32 process(LEGlyphStorage &glyphStorage,
+ le_bool rightToLeft,
+ LETag scriptTag,
+ LETag languageTag,
+ const GlyphDefinitionTableHeader *glyphDefinitionTableHeader,
+ const LEGlyphFilter *filter,
+ const FeatureMap *featureMap,
+ le_int32 featureMapCount,
+ le_bool featureOrder,
+ LEErrorCode &success) const;
+};
+
+enum GlyphSubstitutionSubtableTypes
+{
+ gsstSingle = 1,
+ gsstMultiple = 2,
+ gsstAlternate = 3,
+ gsstLigature = 4,
+ gsstContext = 5,
+ gsstChainingContext = 6,
+ gsstExtension = 7,
+ gsstReverseChaining = 8
+};
+
+typedef LookupSubtable GlyphSubstitutionSubtable;
+
+U_NAMESPACE_END
+#endif
diff --git a/Build/source/libs/icu/icu-50.1/layout/HanLayoutEngine.cpp b/Build/source/libs/icu/icu-50.1/layout/HanLayoutEngine.cpp
new file mode 100644
index 00000000000..31dc8187c43
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/HanLayoutEngine.cpp
@@ -0,0 +1,84 @@
+/*
+ * HanLayoutEngine.cpp: OpenType processing for Han fonts.
+ *
+ * (C) Copyright IBM Corp. 1998-2008 - All Rights Reserved.
+ */
+
+#include "LETypes.h"
+#include "LEScripts.h"
+#include "LELanguages.h"
+
+#include "LayoutEngine.h"
+#include "OpenTypeLayoutEngine.h"
+#include "HanLayoutEngine.h"
+#include "ScriptAndLanguageTags.h"
+#include "LEGlyphStorage.h"
+#include "OpenTypeTables.h"
+
+U_NAMESPACE_BEGIN
+
+UOBJECT_DEFINE_RTTI_IMPLEMENTATION(HanOpenTypeLayoutEngine)
+
+#define loclFeatureTag LE_LOCL_FEATURE_TAG
+#define smplFeatureTag LE_SMPL_FEATURE_TAG
+#define tradFeatureTag LE_TRAD_FEATURE_TAG
+
+#define loclFeatureMask 0x80000000UL
+#define smplFeatureMask 0x40000000UL
+#define tradFeatureMask 0x20000000UL
+
+static const FeatureMap featureMap[] =
+{
+ {loclFeatureTag, loclFeatureMask},
+ {smplFeatureTag, smplFeatureMask},
+ {tradFeatureTag, tradFeatureMask}
+};
+
+static const le_int32 featureMapCount = LE_ARRAY_SIZE(featureMap);
+
+#define features (loclFeatureMask)
+
+HanOpenTypeLayoutEngine::HanOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
+ le_int32 typoFlags, const GlyphSubstitutionTableHeader *gsubTable, LEErrorCode &success)
+ : OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable, success)
+{
+ fFeatureMap = featureMap;
+ fFeatureMapCount = featureMapCount;
+}
+
+HanOpenTypeLayoutEngine::~HanOpenTypeLayoutEngine()
+{
+ // nothing to do
+}
+
+le_int32 HanOpenTypeLayoutEngine::characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool /*rightToLeft*/,
+ LEUnicode *&/*outChars*/, LEGlyphStorage &glyphStorage, LEErrorCode &success)
+{
+ if (LE_FAILURE(success)) {
+ return 0;
+ }
+
+ if (chars == NULL || offset < 0 || count < 0 || max < 0 || offset >= max || offset + count > max) {
+ success = LE_ILLEGAL_ARGUMENT_ERROR;
+ return 0;
+ }
+
+ glyphStorage.allocateGlyphArray(count, FALSE, success);
+ glyphStorage.allocateAuxData(success);
+
+ if (LE_FAILURE(success)) {
+ return 0;
+ }
+
+ // FIXME: do we want to add the 'trad' feature for 'ZHT' and the
+ // 'smpl' feature for 'ZHS'? If we do this, we can remove the exact
+ // flag from the language tag lookups, so we can use these features
+ // with the default LangSys...
+ for (le_int32 i = 0; i < count; i += 1) {
+ glyphStorage.setAuxData(i, features, success);
+ }
+
+ return count;
+}
+
+U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-50.1/layout/HanLayoutEngine.h b/Build/source/libs/icu/icu-50.1/layout/HanLayoutEngine.h
new file mode 100644
index 00000000000..f02153bcad1
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/HanLayoutEngine.h
@@ -0,0 +1,105 @@
+
+/*
+ * HanLayoutEngine.h: OpenType processing for Han fonts.
+ *
+ * (C) Copyright IBM Corp. 1998-2008 - All Rights Reserved.
+ */
+
+#ifndef __HANLAYOUTENGINE_H
+#define __HANLAYOUTENGINE_H
+
+#include "LETypes.h"
+#include "LEFontInstance.h"
+#include "LayoutEngine.h"
+#include "OpenTypeLayoutEngine.h"
+
+#include "GlyphSubstitutionTables.h"
+
+U_NAMESPACE_BEGIN
+
+class LEGlyphStorage;
+
+/**
+ * This class implements OpenType layout for Han fonts. It overrides
+ * the characerProcessing method to assign the correct OpenType feature
+ * tags for the CJK language-specific forms.
+ *
+ * @internal
+ */
+class HanOpenTypeLayoutEngine : public OpenTypeLayoutEngine
+{
+public:
+ /**
+ * This is the main constructor. It constructs an instance of HanOpenTypeLayoutEngine for
+ * a particular font, script and language. It takes the GSUB table as a parameter since
+ * LayoutEngine::layoutEngineFactory has to read the GSUB table to know that it has a
+ * Han OpenType font.
+ *
+ * @param fontInstance - the font
+ * @param scriptCode - the script
+ * @param langaugeCode - the language
+ * @param gsubTable - the GSUB table
+ * @param success - set to an error code if the operation fails
+ *
+ * @see LayoutEngine::layoutEngineFactory
+ * @see OpenTypeLayoutEngine
+ * @see ScriptAndLangaugeTags.h for script and language codes
+ *
+ * @internal
+ */
+ HanOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
+ le_int32 typoFlags, const GlyphSubstitutionTableHeader *gsubTablem, LEErrorCode &success);
+
+
+ /**
+ * The destructor, virtual for correct polymorphic invocation.
+ *
+ * @internal
+ */
+ virtual ~HanOpenTypeLayoutEngine();
+
+ /**
+ * ICU "poor man's RTTI", returns a UClassID for the actual class.
+ *
+ * @stable ICU 2.8
+ */
+ virtual UClassID getDynamicClassID() const;
+
+ /**
+ * ICU "poor man's RTTI", returns a UClassID for this class.
+ *
+ * @stable ICU 2.8
+ */
+ static UClassID getStaticClassID();
+
+protected:
+
+ /**
+ * This method does Han OpenType character processing. It assigns the OpenType feature
+ * tags to the characters to generate the correct language-specific variants.
+ *
+ * Input parameters:
+ * @param chars - the input character context
+ * @param offset - the index of the first character to process
+ * @param count - the number of characters to process
+ * @param max - the number of characters in the input context
+ * @param rightToLeft - <code>TRUE</code> if the characters are in a right to left directional run
+ * @param glyphStorage - the object holding the glyph storage. The char index and auxillary data arrays will be set.
+ *
+ * Output parameters:
+ * @param outChars - the output character arrayt
+ * @param charIndices - the output character index array
+ * @param featureTags - the output feature tag array
+ * @param success - set to an error code if the operation fails
+ *
+ * @return the output character count
+ *
+ * @internal
+ */
+ virtual le_int32 characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
+ LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success);
+
+};
+
+U_NAMESPACE_END
+#endif
diff --git a/Build/source/libs/icu/icu-50.1/layout/HangulLayoutEngine.cpp b/Build/source/libs/icu/icu-50.1/layout/HangulLayoutEngine.cpp
new file mode 100644
index 00000000000..ad4731e5ee3
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/HangulLayoutEngine.cpp
@@ -0,0 +1,338 @@
+/*
+ * HangulLayoutEngine.cpp: OpenType processing for Han fonts.
+ *
+ * (C) Copyright IBM Corp. 1998-2008 - All Rights Reserved.
+ */
+
+#include "LETypes.h"
+#include "LEScripts.h"
+#include "LELanguages.h"
+
+#include "LayoutEngine.h"
+#include "OpenTypeLayoutEngine.h"
+#include "HangulLayoutEngine.h"
+#include "ScriptAndLanguageTags.h"
+#include "LEGlyphStorage.h"
+#include "OpenTypeTables.h"
+
+U_NAMESPACE_BEGIN
+
+UOBJECT_DEFINE_RTTI_IMPLEMENTATION(HangulOpenTypeLayoutEngine)
+
+
+#define FEATURE_MAP(name) {name ## FeatureTag, name ## FeatureMask}
+
+#define LJMO_FIRST 0x1100
+#define LJMO_LAST 0x1159
+#define LJMO_FILL 0x115F
+#define LJMO_COUNT 19
+
+#define VJMO_FIRST 0x1161
+#define VJMO_LAST 0x11A2
+#define VJMO_FILL 0x1160
+#define VJMO_COUNT 21
+
+#define TJMO_FIRST 0x11A7
+#define TJMO_LAST 0x11F9
+#define TJMO_COUNT 28
+
+#define HSYL_FIRST 0xAC00
+#define HSYL_COUNT 11172
+#define HSYL_LVCNT (VJMO_COUNT * TJMO_COUNT)
+
+// Character classes
+enum
+{
+ CC_L = 0,
+ CC_V,
+ CC_T,
+ CC_LV,
+ CC_LVT,
+ CC_X,
+ CC_COUNT
+};
+
+// Action flags
+#define AF_L 1
+#define AF_V 2
+#define AF_T 4
+
+// Actions
+#define a_N 0
+#define a_L (AF_L)
+#define a_V (AF_V)
+#define a_T (AF_T)
+#define a_VT (AF_V | AF_T)
+#define a_LV (AF_L | AF_V)
+#define a_LVT (AF_L | AF_V | AF_T)
+
+typedef struct
+{
+ int32_t newState;
+ int32_t actionFlags;
+} StateTransition;
+
+static const StateTransition stateTable[][CC_COUNT] =
+{
+// L V T LV LVT X
+ { {1, a_L}, {2, a_LV}, {3, a_LVT}, {2, a_LV}, {3, a_LVT}, {4, a_T}}, // 0 - start
+ { {1, a_L}, {2, a_V}, {3, a_VT}, {2, a_LV}, {3, a_LVT}, {-1, a_V}}, // 1 - L+
+ {{-1, a_N}, {2, a_V}, {3, a_T}, {-1, a_N}, {-1, a_N}, {-1, a_N}}, // 2 - L+V+
+ {{-1, a_N}, {-1, a_N}, {3, a_T}, {-1, a_N}, {-1, a_N}, {-1, a_N}}, // 3 - L+V+T*
+ {{-1, a_N}, {-1, a_N}, {-1, a_N}, {-1, a_N}, {-1, a_N}, {4, a_T}} // 4 - X+
+};
+
+
+#define ccmpFeatureTag LE_CCMP_FEATURE_TAG
+#define ljmoFeatureTag LE_LJMO_FEATURE_TAG
+#define vjmoFeatureTag LE_VJMO_FEATURE_TAG
+#define tjmoFeatureTag LE_TJMO_FEATURE_TAG
+
+#define ccmpFeatureMask 0x80000000UL
+#define ljmoFeatureMask 0x40000000UL
+#define vjmoFeatureMask 0x20000000UL
+#define tjmoFeatureMask 0x10000000UL
+
+static const FeatureMap featureMap[] =
+{
+ {ccmpFeatureTag, ccmpFeatureMask},
+ {ljmoFeatureTag, ljmoFeatureMask},
+ {vjmoFeatureTag, vjmoFeatureMask},
+ {tjmoFeatureTag, tjmoFeatureMask}
+};
+
+static const le_int32 featureMapCount = LE_ARRAY_SIZE(featureMap);
+
+#define nullFeatures 0
+#define ljmoFeatures (ccmpFeatureMask | ljmoFeatureMask)
+#define vjmoFeatures (ccmpFeatureMask | vjmoFeatureMask | ljmoFeatureMask | tjmoFeatureMask)
+#define tjmoFeatures (ccmpFeatureMask | tjmoFeatureMask | ljmoFeatureMask | vjmoFeatureMask)
+
+static le_int32 compose(LEUnicode lead, LEUnicode vowel, LEUnicode trail, LEUnicode &syllable)
+{
+ le_int32 lIndex = lead - LJMO_FIRST;
+ le_int32 vIndex = vowel - VJMO_FIRST;
+ le_int32 tIndex = trail - TJMO_FIRST;
+ le_int32 result = 3;
+
+ if ((lIndex < 0 || lIndex >= LJMO_COUNT ) || (vIndex < 0 || vIndex >= VJMO_COUNT)) {
+ return 0;
+ }
+
+ if (tIndex <= 0 || tIndex >= TJMO_COUNT) {
+ tIndex = 0;
+ result = 2;
+ }
+
+ syllable = (LEUnicode) ((lIndex * VJMO_COUNT + vIndex) * TJMO_COUNT + tIndex + HSYL_FIRST);
+
+ return result;
+}
+
+static le_int32 decompose(LEUnicode syllable, LEUnicode &lead, LEUnicode &vowel, LEUnicode &trail)
+{
+ le_int32 sIndex = syllable - HSYL_FIRST;
+
+ if (sIndex < 0 || sIndex >= HSYL_COUNT) {
+ return 0;
+ }
+
+ lead = LJMO_FIRST + (sIndex / HSYL_LVCNT);
+ vowel = VJMO_FIRST + (sIndex % HSYL_LVCNT) / TJMO_COUNT;
+ trail = TJMO_FIRST + (sIndex % TJMO_COUNT);
+
+ if (trail == TJMO_FIRST) {
+ return 2;
+ }
+
+ return 3;
+}
+
+static le_int32 getCharClass(LEUnicode ch, LEUnicode &lead, LEUnicode &vowel, LEUnicode &trail)
+{
+ lead = LJMO_FILL;
+ vowel = VJMO_FILL;
+ trail = TJMO_FIRST;
+
+ if (ch >= LJMO_FIRST && ch <= LJMO_LAST) {
+ lead = ch;
+ return CC_L;
+ }
+
+ if (ch >= VJMO_FIRST && ch <= VJMO_LAST) {
+ vowel = ch;
+ return CC_V;
+ }
+
+ if (ch > TJMO_FIRST && ch <= TJMO_LAST) {
+ trail = ch;
+ return CC_T;
+ }
+
+ le_int32 c = decompose(ch, lead, vowel, trail);
+
+ if (c == 2) {
+ return CC_LV;
+ }
+
+ if (c == 3) {
+ return CC_LVT;
+ }
+
+ trail = ch;
+ return CC_X;
+}
+
+HangulOpenTypeLayoutEngine::HangulOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 /*languageCode*/,
+ le_int32 typoFlags, const GlyphSubstitutionTableHeader *gsubTable, LEErrorCode &success)
+ : OpenTypeLayoutEngine(fontInstance, scriptCode, korLanguageCode, typoFlags, gsubTable, success)
+{
+ fFeatureMap = featureMap;
+ fFeatureMapCount = featureMapCount;
+ fFeatureOrder = TRUE;
+}
+
+HangulOpenTypeLayoutEngine::HangulOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 /*languageCode*/,
+ le_int32 typoFlags, LEErrorCode &success)
+ : OpenTypeLayoutEngine(fontInstance, scriptCode, korLanguageCode, typoFlags, success)
+{
+ fFeatureMap = featureMap;
+ fFeatureMapCount = featureMapCount;
+ fFeatureOrder = TRUE;
+}
+
+HangulOpenTypeLayoutEngine::~HangulOpenTypeLayoutEngine()
+{
+ // nothing to do
+}
+
+le_int32 HangulOpenTypeLayoutEngine::characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
+ LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success)
+{
+ if (LE_FAILURE(success)) {
+ return 0;
+ }
+
+ if (chars == NULL || offset < 0 || count < 0 || max < 0 || offset >= max || offset + count > max) {
+ success = LE_ILLEGAL_ARGUMENT_ERROR;
+ return 0;
+ }
+
+ le_int32 worstCase = count * 3;
+
+ outChars = LE_NEW_ARRAY(LEUnicode, worstCase);
+
+ if (outChars == NULL) {
+ success = LE_MEMORY_ALLOCATION_ERROR;
+ return 0;
+ }
+
+ glyphStorage.allocateGlyphArray(worstCase, rightToLeft, success);
+ glyphStorage.allocateAuxData(success);
+
+ if (LE_FAILURE(success)) {
+ LE_DELETE_ARRAY(outChars);
+ return 0;
+ }
+
+ le_int32 outCharCount = 0;
+ le_int32 limit = offset + count;
+ le_int32 i = offset;
+
+ while (i < limit) {
+ le_int32 state = 0;
+ le_int32 inStart = i;
+ le_int32 outStart = outCharCount;
+
+ while( i < limit) {
+ LEUnicode lead = 0;
+ LEUnicode vowel = 0;
+ LEUnicode trail = 0;
+ int32_t chClass = getCharClass(chars[i], lead, vowel, trail);
+ const StateTransition transition = stateTable[state][chClass];
+
+ if (chClass == CC_X) {
+ /* Any character of type X will be stored as a trail jamo */
+ if ((transition.actionFlags & AF_T) != 0) {
+ outChars[outCharCount] = trail;
+ glyphStorage.setCharIndex(outCharCount, i-offset, success);
+ glyphStorage.setAuxData(outCharCount++, nullFeatures, success);
+ }
+ } else {
+ /* Any Hangul will be fully decomposed. Output the decomposed characters. */
+ if ((transition.actionFlags & AF_L) != 0) {
+ outChars[outCharCount] = lead;
+ glyphStorage.setCharIndex(outCharCount, i-offset, success);
+ glyphStorage.setAuxData(outCharCount++, ljmoFeatures, success);
+ }
+
+ if ((transition.actionFlags & AF_V) != 0) {
+ outChars[outCharCount] = vowel;
+ glyphStorage.setCharIndex(outCharCount, i-offset, success);
+ glyphStorage.setAuxData(outCharCount++, vjmoFeatures, success);
+ }
+
+ if ((transition.actionFlags & AF_T) != 0) {
+ outChars[outCharCount] = trail;
+ glyphStorage.setCharIndex(outCharCount, i-offset, success);
+ glyphStorage.setAuxData(outCharCount++, tjmoFeatures, success);
+ }
+ }
+
+ state = transition.newState;
+
+ /* Negative next state means stop. */
+ if (state < 0) {
+ break;
+ }
+
+ i += 1;
+ }
+
+ le_int32 inLength = i - inStart;
+ le_int32 outLength = outCharCount - outStart;
+
+ /*
+ * See if the syllable can be composed into a single character. There are 5
+ * possible cases:
+ *
+ * Input Decomposed to Compose to
+ * LV L, V LV
+ * LVT L, V, T LVT
+ * L, V L, V LV, DEL
+ * LV, T L, V, T LVT, DEL
+ * L, V, T L, V, T LVT, DEL, DEL
+ */
+ if ((inLength >= 1 && inLength <= 3) && (outLength == 2 || outLength == 3)) {
+ LEUnicode syllable = 0x0000;
+ LEUnicode lead = outChars[outStart];
+ LEUnicode vowel = outChars[outStart + 1];
+ LEUnicode trail = outLength == 3? outChars[outStart + 2] : TJMO_FIRST;
+
+ /*
+ * If the composition consumes the whole decomposed syllable,
+ * we can use it.
+ */
+ if (compose(lead, vowel, trail, syllable) == outLength) {
+ outCharCount = outStart;
+ outChars[outCharCount] = syllable;
+ glyphStorage.setCharIndex(outCharCount, inStart-offset, success);
+ glyphStorage.setAuxData(outCharCount++, nullFeatures, success);
+
+ /*
+ * Replace the rest of the input characters with DEL.
+ */
+ for(le_int32 d = inStart + 1; d < i; d += 1) {
+ outChars[outCharCount] = 0xFFFF;
+ glyphStorage.setCharIndex(outCharCount, d - offset, success);
+ glyphStorage.setAuxData(outCharCount++, nullFeatures, success);
+ }
+ }
+ }
+ }
+
+ glyphStorage.adoptGlyphCount(outCharCount);
+ return outCharCount;
+}
+
+U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-50.1/layout/HangulLayoutEngine.h b/Build/source/libs/icu/icu-50.1/layout/HangulLayoutEngine.h
new file mode 100644
index 00000000000..70a46c4064f
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/HangulLayoutEngine.h
@@ -0,0 +1,127 @@
+
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2008 - All Rights Reserved
+ *
+ */
+
+#ifndef __HANGULAYOUTENGINE_H
+#define __HANGULAYOUTENGINE_H
+
+#include "LETypes.h"
+#include "LEFontInstance.h"
+#include "LEGlyphFilter.h"
+#include "LayoutEngine.h"
+#include "OpenTypeLayoutEngine.h"
+
+#include "GlyphSubstitutionTables.h"
+#include "GlyphDefinitionTables.h"
+#include "GlyphPositioningTables.h"
+
+U_NAMESPACE_BEGIN
+
+class MPreFixups;
+class LEGlyphStorage;
+
+/**
+ * This class implements OpenType layout for Old Hangul OpenType fonts, as
+ * specified by Microsoft in "Creating and Supporting OpenType Fonts for
+ * The Korean Hangul Script" (http://www.microsoft.com/typography/otfntdev/hangulot/default.htm)
+ *
+ * This class overrides the characterProcessing method to do Hangul character processing.
+ * (See the MS spec. for more details)
+ *
+ * @internal
+ */
+class HangulOpenTypeLayoutEngine : public OpenTypeLayoutEngine
+{
+public:
+ /**
+ * This is the main constructor. It constructs an instance of HangulOpenTypeLayoutEngine for
+ * a particular font, script and language. It takes the GSUB table as a parameter since
+ * LayoutEngine::layoutEngineFactory has to read the GSUB table to know that it has an
+ * Hangul OpenType font.
+ *
+ * @param fontInstance - the font
+ * @param scriptCode - the script
+ * @param langaugeCode - the language
+ * @param gsubTable - the GSUB table
+ * @param success - set to an error code if the operation fails
+ *
+ * @see LayoutEngine::layoutEngineFactory
+ * @see OpenTypeLayoutEngine
+ * @see ScriptAndLangaugeTags.h for script and language codes
+ *
+ * @internal
+ */
+ HangulOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
+ le_int32 typoFlags, const GlyphSubstitutionTableHeader *gsubTable, LEErrorCode &success);
+
+ /**
+ * This constructor is used when the font requires a "canned" GSUB table which can't be known
+ * until after this constructor has been invoked.
+ *
+ * @param fontInstance - the font
+ * @param scriptCode - the script
+ * @param langaugeCode - the language
+ * @param success - set to an error code if the operation fails
+ *
+ * @see OpenTypeLayoutEngine
+ * @see ScriptAndLangaugeTags.h for script and language codes
+ *
+ * @internal
+ */
+ HangulOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
+ le_int32 typoFlags, LEErrorCode &success);
+
+ /**
+ * The destructor, virtual for correct polymorphic invocation.
+ *
+ * @internal
+ */
+ virtual ~HangulOpenTypeLayoutEngine();
+
+ /**
+ * ICU "poor man's RTTI", returns a UClassID for the actual class.
+ *
+ * @stable ICU 2.8
+ */
+ virtual UClassID getDynamicClassID() const;
+
+ /**
+ * ICU "poor man's RTTI", returns a UClassID for this class.
+ *
+ * @stable ICU 2.8
+ */
+ static UClassID getStaticClassID();
+
+protected:
+
+ /**
+ * This method does Hangul OpenType character processing. It assigns the OpenType feature
+ * tags to the characters, and may compose a character sequence into a modern Hangul syllable,
+ * or decompose a modern Hangul syllable if it forms part of an old Hangul syllable.
+ *
+ * Input parameters:
+ * @param chars - the input character context
+ * @param offset - the index of the first character to process
+ * @param count - the number of characters to process
+ * @param max - the number of characters in the input context
+ * @param rightToLeft - <code>TRUE</code> if the characters are in a right to left directional run
+ * @param glyphStorage - the glyph storage object. The glyph and character index arrays will be set.
+ * the auxillary data array will be set to the feature tags.
+ *
+ * Output parameters:
+ * @param success - set to an error code if the operation fails
+ *
+ * @return the output character count
+ *
+ * @internal
+ */
+ virtual le_int32 characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
+ LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success);
+};
+
+U_NAMESPACE_END
+#endif
+
diff --git a/Build/source/libs/icu/icu-50.1/layout/ICUFeatures.h b/Build/source/libs/icu/icu-50.1/layout/ICUFeatures.h
new file mode 100644
index 00000000000..4d9386630e6
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/ICUFeatures.h
@@ -0,0 +1,44 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2010 - All Rights Reserved
+ *
+ */
+
+#ifndef __ICUFEATURES_H
+#define __ICUFEATURES_H
+
+/**
+ * \file
+ * \internal
+ */
+
+#include "LETypes.h"
+#include "OpenTypeTables.h"
+
+U_NAMESPACE_BEGIN
+
+struct FeatureRecord
+{
+ ATag featureTag;
+ Offset featureTableOffset;
+};
+
+struct FeatureTable
+{
+ Offset featureParamsOffset;
+ le_uint16 lookupCount;
+ le_uint16 lookupListIndexArray[ANY_NUMBER];
+};
+
+struct FeatureListTable
+{
+ le_uint16 featureCount;
+ FeatureRecord featureRecordArray[ANY_NUMBER];
+
+ const FeatureTable *getFeatureTable(le_uint16 featureIndex, LETag *featureTag) const;
+
+ const FeatureTable *getFeatureTable(LETag featureTag) const;
+};
+
+U_NAMESPACE_END
+#endif
diff --git a/Build/source/libs/icu/icu-50.1/layout/IndicClassTables.cpp b/Build/source/libs/icu/icu-50.1/layout/IndicClassTables.cpp
new file mode 100644
index 00000000000..5a6f3222cd0
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/IndicClassTables.cpp
@@ -0,0 +1,467 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2011 - All Rights Reserved
+ *
+ */
+
+#include "LETypes.h"
+#include "LEScripts.h"
+#include "OpenTypeTables.h"
+#include "OpenTypeUtilities.h"
+#include "IndicReordering.h"
+
+U_NAMESPACE_BEGIN
+
+// Split matra table indices
+#define _x1 (1 << CF_INDEX_SHIFT)
+#define _x2 (2 << CF_INDEX_SHIFT)
+#define _x3 (3 << CF_INDEX_SHIFT)
+#define _x4 (4 << CF_INDEX_SHIFT)
+#define _x5 (5 << CF_INDEX_SHIFT)
+#define _x6 (6 << CF_INDEX_SHIFT)
+#define _x7 (7 << CF_INDEX_SHIFT)
+#define _x8 (8 << CF_INDEX_SHIFT)
+#define _x9 (9 << CF_INDEX_SHIFT)
+
+// simple classes
+#define _xx (CC_RESERVED)
+#define _ma (CC_VOWEL_MODIFIER | CF_POS_ABOVE)
+#define _mp (CC_VOWEL_MODIFIER | CF_POS_AFTER)
+#define _sa (CC_STRESS_MARK | CF_POS_ABOVE)
+#define _sb (CC_STRESS_MARK | CF_POS_BELOW)
+#define _iv (CC_INDEPENDENT_VOWEL)
+#define _i2 (CC_INDEPENDENT_VOWEL_2)
+#define _i3 (CC_INDEPENDENT_VOWEL_3)
+#define _ct (CC_CONSONANT | CF_CONSONANT)
+#define _cn (CC_CONSONANT_WITH_NUKTA | CF_CONSONANT)
+#define _nu (CC_NUKTA)
+#define _dv (CC_DEPENDENT_VOWEL)
+#define _dl (_dv | CF_POS_BEFORE)
+#define _db (_dv | CF_POS_BELOW)
+#define _da (_dv | CF_POS_ABOVE)
+#define _dr (_dv | CF_POS_AFTER)
+#define _lm (_dv | CF_LENGTH_MARK)
+#define _l1 (CC_SPLIT_VOWEL_PIECE_1 | CF_POS_BEFORE)
+#define _a1 (CC_SPLIT_VOWEL_PIECE_1 | CF_POS_ABOVE)
+#define _b2 (CC_SPLIT_VOWEL_PIECE_2 | CF_POS_BELOW)
+#define _r2 (CC_SPLIT_VOWEL_PIECE_2 | CF_POS_AFTER)
+#define _m2 (CC_SPLIT_VOWEL_PIECE_2 | CF_LENGTH_MARK)
+#define _m3 (CC_SPLIT_VOWEL_PIECE_3 | CF_LENGTH_MARK)
+#define _vr (CC_VIRAMA)
+#define _al (CC_AL_LAKUNA)
+
+// split matras
+#define _s1 (_dv | _x1)
+#define _s2 (_dv | _x2)
+#define _s3 (_dv | _x3)
+#define _s4 (_dv | _x4)
+#define _s5 (_dv | _x5)
+#define _s6 (_dv | _x6)
+#define _s7 (_dv | _x7)
+#define _s8 (_dv | _x8)
+#define _s9 (_dv | _x9)
+
+// consonants with special forms
+// NOTE: this assumes that no consonants with nukta have
+// special forms... (Bengali RA?)
+#define _bb (_ct | CF_BELOW_BASE)
+#define _pb (_ct | CF_POST_BASE)
+#define _vt (_bb | CF_VATTU)
+#define _rv (_vt | CF_REPH)
+#define _rp (_pb | CF_REPH)
+#define _rb (_bb | CF_REPH)
+
+//
+// Character class tables
+//
+static const IndicClassTable::CharClass devaCharClasses[] =
+{
+ _xx, _ma, _ma, _mp, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _iv, // 0900 - 090F
+ _iv, _iv, _iv, _iv, _iv, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, // 0910 - 091F
+ _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _cn, _ct, _ct, _ct, _ct, _ct, _ct, // 0920 - 092F
+ _rv, _cn, _ct, _ct, _cn, _ct, _ct, _ct, _ct, _ct, _xx, _xx, _nu, _xx, _dr, _dl, // 0930 - 093F
+ _dr, _db, _db, _db, _db, _da, _da, _da, _da, _dr, _dr, _dr, _dr, _vr, _xx, _xx, // 0940 - 094F
+ _xx, _sa, _sb, _sa, _sa, _xx, _xx, _xx, _cn, _cn, _cn, _cn, _cn, _cn, _cn, _cn, // 0950 - 095F
+ _iv, _iv, _db, _db, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, // 0960 - 096F
+ _xx // 0970
+};
+
+static const IndicClassTable::CharClass bengCharClasses[] =
+{
+ _xx, _ma, _mp, _mp, _xx, _i2, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _xx, _xx, _i2, // 0980 - 098F
+ _iv, _xx, _xx, _iv, _iv, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, // 0990 - 099F
+ _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _xx, _ct, _ct, _bb, _ct, _ct, _pb, // 09A0 - 09AF
+ _rv, _xx, _ct, _xx, _xx, _xx, _ct, _ct, _ct, _ct, _xx, _xx, _nu, _xx, _r2, _dl, // 09B0 - 09BF
+ _dr, _db, _db, _db, _db, _xx, _xx, _l1, _dl, _xx, _xx, _s1, _s2, _vr, _xx, _xx, // 09C0 - 09CF
+ _xx, _xx, _xx, _xx, _xx, _xx, _xx, _m2, _xx, _xx, _xx, _xx, _cn, _cn, _xx, _cn, // 09D0 - 09DF
+ _iv, _iv, _dv, _dv, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, // 09E0 - 09EF
+ _rv, _ct, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx // 09F0 - 09FA
+};
+
+static const IndicClassTable::CharClass punjCharClasses[] =
+{
+ _xx, _ma, _ma, _mp, _xx, _iv, _iv, _iv, _iv, _iv, _iv, _xx, _xx, _xx, _xx, _iv, // 0A00 - 0A0F
+ _iv, _xx, _xx, _i3, _iv, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, // 0A10 - 0A1F
+ _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _xx, _ct, _ct, _ct, _ct, _ct, _bb, // 0A20 - 0A2F
+ _vt, _xx, _ct, _cn, _xx, _bb, _cn, _xx, _ct, _bb, _xx, _xx, _nu, _xx, _dr, _dl, // 0A30 - 0A3F
+ _dr, _b2, _db, _xx, _xx, _xx, _xx, _da, _da, _xx, _xx, _a1, _da, _vr, _xx, _xx, // 0A40 - 0A4F
+ _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _cn, _cn, _cn, _ct, _xx, _cn, _xx, // 0A50 - 0A5F
+ _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, // 0A60 - 0A6F
+ _ma, _ma, _xx, _xx, _xx // 0A70 - 0A74
+};
+
+static const IndicClassTable::CharClass gujrCharClasses[] =
+{
+ _xx, _ma, _ma, _mp, _xx, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _xx, _iv, _xx, _iv, // 0A80 - 0A8F
+ _iv, _iv, _xx, _iv, _iv, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, // 0A90 - 0A9F
+ _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _xx, _ct, _ct, _ct, _ct, _ct, _ct, // 0AA0 - 0AAF
+ _rv, _xx, _ct, _ct, _xx, _ct, _ct, _ct, _ct, _ct, _xx, _xx, _nu, _xx, _dr, _dl, // 0AB0 - 0ABF
+ _dr, _db, _db, _db, _db, _da, _xx, _da, _da, _dr, _xx, _dr, _dr, _vr, _xx, _xx, // 0AC0 - 0ACF
+ _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, // 0AD0 - 0ADF
+ _iv, _iv, _db, _db, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx // 0AE0 - 0AEF
+};
+
+#if 1
+static const IndicClassTable::CharClass oryaCharClasses[] =
+{
+ _xx, _ma, _mp, _mp, _xx, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _xx, _xx, _iv, /* 0B00 - 0B0F */
+ _iv, _xx, _xx, _iv, _iv, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _ct, _bb, /* 0B10 - 0B1F */
+ _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _xx, _bb, _bb, _bb, _bb, _bb, _pb, /* 0B20 - 0B2F */
+ _rb, _xx, _bb, _bb, _xx, _bb, _bb, _bb, _bb, _bb, _xx, _xx, _nu, _xx, _dr, _da, /* 0B30 - 0B3F */
+ _dr, _db, _db, _db, _xx, _xx, _xx, _dl, _s1, _xx, _xx, _s2, _s3, _vr, _xx, _xx, /* 0B40 - 0B4F */
+ _xx, _xx, _xx, _xx, _xx, _xx, _da, _dr, _xx, _xx, _xx, _xx, _cn, _cn, _xx, _pb, /* 0B50 - 0B5F */
+ _iv, _iv, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, /* 0B60 - 0B6F */
+ _xx, _bb /* 0B70 - 0B71 */
+};
+#else
+static const IndicClassTable::CharClass oryaCharClasses[] =
+{
+ _xx, _ma, _mp, _mp, _xx, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _xx, _xx, _iv, // 0B00 - 0B0F
+ _iv, _xx, _xx, _iv, _iv, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, // 0B10 - 0B1F
+ _ct, _ct, _ct, _ct, _bb, _ct, _ct, _ct, _bb, _xx, _ct, _ct, _bb, _bb, _bb, _pb, // 0B20 - 0B2F
+ _rb, _xx, _bb, _bb, _xx, _ct, _ct, _ct, _ct, _ct, _xx, _xx, _nu, _xx, _r2, _da, // 0B30 - 0B3F
+ _dr, _db, _db, _db, _xx, _xx, _xx, _l1, _s1, _xx, _xx, _s2, _s3, _vr, _xx, _xx, // 0B40 - 0B4F
+ _xx, _xx, _xx, _xx, _xx, _xx, _m2, _m2, _xx, _xx, _xx, _xx, _cn, _cn, _xx, _cn, // 0B50 - 0B5F
+ _iv, _iv, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, // 0B60 - 0B6F
+ _xx, _ct // 0B70 - 0B71
+};
+#endif
+
+static const IndicClassTable::CharClass tamlCharClasses[] =
+{
+ _xx, _xx, _ma, _xx, _xx, _iv, _iv, _iv, _iv, _iv, _iv, _xx, _xx, _xx, _iv, _iv, // 0B80 - 0B8F
+ _iv, _xx, _iv, _iv, _iv, _ct, _xx, _xx, _xx, _ct, _ct, _xx, _ct, _xx, _ct, _ct, // 0B90 - 0B9F
+ _xx, _xx, _xx, _ct, _ct, _xx, _xx, _xx, _ct, _ct, _ct, _xx, _xx, _xx, _ct, _ct, // 0BA0 - 0BAF
+ _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _xx, _xx, _xx, _xx, _r2, _dr, // 0BB0 - 0BBF
+ _da, _dr, _dr, _xx, _xx, _xx, _l1, _l1, _dl, _xx, _s1, _s2, _s3, _vr, _xx, _xx, // 0BC0 - 0BCF
+ _xx, _xx, _xx, _xx, _xx, _xx, _xx, _m2, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, // 0BD0 - 0BDF
+ _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, // 0BE0 - 0BEF
+ _xx, _xx, _xx // 0BF0 - 0BF2
+};
+
+// FIXME: Should some of the bb's be pb's? (KA, NA, MA, YA, VA, etc. (approx 13))
+// U+C43 and U+C44 are _lm here not _dr. Similar to the situation with U+CC3 and
+// U+CC4 in Kannada below.
+static const IndicClassTable::CharClass teluCharClasses[] =
+{
+ _xx, _mp, _mp, _mp, _xx, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _xx, _iv, _iv, // 0C00 - 0C0F
+ _iv, _xx, _iv, _iv, _iv, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, // 0C10 - 0C1F
+ _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _xx, _bb, _bb, _bb, _bb, _bb, _bb, // 0C20 - 0C2F
+ _bb, _bb, _bb, _bb, _xx, _bb, _bb, _bb, _bb, _bb, _xx, _xx, _xx, _xx, _da, _da, // 0C30 - 0C3F
+ _da, _dr, _dr, _lm, _lm, _xx, _a1, _da, _s1, _xx, _da, _da, _da, _vr, _xx, _xx, // 0C40 - 0C4F
+ _xx, _xx, _xx, _xx, _xx, _da, _m2, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, // 0C50 - 0C5F
+ _iv, _iv, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx // 0C60 - 0C6F
+};
+
+// U+CC3 and U+CC4 are _lm here not _dr since the Kannada rendering
+// rules want them below and to the right of the entire cluster
+//
+// There's some information about this in:
+//
+// http://brahmi.sourceforge.net/docs/KannadaComputing.html
+static const IndicClassTable::CharClass kndaCharClasses[] =
+{
+ _xx, _xx, _mp, _mp, _xx, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _xx, _iv, _iv, // 0C80 - 0C8F
+ _iv, _xx, _iv, _iv, _iv, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, // 0C90 - 0C9F
+ _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _xx, _bb, _bb, _bb, _bb, _bb, _bb, // 0CA0 - 0CAF
+ _rb, _ct, _bb, _bb, _xx, _bb, _bb, _bb, _bb, _bb, _xx, _xx, _xx, _xx, _dr, _da, // 0CB0 - 0CBF
+ _s1, _dr, _r2, _lm, _lm, _xx, _a1, _s2, _s3, _xx, _s4, _s5, _da, _vr, _xx, _xx, // 0CC0 - 0CCF
+ _xx, _xx, _xx, _xx, _xx, _m3, _m2, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _ct, _xx, // 0CD0 - 0CDF
+ _iv, _iv, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx // 0CE0 - 0CEF
+};
+
+// FIXME: this is correct for old-style Malayalam (MAL) but not for reformed Malayalam (MLR)
+// FIXME: should there be a REPH for old-style Malayalam?
+static const IndicClassTable::CharClass mlymCharClasses[] =
+{
+ _xx, _xx, _mp, _mp, _xx, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _xx, _iv, _iv, // 0D00 - 0D0F
+ _iv, _xx, _iv, _iv, _iv, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, // 0D10 - 0D1F
+ _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _xx, _ct, _ct, _ct, _ct, _ct, _pb, // 0D20 - 0D2F
+ _pb, _cn, _bb, _ct, _ct, _pb, _ct, _ct, _ct, _ct, _xx, _xx, _xx, _xx, _r2, _dr, // 0D30 - 0D3F
+ _dr, _dr, _dr, _dr, _xx, _xx, _l1, _l1, _dl, _xx, _s1, _s2, _s3, _vr, _xx, _xx, // 0D40 - 0D4F
+ _xx, _xx, _xx, _xx, _xx, _xx, _xx, _m2, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, // 0D50 - 0D5F
+ _iv, _iv, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx // 0D60 - 0D6F
+};
+
+static const IndicClassTable::CharClass sinhCharClasses[] =
+{
+ _xx, _xx, _mp, _mp, _xx, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _iv, // 0D80 - 0D8F
+ _iv, _iv, _iv, _iv, _iv, _iv, _iv, _xx, _xx, _xx, _ct, _ct, _ct, _ct, _ct, _ct, // 0D90 - 0D9F
+ _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, // 0DA0 - 0DAF
+ _ct, _ct, _xx, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _xx, _ct, _xx, _xx, // 0DB0 - 0DBF
+ _ct, _ct, _ct, _ct, _ct, _ct, _ct, _xx, _xx, _xx, _al, _xx, _xx, _xx, _xx, _dr, // 0DC0 - 0DCF
+ _dr, _dr, _da, _da, _db, _xx, _db, _xx, _dr, _dl, _s1, _dl, _s2, _s3, _s4, _dr, // 0DD0 - 0DDF
+ _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, // 0DE0 - 0DEF
+ _xx, _xx, _dr, _dr, _xx // 0DF0 - 0DF4
+};
+
+//
+// Split matra tables
+//
+static const SplitMatra bengSplitTable[] = {{0x09C7, 0x09BE}, {0x09C7, 0x09D7}};
+
+static const SplitMatra oryaSplitTable[] = {{0x0B47, 0x0B56}, {0x0B47, 0x0B3E}, {0x0B47, 0x0B57}};
+
+static const SplitMatra tamlSplitTable[] = {{0x0BC6, 0x0BBE}, {0x0BC7, 0x0BBE}, {0x0BC6, 0x0BD7}};
+
+static const SplitMatra teluSplitTable[] = {{0x0C46, 0x0C56}};
+
+static const SplitMatra kndaSplitTable[] = {{0x0CBF, 0x0CD5}, {0x0CC6, 0x0CD5}, {0x0CC6, 0x0CD6}, {0x0CC6, 0x0CC2},
+ {0x0CC6, 0x0CC2, 0x0CD5}};
+
+static const SplitMatra mlymSplitTable[] = {{0x0D46, 0x0D3E}, {0x0D47, 0x0D3E}, {0x0D46, 0x0D57}};
+
+
+static const SplitMatra sinhSplitTable[] = {{0x0DD9, 0x0DCA}, {0x0DD9, 0x0DCF}, {0x0DD9, 0x0DCF, 0x0DCA},
+ {0x0DD9, 0x0DDF}};
+//
+// Script Flags
+//
+
+// FIXME: post 'GSUB' reordering of MATRA_PRE's for Malayalam and Tamil
+// FIXME: reformed Malayalam needs to reorder VATTU to before base glyph...
+// FIXME: not sure passing ZWJ/ZWNJ is best way to render Malayalam Cillu...
+// FIXME: eyelash RA only for Devanagari??
+#define DEVA_SCRIPT_FLAGS (SF_EYELASH_RA | SF_NO_POST_BASE_LIMIT | SF_FILTER_ZERO_WIDTH)
+#define BENG_SCRIPT_FLAGS (SF_REPH_AFTER_BELOW | SF_NO_POST_BASE_LIMIT | SF_FILTER_ZERO_WIDTH)
+#define PUNJ_SCRIPT_FLAGS (SF_NO_POST_BASE_LIMIT | SF_FILTER_ZERO_WIDTH)
+#define GUJR_SCRIPT_FLAGS (SF_NO_POST_BASE_LIMIT | SF_FILTER_ZERO_WIDTH)
+#define ORYA_SCRIPT_FLAGS (SF_REPH_AFTER_BELOW | SF_NO_POST_BASE_LIMIT | SF_FILTER_ZERO_WIDTH)
+#define TAML_SCRIPT_FLAGS (SF_MPRE_FIXUP | SF_NO_POST_BASE_LIMIT | SF_FILTER_ZERO_WIDTH)
+#define TELU_SCRIPT_FLAGS (SF_MATRAS_AFTER_BASE | SF_FILTER_ZERO_WIDTH | 3)
+#define KNDA_SCRIPT_FLAGS (SF_MATRAS_AFTER_BASE | SF_FILTER_ZERO_WIDTH | 3)
+#define MLYM_SCRIPT_FLAGS (SF_MPRE_FIXUP | SF_NO_POST_BASE_LIMIT /*| SF_FILTER_ZERO_WIDTH*/)
+#define SINH_SCRIPT_FLAGS (SF_NO_POST_BASE_LIMIT)
+
+//
+// Indic Class Tables
+//
+static const IndicClassTable devaClassTable = {0x0900, 0x0970, 2, DEVA_SCRIPT_FLAGS, devaCharClasses, NULL};
+
+static const IndicClassTable bengClassTable = {0x0980, 0x09FA, 3, BENG_SCRIPT_FLAGS, bengCharClasses, bengSplitTable};
+
+static const IndicClassTable punjClassTable = {0x0A00, 0x0A74, 2, PUNJ_SCRIPT_FLAGS, punjCharClasses, NULL};
+
+static const IndicClassTable gujrClassTable = {0x0A80, 0x0AEF, 2, GUJR_SCRIPT_FLAGS, gujrCharClasses, NULL};
+
+static const IndicClassTable oryaClassTable = {0x0B00, 0x0B71, 3, ORYA_SCRIPT_FLAGS, oryaCharClasses, oryaSplitTable};
+
+static const IndicClassTable tamlClassTable = {0x0B80, 0x0BF2, 3, TAML_SCRIPT_FLAGS, tamlCharClasses, tamlSplitTable};
+
+static const IndicClassTable teluClassTable = {0x0C00, 0x0C6F, 3, TELU_SCRIPT_FLAGS, teluCharClasses, teluSplitTable};
+
+static const IndicClassTable kndaClassTable = {0x0C80, 0x0CEF, 4, KNDA_SCRIPT_FLAGS, kndaCharClasses, kndaSplitTable};
+
+static const IndicClassTable mlymClassTable = {0x0D00, 0x0D6F, 3, MLYM_SCRIPT_FLAGS, mlymCharClasses, mlymSplitTable};
+
+static const IndicClassTable sinhClassTable = {0x0D80, 0x0DF4, 4, SINH_SCRIPT_FLAGS, sinhCharClasses, sinhSplitTable};
+
+//
+// IndicClassTable addresses
+//
+static const IndicClassTable * const indicClassTables[scriptCodeCount] = {
+ NULL, /* 'zyyy' (COMMON) */
+ NULL, /* 'qaai' (INHERITED) */
+ NULL, /* 'arab' (ARABIC) */
+ NULL, /* 'armn' (ARMENIAN) */
+ &bengClassTable, /* 'beng' (BENGALI) */
+ NULL, /* 'bopo' (BOPOMOFO) */
+ NULL, /* 'cher' (CHEROKEE) */
+ NULL, /* 'copt' (COPTIC) */
+ NULL, /* 'cyrl' (CYRILLIC) */
+ NULL, /* 'dsrt' (DESERET) */
+ &devaClassTable, /* 'deva' (DEVANAGARI) */
+ NULL, /* 'ethi' (ETHIOPIC) */
+ NULL, /* 'geor' (GEORGIAN) */
+ NULL, /* 'goth' (GOTHIC) */
+ NULL, /* 'grek' (GREEK) */
+ &gujrClassTable, /* 'gujr' (GUJARATI) */
+ &punjClassTable, /* 'guru' (GURMUKHI) */
+ NULL, /* 'hani' (HAN) */
+ NULL, /* 'hang' (HANGUL) */
+ NULL, /* 'hebr' (HEBREW) */
+ NULL, /* 'hira' (HIRAGANA) */
+ &kndaClassTable, /* 'knda' (KANNADA) */
+ NULL, /* 'kata' (KATAKANA) */
+ NULL, /* 'khmr' (KHMER) */
+ NULL, /* 'laoo' (LAO) */
+ NULL, /* 'latn' (LATIN) */
+ &mlymClassTable, /* 'mlym' (MALAYALAM) */
+ NULL, /* 'mong' (MONGOLIAN) */
+ NULL, /* 'mymr' (MYANMAR) */
+ NULL, /* 'ogam' (OGHAM) */
+ NULL, /* 'ital' (OLD-ITALIC) */
+ &oryaClassTable, /* 'orya' (ORIYA) */
+ NULL, /* 'runr' (RUNIC) */
+ &sinhClassTable, /* 'sinh' (SINHALA) */
+ NULL, /* 'syrc' (SYRIAC) */
+ &tamlClassTable, /* 'taml' (TAMIL) */
+ &teluClassTable, /* 'telu' (TELUGU) */
+ NULL, /* 'thaa' (THAANA) */
+ NULL, /* 'thai' (THAI) */
+ NULL, /* 'tibt' (TIBETAN) */
+ NULL, /* 'cans' (CANADIAN-ABORIGINAL) */
+ NULL, /* 'yiii' (YI) */
+ NULL, /* 'tglg' (TAGALOG) */
+ NULL, /* 'hano' (HANUNOO) */
+ NULL, /* 'buhd' (BUHID) */
+ NULL, /* 'tagb' (TAGBANWA) */
+ NULL, /* 'brai' (BRAILLE) */
+ NULL, /* 'cprt' (CYPRIOT) */
+ NULL, /* 'limb' (LIMBU) */
+ NULL, /* 'linb' (LINEAR_B) */
+ NULL, /* 'osma' (OSMANYA) */
+ NULL, /* 'shaw' (SHAVIAN) */
+ NULL, /* 'tale' (TAI_LE) */
+ NULL, /* 'ugar' (UGARITIC) */
+ NULL, /* 'hrkt' (KATAKANA_OR_HIRAGANA) */
+ NULL, /* 'bugi' (BUGINESE) */
+ NULL, /* 'glag' (GLAGOLITIC) */
+ NULL, /* 'khar' (KHAROSHTHI) */
+ NULL, /* 'sylo' (SYLOTI_NAGRI) */
+ NULL, /* 'talu' (NEW_TAI_LUE) */
+ NULL, /* 'tfng' (TIFINAGH) */
+ NULL, /* 'xpeo' (OLD_PERSIAN) */
+ NULL, /* 'bali' (BALINESE) */
+ NULL, /* 'batk' (BATK) */
+ NULL, /* 'blis' (BLIS) */
+ NULL, /* 'brah' (BRAH) */
+ NULL, /* 'cham' (CHAM) */
+ NULL, /* 'cirt' (CIRT) */
+ NULL, /* 'cyrs' (CYRS) */
+ NULL, /* 'egyd' (EGYD) */
+ NULL, /* 'egyh' (EGYH) */
+ NULL, /* 'egyp' (EGYP) */
+ NULL, /* 'geok' (GEOK) */
+ NULL, /* 'hans' (HANS) */
+ NULL, /* 'hant' (HANT) */
+ NULL, /* 'hmng' (HMNG) */
+ NULL, /* 'hung' (HUNG) */
+ NULL, /* 'inds' (INDS) */
+ NULL, /* 'java' (JAVA) */
+ NULL, /* 'kali' (KALI) */
+ NULL, /* 'latf' (LATF) */
+ NULL, /* 'latg' (LATG) */
+ NULL, /* 'lepc' (LEPC) */
+ NULL, /* 'lina' (LINA) */
+ NULL, /* 'mand' (MAND) */
+ NULL, /* 'maya' (MAYA) */
+ NULL, /* 'mero' (MERO) */
+ NULL, /* 'nko ' (NKO) */
+ NULL, /* 'orkh' (ORKH) */
+ NULL, /* 'perm' (PERM) */
+ NULL, /* 'phag' (PHAGS_PA) */
+ NULL, /* 'phnx' (PHOENICIAN) */
+ NULL, /* 'plrd' (PLRD) */
+ NULL, /* 'roro' (RORO) */
+ NULL, /* 'sara' (SARA) */
+ NULL, /* 'syre' (SYRE) */
+ NULL, /* 'syrj' (SYRJ) */
+ NULL, /* 'syrn' (SYRN) */
+ NULL, /* 'teng' (TENG) */
+ NULL, /* 'vai ' (VAII) */
+ NULL, /* 'visp' (VISP) */
+ NULL, /* 'xsux' (CUNEIFORM) */
+ NULL, /* 'zxxx' (ZXXX) */
+ NULL, /* 'zzzz' (UNKNOWN) */
+ NULL, /* 'cari' (CARI) */
+ NULL, /* 'jpan' (JPAN) */
+ NULL, /* 'lana' (LANA) */
+ NULL, /* 'lyci' (LYCI) */
+ NULL, /* 'lydi' (LYDI) */
+ NULL, /* 'olck' (OLCK) */
+ NULL, /* 'rjng' (RJNG) */
+ NULL, /* 'saur' (SAUR) */
+ NULL, /* 'sgnw' (SGNW) */
+ NULL, /* 'sund' (SUND) */
+ NULL, /* 'moon' (MOON) */
+ NULL, /* 'mtei' (MTEI) */
+ NULL, /* 'armi' (ARMI) */
+ NULL, /* 'avst' (AVST) */
+ NULL, /* 'cakm' (CAKM) */
+ NULL, /* 'kore' (KORE) */
+ NULL, /* 'kthi' (KTHI) */
+ NULL, /* 'mani' (MANI) */
+ NULL, /* 'phli' (PHLI) */
+ NULL, /* 'phlp' (PHLP) */
+ NULL, /* 'phlv' (PHLV) */
+ NULL, /* 'prti' (PRTI) */
+ NULL, /* 'samr' (SAMR) */
+ NULL, /* 'tavt' (TAVT) */
+ NULL, /* 'zmth' (ZMTH) */
+ NULL, /* 'zsym' (ZSYM) */
+ NULL, /* 'bamu' (BAMUM) */
+ NULL, /* 'lisu' (LISU) */
+ NULL, /* 'nkgb' (NKGB) */
+ NULL /* 'sarb' (OLD_SOUTH_ARABIAN) */
+};
+
+IndicClassTable::CharClass IndicClassTable::getCharClass(LEUnicode ch) const
+{
+ if (ch == C_SIGN_ZWJ) {
+ return CF_CONSONANT | CC_ZERO_WIDTH_MARK;
+ }
+
+ if (ch == C_SIGN_ZWNJ) {
+ return CC_ZERO_WIDTH_MARK;
+ }
+
+ if (ch < firstChar || ch > lastChar) {
+ return CC_RESERVED;
+ }
+
+ return classTable[ch - firstChar];
+}
+
+const IndicClassTable *IndicClassTable::getScriptClassTable(le_int32 scriptCode)
+{
+ if (scriptCode < 0 || scriptCode >= scriptCodeCount) {
+ return NULL;
+ }
+
+ return indicClassTables[scriptCode];
+}
+
+le_int32 IndicReordering::getWorstCaseExpansion(le_int32 scriptCode)
+{
+ const IndicClassTable *classTable = IndicClassTable::getScriptClassTable(scriptCode);
+
+ if (classTable == NULL) {
+ return 1;
+ }
+
+ return classTable->getWorstCaseExpansion();
+}
+
+le_bool IndicReordering::getFilterZeroWidth(le_int32 scriptCode)
+{
+ const IndicClassTable *classTable = IndicClassTable::getScriptClassTable(scriptCode);
+
+ if (classTable == NULL) {
+ return TRUE;
+ }
+
+ return classTable->getFilterZeroWidth();
+}
+
+U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-50.1/layout/IndicLayoutEngine.cpp b/Build/source/libs/icu/icu-50.1/layout/IndicLayoutEngine.cpp
new file mode 100644
index 00000000000..5bc0435af63
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/IndicLayoutEngine.cpp
@@ -0,0 +1,135 @@
+
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2009 - All Rights Reserved
+ *
+ */
+
+#include "LETypes.h"
+#include "LayoutEngine.h"
+#include "OpenTypeLayoutEngine.h"
+#include "IndicLayoutEngine.h"
+#include "ScriptAndLanguageTags.h"
+
+#include "GlyphSubstitutionTables.h"
+#include "GlyphDefinitionTables.h"
+#include "GlyphPositioningTables.h"
+
+#include "GDEFMarkFilter.h"
+#include "LEGlyphStorage.h"
+
+#include "IndicReordering.h"
+
+U_NAMESPACE_BEGIN
+
+UOBJECT_DEFINE_RTTI_IMPLEMENTATION(IndicOpenTypeLayoutEngine)
+
+IndicOpenTypeLayoutEngine::IndicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
+ le_int32 typoFlags, le_bool version2, const GlyphSubstitutionTableHeader *gsubTable, LEErrorCode &success)
+ : OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable, success), fMPreFixups(NULL)
+{
+ if ( version2 ) {
+ fFeatureMap = IndicReordering::getv2FeatureMap(fFeatureMapCount);
+ } else {
+ fFeatureMap = IndicReordering::getFeatureMap(fFeatureMapCount);
+ }
+ fFeatureOrder = TRUE;
+ fVersion2 = version2;
+ fFilterZeroWidth = IndicReordering::getFilterZeroWidth(fScriptCode);
+}
+
+IndicOpenTypeLayoutEngine::IndicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, le_int32 typoFlags, LEErrorCode &success)
+ : OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, success), fMPreFixups(NULL)
+{
+ fFeatureMap = IndicReordering::getFeatureMap(fFeatureMapCount);
+ fFeatureOrder = TRUE;
+ fVersion2 = FALSE;
+}
+
+IndicOpenTypeLayoutEngine::~IndicOpenTypeLayoutEngine()
+{
+ // nothing to do
+}
+
+// Input: characters, tags
+// Output: glyphs, char indices
+le_int32 IndicOpenTypeLayoutEngine::glyphProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
+ LEGlyphStorage &glyphStorage, LEErrorCode &success)
+{
+ if (LE_FAILURE(success)) {
+ return 0;
+ }
+
+ if (chars == NULL || offset < 0 || count < 0 || max < 0 || offset >= max || offset + count > max) {
+ success = LE_ILLEGAL_ARGUMENT_ERROR;
+ return 0;
+ }
+
+ le_int32 retCount = OpenTypeLayoutEngine::glyphProcessing(chars, offset, count, max, rightToLeft, glyphStorage, success);
+
+ if (LE_FAILURE(success)) {
+ return 0;
+ }
+
+ if (fVersion2) {
+ IndicReordering::finalReordering(glyphStorage,retCount);
+ IndicReordering::applyPresentationForms(glyphStorage,retCount);
+ OpenTypeLayoutEngine::glyphSubstitution(count,max, rightToLeft, glyphStorage, success);
+ } else {
+ IndicReordering::adjustMPres(fMPreFixups, glyphStorage, success);
+ }
+ return retCount;
+}
+
+// Input: characters
+// Output: characters, char indices, tags
+// Returns: output character count
+le_int32 IndicOpenTypeLayoutEngine::characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
+ LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success)
+{
+ if (LE_FAILURE(success)) {
+ return 0;
+ }
+
+ if (chars == NULL || offset < 0 || count < 0 || max < 0 || offset >= max || offset + count > max) {
+ success = LE_ILLEGAL_ARGUMENT_ERROR;
+ return 0;
+ }
+
+ le_int32 worstCase = count * IndicReordering::getWorstCaseExpansion(fScriptCode);
+
+ outChars = LE_NEW_ARRAY(LEUnicode, worstCase);
+
+ if (outChars == NULL) {
+ success = LE_MEMORY_ALLOCATION_ERROR;
+ return 0;
+ }
+
+ glyphStorage.allocateGlyphArray(worstCase, rightToLeft, success);
+ glyphStorage.allocateAuxData(success);
+
+ if (LE_FAILURE(success)) {
+ LE_DELETE_ARRAY(outChars);
+ return 0;
+ }
+
+ // NOTE: assumes this allocates featureTags...
+ // (probably better than doing the worst case stuff here...)
+
+ le_int32 outCharCount;
+ if (fVersion2) {
+ outCharCount = IndicReordering::v2process(&chars[offset], count, fScriptCode, outChars, glyphStorage);
+ } else {
+ outCharCount = IndicReordering::reorder(&chars[offset], count, fScriptCode, outChars, glyphStorage, &fMPreFixups, success);
+ }
+
+ if (LE_FAILURE(success)) {
+ LE_DELETE_ARRAY(outChars);
+ return 0;
+ }
+
+ glyphStorage.adoptGlyphCount(outCharCount);
+ return outCharCount;
+}
+
+U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-50.1/layout/IndicLayoutEngine.h b/Build/source/libs/icu/icu-50.1/layout/IndicLayoutEngine.h
new file mode 100644
index 00000000000..ff0b83cf001
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/IndicLayoutEngine.h
@@ -0,0 +1,167 @@
+
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2009 - All Rights Reserved
+ *
+ */
+
+#ifndef __INDICLAYOUTENGINE_H
+#define __INDICLAYOUTENGINE_H
+
+#include "LETypes.h"
+#include "LEFontInstance.h"
+#include "LEGlyphFilter.h"
+#include "LayoutEngine.h"
+#include "OpenTypeLayoutEngine.h"
+
+#include "GlyphSubstitutionTables.h"
+#include "GlyphDefinitionTables.h"
+#include "GlyphPositioningTables.h"
+
+U_NAMESPACE_BEGIN
+
+class MPreFixups;
+class LEGlyphStorage;
+
+/**
+ * This class implements OpenType layout for Indic OpenType fonts, as
+ * specified by Microsoft in "Creating and Supporting OpenType Fonts for
+ * Indic Scripts" (http://www.microsoft.com/typography/otspec/indicot/default.htm)
+ *
+ * This class overrides the characterProcessing method to do Indic character processing
+ * and reordering, and the glyphProcessing method to implement post-GSUB processing for
+ * left matras. (See the MS spec. for more details)
+ *
+ * @internal
+ */
+class IndicOpenTypeLayoutEngine : public OpenTypeLayoutEngine
+{
+public:
+ /**
+ * This is the main constructor. It constructs an instance of IndicOpenTypeLayoutEngine for
+ * a particular font, script and language. It takes the GSUB table as a parameter since
+ * LayoutEngine::layoutEngineFactory has to read the GSUB table to know that it has an
+ * Indic OpenType font.
+ *
+ * @param fontInstance - the font
+ * @param scriptCode - the script
+ * @param langaugeCode - the language
+ * @param gsubTable - the GSUB table
+ * @param success - set to an error code if the operation fails
+ *
+ * @see LayoutEngine::layoutEngineFactory
+ * @see OpenTypeLayoutEngine
+ * @see ScriptAndLangaugeTags.h for script and language codes
+ *
+ * @internal
+ */
+ IndicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
+ le_int32 typoFlags, le_bool version2, const GlyphSubstitutionTableHeader *gsubTable, LEErrorCode &success);
+
+ /**
+ * This constructor is used when the font requires a "canned" GSUB table which can't be known
+ * until after this constructor has been invoked.
+ *
+ * @param fontInstance - the font
+ * @param scriptCode - the script
+ * @param langaugeCode - the language
+ * @param success - set to an error code if the operation fails
+ *
+ * @see OpenTypeLayoutEngine
+ * @see ScriptAndLangaugeTags.h for script and language codes
+ *
+ * @internal
+ */
+ IndicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
+ le_int32 typoFlags, LEErrorCode &success);
+
+ /**
+ * The destructor, virtual for correct polymorphic invocation.
+ *
+ * @internal
+ */
+ virtual ~IndicOpenTypeLayoutEngine();
+
+ /**
+ * ICU "poor man's RTTI", returns a UClassID for the actual class.
+ *
+ * @stable ICU 2.8
+ */
+ virtual UClassID getDynamicClassID() const;
+
+ /**
+ * ICU "poor man's RTTI", returns a UClassID for this class.
+ *
+ * @stable ICU 2.8
+ */
+ static UClassID getStaticClassID();
+
+protected:
+
+ /**
+ * This method does Indic OpenType character processing. It assigns the OpenType feature
+ * tags to the characters, and may generate output characters which have been reordered. For
+ * some Indic scripts, it may also split some vowels, resulting in more output characters
+ * than input characters.
+ *
+ * Input parameters:
+ * @param chars - the input character context
+ * @param offset - the index of the first character to process
+ * @param count - the number of characters to process
+ * @param max - the number of characters in the input context
+ * @param rightToLeft - <code>TRUE</code> if the characters are in a right to left directional run
+ * @param glyphStorage - the glyph storage object. The glyph and character index arrays will be set.
+ * the auxillary data array will be set to the feature tags.
+ *
+ * Output parameters:
+ * @param success - set to an error code if the operation fails
+ *
+ * @return the output character count
+ *
+ * @internal
+ */
+ virtual le_int32 characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
+ LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success);
+
+ /**
+ * This method does character to glyph mapping, applies the GSUB table and applies
+ * any post GSUB fixups for left matras. It calls OpenTypeLayoutEngine::glyphProcessing
+ * to do the character to glyph mapping, and apply the GSUB table.
+ *
+ * Note that in the case of "canned" GSUB tables, the output glyph indices may be
+ * "fake" glyph indices that need to be converted to "real" glyph indices by the
+ * glyphPostProcessing method.
+ *
+ * Input parameters:
+ * @param chars - the input character context
+ * @param offset - the index of the first character to process
+ * @param count - the number of characters to process
+ * @param max - the number of characters in the input context
+ * @param rightToLeft - <code>TRUE</code> if the characters are in a right to left directional run
+ * @param featureTags - the feature tag array
+ * @param glyphStorage - the glyph storage object. The glyph and char index arrays will be set.
+ *
+ * Output parameters:
+ * @param success - set to an error code if the operation fails
+ *
+ * @return the number of glyphs in the output glyph index array
+ *
+ * Note: if the character index array was already set by the characterProcessing
+ * method, this method won't change it.
+ *
+ * @internal
+ */
+ virtual le_int32 glyphProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
+ LEGlyphStorage &glyphStorage, LEErrorCode &success);
+
+ le_bool fVersion2;
+
+private:
+
+ MPreFixups *fMPreFixups;
+
+};
+
+U_NAMESPACE_END
+#endif
+
diff --git a/Build/source/libs/icu/icu-50.1/layout/IndicRearrangement.h b/Build/source/libs/icu/icu-50.1/layout/IndicRearrangement.h
new file mode 100644
index 00000000000..48b1d08adae
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/IndicRearrangement.h
@@ -0,0 +1,65 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
+ *
+ */
+
+#ifndef __INDICREARRANGEMENT_H
+#define __INDICREARRANGEMENT_H
+
+/**
+ * \file
+ * \internal
+ */
+
+#include "LETypes.h"
+#include "LayoutTables.h"
+#include "StateTables.h"
+#include "MorphTables.h"
+#include "MorphStateTables.h"
+
+U_NAMESPACE_BEGIN
+
+struct IndicRearrangementSubtableHeader : MorphStateTableHeader
+{
+};
+
+enum IndicRearrangementFlags
+{
+ irfMarkFirst = 0x8000,
+ irfDontAdvance = 0x4000,
+ irfMarkLast = 0x2000,
+ irfReserved = 0x1FF0,
+ irfVerbMask = 0x000F
+};
+
+enum IndicRearrangementVerb
+{
+ irvNoAction = 0x0000, /* no action */
+ irvxA = 0x0001, /* Ax => xA */
+ irvDx = 0x0002, /* xD => Dx */
+ irvDxA = 0x0003, /* AxD => DxA */
+
+ irvxAB = 0x0004, /* ABx => xAB */
+ irvxBA = 0x0005, /* ABx => xBA */
+ irvCDx = 0x0006, /* xCD => CDx */
+ irvDCx = 0x0007, /* xCD => DCx */
+
+ irvCDxA = 0x0008, /* AxCD => CDxA */
+ irvDCxA = 0x0009, /* AxCD => DCxA */
+ irvDxAB = 0x000A, /* ABxD => DxAB */
+ irvDxBA = 0x000B, /* ABxD => DxBA */
+
+ irvCDxAB = 0x000C, /* ABxCD => CDxAB */
+ irvCDxBA = 0x000D, /* ABxCD => CDxBA */
+ irvDCxAB = 0x000E, /* ABxCD => DCxAB */
+ irvDCxBA = 0x000F /* ABxCD => DCxBA */
+};
+
+struct IndicRearrangementStateEntry : StateEntry
+{
+};
+
+U_NAMESPACE_END
+#endif
+
diff --git a/Build/source/libs/icu/icu-50.1/layout/IndicRearrangementProcessor.cpp b/Build/source/libs/icu/icu-50.1/layout/IndicRearrangementProcessor.cpp
new file mode 100644
index 00000000000..92202450705
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/IndicRearrangementProcessor.cpp
@@ -0,0 +1,398 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
+ *
+ */
+
+#include "LETypes.h"
+#include "MorphTables.h"
+#include "StateTables.h"
+#include "MorphStateTables.h"
+#include "SubtableProcessor.h"
+#include "StateTableProcessor.h"
+#include "IndicRearrangementProcessor.h"
+#include "LEGlyphStorage.h"
+#include "LESwaps.h"
+
+U_NAMESPACE_BEGIN
+
+UOBJECT_DEFINE_RTTI_IMPLEMENTATION(IndicRearrangementProcessor)
+
+IndicRearrangementProcessor::IndicRearrangementProcessor(const MorphSubtableHeader *morphSubtableHeader)
+ : StateTableProcessor(morphSubtableHeader)
+{
+ indicRearrangementSubtableHeader = (const IndicRearrangementSubtableHeader *) morphSubtableHeader;
+ entryTable = (const IndicRearrangementStateEntry *) ((char *) &stateTableHeader->stHeader + entryTableOffset);
+}
+
+IndicRearrangementProcessor::~IndicRearrangementProcessor()
+{
+}
+
+void IndicRearrangementProcessor::beginStateTable()
+{
+ firstGlyph = 0;
+ lastGlyph = 0;
+}
+
+ByteOffset IndicRearrangementProcessor::processStateEntry(LEGlyphStorage &glyphStorage, le_int32 &currGlyph, EntryTableIndex index)
+{
+ const IndicRearrangementStateEntry *entry = &entryTable[index];
+ ByteOffset newState = SWAPW(entry->newStateOffset);
+ IndicRearrangementFlags flags = (IndicRearrangementFlags) SWAPW(entry->flags);
+
+ if (flags & irfMarkFirst) {
+ firstGlyph = currGlyph;
+ }
+
+ if (flags & irfMarkLast) {
+ lastGlyph = currGlyph;
+ }
+
+ doRearrangementAction(glyphStorage, (IndicRearrangementVerb) (flags & irfVerbMask));
+
+ if (!(flags & irfDontAdvance)) {
+ // XXX: Should handle reverse too...
+ currGlyph += 1;
+ }
+
+ return newState;
+}
+
+void IndicRearrangementProcessor::endStateTable()
+{
+}
+
+void IndicRearrangementProcessor::doRearrangementAction(LEGlyphStorage &glyphStorage, IndicRearrangementVerb verb) const
+{
+ LEGlyphID a, b, c, d;
+ le_int32 ia, ib, ic, id, ix, x;
+ LEErrorCode success = LE_NO_ERROR;
+
+ switch(verb)
+ {
+ case irvNoAction:
+ break;
+
+ case irvxA:
+ a = glyphStorage[firstGlyph];
+ ia = glyphStorage.getCharIndex(firstGlyph, success);
+ x = firstGlyph + 1;
+
+ while (x <= lastGlyph) {
+ glyphStorage[x - 1] = glyphStorage[x];
+ ix = glyphStorage.getCharIndex(x, success);
+ glyphStorage.setCharIndex(x - 1, ix, success);
+ x += 1;
+ }
+
+ glyphStorage[lastGlyph] = a;
+ glyphStorage.setCharIndex(lastGlyph, ia, success);
+ break;
+
+ case irvDx:
+ d = glyphStorage[lastGlyph];
+ id = glyphStorage.getCharIndex(lastGlyph, success);
+ x = lastGlyph - 1;
+
+ while (x >= firstGlyph) {
+ glyphStorage[x + 1] = glyphStorage[x];
+ ix = glyphStorage.getCharIndex(x, success);
+ glyphStorage.setCharIndex(x + 1, ix, success);
+ x -= 1;
+ }
+
+ glyphStorage[firstGlyph] = d;
+ glyphStorage.setCharIndex(firstGlyph, id, success);
+ break;
+
+ case irvDxA:
+ a = glyphStorage[firstGlyph];
+ ia = glyphStorage.getCharIndex(firstGlyph, success);
+ id = glyphStorage.getCharIndex(lastGlyph, success);
+
+ glyphStorage[firstGlyph] = glyphStorage[lastGlyph];
+ glyphStorage[lastGlyph] = a;
+
+ glyphStorage.setCharIndex(firstGlyph, id, success);
+ glyphStorage.setCharIndex(lastGlyph, ia, success);
+ break;
+
+ case irvxAB:
+ a = glyphStorage[firstGlyph];
+ b = glyphStorage[firstGlyph + 1];
+ ia = glyphStorage.getCharIndex(firstGlyph, success);
+ ib = glyphStorage.getCharIndex(firstGlyph + 1, success);
+ x = firstGlyph + 2;
+
+ while (x <= lastGlyph) {
+ glyphStorage[x - 2] = glyphStorage[x];
+ ix = glyphStorage.getCharIndex(x, success);
+ glyphStorage.setCharIndex(x - 2, ix, success);
+ x += 1;
+ }
+
+ glyphStorage[lastGlyph - 1] = a;
+ glyphStorage[lastGlyph] = b;
+
+ glyphStorage.setCharIndex(lastGlyph - 1, ia, success);
+ glyphStorage.setCharIndex(lastGlyph, ib, success);
+ break;
+
+ case irvxBA:
+ a = glyphStorage[firstGlyph];
+ b = glyphStorage[firstGlyph + 1];
+ ia = glyphStorage.getCharIndex(firstGlyph, success);
+ ib = glyphStorage.getCharIndex(firstGlyph + 1, success);
+ x = firstGlyph + 2;
+
+ while (x <= lastGlyph) {
+ glyphStorage[x - 2] = glyphStorage[x];
+ ix = glyphStorage.getCharIndex(x, success);
+ glyphStorage.setCharIndex(x - 2, ix, success);
+ x += 1;
+ }
+
+ glyphStorage[lastGlyph - 1] = b;
+ glyphStorage[lastGlyph] = a;
+
+ glyphStorage.setCharIndex(lastGlyph - 1, ib, success);
+ glyphStorage.setCharIndex(lastGlyph, ia, success);
+ break;
+
+ case irvCDx:
+ c = glyphStorage[lastGlyph - 1];
+ d = glyphStorage[lastGlyph];
+ ic = glyphStorage.getCharIndex(lastGlyph - 1, success);
+ id = glyphStorage.getCharIndex(lastGlyph, success);
+ x = lastGlyph - 2;
+
+ while (x >= firstGlyph) {
+ glyphStorage[x + 2] = glyphStorage[x];
+ ix = glyphStorage.getCharIndex(x, success);
+ glyphStorage.setCharIndex(x + 2, ix, success);
+ x -= 1;
+ }
+
+ glyphStorage[firstGlyph] = c;
+ glyphStorage[firstGlyph + 1] = d;
+
+ glyphStorage.setCharIndex(firstGlyph, ic, success);
+ glyphStorage.setCharIndex(firstGlyph + 1, id, success);
+ break;
+
+ case irvDCx:
+ c = glyphStorage[lastGlyph - 1];
+ d = glyphStorage[lastGlyph];
+ ic = glyphStorage.getCharIndex(lastGlyph - 1, success);
+ id = glyphStorage.getCharIndex(lastGlyph, success);
+ x = lastGlyph - 2;
+
+ while (x >= firstGlyph) {
+ glyphStorage[x + 2] = glyphStorage[x];
+ ix = glyphStorage.getCharIndex(x, success);
+ glyphStorage.setCharIndex(x + 2, ix, success);
+ x -= 1;
+ }
+
+ glyphStorage[firstGlyph] = d;
+ glyphStorage[firstGlyph + 1] = c;
+
+ glyphStorage.setCharIndex(firstGlyph, id, success);
+ glyphStorage.setCharIndex(firstGlyph + 1, ic, success);
+ break;
+
+ case irvCDxA:
+ a = glyphStorage[firstGlyph];
+ c = glyphStorage[lastGlyph - 1];
+ d = glyphStorage[lastGlyph];
+ ia = glyphStorage.getCharIndex(firstGlyph, success);
+ ic = glyphStorage.getCharIndex(lastGlyph - 1, success);
+ id = glyphStorage.getCharIndex(lastGlyph, success);
+ x = lastGlyph - 2;
+
+ while (x > firstGlyph) {
+ glyphStorage[x + 1] = glyphStorage[x];
+ ix = glyphStorage.getCharIndex(x, success);
+ glyphStorage.setCharIndex(x + 1, ix, success);
+ x -= 1;
+ }
+
+ glyphStorage[firstGlyph] = c;
+ glyphStorage[firstGlyph + 1] = d;
+ glyphStorage[lastGlyph] = a;
+
+ glyphStorage.setCharIndex(firstGlyph, ic, success);
+ glyphStorage.setCharIndex(firstGlyph + 1, id, success);
+ glyphStorage.setCharIndex(lastGlyph, ia, success);
+ break;
+
+ case irvDCxA:
+ a = glyphStorage[firstGlyph];
+ c = glyphStorage[lastGlyph - 1];
+ d = glyphStorage[lastGlyph];
+ ia = glyphStorage.getCharIndex(firstGlyph, success);
+ ic = glyphStorage.getCharIndex(lastGlyph - 1, success);
+ id = glyphStorage.getCharIndex(lastGlyph, success);
+ x = lastGlyph - 2;
+
+ while (x > firstGlyph) {
+ glyphStorage[x + 1] = glyphStorage[x];
+ ix = glyphStorage.getCharIndex(x, success);
+ glyphStorage.setCharIndex(x + 1, ix, success);
+ x -= 1;
+ }
+
+ glyphStorage[firstGlyph] = d;
+ glyphStorage[firstGlyph + 1] = c;
+ glyphStorage[lastGlyph] = a;
+
+ glyphStorage.setCharIndex(firstGlyph, id, success);
+ glyphStorage.setCharIndex(firstGlyph + 1, ic, success);
+ glyphStorage.setCharIndex(lastGlyph, ia, success);
+ break;
+
+ case irvDxAB:
+ a = glyphStorage[firstGlyph];
+ b = glyphStorage[firstGlyph + 1];
+ d = glyphStorage[lastGlyph];
+ ia = glyphStorage.getCharIndex(firstGlyph, success);
+ ib = glyphStorage.getCharIndex(firstGlyph + 1, success);
+ id = glyphStorage.getCharIndex(lastGlyph, success);
+ x = firstGlyph + 2;
+
+ while (x < lastGlyph) {
+ glyphStorage[x - 2] = glyphStorage[x];
+ ix = glyphStorage.getCharIndex(x, success);
+ glyphStorage.setCharIndex(x - 2, ix, success);
+ x += 1;
+ }
+
+ glyphStorage[firstGlyph] = d;
+ glyphStorage[lastGlyph - 1] = a;
+ glyphStorage[lastGlyph] = b;
+
+ glyphStorage.setCharIndex(firstGlyph, id, success);
+ glyphStorage.setCharIndex(lastGlyph - 1, ia, success);
+ glyphStorage.setCharIndex(lastGlyph, ib, success);
+ break;
+
+ case irvDxBA:
+ a = glyphStorage[firstGlyph];
+ b = glyphStorage[firstGlyph + 1];
+ d = glyphStorage[lastGlyph];
+ ia = glyphStorage.getCharIndex(firstGlyph, success);
+ ib = glyphStorage.getCharIndex(firstGlyph + 1, success);
+ id = glyphStorage.getCharIndex(lastGlyph, success);
+ x = firstGlyph + 2;
+
+ while (x < lastGlyph) {
+ glyphStorage[x - 2] = glyphStorage[x];
+ ix = glyphStorage.getCharIndex(x, success);
+ glyphStorage.setCharIndex(x - 2, ix, success);
+ x += 1;
+ }
+
+ glyphStorage[firstGlyph] = d;
+ glyphStorage[lastGlyph - 1] = b;
+ glyphStorage[lastGlyph] = a;
+
+ glyphStorage.setCharIndex(firstGlyph, id, success);
+ glyphStorage.setCharIndex(lastGlyph - 1, ib, success);
+ glyphStorage.setCharIndex(lastGlyph, ia, success);
+ break;
+
+ case irvCDxAB:
+ a = glyphStorage[firstGlyph];
+ b = glyphStorage[firstGlyph + 1];
+
+ glyphStorage[firstGlyph] = glyphStorage[lastGlyph - 1];
+ glyphStorage[firstGlyph + 1] = glyphStorage[lastGlyph];
+
+ glyphStorage[lastGlyph - 1] = a;
+ glyphStorage[lastGlyph] = b;
+
+ ia = glyphStorage.getCharIndex(firstGlyph, success);
+ ib = glyphStorage.getCharIndex(firstGlyph + 1, success);
+ ic = glyphStorage.getCharIndex(lastGlyph - 1, success);
+ id = glyphStorage.getCharIndex(lastGlyph, success);
+
+ glyphStorage.setCharIndex(firstGlyph, ic, success);
+ glyphStorage.setCharIndex(firstGlyph + 1, id, success);
+
+ glyphStorage.setCharIndex(lastGlyph - 1, ia, success);
+ glyphStorage.setCharIndex(lastGlyph, ib, success);
+ break;
+
+ case irvCDxBA:
+ a = glyphStorage[firstGlyph];
+ b = glyphStorage[firstGlyph + 1];
+
+ glyphStorage[firstGlyph] = glyphStorage[lastGlyph - 1];
+ glyphStorage[firstGlyph + 1] = glyphStorage[lastGlyph];
+
+ glyphStorage[lastGlyph - 1] = b;
+ glyphStorage[lastGlyph] = a;
+
+ ia = glyphStorage.getCharIndex(firstGlyph, success);
+ ib = glyphStorage.getCharIndex(firstGlyph + 1, success);
+ ic = glyphStorage.getCharIndex(lastGlyph - 1, success);
+ id = glyphStorage.getCharIndex(lastGlyph, success);
+
+ glyphStorage.setCharIndex(firstGlyph, ic, success);
+ glyphStorage.setCharIndex(firstGlyph + 1, id, success);
+
+ glyphStorage.setCharIndex(lastGlyph - 1, ib, success);
+ glyphStorage.setCharIndex(lastGlyph, ia, success);
+ break;
+
+ case irvDCxAB:
+ a = glyphStorage[firstGlyph];
+ b = glyphStorage[firstGlyph + 1];
+
+ glyphStorage[firstGlyph] = glyphStorage[lastGlyph];
+ glyphStorage[firstGlyph + 1] = glyphStorage[lastGlyph - 1];
+
+ glyphStorage[lastGlyph - 1] = a;
+ glyphStorage[lastGlyph] = b;
+
+ ia = glyphStorage.getCharIndex(firstGlyph, success);
+ ib = glyphStorage.getCharIndex(firstGlyph + 1, success);
+ ic = glyphStorage.getCharIndex(lastGlyph - 1, success);
+ id = glyphStorage.getCharIndex(lastGlyph, success);
+
+ glyphStorage.setCharIndex(firstGlyph, id, success);
+ glyphStorage.setCharIndex(firstGlyph + 1, ic, success);
+
+ glyphStorage.setCharIndex(lastGlyph - 1, ia, success);
+ glyphStorage.setCharIndex(lastGlyph, ib, success);
+ break;
+
+ case irvDCxBA:
+ a = glyphStorage[firstGlyph];
+ b = glyphStorage[firstGlyph + 1];
+
+ glyphStorage[firstGlyph] = glyphStorage[lastGlyph];
+ glyphStorage[firstGlyph + 1] = glyphStorage[lastGlyph - 1];
+
+ glyphStorage[lastGlyph - 1] = b;
+ glyphStorage[lastGlyph] = a;
+
+ ia = glyphStorage.getCharIndex(firstGlyph, success);
+ ib = glyphStorage.getCharIndex(firstGlyph + 1, success);
+ ic = glyphStorage.getCharIndex(lastGlyph - 1, success);
+ id = glyphStorage.getCharIndex(lastGlyph, success);
+
+ glyphStorage.setCharIndex(firstGlyph, id, success);
+ glyphStorage.setCharIndex(firstGlyph + 1, ic, success);
+
+ glyphStorage.setCharIndex(lastGlyph - 1, ib, success);
+ glyphStorage.setCharIndex(lastGlyph, ia, success);
+ break;
+
+ default:
+ break;
+ }
+}
+
+U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-50.1/layout/IndicRearrangementProcessor.h b/Build/source/libs/icu/icu-50.1/layout/IndicRearrangementProcessor.h
new file mode 100644
index 00000000000..0cb46ddfccc
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/IndicRearrangementProcessor.h
@@ -0,0 +1,63 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
+ *
+ */
+
+#ifndef __INDICREARRANGEMENTPROCESSOR_H
+#define __INDICREARRANGEMENTPROCESSOR_H
+
+/**
+ * \file
+ * \internal
+ */
+
+#include "LETypes.h"
+#include "MorphTables.h"
+#include "SubtableProcessor.h"
+#include "StateTableProcessor.h"
+#include "IndicRearrangement.h"
+
+U_NAMESPACE_BEGIN
+
+class LEGlyphStorage;
+
+class IndicRearrangementProcessor : public StateTableProcessor
+{
+public:
+ virtual void beginStateTable();
+
+ virtual ByteOffset processStateEntry(LEGlyphStorage &glyphStorage, le_int32 &currGlyph, EntryTableIndex index);
+
+ virtual void endStateTable();
+
+ void doRearrangementAction(LEGlyphStorage &glyphStorage, IndicRearrangementVerb verb) const;
+
+ IndicRearrangementProcessor(const MorphSubtableHeader *morphSubtableHeader);
+ virtual ~IndicRearrangementProcessor();
+
+ /**
+ * ICU "poor man's RTTI", returns a UClassID for the actual class.
+ *
+ * @stable ICU 2.8
+ */
+ virtual UClassID getDynamicClassID() const;
+
+ /**
+ * ICU "poor man's RTTI", returns a UClassID for this class.
+ *
+ * @stable ICU 2.8
+ */
+ static UClassID getStaticClassID();
+
+protected:
+ le_int32 firstGlyph;
+ le_int32 lastGlyph;
+
+ const IndicRearrangementStateEntry *entryTable;
+ const IndicRearrangementSubtableHeader *indicRearrangementSubtableHeader;
+
+};
+
+U_NAMESPACE_END
+#endif
diff --git a/Build/source/libs/icu/icu-50.1/layout/IndicReordering.cpp b/Build/source/libs/icu/icu-50.1/layout/IndicReordering.cpp
new file mode 100644
index 00000000000..9c4b3a9fcb6
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/IndicReordering.cpp
@@ -0,0 +1,1186 @@
+/*
+/ *
+ * (C) Copyright IBM Corp. 1998-2012 - All Rights Reserved
+ *
+ */
+
+#include "LETypes.h"
+#include "OpenTypeTables.h"
+#include "OpenTypeUtilities.h"
+#include "IndicReordering.h"
+#include "LEGlyphStorage.h"
+#include "MPreFixups.h"
+
+U_NAMESPACE_BEGIN
+
+#define loclFeatureTag LE_LOCL_FEATURE_TAG
+#define initFeatureTag LE_INIT_FEATURE_TAG
+#define nuktFeatureTag LE_NUKT_FEATURE_TAG
+#define akhnFeatureTag LE_AKHN_FEATURE_TAG
+#define rphfFeatureTag LE_RPHF_FEATURE_TAG
+#define rkrfFeatureTag LE_RKRF_FEATURE_TAG
+#define blwfFeatureTag LE_BLWF_FEATURE_TAG
+#define halfFeatureTag LE_HALF_FEATURE_TAG
+#define pstfFeatureTag LE_PSTF_FEATURE_TAG
+#define vatuFeatureTag LE_VATU_FEATURE_TAG
+#define presFeatureTag LE_PRES_FEATURE_TAG
+#define blwsFeatureTag LE_BLWS_FEATURE_TAG
+#define abvsFeatureTag LE_ABVS_FEATURE_TAG
+#define pstsFeatureTag LE_PSTS_FEATURE_TAG
+#define halnFeatureTag LE_HALN_FEATURE_TAG
+#define cjctFeatureTag LE_CJCT_FEATURE_TAG
+#define blwmFeatureTag LE_BLWM_FEATURE_TAG
+#define abvmFeatureTag LE_ABVM_FEATURE_TAG
+#define distFeatureTag LE_DIST_FEATURE_TAG
+#define caltFeatureTag LE_CALT_FEATURE_TAG
+#define kernFeatureTag LE_KERN_FEATURE_TAG
+
+#define loclFeatureMask 0x80000000UL
+#define rphfFeatureMask 0x40000000UL
+#define blwfFeatureMask 0x20000000UL
+#define halfFeatureMask 0x10000000UL
+#define pstfFeatureMask 0x08000000UL
+#define nuktFeatureMask 0x04000000UL
+#define akhnFeatureMask 0x02000000UL
+#define vatuFeatureMask 0x01000000UL
+#define presFeatureMask 0x00800000UL
+#define blwsFeatureMask 0x00400000UL
+#define abvsFeatureMask 0x00200000UL
+#define pstsFeatureMask 0x00100000UL
+#define halnFeatureMask 0x00080000UL
+#define blwmFeatureMask 0x00040000UL
+#define abvmFeatureMask 0x00020000UL
+#define distFeatureMask 0x00010000UL
+#define initFeatureMask 0x00008000UL
+#define cjctFeatureMask 0x00004000UL
+#define rkrfFeatureMask 0x00002000UL
+#define caltFeatureMask 0x00001000UL
+#define kernFeatureMask 0x00000800UL
+
+// Syllable structure bits
+#define baseConsonantMask 0x00000400UL
+#define consonantMask 0x00000200UL
+#define halfConsonantMask 0x00000100UL
+#define rephConsonantMask 0x00000080UL
+#define matraMask 0x00000040UL
+#define vowelModifierMask 0x00000020UL
+#define markPositionMask 0x00000018UL
+
+#define postBasePosition 0x00000000UL
+#define preBasePosition 0x00000008UL
+#define aboveBasePosition 0x00000010UL
+#define belowBasePosition 0x00000018UL
+
+#define repositionedGlyphMask 0x00000002UL
+
+#define basicShapingFormsMask ( loclFeatureMask | nuktFeatureMask | akhnFeatureMask | rkrfFeatureMask | blwfFeatureMask | halfFeatureMask | vatuFeatureMask | cjctFeatureMask )
+#define positioningFormsMask ( kernFeatureMask | distFeatureMask | abvmFeatureMask | blwmFeatureMask )
+#define presentationFormsMask ( presFeatureMask | abvsFeatureMask | blwsFeatureMask | pstsFeatureMask | halnFeatureMask | caltFeatureMask )
+
+
+#define C_MALAYALAM_VOWEL_SIGN_U 0x0D41
+#define C_DOTTED_CIRCLE 0x25CC
+#define NO_GLYPH 0xFFFF
+
+// Some level of debate as to the proper value for MAX_CONSONANTS_PER_SYLLABLE. Ticket 5588 states that 4
+// is the magic number according to ISCII, but 5 seems to be the more consistent with XP.
+#define MAX_CONSONANTS_PER_SYLLABLE 5
+
+#define INDIC_BLOCK_SIZE 0x7F
+
+class IndicReorderingOutput : public UMemory {
+private:
+ le_int32 fSyllableCount;
+ le_int32 fOutIndex;
+ LEUnicode *fOutChars;
+
+ LEGlyphStorage &fGlyphStorage;
+
+ LEUnicode fMpre;
+ le_int32 fMpreIndex;
+
+ LEUnicode fMbelow;
+ le_int32 fMbelowIndex;
+
+ LEUnicode fMabove;
+ le_int32 fMaboveIndex;
+
+ LEUnicode fMpost;
+ le_int32 fMpostIndex;
+
+ LEUnicode fLengthMark;
+ le_int32 fLengthMarkIndex;
+
+ LEUnicode fAlLakuna;
+ le_int32 fAlLakunaIndex;
+
+ FeatureMask fMatraFeatures;
+
+ le_int32 fMPreOutIndex;
+ MPreFixups *fMPreFixups;
+
+ LEUnicode fVMabove;
+ LEUnicode fVMpost;
+ le_int32 fVMIndex;
+ FeatureMask fVMFeatures;
+
+ LEUnicode fSMabove;
+ LEUnicode fSMbelow;
+ le_int32 fSMIndex;
+ FeatureMask fSMFeatures;
+
+
+ void saveMatra(LEUnicode matra, le_int32 matraIndex, IndicClassTable::CharClass matraClass)
+ {
+ // FIXME: check if already set, or if not a matra...
+ if (IndicClassTable::isLengthMark(matraClass)) {
+ fLengthMark = matra;
+ fLengthMarkIndex = matraIndex;
+ } else if (IndicClassTable::isAlLakuna(matraClass)) {
+ fAlLakuna = matra;
+ fAlLakunaIndex = matraIndex;
+ } else {
+ switch (matraClass & CF_POS_MASK) {
+ case CF_POS_BEFORE:
+ fMpre = matra;
+ fMpreIndex = matraIndex;
+ break;
+
+ case CF_POS_BELOW:
+ fMbelow = matra;
+ fMbelowIndex = matraIndex;
+ break;
+
+ case CF_POS_ABOVE:
+ fMabove = matra;
+ fMaboveIndex = matraIndex;
+ break;
+
+ case CF_POS_AFTER:
+ fMpost = matra;
+ fMpostIndex = matraIndex;
+ break;
+
+ default:
+ // can't get here...
+ break;
+ }
+ }
+ }
+
+public:
+ IndicReorderingOutput(LEUnicode *outChars, LEGlyphStorage &glyphStorage, MPreFixups *mpreFixups)
+ : fSyllableCount(0), fOutIndex(0), fOutChars(outChars), fGlyphStorage(glyphStorage),
+ fMpre(0), fMpreIndex(0), fMbelow(0), fMbelowIndex(0), fMabove(0), fMaboveIndex(0),
+ fMpost(0), fMpostIndex(0), fLengthMark(0), fLengthMarkIndex(0), fAlLakuna(0), fAlLakunaIndex(0),
+ fMatraFeatures(0), fMPreOutIndex(-1), fMPreFixups(mpreFixups),
+ fVMabove(0), fVMpost(0), fVMIndex(0), fVMFeatures(0),
+ fSMabove(0), fSMbelow(0), fSMIndex(0), fSMFeatures(0)
+ {
+ // nothing else to do...
+ }
+
+ ~IndicReorderingOutput()
+ {
+ // nothing to do here...
+ }
+
+ void reset()
+ {
+ fSyllableCount += 1;
+
+ fMpre = fMbelow = fMabove = fMpost = fLengthMark = fAlLakuna = 0;
+ fMPreOutIndex = -1;
+
+ fVMabove = fVMpost = 0;
+ fSMabove = fSMbelow = 0;
+ }
+
+ void writeChar(LEUnicode ch, le_uint32 charIndex, FeatureMask charFeatures)
+ {
+ LEErrorCode success = LE_NO_ERROR;
+
+ fOutChars[fOutIndex] = ch;
+
+ fGlyphStorage.setCharIndex(fOutIndex, charIndex, success);
+ fGlyphStorage.setAuxData(fOutIndex, charFeatures | (fSyllableCount & LE_GLYPH_GROUP_MASK), success);
+
+ fOutIndex += 1;
+ }
+
+ void setFeatures ( le_uint32 charIndex, FeatureMask charFeatures)
+ {
+ LEErrorCode success = LE_NO_ERROR;
+
+ fGlyphStorage.setAuxData( charIndex, charFeatures, success );
+
+ }
+
+ FeatureMask getFeatures ( le_uint32 charIndex )
+ {
+ LEErrorCode success = LE_NO_ERROR;
+ return fGlyphStorage.getAuxData(charIndex,success);
+ }
+
+ void decomposeReorderMatras ( const IndicClassTable *classTable, le_int32 beginSyllable, le_int32 nextSyllable, le_int32 inv_count ) {
+ le_int32 i;
+ LEErrorCode success = LE_NO_ERROR;
+
+ for ( i = beginSyllable ; i < nextSyllable ; i++ ) {
+ if ( classTable->isMatra(fOutChars[i+inv_count])) {
+ IndicClassTable::CharClass matraClass = classTable->getCharClass(fOutChars[i+inv_count]);
+ if ( classTable->isSplitMatra(matraClass)) {
+ le_int32 saveIndex = fGlyphStorage.getCharIndex(i+inv_count,success);
+ le_uint32 saveAuxData = fGlyphStorage.getAuxData(i+inv_count,success);
+ const SplitMatra *splitMatra = classTable->getSplitMatra(matraClass);
+ int j;
+ for (j = 0 ; j < SM_MAX_PIECES && *(splitMatra)[j] != 0 ; j++) {
+ LEUnicode piece = (*splitMatra)[j];
+ if ( j == 0 ) {
+ fOutChars[i+inv_count] = piece;
+ matraClass = classTable->getCharClass(piece);
+ } else {
+ insertCharacter(piece,i+1+inv_count,saveIndex,saveAuxData);
+ nextSyllable++;
+ }
+ }
+ }
+
+ if ((matraClass & CF_POS_MASK) == CF_POS_BEFORE) {
+ moveCharacter(i+inv_count,beginSyllable+inv_count);
+ }
+ }
+ }
+ }
+
+ void moveCharacter( le_int32 fromPosition, le_int32 toPosition ) {
+ le_int32 i,saveIndex;
+ le_uint32 saveAuxData;
+ LEUnicode saveChar = fOutChars[fromPosition];
+ LEErrorCode success = LE_NO_ERROR;
+ LEErrorCode success2 = LE_NO_ERROR;
+ saveIndex = fGlyphStorage.getCharIndex(fromPosition,success);
+ saveAuxData = fGlyphStorage.getAuxData(fromPosition,success);
+
+ if ( fromPosition > toPosition ) {
+ for ( i = fromPosition ; i > toPosition ; i-- ) {
+ fOutChars[i] = fOutChars[i-1];
+ fGlyphStorage.setCharIndex(i,fGlyphStorage.getCharIndex(i-1,success2),success);
+ fGlyphStorage.setAuxData(i,fGlyphStorage.getAuxData(i-1,success2), success);
+
+ }
+ } else {
+ for ( i = fromPosition ; i < toPosition ; i++ ) {
+ fOutChars[i] = fOutChars[i+1];
+ fGlyphStorage.setCharIndex(i,fGlyphStorage.getCharIndex(i+1,success2),success);
+ fGlyphStorage.setAuxData(i,fGlyphStorage.getAuxData(i+1,success2), success);
+ }
+
+ }
+ fOutChars[toPosition] = saveChar;
+ fGlyphStorage.setCharIndex(toPosition,saveIndex,success);
+ fGlyphStorage.setAuxData(toPosition,saveAuxData,success);
+
+ }
+ void insertCharacter( LEUnicode ch, le_int32 toPosition, le_int32 charIndex, le_uint32 auxData ) {
+ LEErrorCode success = LE_NO_ERROR;
+ le_int32 i;
+ fOutIndex += 1;
+
+ for ( i = fOutIndex ; i > toPosition ; i--) {
+ fOutChars[i] = fOutChars[i-1];
+ fGlyphStorage.setCharIndex(i,fGlyphStorage.getCharIndex(i-1,success),success);
+ fGlyphStorage.setAuxData(i,fGlyphStorage.getAuxData(i-1,success), success);
+ }
+
+ fOutChars[toPosition] = ch;
+ fGlyphStorage.setCharIndex(toPosition,charIndex,success);
+ fGlyphStorage.setAuxData(toPosition,auxData,success);
+
+ }
+ void removeCharacter( le_int32 fromPosition ) {
+ LEErrorCode success = LE_NO_ERROR;
+ le_int32 i;
+ fOutIndex -= 1;
+
+ for ( i = fromPosition ; i < fOutIndex ; i--) {
+ fOutChars[i] = fOutChars[i+1];
+ fGlyphStorage.setCharIndex(i,fGlyphStorage.getCharIndex(i+1,success),success);
+ fGlyphStorage.setAuxData(i,fGlyphStorage.getAuxData(i+1,success), success);
+ }
+ }
+
+ le_bool noteMatra(const IndicClassTable *classTable, LEUnicode matra, le_uint32 matraIndex, FeatureMask matraFeatures, le_bool wordStart)
+ {
+ IndicClassTable::CharClass matraClass = classTable->getCharClass(matra);
+
+ fMatraFeatures = matraFeatures;
+
+ if (wordStart) {
+ fMatraFeatures |= initFeatureMask;
+ }
+
+ if (IndicClassTable::isMatra(matraClass)) {
+ if (IndicClassTable::isSplitMatra(matraClass)) {
+ const SplitMatra *splitMatra = classTable->getSplitMatra(matraClass);
+ int i;
+
+ for (i = 0; i < SM_MAX_PIECES && (*splitMatra)[i] != 0; i += 1) {
+ LEUnicode piece = (*splitMatra)[i];
+ IndicClassTable::CharClass pieceClass = classTable->getCharClass(piece);
+
+ saveMatra(piece, matraIndex, pieceClass);
+ }
+ } else {
+ saveMatra(matra, matraIndex, matraClass);
+ }
+
+ return TRUE;
+ }
+
+ return FALSE;
+ }
+
+ void noteVowelModifier(const IndicClassTable *classTable, LEUnicode vowelModifier, le_uint32 vowelModifierIndex, FeatureMask vowelModifierFeatures)
+ {
+ IndicClassTable::CharClass vmClass = classTable->getCharClass(vowelModifier);
+
+ fVMIndex = vowelModifierIndex;
+ fVMFeatures = vowelModifierFeatures;
+
+ if (IndicClassTable::isVowelModifier(vmClass)) {
+ switch (vmClass & CF_POS_MASK) {
+ case CF_POS_ABOVE:
+ fVMabove = vowelModifier;
+ break;
+
+ case CF_POS_AFTER:
+ fVMpost = vowelModifier;
+ break;
+
+ default:
+ // FIXME: this is an error...
+ break;
+ }
+ }
+ }
+
+ void noteStressMark(const IndicClassTable *classTable, LEUnicode stressMark, le_uint32 stressMarkIndex, FeatureMask stressMarkFeatures)
+ {
+ IndicClassTable::CharClass smClass = classTable->getCharClass(stressMark);
+
+ fSMIndex = stressMarkIndex;
+ fSMFeatures = stressMarkFeatures;
+
+ if (IndicClassTable::isStressMark(smClass)) {
+ switch (smClass & CF_POS_MASK) {
+ case CF_POS_ABOVE:
+ fSMabove = stressMark;
+ break;
+
+ case CF_POS_BELOW:
+ fSMbelow = stressMark;
+ break;
+
+ default:
+ // FIXME: this is an error...
+ break;
+ }
+ }
+ }
+
+ void noteBaseConsonant()
+ {
+ if (fMPreFixups != NULL && fMPreOutIndex >= 0) {
+ fMPreFixups->add(fOutIndex, fMPreOutIndex);
+ }
+ }
+
+ // Handles Al-Lakuna in Sinhala split vowels.
+ void writeAlLakuna()
+ {
+ if (fAlLakuna != 0) {
+ writeChar(fAlLakuna, fAlLakunaIndex, fMatraFeatures);
+ }
+ }
+
+ void writeMpre()
+ {
+ if (fMpre != 0) {
+ fMPreOutIndex = fOutIndex;
+ writeChar(fMpre, fMpreIndex, fMatraFeatures);
+ }
+ }
+
+ void writeMbelow()
+ {
+ if (fMbelow != 0) {
+ writeChar(fMbelow, fMbelowIndex, fMatraFeatures);
+ }
+ }
+
+ void writeMabove()
+ {
+ if (fMabove != 0) {
+ writeChar(fMabove, fMaboveIndex, fMatraFeatures);
+ }
+ }
+
+ void writeMpost()
+ {
+ if (fMpost != 0) {
+ writeChar(fMpost, fMpostIndex, fMatraFeatures);
+ }
+ }
+
+ void writeLengthMark()
+ {
+ if (fLengthMark != 0) {
+ writeChar(fLengthMark, fLengthMarkIndex, fMatraFeatures);
+ }
+ }
+
+ void writeVMabove()
+ {
+ if (fVMabove != 0) {
+ writeChar(fVMabove, fVMIndex, fVMFeatures);
+ }
+ }
+
+ void writeVMpost()
+ {
+ if (fVMpost != 0) {
+ writeChar(fVMpost, fVMIndex, fVMFeatures);
+ }
+ }
+
+ void writeSMabove()
+ {
+ if (fSMabove != 0) {
+ writeChar(fSMabove, fSMIndex, fSMFeatures);
+ }
+ }
+
+ void writeSMbelow()
+ {
+ if (fSMbelow != 0) {
+ writeChar(fSMbelow, fSMIndex, fSMFeatures);
+ }
+ }
+
+ le_int32 getOutputIndex()
+ {
+ return fOutIndex;
+ }
+};
+
+
+
+// TODO: Find better names for these!
+#define tagArray4 (loclFeatureMask | nuktFeatureMask | akhnFeatureMask | vatuFeatureMask | presFeatureMask | blwsFeatureMask | abvsFeatureMask | pstsFeatureMask | halnFeatureMask | blwmFeatureMask | abvmFeatureMask | distFeatureMask)
+#define tagArray3 (pstfFeatureMask | tagArray4)
+#define tagArray2 (halfFeatureMask | tagArray3)
+#define tagArray1 (blwfFeatureMask | tagArray2)
+#define tagArray0 (rphfFeatureMask | tagArray1)
+
+static const FeatureMap featureMap[] = {
+ {loclFeatureTag, loclFeatureMask},
+ {initFeatureTag, initFeatureMask},
+ {nuktFeatureTag, nuktFeatureMask},
+ {akhnFeatureTag, akhnFeatureMask},
+ {rphfFeatureTag, rphfFeatureMask},
+ {blwfFeatureTag, blwfFeatureMask},
+ {halfFeatureTag, halfFeatureMask},
+ {pstfFeatureTag, pstfFeatureMask},
+ {vatuFeatureTag, vatuFeatureMask},
+ {presFeatureTag, presFeatureMask},
+ {blwsFeatureTag, blwsFeatureMask},
+ {abvsFeatureTag, abvsFeatureMask},
+ {pstsFeatureTag, pstsFeatureMask},
+ {halnFeatureTag, halnFeatureMask},
+ {blwmFeatureTag, blwmFeatureMask},
+ {abvmFeatureTag, abvmFeatureMask},
+ {distFeatureTag, distFeatureMask}
+};
+
+static const le_int32 featureCount = LE_ARRAY_SIZE(featureMap);
+
+static const FeatureMap v2FeatureMap[] = {
+ {loclFeatureTag, loclFeatureMask},
+ {nuktFeatureTag, nuktFeatureMask},
+ {akhnFeatureTag, akhnFeatureMask},
+ {rphfFeatureTag, rphfFeatureMask},
+ {rkrfFeatureTag, rkrfFeatureMask},
+ {blwfFeatureTag, blwfFeatureMask},
+ {halfFeatureTag, halfFeatureMask},
+ {vatuFeatureTag, vatuFeatureMask},
+ {cjctFeatureTag, cjctFeatureMask},
+ {presFeatureTag, presFeatureMask},
+ {abvsFeatureTag, abvsFeatureMask},
+ {blwsFeatureTag, blwsFeatureMask},
+ {pstsFeatureTag, pstsFeatureMask},
+ {halnFeatureTag, halnFeatureMask},
+ {caltFeatureTag, caltFeatureMask},
+ {kernFeatureTag, kernFeatureMask},
+ {distFeatureTag, distFeatureMask},
+ {abvmFeatureTag, abvmFeatureMask},
+ {blwmFeatureTag, blwmFeatureMask}
+};
+
+static const le_int32 v2FeatureMapCount = LE_ARRAY_SIZE(v2FeatureMap);
+
+static const le_int8 stateTable[][CC_COUNT] =
+{
+// xx vm sm iv i2 i3 ct cn nu dv s1 s2 s3 vr zw al
+ { 1, 6, 1, 5, 8, 11, 3, 2, 1, 5, 9, 5, 5, 1, 1, 1}, // 0 - ground state
+ {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, // 1 - exit state
+ {-1, 6, 1, -1, -1, -1, -1, -1, -1, 5, 9, 5, 5, 4, 12, -1}, // 2 - consonant with nukta
+ {-1, 6, 1, -1, -1, -1, -1, -1, 2, 5, 9, 5, 5, 4, 12, 13}, // 3 - consonant
+ {-1, -1, -1, -1, -1, -1, 3, 2, -1, -1, -1, -1, -1, -1, 7, -1}, // 4 - consonant virama
+ {-1, 6, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, // 5 - dependent vowels
+ {-1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, // 6 - vowel mark
+ {-1, -1, -1, -1, -1, -1, 3, 2, -1, -1, -1, -1, -1, -1, -1, -1}, // 7 - consonant virama ZWJ, consonant ZWJ virama
+ {-1, 6, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4, -1, -1}, // 8 - independent vowels that can take a virama
+ {-1, 6, 1, -1, -1, -1, -1, -1, -1, -1, -1, 10, 5, -1, -1, -1}, // 9 - first part of split vowel
+ {-1, 6, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5, -1, -1, -1}, // 10 - second part of split vowel
+ {-1, 6, 1, -1, -1, -1, -1, -1, -1, 5, 9, 5, 5, 4, -1, -1}, // 11 - independent vowels that can take an iv
+ {-1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 7, -1, 7}, // 12 - consonant ZWJ (TODO: Take everything else that can be after a consonant?)
+ {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 7, -1} // 13 - consonant al-lakuna ZWJ consonant
+};
+
+
+const FeatureMap *IndicReordering::getFeatureMap(le_int32 &count)
+{
+ count = featureCount;
+
+ return featureMap;
+}
+
+const FeatureMap *IndicReordering::getv2FeatureMap(le_int32 &count)
+{
+ count = v2FeatureMapCount;
+
+ return v2FeatureMap;
+}
+
+le_int32 IndicReordering::findSyllable(const IndicClassTable *classTable, const LEUnicode *chars, le_int32 prev, le_int32 charCount)
+{
+ le_int32 cursor = prev;
+ le_int8 state = 0;
+ le_int8 consonant_count = 0;
+
+ while (cursor < charCount) {
+ IndicClassTable::CharClass charClass = classTable->getCharClass(chars[cursor]);
+
+ if ( IndicClassTable::isConsonant(charClass) ) {
+ consonant_count++;
+ if ( consonant_count > MAX_CONSONANTS_PER_SYLLABLE ) {
+ break;
+ }
+ }
+
+ state = stateTable[state][charClass & CF_CLASS_MASK];
+
+ if (state < 0) {
+ break;
+ }
+
+ cursor += 1;
+ }
+
+ return cursor;
+}
+
+le_int32 IndicReordering::reorder(const LEUnicode *chars, le_int32 charCount, le_int32 scriptCode,
+ LEUnicode *outChars, LEGlyphStorage &glyphStorage,
+ MPreFixups **outMPreFixups, LEErrorCode& success)
+{
+ if (LE_FAILURE(success)) {
+ return 0;
+ }
+
+ MPreFixups *mpreFixups = NULL;
+ const IndicClassTable *classTable = IndicClassTable::getScriptClassTable(scriptCode);
+
+ if (classTable->scriptFlags & SF_MPRE_FIXUP) {
+ mpreFixups = new MPreFixups(charCount);
+ if (mpreFixups == NULL) {
+ success = LE_MEMORY_ALLOCATION_ERROR;
+ return 0;
+ }
+ }
+
+ IndicReorderingOutput output(outChars, glyphStorage, mpreFixups);
+ le_int32 i, prev = 0;
+ le_bool lastInWord = FALSE;
+
+ while (prev < charCount) {
+ le_int32 syllable = findSyllable(classTable, chars, prev, charCount);
+ le_int32 matra, markStart = syllable;
+
+ output.reset();
+
+ if (classTable->isStressMark(chars[markStart - 1])) {
+ markStart -= 1;
+ output.noteStressMark(classTable, chars[markStart], markStart, tagArray1);
+ }
+
+ if (markStart != prev && classTable->isVowelModifier(chars[markStart - 1])) {
+ markStart -= 1;
+ output.noteVowelModifier(classTable, chars[markStart], markStart, tagArray1);
+ }
+
+ matra = markStart - 1;
+
+ while (output.noteMatra(classTable, chars[matra], matra, tagArray1, !lastInWord) && matra != prev) {
+ matra -= 1;
+ }
+
+ lastInWord = TRUE;
+
+ switch (classTable->getCharClass(chars[prev]) & CF_CLASS_MASK) {
+ case CC_RESERVED:
+ lastInWord = FALSE;
+ /* fall through */
+
+ case CC_INDEPENDENT_VOWEL:
+ case CC_ZERO_WIDTH_MARK:
+ for (i = prev; i < syllable; i += 1) {
+ output.writeChar(chars[i], i, tagArray1);
+ }
+
+ break;
+
+ case CC_AL_LAKUNA:
+ case CC_NUKTA:
+ output.writeChar(C_DOTTED_CIRCLE, prev, tagArray1);
+ output.writeChar(chars[prev], prev, tagArray1);
+ break;
+
+ case CC_VIRAMA:
+ // A lone virama is illegal unless it follows a
+ // MALAYALAM_VOWEL_SIGN_U. Such a usage is called
+ // "samvruthokaram".
+ if (chars[prev - 1] != C_MALAYALAM_VOWEL_SIGN_U) {
+ output.writeChar(C_DOTTED_CIRCLE, prev, tagArray1);
+ }
+
+ output.writeChar(chars[prev], prev, tagArray1);
+ break;
+
+ case CC_DEPENDENT_VOWEL:
+ case CC_SPLIT_VOWEL_PIECE_1:
+ case CC_SPLIT_VOWEL_PIECE_2:
+ case CC_SPLIT_VOWEL_PIECE_3:
+ case CC_VOWEL_MODIFIER:
+ case CC_STRESS_MARK:
+ output.writeMpre();
+
+ output.writeChar(C_DOTTED_CIRCLE, prev, tagArray1);
+
+ output.writeMbelow();
+ output.writeSMbelow();
+ output.writeMabove();
+
+ if ((classTable->scriptFlags & SF_MATRAS_AFTER_BASE) != 0) {
+ output.writeMpost();
+ }
+
+ if ((classTable->scriptFlags & SF_REPH_AFTER_BELOW) != 0) {
+ output.writeVMabove();
+ output.writeSMabove(); // FIXME: there are no SM's in these scripts...
+ }
+
+ if ((classTable->scriptFlags & SF_MATRAS_AFTER_BASE) == 0) {
+ output.writeMpost();
+ }
+
+ output.writeLengthMark();
+ output.writeAlLakuna();
+
+ if ((classTable->scriptFlags & SF_REPH_AFTER_BELOW) == 0) {
+ output.writeVMabove();
+ output.writeSMabove();
+ }
+
+ output.writeVMpost();
+ break;
+
+ case CC_INDEPENDENT_VOWEL_2:
+ case CC_INDEPENDENT_VOWEL_3:
+ case CC_CONSONANT:
+ case CC_CONSONANT_WITH_NUKTA:
+ {
+ le_uint32 length = markStart - prev;
+ le_int32 lastConsonant = markStart - 1;
+ le_int32 baseLimit = prev;
+
+ // Check for REPH at front of syllable
+ if (length > 2 && classTable->isReph(chars[prev]) && classTable->isVirama(chars[prev + 1]) && chars[prev + 2] != C_SIGN_ZWNJ) {
+ baseLimit += 2;
+
+ // Check for eyelash RA, if the script supports it
+ if ((classTable->scriptFlags & SF_EYELASH_RA) != 0 &&
+ chars[baseLimit] == C_SIGN_ZWJ) {
+ if (length > 3) {
+ baseLimit += 1;
+ } else {
+ baseLimit -= 2;
+ }
+ }
+ }
+
+ while (lastConsonant > baseLimit && !classTable->isConsonant(chars[lastConsonant])) {
+ lastConsonant -= 1;
+ }
+
+ IndicClassTable::CharClass charClass = CC_RESERVED;
+ IndicClassTable::CharClass nextClass = CC_RESERVED;
+ le_int32 baseConsonant = lastConsonant;
+ le_int32 postBase = lastConsonant + 1;
+ le_int32 postBaseLimit = classTable->scriptFlags & SF_POST_BASE_LIMIT_MASK;
+ le_bool seenVattu = FALSE;
+ le_bool seenBelowBaseForm = FALSE;
+ le_bool hasNukta = FALSE;
+ le_bool hasBelowBaseForm = FALSE;
+ le_bool hasPostBaseForm = FALSE;
+
+ if (postBase < markStart && classTable->isNukta(chars[postBase])) {
+ charClass = CC_NUKTA;
+ postBase += 1;
+ }
+
+ while (baseConsonant > baseLimit) {
+ nextClass = charClass;
+ hasNukta = IndicClassTable::isNukta(nextClass);
+ charClass = classTable->getCharClass(chars[baseConsonant]);
+
+ hasBelowBaseForm = IndicClassTable::hasBelowBaseForm(charClass) && !hasNukta;
+ hasPostBaseForm = IndicClassTable::hasPostBaseForm(charClass) && !hasNukta;
+
+ if (IndicClassTable::isConsonant(charClass)) {
+ if (postBaseLimit == 0 || seenVattu ||
+ (baseConsonant > baseLimit && !classTable->isVirama(chars[baseConsonant - 1])) ||
+ !(hasBelowBaseForm || hasPostBaseForm)) {
+ break;
+ }
+
+ // consonants with nuktas are never vattus
+ seenVattu = IndicClassTable::isVattu(charClass) && !hasNukta;
+
+ // consonants with nuktas never have below- or post-base forms
+ if (hasPostBaseForm) {
+ if (seenBelowBaseForm) {
+ break;
+ }
+
+ postBase = baseConsonant;
+ } else if (hasBelowBaseForm) {
+ seenBelowBaseForm = TRUE;
+ }
+
+ postBaseLimit -= 1;
+ }
+
+ baseConsonant -= 1;
+ }
+
+ // Write Mpre
+ output.writeMpre();
+
+ // Write eyelash RA
+ // NOTE: baseLimit == prev + 3 iff eyelash RA present...
+ if (baseLimit == prev + 3) {
+ output.writeChar(chars[prev], prev, tagArray2);
+ output.writeChar(chars[prev + 1], prev + 1, tagArray2);
+ output.writeChar(chars[prev + 2], prev + 2, tagArray2);
+ }
+
+ // write any pre-base consonants
+ le_bool supressVattu = TRUE;
+
+ for (i = baseLimit; i < baseConsonant; i += 1) {
+ LEUnicode ch = chars[i];
+ // Don't put 'blwf' on first consonant.
+ FeatureMask features = (i == baseLimit? tagArray2 : tagArray1);
+
+ charClass = classTable->getCharClass(ch);
+ nextClass = classTable->getCharClass(chars[i + 1]);
+ hasNukta = IndicClassTable::isNukta(nextClass);
+
+ if (IndicClassTable::isConsonant(charClass)) {
+ if (IndicClassTable::isVattu(charClass) && !hasNukta && supressVattu) {
+ features = tagArray4;
+ }
+
+ supressVattu = IndicClassTable::isVattu(charClass) && !hasNukta;
+ } else if (IndicClassTable::isVirama(charClass) && chars[i + 1] == C_SIGN_ZWNJ)
+ {
+ features = tagArray4;
+ }
+
+ output.writeChar(ch, i, features);
+ }
+
+ le_int32 bcSpan = baseConsonant + 1;
+
+ if (bcSpan < markStart && classTable->isNukta(chars[bcSpan])) {
+ bcSpan += 1;
+ }
+
+ if (baseConsonant == lastConsonant && bcSpan < markStart &&
+ (classTable->isVirama(chars[bcSpan]) || classTable->isAlLakuna(chars[bcSpan]))) {
+ bcSpan += 1;
+
+ if (bcSpan < markStart && chars[bcSpan] == C_SIGN_ZWNJ) {
+ bcSpan += 1;
+ }
+ }
+
+ // note the base consonant for post-GSUB fixups
+ output.noteBaseConsonant();
+
+ // write base consonant
+ for (i = baseConsonant; i < bcSpan; i += 1) {
+ output.writeChar(chars[i], i, tagArray4);
+ }
+
+ if ((classTable->scriptFlags & SF_MATRAS_AFTER_BASE) != 0) {
+ output.writeMbelow();
+ output.writeSMbelow(); // FIXME: there are no SMs in these scripts...
+ output.writeMabove();
+ output.writeMpost();
+ }
+
+ // write below-base consonants
+ if (baseConsonant != lastConsonant) {
+ for (i = bcSpan + 1; i < postBase; i += 1) {
+ output.writeChar(chars[i], i, tagArray1);
+ }
+
+ if (postBase > lastConsonant) {
+ // write halant that was after base consonant
+ output.writeChar(chars[bcSpan], bcSpan, tagArray1);
+ }
+ }
+
+ // write Mbelow, SMbelow, Mabove
+ if ((classTable->scriptFlags & SF_MATRAS_AFTER_BASE) == 0) {
+ output.writeMbelow();
+ output.writeSMbelow();
+ output.writeMabove();
+ }
+
+ if ((classTable->scriptFlags & SF_REPH_AFTER_BELOW) != 0) {
+ if (baseLimit == prev + 2) {
+ output.writeChar(chars[prev], prev, tagArray0);
+ output.writeChar(chars[prev + 1], prev + 1, tagArray0);
+ }
+
+ output.writeVMabove();
+ output.writeSMabove(); // FIXME: there are no SM's in these scripts...
+ }
+
+ // write post-base consonants
+ // FIXME: does this put the right tags on post-base consonants?
+ if (baseConsonant != lastConsonant) {
+ if (postBase <= lastConsonant) {
+ for (i = postBase; i <= lastConsonant; i += 1) {
+ output.writeChar(chars[i], i, tagArray3);
+ }
+
+ // write halant that was after base consonant
+ output.writeChar(chars[bcSpan], bcSpan, tagArray1);
+ }
+
+ // write the training halant, if there is one
+ if (lastConsonant < matra && classTable->isVirama(chars[matra])) {
+ output.writeChar(chars[matra], matra, tagArray4);
+ }
+ }
+
+ // write Mpost
+ if ((classTable->scriptFlags & SF_MATRAS_AFTER_BASE) == 0) {
+ output.writeMpost();
+ }
+
+ output.writeLengthMark();
+ output.writeAlLakuna();
+
+ // write reph
+ if ((classTable->scriptFlags & SF_REPH_AFTER_BELOW) == 0) {
+ if (baseLimit == prev + 2) {
+ output.writeChar(chars[prev], prev, tagArray0);
+ output.writeChar(chars[prev + 1], prev + 1, tagArray0);
+ }
+
+ output.writeVMabove();
+ output.writeSMabove();
+ }
+
+ output.writeVMpost();
+
+ break;
+ }
+
+ default:
+ break;
+ }
+
+ prev = syllable;
+ }
+
+ *outMPreFixups = mpreFixups;
+
+ return output.getOutputIndex();
+}
+
+void IndicReordering::adjustMPres(MPreFixups *mpreFixups, LEGlyphStorage &glyphStorage, LEErrorCode& success)
+{
+ if (mpreFixups != NULL) {
+ mpreFixups->apply(glyphStorage, success);
+
+ delete mpreFixups;
+ }
+}
+
+void IndicReordering::applyPresentationForms(LEGlyphStorage &glyphStorage, le_int32 count)
+{
+ LEErrorCode success = LE_NO_ERROR;
+
+// This sets us up for 2nd pass of glyph substitution as well as setting the feature masks for the
+// GPOS table lookups
+
+ for ( le_int32 i = 0 ; i < count ; i++ ) {
+ glyphStorage.setAuxData(i, ( presentationFormsMask | positioningFormsMask ), success);
+ }
+
+}
+void IndicReordering::finalReordering(LEGlyphStorage &glyphStorage, le_int32 count)
+{
+ LEErrorCode success = LE_NO_ERROR;
+
+ // Reposition REPH as appropriate
+
+ for ( le_int32 i = 0 ; i < count ; i++ ) {
+
+ le_int32 tmpAuxData = glyphStorage.getAuxData(i,success);
+ LEGlyphID tmpGlyph = glyphStorage.getGlyphID(i,success);
+
+ if ( ( tmpGlyph != NO_GLYPH ) && (tmpAuxData & rephConsonantMask) && !(tmpAuxData & repositionedGlyphMask)) {
+
+ le_bool targetPositionFound = false;
+ le_int32 targetPosition = i+1;
+ le_int32 baseConsonantData;
+
+ while (!targetPositionFound) {
+ tmpGlyph = glyphStorage.getGlyphID(targetPosition,success);
+ tmpAuxData = glyphStorage.getAuxData(targetPosition,success);
+
+ if ( tmpAuxData & baseConsonantMask ) {
+ baseConsonantData = tmpAuxData;
+ targetPositionFound = true;
+ } else {
+ targetPosition++;
+ }
+ }
+
+ // Make sure we are not putting the reph into an empty hole
+
+ le_bool targetPositionHasGlyph = false;
+ while (!targetPositionHasGlyph) {
+ tmpGlyph = glyphStorage.getGlyphID(targetPosition,success);
+ if ( tmpGlyph != NO_GLYPH ) {
+ targetPositionHasGlyph = true;
+ } else {
+ targetPosition--;
+ }
+ }
+
+ // Make sure that REPH is positioned after any above base or post base matras
+ //
+ le_bool checkMatraDone = false;
+ le_int32 checkMatraPosition = targetPosition+1;
+ while ( !checkMatraDone ) {
+ tmpAuxData = glyphStorage.getAuxData(checkMatraPosition,success);
+ if ( checkMatraPosition >= count || ( (tmpAuxData ^ baseConsonantData) & LE_GLYPH_GROUP_MASK)) {
+ checkMatraDone = true;
+ continue;
+ }
+ if ( (tmpAuxData & matraMask) &&
+ (((tmpAuxData & markPositionMask) == aboveBasePosition) ||
+ ((tmpAuxData & markPositionMask) == postBasePosition))) {
+ targetPosition = checkMatraPosition;
+ }
+ checkMatraPosition++;
+ }
+
+ glyphStorage.moveGlyph(i,targetPosition,repositionedGlyphMask);
+ }
+ }
+}
+
+
+le_int32 IndicReordering::v2process(const LEUnicode *chars, le_int32 charCount, le_int32 scriptCode,
+ LEUnicode *outChars, LEGlyphStorage &glyphStorage)
+{
+ const IndicClassTable *classTable = IndicClassTable::getScriptClassTable(scriptCode);
+
+ DynamicProperties dynProps[INDIC_BLOCK_SIZE];
+ IndicReordering::getDynamicProperties(dynProps,classTable);
+
+ IndicReorderingOutput output(outChars, glyphStorage, NULL);
+ le_int32 i, firstConsonant, baseConsonant, secondConsonant, inv_count = 0, beginSyllable = 0;
+ //le_bool lastInWord = FALSE;
+
+ while (beginSyllable < charCount) {
+ le_int32 nextSyllable = findSyllable(classTable, chars, beginSyllable, charCount);
+
+ output.reset();
+
+ // Find the First Consonant
+ for ( firstConsonant = beginSyllable ; firstConsonant < nextSyllable ; firstConsonant++ ) {
+ if ( classTable->isConsonant(chars[firstConsonant]) ) {
+ break;
+ }
+ }
+
+ // Find the base consonant
+
+ baseConsonant = nextSyllable - 1;
+ secondConsonant = firstConsonant;
+
+ // TODO: Use Dynamic Properties for hasBelowBaseForm and hasPostBaseForm()
+
+ while ( baseConsonant > firstConsonant ) {
+ if ( classTable->isConsonant(chars[baseConsonant]) &&
+ !classTable->hasBelowBaseForm(chars[baseConsonant]) &&
+ !classTable->hasPostBaseForm(chars[baseConsonant]) ) {
+ break;
+ }
+ else {
+ if ( classTable->isConsonant(chars[baseConsonant]) ) {
+ secondConsonant = baseConsonant;
+ }
+ baseConsonant--;
+ }
+ }
+
+ // If the syllable starts with Ra + Halant ( in a script that has Reph ) and has more than one
+ // consonant, Ra is excluced from candidates for base consonants
+
+ if ( classTable->isReph(chars[beginSyllable]) &&
+ beginSyllable+1 < nextSyllable && classTable->isVirama(chars[beginSyllable+1]) &&
+ secondConsonant != firstConsonant) {
+ baseConsonant = secondConsonant;
+ }
+
+ // Populate the output
+ for ( i = beginSyllable ; i < nextSyllable ; i++ ) {
+
+ // Handle invalid combinartions
+
+ if ( classTable->isVirama(chars[beginSyllable]) ||
+ classTable->isMatra(chars[beginSyllable]) ||
+ classTable->isVowelModifier(chars[beginSyllable]) ||
+ classTable->isNukta(chars[beginSyllable]) ) {
+ output.writeChar(C_DOTTED_CIRCLE,beginSyllable,basicShapingFormsMask);
+ inv_count++;
+ }
+ output.writeChar(chars[i],i, basicShapingFormsMask);
+
+ }
+
+ // Adjust features and set syllable structure bits
+
+ for ( i = beginSyllable ; i < nextSyllable ; i++ ) {
+
+ FeatureMask outMask = output.getFeatures(i+inv_count);
+ FeatureMask saveMask = outMask;
+
+ // Since reph can only validly occur at the beginning of a syllable
+ // We only apply it to the first 2 characters in the syllable, to keep it from
+ // conflicting with other features ( i.e. rkrf )
+
+ // TODO : Use the dynamic property for determining isREPH
+ if ( i == beginSyllable && i < baseConsonant && classTable->isReph(chars[i]) &&
+ i+1 < nextSyllable && classTable->isVirama(chars[i+1])) {
+ outMask |= rphfFeatureMask;
+ outMask |= rephConsonantMask;
+ output.setFeatures(i+1+inv_count,outMask);
+
+ }
+
+ if ( i == baseConsonant ) {
+ outMask |= baseConsonantMask;
+ }
+
+ if ( classTable->isMatra(chars[i])) {
+ outMask |= matraMask;
+ if ( classTable->hasAboveBaseForm(chars[i])) {
+ outMask |= aboveBasePosition;
+ } else if ( classTable->hasBelowBaseForm(chars[i])) {
+ outMask |= belowBasePosition;
+ }
+ }
+
+ // Don't apply half form to virama that stands alone at the end of a syllable
+ // to prevent half forms from forming when syllable ends with virama
+
+ if ( classTable->isVirama(chars[i]) && (i+1 == nextSyllable) ) {
+ outMask ^= halfFeatureMask;
+ if ( classTable->isConsonant(chars[i-1]) ) {
+ FeatureMask tmp = output.getFeatures(i-1+inv_count);
+ tmp ^= halfFeatureMask;
+ output.setFeatures(i-1+inv_count,tmp);
+ }
+ }
+
+ if ( outMask != saveMask ) {
+ output.setFeatures(i+inv_count,outMask);
+ }
+ }
+
+ output.decomposeReorderMatras(classTable,beginSyllable,nextSyllable,inv_count);
+
+ beginSyllable = nextSyllable;
+ }
+
+
+ return output.getOutputIndex();
+}
+
+
+void IndicReordering::getDynamicProperties( DynamicProperties */*dProps*/, const IndicClassTable *classTable ) {
+
+
+ LEUnicode currentChar;
+ LEUnicode workChars[2];
+ LEGlyphStorage workGlyphs;
+
+ IndicReorderingOutput workOutput(workChars, workGlyphs, NULL);
+
+ //le_int32 offset = 0;
+
+#if 0
+// TODO: Should this section of code have actually been doing something?
+ // First find the relevant virama for the script we are dealing with
+ LEUnicode virama;
+ for ( currentChar = classTable->firstChar ; currentChar <= classTable->lastChar ; currentChar++ ) {
+ if ( classTable->isVirama(currentChar)) {
+ virama = currentChar;
+ break;
+ }
+ }
+#endif
+
+ for ( currentChar = classTable->firstChar ; currentChar <= classTable->lastChar ; currentChar++ ) {
+ if ( classTable->isConsonant(currentChar)) {
+ workOutput.reset();
+ }
+ }
+
+
+}
+
+U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-50.1/layout/IndicReordering.h b/Build/source/libs/icu/icu-50.1/layout/IndicReordering.h
new file mode 100644
index 00000000000..4d61c525220
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/IndicReordering.h
@@ -0,0 +1,345 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2011 - All Rights Reserved
+ *
+ */
+
+#ifndef __INDICREORDERING_H
+#define __INDICREORDERING_H
+
+/**
+ * \file
+ * \internal
+ */
+
+#include "LETypes.h"
+#include "OpenTypeTables.h"
+
+U_NAMESPACE_BEGIN
+
+// Characters that get refered to by name...
+#define C_SIGN_ZWNJ 0x200C
+#define C_SIGN_ZWJ 0x200D
+
+// Character class values
+#define CC_RESERVED 0U
+#define CC_VOWEL_MODIFIER 1U
+#define CC_STRESS_MARK 2U
+#define CC_INDEPENDENT_VOWEL 3U
+#define CC_INDEPENDENT_VOWEL_2 4U
+#define CC_INDEPENDENT_VOWEL_3 5U
+#define CC_CONSONANT 6U
+#define CC_CONSONANT_WITH_NUKTA 7U
+#define CC_NUKTA 8U
+#define CC_DEPENDENT_VOWEL 9U
+#define CC_SPLIT_VOWEL_PIECE_1 10U
+#define CC_SPLIT_VOWEL_PIECE_2 11U
+#define CC_SPLIT_VOWEL_PIECE_3 12U
+#define CC_VIRAMA 13U
+#define CC_ZERO_WIDTH_MARK 14U
+#define CC_AL_LAKUNA 15U
+#define CC_COUNT 16U
+
+// Character class flags
+#define CF_CLASS_MASK 0x0000FFFFU
+
+#define CF_CONSONANT 0x80000000U
+
+#define CF_REPH 0x40000000U
+#define CF_VATTU 0x20000000U
+#define CF_BELOW_BASE 0x10000000U
+#define CF_POST_BASE 0x08000000U
+#define CF_LENGTH_MARK 0x04000000U
+
+#define CF_POS_BEFORE 0x00300000U
+#define CF_POS_BELOW 0x00200000U
+#define CF_POS_ABOVE 0x00100000U
+#define CF_POS_AFTER 0x00000000U
+#define CF_POS_MASK 0x00300000U
+
+#define CF_INDEX_MASK 0x000F0000U
+#define CF_INDEX_SHIFT 16
+
+// Script flag bits
+#define SF_MATRAS_AFTER_BASE 0x80000000U
+#define SF_REPH_AFTER_BELOW 0x40000000U
+#define SF_EYELASH_RA 0x20000000U
+#define SF_MPRE_FIXUP 0x10000000U
+#define SF_FILTER_ZERO_WIDTH 0x08000000U
+
+#define SF_POST_BASE_LIMIT_MASK 0x0000FFFFU
+#define SF_NO_POST_BASE_LIMIT 0x00007FFFU
+
+#define SM_MAX_PIECES 3
+
+typedef LEUnicode SplitMatra[SM_MAX_PIECES];
+
+class MPreFixups;
+class LEGlyphStorage;
+
+// Dynamic Properties ( v2 fonts only )
+typedef le_uint32 DynamicProperties;
+
+#define DP_REPH 0x80000000U
+#define DP_HALF 0x40000000U
+#define DP_PREF 0x20000000U
+#define DP_BLWF 0x10000000U
+#define DP_PSTF 0x08000000U
+
+struct IndicClassTable
+{
+ typedef le_uint32 CharClass;
+ typedef le_uint32 ScriptFlags;
+
+ LEUnicode firstChar;
+ LEUnicode lastChar;
+ le_int32 worstCaseExpansion;
+ ScriptFlags scriptFlags;
+ const CharClass *classTable;
+ const SplitMatra *splitMatraTable;
+
+ inline le_int32 getWorstCaseExpansion() const;
+ inline le_bool getFilterZeroWidth() const;
+
+ CharClass getCharClass(LEUnicode ch) const;
+
+ inline const SplitMatra *getSplitMatra(CharClass charClass) const;
+
+ inline le_bool isVowelModifier(LEUnicode ch) const;
+ inline le_bool isStressMark(LEUnicode ch) const;
+ inline le_bool isConsonant(LEUnicode ch) const;
+ inline le_bool isReph(LEUnicode ch) const;
+ inline le_bool isVirama(LEUnicode ch) const;
+ inline le_bool isAlLakuna(LEUnicode ch) const;
+ inline le_bool isNukta(LEUnicode ch) const;
+ inline le_bool isVattu(LEUnicode ch) const;
+ inline le_bool isMatra(LEUnicode ch) const;
+ inline le_bool isSplitMatra(LEUnicode ch) const;
+ inline le_bool isLengthMark(LEUnicode ch) const;
+ inline le_bool hasPostOrBelowBaseForm(LEUnicode ch) const;
+ inline le_bool hasPostBaseForm(LEUnicode ch) const;
+ inline le_bool hasBelowBaseForm(LEUnicode ch) const;
+ inline le_bool hasAboveBaseForm(LEUnicode ch) const;
+
+ inline static le_bool isVowelModifier(CharClass charClass);
+ inline static le_bool isStressMark(CharClass charClass);
+ inline static le_bool isConsonant(CharClass charClass);
+ inline static le_bool isReph(CharClass charClass);
+ inline static le_bool isVirama(CharClass charClass);
+ inline static le_bool isAlLakuna(CharClass charClass);
+ inline static le_bool isNukta(CharClass charClass);
+ inline static le_bool isVattu(CharClass charClass);
+ inline static le_bool isMatra(CharClass charClass);
+ inline static le_bool isSplitMatra(CharClass charClass);
+ inline static le_bool isLengthMark(CharClass charClass);
+ inline static le_bool hasPostOrBelowBaseForm(CharClass charClass);
+ inline static le_bool hasPostBaseForm(CharClass charClass);
+ inline static le_bool hasBelowBaseForm(CharClass charClass);
+ inline static le_bool hasAboveBaseForm(CharClass charClass);
+
+ static const IndicClassTable *getScriptClassTable(le_int32 scriptCode);
+};
+
+class IndicReordering /* not : public UObject because all methods are static */ {
+public:
+ static le_int32 getWorstCaseExpansion(le_int32 scriptCode);
+
+ static le_bool getFilterZeroWidth(le_int32 scriptCode);
+
+ static le_int32 reorder(const LEUnicode *theChars, le_int32 charCount, le_int32 scriptCode,
+ LEUnicode *outChars, LEGlyphStorage &glyphStorage,
+ MPreFixups **outMPreFixups, LEErrorCode& success);
+
+ static void adjustMPres(MPreFixups *mpreFixups, LEGlyphStorage &glyphStorage, LEErrorCode& success);
+
+ static le_int32 v2process(const LEUnicode *theChars, le_int32 charCount, le_int32 scriptCode,
+ LEUnicode *outChars, LEGlyphStorage &glyphStorage);
+
+ static const FeatureMap *getFeatureMap(le_int32 &count);
+
+ static const FeatureMap *getv2FeatureMap(le_int32 &count);
+
+ static void applyPresentationForms(LEGlyphStorage &glyphStorage, le_int32 count);
+
+ static void finalReordering(LEGlyphStorage &glyphStorage, le_int32 count);
+
+ static void getDynamicProperties(DynamicProperties *dProps, const IndicClassTable *classTable);
+
+private:
+ // do not instantiate
+ IndicReordering();
+
+ static le_int32 findSyllable(const IndicClassTable *classTable, const LEUnicode *chars, le_int32 prev, le_int32 charCount);
+
+};
+
+inline le_int32 IndicClassTable::getWorstCaseExpansion() const
+{
+ return worstCaseExpansion;
+}
+
+inline le_bool IndicClassTable::getFilterZeroWidth() const
+{
+ return (scriptFlags & SF_FILTER_ZERO_WIDTH) != 0;
+}
+
+inline const SplitMatra *IndicClassTable::getSplitMatra(CharClass charClass) const
+{
+ le_int32 index = (charClass & CF_INDEX_MASK) >> CF_INDEX_SHIFT;
+
+ return &splitMatraTable[index - 1];
+}
+
+inline le_bool IndicClassTable::isVowelModifier(CharClass charClass)
+{
+ return (charClass & CF_CLASS_MASK) == CC_VOWEL_MODIFIER;
+}
+
+inline le_bool IndicClassTable::isStressMark(CharClass charClass)
+{
+ return (charClass & CF_CLASS_MASK) == CC_STRESS_MARK;
+}
+
+inline le_bool IndicClassTable::isConsonant(CharClass charClass)
+{
+ return (charClass & CF_CONSONANT) != 0;
+}
+
+inline le_bool IndicClassTable::isReph(CharClass charClass)
+{
+ return (charClass & CF_REPH) != 0;
+}
+
+inline le_bool IndicClassTable::isNukta(CharClass charClass)
+{
+ return (charClass & CF_CLASS_MASK) == CC_NUKTA;
+}
+
+inline le_bool IndicClassTable::isVirama(CharClass charClass)
+{
+ return (charClass & CF_CLASS_MASK) == CC_VIRAMA;
+}
+
+inline le_bool IndicClassTable::isAlLakuna(CharClass charClass)
+{
+ return (charClass & CF_CLASS_MASK) == CC_AL_LAKUNA;
+}
+
+inline le_bool IndicClassTable::isVattu(CharClass charClass)
+{
+ return (charClass & CF_VATTU) != 0;
+}
+
+inline le_bool IndicClassTable::isMatra(CharClass charClass)
+{
+ charClass &= CF_CLASS_MASK;
+
+ return charClass >= CC_DEPENDENT_VOWEL && charClass <= CC_SPLIT_VOWEL_PIECE_3;
+}
+
+inline le_bool IndicClassTable::isSplitMatra(CharClass charClass)
+{
+ return (charClass & CF_INDEX_MASK) != 0;
+}
+
+inline le_bool IndicClassTable::isLengthMark(CharClass charClass)
+{
+ return (charClass & CF_LENGTH_MARK) != 0;
+}
+
+inline le_bool IndicClassTable::hasPostOrBelowBaseForm(CharClass charClass)
+{
+ return (charClass & (CF_POST_BASE | CF_BELOW_BASE)) != 0;
+}
+
+inline le_bool IndicClassTable::hasPostBaseForm(CharClass charClass)
+{
+ return (charClass & CF_POST_BASE) != 0;
+}
+
+inline le_bool IndicClassTable::hasBelowBaseForm(CharClass charClass)
+{
+ return (charClass & CF_BELOW_BASE) != 0;
+}
+
+inline le_bool IndicClassTable::hasAboveBaseForm(CharClass charClass)
+{
+ return ((charClass & CF_POS_MASK) == CF_POS_ABOVE);
+}
+
+inline le_bool IndicClassTable::isVowelModifier(LEUnicode ch) const
+{
+ return isVowelModifier(getCharClass(ch));
+}
+
+inline le_bool IndicClassTable::isStressMark(LEUnicode ch) const
+{
+ return isStressMark(getCharClass(ch));
+}
+
+inline le_bool IndicClassTable::isConsonant(LEUnicode ch) const
+{
+ return isConsonant(getCharClass(ch));
+}
+
+inline le_bool IndicClassTable::isReph(LEUnicode ch) const
+{
+ return isReph(getCharClass(ch));
+}
+
+inline le_bool IndicClassTable::isVirama(LEUnicode ch) const
+{
+ return isVirama(getCharClass(ch));
+}
+
+inline le_bool IndicClassTable::isAlLakuna(LEUnicode ch) const
+{
+ return isAlLakuna(getCharClass(ch));
+}
+
+inline le_bool IndicClassTable::isNukta(LEUnicode ch) const
+{
+ return isNukta(getCharClass(ch));
+}
+
+inline le_bool IndicClassTable::isVattu(LEUnicode ch) const
+{
+ return isVattu(getCharClass(ch));
+}
+
+inline le_bool IndicClassTable::isMatra(LEUnicode ch) const
+{
+ return isMatra(getCharClass(ch));
+}
+
+inline le_bool IndicClassTable::isSplitMatra(LEUnicode ch) const
+{
+ return isSplitMatra(getCharClass(ch));
+}
+
+inline le_bool IndicClassTable::isLengthMark(LEUnicode ch) const
+{
+ return isLengthMark(getCharClass(ch));
+}
+
+inline le_bool IndicClassTable::hasPostOrBelowBaseForm(LEUnicode ch) const
+{
+ return hasPostOrBelowBaseForm(getCharClass(ch));
+}
+
+inline le_bool IndicClassTable::hasPostBaseForm(LEUnicode ch) const
+{
+ return hasPostBaseForm(getCharClass(ch));
+}
+
+inline le_bool IndicClassTable::hasBelowBaseForm(LEUnicode ch) const
+{
+ return hasBelowBaseForm(getCharClass(ch));
+}
+
+inline le_bool IndicClassTable::hasAboveBaseForm(LEUnicode ch) const
+{
+ return hasAboveBaseForm(getCharClass(ch));
+}
+U_NAMESPACE_END
+#endif
diff --git a/Build/source/libs/icu/icu-50.1/layout/KernTable.cpp b/Build/source/libs/icu/icu-50.1/layout/KernTable.cpp
new file mode 100644
index 00000000000..45ce091d440
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/KernTable.cpp
@@ -0,0 +1,231 @@
+/*
+ * @(#)KernTable.cpp 1.1 04/10/13
+ *
+ * (C) Copyright IBM Corp. 2004-2007 - All Rights Reserved
+ *
+ */
+
+#include "KernTable.h"
+#include "LEFontInstance.h"
+#include "LEGlyphStorage.h"
+
+#include "LESwaps.h"
+#include "OpenTypeUtilities.h"
+
+#include <stdio.h>
+
+#define DEBUG 0
+
+U_NAMESPACE_BEGIN
+
+struct PairInfo {
+ le_uint16 left; // left glyph of kern pair
+ le_uint16 right; // right glyph of kern pair
+ le_int16 value; // fword, kern value in funits
+};
+#define KERN_PAIRINFO_SIZE 6
+
+#define SWAP_KEY(p) (((le_uint32) SWAPW((p)->left) << 16) | SWAPW((p)->right))
+
+struct Subtable_0 {
+ le_uint16 nPairs;
+ le_uint16 searchRange;
+ le_uint16 entrySelector;
+ le_uint16 rangeShift;
+};
+#define KERN_SUBTABLE_0_HEADER_SIZE 8
+
+// Kern table version 0 only
+struct SubtableHeader {
+ le_uint16 version;
+ le_uint16 length;
+ le_uint16 coverage;
+};
+#define KERN_SUBTABLE_HEADER_SIZE 6
+
+// Version 0 only, version 1 has different layout
+struct KernTableHeader {
+ le_uint16 version;
+ le_uint16 nTables;
+};
+#define KERN_TABLE_HEADER_SIZE 4
+
+#define COVERAGE_HORIZONTAL 0x1
+#define COVERAGE_MINIMUM 0x2
+#define COVERAGE_CROSS 0x4
+#define COVERAGE_OVERRIDE 0x8
+
+/*
+ * This implementation has support for only one subtable, so if the font has
+ * multiple subtables, only the first will be used. If this turns out to
+ * be a problem in practice we should add it.
+ *
+ * This also supports only version 0 of the kern table header, only
+ * Apple supports the latter.
+ *
+ * This implementation isn't careful about the kern table flags, and
+ * might invoke kerning when it is not supposed to. That too I'm
+ * leaving for a bug fix.
+ *
+ * TODO: support multiple subtables
+ * TODO: respect header flags
+ */
+KernTable::KernTable(const LEFontInstance* font, const void* tableData)
+ : pairs(0), font(font)
+{
+ const KernTableHeader* header = (const KernTableHeader*)tableData;
+ if (header == 0) {
+#if DEBUG
+ fprintf(stderr, "no kern data\n");
+#endif
+ return;
+ }
+
+#if DEBUG
+ // dump first 32 bytes of header
+ for (int i = 0; i < 64; ++i) {
+ fprintf(stderr, "%0.2x ", ((const char*)tableData)[i]&0xff);
+ if (((i+1)&0xf) == 0) {
+ fprintf(stderr, "\n");
+ } else if (((i+1)&0x7) == 0) {
+ fprintf(stderr, " ");
+ }
+ }
+#endif
+
+ if (header->version == 0 && SWAPW(header->nTables) > 0) {
+ const SubtableHeader* subhead = (const SubtableHeader*)((char*)tableData + KERN_TABLE_HEADER_SIZE);
+
+ if (subhead->version == 0) {
+ coverage = SWAPW(subhead->coverage);
+
+ if (coverage & COVERAGE_HORIZONTAL) { // only handle horizontal kerning
+ const Subtable_0* table = (const Subtable_0*)((char*)subhead + KERN_SUBTABLE_HEADER_SIZE);
+
+ nPairs = SWAPW(table->nPairs);
+
+#if 0 // some old fonts have bad values here...
+ searchRange = SWAPW(table->searchRange);
+ entrySelector = SWAPW(table->entrySelector);
+ rangeShift = SWAPW(table->rangeShift);
+#else
+ entrySelector = OpenTypeUtilities::highBit(nPairs);
+ searchRange = (1 << entrySelector) * KERN_PAIRINFO_SIZE;
+ rangeShift = (nPairs * KERN_PAIRINFO_SIZE) - searchRange;
+#endif
+
+ pairs = (const PairInfo*)((char*)table + KERN_SUBTABLE_0_HEADER_SIZE);
+
+#if DEBUG
+ fprintf(stderr, "coverage: %0.4x nPairs: %d pairs 0x%x\n", coverage, nPairs, pairs);
+ fprintf(stderr, " searchRange: %d entrySelector: %d rangeShift: %d\n", searchRange, entrySelector, rangeShift);
+
+ {
+ // dump part of the pair list
+ char ids[256];
+
+ for (int i = 256; --i >= 0;) {
+ LEGlyphID id = font->mapCharToGlyph(i);
+
+ if (id < 256) {
+ ids[id] = (char)i;
+ }
+ }
+
+ const PairInfo* p = pairs;
+
+ for (i = 0; i < nPairs; ++i, p = (const PairInfo*)((char*)p+KERN_PAIRINFO_SIZE)) {
+ le_uint16 left = p->left;
+ le_uint16 right = p->right;
+
+ if (left < 256 && right < 256) {
+ char c = ids[left];
+
+ if (c > 0x20 && c < 0x7f) {
+ fprintf(stderr, "%c/", c & 0xff);
+ } else {
+ printf(stderr, "%0.2x/", c & 0xff);
+ }
+
+ c = ids[right];
+ if (c > 0x20 && c < 0x7f) {
+ fprintf(stderr, "%c ", c & 0xff);
+ } else {
+ fprintf(stderr, "%0.2x ", c & 0xff);
+ }
+ }
+ }
+ }
+#endif
+ }
+ }
+ }
+}
+
+
+/*
+ * Process the glyph positions. The positions array has two floats for each
+ * glyph, plus a trailing pair to mark the end of the last glyph.
+ */
+void KernTable::process(LEGlyphStorage& storage)
+{
+ if (pairs) {
+ LEErrorCode success = LE_NO_ERROR;
+
+ le_uint32 key = storage[0]; // no need to mask off high bits
+ float adjust = 0;
+
+ for (int i = 1, e = storage.getGlyphCount(); i < e; ++i) {
+ key = key << 16 | (storage[i] & 0xffff);
+
+ // argh, to do a binary search, we need to have the pair list in sorted order
+ // but it is not in sorted order on win32 platforms because of the endianness difference
+ // so either I have to swap the element each time I examine it, or I have to swap
+ // all the elements ahead of time and store them in the font
+
+ const PairInfo* p = pairs;
+ const PairInfo* tp = (const PairInfo*)((char*)p + rangeShift);
+
+ if (key > SWAP_KEY(tp)) {
+ p = tp;
+ }
+
+#if DEBUG
+ fprintf(stderr, "binary search for %0.8x\n", key);
+#endif
+
+ le_uint32 probe = searchRange;
+
+ while (probe > KERN_PAIRINFO_SIZE) {
+ probe >>= 1;
+ tp = (const PairInfo*)((char*)p + probe);
+
+ le_uint32 tkey = SWAP_KEY(tp);
+#if DEBUG
+ fprintf(stdout, " %.3d (%0.8x)\n", ((char*)tp - (char*)pairs)/KERN_PAIRINFO_SIZE, tkey);
+#endif
+ if (tkey <= key) {
+ if (tkey == key) {
+ le_int16 value = SWAPW(tp->value);
+#if DEBUG
+ fprintf(stdout, "binary found kerning pair %x:%x at %d, value: 0x%x (%g)\n",
+ storage[i-1], storage[i], i, value & 0xffff, font->xUnitsToPoints(value));
+ fflush(stdout);
+#endif
+ adjust += font->xUnitsToPoints(value);
+ break;
+ }
+
+ p = tp;
+ }
+ }
+
+ storage.adjustPosition(i, adjust, 0, success);
+ }
+
+ storage.adjustPosition(storage.getGlyphCount(), adjust, 0, success);
+ }
+}
+
+U_NAMESPACE_END
+
diff --git a/Build/source/libs/icu/icu-50.1/layout/KernTable.h b/Build/source/libs/icu/icu-50.1/layout/KernTable.h
new file mode 100644
index 00000000000..b8322cf1fe6
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/KernTable.h
@@ -0,0 +1,51 @@
+/*
+ * @(#)KernTable.h 1.1 04/10/13
+ *
+ * (C) Copyright IBM Corp. 2004-2005 - All Rights Reserved
+ *
+ */
+
+#ifndef __KERNTABLE_H
+#define __KERNTABLE_H
+
+#ifndef __LETYPES_H
+#include "LETypes.h"
+#endif
+
+#include "LETypes.h"
+//#include "LEFontInstance.h"
+//#include "LEGlyphStorage.h"
+
+#include <stdio.h>
+
+U_NAMESPACE_BEGIN
+struct PairInfo;
+class LEFontInstance;
+class LEGlyphStorage;
+
+/**
+ * Windows type 0 kerning table support only for now.
+ */
+class U_LAYOUT_API KernTable
+{
+ private:
+ le_uint16 coverage;
+ le_uint16 nPairs;
+ const PairInfo* pairs;
+ const LEFontInstance* font;
+ le_uint16 searchRange;
+ le_uint16 entrySelector;
+ le_uint16 rangeShift;
+
+ public:
+ KernTable(const LEFontInstance* font, const void* tableData);
+
+ /*
+ * Process the glyph positions.
+ */
+ void process(LEGlyphStorage& storage);
+};
+
+U_NAMESPACE_END
+
+#endif
diff --git a/Build/source/libs/icu/icu-50.1/layout/KhmerLayoutEngine.cpp b/Build/source/libs/icu/icu-50.1/layout/KhmerLayoutEngine.cpp
new file mode 100644
index 00000000000..f4bbb603735
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/KhmerLayoutEngine.cpp
@@ -0,0 +1,81 @@
+
+/*
+ * (C) Copyright IBM Corp. 1998-2008 - All Rights Reserved
+ *
+ * This file is a modification of the ICU file IndicLayoutEngine.cpp
+ * by Jens Herden and Javier Sola for Khmer language
+ *
+ */
+
+
+#include "OpenTypeLayoutEngine.h"
+#include "KhmerLayoutEngine.h"
+#include "LEGlyphStorage.h"
+#include "KhmerReordering.h"
+
+U_NAMESPACE_BEGIN
+
+UOBJECT_DEFINE_RTTI_IMPLEMENTATION(KhmerOpenTypeLayoutEngine)
+
+KhmerOpenTypeLayoutEngine::KhmerOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
+ le_int32 typoFlags, const GlyphSubstitutionTableHeader *gsubTable, LEErrorCode &success)
+ : OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable, success)
+{
+ fFeatureMap = KhmerReordering::getFeatureMap(fFeatureMapCount);
+ fFeatureOrder = TRUE;
+}
+
+KhmerOpenTypeLayoutEngine::KhmerOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
+ le_int32 typoFlags, LEErrorCode &success)
+ : OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, success)
+{
+ fFeatureMap = KhmerReordering::getFeatureMap(fFeatureMapCount);
+ fFeatureOrder = TRUE;
+}
+
+KhmerOpenTypeLayoutEngine::~KhmerOpenTypeLayoutEngine()
+{
+ // nothing to do
+}
+
+// Input: characters
+// Output: characters, char indices, tags
+// Returns: output character count
+le_int32 KhmerOpenTypeLayoutEngine::characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
+ LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success)
+{
+ if (LE_FAILURE(success)) {
+ return 0;
+ }
+
+ if (chars == NULL || offset < 0 || count < 0 || max < 0 || offset >= max || offset + count > max) {
+ success = LE_ILLEGAL_ARGUMENT_ERROR;
+ return 0;
+ }
+
+ le_int32 worstCase = count * 3; // worst case is 3 for Khmer TODO check if 2 is enough
+
+ outChars = LE_NEW_ARRAY(LEUnicode, worstCase);
+
+ if (outChars == NULL) {
+ success = LE_MEMORY_ALLOCATION_ERROR;
+ return 0;
+ }
+
+ glyphStorage.allocateGlyphArray(worstCase, rightToLeft, success);
+ glyphStorage.allocateAuxData(success);
+
+ if (LE_FAILURE(success)) {
+ LE_DELETE_ARRAY(outChars);
+ return 0;
+ }
+
+ // NOTE: assumes this allocates featureTags...
+ // (probably better than doing the worst case stuff here...)
+ le_int32 outCharCount = KhmerReordering::reorder(&chars[offset], count, fScriptCode, outChars, glyphStorage);
+
+ glyphStorage.adoptGlyphCount(outCharCount);
+ return outCharCount;
+}
+
+U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-50.1/layout/KhmerLayoutEngine.h b/Build/source/libs/icu/icu-50.1/layout/KhmerLayoutEngine.h
new file mode 100644
index 00000000000..60a34f6066c
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/KhmerLayoutEngine.h
@@ -0,0 +1,131 @@
+
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2008 - All Rights Reserved
+ *
+ * This file is a modification of the ICU file IndicLayoutEngine.h
+ * by Jens Herden and Javier Sola for Khmer language
+ *
+ */
+
+#ifndef __KHMERLAYOUTENGINE_H
+#define __KHMERLAYOUTENGINE_H
+
+// #include "LETypes.h"
+// #include "LEFontInstance.h"
+// #include "LEGlyphFilter.h"
+// #include "LayoutEngine.h"
+// #include "OpenTypeLayoutEngine.h"
+
+// #include "GlyphSubstitutionTables.h"
+// #include "GlyphDefinitionTables.h"
+// #include "GlyphPositioningTables.h"
+
+U_NAMESPACE_BEGIN
+
+// class MPreFixups;
+// class LEGlyphStorage;
+
+/**
+ * This class implements OpenType layout for Khmer OpenType fonts, as
+ * specified by Microsoft in "Creating and Supporting OpenType Fonts for
+ * Khmer Scripts" (http://www.microsoft.com/typography/otspec/indicot/default.htm) TODO: change url
+ *
+ * This class overrides the characterProcessing method to do Khmer character processing
+ * and reordering (See the MS spec. for more details)
+ *
+ * @internal
+ */
+class KhmerOpenTypeLayoutEngine : public OpenTypeLayoutEngine
+{
+public:
+ /**
+ * This is the main constructor. It constructs an instance of KhmerOpenTypeLayoutEngine for
+ * a particular font, script and language. It takes the GSUB table as a parameter since
+ * LayoutEngine::layoutEngineFactory has to read the GSUB table to know that it has an
+ * Khmer OpenType font.
+ *
+ * @param fontInstance - the font
+ * @param scriptCode - the script
+ * @param langaugeCode - the language
+ * @param gsubTable - the GSUB table
+ * @param success - set to an error code if the operation fails
+ *
+ * @see LayoutEngine::layoutEngineFactory
+ * @see OpenTypeLayoutEngine
+ * @see ScriptAndLangaugeTags.h for script and language codes
+ *
+ * @internal
+ */
+ KhmerOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
+ le_int32 typoFlags, const GlyphSubstitutionTableHeader *gsubTable, LEErrorCode &success);
+
+ /**
+ * This constructor is used when the font requires a "canned" GSUB table which can't be known
+ * until after this constructor has been invoked.
+ *
+ * @param fontInstance - the font
+ * @param scriptCode - the script
+ * @param langaugeCode - the language
+ * @param success - set to an error code if the operation fails
+ *
+ * @see OpenTypeLayoutEngine
+ * @see ScriptAndLangaugeTags.h for script and language codes
+ *
+ * @internal
+ */
+ KhmerOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
+ le_int32 typoFlags, LEErrorCode &success);
+
+ /**
+ * The destructor, virtual for correct polymorphic invocation.
+ *
+ * @internal
+ */
+ virtual ~KhmerOpenTypeLayoutEngine();
+
+ /**
+ * ICU "poor man's RTTI", returns a UClassID for the actual class.
+ *
+ * @stable ICU 2.8
+ */
+ virtual UClassID getDynamicClassID() const;
+
+ /**
+ * ICU "poor man's RTTI", returns a UClassID for this class.
+ *
+ * @stable ICU 2.8
+ */
+ static UClassID getStaticClassID();
+
+protected:
+
+ /**
+ * This method does Khmer OpenType character processing. It assigns the OpenType feature
+ * tags to the characters, and may generate output characters which have been reordered.
+ * It may also split some vowels, resulting in more output characters than input characters.
+ *
+ * Input parameters:
+ * @param chars - the input character context
+ * @param offset - the index of the first character to process
+ * @param count - the number of characters to process
+ * @param max - the number of characters in the input context
+ * @param rightToLeft - <code>TRUE</code> if the characters are in a right to left directional run
+ * @param glyphStorage - the glyph storage object. The glyph and character index arrays will be set.
+ * the auxillary data array will be set to the feature tags.
+ *
+ * Output parameters:
+ * @param success - set to an error code if the operation fails
+ *
+ * @return the output character count
+ *
+ * @internal
+ */
+ virtual le_int32 characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
+ LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success);
+
+};
+
+U_NAMESPACE_END
+#endif
+
diff --git a/Build/source/libs/icu/icu-50.1/layout/KhmerReordering.cpp b/Build/source/libs/icu/icu-50.1/layout/KhmerReordering.cpp
new file mode 100644
index 00000000000..20c2ed4a18a
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/KhmerReordering.cpp
@@ -0,0 +1,499 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2007 - All Rights Reserved
+ *
+ * This file is a modification of the ICU file IndicReordering.cpp
+ * by Jens Herden and Javier Sola for Khmer language
+ *
+ */
+
+#include "LETypes.h"
+#include "OpenTypeTables.h"
+#include "KhmerReordering.h"
+#include "LEGlyphStorage.h"
+
+
+U_NAMESPACE_BEGIN
+
+// Characters that get refered to by name...
+enum
+{
+ C_SIGN_ZWNJ = 0x200C,
+ C_SIGN_ZWJ = 0x200D,
+ C_DOTTED_CIRCLE = 0x25CC,
+ C_RO = 0x179A,
+ C_VOWEL_AA = 0x17B6,
+ C_SIGN_NIKAHIT = 0x17C6,
+ C_VOWEL_E = 0x17C1,
+ C_COENG = 0x17D2
+};
+
+
+enum
+{
+ // simple classes, they are used in the statetable (in this file) to control the length of a syllable
+ // they are also used to know where a character should be placed (location in reference to the base character)
+ // and also to know if a character, when independtly displayed, should be displayed with a dotted-circle to
+ // indicate error in syllable construction
+ _xx = KhmerClassTable::CC_RESERVED,
+ _sa = KhmerClassTable::CC_SIGN_ABOVE | KhmerClassTable::CF_DOTTED_CIRCLE | KhmerClassTable::CF_POS_ABOVE,
+ _sp = KhmerClassTable::CC_SIGN_AFTER | KhmerClassTable::CF_DOTTED_CIRCLE| KhmerClassTable::CF_POS_AFTER,
+ _c1 = KhmerClassTable::CC_CONSONANT | KhmerClassTable::CF_CONSONANT,
+ _c2 = KhmerClassTable::CC_CONSONANT2 | KhmerClassTable::CF_CONSONANT,
+ _c3 = KhmerClassTable::CC_CONSONANT3 | KhmerClassTable::CF_CONSONANT,
+ _rb = KhmerClassTable::CC_ROBAT | KhmerClassTable::CF_POS_ABOVE | KhmerClassTable::CF_DOTTED_CIRCLE,
+ _cs = KhmerClassTable::CC_CONSONANT_SHIFTER | KhmerClassTable::CF_DOTTED_CIRCLE | KhmerClassTable::CF_SHIFTER,
+ _dl = KhmerClassTable::CC_DEPENDENT_VOWEL | KhmerClassTable::CF_POS_BEFORE | KhmerClassTable::CF_DOTTED_CIRCLE,
+ _db = KhmerClassTable::CC_DEPENDENT_VOWEL | KhmerClassTable::CF_POS_BELOW | KhmerClassTable::CF_DOTTED_CIRCLE,
+ _da = KhmerClassTable::CC_DEPENDENT_VOWEL | KhmerClassTable::CF_POS_ABOVE | KhmerClassTable::CF_DOTTED_CIRCLE | KhmerClassTable::CF_ABOVE_VOWEL,
+ _dr = KhmerClassTable::CC_DEPENDENT_VOWEL | KhmerClassTable::CF_POS_AFTER | KhmerClassTable::CF_DOTTED_CIRCLE,
+ _co = KhmerClassTable::CC_COENG | KhmerClassTable::CF_COENG | KhmerClassTable::CF_DOTTED_CIRCLE,
+
+ // split vowel
+ _va = _da | KhmerClassTable::CF_SPLIT_VOWEL,
+ _vr = _dr | KhmerClassTable::CF_SPLIT_VOWEL
+};
+
+
+// Character class tables
+// _xx character does not combine into syllable, such as numbers, puntuation marks, non-Khmer signs...
+// _sa Sign placed above the base
+// _sp Sign placed after the base
+// _c1 Consonant of type 1 or independent vowel (independent vowels behave as type 1 consonants)
+// _c2 Consonant of type 2 (only RO)
+// _c3 Consonant of type 3
+// _rb Khmer sign robat u17CC. combining mark for subscript consonants
+// _cd Consonant-shifter
+// _dl Dependent vowel placed before the base (left of the base)
+// _db Dependent vowel placed below the base
+// _da Dependent vowel placed above the base
+// _dr Dependent vowel placed behind the base (right of the base)
+// _co Khmer combining mark COENG u17D2, combines with the consonant or independent vowel following
+// it to create a subscript consonant or independent vowel
+// _va Khmer split vowel in wich the first part is before the base and the second one above the base
+// _vr Khmer split vowel in wich the first part is before the base and the second one behind (right of) the base
+
+static const KhmerClassTable::CharClass khmerCharClasses[] =
+{
+ _c1, _c1, _c1, _c3, _c1, _c1, _c1, _c1, _c3, _c1, _c1, _c1, _c1, _c3, _c1, _c1, // 1780 - 178F
+ _c1, _c1, _c1, _c1, _c3, _c1, _c1, _c1, _c1, _c3, _c2, _c1, _c1, _c1, _c3, _c3, // 1790 - 179F
+ _c1, _c3, _c1, _c1, _c1, _c1, _c1, _c1, _c1, _c1, _c1, _c1, _c1, _c1, _c1, _c1, // 17A0 - 17AF
+ _c1, _c1, _c1, _c1, _dr, _dr, _dr, _da, _da, _da, _da, _db, _db, _db, _va, _vr, // 17B0 - 17BF
+ _vr, _dl, _dl, _dl, _vr, _vr, _sa, _sp, _sp, _cs, _cs, _sa, _rb, _sa, _sa, _sa, // 17C0 - 17CF
+ _sa, _sa, _co, _sa, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _sa, _xx, _xx, // 17D0 - 17DF
+};
+
+
+//
+// Khmer Class Tables
+//
+
+//
+// The range of characters defined in the above table is defined here. FOr Khmer 1780 to 17DF
+// Even if the Khmer range is bigger, all other characters are not combinable, and therefore treated
+// as _xx
+static const KhmerClassTable khmerClassTable = {0x1780, 0x17df, khmerCharClasses};
+
+
+// Below we define how a character in the input string is either in the khmerCharClasses table
+// (in which case we get its type back), a ZWJ or ZWNJ (two characters that may appear
+// within the syllable, but are not in the table) we also get their type back, or an unknown object
+// in which case we get _xx (CC_RESERVED) back
+KhmerClassTable::CharClass KhmerClassTable::getCharClass(LEUnicode ch) const
+{
+
+ if (ch == C_SIGN_ZWJ) {
+ return CC_ZERO_WIDTH_J_MARK;
+ }
+
+ if (ch == C_SIGN_ZWNJ) {
+ return CC_ZERO_WIDTH_NJ_MARK;
+ }
+
+ if (ch < firstChar || ch > lastChar) {
+ return CC_RESERVED;
+ }
+
+ return classTable[ch - firstChar];
+}
+
+const KhmerClassTable *KhmerClassTable::getKhmerClassTable()
+{
+ return &khmerClassTable;
+}
+
+
+
+class KhmerReorderingOutput : public UMemory {
+private:
+ le_int32 fSyllableCount;
+ le_int32 fOutIndex;
+ LEUnicode *fOutChars;
+
+ LEGlyphStorage &fGlyphStorage;
+
+
+public:
+ KhmerReorderingOutput(LEUnicode *outChars, LEGlyphStorage &glyphStorage)
+ : fSyllableCount(0), fOutIndex(0), fOutChars(outChars), fGlyphStorage(glyphStorage)
+ {
+ // nothing else to do...
+ }
+
+ ~KhmerReorderingOutput()
+ {
+ // nothing to do here...
+ }
+
+ void reset()
+ {
+ fSyllableCount += 1;
+ }
+
+ void writeChar(LEUnicode ch, le_uint32 charIndex, FeatureMask charFeatures)
+ {
+ LEErrorCode success = LE_NO_ERROR;
+
+ fOutChars[fOutIndex] = ch;
+
+ fGlyphStorage.setCharIndex(fOutIndex, charIndex, success);
+ fGlyphStorage.setAuxData(fOutIndex, charFeatures | (fSyllableCount & LE_GLYPH_GROUP_MASK), success);
+
+ fOutIndex += 1;
+ }
+
+ le_int32 getOutputIndex()
+ {
+ return fOutIndex;
+ }
+};
+
+
+#define blwfFeatureTag LE_BLWF_FEATURE_TAG
+#define pstfFeatureTag LE_PSTF_FEATURE_TAG
+#define presFeatureTag LE_PRES_FEATURE_TAG
+#define blwsFeatureTag LE_BLWS_FEATURE_TAG
+#define abvsFeatureTag LE_ABVS_FEATURE_TAG
+#define pstsFeatureTag LE_PSTS_FEATURE_TAG
+
+#define blwmFeatureTag LE_BLWM_FEATURE_TAG
+#define abvmFeatureTag LE_ABVM_FEATURE_TAG
+#define distFeatureTag LE_DIST_FEATURE_TAG
+
+#define prefFeatureTag LE_PREF_FEATURE_TAG
+#define abvfFeatureTag LE_ABVF_FEATURE_TAG
+#define cligFeatureTag LE_CLIG_FEATURE_TAG
+#define mkmkFeatureTag LE_MKMK_FEATURE_TAG
+
+#define prefFeatureMask 0x80000000UL
+#define blwfFeatureMask 0x40000000UL
+#define abvfFeatureMask 0x20000000UL
+#define pstfFeatureMask 0x10000000UL
+#define presFeatureMask 0x08000000UL
+#define blwsFeatureMask 0x04000000UL
+#define abvsFeatureMask 0x02000000UL
+#define pstsFeatureMask 0x01000000UL
+#define cligFeatureMask 0x00800000UL
+#define distFeatureMask 0x00400000UL
+#define blwmFeatureMask 0x00200000UL
+#define abvmFeatureMask 0x00100000UL
+#define mkmkFeatureMask 0x00080000UL
+
+#define tagPref (prefFeatureMask | presFeatureMask | cligFeatureMask | distFeatureMask)
+#define tagAbvf (abvfFeatureMask | abvsFeatureMask | cligFeatureMask | distFeatureMask | abvmFeatureMask | mkmkFeatureMask)
+#define tagPstf (blwfFeatureMask | blwsFeatureMask | prefFeatureMask | presFeatureMask | pstfFeatureMask | pstsFeatureMask | cligFeatureMask | distFeatureMask | blwmFeatureMask)
+#define tagBlwf (blwfFeatureMask | blwsFeatureMask | cligFeatureMask | distFeatureMask | blwmFeatureMask | mkmkFeatureMask)
+#define tagDefault (prefFeatureMask | blwfFeatureMask | presFeatureMask | blwsFeatureMask | cligFeatureMask | distFeatureMask | abvmFeatureMask | blwmFeatureMask | mkmkFeatureMask)
+
+
+
+// These are in the order in which the features need to be applied
+// for correct processing
+static const FeatureMap featureMap[] =
+{
+ // Shaping features
+ {prefFeatureTag, prefFeatureMask},
+ {blwfFeatureTag, blwfFeatureMask},
+ {abvfFeatureTag, abvfFeatureMask},
+ {pstfFeatureTag, pstfFeatureMask},
+ {presFeatureTag, presFeatureMask},
+ {blwsFeatureTag, blwsFeatureMask},
+ {abvsFeatureTag, abvsFeatureMask},
+ {pstsFeatureTag, pstsFeatureMask},
+ {cligFeatureTag, cligFeatureMask},
+
+ // Positioning features
+ {distFeatureTag, distFeatureMask},
+ {blwmFeatureTag, blwmFeatureMask},
+ {abvmFeatureTag, abvmFeatureMask},
+ {mkmkFeatureTag, mkmkFeatureMask},
+};
+
+static const le_int32 featureMapCount = LE_ARRAY_SIZE(featureMap);
+
+// The stateTable is used to calculate the end (the length) of a well
+// formed Khmer Syllable.
+//
+// Each horizontal line is ordered exactly the same way as the values in KhmerClassTable
+// CharClassValues in KhmerReordering.h This coincidence of values allows the
+// follow up of the table.
+//
+// Each line corresponds to a state, which does not necessarily need to be a type
+// of component... for example, state 2 is a base, with is always a first character
+// in the syllable, but the state could be produced a consonant of any type when
+// it is the first character that is analysed (in ground state).
+//
+// Differentiating 3 types of consonants is necessary in order to
+// forbid the use of certain combinations, such as having a second
+// coeng after a coeng RO,
+// The inexistent possibility of having a type 3 after another type 3 is permitted,
+// eliminating it would very much complicate the table, and it does not create typing
+// problems, as the case above.
+//
+// The table is quite complex, in order to limit the number of coeng consonants
+// to 2 (by means of the table).
+//
+// There a peculiarity, as far as Unicode is concerned:
+// - The consonant-shifter is considered in two possible different
+// locations, the one considered in Unicode 3.0 and the one considered in
+// Unicode 4.0. (there is a backwards compatibility problem in this standard).
+
+
+// xx independent character, such as a number, punctuation sign or non-khmer char
+//
+// c1 Khmer consonant of type 1 or an independent vowel
+// that is, a letter in which the subscript for is only under the
+// base, not taking any space to the right or to the left
+//
+// c2 Khmer consonant of type 2, the coeng form takes space under
+// and to the left of the base (only RO is of this type)
+//
+// c3 Khmer consonant of type 3. Its subscript form takes space under
+// and to the right of the base.
+//
+// cs Khmer consonant shifter
+//
+// rb Khmer robat
+//
+// co coeng character (u17D2)
+//
+// dv dependent vowel (including split vowels, they are treated in the same way).
+// even if dv is not defined above, the component that is really tested for is
+// KhmerClassTable::CC_DEPENDENT_VOWEL, which is common to all dependent vowels
+//
+// zwj Zero Width joiner
+//
+// zwnj Zero width non joiner
+//
+// sa above sign
+//
+// sp post sign
+//
+// there are lines with equal content but for an easier understanding
+// (and maybe change in the future) we did not join them
+//
+static const le_int8 khmerStateTable[][KhmerClassTable::CC_COUNT] =
+{
+
+// xx c1 c2 c3 zwnj cs rb co dv sa sp zwj
+ { 1, 2, 2, 2, 1, 1, 1, 6, 1, 1, 1, 2}, // 0 - ground state
+ {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, // 1 - exit state (or sign to the right of the syllable)
+ {-1, -1, -1, -1, 3, 4, 5, 6, 16, 17, 1, -1}, // 2 - Base consonant
+ {-1, -1, -1, -1, -1, 4, -1, -1, 16, -1, -1, -1}, // 3 - First ZWNJ before a register shifter
+ // It can only be followed by a shifter or a vowel
+ {-1, -1, -1, -1, 15, -1, -1, 6, 16, 17, 1, 14}, // 4 - First register shifter
+ {-1, -1, -1, -1, -1, -1, -1, -1, 20, -1, 1, -1}, // 5 - Robat
+ {-1, 7, 8, 9, -1, -1, -1, -1, -1, -1, -1, -1}, // 6 - First Coeng
+ {-1, -1, -1, -1, 12, 13, -1, 10, 16, 17, 1, 14}, // 7 - First consonant of type 1 after coeng
+ {-1, -1, -1, -1, 12, 13, -1, -1, 16, 17, 1, 14}, // 8 - First consonant of type 2 after coeng
+ {-1, -1, -1, -1, 12, 13, -1, 10, 16, 17, 1, 14}, // 9 - First consonant or type 3 after ceong
+ {-1, 11, 11, 11, -1, -1, -1, -1, -1, -1, -1, -1}, // 10 - Second Coeng (no register shifter before)
+ {-1, -1, -1, -1, 15, -1, -1, -1, 16, 17, 1, 14}, // 11 - Second coeng consonant (or ind. vowel) no register shifter before
+ {-1, -1, -1, -1, -1, 13, -1, -1, 16, -1, -1, -1}, // 12 - Second ZWNJ before a register shifter
+ {-1, -1, -1, -1, 15, -1, -1, -1, 16, 17, 1, 14}, // 13 - Second register shifter
+ {-1, -1, -1, -1, -1, -1, -1, -1, 16, -1, -1, -1}, // 14 - ZWJ before vowel
+ {-1, -1, -1, -1, -1, -1, -1, -1, 16, -1, -1, -1}, // 15 - ZWNJ before vowel
+ {-1, -1, -1, -1, -1, -1, -1, -1, -1, 17, 1, 18}, // 16 - dependent vowel
+ {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 18}, // 17 - sign above
+ {-1, -1, -1, -1, -1, -1, -1, 19, -1, -1, -1, -1}, // 18 - ZWJ after vowel
+ {-1, 1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1}, // 19 - Third coeng
+ {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, -1}, // 20 - dependent vowel after a Robat
+
+};
+
+
+const FeatureMap *KhmerReordering::getFeatureMap(le_int32 &count)
+{
+ count = featureMapCount;
+
+ return featureMap;
+}
+
+
+// Given an input string of characters and a location in which to start looking
+// calculate, using the state table, which one is the last character of the syllable
+// that starts in the starting position.
+le_int32 KhmerReordering::findSyllable(const KhmerClassTable *classTable, const LEUnicode *chars, le_int32 prev, le_int32 charCount)
+{
+ le_int32 cursor = prev;
+ le_int8 state = 0;
+
+ while (cursor < charCount) {
+ KhmerClassTable::CharClass charClass = (classTable->getCharClass(chars[cursor]) & KhmerClassTable::CF_CLASS_MASK);
+
+ state = khmerStateTable[state][charClass];
+
+ if (state < 0) {
+ break;
+ }
+
+ cursor += 1;
+ }
+
+ return cursor;
+}
+
+
+// This is the real reordering function as applied to the Khmer language
+
+le_int32 KhmerReordering::reorder(const LEUnicode *chars, le_int32 charCount, le_int32 /*scriptCode*/,
+ LEUnicode *outChars, LEGlyphStorage &glyphStorage)
+{
+ const KhmerClassTable *classTable = KhmerClassTable::getKhmerClassTable();
+
+ KhmerReorderingOutput output(outChars, glyphStorage);
+ KhmerClassTable::CharClass charClass;
+ le_int32 i, prev = 0, coengRo;
+
+
+ // This loop only exits when we reach the end of a run, which may contain
+ // several syllables.
+ while (prev < charCount) {
+ le_int32 syllable = findSyllable(classTable, chars, prev, charCount);
+
+ output.reset();
+
+ // write a pre vowel or the pre part of a split vowel first
+ // and look out for coeng + ro. RO is the only vowel of type 2, and
+ // therefore the only one that requires saving space before the base.
+ coengRo = -1; // There is no Coeng Ro, if found this value will change
+ for (i = prev; i < syllable; i += 1) {
+ charClass = classTable->getCharClass(chars[i]);
+
+ // if a split vowel, write the pre part. In Khmer the pre part
+ // is the same for all split vowels, same glyph as pre vowel C_VOWEL_E
+ if (charClass & KhmerClassTable::CF_SPLIT_VOWEL) {
+ output.writeChar(C_VOWEL_E, i, tagPref);
+ break; // there can be only one vowel
+ }
+
+ // if a vowel with pos before write it out
+ if (charClass & KhmerClassTable::CF_POS_BEFORE) {
+ output.writeChar(chars[i], i, tagPref);
+ break; // there can be only one vowel
+ }
+
+ // look for coeng + ro and remember position
+ // works because coeng + ro is always in front of a vowel (if there is a vowel)
+ // and because CC_CONSONANT2 is enough to identify it, as it is the only consonant
+ // with this flag
+ if ( (charClass & KhmerClassTable::CF_COENG) && (i + 1 < syllable) &&
+ ( (classTable->getCharClass(chars[i + 1]) & KhmerClassTable::CF_CLASS_MASK) == KhmerClassTable::CC_CONSONANT2) )
+ {
+ coengRo = i;
+ }
+ }
+
+ // write coeng + ro if found
+ if (coengRo > -1) {
+ output.writeChar(C_COENG, coengRo, tagPref);
+ output.writeChar(C_RO, coengRo + 1, tagPref);
+ }
+
+ // shall we add a dotted circle?
+ // If in the position in which the base should be (first char in the string) there is
+ // a character that has the Dotted circle flag (a character that cannot be a base)
+ // then write a dotted circle
+ if (classTable->getCharClass(chars[prev]) & KhmerClassTable::CF_DOTTED_CIRCLE) {
+ output.writeChar(C_DOTTED_CIRCLE, prev, tagDefault);
+ }
+
+ // copy what is left to the output, skipping before vowels and coeng Ro if they are present
+ for (i = prev; i < syllable; i += 1) {
+ charClass = classTable->getCharClass(chars[i]);
+
+ // skip a before vowel, it was already processed
+ if (charClass & KhmerClassTable::CF_POS_BEFORE) {
+ continue;
+ }
+
+ // skip coeng + ro, it was already processed
+ if (i == coengRo) {
+ i += 1;
+ continue;
+ }
+
+ switch (charClass & KhmerClassTable::CF_POS_MASK) {
+ case KhmerClassTable::CF_POS_ABOVE :
+ output.writeChar(chars[i], i, tagAbvf);
+ break;
+
+ case KhmerClassTable::CF_POS_AFTER :
+ output.writeChar(chars[i], i, tagPstf);
+ break;
+
+ case KhmerClassTable::CF_POS_BELOW :
+ output.writeChar(chars[i], i, tagBlwf);
+ break;
+
+ default:
+ // assign the correct flags to a coeng consonant
+ // Consonants of type 3 are taged as Post forms and those type 1 as below forms
+ if ( (charClass & KhmerClassTable::CF_COENG) && i + 1 < syllable ) {
+ if ( (classTable->getCharClass(chars[i + 1]) & KhmerClassTable::CF_CLASS_MASK)
+ == KhmerClassTable::CC_CONSONANT3) {
+ output.writeChar(chars[i], i, tagPstf);
+ i += 1;
+ output.writeChar(chars[i], i, tagPstf);
+ }
+ else {
+ output.writeChar(chars[i], i, tagBlwf);
+ i += 1;
+ output.writeChar(chars[i], i, tagBlwf);
+ }
+ break;
+ }
+ // if a shifter is followed by an above vowel change the shifter to below form,
+ // an above vowel can have two possible positions i + 1 or i + 3
+ // (position i+1 corresponds to unicode 3, position i+3 to Unicode 4)
+ // and there is an extra rule for C_VOWEL_AA + C_SIGN_NIKAHIT also for two
+ // different positions, right after the shifter or after a vowel (Unicode 4)
+ if ( (charClass & KhmerClassTable::CF_SHIFTER) && (i + 1 < syllable) ) {
+ if ((classTable->getCharClass(chars[i + 1]) & KhmerClassTable::CF_ABOVE_VOWEL)
+ || (i + 2 < syllable
+ && ( (classTable->getCharClass(chars[i + 1]) & KhmerClassTable::CF_CLASS_MASK) == C_VOWEL_AA)
+ && ( (classTable->getCharClass(chars[i + 2]) & KhmerClassTable::CF_CLASS_MASK) == C_SIGN_NIKAHIT))
+ || (i + 3 < syllable && (classTable->getCharClass(chars[i + 3]) & KhmerClassTable::CF_ABOVE_VOWEL))
+ || (i + 4 < syllable
+ && ( (classTable->getCharClass(chars[i + 3]) & KhmerClassTable::CF_CLASS_MASK) == C_VOWEL_AA)
+ && ( (classTable->getCharClass(chars[i + 4]) & KhmerClassTable::CF_CLASS_MASK) == C_SIGN_NIKAHIT) ) )
+ {
+ output.writeChar(chars[i], i, tagBlwf);
+ break;
+ }
+
+ }
+ // default - any other characters
+ output.writeChar(chars[i], i, tagDefault);
+ break;
+ } // switch
+ } // for
+
+ prev = syllable; // move the pointer to the start of next syllable
+ }
+
+ return output.getOutputIndex();
+}
+
+
+U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-50.1/layout/KhmerReordering.h b/Build/source/libs/icu/icu-50.1/layout/KhmerReordering.h
new file mode 100644
index 00000000000..eecd12dff63
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/KhmerReordering.h
@@ -0,0 +1,132 @@
+/*
+ * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
+ *
+ * This file is a modification of the ICU file IndicReordering.h
+ * by Jens Herden and Javier Sola for Khmer language
+ *
+ */
+
+#ifndef __KHMERREORDERING_H
+#define __KHMERREORDERING_H
+
+/**
+ * \file
+ * \internal
+ */
+
+#include "LETypes.h"
+#include "OpenTypeTables.h"
+
+U_NAMESPACE_BEGIN
+
+class LEGlyphStorage;
+
+// Vocabulary
+// Base -> A consonant or an independent vowel in its full (not subscript) form. It is the
+// center of the syllable, it can be souranded by coeng (subscript) consonants, vowels,
+// split vowels, signs... but there is only one base in a syllable, it has to be coded as
+// the first character of the syllable.
+// split vowel --> vowel that has two parts placed separately (e.g. Before and after the consonant).
+// Khmer language has five of them. Khmer split vowels either have one part before the
+// base and one after the base or they have a part before the base and a part above the base.
+// The first part of all Khmer split vowels is the same character, identical to
+// the glyph of Khmer dependent vowel SRA EI
+// coeng --> modifier used in Khmer to construct coeng (subscript) consonants
+// Differently than indian languages, the coeng modifies the consonant that follows it,
+// not the one preceding it Each consonant has two forms, the base form and the subscript form
+// the base form is the normal one (using the consonants code-point), the subscript form is
+// displayed when the combination coeng + consonant is encountered.
+// Consonant of type 1 -> A consonant which has subscript for that only occupies space under a base consonant
+// Consonant of type 2.-> Its subscript form occupies space under and before the base (only one, RO)
+// Consonant of Type 3 -> Its subscript form occupies space under and after the base (KHO, CHHO, THHO, BA, YO, SA)
+// Consonant shifter -> Khmer has to series of consonants. The same dependent vowel has different sounds
+// if it is attached to a consonant of the first series or a consonant of the second series
+// Most consonants have an equivalent in the other series, but some of theme exist only in
+// one series (for example SA). If we want to use the consonant SA with a vowel sound that
+// can only be done with a vowel sound that corresponds to a vowel accompanying a consonant
+// of the other series, then we need to use a consonant shifter: TRIISAP or MUSIKATOAN
+// x17C9 y x17CA. TRIISAP changes a first series consonant to second series sound and
+// MUSIKATOAN a second series consonant to have a first series vowel sound.
+// Consonant shifter are both normally supercript marks, but, when they are followed by a
+// superscript, they change shape and take the form of subscript dependent vowel SRA U.
+// If they are in the same syllable as a coeng consonant, Unicode 3.0 says that they
+// should be typed before the coeng. Unicode 4.0 breaks the standard and says that it should
+// be placed after the coeng consonant.
+// Dependent vowel -> In khmer dependent vowels can be placed above, below, before or after the base
+// Each vowel has its own position. Only one vowel per syllable is allowed.
+// Signs -> Khmer has above signs and post signs. Only one above sign and/or one post sign are
+// Allowed in a syllable.
+//
+//
+
+struct KhmerClassTable // This list must include all types of components that can be used inside a syllable
+{
+ enum CharClassValues // order is important here! This order must be the same that is found in each horizontal
+ // line in the statetable for Khmer (file KhmerReordering.cpp).
+ {
+ CC_RESERVED = 0,
+ CC_CONSONANT = 1, // consonant of type 1 or independent vowel
+ CC_CONSONANT2 = 2, // Consonant of type 2
+ CC_CONSONANT3 = 3, // Consonant of type 3
+ CC_ZERO_WIDTH_NJ_MARK = 4, // Zero Width non joiner character (0x200C)
+ CC_CONSONANT_SHIFTER = 5,
+ CC_ROBAT = 6, // Khmer special diacritic accent -treated differently in state table
+ CC_COENG = 7, // Subscript consonant combining character
+ CC_DEPENDENT_VOWEL = 8,
+ CC_SIGN_ABOVE = 9,
+ CC_SIGN_AFTER = 10,
+ CC_ZERO_WIDTH_J_MARK = 11, // Zero width joiner character
+ CC_COUNT = 12 // This is the number of character classes
+ };
+
+ enum CharClassFlags
+ {
+ CF_CLASS_MASK = 0x0000FFFF,
+
+ CF_CONSONANT = 0x01000000, // flag to speed up comparing
+ CF_SPLIT_VOWEL = 0x02000000, // flag for a split vowel -> the first part is added in front of the syllable
+ CF_DOTTED_CIRCLE = 0x04000000, // add a dotted circle if a character with this flag is the first in a syllable
+ CF_COENG = 0x08000000, // flag to speed up comparing
+ CF_SHIFTER = 0x10000000, // flag to speed up comparing
+ CF_ABOVE_VOWEL = 0x20000000, // flag to speed up comparing
+
+ // position flags
+ CF_POS_BEFORE = 0x00080000,
+ CF_POS_BELOW = 0x00040000,
+ CF_POS_ABOVE = 0x00020000,
+ CF_POS_AFTER = 0x00010000,
+ CF_POS_MASK = 0x000f0000
+ };
+
+ typedef le_uint32 CharClass;
+
+ typedef le_int32 ScriptFlags;
+
+ LEUnicode firstChar; // for Khmer this will become x1780
+ LEUnicode lastChar; // and this x17DF
+ const CharClass *classTable;
+
+ CharClass getCharClass(LEUnicode ch) const;
+
+ static const KhmerClassTable *getKhmerClassTable();
+};
+
+
+class KhmerReordering /* not : public UObject because all methods are static */ {
+public:
+ static le_int32 reorder(const LEUnicode *theChars, le_int32 charCount, le_int32 scriptCode,
+ LEUnicode *outChars, LEGlyphStorage &glyphStorage);
+
+ static const FeatureMap *getFeatureMap(le_int32 &count);
+
+private:
+ // do not instantiate
+ KhmerReordering();
+
+ static le_int32 findSyllable(const KhmerClassTable *classTable, const LEUnicode *chars, le_int32 prev, le_int32 charCount);
+
+};
+
+
+U_NAMESPACE_END
+#endif
diff --git a/Build/source/libs/icu/icu-50.1/layout/LEFontInstance.cpp b/Build/source/libs/icu/icu-50.1/layout/LEFontInstance.cpp
new file mode 100644
index 00000000000..eaca51a51b3
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/LEFontInstance.cpp
@@ -0,0 +1,154 @@
+/*
+ *******************************************************************************
+ *
+ * Copyright (C) 1999-2007, International Business Machines
+ * Corporation and others. All Rights Reserved.
+ *
+ *******************************************************************************
+ * file name: LEFontInstance.cpp
+ *
+ * created on: 02/06/2003
+ * created by: Eric R. Mader
+ */
+
+#include "LETypes.h"
+#include "LEScripts.h"
+#include "LEFontInstance.h"
+#include "LEGlyphStorage.h"
+
+U_NAMESPACE_BEGIN
+
+UOBJECT_DEFINE_RTTI_IMPLEMENTATION(LEFontInstance)
+
+LECharMapper::~LECharMapper()
+{
+ // nothing to do.
+}
+
+LEFontInstance::~LEFontInstance()
+{
+ // nothing to do
+}
+
+const LEFontInstance *LEFontInstance::getSubFont(const LEUnicode chars[], le_int32 *offset, le_int32 limit,
+ le_int32 script, LEErrorCode &success) const
+{
+ if (LE_FAILURE(success)) {
+ return NULL;
+ }
+
+ if (chars == NULL || *offset < 0 || limit < 0 || *offset >= limit || script < 0 || script >= scriptCodeCount) {
+ success = LE_ILLEGAL_ARGUMENT_ERROR;
+ return NULL;
+ }
+
+ *offset = limit;
+ return this;
+}
+
+void LEFontInstance::mapCharsToGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count,
+ le_bool reverse, const LECharMapper *mapper, le_bool filterZeroWidth, LEGlyphStorage &glyphStorage) const
+{
+ le_int32 i, out = 0, dir = 1;
+
+ if (reverse) {
+ out = count - 1;
+ dir = -1;
+ }
+
+ for (i = offset; i < offset + count; i += 1, out += dir) {
+ LEUnicode16 high = chars[i];
+ LEUnicode32 code = high;
+
+ if (i < offset + count - 1 && high >= 0xD800 && high <= 0xDBFF) {
+ LEUnicode16 low = chars[i + 1];
+
+ if (low >= 0xDC00 && low <= 0xDFFF) {
+ code = (high - 0xD800) * 0x400 + low - 0xDC00 + 0x10000;
+ }
+ }
+
+ glyphStorage[out] = mapCharToGlyph(code, mapper, filterZeroWidth);
+
+ if (code >= 0x10000) {
+ i += 1;
+ glyphStorage[out += dir] = 0xFFFF;
+ }
+ }
+}
+
+LEGlyphID LEFontInstance::mapCharToGlyph(LEUnicode32 ch, const LECharMapper *mapper) const
+{
+ return mapCharToGlyph(ch, mapper, TRUE);
+}
+
+LEGlyphID LEFontInstance::mapCharToGlyph(LEUnicode32 ch, const LECharMapper *mapper, le_bool filterZeroWidth) const
+{
+ LEUnicode32 mappedChar = mapper->mapChar(ch);
+
+ if (mappedChar == 0xFFFE || mappedChar == 0xFFFF) {
+ return 0xFFFF;
+ }
+
+ if (filterZeroWidth && (mappedChar == 0x200C || mappedChar == 0x200D)) {
+ return canDisplay(mappedChar)? 0x0001 : 0xFFFF;
+ }
+
+ return mapCharToGlyph(mappedChar);
+}
+
+le_bool LEFontInstance::canDisplay(LEUnicode32 ch) const
+{
+ return LE_GET_GLYPH(mapCharToGlyph(ch)) != 0;
+}
+
+float LEFontInstance::xUnitsToPoints(float xUnits) const
+{
+ return (xUnits * getXPixelsPerEm()) / (float) getUnitsPerEM();
+}
+
+float LEFontInstance::yUnitsToPoints(float yUnits) const
+{
+ return (yUnits * getYPixelsPerEm()) / (float) getUnitsPerEM();
+}
+
+void LEFontInstance::unitsToPoints(LEPoint &units, LEPoint &points) const
+{
+ points.fX = xUnitsToPoints(units.fX);
+ points.fY = yUnitsToPoints(units.fY);
+}
+
+float LEFontInstance::xPixelsToUnits(float xPixels) const
+{
+ return (xPixels * getUnitsPerEM()) / (float) getXPixelsPerEm();
+}
+
+float LEFontInstance::yPixelsToUnits(float yPixels) const
+{
+ return (yPixels * getUnitsPerEM()) / (float) getYPixelsPerEm();
+}
+
+void LEFontInstance::pixelsToUnits(LEPoint &pixels, LEPoint &units) const
+{
+ units.fX = xPixelsToUnits(pixels.fX);
+ units.fY = yPixelsToUnits(pixels.fY);
+}
+
+void LEFontInstance::transformFunits(float xFunits, float yFunits, LEPoint &pixels) const
+{
+ pixels.fX = xUnitsToPoints(xFunits) * getScaleFactorX();
+ pixels.fY = yUnitsToPoints(yFunits) * getScaleFactorY();
+}
+
+le_int32 LEFontInstance::getLineHeight() const
+{
+ return getAscent() + getDescent() + getLeading();
+}
+
+void LEFontInstance::getKernPair(LEGlyphID leftGlyph, LEGlyphID rightGlyph, LEPoint &kern) const
+{
+ kern.fX = kern.fY = 0;
+}
+
+U_NAMESPACE_END
+
diff --git a/Build/source/libs/icu/icu-50.1/layout/LEFontInstance.h b/Build/source/libs/icu/icu-50.1/layout/LEFontInstance.h
new file mode 100644
index 00000000000..5d6318d7f6d
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/LEFontInstance.h
@@ -0,0 +1,541 @@
+
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2007 - All Rights Reserved
+ *
+ */
+
+#ifndef __LEFONTINSTANCE_H
+#define __LEFONTINSTANCE_H
+
+#include "LETypes.h"
+/**
+ * \file
+ * \brief C++ API: Layout Engine Font Instance object
+ */
+
+U_NAMESPACE_BEGIN
+
+/**
+ * Instances of this class are used by <code>LEFontInstance::mapCharsToGlyphs</code> and
+ * <code>LEFontInstance::mapCharToGlyph</code> to adjust character codes before the character
+ * to glyph mapping process. Examples of this are filtering out control characters
+ * and character mirroring - replacing a character which has both a left and a right
+ * hand form with the opposite form.
+ *
+ * @stable ICU 3.2
+ */
+class LECharMapper /* not : public UObject because this is an interface/mixin class */
+{
+public:
+ /**
+ * Destructor.
+ * @stable ICU 3.2
+ */
+ virtual ~LECharMapper();
+
+ /**
+ * This method does the adjustments.
+ *
+ * @param ch - the input character
+ *
+ * @return the adjusted character
+ *
+ * @stable ICU 2.8
+ */
+ virtual LEUnicode32 mapChar(LEUnicode32 ch) const = 0;
+};
+
+/**
+ * This is a forward reference to the class which holds the per-glyph
+ * storage.
+ *
+ * @stable ICU 3.0
+ */
+class LEGlyphStorage;
+
+/**
+ * This is a virtual base class that serves as the interface between a LayoutEngine
+ * and the platform font environment. It allows a LayoutEngine to access font tables, do
+ * character to glyph mapping, and obtain metrics information without knowing any platform
+ * specific details. There are also a few utility methods for converting between points,
+ * pixels and funits. (font design units)
+ *
+ * An instance of an <code>LEFontInstance</code> represents a font at a particular point
+ * size. Each instance can represent either a single physical font, or a composite font.
+ * A composite font is a collection of physical fonts, each of which contains a subset of
+ * the characters contained in the composite font.
+ *
+ * Note: with the exception of <code>getSubFont</code>, the methods in this class only
+ * make sense for a physical font. If you have an <code>LEFontInstance</code> which
+ * represents a composite font you should only call the methods below which have
+ * an <code>LEGlyphID</code>, an <code>LEUnicode</code> or an <code>LEUnicode32</code>
+ * as one of the arguments because these can be used to select a particular subfont.
+ *
+ * Subclasses which implement composite fonts should supply an implementation of these
+ * methods with some default behavior such as returning constant values, or using the
+ * values from the first subfont.
+ *
+ * @stable ICU 3.0
+ */
+class U_LAYOUT_API LEFontInstance : public UObject
+{
+public:
+
+ /**
+ * This virtual destructor is here so that the subclass
+ * destructors can be invoked through the base class.
+ *
+ * @stable ICU 2.8
+ */
+ virtual ~LEFontInstance();
+
+ /**
+ * Get a physical font which can render the given text. For composite fonts,
+ * if there is no single physical font which can render all of the text,
+ * return a physical font which can render an initial substring of the text,
+ * and set the <code>offset</code> parameter to the end of that substring.
+ *
+ * Internally, the LayoutEngine works with runs of text all in the same
+ * font and script, so it is best to call this method with text which is
+ * in a single script, passing the script code in as a hint. If you don't
+ * know the script of the text, you can use zero, which is the script code
+ * for characters used in more than one script.
+ *
+ * The default implementation of this method is intended for instances of
+ * <code>LEFontInstance</code> which represent a physical font. It returns
+ * <code>this</code> and indicates that the entire string can be rendered.
+ *
+ * This method will return a valid <code>LEFontInstance</code> unless you
+ * have passed illegal parameters, or an internal error has been encountered.
+ * For composite fonts, it may return the warning <code>LE_NO_SUBFONT_WARNING</code>
+ * to indicate that the returned font may not be able to render all of
+ * the text. Whenever a valid font is returned, the <code>offset</code> parameter
+ * will be advanced by at least one.
+ *
+ * Subclasses which implement composite fonts must override this method.
+ * Where it makes sense, they should use the script code as a hint to render
+ * characters from the COMMON script in the font which is used for the given
+ * script. For example, if the input text is a series of Arabic words separated
+ * by spaces, and the script code passed in is <code>arabScriptCode</code> you
+ * should return the font used for Arabic characters for all of the input text,
+ * including the spaces. If, on the other hand, the input text contains characters
+ * which cannot be rendered by the font used for Arabic characters, but which can
+ * be rendered by another font, you should return that font for those characters.
+ *
+ * @param chars - the array of Unicode characters.
+ * @param offset - a pointer to the starting offset in the text. On exit this
+ * will be set the the limit offset of the text which can be
+ * rendered using the returned font.
+ * @param limit - the limit offset for the input text.
+ * @param script - the script hint.
+ * @param success - set to an error code if the arguments are illegal, or no font
+ * can be returned for some reason. May also be set to
+ * <code>LE_NO_SUBFONT_WARNING</code> if the subfont which
+ * was returned cannot render all of the text.
+ *
+ * @return an <code>LEFontInstance</code> for the sub font which can render the characters, or
+ * <code>NULL</code> if there is an error.
+ *
+ * @see LEScripts.h
+ *
+ * @stable ICU 3.2
+ */
+ virtual const LEFontInstance *getSubFont(const LEUnicode chars[], le_int32 *offset, le_int32 limit, le_int32 script, LEErrorCode &success) const;
+
+ //
+ // Font file access
+ //
+
+ /**
+ * This method reads a table from the font. Note that in general,
+ * it only makes sense to call this method on an <code>LEFontInstance</code>
+ * which represents a physical font - i.e. one which has been returned by
+ * <code>getSubFont()</code>. This is because each subfont in a composite font
+ * will have different tables, and there's no way to know which subfont to access.
+ *
+ * Subclasses which represent composite fonts should always return <code>NULL</code>.
+ *
+ * @param tableTag - the four byte table tag. (e.g. 'cmap')
+ *
+ * @return the address of the table in memory, or <code>NULL</code>
+ * if the table doesn't exist.
+ *
+ * @stable ICU 2.8
+ */
+ virtual const void *getFontTable(LETag tableTag) const = 0;
+
+ /**
+ * This method is used to determine if the font can
+ * render the given character. This can usually be done
+ * by looking the character up in the font's character
+ * to glyph mapping.
+ *
+ * The default implementation of this method will return
+ * <code>TRUE</code> if <code>mapCharToGlyph(ch)</code>
+ * returns a non-zero value.
+ *
+ * @param ch - the character to be tested
+ *
+ * @return <code>TRUE</code> if the font can render ch.
+ *
+ * @stable ICU 3.2
+ */
+ virtual le_bool canDisplay(LEUnicode32 ch) const;
+
+ /**
+ * This method returns the number of design units in
+ * the font's EM square.
+ *
+ * @return the number of design units pre EM.
+ *
+ * @stable ICU 2.8
+ */
+ virtual le_int32 getUnitsPerEM() const = 0;
+
+ /**
+ * This method maps an array of character codes to an array of glyph
+ * indices, using the font's character to glyph map.
+ *
+ * The default implementation iterates over all of the characters and calls
+ * <code>mapCharToGlyph(ch, mapper)</code> on each one. It also handles surrogate
+ * characters, storing the glyph ID for the high surrogate, and a deleted glyph (0xFFFF)
+ * for the low surrogate.
+ *
+ * Most sublcasses will not need to implement this method.
+ *
+ * @param chars - the character array
+ * @param offset - the index of the first character
+ * @param count - the number of characters
+ * @param reverse - if <code>TRUE</code>, store the glyph indices in reverse order.
+ * @param mapper - the character mapper.
+ * @param filterZeroWidth - <code>TRUE</code> if ZWJ / ZWNJ characters should map to a glyph w/ no contours.
+ * @param glyphStorage - the object which contains the output glyph array
+ *
+ * @see LECharMapper
+ *
+ * @stable ICU 3.6
+ */
+ virtual void mapCharsToGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool reverse, const LECharMapper *mapper, le_bool filterZeroWidth, LEGlyphStorage &glyphStorage) const;
+
+ /**
+ * This method maps a single character to a glyph index, using the
+ * font's character to glyph map. The default implementation of this
+ * method calls the mapper, and then calls <code>mapCharToGlyph(mappedCh)</code>.
+ *
+ * @param ch - the character
+ * @param mapper - the character mapper
+ * @param filterZeroWidth - <code>TRUE</code> if ZWJ / ZWNJ characters should map to a glyph w/ no contours.
+ *
+ * @return the glyph index
+ *
+ * @see LECharMapper
+ *
+ * @stable ICU 3.6
+ */
+ virtual LEGlyphID mapCharToGlyph(LEUnicode32 ch, const LECharMapper *mapper, le_bool filterZeroWidth) const;
+
+ /**
+ * This method maps a single character to a glyph index, using the
+ * font's character to glyph map. The default implementation of this
+ * method calls the mapper, and then calls <code>mapCharToGlyph(mappedCh)</code>.
+ *
+ * @param ch - the character
+ * @param mapper - the character mapper
+ *
+ * @return the glyph index
+ *
+ * @see LECharMapper
+ *
+ * @stable ICU 3.2
+ */
+ virtual LEGlyphID mapCharToGlyph(LEUnicode32 ch, const LECharMapper *mapper) const;
+
+ /**
+ * This method maps a single character to a glyph index, using the
+ * font's character to glyph map. There is no default implementation
+ * of this method because it requires information about the platform
+ * font implementation.
+ *
+ * @param ch - the character
+ *
+ * @return the glyph index
+ *
+ * @stable ICU 3.2
+ */
+ virtual LEGlyphID mapCharToGlyph(LEUnicode32 ch) const = 0;
+
+ //
+ // Metrics
+ //
+
+ /**
+ * This method gets the X and Y advance of a particular glyph, in pixels.
+ *
+ * @param glyph - the glyph index
+ * @param advance - the X and Y pixel values will be stored here
+ *
+ * @stable ICU 3.2
+ */
+ virtual void getGlyphAdvance(LEGlyphID glyph, LEPoint &advance) const = 0;
+
+ /**
+ * This method gets the hinted X and Y pixel coordinates of a particular
+ * point in the outline of the given glyph.
+ *
+ * @param glyph - the glyph index
+ * @param pointNumber - the number of the point
+ * @param point - the point's X and Y pixel values will be stored here
+ *
+ * @return <code>TRUE</code> if the point coordinates could be stored.
+ *
+ * @stable ICU 2.8
+ */
+ virtual le_bool getGlyphPoint(LEGlyphID glyph, le_int32 pointNumber, LEPoint &point) const = 0;
+
+ /**
+ * This method returns the width of the font's EM square
+ * in pixels.
+ *
+ * @return the pixel width of the EM square
+ *
+ * @stable ICU 2.8
+ */
+ virtual float getXPixelsPerEm() const = 0;
+
+ /**
+ * This method returns the height of the font's EM square
+ * in pixels.
+ *
+ * @return the pixel height of the EM square
+ *
+ * @stable ICU 2.8
+ */
+ virtual float getYPixelsPerEm() const = 0;
+
+ /**
+ * This method converts font design units in the
+ * X direction to points.
+ *
+ * @param xUnits - design units in the X direction
+ *
+ * @return points in the X direction
+ *
+ * @stable ICU 3.2
+ */
+ virtual float xUnitsToPoints(float xUnits) const;
+
+ /**
+ * This method converts font design units in the
+ * Y direction to points.
+ *
+ * @param yUnits - design units in the Y direction
+ *
+ * @return points in the Y direction
+ *
+ * @stable ICU 3.2
+ */
+ virtual float yUnitsToPoints(float yUnits) const;
+
+ /**
+ * This method converts font design units to points.
+ *
+ * @param units - X and Y design units
+ * @param points - set to X and Y points
+ *
+ * @stable ICU 3.2
+ */
+ virtual void unitsToPoints(LEPoint &units, LEPoint &points) const;
+
+ /**
+ * This method converts pixels in the
+ * X direction to font design units.
+ *
+ * @param xPixels - pixels in the X direction
+ *
+ * @return font design units in the X direction
+ *
+ * @stable ICU 3.2
+ */
+ virtual float xPixelsToUnits(float xPixels) const;
+
+ /**
+ * This method converts pixels in the
+ * Y direction to font design units.
+ *
+ * @param yPixels - pixels in the Y direction
+ *
+ * @return font design units in the Y direction
+ *
+ * @stable ICU 3.2
+ */
+ virtual float yPixelsToUnits(float yPixels) const;
+
+ /**
+ * This method converts pixels to font design units.
+ *
+ * @param pixels - X and Y pixel
+ * @param units - set to X and Y font design units
+ *
+ * @stable ICU 3.2
+ */
+ virtual void pixelsToUnits(LEPoint &pixels, LEPoint &units) const;
+
+ /**
+ * Get the X scale factor from the font's transform. The default
+ * implementation of <code>transformFunits()</code> will call this method.
+ *
+ * @return the X scale factor.
+ *
+ *
+ * @see transformFunits
+ *
+ * @stable ICU 3.2
+ */
+ virtual float getScaleFactorX() const = 0;
+
+ /**
+ * Get the Y scale factor from the font's transform. The default
+ * implementation of <code>transformFunits()</code> will call this method.
+ *
+ * @return the Yscale factor.
+ *
+ * @see transformFunits
+ *
+ * @stable ICU 3.2
+ */
+ virtual float getScaleFactorY() const = 0;
+
+ /**
+ * This method transforms an X, Y point in font design units to a
+ * pixel coordinate, applying the font's transform. The default
+ * implementation of this method calls <code>getScaleFactorX()</code>
+ * and <code>getScaleFactorY()</code>.
+ *
+ * @param xFunits - the X coordinate in font design units
+ * @param yFunits - the Y coordinate in font design units
+ * @param pixels - the tranformed co-ordinate in pixels
+ *
+ * @see getScaleFactorX
+ * @see getScaleFactorY
+ *
+ * @stable ICU 3.2
+ */
+ virtual void transformFunits(float xFunits, float yFunits, LEPoint &pixels) const;
+
+ /**
+ * This is a convenience method used to convert
+ * values in a 16.16 fixed point format to floating point.
+ *
+ * @param fixed - the fixed point value
+ *
+ * @return the floating point value
+ *
+ * @stable ICU 2.8
+ */
+ static inline float fixedToFloat(le_int32 fixed);
+
+ /**
+ * This is a convenience method used to convert
+ * floating point values to 16.16 fixed point format.
+ *
+ * @param theFloat - the floating point value
+ *
+ * @return the fixed point value
+ *
+ * @stable ICU 2.8
+ */
+ static inline le_int32 floatToFixed(float theFloat);
+
+ //
+ // These methods won't ever be called by the LayoutEngine,
+ // but are useful for clients of <code>LEFontInstance</code> who
+ // need to render text.
+ //
+
+ /**
+ * Get the font's ascent.
+ *
+ * @return the font's ascent, in points. This value
+ * will always be positive.
+ *
+ * @stable ICU 3.2
+ */
+ virtual le_int32 getAscent() const = 0;
+
+ /**
+ * Get the font's descent.
+ *
+ * @return the font's descent, in points. This value
+ * will always be positive.
+ *
+ * @stable ICU 3.2
+ */
+ virtual le_int32 getDescent() const = 0;
+
+ /**
+ * Get the font's leading.
+ *
+ * @return the font's leading, in points. This value
+ * will always be positive.
+ *
+ * @stable ICU 3.2
+ */
+ virtual le_int32 getLeading() const = 0;
+
+ /**
+ * Get the line height required to display text in
+ * this font. The default implementation of this method
+ * returns the sum of the ascent, descent, and leading.
+ *
+ * @return the line height, in points. This vaule will
+ * always be positive.
+ *
+ * @stable ICU 3.2
+ */
+ virtual le_int32 getLineHeight() const;
+
+ /**
+ * ICU "poor man's RTTI", returns a UClassID for the actual class.
+ *
+ * @stable ICU 3.2
+ */
+ virtual UClassID getDynamicClassID() const;
+
+ /**
+ * ICU "poor man's RTTI", returns a UClassID for this class.
+ *
+ * @stable ICU 3.2
+ */
+ static UClassID getStaticClassID();
+
+ /**
+ * Returns kern value for a glyph pair, if the font has a kern pair list.
+ */
+ virtual void getKernPair(LEGlyphID leftGlyph, LEGlyphID rightGlyph, LEPoint &kern) const;
+
+ /**
+ * Returns true if writing direction is vertical.
+ */
+ virtual inline bool getLayoutDirVertical() const;
+};
+
+inline float LEFontInstance::fixedToFloat(le_int32 fixed)
+{
+ return (float) (fixed / 65536.0);
+}
+
+inline le_int32 LEFontInstance::floatToFixed(float theFloat)
+{
+ return (le_int32) (theFloat * 65536.0);
+}
+
+inline bool LEFontInstance::getLayoutDirVertical() const
+{
+ return false;
+}
+
+U_NAMESPACE_END
+#endif
+
+
diff --git a/Build/source/libs/icu/icu-50.1/layout/LEGlyphFilter.h b/Build/source/libs/icu/icu-50.1/layout/LEGlyphFilter.h
new file mode 100644
index 00000000000..6dcfa7d2776
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/LEGlyphFilter.h
@@ -0,0 +1,45 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2011 - All Rights Reserved
+ *
+ */
+
+#ifndef __LEGLYPHFILTER__H
+#define __LEGLYPHFILTER__H
+
+#include "LETypes.h"
+
+U_NAMESPACE_BEGIN
+
+#ifndef U_HIDE_INTERNAL_API
+/**
+ * This is a helper class that is used to
+ * recognize a set of glyph indices.
+ *
+ * @internal
+ */
+class LEGlyphFilter /* not : public UObject because this is an interface/mixin class */ {
+public:
+ /**
+ * Destructor.
+ * @internal
+ */
+ virtual ~LEGlyphFilter();
+
+ /**
+ * This method is used to test a particular
+ * glyph index to see if it is in the set
+ * recognized by the filter.
+ *
+ * @param glyph - the glyph index to be tested
+ *
+ * @return TRUE if the glyph index is in the set.
+ *
+ * @internal
+ */
+ virtual le_bool accept(LEGlyphID glyph) const = 0;
+};
+#endif /* U_HIDE_INTERNAL_API */
+
+U_NAMESPACE_END
+#endif
diff --git a/Build/source/libs/icu/icu-50.1/layout/LEGlyphStorage.cpp b/Build/source/libs/icu/icu-50.1/layout/LEGlyphStorage.cpp
new file mode 100644
index 00000000000..95521f5f9bb
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/LEGlyphStorage.cpp
@@ -0,0 +1,719 @@
+/*
+ **********************************************************************
+ * Copyright (C) 1998-2009, International Business Machines
+ * Corporation and others. All Rights Reserved.
+ **********************************************************************
+ */
+
+#include "LETypes.h"
+#include "LEInsertionList.h"
+#include "LEGlyphStorage.h"
+
+U_NAMESPACE_BEGIN
+
+UOBJECT_DEFINE_RTTI_IMPLEMENTATION(LEGlyphStorage)
+
+LEInsertionCallback::~LEInsertionCallback()
+{
+ // nothing to do...
+}
+
+LEGlyphStorage::LEGlyphStorage()
+ : fGlyphCount(0), fGlyphs(NULL), fCharIndices(NULL), fPositions(NULL),
+ fAuxData(NULL), fAuxParam(NULL), fInsertionList(NULL), fSrcIndex(0), fDestIndex(0)
+{
+ // nothing else to do!
+}
+
+LEGlyphStorage::~LEGlyphStorage()
+{
+ reset();
+}
+
+void LEGlyphStorage::reset()
+{
+ fGlyphCount = 0;
+
+ if (fPositions != NULL) {
+ LE_DELETE_ARRAY(fPositions);
+ fPositions = NULL;
+ }
+
+ if (fAuxData != NULL) {
+ LE_DELETE_ARRAY(fAuxData);
+ fAuxData = NULL;
+ }
+
+ if (fAuxParam != NULL) {
+ LE_DELETE_ARRAY(fAuxParam);
+ fAuxParam = NULL;
+ }
+
+ if (fInsertionList != NULL) {
+ delete fInsertionList;
+ fInsertionList = NULL;
+ }
+
+ if (fCharIndices != NULL) {
+ LE_DELETE_ARRAY(fCharIndices);
+ fCharIndices = NULL;
+ }
+
+ if (fGlyphs != NULL) {
+ LE_DELETE_ARRAY(fGlyphs);
+ fGlyphs = NULL;
+ }
+}
+
+// FIXME: This might get called more than once, for various reasons. Is
+// testing for pre-existing glyph and charIndices arrays good enough?
+void LEGlyphStorage::allocateGlyphArray(le_int32 initialGlyphCount, le_bool rightToLeft, LEErrorCode &success)
+{
+ if (LE_FAILURE(success)) {
+ return;
+ }
+
+ if (initialGlyphCount <= 0) {
+ success = LE_ILLEGAL_ARGUMENT_ERROR;
+ return;
+ }
+
+ if (fGlyphs == NULL) {
+ fGlyphCount = initialGlyphCount;
+ fGlyphs = LE_NEW_ARRAY(LEGlyphID, fGlyphCount);
+
+ if (fGlyphs == NULL) {
+ success = LE_MEMORY_ALLOCATION_ERROR;
+ return;
+ }
+ }
+
+ if (fCharIndices == NULL) {
+ fCharIndices = LE_NEW_ARRAY(le_int32, fGlyphCount);
+
+ if (fCharIndices == NULL) {
+ LE_DELETE_ARRAY(fGlyphs);
+ fGlyphs = NULL;
+ success = LE_MEMORY_ALLOCATION_ERROR;
+ return;
+ }
+
+ // Initialize the charIndices array
+ le_int32 i, count = fGlyphCount, dir = 1, out = 0;
+
+ if (rightToLeft) {
+ out = fGlyphCount - 1;
+ dir = -1;
+ }
+
+ for (i = 0; i < count; i += 1, out += dir) {
+ fCharIndices[out] = i;
+ }
+ }
+
+ if (fInsertionList == NULL) {
+ // FIXME: check this for failure?
+ fInsertionList = new LEInsertionList(rightToLeft);
+ if (fInsertionList == NULL) {
+ LE_DELETE_ARRAY(fCharIndices);
+ fCharIndices = NULL;
+
+ LE_DELETE_ARRAY(fGlyphs);
+ fGlyphs = NULL;
+
+ success = LE_MEMORY_ALLOCATION_ERROR;
+ return;
+ }
+ }
+}
+
+// FIXME: do we want to initialize the positions to [0, 0]?
+le_int32 LEGlyphStorage::allocatePositions(LEErrorCode &success)
+{
+ if (LE_FAILURE(success)) {
+ return -1;
+ }
+
+ if (fPositions != NULL) {
+ success = LE_INTERNAL_ERROR;
+ return -1;
+ }
+
+ fPositions = LE_NEW_ARRAY(float, 2 * (fGlyphCount + 1));
+
+ if (fPositions == NULL) {
+ success = LE_MEMORY_ALLOCATION_ERROR;
+ return -1;
+ }
+
+ return fGlyphCount;
+}
+
+// FIXME: do we want to initialize the aux data to NULL?
+le_int32 LEGlyphStorage::allocateAuxData(LEErrorCode &success)
+{
+ if (LE_FAILURE(success)) {
+ return -1;
+ }
+
+ if (fAuxData != NULL || fAuxParam != NULL) {
+ success = LE_INTERNAL_ERROR;
+ return -1;
+ }
+
+ fAuxData = LE_NEW_ARRAY(le_uint32, fGlyphCount);
+ fAuxParam = LE_NEW_ARRAY(void *, fGlyphCount);
+
+ if (fAuxData == NULL || fAuxParam == NULL) {
+ success = LE_MEMORY_ALLOCATION_ERROR;
+ return -1;
+ }
+
+ return fGlyphCount;
+}
+
+void LEGlyphStorage::getCharIndices(le_int32 charIndices[], le_int32 indexBase, LEErrorCode &success) const
+{
+ le_int32 i;
+
+ if (LE_FAILURE(success)) {
+ return;
+ }
+
+ if (charIndices == NULL) {
+ success = LE_ILLEGAL_ARGUMENT_ERROR;
+ return;
+ }
+
+ if (fCharIndices == NULL) {
+ success = LE_NO_LAYOUT_ERROR;
+ return;
+ }
+
+ for (i = 0; i < fGlyphCount; i += 1) {
+ charIndices[i] = fCharIndices[i] + indexBase;
+ }
+}
+
+void LEGlyphStorage::getCharIndices(le_int32 charIndices[], LEErrorCode &success) const
+{
+ if (LE_FAILURE(success)) {
+ return;
+ }
+
+ if (charIndices == NULL) {
+ success = LE_ILLEGAL_ARGUMENT_ERROR;
+ return;
+ }
+
+ if (fCharIndices == NULL) {
+ success = LE_NO_LAYOUT_ERROR;
+ return;
+ }
+
+ LE_ARRAY_COPY(charIndices, fCharIndices, fGlyphCount);
+}
+
+// Copy the glyphs into caller's (32-bit) glyph array, OR in extraBits
+void LEGlyphStorage::getGlyphs(le_uint32 glyphs[], le_uint32 extraBits, LEErrorCode &success) const
+{
+ le_int32 i;
+
+ if (LE_FAILURE(success)) {
+ return;
+ }
+
+ if (glyphs == NULL) {
+ success = LE_ILLEGAL_ARGUMENT_ERROR;
+ return;
+ }
+
+ if (fGlyphs == NULL) {
+ success = LE_NO_LAYOUT_ERROR;
+ return;
+ }
+
+ for (i = 0; i < fGlyphCount; i += 1) {
+ glyphs[i] = fGlyphs[i] | extraBits;
+ }
+}
+
+void LEGlyphStorage::getGlyphs(LEGlyphID glyphs[], LEErrorCode &success) const
+{
+ if (LE_FAILURE(success)) {
+ return;
+ }
+
+ if (glyphs == NULL) {
+ success = LE_ILLEGAL_ARGUMENT_ERROR;
+ return;
+ }
+
+ if (fGlyphs == NULL) {
+ success = LE_NO_LAYOUT_ERROR;
+ return;
+ }
+
+ LE_ARRAY_COPY(glyphs, fGlyphs, fGlyphCount);
+}
+
+LEGlyphID LEGlyphStorage::getGlyphID(le_int32 glyphIndex, LEErrorCode &success) const
+{
+ if (LE_FAILURE(success)) {
+ return 0xFFFF;
+ }
+
+ if (fGlyphs == NULL) {
+ success = LE_NO_LAYOUT_ERROR;
+ return 0xFFFF;
+ }
+
+ if (glyphIndex < 0 || glyphIndex >= fGlyphCount) {
+ success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
+ return 0xFFFF;
+ }
+
+ return fGlyphs[glyphIndex];
+}
+
+void LEGlyphStorage::setGlyphID(le_int32 glyphIndex, LEGlyphID glyphID, LEErrorCode &success)
+{
+ if (LE_FAILURE(success)) {
+ return;
+ }
+
+ if (fGlyphs == NULL) {
+ success = LE_NO_LAYOUT_ERROR;
+ return;
+ }
+
+ if (glyphIndex < 0 || glyphIndex >= fGlyphCount) {
+ success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
+ return;
+ }
+
+ fGlyphs[glyphIndex] = glyphID;
+}
+
+le_int32 LEGlyphStorage::getCharIndex(le_int32 glyphIndex, LEErrorCode &success) const
+{
+ if (LE_FAILURE(success)) {
+ return -1;
+ }
+
+ if (fCharIndices == NULL) {
+ success = LE_NO_LAYOUT_ERROR;
+ return -1;
+ }
+
+ if (glyphIndex < 0 || glyphIndex >= fGlyphCount) {
+ success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
+ return -1;
+ }
+
+ return fCharIndices[glyphIndex];
+}
+
+void LEGlyphStorage::setCharIndex(le_int32 glyphIndex, le_int32 charIndex, LEErrorCode &success)
+{
+ if (LE_FAILURE(success)) {
+ return;
+ }
+
+ if (fCharIndices == NULL) {
+ success = LE_NO_LAYOUT_ERROR;
+ return;
+ }
+
+ if (glyphIndex < 0 || glyphIndex >= fGlyphCount) {
+ success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
+ return;
+ }
+
+ fCharIndices[glyphIndex] = charIndex;
+}
+
+void LEGlyphStorage::getAuxData(le_uint32 auxData[], LEErrorCode &success) const
+{
+ if (LE_FAILURE(success)) {
+ return;
+ }
+
+ if (auxData == NULL) {
+ success = LE_ILLEGAL_ARGUMENT_ERROR;
+ return;
+ }
+
+ if (fAuxData == NULL) {
+ success = LE_NO_LAYOUT_ERROR;
+ return;
+ }
+
+ LE_ARRAY_COPY(auxData, fAuxData, fGlyphCount);
+}
+
+le_uint32 LEGlyphStorage::getAuxData(le_int32 glyphIndex, LEErrorCode &success) const
+{
+ if (LE_FAILURE(success)) {
+ return 0;
+ }
+
+ if (fAuxData == NULL) {
+ success = LE_NO_LAYOUT_ERROR;
+ return 0;
+ }
+
+ if (glyphIndex < 0 || glyphIndex >= fGlyphCount) {
+ success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
+ return 0;
+ }
+
+ return fAuxData[glyphIndex];
+}
+
+void *LEGlyphStorage::getAuxParam(le_int32 glyphIndex, LEErrorCode &success) const
+{
+ if (LE_FAILURE(success)) {
+ return NULL;
+ }
+
+ if (fAuxParam == NULL) {
+ success = LE_NO_LAYOUT_ERROR;
+ return NULL;
+ }
+
+ if (glyphIndex < 0 || glyphIndex >= fGlyphCount) {
+ success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
+ return NULL;
+ }
+
+ return fAuxParam[glyphIndex];
+}
+
+void LEGlyphStorage::setAuxData(le_int32 glyphIndex, le_uint32 auxData, void *auxParam, LEErrorCode &success)
+{
+ if (LE_FAILURE(success)) {
+ return;
+ }
+
+ if (fAuxData == NULL || fAuxParam == NULL) {
+ success = LE_NO_LAYOUT_ERROR;
+ return;
+ }
+
+ if (glyphIndex < 0 || glyphIndex >= fGlyphCount) {
+ success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
+ return;
+ }
+
+ fAuxData[glyphIndex] = auxData;
+ fAuxParam[glyphIndex] = auxParam;
+}
+
+void LEGlyphStorage::getGlyphPositions(float positions[], LEErrorCode &success) const
+{
+ if (LE_FAILURE(success)) {
+ return;
+ }
+
+ if (positions == NULL) {
+ success = LE_ILLEGAL_ARGUMENT_ERROR;
+ return;
+ }
+
+ if (fPositions == NULL) {
+ success = LE_NO_LAYOUT_ERROR;
+ return;
+ }
+
+ LE_ARRAY_COPY(positions, fPositions, fGlyphCount * 2 + 2);
+}
+
+void LEGlyphStorage::getGlyphPosition(le_int32 glyphIndex, float &x, float &y, LEErrorCode &success) const
+{
+ if (LE_FAILURE(success)) {
+ return;
+ }
+
+ if (glyphIndex < 0 || glyphIndex > fGlyphCount) {
+ success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
+ return;
+ }
+
+ if (fPositions == NULL) {
+ success = LE_NO_LAYOUT_ERROR;
+ return;
+ }
+
+ x = fPositions[glyphIndex * 2];
+ y = fPositions[glyphIndex * 2 + 1];
+}
+
+void LEGlyphStorage::setPosition(le_int32 glyphIndex, float x, float y, LEErrorCode &success)
+{
+ if (LE_FAILURE(success)) {
+ return;
+ }
+
+ if (glyphIndex < 0 || glyphIndex > fGlyphCount) {
+ success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
+ return;
+ }
+
+ fPositions[glyphIndex * 2] = x;
+ fPositions[glyphIndex * 2 + 1] = y;
+}
+
+void LEGlyphStorage::adjustPosition(le_int32 glyphIndex, float xAdjust, float yAdjust, LEErrorCode &success)
+{
+ if (LE_FAILURE(success)) {
+ return;
+ }
+
+ if (glyphIndex < 0 || glyphIndex > fGlyphCount) {
+ success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
+ return;
+ }
+
+ fPositions[glyphIndex * 2] += xAdjust;
+ fPositions[glyphIndex * 2 + 1] += yAdjust;
+}
+
+void LEGlyphStorage::adoptGlyphArray(LEGlyphStorage &from)
+{
+ if (fGlyphs != NULL) {
+ LE_DELETE_ARRAY(fGlyphs);
+ }
+
+ fGlyphs = from.fGlyphs;
+ from.fGlyphs = NULL;
+
+ if (fInsertionList != NULL) {
+ delete fInsertionList;
+ }
+
+ fInsertionList = from.fInsertionList;
+ from.fInsertionList = NULL;
+}
+
+void LEGlyphStorage::adoptCharIndicesArray(LEGlyphStorage &from)
+{
+ if (fCharIndices != NULL) {
+ LE_DELETE_ARRAY(fCharIndices);
+ }
+
+ fCharIndices = from.fCharIndices;
+ from.fCharIndices = NULL;
+}
+
+void LEGlyphStorage::adoptPositionArray(LEGlyphStorage &from)
+{
+ if (fPositions != NULL) {
+ LE_DELETE_ARRAY(fPositions);
+ }
+
+ fPositions = from.fPositions;
+ from.fPositions = NULL;
+}
+
+void LEGlyphStorage::adoptAuxDataArray(LEGlyphStorage &from)
+{
+ if (fAuxData != NULL) {
+ LE_DELETE_ARRAY(fAuxData);
+ }
+
+ if (fAuxParam != NULL) {
+ LE_DELETE_ARRAY(fAuxParam);
+ }
+
+ fAuxData = from.fAuxData;
+ from.fAuxData = NULL;
+ fAuxParam = from.fAuxParam;
+ from.fAuxParam = NULL;
+}
+
+void LEGlyphStorage::adoptGlyphCount(LEGlyphStorage &from)
+{
+ fGlyphCount = from.fGlyphCount;
+}
+
+void LEGlyphStorage::adoptGlyphCount(le_int32 newGlyphCount)
+{
+ fGlyphCount = newGlyphCount;
+}
+
+// Move a glyph to a different position in the LEGlyphStorage ( used for Indic v2 processing )
+
+void LEGlyphStorage::moveGlyph(le_int32 fromPosition, le_int32 toPosition, le_uint32 marker )
+{
+
+ LEErrorCode success = LE_NO_ERROR;
+
+ LEGlyphID holdGlyph = getGlyphID(fromPosition,success);
+ le_int32 holdCharIndex = getCharIndex(fromPosition,success);
+ le_uint32 holdAuxData = getAuxData(fromPosition,success);
+
+ if ( fromPosition < toPosition ) {
+ for ( le_int32 i = fromPosition ; i < toPosition ; i++ ) {
+ setGlyphID(i,getGlyphID(i+1,success),success);
+ setCharIndex(i,getCharIndex(i+1,success),success);
+ setAuxData(i,getAuxData(i+1,success),success);
+ }
+ } else {
+ for ( le_int32 i = toPosition ; i > fromPosition ; i-- ) {
+ setGlyphID(i,getGlyphID(i-1,success),success);
+ setCharIndex(i,getCharIndex(i-1,success),success);
+ setAuxData(i,getAuxData(i-1,success),success);
+
+ }
+ }
+
+ setGlyphID(toPosition,holdGlyph,success);
+ setCharIndex(toPosition,holdCharIndex,success);
+ setAuxData(toPosition,holdAuxData | marker,success);
+
+}
+
+// Glue code for existing stable API
+LEGlyphID *LEGlyphStorage::insertGlyphs(le_int32 atIndex, le_int32 insertCount)
+{
+ LEErrorCode ignored = LE_NO_LAYOUT_ERROR;
+ return insertGlyphs(atIndex, insertCount, ignored);
+}
+
+// FIXME: add error checking?
+LEGlyphID *LEGlyphStorage::insertGlyphs(le_int32 atIndex, le_int32 insertCount, LEErrorCode& success)
+{
+ return fInsertionList->insert(atIndex, insertCount, success);
+}
+
+le_int32 LEGlyphStorage::applyInsertions()
+{
+ le_int32 growAmount = fInsertionList->getGrowAmount();
+
+ if (growAmount == 0) {
+ return fGlyphCount;
+ }
+
+ le_int32 newGlyphCount = fGlyphCount + growAmount;
+
+ LEGlyphID *newGlyphs = (LEGlyphID *) LE_GROW_ARRAY(fGlyphs, newGlyphCount);
+ if (newGlyphs == NULL) {
+ // Could not grow the glyph array
+ return fGlyphCount;
+ }
+ fGlyphs = newGlyphs;
+
+ le_int32 *newCharIndices = (le_int32 *) LE_GROW_ARRAY(fCharIndices, newGlyphCount);
+ if (newCharIndices == NULL) {
+ // Could not grow the glyph array
+ return fGlyphCount;
+ }
+ fCharIndices = newCharIndices;
+
+ if (fAuxData != NULL) {
+ le_uint32 *newAuxData = (le_uint32 *) LE_GROW_ARRAY(fAuxData, newGlyphCount);
+ if (newAuxData == NULL) {
+ // could not grow the aux data array
+ return fGlyphCount;
+ }
+ fAuxData = (le_uint32 *)newAuxData;
+ }
+
+ if (fAuxParam != NULL) {
+ void **newAuxParam = (void **) LE_GROW_ARRAY(fAuxParam, newGlyphCount);
+ if (newAuxParam == NULL) {
+ // could not grow the aux param array
+ return fGlyphCount;
+ }
+ fAuxParam = (void **)newAuxParam;
+ }
+
+ fSrcIndex = fGlyphCount - 1;
+ fDestIndex = newGlyphCount - 1;
+
+#if 0
+ // If the current position is at the end of the array
+ // update it to point to the end of the new array. The
+ // insertion callback will handle all other cases.
+ // FIXME: this is left over from GlyphIterator, but there's no easy
+ // way to implement this here... it seems that GlyphIterator doesn't
+ // really need it 'cause the insertions don't get applied until after a
+ // complete pass over the glyphs, after which the iterator gets reset anyhow...
+ // probably better to just document that for LEGlyphStorage and GlyphIterator...
+ if (position == glyphCount) {
+ position = newGlyphCount;
+ }
+#endif
+
+ fInsertionList->applyInsertions(this);
+
+ fInsertionList->reset();
+
+ return fGlyphCount = newGlyphCount;
+}
+
+le_bool LEGlyphStorage::applyInsertion(le_int32 atPosition, le_int32 count, LEGlyphID newGlyphs[])
+{
+#if 0
+ // if the current position is within the block we're shifting
+ // it needs to be updated to the current glyph's
+ // new location.
+ // FIXME: this is left over from GlyphIterator, but there's no easy
+ // way to implement this here... it seems that GlyphIterator doesn't
+ // really need it 'cause the insertions don't get applied until after a
+ // complete pass over the glyphs, after which the iterator gets reset anyhow...
+ // probably better to just document that for LEGlyphStorage and GlyphIterator...
+ if (position >= atPosition && position <= fSrcIndex) {
+ position += fDestIndex - fSrcIndex;
+ }
+#endif
+
+ if (fAuxData != NULL) {
+ le_int32 src = fSrcIndex, dest = fDestIndex;
+
+ while (src > atPosition) {
+ fAuxData[dest--] = fAuxData[src--];
+ }
+
+ for (le_int32 i = count - 1; i >= 0; i -= 1) {
+ fAuxData[dest--] = fAuxData[atPosition];
+ }
+ }
+
+ if (fAuxParam != NULL) {
+ le_int32 src = fSrcIndex, dest = fDestIndex;
+
+ while (src > atPosition) {
+ fAuxParam[dest--] = fAuxParam[src--];
+ }
+
+ for (le_int32 i = count - 1; i >= 0; i -= 1) {
+ fAuxParam[dest--] = fAuxParam[atPosition];
+ }
+ }
+
+ while (fSrcIndex > atPosition) {
+ fGlyphs[fDestIndex] = fGlyphs[fSrcIndex];
+ fCharIndices[fDestIndex] = fCharIndices[fSrcIndex];
+
+ fDestIndex -= 1;
+ fSrcIndex -= 1;
+ }
+
+ for (le_int32 i = count - 1; i >= 0; i -= 1) {
+ fGlyphs[fDestIndex] = newGlyphs[i];
+ fCharIndices[fDestIndex] = fCharIndices[atPosition];
+
+ fDestIndex -= 1;
+ }
+
+ // the source glyph we're pointing at
+ // just got replaced by the insertion
+ fSrcIndex -= 1;
+
+ return FALSE;
+}
+
+U_NAMESPACE_END
+
diff --git a/Build/source/libs/icu/icu-50.1/layout/LEGlyphStorage.h b/Build/source/libs/icu/icu-50.1/layout/LEGlyphStorage.h
new file mode 100644
index 00000000000..76604085dfd
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/LEGlyphStorage.h
@@ -0,0 +1,556 @@
+/*
+ **********************************************************************
+ * Copyright (C) 1998-2010, International Business Machines
+ * Corporation and others. All Rights Reserved.
+ **********************************************************************
+ */
+
+#ifndef __LEGLYPHSTORAGE_H
+#define __LEGLYPHSTORAGE_H
+
+#include "LETypes.h"
+#include "LEInsertionList.h"
+
+/**
+ * \file
+ * \brief C++ API: This class encapsulates the per-glyph storage used by the ICU LayoutEngine.
+ */
+
+U_NAMESPACE_BEGIN
+
+/**
+ * This class encapsulates the per-glyph storage used by the ICU LayoutEngine.
+ * For each glyph it holds the glyph ID, the index of the backing store character
+ * which produced the glyph, the X and Y position of the glyph and an auxillary data
+ * pointer.
+ *
+ * The storage is growable using the <code>LEInsertionList</code> class.
+ *
+ *
+ * @see LEInsertionList.h
+ *
+ * @stable ICU 3.6
+ */
+class U_LAYOUT_API LEGlyphStorage : public UObject, protected LEInsertionCallback
+{
+private:
+ /**
+ * The number of entries in the per-glyph arrays.
+ *
+ * @internal
+ */
+ le_int32 fGlyphCount;
+
+ /**
+ * The glyph ID array.
+ *
+ * @internal
+ */
+ LEGlyphID *fGlyphs;
+
+ /**
+ * The char indices array.
+ *
+ * @internal
+ */
+ le_int32 *fCharIndices;
+
+ /**
+ * The glyph positions array.
+ *
+ * @internal
+ */
+ float *fPositions;
+
+ /**
+ * The auxiliary data arrays.
+ *
+ * @internal
+ */
+ le_uint32 *fAuxData;
+ void **fAuxParam;
+
+ /**
+ * The insertion list, used to grow the above arrays.
+ *
+ * @internal
+ */
+ LEInsertionList *fInsertionList;
+
+ /**
+ * The source index while growing the data arrays.
+ *
+ * @internal
+ */
+ le_int32 fSrcIndex;
+
+ /**
+ * The destination index used while growing the data arrays.
+ *
+ * @internal
+ */
+ le_int32 fDestIndex;
+
+protected:
+ /**
+ * This implements <code>LEInsertionCallback</code>. The <code>LEInsertionList</code>
+ * will call this method once for each insertion.
+ *
+ * @param atPosition the position of the insertion
+ * @param count the number of glyphs being inserted
+ * @param newGlyphs the address of the new glyph IDs
+ *
+ * @return <code>true</code> if <code>LEInsertionList</code> should stop
+ * processing the insertion list after this insertion.
+ *
+ * @see LEInsertionList.h
+ *
+ * @stable ICU 3.0
+ */
+ virtual le_bool applyInsertion(le_int32 atPosition, le_int32 count, LEGlyphID newGlyphs[]);
+
+public:
+
+ /**
+ * Allocates an empty <code>LEGlyphStorage</code> object. You must call
+ * <code>allocateGlyphArray, allocatePositions and allocateAuxData</code>
+ * to allocate the data.
+ *
+ * @stable ICU 3.0
+ */
+ LEGlyphStorage();
+
+ /**
+ * The destructor. This will deallocate all of the arrays.
+ *
+ * @stable ICU 3.0
+ */
+ ~LEGlyphStorage();
+
+ /**
+ * This method returns the number of glyphs in the glyph array.
+ *
+ * @return the number of glyphs in the glyph array
+ *
+ * @stable ICU 3.0
+ */
+ inline le_int32 getGlyphCount() const;
+
+ /**
+ * This method copies the glyph array into a caller supplied array.
+ * The caller must ensure that the array is large enough to hold all
+ * the glyphs.
+ *
+ * @param glyphs - the destiniation glyph array
+ * @param success - set to an error code if the operation fails
+ *
+ * @stable ICU 3.0
+ */
+ void getGlyphs(LEGlyphID glyphs[], LEErrorCode &success) const;
+
+ /**
+ * This method copies the glyph array into a caller supplied array,
+ * ORing in extra bits. (This functionality is needed by the JDK,
+ * which uses 32 bits pre glyph idex, with the high 16 bits encoding
+ * the composite font slot number)
+ *
+ * @param glyphs - the destination (32 bit) glyph array
+ * @param extraBits - this value will be ORed with each glyph index
+ * @param success - set to an error code if the operation fails
+ *
+ * @stable ICU 3.0
+ */
+ void getGlyphs(le_uint32 glyphs[], le_uint32 extraBits, LEErrorCode &success) const;
+
+ /**
+ * This method copies the character index array into a caller supplied array.
+ * The caller must ensure that the array is large enough to hold a
+ * character index for each glyph.
+ *
+ * @param charIndices - the destiniation character index array
+ * @param success - set to an error code if the operation fails
+ *
+ * @stable ICU 3.0
+ */
+ void getCharIndices(le_int32 charIndices[], LEErrorCode &success) const;
+
+ /**
+ * This method copies the character index array into a caller supplied array.
+ * The caller must ensure that the array is large enough to hold a
+ * character index for each glyph.
+ *
+ * @param charIndices - the destiniation character index array
+ * @param indexBase - an offset which will be added to each index
+ * @param success - set to an error code if the operation fails
+ *
+ * @stable ICU 3.0
+ */
+ void getCharIndices(le_int32 charIndices[], le_int32 indexBase, LEErrorCode &success) const;
+
+ /**
+ * This method copies the position array into a caller supplied array.
+ * The caller must ensure that the array is large enough to hold an
+ * X and Y position for each glyph, plus an extra X and Y for the
+ * advance of the last glyph.
+ *
+ * @param positions - the destiniation position array
+ * @param success - set to an error code if the operation fails
+ *
+ * @stable ICU 3.0
+ */
+ void getGlyphPositions(float positions[], LEErrorCode &success) const;
+
+ /**
+ * This method returns the X and Y position of the glyph at
+ * the given index.
+ *
+ * Input parameters:
+ * @param glyphIndex - the index of the glyph
+ *
+ * Output parameters:
+ * @param x - the glyph's X position
+ * @param y - the glyph's Y position
+ * @param success - set to an error code if the operation fails
+ *
+ * @stable ICU 3.0
+ */
+ void getGlyphPosition(le_int32 glyphIndex, float &x, float &y, LEErrorCode &success) const;
+
+ /**
+ * This method allocates the glyph array, the char indices array and the insertion list. You
+ * must call this method before using the object. This method also initializes the char indices
+ * array.
+ *
+ * @param initialGlyphCount the initial size of the glyph and char indices arrays.
+ * @param rightToLeft <code>true</code> if the original input text is right to left.
+ * @param success set to an error code if the storage cannot be allocated of if the initial
+ * glyph count is not positive.
+ *
+ * @stable ICU 3.0
+ */
+ void allocateGlyphArray(le_int32 initialGlyphCount, le_bool rightToLeft, LEErrorCode &success);
+
+ /**
+ * This method allocates the storage for the glyph positions. It allocates one extra X, Y
+ * position pair for the position just after the last glyph.
+ *
+ * @param success set to an error code if the positions array cannot be allocated.
+ *
+ * @return the number of X, Y position pairs allocated.
+ *
+ * @stable ICU 3.0
+ */
+ le_int32 allocatePositions(LEErrorCode &success);
+
+ /**
+ * This method allocates the storage for the auxillary glyph data.
+ *
+ * @param success set to an error code if the aulillary data array cannot be allocated.
+ *
+ * @return the size of the auxillary data array.
+ *
+ * @stable ICU 3.6
+ */
+ le_int32 allocateAuxData(LEErrorCode &success);
+
+ /**
+ * Copy the entire auxillary data array.
+ *
+ * @param auxData the auxillary data array will be copied to this address
+ * @param success set to an error code if the data cannot be copied
+ *
+ * @stable ICU 3.6
+ */
+ void getAuxData(le_uint32 auxData[], LEErrorCode &success) const;
+
+ /**
+ * Get the glyph ID for a particular glyph.
+ *
+ * @param glyphIndex the index into the glyph array
+ * @param success set to an error code if the glyph ID cannot be retrieved.
+ *
+ * @return the glyph ID
+ *
+ * @stable ICU 3.0
+ */
+ LEGlyphID getGlyphID(le_int32 glyphIndex, LEErrorCode &success) const;
+
+ /**
+ * Get the char index for a particular glyph.
+ *
+ * @param glyphIndex the index into the glyph array
+ * @param success set to an error code if the char index cannot be retrieved.
+ *
+ * @return the character index
+ *
+ * @stable ICU 3.0
+ */
+ le_int32 getCharIndex(le_int32 glyphIndex, LEErrorCode &success) const;
+
+
+ /**
+ * Get the auxillary data for a particular glyph.
+ *
+ * @param glyphIndex the index into the glyph array
+ * @param success set to an error code if the auxillary data cannot be retrieved.
+ *
+ * @return the auxillary data
+ *
+ * @stable ICU 3.6
+ */
+ le_uint32 getAuxData(le_int32 glyphIndex, LEErrorCode &success) const;
+ void *getAuxParam(le_int32 glyphIndex, LEErrorCode &success) const;
+
+ /**
+ * This operator allows direct access to the glyph array
+ * using the index operator.
+ *
+ * @param glyphIndex the index into the glyph array
+ *
+ * @return a reference to the given location in the glyph array
+ *
+ * @stable ICU 3.0
+ */
+ inline LEGlyphID &operator[](le_int32 glyphIndex) const;
+
+ /**
+ * Call this method to replace a single glyph in the glyph array
+ * with multiple glyphs. This method uses the <code>LEInsertionList</code>
+ * to do the insertion. It returns the address of storage where the new
+ * glyph IDs can be stored. They will not actually be inserted into the
+ * glyph array until <code>applyInsertions</code> is called.
+ *
+ * @param atIndex the index of the glyph to be replaced
+ * @param insertCount the number of glyphs to replace it with
+ * @param success set to an error code if the auxillary data cannot be retrieved.
+ *
+ * @return the address at which to store the replacement glyphs.
+ *
+ * @see LEInsertionList.h
+ *
+ * @stable ICU 4.2
+ */
+ LEGlyphID *insertGlyphs(le_int32 atIndex, le_int32 insertCount, LEErrorCode& success);
+
+ /**
+ * Call this method to replace a single glyph in the glyph array
+ * with multiple glyphs. This method uses the <code>LEInsertionList</code>
+ * to do the insertion. It returns the address of storage where the new
+ * glyph IDs can be stored. They will not actually be inserted into the
+ * glyph array until <code>applyInsertions</code> is called.
+ *
+ * Note: Don't use this version, use the other version of this function which has an error code.
+ *
+ * @param atIndex the index of the glyph to be replaced
+ * @param insertCount the number of glyphs to replace it with
+ *
+ * @return the address at which to store the replacement glyphs.
+ *
+ * @see LEInsertionList.h
+ *
+ * @stable ICU 3.0
+ */
+ LEGlyphID *insertGlyphs(le_int32 atIndex, le_int32 insertCount);
+
+ /**
+ * This method is used to reposition glyphs during Indic v2 processing. It moves
+ * all of the relevant glyph information ( glyph, indices, positions, and auxData ),
+ * from the source position to the target position, and also allows for a marker bit
+ * to be set in the target glyph's auxData so that it won't be reprocessed later in the
+ * cycle.
+ *
+ * @param fromPosition - position of the glyph to be moved
+ * @param toPosition - target position of the glyph
+ * @param marker marker bit
+ *
+ * @stable ICU 4.2
+ */
+ void moveGlyph(le_int32 fromPosition, le_int32 toPosition, le_uint32 marker);
+
+ /**
+ * This method causes all of the glyph insertions recorded by
+ * <code>insertGlyphs</code> to be applied to the glyph array. The
+ * new slots in the char indices and the auxillary data arrays
+ * will be filled in with the values for the glyph being replaced.
+ *
+ * @return the new size of the glyph array
+ *
+ * @see LEInsertionList.h
+ *
+ * @stable ICU 3.0
+ */
+ le_int32 applyInsertions();
+
+ /**
+ * Set the glyph ID for a particular glyph.
+ *
+ * @param glyphIndex the index of the glyph
+ * @param glyphID the new glyph ID
+ * @param success will be set to an error code if the glyph ID cannot be set.
+ *
+ * @stable ICU 3.0
+ */
+ void setGlyphID(le_int32 glyphIndex, LEGlyphID glyphID, LEErrorCode &success);
+
+ /**
+ * Set the char index for a particular glyph.
+ *
+ * @param glyphIndex the index of the glyph
+ * @param charIndex the new char index
+ * @param success will be set to an error code if the char index cannot be set.
+ *
+ * @stable ICU 3.0
+ */
+ void setCharIndex(le_int32 glyphIndex, le_int32 charIndex, LEErrorCode &success);
+
+ /**
+ * Set the X, Y position for a particular glyph.
+ *
+ * @param glyphIndex the index of the glyph
+ * @param x the new X position
+ * @param y the new Y position
+ * @param success will be set to an error code if the position cannot be set.
+ *
+ * @stable ICU 3.0
+ */
+ void setPosition(le_int32 glyphIndex, float x, float y, LEErrorCode &success);
+
+ /**
+ * Adjust the X, Y position for a particular glyph.
+ *
+ * @param glyphIndex the index of the glyph
+ * @param xAdjust the adjustment to the glyph's X position
+ * @param yAdjust the adjustment to the glyph's Y position
+ * @param success will be set to an error code if the glyph's position cannot be adjusted.
+ *
+ * @stable ICU 3.0
+ */
+ void adjustPosition(le_int32 glyphIndex, float xAdjust, float yAdjust, LEErrorCode &success);
+
+ /**
+ * Set the auxiliary data for a particular glyph.
+ *
+ * @param glyphIndex the index of the glyph
+ * @param auxData the new auxiliary data
+ * @param auxParam the new secondary auxiliary data (parameter)
+ * @param success will be set to an error code if the auxiliary data cannot be set.
+ *
+ * @stable ICU 3.6 - mod for XeTeX
+ */
+ void setAuxData(le_int32 glyphIndex, le_uint32 auxData, void *auxParam, LEErrorCode &success);
+ /**
+ * The common case when @param auxParam is <code>NULL</code>.
+ */
+ inline void setAuxData(le_int32 glyphIndex, le_uint32 auxData, LEErrorCode &success);
+
+ /**
+ * Delete the glyph array and replace it with the one
+ * in <code>from</code>. Set the glyph array pointer
+ * in <code>from</code> to <code>NULL</code>.
+ *
+ * @param from the <code>LEGlyphStorage</code> object from which
+ * to get the new glyph array.
+ *
+ * @stable ICU 3.0
+ */
+ void adoptGlyphArray(LEGlyphStorage &from);
+
+ /**
+ * Delete the char indices array and replace it with the one
+ * in <code>from</code>. Set the char indices array pointer
+ * in <code>from</code> to <code>NULL</code>.
+ *
+ * @param from the <code>LEGlyphStorage</code> object from which
+ * to get the new char indices array.
+ *
+ * @stable ICU 3.0
+ */
+ void adoptCharIndicesArray(LEGlyphStorage &from);
+
+ /**
+ * Delete the position array and replace it with the one
+ * in <code>from</code>. Set the position array pointer
+ * in <code>from</code> to <code>NULL</code>.
+ *
+ * @param from the <code>LEGlyphStorage</code> object from which
+ * to get the new position array.
+ *
+ * @stable ICU 3.0
+ */
+ void adoptPositionArray(LEGlyphStorage &from);
+
+ /**
+ * Delete the auxillary data array and replace it with the one
+ * in <code>from</code>. Set the auxillary data array pointer
+ * in <code>from</code> to <code>NULL</code>.
+ *
+ * @param from the <code>LEGlyphStorage</code> object from which
+ * to get the new auxillary data array.
+ *
+ * @stable ICU 3.0
+ */
+ void adoptAuxDataArray(LEGlyphStorage &from);
+
+ /**
+ * Change the glyph count of this object to be the same
+ * as the one in <code>from</code>.
+ *
+ * @param from the <code>LEGlyphStorage</code> object from which
+ * to get the new glyph count.
+ *
+ * @stable ICU 3.0
+ */
+ void adoptGlyphCount(LEGlyphStorage &from);
+
+ /**
+ * Change the glyph count of this object to the given value.
+ *
+ * @param newGlyphCount the new glyph count.
+ *
+ * @stable ICU 3.0
+ */
+ void adoptGlyphCount(le_int32 newGlyphCount);
+
+ /**
+ * This method frees the glyph, character index, position and
+ * auxillary data arrays so that the LayoutEngine can be reused
+ * to layout a different characer array. (This method is also called
+ * by the destructor)
+ *
+ * @stable ICU 3.0
+ */
+ void reset();
+
+ /**
+ * ICU "poor man's RTTI", returns a UClassID for the actual class.
+ *
+ * @stable ICU 3.0
+ */
+ virtual UClassID getDynamicClassID() const;
+
+ /**
+ * ICU "poor man's RTTI", returns a UClassID for this class.
+ *
+ * @stable ICU 3.0
+ */
+ static UClassID getStaticClassID();
+};
+
+inline le_int32 LEGlyphStorage::getGlyphCount() const
+{
+ return fGlyphCount;
+}
+
+inline LEGlyphID &LEGlyphStorage::operator[](le_int32 glyphIndex) const
+{
+ return fGlyphs[glyphIndex];
+}
+
+inline void LEGlyphStorage::setAuxData(le_int32 glyphIndex, le_uint32 auxData, LEErrorCode &success)
+{
+ setAuxData(glyphIndex, auxData, NULL, success);
+}
+
+U_NAMESPACE_END
+#endif
+
diff --git a/Build/source/libs/icu/icu-50.1/layout/LEInsertionList.cpp b/Build/source/libs/icu/icu-50.1/layout/LEInsertionList.cpp
new file mode 100644
index 00000000000..c64b8a198dc
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/LEInsertionList.cpp
@@ -0,0 +1,96 @@
+/*
+ **********************************************************************
+ * Copyright (C) 1998-2008, International Business Machines
+ * Corporation and others. All Rights Reserved.
+ **********************************************************************
+ */
+
+#include "LETypes.h"
+#include "LEInsertionList.h"
+
+U_NAMESPACE_BEGIN
+
+#define ANY_NUMBER 1
+
+struct InsertionRecord
+{
+ InsertionRecord *next;
+ le_int32 position;
+ le_int32 count;
+ LEGlyphID glyphs[ANY_NUMBER];
+};
+
+UOBJECT_DEFINE_RTTI_IMPLEMENTATION(LEInsertionList)
+
+LEInsertionList::LEInsertionList(le_bool rightToLeft)
+: head(NULL), tail(NULL), growAmount(0), append(rightToLeft)
+{
+ tail = (InsertionRecord *) &head;
+}
+
+LEInsertionList::~LEInsertionList()
+{
+ reset();
+}
+
+void LEInsertionList::reset()
+{
+ while (head != NULL) {
+ InsertionRecord *record = head;
+
+ head = head->next;
+ LE_DELETE_ARRAY(record);
+ }
+
+ tail = (InsertionRecord *) &head;
+ growAmount = 0;
+}
+
+le_int32 LEInsertionList::getGrowAmount()
+{
+ return growAmount;
+}
+
+LEGlyphID *LEInsertionList::insert(le_int32 position, le_int32 count, LEErrorCode &success)
+{
+ if (LE_FAILURE(success)) {
+ return 0;
+ }
+
+ InsertionRecord *insertion = (InsertionRecord *) LE_NEW_ARRAY(char, sizeof(InsertionRecord) + (count - ANY_NUMBER) * sizeof (LEGlyphID));
+ if (insertion == NULL) {
+ success = LE_MEMORY_ALLOCATION_ERROR;
+ return 0;
+ }
+
+ insertion->position = position;
+ insertion->count = count;
+
+ growAmount += count - 1;
+
+ if (append) {
+ // insert on end of list...
+ insertion->next = NULL;
+ tail->next = insertion;
+ tail = insertion;
+ } else {
+ // insert on front of list...
+ insertion->next = head;
+ head = insertion;
+ }
+
+ return insertion->glyphs;
+}
+
+le_bool LEInsertionList::applyInsertions(LEInsertionCallback *callback)
+{
+ for (InsertionRecord *rec = head; rec != NULL; rec = rec->next) {
+ if (callback->applyInsertion(rec->position, rec->count, rec->glyphs)) {
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
+
+U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-50.1/layout/LEInsertionList.h b/Build/source/libs/icu/icu-50.1/layout/LEInsertionList.h
new file mode 100644
index 00000000000..0dce5984ea5
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/LEInsertionList.h
@@ -0,0 +1,177 @@
+/*
+ **********************************************************************
+ * Copyright (C) 1998-2011, International Business Machines
+ * Corporation and others. All Rights Reserved.
+ **********************************************************************
+ */
+
+#ifndef __LEINSERTIONLIST_H
+#define __LEINSERTIONLIST_H
+
+#include "LETypes.h"
+
+U_NAMESPACE_BEGIN
+
+struct InsertionRecord;
+
+#ifndef U_HIDE_INTERNAL_API
+/**
+ * This class encapsulates the callback used by <code>LEInsertionList</code>
+ * to apply an insertion from the insertion list.
+ *
+ * @internal
+ */
+class U_LAYOUT_API LEInsertionCallback
+{
+public:
+ /**
+ * This method will be called by <code>LEInsertionList::applyInsertions</code> for each
+ * entry on the insertion list.
+ *
+ * @param atPosition the position of the insertion
+ * @param count the number of glyphs to insert
+ * @param newGlyphs the address of the glyphs to insert
+ *
+ * @return <code>TRUE</code> if <code>LEInsertions::applyInsertions</code> should
+ * stop after applying this insertion.
+ *
+ * @internal
+ */
+ virtual le_bool applyInsertion(le_int32 atPosition, le_int32 count, LEGlyphID newGlyphs[]) = 0;
+
+ /**
+ * The destructor
+ */
+ virtual ~LEInsertionCallback();
+};
+
+/**
+ * This class is used to keep track of insertions to an array of
+ * <code>LEGlyphIDs</code>. The insertions are kept on a linked
+ * list of <code>InsertionRecords</code> so that the glyph array
+ * doesn't have to be grown for each insertion. The insertions are
+ * stored on the list from leftmost to rightmost to make it easier
+ * to do the insertions.
+ *
+ * The insertions are applied to the array by calling the
+ * <code>applyInsertions</code> method, which calls a client
+ * supplied <code>LEInsertionCallback</code> object to actually
+ * apply the individual insertions.
+ *
+ * @internal
+ */
+class LEInsertionList : public UObject
+{
+public:
+ /**
+ * Construct an empty insertion list.
+ *
+ * @param rightToLeft <code>TRUE</code> if the glyphs are stored
+ * in the array in right to left order.
+ *
+ * @internal
+ */
+ LEInsertionList(le_bool rightToLeft);
+
+ /**
+ * The destructor.
+ */
+ ~LEInsertionList();
+
+ /**
+ * Add an entry to the insertion list.
+ *
+ * @param position the glyph at this position in the array will be
+ * replaced by the new glyphs.
+ * @param count the number of new glyphs
+ * @param success set to an error code if the auxillary data cannot be retrieved.
+ *
+ * @return the address of an array in which to store the new glyphs. This will
+ * <em>not</em> be in the glyph array.
+ *
+ * @internal
+ */
+ LEGlyphID *insert(le_int32 position, le_int32 count, LEErrorCode &success);
+
+ /**
+ * Return the number of new glyphs that have been inserted.
+ *
+ * @return the number of new glyphs which have been inserted
+ *
+ * @internal
+ */
+ le_int32 getGrowAmount();
+
+ /**
+ * Call the <code>LEInsertionCallback</code> once for each
+ * entry on the insertion list.
+ *
+ * @param callback the <code>LEInsertionCallback</code> to call for each insertion.
+ *
+ * @return <code>TRUE</code> if <code>callback</code> returned <code>TRUE</code> to
+ * terminate the insertion list processing.
+ *
+ * @internal
+ */
+ le_bool applyInsertions(LEInsertionCallback *callback);
+
+ /**
+ * Empty the insertion list and free all associated
+ * storage.
+ *
+ * @internal
+ */
+ void reset();
+
+ /**
+ * ICU "poor man's RTTI", returns a UClassID for the actual class.
+ *
+ * @stable ICU 2.8
+ */
+ virtual UClassID getDynamicClassID() const;
+
+ /**
+ * ICU "poor man's RTTI", returns a UClassID for this class.
+ *
+ * @stable ICU 2.8
+ */
+ static UClassID getStaticClassID();
+
+private:
+
+ /**
+ * The head of the insertion list.
+ *
+ * @internal
+ */
+ InsertionRecord *head;
+
+ /**
+ * The tail of the insertion list.
+ *
+ * @internal
+ */
+ InsertionRecord *tail;
+
+ /**
+ * The total number of new glyphs on the insertion list.
+ *
+ * @internal
+ */
+ le_int32 growAmount;
+
+ /**
+ * Set to <code>TRUE</code> if the glyphs are in right
+ * to left order. Since we want the rightmost insertion
+ * to be first on the list, we need to append the
+ * insertions in this case. Otherwise they're prepended.
+ *
+ * @internal
+ */
+ le_bool append;
+};
+#endif /* U_HIDE_INTERNAL_API */
+
+U_NAMESPACE_END
+#endif
+
diff --git a/Build/source/libs/icu/icu-50.1/layout/LELanguages.h b/Build/source/libs/icu/icu-50.1/layout/LELanguages.h
new file mode 100644
index 00000000000..6ec166b8dfd
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/LELanguages.h
@@ -0,0 +1,111 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2010. All Rights Reserved.
+ *
+ * WARNING: THIS FILE IS MACHINE GENERATED. DO NOT HAND EDIT IT UNLESS
+ * YOU REALLY KNOW WHAT YOU'RE DOING.
+ *
+ * Generated on: 10/26/2010 02:53:33 PM PDT
+ */
+
+#ifndef __LELANGUAGES_H
+#define __LELANGUAGES_H
+
+#include "LETypes.h"
+
+/**
+ * \file
+ * \brief C++ API: List of language codes for LayoutEngine
+ */
+
+U_NAMESPACE_BEGIN
+
+/**
+ * A provisional list of language codes. For now,
+ * this is just a list of languages which the LayoutEngine
+ * supports.
+ *
+ * @stable ICU 2.6
+ */
+
+enum LanguageCodes {
+ nullLanguageCode = 0,
+ araLanguageCode = 1,
+ asmLanguageCode = 2,
+ benLanguageCode = 3,
+ farLanguageCode = 4,
+ gujLanguageCode = 5,
+ hinLanguageCode = 6,
+ iwrLanguageCode = 7,
+ jiiLanguageCode = 8,
+ janLanguageCode = 9,
+ kanLanguageCode = 10,
+ kokLanguageCode = 11,
+ korLanguageCode = 12,
+ kshLanguageCode = 13,
+ malLanguageCode = 14,
+ marLanguageCode = 15,
+ mlrLanguageCode = 16,
+ mniLanguageCode = 17,
+ oriLanguageCode = 18,
+ sanLanguageCode = 19,
+ sndLanguageCode = 20,
+ snhLanguageCode = 21,
+ syrLanguageCode = 22,
+ tamLanguageCode = 23,
+ telLanguageCode = 24,
+ thaLanguageCode = 25,
+ urdLanguageCode = 26,
+ zhpLanguageCode = 27,
+ zhsLanguageCode = 28,
+ zhtLanguageCode = 29,
+
+ /** New language codes added 03/13/2008 @stable ICU 4.0 */
+ afkLanguageCode = 30,
+ belLanguageCode = 31,
+ bgrLanguageCode = 32,
+ catLanguageCode = 33,
+ cheLanguageCode = 34,
+ copLanguageCode = 35,
+ csyLanguageCode = 36,
+ danLanguageCode = 37,
+ deuLanguageCode = 38,
+ dznLanguageCode = 39,
+ ellLanguageCode = 40,
+ engLanguageCode = 41,
+ espLanguageCode = 42,
+ etiLanguageCode = 43,
+ euqLanguageCode = 44,
+ finLanguageCode = 45,
+ fraLanguageCode = 46,
+ gaeLanguageCode = 47,
+ hauLanguageCode = 48,
+ hrvLanguageCode = 49,
+ hunLanguageCode = 50,
+ hyeLanguageCode = 51,
+ indLanguageCode = 52,
+ itaLanguageCode = 53,
+ khmLanguageCode = 54,
+ mngLanguageCode = 55,
+ mtsLanguageCode = 56,
+ nepLanguageCode = 57,
+ nldLanguageCode = 58,
+ pasLanguageCode = 59,
+ plkLanguageCode = 60,
+ ptgLanguageCode = 61,
+ romLanguageCode = 62,
+ rusLanguageCode = 63,
+ skyLanguageCode = 64,
+ slvLanguageCode = 65,
+ sqiLanguageCode = 66,
+ srbLanguageCode = 67,
+ sveLanguageCode = 68,
+ tibLanguageCode = 69,
+ trkLanguageCode = 70,
+ welLanguageCode = 71,
+
+ languageCodeCount = 72
+};
+
+U_NAMESPACE_END
+#endif
diff --git a/Build/source/libs/icu/icu-50.1/layout/LEScripts.h b/Build/source/libs/icu/icu-50.1/layout/LEScripts.h
new file mode 100644
index 00000000000..6dc68ffcfd2
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/LEScripts.h
@@ -0,0 +1,243 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2012. All Rights Reserved.
+ *
+ * WARNING: THIS FILE IS MACHINE GENERATED. DO NOT HAND EDIT IT UNLESS
+ * YOU REALLY KNOW WHAT YOU'RE DOING.
+ *
+ * Generated on: 11/01/2011 04:08:09 PM PDT
+ */
+
+#ifndef __LESCRIPTS_H
+#define __LESCRIPTS_H
+
+#include "LETypes.h"
+
+/**
+ * \file
+ * \brief C++ API: Constants for Unicode script values
+ */
+
+U_NAMESPACE_BEGIN
+
+/**
+ * Constants for Unicode script values, generated using
+ * ICU4J's <code>UScript</code> class.
+ *
+ * @stable ICU 2.2
+ */
+
+enum ScriptCodes {
+ zyyyScriptCode = 0,
+ zinhScriptCode = 1,
+ qaaiScriptCode = zinhScriptCode, /* manually added alias, for API stability */
+ arabScriptCode = 2,
+ armnScriptCode = 3,
+ bengScriptCode = 4,
+ bopoScriptCode = 5,
+ cherScriptCode = 6,
+ coptScriptCode = 7,
+ cyrlScriptCode = 8,
+ dsrtScriptCode = 9,
+ devaScriptCode = 10,
+ ethiScriptCode = 11,
+ georScriptCode = 12,
+ gothScriptCode = 13,
+ grekScriptCode = 14,
+ gujrScriptCode = 15,
+ guruScriptCode = 16,
+ haniScriptCode = 17,
+ hangScriptCode = 18,
+ hebrScriptCode = 19,
+ hiraScriptCode = 20,
+ kndaScriptCode = 21,
+ kanaScriptCode = 22,
+ khmrScriptCode = 23,
+ laooScriptCode = 24,
+ latnScriptCode = 25,
+ mlymScriptCode = 26,
+ mongScriptCode = 27,
+ mymrScriptCode = 28,
+ ogamScriptCode = 29,
+ italScriptCode = 30,
+ oryaScriptCode = 31,
+ runrScriptCode = 32,
+ sinhScriptCode = 33,
+ syrcScriptCode = 34,
+ tamlScriptCode = 35,
+ teluScriptCode = 36,
+ thaaScriptCode = 37,
+ thaiScriptCode = 38,
+ tibtScriptCode = 39,
+/**
+ * @stable ICU 2.6
+ */
+
+ cansScriptCode = 40,
+/**
+ * @stable ICU 2.2
+ */
+
+ yiiiScriptCode = 41,
+ tglgScriptCode = 42,
+ hanoScriptCode = 43,
+ buhdScriptCode = 44,
+ tagbScriptCode = 45,
+/**
+ * @stable ICU 2.6
+ */
+
+ braiScriptCode = 46,
+ cprtScriptCode = 47,
+ limbScriptCode = 48,
+ linbScriptCode = 49,
+ osmaScriptCode = 50,
+ shawScriptCode = 51,
+ taleScriptCode = 52,
+ ugarScriptCode = 53,
+/**
+ * @stable ICU 3.0
+ */
+
+ hrktScriptCode = 54,
+/**
+ * @stable ICU 3.4
+ */
+
+ bugiScriptCode = 55,
+ glagScriptCode = 56,
+ kharScriptCode = 57,
+ syloScriptCode = 58,
+ taluScriptCode = 59,
+ tfngScriptCode = 60,
+ xpeoScriptCode = 61,
+/**
+ * @stable ICU 3.6
+ */
+
+ baliScriptCode = 62,
+ batkScriptCode = 63,
+ blisScriptCode = 64,
+ brahScriptCode = 65,
+ chamScriptCode = 66,
+ cirtScriptCode = 67,
+ cyrsScriptCode = 68,
+ egydScriptCode = 69,
+ egyhScriptCode = 70,
+ egypScriptCode = 71,
+ geokScriptCode = 72,
+ hansScriptCode = 73,
+ hantScriptCode = 74,
+ hmngScriptCode = 75,
+ hungScriptCode = 76,
+ indsScriptCode = 77,
+ javaScriptCode = 78,
+ kaliScriptCode = 79,
+ latfScriptCode = 80,
+ latgScriptCode = 81,
+ lepcScriptCode = 82,
+ linaScriptCode = 83,
+ mandScriptCode = 84,
+ mayaScriptCode = 85,
+ meroScriptCode = 86,
+ nkooScriptCode = 87,
+ orkhScriptCode = 88,
+ permScriptCode = 89,
+ phagScriptCode = 90,
+ phnxScriptCode = 91,
+ plrdScriptCode = 92,
+ roroScriptCode = 93,
+ saraScriptCode = 94,
+ syreScriptCode = 95,
+ syrjScriptCode = 96,
+ syrnScriptCode = 97,
+ tengScriptCode = 98,
+ vaiiScriptCode = 99,
+ vispScriptCode = 100,
+ xsuxScriptCode = 101,
+ zxxxScriptCode = 102,
+ zzzzScriptCode = 103,
+/**
+ * @stable ICU 3.8
+ */
+
+ cariScriptCode = 104,
+ jpanScriptCode = 105,
+ lanaScriptCode = 106,
+ lyciScriptCode = 107,
+ lydiScriptCode = 108,
+ olckScriptCode = 109,
+ rjngScriptCode = 110,
+ saurScriptCode = 111,
+ sgnwScriptCode = 112,
+ sundScriptCode = 113,
+ moonScriptCode = 114,
+ mteiScriptCode = 115,
+/**
+ * @stable ICU 4.0
+ */
+
+ armiScriptCode = 116,
+ avstScriptCode = 117,
+ cakmScriptCode = 118,
+ koreScriptCode = 119,
+ kthiScriptCode = 120,
+ maniScriptCode = 121,
+ phliScriptCode = 122,
+ phlpScriptCode = 123,
+ phlvScriptCode = 124,
+ prtiScriptCode = 125,
+ samrScriptCode = 126,
+ tavtScriptCode = 127,
+ zmthScriptCode = 128,
+ zsymScriptCode = 129,
+/**
+ * @stable ICU 4.4
+ */
+
+ bamuScriptCode = 130,
+ lisuScriptCode = 131,
+ nkgbScriptCode = 132,
+ sarbScriptCode = 133,
+/**
+ * @stable ICU 4.6
+ */
+
+ bassScriptCode = 134,
+ duplScriptCode = 135,
+ elbaScriptCode = 136,
+ granScriptCode = 137,
+ kpelScriptCode = 138,
+ lomaScriptCode = 139,
+ mendScriptCode = 140,
+ mercScriptCode = 141,
+ narbScriptCode = 142,
+ nbatScriptCode = 143,
+ palmScriptCode = 144,
+ sindScriptCode = 145,
+ waraScriptCode = 146,
+/**
+ * @stable ICU 4.8
+ */
+
+ afakScriptCode = 147,
+ jurcScriptCode = 148,
+ mrooScriptCode = 149,
+ nshuScriptCode = 150,
+ shrdScriptCode = 151,
+ soraScriptCode = 152,
+ takrScriptCode = 153,
+ tangScriptCode = 154,
+ woleScriptCode = 155,
+/**
+ * @stable ICU 49
+ */
+
+ khojScriptCode = 156,
+ tirhScriptCode = 157,
+
+ scriptCodeCount = 158
+};
+
+U_NAMESPACE_END
+#endif
diff --git a/Build/source/libs/icu/icu-50.1/layout/LESwaps.h b/Build/source/libs/icu/icu-50.1/layout/LESwaps.h
new file mode 100644
index 00000000000..b9b133f4f72
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/LESwaps.h
@@ -0,0 +1,100 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2011 - All Rights Reserved
+ *
+ */
+
+#ifndef __LESWAPS_H
+#define __LESWAPS_H
+
+#include "LETypes.h"
+
+/**
+ * \file
+ * \brief C++ API: Endian independent access to data for LayoutEngine
+ */
+
+U_NAMESPACE_BEGIN
+
+/**
+ * A convenience macro which invokes the swapWord member function
+ * from a concise call.
+ *
+ * @stable ICU 2.8
+ */
+#define SWAPW(value) LESwaps::swapWord((le_uint16)(value))
+
+/**
+ * A convenience macro which invokes the swapLong member function
+ * from a concise call.
+ *
+ * @stable ICU 2.8
+ */
+#define SWAPL(value) LESwaps::swapLong((le_uint32)(value))
+
+/**
+ * This class is used to access data which stored in big endian order
+ * regardless of the conventions of the platform.
+ *
+ * All methods are static and inline in an attempt to induce the compiler
+ * to do most of the calculations at compile time.
+ *
+ * @stable ICU 2.8
+ */
+class U_LAYOUT_API LESwaps /* not : public UObject because all methods are static */ {
+public:
+
+ /**
+ * Reads a big-endian 16-bit word and returns a native-endian value.
+ * No-op on a big-endian platform, byte-swaps on a little-endian platform.
+ *
+ * @param value - the word to be byte swapped
+ *
+ * @return the byte swapped word
+ *
+ * @stable ICU 2.8
+ */
+ static le_uint16 swapWord(le_uint16 value)
+ {
+#if (defined(U_IS_BIG_ENDIAN) && U_IS_BIG_ENDIAN) || \
+ (defined(BYTE_ORDER) && defined(BIG_ENDIAN) && (BYTE_ORDER == BIG_ENDIAN)) || \
+ defined(__BIG_ENDIAN__)
+ // Fastpath when we know that the platform is big-endian.
+ return value;
+#else
+ // Reads a big-endian value on any platform.
+ const le_uint8 *p = reinterpret_cast<const le_uint8 *>(&value);
+ return (le_uint16)((p[0] << 8) | p[1]);
+#endif
+ };
+
+ /**
+ * Reads a big-endian 32-bit word and returns a native-endian value.
+ * No-op on a big-endian platform, byte-swaps on a little-endian platform.
+ *
+ * @param value - the long to be byte swapped
+ *
+ * @return the byte swapped long
+ *
+ * @stable ICU 2.8
+ */
+ static le_uint32 swapLong(le_uint32 value)
+ {
+#if (defined(U_IS_BIG_ENDIAN) && U_IS_BIG_ENDIAN) || \
+ (defined(BYTE_ORDER) && defined(BIG_ENDIAN) && (BYTE_ORDER == BIG_ENDIAN)) || \
+ defined(__BIG_ENDIAN__)
+ // Fastpath when we know that the platform is big-endian.
+ return value;
+#else
+ // Reads a big-endian value on any platform.
+ const le_uint8 *p = reinterpret_cast<const le_uint8 *>(&value);
+ return (le_uint32)((p[0] << 24) | (p[1] << 16) | (p[2] << 8) | p[3]);
+#endif
+ };
+
+private:
+ LESwaps() {} // private - forbid instantiation
+};
+
+U_NAMESPACE_END
+#endif
diff --git a/Build/source/libs/icu/icu-50.1/layout/LETypes.h b/Build/source/libs/icu/icu-50.1/layout/LETypes.h
new file mode 100644
index 00000000000..0540493bd26
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/LETypes.h
@@ -0,0 +1,572 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2011 - All Rights Reserved
+ *
+ */
+
+#ifndef __LETYPES_H
+#define __LETYPES_H
+
+#if !defined(LE_USE_CMEMORY) && (defined(U_LAYOUT_IMPLEMENTATION) || defined(U_LAYOUTEX_IMPLEMENTATION) || defined(U_STATIC_IMPLEMENTATION) || defined(U_COMBINED_IMPLEMENTATION))
+#define LE_USE_CMEMORY
+#endif
+
+#include "unicode/utypes.h"
+
+#ifdef __cplusplus
+#include "unicode/uobject.h"
+#endif
+
+#ifdef LE_USE_CMEMORY
+#include "cmemory.h"
+#endif
+
+/*!
+ * \file
+ * \brief C API: Basic definitions for the ICU LayoutEngine
+ */
+
+/**
+ * A type used for signed, 32-bit integers.
+ *
+ * @stable ICU 2.4
+ */
+typedef int32_t le_int32;
+
+/**
+ * A type used for unsigned, 32-bit integers.
+ *
+ * @stable ICU 2.4
+ */
+typedef uint32_t le_uint32;
+
+/**
+ * A type used for signed, 16-bit integers.
+ *
+ * @stable ICU 2.4
+ */
+typedef int16_t le_int16;
+
+/**
+ * A type used for unsigned, 16-bit integers.
+ *
+ * @stable ICU 2.4
+ */
+typedef uint16_t le_uint16;
+
+/**
+ * A type used for signed, 8-bit integers.
+ *
+ * @stable ICU 2.4
+ */
+typedef int8_t le_int8;
+
+/**
+ * A type used for unsigned, 8-bit integers.
+ *
+ * @stable ICU 2.4
+ */
+typedef uint8_t le_uint8;
+
+
+/**
+ * A type used for boolean values.
+ *
+ * @stable ICU 2.4
+ */
+typedef UBool le_bool;
+
+#ifndef NULL
+/**
+ * Used to represent empty pointers.
+ *
+ * @stable ICU 2.4
+ */
+#define NULL 0
+#endif
+
+/**
+ * Used for four character tags.
+ *
+ * @stable ICU 2.4
+ */
+typedef le_uint32 LETag;
+
+/**
+ * Used for 16-bit glyph indices as they're represented
+ * in TrueType font tables.
+ *
+ * @stable ICU 3.2
+ */
+typedef le_uint16 TTGlyphID;
+
+/**
+ * Used for glyph indices. The low-order 16 bits are
+ * the glyph ID within the font. The next 8 bits are
+ * the sub-font ID within a compound font. The high-
+ * order 8 bits are client defined. The LayoutEngine
+ * will never change or look at the client defined bits.
+ *
+ * @stable ICU 3.2
+ */
+typedef le_uint32 LEGlyphID;
+
+/**
+ * Used to mask off the glyph ID part of an LEGlyphID.
+ *
+ * @see LEGlyphID
+ * @stable ICU 3.2
+ */
+#define LE_GLYPH_MASK 0x0000FFFF
+
+/**
+ * Used to shift the glyph ID part of an LEGlyphID
+ * into the low-order bits.
+ *
+ * @see LEGlyphID
+ * @stable ICU 3.2
+ */
+#define LE_GLYPH_SHIFT 0
+
+
+/**
+ * Used to mask off the sub-font ID part of an LEGlyphID.
+ *
+ * @see LEGlyphID
+ * @stable ICU 3.2
+ */
+#define LE_SUB_FONT_MASK 0x00FF0000
+
+/**
+ * Used to shift the sub-font ID part of an LEGlyphID
+ * into the low-order bits.
+ *
+ * @see LEGlyphID
+ * @stable ICU 3.2
+ */
+#define LE_SUB_FONT_SHIFT 16
+
+
+/**
+ * Used to mask off the client-defined part of an LEGlyphID.
+ *
+ * @see LEGlyphID
+ * @stable ICU 3.2
+ */
+#define LE_CLIENT_MASK 0xFF000000
+
+/**
+ * Used to shift the sub-font ID part of an LEGlyphID
+ * into the low-order bits.
+ *
+ * @see LEGlyphID
+ * @stable ICU 3.2
+ */
+#define LE_CLIENT_SHIFT 24
+
+
+/**
+ * A convenience macro to get the Glyph ID part of an LEGlyphID.
+ *
+ * @see LEGlyphID
+ * @stable ICU 3.2
+ */
+#define LE_GET_GLYPH(gid) ((gid & LE_GLYPH_MASK) >> LE_GLYPH_SHIFT)
+
+/**
+ * A convenience macro to get the sub-font ID part of an LEGlyphID.
+ *
+ * @see LEGlyphID
+ * @stable ICU 3.2
+ */
+#define LE_GET_SUB_FONT(gid) ((gid & LE_SUB_FONT_MASK) >> LE_SUB_FONT_SHIFT)
+
+/**
+ * A convenience macro to get the client-defined part of an LEGlyphID.
+ *
+ * @see LEGlyphID
+ * @stable ICU 3.2
+ */
+#define LE_GET_CLIENT(gid) ((gid & LE_CLIENT_MASK) >> LE_CLIENT_SHIFT)
+
+
+/**
+ * A convenience macro to set the Glyph ID part of an LEGlyphID.
+ *
+ * @see LEGlyphID
+ * @stable ICU 3.2
+ */
+#define LE_SET_GLYPH(gid, glyph) ((gid & ~LE_GLYPH_MASK) | ((glyph << LE_GLYPH_SHIFT) & LE_GLYPH_MASK))
+
+/**
+ * A convenience macro to set the sub-font ID part of an LEGlyphID.
+ *
+ * @see LEGlyphID
+ * @stable ICU 3.2
+ */
+#define LE_SET_SUB_FONT(gid, font) ((gid & ~LE_SUB_FONT_MASK) | ((font << LE_SUB_FONT_SHIFT) & LE_SUB_FONT_MASK))
+
+/**
+ * A convenience macro to set the client-defined part of an LEGlyphID.
+ *
+ * @see LEGlyphID
+ * @stable ICU 3.2
+ */
+#define LE_SET_CLIENT(gid, client) ((gid & ~LE_CLIENT_MASK) | ((client << LE_CLIENT_SHIFT) & LE_CLIENT_MASK))
+
+
+/**
+ * Used to represent 16-bit Unicode code points.
+ *
+ * @stable ICU 2.4
+ */
+typedef UChar LEUnicode16;
+
+/**
+ * Used to represent 32-bit Unicode code points.
+ *
+ * @stable ICU 2.4
+ */
+typedef UChar32 LEUnicode32;
+
+#ifndef U_HIDE_DEPRECATED_API
+/**
+ * Used to represent 16-bit Unicode code points.
+ *
+ * @deprecated since ICU 2.4. Use LEUnicode16 instead
+ */
+typedef UChar LEUnicode;
+#endif /* U_HIDE_DEPRECATED_API */
+
+/**
+ * Used to hold a pair of (x, y) values which represent a point.
+ *
+ * @stable ICU 2.4
+ */
+struct LEPoint
+{
+ /**
+ * The x coordinate of the point.
+ *
+ * @stable ICU 2.4
+ */
+ float fX;
+
+ /**
+ * The y coordinate of the point.
+ *
+ * @stable ICU 2.4
+ */
+ float fY;
+};
+
+#ifndef __cplusplus
+/**
+ * Used to hold a pair of (x, y) values which represent a point.
+ *
+ * @stable ICU 2.4
+ */
+typedef struct LEPoint LEPoint;
+#endif
+
+
+#ifndef U_HIDE_INTERNAL_API
+/**
+ * A convenience macro to get the length of an array.
+ *
+ * @internal
+ */
+#define LE_ARRAY_SIZE(array) (sizeof array / sizeof array[0])
+
+#ifdef LE_USE_CMEMORY
+/**
+ * A convenience macro for copying an array.
+ *
+ * @internal
+ */
+#define LE_ARRAY_COPY(dst, src, count) uprv_memcpy((void *) (dst), (void *) (src), (count) * sizeof (src)[0])
+
+/**
+ * Allocate an array of basic types. This is used to isolate the rest of
+ * the LayoutEngine code from cmemory.h.
+ *
+ * @internal
+ */
+#define LE_NEW_ARRAY(type, count) (type *) uprv_malloc((count) * sizeof(type))
+
+/**
+ * Re-allocate an array of basic types. This is used to isolate the rest of
+ * the LayoutEngine code from cmemory.h.
+ *
+ * @internal
+ */
+#define LE_GROW_ARRAY(array, newSize) uprv_realloc((void *) (array), (newSize) * sizeof (array)[0])
+
+ /**
+ * Free an array of basic types. This is used to isolate the rest of
+ * the LayoutEngine code from cmemory.h.
+ *
+ * @internal
+ */
+#define LE_DELETE_ARRAY(array) uprv_free((void *) (array))
+#endif
+#endif /* U_HIDE_INTERNAL_API */
+
+/**
+ * A macro to construct the four-letter tags used to
+ * label TrueType tables, and for script, language and
+ * feature tags in OpenType tables.
+ *
+ * WARNING: THIS MACRO WILL ONLY WORK CORRECTLY IF
+ * THE ARGUMENT CHARACTERS ARE ASCII.
+ *
+ * @stable ICU 3.2
+ */
+#define LE_MAKE_TAG(a, b, c, d) \
+ (((le_uint32)(a) << 24) | \
+ ((le_uint32)(b) << 16) | \
+ ((le_uint32)(c) << 8) | \
+ (le_uint32)(d))
+
+/**
+ * This enumeration defines constants for the standard
+ * TrueType, OpenType and AAT table tags.
+ *
+ * @stable ICU 3.2
+ */
+enum LETableTags {
+ LE_ACNT_TABLE_TAG = 0x61636E74UL, /**< 'acnt' */
+ LE_AVAR_TABLE_TAG = 0x61766172UL, /**< 'avar' */
+ LE_BASE_TABLE_TAG = 0x42415345UL, /**< 'BASE' */
+ LE_BDAT_TABLE_TAG = 0x62646174UL, /**< 'bdat' */
+ LE_BHED_TABLE_TAG = 0x62686564UL, /**< 'bhed' */
+ LE_BLOC_TABLE_TAG = 0x626C6F63UL, /**< 'bloc' */
+ LE_BSLN_TABLE_TAG = 0x62736C6EUL, /**< 'bsln' */
+ LE_CFF__TABLE_TAG = 0x43464620UL, /**< 'CFF ' */
+ LE_CMAP_TABLE_TAG = 0x636D6170UL, /**< 'cmap' */
+ LE_CVAR_TABLE_TAG = 0x63766172UL, /**< 'cvar' */
+ LE_CVT__TABLE_TAG = 0x63767420UL, /**< 'cvt ' */
+ LE_DSIG_TABLE_TAG = 0x44534947UL, /**< 'DSIG' */
+ LE_EBDT_TABLE_TAG = 0x45424454UL, /**< 'EBDT' */
+ LE_EBLC_TABLE_TAG = 0x45424C43UL, /**< 'EBLC' */
+ LE_EBSC_TABLE_TAG = 0x45425343UL, /**< 'EBSC' */
+ LE_FDSC_TABLE_TAG = 0x66647363UL, /**< 'fdsc' */
+ LE_FEAT_TABLE_TAG = 0x66656174UL, /**< 'feat' */
+ LE_FMTX_TABLE_TAG = 0x666D7478UL, /**< 'fmtx' */
+ LE_FPGM_TABLE_TAG = 0x6670676DUL, /**< 'fpgm' */
+ LE_FVAR_TABLE_TAG = 0x66766172UL, /**< 'fvar' */
+ LE_GASP_TABLE_TAG = 0x67617370UL, /**< 'gasp' */
+ LE_GDEF_TABLE_TAG = 0x47444546UL, /**< 'GDEF' */
+ LE_GLYF_TABLE_TAG = 0x676C7966UL, /**< 'glyf' */
+ LE_GPOS_TABLE_TAG = 0x47504F53UL, /**< 'GPOS' */
+ LE_GSUB_TABLE_TAG = 0x47535542UL, /**< 'GSUB' */
+ LE_GVAR_TABLE_TAG = 0x67766172UL, /**< 'gvar' */
+ LE_HDMX_TABLE_TAG = 0x68646D78UL, /**< 'hdmx' */
+ LE_HEAD_TABLE_TAG = 0x68656164UL, /**< 'head' */
+ LE_HHEA_TABLE_TAG = 0x68686561UL, /**< 'hhea' */
+ LE_HMTX_TABLE_TAG = 0x686D7478UL, /**< 'hmtx' */
+ LE_HSTY_TABLE_TAG = 0x68737479UL, /**< 'hsty' */
+ LE_JUST_TABLE_TAG = 0x6A757374UL, /**< 'just' */
+ LE_JSTF_TABLE_TAG = 0x4A535446UL, /**< 'JSTF' */
+ LE_KERN_TABLE_TAG = 0x6B65726EUL, /**< 'kern' */
+ LE_LCAR_TABLE_TAG = 0x6C636172UL, /**< 'lcar' */
+ LE_LOCA_TABLE_TAG = 0x6C6F6361UL, /**< 'loca' */
+ LE_LTSH_TABLE_TAG = 0x4C545348UL, /**< 'LTSH' */
+ LE_MAXP_TABLE_TAG = 0x6D617870UL, /**< 'maxp' */
+ LE_MORT_TABLE_TAG = 0x6D6F7274UL, /**< 'mort' */
+ LE_MORX_TABLE_TAG = 0x6D6F7278UL, /**< 'morx' */
+ LE_NAME_TABLE_TAG = 0x6E616D65UL, /**< 'name' */
+ LE_OPBD_TABLE_TAG = 0x6F706264UL, /**< 'opbd' */
+ LE_OS_2_TABLE_TAG = 0x4F532F32UL, /**< 'OS/2' */
+ LE_PCLT_TABLE_TAG = 0x50434C54UL, /**< 'PCLT' */
+ LE_POST_TABLE_TAG = 0x706F7374UL, /**< 'post' */
+ LE_PREP_TABLE_TAG = 0x70726570UL, /**< 'prep' */
+ LE_PROP_TABLE_TAG = 0x70726F70UL, /**< 'prop' */
+ LE_TRAK_TABLE_TAG = 0x7472616BUL, /**< 'trak' */
+ LE_VDMX_TABLE_TAG = 0x56444D58UL, /**< 'VDMX' */
+ LE_VHEA_TABLE_TAG = 0x76686561UL, /**< 'vhea' */
+ LE_VMTX_TABLE_TAG = 0x766D7478UL, /**< 'vmtx' */
+ LE_VORG_TABLE_TAG = 0x564F5247UL, /**< 'VORG' */
+ LE_ZAPF_TABLE_TAG = 0x5A617066UL /**< 'Zapf' */
+};
+
+/**
+ * This enumeration defines constants for all
+ * the common OpenType feature tags.
+ *
+ * @stable ICU 3.2
+ */
+enum LEFeatureTags {
+ LE_AALT_FEATURE_TAG = 0x61616C74UL, /**< 'aalt' */
+ LE_ABVF_FEATURE_TAG = 0x61627666UL, /**< 'abvf' */
+ LE_ABVM_FEATURE_TAG = 0x6162766DUL, /**< 'abvm' */
+ LE_ABVS_FEATURE_TAG = 0x61627673UL, /**< 'abvs' */
+ LE_AFRC_FEATURE_TAG = 0x61667263UL, /**< 'afrc' */
+ LE_AKHN_FEATURE_TAG = 0x616B686EUL, /**< 'akhn' */
+ LE_BLWF_FEATURE_TAG = 0x626C7766UL, /**< 'blwf' */
+ LE_BLWM_FEATURE_TAG = 0x626C776DUL, /**< 'blwm' */
+ LE_BLWS_FEATURE_TAG = 0x626C7773UL, /**< 'blws' */
+ LE_CALT_FEATURE_TAG = 0x63616C74UL, /**< 'calt' */
+ LE_CASE_FEATURE_TAG = 0x63617365UL, /**< 'case' */
+ LE_CCMP_FEATURE_TAG = 0x63636D70UL, /**< 'ccmp' */
+ LE_CJCT_FEATURE_TAG = 0x636A6374UL, /**< 'cjct' */
+ LE_CLIG_FEATURE_TAG = 0x636C6967UL, /**< 'clig' */
+ LE_CPSP_FEATURE_TAG = 0x63707370UL, /**< 'cpsp' */
+ LE_CSWH_FEATURE_TAG = 0x63737768UL, /**< 'cswh' */
+ LE_CURS_FEATURE_TAG = 0x63757273UL, /**< 'curs' */
+ LE_C2SC_FEATURE_TAG = 0x63327363UL, /**< 'c2sc' */
+ LE_C2PC_FEATURE_TAG = 0x63327063UL, /**< 'c2pc' */
+ LE_DIST_FEATURE_TAG = 0x64697374UL, /**< 'dist' */
+ LE_DLIG_FEATURE_TAG = 0x646C6967UL, /**< 'dlig' */
+ LE_DNOM_FEATURE_TAG = 0x646E6F6DUL, /**< 'dnom' */
+ LE_EXPT_FEATURE_TAG = 0x65787074UL, /**< 'expt' */
+ LE_FALT_FEATURE_TAG = 0x66616C74UL, /**< 'falt' */
+ LE_FIN2_FEATURE_TAG = 0x66696E32UL, /**< 'fin2' */
+ LE_FIN3_FEATURE_TAG = 0x66696E33UL, /**< 'fin3' */
+ LE_FINA_FEATURE_TAG = 0x66696E61UL, /**< 'fina' */
+ LE_FRAC_FEATURE_TAG = 0x66726163UL, /**< 'frac' */
+ LE_FWID_FEATURE_TAG = 0x66776964UL, /**< 'fwid' */
+ LE_HALF_FEATURE_TAG = 0x68616C66UL, /**< 'half' */
+ LE_HALN_FEATURE_TAG = 0x68616C6EUL, /**< 'haln' */
+ LE_HALT_FEATURE_TAG = 0x68616C74UL, /**< 'halt' */
+ LE_HIST_FEATURE_TAG = 0x68697374UL, /**< 'hist' */
+ LE_HKNA_FEATURE_TAG = 0x686B6E61UL, /**< 'hkna' */
+ LE_HLIG_FEATURE_TAG = 0x686C6967UL, /**< 'hlig' */
+ LE_HNGL_FEATURE_TAG = 0x686E676CUL, /**< 'hngl' */
+ LE_HWID_FEATURE_TAG = 0x68776964UL, /**< 'hwid' */
+ LE_INIT_FEATURE_TAG = 0x696E6974UL, /**< 'init' */
+ LE_ISOL_FEATURE_TAG = 0x69736F6CUL, /**< 'isol' */
+ LE_ITAL_FEATURE_TAG = 0x6974616CUL, /**< 'ital' */
+ LE_JALT_FEATURE_TAG = 0x6A616C74UL, /**< 'jalt' */
+ LE_JP78_FEATURE_TAG = 0x6A703738UL, /**< 'jp78' */
+ LE_JP83_FEATURE_TAG = 0x6A703833UL, /**< 'jp83' */
+ LE_JP90_FEATURE_TAG = 0x6A703930UL, /**< 'jp90' */
+ LE_KERN_FEATURE_TAG = 0x6B65726EUL, /**< 'kern' */
+ LE_LFBD_FEATURE_TAG = 0x6C666264UL, /**< 'lfbd' */
+ LE_LIGA_FEATURE_TAG = 0x6C696761UL, /**< 'liga' */
+ LE_LJMO_FEATURE_TAG = 0x6C6A6D6FUL, /**< 'ljmo' */
+ LE_LNUM_FEATURE_TAG = 0x6C6E756DUL, /**< 'lnum' */
+ LE_LOCL_FEATURE_TAG = 0x6C6F636CUL, /**< 'locl' */
+ LE_MARK_FEATURE_TAG = 0x6D61726BUL, /**< 'mark' */
+ LE_MED2_FEATURE_TAG = 0x6D656432UL, /**< 'med2' */
+ LE_MEDI_FEATURE_TAG = 0x6D656469UL, /**< 'medi' */
+ LE_MGRK_FEATURE_TAG = 0x6D67726BUL, /**< 'mgrk' */
+ LE_MKMK_FEATURE_TAG = 0x6D6B6D6BUL, /**< 'mkmk' */
+ LE_MSET_FEATURE_TAG = 0x6D736574UL, /**< 'mset' */
+ LE_NALT_FEATURE_TAG = 0x6E616C74UL, /**< 'nalt' */
+ LE_NLCK_FEATURE_TAG = 0x6E6C636BUL, /**< 'nlck' */
+ LE_NUKT_FEATURE_TAG = 0x6E756B74UL, /**< 'nukt' */
+ LE_NUMR_FEATURE_TAG = 0x6E756D72UL, /**< 'numr' */
+ LE_ONUM_FEATURE_TAG = 0x6F6E756DUL, /**< 'onum' */
+ LE_OPBD_FEATURE_TAG = 0x6F706264UL, /**< 'opbd' */
+ LE_ORDN_FEATURE_TAG = 0x6F72646EUL, /**< 'ordn' */
+ LE_ORNM_FEATURE_TAG = 0x6F726E6DUL, /**< 'ornm' */
+ LE_PALT_FEATURE_TAG = 0x70616C74UL, /**< 'palt' */
+ LE_PCAP_FEATURE_TAG = 0x70636170UL, /**< 'pcap' */
+ LE_PNUM_FEATURE_TAG = 0x706E756DUL, /**< 'pnum' */
+ LE_PREF_FEATURE_TAG = 0x70726566UL, /**< 'pref' */
+ LE_PRES_FEATURE_TAG = 0x70726573UL, /**< 'pres' */
+ LE_PSTF_FEATURE_TAG = 0x70737466UL, /**< 'pstf' */
+ LE_PSTS_FEATURE_TAG = 0x70737473UL, /**< 'psts' */
+ LE_PWID_FEATURE_TAG = 0x70776964UL, /**< 'pwid' */
+ LE_QWID_FEATURE_TAG = 0x71776964UL, /**< 'qwid' */
+ LE_RAND_FEATURE_TAG = 0x72616E64UL, /**< 'rand' */
+ LE_RLIG_FEATURE_TAG = 0x726C6967UL, /**< 'rlig' */
+ LE_RPHF_FEATURE_TAG = 0x72706866UL, /**< 'rphf' */
+ LE_RKRF_FEATURE_TAG = 0x726B7266UL, /**< 'rkrf' */
+ LE_RTBD_FEATURE_TAG = 0x72746264UL, /**< 'rtbd' */
+ LE_RTLA_FEATURE_TAG = 0x72746C61UL, /**< 'rtla' */
+ LE_RUBY_FEATURE_TAG = 0x72756279UL, /**< 'ruby' */
+ LE_SALT_FEATURE_TAG = 0x73616C74UL, /**< 'salt' */
+ LE_SINF_FEATURE_TAG = 0x73696E66UL, /**< 'sinf' */
+ LE_SIZE_FEATURE_TAG = 0x73697A65UL, /**< 'size' */
+ LE_SMCP_FEATURE_TAG = 0x736D6370UL, /**< 'smcp' */
+ LE_SMPL_FEATURE_TAG = 0x736D706CUL, /**< 'smpl' */
+ LE_SS01_FEATURE_TAG = 0x73733031UL, /**< 'ss01' */
+ LE_SS02_FEATURE_TAG = 0x73733032UL, /**< 'ss02' */
+ LE_SS03_FEATURE_TAG = 0x73733033UL, /**< 'ss03' */
+ LE_SS04_FEATURE_TAG = 0x73733034UL, /**< 'ss04' */
+ LE_SS05_FEATURE_TAG = 0x73733035UL, /**< 'ss05' */
+ LE_SS06_FEATURE_TAG = 0x73733036UL, /**< 'ss06' */
+ LE_SS07_FEATURE_TAG = 0x73733037UL, /**< 'ss07' */
+ LE_SS08_FEATURE_TAG = 0x73733038UL, /**< 'ss08' */
+ LE_SS09_FEATURE_TAG = 0x73733039UL, /**< 'ss09' */
+ LE_SS10_FEATURE_TAG = 0x73733130UL, /**< 'ss10' */
+ LE_SS11_FEATURE_TAG = 0x73733131UL, /**< 'ss11' */
+ LE_SS12_FEATURE_TAG = 0x73733132UL, /**< 'ss12' */
+ LE_SS13_FEATURE_TAG = 0x73733133UL, /**< 'ss13' */
+ LE_SS14_FEATURE_TAG = 0x73733134UL, /**< 'ss14' */
+ LE_SS15_FEATURE_TAG = 0x73733135UL, /**< 'ss15' */
+ LE_SS16_FEATURE_TAG = 0x73733136UL, /**< 'ss16' */
+ LE_SS17_FEATURE_TAG = 0x73733137UL, /**< 'ss17' */
+ LE_SS18_FEATURE_TAG = 0x73733138UL, /**< 'ss18' */
+ LE_SS19_FEATURE_TAG = 0x73733139UL, /**< 'ss19' */
+ LE_SS20_FEATURE_TAG = 0x73733230UL, /**< 'ss20' */
+ LE_SUBS_FEATURE_TAG = 0x73756273UL, /**< 'subs' */
+ LE_SUPS_FEATURE_TAG = 0x73757073UL, /**< 'sups' */
+ LE_SWSH_FEATURE_TAG = 0x73777368UL, /**< 'swsh' */
+ LE_TITL_FEATURE_TAG = 0x7469746CUL, /**< 'titl' */
+ LE_TJMO_FEATURE_TAG = 0x746A6D6FUL, /**< 'tjmo' */
+ LE_TNAM_FEATURE_TAG = 0x746E616DUL, /**< 'tnam' */
+ LE_TNUM_FEATURE_TAG = 0x746E756DUL, /**< 'tnum' */
+ LE_TRAD_FEATURE_TAG = 0x74726164UL, /**< 'trad' */
+ LE_TWID_FEATURE_TAG = 0x74776964UL, /**< 'twid' */
+ LE_UNIC_FEATURE_TAG = 0x756E6963UL, /**< 'unic' */
+ LE_VALT_FEATURE_TAG = 0x76616C74UL, /**< 'valt' */
+ LE_VATU_FEATURE_TAG = 0x76617475UL, /**< 'vatu' */
+ LE_VERT_FEATURE_TAG = 0x76657274UL, /**< 'vert' */
+ LE_VHAL_FEATURE_TAG = 0x7668616CUL, /**< 'vhal' */
+ LE_VJMO_FEATURE_TAG = 0x766A6D6FUL, /**< 'vjmo' */
+ LE_VKNA_FEATURE_TAG = 0x766B6E61UL, /**< 'vkna' */
+ LE_VKRN_FEATURE_TAG = 0x766B726EUL, /**< 'vkrn' */
+ LE_VPAL_FEATURE_TAG = 0x7670616CUL, /**< 'vpal' */
+ LE_VRT2_FEATURE_TAG = 0x76727432UL, /**< 'vrt2' */
+ LE_ZERO_FEATURE_TAG = 0x7A65726FUL /**< 'zero' */
+};
+
+/**
+ * Error codes returned by the LayoutEngine.
+ *
+ * @stable ICU 2.4
+ */
+enum LEErrorCode {
+ /* informational */
+ LE_NO_SUBFONT_WARNING = U_USING_DEFAULT_WARNING, /**< The font does not contain subfonts. */
+
+ /* success */
+ LE_NO_ERROR = U_ZERO_ERROR, /**< No error, no warning. */
+
+ /* failures */
+ LE_ILLEGAL_ARGUMENT_ERROR = U_ILLEGAL_ARGUMENT_ERROR, /**< An illegal argument was detected. */
+ LE_MEMORY_ALLOCATION_ERROR = U_MEMORY_ALLOCATION_ERROR, /**< Memory allocation error. */
+ LE_INDEX_OUT_OF_BOUNDS_ERROR = U_INDEX_OUTOFBOUNDS_ERROR, /**< Trying to access an index that is out of bounds. */
+ LE_NO_LAYOUT_ERROR = U_UNSUPPORTED_ERROR, /**< You must call layoutChars() first. */
+ LE_INTERNAL_ERROR = U_INTERNAL_PROGRAM_ERROR, /**< An internal error was encountered. */
+ LE_FONT_FILE_NOT_FOUND_ERROR = U_FILE_ACCESS_ERROR, /**< The requested font file cannot be opened. */
+ LE_MISSING_FONT_TABLE_ERROR = U_MISSING_RESOURCE_ERROR /**< The requested font table does not exist. */
+};
+
+#ifndef __cplusplus
+/**
+ * Error codes returned by the LayoutEngine.
+ *
+ * @stable ICU 2.4
+ */
+typedef enum LEErrorCode LEErrorCode;
+#endif
+
+/**
+ * A convenience macro to test for the success of a LayoutEngine call.
+ *
+ * @stable ICU 2.4
+ */
+#define LE_SUCCESS(code) (U_SUCCESS((UErrorCode)code))
+
+/**
+ * A convenience macro to test for the failure of a LayoutEngine call.
+ *
+ * @stable ICU 2.4
+ */
+#define LE_FAILURE(code) (U_FAILURE((UErrorCode)code))
+
+#endif
diff --git a/Build/source/libs/icu/icu-50.1/layout/LayoutEngine.cpp b/Build/source/libs/icu/icu-50.1/layout/LayoutEngine.cpp
new file mode 100644
index 00000000000..b4ec7383c5a
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/LayoutEngine.cpp
@@ -0,0 +1,678 @@
+/*
+ * (C) Copyright IBM Corp. 1998-2011 - All Rights Reserved
+ */
+
+#include "LETypes.h"
+#include "LEScripts.h"
+#include "LELanguages.h"
+
+#include "LayoutEngine.h"
+#include "ArabicLayoutEngine.h"
+#include "CanonShaping.h"
+#include "HanLayoutEngine.h"
+#include "HangulLayoutEngine.h"
+#include "IndicLayoutEngine.h"
+#include "KhmerLayoutEngine.h"
+#include "ThaiLayoutEngine.h"
+#include "TibetanLayoutEngine.h"
+#include "GXLayoutEngine.h"
+#include "ScriptAndLanguageTags.h"
+#include "CharSubstitutionFilter.h"
+
+#include "LEGlyphStorage.h"
+
+#include "OpenTypeUtilities.h"
+#include "GlyphSubstitutionTables.h"
+#include "GlyphDefinitionTables.h"
+#include "MorphTables.h"
+
+#include "DefaultCharMapper.h"
+
+#include "KernTable.h"
+
+U_NAMESPACE_BEGIN
+
+/* Leave this copyright notice here! It needs to go somewhere in this library. */
+static const char copyright[] = U_COPYRIGHT_STRING;
+
+const le_int32 LayoutEngine::kTypoFlagKern = 0x1;
+const le_int32 LayoutEngine::kTypoFlagLiga = 0x2;
+
+const LEUnicode32 DefaultCharMapper::controlChars[] = {
+ 0x0009, 0x000A, 0x000D,
+ /*0x200C, 0x200D,*/ 0x200E, 0x200F,
+ 0x2028, 0x2029, 0x202A, 0x202B, 0x202C, 0x202D, 0x202E,
+ 0x206A, 0x206B, 0x206C, 0x206D, 0x206E, 0x206F
+};
+
+const le_int32 DefaultCharMapper::controlCharsCount = LE_ARRAY_SIZE(controlChars);
+
+LEUnicode32 DefaultCharMapper::mapChar(LEUnicode32 ch) const
+{
+ if (fFilterControls) {
+ le_int32 index = OpenTypeUtilities::search((le_uint32)ch, (le_uint32 *)controlChars, controlCharsCount);
+
+ if (controlChars[index] == ch) {
+ return 0xFFFF;
+ }
+ }
+
+ if (fMirror) {
+ le_int32 index = OpenTypeUtilities::search((le_uint32) ch, (le_uint32 *)DefaultCharMapper::mirroredChars, DefaultCharMapper::mirroredCharsCount);
+
+ if (mirroredChars[index] == ch) {
+ return DefaultCharMapper::srahCderorrim[index];
+ }
+ }
+
+ return ch;
+}
+
+// This is here to get it out of LEGlyphFilter.h.
+// No particular reason to put it here, other than
+// this is a good central location...
+LEGlyphFilter::~LEGlyphFilter()
+{
+ // nothing to do
+}
+
+CharSubstitutionFilter::CharSubstitutionFilter(const LEFontInstance *fontInstance)
+ : fFontInstance(fontInstance)
+{
+ // nothing to do
+}
+
+CharSubstitutionFilter::~CharSubstitutionFilter()
+{
+ // nothing to do
+}
+
+class CanonMarkFilter : public UMemory, public LEGlyphFilter
+{
+private:
+ const GlyphClassDefinitionTable *classDefTable;
+
+ CanonMarkFilter(const CanonMarkFilter &other); // forbid copying of this class
+ CanonMarkFilter &operator=(const CanonMarkFilter &other); // forbid copying of this class
+
+public:
+ CanonMarkFilter(const GlyphDefinitionTableHeader *gdefTable);
+ virtual ~CanonMarkFilter();
+
+ virtual le_bool accept(LEGlyphID glyph) const;
+};
+
+CanonMarkFilter::CanonMarkFilter(const GlyphDefinitionTableHeader *gdefTable)
+{
+ classDefTable = gdefTable->getMarkAttachClassDefinitionTable();
+}
+
+CanonMarkFilter::~CanonMarkFilter()
+{
+ // nothing to do?
+}
+
+le_bool CanonMarkFilter::accept(LEGlyphID glyph) const
+{
+ le_int32 glyphClass = classDefTable->getGlyphClass(glyph);
+
+ return glyphClass != 0;
+}
+
+UOBJECT_DEFINE_RTTI_IMPLEMENTATION(LayoutEngine)
+
+#define ccmpFeatureTag LE_CCMP_FEATURE_TAG
+
+#define ccmpFeatureMask 0x80000000UL
+
+#define canonFeatures (ccmpFeatureMask)
+
+static const FeatureMap canonFeatureMap[] =
+{
+ {ccmpFeatureTag, ccmpFeatureMask}
+};
+
+static const le_int32 canonFeatureMapCount = LE_ARRAY_SIZE(canonFeatureMap);
+
+LayoutEngine::LayoutEngine(const LEFontInstance *fontInstance,
+ le_int32 scriptCode,
+ le_int32 languageCode,
+ le_int32 typoFlags,
+ LEErrorCode &success)
+ : fGlyphStorage(NULL), fFontInstance(fontInstance), fScriptCode(scriptCode), fLanguageCode(languageCode),
+ fTypoFlags(typoFlags), fFilterZeroWidth(TRUE)
+{
+ if (LE_FAILURE(success)) {
+ return;
+ }
+
+ fGlyphStorage = new LEGlyphStorage();
+ if (fGlyphStorage == NULL) {
+ success = LE_MEMORY_ALLOCATION_ERROR;
+ }
+}
+
+le_int32 LayoutEngine::getGlyphCount() const
+{
+ return fGlyphStorage->getGlyphCount();
+}
+
+void LayoutEngine::getCharIndices(le_int32 charIndices[], le_int32 indexBase, LEErrorCode &success) const
+{
+ fGlyphStorage->getCharIndices(charIndices, indexBase, success);
+}
+
+void LayoutEngine::getCharIndices(le_int32 charIndices[], LEErrorCode &success) const
+{
+ fGlyphStorage->getCharIndices(charIndices, success);
+}
+
+// Copy the glyphs into caller's (32-bit) glyph array, OR in extraBits
+void LayoutEngine::getGlyphs(le_uint32 glyphs[], le_uint32 extraBits, LEErrorCode &success) const
+{
+ fGlyphStorage->getGlyphs(glyphs, extraBits, success);
+}
+
+void LayoutEngine::getGlyphs(LEGlyphID glyphs[], LEErrorCode &success) const
+{
+ fGlyphStorage->getGlyphs(glyphs, success);
+}
+
+
+void LayoutEngine::getGlyphPositions(float positions[], LEErrorCode &success) const
+{
+ fGlyphStorage->getGlyphPositions(positions, success);
+}
+
+void LayoutEngine::getGlyphPosition(le_int32 glyphIndex, float &x, float &y, LEErrorCode &success) const
+{
+ fGlyphStorage->getGlyphPosition(glyphIndex, x, y, success);
+}
+
+le_int32 LayoutEngine::characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
+ LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success)
+{
+ if (LE_FAILURE(success)) {
+ return 0;
+ }
+
+ if (offset < 0 || count < 0 || max < 0 || offset >= max || offset + count > max) {
+ success = LE_ILLEGAL_ARGUMENT_ERROR;
+ return 0;
+ }
+
+ const GlyphSubstitutionTableHeader *canonGSUBTable = (GlyphSubstitutionTableHeader *) CanonShaping::glyphSubstitutionTable;
+ LETag scriptTag = OpenTypeLayoutEngine::getScriptTag(fScriptCode);
+ LETag langSysTag = OpenTypeLayoutEngine::getLangSysTag(fLanguageCode);
+ le_int32 i, dir = 1, out = 0, outCharCount = count;
+
+ if (canonGSUBTable->coversScript(scriptTag)) {
+ CharSubstitutionFilter *substitutionFilter = new CharSubstitutionFilter(fFontInstance);
+ if (substitutionFilter == NULL) {
+ success = LE_MEMORY_ALLOCATION_ERROR;
+ return 0;
+ }
+
+ const LEUnicode *inChars = &chars[offset];
+ LEUnicode *reordered = NULL;
+ LEGlyphStorage fakeGlyphStorage;
+
+ fakeGlyphStorage.allocateGlyphArray(count, rightToLeft, success);
+
+ if (LE_FAILURE(success)) {
+ delete substitutionFilter;
+ return 0;
+ }
+
+ // This is the cheapest way to get mark reordering only for Hebrew.
+ // We could just do the mark reordering for all scripts, but most
+ // of them probably don't need it...
+ if (fScriptCode == hebrScriptCode) {
+ reordered = LE_NEW_ARRAY(LEUnicode, count);
+
+ if (reordered == NULL) {
+ delete substitutionFilter;
+ success = LE_MEMORY_ALLOCATION_ERROR;
+ return 0;
+ }
+
+ CanonShaping::reorderMarks(&chars[offset], count, rightToLeft, reordered, fakeGlyphStorage);
+ inChars = reordered;
+ }
+
+ fakeGlyphStorage.allocateAuxData(success);
+
+ if (LE_FAILURE(success)) {
+ delete substitutionFilter;
+ return 0;
+ }
+
+ if (rightToLeft) {
+ out = count - 1;
+ dir = -1;
+ }
+
+ for (i = 0; i < count; i += 1, out += dir) {
+ fakeGlyphStorage[out] = (LEGlyphID) inChars[i];
+ fakeGlyphStorage.setAuxData(out, canonFeatures, success);
+ }
+
+ if (reordered != NULL) {
+ LE_DELETE_ARRAY(reordered);
+ }
+
+ outCharCount = canonGSUBTable->process(fakeGlyphStorage, rightToLeft, scriptTag, langSysTag, NULL, substitutionFilter, canonFeatureMap, canonFeatureMapCount, FALSE, success);
+
+ if (LE_FAILURE(success)) {
+ delete substitutionFilter;
+ return 0;
+ }
+
+ out = (rightToLeft? outCharCount - 1 : 0);
+
+ /*
+ * The char indices array in fakeGlyphStorage has the correct mapping
+ * back to the original input characters. Save it in glyphStorage. The
+ * subsequent call to glyphStoratge.allocateGlyphArray will keep this
+ * array rather than allocating and initializing a new one.
+ */
+ glyphStorage.adoptCharIndicesArray(fakeGlyphStorage);
+
+ outChars = LE_NEW_ARRAY(LEUnicode, outCharCount);
+
+ if (outChars == NULL) {
+ delete substitutionFilter;
+ success = LE_MEMORY_ALLOCATION_ERROR;
+ return 0;
+ }
+
+ for (i = 0; i < outCharCount; i += 1, out += dir) {
+ outChars[out] = (LEUnicode) LE_GET_GLYPH(fakeGlyphStorage[i]);
+ }
+
+ delete substitutionFilter;
+ }
+
+ return outCharCount;
+}
+
+le_int32 LayoutEngine::computeGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
+ LEGlyphStorage &glyphStorage, LEErrorCode &success)
+{
+ if (LE_FAILURE(success)) {
+ return 0;
+ }
+
+ if (chars == NULL || offset < 0 || count < 0 || max < 0 || offset >= max || offset + count > max) {
+ success = LE_ILLEGAL_ARGUMENT_ERROR;
+ return 0;
+ }
+
+ LEUnicode *outChars = NULL;
+ le_int32 outCharCount = characterProcessing(chars, offset, count, max, rightToLeft, outChars, glyphStorage, success);
+
+ if (outChars != NULL) {
+ mapCharsToGlyphs(outChars, 0, outCharCount, rightToLeft, rightToLeft, glyphStorage, success);
+ LE_DELETE_ARRAY(outChars); // FIXME: a subclass may have allocated this, in which case this delete might not work...
+ } else {
+ mapCharsToGlyphs(chars, offset, count, rightToLeft, rightToLeft, glyphStorage, success);
+ }
+
+ return glyphStorage.getGlyphCount();
+}
+
+// Input: glyphs
+// Output: positions
+void LayoutEngine::positionGlyphs(LEGlyphStorage &glyphStorage, float x, float y, LEErrorCode &success)
+{
+ if (LE_FAILURE(success)) {
+ return;
+ }
+
+ glyphStorage.allocatePositions(success);
+
+ if (LE_FAILURE(success)) {
+ return;
+ }
+
+ le_int32 i, glyphCount = glyphStorage.getGlyphCount();
+
+ for (i = 0; i < glyphCount; i += 1) {
+ LEPoint advance;
+
+ glyphStorage.setPosition(i, x, y, success);
+
+ fFontInstance->getGlyphAdvance(glyphStorage[i], advance);
+ x += advance.fX;
+ y += advance.fY;
+ }
+
+ glyphStorage.setPosition(glyphCount, x, y, success);
+}
+
+void LayoutEngine::adjustGlyphPositions(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool reverse,
+ LEGlyphStorage &glyphStorage, LEErrorCode &success)
+{
+ if (LE_FAILURE(success)) {
+ return;
+ }
+
+ if (chars == NULL || offset < 0 || count < 0) {
+ success = LE_ILLEGAL_ARGUMENT_ERROR;
+ return;
+ }
+
+ GlyphDefinitionTableHeader *gdefTable = (GlyphDefinitionTableHeader *) CanonShaping::glyphDefinitionTable;
+ CanonMarkFilter filter(gdefTable);
+
+ adjustMarkGlyphs(&chars[offset], count, reverse, glyphStorage, &filter, success);
+
+ if (fTypoFlags & 0x1) { /* kerning enabled */
+ static const le_uint32 kernTableTag = LE_KERN_TABLE_TAG;
+ const void* kernTableData = getFontTable(kernTableTag);
+ if (kernTableData != NULL) {
+ KernTable kt(fFontInstance, kernTableData);
+ kt.process(glyphStorage);
+ }
+ else { /* no 'kern' table, but the font might know kern pairs from an AFM file, for instance */
+ float xAdjust = 0.0, yAdjust = 0.0;
+ LEGlyphID leftGlyph = glyphStorage.getGlyphID(0, success);
+ for (le_int32 i = 1; i < glyphStorage.getGlyphCount(); ++i) {
+ LEGlyphID rightGlyph = glyphStorage.getGlyphID(i, success);
+ LEPoint kern;
+ fFontInstance->getKernPair(leftGlyph, rightGlyph, kern);
+ xAdjust += fFontInstance->xUnitsToPoints(kern.fX);
+ yAdjust += fFontInstance->yUnitsToPoints(kern.fY);
+ glyphStorage.adjustPosition(i, xAdjust, yAdjust, success);
+ leftGlyph = rightGlyph;
+ }
+ glyphStorage.adjustPosition(glyphStorage.getGlyphCount(), xAdjust, yAdjust, success);
+ }
+ }
+
+ // default is no adjustments
+ return;
+}
+
+void LayoutEngine::adjustMarkGlyphs(LEGlyphStorage &glyphStorage, LEGlyphFilter *markFilter, LEErrorCode &success)
+{
+ float xAdjust = 0;
+ le_int32 p, glyphCount = glyphStorage.getGlyphCount();
+
+ if (LE_FAILURE(success)) {
+ return;
+ }
+
+ if (markFilter == NULL) {
+ success = LE_ILLEGAL_ARGUMENT_ERROR;
+ return;
+ }
+
+ float ignore, prev;
+
+ glyphStorage.getGlyphPosition(0, prev, ignore, success);
+
+ for (p = 0; p < glyphCount; p += 1) {
+ float next, xAdvance;
+
+ glyphStorage.getGlyphPosition(p + 1, next, ignore, success);
+
+ xAdvance = next - prev;
+ glyphStorage.adjustPosition(p, xAdjust, 0, success);
+
+ if (markFilter->accept(glyphStorage[p])) {
+ xAdjust -= xAdvance;
+ }
+
+ prev = next;
+ }
+
+ glyphStorage.adjustPosition(glyphCount, xAdjust, 0, success);
+}
+
+void LayoutEngine::adjustMarkGlyphs(const LEUnicode chars[], le_int32 charCount, le_bool reverse, LEGlyphStorage &glyphStorage, LEGlyphFilter *markFilter, LEErrorCode &success)
+{
+ float xAdjust = 0;
+ le_int32 c = 0, direction = 1, p;
+ le_int32 glyphCount = glyphStorage.getGlyphCount();
+
+ if (LE_FAILURE(success)) {
+ return;
+ }
+
+ if (markFilter == NULL) {
+ success = LE_ILLEGAL_ARGUMENT_ERROR;
+ return;
+ }
+
+ if (reverse) {
+ c = glyphCount - 1;
+ direction = -1;
+ }
+
+ float ignore, prev;
+
+ glyphStorage.getGlyphPosition(0, prev, ignore, success);
+
+ for (p = 0; p < charCount; p += 1, c += direction) {
+ float next, xAdvance;
+
+ glyphStorage.getGlyphPosition(p + 1, next, ignore, success);
+
+ xAdvance = next - prev;
+ glyphStorage.adjustPosition(p, xAdjust, 0, success);
+
+ if (markFilter->accept(chars[c])) {
+ xAdjust -= xAdvance;
+ }
+
+ prev = next;
+ }
+
+ glyphStorage.adjustPosition(glyphCount, xAdjust, 0, success);
+}
+
+const void *LayoutEngine::getFontTable(LETag tableTag) const
+{
+ return fFontInstance->getFontTable(tableTag);
+}
+
+void LayoutEngine::mapCharsToGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool reverse, le_bool mirror,
+ LEGlyphStorage &glyphStorage, LEErrorCode &success)
+{
+ if (LE_FAILURE(success)) {
+ return;
+ }
+
+ glyphStorage.allocateGlyphArray(count, reverse, success);
+
+ DefaultCharMapper charMapper(TRUE, mirror);
+
+ fFontInstance->mapCharsToGlyphs(chars, offset, count, reverse, &charMapper, fFilterZeroWidth, glyphStorage);
+}
+
+// Input: characters, font?
+// Output: glyphs, positions, char indices
+// Returns: number of glyphs
+le_int32 LayoutEngine::layoutChars(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
+ float x, float y, LEErrorCode &success)
+{
+ if (LE_FAILURE(success)) {
+ return 0;
+ }
+
+ if (chars == NULL || offset < 0 || count < 0 || max < 0 || offset >= max || offset + count > max) {
+ success = LE_ILLEGAL_ARGUMENT_ERROR;
+ return 0;
+ }
+
+ le_int32 glyphCount;
+
+ if (fGlyphStorage->getGlyphCount() > 0) {
+ fGlyphStorage->reset();
+ }
+
+ glyphCount = computeGlyphs(chars, offset, count, max, rightToLeft, *fGlyphStorage, success);
+ positionGlyphs(*fGlyphStorage, x, y, success);
+ adjustGlyphPositions(chars, offset, count, rightToLeft, *fGlyphStorage, success);
+
+ return glyphCount;
+}
+
+void LayoutEngine::reset()
+{
+ fGlyphStorage->reset();
+}
+
+LayoutEngine *LayoutEngine::layoutEngineFactory(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, LEErrorCode &success)
+{
+ // 3 -> kerning and ligatures
+ return LayoutEngine::layoutEngineFactory(fontInstance, scriptCode, languageCode, 3, success);
+}
+
+LayoutEngine *LayoutEngine::layoutEngineFactory(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, le_int32 typoFlags, LEErrorCode &success)
+{
+ static const le_uint32 gsubTableTag = LE_GSUB_TABLE_TAG;
+ static const le_uint32 mortTableTag = LE_MORT_TABLE_TAG;
+
+ if (LE_FAILURE(success)) {
+ return NULL;
+ }
+
+ const GlyphSubstitutionTableHeader *gsubTable = (const GlyphSubstitutionTableHeader *) fontInstance->getFontTable(gsubTableTag);
+ LayoutEngine *result = NULL;
+ LETag scriptTag = 0x00000000;
+ LETag languageTag = 0x00000000;
+ LETag v2ScriptTag = OpenTypeLayoutEngine::getV2ScriptTag(scriptCode);
+
+ // Right now, only invoke V2 processing for Devanagari. TODO: Allow more V2 scripts as they are
+ // properly tested.
+
+ if ( v2ScriptTag == dev2ScriptTag && gsubTable != NULL && gsubTable->coversScript( v2ScriptTag )) {
+ result = new IndicOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, TRUE, gsubTable, success);
+ }
+ else if (gsubTable != NULL && gsubTable->coversScript(scriptTag = OpenTypeLayoutEngine::getScriptTag(scriptCode))) {
+ switch (scriptCode) {
+ case bengScriptCode:
+ case devaScriptCode:
+ case gujrScriptCode:
+ case kndaScriptCode:
+ case mlymScriptCode:
+ case oryaScriptCode:
+ case guruScriptCode:
+ case tamlScriptCode:
+ case teluScriptCode:
+ case sinhScriptCode:
+ result = new IndicOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, FALSE, gsubTable, success);
+ break;
+
+ case arabScriptCode:
+ case syrcScriptCode:
+ case mongScriptCode:
+ result = new ArabicOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable, success);
+ break;
+
+ case hebrScriptCode:
+ // Disable hebrew ligatures since they have only archaic uses, see ticket #8318
+ result = new OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags & ~kTypoFlagLiga, gsubTable, success);
+ break;
+
+ case hangScriptCode:
+ result = new HangulOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable, success);
+ break;
+
+ case haniScriptCode:
+ languageTag = OpenTypeLayoutEngine::getLangSysTag(languageCode);
+
+ switch (languageCode) {
+ case korLanguageCode:
+ case janLanguageCode:
+ case zhtLanguageCode:
+ case zhsLanguageCode:
+ if (gsubTable->coversScriptAndLanguage(scriptTag, languageTag, TRUE)) {
+ result = new HanOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable, success);
+ break;
+ }
+
+ // note: falling through to default case.
+ default:
+ result = new OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable, success);
+ break;
+ }
+
+ break;
+
+ case tibtScriptCode:
+ result = new TibetanOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable, success);
+ break;
+
+ case khmrScriptCode:
+ result = new KhmerOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable, success);
+ break;
+
+ default:
+ result = new OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable, success);
+ break;
+ }
+ } else {
+ const MorphTableHeader *morphTable = (MorphTableHeader *) fontInstance->getFontTable(mortTableTag);
+
+ if (morphTable != NULL) {
+ result = new GXLayoutEngine(fontInstance, scriptCode, languageCode, morphTable, success);
+ } else {
+ switch (scriptCode) {
+ case bengScriptCode:
+ case devaScriptCode:
+ case gujrScriptCode:
+ case kndaScriptCode:
+ case mlymScriptCode:
+ case oryaScriptCode:
+ case guruScriptCode:
+ case tamlScriptCode:
+ case teluScriptCode:
+ case sinhScriptCode:
+ {
+ result = new IndicOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, success);
+ break;
+ }
+
+ case arabScriptCode:
+ //case hebrScriptCode:
+ result = new UnicodeArabicOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, success);
+ break;
+
+ //case hebrScriptCode:
+ // return new HebrewOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags);
+
+ case thaiScriptCode:
+ result = new ThaiLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, success);
+ break;
+
+ case hangScriptCode:
+ result = new HangulOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, success);
+ break;
+
+ default:
+ result = new LayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, success);
+ break;
+ }
+ }
+ }
+
+ if (result && LE_FAILURE(success)) {
+ delete result;
+ result = NULL;
+ }
+
+ if (result == NULL) {
+ success = LE_MEMORY_ALLOCATION_ERROR;
+ }
+
+ return result;
+}
+
+LayoutEngine::~LayoutEngine() {
+ delete fGlyphStorage;
+}
+
+U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-50.1/layout/LayoutEngine.h b/Build/source/libs/icu/icu-50.1/layout/LayoutEngine.h
new file mode 100644
index 00000000000..b76f5748b75
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/LayoutEngine.h
@@ -0,0 +1,505 @@
+/*
+ * (C) Copyright IBM Corp. 1998-2011 - All Rights Reserved
+ */
+
+#ifndef __LAYOUTENGINE_H
+#define __LAYOUTENGINE_H
+
+#include "LETypes.h"
+
+/**
+ * \file
+ * \brief C++ API: Virtual base class for complex text layout.
+ */
+
+U_NAMESPACE_BEGIN
+
+class LEFontInstance;
+class LEGlyphFilter;
+class LEGlyphStorage;
+
+/**
+ * This is a virtual base class used to do complex text layout. The text must all
+ * be in a single font, script, and language. An instance of a LayoutEngine can be
+ * created by calling the layoutEngineFactory method. Fonts are identified by
+ * instances of the LEFontInstance class. Script and language codes are identified
+ * by integer codes, which are defined in ScriptAndLanuageTags.h.
+ *
+ * Note that this class is not public API. It is declared public so that it can be
+ * exported from the library that it is a part of.
+ *
+ * The input to the layout process is an array of characters in logical order,
+ * and a starting X, Y position for the text. The output is an array of glyph indices,
+ * an array of character indices for the glyphs, and an array of glyph positions.
+ * These arrays are protected members of LayoutEngine which can be retreived by a
+ * public method. The reset method can be called to free these arrays so that the
+ * LayoutEngine can be reused.
+ *
+ * The layout process is done in three steps. There is a protected virtual method
+ * for each step. These methods have a default implementation which only does
+ * character to glyph mapping and default positioning using the glyph's advance
+ * widths. Subclasses can override these methods for more advanced layout.
+ * There is a public method which invokes the steps in the correct order.
+ *
+ * The steps are:
+ *
+ * 1) Glyph processing - character to glyph mapping and any other glyph processing
+ * such as ligature substitution and contextual forms.
+ *
+ * 2) Glyph positioning - position the glyphs based on their advance widths.
+ *
+ * 3) Glyph position adjustments - adjustment of glyph positions for kerning,
+ * accent placement, etc.
+ *
+ * NOTE: in all methods below, output parameters are references to pointers so
+ * the method can allocate and free the storage as needed. All storage allocated
+ * in this way is owned by the object which created it, and will be freed when it
+ * is no longer needed, or when the object's destructor is invoked.
+ *
+ * @see LEFontInstance
+ * @see ScriptAndLanguageTags.h
+ *
+ * @stable ICU 2.8
+ */
+class U_LAYOUT_API LayoutEngine : public UObject {
+public:
+#ifndef U_HIDE_INTERNAL_API
+ /** @internal Flag to request kerning. */
+ static const le_int32 kTypoFlagKern;
+ /** @internal Flag to request ligatures. */
+ static const le_int32 kTypoFlagLiga;
+#endif /* U_HIDE_INTERNAL_API */
+
+protected:
+ /**
+ * The object which holds the glyph storage
+ *
+ * @internal
+ */
+ LEGlyphStorage *fGlyphStorage;
+
+ /**
+ * The font instance for the text font.
+ *
+ * @see LEFontInstance
+ *
+ * @internal
+ */
+ const LEFontInstance *fFontInstance;
+
+ /**
+ * The script code for the text
+ *
+ * @see ScriptAndLanguageTags.h for script codes.
+ *
+ * @internal
+ */
+ le_int32 fScriptCode;
+
+ /**
+ * The langauge code for the text
+ *
+ * @see ScriptAndLanguageTags.h for language codes.
+ *
+ * @internal
+ */
+ le_int32 fLanguageCode;
+
+ /**
+ * The typographic control flags
+ *
+ * @internal
+ */
+ le_int32 fTypoFlags;
+
+ /**
+ * <code>TRUE</code> if <code>mapCharsToGlyphs</code> should replace ZWJ / ZWNJ with a glyph
+ * with no contours.
+ *
+ * @internal
+ */
+ le_bool fFilterZeroWidth;
+
+#ifndef U_HIDE_INTERNAL_API
+ /**
+ * This constructs an instance for a given font, script and language. Subclass constructors
+ * must call this constructor.
+ *
+ * @param fontInstance - the font for the text
+ * @param scriptCode - the script for the text
+ * @param languageCode - the language for the text
+ * @param typoFlags - the typographic control flags for the text (a bitfield). Use kTypoFlagKern
+ * if kerning is desired, kTypoFlagLiga if ligature formation is desired. Others are reserved.
+ * @param success - set to an error code if the operation fails
+ *
+ * @see LEFontInstance
+ * @see ScriptAndLanguageTags.h
+ *
+ * @internal
+ */
+ LayoutEngine(const LEFontInstance *fontInstance,
+ le_int32 scriptCode,
+ le_int32 languageCode,
+ le_int32 typoFlags,
+ LEErrorCode &success);
+#endif /* 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.
+ /**
+ * This overrides the default no argument constructor to make it
+ * difficult for clients to call it. Clients are expected to call
+ * layoutEngineFactory.
+ *
+ * @internal
+ */
+ LayoutEngine();
+
+ /**
+ * This method does any required pre-processing to the input characters. It
+ * may generate output characters that differ from the input charcters due to
+ * insertions, deletions, or reorderings. In such cases, it will also generate an
+ * output character index array reflecting these changes.
+ *
+ * Subclasses must override this method.
+ *
+ * Input parameters:
+ * @param chars - the input character context
+ * @param offset - the index of the first character to process
+ * @param count - the number of characters to process
+ * @param max - the number of characters in the input context
+ * @param rightToLeft - TRUE if the characters are in a right to left directional run
+ * @param outChars - the output character array, if different from the input
+ * @param glyphStorage - the object that holds the per-glyph storage. The character index array may be set.
+ * @param success - set to an error code if the operation fails
+ *
+ * @return the output character count (input character count if no change)
+ *
+ * @internal
+ */
+ virtual le_int32 characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
+ LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success);
+
+ /**
+ * This method does the glyph processing. It converts an array of characters
+ * into an array of glyph indices and character indices. The characters to be
+ * processed are passed in a surrounding context. The context is specified as
+ * a starting address and a maximum character count. An offset and a count are
+ * used to specify the characters to be processed.
+ *
+ * The default implementation of this method only does character to glyph mapping.
+ * Subclasses needing more elaborate glyph processing must override this method.
+ *
+ * Input parameters:
+ * @param chars - the character context
+ * @param offset - the offset of the first character to process
+ * @param count - the number of characters to process
+ * @param max - the number of characters in the context.
+ * @param rightToLeft - TRUE if the text is in a right to left directional run
+ * @param glyphStorage - the object which holds the per-glyph storage. The glyph and char indices arrays
+ * will be set.
+ *
+ * Output parameters:
+ * @param success - set to an error code if the operation fails
+ *
+ * @return the number of glyphs in the glyph index array
+ *
+ * @internal
+ */
+ virtual le_int32 computeGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft, LEGlyphStorage &glyphStorage, LEErrorCode &success);
+
+ /**
+ * This method does basic glyph positioning. The default implementation positions
+ * the glyphs based on their advance widths. This is sufficient for most uses. It
+ * is not expected that many subclasses will override this method.
+ *
+ * Input parameters:
+ * @param glyphStorage - the object which holds the per-glyph storage. The glyph position array will be set.
+ * @param x - the starting X position
+ * @param y - the starting Y position
+ * @param success - set to an error code if the operation fails
+ *
+ * @internal
+ */
+ virtual void positionGlyphs(LEGlyphStorage &glyphStorage, float x, float y, LEErrorCode &success);
+
+ /**
+ * This method does positioning adjustments like accent positioning and
+ * kerning. The default implementation does nothing. Subclasses needing
+ * position adjustments must override this method.
+ *
+ * Note that this method has both characters and glyphs as input so that
+ * it can use the character codes to determine glyph types if that information
+ * isn't directly available. (e.g. Some Arabic OpenType fonts don't have a GDEF
+ * table)
+ *
+ * @param chars - the input character context
+ * @param offset - the offset of the first character to process
+ * @param count - the number of characters to process
+ * @param reverse - <code>TRUE</code> if the glyphs in the glyph array have been reordered
+ * @param glyphStorage - the object which holds the per-glyph storage. The glyph positions will be
+ * adjusted as needed.
+ * @param success - output parameter set to an error code if the operation fails
+ *
+ * @internal
+ */
+ virtual void adjustGlyphPositions(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool reverse, LEGlyphStorage &glyphStorage, LEErrorCode &success);
+
+ /**
+ * This method gets a table from the font associated with
+ * the text. The default implementation gets the table from
+ * the font instance. Subclasses which need to get the tables
+ * some other way must override this method.
+ *
+ * @param tableTag - the four byte table tag.
+ *
+ * @return the address of the table.
+ *
+ * @internal
+ */
+ virtual const void *getFontTable(LETag tableTag) const;
+
+ /**
+ * This method does character to glyph mapping. The default implementation
+ * uses the font instance to do the mapping. It will allocate the glyph and
+ * character index arrays if they're not already allocated. If it allocates the
+ * character index array, it will fill it it.
+ *
+ * This method supports right to left
+ * text with the ability to store the glyphs in reverse order, and by supporting
+ * character mirroring, which will replace a character which has a left and right
+ * form, such as parens, with the opposite form before mapping it to a glyph index.
+ *
+ * Input parameters:
+ * @param chars - the input character context
+ * @param offset - the offset of the first character to be mapped
+ * @param count - the number of characters to be mapped
+ * @param reverse - if <code>TRUE</code>, the output will be in reverse order
+ * @param mirror - if <code>TRUE</code>, do character mirroring
+ * @param glyphStorage - the object which holds the per-glyph storage. The glyph and char
+ * indices arrays will be filled in.
+ * @param success - set to an error code if the operation fails
+ *
+ * @see LEFontInstance
+ *
+ * @internal
+ */
+ virtual void mapCharsToGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool reverse, le_bool mirror, LEGlyphStorage &glyphStorage, LEErrorCode &success);
+
+#ifndef U_HIDE_INTERNAL_API
+ /**
+ * This is a convenience method that forces the advance width of mark
+ * glyphs to be zero, which is required for proper selection and highlighting.
+ *
+ * @param glyphStorage - the object containing the per-glyph storage. The positions array will be modified.
+ * @param markFilter - used to identify mark glyphs
+ * @param success - output parameter set to an error code if the operation fails
+ *
+ * @see LEGlyphFilter
+ *
+ * @internal
+ */
+ static void adjustMarkGlyphs(LEGlyphStorage &glyphStorage, LEGlyphFilter *markFilter, LEErrorCode &success);
+
+
+ /**
+ * This is a convenience method that forces the advance width of mark
+ * glyphs to be zero, which is required for proper selection and highlighting.
+ * This method uses the input characters to identify marks. This is required in
+ * cases where the font does not contain enough information to identify them based
+ * on the glyph IDs.
+ *
+ * @param chars - the array of input characters
+ * @param charCount - the number of input characers
+ * @param glyphStorage - the object containing the per-glyph storage. The positions array will be modified.
+ * @param reverse - <code>TRUE</code> if the glyph array has been reordered
+ * @param markFilter - used to identify mark glyphs
+ * @param success - output parameter set to an error code if the operation fails
+ *
+ * @see LEGlyphFilter
+ *
+ * @internal
+ */
+ static void adjustMarkGlyphs(const LEUnicode chars[], le_int32 charCount, le_bool reverse, LEGlyphStorage &glyphStorage, LEGlyphFilter *markFilter, LEErrorCode &success);
+#endif /* U_HIDE_INTERNAL_API */
+
+public:
+ /**
+ * The destructor. It will free any storage allocated for the
+ * glyph, character index and position arrays by calling the reset
+ * method. It is declared virtual so that it will be invoked by the
+ * subclass destructors.
+ *
+ * @stable ICU 2.8
+ */
+ virtual ~LayoutEngine();
+
+ /**
+ * This method will invoke the layout steps in their correct order by calling
+ * the computeGlyphs, positionGlyphs and adjustGlyphPosition methods. It will
+ * compute the glyph, character index and position arrays.
+ *
+ * @param chars - the input character context
+ * @param offset - the offset of the first character to process
+ * @param count - the number of characters to process
+ * @param max - the number of characters in the input context
+ * @param rightToLeft - TRUE if the characers are in a right to left directional run
+ * @param x - the initial X position
+ * @param y - the initial Y position
+ * @param success - output parameter set to an error code if the operation fails
+ *
+ * @return the number of glyphs in the glyph array
+ *
+ * Note: The glyph, character index and position array can be accessed
+ * using the getter methods below.
+ *
+ * Note: If you call this method more than once, you must call the reset()
+ * method first to free the glyph, character index and position arrays
+ * allocated by the previous call.
+ *
+ * @stable ICU 2.8
+ */
+ virtual le_int32 layoutChars(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft, float x, float y, LEErrorCode &success);
+
+ /**
+ * This method returns the number of glyphs in the glyph array. Note
+ * that the number of glyphs will be greater than or equal to the number
+ * of characters used to create the LayoutEngine.
+ *
+ * @return the number of glyphs in the glyph array
+ *
+ * @stable ICU 2.8
+ */
+ le_int32 getGlyphCount() const;
+
+ /**
+ * This method copies the glyph array into a caller supplied array.
+ * The caller must ensure that the array is large enough to hold all
+ * the glyphs.
+ *
+ * @param glyphs - the destiniation glyph array
+ * @param success - set to an error code if the operation fails
+ *
+ * @stable ICU 2.8
+ */
+ void getGlyphs(LEGlyphID glyphs[], LEErrorCode &success) const;
+
+ /**
+ * This method copies the glyph array into a caller supplied array,
+ * ORing in extra bits. (This functionality is needed by the JDK,
+ * which uses 32 bits pre glyph idex, with the high 16 bits encoding
+ * the composite font slot number)
+ *
+ * @param glyphs - the destination (32 bit) glyph array
+ * @param extraBits - this value will be ORed with each glyph index
+ * @param success - set to an error code if the operation fails
+ *
+ * @stable ICU 2.8
+ */
+ virtual void getGlyphs(le_uint32 glyphs[], le_uint32 extraBits, LEErrorCode &success) const;
+
+ /**
+ * This method copies the character index array into a caller supplied array.
+ * The caller must ensure that the array is large enough to hold a
+ * character index for each glyph.
+ *
+ * @param charIndices - the destiniation character index array
+ * @param success - set to an error code if the operation fails
+ *
+ * @stable ICU 2.8
+ */
+ void getCharIndices(le_int32 charIndices[], LEErrorCode &success) const;
+
+ /**
+ * This method copies the character index array into a caller supplied array.
+ * The caller must ensure that the array is large enough to hold a
+ * character index for each glyph.
+ *
+ * @param charIndices - the destiniation character index array
+ * @param indexBase - an offset which will be added to each index
+ * @param success - set to an error code if the operation fails
+ *
+ * @stable ICU 2.8
+ */
+ void getCharIndices(le_int32 charIndices[], le_int32 indexBase, LEErrorCode &success) const;
+
+ /**
+ * This method copies the position array into a caller supplied array.
+ * The caller must ensure that the array is large enough to hold an
+ * X and Y position for each glyph, plus an extra X and Y for the
+ * advance of the last glyph.
+ *
+ * @param positions - the destiniation position array
+ * @param success - set to an error code if the operation fails
+ *
+ * @stable ICU 2.8
+ */
+ void getGlyphPositions(float positions[], LEErrorCode &success) const;
+
+ /**
+ * This method returns the X and Y position of the glyph at
+ * the given index.
+ *
+ * Input parameters:
+ * @param glyphIndex - the index of the glyph
+ *
+ * Output parameters:
+ * @param x - the glyph's X position
+ * @param y - the glyph's Y position
+ * @param success - set to an error code if the operation fails
+ *
+ * @stable ICU 2.8
+ */
+ void getGlyphPosition(le_int32 glyphIndex, float &x, float &y, LEErrorCode &success) const;
+
+ /**
+ * This method frees the glyph, character index and position arrays
+ * so that the LayoutEngine can be reused to layout a different
+ * characer array. (This method is also called by the destructor)
+ *
+ * @stable ICU 2.8
+ */
+ virtual void reset();
+
+ /**
+ * This method returns a LayoutEngine capable of laying out text
+ * in the given font, script and langauge. Note that the LayoutEngine
+ * returned may be a subclass of LayoutEngine.
+ *
+ * @param fontInstance - the font of the text
+ * @param scriptCode - the script of the text
+ * @param languageCode - the language of the text
+ * @param success - output parameter set to an error code if the operation fails
+ *
+ * @return a LayoutEngine which can layout text in the given font.
+ *
+ * @see LEFontInstance
+ *
+ * @stable ICU 2.8
+ */
+ static LayoutEngine *layoutEngineFactory(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, LEErrorCode &success);
+
+ /**
+ * Override of existing call that provides flags to control typography.
+ * @stable ICU 3.4
+ */
+ static LayoutEngine *layoutEngineFactory(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, le_int32 typo_flags, LEErrorCode &success);
+
+ /**
+ * ICU "poor man's RTTI", returns a UClassID for the actual class.
+ *
+ * @stable ICU 2.8
+ */
+ virtual UClassID getDynamicClassID() const;
+
+ /**
+ * ICU "poor man's RTTI", returns a UClassID for this class.
+ *
+ * @stable ICU 2.8
+ */
+ static UClassID getStaticClassID();
+
+};
+
+U_NAMESPACE_END
+#endif
diff --git a/Build/source/libs/icu/icu-50.1/layout/LayoutTables.h b/Build/source/libs/icu/icu-50.1/layout/LayoutTables.h
new file mode 100644
index 00000000000..fda5081c7a5
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/LayoutTables.h
@@ -0,0 +1,26 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
+ *
+ */
+
+#ifndef __LAYOUTTABLES_H
+#define __LAYOUTTABLES_H
+
+/**
+ * \file
+ * \internal
+ */
+
+#include "LETypes.h"
+
+U_NAMESPACE_BEGIN
+
+#define ANY_NUMBER 1
+
+typedef le_int16 ByteOffset;
+typedef le_int16 WordOffset;
+
+U_NAMESPACE_END
+#endif
+
diff --git a/Build/source/libs/icu/icu-50.1/layout/LigatureSubstProc.cpp b/Build/source/libs/icu/icu-50.1/layout/LigatureSubstProc.cpp
new file mode 100644
index 00000000000..8df9a7861f3
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/LigatureSubstProc.cpp
@@ -0,0 +1,117 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
+ *
+ */
+
+#include "LETypes.h"
+#include "MorphTables.h"
+#include "StateTables.h"
+#include "MorphStateTables.h"
+#include "SubtableProcessor.h"
+#include "StateTableProcessor.h"
+#include "LigatureSubstProc.h"
+#include "LEGlyphStorage.h"
+#include "LESwaps.h"
+
+U_NAMESPACE_BEGIN
+
+#define ExtendedComplement(m) ((le_int32) (~((le_uint32) (m))))
+#define SignBit(m) ((ExtendedComplement(m) >> 1) & (le_int32)(m))
+#define SignExtend(v,m) (((v) & SignBit(m))? ((v) | ExtendedComplement(m)): (v))
+
+UOBJECT_DEFINE_RTTI_IMPLEMENTATION(LigatureSubstitutionProcessor)
+
+LigatureSubstitutionProcessor::LigatureSubstitutionProcessor(const MorphSubtableHeader *morphSubtableHeader)
+ : StateTableProcessor(morphSubtableHeader)
+{
+ ligatureSubstitutionHeader = (const LigatureSubstitutionHeader *) morphSubtableHeader;
+ ligatureActionTableOffset = SWAPW(ligatureSubstitutionHeader->ligatureActionTableOffset);
+ componentTableOffset = SWAPW(ligatureSubstitutionHeader->componentTableOffset);
+ ligatureTableOffset = SWAPW(ligatureSubstitutionHeader->ligatureTableOffset);
+
+ entryTable = (const LigatureSubstitutionStateEntry *) ((char *) &stateTableHeader->stHeader + entryTableOffset);
+}
+
+LigatureSubstitutionProcessor::~LigatureSubstitutionProcessor()
+{
+}
+
+void LigatureSubstitutionProcessor::beginStateTable()
+{
+ m = -1;
+}
+
+ByteOffset LigatureSubstitutionProcessor::processStateEntry(LEGlyphStorage &glyphStorage, le_int32 &currGlyph, EntryTableIndex index)
+{
+ const LigatureSubstitutionStateEntry *entry = &entryTable[index];
+ ByteOffset newState = SWAPW(entry->newStateOffset);
+ le_int16 flags = SWAPW(entry->flags);
+
+ if (flags & lsfSetComponent) {
+ if (++m >= nComponents) {
+ m = 0;
+ }
+
+ componentStack[m] = currGlyph;
+ }
+
+ ByteOffset actionOffset = flags & lsfActionOffsetMask;
+
+ if (actionOffset != 0) {
+ const LigatureActionEntry *ap = (const LigatureActionEntry *) ((char *) &ligatureSubstitutionHeader->stHeader + actionOffset);
+ LigatureActionEntry action;
+ le_int32 offset, i = 0;
+ le_int32 stack[nComponents];
+ le_int16 mm = -1;
+
+ do {
+ le_uint32 componentGlyph = componentStack[m--];
+
+ action = SWAPL(*ap++);
+
+ if (m < 0) {
+ m = nComponents - 1;
+ }
+
+ offset = action & lafComponentOffsetMask;
+ if (offset != 0) {
+ const le_int16 *offsetTable = (const le_int16 *)((char *) &ligatureSubstitutionHeader->stHeader + 2 * SignExtend(offset, lafComponentOffsetMask));
+
+ i += SWAPW(offsetTable[LE_GET_GLYPH(glyphStorage[componentGlyph])]);
+
+ if (action & (lafLast | lafStore)) {
+ const TTGlyphID *ligatureOffset = (const TTGlyphID *) ((char *) &ligatureSubstitutionHeader->stHeader + i);
+ TTGlyphID ligatureGlyph = SWAPW(*ligatureOffset);
+
+ glyphStorage[componentGlyph] = LE_SET_GLYPH(glyphStorage[componentGlyph], ligatureGlyph);
+ stack[++mm] = componentGlyph;
+ i = 0;
+ } else {
+ glyphStorage[componentGlyph] = LE_SET_GLYPH(glyphStorage[componentGlyph], 0xFFFF);
+ }
+ }
+ } while (!(action & lafLast));
+
+ while (mm >= 0) {
+ if (++m >= nComponents) {
+ m = 0;
+ }
+
+ componentStack[m] = stack[mm--];
+ }
+ }
+
+ if (!(flags & lsfDontAdvance)) {
+ // should handle reverse too!
+ currGlyph += 1;
+ }
+
+ return newState;
+}
+
+void LigatureSubstitutionProcessor::endStateTable()
+{
+}
+
+U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-50.1/layout/LigatureSubstProc.h b/Build/source/libs/icu/icu-50.1/layout/LigatureSubstProc.h
new file mode 100644
index 00000000000..ef5b1edb5fc
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/LigatureSubstProc.h
@@ -0,0 +1,71 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
+ *
+ */
+
+#ifndef __LIGATURESUBSTITUTIONPROCESSOR_H
+#define __LIGATURESUBSTITUTIONPROCESSOR_H
+
+/**
+ * \file
+ * \internal
+ */
+
+#include "LETypes.h"
+#include "MorphTables.h"
+#include "SubtableProcessor.h"
+#include "StateTableProcessor.h"
+#include "LigatureSubstitution.h"
+
+U_NAMESPACE_BEGIN
+
+class LEGlyphStorage;
+
+#define nComponents 16
+
+class LigatureSubstitutionProcessor : public StateTableProcessor
+{
+public:
+ virtual void beginStateTable();
+
+ virtual ByteOffset processStateEntry(LEGlyphStorage &glyphStorage, le_int32 &currGlyph, EntryTableIndex index);
+
+ virtual void endStateTable();
+
+ LigatureSubstitutionProcessor(const MorphSubtableHeader *morphSubtableHeader);
+ virtual ~LigatureSubstitutionProcessor();
+
+ /**
+ * ICU "poor man's RTTI", returns a UClassID for the actual class.
+ *
+ * @stable ICU 2.8
+ */
+ virtual UClassID getDynamicClassID() const;
+
+ /**
+ * ICU "poor man's RTTI", returns a UClassID for this class.
+ *
+ * @stable ICU 2.8
+ */
+ static UClassID getStaticClassID();
+
+private:
+ LigatureSubstitutionProcessor();
+
+protected:
+ ByteOffset ligatureActionTableOffset;
+ ByteOffset componentTableOffset;
+ ByteOffset ligatureTableOffset;
+
+ const LigatureSubstitutionStateEntry *entryTable;
+
+ le_int32 componentStack[nComponents];
+ le_int16 m;
+
+ const LigatureSubstitutionHeader *ligatureSubstitutionHeader;
+
+};
+
+U_NAMESPACE_END
+#endif
diff --git a/Build/source/libs/icu/icu-50.1/layout/LigatureSubstSubtables.cpp b/Build/source/libs/icu/icu-50.1/layout/LigatureSubstSubtables.cpp
new file mode 100644
index 00000000000..391ffe649ee
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/LigatureSubstSubtables.cpp
@@ -0,0 +1,68 @@
+/*
+ * (C) Copyright IBM Corp. 1998-2006 - All Rights Reserved
+ *
+ */
+
+#include "LETypes.h"
+#include "LEGlyphFilter.h"
+#include "OpenTypeTables.h"
+#include "GlyphSubstitutionTables.h"
+#include "LigatureSubstSubtables.h"
+#include "GlyphIterator.h"
+#include "LESwaps.h"
+
+U_NAMESPACE_BEGIN
+
+le_uint32 LigatureSubstitutionSubtable::process(GlyphIterator *glyphIterator, const LEGlyphFilter *filter) const
+{
+ LEGlyphID glyph = glyphIterator->getCurrGlyphID();
+ le_int32 coverageIndex = getGlyphCoverage(glyph);
+
+ if (coverageIndex >= 0) {
+ Offset ligSetTableOffset = SWAPW(ligSetTableOffsetArray[coverageIndex]);
+ const LigatureSetTable *ligSetTable = (const LigatureSetTable *) ((char *) this + ligSetTableOffset);
+ le_uint16 ligCount = SWAPW(ligSetTable->ligatureCount);
+
+ for (le_uint16 lig = 0; lig < ligCount; lig += 1) {
+ Offset ligTableOffset = SWAPW(ligSetTable->ligatureTableOffsetArray[lig]);
+ const LigatureTable *ligTable = (const LigatureTable *) ((char *)ligSetTable + ligTableOffset);
+ le_uint16 compCount = SWAPW(ligTable->compCount) - 1;
+ le_int32 startPosition = glyphIterator->getCurrStreamPosition();
+ TTGlyphID ligGlyph = SWAPW(ligTable->ligGlyph);
+ le_uint16 comp;
+
+ for (comp = 0; comp < compCount; comp += 1) {
+ if (! glyphIterator->next()) {
+ break;
+ }
+
+ if (LE_GET_GLYPH(glyphIterator->getCurrGlyphID()) != SWAPW(ligTable->componentArray[comp])) {
+ break;
+ }
+ }
+
+ if (comp == compCount && (filter == NULL || filter->accept(LE_SET_GLYPH(glyph, ligGlyph)))) {
+ GlyphIterator tempIterator(*glyphIterator);
+ TTGlyphID deletedGlyph = tempIterator.ignoresMarks()? 0xFFFE : 0xFFFF;
+
+ while (comp > 0) {
+ tempIterator.setCurrGlyphID(deletedGlyph);
+ tempIterator.prev();
+
+ comp -= 1;
+ }
+
+ tempIterator.setCurrGlyphID(ligGlyph);
+
+ return compCount + 1;
+ }
+
+ glyphIterator->setCurrStreamPosition(startPosition);
+ }
+
+ }
+
+ return 0;
+}
+
+U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-50.1/layout/LigatureSubstSubtables.h b/Build/source/libs/icu/icu-50.1/layout/LigatureSubstSubtables.h
new file mode 100644
index 00000000000..423c95a663d
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/LigatureSubstSubtables.h
@@ -0,0 +1,45 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
+ *
+ */
+
+#ifndef __LIGATURESUBSTITUTIONSUBTABLES_H
+#define __LIGATURESUBSTITUTIONSUBTABLES_H
+
+/**
+ * \file
+ * \internal
+ */
+
+#include "LETypes.h"
+#include "LEGlyphFilter.h"
+#include "OpenTypeTables.h"
+#include "GlyphSubstitutionTables.h"
+#include "GlyphIterator.h"
+
+U_NAMESPACE_BEGIN
+
+struct LigatureSetTable
+{
+ le_uint16 ligatureCount;
+ Offset ligatureTableOffsetArray[ANY_NUMBER];
+};
+
+struct LigatureTable
+{
+ TTGlyphID ligGlyph;
+ le_uint16 compCount;
+ TTGlyphID componentArray[ANY_NUMBER];
+};
+
+struct LigatureSubstitutionSubtable : GlyphSubstitutionSubtable
+{
+ le_uint16 ligSetCount;
+ Offset ligSetTableOffsetArray[ANY_NUMBER];
+
+ le_uint32 process(GlyphIterator *glyphIterator, const LEGlyphFilter *filter = NULL) const;
+};
+
+U_NAMESPACE_END
+#endif
diff --git a/Build/source/libs/icu/icu-50.1/layout/LigatureSubstitution.h b/Build/source/libs/icu/icu-50.1/layout/LigatureSubstitution.h
new file mode 100644
index 00000000000..2963b7c1444
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/LigatureSubstitution.h
@@ -0,0 +1,51 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
+ *
+ */
+
+#ifndef __LIGATURESUBSTITUTION_H
+#define __LIGATURESUBSTITUTION_H
+
+/**
+ * \file
+ * \internal
+ */
+
+#include "LETypes.h"
+#include "LayoutTables.h"
+#include "StateTables.h"
+#include "MorphTables.h"
+#include "MorphStateTables.h"
+
+U_NAMESPACE_BEGIN
+
+struct LigatureSubstitutionHeader : MorphStateTableHeader
+{
+ ByteOffset ligatureActionTableOffset;
+ ByteOffset componentTableOffset;
+ ByteOffset ligatureTableOffset;
+};
+
+enum LigatureSubstitutionFlags
+{
+ lsfSetComponent = 0x8000,
+ lsfDontAdvance = 0x4000,
+ lsfActionOffsetMask = 0x3FFF
+};
+
+struct LigatureSubstitutionStateEntry : StateEntry
+{
+};
+
+typedef le_uint32 LigatureActionEntry;
+
+enum LigatureActionFlags
+{
+ lafLast = 0x80000000,
+ lafStore = 0x40000000,
+ lafComponentOffsetMask = 0x3FFFFFFF
+};
+
+U_NAMESPACE_END
+#endif
diff --git a/Build/source/libs/icu/icu-50.1/layout/LookupProcessor.cpp b/Build/source/libs/icu/icu-50.1/layout/LookupProcessor.cpp
new file mode 100644
index 00000000000..4f9d97c58d1
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/LookupProcessor.cpp
@@ -0,0 +1,316 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2012 - All Rights Reserved
+ *
+ */
+
+#include "LETypes.h"
+#include "OpenTypeUtilities.h"
+#include "LEFontInstance.h"
+#include "OpenTypeTables.h"
+#include "ICUFeatures.h"
+#include "Lookups.h"
+#include "ScriptAndLanguage.h"
+#include "GlyphDefinitionTables.h"
+#include "GlyphIterator.h"
+#include "LookupProcessor.h"
+#include "LEGlyphStorage.h"
+#include "LESwaps.h"
+
+U_NAMESPACE_BEGIN
+
+le_uint32 LookupProcessor::applyLookupTable(const LookupTable *lookupTable, GlyphIterator *glyphIterator,
+ const LEFontInstance *fontInstance, LEErrorCode& success) const
+{
+ if (LE_FAILURE(success)) {
+ return 0;
+ }
+
+ le_uint16 lookupType = SWAPW(lookupTable->lookupType);
+ le_uint16 subtableCount = SWAPW(lookupTable->subTableCount);
+ le_int32 startPosition = glyphIterator->getCurrStreamPosition();
+ le_uint32 delta;
+
+ for (le_uint16 subtable = 0; subtable < subtableCount; subtable += 1) {
+ const LookupSubtable *lookupSubtable = lookupTable->getLookupSubtable(subtable);
+
+ delta = applySubtable(lookupSubtable, lookupType, glyphIterator, fontInstance, success);
+
+ if (delta > 0 && LE_FAILURE(success)) {
+ return 1;
+ }
+
+ glyphIterator->setCurrStreamPosition(startPosition);
+ }
+
+ return 1;
+}
+
+le_int32 LookupProcessor::process(LEGlyphStorage &glyphStorage, GlyphPositionAdjustments *glyphPositionAdjustments,
+ le_bool rightToLeft, const GlyphDefinitionTableHeader *glyphDefinitionTableHeader,
+ const LEFontInstance *fontInstance, LEErrorCode& success) const
+{
+ if (LE_FAILURE(success)) {
+ return 0;
+ }
+
+ le_int32 glyphCount = glyphStorage.getGlyphCount();
+
+ if (lookupSelectArray == NULL) {
+ return glyphCount;
+ }
+
+ GlyphIterator glyphIterator(glyphStorage, glyphPositionAdjustments,
+ rightToLeft, 0, 0, glyphDefinitionTableHeader);
+ le_int32 newGlyphCount = glyphCount;
+
+ for (le_uint16 order = 0; order < lookupOrderCount; order += 1) {
+ le_uint16 lookup = lookupOrderArray[order];
+ FeatureMask selectMask = lookupSelectArray[lookup];
+
+ if (selectMask != 0) {
+ const LookupTable *lookupTable = lookupListTable->getLookupTable(lookup);
+ if (!lookupTable) {
+ continue;
+ }
+ le_uint16 lookupFlags = SWAPW(lookupTable->lookupFlags);
+
+ glyphIterator.reset(lookupFlags, selectMask);
+
+ while (glyphIterator.findFeatureTag()) {
+ applyLookupTable(lookupTable, &glyphIterator, fontInstance, success);
+ if (LE_FAILURE(success)) {
+ return 0;
+ }
+ }
+
+ newGlyphCount = glyphIterator.applyInsertions();
+ }
+ }
+
+ return newGlyphCount;
+}
+
+le_uint32 LookupProcessor::applySingleLookup(le_uint16 lookupTableIndex, GlyphIterator *glyphIterator,
+ const LEFontInstance *fontInstance, LEErrorCode& success) const
+{
+ if (LE_FAILURE(success)) {
+ return 0;
+ }
+
+ const LookupTable *lookupTable = lookupListTable->getLookupTable(lookupTableIndex);
+ le_uint16 lookupFlags = SWAPW(lookupTable->lookupFlags);
+ GlyphIterator tempIterator(*glyphIterator, lookupFlags);
+ le_uint32 delta = applyLookupTable(lookupTable, &tempIterator, fontInstance, success);
+
+ return delta;
+}
+
+le_int32 LookupProcessor::selectLookups(const FeatureTable *featureTable, FeatureMask featureMask, le_int32 order)
+{
+ le_uint16 lookupCount = featureTable? SWAPW(featureTable->lookupCount) : 0;
+ le_int32 store = order;
+
+ for (le_uint16 lookup = 0; lookup < lookupCount; lookup += 1) {
+ le_uint16 lookupListIndex = SWAPW(featureTable->lookupListIndexArray[lookup]);
+ if (lookupListIndex >= lookupSelectCount) {
+ continue;
+ }
+
+ lookupSelectArray[lookupListIndex] |= featureMask;
+ lookupOrderArray[store++] = lookupListIndex;
+ }
+
+ return store - order;
+}
+
+LookupProcessor::LookupProcessor(const char *baseAddress,
+ Offset scriptListOffset, Offset featureListOffset, Offset lookupListOffset,
+ LETag scriptTag, LETag languageTag, const FeatureMap *featureMap, le_int32 featureMapCount, le_bool orderFeatures,
+ LEErrorCode& success)
+ : lookupListTable(NULL), featureListTable(NULL), lookupSelectArray(NULL), lookupSelectCount(0),
+ lookupOrderArray(NULL), lookupOrderCount(0)
+{
+ const ScriptListTable *scriptListTable = NULL;
+ const LangSysTable *langSysTable = NULL;
+ le_uint16 featureCount = 0;
+ le_uint16 lookupListCount = 0;
+ le_uint16 requiredFeatureIndex;
+
+ if (LE_FAILURE(success)) {
+ return;
+ }
+
+ if (scriptListOffset != 0) {
+ scriptListTable = (const ScriptListTable *) (baseAddress + scriptListOffset);
+ langSysTable = scriptListTable->findLanguage(scriptTag, languageTag);
+
+ if (langSysTable != 0) {
+ featureCount = SWAPW(langSysTable->featureCount);
+ }
+ }
+
+ if (featureListOffset != 0) {
+ featureListTable = (const FeatureListTable *) (baseAddress + featureListOffset);
+ }
+
+ if (lookupListOffset != 0) {
+ lookupListTable = (const LookupListTable *) (baseAddress + lookupListOffset);
+ lookupListCount = SWAPW(lookupListTable->lookupCount);
+ }
+
+ if (langSysTable == NULL || featureListTable == NULL || lookupListTable == NULL ||
+ featureCount == 0 || lookupListCount == 0) {
+ return;
+ }
+
+ requiredFeatureIndex = SWAPW(langSysTable->reqFeatureIndex);
+
+ lookupSelectArray = LE_NEW_ARRAY(FeatureMask, lookupListCount);
+ if (lookupSelectArray == NULL) {
+ success = LE_MEMORY_ALLOCATION_ERROR;
+ return;
+ }
+
+ for (int i = 0; i < lookupListCount; i += 1) {
+ lookupSelectArray[i] = 0;
+ }
+ lookupSelectCount = lookupListCount;
+
+ le_int32 count, order = 0;
+ le_int32 featureReferences = 0;
+ const FeatureTable *featureTable = NULL;
+ LETag featureTag;
+
+ const FeatureTable *requiredFeatureTable = NULL;
+ LETag requiredFeatureTag = 0x00000000U;
+
+ // Count the total number of lookups referenced by all features. This will
+ // be the maximum number of entries in the lookupOrderArray. We can't use
+ // lookupListCount because some lookups might be referenced by more than
+ // one feature.
+ for (le_int32 feature = 0; feature < featureCount; feature += 1) {
+ le_uint16 featureIndex = SWAPW(langSysTable->featureIndexArray[feature]);
+
+ featureTable = featureListTable->getFeatureTable(featureIndex, &featureTag);
+ if (!featureTable) {
+ continue;
+ }
+ featureReferences += SWAPW(featureTable->lookupCount);
+ }
+
+ if (!featureTable) {
+ success = LE_INTERNAL_ERROR;
+ return;
+ }
+
+ if (requiredFeatureIndex != 0xFFFF) {
+ requiredFeatureTable = featureListTable->getFeatureTable(requiredFeatureIndex, &requiredFeatureTag);
+ featureReferences += SWAPW(featureTable->lookupCount);
+ }
+
+ lookupOrderArray = LE_NEW_ARRAY(le_uint16, featureReferences);
+ if (lookupOrderArray == NULL) {
+ success = LE_MEMORY_ALLOCATION_ERROR;
+ return;
+ }
+
+ for (le_int32 f = 0; f < featureMapCount; f += 1) {
+ FeatureMap fm = featureMap[f];
+ count = 0;
+
+ // If this is the required feature, add its lookups
+ if (requiredFeatureTag == fm.tag) {
+ count += selectLookups(requiredFeatureTable, fm.mask, order);
+ }
+
+ if (orderFeatures) {
+ // If we added lookups from the required feature, sort them
+ if (count > 1) {
+ OpenTypeUtilities::sort(lookupOrderArray, order);
+ }
+
+ for (le_uint16 feature = 0; feature < featureCount; feature += 1) {
+ le_uint16 featureIndex = SWAPW(langSysTable->featureIndexArray[feature]);
+
+ // don't add the required feature to the list more than once...
+ // TODO: Do we need this check? (Spec. says required feature won't be in feature list...)
+ if (featureIndex == requiredFeatureIndex) {
+ continue;
+ }
+
+ featureTable = featureListTable->getFeatureTable(featureIndex, &featureTag);
+
+ if (featureTag == fm.tag) {
+ count += selectLookups(featureTable, fm.mask, order + count);
+ }
+ }
+
+ if (count > 1) {
+ OpenTypeUtilities::sort(&lookupOrderArray[order], count);
+ }
+
+ order += count;
+ } else {
+ for (le_uint16 feature = 0; feature < featureCount; feature += 1) {
+ le_uint16 featureIndex = SWAPW(langSysTable->featureIndexArray[feature]);
+
+ // don't add the required feature to the list more than once...
+ // NOTE: This check is commented out because the spec. says that
+ // the required feature won't be in the feature list, and because
+ // any duplicate entries will be removed below.
+#if 0
+ if (featureIndex == requiredFeatureIndex) {
+ continue;
+ }
+#endif
+
+ featureTable = featureListTable->getFeatureTable(featureIndex, &featureTag);
+
+ if (featureTag == fm.tag) {
+ order += selectLookups(featureTable, fm.mask, order);
+ }
+ }
+ }
+ }
+
+ if (!orderFeatures && (order > 1)) {
+ OpenTypeUtilities::sort(lookupOrderArray, order);
+
+ // If there's no specified feature order,
+ // we will apply the lookups in the order
+ // that they're in the font. If a particular
+ // lookup may be referenced by more than one feature,
+ // it will apprear in the lookupOrderArray more than
+ // once, so remove any duplicate entries in the sorted array.
+ le_int32 out = 1;
+
+ for (le_int32 in = 1; in < order; in += 1) {
+ if (lookupOrderArray[out - 1] != lookupOrderArray[in]) {
+ if (out != in) {
+ lookupOrderArray[out] = lookupOrderArray[in];
+ }
+
+ out += 1;
+ }
+ }
+
+ order = out;
+ }
+
+ lookupOrderCount = order;
+}
+
+LookupProcessor::LookupProcessor()
+{
+ lookupOrderArray = NULL;
+ lookupSelectArray = NULL;
+}
+
+LookupProcessor::~LookupProcessor()
+{
+ LE_DELETE_ARRAY(lookupOrderArray);
+ LE_DELETE_ARRAY(lookupSelectArray);
+}
+
+U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-50.1/layout/LookupProcessor.h b/Build/source/libs/icu/icu-50.1/layout/LookupProcessor.h
new file mode 100644
index 00000000000..43ade08c8ce
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/LookupProcessor.h
@@ -0,0 +1,80 @@
+/*
+ * %W% %E%
+ *
+ * (C) Copyright IBM Corp. 1998-2011 - All Rights Reserved
+ *
+ */
+
+#ifndef __LOOKUPPROCESSOR_H
+#define __LOOKUPPROCESSOR_H
+
+/**
+ * \file
+ * \internal
+ */
+
+#include "LETypes.h"
+#include "LEFontInstance.h"
+#include "OpenTypeTables.h"
+//#include "Lookups.h"
+//#include "Features.h"
+
+U_NAMESPACE_BEGIN
+
+class LEFontInstance;
+class LEGlyphStorage;
+class GlyphIterator;
+class GlyphPositionAdjustments;
+struct FeatureTable;
+struct FeatureListTable;
+struct GlyphDefinitionTableHeader;
+struct LookupSubtable;
+struct LookupTable;
+
+class LookupProcessor : public UMemory {
+public:
+ le_int32 process(LEGlyphStorage &glyphStorage, GlyphPositionAdjustments *glyphPositionAdjustments,
+ le_bool rightToLeft, const GlyphDefinitionTableHeader *glyphDefinitionTableHeader, const LEFontInstance *fontInstance, LEErrorCode& success) const;
+
+ le_uint32 applyLookupTable(const LookupTable *lookupTable, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode& success) const;
+
+ le_uint32 applySingleLookup(le_uint16 lookupTableIndex, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode& success) const;
+
+ virtual le_uint32 applySubtable(const LookupSubtable *lookupSubtable, le_uint16 subtableType,
+ GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode& success) const = 0;
+
+ virtual ~LookupProcessor();
+
+protected:
+ LookupProcessor(const char *baseAddress,
+ Offset scriptListOffset,
+ Offset featureListOffset,
+ Offset lookupListOffset,
+ LETag scriptTag,
+ LETag languageTag,
+ const FeatureMap *featureMap,
+ le_int32 featureMapCount,
+ le_bool orderFeatures,
+ LEErrorCode& success);
+
+ LookupProcessor();
+
+ le_int32 selectLookups(const FeatureTable *featureTable, FeatureMask featureMask, le_int32 order);
+
+ const LookupListTable *lookupListTable;
+ const FeatureListTable *featureListTable;
+
+ FeatureMask *lookupSelectArray;
+ le_uint32 lookupSelectCount;
+
+ le_uint16 *lookupOrderArray;
+ le_uint32 lookupOrderCount;
+
+private:
+
+ LookupProcessor(const LookupProcessor &other); // forbid copying of this class
+ LookupProcessor &operator=(const LookupProcessor &other); // forbid copying of this class
+};
+
+U_NAMESPACE_END
+#endif
diff --git a/Build/source/libs/icu/icu-50.1/layout/LookupTables.cpp b/Build/source/libs/icu/icu-50.1/layout/LookupTables.cpp
new file mode 100644
index 00000000000..9766a8133cc
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/LookupTables.cpp
@@ -0,0 +1,85 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
+ *
+ */
+
+#include "LETypes.h"
+#include "LayoutTables.h"
+#include "LookupTables.h"
+#include "LESwaps.h"
+
+U_NAMESPACE_BEGIN
+
+/*
+ These are the rolled-up versions of the uniform binary search.
+ Someday, if we need more performance, we can un-roll them.
+
+ Note: I put these in the base class, so they only have to
+ be written once. Since the base class doesn't define the
+ segment table, these routines assume that it's right after
+ the binary search header.
+
+ Another way to do this is to put each of these routines in one
+ of the derived classes, and implement it in the others by casting
+ the "this" pointer to the type that has the implementation.
+*/
+const LookupSegment *BinarySearchLookupTable::lookupSegment(const LookupSegment *segments, LEGlyphID glyph) const
+{
+ le_int16 unity = SWAPW(unitSize);
+ le_int16 probe = SWAPW(searchRange);
+ le_int16 extra = SWAPW(rangeShift);
+ TTGlyphID ttGlyph = (TTGlyphID) LE_GET_GLYPH(glyph);
+ const LookupSegment *entry = segments;
+ const LookupSegment *trial = (const LookupSegment *) ((char *) entry + extra);
+
+ if (SWAPW(trial->lastGlyph) <= ttGlyph) {
+ entry = trial;
+ }
+
+ while (probe > unity) {
+ probe >>= 1;
+ trial = (const LookupSegment *) ((char *) entry + probe);
+
+ if (SWAPW(trial->lastGlyph) <= ttGlyph) {
+ entry = trial;
+ }
+ }
+
+ if (SWAPW(entry->firstGlyph) <= ttGlyph) {
+ return entry;
+ }
+
+ return NULL;
+}
+
+const LookupSingle *BinarySearchLookupTable::lookupSingle(const LookupSingle *entries, LEGlyphID glyph) const
+{
+ le_int16 unity = SWAPW(unitSize);
+ le_int16 probe = SWAPW(searchRange);
+ le_int16 extra = SWAPW(rangeShift);
+ TTGlyphID ttGlyph = (TTGlyphID) LE_GET_GLYPH(glyph);
+ const LookupSingle *entry = entries;
+ const LookupSingle *trial = (const LookupSingle *) ((char *) entry + extra);
+
+ if (SWAPW(trial->glyph) <= ttGlyph) {
+ entry = trial;
+ }
+
+ while (probe > unity) {
+ probe >>= 1;
+ trial = (const LookupSingle *) ((char *) entry + probe);
+
+ if (SWAPW(trial->glyph) <= ttGlyph) {
+ entry = trial;
+ }
+ }
+
+ if (SWAPW(entry->glyph) == ttGlyph) {
+ return entry;
+ }
+
+ return NULL;
+}
+
+U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-50.1/layout/LookupTables.h b/Build/source/libs/icu/icu-50.1/layout/LookupTables.h
new file mode 100644
index 00000000000..5fa849940ca
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/LookupTables.h
@@ -0,0 +1,90 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
+ *
+ */
+
+#ifndef __LOOKUPTABLES_H
+#define __LOOKUPTABLES_H
+
+/**
+ * \file
+ * \internal
+ */
+
+#include "LETypes.h"
+#include "LayoutTables.h"
+
+U_NAMESPACE_BEGIN
+
+enum LookupTableFormat
+{
+ ltfSimpleArray = 0,
+ ltfSegmentSingle = 2,
+ ltfSegmentArray = 4,
+ ltfSingleTable = 6,
+ ltfTrimmedArray = 8
+};
+
+typedef le_int16 LookupValue;
+
+struct LookupTable
+{
+ le_int16 format;
+};
+
+struct LookupSegment
+{
+ TTGlyphID lastGlyph;
+ TTGlyphID firstGlyph;
+ LookupValue value;
+};
+
+struct LookupSingle
+{
+ TTGlyphID glyph;
+ LookupValue value;
+};
+
+struct BinarySearchLookupTable : LookupTable
+{
+ le_int16 unitSize;
+ le_int16 nUnits;
+ le_int16 searchRange;
+ le_int16 entrySelector;
+ le_int16 rangeShift;
+
+ const LookupSegment *lookupSegment(const LookupSegment *segments, LEGlyphID glyph) const;
+
+ const LookupSingle *lookupSingle(const LookupSingle *entries, LEGlyphID glyph) const;
+};
+
+struct SimpleArrayLookupTable : LookupTable
+{
+ LookupValue valueArray[ANY_NUMBER];
+};
+
+struct SegmentSingleLookupTable : BinarySearchLookupTable
+{
+ LookupSegment segments[ANY_NUMBER];
+};
+
+struct SegmentArrayLookupTable : BinarySearchLookupTable
+{
+ LookupSegment segments[ANY_NUMBER];
+};
+
+struct SingleTableLookupTable : BinarySearchLookupTable
+{
+ LookupSingle entries[ANY_NUMBER];
+};
+
+struct TrimmedArrayLookupTable : LookupTable
+{
+ TTGlyphID firstGlyph;
+ TTGlyphID glyphCount;
+ LookupValue valueArray[ANY_NUMBER];
+};
+
+U_NAMESPACE_END
+#endif
diff --git a/Build/source/libs/icu/icu-50.1/layout/Lookups.cpp b/Build/source/libs/icu/icu-50.1/layout/Lookups.cpp
new file mode 100644
index 00000000000..67f62952e9c
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/Lookups.cpp
@@ -0,0 +1,44 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
+ *
+ */
+
+#include "LETypes.h"
+#include "OpenTypeTables.h"
+#include "Lookups.h"
+#include "CoverageTables.h"
+#include "LESwaps.h"
+
+U_NAMESPACE_BEGIN
+
+const LookupTable *LookupListTable::getLookupTable(le_uint16 lookupTableIndex) const
+{
+ if (lookupTableIndex >= SWAPW(lookupCount)) {
+ return 0;
+ }
+
+ Offset lookupTableOffset = lookupTableOffsetArray[lookupTableIndex];
+
+ return (const LookupTable *) ((char *) this + SWAPW(lookupTableOffset));
+}
+
+const LookupSubtable *LookupTable::getLookupSubtable(le_uint16 subtableIndex) const
+{
+ if (subtableIndex >= SWAPW(subTableCount)) {
+ return 0;
+ }
+
+ Offset subtableOffset = subTableOffsetArray[subtableIndex];
+
+ return (const LookupSubtable *) ((char *) this + SWAPW(subtableOffset));
+}
+
+le_int32 LookupSubtable::getGlyphCoverage(Offset tableOffset, LEGlyphID glyphID) const
+{
+ const CoverageTable *coverageTable = (const CoverageTable *) ((char *) this + SWAPW(tableOffset));
+
+ return coverageTable->getGlyphCoverage(glyphID);
+}
+
+U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-50.1/layout/Lookups.h b/Build/source/libs/icu/icu-50.1/layout/Lookups.h
new file mode 100644
index 00000000000..2316b573b81
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/Lookups.h
@@ -0,0 +1,65 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
+ *
+ */
+
+#ifndef __LOOKUPS_H
+#define __LOOKUPS_H
+
+/**
+ * \file
+ * \internal
+ */
+
+#include "LETypes.h"
+#include "OpenTypeTables.h"
+
+U_NAMESPACE_BEGIN
+
+enum LookupFlags
+{
+ lfBaselineIsLogicalEnd = 0x0001, // The MS spec. calls this flag "RightToLeft" but this name is more accurate
+ lfIgnoreBaseGlyphs = 0x0002,
+ lfIgnoreLigatures = 0x0004,
+ lfIgnoreMarks = 0x0008,
+ lfReservedMask = 0x00F0,
+ lfMarkAttachTypeMask = 0xFF00,
+ lfMarkAttachTypeShift = 8
+};
+
+struct LookupSubtable
+{
+ le_uint16 subtableFormat;
+ Offset coverageTableOffset;
+
+ inline le_int32 getGlyphCoverage(LEGlyphID glyphID) const;
+
+ le_int32 getGlyphCoverage(Offset tableOffset, LEGlyphID glyphID) const;
+};
+
+struct LookupTable
+{
+ le_uint16 lookupType;
+ le_uint16 lookupFlags;
+ le_uint16 subTableCount;
+ Offset subTableOffsetArray[ANY_NUMBER];
+
+ const LookupSubtable *getLookupSubtable(le_uint16 subtableIndex) const;
+};
+
+struct LookupListTable
+{
+ le_uint16 lookupCount;
+ Offset lookupTableOffsetArray[ANY_NUMBER];
+
+ const LookupTable *getLookupTable(le_uint16 lookupTableIndex) const;
+};
+
+inline le_int32 LookupSubtable::getGlyphCoverage(LEGlyphID glyphID) const
+{
+ return getGlyphCoverage(coverageTableOffset, glyphID);
+}
+
+U_NAMESPACE_END
+#endif
diff --git a/Build/source/libs/icu/icu-50.1/layout/MPreFixups.cpp b/Build/source/libs/icu/icu-50.1/layout/MPreFixups.cpp
new file mode 100644
index 00000000000..08ad7a75dff
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/MPreFixups.cpp
@@ -0,0 +1,105 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 2002-2008 - All Rights Reserved
+ *
+ */
+
+#include "LETypes.h"
+#include "LEGlyphStorage.h"
+#include "MPreFixups.h"
+
+U_NAMESPACE_BEGIN
+
+struct FixupData
+{
+ le_int32 fBaseIndex;
+ le_int32 fMPreIndex;
+};
+
+MPreFixups::MPreFixups(le_int32 charCount)
+ : fFixupData(NULL), fFixupCount(0)
+{
+ fFixupData = LE_NEW_ARRAY(FixupData, charCount);
+}
+
+MPreFixups::~MPreFixups()
+{
+ LE_DELETE_ARRAY(fFixupData);
+ fFixupData = NULL;
+}
+
+void MPreFixups::add(le_int32 baseIndex, le_int32 mpreIndex)
+{
+ // NOTE: don't add the fixup data if the mpre is right
+ // before the base consonant glyph.
+ if (baseIndex - mpreIndex > 1) {
+ fFixupData[fFixupCount].fBaseIndex = baseIndex;
+ fFixupData[fFixupCount].fMPreIndex = mpreIndex;
+
+ fFixupCount += 1;
+ }
+}
+
+void MPreFixups::apply(LEGlyphStorage &glyphStorage, LEErrorCode& success)
+{
+ if (LE_FAILURE(success)) {
+ return;
+ }
+
+ for (le_int32 fixup = 0; fixup < fFixupCount; fixup += 1) {
+ le_int32 baseIndex = fFixupData[fixup].fBaseIndex;
+ le_int32 mpreIndex = fFixupData[fixup].fMPreIndex;
+ le_int32 mpreLimit = mpreIndex + 1;
+
+ while (glyphStorage[baseIndex] == 0xFFFF || glyphStorage[baseIndex] == 0xFFFE) {
+ baseIndex -= 1;
+ }
+
+ while (glyphStorage[mpreLimit] == 0xFFFF || glyphStorage[mpreLimit] == 0xFFFE) {
+ mpreLimit += 1;
+ }
+
+ if (mpreLimit == baseIndex) {
+ continue;
+ }
+
+ LEErrorCode success = LE_NO_ERROR;
+ le_int32 mpreCount = mpreLimit - mpreIndex;
+ le_int32 moveCount = baseIndex - mpreLimit;
+ le_int32 mpreDest = baseIndex - mpreCount;
+ LEGlyphID *mpreSave = LE_NEW_ARRAY(LEGlyphID, mpreCount);
+ le_int32 *indexSave = LE_NEW_ARRAY(le_int32, mpreCount);
+
+ if (mpreSave == NULL || indexSave == NULL) {
+ LE_DELETE_ARRAY(mpreSave);
+ LE_DELETE_ARRAY(indexSave);
+ success = LE_MEMORY_ALLOCATION_ERROR;
+ return;
+ }
+
+ le_int32 i;
+
+ for (i = 0; i < mpreCount; i += 1) {
+ mpreSave[i] = glyphStorage[mpreIndex + i];
+ indexSave[i] = glyphStorage.getCharIndex(mpreIndex + i, success); //charIndices[mpreIndex + i];
+ }
+
+ for (i = 0; i < moveCount; i += 1) {
+ LEGlyphID glyph = glyphStorage[mpreLimit + i];
+ le_int32 charIndex = glyphStorage.getCharIndex(mpreLimit + i, success);
+
+ glyphStorage[mpreIndex + i] = glyph;
+ glyphStorage.setCharIndex(mpreIndex + i, charIndex, success);
+ }
+
+ for (i = 0; i < mpreCount; i += 1) {
+ glyphStorage[mpreDest + i] = mpreSave[i];
+ glyphStorage.setCharIndex(mpreDest, indexSave[i], success);
+ }
+
+ LE_DELETE_ARRAY(indexSave);
+ LE_DELETE_ARRAY(mpreSave);
+ }
+}
+
+U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-50.1/layout/MPreFixups.h b/Build/source/libs/icu/icu-50.1/layout/MPreFixups.h
new file mode 100644
index 00000000000..18fefe0de94
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/MPreFixups.h
@@ -0,0 +1,42 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 2002-2008 - All Rights Reserved
+ *
+ */
+
+#ifndef __MPREFIXUPS_H
+#define __MPREFIXUPS_H
+
+/**
+ * \file
+ * \internal
+ */
+
+#include "LETypes.h"
+
+U_NAMESPACE_BEGIN
+
+class LEGlyphStorage;
+
+// Might want to make this a private member...
+struct FixupData;
+
+class MPreFixups : public UMemory
+{
+public:
+ MPreFixups(le_int32 charCount);
+ ~MPreFixups();
+
+ void add(le_int32 baseIndex, le_int32 mpreIndex);
+
+ void apply(LEGlyphStorage &glyphStorage, LEErrorCode& success);
+
+private:
+ FixupData *fFixupData;
+ le_int32 fFixupCount;
+};
+
+U_NAMESPACE_END
+#endif
+
+
diff --git a/Build/source/libs/icu/icu-50.1/layout/Makefile.in b/Build/source/libs/icu/icu-50.1/layout/Makefile.in
new file mode 100644
index 00000000000..d63a244942f
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/Makefile.in
@@ -0,0 +1,240 @@
+#******************************************************************************
+#
+# Copyright (C) 1999-2011, International Business Machines
+# Corporation and others. All Rights Reserved.
+#
+#******************************************************************************
+## Makefile.in for ICU - layout
+
+## Source directory information
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+
+top_builddir = ..
+
+## All the flags and other definitions are included here.
+include $(top_builddir)/icudefs.mk
+
+## Build directory information
+subdir = layout
+
+## Extra files to remove for 'make clean'
+CLEANFILES = *~ $(DEPS) $(IMPORT_LIB) $(MIDDLE_IMPORT_LIB) $(FINAL_IMPORT_LIB)
+
+## Target information
+
+TARGET_STUBNAME=$(LAYOUT_STUBNAME)
+
+ifneq ($(ENABLE_STATIC),)
+TARGET = $(LIBDIR)/$(LIBSICU)$(TARGET_STUBNAME)$(ICULIBSUFFIX).$(A)
+endif
+
+ifneq ($(ENABLE_SHARED),)
+SO_TARGET = $(LIBDIR)/$(LIBICU)$(TARGET_STUBNAME)$(ICULIBSUFFIX).$(SO)
+ALL_SO_TARGETS = $(SO_TARGET) $(MIDDLE_SO_TARGET) $(FINAL_SO_TARGET) $(SHARED_OBJECT)
+
+ifeq ($(ENABLE_SO_VERSION_DATA),1)
+SO_VERSION_DATA = layout.res
+endif
+
+ifeq ($(OS390BATCH),1)
+BATCH_TARGET = $(BATCH_LAYOUT_TARGET)
+BATCH_LIBS = $(BATCH_LIBICUUC) -lm
+endif # OS390BATCH
+
+endif # ENABLE_SHARED
+
+ALL_TARGETS = $(TARGET) $(ALL_SO_TARGETS) $(BATCH_TARGET)
+
+DYNAMICCPPFLAGS = $(SHAREDLIBCPPFLAGS)
+DYNAMICCFLAGS = $(SHAREDLIBCFLAGS)
+DYNAMICCXXFLAGS = $(SHAREDLIBCXXFLAGS)
+CFLAGS += $(LIBCFLAGS)
+CXXFLAGS += $(LIBCXXFLAGS)
+
+CPPFLAGS += -I$(srcdir) -I$(srcdir)/.. -I$(top_srcdir)/common -I$(srcdir)/unicode $(LIBCPPFLAGS)
+DEFS += -DU_LAYOUT_IMPLEMENTATION
+LDFLAGS += $(LDFLAGSICULE)
+LIBS = $(LIBICUUC) $(DEFAULT_LIBS)
+
+OBJECTS = LEFontInstance.o \
+OpenTypeLayoutEngine.o \
+ThaiLayoutEngine.o \
+ThaiShaping.o \
+ThaiStateTables.o \
+ArabicLayoutEngine.o \
+GXLayoutEngine.o \
+HanLayoutEngine.o \
+IndicLayoutEngine.o \
+LayoutEngine.o \
+ContextualGlyphSubstProc.o \
+IndicRearrangementProcessor.o \
+LigatureSubstProc.o \
+LookupTables.o \
+MorphTables.o \
+NonContextualGlyphSubstProc.o \
+SegmentArrayProcessor.o \
+SegmentSingleProcessor.o \
+SimpleArrayProcessor.o \
+SingleTableProcessor.o \
+StateTableProcessor.o \
+SubtableProcessor.o \
+TrimmedArrayProcessor.o \
+AlternateSubstSubtables.o \
+AnchorTables.o \
+ArabicShaping.o \
+CanonData.o \
+CanonShaping.o \
+ClassDefinitionTables.o \
+ContextualSubstSubtables.o \
+CoverageTables.o \
+CursiveAttachmentSubtables.o \
+DeviceTables.o \
+ExtensionSubtables.o \
+Features.o \
+GDEFMarkFilter.o \
+GlyphDefinitionTables.o \
+GlyphIterator.o \
+GlyphLookupTables.o \
+GlyphPosnLookupProc.o \
+GlyphPositionAdjustments.o \
+GlyphPositioningTables.o \
+GlyphSubstLookupProc.o \
+GlyphSubstitutionTables.o \
+IndicClassTables.o \
+IndicReordering.o \
+LEInsertionList.o \
+LEGlyphStorage.o \
+LigatureSubstSubtables.o \
+LookupProcessor.o \
+Lookups.o \
+MarkArrays.o \
+MarkToBasePosnSubtables.o \
+MarkToLigaturePosnSubtables.o \
+MarkToMarkPosnSubtables.o \
+MirroredCharData.o \
+MPreFixups.o \
+MultipleSubstSubtables.o \
+OpenTypeUtilities.o \
+PairPositioningSubtables.o \
+ScriptAndLanguage.o \
+ScriptAndLanguageTags.o \
+ShapingTypeData.o \
+SinglePositioningSubtables.o \
+SingleSubstitutionSubtables.o \
+SubstitutionLookups.o \
+ValueRecords.o \
+KhmerLayoutEngine.o \
+KhmerReordering.o \
+TibetanLayoutEngine.o \
+TibetanReordering.o \
+HangulLayoutEngine.o \
+KernTable.o \
+loengine.o
+
+## Header files to install
+HEADERS= $(srcdir)/LayoutEngine.h $(srcdir)/LE*.h $(srcdir)/loengine.h
+
+STATIC_OBJECTS = $(OBJECTS:.o=.$(STATIC_O))
+
+DEPS = $(OBJECTS:.o=.d)
+
+-include Makefile.local
+
+## List of phony targets
+.PHONY : all all-local install install-local clean clean-local \
+distclean distclean-local install-library install-headers dist \
+dist-local check check-local check-exhaustive
+
+## Clear suffix list
+.SUFFIXES :
+
+## List of standard targets
+all: all-local
+install: install-local
+clean: clean-local
+distclean : distclean-local
+dist: dist-local
+check: all check-local
+
+check-exhaustive: check
+
+all-local: $(ALL_TARGETS)
+
+install-local: install-headers install-library
+
+install-library: all-local
+ $(MKINSTALLDIRS) $(DESTDIR)$(libdir)
+ifneq ($(ENABLE_STATIC),)
+ $(INSTALL-L) $(TARGET) $(DESTDIR)$(libdir)
+endif
+ifneq ($(ENABLE_SHARED),)
+ $(INSTALL-L) $(FINAL_SO_TARGET) $(DESTDIR)$(libdir)
+ifneq ($(FINAL_SO_TARGET),$(SO_TARGET))
+ cd $(DESTDIR)$(libdir) && $(RM) $(notdir $(SO_TARGET)) && ln -s $(notdir $(FINAL_SO_TARGET)) $(notdir $(SO_TARGET))
+ifneq ($(FINAL_SO_TARGET),$(MIDDLE_SO_TARGET))
+ cd $(DESTDIR)$(libdir) && $(RM) $(notdir $(MIDDLE_SO_TARGET)) && ln -s $(notdir $(FINAL_SO_TARGET)) $(notdir $(MIDDLE_SO_TARGET))
+endif
+endif
+ifneq ($(IMPORT_LIB_EXT),)
+ $(INSTALL-L) $(FINAL_IMPORT_LIB) $(DESTDIR)$(libdir)
+ifneq ($(IMPORT_LIB),$(FINAL_IMPORT_LIB))
+ cd $(DESTDIR)$(libdir) && $(RM) $(notdir $(IMPORT_LIB)) && ln -s $(notdir $(FINAL_IMPORT_LIB)) $(notdir $(IMPORT_LIB))
+endif
+ifneq ($(MIDDLE_IMPORT_LIB),$(FINAL_IMPORT_LIB))
+ cd $(DESTDIR)$(libdir) && $(RM) $(notdir $(MIDDLE_IMPORT_LIB)) && ln -s $(notdir $(FINAL_IMPORT_LIB)) $(notdir $(MIDDLE_IMPORT_LIB))
+endif
+endif
+endif
+
+install-headers:
+ $(MKINSTALLDIRS) $(DESTDIR)$(includedir)/layout
+ @for file in $(HEADERS); do \
+ echo "$(INSTALL_DATA) $$file $(DESTDIR)$(includedir)/layout"; \
+ $(INSTALL_DATA) $$file $(DESTDIR)$(includedir)/layout || exit; \
+ done
+
+dist-local:
+
+clean-local:
+ test -z "$(CLEANFILES)" || $(RMV) $(CLEANFILES)
+ $(RMV) $(OBJECTS) $(STATIC_OBJECTS) $(ALL_TARGETS) $(SO_VERSION_DATA)
+
+distclean-local: clean-local
+ $(RMV) Makefile
+
+check-local:
+
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ cd $(top_builddir) \
+ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
+ifneq ($(ENABLE_STATIC),)
+$(TARGET): $(STATIC_OBJECTS)
+ $(AR) $(ARFLAGS) $(AR_OUTOPT)$@ $^
+ $(RANLIB) $@
+endif
+
+ifneq ($(ENABLE_SHARED),)
+$(SHARED_OBJECT): $(OBJECTS) $(SO_VERSION_DATA)
+ $(SHLIB.cc) $(LD_SONAME) $(OUTOPT)$@ $^ $(LIBS)
+ifeq ($(ENABLE_RPATH),YES)
+ifneq ($(wildcard $(libdir)/$(MIDDLE_SO_TARGET)),)
+ $(warning RPATH warning: --enable-rpath means test programs may use existing $(libdir)/$(MIDDLE_SO_TARGET))
+endif
+endif
+
+ifeq ($(OS390BATCH),1)
+$(BATCH_TARGET):$(OBJECTS)
+ $(SHLIB.cc) $(LD_SONAME) $(OUTOPT)$@ $^ $(BATCH_LIBS)
+endif # OS390BATCH
+endif # ENABLE_SHARED
+
+ifeq (,$(MAKECMDGOALS))
+-include $(DEPS)
+else
+ifneq ($(patsubst %clean,,$(MAKECMDGOALS)),)
+-include $(DEPS)
+endif
+endif
+
diff --git a/Build/source/libs/icu/icu-50.1/layout/MarkArrays.cpp b/Build/source/libs/icu/icu-50.1/layout/MarkArrays.cpp
new file mode 100644
index 00000000000..47a06251e6d
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/MarkArrays.cpp
@@ -0,0 +1,39 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
+ *
+ */
+
+#include "LETypes.h"
+#include "LEFontInstance.h"
+#include "OpenTypeTables.h"
+#include "AnchorTables.h"
+#include "MarkArrays.h"
+#include "LESwaps.h"
+
+U_NAMESPACE_BEGIN
+
+le_int32 MarkArray::getMarkClass(LEGlyphID glyphID, le_int32 coverageIndex, const LEFontInstance *fontInstance,
+ LEPoint &anchor) const
+{
+ le_int32 markClass = -1;
+
+ if (coverageIndex >= 0) {
+ le_uint16 mCount = SWAPW(markCount);
+
+ if (coverageIndex < mCount) {
+ const MarkRecord *markRecord = &markRecordArray[coverageIndex];
+ Offset anchorTableOffset = SWAPW(markRecord->markAnchorTableOffset);
+ const AnchorTable *anchorTable = (AnchorTable *) ((char *) this + anchorTableOffset);
+
+ anchorTable->getAnchor(glyphID, fontInstance, anchor);
+ markClass = SWAPW(markRecord->markClass);
+ }
+
+ // XXXX If we get here, the table is mal-formed
+ }
+
+ return markClass;
+}
+
+U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-50.1/layout/MarkArrays.h b/Build/source/libs/icu/icu-50.1/layout/MarkArrays.h
new file mode 100644
index 00000000000..66dca2ae688
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/MarkArrays.h
@@ -0,0 +1,39 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
+ *
+ */
+
+#ifndef __MARKARRAYS_H
+#define __MARKARRAYS_H
+
+/**
+ * \file
+ * \internal
+ */
+
+#include "LETypes.h"
+#include "LEFontInstance.h"
+#include "OpenTypeTables.h"
+
+U_NAMESPACE_BEGIN
+
+struct MarkRecord
+{
+ le_uint16 markClass;
+ Offset markAnchorTableOffset;
+};
+
+struct MarkArray
+{
+ le_uint16 markCount;
+ MarkRecord markRecordArray[ANY_NUMBER];
+
+ le_int32 getMarkClass(LEGlyphID glyphID, le_int32 coverageIndex, const LEFontInstance *fontInstance,
+ LEPoint &anchor) const;
+};
+
+U_NAMESPACE_END
+#endif
+
+
diff --git a/Build/source/libs/icu/icu-50.1/layout/MarkToBasePosnSubtables.cpp b/Build/source/libs/icu/icu-50.1/layout/MarkToBasePosnSubtables.cpp
new file mode 100644
index 00000000000..7711988081e
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/MarkToBasePosnSubtables.cpp
@@ -0,0 +1,115 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2010 - All Rights Reserved
+ *
+ */
+
+#include "LETypes.h"
+#include "LEFontInstance.h"
+#include "OpenTypeTables.h"
+#include "AnchorTables.h"
+#include "MarkArrays.h"
+#include "GlyphPositioningTables.h"
+#include "AttachmentPosnSubtables.h"
+#include "MarkToBasePosnSubtables.h"
+#include "GlyphIterator.h"
+#include "LESwaps.h"
+
+U_NAMESPACE_BEGIN
+
+LEGlyphID MarkToBasePositioningSubtable::findBaseGlyph(GlyphIterator *glyphIterator) const
+{
+ if (glyphIterator->prev()) {
+ return glyphIterator->getCurrGlyphID();
+ }
+
+ return 0xFFFF;
+}
+
+le_int32 MarkToBasePositioningSubtable::process(GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const
+{
+ LEGlyphID markGlyph = glyphIterator->getCurrGlyphID();
+ le_int32 markCoverage = getGlyphCoverage((LEGlyphID) markGlyph);
+
+ if (markCoverage < 0) {
+ // markGlyph isn't a covered mark glyph
+ return 0;
+ }
+
+ LEPoint markAnchor;
+ const MarkArray *markArray = (const MarkArray *) ((char *) this + SWAPW(markArrayOffset));
+ le_int32 markClass = markArray->getMarkClass(markGlyph, markCoverage, fontInstance, markAnchor);
+ le_uint16 mcCount = SWAPW(classCount);
+
+ if (markClass < 0 || markClass >= mcCount) {
+ // markGlyph isn't in the mark array or its
+ // mark class is too big. The table is mal-formed!
+ return 0;
+ }
+
+ // FIXME: We probably don't want to find a base glyph before a previous ligature...
+ GlyphIterator baseIterator(*glyphIterator, (le_uint16) (lfIgnoreMarks /*| lfIgnoreLigatures*/));
+ LEGlyphID baseGlyph = findBaseGlyph(&baseIterator);
+ le_int32 baseCoverage = getBaseCoverage((LEGlyphID) baseGlyph);
+ const BaseArray *baseArray = (const BaseArray *) ((char *) this + SWAPW(baseArrayOffset));
+ le_uint16 baseCount = SWAPW(baseArray->baseRecordCount);
+
+ if (baseCoverage < 0 || baseCoverage >= baseCount) {
+ // The base glyph isn't covered, or the coverage
+ // index is too big. The latter means that the
+ // table is mal-formed...
+ return 0;
+ }
+
+ const BaseRecord *baseRecord = &baseArray->baseRecordArray[baseCoverage * mcCount];
+ Offset anchorTableOffset = SWAPW(baseRecord->baseAnchorTableOffsetArray[markClass]);
+ const AnchorTable *anchorTable = (const AnchorTable *) ((char *) baseArray + anchorTableOffset);
+ LEPoint baseAnchor, markAdvance, pixels;
+
+ if (anchorTableOffset == 0) {
+ // this means the table is mal-formed...
+ glyphIterator->setCurrGlyphBaseOffset(baseIterator.getCurrStreamPosition());
+ return 0;
+ }
+
+ anchorTable->getAnchor(baseGlyph, fontInstance, baseAnchor);
+
+ fontInstance->getGlyphAdvance(markGlyph, pixels);
+ fontInstance->pixelsToUnits(pixels, markAdvance);
+
+ float anchorDiffX = baseAnchor.fX - markAnchor.fX;
+ float anchorDiffY = baseAnchor.fY - markAnchor.fY;
+
+ glyphIterator->setCurrGlyphBaseOffset(baseIterator.getCurrStreamPosition());
+
+ if (glyphIterator->isRightToLeft()) {
+ // FIXME: need similar patch to below; also in MarkToLigature and MarkToMark
+ // (is there a better way to approach this for all the cases?)
+ glyphIterator->setCurrGlyphPositionAdjustment(anchorDiffX, anchorDiffY, -markAdvance.fX, -markAdvance.fY);
+ } else {
+ LEPoint baseAdvance;
+
+ fontInstance->getGlyphAdvance(baseGlyph, pixels);
+
+ //JK: adjustment needs to account for non-zero advance of any marks between base glyph and current mark
+ GlyphIterator gi(baseIterator, (le_uint16)0); // copy of baseIterator that won't ignore marks
+ gi.next(); // point beyond the base glyph
+ while (gi.getCurrStreamPosition() < glyphIterator->getCurrStreamPosition()) { // for all intervening glyphs (marks)...
+ LEGlyphID otherMark = gi.getCurrGlyphID();
+ LEPoint px;
+ fontInstance->getGlyphAdvance(otherMark, px); // get advance, in case it's non-zero
+ pixels.fX += px.fX; // and add that to the base glyph's advance
+ pixels.fY += px.fY;
+ gi.next();
+ }
+ // end of JK patch
+
+ fontInstance->pixelsToUnits(pixels, baseAdvance);
+
+ glyphIterator->setCurrGlyphPositionAdjustment(anchorDiffX - baseAdvance.fX, anchorDiffY - baseAdvance.fY, -markAdvance.fX, -markAdvance.fY);
+ }
+
+ return 1;
+}
+
+U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-50.1/layout/MarkToBasePosnSubtables.h b/Build/source/libs/icu/icu-50.1/layout/MarkToBasePosnSubtables.h
new file mode 100644
index 00000000000..aa7a0a1262c
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/MarkToBasePosnSubtables.h
@@ -0,0 +1,43 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
+ *
+ */
+
+#ifndef __MARKTOBASEPOSITIONINGSUBTABLES_H
+#define __MARKTOBASEPOSITIONINGSUBTABLES_H
+
+/**
+ * \file
+ * \internal
+ */
+
+#include "LETypes.h"
+#include "LEFontInstance.h"
+#include "OpenTypeTables.h"
+#include "GlyphPositioningTables.h"
+#include "AttachmentPosnSubtables.h"
+#include "GlyphIterator.h"
+
+U_NAMESPACE_BEGIN
+
+struct MarkToBasePositioningSubtable : AttachmentPositioningSubtable
+{
+ le_int32 process(GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const;
+ LEGlyphID findBaseGlyph(GlyphIterator *glyphIterator) const;
+};
+
+struct BaseRecord
+{
+ Offset baseAnchorTableOffsetArray[ANY_NUMBER];
+};
+
+struct BaseArray
+{
+ le_int16 baseRecordCount;
+ BaseRecord baseRecordArray[ANY_NUMBER];
+};
+
+U_NAMESPACE_END
+#endif
+
diff --git a/Build/source/libs/icu/icu-50.1/layout/MarkToLigaturePosnSubtables.cpp b/Build/source/libs/icu/icu-50.1/layout/MarkToLigaturePosnSubtables.cpp
new file mode 100644
index 00000000000..e247e4e5892
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/MarkToLigaturePosnSubtables.cpp
@@ -0,0 +1,103 @@
+/*
+ * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
+ *
+ */
+
+#include "LETypes.h"
+#include "LEFontInstance.h"
+#include "OpenTypeTables.h"
+#include "AnchorTables.h"
+#include "MarkArrays.h"
+#include "GlyphPositioningTables.h"
+#include "AttachmentPosnSubtables.h"
+#include "MarkToLigaturePosnSubtables.h"
+#include "GlyphIterator.h"
+#include "LESwaps.h"
+
+U_NAMESPACE_BEGIN
+
+LEGlyphID MarkToLigaturePositioningSubtable::findLigatureGlyph(GlyphIterator *glyphIterator) const
+{
+ if (glyphIterator->prev()) {
+ return glyphIterator->getCurrGlyphID();
+ }
+
+ return 0xFFFF;
+}
+
+le_int32 MarkToLigaturePositioningSubtable::process(GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const
+{
+ LEGlyphID markGlyph = glyphIterator->getCurrGlyphID();
+ le_int32 markCoverage = getGlyphCoverage((LEGlyphID) markGlyph);
+
+ if (markCoverage < 0) {
+ // markGlyph isn't a covered mark glyph
+ return 0;
+ }
+
+ LEPoint markAnchor;
+ const MarkArray *markArray = (const MarkArray *) ((char *) this + SWAPW(markArrayOffset));
+ le_int32 markClass = markArray->getMarkClass(markGlyph, markCoverage, fontInstance, markAnchor);
+ le_uint16 mcCount = SWAPW(classCount);
+
+ if (markClass < 0 || markClass >= mcCount) {
+ // markGlyph isn't in the mark array or its
+ // mark class is too big. The table is mal-formed!
+ return 0;
+ }
+
+ // FIXME: we probably don't want to find a ligature before a previous base glyph...
+ GlyphIterator ligatureIterator(*glyphIterator, (le_uint16) (lfIgnoreMarks /*| lfIgnoreBaseGlyphs*/));
+ LEGlyphID ligatureGlyph = findLigatureGlyph(&ligatureIterator);
+ le_int32 ligatureCoverage = getBaseCoverage((LEGlyphID) ligatureGlyph);
+ const LigatureArray *ligatureArray = (const LigatureArray *) ((char *) this + SWAPW(baseArrayOffset));
+ le_uint16 ligatureCount = SWAPW(ligatureArray->ligatureCount);
+
+ if (ligatureCoverage < 0 || ligatureCoverage >= ligatureCount) {
+ // The ligature glyph isn't covered, or the coverage
+ // index is too big. The latter means that the
+ // table is mal-formed...
+ return 0;
+ }
+
+ le_int32 markPosition = glyphIterator->getCurrStreamPosition();
+ Offset ligatureAttachOffset = SWAPW(ligatureArray->ligatureAttachTableOffsetArray[ligatureCoverage]);
+ const LigatureAttachTable *ligatureAttachTable = (const LigatureAttachTable *) ((char *) ligatureArray + ligatureAttachOffset);
+ le_int32 componentCount = SWAPW(ligatureAttachTable->componentCount);
+ le_int32 component = ligatureIterator.getMarkComponent(markPosition);
+
+ if (component >= componentCount) {
+ // should really just bail at this point...
+ component = componentCount - 1;
+ }
+
+ const ComponentRecord *componentRecord = &ligatureAttachTable->componentRecordArray[component * mcCount];
+ Offset anchorTableOffset = SWAPW(componentRecord->ligatureAnchorTableOffsetArray[markClass]);
+ const AnchorTable *anchorTable = (const AnchorTable *) ((char *) ligatureAttachTable + anchorTableOffset);
+ LEPoint ligatureAnchor, markAdvance, pixels;
+
+ anchorTable->getAnchor(ligatureGlyph, fontInstance, ligatureAnchor);
+
+ fontInstance->getGlyphAdvance(markGlyph, pixels);
+ fontInstance->pixelsToUnits(pixels, markAdvance);
+
+ float anchorDiffX = ligatureAnchor.fX - markAnchor.fX;
+ float anchorDiffY = ligatureAnchor.fY - markAnchor.fY;
+
+ glyphIterator->setCurrGlyphBaseOffset(ligatureIterator.getCurrStreamPosition());
+
+ if (glyphIterator->isRightToLeft()) {
+ glyphIterator->setCurrGlyphPositionAdjustment(anchorDiffX, anchorDiffY, -markAdvance.fX, -markAdvance.fY);
+ } else {
+ LEPoint ligatureAdvance;
+
+ fontInstance->getGlyphAdvance(ligatureGlyph, pixels);
+ fontInstance->pixelsToUnits(pixels, ligatureAdvance);
+
+ glyphIterator->setCurrGlyphPositionAdjustment(anchorDiffX - ligatureAdvance.fX, anchorDiffY - ligatureAdvance.fY, -markAdvance.fX, -markAdvance.fY);
+ }
+
+ return 1;
+}
+
+U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-50.1/layout/MarkToLigaturePosnSubtables.h b/Build/source/libs/icu/icu-50.1/layout/MarkToLigaturePosnSubtables.h
new file mode 100644
index 00000000000..b8e34d1dd78
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/MarkToLigaturePosnSubtables.h
@@ -0,0 +1,49 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
+ *
+ */
+
+#ifndef __MARKTOLIGATUREPOSITIONINGSUBTABLES_H
+#define __MARKTOLIGATUREPOSITIONINGSUBTABLES_H
+
+/**
+ * \file
+ * \internal
+ */
+
+#include "LETypes.h"
+#include "LEFontInstance.h"
+#include "OpenTypeTables.h"
+#include "GlyphPositioningTables.h"
+#include "AttachmentPosnSubtables.h"
+#include "GlyphIterator.h"
+
+U_NAMESPACE_BEGIN
+
+struct MarkToLigaturePositioningSubtable : AttachmentPositioningSubtable
+{
+ le_int32 process(GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const;
+ LEGlyphID findLigatureGlyph(GlyphIterator *glyphIterator) const;
+};
+
+struct ComponentRecord
+{
+ Offset ligatureAnchorTableOffsetArray[ANY_NUMBER];
+};
+
+struct LigatureAttachTable
+{
+ le_uint16 componentCount;
+ ComponentRecord componentRecordArray[ANY_NUMBER];
+};
+
+struct LigatureArray
+{
+ le_uint16 ligatureCount;
+ Offset ligatureAttachTableOffsetArray[ANY_NUMBER];
+};
+
+U_NAMESPACE_END
+#endif
+
diff --git a/Build/source/libs/icu/icu-50.1/layout/MarkToMarkPosnSubtables.cpp b/Build/source/libs/icu/icu-50.1/layout/MarkToMarkPosnSubtables.cpp
new file mode 100644
index 00000000000..3f571f5e39c
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/MarkToMarkPosnSubtables.cpp
@@ -0,0 +1,97 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
+ *
+ */
+
+#include "LETypes.h"
+#include "LEFontInstance.h"
+#include "OpenTypeTables.h"
+#include "AnchorTables.h"
+#include "MarkArrays.h"
+#include "GlyphPositioningTables.h"
+#include "AttachmentPosnSubtables.h"
+#include "MarkToMarkPosnSubtables.h"
+#include "GlyphIterator.h"
+#include "LESwaps.h"
+
+U_NAMESPACE_BEGIN
+
+LEGlyphID MarkToMarkPositioningSubtable::findMark2Glyph(GlyphIterator *glyphIterator) const
+{
+ if (glyphIterator->findMark2Glyph()) {
+ return glyphIterator->getCurrGlyphID();
+ }
+
+ return 0xFFFF;
+}
+
+le_int32 MarkToMarkPositioningSubtable::process(GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const
+{
+ LEGlyphID markGlyph = glyphIterator->getCurrGlyphID();
+ le_int32 markCoverage = getGlyphCoverage((LEGlyphID) markGlyph);
+
+ if (markCoverage < 0) {
+ // markGlyph isn't a covered mark glyph
+ return 0;
+ }
+
+ LEPoint markAnchor;
+ const MarkArray *markArray = (const MarkArray *) ((char *) this + SWAPW(markArrayOffset));
+ le_int32 markClass = markArray->getMarkClass(markGlyph, markCoverage, fontInstance, markAnchor);
+ le_uint16 mcCount = SWAPW(classCount);
+
+ if (markClass < 0 || markClass >= mcCount) {
+ // markGlyph isn't in the mark array or its
+ // mark class is too big. The table is mal-formed!
+ return 0;
+ }
+
+ GlyphIterator mark2Iterator(*glyphIterator);
+ LEGlyphID mark2Glyph = findMark2Glyph(&mark2Iterator);
+ le_int32 mark2Coverage = getBaseCoverage((LEGlyphID) mark2Glyph);
+ const Mark2Array *mark2Array = (const Mark2Array *) ((char *) this + SWAPW(baseArrayOffset));
+ le_uint16 mark2Count = SWAPW(mark2Array->mark2RecordCount);
+
+ if (mark2Coverage < 0 || mark2Coverage >= mark2Count) {
+ // The mark2 glyph isn't covered, or the coverage
+ // index is too big. The latter means that the
+ // table is mal-formed...
+ return 0;
+ }
+
+ const Mark2Record *mark2Record = &mark2Array->mark2RecordArray[mark2Coverage * mcCount];
+ Offset anchorTableOffset = SWAPW(mark2Record->mark2AnchorTableOffsetArray[markClass]);
+ const AnchorTable *anchorTable = (const AnchorTable *) ((char *) mark2Array + anchorTableOffset);
+ LEPoint mark2Anchor, markAdvance, pixels;
+
+ if (anchorTableOffset == 0) {
+ // this seems to mean that the marks don't attach...
+ return 0;
+ }
+
+ anchorTable->getAnchor(mark2Glyph, fontInstance, mark2Anchor);
+
+ fontInstance->getGlyphAdvance(markGlyph, pixels);
+ fontInstance->pixelsToUnits(pixels, markAdvance);
+
+ float anchorDiffX = mark2Anchor.fX - markAnchor.fX;
+ float anchorDiffY = mark2Anchor.fY - markAnchor.fY;
+
+ glyphIterator->setCurrGlyphBaseOffset(mark2Iterator.getCurrStreamPosition());
+
+ if (glyphIterator->isRightToLeft()) {
+ glyphIterator->setCurrGlyphPositionAdjustment(anchorDiffX, anchorDiffY, -markAdvance.fX, -markAdvance.fY);
+ } else {
+ LEPoint mark2Advance;
+
+ fontInstance->getGlyphAdvance(mark2Glyph, pixels);
+ fontInstance->pixelsToUnits(pixels, mark2Advance);
+
+ glyphIterator->setCurrGlyphPositionAdjustment(anchorDiffX - mark2Advance.fX, anchorDiffY - mark2Advance.fY, -markAdvance.fX, -markAdvance.fY);
+ }
+
+ return 1;
+}
+
+U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-50.1/layout/MarkToMarkPosnSubtables.h b/Build/source/libs/icu/icu-50.1/layout/MarkToMarkPosnSubtables.h
new file mode 100644
index 00000000000..746ace2946d
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/MarkToMarkPosnSubtables.h
@@ -0,0 +1,43 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
+ *
+ */
+
+#ifndef __MARKTOMARKPOSITIONINGSUBTABLES_H
+#define __MARKTOMARKPOSITIONINGSUBTABLES_H
+
+/**
+ * \file
+ * \internal
+ */
+
+#include "LETypes.h"
+#include "LEFontInstance.h"
+#include "OpenTypeTables.h"
+#include "GlyphPositioningTables.h"
+#include "AttachmentPosnSubtables.h"
+#include "GlyphIterator.h"
+
+U_NAMESPACE_BEGIN
+
+struct MarkToMarkPositioningSubtable : AttachmentPositioningSubtable
+{
+ le_int32 process(GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const;
+ LEGlyphID findMark2Glyph(GlyphIterator *glyphIterator) const;
+};
+
+struct Mark2Record
+{
+ Offset mark2AnchorTableOffsetArray[ANY_NUMBER];
+};
+
+struct Mark2Array
+{
+ le_uint16 mark2RecordCount;
+ Mark2Record mark2RecordArray[ANY_NUMBER];
+};
+
+U_NAMESPACE_END
+#endif
+
diff --git a/Build/source/libs/icu/icu-50.1/layout/MirroredCharData.cpp b/Build/source/libs/icu/icu-50.1/layout/MirroredCharData.cpp
new file mode 100644
index 00000000000..b813371708f
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/MirroredCharData.cpp
@@ -0,0 +1,108 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2005. All Rights Reserved.
+ *
+ * WARNING: THIS FILE IS MACHINE GENERATED. DO NOT HAND EDIT IT UNLESS
+ * YOU REALLY KNOW WHAT YOU'RE DOING.
+ *
+ * Generated on: 07/20/2005 10:43:59 AM PDT
+ */
+
+#include "LETypes.h"
+#include "DefaultCharMapper.h"
+
+U_NAMESPACE_BEGIN
+
+const LEUnicode32 DefaultCharMapper::mirroredChars[] = {
+ 0x0028, 0x0029, 0x003C, 0x003E, 0x005B, 0x005D, 0x007B, 0x007D,
+ 0x00AB, 0x00BB, 0x2039, 0x203A, 0x2045, 0x2046, 0x207D, 0x207E,
+ 0x208D, 0x208E, 0x2208, 0x2209, 0x220A, 0x220B, 0x220C, 0x220D,
+ 0x2215, 0x223C, 0x223D, 0x2243, 0x2252, 0x2253, 0x2254, 0x2255,
+ 0x2264, 0x2265, 0x2266, 0x2267, 0x2268, 0x2269, 0x226A, 0x226B,
+ 0x226E, 0x226F, 0x2270, 0x2271, 0x2272, 0x2273, 0x2274, 0x2275,
+ 0x2276, 0x2277, 0x2278, 0x2279, 0x227A, 0x227B, 0x227C, 0x227D,
+ 0x227E, 0x227F, 0x2280, 0x2281, 0x2282, 0x2283, 0x2284, 0x2285,
+ 0x2286, 0x2287, 0x2288, 0x2289, 0x228A, 0x228B, 0x228F, 0x2290,
+ 0x2291, 0x2292, 0x2298, 0x22A2, 0x22A3, 0x22A6, 0x22A8, 0x22A9,
+ 0x22AB, 0x22B0, 0x22B1, 0x22B2, 0x22B3, 0x22B4, 0x22B5, 0x22B6,
+ 0x22B7, 0x22C9, 0x22CA, 0x22CB, 0x22CC, 0x22CD, 0x22D0, 0x22D1,
+ 0x22D6, 0x22D7, 0x22D8, 0x22D9, 0x22DA, 0x22DB, 0x22DC, 0x22DD,
+ 0x22DE, 0x22DF, 0x22E0, 0x22E1, 0x22E2, 0x22E3, 0x22E4, 0x22E5,
+ 0x22E6, 0x22E7, 0x22E8, 0x22E9, 0x22EA, 0x22EB, 0x22EC, 0x22ED,
+ 0x22F0, 0x22F1, 0x22F2, 0x22F3, 0x22F4, 0x22F6, 0x22F7, 0x22FA,
+ 0x22FB, 0x22FC, 0x22FD, 0x22FE, 0x2308, 0x2309, 0x230A, 0x230B,
+ 0x2329, 0x232A, 0x2768, 0x2769, 0x276A, 0x276B, 0x276C, 0x276D,
+ 0x276E, 0x276F, 0x2770, 0x2771, 0x2772, 0x2773, 0x2774, 0x2775,
+ 0x27C3, 0x27C4, 0x27C5, 0x27C6, 0x27D5, 0x27D6, 0x27DD, 0x27DE,
+ 0x27E2, 0x27E3, 0x27E4, 0x27E5, 0x27E6, 0x27E7, 0x27E8, 0x27E9,
+ 0x27EA, 0x27EB, 0x2983, 0x2984, 0x2985, 0x2986, 0x2987, 0x2988,
+ 0x2989, 0x298A, 0x298B, 0x298C, 0x298D, 0x298E, 0x298F, 0x2990,
+ 0x2991, 0x2992, 0x2993, 0x2994, 0x2995, 0x2996, 0x2997, 0x2998,
+ 0x29B8, 0x29C0, 0x29C1, 0x29C4, 0x29C5, 0x29CF, 0x29D0, 0x29D1,
+ 0x29D2, 0x29D4, 0x29D5, 0x29D8, 0x29D9, 0x29DA, 0x29DB, 0x29F5,
+ 0x29F8, 0x29F9, 0x29FC, 0x29FD, 0x2A2B, 0x2A2C, 0x2A2D, 0x2A2E,
+ 0x2A34, 0x2A35, 0x2A3C, 0x2A3D, 0x2A64, 0x2A65, 0x2A79, 0x2A7A,
+ 0x2A7D, 0x2A7E, 0x2A7F, 0x2A80, 0x2A81, 0x2A82, 0x2A83, 0x2A84,
+ 0x2A8B, 0x2A8C, 0x2A91, 0x2A92, 0x2A93, 0x2A94, 0x2A95, 0x2A96,
+ 0x2A97, 0x2A98, 0x2A99, 0x2A9A, 0x2A9B, 0x2A9C, 0x2AA1, 0x2AA2,
+ 0x2AA6, 0x2AA7, 0x2AA8, 0x2AA9, 0x2AAA, 0x2AAB, 0x2AAC, 0x2AAD,
+ 0x2AAF, 0x2AB0, 0x2AB3, 0x2AB4, 0x2ABB, 0x2ABC, 0x2ABD, 0x2ABE,
+ 0x2ABF, 0x2AC0, 0x2AC1, 0x2AC2, 0x2AC3, 0x2AC4, 0x2AC5, 0x2AC6,
+ 0x2ACD, 0x2ACE, 0x2ACF, 0x2AD0, 0x2AD1, 0x2AD2, 0x2AD3, 0x2AD4,
+ 0x2AD5, 0x2AD6, 0x2ADE, 0x2AE3, 0x2AE4, 0x2AE5, 0x2AEC, 0x2AED,
+ 0x2AF7, 0x2AF8, 0x2AF9, 0x2AFA, 0x2E02, 0x2E03, 0x2E04, 0x2E05,
+ 0x2E09, 0x2E0A, 0x2E0C, 0x2E0D, 0x2E1C, 0x2E1D, 0x3008, 0x3009,
+ 0x300A, 0x300B, 0x300C, 0x300D, 0x300E, 0x300F, 0x3010, 0x3011,
+ 0x3014, 0x3015, 0x3016, 0x3017, 0x3018, 0x3019, 0x301A, 0x301B,
+ 0xFF08, 0xFF09, 0xFF1C, 0xFF1E, 0xFF3B, 0xFF3D, 0xFF5B, 0xFF5D,
+ 0xFF5F, 0xFF60, 0xFF62, 0xFF63
+};
+
+const LEUnicode32 DefaultCharMapper::srahCderorrim[] = {
+ 0x0029, 0x0028, 0x003E, 0x003C, 0x005D, 0x005B, 0x007D, 0x007B,
+ 0x00BB, 0x00AB, 0x203A, 0x2039, 0x2046, 0x2045, 0x207E, 0x207D,
+ 0x208E, 0x208D, 0x220B, 0x220C, 0x220D, 0x2208, 0x2209, 0x220A,
+ 0x29F5, 0x223D, 0x223C, 0x22CD, 0x2253, 0x2252, 0x2255, 0x2254,
+ 0x2265, 0x2264, 0x2267, 0x2266, 0x2269, 0x2268, 0x226B, 0x226A,
+ 0x226F, 0x226E, 0x2271, 0x2270, 0x2273, 0x2272, 0x2275, 0x2274,
+ 0x2277, 0x2276, 0x2279, 0x2278, 0x227B, 0x227A, 0x227D, 0x227C,
+ 0x227F, 0x227E, 0x2281, 0x2280, 0x2283, 0x2282, 0x2285, 0x2284,
+ 0x2287, 0x2286, 0x2289, 0x2288, 0x228B, 0x228A, 0x2290, 0x228F,
+ 0x2292, 0x2291, 0x29B8, 0x22A3, 0x22A2, 0x2ADE, 0x2AE4, 0x2AE3,
+ 0x2AE5, 0x22B1, 0x22B0, 0x22B3, 0x22B2, 0x22B5, 0x22B4, 0x22B7,
+ 0x22B6, 0x22CA, 0x22C9, 0x22CC, 0x22CB, 0x2243, 0x22D1, 0x22D0,
+ 0x22D7, 0x22D6, 0x22D9, 0x22D8, 0x22DB, 0x22DA, 0x22DD, 0x22DC,
+ 0x22DF, 0x22DE, 0x22E1, 0x22E0, 0x22E3, 0x22E2, 0x22E5, 0x22E4,
+ 0x22E7, 0x22E6, 0x22E9, 0x22E8, 0x22EB, 0x22EA, 0x22ED, 0x22EC,
+ 0x22F1, 0x22F0, 0x22FA, 0x22FB, 0x22FC, 0x22FD, 0x22FE, 0x22F2,
+ 0x22F3, 0x22F4, 0x22F6, 0x22F7, 0x2309, 0x2308, 0x230B, 0x230A,
+ 0x232A, 0x2329, 0x2769, 0x2768, 0x276B, 0x276A, 0x276D, 0x276C,
+ 0x276F, 0x276E, 0x2771, 0x2770, 0x2773, 0x2772, 0x2775, 0x2774,
+ 0x27C4, 0x27C3, 0x27C6, 0x27C5, 0x27D6, 0x27D5, 0x27DE, 0x27DD,
+ 0x27E3, 0x27E2, 0x27E5, 0x27E4, 0x27E7, 0x27E6, 0x27E9, 0x27E8,
+ 0x27EB, 0x27EA, 0x2984, 0x2983, 0x2986, 0x2985, 0x2988, 0x2987,
+ 0x298A, 0x2989, 0x298C, 0x298B, 0x2990, 0x298F, 0x298E, 0x298D,
+ 0x2992, 0x2991, 0x2994, 0x2993, 0x2996, 0x2995, 0x2998, 0x2997,
+ 0x2298, 0x29C1, 0x29C0, 0x29C5, 0x29C4, 0x29D0, 0x29CF, 0x29D2,
+ 0x29D1, 0x29D5, 0x29D4, 0x29D9, 0x29D8, 0x29DB, 0x29DA, 0x2215,
+ 0x29F9, 0x29F8, 0x29FD, 0x29FC, 0x2A2C, 0x2A2B, 0x2A2E, 0x2A2D,
+ 0x2A35, 0x2A34, 0x2A3D, 0x2A3C, 0x2A65, 0x2A64, 0x2A7A, 0x2A79,
+ 0x2A7E, 0x2A7D, 0x2A80, 0x2A7F, 0x2A82, 0x2A81, 0x2A84, 0x2A83,
+ 0x2A8C, 0x2A8B, 0x2A92, 0x2A91, 0x2A94, 0x2A93, 0x2A96, 0x2A95,
+ 0x2A98, 0x2A97, 0x2A9A, 0x2A99, 0x2A9C, 0x2A9B, 0x2AA2, 0x2AA1,
+ 0x2AA7, 0x2AA6, 0x2AA9, 0x2AA8, 0x2AAB, 0x2AAA, 0x2AAD, 0x2AAC,
+ 0x2AB0, 0x2AAF, 0x2AB4, 0x2AB3, 0x2ABC, 0x2ABB, 0x2ABE, 0x2ABD,
+ 0x2AC0, 0x2ABF, 0x2AC2, 0x2AC1, 0x2AC4, 0x2AC3, 0x2AC6, 0x2AC5,
+ 0x2ACE, 0x2ACD, 0x2AD0, 0x2ACF, 0x2AD2, 0x2AD1, 0x2AD4, 0x2AD3,
+ 0x2AD6, 0x2AD5, 0x22A6, 0x22A9, 0x22A8, 0x22AB, 0x2AED, 0x2AEC,
+ 0x2AF8, 0x2AF7, 0x2AFA, 0x2AF9, 0x2E03, 0x2E02, 0x2E05, 0x2E04,
+ 0x2E0A, 0x2E09, 0x2E0D, 0x2E0C, 0x2E1D, 0x2E1C, 0x3009, 0x3008,
+ 0x300B, 0x300A, 0x300D, 0x300C, 0x300F, 0x300E, 0x3011, 0x3010,
+ 0x3015, 0x3014, 0x3017, 0x3016, 0x3019, 0x3018, 0x301B, 0x301A,
+ 0xFF09, 0xFF08, 0xFF1E, 0xFF1C, 0xFF3D, 0xFF3B, 0xFF5D, 0xFF5B,
+ 0xFF60, 0xFF5F, 0xFF63, 0xFF62
+};
+
+const le_int32 DefaultCharMapper::mirroredCharsCount = 332;
+
+U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-50.1/layout/MorphStateTables.h b/Build/source/libs/icu/icu-50.1/layout/MorphStateTables.h
new file mode 100644
index 00000000000..a2e0b00b7fc
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/MorphStateTables.h
@@ -0,0 +1,28 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
+ *
+ */
+
+#ifndef __MORPHSTATETABLES_H
+#define __MORPHSTATETABLES_H
+
+/**
+ * \file
+ * \internal
+ */
+
+#include "LETypes.h"
+#include "LayoutTables.h"
+#include "MorphTables.h"
+#include "StateTables.h"
+
+U_NAMESPACE_BEGIN
+
+struct MorphStateTableHeader : MorphSubtableHeader
+{
+ StateTableHeader stHeader;
+};
+
+U_NAMESPACE_END
+#endif
diff --git a/Build/source/libs/icu/icu-50.1/layout/MorphTables.cpp b/Build/source/libs/icu/icu-50.1/layout/MorphTables.cpp
new file mode 100644
index 00000000000..9272cc3af3b
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/MorphTables.cpp
@@ -0,0 +1,96 @@
+/*
+ * %W% %W%
+ *
+ * (C) Copyright IBM Corp. 1998 - 2004 - All Rights Reserved
+ *
+ */
+
+
+#include "LETypes.h"
+#include "LayoutTables.h"
+#include "MorphTables.h"
+#include "SubtableProcessor.h"
+#include "IndicRearrangementProcessor.h"
+#include "ContextualGlyphSubstProc.h"
+#include "LigatureSubstProc.h"
+#include "NonContextualGlyphSubstProc.h"
+//#include "ContextualGlyphInsertionProcessor.h"
+#include "LEGlyphStorage.h"
+#include "LESwaps.h"
+
+U_NAMESPACE_BEGIN
+
+void MorphTableHeader::process(LEGlyphStorage &glyphStorage) const
+{
+ const ChainHeader *chainHeader = chains;
+ le_uint32 chainCount = SWAPL(this->nChains);
+ le_uint32 chain;
+
+ for (chain = 0; chain < chainCount; chain += 1) {
+ FeatureFlags defaultFlags = SWAPL(chainHeader->defaultFlags);
+ le_uint32 chainLength = SWAPL(chainHeader->chainLength);
+ le_int16 nFeatureEntries = SWAPW(chainHeader->nFeatureEntries);
+ le_int16 nSubtables = SWAPW(chainHeader->nSubtables);
+ const MorphSubtableHeader *subtableHeader =
+ (const MorphSubtableHeader *)&chainHeader->featureTable[nFeatureEntries];
+ le_int16 subtable;
+
+ for (subtable = 0; subtable < nSubtables; subtable += 1) {
+ le_int16 length = SWAPW(subtableHeader->length);
+ SubtableCoverage coverage = SWAPW(subtableHeader->coverage);
+ FeatureFlags subtableFeatures = SWAPL(subtableHeader->subtableFeatures);
+
+ // should check coverage more carefully...
+ if ((coverage & scfVertical) == 0 && (subtableFeatures & defaultFlags) != 0) {
+ subtableHeader->process(glyphStorage);
+ }
+
+ subtableHeader = (const MorphSubtableHeader *) ((char *)subtableHeader + length);
+ }
+
+ chainHeader = (const ChainHeader *)((char *)chainHeader + chainLength);
+ }
+}
+
+void MorphSubtableHeader::process(LEGlyphStorage &glyphStorage) const
+{
+ SubtableProcessor *processor = NULL;
+
+ switch (SWAPW(coverage) & scfTypeMask)
+ {
+ case mstIndicRearrangement:
+ processor = new IndicRearrangementProcessor(this);
+ break;
+
+ case mstContextualGlyphSubstitution:
+ processor = new ContextualGlyphSubstitutionProcessor(this);
+ break;
+
+ case mstLigatureSubstitution:
+ processor = new LigatureSubstitutionProcessor(this);
+ break;
+
+ case mstReservedUnused:
+ break;
+
+ case mstNonContextualGlyphSubstitution:
+ processor = NonContextualGlyphSubstitutionProcessor::createInstance(this);
+ break;
+
+ /*
+ case mstContextualGlyphInsertion:
+ processor = new ContextualGlyphInsertionProcessor(this);
+ break;
+ */
+
+ default:
+ break;
+ }
+
+ if (processor != NULL) {
+ processor->process(glyphStorage);
+ delete processor;
+ }
+}
+
+U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-50.1/layout/MorphTables.h b/Build/source/libs/icu/icu-50.1/layout/MorphTables.h
new file mode 100644
index 00000000000..8d198cf41fe
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/MorphTables.h
@@ -0,0 +1,85 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
+ *
+ */
+
+#ifndef __MORPHTABLES_H
+#define __MORPHTABLES_H
+
+/**
+ * \file
+ * \internal
+ */
+
+#include "LETypes.h"
+#include "LayoutTables.h"
+
+U_NAMESPACE_BEGIN
+
+class LEGlyphStorage;
+
+typedef le_uint32 FeatureFlags;
+
+typedef le_int16 FeatureType;
+typedef le_int16 FeatureSetting;
+
+struct FeatureTableEntry
+{
+ FeatureType featureType;
+ FeatureSetting featureSetting;
+ FeatureFlags enableFlags;
+ FeatureFlags disableFlags;
+};
+
+struct ChainHeader
+{
+ FeatureFlags defaultFlags;
+ le_uint32 chainLength;
+ le_int16 nFeatureEntries;
+ le_int16 nSubtables;
+ FeatureTableEntry featureTable[ANY_NUMBER];
+};
+
+struct MorphTableHeader
+{
+ le_int32 version;
+ le_uint32 nChains;
+ ChainHeader chains[ANY_NUMBER];
+
+ void process(LEGlyphStorage &glyphStorage) const;
+};
+
+typedef le_int16 SubtableCoverage;
+
+enum SubtableCoverageFlags
+{
+ scfVertical = 0x8000,
+ scfReverse = 0x4000,
+ scfIgnoreVt = 0x2000,
+ scfReserved = 0x1FF8,
+ scfTypeMask = 0x0007
+};
+
+enum MorphSubtableType
+{
+ mstIndicRearrangement = 0,
+ mstContextualGlyphSubstitution = 1,
+ mstLigatureSubstitution = 2,
+ mstReservedUnused = 3,
+ mstNonContextualGlyphSubstitution = 4,
+ mstContextualGlyphInsertion = 5
+};
+
+struct MorphSubtableHeader
+{
+ le_int16 length;
+ SubtableCoverage coverage;
+ FeatureFlags subtableFeatures;
+
+ void process(LEGlyphStorage &glyphStorage) const;
+};
+
+U_NAMESPACE_END
+#endif
+
diff --git a/Build/source/libs/icu/icu-50.1/layout/MultipleSubstSubtables.cpp b/Build/source/libs/icu/icu-50.1/layout/MultipleSubstSubtables.cpp
new file mode 100644
index 00000000000..f017722f860
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/MultipleSubstSubtables.cpp
@@ -0,0 +1,95 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2008 - All Rights Reserved
+ *
+ */
+
+#include "LETypes.h"
+#include "LEGlyphFilter.h"
+#include "OpenTypeTables.h"
+#include "GlyphSubstitutionTables.h"
+#include "MultipleSubstSubtables.h"
+#include "GlyphIterator.h"
+#include "LESwaps.h"
+
+U_NAMESPACE_BEGIN
+
+le_uint32 MultipleSubstitutionSubtable::process(GlyphIterator *glyphIterator, LEErrorCode& success, const LEGlyphFilter *filter) const
+{
+ if (LE_FAILURE(success)) {
+ return 0;
+ }
+
+ LEGlyphID glyph = glyphIterator->getCurrGlyphID();
+
+ // If there's a filter, we only want to do the
+ // substitution if the *input* glyphs doesn't
+ // exist.
+ //
+ // FIXME: is this always the right thing to do?
+ // FIXME: should this only be done for a non-zero
+ // glyphCount?
+ if (filter != NULL && filter->accept(glyph)) {
+ return 0;
+ }
+
+ le_int32 coverageIndex = getGlyphCoverage(glyph);
+ le_uint16 seqCount = SWAPW(sequenceCount);
+
+ if (coverageIndex >= 0 && coverageIndex < seqCount) {
+ Offset sequenceTableOffset = SWAPW(sequenceTableOffsetArray[coverageIndex]);
+ const SequenceTable *sequenceTable = (const SequenceTable *) ((char *) this + sequenceTableOffset);
+ le_uint16 glyphCount = SWAPW(sequenceTable->glyphCount);
+
+ if (glyphCount == 0) {
+ glyphIterator->setCurrGlyphID(0xFFFF);
+ return 1;
+ } else if (glyphCount == 1) {
+ TTGlyphID substitute = SWAPW(sequenceTable->substituteArray[0]);
+
+ if (filter != NULL && ! filter->accept(LE_SET_GLYPH(glyph, substitute))) {
+ return 0;
+ }
+
+ glyphIterator->setCurrGlyphID(substitute);
+ return 1;
+ } else {
+ // If there's a filter, make sure all of the output glyphs
+ // exist.
+ if (filter != NULL) {
+ for (le_int32 i = 0; i < glyphCount; i += 1) {
+ TTGlyphID substitute = SWAPW(sequenceTable->substituteArray[i]);
+
+ if (! filter->accept(substitute)) {
+ return 0;
+ }
+ }
+ }
+
+ LEGlyphID *newGlyphs = glyphIterator->insertGlyphs(glyphCount, success);
+ if (LE_FAILURE(success)) {
+ return 0;
+ }
+
+ le_int32 insert = 0, direction = 1;
+
+ if (glyphIterator->isRightToLeft()) {
+ insert = glyphCount - 1;
+ direction = -1;
+ }
+
+ for (le_int32 i = 0; i < glyphCount; i += 1) {
+ TTGlyphID substitute = SWAPW(sequenceTable->substituteArray[i]);
+
+ newGlyphs[insert] = LE_SET_GLYPH(glyph, substitute);
+ insert += direction;
+ }
+
+ return 1;
+ }
+ }
+
+ return 0;
+}
+
+U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-50.1/layout/MultipleSubstSubtables.h b/Build/source/libs/icu/icu-50.1/layout/MultipleSubstSubtables.h
new file mode 100644
index 00000000000..1d6c978ad1e
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/MultipleSubstSubtables.h
@@ -0,0 +1,38 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2008 - All Rights Reserved
+ *
+ */
+
+#ifndef __MULTIPLESUBSTITUTIONSUBTABLES_H
+#define __MULTIPLESUBSTITUTIONSUBTABLES_H
+
+/**
+ * \file
+ * \internal
+ */
+
+#include "LETypes.h"
+#include "LEGlyphFilter.h"
+#include "OpenTypeTables.h"
+#include "GlyphSubstitutionTables.h"
+#include "GlyphIterator.h"
+
+U_NAMESPACE_BEGIN
+
+struct SequenceTable
+{
+ le_uint16 glyphCount;
+ TTGlyphID substituteArray[ANY_NUMBER];
+};
+
+struct MultipleSubstitutionSubtable : GlyphSubstitutionSubtable
+{
+ le_uint16 sequenceCount;
+ Offset sequenceTableOffsetArray[ANY_NUMBER];
+
+ le_uint32 process(GlyphIterator *glyphIterator, LEErrorCode& success, const LEGlyphFilter *filter = NULL) const;
+};
+
+U_NAMESPACE_END
+#endif
diff --git a/Build/source/libs/icu/icu-50.1/layout/NonContextualGlyphSubst.h b/Build/source/libs/icu/icu-50.1/layout/NonContextualGlyphSubst.h
new file mode 100644
index 00000000000..ef2543a1a87
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/NonContextualGlyphSubst.h
@@ -0,0 +1,30 @@
+/*
+ * %W% %E%
+ *
+ * (C) Copyright IBM Corp. 1998-2003 - All Rights Reserved
+ *
+ */
+
+#ifndef __NONCONTEXTUALGLYPHSUBSTITUTION_H
+#define __NONCONTEXTUALGLYPHSUBSTITUTION_H
+
+/**
+ * \file
+ * \internal
+ */
+
+#include "LETypes.h"
+#include "LayoutTables.h"
+#include "LookupTables.h"
+#include "MorphTables.h"
+
+U_NAMESPACE_BEGIN
+
+struct NonContextualGlyphSubstitutionHeader : MorphSubtableHeader
+{
+ LookupTable table;
+};
+
+U_NAMESPACE_END
+#endif
+
diff --git a/Build/source/libs/icu/icu-50.1/layout/NonContextualGlyphSubstProc.cpp b/Build/source/libs/icu/icu-50.1/layout/NonContextualGlyphSubstProc.cpp
new file mode 100644
index 00000000000..69c065b4848
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/NonContextualGlyphSubstProc.cpp
@@ -0,0 +1,60 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
+ *
+ */
+
+#include "LETypes.h"
+#include "MorphTables.h"
+#include "SubtableProcessor.h"
+#include "NonContextualGlyphSubst.h"
+#include "NonContextualGlyphSubstProc.h"
+#include "SimpleArrayProcessor.h"
+#include "SegmentSingleProcessor.h"
+#include "SegmentArrayProcessor.h"
+#include "SingleTableProcessor.h"
+#include "TrimmedArrayProcessor.h"
+#include "LESwaps.h"
+
+U_NAMESPACE_BEGIN
+
+NonContextualGlyphSubstitutionProcessor::NonContextualGlyphSubstitutionProcessor()
+{
+}
+
+NonContextualGlyphSubstitutionProcessor::NonContextualGlyphSubstitutionProcessor(const MorphSubtableHeader *morphSubtableHeader)
+ : SubtableProcessor(morphSubtableHeader)
+{
+}
+
+NonContextualGlyphSubstitutionProcessor::~NonContextualGlyphSubstitutionProcessor()
+{
+}
+
+SubtableProcessor *NonContextualGlyphSubstitutionProcessor::createInstance(const MorphSubtableHeader *morphSubtableHeader)
+{
+ const NonContextualGlyphSubstitutionHeader *header = (const NonContextualGlyphSubstitutionHeader *) morphSubtableHeader;
+
+ switch (SWAPW(header->table.format))
+ {
+ case ltfSimpleArray:
+ return new SimpleArrayProcessor(morphSubtableHeader);
+
+ case ltfSegmentSingle:
+ return new SegmentSingleProcessor(morphSubtableHeader);
+
+ case ltfSegmentArray:
+ return new SegmentArrayProcessor(morphSubtableHeader);
+
+ case ltfSingleTable:
+ return new SingleTableProcessor(morphSubtableHeader);
+
+ case ltfTrimmedArray:
+ return new TrimmedArrayProcessor(morphSubtableHeader);
+
+ default:
+ return NULL;
+ }
+}
+
+U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-50.1/layout/NonContextualGlyphSubstProc.h b/Build/source/libs/icu/icu-50.1/layout/NonContextualGlyphSubstProc.h
new file mode 100644
index 00000000000..4ce96cf3981
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/NonContextualGlyphSubstProc.h
@@ -0,0 +1,43 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
+ *
+ */
+
+#ifndef __NONCONTEXTUALGLYPHSUBSTITUTIONPROCESSOR_H
+#define __NONCONTEXTUALGLYPHSUBSTITUTIONPROCESSOR_H
+
+/**
+ * \file
+ * \internal
+ */
+
+#include "LETypes.h"
+#include "MorphTables.h"
+#include "SubtableProcessor.h"
+#include "NonContextualGlyphSubst.h"
+
+U_NAMESPACE_BEGIN
+
+class LEGlyphStorage;
+
+class NonContextualGlyphSubstitutionProcessor : public SubtableProcessor
+{
+public:
+ virtual void process(LEGlyphStorage &glyphStorage) = 0;
+
+ static SubtableProcessor *createInstance(const MorphSubtableHeader *morphSubtableHeader);
+
+protected:
+ NonContextualGlyphSubstitutionProcessor();
+ NonContextualGlyphSubstitutionProcessor(const MorphSubtableHeader *morphSubtableHeader);
+
+ virtual ~NonContextualGlyphSubstitutionProcessor();
+
+private:
+ NonContextualGlyphSubstitutionProcessor(const NonContextualGlyphSubstitutionProcessor &other); // forbid copying of this class
+ NonContextualGlyphSubstitutionProcessor &operator=(const NonContextualGlyphSubstitutionProcessor &other); // forbid copying of this class
+};
+
+U_NAMESPACE_END
+#endif
diff --git a/Build/source/libs/icu/icu-50.1/layout/OpenTypeLayoutEngine.cpp b/Build/source/libs/icu/icu-50.1/layout/OpenTypeLayoutEngine.cpp
new file mode 100644
index 00000000000..e41d5a526d3
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/OpenTypeLayoutEngine.cpp
@@ -0,0 +1,452 @@
+
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2012 - All Rights Reserved
+ *
+ */
+
+#include "LETypes.h"
+#include "LEScripts.h"
+#include "LELanguages.h"
+
+#include "LayoutEngine.h"
+#include "CanonShaping.h"
+#include "OpenTypeLayoutEngine.h"
+#include "ScriptAndLanguageTags.h"
+#include "CharSubstitutionFilter.h"
+
+#include "GlyphSubstitutionTables.h"
+#include "GlyphDefinitionTables.h"
+#include "GlyphPositioningTables.h"
+
+#include "LEGlyphStorage.h"
+#include "GlyphPositionAdjustments.h"
+
+#include "GDEFMarkFilter.h"
+
+#include "KernTable.h"
+
+U_NAMESPACE_BEGIN
+
+UOBJECT_DEFINE_RTTI_IMPLEMENTATION(OpenTypeLayoutEngine)
+
+#define ccmpFeatureTag LE_CCMP_FEATURE_TAG
+#define ligaFeatureTag LE_LIGA_FEATURE_TAG
+#define cligFeatureTag LE_CLIG_FEATURE_TAG
+#define kernFeatureTag LE_KERN_FEATURE_TAG
+#define markFeatureTag LE_MARK_FEATURE_TAG
+#define mkmkFeatureTag LE_MKMK_FEATURE_TAG
+#define loclFeatureTag LE_LOCL_FEATURE_TAG
+#define caltFeatureTag LE_CALT_FEATURE_TAG
+
+// 'dlig' not used at the moment
+#define dligFeatureTag 0x646C6967
+
+// 'palt'
+#define paltFeatureTag 0x70616C74
+
+#define ccmpFeatureMask 0x80000000UL
+#define ligaFeatureMask 0x40000000UL
+#define cligFeatureMask 0x20000000UL
+#define kernFeatureMask 0x10000000UL
+#define paltFeatureMask 0x08000000UL
+#define markFeatureMask 0x04000000UL
+#define mkmkFeatureMask 0x02000000UL
+#define loclFeatureMask 0x01000000UL
+#define caltFeatureMask 0x00800000UL
+
+#define minimalFeatures (ccmpFeatureMask | markFeatureMask | mkmkFeatureMask | loclFeatureMask | caltFeatureMask)
+#define ligaFeatures (ligaFeatureMask | cligFeatureMask | minimalFeatures)
+#define kernFeatures (kernFeatureMask | paltFeatureMask | minimalFeatures)
+#define kernAndLigaFeatures (ligaFeatures | kernFeatures)
+
+static const FeatureMap featureMap[] =
+{
+ {ccmpFeatureTag, ccmpFeatureMask},
+ {ligaFeatureTag, ligaFeatureMask},
+ {cligFeatureTag, cligFeatureMask},
+ {kernFeatureTag, kernFeatureMask},
+ {paltFeatureTag, paltFeatureMask},
+ {markFeatureTag, markFeatureMask},
+ {mkmkFeatureTag, mkmkFeatureMask},
+ {loclFeatureTag, loclFeatureMask},
+ {caltFeatureTag, caltFeatureMask}
+};
+
+static const le_int32 featureMapCount = LE_ARRAY_SIZE(featureMap);
+
+OpenTypeLayoutEngine::OpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
+ le_int32 typoFlags, const GlyphSubstitutionTableHeader *gsubTable, LEErrorCode &success)
+ : LayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, success), fFeatureMask(minimalFeatures),
+ fFeatureMap(featureMap), fFeatureParamList(NULL), fFeatureMapCount(featureMapCount), fFeatureOrder(FALSE),
+ fGSUBTable(gsubTable), fGDEFTable(NULL), fGPOSTable(NULL), fSubstitutionFilter(NULL)
+{
+ static const le_uint32 gdefTableTag = LE_GDEF_TABLE_TAG;
+ static const le_uint32 gposTableTag = LE_GPOS_TABLE_TAG;
+ const GlyphPositioningTableHeader *gposTable = (const GlyphPositioningTableHeader *) getFontTable(gposTableTag);
+
+ // todo: switch to more flags and bitfield rather than list of feature tags?
+ switch (typoFlags & ~0x80000000L) {
+ case 0: break; // default
+ case 1: fFeatureMask = kernFeatures; break;
+ case 2: fFeatureMask = ligaFeatures; break;
+ case 3: fFeatureMask = kernAndLigaFeatures; break;
+ default: break;
+ }
+
+ if (typoFlags & 0x80000000L) {
+ fSubstitutionFilter = new CharSubstitutionFilter(fontInstance);
+ }
+
+ setScriptAndLanguageTags();
+
+ fGDEFTable = (const GlyphDefinitionTableHeader *) getFontTable(gdefTableTag);
+
+// JK patch, 2008-05-30 - see Sinhala bug report and LKLUG font
+// if (gposTable != NULL && gposTable->coversScriptAndLanguage(fScriptTag, fLangSysTag)) {
+ if (gposTable != NULL && gposTable->coversScript(fScriptTag)) {
+ fGPOSTable = gposTable;
+ }
+}
+
+void OpenTypeLayoutEngine::reset()
+{
+ // NOTE: if we're called from
+ // the destructor, LayoutEngine;:reset()
+ // will have been called already by
+ // LayoutEngine::~LayoutEngine()
+ LayoutEngine::reset();
+}
+
+OpenTypeLayoutEngine::OpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
+ le_int32 typoFlags, LEErrorCode &success)
+ : LayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, success), fFeatureOrder(FALSE),
+ fGSUBTable(NULL), fGDEFTable(NULL), fGPOSTable(NULL), fSubstitutionFilter(NULL)
+{
+ setScriptAndLanguageTags();
+}
+
+OpenTypeLayoutEngine::~OpenTypeLayoutEngine()
+{
+ if (fTypoFlags & 0x80000000L) {
+ delete fSubstitutionFilter;
+ }
+
+ reset();
+}
+
+LETag OpenTypeLayoutEngine::getScriptTag(le_int32 scriptCode)
+{
+ if (scriptCode < 0 || scriptCode >= scriptCodeCount) {
+ return 0xFFFFFFFF;
+ }
+ return scriptTags[scriptCode];
+}
+
+LETag OpenTypeLayoutEngine::getV2ScriptTag(le_int32 scriptCode)
+{
+ switch (scriptCode) {
+ case bengScriptCode : return bng2ScriptTag;
+ case devaScriptCode : return dev2ScriptTag;
+ case gujrScriptCode : return gjr2ScriptTag;
+ case guruScriptCode : return gur2ScriptTag;
+ case kndaScriptCode : return knd2ScriptTag;
+ case mlymScriptCode : return mlm2ScriptTag;
+ case oryaScriptCode : return ory2ScriptTag;
+ case tamlScriptCode : return tml2ScriptTag;
+ case teluScriptCode : return tel2ScriptTag;
+ default: return nullScriptTag;
+ }
+}
+
+LETag OpenTypeLayoutEngine::getLangSysTag(le_int32 languageCode)
+{
+ if (languageCode < 0 || languageCode >= languageCodeCount) {
+ return 0xFFFFFFFF;
+ }
+
+ return languageTags[languageCode];
+}
+
+void OpenTypeLayoutEngine::setScriptAndLanguageTags()
+{
+ fScriptTag = getScriptTag(fScriptCode);
+ fScriptTagV2 = getV2ScriptTag(fScriptCode);
+ fLangSysTag = getLangSysTag(fLanguageCode);
+}
+
+le_int32 OpenTypeLayoutEngine::characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
+ LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success)
+{
+ if (LE_FAILURE(success)) {
+ return 0;
+ }
+
+ if (offset < 0 || count < 0 || max < 0 || offset >= max || offset + count > max) {
+ success = LE_ILLEGAL_ARGUMENT_ERROR;
+ return 0;
+ }
+
+ // This is the cheapest way to get mark reordering only for Hebrew.
+ // We could just do the mark reordering for all scripts, but most
+ // of them probably don't need it... Another option would be to
+ // add a HebrewOpenTypeLayoutEngine subclass, but the only thing it
+ // would need to do is mark reordering, so that seems like overkill.
+ if (fScriptCode == hebrScriptCode) {
+ outChars = LE_NEW_ARRAY(LEUnicode, count);
+
+ if (outChars == NULL) {
+ success = LE_MEMORY_ALLOCATION_ERROR;
+ return 0;
+ }
+
+ if (LE_FAILURE(success)) {
+ LE_DELETE_ARRAY(outChars);
+ return 0;
+ }
+
+ CanonShaping::reorderMarks(&chars[offset], count, rightToLeft, outChars, glyphStorage);
+ }
+
+ if (LE_FAILURE(success)) {
+ return 0;
+ }
+
+ glyphStorage.allocateGlyphArray(count, rightToLeft, success);
+ glyphStorage.allocateAuxData(success);
+
+ for (le_int32 i = 0; i < count; i += 1) {
+ glyphStorage.setAuxData(i, fFeatureMask, (void *) fFeatureParamList, success);
+ }
+
+ return count;
+}
+
+// Input: characters, tags
+// Output: glyphs, char indices
+le_int32 OpenTypeLayoutEngine::glyphProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
+ LEGlyphStorage &glyphStorage, LEErrorCode &success)
+{
+ if (LE_FAILURE(success)) {
+ return 0;
+ }
+
+ if (chars == NULL || offset < 0 || count < 0 || max < 0 || offset >= max || offset + count > max) {
+ success = LE_ILLEGAL_ARGUMENT_ERROR;
+ return 0;
+ }
+
+ mapCharsToGlyphs(chars, offset, count, rightToLeft, rightToLeft, glyphStorage, success);
+
+ if (LE_FAILURE(success)) {
+ return 0;
+ }
+
+ if (fGSUBTable != NULL) {
+ if (fScriptTagV2 != nullScriptTag && fGSUBTable->coversScriptAndLanguage(fScriptTagV2,fLangSysTag)) {
+ count = fGSUBTable->process(glyphStorage, rightToLeft, fScriptTagV2, fLangSysTag, fGDEFTable, fSubstitutionFilter,
+ fFeatureMap, fFeatureMapCount, fFeatureOrder, success);
+
+ } else {
+ count = fGSUBTable->process(glyphStorage, rightToLeft, fScriptTag, fLangSysTag, fGDEFTable, fSubstitutionFilter,
+ fFeatureMap, fFeatureMapCount, fFeatureOrder, success);
+ }
+ }
+
+ return count;
+}
+// Input: characters, tags
+// Output: glyphs, char indices
+le_int32 OpenTypeLayoutEngine::glyphSubstitution(le_int32 count, le_int32 max, le_bool rightToLeft,
+ LEGlyphStorage &glyphStorage, LEErrorCode &success)
+{
+ if (LE_FAILURE(success)) {
+ return 0;
+ }
+
+ if ( count < 0 || max < 0 ) {
+ success = LE_ILLEGAL_ARGUMENT_ERROR;
+ return 0;
+ }
+
+ if (fGSUBTable != NULL) {
+ if (fScriptTagV2 != nullScriptTag && fGSUBTable->coversScriptAndLanguage(fScriptTagV2,fLangSysTag)) {
+ count = fGSUBTable->process(glyphStorage, rightToLeft, fScriptTagV2, fLangSysTag, fGDEFTable, fSubstitutionFilter,
+ fFeatureMap, fFeatureMapCount, fFeatureOrder, success);
+
+ } else {
+ count = fGSUBTable->process(glyphStorage, rightToLeft, fScriptTag, fLangSysTag, fGDEFTable, fSubstitutionFilter,
+ fFeatureMap, fFeatureMapCount, fFeatureOrder, success);
+ }
+ }
+
+ return count;
+}
+le_int32 OpenTypeLayoutEngine::glyphPostProcessing(LEGlyphStorage &tempGlyphStorage, LEGlyphStorage &glyphStorage, LEErrorCode &success)
+{
+ if (LE_FAILURE(success)) {
+ return 0;
+ }
+
+ glyphStorage.adoptGlyphArray(tempGlyphStorage);
+ glyphStorage.adoptCharIndicesArray(tempGlyphStorage);
+ glyphStorage.adoptAuxDataArray(tempGlyphStorage);
+ glyphStorage.adoptGlyphCount(tempGlyphStorage);
+
+ return glyphStorage.getGlyphCount();
+}
+
+le_int32 OpenTypeLayoutEngine::computeGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft, LEGlyphStorage &glyphStorage, LEErrorCode &success)
+{
+ LEUnicode *outChars = NULL;
+ LEGlyphStorage fakeGlyphStorage;
+ le_int32 outCharCount, outGlyphCount;
+
+ if (LE_FAILURE(success)) {
+ return 0;
+ }
+
+ if (chars == NULL || offset < 0 || count < 0 || max < 0 || offset >= max || offset + count > max) {
+ success = LE_ILLEGAL_ARGUMENT_ERROR;
+ return 0;
+ }
+
+ outCharCount = characterProcessing(chars, offset, count, max, rightToLeft, outChars, fakeGlyphStorage, success);
+
+ if (LE_FAILURE(success)) {
+ return 0;
+ }
+
+ if (outChars != NULL) {
+ // le_int32 fakeGlyphCount =
+ glyphProcessing(outChars, 0, outCharCount, outCharCount, rightToLeft, fakeGlyphStorage, success);
+ LE_DELETE_ARRAY(outChars); // FIXME: a subclass may have allocated this, in which case this delete might not work...
+ //adjustGlyphs(outChars, 0, outCharCount, rightToLeft, fakeGlyphs, fakeGlyphCount);
+ } else {
+ // le_int32 fakeGlyphCount =
+ glyphProcessing(chars, offset, count, max, rightToLeft, fakeGlyphStorage, success);
+ //adjustGlyphs(chars, offset, count, rightToLeft, fakeGlyphs, fakeGlyphCount);
+ }
+
+ if (LE_FAILURE(success)) {
+ return 0;
+ }
+
+ outGlyphCount = glyphPostProcessing(fakeGlyphStorage, glyphStorage, success);
+
+ return outGlyphCount;
+}
+
+// apply GPOS table, if any
+void OpenTypeLayoutEngine::adjustGlyphPositions(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool reverse,
+ LEGlyphStorage &glyphStorage, LEErrorCode &success)
+{
+ if (LE_FAILURE(success)) {
+ return;
+ }
+
+ if (chars == NULL || offset < 0 || count < 0) {
+ success = LE_ILLEGAL_ARGUMENT_ERROR;
+ return;
+ }
+
+ le_int32 glyphCount = glyphStorage.getGlyphCount();
+ if (glyphCount == 0) {
+ return;
+ }
+
+ if (fGPOSTable != NULL) {
+ GlyphPositionAdjustments *adjustments = new GlyphPositionAdjustments(glyphCount);
+ le_int32 i;
+
+ if (adjustments == NULL) {
+ success = LE_MEMORY_ALLOCATION_ERROR;
+ return;
+ }
+
+#if 0
+ // Don't need to do this if we allocate
+ // the adjustments array w/ new...
+ for (i = 0; i < glyphCount; i += 1) {
+ adjustments->setXPlacement(i, 0);
+ adjustments->setYPlacement(i, 0);
+
+ adjustments->setXAdvance(i, 0);
+ adjustments->setYAdvance(i, 0);
+
+ adjustments->setBaseOffset(i, -1);
+ }
+#endif
+
+ if (fGPOSTable != NULL) {
+ if (fScriptTagV2 != nullScriptTag && fGPOSTable->coversScriptAndLanguage(fScriptTagV2,fLangSysTag)) {
+ fGPOSTable->process(glyphStorage, adjustments, reverse, fScriptTagV2, fLangSysTag, fGDEFTable, success, fFontInstance,
+ fFeatureMap, fFeatureMapCount, fFeatureOrder);
+
+ } else {
+ fGPOSTable->process(glyphStorage, adjustments, reverse, fScriptTag, fLangSysTag, fGDEFTable, success, fFontInstance,
+ fFeatureMap, fFeatureMapCount, fFeatureOrder);
+ }
+ } else if ( fTypoFlags & 0x1 ) {
+ static const le_uint32 kernTableTag = LE_KERN_TABLE_TAG;
+ KernTable kt(fFontInstance, getFontTable(kernTableTag));
+ kt.process(glyphStorage);
+ }
+
+ float xAdjust = 0, yAdjust = 0;
+
+ for (i = 0; i < glyphCount; i += 1) {
+ float xAdvance = adjustments->getXAdvance(i);
+ float yAdvance = adjustments->getYAdvance(i);
+ float xPlacement = 0;
+ float yPlacement = 0;
+
+
+#if 0
+ // This is where separate kerning adjustments
+ // should get applied.
+ xAdjust += xKerning;
+ yAdjust += yKerning;
+#endif
+
+ for (le_int32 base = i; base >= 0; base = adjustments->getBaseOffset(base)) {
+ xPlacement += adjustments->getXPlacement(base);
+ yPlacement += adjustments->getYPlacement(base);
+ }
+
+ xPlacement = fFontInstance->xUnitsToPoints(xPlacement);
+ yPlacement = fFontInstance->yUnitsToPoints(yPlacement);
+ glyphStorage.adjustPosition(i, xAdjust + xPlacement, -(yAdjust + yPlacement), success);
+
+ xAdjust += fFontInstance->xUnitsToPoints(xAdvance);
+ yAdjust += fFontInstance->yUnitsToPoints(yAdvance);
+ }
+
+ glyphStorage.adjustPosition(glyphCount, xAdjust, -yAdjust, success);
+
+ delete adjustments;
+ } else {
+ // if there was no GPOS table, maybe there's non-OpenType kerning we can use
+ LayoutEngine::adjustGlyphPositions(chars, offset, count, reverse, glyphStorage, success);
+ }
+
+ LEGlyphID zwnj = fFontInstance->mapCharToGlyph(0x200C);
+
+ if (zwnj != 0x0000) {
+ for (le_int32 g = 0; g < glyphCount; g += 1) {
+ LEGlyphID glyph = glyphStorage[g];
+
+ if (glyph == zwnj) {
+ glyphStorage[g] = LE_SET_GLYPH(glyph, 0xFFFF);
+ }
+ }
+ }
+
+#if 0
+ // Don't know why this is here...
+ LE_DELETE_ARRAY(fFeatureTags);
+ fFeatureTags = NULL;
+#endif
+}
+
+U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-50.1/layout/OpenTypeLayoutEngine.h b/Build/source/libs/icu/icu-50.1/layout/OpenTypeLayoutEngine.h
new file mode 100644
index 00000000000..ad9f9312db4
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/OpenTypeLayoutEngine.h
@@ -0,0 +1,397 @@
+/*
+ * (C) Copyright IBM Corp. 1998-2009 - All Rights Reserved
+ *
+ */
+
+#ifndef __OPENTYPELAYOUTENGINE_H
+#define __OPENTYPELAYOUTENGINE_H
+
+#include "LETypes.h"
+#include "LEGlyphFilter.h"
+#include "LEFontInstance.h"
+#include "LayoutEngine.h"
+
+#include "GlyphSubstitutionTables.h"
+#include "GlyphDefinitionTables.h"
+#include "GlyphPositioningTables.h"
+
+U_NAMESPACE_BEGIN
+
+/**
+ * OpenTypeLayoutEngine implements complex text layout for OpenType fonts - that is
+ * fonts which have GSUB and GPOS tables associated with them. In order to do this,
+ * the glyph processsing step described for LayoutEngine is further broken into three
+ * steps:
+ *
+ * 1) Character processing - this step analyses the characters and assigns a list of OpenType
+ * feature tags to each one. It may also change, remove or add characters, and change
+ * their order.
+ *
+ * 2) Glyph processing - This step performs character to glyph mapping,and uses the GSUB
+ * table associated with the font to perform glyph substitutions, such as ligature substitution.
+ *
+ * 3) Glyph post processing - in cases where the font doesn't directly contain a GSUB table,
+ * the previous two steps may have generated "fake" glyph indices to use with a "canned" GSUB
+ * table. This step turns those glyph indices into actual font-specific glyph indices, and may
+ * perform any other adjustments requried by the previous steps.
+ *
+ * OpenTypeLayoutEngine will also use the font's GPOS table to apply position adjustments
+ * such as kerning and accent positioning.
+ *
+ * @see LayoutEngine
+ *
+ * @internal
+ */
+class U_LAYOUT_API OpenTypeLayoutEngine : public LayoutEngine
+{
+public:
+ /**
+ * This is the main constructor. It constructs an instance of OpenTypeLayoutEngine for
+ * a particular font, script and language. It takes the GSUB table as a parameter since
+ * LayoutEngine::layoutEngineFactory has to read the GSUB table to know that it has an
+ * OpenType font.
+ *
+ * @param fontInstance - the font
+ * @param scriptCode - the script
+ * @param langaugeCode - the language
+ * @param gsubTable - the GSUB table
+ * @param success - set to an error code if the operation fails
+ *
+ * @see LayoutEngine::layoutEngineFactory
+ * @see ScriptAndLangaugeTags.h for script and language codes
+ *
+ * @internal
+ */
+ OpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
+ le_int32 typoFlags, const GlyphSubstitutionTableHeader *gsubTable, LEErrorCode &success);
+
+ /**
+ * This constructor is used when the font requires a "canned" GSUB table which can't be known
+ * until after this constructor has been invoked.
+ *
+ * @param fontInstance - the font
+ * @param scriptCode - the script
+ * @param langaugeCode - the language
+ * @param success - set to an error code if the operation fails
+ *
+ * @internal
+ */
+ OpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
+ le_int32 typoFlags, LEErrorCode &success);
+
+ /**
+ * The destructor, virtual for correct polymorphic invocation.
+ *
+ * @internal
+ */
+ virtual ~OpenTypeLayoutEngine();
+
+ /**
+ * A convenience method used to convert the script code into
+ * the four byte script tag required by OpenType.
+ * For Indic languages where multiple script tags exist,
+ * the version 1 (old style) tag is returned.
+ *
+ * @param scriptCode - the script code
+ *
+ * @return the four byte script tag
+ *
+ * @internal
+ */
+ static LETag getScriptTag(le_int32 scriptCode);
+ /**
+ * A convenience method used to convert the script code into
+ * the four byte script tag required by OpenType.
+ * For Indic languages where multiple script tags exist,
+ * the version 2 tag is returned.
+ *
+ * @param scriptCode - the script code
+ *
+ * @return the four byte script tag
+ *
+ * @internal
+ */
+ static LETag getV2ScriptTag(le_int32 scriptCode);
+
+ /**
+ * A convenience method used to convert the langauge code into
+ * the four byte langauge tag required by OpenType.
+ *
+ * @param languageCode - the language code
+ *
+ * @return the four byte language tag
+ *
+ * @internal
+ */
+ static LETag getLangSysTag(le_int32 languageCode);
+
+ /**
+ * ICU "poor man's RTTI", returns a UClassID for the actual class.
+ *
+ * @stable ICU 2.8
+ */
+ virtual UClassID getDynamicClassID() const;
+
+ /**
+ * ICU "poor man's RTTI", returns a UClassID for this class.
+ *
+ * @stable ICU 2.8
+ */
+ static UClassID getStaticClassID();
+
+ /**
+ * The array of language tags, indexed by language code.
+ *
+ * @internal
+ */
+ static const LETag languageTags[];
+
+private:
+
+ /**
+ * This method is used by the constructors to convert the script
+ * and language codes to four byte tags and save them.
+ */
+ void setScriptAndLanguageTags();
+
+ /**
+ * The array of script tags, indexed by script code.
+ */
+ static const LETag scriptTags[];
+
+protected:
+ /**
+ * A set of "default" features. The default characterProcessing method
+ * will apply all of these features to every glyph.
+ *
+ * @internal
+ */
+ FeatureMask fFeatureMask;
+
+ /**
+ * A set of mappings from feature tags to feature masks. These may
+ * be in the order in which the featues should be applied, but they
+ * don't need to be.
+ *
+ * @internal
+ */
+ const FeatureMap *fFeatureMap;
+
+ /**
+ * The length of the feature map.
+ *
+ * @internal
+ */
+ le_int32 fFeatureMapCount;
+
+ /**
+ * <code>TRUE</code> if the features in the
+ * feature map are in the order in which they
+ * must be applied.
+ *
+ * @internal
+ */
+ le_bool fFeatureOrder;
+
+ /**
+ * The list of what? FIXME..
+ *
+ * @internal
+ */
+ const le_int32 *fFeatureParamList;
+
+ /**
+ * The address of the GSUB table.
+ *
+ * @internal
+ */
+ const GlyphSubstitutionTableHeader *fGSUBTable;
+
+ /**
+ * The address of the GDEF table.
+ *
+ * @internal
+ */
+ const GlyphDefinitionTableHeader *fGDEFTable;
+
+ /**
+ * The address of the GPOS table.
+ *
+ * @internal
+ */
+ const GlyphPositioningTableHeader *fGPOSTable;
+
+ /**
+ * An optional filter used to inhibit substitutions
+ * preformed by the GSUB table. This is used for some
+ * "canned" GSUB tables to restrict substitutions to
+ * glyphs that are in the font.
+ *
+ * @internal
+ */
+ LEGlyphFilter *fSubstitutionFilter;
+
+ /**
+ * The four byte script tag.
+ *
+ * @internal
+ */
+ LETag fScriptTag;
+
+ /**
+ * The four byte script tag for V2 fonts.
+ *
+ * @internal
+ */
+ LETag fScriptTagV2;
+
+ /**
+ * The four byte language tag
+ *
+ * @internal
+ */
+ LETag fLangSysTag;
+
+ /**
+ * This method does the OpenType character processing. It assigns the OpenType feature
+ * tags to the characters, and may generate output characters that differ from the input
+ * charcters due to insertions, deletions, or reorderings. In such cases, it will also
+ * generate an output character index array reflecting these changes.
+ *
+ * Subclasses must override this method.
+ *
+ * Input parameters:
+ * @param chars - the input character context
+ * @param offset - the index of the first character to process
+ * @param count - the number of characters to process
+ * @param max - the number of characters in the input context
+ * @param rightToLeft - TRUE if the characters are in a right to left directional run
+ *
+ * Output parameters:
+ * @param outChars - the output character array, if different from the input
+ * @param charIndices - the output character index array
+ * @param featureTags - the output feature tag array
+ * @param success - set to an error code if the operation fails
+ *
+ * @return the output character count (input character count if no change)
+ *
+ * @internal
+ */
+ virtual le_int32 characterProcessing(const LEUnicode /*chars*/[], le_int32 offset, le_int32 count, le_int32 max, le_bool /*rightToLeft*/,
+ LEUnicode *&/*outChars*/, LEGlyphStorage &glyphStorage, LEErrorCode &success);
+
+ /**
+ * This method does character to glyph mapping, and applies the GSUB table. The
+ * default implementation calls mapCharsToGlyphs and then applies the GSUB table,
+ * if there is one.
+ *
+ * Note that in the case of "canned" GSUB tables, the output glyph indices may be
+ * "fake" glyph indices that need to be converted to "real" glyph indices by the
+ * glyphPostProcessing method.
+ *
+ * Input parameters:
+ * @param chars - the input character context
+ * @param offset - the index of the first character to process
+ * @param count - the number of characters to process
+ * @param max - the number of characters in the input context
+ * @param rightToLeft - TRUE if the characters are in a right to left directional run
+ * @param featureTags - the feature tag array
+ *
+ * Output parameters:
+ * @param glyphs - the output glyph index array
+ * @param charIndices - the output character index array
+ * @param success - set to an error code if the operation fails
+ *
+ * @return the number of glyphs in the output glyph index array
+ *
+ * Note: if the character index array was already set by the characterProcessing
+ * method, this method won't change it.
+ *
+ * @internal
+ */
+ virtual le_int32 glyphProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
+ LEGlyphStorage &glyphStorage, LEErrorCode &success);
+
+ virtual le_int32 glyphSubstitution(le_int32 count, le_int32 max, le_bool rightToLeft, LEGlyphStorage &glyphStorage, LEErrorCode &success);
+
+ /**
+ * This method does any processing necessary to convert "fake"
+ * glyph indices used by the glyphProcessing method into "real" glyph
+ * indices which can be used to render the text. Note that in some
+ * cases, such as CDAC Indic fonts, several "real" glyphs may be needed
+ * to render one "fake" glyph.
+ *
+ * The default implementation of this method just returns the input glyph
+ * index and character index arrays, assuming that no "fake" glyph indices
+ * were needed to do GSUB processing.
+ *
+ * Input paramters:
+ * @param tempGlyphs - the input "fake" glyph index array
+ * @param tempCharIndices - the input "fake" character index array
+ * @param tempGlyphCount - the number of "fake" glyph indices
+ *
+ * Output parameters:
+ * @param glyphs - the output glyph index array
+ * @param charIndices - the output character index array
+ * @param success - set to an error code if the operation fails
+ *
+ * @return the number of glyph indices in the output glyph index array
+ *
+ * @internal
+ */
+ virtual le_int32 glyphPostProcessing(LEGlyphStorage &tempGlyphStorage, LEGlyphStorage &glyphStorage, LEErrorCode &success);
+
+ /**
+ * This method applies the characterProcessing, glyphProcessing and glyphPostProcessing
+ * methods. Most subclasses will not need to override this method.
+ *
+ * Input parameters:
+ * @param chars - the input character context
+ * @param offset - the index of the first character to process
+ * @param count - the number of characters to process
+ * @param max - the number of characters in the input context
+ * @param rightToLeft - TRUE if the text is in a right to left directional run
+ *
+ * Output parameters:
+ * @param glyphs - the glyph index array
+ * @param charIndices - the character index array
+ * @param success - set to an error code if the operation fails
+ *
+ * @return the number of glyphs in the glyph index array
+ *
+ * @see LayoutEngine::computeGlyphs
+ *
+ * @internal
+ */
+ virtual le_int32 computeGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft, LEGlyphStorage &glyphStorage, LEErrorCode &success);
+
+ /**
+ * This method uses the GPOS table, if there is one, to adjust the glyph positions.
+ *
+ * Input parameters:
+ * @param glyphs - the input glyph array
+ * @param glyphCount - the number of glyphs in the glyph array
+ * @param x - the starting X position
+ * @param y - the starting Y position
+ *
+ * Output parameters:
+ * @param positions - the output X and Y positions (two entries per glyph)
+ * @param success - set to an error code if the operation fails
+ *
+ * @internal
+ */
+ virtual void adjustGlyphPositions(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool reverse, LEGlyphStorage &glyphStorage, LEErrorCode &success);
+
+ /**
+ * This method frees the feature tag array so that the
+ * OpenTypeLayoutEngine can be reused for different text.
+ * It is also called from our destructor.
+ *
+ * @internal
+ */
+ virtual void reset();
+};
+
+U_NAMESPACE_END
+#endif
+
diff --git a/Build/source/libs/icu/icu-50.1/layout/OpenTypeTables.h b/Build/source/libs/icu/icu-50.1/layout/OpenTypeTables.h
new file mode 100644
index 00000000000..5398d176e47
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/OpenTypeTables.h
@@ -0,0 +1,50 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2007 - All Rights Reserved
+ *
+ */
+
+#ifndef __OPENTYPETABLES_H
+#define __OPENTYPETABLES_H
+
+/**
+ * \file
+ * \internal
+ */
+
+#include "LETypes.h"
+
+U_NAMESPACE_BEGIN
+
+#define ANY_NUMBER 1
+
+typedef le_uint16 Offset;
+typedef le_uint8 ATag[4];
+typedef le_uint32 fixed32;
+
+#define LE_GLYPH_GROUP_MASK 0x00000001UL
+typedef le_uint32 FeatureMask;
+
+#define SWAPT(atag) ((LETag) ((atag[0] << 24) + (atag[1] << 16) + (atag[2] << 8) + atag[3]))
+
+struct TagAndOffsetRecord
+{
+ ATag tag;
+ Offset offset;
+};
+
+struct GlyphRangeRecord
+{
+ TTGlyphID firstGlyph;
+ TTGlyphID lastGlyph;
+ le_int16 rangeValue;
+};
+
+struct FeatureMap
+{
+ LETag tag;
+ FeatureMask mask;
+};
+
+U_NAMESPACE_END
+#endif
diff --git a/Build/source/libs/icu/icu-50.1/layout/OpenTypeUtilities.cpp b/Build/source/libs/icu/icu-50.1/layout/OpenTypeUtilities.cpp
new file mode 100644
index 00000000000..29c38ddc104
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/OpenTypeUtilities.cpp
@@ -0,0 +1,179 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2006 - All Rights Reserved
+ *
+ */
+
+#include "LETypes.h"
+#include "OpenTypeTables.h"
+#include "OpenTypeUtilities.h"
+#include "LESwaps.h"
+
+U_NAMESPACE_BEGIN
+
+//
+// Finds the high bit by binary searching
+// through the bits in n.
+//
+le_int8 OpenTypeUtilities::highBit(le_int32 value)
+{
+ if (value <= 0) {
+ return -32;
+ }
+
+ le_uint8 bit = 0;
+
+ if (value >= 1 << 16) {
+ value >>= 16;
+ bit += 16;
+ }
+
+ if (value >= 1 << 8) {
+ value >>= 8;
+ bit += 8;
+ }
+
+ if (value >= 1 << 4) {
+ value >>= 4;
+ bit += 4;
+ }
+
+ if (value >= 1 << 2) {
+ value >>= 2;
+ bit += 2;
+ }
+
+ if (value >= 1 << 1) {
+ value >>= 1;
+ bit += 1;
+ }
+
+ return bit;
+}
+
+Offset OpenTypeUtilities::getTagOffset(LETag tag, const TagAndOffsetRecord *records, le_int32 recordCount)
+{
+ le_uint8 bit = highBit(recordCount);
+ le_int32 power = 1 << bit;
+ le_int32 extra = recordCount - power;
+ le_int32 probe = power;
+ le_int32 index = 0;
+
+ if (SWAPT(records[extra].tag) <= tag) {
+ index = extra;
+ }
+
+ while (probe > (1 << 0)) {
+ probe >>= 1;
+
+ if (SWAPT(records[index + probe].tag) <= tag) {
+ index += probe;
+ }
+ }
+
+ if (SWAPT(records[index].tag) == tag) {
+ return SWAPW(records[index].offset);
+ }
+
+ return 0;
+}
+
+le_int32 OpenTypeUtilities::getGlyphRangeIndex(TTGlyphID glyphID, const GlyphRangeRecord *records, le_int32 recordCount)
+{
+ le_uint8 bit = highBit(recordCount);
+ le_int32 power = 1 << bit;
+ le_int32 extra = recordCount - power;
+ le_int32 probe = power;
+ le_int32 range = 0;
+
+ if (recordCount == 0) {
+ return -1;
+ }
+
+ if (SWAPW(records[extra].firstGlyph) <= glyphID) {
+ range = extra;
+ }
+
+ while (probe > (1 << 0)) {
+ probe >>= 1;
+
+ if (SWAPW(records[range + probe].firstGlyph) <= glyphID) {
+ range += probe;
+ }
+ }
+
+ if (SWAPW(records[range].firstGlyph) <= glyphID && SWAPW(records[range].lastGlyph) >= glyphID) {
+ return range;
+ }
+
+ return -1;
+}
+
+le_int32 OpenTypeUtilities::search(le_uint32 value, const le_uint32 array[], le_int32 count)
+{
+ le_int32 power = 1 << highBit(count);
+ le_int32 extra = count - power;
+ le_int32 probe = power;
+ le_int32 index = 0;
+
+ if (value >= array[extra]) {
+ index = extra;
+ }
+
+ while (probe > (1 << 0)) {
+ probe >>= 1;
+
+ if (value >= array[index + probe]) {
+ index += probe;
+ }
+ }
+
+ return index;
+}
+
+le_int32 OpenTypeUtilities::search(le_uint16 value, const le_uint16 array[], le_int32 count)
+{
+ le_int32 power = 1 << highBit(count);
+ le_int32 extra = count - power;
+ le_int32 probe = power;
+ le_int32 index = 0;
+
+ if (value >= array[extra]) {
+ index = extra;
+ }
+
+ while (probe > (1 << 0)) {
+ probe >>= 1;
+
+ if (value >= array[index + probe]) {
+ index += probe;
+ }
+ }
+
+ return index;
+}
+
+//
+// Straight insertion sort from Knuth vol. III, pg. 81
+//
+void OpenTypeUtilities::sort(le_uint16 *array, le_int32 count)
+{
+ for (le_int32 j = 1; j < count; j += 1) {
+ le_int32 i;
+ le_uint16 v = array[j];
+
+ for (i = j - 1; i >= 0; i -= 1) {
+ if (v >= array[i]) {
+ break;
+ }
+
+ array[i + 1] = array[i];
+ }
+
+ array[i + 1] = v;
+ }
+}
+
+
+
+U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-50.1/layout/OpenTypeUtilities.h b/Build/source/libs/icu/icu-50.1/layout/OpenTypeUtilities.h
new file mode 100644
index 00000000000..67a07c32a06
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/OpenTypeUtilities.h
@@ -0,0 +1,34 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
+ *
+ */
+
+#ifndef __OPENTYPEUTILITIES_H
+#define __OPENTYPEUTILITIES_H
+
+/**
+ * \file
+ * \internal
+ */
+
+#include "LETypes.h"
+#include "OpenTypeTables.h"
+
+U_NAMESPACE_BEGIN
+
+class OpenTypeUtilities /* not : public UObject because all methods are static */ {
+public:
+ static le_int8 highBit(le_int32 value);
+ static Offset getTagOffset(LETag tag, const TagAndOffsetRecord *records, le_int32 recordCount);
+ static le_int32 getGlyphRangeIndex(TTGlyphID glyphID, const GlyphRangeRecord *records, le_int32 recordCount);
+ static le_int32 search(le_uint16 value, const le_uint16 array[], le_int32 count);
+ static le_int32 search(le_uint32 value, const le_uint32 array[], le_int32 count);
+ static void sort(le_uint16 *array, le_int32 count);
+
+private:
+ OpenTypeUtilities() {} // private - forbid instantiation
+};
+
+U_NAMESPACE_END
+#endif
diff --git a/Build/source/libs/icu/icu-50.1/layout/PairPositioningSubtables.cpp b/Build/source/libs/icu/icu-50.1/layout/PairPositioningSubtables.cpp
new file mode 100644
index 00000000000..fce69f87cf0
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/PairPositioningSubtables.cpp
@@ -0,0 +1,171 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2006 - All Rights Reserved
+ *
+ */
+
+#include "LETypes.h"
+#include "LEFontInstance.h"
+#include "OpenTypeTables.h"
+#include "GlyphPositioningTables.h"
+#include "PairPositioningSubtables.h"
+#include "ValueRecords.h"
+#include "GlyphIterator.h"
+#include "OpenTypeUtilities.h"
+#include "LESwaps.h"
+
+U_NAMESPACE_BEGIN
+
+le_uint32 PairPositioningSubtable::process(GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const
+{
+ switch(SWAPW(subtableFormat))
+ {
+ case 0:
+ return 0;
+
+ case 1:
+ {
+ const PairPositioningFormat1Subtable *subtable = (const PairPositioningFormat1Subtable *) this;
+
+ return subtable->process(glyphIterator, fontInstance);
+ }
+
+ case 2:
+ {
+ const PairPositioningFormat2Subtable *subtable = (const PairPositioningFormat2Subtable *) this;
+
+ return subtable->process(glyphIterator, fontInstance);
+ }
+
+ default:
+ return 0;
+ }
+}
+
+le_uint32 PairPositioningFormat1Subtable::process(GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const
+{
+ LEGlyphID firstGlyph = glyphIterator->getCurrGlyphID();
+ le_int32 coverageIndex = getGlyphCoverage(firstGlyph);
+ GlyphIterator tempIterator(*glyphIterator);
+
+ if (coverageIndex >= 0 && glyphIterator->next()) {
+ Offset pairSetTableOffset = SWAPW(pairSetTableOffsetArray[coverageIndex]);
+ PairSetTable *pairSetTable = (PairSetTable *) ((char *) this + pairSetTableOffset);
+ le_uint16 pairValueCount = SWAPW(pairSetTable->pairValueCount);
+ le_int16 valueRecord1Size = ValueRecord::getSize(SWAPW(valueFormat1));
+ le_int16 valueRecord2Size = ValueRecord::getSize(SWAPW(valueFormat2));
+ le_int16 recordSize = sizeof(PairValueRecord) - sizeof(ValueRecord) + valueRecord1Size + valueRecord2Size;
+ LEGlyphID secondGlyph = glyphIterator->getCurrGlyphID();
+ const PairValueRecord *pairValueRecord = NULL;
+
+ if (pairValueCount != 0) {
+ pairValueRecord = findPairValueRecord((TTGlyphID) LE_GET_GLYPH(secondGlyph), pairSetTable->pairValueRecordArray, pairValueCount, recordSize);
+ }
+
+ if (pairValueRecord == NULL) {
+ return 0;
+ }
+
+ if (valueFormat1 != 0) {
+ pairValueRecord->valueRecord1.adjustPosition(SWAPW(valueFormat1), (char *) this, tempIterator, fontInstance);
+ }
+
+ if (valueFormat2 != 0) {
+ const ValueRecord *valueRecord2 = (const ValueRecord *) ((char *) &pairValueRecord->valueRecord1 + valueRecord1Size);
+
+ valueRecord2->adjustPosition(SWAPW(valueFormat2), (char *) this, *glyphIterator, fontInstance);
+ }
+
+ // back up glyphIterator so second glyph can be
+ // first glyph in the next pair
+ glyphIterator->prev();
+ return 1;
+ }
+
+ return 0;
+}
+
+le_uint32 PairPositioningFormat2Subtable::process(GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const
+{
+ LEGlyphID firstGlyph = glyphIterator->getCurrGlyphID();
+ le_int32 coverageIndex = getGlyphCoverage(firstGlyph);
+ GlyphIterator tempIterator(*glyphIterator);
+
+ if (coverageIndex >= 0 && glyphIterator->next()) {
+ LEGlyphID secondGlyph = glyphIterator->getCurrGlyphID();
+ const ClassDefinitionTable *classDef1 = (const ClassDefinitionTable *) ((char *) this + SWAPW(classDef1Offset));
+ const ClassDefinitionTable *classDef2 = (const ClassDefinitionTable *) ((char *) this + SWAPW(classDef2Offset));
+ le_int32 class1 = classDef1->getGlyphClass(firstGlyph);
+ le_int32 class2 = classDef2->getGlyphClass(secondGlyph);
+ le_int16 valueRecord1Size = ValueRecord::getSize(SWAPW(valueFormat1));
+ le_int16 valueRecord2Size = ValueRecord::getSize(SWAPW(valueFormat2));
+ le_int16 class2RecordSize = valueRecord1Size + valueRecord2Size;
+ le_int16 class1RecordSize = class2RecordSize * SWAPW(class2Count);
+ const Class1Record *class1Record = (const Class1Record *) ((char *) class1RecordArray + (class1RecordSize * class1));
+ const Class2Record *class2Record = (const Class2Record *) ((char *) class1Record->class2RecordArray + (class2RecordSize * class2));
+
+
+ if (valueFormat1 != 0) {
+ class2Record->valueRecord1.adjustPosition(SWAPW(valueFormat1), (char *) this, tempIterator, fontInstance);
+ }
+
+ if (valueFormat2 != 0) {
+ const ValueRecord *valueRecord2 = (const ValueRecord *) ((char *) &class2Record->valueRecord1 + valueRecord1Size);
+
+ valueRecord2->adjustPosition(SWAPW(valueFormat2), (const char *) this, *glyphIterator, fontInstance);
+ }
+
+ // back up glyphIterator so second glyph can be
+ // first glyph in the next pair
+ glyphIterator->prev();
+ return 1;
+ }
+
+ return 0;
+}
+
+const PairValueRecord *PairPositioningFormat1Subtable::findPairValueRecord(TTGlyphID glyphID, const PairValueRecord *records, le_uint16 recordCount, le_uint16 recordSize) const
+{
+#if 1
+ // The OpenType spec. says that the ValueRecord table is
+ // sorted by secondGlyph. Unfortunately, there are fonts
+ // around that have an unsorted ValueRecord table.
+ const PairValueRecord *record = records;
+
+ for(le_int32 r = 0; r < recordCount; r += 1) {
+ if (SWAPW(record->secondGlyph) == glyphID) {
+ return record;
+ }
+
+ record = (const PairValueRecord *) ((char *) record + recordSize);
+ }
+#else
+ le_uint8 bit = OpenTypeUtilities::highBit(recordCount);
+ le_uint16 power = 1 << bit;
+ le_uint16 extra = (recordCount - power) * recordSize;
+ le_uint16 probe = power * recordSize;
+ const PairValueRecord *record = records;
+ const PairValueRecord *trial = (const PairValueRecord *) ((char *) record + extra);
+
+ if (SWAPW(trial->secondGlyph) <= glyphID) {
+ record = trial;
+ }
+
+ while (probe > recordSize) {
+ probe >>= 1;
+ trial = (const PairValueRecord *) ((char *) record + probe);
+
+ if (SWAPW(trial->secondGlyph) <= glyphID) {
+ record = trial;
+ }
+ }
+
+ if (SWAPW(record->secondGlyph) == glyphID) {
+ return record;
+ }
+#endif
+
+ return NULL;
+}
+
+U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-50.1/layout/PairPositioningSubtables.h b/Build/source/libs/icu/icu-50.1/layout/PairPositioningSubtables.h
new file mode 100644
index 00000000000..f017c33f65b
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/PairPositioningSubtables.h
@@ -0,0 +1,84 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
+ *
+ */
+
+#ifndef __PAIRPOSITIONINGSUBTABLES_H
+#define __PAIRPOSITIONINGSUBTABLES_H
+
+/**
+ * \file
+ * \internal
+ */
+
+#include "LETypes.h"
+#include "LEFontInstance.h"
+#include "OpenTypeTables.h"
+#include "GlyphPositioningTables.h"
+#include "ValueRecords.h"
+#include "GlyphIterator.h"
+
+U_NAMESPACE_BEGIN
+
+// NOTE: ValueRecord has a variable size
+struct PairValueRecord
+{
+ TTGlyphID secondGlyph;
+ ValueRecord valueRecord1;
+// ValueRecord valueRecord2;
+};
+
+struct PairSetTable
+{
+ le_uint16 pairValueCount;
+ PairValueRecord pairValueRecordArray[ANY_NUMBER];
+};
+
+struct PairPositioningSubtable : GlyphPositioningSubtable
+{
+ ValueFormat valueFormat1;
+ ValueFormat valueFormat2;
+
+ le_uint32 process(GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const;
+};
+
+struct PairPositioningFormat1Subtable : PairPositioningSubtable
+{
+ le_uint16 pairSetCount;
+ Offset pairSetTableOffsetArray[ANY_NUMBER];
+
+ le_uint32 process(GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const;
+
+private:
+ const PairValueRecord *findPairValueRecord(TTGlyphID glyphID, const PairValueRecord *records,
+ le_uint16 recordCount, le_uint16 recordSize) const;
+};
+
+// NOTE: ValueRecord has a variable size
+struct Class2Record
+{
+ ValueRecord valueRecord1;
+// ValueRecord valurRecord2;
+};
+
+struct Class1Record
+{
+ Class2Record class2RecordArray[ANY_NUMBER];
+};
+
+struct PairPositioningFormat2Subtable : PairPositioningSubtable
+{
+ Offset classDef1Offset;
+ Offset classDef2Offset;
+ le_uint16 class1Count;
+ le_uint16 class2Count;
+ Class1Record class1RecordArray[ANY_NUMBER];
+
+ le_uint32 process(GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const;
+};
+
+U_NAMESPACE_END
+#endif
+
+
diff --git a/Build/source/libs/icu/icu-50.1/layout/ScriptAndLanguage.cpp b/Build/source/libs/icu/icu-50.1/layout/ScriptAndLanguage.cpp
new file mode 100644
index 00000000000..126f5f2f078
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/ScriptAndLanguage.cpp
@@ -0,0 +1,84 @@
+/*
+ * (C) Copyright IBM Corp. 1998-2008 - All Rights Reserved
+ *
+ */
+
+#include "LETypes.h"
+#include "OpenTypeTables.h"
+#include "OpenTypeUtilities.h"
+#include "ScriptAndLanguage.h"
+#include "LESwaps.h"
+
+U_NAMESPACE_BEGIN
+
+const LangSysTable *ScriptTable::findLanguage(LETag languageTag, le_bool exactMatch) const
+{
+ le_uint16 count = SWAPW(langSysCount);
+ Offset langSysTableOffset = exactMatch? 0 : SWAPW(defaultLangSysTableOffset);
+
+ if (count > 0) {
+ Offset foundOffset =
+ OpenTypeUtilities::getTagOffset(languageTag, langSysRecordArray, count);
+
+ if (foundOffset != 0) {
+ langSysTableOffset = foundOffset;
+ }
+ }
+
+ if (langSysTableOffset != 0) {
+ return (const LangSysTable *) ((char *)this + langSysTableOffset);
+ }
+
+ return NULL;
+}
+
+const ScriptTable *ScriptListTable::findScript(LETag scriptTag) const
+{
+ /*
+ * There are some fonts that have a large, bogus value for scriptCount. To try
+ * and protect against this, we use the offset in the first scriptRecord,
+ * which we know has to be past the end of the scriptRecordArray, to compute
+ * a value which is greater than or equal to the actual script count.
+ *
+ * Note: normally, the first offset will point to just after the scriptRecordArray,
+ * but there's no guarantee of this, only that it's *after* the scriptRecordArray.
+ * Because of this, a binary serach isn't safe, because the new count may include
+ * data that's not actually in the scriptRecordArray and hence the array will appear
+ * to be unsorted.
+ */
+ le_uint16 count = SWAPW(scriptCount);
+ le_uint16 limit = ((SWAPW(scriptRecordArray[0].offset) - sizeof(ScriptListTable)) / sizeof(scriptRecordArray)) + ANY_NUMBER;
+ Offset scriptTableOffset = 0;
+
+ if (count > limit) {
+ // the scriptCount value is bogus; do a linear search
+ // because limit may still be too large.
+ for(le_int32 s = 0; s < limit; s += 1) {
+ if (SWAPT(scriptRecordArray[s].tag) == scriptTag) {
+ scriptTableOffset = SWAPW(scriptRecordArray[s].offset);
+ break;
+ }
+ }
+ } else {
+ scriptTableOffset = OpenTypeUtilities::getTagOffset(scriptTag, scriptRecordArray, count);
+ }
+
+ if (scriptTableOffset != 0) {
+ return (const ScriptTable *) ((char *)this + scriptTableOffset);
+ }
+
+ return NULL;
+}
+
+const LangSysTable *ScriptListTable::findLanguage(LETag scriptTag, LETag languageTag, le_bool exactMatch) const
+{
+ const ScriptTable *scriptTable = findScript(scriptTag);
+
+ if (scriptTable == 0) {
+ return NULL;
+ }
+
+ return scriptTable->findLanguage(languageTag, exactMatch);
+}
+
+U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-50.1/layout/ScriptAndLanguage.h b/Build/source/libs/icu/icu-50.1/layout/ScriptAndLanguage.h
new file mode 100644
index 00000000000..804dae9665e
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/ScriptAndLanguage.h
@@ -0,0 +1,52 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
+ *
+ */
+
+#ifndef __SCRIPTANDLANGUAGE_H
+#define __SCRIPTANDLANGUAGE_H
+
+/**
+ * \file
+ * \internal
+ */
+
+#include "LETypes.h"
+#include "OpenTypeTables.h"
+
+U_NAMESPACE_BEGIN
+
+typedef TagAndOffsetRecord LangSysRecord;
+
+struct LangSysTable
+{
+ Offset lookupOrderOffset;
+ le_uint16 reqFeatureIndex;
+ le_uint16 featureCount;
+ le_uint16 featureIndexArray[ANY_NUMBER];
+};
+
+struct ScriptTable
+{
+ Offset defaultLangSysTableOffset;
+ le_uint16 langSysCount;
+ LangSysRecord langSysRecordArray[ANY_NUMBER];
+
+ const LangSysTable *findLanguage(LETag languageTag, le_bool exactMatch = FALSE) const;
+};
+
+typedef TagAndOffsetRecord ScriptRecord;
+
+struct ScriptListTable
+{
+ le_uint16 scriptCount;
+ ScriptRecord scriptRecordArray[ANY_NUMBER];
+
+ const ScriptTable *findScript(LETag scriptTag) const;
+ const LangSysTable *findLanguage(LETag scriptTag, LETag languageTag, le_bool exactMatch = FALSE) const;
+};
+
+U_NAMESPACE_END
+#endif
+
diff --git a/Build/source/libs/icu/icu-50.1/layout/ScriptAndLanguageTags.cpp b/Build/source/libs/icu/icu-50.1/layout/ScriptAndLanguageTags.cpp
new file mode 100644
index 00000000000..335912a7322
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/ScriptAndLanguageTags.cpp
@@ -0,0 +1,253 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2011. All Rights Reserved.
+ *
+ * WARNING: THIS FILE IS MACHINE GENERATED. DO NOT HAND EDIT IT UNLESS
+ * YOU REALLY KNOW WHAT YOU'RE DOING.
+ *
+ * Generated on: 11/01/2011 04:08:11 PM PDT
+ */
+
+#include "LETypes.h"
+#include "ScriptAndLanguageTags.h"
+#include "OpenTypeLayoutEngine.h"
+
+U_NAMESPACE_BEGIN
+
+const LETag OpenTypeLayoutEngine::scriptTags[] = {
+ zyyyScriptTag, /* 'zyyy' (COMMON) */
+ zinhScriptTag, /* 'zinh' (INHERITED) */
+ arabScriptTag, /* 'arab' (ARABIC) */
+ armnScriptTag, /* 'armn' (ARMENIAN) */
+ bengScriptTag, /* 'beng' (BENGALI) */
+ bopoScriptTag, /* 'bopo' (BOPOMOFO) */
+ cherScriptTag, /* 'cher' (CHEROKEE) */
+ coptScriptTag, /* 'copt' (COPTIC) */
+ cyrlScriptTag, /* 'cyrl' (CYRILLIC) */
+ dsrtScriptTag, /* 'dsrt' (DESERET) */
+ devaScriptTag, /* 'deva' (DEVANAGARI) */
+ ethiScriptTag, /* 'ethi' (ETHIOPIC) */
+ georScriptTag, /* 'geor' (GEORGIAN) */
+ gothScriptTag, /* 'goth' (GOTHIC) */
+ grekScriptTag, /* 'grek' (GREEK) */
+ gujrScriptTag, /* 'gujr' (GUJARATI) */
+ guruScriptTag, /* 'guru' (GURMUKHI) */
+ haniScriptTag, /* 'hani' (HAN) */
+ hangScriptTag, /* 'hang' (HANGUL) */
+ hebrScriptTag, /* 'hebr' (HEBREW) */
+ hiraScriptTag, /* 'hira' (HIRAGANA) */
+ kndaScriptTag, /* 'knda' (KANNADA) */
+ kanaScriptTag, /* 'kana' (KATAKANA) */
+ khmrScriptTag, /* 'khmr' (KHMER) */
+ laooScriptTag, /* 'lao ' (LAO) */
+ latnScriptTag, /* 'latn' (LATIN) */
+ mlymScriptTag, /* 'mlym' (MALAYALAM) */
+ mongScriptTag, /* 'mong' (MONGOLIAN) */
+ mymrScriptTag, /* 'mymr' (MYANMAR) */
+ ogamScriptTag, /* 'ogam' (OGHAM) */
+ italScriptTag, /* 'ital' (OLD_ITALIC) */
+ oryaScriptTag, /* 'orya' (ORIYA) */
+ runrScriptTag, /* 'runr' (RUNIC) */
+ sinhScriptTag, /* 'sinh' (SINHALA) */
+ syrcScriptTag, /* 'syrc' (SYRIAC) */
+ tamlScriptTag, /* 'taml' (TAMIL) */
+ teluScriptTag, /* 'telu' (TELUGU) */
+ thaaScriptTag, /* 'thaa' (THAANA) */
+ thaiScriptTag, /* 'thai' (THAI) */
+ tibtScriptTag, /* 'tibt' (TIBETAN) */
+ cansScriptTag, /* 'cans' (CANADIAN_ABORIGINAL) */
+ yiiiScriptTag, /* 'yi ' (YI) */
+ tglgScriptTag, /* 'tglg' (TAGALOG) */
+ hanoScriptTag, /* 'hano' (HANUNOO) */
+ buhdScriptTag, /* 'buhd' (BUHID) */
+ tagbScriptTag, /* 'tagb' (TAGBANWA) */
+ braiScriptTag, /* 'brai' (BRAILLE) */
+ cprtScriptTag, /* 'cprt' (CYPRIOT) */
+ limbScriptTag, /* 'limb' (LIMBU) */
+ linbScriptTag, /* 'linb' (LINEAR_B) */
+ osmaScriptTag, /* 'osma' (OSMANYA) */
+ shawScriptTag, /* 'shaw' (SHAVIAN) */
+ taleScriptTag, /* 'tale' (TAI_LE) */
+ ugarScriptTag, /* 'ugar' (UGARITIC) */
+ hrktScriptTag, /* 'hrkt' (KATAKANA_OR_HIRAGANA) */
+ bugiScriptTag, /* 'bugi' (BUGINESE) */
+ glagScriptTag, /* 'glag' (GLAGOLITIC) */
+ kharScriptTag, /* 'khar' (KHAROSHTHI) */
+ syloScriptTag, /* 'sylo' (SYLOTI_NAGRI) */
+ taluScriptTag, /* 'talu' (NEW_TAI_LUE) */
+ tfngScriptTag, /* 'tfng' (TIFINAGH) */
+ xpeoScriptTag, /* 'xpeo' (OLD_PERSIAN) */
+ baliScriptTag, /* 'bali' (BALINESE) */
+ batkScriptTag, /* 'batk' (BATAK) */
+ blisScriptTag, /* 'blis' (BLIS) */
+ brahScriptTag, /* 'brah' (BRAHMI) */
+ chamScriptTag, /* 'cham' (CHAM) */
+ cirtScriptTag, /* 'cirt' (CIRT) */
+ cyrsScriptTag, /* 'cyrs' (CYRS) */
+ egydScriptTag, /* 'egyd' (EGYD) */
+ egyhScriptTag, /* 'egyh' (EGYH) */
+ egypScriptTag, /* 'egyp' (EGYPTIAN_HIEROGLYPHS) */
+ geokScriptTag, /* 'geok' (GEOK) */
+ hansScriptTag, /* 'hans' (HANS) */
+ hantScriptTag, /* 'hant' (HANT) */
+ hmngScriptTag, /* 'hmng' (HMNG) */
+ hungScriptTag, /* 'hung' (HUNG) */
+ indsScriptTag, /* 'inds' (INDS) */
+ javaScriptTag, /* 'java' (JAVANESE) */
+ kaliScriptTag, /* 'kali' (KAYAH_LI) */
+ latfScriptTag, /* 'latf' (LATF) */
+ latgScriptTag, /* 'latg' (LATG) */
+ lepcScriptTag, /* 'lepc' (LEPCHA) */
+ linaScriptTag, /* 'lina' (LINA) */
+ mandScriptTag, /* 'mand' (MANDAIC) */
+ mayaScriptTag, /* 'maya' (MAYA) */
+ meroScriptTag, /* 'mero' (MEROITIC_HIEROGLYPHS) */
+ nkooScriptTag, /* 'nko ' (NKO) */
+ orkhScriptTag, /* 'orkh' (OLD_TURKIC) */
+ permScriptTag, /* 'perm' (PERM) */
+ phagScriptTag, /* 'phag' (PHAGS_PA) */
+ phnxScriptTag, /* 'phnx' (PHOENICIAN) */
+ plrdScriptTag, /* 'plrd' (MIAO) */
+ roroScriptTag, /* 'roro' (RORO) */
+ saraScriptTag, /* 'sara' (SARA) */
+ syreScriptTag, /* 'syre' (SYRE) */
+ syrjScriptTag, /* 'syrj' (SYRJ) */
+ syrnScriptTag, /* 'syrn' (SYRN) */
+ tengScriptTag, /* 'teng' (TENG) */
+ vaiiScriptTag, /* 'vai ' (VAI) */
+ vispScriptTag, /* 'visp' (VISP) */
+ xsuxScriptTag, /* 'xsux' (CUNEIFORM) */
+ zxxxScriptTag, /* 'zxxx' (ZXXX) */
+ zzzzScriptTag, /* 'zzzz' (UNKNOWN) */
+ cariScriptTag, /* 'cari' (CARIAN) */
+ jpanScriptTag, /* 'jpan' (JPAN) */
+ lanaScriptTag, /* 'lana' (TAI_THAM) */
+ lyciScriptTag, /* 'lyci' (LYCIAN) */
+ lydiScriptTag, /* 'lydi' (LYDIAN) */
+ olckScriptTag, /* 'olck' (OL_CHIKI) */
+ rjngScriptTag, /* 'rjng' (REJANG) */
+ saurScriptTag, /* 'saur' (SAURASHTRA) */
+ sgnwScriptTag, /* 'sgnw' (SGNW) */
+ sundScriptTag, /* 'sund' (SUNDANESE) */
+ moonScriptTag, /* 'moon' (MOON) */
+ mteiScriptTag, /* 'mtei' (MEETEI_MAYEK) */
+ armiScriptTag, /* 'armi' (IMPERIAL_ARAMAIC) */
+ avstScriptTag, /* 'avst' (AVESTAN) */
+ cakmScriptTag, /* 'cakm' (CHAKMA) */
+ koreScriptTag, /* 'kore' (KORE) */
+ kthiScriptTag, /* 'kthi' (KAITHI) */
+ maniScriptTag, /* 'mani' (MANI) */
+ phliScriptTag, /* 'phli' (INSCRIPTIONAL_PAHLAVI) */
+ phlpScriptTag, /* 'phlp' (PHLP) */
+ phlvScriptTag, /* 'phlv' (PHLV) */
+ prtiScriptTag, /* 'prti' (INSCRIPTIONAL_PARTHIAN) */
+ samrScriptTag, /* 'samr' (SAMARITAN) */
+ tavtScriptTag, /* 'tavt' (TAI_VIET) */
+ zmthScriptTag, /* 'zmth' (ZMTH) */
+ zsymScriptTag, /* 'zsym' (ZSYM) */
+ bamuScriptTag, /* 'bamu' (BAMUM) */
+ lisuScriptTag, /* 'lisu' (LISU) */
+ nkgbScriptTag, /* 'nkgb' (NKGB) */
+ sarbScriptTag, /* 'sarb' (OLD_SOUTH_ARABIAN) */
+ bassScriptTag, /* 'bass' (BASS) */
+ duplScriptTag, /* 'dupl' (DUPL) */
+ elbaScriptTag, /* 'elba' (ELBA) */
+ granScriptTag, /* 'gran' (GRAN) */
+ kpelScriptTag, /* 'kpel' (KPEL) */
+ lomaScriptTag, /* 'loma' (LOMA) */
+ mendScriptTag, /* 'mend' (MEND) */
+ mercScriptTag, /* 'merc' (MEROITIC_CURSIVE) */
+ narbScriptTag, /* 'narb' (NARB) */
+ nbatScriptTag, /* 'nbat' (NBAT) */
+ palmScriptTag, /* 'palm' (PALM) */
+ sindScriptTag, /* 'sind' (SIND) */
+ waraScriptTag, /* 'wara' (WARA) */
+ afakScriptTag, /* 'afak' (AFAK) */
+ jurcScriptTag, /* 'jurc' (JURC) */
+ mrooScriptTag, /* 'mroo' (MROO) */
+ nshuScriptTag, /* 'nshu' (NSHU) */
+ shrdScriptTag, /* 'shrd' (SHARADA) */
+ soraScriptTag, /* 'sora' (SORA_SOMPENG) */
+ takrScriptTag, /* 'takr' (TAKRI) */
+ tangScriptTag, /* 'tang' (TANG) */
+ woleScriptTag, /* 'wole' (WOLE) */
+ khojScriptTag, /* 'khoj' (KHOJ) */
+ tirhScriptTag /* 'tirh' (TIRH) */
+};
+
+const LETag OpenTypeLayoutEngine::languageTags[] = {
+ nullLanguageTag, /* '' (null) */
+ araLanguageTag, /* 'ARA' (Arabic) */
+ asmLanguageTag, /* 'ASM' (Assamese) */
+ benLanguageTag, /* 'BEN' (Bengali) */
+ farLanguageTag, /* 'FAR' (Farsi) */
+ gujLanguageTag, /* 'GUJ' (Gujarati) */
+ hinLanguageTag, /* 'HIN' (Hindi) */
+ iwrLanguageTag, /* 'IWR' (Hebrew) */
+ jiiLanguageTag, /* 'JII' (Yiddish) */
+ janLanguageTag, /* 'JAN' (Japanese) */
+ kanLanguageTag, /* 'KAN' (Kannada) */
+ kokLanguageTag, /* 'KOK' (Konkani) */
+ korLanguageTag, /* 'KOR' (Korean) */
+ kshLanguageTag, /* 'KSH' (Kashmiri) */
+ malLanguageTag, /* 'MAL' (Malayalam (Traditional)) */
+ marLanguageTag, /* 'MAR' (Marathi) */
+ mlrLanguageTag, /* 'MLR' (Malayalam (Reformed)) */
+ mniLanguageTag, /* 'MNI' (Manipuri) */
+ oriLanguageTag, /* 'ORI' (Oriya) */
+ sanLanguageTag, /* 'SAN' (Sanscrit) */
+ sndLanguageTag, /* 'SND' (Sindhi) */
+ snhLanguageTag, /* 'SNH' (Sinhalese) */
+ syrLanguageTag, /* 'SYR' (Syriac) */
+ tamLanguageTag, /* 'TAM' (Tamil) */
+ telLanguageTag, /* 'TEL' (Telugu) */
+ thaLanguageTag, /* 'THA' (Thai) */
+ urdLanguageTag, /* 'URD' (Urdu) */
+ zhpLanguageTag, /* 'ZHP' (Chinese (Phonetic)) */
+ zhsLanguageTag, /* 'ZHS' (Chinese (Simplified)) */
+ zhtLanguageTag, /* 'ZHT' (Chinese (Traditional)) */
+ afkLanguageTag, /* 'AFK' (Afrikaans) */
+ belLanguageTag, /* 'BEL' (Belarussian) */
+ bgrLanguageTag, /* 'BGR' (Bulgarian) */
+ catLanguageTag, /* 'CAT' (Catalan) */
+ cheLanguageTag, /* 'CHE' (Chechen) */
+ copLanguageTag, /* 'COP' (Coptic) */
+ csyLanguageTag, /* 'CSY' (Czech) */
+ danLanguageTag, /* 'DAN' (Danish) */
+ deuLanguageTag, /* 'DEU' (German) */
+ dznLanguageTag, /* 'DZN' (Dzongkha) */
+ ellLanguageTag, /* 'ELL' (Greek) */
+ engLanguageTag, /* 'ENG' (English) */
+ espLanguageTag, /* 'ESP' (Spanish) */
+ etiLanguageTag, /* 'ETI' (Estonian) */
+ euqLanguageTag, /* 'EUQ' (Basque) */
+ finLanguageTag, /* 'FIN' (Finnish) */
+ fraLanguageTag, /* 'FRA' (French) */
+ gaeLanguageTag, /* 'GAE' (Gaelic) */
+ hauLanguageTag, /* 'HAU' (Hausa) */
+ hrvLanguageTag, /* 'HRV' (Croation) */
+ hunLanguageTag, /* 'HUN' (Hungarian) */
+ hyeLanguageTag, /* 'HYE' (Armenian) */
+ indLanguageTag, /* 'IND' (Indonesian) */
+ itaLanguageTag, /* 'ITA' (Italian) */
+ khmLanguageTag, /* 'KHM' (Khmer) */
+ mngLanguageTag, /* 'MNG' (Mongolian) */
+ mtsLanguageTag, /* 'MTS' (Maltese) */
+ nepLanguageTag, /* 'NEP' (Nepali) */
+ nldLanguageTag, /* 'NLD' (Dutch) */
+ pasLanguageTag, /* 'PAS' (Pashto) */
+ plkLanguageTag, /* 'PLK' (Polish) */
+ ptgLanguageTag, /* 'PTG' (Portuguese) */
+ romLanguageTag, /* 'ROM' (Romanian) */
+ rusLanguageTag, /* 'RUS' (Russian) */
+ skyLanguageTag, /* 'SKY' (Slovak) */
+ slvLanguageTag, /* 'SLV' (Slovenian) */
+ sqiLanguageTag, /* 'SQI' (Albanian) */
+ srbLanguageTag, /* 'SRB' (Serbian) */
+ sveLanguageTag, /* 'SVE' (Swedish) */
+ tibLanguageTag, /* 'TIB' (Tibetan) */
+ trkLanguageTag, /* 'TRK' (Turkish) */
+ welLanguageTag /* 'WEL' (Welsh) */
+};
+
+U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-50.1/layout/ScriptAndLanguageTags.h b/Build/source/libs/icu/icu-50.1/layout/ScriptAndLanguageTags.h
new file mode 100644
index 00000000000..37f221c3f00
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/ScriptAndLanguageTags.h
@@ -0,0 +1,269 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2011. All Rights Reserved.
+ *
+ * WARNING: THIS FILE IS MACHINE GENERATED. DO NOT HAND EDIT IT UNLESS
+ * YOU REALLY KNOW WHAT YOU'RE DOING.
+ *
+ * Generated on: 11/01/2011 04:08:11 PM PDT
+ */
+
+#ifndef __SCRIPTANDLANGUAGES_H
+#define __SCRIPTANDLANGUAGES_H
+
+#include "LETypes.h"
+
+/**
+ * \file
+ * \internal
+ */
+
+U_NAMESPACE_BEGIN
+
+const LETag zyyyScriptTag = 0x7A797979; /* 'zyyy' (COMMON) */
+const LETag zinhScriptTag = 0x7A696E68; /* 'zinh' (INHERITED) */
+const LETag arabScriptTag = 0x61726162; /* 'arab' (ARABIC) */
+const LETag armnScriptTag = 0x61726D6E; /* 'armn' (ARMENIAN) */
+const LETag bengScriptTag = 0x62656E67; /* 'beng' (BENGALI) */
+const LETag bng2ScriptTag = 0x626E6732; /* 'bng2' (BENGALI v.2) (manually added) */
+const LETag bopoScriptTag = 0x626F706F; /* 'bopo' (BOPOMOFO) */
+const LETag cherScriptTag = 0x63686572; /* 'cher' (CHEROKEE) */
+const LETag coptScriptTag = 0x636F7074; /* 'copt' (COPTIC) */
+const LETag cyrlScriptTag = 0x6379726C; /* 'cyrl' (CYRILLIC) */
+const LETag dsrtScriptTag = 0x64737274; /* 'dsrt' (DESERET) */
+const LETag devaScriptTag = 0x64657661; /* 'deva' (DEVANAGARI) */
+const LETag dev2ScriptTag = 0x64657632; /* 'dev2' (DEVANAGARI v.2) (manually added) */
+const LETag ethiScriptTag = 0x65746869; /* 'ethi' (ETHIOPIC) */
+const LETag georScriptTag = 0x67656F72; /* 'geor' (GEORGIAN) */
+const LETag gothScriptTag = 0x676F7468; /* 'goth' (GOTHIC) */
+const LETag grekScriptTag = 0x6772656B; /* 'grek' (GREEK) */
+const LETag gujrScriptTag = 0x67756A72; /* 'gujr' (GUJARATI) */
+const LETag gjr2ScriptTag = 0x676A7232; /* 'gjr2' (GUJARATI v.2) (manually added) */
+const LETag guruScriptTag = 0x67757275; /* 'guru' (GURMUKHI) */
+const LETag gur2ScriptTag = 0x67757232; /* 'gur2' (GURMUKHI v.2) (manually added) */
+const LETag haniScriptTag = 0x68616E69; /* 'hani' (HAN) */
+const LETag hangScriptTag = 0x68616E67; /* 'hang' (HANGUL) */
+const LETag hebrScriptTag = 0x68656272; /* 'hebr' (HEBREW) */
+const LETag hiraScriptTag = 0x68697261; /* 'hira' (HIRAGANA) */
+const LETag kndaScriptTag = 0x6B6E6461; /* 'knda' (KANNADA) */
+const LETag knd2ScriptTag = 0x6B6E6432; /* 'knd2' (KANNADA v.2) (manually added) */
+const LETag kanaScriptTag = 0x6B616E61; /* 'kana' (KATAKANA) */
+const LETag khmrScriptTag = 0x6B686D72; /* 'khmr' (KHMER) */
+const LETag laooScriptTag = 0x6C616F20; /* 'lao ' (LAO) */
+const LETag latnScriptTag = 0x6C61746E; /* 'latn' (LATIN) */
+const LETag mlymScriptTag = 0x6D6C796D; /* 'mlym' (MALAYALAM) */
+const LETag mlm2ScriptTag = 0x6D6C6D32; /* 'mlm2' (MALAYALAM v.2) (manually added) */
+const LETag mongScriptTag = 0x6D6F6E67; /* 'mong' (MONGOLIAN) */
+const LETag mymrScriptTag = 0x6D796D72; /* 'mymr' (MYANMAR) */
+const LETag ogamScriptTag = 0x6F67616D; /* 'ogam' (OGHAM) */
+const LETag italScriptTag = 0x6974616C; /* 'ital' (OLD_ITALIC) */
+const LETag oryaScriptTag = 0x6F727961; /* 'orya' (ORIYA) */
+const LETag ory2ScriptTag = 0x6F727932; /* 'ory2' (ORIYA v.2) (manually added) */
+const LETag runrScriptTag = 0x72756E72; /* 'runr' (RUNIC) */
+const LETag sinhScriptTag = 0x73696E68; /* 'sinh' (SINHALA) */
+const LETag syrcScriptTag = 0x73797263; /* 'syrc' (SYRIAC) */
+const LETag tamlScriptTag = 0x74616D6C; /* 'taml' (TAMIL) */
+const LETag tml2ScriptTag = 0x746D6C32; /* 'tml2' (TAMIL v.2) (manually added) */
+const LETag teluScriptTag = 0x74656C75; /* 'telu' (TELUGU) */
+const LETag tel2ScriptTag = 0x74656C32; /* 'tel2' (TELUGU v.2) (manually added) */
+const LETag thaaScriptTag = 0x74686161; /* 'thaa' (THAANA) */
+const LETag thaiScriptTag = 0x74686169; /* 'thai' (THAI) */
+const LETag tibtScriptTag = 0x74696274; /* 'tibt' (TIBETAN) */
+const LETag cansScriptTag = 0x63616E73; /* 'cans' (CANADIAN_ABORIGINAL) */
+const LETag yiiiScriptTag = 0x79692020; /* 'yi ' (YI) */
+const LETag tglgScriptTag = 0x74676C67; /* 'tglg' (TAGALOG) */
+const LETag hanoScriptTag = 0x68616E6F; /* 'hano' (HANUNOO) */
+const LETag buhdScriptTag = 0x62756864; /* 'buhd' (BUHID) */
+const LETag tagbScriptTag = 0x74616762; /* 'tagb' (TAGBANWA) */
+const LETag braiScriptTag = 0x62726169; /* 'brai' (BRAILLE) */
+const LETag cprtScriptTag = 0x63707274; /* 'cprt' (CYPRIOT) */
+const LETag limbScriptTag = 0x6C696D62; /* 'limb' (LIMBU) */
+const LETag linbScriptTag = 0x6C696E62; /* 'linb' (LINEAR_B) */
+const LETag osmaScriptTag = 0x6F736D61; /* 'osma' (OSMANYA) */
+const LETag shawScriptTag = 0x73686177; /* 'shaw' (SHAVIAN) */
+const LETag taleScriptTag = 0x74616C65; /* 'tale' (TAI_LE) */
+const LETag ugarScriptTag = 0x75676172; /* 'ugar' (UGARITIC) */
+const LETag hrktScriptTag = 0x68726B74; /* 'hrkt' (KATAKANA_OR_HIRAGANA) */
+const LETag bugiScriptTag = 0x62756769; /* 'bugi' (BUGINESE) */
+const LETag glagScriptTag = 0x676C6167; /* 'glag' (GLAGOLITIC) */
+const LETag kharScriptTag = 0x6B686172; /* 'khar' (KHAROSHTHI) */
+const LETag syloScriptTag = 0x73796C6F; /* 'sylo' (SYLOTI_NAGRI) */
+const LETag taluScriptTag = 0x74616C75; /* 'talu' (NEW_TAI_LUE) */
+const LETag tfngScriptTag = 0x74666E67; /* 'tfng' (TIFINAGH) */
+const LETag xpeoScriptTag = 0x7870656F; /* 'xpeo' (OLD_PERSIAN) */
+const LETag baliScriptTag = 0x62616C69; /* 'bali' (BALINESE) */
+const LETag batkScriptTag = 0x6261746B; /* 'batk' (BATAK) */
+const LETag blisScriptTag = 0x626C6973; /* 'blis' (BLIS) */
+const LETag brahScriptTag = 0x62726168; /* 'brah' (BRAHMI) */
+const LETag chamScriptTag = 0x6368616D; /* 'cham' (CHAM) */
+const LETag cirtScriptTag = 0x63697274; /* 'cirt' (CIRT) */
+const LETag cyrsScriptTag = 0x63797273; /* 'cyrs' (CYRS) */
+const LETag egydScriptTag = 0x65677964; /* 'egyd' (EGYD) */
+const LETag egyhScriptTag = 0x65677968; /* 'egyh' (EGYH) */
+const LETag egypScriptTag = 0x65677970; /* 'egyp' (EGYPTIAN_HIEROGLYPHS) */
+const LETag geokScriptTag = 0x67656F6B; /* 'geok' (GEOK) */
+const LETag hansScriptTag = 0x68616E73; /* 'hans' (HANS) */
+const LETag hantScriptTag = 0x68616E74; /* 'hant' (HANT) */
+const LETag hmngScriptTag = 0x686D6E67; /* 'hmng' (HMNG) */
+const LETag hungScriptTag = 0x68756E67; /* 'hung' (HUNG) */
+const LETag indsScriptTag = 0x696E6473; /* 'inds' (INDS) */
+const LETag javaScriptTag = 0x6A617661; /* 'java' (JAVANESE) */
+const LETag kaliScriptTag = 0x6B616C69; /* 'kali' (KAYAH_LI) */
+const LETag latfScriptTag = 0x6C617466; /* 'latf' (LATF) */
+const LETag latgScriptTag = 0x6C617467; /* 'latg' (LATG) */
+const LETag lepcScriptTag = 0x6C657063; /* 'lepc' (LEPCHA) */
+const LETag linaScriptTag = 0x6C696E61; /* 'lina' (LINA) */
+const LETag mandScriptTag = 0x6D616E64; /* 'mand' (MANDAIC) */
+const LETag mayaScriptTag = 0x6D617961; /* 'maya' (MAYA) */
+const LETag meroScriptTag = 0x6D65726F; /* 'mero' (MEROITIC_HIEROGLYPHS) */
+const LETag nkooScriptTag = 0x6E6B6F20; /* 'nko ' (NKO) */
+const LETag orkhScriptTag = 0x6F726B68; /* 'orkh' (OLD_TURKIC) */
+const LETag permScriptTag = 0x7065726D; /* 'perm' (PERM) */
+const LETag phagScriptTag = 0x70686167; /* 'phag' (PHAGS_PA) */
+const LETag phnxScriptTag = 0x70686E78; /* 'phnx' (PHOENICIAN) */
+const LETag plrdScriptTag = 0x706C7264; /* 'plrd' (MIAO) */
+const LETag roroScriptTag = 0x726F726F; /* 'roro' (RORO) */
+const LETag saraScriptTag = 0x73617261; /* 'sara' (SARA) */
+const LETag syreScriptTag = 0x73797265; /* 'syre' (SYRE) */
+const LETag syrjScriptTag = 0x7379726A; /* 'syrj' (SYRJ) */
+const LETag syrnScriptTag = 0x7379726E; /* 'syrn' (SYRN) */
+const LETag tengScriptTag = 0x74656E67; /* 'teng' (TENG) */
+const LETag vaiiScriptTag = 0x76616920; /* 'vai ' (VAI) */
+const LETag vispScriptTag = 0x76697370; /* 'visp' (VISP) */
+const LETag xsuxScriptTag = 0x78737578; /* 'xsux' (CUNEIFORM) */
+const LETag zxxxScriptTag = 0x7A787878; /* 'zxxx' (ZXXX) */
+const LETag zzzzScriptTag = 0x7A7A7A7A; /* 'zzzz' (UNKNOWN) */
+const LETag cariScriptTag = 0x63617269; /* 'cari' (CARIAN) */
+const LETag jpanScriptTag = 0x6A70616E; /* 'jpan' (JPAN) */
+const LETag lanaScriptTag = 0x6C616E61; /* 'lana' (TAI_THAM) */
+const LETag lyciScriptTag = 0x6C796369; /* 'lyci' (LYCIAN) */
+const LETag lydiScriptTag = 0x6C796469; /* 'lydi' (LYDIAN) */
+const LETag olckScriptTag = 0x6F6C636B; /* 'olck' (OL_CHIKI) */
+const LETag rjngScriptTag = 0x726A6E67; /* 'rjng' (REJANG) */
+const LETag saurScriptTag = 0x73617572; /* 'saur' (SAURASHTRA) */
+const LETag sgnwScriptTag = 0x73676E77; /* 'sgnw' (SGNW) */
+const LETag sundScriptTag = 0x73756E64; /* 'sund' (SUNDANESE) */
+const LETag moonScriptTag = 0x6D6F6F6E; /* 'moon' (MOON) */
+const LETag mteiScriptTag = 0x6D746569; /* 'mtei' (MEETEI_MAYEK) */
+const LETag armiScriptTag = 0x61726D69; /* 'armi' (IMPERIAL_ARAMAIC) */
+const LETag avstScriptTag = 0x61767374; /* 'avst' (AVESTAN) */
+const LETag cakmScriptTag = 0x63616B6D; /* 'cakm' (CHAKMA) */
+const LETag koreScriptTag = 0x6B6F7265; /* 'kore' (KORE) */
+const LETag kthiScriptTag = 0x6B746869; /* 'kthi' (KAITHI) */
+const LETag maniScriptTag = 0x6D616E69; /* 'mani' (MANI) */
+const LETag phliScriptTag = 0x70686C69; /* 'phli' (INSCRIPTIONAL_PAHLAVI) */
+const LETag phlpScriptTag = 0x70686C70; /* 'phlp' (PHLP) */
+const LETag phlvScriptTag = 0x70686C76; /* 'phlv' (PHLV) */
+const LETag prtiScriptTag = 0x70727469; /* 'prti' (INSCRIPTIONAL_PARTHIAN) */
+const LETag samrScriptTag = 0x73616D72; /* 'samr' (SAMARITAN) */
+const LETag tavtScriptTag = 0x74617674; /* 'tavt' (TAI_VIET) */
+const LETag zmthScriptTag = 0x7A6D7468; /* 'zmth' (ZMTH) */
+const LETag zsymScriptTag = 0x7A73796D; /* 'zsym' (ZSYM) */
+const LETag bamuScriptTag = 0x62616D75; /* 'bamu' (BAMUM) */
+const LETag lisuScriptTag = 0x6C697375; /* 'lisu' (LISU) */
+const LETag nkgbScriptTag = 0x6E6B6762; /* 'nkgb' (NKGB) */
+const LETag sarbScriptTag = 0x73617262; /* 'sarb' (OLD_SOUTH_ARABIAN) */
+const LETag bassScriptTag = 0x62617373; /* 'bass' (BASS) */
+const LETag duplScriptTag = 0x6475706C; /* 'dupl' (DUPL) */
+const LETag elbaScriptTag = 0x656C6261; /* 'elba' (ELBA) */
+const LETag granScriptTag = 0x6772616E; /* 'gran' (GRAN) */
+const LETag kpelScriptTag = 0x6B70656C; /* 'kpel' (KPEL) */
+const LETag lomaScriptTag = 0x6C6F6D61; /* 'loma' (LOMA) */
+const LETag mendScriptTag = 0x6D656E64; /* 'mend' (MEND) */
+const LETag mercScriptTag = 0x6D657263; /* 'merc' (MEROITIC_CURSIVE) */
+const LETag narbScriptTag = 0x6E617262; /* 'narb' (NARB) */
+const LETag nbatScriptTag = 0x6E626174; /* 'nbat' (NBAT) */
+const LETag palmScriptTag = 0x70616C6D; /* 'palm' (PALM) */
+const LETag sindScriptTag = 0x73696E64; /* 'sind' (SIND) */
+const LETag waraScriptTag = 0x77617261; /* 'wara' (WARA) */
+const LETag afakScriptTag = 0x6166616B; /* 'afak' (AFAK) */
+const LETag jurcScriptTag = 0x6A757263; /* 'jurc' (JURC) */
+const LETag mrooScriptTag = 0x6D726F6F; /* 'mroo' (MROO) */
+const LETag nshuScriptTag = 0x6E736875; /* 'nshu' (NSHU) */
+const LETag shrdScriptTag = 0x73687264; /* 'shrd' (SHARADA) */
+const LETag soraScriptTag = 0x736F7261; /* 'sora' (SORA_SOMPENG) */
+const LETag takrScriptTag = 0x74616B72; /* 'takr' (TAKRI) */
+const LETag tangScriptTag = 0x74616E67; /* 'tang' (TANG) */
+const LETag woleScriptTag = 0x776F6C65; /* 'wole' (WOLE) */
+const LETag khojScriptTag = 0x6B686F6A; /* 'khoj' (KHOJ) */
+const LETag tirhScriptTag = 0x74697268; /* 'tirh' (TIRH) */
+
+const LETag nullScriptTag = 0x00000000; /* '' (NULL) */
+
+
+const LETag nullLanguageTag = 0x00000000; /* '' (null) */
+const LETag araLanguageTag = 0x41524120; /* 'ARA' (Arabic) */
+const LETag asmLanguageTag = 0x41534D20; /* 'ASM' (Assamese) */
+const LETag benLanguageTag = 0x42454E20; /* 'BEN' (Bengali) */
+const LETag farLanguageTag = 0x46415220; /* 'FAR' (Farsi) */
+const LETag gujLanguageTag = 0x47554A20; /* 'GUJ' (Gujarati) */
+const LETag hinLanguageTag = 0x48494E20; /* 'HIN' (Hindi) */
+const LETag iwrLanguageTag = 0x49575220; /* 'IWR' (Hebrew) */
+const LETag jiiLanguageTag = 0x4A494920; /* 'JII' (Yiddish) */
+const LETag janLanguageTag = 0x4A414E20; /* 'JAN' (Japanese) */
+const LETag kanLanguageTag = 0x4B414E20; /* 'KAN' (Kannada) */
+const LETag kokLanguageTag = 0x4B4F4B20; /* 'KOK' (Konkani) */
+const LETag korLanguageTag = 0x4B4F5220; /* 'KOR' (Korean) */
+const LETag kshLanguageTag = 0x4B534820; /* 'KSH' (Kashmiri) */
+const LETag malLanguageTag = 0x4D414C20; /* 'MAL' (Malayalam (Traditional)) */
+const LETag marLanguageTag = 0x4D415220; /* 'MAR' (Marathi) */
+const LETag mlrLanguageTag = 0x4D4C5220; /* 'MLR' (Malayalam (Reformed)) */
+const LETag mniLanguageTag = 0x4D4E4920; /* 'MNI' (Manipuri) */
+const LETag oriLanguageTag = 0x4F524920; /* 'ORI' (Oriya) */
+const LETag sanLanguageTag = 0x53414E20; /* 'SAN' (Sanscrit) */
+const LETag sndLanguageTag = 0x534E4420; /* 'SND' (Sindhi) */
+const LETag snhLanguageTag = 0x534E4820; /* 'SNH' (Sinhalese) */
+const LETag syrLanguageTag = 0x53595220; /* 'SYR' (Syriac) */
+const LETag tamLanguageTag = 0x54414D20; /* 'TAM' (Tamil) */
+const LETag telLanguageTag = 0x54454C20; /* 'TEL' (Telugu) */
+const LETag thaLanguageTag = 0x54484120; /* 'THA' (Thai) */
+const LETag urdLanguageTag = 0x55524420; /* 'URD' (Urdu) */
+const LETag zhpLanguageTag = 0x5A485020; /* 'ZHP' (Chinese (Phonetic)) */
+const LETag zhsLanguageTag = 0x5A485320; /* 'ZHS' (Chinese (Simplified)) */
+const LETag zhtLanguageTag = 0x5A485420; /* 'ZHT' (Chinese (Traditional)) */
+const LETag afkLanguageTag = 0x41464B20; /* 'AFK' (Afrikaans) */
+const LETag belLanguageTag = 0x42454C20; /* 'BEL' (Belarussian) */
+const LETag bgrLanguageTag = 0x42475220; /* 'BGR' (Bulgarian) */
+const LETag catLanguageTag = 0x43415420; /* 'CAT' (Catalan) */
+const LETag cheLanguageTag = 0x43484520; /* 'CHE' (Chechen) */
+const LETag copLanguageTag = 0x434F5020; /* 'COP' (Coptic) */
+const LETag csyLanguageTag = 0x43535920; /* 'CSY' (Czech) */
+const LETag danLanguageTag = 0x44414E20; /* 'DAN' (Danish) */
+const LETag deuLanguageTag = 0x44455520; /* 'DEU' (German) */
+const LETag dznLanguageTag = 0x445A4E20; /* 'DZN' (Dzongkha) */
+const LETag ellLanguageTag = 0x454C4C20; /* 'ELL' (Greek) */
+const LETag engLanguageTag = 0x454E4720; /* 'ENG' (English) */
+const LETag espLanguageTag = 0x45535020; /* 'ESP' (Spanish) */
+const LETag etiLanguageTag = 0x45544920; /* 'ETI' (Estonian) */
+const LETag euqLanguageTag = 0x45555120; /* 'EUQ' (Basque) */
+const LETag finLanguageTag = 0x46494E20; /* 'FIN' (Finnish) */
+const LETag fraLanguageTag = 0x46524120; /* 'FRA' (French) */
+const LETag gaeLanguageTag = 0x47414520; /* 'GAE' (Gaelic) */
+const LETag hauLanguageTag = 0x48415520; /* 'HAU' (Hausa) */
+const LETag hrvLanguageTag = 0x48525620; /* 'HRV' (Croation) */
+const LETag hunLanguageTag = 0x48554E20; /* 'HUN' (Hungarian) */
+const LETag hyeLanguageTag = 0x48594520; /* 'HYE' (Armenian) */
+const LETag indLanguageTag = 0x494E4420; /* 'IND' (Indonesian) */
+const LETag itaLanguageTag = 0x49544120; /* 'ITA' (Italian) */
+const LETag khmLanguageTag = 0x4B484D20; /* 'KHM' (Khmer) */
+const LETag mngLanguageTag = 0x4D4E4720; /* 'MNG' (Mongolian) */
+const LETag mtsLanguageTag = 0x4D545320; /* 'MTS' (Maltese) */
+const LETag nepLanguageTag = 0x4E455020; /* 'NEP' (Nepali) */
+const LETag nldLanguageTag = 0x4E4C4420; /* 'NLD' (Dutch) */
+const LETag pasLanguageTag = 0x50415320; /* 'PAS' (Pashto) */
+const LETag plkLanguageTag = 0x504C4B20; /* 'PLK' (Polish) */
+const LETag ptgLanguageTag = 0x50544720; /* 'PTG' (Portuguese) */
+const LETag romLanguageTag = 0x524F4D20; /* 'ROM' (Romanian) */
+const LETag rusLanguageTag = 0x52555320; /* 'RUS' (Russian) */
+const LETag skyLanguageTag = 0x534B5920; /* 'SKY' (Slovak) */
+const LETag slvLanguageTag = 0x534C5620; /* 'SLV' (Slovenian) */
+const LETag sqiLanguageTag = 0x53514920; /* 'SQI' (Albanian) */
+const LETag srbLanguageTag = 0x53524220; /* 'SRB' (Serbian) */
+const LETag sveLanguageTag = 0x53564520; /* 'SVE' (Swedish) */
+const LETag tibLanguageTag = 0x54494220; /* 'TIB' (Tibetan) */
+const LETag trkLanguageTag = 0x54524B20; /* 'TRK' (Turkish) */
+const LETag welLanguageTag = 0x57454C20; /* 'WEL' (Welsh) */
+
+
+U_NAMESPACE_END
+#endif
diff --git a/Build/source/libs/icu/icu-50.1/layout/SegmentArrayProcessor.cpp b/Build/source/libs/icu/icu-50.1/layout/SegmentArrayProcessor.cpp
new file mode 100644
index 00000000000..b915cb9b92c
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/SegmentArrayProcessor.cpp
@@ -0,0 +1,60 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
+ *
+ */
+
+#include "LETypes.h"
+#include "MorphTables.h"
+#include "SubtableProcessor.h"
+#include "NonContextualGlyphSubst.h"
+#include "NonContextualGlyphSubstProc.h"
+#include "SegmentArrayProcessor.h"
+#include "LEGlyphStorage.h"
+#include "LESwaps.h"
+
+U_NAMESPACE_BEGIN
+
+UOBJECT_DEFINE_RTTI_IMPLEMENTATION(SegmentArrayProcessor)
+
+SegmentArrayProcessor::SegmentArrayProcessor()
+{
+}
+
+SegmentArrayProcessor::SegmentArrayProcessor(const MorphSubtableHeader *morphSubtableHeader)
+ : NonContextualGlyphSubstitutionProcessor(morphSubtableHeader)
+{
+ const NonContextualGlyphSubstitutionHeader *header = (const NonContextualGlyphSubstitutionHeader *) morphSubtableHeader;
+
+ segmentArrayLookupTable = (const SegmentArrayLookupTable *) &header->table;
+}
+
+SegmentArrayProcessor::~SegmentArrayProcessor()
+{
+}
+
+void SegmentArrayProcessor::process(LEGlyphStorage &glyphStorage)
+{
+ const LookupSegment *segments = segmentArrayLookupTable->segments;
+ le_int32 glyphCount = glyphStorage.getGlyphCount();
+ le_int32 glyph;
+
+ for (glyph = 0; glyph < glyphCount; glyph += 1) {
+ LEGlyphID thisGlyph = glyphStorage[glyph];
+ const LookupSegment *lookupSegment = segmentArrayLookupTable->lookupSegment(segments, thisGlyph);
+
+ if (lookupSegment != NULL) {
+ TTGlyphID firstGlyph = SWAPW(lookupSegment->firstGlyph);
+ le_int16 offset = SWAPW(lookupSegment->value);
+
+ if (offset != 0) {
+ TTGlyphID *glyphArray = (TTGlyphID *) ((char *) subtableHeader + offset);
+ TTGlyphID newGlyph = SWAPW(glyphArray[LE_GET_GLYPH(thisGlyph) - firstGlyph]);
+
+ glyphStorage[glyph] = LE_SET_GLYPH(thisGlyph, newGlyph);
+ }
+ }
+ }
+}
+
+U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-50.1/layout/SegmentArrayProcessor.h b/Build/source/libs/icu/icu-50.1/layout/SegmentArrayProcessor.h
new file mode 100644
index 00000000000..7e2028c98b5
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/SegmentArrayProcessor.h
@@ -0,0 +1,58 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
+ *
+ */
+
+#ifndef __SEGMENTARRAYPROCESSOR_H
+#define __SEGMENTARRAYPROCESSOR_H
+
+/**
+ * \file
+ * \internal
+ */
+
+#include "LETypes.h"
+#include "MorphTables.h"
+#include "SubtableProcessor.h"
+#include "NonContextualGlyphSubst.h"
+#include "NonContextualGlyphSubstProc.h"
+
+U_NAMESPACE_BEGIN
+
+class LEGlyphStorage;
+
+class SegmentArrayProcessor : public NonContextualGlyphSubstitutionProcessor
+{
+public:
+ virtual void process(LEGlyphStorage &glyphStorage);
+
+ SegmentArrayProcessor(const MorphSubtableHeader *morphSubtableHeader);
+
+ virtual ~SegmentArrayProcessor();
+
+ /**
+ * ICU "poor man's RTTI", returns a UClassID for the actual class.
+ *
+ * @stable ICU 2.8
+ */
+ virtual UClassID getDynamicClassID() const;
+
+ /**
+ * ICU "poor man's RTTI", returns a UClassID for this class.
+ *
+ * @stable ICU 2.8
+ */
+ static UClassID getStaticClassID();
+
+private:
+ SegmentArrayProcessor();
+
+protected:
+ const SegmentArrayLookupTable *segmentArrayLookupTable;
+
+};
+
+U_NAMESPACE_END
+#endif
+
diff --git a/Build/source/libs/icu/icu-50.1/layout/SegmentSingleProcessor.cpp b/Build/source/libs/icu/icu-50.1/layout/SegmentSingleProcessor.cpp
new file mode 100644
index 00000000000..75e33eb01d2
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/SegmentSingleProcessor.cpp
@@ -0,0 +1,54 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
+ *
+ */
+
+#include "LETypes.h"
+#include "MorphTables.h"
+#include "SubtableProcessor.h"
+#include "NonContextualGlyphSubst.h"
+#include "NonContextualGlyphSubstProc.h"
+#include "SegmentSingleProcessor.h"
+#include "LEGlyphStorage.h"
+#include "LESwaps.h"
+
+U_NAMESPACE_BEGIN
+
+UOBJECT_DEFINE_RTTI_IMPLEMENTATION(SegmentSingleProcessor)
+
+SegmentSingleProcessor::SegmentSingleProcessor()
+{
+}
+
+SegmentSingleProcessor::SegmentSingleProcessor(const MorphSubtableHeader *morphSubtableHeader)
+ : NonContextualGlyphSubstitutionProcessor(morphSubtableHeader)
+{
+ const NonContextualGlyphSubstitutionHeader *header = (const NonContextualGlyphSubstitutionHeader *) morphSubtableHeader;
+
+ segmentSingleLookupTable = (const SegmentSingleLookupTable *) &header->table;
+}
+
+SegmentSingleProcessor::~SegmentSingleProcessor()
+{
+}
+
+void SegmentSingleProcessor::process(LEGlyphStorage &glyphStorage)
+{
+ const LookupSegment *segments = segmentSingleLookupTable->segments;
+ le_int32 glyphCount = glyphStorage.getGlyphCount();
+ le_int32 glyph;
+
+ for (glyph = 0; glyph < glyphCount; glyph += 1) {
+ LEGlyphID thisGlyph = glyphStorage[glyph];
+ const LookupSegment *lookupSegment = segmentSingleLookupTable->lookupSegment(segments, thisGlyph);
+
+ if (lookupSegment != NULL) {
+ TTGlyphID newGlyph = (TTGlyphID) LE_GET_GLYPH(thisGlyph) + SWAPW(lookupSegment->value);
+
+ glyphStorage[glyph] = LE_SET_GLYPH(thisGlyph, newGlyph);
+ }
+ }
+}
+
+U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-50.1/layout/SegmentSingleProcessor.h b/Build/source/libs/icu/icu-50.1/layout/SegmentSingleProcessor.h
new file mode 100644
index 00000000000..64b2b72f162
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/SegmentSingleProcessor.h
@@ -0,0 +1,58 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
+ *
+ */
+
+#ifndef __SEGMENTSINGLEPROCESSOR_H
+#define __SEGMENTSINGLEPROCESSOR_H
+
+/**
+ * \file
+ * \internal
+ */
+
+#include "LETypes.h"
+#include "MorphTables.h"
+#include "SubtableProcessor.h"
+#include "NonContextualGlyphSubst.h"
+#include "NonContextualGlyphSubstProc.h"
+
+U_NAMESPACE_BEGIN
+
+class LEGlyphStorage;
+
+class SegmentSingleProcessor : public NonContextualGlyphSubstitutionProcessor
+{
+public:
+ virtual void process(LEGlyphStorage &glyphStorage);
+
+ SegmentSingleProcessor(const MorphSubtableHeader *morphSubtableHeader);
+
+ virtual ~SegmentSingleProcessor();
+
+ /**
+ * ICU "poor man's RTTI", returns a UClassID for the actual class.
+ *
+ * @stable ICU 2.8
+ */
+ virtual UClassID getDynamicClassID() const;
+
+ /**
+ * ICU "poor man's RTTI", returns a UClassID for this class.
+ *
+ * @stable ICU 2.8
+ */
+ static UClassID getStaticClassID();
+
+private:
+ SegmentSingleProcessor();
+
+protected:
+ const SegmentSingleLookupTable *segmentSingleLookupTable;
+
+};
+
+U_NAMESPACE_END
+#endif
+
diff --git a/Build/source/libs/icu/icu-50.1/layout/ShapingTypeData.cpp b/Build/source/libs/icu/icu-50.1/layout/ShapingTypeData.cpp
new file mode 100644
index 00000000000..75cf5524f3c
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/ShapingTypeData.cpp
@@ -0,0 +1,100 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2008. All Rights Reserved.
+ *
+ * WARNING: THIS FILE IS MACHINE GENERATED. DO NOT HAND EDIT IT UNLESS
+ * YOU REALLY KNOW WHAT YOU'RE DOING.
+ *
+ * Generated on: 05/29/2008 03:39:26 PM HST
+ */
+
+#include "LETypes.h"
+#include "ArabicShaping.h"
+
+U_NAMESPACE_BEGIN
+
+const le_uint8 ArabicShaping::shapingTypeTable[] = {
+ 0x00, 0x02, 0x00, 0xD7, 0x00, 0xAD, 0x00, 0xAD, 0x00, 0x05, 0x03, 0x00, 0x03, 0x6F, 0x00, 0x05,
+ 0x04, 0x83, 0x04, 0x89, 0x00, 0x05, 0x05, 0x91, 0x05, 0xBD, 0x00, 0x05, 0x05, 0xBF, 0x05, 0xBF,
+ 0x00, 0x05, 0x05, 0xC1, 0x05, 0xC2, 0x00, 0x05, 0x05, 0xC4, 0x05, 0xC5, 0x00, 0x05, 0x05, 0xC7,
+ 0x05, 0xC7, 0x00, 0x05, 0x06, 0x10, 0x06, 0x1A, 0x00, 0x05, 0x06, 0x22, 0x06, 0x25, 0x00, 0x04,
+ 0x06, 0x26, 0x06, 0x26, 0x00, 0x02, 0x06, 0x27, 0x06, 0x27, 0x00, 0x04, 0x06, 0x28, 0x06, 0x28,
+ 0x00, 0x02, 0x06, 0x29, 0x06, 0x29, 0x00, 0x04, 0x06, 0x2A, 0x06, 0x2E, 0x00, 0x02, 0x06, 0x2F,
+ 0x06, 0x32, 0x00, 0x04, 0x06, 0x33, 0x06, 0x3F, 0x00, 0x02, 0x06, 0x40, 0x06, 0x40, 0x00, 0x01,
+ 0x06, 0x41, 0x06, 0x47, 0x00, 0x02, 0x06, 0x48, 0x06, 0x48, 0x00, 0x04, 0x06, 0x49, 0x06, 0x4A,
+ 0x00, 0x02, 0x06, 0x4B, 0x06, 0x5E, 0x00, 0x05, 0x06, 0x6E, 0x06, 0x6F, 0x00, 0x02, 0x06, 0x70,
+ 0x06, 0x70, 0x00, 0x05, 0x06, 0x71, 0x06, 0x73, 0x00, 0x04, 0x06, 0x75, 0x06, 0x77, 0x00, 0x04,
+ 0x06, 0x78, 0x06, 0x87, 0x00, 0x02, 0x06, 0x88, 0x06, 0x99, 0x00, 0x04, 0x06, 0x9A, 0x06, 0xBF,
+ 0x00, 0x02, 0x06, 0xC0, 0x06, 0xC0, 0x00, 0x04, 0x06, 0xC1, 0x06, 0xC2, 0x00, 0x02, 0x06, 0xC3,
+ 0x06, 0xCB, 0x00, 0x04, 0x06, 0xCC, 0x06, 0xCC, 0x00, 0x02, 0x06, 0xCD, 0x06, 0xCD, 0x00, 0x04,
+ 0x06, 0xCE, 0x06, 0xCE, 0x00, 0x02, 0x06, 0xCF, 0x06, 0xCF, 0x00, 0x04, 0x06, 0xD0, 0x06, 0xD1,
+ 0x00, 0x02, 0x06, 0xD2, 0x06, 0xD3, 0x00, 0x04, 0x06, 0xD5, 0x06, 0xD5, 0x00, 0x04, 0x06, 0xD6,
+ 0x06, 0xDC, 0x00, 0x05, 0x06, 0xDE, 0x06, 0xE4, 0x00, 0x05, 0x06, 0xE7, 0x06, 0xE8, 0x00, 0x05,
+ 0x06, 0xEA, 0x06, 0xED, 0x00, 0x05, 0x06, 0xEE, 0x06, 0xEF, 0x00, 0x04, 0x06, 0xFA, 0x06, 0xFC,
+ 0x00, 0x02, 0x06, 0xFF, 0x06, 0xFF, 0x00, 0x02, 0x07, 0x0F, 0x07, 0x0F, 0x00, 0x05, 0x07, 0x10,
+ 0x07, 0x10, 0x00, 0x04, 0x07, 0x11, 0x07, 0x11, 0x00, 0x05, 0x07, 0x12, 0x07, 0x14, 0x00, 0x02,
+ 0x07, 0x15, 0x07, 0x19, 0x00, 0x04, 0x07, 0x1A, 0x07, 0x1D, 0x00, 0x02, 0x07, 0x1E, 0x07, 0x1E,
+ 0x00, 0x04, 0x07, 0x1F, 0x07, 0x27, 0x00, 0x02, 0x07, 0x28, 0x07, 0x28, 0x00, 0x04, 0x07, 0x29,
+ 0x07, 0x29, 0x00, 0x02, 0x07, 0x2A, 0x07, 0x2A, 0x00, 0x04, 0x07, 0x2B, 0x07, 0x2B, 0x00, 0x02,
+ 0x07, 0x2C, 0x07, 0x2C, 0x00, 0x04, 0x07, 0x2D, 0x07, 0x2E, 0x00, 0x02, 0x07, 0x2F, 0x07, 0x2F,
+ 0x00, 0x04, 0x07, 0x30, 0x07, 0x4A, 0x00, 0x05, 0x07, 0x4D, 0x07, 0x4D, 0x00, 0x04, 0x07, 0x4E,
+ 0x07, 0x58, 0x00, 0x02, 0x07, 0x59, 0x07, 0x5B, 0x00, 0x04, 0x07, 0x5C, 0x07, 0x6A, 0x00, 0x02,
+ 0x07, 0x6B, 0x07, 0x6C, 0x00, 0x04, 0x07, 0x6D, 0x07, 0x70, 0x00, 0x02, 0x07, 0x71, 0x07, 0x71,
+ 0x00, 0x04, 0x07, 0x72, 0x07, 0x72, 0x00, 0x02, 0x07, 0x73, 0x07, 0x74, 0x00, 0x04, 0x07, 0x75,
+ 0x07, 0x77, 0x00, 0x02, 0x07, 0x78, 0x07, 0x79, 0x00, 0x04, 0x07, 0x7A, 0x07, 0x7F, 0x00, 0x02,
+ 0x07, 0xA6, 0x07, 0xB0, 0x00, 0x05, 0x07, 0xCA, 0x07, 0xEA, 0x00, 0x02, 0x07, 0xEB, 0x07, 0xF3,
+ 0x00, 0x05, 0x07, 0xFA, 0x07, 0xFA, 0x00, 0x01, 0x09, 0x01, 0x09, 0x02, 0x00, 0x05, 0x09, 0x3C,
+ 0x09, 0x3C, 0x00, 0x05, 0x09, 0x41, 0x09, 0x48, 0x00, 0x05, 0x09, 0x4D, 0x09, 0x4D, 0x00, 0x05,
+ 0x09, 0x51, 0x09, 0x54, 0x00, 0x05, 0x09, 0x62, 0x09, 0x63, 0x00, 0x05, 0x09, 0x81, 0x09, 0x81,
+ 0x00, 0x05, 0x09, 0xBC, 0x09, 0xBC, 0x00, 0x05, 0x09, 0xC1, 0x09, 0xC4, 0x00, 0x05, 0x09, 0xCD,
+ 0x09, 0xCD, 0x00, 0x05, 0x09, 0xE2, 0x09, 0xE3, 0x00, 0x05, 0x0A, 0x01, 0x0A, 0x02, 0x00, 0x05,
+ 0x0A, 0x3C, 0x0A, 0x3C, 0x00, 0x05, 0x0A, 0x41, 0x0A, 0x42, 0x00, 0x05, 0x0A, 0x47, 0x0A, 0x48,
+ 0x00, 0x05, 0x0A, 0x4B, 0x0A, 0x4D, 0x00, 0x05, 0x0A, 0x51, 0x0A, 0x51, 0x00, 0x05, 0x0A, 0x70,
+ 0x0A, 0x71, 0x00, 0x05, 0x0A, 0x75, 0x0A, 0x75, 0x00, 0x05, 0x0A, 0x81, 0x0A, 0x82, 0x00, 0x05,
+ 0x0A, 0xBC, 0x0A, 0xBC, 0x00, 0x05, 0x0A, 0xC1, 0x0A, 0xC5, 0x00, 0x05, 0x0A, 0xC7, 0x0A, 0xC8,
+ 0x00, 0x05, 0x0A, 0xCD, 0x0A, 0xCD, 0x00, 0x05, 0x0A, 0xE2, 0x0A, 0xE3, 0x00, 0x05, 0x0B, 0x01,
+ 0x0B, 0x01, 0x00, 0x05, 0x0B, 0x3C, 0x0B, 0x3C, 0x00, 0x05, 0x0B, 0x3F, 0x0B, 0x3F, 0x00, 0x05,
+ 0x0B, 0x41, 0x0B, 0x44, 0x00, 0x05, 0x0B, 0x4D, 0x0B, 0x4D, 0x00, 0x05, 0x0B, 0x56, 0x0B, 0x56,
+ 0x00, 0x05, 0x0B, 0x62, 0x0B, 0x63, 0x00, 0x05, 0x0B, 0x82, 0x0B, 0x82, 0x00, 0x05, 0x0B, 0xC0,
+ 0x0B, 0xC0, 0x00, 0x05, 0x0B, 0xCD, 0x0B, 0xCD, 0x00, 0x05, 0x0C, 0x3E, 0x0C, 0x40, 0x00, 0x05,
+ 0x0C, 0x46, 0x0C, 0x48, 0x00, 0x05, 0x0C, 0x4A, 0x0C, 0x4D, 0x00, 0x05, 0x0C, 0x55, 0x0C, 0x56,
+ 0x00, 0x05, 0x0C, 0x62, 0x0C, 0x63, 0x00, 0x05, 0x0C, 0xBC, 0x0C, 0xBC, 0x00, 0x05, 0x0C, 0xBF,
+ 0x0C, 0xBF, 0x00, 0x05, 0x0C, 0xC6, 0x0C, 0xC6, 0x00, 0x05, 0x0C, 0xCC, 0x0C, 0xCD, 0x00, 0x05,
+ 0x0C, 0xE2, 0x0C, 0xE3, 0x00, 0x05, 0x0D, 0x41, 0x0D, 0x44, 0x00, 0x05, 0x0D, 0x4D, 0x0D, 0x4D,
+ 0x00, 0x05, 0x0D, 0x62, 0x0D, 0x63, 0x00, 0x05, 0x0D, 0xCA, 0x0D, 0xCA, 0x00, 0x05, 0x0D, 0xD2,
+ 0x0D, 0xD4, 0x00, 0x05, 0x0D, 0xD6, 0x0D, 0xD6, 0x00, 0x05, 0x0E, 0x31, 0x0E, 0x31, 0x00, 0x05,
+ 0x0E, 0x34, 0x0E, 0x3A, 0x00, 0x05, 0x0E, 0x47, 0x0E, 0x4E, 0x00, 0x05, 0x0E, 0xB1, 0x0E, 0xB1,
+ 0x00, 0x05, 0x0E, 0xB4, 0x0E, 0xB9, 0x00, 0x05, 0x0E, 0xBB, 0x0E, 0xBC, 0x00, 0x05, 0x0E, 0xC8,
+ 0x0E, 0xCD, 0x00, 0x05, 0x0F, 0x18, 0x0F, 0x19, 0x00, 0x05, 0x0F, 0x35, 0x0F, 0x35, 0x00, 0x05,
+ 0x0F, 0x37, 0x0F, 0x37, 0x00, 0x05, 0x0F, 0x39, 0x0F, 0x39, 0x00, 0x05, 0x0F, 0x71, 0x0F, 0x7E,
+ 0x00, 0x05, 0x0F, 0x80, 0x0F, 0x84, 0x00, 0x05, 0x0F, 0x86, 0x0F, 0x87, 0x00, 0x05, 0x0F, 0x90,
+ 0x0F, 0x97, 0x00, 0x05, 0x0F, 0x99, 0x0F, 0xBC, 0x00, 0x05, 0x0F, 0xC6, 0x0F, 0xC6, 0x00, 0x05,
+ 0x10, 0x2D, 0x10, 0x30, 0x00, 0x05, 0x10, 0x32, 0x10, 0x37, 0x00, 0x05, 0x10, 0x39, 0x10, 0x3A,
+ 0x00, 0x05, 0x10, 0x3D, 0x10, 0x3E, 0x00, 0x05, 0x10, 0x58, 0x10, 0x59, 0x00, 0x05, 0x10, 0x5E,
+ 0x10, 0x60, 0x00, 0x05, 0x10, 0x71, 0x10, 0x74, 0x00, 0x05, 0x10, 0x82, 0x10, 0x82, 0x00, 0x05,
+ 0x10, 0x85, 0x10, 0x86, 0x00, 0x05, 0x10, 0x8D, 0x10, 0x8D, 0x00, 0x05, 0x13, 0x5F, 0x13, 0x5F,
+ 0x00, 0x05, 0x17, 0x12, 0x17, 0x14, 0x00, 0x05, 0x17, 0x32, 0x17, 0x34, 0x00, 0x05, 0x17, 0x52,
+ 0x17, 0x53, 0x00, 0x05, 0x17, 0x72, 0x17, 0x73, 0x00, 0x05, 0x17, 0xB4, 0x17, 0xB5, 0x00, 0x05,
+ 0x17, 0xB7, 0x17, 0xBD, 0x00, 0x05, 0x17, 0xC6, 0x17, 0xC6, 0x00, 0x05, 0x17, 0xC9, 0x17, 0xD3,
+ 0x00, 0x05, 0x17, 0xDD, 0x17, 0xDD, 0x00, 0x05, 0x18, 0x0B, 0x18, 0x0D, 0x00, 0x05, 0x18, 0xA9,
+ 0x18, 0xA9, 0x00, 0x05, 0x19, 0x20, 0x19, 0x22, 0x00, 0x05, 0x19, 0x27, 0x19, 0x28, 0x00, 0x05,
+ 0x19, 0x32, 0x19, 0x32, 0x00, 0x05, 0x19, 0x39, 0x19, 0x3B, 0x00, 0x05, 0x1A, 0x17, 0x1A, 0x18,
+ 0x00, 0x05, 0x1B, 0x00, 0x1B, 0x03, 0x00, 0x05, 0x1B, 0x34, 0x1B, 0x34, 0x00, 0x05, 0x1B, 0x36,
+ 0x1B, 0x3A, 0x00, 0x05, 0x1B, 0x3C, 0x1B, 0x3C, 0x00, 0x05, 0x1B, 0x42, 0x1B, 0x42, 0x00, 0x05,
+ 0x1B, 0x6B, 0x1B, 0x73, 0x00, 0x05, 0x1B, 0x80, 0x1B, 0x81, 0x00, 0x05, 0x1B, 0xA2, 0x1B, 0xA5,
+ 0x00, 0x05, 0x1B, 0xA8, 0x1B, 0xA9, 0x00, 0x05, 0x1C, 0x2C, 0x1C, 0x33, 0x00, 0x05, 0x1C, 0x36,
+ 0x1C, 0x37, 0x00, 0x05, 0x1D, 0xC0, 0x1D, 0xE6, 0x00, 0x05, 0x1D, 0xFE, 0x1D, 0xFF, 0x00, 0x05,
+ 0x20, 0x0B, 0x20, 0x0B, 0x00, 0x05, 0x20, 0x0D, 0x20, 0x0D, 0x00, 0x01, 0x20, 0x0E, 0x20, 0x0F,
+ 0x00, 0x05, 0x20, 0x2A, 0x20, 0x2E, 0x00, 0x05, 0x20, 0x60, 0x20, 0x64, 0x00, 0x05, 0x20, 0x6A,
+ 0x20, 0x6F, 0x00, 0x05, 0x20, 0xD0, 0x20, 0xF0, 0x00, 0x05, 0x2D, 0xE0, 0x2D, 0xFF, 0x00, 0x05,
+ 0x30, 0x2A, 0x30, 0x2F, 0x00, 0x05, 0x30, 0x99, 0x30, 0x9A, 0x00, 0x05, 0xA6, 0x6F, 0xA6, 0x72,
+ 0x00, 0x05, 0xA6, 0x7C, 0xA6, 0x7D, 0x00, 0x05, 0xA8, 0x02, 0xA8, 0x02, 0x00, 0x05, 0xA8, 0x06,
+ 0xA8, 0x06, 0x00, 0x05, 0xA8, 0x0B, 0xA8, 0x0B, 0x00, 0x05, 0xA8, 0x25, 0xA8, 0x26, 0x00, 0x05,
+ 0xA8, 0xC4, 0xA8, 0xC4, 0x00, 0x05, 0xA9, 0x26, 0xA9, 0x2D, 0x00, 0x05, 0xA9, 0x47, 0xA9, 0x51,
+ 0x00, 0x05, 0xAA, 0x29, 0xAA, 0x2E, 0x00, 0x05, 0xAA, 0x31, 0xAA, 0x32, 0x00, 0x05, 0xAA, 0x35,
+ 0xAA, 0x36, 0x00, 0x05, 0xAA, 0x43, 0xAA, 0x43, 0x00, 0x05, 0xAA, 0x4C, 0xAA, 0x4C, 0x00, 0x05,
+ 0xFB, 0x1E, 0xFB, 0x1E, 0x00, 0x05, 0xFE, 0x00, 0xFE, 0x0F, 0x00, 0x05, 0xFE, 0x20, 0xFE, 0x26,
+ 0x00, 0x05, 0xFE, 0xFF, 0xFE, 0xFF, 0x00, 0x05, 0xFF, 0xF9, 0xFF, 0xFB, 0x00, 0x05
+};
+
+U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-50.1/layout/SimpleArrayProcessor.cpp b/Build/source/libs/icu/icu-50.1/layout/SimpleArrayProcessor.cpp
new file mode 100644
index 00000000000..d677f545f6b
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/SimpleArrayProcessor.cpp
@@ -0,0 +1,51 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
+ *
+ */
+
+#include "LETypes.h"
+#include "MorphTables.h"
+#include "SubtableProcessor.h"
+#include "NonContextualGlyphSubst.h"
+#include "NonContextualGlyphSubstProc.h"
+#include "SimpleArrayProcessor.h"
+#include "LEGlyphStorage.h"
+#include "LESwaps.h"
+
+U_NAMESPACE_BEGIN
+
+UOBJECT_DEFINE_RTTI_IMPLEMENTATION(SimpleArrayProcessor)
+
+SimpleArrayProcessor::SimpleArrayProcessor()
+{
+}
+
+SimpleArrayProcessor::SimpleArrayProcessor(const MorphSubtableHeader *morphSubtableHeader)
+ : NonContextualGlyphSubstitutionProcessor(morphSubtableHeader)
+{
+ const NonContextualGlyphSubstitutionHeader *header = (const NonContextualGlyphSubstitutionHeader *) morphSubtableHeader;
+
+ simpleArrayLookupTable = (const SimpleArrayLookupTable *) &header->table;
+}
+
+SimpleArrayProcessor::~SimpleArrayProcessor()
+{
+}
+
+void SimpleArrayProcessor::process(LEGlyphStorage &glyphStorage)
+{
+ le_int32 glyphCount = glyphStorage.getGlyphCount();
+ le_int32 glyph;
+
+ for (glyph = 0; glyph < glyphCount; glyph += 1) {
+ LEGlyphID thisGlyph = glyphStorage[glyph];
+ if (LE_GET_GLYPH(thisGlyph) < 0xFFFF) {
+ TTGlyphID newGlyph = SWAPW(simpleArrayLookupTable->valueArray[LE_GET_GLYPH(thisGlyph)]);
+
+ glyphStorage[glyph] = LE_SET_GLYPH(thisGlyph, newGlyph);
+ }
+ }
+}
+
+U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-50.1/layout/SimpleArrayProcessor.h b/Build/source/libs/icu/icu-50.1/layout/SimpleArrayProcessor.h
new file mode 100644
index 00000000000..afee79c4971
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/SimpleArrayProcessor.h
@@ -0,0 +1,58 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
+ *
+ */
+
+#ifndef __SIMPLEARRAYPROCESSOR_H
+#define __SIMPLEARRAYPROCESSOR_H
+
+/**
+ * \file
+ * \internal
+ */
+
+#include "LETypes.h"
+#include "MorphTables.h"
+#include "SubtableProcessor.h"
+#include "NonContextualGlyphSubst.h"
+#include "NonContextualGlyphSubstProc.h"
+
+U_NAMESPACE_BEGIN
+
+class LEGlyphStorage;
+
+class SimpleArrayProcessor : public NonContextualGlyphSubstitutionProcessor
+{
+public:
+ virtual void process(LEGlyphStorage &glyphStorage);
+
+ SimpleArrayProcessor(const MorphSubtableHeader *morphSubtableHeader);
+
+ virtual ~SimpleArrayProcessor();
+
+ /**
+ * ICU "poor man's RTTI", returns a UClassID for the actual class.
+ *
+ * @stable ICU 2.8
+ */
+ virtual UClassID getDynamicClassID() const;
+
+ /**
+ * ICU "poor man's RTTI", returns a UClassID for this class.
+ *
+ * @stable ICU 2.8
+ */
+ static UClassID getStaticClassID();
+
+private:
+ SimpleArrayProcessor();
+
+protected:
+ const SimpleArrayLookupTable *simpleArrayLookupTable;
+
+};
+
+U_NAMESPACE_END
+#endif
+
diff --git a/Build/source/libs/icu/icu-50.1/layout/SinglePositioningSubtables.cpp b/Build/source/libs/icu/icu-50.1/layout/SinglePositioningSubtables.cpp
new file mode 100644
index 00000000000..e8759d21a19
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/SinglePositioningSubtables.cpp
@@ -0,0 +1,72 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
+ *
+ */
+
+#include "LETypes.h"
+#include "LEFontInstance.h"
+#include "OpenTypeTables.h"
+#include "GlyphPositioningTables.h"
+#include "SinglePositioningSubtables.h"
+#include "ValueRecords.h"
+#include "GlyphIterator.h"
+#include "LESwaps.h"
+
+U_NAMESPACE_BEGIN
+
+le_uint32 SinglePositioningSubtable::process(GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const
+{
+ switch(SWAPW(subtableFormat))
+ {
+ case 0:
+ return 0;
+
+ case 1:
+ {
+ const SinglePositioningFormat1Subtable *subtable = (const SinglePositioningFormat1Subtable *) this;
+
+ return subtable->process(glyphIterator, fontInstance);
+ }
+
+ case 2:
+ {
+ const SinglePositioningFormat2Subtable *subtable = (const SinglePositioningFormat2Subtable *) this;
+
+ return subtable->process(glyphIterator, fontInstance);
+ }
+
+ default:
+ return 0;
+ }
+}
+
+le_uint32 SinglePositioningFormat1Subtable::process(GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const
+{
+ LEGlyphID glyph = glyphIterator->getCurrGlyphID();
+ le_int32 coverageIndex = getGlyphCoverage(glyph);
+
+ if (coverageIndex >= 0) {
+ valueRecord.adjustPosition(SWAPW(valueFormat), (const char *) this, *glyphIterator, fontInstance);
+
+ return 1;
+ }
+
+ return 0;
+}
+
+le_uint32 SinglePositioningFormat2Subtable::process(GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const
+{
+ LEGlyphID glyph = glyphIterator->getCurrGlyphID();
+ le_int16 coverageIndex = (le_int16) getGlyphCoverage(glyph);
+
+ if (coverageIndex >= 0) {
+ valueRecordArray[0].adjustPosition(coverageIndex, SWAPW(valueFormat), (const char *) this, *glyphIterator, fontInstance);
+
+ return 1;
+ }
+
+ return 0;
+}
+
+U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-50.1/layout/SinglePositioningSubtables.h b/Build/source/libs/icu/icu-50.1/layout/SinglePositioningSubtables.h
new file mode 100644
index 00000000000..ec2ffcc9269
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/SinglePositioningSubtables.h
@@ -0,0 +1,49 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
+ *
+ */
+
+#ifndef __SINGLEPOSITIONINGSUBTABLES_H
+#define __SINGLEPOSITIONINGSUBTABLES_H
+
+/**
+ * \file
+ * \internal
+ */
+
+#include "LETypes.h"
+#include "LEFontInstance.h"
+#include "OpenTypeTables.h"
+#include "GlyphPositioningTables.h"
+#include "ValueRecords.h"
+#include "GlyphIterator.h"
+
+U_NAMESPACE_BEGIN
+
+struct SinglePositioningSubtable : GlyphPositioningSubtable
+{
+ le_uint32 process(GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const;
+};
+
+struct SinglePositioningFormat1Subtable : SinglePositioningSubtable
+{
+ ValueFormat valueFormat;
+ ValueRecord valueRecord;
+
+ le_uint32 process(GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const;
+};
+
+struct SinglePositioningFormat2Subtable : SinglePositioningSubtable
+{
+ ValueFormat valueFormat;
+ le_uint16 valueCount;
+ ValueRecord valueRecordArray[ANY_NUMBER];
+
+ le_uint32 process(GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const;
+};
+
+U_NAMESPACE_END
+#endif
+
+
diff --git a/Build/source/libs/icu/icu-50.1/layout/SingleSubstitutionSubtables.cpp b/Build/source/libs/icu/icu-50.1/layout/SingleSubstitutionSubtables.cpp
new file mode 100644
index 00000000000..ae72ddfd04f
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/SingleSubstitutionSubtables.cpp
@@ -0,0 +1,79 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
+ *
+ */
+
+#include "LETypes.h"
+#include "LEGlyphFilter.h"
+#include "OpenTypeTables.h"
+#include "GlyphSubstitutionTables.h"
+#include "SingleSubstitutionSubtables.h"
+#include "GlyphIterator.h"
+#include "LESwaps.h"
+
+U_NAMESPACE_BEGIN
+
+le_uint32 SingleSubstitutionSubtable::process(GlyphIterator *glyphIterator, const LEGlyphFilter *filter) const
+{
+ switch(SWAPW(subtableFormat))
+ {
+ case 0:
+ return 0;
+
+ case 1:
+ {
+ const SingleSubstitutionFormat1Subtable *subtable = (const SingleSubstitutionFormat1Subtable *) this;
+
+ return subtable->process(glyphIterator, filter);
+ }
+
+ case 2:
+ {
+ const SingleSubstitutionFormat2Subtable *subtable = (const SingleSubstitutionFormat2Subtable *) this;
+
+ return subtable->process(glyphIterator, filter);
+ }
+
+ default:
+ return 0;
+ }
+}
+
+le_uint32 SingleSubstitutionFormat1Subtable::process(GlyphIterator *glyphIterator, const LEGlyphFilter *filter) const
+{
+ LEGlyphID glyph = glyphIterator->getCurrGlyphID();
+ le_int32 coverageIndex = getGlyphCoverage(glyph);
+
+ if (coverageIndex >= 0) {
+ TTGlyphID substitute = ((TTGlyphID) LE_GET_GLYPH(glyph)) + SWAPW(deltaGlyphID);
+
+ if (filter == NULL || filter->accept(LE_SET_GLYPH(glyph, substitute))) {
+ glyphIterator->setCurrGlyphID(substitute);
+ }
+
+ return 1;
+ }
+
+ return 0;
+}
+
+le_uint32 SingleSubstitutionFormat2Subtable::process(GlyphIterator *glyphIterator, const LEGlyphFilter *filter) const
+{
+ LEGlyphID glyph = glyphIterator->getCurrGlyphID();
+ le_int32 coverageIndex = getGlyphCoverage(glyph);
+
+ if (coverageIndex >= 0) {
+ TTGlyphID substitute = SWAPW(substituteArray[coverageIndex]);
+
+ if (filter == NULL || filter->accept(LE_SET_GLYPH(glyph, substitute))) {
+ glyphIterator->setCurrGlyphID(substitute);
+ }
+
+ return 1;
+ }
+
+ return 0;
+}
+
+U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-50.1/layout/SingleSubstitutionSubtables.h b/Build/source/libs/icu/icu-50.1/layout/SingleSubstitutionSubtables.h
new file mode 100644
index 00000000000..dfd2dad8809
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/SingleSubstitutionSubtables.h
@@ -0,0 +1,46 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
+ *
+ */
+
+#ifndef __SINGLESUBSTITUTIONSUBTABLES_H
+#define __SINGLESUBSTITUTIONSUBTABLES_H
+
+/**
+ * \file
+ * \internal
+ */
+
+#include "LETypes.h"
+#include "LEGlyphFilter.h"
+#include "OpenTypeTables.h"
+#include "GlyphSubstitutionTables.h"
+#include "GlyphIterator.h"
+
+U_NAMESPACE_BEGIN
+
+struct SingleSubstitutionSubtable : GlyphSubstitutionSubtable
+{
+ le_uint32 process(GlyphIterator *glyphIterator, const LEGlyphFilter *filter = NULL) const;
+};
+
+struct SingleSubstitutionFormat1Subtable : SingleSubstitutionSubtable
+{
+ le_int16 deltaGlyphID;
+
+ le_uint32 process(GlyphIterator *glyphIterator, const LEGlyphFilter *filter = NULL) const;
+};
+
+struct SingleSubstitutionFormat2Subtable : SingleSubstitutionSubtable
+{
+ le_uint16 glyphCount;
+ TTGlyphID substituteArray[ANY_NUMBER];
+
+ le_uint32 process(GlyphIterator *glyphIterator, const LEGlyphFilter *filter = NULL) const;
+};
+
+U_NAMESPACE_END
+#endif
+
+
diff --git a/Build/source/libs/icu/icu-50.1/layout/SingleTableProcessor.cpp b/Build/source/libs/icu/icu-50.1/layout/SingleTableProcessor.cpp
new file mode 100644
index 00000000000..94a4edd7571
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/SingleTableProcessor.cpp
@@ -0,0 +1,51 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
+ *
+ */
+
+#include "LETypes.h"
+#include "MorphTables.h"
+#include "SubtableProcessor.h"
+#include "NonContextualGlyphSubst.h"
+#include "NonContextualGlyphSubstProc.h"
+#include "SingleTableProcessor.h"
+#include "LEGlyphStorage.h"
+#include "LESwaps.h"
+
+U_NAMESPACE_BEGIN
+
+UOBJECT_DEFINE_RTTI_IMPLEMENTATION(SingleTableProcessor)
+
+SingleTableProcessor::SingleTableProcessor()
+{
+}
+
+SingleTableProcessor::SingleTableProcessor(const MorphSubtableHeader *moprhSubtableHeader)
+ : NonContextualGlyphSubstitutionProcessor(moprhSubtableHeader)
+{
+ const NonContextualGlyphSubstitutionHeader *header = (const NonContextualGlyphSubstitutionHeader *) moprhSubtableHeader;
+
+ singleTableLookupTable = (const SingleTableLookupTable *) &header->table;
+}
+
+SingleTableProcessor::~SingleTableProcessor()
+{
+}
+
+void SingleTableProcessor::process(LEGlyphStorage &glyphStorage)
+{
+ const LookupSingle *entries = singleTableLookupTable->entries;
+ le_int32 glyph;
+ le_int32 glyphCount = glyphStorage.getGlyphCount();
+
+ for (glyph = 0; glyph < glyphCount; glyph += 1) {
+ const LookupSingle *lookupSingle = singleTableLookupTable->lookupSingle(entries, glyphStorage[glyph]);
+
+ if (lookupSingle != NULL) {
+ glyphStorage[glyph] = SWAPW(lookupSingle->value);
+ }
+ }
+}
+
+U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-50.1/layout/SingleTableProcessor.h b/Build/source/libs/icu/icu-50.1/layout/SingleTableProcessor.h
new file mode 100644
index 00000000000..d6ca048b049
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/SingleTableProcessor.h
@@ -0,0 +1,57 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
+ *
+ */
+
+#ifndef __SINGLETABLEPROCESSOR_H
+#define __SINGLETABLEPROCESSOR_H
+
+/**
+ * \file
+ * \internal
+ */
+
+#include "LETypes.h"
+#include "MorphTables.h"
+#include "SubtableProcessor.h"
+#include "NonContextualGlyphSubst.h"
+#include "NonContextualGlyphSubstProc.h"
+
+U_NAMESPACE_BEGIN
+
+class LEGlyphStorage;
+
+class SingleTableProcessor : public NonContextualGlyphSubstitutionProcessor
+{
+public:
+ virtual void process(LEGlyphStorage &glyphStorage);
+
+ SingleTableProcessor(const MorphSubtableHeader *morphSubtableHeader);
+
+ virtual ~SingleTableProcessor();
+
+ /**
+ * ICU "poor man's RTTI", returns a UClassID for the actual class.
+ *
+ * @stable ICU 2.8
+ */
+ virtual UClassID getDynamicClassID() const;
+
+ /**
+ * ICU "poor man's RTTI", returns a UClassID for this class.
+ *
+ * @stable ICU 2.8
+ */
+ static UClassID getStaticClassID();
+
+private:
+ SingleTableProcessor();
+
+protected:
+ const SingleTableLookupTable *singleTableLookupTable;
+
+};
+
+U_NAMESPACE_END
+#endif
diff --git a/Build/source/libs/icu/icu-50.1/layout/StateTableProcessor.cpp b/Build/source/libs/icu/icu-50.1/layout/StateTableProcessor.cpp
new file mode 100644
index 00000000000..223959b8b16
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/StateTableProcessor.cpp
@@ -0,0 +1,77 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
+ *
+ */
+
+#include "LETypes.h"
+#include "MorphTables.h"
+#include "StateTables.h"
+#include "MorphStateTables.h"
+#include "SubtableProcessor.h"
+#include "StateTableProcessor.h"
+#include "LEGlyphStorage.h"
+#include "LESwaps.h"
+
+U_NAMESPACE_BEGIN
+
+StateTableProcessor::StateTableProcessor()
+{
+}
+
+StateTableProcessor::StateTableProcessor(const MorphSubtableHeader *morphSubtableHeader)
+ : SubtableProcessor(morphSubtableHeader)
+{
+ stateTableHeader = (const MorphStateTableHeader *) morphSubtableHeader;
+
+ stateSize = SWAPW(stateTableHeader->stHeader.stateSize);
+ classTableOffset = SWAPW(stateTableHeader->stHeader.classTableOffset);
+ stateArrayOffset = SWAPW(stateTableHeader->stHeader.stateArrayOffset);
+ entryTableOffset = SWAPW(stateTableHeader->stHeader.entryTableOffset);
+
+ classTable = (const ClassTable *) ((char *) &stateTableHeader->stHeader + classTableOffset);
+ firstGlyph = SWAPW(classTable->firstGlyph);
+ lastGlyph = firstGlyph + SWAPW(classTable->nGlyphs);
+}
+
+StateTableProcessor::~StateTableProcessor()
+{
+}
+
+void StateTableProcessor::process(LEGlyphStorage &glyphStorage)
+{
+ // Start at state 0
+ // XXX: How do we know when to start at state 1?
+ ByteOffset currentState = stateArrayOffset;
+
+ // XXX: reverse?
+ le_int32 currGlyph = 0;
+ le_int32 glyphCount = glyphStorage.getGlyphCount();
+
+ beginStateTable();
+
+ while (currGlyph <= glyphCount) {
+ ClassCode classCode = classCodeOOB;
+ if (currGlyph == glyphCount) {
+ // XXX: How do we handle EOT vs. EOL?
+ classCode = classCodeEOT;
+ } else {
+ TTGlyphID glyphCode = (TTGlyphID) LE_GET_GLYPH(glyphStorage[currGlyph]);
+
+ if (glyphCode == 0xFFFF) {
+ classCode = classCodeDEL;
+ } else if ((glyphCode >= firstGlyph) && (glyphCode < lastGlyph)) {
+ classCode = classTable->classArray[glyphCode - firstGlyph];
+ }
+ }
+
+ const EntryTableIndex *stateArray = (const EntryTableIndex *) ((char *) &stateTableHeader->stHeader + currentState);
+ EntryTableIndex entryTableIndex = stateArray[(le_uint8)classCode];
+
+ currentState = processStateEntry(glyphStorage, currGlyph, entryTableIndex);
+ }
+
+ endStateTable();
+}
+
+U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-50.1/layout/StateTableProcessor.h b/Build/source/libs/icu/icu-50.1/layout/StateTableProcessor.h
new file mode 100644
index 00000000000..41c50debe94
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/StateTableProcessor.h
@@ -0,0 +1,58 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
+ *
+ */
+
+#ifndef __STATETABLEPROCESSOR_H
+#define __STATETABLEPROCESSOR_H
+
+/**
+ * \file
+ * \internal
+ */
+
+#include "LETypes.h"
+#include "MorphTables.h"
+#include "MorphStateTables.h"
+#include "SubtableProcessor.h"
+
+U_NAMESPACE_BEGIN
+
+class LEGlyphStorage;
+
+class StateTableProcessor : public SubtableProcessor
+{
+public:
+ void process(LEGlyphStorage &glyphStorage);
+
+ virtual void beginStateTable() = 0;
+
+ virtual ByteOffset processStateEntry(LEGlyphStorage &glyphStorage, le_int32 &currGlyph, EntryTableIndex index) = 0;
+
+ virtual void endStateTable() = 0;
+
+protected:
+ StateTableProcessor(const MorphSubtableHeader *morphSubtableHeader);
+ virtual ~StateTableProcessor();
+
+ StateTableProcessor();
+
+ le_int16 stateSize;
+ ByteOffset classTableOffset;
+ ByteOffset stateArrayOffset;
+ ByteOffset entryTableOffset;
+
+ const ClassTable *classTable;
+ TTGlyphID firstGlyph;
+ TTGlyphID lastGlyph;
+
+ const MorphStateTableHeader *stateTableHeader;
+
+private:
+ StateTableProcessor(const StateTableProcessor &other); // forbid copying of this class
+ StateTableProcessor &operator=(const StateTableProcessor &other); // forbid copying of this class
+};
+
+U_NAMESPACE_END
+#endif
diff --git a/Build/source/libs/icu/icu-50.1/layout/StateTables.h b/Build/source/libs/icu/icu-50.1/layout/StateTables.h
new file mode 100644
index 00000000000..8b5f867770a
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/StateTables.h
@@ -0,0 +1,65 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
+ *
+ */
+
+#ifndef __STATETABLES_H
+#define __STATETABLES_H
+
+/**
+ * \file
+ * \internal
+ */
+
+#include "LETypes.h"
+#include "LayoutTables.h"
+
+U_NAMESPACE_BEGIN
+
+struct StateTableHeader
+{
+ le_int16 stateSize;
+ ByteOffset classTableOffset;
+ ByteOffset stateArrayOffset;
+ ByteOffset entryTableOffset;
+};
+
+enum ClassCodes
+{
+ classCodeEOT = 0,
+ classCodeOOB = 1,
+ classCodeDEL = 2,
+ classCodeEOL = 3,
+ classCodeFirstFree = 4,
+ classCodeMAX = 0xFF
+};
+
+typedef le_uint8 ClassCode;
+
+struct ClassTable
+{
+ TTGlyphID firstGlyph;
+ le_uint16 nGlyphs;
+ ClassCode classArray[ANY_NUMBER];
+};
+
+enum StateNumber
+{
+ stateSOT = 0,
+ stateSOL = 1,
+ stateFirstFree = 2,
+ stateMAX = 0xFF
+};
+
+typedef le_uint8 EntryTableIndex;
+
+struct StateEntry
+{
+ ByteOffset newStateOffset;
+ le_int16 flags;
+};
+
+U_NAMESPACE_END
+#endif
+
diff --git a/Build/source/libs/icu/icu-50.1/layout/SubstitutionLookups.cpp b/Build/source/libs/icu/icu-50.1/layout/SubstitutionLookups.cpp
new file mode 100644
index 00000000000..1fb281300ed
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/SubstitutionLookups.cpp
@@ -0,0 +1,51 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2008 - All Rights Reserved
+ *
+ */
+
+#include "LETypes.h"
+#include "LEFontInstance.h"
+#include "OpenTypeTables.h"
+#include "GlyphSubstitutionTables.h"
+#include "GlyphIterator.h"
+#include "LookupProcessor.h"
+#include "SubstitutionLookups.h"
+#include "CoverageTables.h"
+#include "LESwaps.h"
+
+U_NAMESPACE_BEGIN
+
+/*
+ NOTE: This could be optimized somewhat by keeping track
+ of the previous sequenceIndex in the loop and doing next()
+ or prev() of the delta between that and the current
+ sequenceIndex instead of always resetting to the front.
+*/
+void SubstitutionLookup::applySubstitutionLookups(
+ LookupProcessor *lookupProcessor,
+ SubstitutionLookupRecord *substLookupRecordArray,
+ le_uint16 substCount,
+ GlyphIterator *glyphIterator,
+ const LEFontInstance *fontInstance,
+ le_int32 position,
+ LEErrorCode& success)
+{
+ if (LE_FAILURE(success)) {
+ return;
+ }
+
+ GlyphIterator tempIterator(*glyphIterator);
+
+ for (le_uint16 subst = 0; subst < substCount && LE_SUCCESS(success); subst += 1) {
+ le_uint16 sequenceIndex = SWAPW(substLookupRecordArray[subst].sequenceIndex);
+ le_uint16 lookupListIndex = SWAPW(substLookupRecordArray[subst].lookupListIndex);
+
+ tempIterator.setCurrStreamPosition(position);
+ tempIterator.next(sequenceIndex);
+
+ lookupProcessor->applySingleLookup(lookupListIndex, &tempIterator, fontInstance, success);
+ }
+}
+
+U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-50.1/layout/SubstitutionLookups.h b/Build/source/libs/icu/icu-50.1/layout/SubstitutionLookups.h
new file mode 100644
index 00000000000..582b6f661e4
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/SubstitutionLookups.h
@@ -0,0 +1,44 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2008 - All Rights Reserved
+ *
+ */
+
+#ifndef __SUBSTITUTIONLOOKUPS_H
+#define __SUBSTITUTIONLOOKUPS_H
+
+/**
+ * \file
+ * \internal
+ */
+
+#include "LETypes.h"
+#include "LEFontInstance.h"
+#include "OpenTypeTables.h"
+#include "GlyphSubstitutionTables.h"
+#include "GlyphIterator.h"
+#include "LookupProcessor.h"
+
+U_NAMESPACE_BEGIN
+
+struct SubstitutionLookupRecord
+{
+ le_uint16 sequenceIndex;
+ le_uint16 lookupListIndex;
+};
+
+struct SubstitutionLookup
+{
+ static void applySubstitutionLookups(
+ LookupProcessor *lookupProcessor,
+ SubstitutionLookupRecord *substLookupRecordArray,
+ le_uint16 substCount,
+ GlyphIterator *glyphIterator,
+ const LEFontInstance *fontInstance,
+ le_int32 position,
+ LEErrorCode& success);
+};
+
+U_NAMESPACE_END
+#endif
+
diff --git a/Build/source/libs/icu/icu-50.1/layout/SubtableProcessor.cpp b/Build/source/libs/icu/icu-50.1/layout/SubtableProcessor.cpp
new file mode 100644
index 00000000000..dd5ce187b21
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/SubtableProcessor.cpp
@@ -0,0 +1,31 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
+ *
+ */
+
+#include "LETypes.h"
+#include "MorphTables.h"
+#include "SubtableProcessor.h"
+#include "LESwaps.h"
+
+U_NAMESPACE_BEGIN
+
+SubtableProcessor::SubtableProcessor()
+{
+}
+
+SubtableProcessor::SubtableProcessor(const MorphSubtableHeader *morphSubtableHeader)
+{
+ subtableHeader = morphSubtableHeader;
+
+ length = SWAPW(subtableHeader->length);
+ coverage = SWAPW(subtableHeader->coverage);
+ subtableFeatures = SWAPL(subtableHeader->subtableFeatures);
+}
+
+SubtableProcessor::~SubtableProcessor()
+{
+}
+
+U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-50.1/layout/SubtableProcessor.h b/Build/source/libs/icu/icu-50.1/layout/SubtableProcessor.h
new file mode 100644
index 00000000000..f304cb956e9
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/SubtableProcessor.h
@@ -0,0 +1,46 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
+ *
+ */
+
+#ifndef __SUBTABLEPROCESSOR_H
+#define __SUBTABLEPROCESSOR_H
+
+/**
+ * \file
+ * \internal
+ */
+
+#include "LETypes.h"
+#include "MorphTables.h"
+
+U_NAMESPACE_BEGIN
+
+class LEGlyphStorage;
+
+class SubtableProcessor : public UMemory {
+public:
+ virtual void process(LEGlyphStorage &glyphStorage) = 0;
+ virtual ~SubtableProcessor();
+
+protected:
+ SubtableProcessor(const MorphSubtableHeader *morphSubtableHeader);
+
+ SubtableProcessor();
+
+ le_int16 length;
+ SubtableCoverage coverage;
+ FeatureFlags subtableFeatures;
+
+ const MorphSubtableHeader *subtableHeader;
+
+private:
+
+ SubtableProcessor(const SubtableProcessor &other); // forbid copying of this class
+ SubtableProcessor &operator=(const SubtableProcessor &other); // forbid copying of this class
+};
+
+U_NAMESPACE_END
+#endif
+
diff --git a/Build/source/libs/icu/icu-50.1/layout/ThaiLayoutEngine.cpp b/Build/source/libs/icu/icu-50.1/layout/ThaiLayoutEngine.cpp
new file mode 100644
index 00000000000..f9d77a791f3
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/ThaiLayoutEngine.cpp
@@ -0,0 +1,123 @@
+
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2008 - All Rights Reserved
+ *
+ */
+
+#include "LETypes.h"
+#include "LayoutEngine.h"
+#include "ThaiLayoutEngine.h"
+#include "ScriptAndLanguageTags.h"
+#include "LEGlyphStorage.h"
+
+#include "KernTable.h"
+
+#include "ThaiShaping.h"
+
+U_NAMESPACE_BEGIN
+
+UOBJECT_DEFINE_RTTI_IMPLEMENTATION(ThaiLayoutEngine)
+
+ThaiLayoutEngine::ThaiLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, le_int32 typoFlags, LEErrorCode &success)
+ : LayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, success)
+{
+ fErrorChar = 0x25CC;
+
+ // Figure out which presentation forms the font uses
+ if (! fontInstance->canDisplay(0x0E01)) {
+ // No Thai in font; don't use presentation forms.
+ fGlyphSet = 3;
+ } else if (fontInstance->canDisplay(0x0E64)) {
+ // WorldType uses reserved space in Thai block
+ fGlyphSet = 0;
+ } else if (fontInstance->canDisplay(0xF701)) {
+ // Microsoft corporate zone
+ fGlyphSet = 1;
+
+ if (!fontInstance->canDisplay(fErrorChar)) {
+ fErrorChar = 0xF71B;
+ }
+ } else if (fontInstance->canDisplay(0xF885)) {
+ // Apple corporate zone
+ fGlyphSet = 2;
+ } else {
+ // no presentation forms in the font
+ fGlyphSet = 3;
+ }
+}
+
+ThaiLayoutEngine::~ThaiLayoutEngine()
+{
+ // nothing to do
+}
+
+// Input: characters (0..max provided for context)
+// Output: glyphs, char indices
+// Returns: the glyph count
+// NOTE: this assumes that ThaiShaping::compose will allocate the outChars array...
+le_int32 ThaiLayoutEngine::computeGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool /*rightToLeft*/, LEGlyphStorage &glyphStorage, LEErrorCode &success)
+{
+ if (LE_FAILURE(success)) {
+ return 0;
+ }
+
+ if (chars == NULL || offset < 0 || count < 0 || max < 0 || offset >= max || offset + count > max) {
+ success = LE_ILLEGAL_ARGUMENT_ERROR;
+ return 0;
+ }
+
+ LEUnicode *outChars;
+ le_int32 glyphCount;
+
+ // This is enough room for the worst-case expansion
+ // (it says here...)
+ outChars = LE_NEW_ARRAY(LEUnicode, count * 2);
+
+ if (outChars == NULL) {
+ success = LE_MEMORY_ALLOCATION_ERROR;
+ return 0;
+ }
+
+ glyphStorage.allocateGlyphArray(count * 2, FALSE, success);
+
+ if (LE_FAILURE(success)) {
+ LE_DELETE_ARRAY(outChars);
+ success = LE_MEMORY_ALLOCATION_ERROR;
+ return 0;
+ }
+
+ glyphCount = ThaiShaping::compose(chars, offset, count, fGlyphSet, fErrorChar, outChars, glyphStorage);
+ mapCharsToGlyphs(outChars, 0, glyphCount, FALSE, FALSE, glyphStorage, success);
+
+ LE_DELETE_ARRAY(outChars);
+
+ glyphStorage.adoptGlyphCount(glyphCount);
+ return glyphCount;
+}
+
+// This is the same as LayoutEngline::adjustGlyphPositions() except that it doesn't call adjustMarkGlyphs
+void ThaiLayoutEngine::adjustGlyphPositions(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool /*reverse*/,
+ LEGlyphStorage &glyphStorage, LEErrorCode &success)
+{
+ if (LE_FAILURE(success)) {
+ return;
+ }
+
+ if (chars == NULL || offset < 0 || count < 0) {
+ success = LE_ILLEGAL_ARGUMENT_ERROR;
+ return;
+ }
+
+ if (fTypoFlags & 0x1) { /* kerning enabled */
+ static const le_uint32 kernTableTag = LE_KERN_TABLE_TAG;
+
+ KernTable kt(fFontInstance, getFontTable(kernTableTag));
+ kt.process(glyphStorage);
+ }
+
+ // default is no adjustments
+ return;
+}
+
+U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-50.1/layout/ThaiLayoutEngine.h b/Build/source/libs/icu/icu-50.1/layout/ThaiLayoutEngine.h
new file mode 100644
index 00000000000..08a154d2272
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/ThaiLayoutEngine.h
@@ -0,0 +1,144 @@
+
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2008 - All Rights Reserved
+ *
+ */
+
+#ifndef __THAILAYOUTENGINE_H
+#define __THAILAYOUTENGINE_H
+
+#include "LETypes.h"
+#include "LEFontInstance.h"
+#include "LayoutEngine.h"
+
+#include "ThaiShaping.h"
+
+U_NAMESPACE_BEGIN
+
+class LEGlyphStorage;
+
+/**
+ * This class implements layout for the Thai script, using the ThaiShapingClass.
+ * All existing Thai fonts use an encoding which assigns character codes to all
+ * the variant forms needed to display accents and tone marks correctly in context.
+ * This class can deal with fonts using the Microsoft, Macintosh, and WorldType encodings.
+ *
+ * @internal
+ */
+class ThaiLayoutEngine : public LayoutEngine
+{
+public:
+ /**
+ * This constructs an instance of ThaiLayoutEngine for the given font, script and
+ * language. It examines the font, using LEFontInstance::canDisplay, to set fGlyphSet
+ * and fErrorChar. (see below)
+ *
+ * @param fontInstance - the font
+ * @param scriptCode - the script
+ * @param languageCode - the language
+ * @param success - set to an error code if the operation fails
+ *
+ * @see LEFontInstance
+ * @see ScriptAndLanguageTags.h for script and language codes
+ *
+ * @internal
+ */
+ ThaiLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, le_int32 typoFlags, LEErrorCode &success);
+
+ /**
+ * The destructor, virtual for correct polymorphic invocation.
+ *
+ * @internal
+ */
+ virtual ~ThaiLayoutEngine();
+
+ /**
+ * ICU "poor man's RTTI", returns a UClassID for the actual class.
+ *
+ * @stable ICU 2.8
+ */
+ virtual UClassID getDynamicClassID() const;
+
+ /**
+ * ICU "poor man's RTTI", returns a UClassID for this class.
+ *
+ * @stable ICU 2.8
+ */
+ static UClassID getStaticClassID();
+
+protected:
+ /**
+ * A small integer indicating which Thai encoding
+ * the font uses.
+ *
+ * @see ThaiShaping
+ *
+ * @internal
+ */
+ le_uint8 fGlyphSet;
+
+ /**
+ * The character used as a base for vowels and
+ * tone marks that are out of sequence. Usually
+ * this will be Unicode 0x25CC, if the font can
+ * display it.
+ *
+ * @see ThaiShaping
+ *
+ * @internal
+ */
+ LEUnicode fErrorChar;
+
+ /**
+ * This method performs Thai layout. It calls ThaiShaping::compose to
+ * generate the correct contextual character codes, and then calls
+ * mapCharsToGlyphs to generate the glyph indices.
+ *
+ * Input parameters:
+ * @param chars - the input character context
+ * @param offset - the index of the first character to process
+ * @param count - the number of characters to process
+ * @param max - the number of characters in the input context
+ * @param rightToLeft - <code>TRUE</code> if the text is in a right to left directional run
+ * @param glyphStorage - the glyph storage object. The glyph and char index arrays will be set.
+ *
+ * Output parameters:
+ * @param success - set to an error code if the operation fails
+ *
+ * @return the number of glyphs in the glyph index array
+ *
+ * @see ThaiShaping
+ *
+ * @internal
+ */
+ virtual le_int32 computeGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
+ LEGlyphStorage &glyphStorage, LEErrorCode &success);
+
+ /**
+ * This method does positioning adjustments like accent positioning and
+ * kerning. The default implementation does nothing. Subclasses needing
+ * position adjustments must override this method.
+ *
+ * Note that this method has both characters and glyphs as input so that
+ * it can use the character codes to determine glyph types if that information
+ * isn't directly available. (e.g. Some Arabic OpenType fonts don't have a GDEF
+ * table)
+ *
+ * @param chars - the input character context
+ * @param offset - the offset of the first character to process
+ * @param count - the number of characters to process
+ * @param reverse - <code>TRUE</code> if the glyphs in the glyph array have been reordered
+ * @param glyphStorage - the object which holds the per-glyph storage. The glyph positions will be
+ * adjusted as needed.
+ * @param success - output parameter set to an error code if the operation fails
+ *
+ * @internal
+ */
+ virtual void adjustGlyphPositions(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool reverse, LEGlyphStorage &glyphStorage, LEErrorCode &success);
+
+};
+
+U_NAMESPACE_END
+#endif
+
diff --git a/Build/source/libs/icu/icu-50.1/layout/ThaiShaping.cpp b/Build/source/libs/icu/icu-50.1/layout/ThaiShaping.cpp
new file mode 100644
index 00000000000..1680f0fe515
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/ThaiShaping.cpp
@@ -0,0 +1,307 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
+ *
+ */
+
+#include "LETypes.h"
+#include "LEGlyphFilter.h"
+#include "OpenTypeTables.h"
+#include "LEGlyphStorage.h"
+#include "ThaiShaping.h"
+
+U_NAMESPACE_BEGIN
+
+enum {
+ CH_SPACE = 0x0020,
+ CH_YAMAKKAN = 0x0E4E,
+ CH_MAI_HANAKAT = 0x0E31,
+ CH_SARA_AA = 0x0E32,
+ CH_SARA_AM = 0x0E33,
+ CH_SARA_UEE = 0x0E37,
+ CH_MAITAIKHU = 0x0E47,
+ CH_NIKHAHIT = 0x0E4D,
+ CH_SARA_U = 0x0E38,
+ CH_PHINTHU = 0x0E3A,
+ CH_YO_YING = 0x0E0D,
+ CH_THO_THAN = 0x0E10,
+ CH_DOTTED_CIRCLE = 0x25CC
+};
+
+ le_uint8 ThaiShaping::getCharClass(LEUnicode ch)
+{
+ le_uint8 charClass = NON;
+
+ if (ch >= 0x0E00 && ch <= 0x0E5B) {
+ charClass = classTable[ch - 0x0E00];
+ }
+
+ return charClass;
+}
+
+
+LEUnicode ThaiShaping::leftAboveVowel(LEUnicode vowel, le_uint8 glyphSet)
+{
+ static const LEUnicode leftAboveVowels[][7] = {
+ {0x0E61, 0x0E32, 0x0E33, 0x0E64, 0x0E65, 0x0E66, 0x0E67},
+ {0xF710, 0x0E32, 0x0E33, 0xF701, 0xF702, 0xF703, 0xF704},
+ {0xF884, 0x0E32, 0x0E33, 0xF885, 0xF886, 0xF887, 0xF788},
+ {0x0E31, 0x0E32, 0x0E33, 0x0E34, 0x0E35, 0x0E36, 0x0E37}
+ };
+
+ if (vowel >= CH_MAI_HANAKAT && vowel <= CH_SARA_UEE) {
+ return leftAboveVowels[glyphSet][vowel - CH_MAI_HANAKAT];
+ }
+
+ if (vowel == CH_YAMAKKAN && glyphSet == 0) {
+ return 0x0E7E;
+ }
+
+ return vowel;
+}
+
+LEUnicode ThaiShaping::lowerRightTone(LEUnicode tone, le_uint8 glyphSet)
+{
+ static const LEUnicode lowerRightTones[][7] = {
+ {0x0E68, 0x0E69, 0x0E6A, 0x0E6B, 0x0E6C, 0x0E6D, 0x0E6E},
+ {0x0E47, 0xF70A, 0xF70B, 0xF70C, 0xF70D, 0xF70E, 0x0E4D},
+ {0x0E47, 0xF88B, 0xF88E, 0xF891, 0xF894, 0xF897, 0x0E4D},
+ {0x0E47, 0x0E48, 0x0E49, 0x0E4A, 0x0E4B, 0x0E4C, 0x0E4D}
+ };
+
+ if (tone >= CH_MAITAIKHU && tone <= CH_NIKHAHIT) {
+ return lowerRightTones[glyphSet][tone - CH_MAITAIKHU];
+ }
+
+ return tone;
+}
+
+LEUnicode ThaiShaping::lowerLeftTone(LEUnicode tone, le_uint8 glyphSet)
+{
+ static const LEUnicode lowerLeftTones[][7] = {
+ {0x0E76, 0x0E77, 0x0E78, 0x0E79, 0x0E7A, 0x0E7B, 0x0E7C},
+ {0xF712, 0xF705, 0xF706, 0xF707, 0xF708, 0xF709, 0xF711},
+ {0xF889, 0xF88C, 0xF88F, 0xF892, 0xF895, 0xF898, 0xF899},
+ {0x0E47, 0x0E48, 0x0E49, 0x0E4A, 0x0E4B, 0x0E4C, 0x0E4D}
+ };
+
+ if (tone >= CH_MAITAIKHU && tone <= CH_NIKHAHIT) {
+ return lowerLeftTones[glyphSet][tone - CH_MAITAIKHU];
+ }
+
+ return tone;
+}
+
+LEUnicode ThaiShaping::upperLeftTone(LEUnicode tone, le_uint8 glyphSet)
+{
+ static const LEUnicode upperLeftTones[][7] = {
+ {0x0E6F, 0x0E70, 0x0E71, 0x0E72, 0x0E73, 0x0E74, 0x0E75},
+ {0xF712, 0xF713, 0xF714, 0xF715, 0xF716, 0xF717, 0xF711},
+ {0xF889, 0xF88A, 0xF88D, 0xF890, 0xF893, 0xF896, 0xF899},
+ {0x0E47, 0x0E48, 0x0E49, 0x0E4A, 0x0E4B, 0x0E4C, 0x0E4D}
+ };
+
+ if (tone >= CH_MAITAIKHU && tone <= CH_NIKHAHIT) {
+ return upperLeftTones[glyphSet][tone - CH_MAITAIKHU];
+ }
+
+ return tone;
+}
+
+LEUnicode ThaiShaping::lowerBelowVowel(LEUnicode vowel, le_uint8 glyphSet)
+{
+ static const LEUnicode lowerBelowVowels[][3] = {
+ {0x0E3C, 0x0E3D, 0x0E3E},
+ {0xF718, 0xF719, 0xF71A},
+ {0x0E38, 0x0E39, 0x0E3A},
+ {0x0E38, 0x0E39, 0x0E3A}
+
+ };
+
+ if (vowel >= CH_SARA_U && vowel <= CH_PHINTHU) {
+ return lowerBelowVowels[glyphSet][vowel - CH_SARA_U];
+ }
+
+ return vowel;
+}
+
+LEUnicode ThaiShaping::noDescenderCOD(LEUnicode cod, le_uint8 glyphSet)
+{
+ static const LEUnicode noDescenderCODs[][4] = {
+ {0x0E60, 0x0E0E, 0x0E0F, 0x0E63},
+ {0xF70F, 0x0E0E, 0x0E0F, 0xF700},
+ {0x0E0D, 0x0E0E, 0x0E0F, 0x0E10},
+ {0x0E0D, 0x0E0E, 0x0E0F, 0x0E10}
+
+ };
+
+ if (cod >= CH_YO_YING && cod <= CH_THO_THAN) {
+ return noDescenderCODs[glyphSet][cod - CH_YO_YING];
+ }
+
+ return cod;
+}
+
+le_uint8 ThaiShaping::doTransition (StateTransition transition, LEUnicode currChar, le_int32 inputIndex, le_uint8 glyphSet,
+ LEUnicode errorChar, LEUnicode *outputBuffer, LEGlyphStorage &glyphStorage, le_int32 &outputIndex)
+{
+ LEErrorCode success = LE_NO_ERROR;
+
+ switch (transition.action) {
+ case tA:
+ glyphStorage.setCharIndex(outputIndex, inputIndex, success);
+ outputBuffer[outputIndex++] = currChar;
+ break;
+
+ case tC:
+ glyphStorage.setCharIndex(outputIndex, inputIndex, success);
+ outputBuffer[outputIndex++] = currChar;
+ break;
+
+ case tD:
+ glyphStorage.setCharIndex(outputIndex, inputIndex, success);
+ outputBuffer[outputIndex++] = leftAboveVowel(currChar, glyphSet);
+ break;
+
+ case tE:
+ glyphStorage.setCharIndex(outputIndex, inputIndex, success);
+ outputBuffer[outputIndex++] = lowerRightTone(currChar, glyphSet);
+ break;
+
+ case tF:
+ glyphStorage.setCharIndex(outputIndex, inputIndex, success);
+ outputBuffer[outputIndex++] = lowerLeftTone(currChar, glyphSet);
+ break;
+
+ case tG:
+ glyphStorage.setCharIndex(outputIndex, inputIndex, success);
+ outputBuffer[outputIndex++] = upperLeftTone(currChar, glyphSet);
+ break;
+
+ case tH:
+ {
+ LEUnicode cod = outputBuffer[outputIndex - 1];
+ LEUnicode coa = noDescenderCOD(cod, glyphSet);
+
+ if (cod != coa) {
+ outputBuffer[outputIndex - 1] = coa;
+
+ glyphStorage.setCharIndex(outputIndex, inputIndex, success);
+ outputBuffer[outputIndex++] = currChar;
+ break;
+ }
+
+ glyphStorage.setCharIndex(outputIndex, inputIndex, success);
+ outputBuffer[outputIndex++] = lowerBelowVowel(currChar, glyphSet);
+ break;
+ }
+
+ case tR:
+ glyphStorage.setCharIndex(outputIndex, inputIndex, success);
+ outputBuffer[outputIndex++] = errorChar;
+
+ glyphStorage.setCharIndex(outputIndex, inputIndex, success);
+ outputBuffer[outputIndex++] = currChar;
+ break;
+
+ case tS:
+ if (currChar == CH_SARA_AM) {
+ glyphStorage.setCharIndex(outputIndex, inputIndex, success);
+ outputBuffer[outputIndex++] = errorChar;
+ }
+
+ glyphStorage.setCharIndex(outputIndex, inputIndex, success);
+ outputBuffer[outputIndex++] = currChar;
+ break;
+
+ default:
+ // FIXME: if we get here, there's an error
+ // in the state table!
+ glyphStorage.setCharIndex(outputIndex, inputIndex, success);
+ outputBuffer[outputIndex++] = currChar;
+ break;
+ }
+
+ return transition.nextState;
+}
+
+le_uint8 ThaiShaping::getNextState(LEUnicode ch, le_uint8 prevState, le_int32 inputIndex, le_uint8 glyphSet, LEUnicode errorChar,
+ le_uint8 &charClass, LEUnicode *output, LEGlyphStorage &glyphStorage, le_int32 &outputIndex)
+{
+ StateTransition transition;
+
+ charClass = getCharClass(ch);
+ transition = getTransition(prevState, charClass);
+
+ return doTransition(transition, ch, inputIndex, glyphSet, errorChar, output, glyphStorage, outputIndex);
+}
+
+le_bool ThaiShaping::isLegalHere(LEUnicode ch, le_uint8 prevState)
+{
+ le_uint8 charClass = getCharClass(ch);
+ StateTransition transition = getTransition(prevState, charClass);
+
+ switch (transition.action) {
+ case tA:
+ case tC:
+ case tD:
+ case tE:
+ case tF:
+ case tG:
+ case tH:
+ return TRUE;
+
+ case tR:
+ case tS:
+ return FALSE;
+
+ default:
+ // FIXME: if we get here, there's an error
+ // in the state table!
+ return FALSE;
+ }
+}
+
+le_int32 ThaiShaping::compose(const LEUnicode *input, le_int32 offset, le_int32 charCount, le_uint8 glyphSet,
+ LEUnicode errorChar, LEUnicode *output, LEGlyphStorage &glyphStorage)
+{
+ le_uint8 state = 0;
+ le_int32 inputIndex;
+ le_int32 outputIndex = 0;
+ le_uint8 conState = 0xFF;
+ le_int32 conInput = -1;
+ le_int32 conOutput = -1;
+
+ for (inputIndex = 0; inputIndex < charCount; inputIndex += 1) {
+ LEUnicode ch = input[inputIndex + offset];
+ le_uint8 charClass;
+
+ // Decompose SARA AM into NIKHAHIT + SARA AA
+ if (ch == CH_SARA_AM && isLegalHere(ch, state)) {
+ outputIndex = conOutput;
+ state = getNextState(CH_NIKHAHIT, conState, inputIndex, glyphSet, errorChar, charClass,
+ output, glyphStorage, outputIndex);
+
+ for (int j = conInput + 1; j < inputIndex; j += 1) {
+ ch = input[j + offset];
+ state = getNextState(ch, state, j, glyphSet, errorChar, charClass,
+ output, glyphStorage, outputIndex);
+ }
+
+ ch = CH_SARA_AA;
+ }
+
+ state = getNextState(ch, state, inputIndex, glyphSet, errorChar, charClass,
+ output, glyphStorage, outputIndex);
+
+ if (charClass >= CON && charClass <= COD) {
+ conState = state;
+ conInput = inputIndex;
+ conOutput = outputIndex;
+ }
+ }
+
+ return outputIndex;
+}
+
+U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-50.1/layout/ThaiShaping.h b/Build/source/libs/icu/icu-50.1/layout/ThaiShaping.h
new file mode 100644
index 00000000000..4c6d6a51f4f
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/ThaiShaping.h
@@ -0,0 +1,108 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
+ *
+ */
+
+#ifndef __THAISHAPING_H
+#define __THAISHAPING_H
+
+/**
+ * \file
+ * \internal
+ */
+
+#include "LETypes.h"
+#include "LEGlyphFilter.h"
+#include "OpenTypeTables.h"
+
+U_NAMESPACE_BEGIN
+
+class LEGlyphStorage;
+
+class ThaiShaping /* not : public UObject because all methods are static */ {
+public:
+
+ enum {
+ // Character classes
+ NON = 0,
+ CON = 1,
+ COA = 2,
+ COD = 3,
+ LVO = 4,
+ FV1 = 5,
+ FV2 = 6,
+ FV3 = 7,
+ BV1 = 8,
+ BV2 = 9,
+ BDI = 10,
+ TON = 11,
+ AD1 = 12,
+ AD2 = 13,
+ AD3 = 14,
+ NIK = 15,
+ AV1 = 16,
+ AV2 = 17,
+ AV3 = 18,
+ classCount = 19,
+
+ // State Transition actions
+ tA = 0,
+ tC = 1,
+ tD = 2,
+ tE = 3,
+ tF = 4,
+ tG = 5,
+ tH = 6,
+ tR = 7,
+ tS = 8
+ };
+
+ struct StateTransition
+ {
+ le_uint8 nextState;
+ le_uint8 action;
+
+ le_uint8 getNextState() { return nextState; };
+ le_uint8 getAction() { return action; };
+ };
+
+ static le_int32 compose(const LEUnicode *input, le_int32 offset, le_int32 charCount, le_uint8 glyphSet,
+ LEUnicode errorChar, LEUnicode *output, LEGlyphStorage &glyphStorage);
+
+private:
+ // forbid instantiation
+ ThaiShaping();
+
+ static const le_uint8 classTable[];
+ static const StateTransition thaiStateTable[][classCount];
+
+ inline static StateTransition getTransition(le_uint8 state, le_uint8 currClass);
+
+ static le_uint8 doTransition(StateTransition transition, LEUnicode currChar, le_int32 inputIndex, le_uint8 glyphSet,
+ LEUnicode errorChar, LEUnicode *outputBuffer, LEGlyphStorage &glyphStorage, le_int32 &outputIndex);
+
+ static le_uint8 getNextState(LEUnicode ch, le_uint8 state, le_int32 inputIndex, le_uint8 glyphSet, LEUnicode errorChar,
+ le_uint8 &charClass, LEUnicode *output, LEGlyphStorage &glyphStorage, le_int32 &outputIndex);
+
+ static le_bool isLegalHere(LEUnicode ch, le_uint8 prevState);
+ static le_uint8 getCharClass(LEUnicode ch);
+
+ static LEUnicode noDescenderCOD(LEUnicode cod, le_uint8 glyphSet);
+ static LEUnicode leftAboveVowel(LEUnicode vowel, le_uint8 glyphSet);
+ static LEUnicode lowerBelowVowel(LEUnicode vowel, le_uint8 glyphSet);
+ static LEUnicode lowerRightTone(LEUnicode tone, le_uint8 glyphSet);
+ static LEUnicode lowerLeftTone(LEUnicode tone, le_uint8 glyphSet);
+ static LEUnicode upperLeftTone(LEUnicode tone, le_uint8 glyphSet);
+
+};
+
+inline ThaiShaping::StateTransition ThaiShaping::getTransition(le_uint8 state, le_uint8 currClass)
+{
+ return thaiStateTable[state][currClass];
+}
+
+U_NAMESPACE_END
+#endif
+
+
diff --git a/Build/source/libs/icu/icu-50.1/layout/ThaiStateTables.cpp b/Build/source/libs/icu/icu-50.1/layout/ThaiStateTables.cpp
new file mode 100644
index 00000000000..b1f8b184fbf
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/ThaiStateTables.cpp
@@ -0,0 +1,87 @@
+/*
+ * %W% %E%
+ *
+ * (C) Copyright IBM Corp. 1999-2003 - All Rights Reserved
+ *
+ * WARNING: THIS FILE IS MACHINE GENERATED. DO NOT HAND EDIT IT UNLESS
+ * YOU REALLY KNOW WHAT YOU'RE DOING.
+ *
+ */
+
+#include "LETypes.h"
+#include "ThaiShaping.h"
+
+U_NAMESPACE_BEGIN
+
+const le_uint8 ThaiShaping::classTable[] = {
+ // 0 1 2 3 4 5 6 7 8 9 A B C D E F
+ // -------------------------------------------------------------------------------
+ /*0E00*/ NON, CON, CON, CON, CON, CON, CON, CON, CON, CON, CON, CON, CON, COD, COD, COD,
+ /*0E10*/ COD, CON, CON, CON, CON, CON, CON, CON, CON, CON, CON, COA, CON, COA, CON, COA,
+ /*0E20*/ CON, CON, CON, CON, FV3, CON, FV3, CON, CON, CON, CON, CON, CON, CON, CON, NON,
+ /*0E30*/ FV1, AV2, FV1, FV1, AV1, AV3, AV2, AV3, BV1, BV2, BDI, NON, NON, NON, NON, NON,
+ /*0E40*/ LVO, LVO, LVO, LVO, LVO, FV2, NON, AD2, TON, TON, TON, TON, AD1, NIK, AD3, NON,
+ /*0E50*/ NON, NON, NON, NON, NON, NON, NON, NON, NON, NON, NON, NON
+};
+
+const ThaiShaping::StateTransition ThaiShaping::thaiStateTable[][ThaiShaping::classCount] = {
+ //+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+ //| N C C C L F F F B B B T A A A N A A A |
+ //| O O O O V V V V V V D O D D D I V V V |
+ //| N N A D O 1 2 3 1 2 I N 1 2 3 K 1 2 3 |
+ //+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+ /*00*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tS}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
+ /*01*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tA}, { 0, tS}, { 0, tA}, { 2, tC}, { 6, tC}, { 0, tC}, { 8, tE}, { 0, tE}, { 0, tE}, { 0, tC}, { 9, tE}, {11, tC}, {14, tC}, {16, tC}},
+ /*02*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tS}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 3, tE}, { 0, tE}, { 0, tR}, { 0, tR}, { 4, tE}, { 0, tR}, { 0, tR}, { 0, tR}},
+ /*03*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tA}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
+ /*04*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tS}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 5, tC}, { 0, tC}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
+ /*05*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tA}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
+ /*06*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tS}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 7, tE}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
+ /*07*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tA}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
+ /*08*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tA}, { 0, tA}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
+ /*09*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tS}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, {10, tC}, { 0, tC}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
+ /*10*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tA}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
+ /*11*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tS}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, {12, tC}, { 0, tC}, { 0, tR}, { 0, tR}, {13, tC}, { 0, tR}, { 0, tR}, { 0, tR}},
+ /*12*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tA}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
+ /*13*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tS}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
+ /*14*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tS}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, {15, tC}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
+ /*15*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tA}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
+ /*16*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tS}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, {17, tC}, { 0, tR}, { 0, tC}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
+ /*17*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tA}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
+ /*18*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tA}, { 0, tS}, { 0, tA}, {19, tC}, {23, tC}, { 0, tC}, {25, tF}, { 0, tF}, { 0, tF}, { 0, tD}, {26, tF}, {28, tD}, {31, tD}, {33, tD}},
+ /*19*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tS}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, {20, tF}, { 0, tF}, { 0, tR}, { 0, tR}, {21, tF}, { 0, tR}, { 0, tR}, { 0, tR}},
+ /*20*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tA}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
+ /*21*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tS}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, {22, tC}, { 0, tC}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
+ /*22*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tA}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
+ /*23*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tS}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, {24, tF}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
+ /*24*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tA}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
+ /*25*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tA}, { 0, tA}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
+ /*26*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tS}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, {27, tG}, { 0, tG}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
+ /*27*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tA}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
+ /*28*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tS}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, {29, tG}, { 0, tG}, { 0, tR}, { 0, tR}, {30, tG}, { 0, tR}, { 0, tR}, { 0, tR}},
+ /*29*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tA}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
+ /*30*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tS}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
+ /*31*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tS}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, {32, tG}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
+ /*32*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tA}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
+ /*33*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tS}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, {34, tG}, { 0, tR}, { 0, tG}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
+ /*34*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tA}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
+ /*35*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tA}, { 0, tS}, { 0, tA}, {36, tH}, {40, tH}, { 0, tH}, {42, tE}, { 0, tE}, { 0, tE}, { 0, tC}, {43, tE}, {45, tC}, {48, tC}, {50, tC}},
+ /*36*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tS}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, {37, tE}, { 0, tE}, { 0, tR}, { 0, tR}, {38, tE}, { 0, tR}, { 0, tR}, { 0, tR}},
+ /*37*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tA}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
+ /*38*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tS}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, {39, tC}, { 0, tC}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
+ /*39*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tA}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
+ /*40*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tS}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, {41, tE}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
+ /*41*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tA}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
+ /*42*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tA}, { 0, tA}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
+ /*43*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tS}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, {44, tC}, { 0, tC}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
+ /*44*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tA}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
+ /*45*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tS}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, {46, tC}, { 0, tC}, { 0, tR}, { 0, tR}, {47, tC}, { 0, tR}, { 0, tR}, { 0, tR}},
+ /*46*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tA}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
+ /*47*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tS}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
+ /*48*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tS}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, {49, tC}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
+ /*49*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tA}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
+ /*50*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tS}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, {51, tC}, { 0, tR}, { 0, tC}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
+ /*51*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tA}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}}
+};
+
+U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-50.1/layout/TibetanLayoutEngine.cpp b/Build/source/libs/icu/icu-50.1/layout/TibetanLayoutEngine.cpp
new file mode 100644
index 00000000000..d89879f6f29
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/TibetanLayoutEngine.cpp
@@ -0,0 +1,87 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2008 - All Rights Reserved
+ *
+ * Developed at DIT - Government of Bhutan
+ *
+ * Contact person: Pema Geyleg - <pema_geyleg@druknet.bt>
+ *
+ * This file is a modification of the ICU file KhmerReordering.cpp
+ * by Jens Herden and Javier Sola who have given all their possible rights to IBM and the Governement of Bhutan
+ * A first module for Dzongkha was developed by Karunakar under Panlocalisation funding.
+ * Assistance for this module has been received from Namgay Thinley, Christopher Fynn and Javier Sola
+ *
+ */
+
+
+#include "OpenTypeLayoutEngine.h"
+#include "TibetanLayoutEngine.h"
+#include "LEGlyphStorage.h"
+#include "TibetanReordering.h"
+
+U_NAMESPACE_BEGIN
+
+UOBJECT_DEFINE_RTTI_IMPLEMENTATION(TibetanOpenTypeLayoutEngine)
+
+TibetanOpenTypeLayoutEngine::TibetanOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
+ le_int32 typoFlags, const GlyphSubstitutionTableHeader *gsubTable, LEErrorCode &success)
+ : OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable, success)
+{
+ fFeatureMap = TibetanReordering::getFeatureMap(fFeatureMapCount);
+ fFeatureOrder = TRUE;
+}
+
+TibetanOpenTypeLayoutEngine::TibetanOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
+ le_int32 typoFlags, LEErrorCode &success)
+ : OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, success)
+{
+ fFeatureMap = TibetanReordering::getFeatureMap(fFeatureMapCount);
+ fFeatureOrder = TRUE;
+}
+
+TibetanOpenTypeLayoutEngine::~TibetanOpenTypeLayoutEngine()
+{
+ // nothing to do
+}
+
+// Input: characters
+// Output: characters, char indices, tags
+// Returns: output character count
+le_int32 TibetanOpenTypeLayoutEngine::characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
+ LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success)
+{
+ if (LE_FAILURE(success)) {
+ return 0;
+ }
+
+ if (chars == NULL || offset < 0 || count < 0 || max < 0 || offset >= max || offset + count > max) {
+ success = LE_ILLEGAL_ARGUMENT_ERROR;
+ return 0;
+ }
+
+ le_int32 worstCase = count * 3; // worst case is 3 for Khmer TODO check if 2 is enough
+
+ outChars = LE_NEW_ARRAY(LEUnicode, worstCase);
+
+ if (outChars == NULL) {
+ success = LE_MEMORY_ALLOCATION_ERROR;
+ return 0;
+ }
+
+ glyphStorage.allocateGlyphArray(worstCase, rightToLeft, success);
+ glyphStorage.allocateAuxData(success);
+
+ if (LE_FAILURE(success)) {
+ LE_DELETE_ARRAY(outChars);
+ return 0;
+ }
+
+ // NOTE: assumes this allocates featureTags...
+ // (probably better than doing the worst case stuff here...)
+ le_int32 outCharCount = TibetanReordering::reorder(&chars[offset], count, fScriptCode, outChars, glyphStorage);
+
+ glyphStorage.adoptGlyphCount(outCharCount);
+ return outCharCount;
+}
+
+U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-50.1/layout/TibetanLayoutEngine.h b/Build/source/libs/icu/icu-50.1/layout/TibetanLayoutEngine.h
new file mode 100644
index 00000000000..6ad38cbf873
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/TibetanLayoutEngine.h
@@ -0,0 +1,131 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2008 - All Rights Reserved
+ *
+ * Developed at DIT - Government of Bhutan
+ *
+ * Contact person: Pema Geyleg - <pema_geyleg@druknet.bt>
+ *
+ * This file is a modification of the ICU file KhmerReordering.cpp
+ * by Jens Herden and Javier Sola who have given all their possible rights to IBM and the Governement of Bhutan
+ * A first module for Dzongkha was developed by Karunakar under Panlocalisation funding.
+ * Assistance for this module has been received from Namgay Thinley, Christopher Fynn and Javier Sola
+ *
+ */
+
+#ifndef __TIBETANLAYOUTENGINE_H
+#define __TIBETANLAYOUTENGINE_H
+
+// #include "LETypes.h"
+// #include "LEFontInstance.h"
+// #include "LEGlyphFilter.h"
+// #include "LayoutEngine.h"
+// #include "OpenTypeLayoutEngine.h"
+
+// #include "GlyphSubstitutionTables.h"
+// #include "GlyphDefinitionTables.h"
+// #include "GlyphPositioningTables.h"
+
+U_NAMESPACE_BEGIN
+
+// class MPreFixups;
+// class LEGlyphStorage;
+
+/**
+ * This class implements OpenType layout for Dzongkha and Tibetan OpenType fonts
+ *
+ * @internal
+ */
+class TibetanOpenTypeLayoutEngine : public OpenTypeLayoutEngine
+{
+public:
+ /**
+ * This is the main constructor. It constructs an instance of TibetanOpenTypeLayoutEngine for
+ * a particular font, script and language. It takes the GSUB table as a parameter since
+ * LayoutEngine::layoutEngineFactory has to read the GSUB table to know that it has an
+ * Tibetan OpenType font.
+ *
+ * @param fontInstance - the font
+ * @param scriptCode - the script
+ * @param langaugeCode - the language
+ * @param gsubTable - the GSUB table
+ * @param success - set to an error code if the operation fails
+ *
+ * @see LayoutEngine::layoutEngineFactory
+ * @see OpenTypeLayoutEngine
+ * @see ScriptAndLangaugeTags.h for script and language codes
+ *
+ * @internal
+ */
+ TibetanOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
+ le_int32 typoFlags, const GlyphSubstitutionTableHeader *gsubTable, LEErrorCode &success);
+
+ /**
+ * This constructor is used when the font requires a "canned" GSUB table which can't be known
+ * until after this constructor has been invoked.
+ *
+ * @param fontInstance - the font
+ * @param scriptCode - the script
+ * @param langaugeCode - the language
+ * @param success - set to an error code if the operation fails
+ *
+ * @see OpenTypeLayoutEngine
+ * @see ScriptAndLangaugeTags.h for script and language codes
+ *
+ * @internal
+ */
+ TibetanOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
+ le_int32 typoFlags, LEErrorCode &success);
+
+ /**
+ * The destructor, virtual for correct polymorphic invocation.
+ *
+ * @internal
+ */
+ virtual ~TibetanOpenTypeLayoutEngine();
+
+ /**
+ * ICU "poor man's RTTI", returns a UClassID for the actual class.
+ *
+ * @internal ICU 3.6
+ */
+ virtual UClassID getDynamicClassID() const;
+
+ /**
+ * ICU "poor man's RTTI", returns a UClassID for this class.
+ *
+ * @internal ICU 3.6
+ */
+ static UClassID getStaticClassID();
+
+protected:
+
+ /**
+ * This method does Tibetan OpenType character processing. It assigns the OpenType feature
+ * tags to the characters, and may generate output characters which have been reordered.
+ * It may also split some vowels, resulting in more output characters than input characters.
+ *
+ * Input parameters:
+ * @param chars - the input character context
+ * @param offset - the index of the first character to process
+ * @param count - the number of characters to process
+ * @param max - the number of characters in the input context
+ * @param rightToLeft - <code>TRUE</code> if the characters are in a right to left directional run
+ * @param glyphStorage - the glyph storage object. The glyph and character index arrays will be set.
+ * the auxillary data array will be set to the feature tags.
+ *
+ * Output parameters:
+ * @param success - set to an error code if the operation fails
+ *
+ * @return the output character count
+ *
+ * @internal
+ */
+ virtual le_int32 characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
+ LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success);
+
+};
+
+U_NAMESPACE_END
+#endif
+
diff --git a/Build/source/libs/icu/icu-50.1/layout/TibetanReordering.cpp b/Build/source/libs/icu/icu-50.1/layout/TibetanReordering.cpp
new file mode 100644
index 00000000000..4296d637fd4
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/TibetanReordering.cpp
@@ -0,0 +1,389 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2007 - All Rights Reserved
+ *
+ * Developed at DIT - Government of Bhutan
+ *
+ * Contact person: Pema Geyleg - <pema_geyleg@druknet.bt>
+ *
+ * This file is a modification of the ICU file KhmerReordering.cpp
+ * by Jens Herden and Javier Sola who have given all their possible rights to IBM and the Governement of Bhutan
+ * A first module for Dzongkha was developed by Karunakar under Panlocalisation funding.
+ * Assistance for this module has been received from Namgay Thinley, Christopher Fynn and Javier Sola
+ *
+ */
+
+//#include <stdio.h>
+#include "LETypes.h"
+#include "OpenTypeTables.h"
+#include "TibetanReordering.h"
+#include "LEGlyphStorage.h"
+
+
+U_NAMESPACE_BEGIN
+
+// Characters that get refered to by name...
+enum
+{
+ C_DOTTED_CIRCLE = 0x25CC,
+ C_PRE_NUMBER_MARK = 0x0F3F
+ };
+
+
+enum
+{
+ // simple classes, they are used in the statetable (in this file) to control the length of a syllable
+ // they are also used to know where a character should be placed (location in reference to the base character)
+ // and also to know if a character, when independtly displayed, should be displayed with a dotted-circle to
+ // indicate error in syllable construction
+ _xx = TibetanClassTable::CC_RESERVED,
+ _ba = TibetanClassTable::CC_BASE,
+ _sj = TibetanClassTable::CC_SUBJOINED | TibetanClassTable::CF_DOTTED_CIRCLE | TibetanClassTable::CF_POS_BELOW,
+ _tp = TibetanClassTable::CC_TSA_PHRU | TibetanClassTable::CF_DOTTED_CIRCLE | TibetanClassTable::CF_POS_ABOVE,
+ _ac = TibetanClassTable::CC_A_CHUNG | TibetanClassTable::CF_DOTTED_CIRCLE | TibetanClassTable::CF_POS_BELOW,
+ _cs = TibetanClassTable::CC_COMP_SANSKRIT | TibetanClassTable::CF_DOTTED_CIRCLE | TibetanClassTable::CF_POS_BELOW,
+ _ha = TibetanClassTable::CC_HALANTA | TibetanClassTable::CF_DOTTED_CIRCLE | TibetanClassTable::CF_POS_BELOW,
+ _bv = TibetanClassTable::CC_BELOW_VOWEL | TibetanClassTable::CF_DOTTED_CIRCLE | TibetanClassTable::CF_POS_BELOW,
+ _av = TibetanClassTable::CC_ABOVE_VOWEL | TibetanClassTable::CF_DOTTED_CIRCLE | TibetanClassTable::CF_POS_ABOVE,
+ _an = TibetanClassTable::CC_ANUSVARA | TibetanClassTable::CF_DOTTED_CIRCLE | TibetanClassTable::CF_POS_ABOVE,
+ _cb = TibetanClassTable::CC_CANDRABINDU | TibetanClassTable::CF_DOTTED_CIRCLE | TibetanClassTable::CF_POS_ABOVE,
+ _vs = TibetanClassTable::CC_VISARGA | TibetanClassTable::CF_DOTTED_CIRCLE| TibetanClassTable::CF_POS_AFTER,
+ _as = TibetanClassTable::CC_ABOVE_S_MARK | TibetanClassTable::CF_DOTTED_CIRCLE | TibetanClassTable::CF_POS_ABOVE,
+ _bs = TibetanClassTable::CC_BELOW_S_MARK | TibetanClassTable::CF_DOTTED_CIRCLE | TibetanClassTable::CF_POS_BELOW,
+ _di = TibetanClassTable::CC_DIGIT | TibetanClassTable::CF_DIGIT,
+ _pd = TibetanClassTable::CC_PRE_DIGIT_MARK | TibetanClassTable::CF_DOTTED_CIRCLE | TibetanClassTable::CF_PREDIGIT | TibetanClassTable::CF_POS_BEFORE ,
+ _bd = TibetanClassTable::CC_POST_BELOW_DIGIT_M | TibetanClassTable::CF_DOTTED_CIRCLE | TibetanClassTable::CF_POS_AFTER
+};
+
+
+// Character class tables
+//_xx Non Combining characters
+//_ba Base Consonants
+//_sj Subjoined consonants
+//_tp Tsa - phru
+//_ac A-chung, Vowel Lengthening mark
+//_cs Precomposed Sanskrit vowel + subjoined consonants
+//_ha Halanta/Virama
+//_bv Below vowel
+//_av above vowel
+//_an Anusvara
+//_cb Candrabindu
+//_vs Visaraga/Post mark
+//_as Upper Stress marks
+//_bs Lower Stress marks
+//_di Digit
+//_pd Number pre combining, Needs reordering
+//_bd Other number combining marks
+
+static const TibetanClassTable::CharClass tibetanCharClasses[] =
+{
+ // 0 1 2 3 4 5 6 7 8 9 a b c d e f
+ _xx, _ba, _xx, _xx, _ba, _ba, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, // 0F00 - 0F0F 0
+ _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _bd, _bd, _xx, _xx, _xx, _xx, _xx, _xx, // 0F10 - 0F1F 1
+ _di, _di, _di, _di, _di, _di, _di, _di, _di, _di, _xx, _xx, _xx, _xx, _xx, _xx, // 0F20 - 0F2F 2
+ _xx, _xx, _xx, _xx, _xx, _bs, _xx, _bs, _xx, _tp, _xx, _xx, _xx, _xx, _bd, _pd, // 0F30 - 0F3F 3
+ _ba, _ba, _ba, _ba, _ba, _ba, _ba, _ba, _xx, _ba, _ba, _ba, _ba, _ba, _ba, _ba, // 0F40 - 0F4F 4
+ _ba, _ba, _ba, _ba, _ba, _ba, _ba, _ba, _ba, _ba, _ba, _ba, _ba, _ba, _ba, _ba, // 0F50 - 0F5F 5
+ _ba, _ba, _ba, _ba, _ba, _ba, _ba, _ba, _ba, _ba, _ba, _xx, _xx, _xx, _xx, _xx, // 0F60 - 0F6F 6
+ _xx, _ac, _av, _cs, _bv, _bv, _cs, _cs, _cs, _cs, _av, _av, _av, _av, _an, _vs, // 0F70 - 0F7F 7
+ _av, _cs, _cb, _cb, _ha, _xx, _as, _as, _ba, _ba, _ba, _ba, _xx, _xx, _xx, _xx, // 0F80 - 0F8F 8
+ _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _xx, _sj, _sj, _sj, _sj, _sj, _sj, _sj, // 0F90 - 0F9F 9
+ _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, // 0FA0 - 0FAF a
+ _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _xx, _sj, _sj, // 0FB0 - 0FBF b
+ _xx, _xx, _xx, _xx, _xx, _xx, _bs, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, // 0FC0 - 0FCF c
+ _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx,// 0FD0 - 0FDF d
+ _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, // 0FE0 - 0FEF e
+ _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, // 0FF0 - 0FFF f
+};
+
+
+//
+// Tibetan Class Tables
+//
+
+//
+// The range of characters defined in the above table is defined here. For Tibetan 0F00 to 0FFF
+// Even if the Tibetan range is bigger, most of the characters are not combinable, and therefore treated
+// as _xx
+static const TibetanClassTable tibetanClassTable = {0x0F00, 0x0FFF, tibetanCharClasses};
+
+
+// Below we define how a character in the input string is either in the tibetanCharClasses table
+// (in which case we get its type back), or an unknown object in which case we get _xx (CC_RESERVED) back
+TibetanClassTable::CharClass TibetanClassTable::getCharClass(LEUnicode ch) const
+{
+ if (ch < firstChar || ch > lastChar) {
+ return CC_RESERVED;
+ }
+
+ return classTable[ch - firstChar];
+}
+
+const TibetanClassTable *TibetanClassTable::getTibetanClassTable()
+{
+ return &tibetanClassTable;
+}
+
+
+
+class TibetanReorderingOutput : public UMemory {
+private:
+ le_int32 fSyllableCount;
+ le_int32 fOutIndex;
+ LEUnicode *fOutChars;
+
+ LEGlyphStorage &fGlyphStorage;
+
+
+public:
+ TibetanReorderingOutput(LEUnicode *outChars, LEGlyphStorage &glyphStorage)
+ : fSyllableCount(0), fOutIndex(0), fOutChars(outChars), fGlyphStorage(glyphStorage)
+ {
+ // nothing else to do...
+ }
+
+ ~TibetanReorderingOutput()
+ {
+ // nothing to do here...
+ }
+
+ void reset()
+ {
+ fSyllableCount += 1;
+ }
+
+ void writeChar(LEUnicode ch, le_uint32 charIndex, FeatureMask featureMask)
+ {
+ LEErrorCode success = LE_NO_ERROR;
+
+ fOutChars[fOutIndex] = ch;
+
+ fGlyphStorage.setCharIndex(fOutIndex, charIndex, success);
+ fGlyphStorage.setAuxData(fOutIndex, featureMask, success);
+
+ fOutIndex += 1;
+ }
+
+ le_int32 getOutputIndex()
+ {
+ return fOutIndex;
+ }
+};
+
+
+//TODO remove unused flags
+#define ccmpFeatureTag LE_CCMP_FEATURE_TAG
+#define blwfFeatureTag LE_BLWF_FEATURE_TAG
+#define pstfFeatureTag LE_PSTF_FEATURE_TAG
+#define presFeatureTag LE_PRES_FEATURE_TAG
+#define blwsFeatureTag LE_BLWS_FEATURE_TAG
+#define abvsFeatureTag LE_ABVS_FEATURE_TAG
+#define pstsFeatureTag LE_PSTS_FEATURE_TAG
+
+#define blwmFeatureTag LE_BLWM_FEATURE_TAG
+#define abvmFeatureTag LE_ABVM_FEATURE_TAG
+#define distFeatureTag LE_DIST_FEATURE_TAG
+
+#define prefFeatureTag LE_PREF_FEATURE_TAG
+#define abvfFeatureTag LE_ABVF_FEATURE_TAG
+#define cligFeatureTag LE_CLIG_FEATURE_TAG
+#define mkmkFeatureTag LE_MKMK_FEATURE_TAG
+
+// Shaping features
+#define prefFeatureMask 0x80000000UL
+#define blwfFeatureMask 0x40000000UL
+#define abvfFeatureMask 0x20000000UL
+#define pstfFeatureMask 0x10000000UL
+#define presFeatureMask 0x08000000UL
+#define blwsFeatureMask 0x04000000UL
+#define abvsFeatureMask 0x02000000UL
+#define pstsFeatureMask 0x01000000UL
+#define cligFeatureMask 0x00800000UL
+#define ccmpFeatureMask 0x00040000UL
+
+// Positioning features
+#define distFeatureMask 0x00400000UL
+#define blwmFeatureMask 0x00200000UL
+#define abvmFeatureMask 0x00100000UL
+#define mkmkFeatureMask 0x00080000UL
+
+#define tagPref (ccmpFeatureMask | prefFeatureMask | presFeatureMask | cligFeatureMask | distFeatureMask)
+#define tagAbvf (ccmpFeatureMask | abvfFeatureMask | abvsFeatureMask | cligFeatureMask | distFeatureMask | abvmFeatureMask | mkmkFeatureMask)
+#define tagPstf (ccmpFeatureMask | blwfFeatureMask | blwsFeatureMask | prefFeatureMask | presFeatureMask | pstfFeatureMask | pstsFeatureMask | cligFeatureMask | distFeatureMask | blwmFeatureMask)
+#define tagBlwf (ccmpFeatureMask | blwfFeatureMask | blwsFeatureMask | cligFeatureMask | distFeatureMask | blwmFeatureMask | mkmkFeatureMask)
+#define tagDefault (ccmpFeatureMask | prefFeatureMask | blwfFeatureMask | presFeatureMask | blwsFeatureMask | cligFeatureMask | distFeatureMask | abvmFeatureMask | blwmFeatureMask | mkmkFeatureMask)
+
+
+
+// These are in the order in which the features need to be applied
+// for correct processing
+static const FeatureMap featureMap[] =
+{
+ // Shaping features
+ {ccmpFeatureTag, ccmpFeatureMask},
+ {prefFeatureTag, prefFeatureMask},
+ {blwfFeatureTag, blwfFeatureMask},
+ {abvfFeatureTag, abvfFeatureMask},
+ {pstfFeatureTag, pstfFeatureMask},
+ {presFeatureTag, presFeatureMask},
+ {blwsFeatureTag, blwsFeatureMask},
+ {abvsFeatureTag, abvsFeatureMask},
+ {pstsFeatureTag, pstsFeatureMask},
+ {cligFeatureTag, cligFeatureMask},
+
+ // Positioning features
+ {distFeatureTag, distFeatureMask},
+ {blwmFeatureTag, blwmFeatureMask},
+ {abvmFeatureTag, abvmFeatureMask},
+ {mkmkFeatureTag, mkmkFeatureMask},
+};
+
+static const le_int32 featureMapCount = LE_ARRAY_SIZE(featureMap);
+
+// The stateTable is used to calculate the end (the length) of a well
+// formed Tibetan Syllable.
+//
+// Each horizontal line is ordered exactly the same way as the values in TibetanClassTable
+// CharClassValues in TibetanReordering.h This coincidence of values allows the
+// follow up of the table.
+//
+// Each line corresponds to a state, which does not necessarily need to be a type
+// of component... for example, state 2 is a base, with is always a first character
+// in the syllable, but the state could be produced a consonant of any type when
+// it is the first character that is analysed (in ground state).
+//
+static const le_int8 tibetanStateTable[][TibetanClassTable::CC_COUNT] =
+{
+
+
+ //Dzongkha state table
+ //xx ba sj tp ac cs ha bv av an cb vs as bs di pd bd
+ { 1, 2, 4, 3, 8, 7, 9, 10, 14, 13, 17, 18, 19, 19, 20, 21, 21,}, // 0 - ground state
+ {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,}, // 1 - exit state (or sign to the right of the syllable)
+ {-1, -1, 4, 3, 8, 7, 9, 10, 14, 13, 17, 18, 19, 19, -1, -1, -1,}, // 2 - Base consonant
+ {-1, -1, 5, -1, 8, 7, -1, 10, 14, 13, 17, 18, 19, 19, -1, -1, -1,}, // 3 - Tsa phru after base
+ {-1, -1, 4, 6, 8, 7, 9, 10, 14, 13, 17, 18, 19, 19, -1, -1, -1,}, // 4 - Subjoined consonant after base
+ {-1, -1, 5, -1, 8, 7, -1, 10, 14, 13, 17, 18, 19, 19, -1, -1, -1,}, // 5 - Subjoined consonant after tsa phru
+ {-1, -1, -1, -1, 8, 7, -1, 10, 14, 13, 17, 18, 19, 19, -1, -1, -1,}, // 6 - Tsa phru after subjoined consonant
+ {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 19, 19, -1, -1, -1,}, // 7 - Pre Composed Sanskrit
+ {-1, -1, -1, -1, -1, -1, -1, 10, 14, 13, 17, 18, 19, 19, -1, -1, -1,}, // 8 - A-chung
+ {-1, -1, -1, -1, -1, -1, -1, -1, 14, 13, 17, -1, 19, 19, -1, -1, -1,}, // 9 - Halanta
+ {-1, -1, -1, -1, -1, -1, -1, 11, 14, 13, 17, 18, 19, 19, -1, -1, -1,}, // 10 - below vowel 1
+ {-1, -1, -1, -1, -1, -1, -1, 12, 14, 13, 17, 18, 19, 19, -1, -1, -1,}, // 11 - below vowel 2
+ {-1, -1, -1, -1, -1, -1, -1, -1, 14, 13, 17, 18, 19, 19, -1, -1, -1,}, // 12 - below vowel 3
+ {-1, -1, -1, -1, -1, -1, -1, -1, 14, 17, 17, 18, 19, 19, -1, -1, -1,}, // 13 - Anusvara before vowel
+ {-1, -1, -1, -1, -1, -1, -1, -1, 15, 17, 17, 18, 19, 19, -1, -1, -1,}, // 14 - above vowel 1
+ {-1, -1, -1, -1, -1, -1, -1, -1, 16, 17, 17, 18, 19, 19, -1, -1, -1,}, // 15 - above vowel 2
+ {-1, -1, -1, -1, -1, -1, -1, -1, -1, 17, 17, 18, 19, 19, -1, -1, -1,}, // 16 - above vowel 3
+ {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18, 19, 19, -1, -1, -1,}, // 17 - Anusvara or Candrabindu after vowel
+ {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 19, 19, -1, -1, -1,}, // 18 - Visarga
+ {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,}, // 19 - strss mark
+ {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 21, 21,}, // 20 - digit
+ {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,}, // 21 - digit mark
+
+
+};
+
+
+const FeatureMap *TibetanReordering::getFeatureMap(le_int32 &count)
+{
+ count = featureMapCount;
+
+ return featureMap;
+}
+
+
+// Given an input string of characters and a location in which to start looking
+// calculate, using the state table, which one is the last character of the syllable
+// that starts in the starting position.
+le_int32 TibetanReordering::findSyllable(const TibetanClassTable *classTable, const LEUnicode *chars, le_int32 prev, le_int32 charCount)
+{
+ le_int32 cursor = prev;
+ le_int8 state = 0;
+
+ while (cursor < charCount) {
+ TibetanClassTable::CharClass charClass = (classTable->getCharClass(chars[cursor]) & TibetanClassTable::CF_CLASS_MASK);
+
+ state = tibetanStateTable[state][charClass];
+
+ if (state < 0) {
+ break;
+ }
+
+ cursor += 1;
+ }
+
+ return cursor;
+}
+
+
+// This is the real reordering function as applied to the Tibetan language
+
+le_int32 TibetanReordering::reorder(const LEUnicode *chars, le_int32 charCount, le_int32,
+ LEUnicode *outChars, LEGlyphStorage &glyphStorage)
+{
+ const TibetanClassTable *classTable = TibetanClassTable::getTibetanClassTable();
+
+ TibetanReorderingOutput output(outChars, glyphStorage);
+ TibetanClassTable::CharClass charClass;
+ le_int32 i, prev = 0;
+
+ // This loop only exits when we reach the end of a run, which may contain
+ // several syllables.
+ while (prev < charCount) {
+ le_int32 syllable = findSyllable(classTable, chars, prev, charCount);
+
+ output.reset();
+
+ // shall we add a dotted circle?
+ // If in the position in which the base should be (first char in the string) there is
+ // a character that has the Dotted circle flag (a character that cannot be a base)
+ // then write a dotted circle
+ if (classTable->getCharClass(chars[prev]) & TibetanClassTable::CF_DOTTED_CIRCLE) {
+ output.writeChar(C_DOTTED_CIRCLE, prev, tagDefault);
+ }
+
+ // copy the rest to output, inverting the pre-number mark if present after a digit.
+ for (i = prev; i < syllable; i += 1) {
+ charClass = classTable->getCharClass(chars[i]);
+
+ if ((TibetanClassTable::CF_DIGIT & charClass)
+ && ( classTable->getCharClass(chars[i+1]) & TibetanClassTable::CF_PREDIGIT))
+ {
+ output.writeChar(C_PRE_NUMBER_MARK, i, tagPref);
+ output.writeChar(chars[i], i+1 , tagPref);
+ i += 1;
+ } else {
+ switch (charClass & TibetanClassTable::CF_POS_MASK) {
+
+ // If the present character is a number, and the next character is a pre-number combining mark
+ // then the two characters are reordered
+
+ case TibetanClassTable::CF_POS_ABOVE :
+ output.writeChar(chars[i], i, tagAbvf);
+ break;
+
+ case TibetanClassTable::CF_POS_AFTER :
+ output.writeChar(chars[i], i, tagPstf);
+ break;
+
+ case TibetanClassTable::CF_POS_BELOW :
+ output.writeChar(chars[i], i, tagBlwf);
+ break;
+
+ default:
+ // default - any other characters
+ output.writeChar(chars[i], i, tagDefault);
+ break;
+ } // switch
+ } // if
+ } // for
+
+ prev = syllable; // move the pointer to the start of next syllable
+ }
+
+ return output.getOutputIndex();
+}
+
+
+U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-50.1/layout/TibetanReordering.h b/Build/source/libs/icu/icu-50.1/layout/TibetanReordering.h
new file mode 100644
index 00000000000..cafcf5646c8
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/TibetanReordering.h
@@ -0,0 +1,151 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
+ *
+ * Developed at DIT - Government of Bhutan
+ *
+ * Contact person: Pema Geyleg - <pema_geyleg@druknet.bt>
+ *
+ * This file is a modification of the ICU file KhmerReordering.h
+ * by Jens Herden and Javier Sola who have given all their possible rights to IBM and the Governement of Bhutan
+ * A first module for Dzongkha was developed by Karunakar under Panlocalisation funding.
+ * Assistance for this module has been received from Namgay Thinley, Christopher Fynn and Javier Sola
+ *
+ */
+
+#ifndef __TIBETANREORDERING_H
+#define __TIBETANORDERING_H
+
+/**
+ * \file
+ * \internal
+ */
+
+// #include "LETypes.h"
+// #include "OpenTypeTables.h"
+
+U_NAMESPACE_BEGIN
+
+class LEGlyphStorage;
+
+// Vocabulary
+// Base -> A consonant in its full (not subscript) form. It is the
+// center of the syllable, it can be souranded by subjoined consonants, vowels,
+// signs... but there is only one base in a stack, it has to be coded as
+// the first character of the syllable.Included here are also groups of base + subjoined
+// which are represented by one single code point in unicode (e.g. 0F43) Also other characters that might take
+// subjoined consonants or other combining characters.
+// Subjoined -> Subjoined consonants and groups of subjoined consonants which have a single code-point
+// to repersent the group (even if each subjoined consonant is represented independently
+// by anothe code-point
+// Tsa Phru --> Tsa Phru character, Bhutanese people will always place it right after the base, but sometimes, due to
+// "normalization"
+// is placed after all the subjoined consonants, and it is also permitted there.
+// A Chung Vowel lengthening mark --> . 0F71 It is placed after the base and any subjoined consonants but before any vowels
+// Precomposed Sanskrit vowels --> The are combinations of subjoined consonants + vowels that have been assigned
+// a given code-point (in spite of each single part of them having also a code-point
+// They are avoided, and users are encouraged to use the combination of code-points that
+// represents the same sound instead of using this combined characters. This is included here
+// for compatibility with possible texts that use them (they are not in the Dzongkha keyboard).
+// Halanta -> The Halanta or Virama character 0F84 indicates that a consonant should not use its inheernt vowel,
+// in spite of not having other vowels present. It is usually placed immediatly after a base consonant,
+// but in some special cases it can also be placed after a subjoined consonant, so this is also
+// permitted in this algorithm. (Halanta is always displayed in Tibetan not used as a connecting char)
+//
+// Subjoined vowels -> Dependent vowels (matras) placed below the base and below all subjoined consonants. There
+// might be as much as three subjoined vowels in a given stack (only one in general text, but up
+// to three for abreviations, they have to be permitted).
+// Superscript vowels -> There are three superscript vowels, and they can be repeated or combined (up to three
+// times. They can combine with subjoined vowels, and are always coded after these.
+// Anusvara --> Nasalisation sign. Traditioinally placed in absence of vowels, but also after vowels. In some
+// special cases it can be placed before a vowel, so this is also permitted
+// Candrabindu -> Forms of the Anusvara with different glyphs (and different in identity) which can be placed
+// without vowel or after the vowel, but never before. Cannot combine with Anusvara.
+// Stress marks -> Marks placed above or below a syllable, affecting the whole syllable. They are combining
+// marks, so they have to be attached to a specific stack. The are using to emphasise a syllable.
+//
+// Digits -> Digits are not considered as non-combining characters because there are a few characters which
+// combine with them, so they have to be considered independently.
+// Digit combining marks -> dependent marks that combine with digits.
+//
+// TODO
+// There are a number of characters in the CJK block that are used in Tibetan script, two of these are symbols
+// are used as bases for combining glyphs, and have not been encoded in Tibetan. As these characters are outside
+// of the tibetan block, they have not been treated in this program.
+
+
+struct TibetanClassTable // This list must include all types of components that can be used inside a syllable
+{
+ enum CharClassValues // order is important here! This order must be the same that is found in each horizontal
+ // line in the statetable for Tibetan (file TibetanReordering.cpp). It assigns one number
+ // to each type of character that has to be considered when analysing the order in which
+ // characters can be placed
+ {
+ CC_RESERVED = 0, //Non Combining Characters
+ CC_BASE = 1, // Base Consonants, Base Consonants with Subjoined attached in code point, Sanskrit base marks
+ CC_SUBJOINED = 2, // Subjoined Consonats, combination of more than Subjoined Consonants in the code point
+ CC_TSA_PHRU = 3, // Tsa-Phru character 0F39
+ CC_A_CHUNG = 4, // Vowel Lenthening a-chung mark 0F71
+ CC_COMP_SANSKRIT = 5, // Precomposed Sanskrit vowels including Subjoined characters and vowels
+ CC_HALANTA = 6, // Halanta Character 0F84
+ CC_BELOW_VOWEL = 7, // Subjoined vowels
+ CC_ABOVE_VOWEL = 8, // Superscript vowels
+ CC_ANUSVARA = 9, // Tibetan sign Rjes Su Nga Ro 0F7E
+ CC_CANDRABINDU = 10, // Tibetan sign Sna Ldan and Nyi Zla Naa Da 0F82, 0F83
+ CC_VISARGA = 11, // Tibetan sign Rnam Bcad (0F7F)
+ CC_ABOVE_S_MARK = 12, // Stress Marks placed above the text
+ CC_BELOW_S_MARK = 13, // Stress Marks placed below the text
+ CC_DIGIT = 14, // Dzongkha Digits
+ CC_PRE_DIGIT_MARK = 15, // Mark placed before the digit
+ CC_POST_BELOW_DIGIT_M = 16, // Mark placed below or after the digit
+ CC_COUNT = 17 // This is the number of character classes
+ };
+
+ enum CharClassFlags
+ {
+ CF_CLASS_MASK = 0x0000FFFF,
+
+ CF_DOTTED_CIRCLE = 0x04000000, // add a dotted circle if a character with this flag is the first in a syllable
+ CF_DIGIT = 0x01000000, // flag to speed up comparaisson
+ CF_PREDIGIT = 0x02000000, // flag to detect pre-digit marks for reordering
+
+ // position flags
+ CF_POS_BEFORE = 0x00080000,
+ CF_POS_BELOW = 0x00040000,
+ CF_POS_ABOVE = 0x00020000,
+ CF_POS_AFTER = 0x00010000,
+ CF_POS_MASK = 0x000f0000
+ };
+
+ typedef le_uint32 CharClass;
+
+ typedef le_int32 ScriptFlags;
+
+ LEUnicode firstChar; // for Tibetan this will become xOF00
+ LEUnicode lastChar; // and this x0FFF
+ const CharClass *classTable;
+
+ CharClass getCharClass(LEUnicode ch) const;
+
+ static const TibetanClassTable *getTibetanClassTable();
+};
+
+
+class TibetanReordering /* not : public UObject because all methods are static */ {
+public:
+ static le_int32 reorder(const LEUnicode *theChars, le_int32 charCount, le_int32 scriptCode,
+ LEUnicode *outChars, LEGlyphStorage &glyphStorage);
+
+ static const FeatureMap *getFeatureMap(le_int32 &count);
+
+private:
+ // do not instantiate
+ TibetanReordering();
+
+ static le_int32 findSyllable(const TibetanClassTable *classTable, const LEUnicode *chars, le_int32 prev, le_int32 charCount);
+
+};
+
+
+U_NAMESPACE_END
+#endif
diff --git a/Build/source/libs/icu/icu-50.1/layout/TrimmedArrayProcessor.cpp b/Build/source/libs/icu/icu-50.1/layout/TrimmedArrayProcessor.cpp
new file mode 100644
index 00000000000..a68c056267f
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/TrimmedArrayProcessor.cpp
@@ -0,0 +1,55 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
+ *
+ */
+
+#include "LETypes.h"
+#include "MorphTables.h"
+#include "SubtableProcessor.h"
+#include "NonContextualGlyphSubst.h"
+#include "NonContextualGlyphSubstProc.h"
+#include "TrimmedArrayProcessor.h"
+#include "LEGlyphStorage.h"
+#include "LESwaps.h"
+
+U_NAMESPACE_BEGIN
+
+UOBJECT_DEFINE_RTTI_IMPLEMENTATION(TrimmedArrayProcessor)
+
+TrimmedArrayProcessor::TrimmedArrayProcessor()
+{
+}
+
+TrimmedArrayProcessor::TrimmedArrayProcessor(const MorphSubtableHeader *morphSubtableHeader)
+ : NonContextualGlyphSubstitutionProcessor(morphSubtableHeader)
+{
+ const NonContextualGlyphSubstitutionHeader *header = (const NonContextualGlyphSubstitutionHeader *) morphSubtableHeader;
+
+ trimmedArrayLookupTable = (const TrimmedArrayLookupTable *) &header->table;
+ firstGlyph = SWAPW(trimmedArrayLookupTable->firstGlyph);
+ lastGlyph = firstGlyph + SWAPW(trimmedArrayLookupTable->glyphCount);
+}
+
+TrimmedArrayProcessor::~TrimmedArrayProcessor()
+{
+}
+
+void TrimmedArrayProcessor::process(LEGlyphStorage &glyphStorage)
+{
+ le_int32 glyphCount = glyphStorage.getGlyphCount();
+ le_int32 glyph;
+
+ for (glyph = 0; glyph < glyphCount; glyph += 1) {
+ LEGlyphID thisGlyph = glyphStorage[glyph];
+ TTGlyphID ttGlyph = (TTGlyphID) LE_GET_GLYPH(thisGlyph);
+
+ if ((ttGlyph > firstGlyph) && (ttGlyph < lastGlyph)) {
+ TTGlyphID newGlyph = SWAPW(trimmedArrayLookupTable->valueArray[ttGlyph - firstGlyph]);
+
+ glyphStorage[glyph] = LE_SET_GLYPH(thisGlyph, newGlyph);
+ }
+ }
+}
+
+U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-50.1/layout/TrimmedArrayProcessor.h b/Build/source/libs/icu/icu-50.1/layout/TrimmedArrayProcessor.h
new file mode 100644
index 00000000000..9d86980c327
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/TrimmedArrayProcessor.h
@@ -0,0 +1,60 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
+ *
+ */
+
+#ifndef __TRIMMEDARRAYPROCESSOR_H
+#define __TRIMMEDARRAYPROCESSOR_H
+
+/**
+ * \file
+ * \internal
+ */
+
+#include "LETypes.h"
+#include "MorphTables.h"
+#include "SubtableProcessor.h"
+#include "NonContextualGlyphSubst.h"
+#include "NonContextualGlyphSubstProc.h"
+
+U_NAMESPACE_BEGIN
+
+class LEGlyphStorage;
+
+class TrimmedArrayProcessor : public NonContextualGlyphSubstitutionProcessor
+{
+public:
+ virtual void process(LEGlyphStorage &glyphStorage);
+
+ TrimmedArrayProcessor(const MorphSubtableHeader *morphSubtableHeader);
+
+ virtual ~TrimmedArrayProcessor();
+
+ /**
+ * ICU "poor man's RTTI", returns a UClassID for the actual class.
+ *
+ * @stable ICU 2.8
+ */
+ virtual UClassID getDynamicClassID() const;
+
+ /**
+ * ICU "poor man's RTTI", returns a UClassID for this class.
+ *
+ * @stable ICU 2.8
+ */
+ static UClassID getStaticClassID();
+
+private:
+ TrimmedArrayProcessor();
+
+protected:
+ TTGlyphID firstGlyph;
+ TTGlyphID lastGlyph;
+ const TrimmedArrayLookupTable *trimmedArrayLookupTable;
+
+};
+
+U_NAMESPACE_END
+#endif
+
diff --git a/Build/source/libs/icu/icu-50.1/layout/ValueRecords.cpp b/Build/source/libs/icu/icu-50.1/layout/ValueRecords.cpp
new file mode 100644
index 00000000000..bdf68468d0c
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/ValueRecords.cpp
@@ -0,0 +1,360 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
+ *
+ */
+
+#include "LETypes.h"
+#include "LEFontInstance.h"
+#include "OpenTypeTables.h"
+#include "ValueRecords.h"
+#include "DeviceTables.h"
+#include "GlyphIterator.h"
+#include "LESwaps.h"
+
+U_NAMESPACE_BEGIN
+
+#define Nibble(value, nibble) ((value >> (nibble * 4)) & 0xF)
+#define NibbleBits(value, nibble) (bitsInNibble[Nibble(value, nibble)])
+
+le_int16 ValueRecord::getFieldValue(ValueFormat valueFormat, ValueRecordField field) const
+{
+ le_int16 valueIndex = getFieldIndex(valueFormat, field);
+ le_int16 value = values[valueIndex];
+
+ return SWAPW(value);
+}
+
+le_int16 ValueRecord::getFieldValue(le_int16 index, ValueFormat valueFormat, ValueRecordField field) const
+{
+ le_int16 baseIndex = getFieldCount(valueFormat) * index;
+ le_int16 valueIndex = getFieldIndex(valueFormat, field);
+ le_int16 value = values[baseIndex + valueIndex];
+
+ return SWAPW(value);
+}
+
+void ValueRecord::adjustPosition(ValueFormat valueFormat, const char *base, GlyphIterator &glyphIterator,
+ const LEFontInstance *fontInstance) const
+{
+ float xPlacementAdjustment = 0;
+ float yPlacementAdjustment = 0;
+ float xAdvanceAdjustment = 0;
+ float yAdvanceAdjustment = 0;
+
+ if ((valueFormat & vfbXPlacement) != 0) {
+ le_int16 value = getFieldValue(valueFormat, vrfXPlacement);
+ LEPoint pixels;
+
+ fontInstance->transformFunits(value, 0, pixels);
+
+ xPlacementAdjustment += fontInstance->getLayoutDirVertical()
+ ? -fontInstance->yPixelsToUnits(pixels.fY)
+ : fontInstance->xPixelsToUnits(pixels.fX);
+ yPlacementAdjustment += fontInstance->getLayoutDirVertical()
+ ? fontInstance->xPixelsToUnits(pixels.fX)
+ : fontInstance->yPixelsToUnits(pixels.fY);
+ }
+
+ if ((valueFormat & vfbYPlacement) != 0) {
+ le_int16 value = getFieldValue(valueFormat, vrfYPlacement);
+ LEPoint pixels;
+
+ fontInstance->transformFunits(0, value, pixels);
+
+ xPlacementAdjustment += fontInstance->getLayoutDirVertical()
+ ? -fontInstance->yPixelsToUnits(pixels.fY)
+ : fontInstance->xPixelsToUnits(pixels.fX);
+ yPlacementAdjustment += fontInstance->getLayoutDirVertical()
+ ? fontInstance->xPixelsToUnits(pixels.fX)
+ : fontInstance->yPixelsToUnits(pixels.fY);
+ }
+
+ if ((valueFormat & vfbXAdvance) != 0) {
+ le_int16 value = getFieldValue(valueFormat, vrfXAdvance);
+ LEPoint pixels;
+
+ fontInstance->transformFunits(value, 0, pixels);
+
+ xAdvanceAdjustment += fontInstance->getLayoutDirVertical()
+ ? fontInstance->yPixelsToUnits(pixels.fY)
+ : fontInstance->xPixelsToUnits(pixels.fX);
+ yAdvanceAdjustment += fontInstance->getLayoutDirVertical()
+ ? -fontInstance->xPixelsToUnits(pixels.fX)
+ : fontInstance->yPixelsToUnits(pixels.fY);
+ }
+
+ if ((valueFormat & vfbYAdvance) != 0) {
+ le_int16 value = getFieldValue(valueFormat, vrfYAdvance);
+ LEPoint pixels;
+
+ fontInstance->transformFunits(0, value, pixels);
+
+ xAdvanceAdjustment += fontInstance->getLayoutDirVertical()
+ ? fontInstance->yPixelsToUnits(pixels.fY)
+ : fontInstance->xPixelsToUnits(pixels.fX);
+ yAdvanceAdjustment += fontInstance->getLayoutDirVertical()
+ ? -fontInstance->xPixelsToUnits(pixels.fX)
+ : fontInstance->yPixelsToUnits(pixels.fY);
+ }
+
+ // FIXME: The device adjustments should really be transformed, but
+ // the only way I know how to do that is to convert them to le_int16 units,
+ // transform them, and then convert them back to pixels. Sigh...
+ if ((valueFormat & vfbAnyDevice) != 0) {
+ le_int16 xppem = (le_int16) fontInstance->getXPixelsPerEm();
+ le_int16 yppem = (le_int16) fontInstance->getYPixelsPerEm();
+
+ if ((valueFormat & vfbXPlaDevice) != 0) {
+ Offset dtOffset = getFieldValue(valueFormat, vrfXPlaDevice);
+
+ if (dtOffset != 0) {
+ const DeviceTable *dt = (const DeviceTable *) (base + dtOffset);
+ le_int16 xAdj = dt->getAdjustment(xppem);
+
+ if (fontInstance->getLayoutDirVertical())
+ yPlacementAdjustment += fontInstance->xPixelsToUnits(xAdj);
+ else
+ xPlacementAdjustment += fontInstance->xPixelsToUnits(xAdj);
+ }
+ }
+
+ if ((valueFormat & vfbYPlaDevice) != 0) {
+ Offset dtOffset = getFieldValue(valueFormat, vrfYPlaDevice);
+
+ if (dtOffset != 0) {
+ const DeviceTable *dt = (const DeviceTable *) (base + dtOffset);
+ le_int16 yAdj = dt->getAdjustment(yppem);
+
+ if (fontInstance->getLayoutDirVertical())
+ xPlacementAdjustment -= fontInstance->yPixelsToUnits(yAdj);
+ else
+ yPlacementAdjustment += fontInstance->yPixelsToUnits(yAdj);
+ }
+ }
+
+ if ((valueFormat & vfbXAdvDevice) != 0) {
+ Offset dtOffset = getFieldValue(valueFormat, vrfXAdvDevice);
+
+ if (dtOffset != 0) {
+ const DeviceTable *dt = (const DeviceTable *) (base + dtOffset);
+ le_int16 xAdj = dt->getAdjustment(xppem);
+
+ if (fontInstance->getLayoutDirVertical())
+ yAdvanceAdjustment -= fontInstance->xPixelsToUnits(xAdj);
+ else
+ xAdvanceAdjustment += fontInstance->xPixelsToUnits(xAdj);
+ }
+ }
+
+ if ((valueFormat & vfbYAdvDevice) != 0) {
+ Offset dtOffset = getFieldValue(valueFormat, vrfYAdvDevice);
+
+ if (dtOffset != 0) {
+ const DeviceTable *dt = (const DeviceTable *) (base + dtOffset);
+ le_int16 yAdj = dt->getAdjustment(yppem);
+
+ if (fontInstance->getLayoutDirVertical())
+ xAdvanceAdjustment += fontInstance->yPixelsToUnits(yAdj);
+ else
+ yAdvanceAdjustment += fontInstance->yPixelsToUnits(yAdj);
+ }
+ }
+ }
+
+ glyphIterator.adjustCurrGlyphPositionAdjustment(
+ xPlacementAdjustment, yPlacementAdjustment, xAdvanceAdjustment, yAdvanceAdjustment);
+}
+
+void ValueRecord::adjustPosition(le_int16 index, ValueFormat valueFormat, const char *base, GlyphIterator &glyphIterator,
+ const LEFontInstance *fontInstance) const
+{
+ float xPlacementAdjustment = 0;
+ float yPlacementAdjustment = 0;
+ float xAdvanceAdjustment = 0;
+ float yAdvanceAdjustment = 0;
+
+ if ((valueFormat & vfbXPlacement) != 0) {
+ le_int16 value = getFieldValue(index, valueFormat, vrfXPlacement);
+ LEPoint pixels;
+
+ fontInstance->transformFunits(value, 0, pixels);
+
+ xPlacementAdjustment += fontInstance->getLayoutDirVertical()
+ ? -fontInstance->yPixelsToUnits(pixels.fY)
+ : fontInstance->xPixelsToUnits(pixels.fX);
+ yPlacementAdjustment += fontInstance->getLayoutDirVertical()
+ ? fontInstance->xPixelsToUnits(pixels.fX)
+ : fontInstance->yPixelsToUnits(pixels.fY);
+ }
+
+ if ((valueFormat & vfbYPlacement) != 0) {
+ le_int16 value = getFieldValue(index, valueFormat, vrfYPlacement);
+ LEPoint pixels;
+
+ fontInstance->transformFunits(0, value, pixels);
+
+ xPlacementAdjustment += fontInstance->getLayoutDirVertical()
+ ? -fontInstance->yPixelsToUnits(pixels.fY)
+ : fontInstance->xPixelsToUnits(pixels.fX);
+ yPlacementAdjustment += fontInstance->getLayoutDirVertical()
+ ? fontInstance->xPixelsToUnits(pixels.fX)
+ : fontInstance->yPixelsToUnits(pixels.fY);
+ }
+
+ if ((valueFormat & vfbXAdvance) != 0) {
+ le_int16 value = getFieldValue(index, valueFormat, vrfXAdvance);
+ LEPoint pixels;
+
+ fontInstance->transformFunits(value, 0, pixels);
+
+ xAdvanceAdjustment += fontInstance->getLayoutDirVertical()
+ ? fontInstance->yPixelsToUnits(pixels.fY)
+ : fontInstance->xPixelsToUnits(pixels.fX);
+ yAdvanceAdjustment += fontInstance->getLayoutDirVertical()
+ ? -fontInstance->xPixelsToUnits(pixels.fX)
+ : fontInstance->yPixelsToUnits(pixels.fY);
+ }
+
+ if ((valueFormat & vfbYAdvance) != 0) {
+ le_int16 value = getFieldValue(index, valueFormat, vrfYAdvance);
+ LEPoint pixels;
+
+ fontInstance->transformFunits(0, value, pixels);
+
+ xAdvanceAdjustment += fontInstance->getLayoutDirVertical()
+ ? fontInstance->yPixelsToUnits(pixels.fY)
+ : fontInstance->xPixelsToUnits(pixels.fX);
+ yAdvanceAdjustment += fontInstance->getLayoutDirVertical()
+ ? -fontInstance->xPixelsToUnits(pixels.fX)
+ : fontInstance->yPixelsToUnits(pixels.fY);
+ }
+
+ // FIXME: The device adjustments should really be transformed, but
+ // the only way I know how to do that is to convert them to le_int16 units,
+ // transform them, and then convert them back to pixels. Sigh...
+ if ((valueFormat & vfbAnyDevice) != 0) {
+ le_int16 xppem = (le_int16) fontInstance->getXPixelsPerEm();
+ le_int16 yppem = (le_int16) fontInstance->getYPixelsPerEm();
+
+ if ((valueFormat & vfbXPlaDevice) != 0) {
+ Offset dtOffset = getFieldValue(index, valueFormat, vrfXPlaDevice);
+
+ if (dtOffset != 0) {
+ const DeviceTable *dt = (const DeviceTable *) (base + dtOffset);
+ le_int16 xAdj = dt->getAdjustment(xppem);
+
+ if (fontInstance->getLayoutDirVertical())
+ yPlacementAdjustment += fontInstance->xPixelsToUnits(xAdj);
+ else
+ xPlacementAdjustment += fontInstance->xPixelsToUnits(xAdj);
+ }
+ }
+
+ if ((valueFormat & vfbYPlaDevice) != 0) {
+ Offset dtOffset = getFieldValue(index, valueFormat, vrfYPlaDevice);
+
+ if (dtOffset != 0) {
+ const DeviceTable *dt = (const DeviceTable *) (base + dtOffset);
+ le_int16 yAdj = dt->getAdjustment(yppem);
+
+ if (fontInstance->getLayoutDirVertical())
+ xPlacementAdjustment -= fontInstance->yPixelsToUnits(yAdj);
+ else
+ yPlacementAdjustment += fontInstance->yPixelsToUnits(yAdj);
+ }
+ }
+
+ if ((valueFormat & vfbXAdvDevice) != 0) {
+ Offset dtOffset = getFieldValue(index, valueFormat, vrfXAdvDevice);
+
+ if (dtOffset != 0) {
+ const DeviceTable *dt = (const DeviceTable *) (base + dtOffset);
+ le_int16 xAdj = dt->getAdjustment(xppem);
+
+ if (fontInstance->getLayoutDirVertical())
+ yAdvanceAdjustment -= fontInstance->xPixelsToUnits(xAdj);
+ else
+ xAdvanceAdjustment += fontInstance->xPixelsToUnits(xAdj);
+ }
+ }
+
+ if ((valueFormat & vfbYAdvDevice) != 0) {
+ Offset dtOffset = getFieldValue(index, valueFormat, vrfYAdvDevice);
+
+ if (dtOffset != 0) {
+ const DeviceTable *dt = (const DeviceTable *) (base + dtOffset);
+ le_int16 yAdj = dt->getAdjustment(yppem);
+
+ if (fontInstance->getLayoutDirVertical())
+ xAdvanceAdjustment += fontInstance->yPixelsToUnits(yAdj);
+ else
+ yAdvanceAdjustment += fontInstance->yPixelsToUnits(yAdj);
+ }
+ }
+ }
+
+ glyphIterator.adjustCurrGlyphPositionAdjustment(
+ xPlacementAdjustment, yPlacementAdjustment, xAdvanceAdjustment, yAdvanceAdjustment);
+}
+
+le_int16 ValueRecord::getSize(ValueFormat valueFormat)
+{
+ return getFieldCount(valueFormat) * sizeof(le_int16);
+}
+
+le_int16 ValueRecord::getFieldCount(ValueFormat valueFormat)
+{
+ static const le_int16 bitsInNibble[] =
+ {
+ 0 + 0 + 0 + 0,
+ 0 + 0 + 0 + 1,
+ 0 + 0 + 1 + 0,
+ 0 + 0 + 1 + 1,
+ 0 + 1 + 0 + 0,
+ 0 + 1 + 0 + 1,
+ 0 + 1 + 1 + 0,
+ 0 + 1 + 1 + 1,
+ 1 + 0 + 0 + 0,
+ 1 + 0 + 0 + 1,
+ 1 + 0 + 1 + 0,
+ 1 + 0 + 1 + 1,
+ 1 + 1 + 0 + 0,
+ 1 + 1 + 0 + 1,
+ 1 + 1 + 1 + 0,
+ 1 + 1 + 1 + 1
+ };
+
+ valueFormat &= ~vfbReserved;
+
+ return NibbleBits(valueFormat, 0) + NibbleBits(valueFormat, 1) +
+ NibbleBits(valueFormat, 2) + NibbleBits(valueFormat, 3);
+}
+
+le_int16 ValueRecord::getFieldIndex(ValueFormat valueFormat, ValueRecordField field)
+{
+ static const le_uint16 beforeMasks[] =
+ {
+ 0x0000,
+ 0x0001,
+ 0x0003,
+ 0x0007,
+ 0x000F,
+ 0x001F,
+ 0x003F,
+ 0x007F,
+ 0x00FF,
+ 0x01FF,
+ 0x03FF,
+ 0x07FF,
+ 0x0FFF,
+ 0x1FFF,
+ 0x3FFF,
+ 0x7FFF,
+ 0xFFFF
+ };
+
+ return getFieldCount(valueFormat & beforeMasks[field]);
+}
+
+U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-50.1/layout/ValueRecords.h b/Build/source/libs/icu/icu-50.1/layout/ValueRecords.h
new file mode 100644
index 00000000000..83db7b31972
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/ValueRecords.h
@@ -0,0 +1,72 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
+ *
+ */
+
+#ifndef __VALUERECORDS_H
+#define __VALUERECORDS_H
+
+/**
+ * \file
+ * \internal
+ */
+
+#include "LETypes.h"
+#include "LEFontInstance.h"
+#include "OpenTypeTables.h"
+#include "GlyphIterator.h"
+
+U_NAMESPACE_BEGIN
+
+typedef le_uint16 ValueFormat;
+typedef le_int16 ValueRecordField;
+
+struct ValueRecord
+{
+ le_int16 values[ANY_NUMBER];
+
+ le_int16 getFieldValue(ValueFormat valueFormat, ValueRecordField field) const;
+ le_int16 getFieldValue(le_int16 index, ValueFormat valueFormat, ValueRecordField field) const;
+ void adjustPosition(ValueFormat valueFormat, const char *base, GlyphIterator &glyphIterator,
+ const LEFontInstance *fontInstance) const;
+ void adjustPosition(le_int16 index, ValueFormat valueFormat, const char *base, GlyphIterator &glyphIterator,
+ const LEFontInstance *fontInstance) const;
+
+ static le_int16 getSize(ValueFormat valueFormat);
+
+private:
+ static le_int16 getFieldCount(ValueFormat valueFormat);
+ static le_int16 getFieldIndex(ValueFormat valueFormat, ValueRecordField field);
+};
+
+enum ValueRecordFields
+{
+ vrfXPlacement = 0,
+ vrfYPlacement = 1,
+ vrfXAdvance = 2,
+ vrfYAdvance = 3,
+ vrfXPlaDevice = 4,
+ vrfYPlaDevice = 5,
+ vrfXAdvDevice = 6,
+ vrfYAdvDevice = 7
+};
+
+enum ValueFormatBits
+{
+ vfbXPlacement = 0x0001,
+ vfbYPlacement = 0x0002,
+ vfbXAdvance = 0x0004,
+ vfbYAdvance = 0x0008,
+ vfbXPlaDevice = 0x0010,
+ vfbYPlaDevice = 0x0020,
+ vfbXAdvDevice = 0x0040,
+ vfbYAdvDevice = 0x0080,
+ vfbReserved = 0xFF00,
+ vfbAnyDevice = vfbXPlaDevice + vfbYPlaDevice + vfbXAdvDevice + vfbYAdvDevice
+};
+
+U_NAMESPACE_END
+#endif
+
+
diff --git a/Build/source/libs/icu/icu-50.1/layout/layout.rc b/Build/source/libs/icu/icu-50.1/layout/layout.rc
new file mode 100644
index 00000000000..b8c512d3cbd
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/layout.rc
@@ -0,0 +1,108 @@
+// 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) 2001-2010 International Business Machines
+// Corporation and others. All Rights Reserved.
+//
+#include "../common/msvcres.h"
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#include <winresrc.h>
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+//
+
+LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
+#pragma code_page(1252)
+
+#ifdef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE
+BEGIN
+ "../common/msvcres.h\0"
+END
+
+2 TEXTINCLUDE
+BEGIN
+ "#include <winresrc.h>\0"
+END
+
+3 TEXTINCLUDE
+BEGIN
+ "\r\n"
+ "\0"
+END
+
+#endif // APSTUDIO_INVOKED
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Version
+//
+#define STR(s) #s
+#define CommaVersionString(a, b, c, d) STR(a) ", " STR(b) ", " STR(c) ", " STR(d) "\0"
+
+VS_VERSION_INFO VERSIONINFO
+ FILEVERSION U_ICU_VERSION_MAJOR_NUM, U_ICU_VERSION_MINOR_NUM, U_ICU_VERSION_PATCHLEVEL_NUM, U_ICU_VERSION_BUILDLEVEL_NUM
+ PRODUCTVERSION U_ICU_VERSION_MAJOR_NUM, U_ICU_VERSION_MINOR_NUM, U_ICU_VERSION_PATCHLEVEL_NUM, U_ICU_VERSION_BUILDLEVEL_NUM
+ FILEFLAGSMASK 0x3fL
+#ifdef _DEBUG
+ FILEFLAGS 0x1L
+#else
+ FILEFLAGS 0x0L
+#endif
+ FILEOS VOS__WINDOWS32
+ FILETYPE VFT_DLL
+ FILESUBTYPE 0x0L
+BEGIN
+ BLOCK "StringFileInfo"
+ BEGIN
+ BLOCK "00000000"
+ BEGIN
+ VALUE "Comments", ICU_WEBSITE "\0"
+ VALUE "CompanyName", ICU_COMPANY "\0"
+ VALUE "FileDescription", ICU_PRODUCT_PREFIX " Layout DLL\0"
+ VALUE "FileVersion", CommaVersionString(U_ICU_VERSION_MAJOR_NUM, U_ICU_VERSION_MINOR_NUM, U_ICU_VERSION_PATCHLEVEL_NUM, U_ICU_VERSION_BUILDLEVEL_NUM)
+ VALUE "LegalCopyright", U_COPYRIGHT_STRING "\0"
+#ifdef _DEBUG
+ VALUE "OriginalFilename", "icule" U_ICU_VERSION_SHORT "d.dll\0"
+#else
+ VALUE "OriginalFilename", "icule" U_ICU_VERSION_SHORT ".dll\0"
+#endif
+ VALUE "PrivateBuild", "\0"
+ VALUE "ProductName", ICU_PRODUCT "\0"
+ VALUE "ProductVersion", CommaVersionString(U_ICU_VERSION_MAJOR_NUM, U_ICU_VERSION_MINOR_NUM, U_ICU_VERSION_PATCHLEVEL_NUM, U_ICU_VERSION_BUILDLEVEL_NUM)
+ VALUE "SpecialBuild", "\0"
+ END
+ END
+ BLOCK "VarFileInfo"
+ BEGIN
+ VALUE "Translation", 0x000, 0000
+ END
+END
+
+/////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+
+
+/////////////////////////////////////////////////////////////////////////////
+#endif // not APSTUDIO_INVOKED
+
diff --git a/Build/source/libs/icu/icu-50.1/layout/layout.vcxproj b/Build/source/libs/icu/icu-50.1/layout/layout.vcxproj
new file mode 100644
index 00000000000..f71b332ab07
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/layout.vcxproj
@@ -0,0 +1,552 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{C920062A-0647-4553-A3B2-37C58065664B}</ProjectGuid>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\..\..\lib\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\x86\Debug\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\..\..\lib\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\x86\Release\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\x64\Debug\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\x64\Debug\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\x64\Release\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\x64\Release\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Midl>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>Win32</TargetEnvironment>
+ <TypeLibraryName>.\..\..\lib\iculed.tlb</TypeLibraryName>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\include;..\common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CRT_SECURE_NO_DEPRECATE;U_LAYOUT_IMPLEMENTATION;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <BufferSecurityCheck>true</BufferSecurityCheck>
+ <DisableLanguageExtensions>true</DisableLanguageExtensions>
+ <TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>
+ <PrecompiledHeaderOutputFile>.\x86\Debug/layout.pch</PrecompiledHeaderOutputFile>
+ <AssemblerListingLocation>.\x86\Debug/</AssemblerListingLocation>
+ <ObjectFileName>.\x86\Debug/</ObjectFileName>
+ <ProgramDataBaseFileName>.\x86\Debug/</ProgramDataBaseFileName>
+ <BrowseInformation>true</BrowseInformation>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ <CompileAs>Default</CompileAs>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0409</Culture>
+ <AdditionalIncludeDirectories>..\common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ </ResourceCompile>
+ <Link>
+ <OutputFile>..\..\bin\icule50d.dll</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>.\..\..\lib\iculed.pdb</ProgramDatabaseFile>
+ <BaseAddress>0x4ac00000</BaseAddress>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <ImportLibrary>..\..\lib\iculed.lib</ImportLibrary>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Midl>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>Win32</TargetEnvironment>
+ <TypeLibraryName>.\..\..\lib\icule.tlb</TypeLibraryName>
+ </Midl>
+ <ClCompile>
+ <AdditionalIncludeDirectories>..\..\include;..\common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CRT_SECURE_NO_DEPRECATE;U_LAYOUT_IMPLEMENTATION;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <DisableLanguageExtensions>true</DisableLanguageExtensions>
+ <TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>
+ <PrecompiledHeaderOutputFile>.\x86\Release/layout.pch</PrecompiledHeaderOutputFile>
+ <AssemblerListingLocation>.\x86\Release/</AssemblerListingLocation>
+ <ObjectFileName>.\x86\Release/</ObjectFileName>
+ <ProgramDataBaseFileName>.\x86\Release/</ProgramDataBaseFileName>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <CompileAs>Default</CompileAs>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0409</Culture>
+ <AdditionalIncludeDirectories>..\common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ </ResourceCompile>
+ <Link>
+ <OutputFile>..\..\bin\icule50.dll</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <ProgramDatabaseFile>.\..\..\lib\icule.pdb</ProgramDatabaseFile>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <BaseAddress>0x4ac00000</BaseAddress>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <ImportLibrary>..\..\lib\icule.lib</ImportLibrary>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Midl>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>X64</TargetEnvironment>
+ <TypeLibraryName>.\..\..\lib64\iculed.tlb</TypeLibraryName>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\include;..\common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN64;WIN32;_DEBUG;_CRT_SECURE_NO_DEPRECATE;U_LAYOUT_IMPLEMENTATION;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <BufferSecurityCheck>true</BufferSecurityCheck>
+ <DisableLanguageExtensions>true</DisableLanguageExtensions>
+ <TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>
+ <PrecompiledHeaderOutputFile>.\x64\Debug/layout.pch</PrecompiledHeaderOutputFile>
+ <AssemblerListingLocation>.\x64\Debug/</AssemblerListingLocation>
+ <ObjectFileName>.\x64\Debug/</ObjectFileName>
+ <ProgramDataBaseFileName>.\x64\Debug/</ProgramDataBaseFileName>
+ <BrowseInformation>true</BrowseInformation>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <CompileAs>Default</CompileAs>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0409</Culture>
+ <AdditionalIncludeDirectories>..\common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ </ResourceCompile>
+ <Link>
+ <OutputFile>..\..\bin64\icule50d.dll</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>.\..\..\lib64\iculed.pdb</ProgramDatabaseFile>
+ <BaseAddress>0x4ac00000</BaseAddress>
+ <ImportLibrary>..\..\lib64\iculed.lib</ImportLibrary>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Midl>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>X64</TargetEnvironment>
+ <TypeLibraryName>.\..\..\lib64\icule.tlb</TypeLibraryName>
+ </Midl>
+ <ClCompile>
+ <AdditionalIncludeDirectories>..\..\include;..\common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN64;WIN32;NDEBUG;_CRT_SECURE_NO_DEPRECATE;U_LAYOUT_IMPLEMENTATION;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <DisableLanguageExtensions>true</DisableLanguageExtensions>
+ <TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>
+ <PrecompiledHeaderOutputFile>.\x64\Release/layout.pch</PrecompiledHeaderOutputFile>
+ <AssemblerListingLocation>.\x64\Release/</AssemblerListingLocation>
+ <ObjectFileName>.\x64\Release/</ObjectFileName>
+ <ProgramDataBaseFileName>.\x64\Release/</ProgramDataBaseFileName>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <CompileAs>Default</CompileAs>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0409</Culture>
+ <AdditionalIncludeDirectories>..\common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ </ResourceCompile>
+ <Link>
+ <OutputFile>..\..\bin64\icule50.dll</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <ProgramDatabaseFile>.\..\..\lib64\icule.pdb</ProgramDatabaseFile>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <BaseAddress>0x4ac00000</BaseAddress>
+ <ImportLibrary>..\..\lib64\icule.lib</ImportLibrary>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="AlternateSubstSubtables.cpp" />
+ <ClCompile Include="AnchorTables.cpp" />
+ <ClCompile Include="ArabicLayoutEngine.cpp" />
+ <ClCompile Include="ArabicShaping.cpp" />
+ <ClCompile Include="CanonData.cpp" />
+ <ClCompile Include="CanonShaping.cpp" />
+ <ClCompile Include="ClassDefinitionTables.cpp" />
+ <ClCompile Include="ContextualGlyphSubstProc.cpp" />
+ <ClCompile Include="ContextualSubstSubtables.cpp" />
+ <ClCompile Include="CoverageTables.cpp" />
+ <ClCompile Include="CursiveAttachmentSubtables.cpp" />
+ <ClCompile Include="DeviceTables.cpp" />
+ <ClCompile Include="ExtensionSubtables.cpp" />
+ <ClCompile Include="Features.cpp" />
+ <ClCompile Include="GDEFMarkFilter.cpp" />
+ <ClCompile Include="GlyphDefinitionTables.cpp" />
+ <ClCompile Include="GlyphIterator.cpp" />
+ <ClCompile Include="GlyphLookupTables.cpp" />
+ <ClCompile Include="GlyphPositionAdjustments.cpp" />
+ <ClCompile Include="GlyphPositioningTables.cpp" />
+ <ClCompile Include="GlyphPosnLookupProc.cpp" />
+ <ClCompile Include="GlyphSubstitutionTables.cpp" />
+ <ClCompile Include="GlyphSubstLookupProc.cpp" />
+ <ClCompile Include="GXLayoutEngine.cpp" />
+ <ClCompile Include="HangulLayoutEngine.cpp" />
+ <ClCompile Include="HanLayoutEngine.cpp" />
+ <ClCompile Include="IndicClassTables.cpp" />
+ <ClCompile Include="IndicLayoutEngine.cpp" />
+ <ClCompile Include="IndicRearrangementProcessor.cpp" />
+ <ClCompile Include="IndicReordering.cpp" />
+ <ClCompile Include="KernTable.cpp" />
+ <ClCompile Include="KhmerLayoutEngine.cpp" />
+ <ClCompile Include="KhmerReordering.cpp" />
+ <ClCompile Include="LayoutEngine.cpp" />
+ <ClCompile Include="LEFontInstance.cpp" />
+ <ClCompile Include="LEGlyphStorage.cpp" />
+ <ClCompile Include="LEInsertionList.cpp" />
+ <ClCompile Include="LigatureSubstProc.cpp" />
+ <ClCompile Include="LigatureSubstSubtables.cpp" />
+ <ClCompile Include="loengine.cpp" />
+ <ClCompile Include="LookupProcessor.cpp" />
+ <ClCompile Include="Lookups.cpp" />
+ <ClCompile Include="LookupTables.cpp" />
+ <ClCompile Include="MarkArrays.cpp" />
+ <ClCompile Include="MarkToBasePosnSubtables.cpp" />
+ <ClCompile Include="MarkToLigaturePosnSubtables.cpp" />
+ <ClCompile Include="MarkToMarkPosnSubtables.cpp" />
+ <ClCompile Include="MirroredCharData.cpp" />
+ <ClCompile Include="MorphTables.cpp" />
+ <ClCompile Include="MPreFixups.cpp" />
+ <ClCompile Include="MultipleSubstSubtables.cpp" />
+ <ClCompile Include="NonContextualGlyphSubstProc.cpp" />
+ <ClCompile Include="OpenTypeLayoutEngine.cpp" />
+ <ClCompile Include="OpenTypeUtilities.cpp" />
+ <ClCompile Include="PairPositioningSubtables.cpp" />
+ <ClCompile Include="ScriptAndLanguage.cpp" />
+ <ClCompile Include="ScriptAndLanguageTags.cpp" />
+ <ClCompile Include="SegmentArrayProcessor.cpp" />
+ <ClCompile Include="SegmentSingleProcessor.cpp" />
+ <ClCompile Include="ShapingTypeData.cpp" />
+ <ClCompile Include="SimpleArrayProcessor.cpp" />
+ <ClCompile Include="SinglePositioningSubtables.cpp" />
+ <ClCompile Include="SingleSubstitutionSubtables.cpp" />
+ <ClCompile Include="SingleTableProcessor.cpp" />
+ <ClCompile Include="StateTableProcessor.cpp" />
+ <ClCompile Include="SubstitutionLookups.cpp" />
+ <ClCompile Include="SubtableProcessor.cpp" />
+ <ClCompile Include="ThaiLayoutEngine.cpp" />
+ <ClCompile Include="ThaiShaping.cpp" />
+ <ClCompile Include="ThaiStateTables.cpp" />
+ <ClCompile Include="TibetanLayoutEngine.cpp" />
+ <ClCompile Include="TibetanReordering.cpp" />
+ <ClCompile Include="TrimmedArrayProcessor.cpp" />
+ <ClCompile Include="ValueRecords.cpp" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="AlternateSubstSubtables.h" />
+ <ClInclude Include="AnchorTables.h" />
+ <ClInclude Include="ArabicLayoutEngine.h" />
+ <ClInclude Include="ArabicShaping.h" />
+ <ClInclude Include="AttachmentPosnSubtables.h" />
+ <ClInclude Include="CanonShaping.h" />
+ <ClInclude Include="CharSubstitutionFilter.h" />
+ <ClInclude Include="ClassDefinitionTables.h" />
+ <ClInclude Include="ContextualGlyphInsertion.h" />
+ <ClInclude Include="ContextualGlyphSubstitution.h" />
+ <ClInclude Include="ContextualGlyphSubstProc.h" />
+ <ClInclude Include="ContextualSubstSubtables.h" />
+ <ClInclude Include="CoverageTables.h" />
+ <ClInclude Include="CursiveAttachmentSubtables.h" />
+ <ClInclude Include="DefaultCharMapper.h" />
+ <ClInclude Include="DeviceTables.h" />
+ <ClInclude Include="ExtensionSubtables.h" />
+ <ClInclude Include="GDEFMarkFilter.h" />
+ <ClInclude Include="GlyphDefinitionTables.h" />
+ <ClInclude Include="GlyphIterator.h" />
+ <ClInclude Include="GlyphLookupTables.h" />
+ <ClInclude Include="GlyphPositionAdjustments.h" />
+ <ClInclude Include="GlyphPositioningTables.h" />
+ <ClInclude Include="GlyphPosnLookupProc.h" />
+ <ClInclude Include="GlyphSubstitutionTables.h" />
+ <ClInclude Include="GlyphSubstLookupProc.h" />
+ <ClInclude Include="GXLayoutEngine.h" />
+ <ClInclude Include="HangulLayoutEngine.h" />
+ <ClInclude Include="HanLayoutEngine.h" />
+ <ClInclude Include="ICUFeatures.h" />
+ <ClInclude Include="IndicLayoutEngine.h" />
+ <ClInclude Include="IndicRearrangement.h" />
+ <ClInclude Include="IndicRearrangementProcessor.h" />
+ <ClInclude Include="IndicReordering.h" />
+ <ClInclude Include="KernTable.h" />
+ <ClInclude Include="KhmerLayoutEngine.h" />
+ <ClInclude Include="KhmerReordering.h" />
+ <CustomBuild Include="LayoutEngine.h">
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\layout
+</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\layout\%(Filename)%(Extension);%(Outputs)</Outputs>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\layout
+</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\layout\%(Filename)%(Extension);%(Outputs)</Outputs>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\layout
+</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\layout\%(Filename)%(Extension);%(Outputs)</Outputs>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\layout
+</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\layout\%(Filename)%(Extension);%(Outputs)</Outputs>
+ </CustomBuild>
+ <ClInclude Include="LayoutTables.h" />
+ <CustomBuild Include="LEFontInstance.h">
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\layout
+</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\layout\%(Filename)%(Extension);%(Outputs)</Outputs>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\layout
+</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\layout\%(Filename)%(Extension);%(Outputs)</Outputs>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\layout
+</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\layout\%(Filename)%(Extension);%(Outputs)</Outputs>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\layout
+</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\layout\%(Filename)%(Extension);%(Outputs)</Outputs>
+ </CustomBuild>
+ <CustomBuild Include="LEGlyphFilter.h">
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\layout
+</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\layout\%(Filename)%(Extension);%(Outputs)</Outputs>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\layout
+</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\layout\%(Filename)%(Extension);%(Outputs)</Outputs>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\layout
+</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\layout\%(Filename)%(Extension);%(Outputs)</Outputs>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\layout
+</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\layout\%(Filename)%(Extension);%(Outputs)</Outputs>
+ </CustomBuild>
+ <CustomBuild Include="LEGlyphStorage.h">
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\layout
+</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\layout\%(Filename)%(Extension);%(Outputs)</Outputs>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\layout
+</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\layout\%(Filename)%(Extension);%(Outputs)</Outputs>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\layout
+</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\layout\%(Filename)%(Extension);%(Outputs)</Outputs>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\layout
+</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\layout\%(Filename)%(Extension);%(Outputs)</Outputs>
+ </CustomBuild>
+ <CustomBuild Include="LEInsertionList.h">
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\layout
+</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\layout\%(Filename)%(Extension);%(Outputs)</Outputs>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\layout
+</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\layout\%(Filename)%(Extension);%(Outputs)</Outputs>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\layout
+</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\layout\%(Filename)%(Extension);%(Outputs)</Outputs>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\layout
+</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\layout\%(Filename)%(Extension);%(Outputs)</Outputs>
+ </CustomBuild>
+ <CustomBuild Include="LELanguages.h">
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\layout
+</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\layout\%(Filename)%(Extension);%(Outputs)</Outputs>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\layout
+</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\layout\%(Filename)%(Extension);%(Outputs)</Outputs>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\layout
+</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\layout\%(Filename)%(Extension);%(Outputs)</Outputs>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\layout
+</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\layout\%(Filename)%(Extension);%(Outputs)</Outputs>
+ </CustomBuild>
+ <CustomBuild Include="LEScripts.h">
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\layout
+</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\layout\%(Filename)%(Extension);%(Outputs)</Outputs>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\layout
+</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\layout\%(Filename)%(Extension);%(Outputs)</Outputs>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\layout
+</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\layout\%(Filename)%(Extension);%(Outputs)</Outputs>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\layout
+</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\layout\%(Filename)%(Extension);%(Outputs)</Outputs>
+ </CustomBuild>
+ <CustomBuild Include="LESwaps.h">
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\layout
+</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\layout\%(Filename)%(Extension);%(Outputs)</Outputs>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\layout
+</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\layout\%(Filename)%(Extension);%(Outputs)</Outputs>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\layout
+</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\layout\%(Filename)%(Extension);%(Outputs)</Outputs>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\layout
+</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\layout\%(Filename)%(Extension);%(Outputs)</Outputs>
+ </CustomBuild>
+ <CustomBuild Include="LETypes.h">
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\layout
+</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\layout\%(Filename)%(Extension);%(Outputs)</Outputs>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\layout
+</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\layout\%(Filename)%(Extension);%(Outputs)</Outputs>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\layout
+</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\layout\%(Filename)%(Extension);%(Outputs)</Outputs>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\layout
+</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\layout\%(Filename)%(Extension);%(Outputs)</Outputs>
+ </CustomBuild>
+ <ClInclude Include="LigatureSubstitution.h" />
+ <ClInclude Include="LigatureSubstProc.h" />
+ <ClInclude Include="LigatureSubstSubtables.h" />
+ <CustomBuild Include="loengine.h">
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\layout
+</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\layout\%(Filename)%(Extension);%(Outputs)</Outputs>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\layout
+</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\layout\%(Filename)%(Extension);%(Outputs)</Outputs>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\layout
+</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\layout\%(Filename)%(Extension);%(Outputs)</Outputs>
+ <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\layout
+</Command>
+ <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\layout\%(Filename)%(Extension);%(Outputs)</Outputs>
+ </CustomBuild>
+ <ClInclude Include="LookupProcessor.h" />
+ <ClInclude Include="Lookups.h" />
+ <ClInclude Include="LookupTables.h" />
+ <ClInclude Include="MarkArrays.h" />
+ <ClInclude Include="MarkToBasePosnSubtables.h" />
+ <ClInclude Include="MarkToLigaturePosnSubtables.h" />
+ <ClInclude Include="MarkToMarkPosnSubtables.h" />
+ <ClInclude Include="MorphStateTables.h" />
+ <ClInclude Include="MorphTables.h" />
+ <ClInclude Include="MPreFixups.h" />
+ <ClInclude Include="MultipleSubstSubtables.h" />
+ <ClInclude Include="NonContextualGlyphSubst.h" />
+ <ClInclude Include="NonContextualGlyphSubstProc.h" />
+ <ClInclude Include="OpenTypeLayoutEngine.h" />
+ <ClInclude Include="OpenTypeTables.h" />
+ <ClInclude Include="OpenTypeUtilities.h" />
+ <ClInclude Include="PairPositioningSubtables.h" />
+ <ClInclude Include="ScriptAndLanguage.h" />
+ <ClInclude Include="ScriptAndLanguageTags.h" />
+ <ClInclude Include="SegmentArrayProcessor.h" />
+ <ClInclude Include="SegmentSingleProcessor.h" />
+ <ClInclude Include="SimpleArrayProcessor.h" />
+ <ClInclude Include="SinglePositioningSubtables.h" />
+ <ClInclude Include="SingleSubstitutionSubtables.h" />
+ <ClInclude Include="SingleTableProcessor.h" />
+ <ClInclude Include="StateTableProcessor.h" />
+ <ClInclude Include="StateTables.h" />
+ <ClInclude Include="SubstitutionLookups.h" />
+ <ClInclude Include="SubtableProcessor.h" />
+ <ClInclude Include="ThaiLayoutEngine.h" />
+ <ClInclude Include="ThaiShaping.h" />
+ <ClInclude Include="TibetanLayoutEngine.h" />
+ <ClInclude Include="TibetanReordering.h" />
+ <ClInclude Include="TrimmedArrayProcessor.h" />
+ <ClInclude Include="ValueRecords.h" />
+ </ItemGroup>
+ <ItemGroup>
+ <ResourceCompile Include="layout.rc" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\common\common.vcxproj">
+ <Project>{73c0a65b-d1f2-4de1-b3a6-15dad2c23f3d}</Project>
+ <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project>
diff --git a/Build/source/libs/icu/icu-50.1/layout/layout.vcxproj.filters b/Build/source/libs/icu/icu-50.1/layout/layout.vcxproj.filters
new file mode 100644
index 00000000000..33a68fd665e
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/layout.vcxproj.filters
@@ -0,0 +1,508 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{612bee68-b22e-47ed-8cb2-2c5ca5ea6350}</UniqueIdentifier>
+ <Extensions>cpp;c;cxx;rc;def;r;odl;idl;hpj;bat</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{6ccc0372-c74a-4a85-b31a-da1c0c72b56d}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl</Extensions>
+ </Filter>
+ <Filter Include="Resource Files">
+ <UniqueIdentifier>{ea7162f2-e3c7-47a7-98aa-e19c06f9e195}</UniqueIdentifier>
+ <Extensions>ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="AlternateSubstSubtables.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="AnchorTables.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="ArabicLayoutEngine.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="ArabicShaping.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="CanonData.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="CanonShaping.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="ClassDefinitionTables.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="ContextualGlyphSubstProc.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="ContextualSubstSubtables.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="CoverageTables.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="CursiveAttachmentSubtables.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="DeviceTables.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="ExtensionSubtables.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="Features.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="GDEFMarkFilter.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="GlyphDefinitionTables.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="GlyphIterator.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="GlyphLookupTables.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="GlyphPositionAdjustments.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="GlyphPositioningTables.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="GlyphPosnLookupProc.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="GlyphSubstitutionTables.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="GlyphSubstLookupProc.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="GXLayoutEngine.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="HangulLayoutEngine.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="HanLayoutEngine.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="IndicClassTables.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="IndicLayoutEngine.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="IndicRearrangementProcessor.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="IndicReordering.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="KernTable.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="KhmerLayoutEngine.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="KhmerReordering.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="LayoutEngine.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="LEFontInstance.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="LEGlyphStorage.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="LEInsertionList.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="LigatureSubstProc.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="LigatureSubstSubtables.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="loengine.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="LookupProcessor.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="Lookups.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="LookupTables.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="MarkArrays.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="MarkToBasePosnSubtables.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="MarkToLigaturePosnSubtables.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="MarkToMarkPosnSubtables.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="MirroredCharData.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="MorphTables.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="MPreFixups.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="MultipleSubstSubtables.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="NonContextualGlyphSubstProc.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="OpenTypeLayoutEngine.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="OpenTypeUtilities.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="PairPositioningSubtables.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="ScriptAndLanguage.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="ScriptAndLanguageTags.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="SegmentArrayProcessor.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="SegmentSingleProcessor.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="ShapingTypeData.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="SimpleArrayProcessor.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="SinglePositioningSubtables.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="SingleSubstitutionSubtables.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="SingleTableProcessor.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="StateTableProcessor.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="SubstitutionLookups.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="SubtableProcessor.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="ThaiLayoutEngine.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="ThaiShaping.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="ThaiStateTables.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="TibetanLayoutEngine.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="TibetanReordering.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="TrimmedArrayProcessor.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="ValueRecords.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="AlternateSubstSubtables.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="AnchorTables.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="ArabicLayoutEngine.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="ArabicShaping.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="AttachmentPosnSubtables.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="CanonShaping.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="CharSubstitutionFilter.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="ClassDefinitionTables.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="ContextualGlyphInsertion.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="ContextualGlyphSubstitution.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="ContextualGlyphSubstProc.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="ContextualSubstSubtables.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="CoverageTables.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="CursiveAttachmentSubtables.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="DefaultCharMapper.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="DeviceTables.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="ExtensionSubtables.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="GDEFMarkFilter.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="GlyphDefinitionTables.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="GlyphIterator.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="GlyphLookupTables.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="GlyphPositionAdjustments.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="GlyphPositioningTables.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="GlyphPosnLookupProc.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="GlyphSubstitutionTables.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="GlyphSubstLookupProc.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="GXLayoutEngine.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="HangulLayoutEngine.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="HanLayoutEngine.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="ICUFeatures.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="IndicLayoutEngine.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="IndicRearrangement.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="IndicRearrangementProcessor.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="IndicReordering.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="KernTable.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="KhmerLayoutEngine.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="KhmerReordering.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="LayoutTables.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="LigatureSubstitution.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="LigatureSubstProc.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="LigatureSubstSubtables.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="LookupProcessor.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="Lookups.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="LookupTables.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="MarkArrays.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="MarkToBasePosnSubtables.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="MarkToLigaturePosnSubtables.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="MarkToMarkPosnSubtables.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="MorphStateTables.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="MorphTables.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="MPreFixups.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="MultipleSubstSubtables.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="NonContextualGlyphSubst.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="NonContextualGlyphSubstProc.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="OpenTypeLayoutEngine.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="OpenTypeTables.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="OpenTypeUtilities.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="PairPositioningSubtables.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="ScriptAndLanguage.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="ScriptAndLanguageTags.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="SegmentArrayProcessor.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="SegmentSingleProcessor.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="SimpleArrayProcessor.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="SinglePositioningSubtables.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="SingleSubstitutionSubtables.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="SingleTableProcessor.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="StateTableProcessor.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="StateTables.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="SubstitutionLookups.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="SubtableProcessor.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="ThaiLayoutEngine.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="ThaiShaping.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="TibetanLayoutEngine.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="TibetanReordering.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="TrimmedArrayProcessor.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="ValueRecords.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ </ItemGroup>
+ <ItemGroup>
+ <ResourceCompile Include="layout.rc">
+ <Filter>Resource Files</Filter>
+ </ResourceCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <CustomBuild Include="LayoutEngine.h">
+ <Filter>Header Files</Filter>
+ </CustomBuild>
+ <CustomBuild Include="LEFontInstance.h">
+ <Filter>Header Files</Filter>
+ </CustomBuild>
+ <CustomBuild Include="LEGlyphFilter.h">
+ <Filter>Header Files</Filter>
+ </CustomBuild>
+ <CustomBuild Include="LEGlyphStorage.h">
+ <Filter>Header Files</Filter>
+ </CustomBuild>
+ <CustomBuild Include="LEInsertionList.h">
+ <Filter>Header Files</Filter>
+ </CustomBuild>
+ <CustomBuild Include="LELanguages.h">
+ <Filter>Header Files</Filter>
+ </CustomBuild>
+ <CustomBuild Include="LEScripts.h">
+ <Filter>Header Files</Filter>
+ </CustomBuild>
+ <CustomBuild Include="LESwaps.h">
+ <Filter>Header Files</Filter>
+ </CustomBuild>
+ <CustomBuild Include="LETypes.h">
+ <Filter>Header Files</Filter>
+ </CustomBuild>
+ <CustomBuild Include="loengine.h">
+ <Filter>Header Files</Filter>
+ </CustomBuild>
+ </ItemGroup>
+</Project> \ No newline at end of file
diff --git a/Build/source/libs/icu/icu-50.1/layout/loengine.cpp b/Build/source/libs/icu/icu-50.1/layout/loengine.cpp
new file mode 100644
index 00000000000..3718b9f6f8a
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/loengine.cpp
@@ -0,0 +1,163 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2007 - All Rights Reserved
+ *
+ */
+
+#include "LETypes.h"
+#include "loengine.h"
+#include "LayoutEngine.h"
+
+/**
+ * \file
+ * \brief C API for complex text layout.
+ */
+
+U_NAMESPACE_USE
+
+U_CAPI le_engine * U_EXPORT2
+le_create(const le_font *font,
+ le_int32 scriptCode,
+ le_int32 languageCode,
+ le_int32 typo_flags,
+ LEErrorCode *success)
+{
+ LEFontInstance *fontInstance = (LEFontInstance *) font;
+
+ return (le_engine *) LayoutEngine::layoutEngineFactory(fontInstance, scriptCode, languageCode, typo_flags, *success);
+}
+
+U_CAPI void U_EXPORT2
+le_close(le_engine *engine)
+{
+ LayoutEngine *le = (LayoutEngine *) engine;
+
+ delete le;
+}
+
+U_CAPI le_int32 U_EXPORT2
+le_layoutChars(le_engine *engine,
+ const LEUnicode chars[],
+ le_int32 offset,
+ le_int32 count,
+ le_int32 max,
+ le_bool rightToLeft,
+ float x,
+ float y,
+ LEErrorCode *success)
+{
+ LayoutEngine *le = (LayoutEngine *) engine;
+
+ if (le == NULL) {
+ *success = LE_ILLEGAL_ARGUMENT_ERROR;
+ return -1;
+ }
+
+ return le->layoutChars(chars, offset, count, max, rightToLeft, x, y, *success);
+}
+
+U_CAPI le_int32 U_EXPORT2
+le_getGlyphCount(le_engine *engine,
+ LEErrorCode *success)
+{
+ LayoutEngine *le = (LayoutEngine *) engine;
+
+ if (le == NULL) {
+ *success = LE_ILLEGAL_ARGUMENT_ERROR;
+ return -1;
+ }
+
+ return le->getGlyphCount();
+}
+
+U_CAPI void U_EXPORT2
+le_getGlyphs(le_engine *engine,
+ LEGlyphID glyphs[],
+ LEErrorCode *success)
+{
+ LayoutEngine *le = (LayoutEngine *) engine;
+
+ if (le == NULL) {
+ *success = LE_ILLEGAL_ARGUMENT_ERROR;
+ return;
+ }
+
+ le->getGlyphs(glyphs, *success);
+}
+
+U_CAPI void U_EXPORT2
+le_getCharIndices(le_engine *engine,
+ le_int32 charIndices[],
+ LEErrorCode *success)
+{
+ LayoutEngine *le = (LayoutEngine *) engine;
+
+ if (le == NULL) {
+ *success = LE_ILLEGAL_ARGUMENT_ERROR;
+ return;
+ }
+
+ le->getCharIndices(charIndices, *success);
+}
+
+U_CAPI void U_EXPORT2
+le_getCharIndicesWithBase(le_engine *engine,
+ le_int32 charIndices[],
+ le_int32 indexBase,
+ LEErrorCode *success)
+{
+ LayoutEngine *le = (LayoutEngine *) engine;
+
+ if (le == NULL) {
+ *success = LE_ILLEGAL_ARGUMENT_ERROR;
+ return;
+ }
+
+ le->getCharIndices(charIndices, indexBase, *success);
+}
+
+U_CAPI void U_EXPORT2
+le_getGlyphPositions(le_engine *engine,
+ float positions[],
+ LEErrorCode *success)
+{
+ LayoutEngine *le = (LayoutEngine *) engine;
+
+ if (le == NULL) {
+ *success = LE_ILLEGAL_ARGUMENT_ERROR;
+ return;
+ }
+
+ le->getGlyphPositions(positions, *success);
+}
+
+U_CAPI void U_EXPORT2
+le_getGlyphPosition(le_engine *engine,
+ le_int32 glyphIndex,
+ float *x,
+ float *y,
+ LEErrorCode *success)
+{
+ LayoutEngine *le = (LayoutEngine *) engine;
+
+ if (le == NULL) {
+ *success = LE_ILLEGAL_ARGUMENT_ERROR;
+ return;
+ }
+
+ le->getGlyphPosition(glyphIndex, *x, *y, *success);
+}
+
+U_CAPI void U_EXPORT2
+le_reset(le_engine *engine,
+ LEErrorCode *success)
+{
+ LayoutEngine *le = (LayoutEngine *) engine;
+
+ if (le == NULL) {
+ *success = LE_ILLEGAL_ARGUMENT_ERROR;
+ return;
+ }
+
+ le->reset();
+}
diff --git a/Build/source/libs/icu/icu-50.1/layout/loengine.h b/Build/source/libs/icu/icu-50.1/layout/loengine.h
new file mode 100644
index 00000000000..7b882dd6909
--- /dev/null
+++ b/Build/source/libs/icu/icu-50.1/layout/loengine.h
@@ -0,0 +1,225 @@
+/*
+ *
+ * (C) Copyright IBM Corp. 1998-2011 - All Rights Reserved
+ *
+ */
+
+#ifndef __LOENGINE_H
+#define __LOENGINE_H
+
+#include "LETypes.h"
+
+#ifndef U_HIDE_INTERNAL_API
+/**
+ * \file
+ * \brief C API for complex text layout.
+ * \internal
+ *
+ * This is a technology preview. The API may
+ * change significantly.
+ *
+ */
+
+/**
+ * The opaque type for a LayoutEngine.
+ *
+ * @internal
+ */
+typedef void le_engine;
+
+/**
+ * The opaque type for a font instance.
+ *
+ * @internal
+ */
+typedef void le_font;
+
+/**
+ * This function returns an le_engine capable of laying out text
+ * in the given font, script and langauge. Note that the LayoutEngine
+ * returned may be a subclass of LayoutEngine.
+ *
+ * @param font - the font of the text
+ * @param scriptCode - the script of the text
+ * @param languageCode - the language of the text
+ * @param typo_flags - flags that control layout features like kerning and ligatures.
+ * @param success - output parameter set to an error code if the operation fails
+ *
+ * @return an le_engine which can layout text in the given font.
+ *
+ * @internal
+ */
+U_INTERNAL le_engine * U_EXPORT2
+le_create(const le_font *font,
+ le_int32 scriptCode,
+ le_int32 languageCode,
+ le_int32 typo_flags,
+ LEErrorCode *success);
+
+/**
+ * This function closes the given LayoutEngine. After
+ * it returns, the le_engine is no longer valid.
+ *
+ * @param engine - the LayoutEngine to close.
+ *
+ * @internal
+ */
+U_INTERNAL void U_EXPORT2
+le_close(le_engine *engine);
+
+/**
+ * This routine will compute the glyph, character index and position arrays.
+ *
+ * @param engine - the LayoutEngine
+ * @param chars - the input character context
+ * @param offset - the offset of the first character to process
+ * @param count - the number of characters to process
+ * @param max - the number of characters in the input context
+ * @param rightToLeft - TRUE if the characers are in a right to left directional run
+ * @param x - the initial X position
+ * @param y - the initial Y position
+ * @param success - output parameter set to an error code if the operation fails
+ *
+ * @return the number of glyphs in the glyph array
+ *
+ * Note: The glyph, character index and position array can be accessed
+ * using the getter routines below.
+ *
+ * Note: If you call this function more than once, you must call the reset()
+ * function first to free the glyph, character index and position arrays
+ * allocated by the previous call.
+ *
+ * @internal
+ */
+U_INTERNAL le_int32 U_EXPORT2
+le_layoutChars(le_engine *engine,
+ const LEUnicode chars[],
+ le_int32 offset,
+ le_int32 count,
+ le_int32 max,
+ le_bool rightToLeft,
+ float x,
+ float y,
+ LEErrorCode *success);
+
+/**
+ * This function returns the number of glyphs in the glyph array. Note
+ * that the number of glyphs will be greater than or equal to the number
+ * of characters used to create the LayoutEngine.
+ *
+ * @param engine - the LayoutEngine
+ * @param success - output parameter set to an error code if the operation fails.
+ *
+ * @return the number of glyphs in the glyph array
+ *
+ * @internal
+ */
+U_INTERNAL le_int32 U_EXPORT2
+le_getGlyphCount(le_engine *engine,
+ LEErrorCode *success);
+
+/**
+ * This function copies the glyph array into a caller supplied array.
+ * The caller must ensure that the array is large enough to hold all
+ * the glyphs.
+ *
+ * @param engine - the LayoutEngine
+ * @param glyphs - the destiniation glyph array
+ * @param success - set to an error code if the operation fails
+ *
+ * @internal
+ */
+U_INTERNAL void U_EXPORT2
+le_getGlyphs(le_engine *engine,
+ LEGlyphID glyphs[],
+ LEErrorCode *success);
+
+/**
+ * This function copies the character index array into a caller supplied array.
+ * The caller must ensure that the array is large enough to hold a
+ * character index for each glyph.
+ *
+ * @param engine - the LayoutEngine
+ * @param charIndices - the destiniation character index array
+ * @param success - set to an error code if the operation fails
+ *
+ * @internal
+ */
+U_INTERNAL void U_EXPORT2
+le_getCharIndices(le_engine *engine,
+ le_int32 charIndices[],
+ LEErrorCode *success);
+
+/**
+ * This function copies the character index array into a caller supplied array.
+ * The caller must ensure that the array is large enough to hold a
+ * character index for each glyph.
+ *
+ * @param engine - the LayoutEngine
+ * @param charIndices - the destiniation character index array
+ * @param indexBase - an offset that will be added to each index.
+ * @param success - set to an error code if the operation fails
+ *
+ * @internal
+ */
+U_INTERNAL void U_EXPORT2
+le_getCharIndicesWithBase(le_engine *engine,
+ le_int32 charIndices[],
+ le_int32 indexBase,
+ LEErrorCode *success);
+
+/**
+ * This function copies the position array into a caller supplied array.
+ * The caller must ensure that the array is large enough to hold an
+ * X and Y position for each glyph, plus an extra X and Y for the
+ * advance of the last glyph.
+ *
+ * @param engine - the LayoutEngine
+ * @param positions - the destiniation position array
+ * @param success - set to an error code if the operation fails
+ *
+ * @internal
+ */
+U_INTERNAL void U_EXPORT2
+le_getGlyphPositions(le_engine *engine,
+ float positions[],
+ LEErrorCode *success);
+
+/**
+ * This function returns the X and Y position of the glyph at
+ * the given index.
+ *
+ * Input parameters:
+ * @param engine - the LayoutEngine
+ * @param glyphIndex - the index of the glyph
+ *
+ * Output parameters:
+ * @param x - the glyph's X position
+ * @param y - the glyph's Y position
+ * @param success - set to an error code if the operation fails
+ *
+ * @internal
+ */
+U_INTERNAL void U_EXPORT2
+le_getGlyphPosition(le_engine *engine,
+ le_int32 glyphIndex,
+ float *x,
+ float *y,
+ LEErrorCode *success);
+
+/**
+ * This function frees the glyph, character index and position arrays
+ * so that the LayoutEngine can be reused to layout a different
+ * characer array. (This function is also called by le_close)
+ *
+ * @param engine - the LayoutEngine
+ * @param success - set to an error code if the operation fails
+ *
+ * @internal
+ */
+U_INTERNAL void U_EXPORT2
+le_reset(le_engine *engine,
+ LEErrorCode *success);
+#endif /* U_HIDE_INTERNAL_API */
+
+#endif