Merge pull request #1542 from ninjarobot/UriTemplateMatchException
authorMiguel de Icaza <miguel@gnome.org>
Mon, 16 Feb 2015 15:19:44 +0000 (10:19 -0500)
committerMiguel de Icaza <miguel@gnome.org>
Mon, 16 Feb 2015 15:19:44 +0000 (10:19 -0500)
Fix to UriTemplate.Match to properly handle query parameters without a v...

412 files changed:
.gitignore
.gitmodules
Makefile.am
configure.ac
eglib/src/goutput.c
external/binary-reference-assemblies [new submodule]
external/reference-assemblies [deleted submodule]
external/referencesource
man/mono.1
man/monop.1
mcs/Makefile
mcs/build/library.make
mcs/build/profiles/basic.make
mcs/build/profiles/build.make
mcs/build/profiles/net_4_5.make
mcs/build/rules.make
mcs/class/Makefile
mcs/class/Managed.Windows.Forms/System.Windows.Forms/DataGridViewTextBoxCell.cs
mcs/class/Managed.Windows.Forms/System.Windows.Forms/ToolStripItem.cs
mcs/class/Managed.Windows.Forms/Test/System.Windows.Forms/LogGenerator.cs
mcs/class/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/BuildItem.cs
mcs/class/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/BuildWhen.cs
mcs/class/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/DirectoryScanner.cs
mcs/class/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/Project.cs
mcs/class/Microsoft.Build.Engine/Test/Microsoft.Build.BuildEngine/BuildChooseTest.cs
mcs/class/Microsoft.Build.Tasks/Microsoft.Build.Tasks-net_3_5.csproj
mcs/class/Microsoft.Build.Tasks/Microsoft.Build.Tasks-net_4_5.csproj
mcs/class/Microsoft.Build.Tasks/Microsoft.Build.Tasks-xbuild_12.csproj
mcs/class/Microsoft.Build.Tasks/Microsoft.Build.Tasks.dll.sources
mcs/class/Microsoft.Build.Tasks/Microsoft.Build.Tasks/AssignLinkMetadata.cs [new file with mode: 0644]
mcs/class/Microsoft.Build.Tasks/Microsoft.Build.Tasks/Copy.cs
mcs/class/Microsoft.Build.Tasks/Test/Microsoft.Build.Tasks/CopyTest.cs
mcs/class/Microsoft.Build.Utilities/Microsoft.Build.Utilities/MSBuildErrorParser.cs
mcs/class/Mono.CSharp/Test/Evaluator/ExpressionsTest.cs
mcs/class/Mono.Cecil.Mdb/Makefile
mcs/class/Mono.Debugger.Soft/Mono.Debugger.Soft/StackFrame.cs
mcs/class/Mono.Reactive.Testing/Makefile
mcs/class/Mono.Security/Test/tools/sockethell/Makefile
mcs/class/Mono.Simd/Makefile
mcs/class/System.ComponentModel.Composition.4.5/Makefile
mcs/class/System.ComponentModel.DataAnnotations/Makefile
mcs/class/System.Configuration/System.Configuration/ConfigurationPropertyOptions.cs
mcs/class/System.Configuration/Test/standalone/Makefile
mcs/class/System.Core/Makefile
mcs/class/System.Core/System.Core_test.dll.sources
mcs/class/System.Core/Test/System.Security.Cryptography/AesManagedTest.cs
mcs/class/System.Core/Test/System/TimeZoneInfo.AdjustmentRuleTest.cs [deleted file]
mcs/class/System.Core/Test/System/TimeZoneInfo.SerializationTest.cs [deleted file]
mcs/class/System.Core/Test/System/TimeZoneInfo.TransitionTimeTest.cs [deleted file]
mcs/class/System.Core/Test/System/TimeZoneInfoTest.cs [deleted file]
mcs/class/System.Data.Linq/Makefile
mcs/class/System.Data/System.Data.Common/DbDataAdapter.cs
mcs/class/System.Data/System.Data.SqlClient/SqlDataAdapter.cs
mcs/class/System.Data/System.Data.SqlClient/SqlParameterCollection.cs
mcs/class/System.Data/Test/ProviderTests/Makefile
mcs/class/System.DirectoryServices/System.DirectoryServices/DirectoryEntry.cs
mcs/class/System.Drawing/Test/DrawingTest/Test/Makefile
mcs/class/System.EnterpriseServices/Makefile
mcs/class/System.IdentityModel.Selectors/Makefile
mcs/class/System.IdentityModel/Makefile
mcs/class/System.Interactive.Async/Makefile
mcs/class/System.Interactive.Providers/Makefile
mcs/class/System.Interactive/Makefile
mcs/class/System.Net.Http/System.Net.Http.Headers/Lexer.cs
mcs/class/System.Net.Http/Test/System.Net.Http.Headers/ViaHeaderValueTest.cs
mcs/class/System.Reactive.Core/Makefile
mcs/class/System.Reactive.Debugger/Makefile
mcs/class/System.Reactive.Experimental/Makefile
mcs/class/System.Reactive.Interfaces/Makefile
mcs/class/System.Reactive.Linq/Makefile
mcs/class/System.Reactive.Observable.Aliases/Makefile
mcs/class/System.Reactive.PlatformServices/Makefile
mcs/class/System.Reactive.Providers/Makefile
mcs/class/System.Reactive.Runtime.Remoting/Makefile
mcs/class/System.Reactive.Windows.Forms/Makefile
mcs/class/System.Reactive.Windows.Threading/Makefile
mcs/class/System.Security/Makefile
mcs/class/System.Security/Test/standalone_tests/Makefile
mcs/class/System.ServiceModel/System.ServiceModel.Channels/ReplyChannelBase.cs
mcs/class/System.ServiceModel/System.ServiceModel.Dispatcher/BaseRequestProcessor.cs
mcs/class/System.ServiceModel/System.ServiceModel.Dispatcher/ChannelDispatcher.cs
mcs/class/System.Web.Abstractions/Makefile
mcs/class/System.Web.ApplicationServices/ReferenceSources/ApplicationServicesStrings.cs [deleted file]
mcs/class/System.Web.ApplicationServices/System.Web.Configuration/MembershipPasswordCompatibilityMode.cs [new file with mode: 0644]
mcs/class/System.Web.ApplicationServices/System.Web.Security/MembershipCreateStatus.cs [new file with mode: 0644]
mcs/class/System.Web.ApplicationServices/System.Web.Security/MembershipCreateUserException.cs [new file with mode: 0644]
mcs/class/System.Web.ApplicationServices/System.Web.Security/MembershipPasswordException.cs [new file with mode: 0644]
mcs/class/System.Web.ApplicationServices/System.Web.Security/MembershipPasswordFormat.cs [new file with mode: 0644]
mcs/class/System.Web.ApplicationServices/System.Web.Security/MembershipProvider.cs [new file with mode: 0644]
mcs/class/System.Web.ApplicationServices/System.Web.Security/MembershipProviderCollection.cs [new file with mode: 0644]
mcs/class/System.Web.ApplicationServices/System.Web.Security/MembershipUser.cs [new file with mode: 0644]
mcs/class/System.Web.ApplicationServices/System.Web.Security/MembershipUserCollection.cs [new file with mode: 0644]
mcs/class/System.Web.ApplicationServices/System.Web.Security/MembershipValidatePasswordEventHandler.cs [new file with mode: 0644]
mcs/class/System.Web.ApplicationServices/System.Web.Security/RoleProvider.cs [new file with mode: 0644]
mcs/class/System.Web.ApplicationServices/System.Web.Security/ValidatePasswordEventArgs.cs [new file with mode: 0644]
mcs/class/System.Web.ApplicationServices/System.Web.UI/KeyedList.cs [new file with mode: 0644]
mcs/class/System.Web.ApplicationServices/System.Web.UI/KeyedListEnumerator.cs [new file with mode: 0644]
mcs/class/System.Web.ApplicationServices/net_4_0_System.Web.ApplicationServices.dll.sources
mcs/class/System.Web.DynamicData/Makefile
mcs/class/System.Web.Extensions.Design_1.0/ChangeLog [deleted file]
mcs/class/System.Web.Extensions.Design_1.0/Makefile [deleted file]
mcs/class/System.Web.Extensions.Design_1.0/System.Web.Extensions.Design_1.0.dll.sources [deleted file]
mcs/class/System.Web.Extensions_1.0/ChangeLog [deleted file]
mcs/class/System.Web.Extensions_1.0/Makefile [deleted file]
mcs/class/System.Web.Extensions_1.0/System.Web.Extensions_1.0.dll.sources [deleted file]
mcs/class/System.Web.Routing/Makefile
mcs/class/System.Web.Services/System.Web.Services.Description/SoapProtocolImporter.cs
mcs/class/System.Web.Services/Test/standalone/Makefile
mcs/class/System.Web/System.Web.Security/MembershipCreateStatus.cs [deleted file]
mcs/class/System.Web/System.Web.Security/MembershipCreateUserException.cs [deleted file]
mcs/class/System.Web/System.Web.Security/MembershipPasswordException.cs [deleted file]
mcs/class/System.Web/System.Web.Security/MembershipPasswordFormat.cs [deleted file]
mcs/class/System.Web/System.Web.Security/MembershipProvider.cs [deleted file]
mcs/class/System.Web/System.Web.Security/MembershipProviderCollection.cs [deleted file]
mcs/class/System.Web/System.Web.Security/MembershipUser.cs [deleted file]
mcs/class/System.Web/System.Web.Security/MembershipUserCollection.cs [deleted file]
mcs/class/System.Web/System.Web.Security/MembershipValidatePasswordEventHandler.cs [deleted file]
mcs/class/System.Web/System.Web.Security/RoleProvider.cs [deleted file]
mcs/class/System.Web/System.Web.Security/ValidatePasswordEventArgs.cs [deleted file]
mcs/class/System.Web/System.Web.UI/KeyedList.cs [deleted file]
mcs/class/System.Web/System.Web.UI/KeyedListEnumerator.cs [deleted file]
mcs/class/System.Web/Test/mainsoft/MainsoftWebApp/Makefile
mcs/class/System.Web/Test/mainsoft/NunitWeb/Makefile
mcs/class/System.XML/Makefile
mcs/class/System.XML/System.Xml.Schema/XmlSchemaType.cs
mcs/class/System.XML/System.Xml.Serialization/XmlSerializer.cs
mcs/class/System.XML/System.Xml/XmlUrlResolver.cs
mcs/class/System.XML/Test/System.Xml.Serialization/SoapSchemaExporterTests.cs
mcs/class/System.XML/Test/System.Xml/W3C/Makefile
mcs/class/System.XML/Test/System.Xml/XmlConvertTests.cs
mcs/class/System.Xaml/System.Xaml/XamlWriterInternalBase.cs
mcs/class/System/Makefile
mcs/class/System/System.Diagnostics/Debug.cs
mcs/class/System/System.Net.NetworkInformation/Ping.cs
mcs/class/System/System.Net/HttpWebRequest.cs
mcs/class/System/Test/System.ComponentModel/DateTimeConverterTests.cs
mcs/class/System/Test/System.ComponentModel/TypeDescriptorTests.cs
mcs/class/System/Test/System.Net.NetworkInformation/IPInterfacePropertiesTest.cs
mcs/class/System/Test/System.Net.NetworkInformation/NetworkInterfaceTest.cs
mcs/class/System/Test/System.Net.NetworkInformation/PingTest.cs
mcs/class/aot-compiler/Makefile
mcs/class/corlib/Makefile
mcs/class/corlib/ReferenceSources/CalendarData.cs
mcs/class/corlib/ReferenceSources/CompatibilitySwitches.cs [new file with mode: 0644]
mcs/class/corlib/ReferenceSources/CultureData.cs [new file with mode: 0644]
mcs/class/corlib/ReferenceSources/Empty.cs [deleted file]
mcs/class/corlib/ReferenceSources/EncodingDataItem.cs [new file with mode: 0644]
mcs/class/corlib/ReferenceSources/EncodingTable.cs [new file with mode: 0644]
mcs/class/corlib/ReferenceSources/Environment.cs
mcs/class/corlib/ReferenceSources/ParseNumbers.cs
mcs/class/corlib/ReferenceSources/TimeZoneInfoOptions.cs [new file with mode: 0644]
mcs/class/corlib/ReferenceSources/mscorlib.txt.cs [new file with mode: 0644]
mcs/class/corlib/System.Globalization/CharUnicodeInfo.cs [deleted file]
mcs/class/corlib/System.Globalization/CultureInfo.cs
mcs/class/corlib/System.Globalization/DateTimeFormatInfo.cs
mcs/class/corlib/System.Globalization/DaylightTime.cs [deleted file]
mcs/class/corlib/System.Globalization/TextInfo.cs
mcs/class/corlib/System.Globalization/TimeSpanStyles.cs [deleted file]
mcs/class/corlib/System.IO/BinaryReader.cs
mcs/class/corlib/System.IO/BinaryWriter.cs
mcs/class/corlib/System.IO/File.cs
mcs/class/corlib/System.IO/StreamReader.cs
mcs/class/corlib/System.IO/StreamWriter.cs
mcs/class/corlib/System.Reflection.Emit/ModuleBuilder.cs
mcs/class/corlib/System.Reflection/Assembly.cs
mcs/class/corlib/System.Reflection/Module.cs
mcs/class/corlib/System.Reflection/MonoAssembly.cs
mcs/class/corlib/System.Reflection/MonoModule.cs
mcs/class/corlib/System.Security.Claims/ClaimsPrincipal.cs
mcs/class/corlib/System.Security.Cryptography/HMACRIPEMD160.cs
mcs/class/corlib/System.Security.Cryptography/HMACSHA1.cs
mcs/class/corlib/System.Security.Cryptography/HMACSHA256.cs
mcs/class/corlib/System.Security.Cryptography/HMACSHA384.cs
mcs/class/corlib/System.Security.Cryptography/HMACSHA512.cs
mcs/class/corlib/System.Text/EncodingHelper.cs [new file with mode: 0644]
mcs/class/corlib/System.Text/Latin1Encoding.cs
mcs/class/corlib/System.Text/StringBuilder.cs
mcs/class/corlib/System.Threading/HostExecutionContext.cs
mcs/class/corlib/System.Threading/Timer.cs
mcs/class/corlib/System.Threading/Watch.cs [deleted file]
mcs/class/corlib/System/BitConverter.cs [deleted file]
mcs/class/corlib/System/Boolean.cs [deleted file]
mcs/class/corlib/System/Console.cs
mcs/class/corlib/System/DBNull.cs [deleted file]
mcs/class/corlib/System/DateTime.cs [deleted file]
mcs/class/corlib/System/DateTimeKind.cs [deleted file]
mcs/class/corlib/System/DateTimeOffset.cs [deleted file]
mcs/class/corlib/System/DateTimeUtils.cs [deleted file]
mcs/class/corlib/System/DayOfWeek.cs [deleted file]
mcs/class/corlib/System/Decimal.cs [deleted file]
mcs/class/corlib/System/Environment.cs
mcs/class/corlib/System/Guid.MonoTouch.cs [new file with mode: 0644]
mcs/class/corlib/System/Guid.cs
mcs/class/corlib/System/MemberAccessException.cs [deleted file]
mcs/class/corlib/System/MethodAccessException.cs [deleted file]
mcs/class/corlib/System/MidpointRounding.cs [deleted file]
mcs/class/corlib/System/MissingFieldException.cs [deleted file]
mcs/class/corlib/System/MissingMemberException.cs [deleted file]
mcs/class/corlib/System/MissingMethodException.cs [deleted file]
mcs/class/corlib/System/MonoType.cs
mcs/class/corlib/System/Random.cs [deleted file]
mcs/class/corlib/System/String.cs
mcs/class/corlib/System/TimeSpan.cs [deleted file]
mcs/class/corlib/System/TimeZone.cs
mcs/class/corlib/System/TimeZoneInfo.Android.cs
mcs/class/corlib/System/TimeZoneInfo.cs
mcs/class/corlib/System/Type.cs
mcs/class/corlib/System/UnitySerializationHolder.cs [deleted file]
mcs/class/corlib/Test/System.Globalization/IdnMappingTest.cs
mcs/class/corlib/Test/System.IO.IsolatedStorage/IsolatedStorageFileStreamTest.cs
mcs/class/corlib/Test/System.IO/FileStreamSafeHandleTest.cs
mcs/class/corlib/Test/System.Reflection.Emit/ModuleBuilderTest.cs
mcs/class/corlib/Test/System.Runtime.CompilerServices/AsyncTaskMethodBuilderTest.cs
mcs/class/corlib/Test/System.Security.Cryptography/HMACRIPEMD160Test.cs
mcs/class/corlib/Test/System.Security.Cryptography/HMACSHA1Test.cs
mcs/class/corlib/Test/System.Security.Cryptography/HMACSHA256Test.cs
mcs/class/corlib/Test/System.Security.Cryptography/HMACSHA384Test.cs
mcs/class/corlib/Test/System.Security.Cryptography/HMACSHA512Test.cs
mcs/class/corlib/Test/System.Text/ASCIIEncodingTest.cs
mcs/class/corlib/Test/System.Text/EncodingInfoTest.cs
mcs/class/corlib/Test/System.Text/UTF32EncodingTest.cs
mcs/class/corlib/Test/System.Text/UTF7EncodingTest.cs
mcs/class/corlib/Test/System.Text/UTF8EncodingTest.cs
mcs/class/corlib/Test/System/CharCategoryTest.cs
mcs/class/corlib/Test/System/CharTest.cs
mcs/class/corlib/Test/System/DateTimeOffsetTest.cs
mcs/class/corlib/Test/System/DateTimeTest.cs
mcs/class/corlib/Test/System/DecimalTest-Microsoft.cs [new file with mode: 0644]
mcs/class/corlib/Test/System/DecimalTest.cs
mcs/class/corlib/Test/System/LazyTest.cs
mcs/class/corlib/Test/System/StringTest.cs
mcs/class/corlib/Test/System/TimeSpanTest.cs
mcs/class/corlib/Test/System/TimeZoneInfo.AdjustmentRuleTest.cs [new file with mode: 0644]
mcs/class/corlib/Test/System/TimeZoneInfo.SerializationTest.cs [new file with mode: 0644]
mcs/class/corlib/Test/System/TimeZoneInfo.TransitionTimeTest.cs [new file with mode: 0644]
mcs/class/corlib/Test/System/TimeZoneInfoTest.cs [new file with mode: 0644]
mcs/class/corlib/corlib.dll.sources
mcs/class/corlib/corlib_test.dll.sources
mcs/class/corlib/resources/charinfo.nlp [new file with mode: 0644]
mcs/class/corlib/xammac_corlib.dll.sources [new file with mode: 0644]
mcs/class/reference-assemblies/Makefile
mcs/errors/CS1684-lib.il [deleted file]
mcs/errors/CS7069-lib.il [new file with mode: 0644]
mcs/errors/Makefile
mcs/errors/cs0419-4.cs
mcs/errors/cs1593-6.cs [new file with mode: 0644]
mcs/errors/cs1684.cs [deleted file]
mcs/errors/cs7069.cs [new file with mode: 0644]
mcs/ilasm/codegen/DeclSecurity.cs
mcs/ilasm/parser/ILParser.jay
mcs/ilasm/scanner/ILTables.cs
mcs/mcs/class.cs
mcs/mcs/cs-tokenizer.cs
mcs/mcs/delegate.cs
mcs/mcs/eval.cs
mcs/mcs/field.cs
mcs/mcs/import.cs
mcs/mcs/method.cs
mcs/mcs/namespace.cs
mcs/mcs/property.cs
mcs/mcs/statement.cs
mcs/tests/gtest-629.cs [new file with mode: 0644]
mcs/tests/gtest-optional-35.cs [new file with mode: 0644]
mcs/tests/test-349.cs
mcs/tests/test-911-lib.il [new file with mode: 0644]
mcs/tests/test-911.cs [new file with mode: 0644]
mcs/tests/test-912-lib.il [new file with mode: 0644]
mcs/tests/test-912.cs [new file with mode: 0644]
mcs/tests/test-913.cs [new file with mode: 0644]
mcs/tests/test-anon-173.cs [new file with mode: 0644]
mcs/tests/test-pragma-unrecognized.cs [new file with mode: 0644]
mcs/tests/ver-il-net_4_5.xml
mcs/tools/Makefile
mcs/tools/al/Al.cs
mcs/tools/linker/Mono.Linker.Steps/MarkStep.cs
mcs/tools/monop/Makefile
mcs/tools/monop/TypeSorter.cs
mcs/tools/monop/monop.cs
mcs/tools/monop/monop.exe.sources
mcs/tools/monop/options.cs
mcs/tools/monop/outline.cs
mcs/tools/tuner/Mono.Tuner/ApplyPreserveAttributeBase.cs
mcs/tools/tuner/Mono.Tuner/CustomizeActions.cs
mcs/tools/xbuild/data/12.0/Microsoft.Common.targets
mcs/tools/xbuild/data/12.0/Microsoft.Common.tasks
mcs/tools/xbuild/data/3.5/Microsoft.Common.targets
mcs/tools/xbuild/data/3.5/Microsoft.Common.tasks
mcs/tools/xbuild/data/4.0/Microsoft.Common.targets
mcs/tools/xbuild/data/4.0/Microsoft.Common.tasks
mono/arch/amd64/amd64-codegen.h
mono/dis/Makefile.am
mono/io-layer/Makefile.am
mono/io-layer/processes.c
mono/metadata/Makefile.am
mono/metadata/appdomain.c
mono/metadata/boehm-gc.c
mono/metadata/char-conversions.h
mono/metadata/class.c
mono/metadata/cominterop.c
mono/metadata/console-null.c
mono/metadata/console-unix.c
mono/metadata/console-win32.c
mono/metadata/culture-info-tables.h
mono/metadata/culture-info.h
mono/metadata/decimal-ms.c [new file with mode: 0644]
mono/metadata/decimal-ms.h [new file with mode: 0644]
mono/metadata/decimal.c [deleted file]
mono/metadata/decimal.h [deleted file]
mono/metadata/environment.c
mono/metadata/exception.h
mono/metadata/file-io.c
mono/metadata/filewatcher.c
mono/metadata/gc-internal.h
mono/metadata/gc.c
mono/metadata/icall-def.h
mono/metadata/icall.c
mono/metadata/image.c
mono/metadata/loader.c
mono/metadata/locales.c
mono/metadata/locales.h
mono/metadata/marshal.c
mono/metadata/metadata-internals.h
mono/metadata/mono-security.c
mono/metadata/null-gc.c
mono/metadata/object-internals.h
mono/metadata/object.c
mono/metadata/process.c
mono/metadata/reflection.c
mono/metadata/remoting.c
mono/metadata/sgen-alloc.c
mono/metadata/sgen-toggleref.h
mono/metadata/socket-io.c
mono/metadata/string-icalls.c
mono/metadata/sysmath.c
mono/metadata/threadpool-internals.h
mono/metadata/threads.c
mono/metadata/verify.c
mono/mini/Makefile.am.in
mono/mini/aot-compiler.c
mono/mini/aot-tests.cs
mono/mini/basic-float.cs
mono/mini/cpu-amd64.md
mono/mini/cpu-arm.md
mono/mini/cpu-arm64.md
mono/mini/cpu-mips.md
mono/mini/cpu-s390x.md
mono/mini/cpu-x86.md
mono/mini/debugger-agent.c
mono/mini/driver.c
mono/mini/iltests.il.in
mono/mini/ir-emit.h
mono/mini/jit-icalls.c
mono/mini/jit-icalls.h
mono/mini/liveness.c
mono/mini/method-to-ir.c
mono/mini/mini-amd64.c
mono/mini/mini-arm.c
mono/mini/mini-codegen.c
mono/mini/mini-llvm.c
mono/mini/mini-mips.c
mono/mini/mini-ops.h
mono/mini/mini-ppc.c
mono/mini/mini-s390x.c
mono/mini/mini-x86.c
mono/mini/mini.c
mono/mini/mini.h
mono/mini/optflags-def.h
mono/mini/simd-intrinsics.c
mono/mini/tramp-x86.c
mono/profiler/proflog.c
mono/tests/Makefile.am
mono/tests/libtest.c
mono/tests/test-runner.cs
mono/tests/verifier/invalid_cgt_un_valuetype_and_null.il [new file with mode: 0644]
mono/unit-tests/Makefile.am
mono/utils/Makefile.am
mono/utils/json.c [new file with mode: 0644]
mono/utils/json.h [new file with mode: 0644]
mono/utils/memcheck.h
mono/utils/mono-compiler.h
mono/utils/mono-context.h
mono/utils/mono-counters.c
mono/utils/mono-publib.h
mono/utils/mono-threads-posix.c
mono/utils/mono-threads.c
mono/utils/mono-time.c
mono/utils/valgrind.h
msvc/eglib.vcxproj
msvc/genmdesc.vcxproj
msvc/libgc.vcxproj
msvc/libmono.vcxproj
msvc/libmonoruntime.vcxproj
msvc/libmonoutils.vcxproj
msvc/libtest.vcxproj
msvc/mono.vcxproj
msvc/monodiet.vcxproj
msvc/monodis.vcxproj
msvc/monograph.vcxproj
msvc/monoposixhelper.vcxproj
msvc/pedump.vcxproj
msvc/profiler-codeanalyst.vcxproj
msvc/profiler-cov.vcxproj
msvc/profiler-logging.vcxproj
msvc/profiler-vtune.vcxproj
msvc/scripts/genproj.cs
msvc/scripts/order.xml
msvc/test_eglib.vcxproj
runtime/Makefile.am
tools/locale-builder/Constants.cs
tools/locale-builder/DateTimeFormatEntry.cs
tools/locale-builder/Patterns.cs
tools/sgen/sgen-grep-binprot.c

index 55a955ec624e0e86ba27aba53940285245c10261..4d01e37cc2acc0c7bbff799a6cf5fb8b99a33c46 100644 (file)
@@ -109,6 +109,10 @@ GRTAGS
 GSYMS
 GTAGS
 
+# Doxygen
+docs/doxygen*
+docs/perlmod*
+
 
 ##############################################################################
 # Mono-specific patterns
index 7cf5b99cbe81794f8328f6098bc91fa64624282e..1ed0f9a9dcd9516e5f094512180b4f33bab42924 100644 (file)
@@ -31,5 +31,5 @@
        url = git://github.com/mono/referencesource
        branch = mono
 [submodule "external/reference-assemblies"]
-       path = external/reference-assemblies
+       path = external/binary-reference-assemblies
        url = git://github.com/mono/reference-assemblies.git
index eb4d0443e039bdeeafb9dd7e475c34512a4f35c0..cddaff1621145dac0cf0f23f4d6b58b19c002ad9 100644 (file)
@@ -52,7 +52,7 @@ dist-hook:
        d=`cd $(distdir)/mcs && pwd`; cd $(mcs_topdir) && $(MAKE) distdir=$$d dist-recursive
        rm -rf `find $(top_distdir)/external -path '*\.git'`
        rm -f `find $(top_distdir)/external -path '*\.exe'`
-       rm -f `find $(top_distdir)/external -path '*\.dll' -not -path '*/reference-assemblies/v4\.0*'`
+       rm -f `find $(top_distdir)/external -path '*\.dll' -not -path '*/binary-reference-assemblies/v4\.0*'`
        cp mcs/class/lib/basic/System.Configuration.dll mcs/class/lib/monolite/
        cp mcs/class/lib/basic/System.Security.dll mcs/class/lib/monolite/
 # Disable this for now because it is very slow and causes wrench to timeout:
index be446d2dbbc52c4a74f089cfc1d622e9cb979b02..abed4c36cdec1f12dcb0d453193bf2ac365b0863 100644 (file)
@@ -529,12 +529,18 @@ AC_CACHE_CHECK([for clang],
 WARN=''
 if test x"$GCC" = xyes; then
         WARN='-Wall -Wunused -Wmissing-prototypes -Wmissing-declarations -Wstrict-prototypes  -Wmissing-prototypes -Wnested-externs -Wpointer-arith -Wno-cast-qual -Wwrite-strings -Wno-switch -Wno-switch-enum -Wno-unused-value'
+
+               # We require C99 with some GNU extensions, e.g. `linux` macro
+               CFLAGS="$CFLAGS -std=gnu99"
+
                # The runtime code does not respect ANSI C strict aliasing rules
                CFLAGS="$CFLAGS -fno-strict-aliasing"
 
                # We rely on signed overflow to behave
                CFLAGS="$CFLAGS -fwrapv"
 
+               CFLAGS="$CFLAGS -DMONO_DLL_EXPORT"
+
                ORIG_CFLAGS=$CFLAGS
                CFLAGS="$CFLAGS -Wdeclaration-after-statement"
                AC_MSG_CHECKING(for -Wdeclaration-after-statement option to gcc)
@@ -3039,6 +3045,18 @@ if test "x$host" != "x$target"; then
                with_tls=pthread
                target_mach=no
                ;;
+   x86_64*-linux-*)
+               TARGET=AMD64;
+               arch_target=amd64;
+               AC_DEFINE(TARGET_AMD64, 1, [...])
+               AC_DEFINE(TARGET_ANDROID, 1, [...])
+               CPPFLAGS="$CPPFLAGS"
+               sgen_supported=true
+               # Can't use tls, since it depends on the runtime detection of tls offsets
+               # in mono-compiler.h
+               with_tls=pthread
+               target_mach=no
+               ;;
    aarch64*-linux-*)
                TARGET=ARM64;
                arch_target=arm64;
index 9756b67a47d9586a3b43d2dd3d2ac2dbbce43b6c..779ca96fd217b697b37de49e4fe927d7adc9f478 100644 (file)
@@ -132,6 +132,7 @@ g_assertion_message (const gchar *format, ...)
        va_start (args, format);
        g_logv (G_LOG_DOMAIN, G_LOG_LEVEL_ERROR, format, args);
        va_end (args);
+       exit (0);
 }
 
 
diff --git a/external/binary-reference-assemblies b/external/binary-reference-assemblies
new file mode 160000 (submodule)
index 0000000..4abf9a7
--- /dev/null
@@ -0,0 +1 @@
+Subproject commit 4abf9a74bd9a807380ba8f55a73b322625e15565
diff --git a/external/reference-assemblies b/external/reference-assemblies
deleted file mode 160000 (submodule)
index 4abf9a7..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 4abf9a74bd9a807380ba8f55a73b322625e15565
index 351abe8bf612aa2f881486f9cbbe341fd842cd52..5661f22d9630849d04de94f6dd2e72bca484f85f 160000 (submodule)
@@ -1 +1 @@
-Subproject commit 351abe8bf612aa2f881486f9cbbe341fd842cd52
+Subproject commit 5661f22d9630849d04de94f6dd2e72bca484f85f
index f87188c3d0d1ec0691691ab83a6f0bececc439eb..07f7192b75d92f72a8ebaa6a23ee63af3dca2536 100644 (file)
@@ -970,6 +970,10 @@ where V is the architecture number 4, 5, 6, 7 and the options can be currently b
 
 .fi
 .TP
+\fBMONO_ARM_FORCE_SOFT_FLOAT\fR
+When Mono is built with a soft float fallback on ARM and this variable is set to
+"1", Mono will always emit soft float code, even if a VFP unit is detected.
+.TP
 \fBMONO_DISABLE_AIO\fR
 If set, tells mono NOT to attempt using native asynchronous I/O services. In
 that case, a default select/poll implementation is used. Currently only epoll()
index fa913978dc0ea59b7c8ab6b61dab70331f43d1fe..cea422fd0e1c9141e0aed591b57750c5304a27e2 100644 (file)
@@ -30,6 +30,14 @@ Show private members.
 .TP
 .I \-\-runtime\-version
 Print runtime version.
+.TP
+.I \-xa
+Sets the lookup path to the Xamarin.Android directory.   This will
+load both the mscorlib from there, and search assemblies in that directory.
+.TP
+.I \-xi
+Sets the lookup path to the Xamarin.iOS directory. This will
+load both the mscorlib from there, and search assemblies in that directory.
 .PP
 .SH DESCRIPTION
 Monop is a tool that allows you to view the outline of a class. You can see the
index f85356e7f37b45a48c028cbf475c7b7563f031d8..cbcfdcc3e0bfbd4f606ea0fb83e24e35c00db1da 100644 (file)
@@ -17,62 +17,6 @@ net_4_5_SUBDIRS := build mcs class nunit24 ilasm tools tests errors docs
 xbuild_12_SUBDIRS := build class tools/xbuild
 xbuild_14_SUBDIRS := build class tools/xbuild
 
-# List of test subdirs that should pass 100%
-centum_tests := \
-       class/corlib                                            \
-       class/System                                            \
-       class/System.XML                                        \
-       class/Commons.Xml.Relaxng                               \
-       class/Cscompmgd                                         \
-       class/Mono.Posix                                        \
-       class/Mono.Security                                     \
-       class/System.Design                                     \
-       class/System.DirectoryServices          \
-       class/System.Drawing                            \
-       class/System.Runtime.Remoting                           \
-       class/System.Runtime.Serialization.Formatters.Soap      \
-       class/System.Security                                   \
-       class/System.ServiceProcess                             \
-       class/System.Web                                                \
-       class/System.Web.Services                               \
-       tests                                                   \
-       errors
-
-default_centum_tests := \
-       $(centum_tests)         \
-       class/System.Data
-
-net_2_0_centum_tests := \
-       $(centum_tests)                         \
-       class/System.Core                       \
-       class/System.Configuration              \
-       class/System.Data.DataSetExtensions     \
-       class/System.Xml.Linq                   \
-       class/System.Transactions               \
-       class/Microsoft.Build.Framework         \
-       class/Microsoft.Build.Utilities         \
-       class/Microsoft.Build.Engine            \
-       class/System.Runtime.Serialization      \
-       class/System.IdentityModel              \
-       class/System.ServiceModel               \
-       class/System.ServiceModel.Web           \
-       class/Mono.C5
-
-#      class/System.Web.Extensions
-#      class/Microsoft.Build.Tasks     
-
-# note that System.Xml.Linq is here to prevent this from being empty
-net_3_5_centum_tests := \
-       class/System.Xml.Linq
-
-ifdef ONLY_CENTUM_TESTS
-TEST_SUBDIRS := $($(PROFILE)_centum_tests)
-endif
-
-ifdef TEST_SUBDIRS
-$(PROFILE)_SUBDIRS := $(TEST_SUBDIRS)
-endif
-
 include build/rules.make
 
 all-recursive $(STD_TARGETS:=-recursive): dir-check platform-check profile-check
index d816b94953a984d634b69b81b89d8c15cdf30f03..56b8470a328c1bb1689d7475bcf465277109b810 100644 (file)
@@ -79,15 +79,11 @@ secxml_libdir = $(the_libdir_base)secxml
 
 the_libdir = $(the_libdir_base)$(intermediate)
 
-ifdef LIBRARY_NEEDS_POSTPROCESSING
-build_libdir = fixup/$(PROFILE)/
-else
 ifdef LIBRARY_USE_INTERMEDIATE_FILE
 build_libdir = $(the_libdir)tmp/
 else
 build_libdir = $(the_libdir)
 endif
-endif
 
 the_lib   = $(the_libdir)$(LIBRARY_NAME)
 build_lib = $(build_libdir)$(LIBRARY_NAME)
@@ -243,13 +239,6 @@ dist-local: dist-default
        for d in . $$subs ; do \
          case $$d in .) : ;; *) test ! -f $$d/ChangeLog || cp -p $$d/ChangeLog $(distdir)/$$d ;; esac ; done
 
-ifdef LIBRARY_NEEDS_POSTPROCESSING
-dist-local: dist-fixup
-FIXUP_PROFILES = default net_2_0
-dist-fixup:
-       $(MKINSTALLDIRS) $(distdir)/fixup $(FIXUP_PROFILES:%=$(distdir)/fixup/%)
-endif
-
 ifndef LIBRARY_COMPILE
 LIBRARY_COMPILE = $(CSCOMPILE)
 endif
@@ -340,9 +329,8 @@ $(makefrag) $(test_response) $(test_makefrag) $(btest_response) $(btest_makefrag
 ## Documentation stuff
 
 Q_MDOC_UP=$(if $(V),,@echo "MDOC-UP [$(PROFILE)] $(notdir $(@))";)
-# net_2_0 is needed because monodoc is only compiled in that profile
 MDOC_UP  =$(Q_MDOC_UP) \
-               MONO_PATH="$(topdir)/class/lib/$(DEFAULT_PROFILE)$(PLATFORM_PATH_SEPARATOR)$(topdir)/class/lib/net_2_0$(PLATFORM_PATH_SEPARATOR)$$MONO_PATH" $(RUNTIME) $(topdir)/class/lib/$(DEFAULT_PROFILE)/mdoc.exe \
+               MONO_PATH="$(topdir)/class/lib/$(DEFAULT_PROFILE)$(PLATFORM_PATH_SEPARATOR)$$MONO_PATH" $(RUNTIME) $(topdir)/class/lib/$(DEFAULT_PROFILE)/mdoc.exe \
                update --delete -o Documentation/en $(the_lib)
 
 doc-update-local: $(the_libdir)/.doc-stamp
index 712adefb477b2333767f3d314d758895bf8547f8..dbb9ba99d4b27bf6e5dccd654ac14da9c6e6f4c3 100644 (file)
@@ -18,7 +18,7 @@ endif
 
 MCS = $(with_mono_path) $(INTERNAL_GMCS)
 
-PROFILE_MCS_FLAGS = -d:NET_1_1 -d:NET_2_0 -d:NET_3_0 -d:NET_3_5 -d:NET_4_0 -d:NET_4_5 -d:MONO -d:BOOTSTRAP_BASIC -nowarn:1699 -d:DISABLE_CAS_USE -lib:$(topdir)/class/lib/$(PROFILE)
+PROFILE_MCS_FLAGS = -d:NET_4_0 -d:NET_4_5 -d:MONO -d:BOOTSTRAP_BASIC -nowarn:1699 -d:DISABLE_CAS_USE -lib:$(topdir)/class/lib/$(PROFILE)
 NO_SIGN_ASSEMBLY = yes
 NO_TEST = yes
 NO_INSTALL = yes
index b8ba1ce1146e473e0c51341e9ea9c4470d69b137..5273928a0ed6143d4fff29ee27776f826f67a3f0 100644 (file)
@@ -13,7 +13,7 @@ profile-check:
        @:
 
 DEFAULT_REFERENCES = -r:mscorlib.dll
-PROFILE_MCS_FLAGS = -d:NET_1_1 -d:NET_2_0 -d:NET_3_0 -d:NET_3_5 -d:NET_4_0 -d:NET_4_5 -d:MONO -d:DISABLE_CAS_USE -nowarn:1699 -nostdlib -lib:$(topdir)/class/lib/$(PROFILE) $(DEFAULT_REFERENCES)
+PROFILE_MCS_FLAGS = -d:NET_4_0 -d:NET_4_5 -d:MONO -d:DISABLE_CAS_USE -nowarn:1699 -nostdlib -lib:$(topdir)/class/lib/$(PROFILE) $(DEFAULT_REFERENCES)
 
 NO_SIGN_ASSEMBLY = yes
 NO_TEST = yes
index 7c37b2c89d644fb8b025c8db6b6a4d8ed47d03a7..b5f059d980f182bb4844f5528a1bae98ab0b1fa0 100644 (file)
@@ -11,7 +11,7 @@ profile-check:
        @:
 
 DEFAULT_REFERENCES = -r:mscorlib.dll
-PROFILE_MCS_FLAGS = -d:NET_1_1 -d:NET_2_0 -d:NET_3_0 -d:NET_3_5 -d:NET_4_0 -d:NET_4_5 -d:MONO -d:DISABLE_CAS_USE  -nowarn:1699 -nostdlib -lib:$(topdir)/class/lib/$(PROFILE) $(DEFAULT_REFERENCES) $(PLATFORM_DEBUG_FLAGS)
+PROFILE_MCS_FLAGS = -d:NET_4_0 -d:NET_4_5 -d:MONO -d:DISABLE_CAS_USE  -nowarn:1699 -nostdlib -lib:$(topdir)/class/lib/$(PROFILE) $(DEFAULT_REFERENCES) $(PLATFORM_DEBUG_FLAGS)
 
 FRAMEWORK_VERSION = 4.5
 XBUILD_VERSION = 4.0
index 43d791cf16b0c037f00602800cd3eb3d599bf7a8..645a90d7dc9adca539659d8dc3db14d1ebc3f740 100644 (file)
@@ -210,6 +210,5 @@ dist-default:
 ## Documentation stuff
 
 Q_MDOC =$(if $(V),,@echo "MDOC    [$(PROFILE)] $(notdir $(@))";)
-# net_2_0 is needed because monodoc is only compiled in that profile
-MDOC   =$(Q_MDOC) MONO_PATH="$(topdir)/class/lib/$(DEFAULT_PROFILE)$(PLATFORM_PATH_SEPARATOR)$(topdir)/class/lib/net_2_0$(PLATFORM_PATH_SEPARATOR)$$MONO_PATH" $(RUNTIME) $(topdir)/class/lib/$(DEFAULT_PROFILE)/mdoc.exe
+MDOC   =$(Q_MDOC) MONO_PATH="$(topdir)/class/lib/$(DEFAULT_PROFILE)$(PLATFORM_PATH_SEPARATOR)$$MONO_PATH" $(RUNTIME) $(topdir)/class/lib/$(DEFAULT_PROFILE)/mdoc.exe
 
index dd84b83acda77e01b2e8e84d59d7694a952bbc05..5de97084f2584604c965c2690afce42d2c3cfdf0 100644 (file)
@@ -16,7 +16,66 @@ build_SUBDIRS :=  \
        Mono.Posix \
        System.Core
 
-net_2_0_dirs := \
+pcl_facade_dirs := Facades
+
+mobile_common_dirs := \
+       corlib  \
+       System  \
+       System.Core     \
+       System.XML      \
+       Mono.Security   \
+       System  \
+       I18N            \
+       System.Xml.Linq \
+       System.Runtime.Serialization    \
+       System.ServiceModel     \
+       System.ServiceModel.Web \
+       System.Json     \
+       System.Web.Services     \
+       Mono.Data.Tds   \
+       System.Transactions     \
+       System.Data     \
+       Mono.Cairo      \
+       Mono.Data.Sqlite        \
+       System.Numerics \
+       System.Data.Services.Client \
+       System.IO.Compression \
+       System.IO.Compression.FileSystem \
+       System.ComponentModel.DataAnnotations \
+       System.ComponentModel.Composition.4.5 \
+       System.Net \
+       System.Windows \
+       System.Xml.Serialization \
+       Mono.CSharp     \
+       Microsoft.CSharp \
+       $(pcl_facade_dirs)
+
+mobile_static_dirs := \
+       $(mobile_common_dirs)   \
+       Mono.Dynamic.Interpreter
+
+mobile_dynamic_dirs := \
+       $(mobile_common_dirs)   \
+       Mono.CompilerServices.SymbolWriter      \
+       System.Net.Http
+
+xammac_dirs := \
+       $(mobile_dynamic_dirs)
+
+monodroid_dirs := \
+       $(mobile_dynamic_dirs)
+
+monotouch_dirs := \
+       $(mobile_static_dirs)
+
+monotouch_runtime_dirs := \
+       corlib \
+       System \
+       System.Core \
+       System.XML \
+       Mono.CSharp
+
+net_4_5_dirs := \
        corlib                          \
        System                          \
        System.XML                      \
@@ -91,77 +150,7 @@ net_2_0_dirs := \
        System.Dynamic                  \
        Mono.CSharp                     \
        System.Net                      \
-       System.Json
-
-net_2_0_only_dirs := \
-       System.Web.Extensions_1.0       \
-       System.Web.Extensions.Design_1.0\
-       Compat.ICSharpCode.SharpZipLib  \
-       WindowsBase                     \
-       System.ServiceModel.Web         \
-       System.Data.Services.Client     \
-       System.Data.Services            \
-
-pcl_facade_dirs := Facades
-
-mobile_common_dirs := \
-       corlib  \
-       System  \
-       System.Core     \
-       System.XML      \
-       Mono.Security   \
-       System  \
-       I18N            \
-       System.Xml.Linq \
-       System.Runtime.Serialization    \
-       System.ServiceModel     \
-       System.ServiceModel.Web \
-       System.Json     \
-       System.Web.Services     \
-       Mono.Data.Tds   \
-       System.Transactions     \
-       System.Data     \
-       Mono.Cairo      \
-       Mono.Data.Sqlite        \
-       System.Numerics \
-       System.Data.Services.Client \
-       System.IO.Compression \
-       System.IO.Compression.FileSystem \
-       System.ComponentModel.DataAnnotations \
-       System.ComponentModel.Composition.4.5 \
-       System.Net \
-       System.Windows \
-       System.Xml.Serialization \
-       Mono.CSharp     \
-       Microsoft.CSharp \
-       $(pcl_facade_dirs)
-
-mobile_static_dirs := \
-       $(mobile_common_dirs)   \
-       Mono.Dynamic.Interpreter
-
-mobile_dynamic_dirs := \
-       $(mobile_common_dirs)   \
-       Mono.CompilerServices.SymbolWriter      \
-       System.Net.Http
-
-xammac_dirs := \
-       $(mobile_dynamic_dirs)
-
-monodroid_dirs := \
-       $(mobile_dynamic_dirs)
-
-monotouch_dirs := \
-       $(mobile_static_dirs)
-
-monotouch_runtime_dirs := \
-       corlib \
-       System \
-       System.Core \
-       System.XML \
-       Mono.CSharp
-
-net_4_0_dirs := \
+       System.Json             \
        System.Numerics         \
        Microsoft.CSharp        \
        System.Windows.Forms.DataVisualization  \
@@ -191,9 +180,7 @@ net_4_0_dirs := \
        System.Data.Services \
        System.Json.Microsoft \
        System.Data.Entity \
-       monodoc
-
-net_4_5_dirs := \
+       monodoc \
        System.Threading.Tasks.Dataflow \
        System.ComponentModel.Composition.4.5 \
        System.Net.Http \
@@ -234,13 +221,13 @@ mobile_static_SUBDIRS := $(mobile_static_dirs)
 mobile_SUBDIRS := $(mobile_dynamic_dirs)
 xammac_SUBDIRS := $(xammac_dirs)
 net_4_0_SUBDIRS := reference-assemblies
-net_4_5_SUBDIRS := $(net_2_0_dirs) $(net_4_0_dirs) $(net_4_5_dirs) $(xbuild_4_0_dirs) aot-compiler
+net_4_5_SUBDIRS := $(net_4_5_dirs) $(xbuild_4_0_dirs) aot-compiler
 xbuild_12_SUBDIRS := $(xbuild_4_0_dirs)
 xbuild_14_SUBDIRS := $(xbuild_4_0_dirs)
 
 include ../build/rules.make
 
-SUBDIRS = $(net_2_0_dirs) $(net_2_0_only_dirs) $(mobile_static_dirs) $(mobile_dynamic_dirs) $(monotouch_dirs) $(monodroid_dirs) $(xammac_dirs) $(net_4_0_dirs) $(net_4_5_dirs)
+SUBDIRS = $(mobile_static_dirs) $(mobile_dynamic_dirs) $(monotouch_dirs) $(monodroid_dirs) $(xammac_dirs) $(net_4_5_dirs)
 
 DIST_ONLY_SUBDIRS = dlr aot-compiler reference-assemblies $(xbuild_4_0_dirs)
 
index 9724a269c749247882965faa1a55eefb642d53ab..d5b65806e71678cfc5cb0fc73891c2abce553133 100644 (file)
@@ -38,10 +38,8 @@ namespace System.Windows.Forms {
                void CreateEditingControl ()
                {
                        editingControl = new DataGridViewTextBoxEditingControl() {
-                               EditingControlDataGridView = DataGridView,
                                Multiline = false,
-                               BorderStyle = BorderStyle.None,
-                               MaxLength = maxInputLength
+                               BorderStyle = BorderStyle.None
                        };
                }
 
@@ -92,8 +90,13 @@ namespace System.Windows.Forms {
                                throw new InvalidOperationException("There is no associated DataGridView.");
                        }
 
-                       CreateEditingControl ();
+                       if (editingControl == null)
+                               CreateEditingControl ();
+
                        DataGridView.EditingControlInternal = editingControl;
+
+                       editingControl.EditingControlDataGridView = DataGridView;
+                       editingControl.MaxLength = maxInputLength;
                        
                        if (initialFormattedValue == null || initialFormattedValue.ToString () == string.Empty)
                                editingControl.Text = string.Empty;
@@ -126,6 +129,9 @@ namespace System.Windows.Forms {
 
                public override void PositionEditingControl (bool setLocation, bool setSize, Rectangle cellBounds, Rectangle cellClip, DataGridViewCellStyle cellStyle, bool singleVerticalBorderAdded, bool singleHorizontalBorderAdded, bool isFirstDisplayedColumn, bool isFirstDisplayedRow)
                {
+                       if (editingControl == null)
+                               CreateEditingControl ();
+
                        cellBounds.Size = new Size (cellBounds.Width - 5, cellBounds.Height + 2);
                        cellBounds.Location = new Point (cellBounds.X + 3, ((cellBounds.Height - editingControl.Height) / 2) + cellBounds.Y - 1);
 
index c9fd272e24ed623b4b1c1bb0eaf4443bfddc55ec..d2d2e62cc7690fb26ac23657bf35c1a956b2f3ef 100644 (file)
@@ -1775,7 +1775,8 @@ namespace System.Windows.Forms
                                
                        switch (met) {
                                case ToolStripItemEventType.MouseUp:
-                                       this.HandleClick (((MouseEventArgs)e).Clicks, e);
+                                       if (((MouseEventArgs)e).Button == MouseButtons.Left)
+                                               this.HandleClick (((MouseEventArgs)e).Clicks, e);
                                        this.OnMouseUp ((MouseEventArgs)e);
                                        break;
                                case ToolStripItemEventType.MouseDown:
index e176ee1340edeb447414ddbfb598b8194d666176..46061c938a298cbb366ee85edf7d4843c2327c45 100644 (file)
@@ -16,7 +16,6 @@ namespace Logger
                {\r
                        Type type = null;\r
                        System.Text.StringBuilder code = new StringBuilder ();\r
-                       bool is_2_0 = false;\r
                        \r
                        try {\r
                                //if (args.Length >= 1 && args [0].ToLower () == "all") {\r
@@ -39,20 +38,13 @@ namespace Logger
                                \r
                                Assembly a = typeof(System.Windows.Forms.Control).Assembly;\r
                                type = a.GetType (args [0]);\r
-                               is_2_0 = a.FullName.IndexOf ("2.0") >= 0;\r
                                \r
                                if (type == null)\r
                                        throw new Exception (String.Format("Type '{0}' not found.", args[0]));\r
 \r
                                code.Append ("// Automatically generated for assembly: " + a.FullName + Environment.NewLine);\r
                                code.Append ("// To regenerate:" + Environment.NewLine);\r
-                               code.Append ("// " + (is_2_0 ? "gmcs" : "mcs") + " -r:System.Windows.Forms.dll LogGenerator.cs && mono LogGenerator.exe " + type.FullName + " " + args [1] + " " + (args.Length > 2 ? args [2] : " outfile.cs") + Environment.NewLine);\r
-\r
-                               if (is_2_0) {\r
-                                       code.Append ("#if NET_2_0" + Environment.NewLine);\r
-                               } else {\r
-                                       code.Append ("#if !NET_2_0" + Environment.NewLine);\r
-                               }\r
+                               code.Append ("// mcs -r:System.Windows.Forms.dll LogGenerator.cs && mono LogGenerator.exe " + type.FullName + " " + args [1] + " " + (args.Length > 2 ? args [2] : " outfile.cs") + Environment.NewLine);\r
                                        \r
                                if (args[1] == "overrides" || args[1] == "overridesevents")\r
                                {\r
@@ -63,8 +55,6 @@ namespace Logger
                                        code.Append (event_logger.GenerateLog (type));\r
                                }\r
 \r
-                               code.Append ("#endif" + Environment.NewLine);\r
-\r
                                if (args.Length > 2) {\r
                                        using (System.IO.StreamWriter writer = new System.IO.StreamWriter(args[2], false))\r
                                        {\r
@@ -99,9 +89,6 @@ using System.Drawing;
 using System.Windows.Forms;\r
 using System.ComponentModel;\r
 using System.Runtime.Remoting;\r
-#if NET_2_0\r
-using System.Windows.Forms.Layout;\r
-#endif\r
 using System.Text;\r
 \r
 namespace MonoTests.System.Windows.Forms \r
index 86f14a1a797af9fa3277bba8f7d5f61e0c361f30..f663120bf798730223c944db359caa7873771dc5 100644 (file)
@@ -315,7 +315,7 @@ namespace Microsoft.Build.BuildEngine {
                                        return;
                                }
                        }
-                       
+
                        DirectoryScanner directoryScanner;
                        Expression includeExpr, excludeExpr;
                        ITaskItem[] includes, excludes;
@@ -341,8 +341,10 @@ namespace Microsoft.Build.BuildEngine {
                        directoryScanner.Includes = includes;
                        directoryScanner.Excludes = excludes;
 
-                       if (project.FullFileName != String.Empty)
+                       if (project.FullFileName != String.Empty) {
+                               directoryScanner.ProjectFile = project.ThisFileFullPath;
                                directoryScanner.BaseDirectory = new DirectoryInfo (Path.GetDirectoryName (project.FullFileName));
+                       }
                        else
                                directoryScanner.BaseDirectory = new DirectoryInfo (Directory.GetCurrentDirectory ());
                        
index 587921a8249b4f771668de9d459e27a3404d37d3..3b7f874fca009b84cede679ed632907b33db6293 100644 (file)
@@ -42,16 +42,19 @@ namespace Microsoft.Build.BuildEngine {
                        if (whenElement == null)
                                throw new ArgumentNullException ("whenElement");
                        this.whenElement = whenElement;
-                       foreach (XmlElement xe in whenElement.ChildNodes) {
-                               switch (xe.Name) {
+                       foreach (XmlNode node in whenElement.ChildNodes) {
+                               switch (node.NodeType) {
+                               case XmlNodeType.Element:
+                                       var xe = (XmlElement)node;
+                                       switch (xe.Name) {
                                        case "ItemGroup":
                                                BuildItemGroup big = new BuildItemGroup (xe, parentProject, null, true);
-                                               //big.BindToXml (xe);
+                                                       //big.BindToXml (xe);
                                                groupingCollection.Add (big);
                                                break;
                                        case "PropertyGroup":
                                                BuildPropertyGroup bpg = new BuildPropertyGroup (xe, parentProject, null, true);
-                                               //bpg.BindToXml (xe);
+                                                       //bpg.BindToXml (xe);
                                                groupingCollection.Add (bpg);
                                                break;
                                        case "Choose":
@@ -59,7 +62,13 @@ namespace Microsoft.Build.BuildEngine {
                                                groupingCollection.Add (bc);
                                                break;
                                        default:
-                                               throw new InvalidProjectFileException ( string.Format ("Invalid element '{0}' in When.", xe.Name));
+                                               throw new InvalidProjectFileException (string.Format ("Invalid element '{0}' in When.", xe.Name));
+                                       }
+                                       break;
+                               case XmlNodeType.Comment:
+                                       break;
+                               default:
+                                       throw new InvalidProjectFileException (string.Format ("Invalid element '{0}' in When Condition.", node.NodeType));
                                }
                        }
                }
index 4e8aa9a340c11eed300c2124174818cdadf26dcf..102c2de2a0fbb765cffe8e406a43afa5f369d63b 100644 (file)
@@ -38,6 +38,7 @@ namespace Microsoft.Build.BuildEngine {
                DirectoryInfo   baseDirectory;
                ITaskItem[]     includes, excludes;
                ITaskItem[]     matchedItems;
+               string projectFile;
 
                static bool _runningOnWindows;
                
@@ -82,8 +83,11 @@ namespace Microsoft.Build.BuildEngine {
 
                        string name = include_item.ItemSpec;
                        if (!HasWildcard (name)) {
-                               if (!excludedItems.ContainsKey (Path.GetFullPath(name)))
+                               if (!excludedItems.ContainsKey (Path.GetFullPath (name))) {
                                        includedItems.Add (include_item);
+                                       if (projectFile != null)
+                                               include_item.SetMetadata ("DefiningProjectFullPath", projectFile);
+                               }
                        } else {
                                if (name.Split (Path.DirectorySeparatorChar).Length > name.Split (Path.AltDirectorySeparatorChar).Length) {
                                        separatedPath = name.Split (new char [] {Path.DirectorySeparatorChar},
@@ -127,6 +131,8 @@ namespace Microsoft.Build.BuildEngine {
                                                                rec_dir += Path.DirectorySeparatorChar;
                                                        item.SetMetadata ("RecursiveDir", rec_dir);
                                                }
+                                               if (projectFile != null)
+                                                       item.SetMetadata ("DefiningProjectFullPath", projectFile);
                                                includedItems.Add (item);
                                        }
                                }
@@ -236,6 +242,11 @@ namespace Microsoft.Build.BuildEngine {
                        set { baseDirectory = value; }
                }
                
+               public string ProjectFile {
+                       get { return projectFile; }
+                       set { projectFile = value; }
+               }
+
                public ITaskItem[] Includes {
                        get { return includes; }
                        set { includes = value; }
index 097fd8b284420f5c5a837c7ad3e1987c684491db..005752baf98e12f541683c8aa9f258b6a7d03354 100644 (file)
@@ -1425,6 +1425,10 @@ namespace Microsoft.Build.BuildEngine {
                        return default (T);
                }
 
+               internal string ThisFileFullPath {
+                       get { return this_file_property_stack.Peek (); }
+               }
+
                // Used for MSBuild*This* set of properties
                internal void PushThisFileProperty (string full_filename)
                {
index dcdd006b23a143a6ad2395e54b0b598a29e592a7..8036265c9ac5800b0864fc03b4f88dfd8e4d0b22 100644 (file)
@@ -44,9 +44,13 @@ namespace MonoTests.Microsoft.Build.BuildEngine {
                                <Project xmlns='http://schemas.microsoft.com/developer/msbuild/2003'>
                     <Choose>
                         <When Condition=""'$(Configuration)' == ''"">
+                            
+                            <!-- A user comment is allowed here -->
+
                                                <ItemGroup>
                                                        <A Include='a' />
                                                </ItemGroup>
+                            
                         </When>
                     </Choose>
                                </Project>
index 7b51224340a73946ce314e7db63cd80d441983d9..563a9b7e882b110e1bd71bce3b22c0e31f769dc9 100644 (file)
     <Compile Include="Microsoft.Build.Tasks\AspNetCompiler.cs" />\r
     <Compile Include="Microsoft.Build.Tasks\AssemblyResolver.cs" />\r
     <Compile Include="Microsoft.Build.Tasks\AssignCulture.cs" />\r
+    <Compile Include="Microsoft.Build.Tasks\AssignLinkMetadata.cs" />\r
     <Compile Include="Microsoft.Build.Tasks\AssignProjectConfiguration.cs" />\r
     <Compile Include="Microsoft.Build.Tasks\AssignTargetPath.cs" />\r
     <Compile Include="Microsoft.Build.Tasks\CallTarget.cs" />\r
index 3aa75d7099d42484a218a77a1bf3a55f6686a012..05eac250c7299c599ed2e0a0794e234bbaf944c5 100644 (file)
     <Compile Include="Microsoft.Build.Tasks\AssignCulture.cs" />\r
     <Compile Include="Microsoft.Build.Tasks\AssignProjectConfiguration.cs" />\r
     <Compile Include="Microsoft.Build.Tasks\AssignTargetPath.cs" />\r
+    <Compile Include="Microsoft.Build.Tasks\AssignLinkMetadata.cs" />\r
     <Compile Include="Microsoft.Build.Tasks\CallTarget.cs" />\r
     <Compile Include="Microsoft.Build.Tasks\CodeTaskFactory.cs" />\r
     <Compile Include="Microsoft.Build.Tasks\CombinePath.cs" />\r
index 418001ee69e847aa3954916c36d6d366d93967c5..dfe90616d205d99a259c7cf69e3e7f8234f5dc77 100644 (file)
     <Compile Include="Microsoft.Build.Tasks\AssignCulture.cs" />\r
     <Compile Include="Microsoft.Build.Tasks\AssignProjectConfiguration.cs" />\r
     <Compile Include="Microsoft.Build.Tasks\AssignTargetPath.cs" />\r
+    <Compile Include="Microsoft.Build.Tasks\AssignLinkMetadata.cs" />\r
     <Compile Include="Microsoft.Build.Tasks\CallTarget.cs" />\r
     <Compile Include="Microsoft.Build.Tasks\CombinePath.cs" />\r
     <Compile Include="Microsoft.Build.Tasks\CommandLineBuilderExtension.cs" />\r
index e937bd5cc73fa7635b4165aa6c2d700776290935..2261d7af65e926d8406757b5752a382fcdd75949 100644 (file)
@@ -7,6 +7,7 @@ Microsoft.Build.Tasks/AppDomainIsolatedTaskExtension.cs
 Microsoft.Build.Tasks/AspNetCompiler.cs
 Microsoft.Build.Tasks/AssemblyResolver.cs
 Microsoft.Build.Tasks/AssignCulture.cs
+Microsoft.Build.Tasks/AssignLinkMetadata.cs
 Microsoft.Build.Tasks/AssignProjectConfiguration.cs
 Microsoft.Build.Tasks/AssignTargetPath.cs
 Microsoft.Build.Tasks/CallTarget.cs
diff --git a/mcs/class/Microsoft.Build.Tasks/Microsoft.Build.Tasks/AssignLinkMetadata.cs b/mcs/class/Microsoft.Build.Tasks/Microsoft.Build.Tasks/AssignLinkMetadata.cs
new file mode 100644 (file)
index 0000000..b306990
--- /dev/null
@@ -0,0 +1,87 @@
+//
+// AssignLinkMetadata.cs
+//
+// Author:
+//   Lluis Sanchez (lluis@xamarin.com)
+//
+// Copyright 2015 Xamarin, Inc (http://www.xamarin.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+using System;
+using System.IO;
+using Microsoft.Build.Framework;
+using Microsoft.Build.Utilities;
+using System.Collections.Generic;
+
+namespace Microsoft.Build.Tasks {
+       public class AssignLinkMetadata : TaskExtension {
+       
+               ITaskItem[]     assignedFiles;
+               ITaskItem[]     files;
+       
+               public AssignLinkMetadata ()
+               {
+               }
+               
+               public override bool Execute ()
+               {
+                       if (files == null || files.Length == 0)
+                               //nothing to do
+                               return true;
+
+                       List<ITaskItem> outFiles = new List<ITaskItem> ();
+
+                       for (int i = 0; i < files.Length; i ++) {
+                               string file = files [i].ItemSpec;
+                               string link = files [i].GetMetadata ("Link");
+                               string definingProjectPath = files [i].GetMetadata ("DefiningProjectFullPath");
+
+                               if (String.IsNullOrEmpty (link) && Path.IsPathRooted (file) && !string.IsNullOrEmpty (definingProjectPath)) {
+                                       file = Path.GetFullPath (file);
+                                       var projectDir = Path.GetFullPath (Path.GetDirectoryName (definingProjectPath));
+                                       if (projectDir.Length == 0 || projectDir [projectDir.Length - 1] != Path.DirectorySeparatorChar)
+                                               projectDir += Path.DirectorySeparatorChar;
+                                       if (file.StartsWith (projectDir)) {
+                                               // The file is in the same folder or a subfolder of the project that contains it.
+                                               // Use the relative path wrt the containing project as link.
+                                               var outFile = new TaskItem (files [i]);
+                                               outFile.SetMetadata ("Link", file.Substring (projectDir.Length));
+                                               outFiles.Add (outFile);
+                                       }
+                               }
+                       }
+
+                       assignedFiles = outFiles.ToArray ();
+
+                       return true;
+               }
+               
+               [Output]
+               public ITaskItem[] OutputItems {
+                       get { return assignedFiles; }
+               }
+               
+               public ITaskItem[] Items {
+                       get { return files; }
+                       set { files = value; }
+               }
+       }
+}
index d8711247996fd724951f0dbc17c9bf18a88b0eb2..f99086d1e804b67071f20dcff554a5c2293cca1a 100644 (file)
@@ -29,6 +29,7 @@ using System;
 using System.Collections;
 using System.Collections.Generic;
 using System.IO;
+using System.Threading;
 using Microsoft.Build.Framework;
 using Microsoft.Build.Utilities;
 
@@ -41,7 +42,10 @@ namespace Microsoft.Build.Tasks {
                bool            skipUnchangedFiles;
                ITaskItem[]     sourceFiles;
                bool            overwriteReadOnlyFiles;
-               
+               int                     retries;
+               int                     retryDelayMilliseconds;
+               bool            useHardlinksIfPossible;
+
                public Copy ()
                {
                }
@@ -79,7 +83,7 @@ namespace Microsoft.Build.Tasks {
                                                }
 
                                                if (!skipUnchangedFiles || HasFileChanged (sourceFile, destinationFile))
-                                                       CopyFile (sourceFile, destinationFile, true);
+                                                       CopyFileWithRetries (sourceFile, destinationFile, true);
 
                                                sourceItem.CopyMetadataTo (destinationItem);
                                                temporaryCopiedFiles.Add (destinationItem);
@@ -102,7 +106,7 @@ namespace Microsoft.Build.Tasks {
 
                                                if (!skipUnchangedFiles || directoryCreated ||
                                                        HasFileChanged (sourceFile, destinationFile))
-                                                       CopyFile (sourceFile, destinationFile, false);
+                                                       CopyFileWithRetries (sourceFile, destinationFile, false);
 
                                                temporaryCopiedFiles.Add (new TaskItem (
                                                                Path.Combine (destinationFolder.GetMetadata ("Identity"), filename),
@@ -172,6 +176,34 @@ namespace Microsoft.Build.Tasks {
                        }
                }
 
+               public int Retries {
+                       get {
+                               return retries;
+                       }
+                       set {
+                               retries = value;
+                       }
+               }
+
+               public int RetryDelayMilliseconds {
+                       get {
+                               return retryDelayMilliseconds;
+                       }
+                       set {
+                               retryDelayMilliseconds = value;
+                       }
+               }
+
+               [MonoTODO ("Not implemented yet.")]
+               public bool UseHardlinksIfPossible {
+                       get {
+                               return useHardlinksIfPossible;
+                       }
+                       set {
+                               useHardlinksIfPossible = value;
+                       }
+               }
+
                [Required]
                public ITaskItem[] SourceFiles {
                        get {
@@ -193,6 +225,23 @@ namespace Microsoft.Build.Tasks {
                        return true;
                }
 
+               void CopyFileWithRetries (string source, string dest, bool create_dir)
+               {
+                       for (int i = retries; i >= 0; i--) {
+                               try {
+                                       CopyFile (source, dest, create_dir);
+                               }
+                               catch (Exception ex) {
+                                       Log.LogMessage ("Copying failed. Retries left: {0}.", i);
+
+                                       if (i == 0)
+                                               throw ex;
+
+                                       Thread.Sleep (retryDelayMilliseconds);
+                               }
+                       }
+               }
+
                void CopyFile (string source, string dest, bool create_dir)
                {
                        if (create_dir)
index 2b9ce4ecae7d864e812ac776020c37a13d1d2500..ad7ca03ba5a6ebb9b3fcb611f695492d0a673a3e 100644 (file)
@@ -30,6 +30,7 @@ using System.IO;
 using Microsoft.Build.BuildEngine;
 using NUnit.Framework;
 using System.Text;
+using System.Threading;
 using Microsoft.Build.Tasks;
 using Microsoft.Build.Framework;
 using Microsoft.Build.Utilities;
@@ -396,6 +397,61 @@ namespace MonoTests.Microsoft.Build.Tasks {
                        File.SetAttributes (target_file, FileAttributes.Normal);
                }
 
+               [Test]
+               public void TestCopy_Retries ()
+               {
+                       Engine engine;
+                       Project project;
+                       string file_path = Path.Combine (source_path, "copyretries.txt");
+                       string target_file = Path.Combine (target_path, "copyretries.txt");                     
+
+                       using (File.CreateText (file_path)) { }
+                       using (File.CreateText (target_file)) { }
+
+                       File.SetAttributes (target_file, FileAttributes.ReadOnly);
+                       Assert.AreEqual (FileAttributes.ReadOnly, File.GetAttributes (target_file), "A1");
+
+                       string documentString = @"
+                               <Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003"">
+                                       <PropertyGroup><DestFile>" + target_file + @"</DestFile></PropertyGroup>
+                                       <ItemGroup>
+                                               <SFiles Include='" + file_path + @"'><Md>1</Md></SFiles>
+                                               <DFiles Include='$(DestFile)'><Mde>2</Mde></DFiles>
+                                       </ItemGroup>
+                                       <Target Name='1'>
+                                               <Copy SourceFiles='@(SFiles)' DestinationFiles='@(DFiles)' Retries='3' RetryDelayMilliseconds='2000'>
+                                                       <Output TaskParameter='CopiedFiles' ItemName='I0'/>
+                                                       <Output TaskParameter='DestinationFiles' ItemName='I1'/>
+                                               </Copy>
+                                               <Message Text=""I0 : @(I0), I1: @(I1)""/>
+                                       </Target>
+                               </Project>
+                       ";
+
+                       engine = new Engine (Consts.BinPath);
+                       project = engine.CreateNewProject ();
+
+                       TestMessageLogger testLogger = new TestMessageLogger ();
+                       engine.RegisterLogger (testLogger);
+
+                       project.LoadXml (documentString);
+
+                       // remove the read-only flag from the file after a few secs,
+                       // so copying works after retries
+                       new Thread ( () => {
+                               Thread.Sleep (3000);
+                               File.SetAttributes (target_file, FileAttributes.Normal);
+                       }).Start ();
+
+                       if (!project.Build ("1")) {
+                               var sb = new StringBuilder ();
+                               testLogger.DumpMessages (sb);
+                               Assert.Fail ("Build failed " + sb.ToString ());
+                       }
+
+                       testLogger.CheckLoggedAny ("Copying failed. Retries left: 3.", MessageImportance.Normal, "A2");
+               }
+
                void CheckCopyBuildItems (Project project, string [] source_files, string destination_folder, string prefix)
                {
                        int num = source_files.Length;
index 60f3e7f70978d858f36c303a57ed496f8642ffc7..d2e20fc95ea91467400fb011b5ebfbb6423bf2cc 100644 (file)
@@ -59,15 +59,31 @@ namespace Microsoft.Build.Utilities
                //
                public static Result TryParseLine (string line)
                {
+                       int originEnd, originStart = 0;
                        var result = new Result ();
 
-                       int originStart = 0;
                        MoveNextNonSpace (line, ref originStart);
 
+                       if (originStart >= line.Length)
+                               return null;
+
                        //find the origin section
                        //the filename may include a colon for Windows drive e.g. C:\foo, so ignore colon in first 2 chars
-                       int originEnd = line[originStart] == ':'? originStart : line.IndexOf (':', originStart + 2) - 1;
+                       if (line[originStart] != ':') {
+                               if (originStart + 2 >= line.Length)
+                                       return null;
+
+                               if ((originEnd = line.IndexOf (':', originStart + 2) - 1) < 0)
+                                       return null;
+                       } else {
+                               originEnd = originStart;
+                       }
+
                        int categoryStart = originEnd + 2;
+
+                       if (categoryStart > line.Length)
+                               return null;
+
                        MovePrevNonSpace (line, ref originEnd);
 
                        //if there is no origin section, then we can't parse the message
@@ -76,8 +92,10 @@ namespace Microsoft.Build.Utilities
 
                        //find the category section, if there is one
                        MoveNextNonSpace (line, ref categoryStart);
+
                        int categoryEnd = line.IndexOf (':', categoryStart) - 1;
                        int messageStart = categoryEnd + 2;
+
                        if (categoryEnd >= 0) {
                                MovePrevNonSpace (line, ref categoryEnd);
                                if (categoryEnd <= categoryStart)
index 3eef06b3b15b7d07dc77eda93a63a4555461b354..57b6e1c4bcd9200cc45d6815891aafc823b0975a 100644 (file)
@@ -155,7 +155,6 @@ namespace MonoTests.EvaluatorTest
                        Assert.AreEqual (124, res);     
                }
 
-#if NET_4_0
                [Test]
                public void DynamicStatement ()
                {
@@ -163,9 +162,7 @@ namespace MonoTests.EvaluatorTest
                        Evaluator.Run ("d = 'a';");
                        Evaluator.Run ("d.GetType ();");
                }
-#endif
 
-#if NET_4_5
                [Test]
                public void AwaitExpression ()
                {
@@ -174,6 +171,14 @@ namespace MonoTests.EvaluatorTest
                        res = Evaluator.Evaluate ("res;");
                        Assert.AreEqual (3, res, "#1");
                }
-#endif
+
+               [Test]
+               public void UsingStatic ()
+               {
+                       Evaluator.Run ("using static System.String;");
+                       var res = Evaluator.Evaluate("Join (\"--\", new [] { \"a\", \"b\" } );");
+                       Assert.AreEqual ("a--b", res);
+               }
+
        }
 }
\ No newline at end of file
index 58d527dfed4e1151e0965d9b797b57d33266d3ce..b245fbf4bf53a7a4faac00be6fc6c46459e37df8 100644 (file)
@@ -8,9 +8,6 @@ LIBRARY_PACKAGE = none
 LIB_MCS_FLAGS = /r:$(corlib) /r:System.dll /r:Mono.Cecil.dll /d:CECIL -keyfile:$(LIBRARY_SNK)
 
 NO_TEST = yes
-
-ifneq (net_2_0, $(PROFILE))
 NO_INSTALL = yes
-endif
 
 include ../../build/library.make
index 8549a93700afaf54b7b1e67d4e40a93a842729f5..f160c4a37a716890c6619877aaff762374e10395 100644 (file)
@@ -35,9 +35,17 @@ namespace Mono.Debugger.Soft
 
                public AppDomainMirror Domain {
                        get {
-                               vm.CheckProtocolVersion (2, 38);
-                               if (domain == null)
-                                       domain = vm.GetDomain (vm.conn.StackFrame_GetDomain (thread.Id, Id));
+                               if (domain == null) {
+                                       if (vm.Version.AtLeast (2, 38)) {
+                                               try {
+                                                       domain = vm.GetDomain (vm.conn.StackFrame_GetDomain (thread.Id, Id));
+                                               } catch (AbsentInformationException) {
+                                                       domain = Thread.Domain;
+                                               }
+                                       } else {
+                                               domain = Thread.Domain;
+                                       }
+                               }
 
                                return domain;
                        }
index ae34470f544823bea487f9808f3f6008435b882c..04adaa24b60815eac58593e59890281527fe42ea 100644 (file)
@@ -37,7 +37,7 @@ TEST_MCS_FLAGS = $(LIB_MCS_FLAGS) -nowarn:0618
 
 EXTRA_DISTFILES = more_build_args
 
-VALID_PROFILE := $(filter net_4_0 net_4_5, $(PROFILE))
+VALID_PROFILE := $(filter net_4_5, $(PROFILE))
 ifndef VALID_PROFILE
 LIBRARY_NAME = dummy-System.Mono.Reactive.Testing.dll
 NO_TEST = yes
index 9a3641a4f2a384ad1f2d97194e26c80079989d79..52a8400507d36d73d7926e703466de0b479f9842 100644 (file)
@@ -2,14 +2,14 @@ thisdir = class/Mono.Security/Test/tools/sockethell
 SUBDIRS = 
 include ../../../../../build/rules.make
 
-LOCAL_MCS_FLAGS = -r:System.dll -r:Mono.Security.dll -r:../../../../lib/net_1_1/nunit.framework.dll
+LOCAL_MCS_FLAGS = -r:System.dll -r:Mono.Security.dll -r:../../../../lib/net_4_5/nunit.framework.dll
 
 all-local install-local uninstall-local:
 
 test-local:
 
 run-test-local: SocketHell.dll
-       mono ../../../../lib/net_1_1/nunit-console.exe SocketHell.dll
+       mono ../../../../lib/net_4_5/nunit-console.exe SocketHell.dll
 
 clean-local:
        rm -f *.dll *.mdb *.pdb TestResult.xml
index 04dc927a0f3ea1f620bf9aba4b6adb8c76e9bfa5..afba81170ee7066f5cf5e5cdd1dc5a623eb945b0 100644 (file)
@@ -10,7 +10,7 @@ NO_TEST = yes
 
 
 # This is a .NET 2.0+ only assembly
-VALID_PROFILE := $(filter net_4_0 net_4_5, $(PROFILE))
+VALID_PROFILE := $(filter net_4_5, $(PROFILE))
 ifndef VALID_PROFILE
 LIBRARY_NAME = dummy-Mono.Simd.dll
 NO_INSTALL = yes
index 4058866774f041fd0afe9d7aa04b6809fcf23a86..6ca1e597917b8d77b0fe1840491181ea89cb6030 100644 (file)
@@ -12,7 +12,7 @@ CLEAN_FILES += $(STRING_MESSAGES)
 EXTRA_DISTFILES = \
        src/ComponentModel/Strings.resx
        
-VALID_PROFILE := $(filter net_4_0 net_4_5 monotouch monodroid xammac mobile mobile_static, $(PROFILE))
+VALID_PROFILE := $(filter net_4_5 monotouch monodroid xammac mobile mobile_static, $(PROFILE))
 ifndef VALID_PROFILE
 LIBRARY_NAME = dummy-System.ComponentModel.Composition.dll
 NO_INSTALL = yes
index 3d9ff9e2586ef8a955a2cd599bd383f4936046aa..2f99958413be205f37337bea0e3be04794aef64b 100644 (file)
@@ -9,16 +9,10 @@ LIB_MCS_FLAGS = \
                 /r:System.Data.dll \
                 /r:System.Xml.dll \
 
-
-ifeq (2.0, $(FRAMEWORK_VERSION))
-# This is a .NET 3.5 only assembly, but built during the 2.0 build
-LIB_MCS_FLAGS += -d:NET_3_5
-endif
-
 TEST_MCS_FLAGS = $(LIB_MCS_FLAGS)
 
 # This is a .NET 3.5+ assembly
-VALID_PROFILE := $(filter net_2_0 net_4_0 net_4_5 monotouch monodroid xammac mobile mobile_static, $(PROFILE))
+VALID_PROFILE := $(filter net_4_5 monotouch monodroid xammac mobile mobile_static, $(PROFILE))
 ifndef VALID_PROFILE
 LIBRARY_NAME = dummy-System.ComponentModel.DataAnnotations.dll
 NO_INSTALL = yes
index d13889968f144abf8cee44891645c21d3931ab78..f3d24ce463011b4a7f987984ba70b39d08bbe687 100644 (file)
@@ -34,6 +34,9 @@ namespace System.Configuration
                 None = 0,
                 IsDefaultCollection = 1,
                 IsRequired = 2,
-                IsKey = 4
+                IsKey = 4,
+                IsTypeStringTransformationRequired  = 8,
+                IsAssemblyStringTransformationRequired = 16,
+                IsVersionCheckRequired = 32
         }
 }
index bdc6757d31d9e474a6fe520aa39794e8fb918a38..27c1e4154794f827de227698985c15b8b7371628 100644 (file)
@@ -6,7 +6,7 @@ check:  local compare
 local: $(TESTS)
        @for i in $(TESTS); do \
                echo running test $$i; \
-               MONO_PATH=../../../lib/net_2_0 mono --debug $$i > $$i.result; \
+               MONO_PATH=../../../lib/net_4_5 mono --debug $$i > $$i.result; \
        done
 
 compare:
index 3480ca910981bf637ad374df4cb3879be7ad9a45..5e21343f14a0be002e4ed21506aed9bf3b9a9304 100644 (file)
@@ -73,22 +73,3 @@ csproj-local:
        $(MAKE) csproj-local intermediate=plaincore/
 endif
 endif
-
-#
-# Android TimeZoneInfo testing....
-#
-
-tzi.exe: ../corlib/System/AndroidPlatform.cs $(wildcard System/TimeZone*.cs) ../../build/common/Consts.cs ../Mono.Options/Mono.Options/Options.cs
-       mcs /debug+ /out:$@ /unsafe "/d:INSIDE_CORLIB;MONODROID;NET_4_0;LIBC;SELF_TEST" $^
-
-android-pull-tzdb:
-       mkdir -p android/tzdb/usr/share/zoneinfo
-       mkdir -p android/tzdb/misc/zoneinfo/zoneinfo
-       android_root=`adb shell echo '$$ANDROID_ROOT' | tr -d "\r"` ; \
-       android_data=`adb shell echo '$$ANDROID_DATA' | tr -d "\r"` ; \
-       adb $(ADB_TARGET) pull $$android_root/usr/share/zoneinfo    android/tzdb/usr/share/zoneinfo ; \
-       adb $(ADB_TARGET) pull $$android_data/misc/zoneinfo/tzdata  android/tzdb/misc/zoneinfo
-       mkdir -p android/tzdb/
-
-android-dump-tzdata: tzi.exe android-pull-tzdb
-       __XA_OVERRIDE_TIMEZONE_ID__=America/New_York ANDROID_ROOT=`pwd` ANDROID_DATA=`pwd` mono --debug tzi.exe -o android/tzdata
index f1df65f6d2d96c5668cc9c3a88f981d50f97897b..e631691981f49896d50d7a879f18c2bbab23f973 100644 (file)
@@ -1,7 +1,3 @@
-System/TimeZoneInfoTest.cs
-System/TimeZoneInfo.AdjustmentRuleTest.cs
-System/TimeZoneInfo.SerializationTest.cs
-System/TimeZoneInfo.TransitionTimeTest.cs
 System.Collections.Generic/HashSetTest.cs
 System.IO.MemoryMappedFiles/MemoryMappedFileTest.cs
 System.IO.Pipes/PipeSecurityTest.cs
index 6a399cac59a7c5e00abecf4117bd1f4032bcfac9..8cb9b6166cc8612641ebc6b659284068b57e6e89 100644 (file)
@@ -51,9 +51,7 @@ namespace MonoTests.System.Security.Cryptography {
                }
                
                [Test]
-#if !MOBILE
                [ExpectedException (typeof (CryptographicException))]
-#endif
                public void CTS_NotAllowed ()
                {
                        // this check is normally (e.g. RijndaelManaged) done later
diff --git a/mcs/class/System.Core/Test/System/TimeZoneInfo.AdjustmentRuleTest.cs b/mcs/class/System.Core/Test/System/TimeZoneInfo.AdjustmentRuleTest.cs
deleted file mode 100644 (file)
index 940b129..0000000
+++ /dev/null
@@ -1,116 +0,0 @@
-using System;
-using System.IO;
-using System.Runtime.Serialization.Formatters.Binary;
-using NUnit.Framework;
-
-namespace MonoTests.System
-{
-       public class TimeZoneInfo_AdjustmentRuleTest
-       {       
-               [TestFixture]
-               public class CreateAdjustmentRuleException
-               {
-                       [Test]
-                       [ExpectedException (typeof (ArgumentException))]
-                       public void DateTimeKindNotUnspecified ()
-                       {
-                               DateTime dateStart = new DateTime (2007,01,01, 0,0,0,DateTimeKind.Utc);
-                               DateTime dateEnd = new DateTime (2008,01,01);
-                               TimeZoneInfo.TransitionTime daylightTransitionStart = TimeZoneInfo.TransitionTime.CreateFixedDateRule (new DateTime (1,1,1,2,0,0), 03, 11);
-                               TimeZoneInfo.TransitionTime daylightTransitionEnd = TimeZoneInfo.TransitionTime.CreateFixedDateRule (new DateTime (1,1,1,2,0,0), 10, 11);
-                               TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule (dateStart, dateEnd, new TimeSpan (1,0,0), daylightTransitionStart, daylightTransitionEnd);
-                       }
-               
-                       [Test]
-                       [ExpectedException (typeof (ArgumentException))]
-                       public void TransitionEndEqualStart ()
-                       {
-                               DateTime dateStart = new DateTime (2007,01,01);
-                               DateTime dateEnd = new DateTime (2008,01,01);
-                               TimeZoneInfo.TransitionTime daylightTransition = TimeZoneInfo.TransitionTime.CreateFixedDateRule (new DateTime (1,1,1,2,0,0), 03, 11);
-                               TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule (dateStart, dateEnd, new TimeSpan (1,0,0), daylightTransition, daylightTransition);
-                       }
-               
-                       [Test]
-                       [ExpectedException (typeof (ArgumentException))]
-                       public void DateIncludesTimeOfDay ()
-                       {
-                               DateTime dateStart = new DateTime (2007,01,01, 0,1,0);
-                               DateTime dateEnd = new DateTime (2008,01,01);
-                               TimeZoneInfo.TransitionTime daylightTransitionStart = TimeZoneInfo.TransitionTime.CreateFixedDateRule (new DateTime (1,1,1,2,0,0), 03, 11);
-                               TimeZoneInfo.TransitionTime daylightTransitionEnd = TimeZoneInfo.TransitionTime.CreateFixedDateRule (new DateTime (1,1,1,2,0,0), 10, 11);
-                               TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule (dateStart, dateEnd, new TimeSpan (1,0,0), daylightTransitionStart, daylightTransitionEnd);
-                       }
-               
-                       [Test]
-                       public void DatesMaxMinValid ()
-                       {
-                               try {
-                                       TimeZoneInfo.TransitionTime daylightTransitionStart = TimeZoneInfo.TransitionTime.CreateFixedDateRule (new DateTime (1,1,1,2,0,0), 03, 11);
-                                       TimeZoneInfo.TransitionTime daylightTransitionEnd = TimeZoneInfo.TransitionTime.CreateFixedDateRule (new DateTime (1,1,1,2,0,0), 10, 11);
-                                       TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule (DateTime.MinValue.Date, DateTime.MaxValue.Date, new TimeSpan (1,0,0), daylightTransitionStart, daylightTransitionEnd);
-                               } catch {
-                                       Assert.Fail ("DateTime.MinValue and MaxValue are not valid...");
-                               }
-                       }
-               
-                       [Test]
-                       [ExpectedException (typeof (ArgumentOutOfRangeException))]
-                       public void EndBeforeStart ()
-                       {
-                               if (Environment.OSVersion.Platform != PlatformID.Unix)
-                                       throw new ArgumentOutOfRangeException ();;
-                               DateTime dateStart = new DateTime (2007,01,01);
-                               DateTime dateEnd = new DateTime (2006,01,01);
-                               TimeZoneInfo.TransitionTime daylightTransitionStart = TimeZoneInfo.TransitionTime.CreateFixedDateRule (new DateTime (1,1,1,2,0,0), 03, 11);
-                               TimeZoneInfo.TransitionTime daylightTransitionEnd = TimeZoneInfo.TransitionTime.CreateFixedDateRule (new DateTime (1,1,1,2,0,0), 10, 11);
-                               TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule (dateStart, dateEnd, new TimeSpan (1,0,0), daylightTransitionStart, daylightTransitionEnd);
-                       }
-               
-                       [Test]
-                       [ExpectedException (typeof (ArgumentOutOfRangeException))]
-                       public void DeltaOutOfRange ()
-                       {
-                               DateTime dateStart = new DateTime (2007,01,01);
-                               DateTime dateEnd = new DateTime (2008,01,01);
-                               TimeZoneInfo.TransitionTime daylightTransitionStart = TimeZoneInfo.TransitionTime.CreateFixedDateRule (new DateTime (1,1,1,2,0,0), 03, 11);
-                               TimeZoneInfo.TransitionTime daylightTransitionEnd = TimeZoneInfo.TransitionTime.CreateFixedDateRule (new DateTime (1,1,1,2,0,0), 10, 11);
-                               TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule (dateStart, dateEnd, new TimeSpan (14,1,0), daylightTransitionStart, daylightTransitionEnd);
-                       }
-               
-                       [Test]
-                       [ExpectedException (typeof (ArgumentOutOfRangeException))]
-                       public void DeltaNotInSeconds ()
-                       {
-                               if (Environment.OSVersion.Platform != PlatformID.Unix)
-                                       throw new ArgumentOutOfRangeException ();;
-                               DateTime dateStart = new DateTime (2007,01,01);
-                               DateTime dateEnd = new DateTime (2008,01,01);
-                               TimeZoneInfo.TransitionTime daylightTransitionStart = TimeZoneInfo.TransitionTime.CreateFixedDateRule (new DateTime (1,1,1,2,0,0), 03, 11);
-                               TimeZoneInfo.TransitionTime daylightTransitionEnd = TimeZoneInfo.TransitionTime.CreateFixedDateRule (new DateTime (1,1,1,2,0,0), 10, 11);
-                               TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule (dateStart, dateEnd, new TimeSpan (55), daylightTransitionStart, daylightTransitionEnd);
-                       }
-               }
-       
-               [TestFixture]
-               public class NonExceptional
-               {
-                       [Test]
-                       public void Serialization_Deserialization ()
-                       {
-                               TimeZoneInfo.TransitionTime start = TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1,1,1,1,0,0), 3, 5, DayOfWeek.Sunday);
-                               TimeZoneInfo.TransitionTime end = TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1,1,1,2,0,0), 10, 5, DayOfWeek.Sunday);
-                               TimeZoneInfo.AdjustmentRule rule = TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule (DateTime.MinValue.Date, DateTime.MaxValue.Date, new TimeSpan (1,0,0), start, end);
-                               MemoryStream stream = new MemoryStream ();
-                               BinaryFormatter formatter = new BinaryFormatter ();
-                               formatter.Serialize (stream, rule);
-                               stream.Position = 0;
-                               TimeZoneInfo.AdjustmentRule deserialized = (TimeZoneInfo.AdjustmentRule) formatter.Deserialize (stream);
-                               stream.Close ();
-                               stream.Dispose ();
-
-                               Assert.IsTrue (rule.Equals (deserialized));
-                       }
-               }
-       }       
-}
diff --git a/mcs/class/System.Core/Test/System/TimeZoneInfo.SerializationTest.cs b/mcs/class/System.Core/Test/System/TimeZoneInfo.SerializationTest.cs
deleted file mode 100644 (file)
index f4d0cfa..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-using System;
-using System.IO;
-using NUnit.Framework;
-
-namespace MonoTests.System
-{
-       [TestFixture]
-       public class SerializedStringTests
-       {
-               [Test]
-               public void SerializeUtc ()
-               {
-                       Assert.AreEqual ("UTC;0;UTC;UTC;UTC;;", TimeZoneInfo.Utc.ToSerializedString ());
-               }
-
-               [Test]
-               public void DeserializeUtc ()
-               {
-                       var utc = TimeZoneInfo.FromSerializedString ("UTC;0;UTC;UTC;UTC;;");
-                       Assert.AreEqual ("UTC", utc.Id);
-                       Assert.AreEqual ("UTC", utc.DisplayName);
-                       Assert.AreEqual ("UTC", utc.StandardName);
-                       Assert.IsFalse (utc.SupportsDaylightSavingTime);
-                       Assert.AreEqual (0, utc.GetAdjustmentRules ().Length);
-               }
-
-               [Test]
-               public void SerializeCustomUtcZoneWithOddNaming ()
-               {
-                       var tz1 = TimeZoneInfo.CreateCustomTimeZone (@"My\; Zone, @1!.", TimeSpan.FromMinutes (0), @"My\\; Zone 1 Name", "My; Zone 1 Standard Time");
-                       Assert.AreEqual (@"My\\\; Zone, @1!.;0;My\\\\\; Zone 1 Name;My\; Zone 1 Standard Time;My\; Zone 1 Standard Time;;", tz1.ToSerializedString ());
-               }
-
-               [Test]
-               public void SerializeCustomZoneWithOddOffset ()
-               {
-                       var tz2 = TimeZoneInfo.CreateCustomTimeZone ("My Zone 2", TimeSpan.FromHours (1.25), "My Zone 2 Name", "My Zone 2 Standard Time");
-                       Assert.AreEqual ("My Zone 2;75;My Zone 2 Name;My Zone 2 Standard Time;My Zone 2 Standard Time;;", tz2.ToSerializedString ());
-               }
-
-               [Test]
-               public void SerializeCustomZoneWithFloatingDaylightTransitions ()
-               {
-                       var tz3rules = new TimeZoneInfo.AdjustmentRule[] { TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule (new DateTime (1, 1, 1), new DateTime (9999, 12, 31), TimeSpan.FromMinutes (23), TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1, 1, 1, 2, 15, 58, 0), 3, 2, DayOfWeek.Tuesday), TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1, 1, 1, 2, 15, 59, 999), 6, 2, DayOfWeek.Tuesday)) };
-                       var tz3 = TimeZoneInfo.CreateCustomTimeZone ("My Zone 3", TimeSpan.FromHours (-4), "My Zone 3 Name", "My Zone 3 Standard Time", "My Zone 3 Daylight Time", tz3rules);
-                       Assert.AreEqual ("My Zone 3;-240;My Zone 3 Name;My Zone 3 Standard Time;My Zone 3 Daylight Time;[01:01:0001;12:31:9999;23;[0;02:15:58;3;2;2;];[0;02:15:59.999;6;2;2;];];", tz3.ToSerializedString ());
-               }
-
-               [Test]
-               public void SerializeCustomZoneWithFixedDaylightTransitions ()
-               {
-                       var tz4rules = new TimeZoneInfo.AdjustmentRule[] { TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule (new DateTime (1, 1, 1), new DateTime (9999, 12, 31), TimeSpan.FromMinutes (23), TimeZoneInfo.TransitionTime.CreateFixedDateRule (new DateTime (1, 1, 1, 2, 15, 59, 48), 3, 2), TimeZoneInfo.TransitionTime.CreateFixedDateRule (new DateTime (1, 1, 1, 2, 15, 59, 999), 6, 2)) };
-                       var tz4 = TimeZoneInfo.CreateCustomTimeZone ("My Zone 4", TimeSpan.FromHours (-4), "My Zone 4 Name", "My Zone 4 Standard Time", "My Zone 4 Daylight Time", tz4rules);
-                       Assert.AreEqual ("My Zone 4;-240;My Zone 4 Name;My Zone 4 Standard Time;My Zone 4 Daylight Time;[01:01:0001;12:31:9999;23;[1;02:15:59.048;3;2;];[1;02:15:59.999;6;2;];];", tz4.ToSerializedString ());
-               }
-
-               [Test]
-               public void SerializeCustomZoneWithMultipleDaylightRules ()
-               {
-                       var tz5rules = new TimeZoneInfo.AdjustmentRule[] {
-                               TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule (new DateTime (1, 1, 1), new DateTime (2012, 12, 31), TimeSpan.FromMinutes (23), TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1, 1, 1, 2, 15, 59, 999), 3, 2, DayOfWeek.Tuesday), TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1, 1, 1, 2, 15, 59, 999), 6, 2, DayOfWeek.Tuesday)),
-                               TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule (new DateTime (2013, 1, 1), new DateTime (9999, 12, 31), TimeSpan.FromMinutes (48), TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1, 1, 1, 2, 15, 59, 999), 3, 2, DayOfWeek.Tuesday), TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1, 1, 1, 2, 15, 59, 999), 6, 2, DayOfWeek.Tuesday))
-                       };
-                       var tz5 = TimeZoneInfo.CreateCustomTimeZone ("My Zone 5", TimeSpan.FromHours (-6.75), "My Zone 5 Name", "My Zone 5 Standard Time", "My Zone 5 Daylight Time", tz5rules);
-                       Assert.AreEqual ("My Zone 5;-405;My Zone 5 Name;My Zone 5 Standard Time;My Zone 5 Daylight Time;[01:01:0001;12:31:2012;23;[0;02:15:59.999;3;2;2;];[0;02:15:59.999;6;2;2;];][01:01:2013;12:31:9999;48;[0;02:15:59.999;3;2;2;];[0;02:15:59.999;6;2;2;];];", tz5.ToSerializedString ());
-               }
-
-               [Test]
-               public void DeserializeCustomZoneWithOddNamingAndMultipleDaylightRules ()
-               {
-                       var rule1 = TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule (new DateTime (1, 1, 1), new DateTime (2012, 12, 31), TimeSpan.FromMinutes (23), TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1, 1, 1, 2, 15, 59, 999), 3, 2, DayOfWeek.Tuesday), TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1, 1, 1, 2, 15, 59, 999), 6, 2, DayOfWeek.Tuesday));
-                       var rule2 = TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule (new DateTime (2013, 1, 1), new DateTime (9999, 12, 31), TimeSpan.FromMinutes (48), TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1, 1, 1, 2, 15, 59, 999), 3, 2, DayOfWeek.Tuesday), TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1, 1, 1, 2, 15, 59, 999), 6, 2, DayOfWeek.Tuesday));
-
-                       var tz1 = TimeZoneInfo.FromSerializedString ("My\\; Zone 5;-405;My Zone\\; 5 Name;My Zone 5\\; Standard Time;My Zone 5 Daylight\\; Time;[01:01:0001;12:31:2012;23;[0;02:15:59.999;3;2;2;];[0;02:15:59.999;6;2;2;];][01:01:2013;12:31:9999;48;[0;02:15:59.999;3;2;2;];[0;02:15:59.999;6;2;2;];];");
-                       Assert.AreEqual ("My; Zone 5", tz1.Id);
-                       Assert.AreEqual ("My Zone; 5 Name", tz1.DisplayName);
-                       Assert.AreEqual ("My Zone 5; Standard Time", tz1.StandardName);
-                       Assert.AreEqual ("My Zone 5 Daylight; Time", tz1.DaylightName);
-                       Assert.AreEqual (TimeSpan.FromMinutes (-405), tz1.BaseUtcOffset);
-                       Assert.IsTrue (tz1.SupportsDaylightSavingTime);
-
-                       var deserializedRules = tz1.GetAdjustmentRules ();
-                       Assert.AreEqual (2, deserializedRules.Length);
-                       Assert.IsFalse (deserializedRules [0].Equals (deserializedRules [1]));
-                       Assert.IsTrue (rule1.Equals (deserializedRules [0]));
-                       Assert.IsTrue (rule2.Equals (deserializedRules [1]));
-               }
-
-               [Test]
-               public void DeserializeAndUseEasternTimeZone ()
-               {
-                       var et = TimeZoneInfo.FromSerializedString (@"Eastern Standard Time;-300;(UTC-05:00) Eastern Time (US & Canada);Eastern Standard Time;Eastern Daylight Time;[01:01:0001;12:31:2006;60;[0;02:00:00;4;1;0;];[0;02:00:00;10;5;0;];][01:01:2007;12:31:9999;60;[0;02:00:00;3;2;0;];[0;02:00:00;11;1;0;];];");
-                       var testDate = new DateTime (2014, 8, 1, 6, 0, 0, DateTimeKind.Unspecified);
-                       Assert.AreEqual (TimeSpan.FromHours (-4), et.GetUtcOffset (testDate));
-               }
-       }
-}
diff --git a/mcs/class/System.Core/Test/System/TimeZoneInfo.TransitionTimeTest.cs b/mcs/class/System.Core/Test/System/TimeZoneInfo.TransitionTimeTest.cs
deleted file mode 100644 (file)
index f9a006c..0000000
+++ /dev/null
@@ -1,140 +0,0 @@
-
-using System;
-using System.IO;
-using System.Runtime.Serialization.Formatters.Binary;
-using NUnit.Framework;
-
-namespace MonoTests.System
-{
-       public class TimeZoneInfo_TransitionTimeTest
-       {       
-               [TestFixture]
-               public class CreateFixedDateRuleExceptions
-               {
-                       [Test]
-                       [ExpectedException (typeof (ArgumentException))]
-                       public void DateHasNonDefaultComponent ()
-                       {
-                               TimeZoneInfo.TransitionTime.CreateFixedDateRule (new DateTime (1, 1, 10, 2, 0, 0), 3, 15);
-                       }
-               
-                       [Test]
-                       [ExpectedException (typeof (ArgumentException))]
-                       public void KindNotUnspecified()
-                       {
-                               TimeZoneInfo.TransitionTime.CreateFixedDateRule (new DateTime (1, 1, 1, 2, 0, 0, DateTimeKind.Utc), 3, 15);
-                       }
-               
-                       [Test]
-                       [ExpectedException (typeof (ArgumentException))]
-                       public void DateNotInMilliSeconds ()
-                       {
-                               TimeZoneInfo.TransitionTime.CreateFixedDateRule (new DateTime (50), 3, 15);
-                       }
-               
-                       [Test]
-                       [ExpectedException (typeof (ArgumentOutOfRangeException))]
-                       public void MonthOutOfRange ()
-                       {
-                               TimeZoneInfo.TransitionTime.CreateFixedDateRule (new DateTime (1, 1, 1, 2, 0, 0), 13, 15);
-                       }
-               
-                       [Test]
-                       [ExpectedException (typeof (ArgumentOutOfRangeException))]
-                       public void DayOutOfRange ()
-                       {
-                               TimeZoneInfo.TransitionTime.CreateFixedDateRule (new DateTime (1, 1, 1, 2, 0, 0), 3, -2);
-                       }
-               }
-               
-               [TestFixture]
-               public class CreateFloatingDateRuleExceptions
-               {
-                       [Test]
-                       [ExpectedException (typeof (ArgumentException))]
-                       public void DateHasNonDefaultComponent ()
-                       {
-                               TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1, 1, 10, 2, 0, 0), 3, 4, DayOfWeek.Sunday);
-                       }
-               
-                       [Test]
-                       [ExpectedException (typeof (ArgumentException))]
-                       public void KindNotUnspecified()
-                       {
-                               TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1, 1, 1, 2, 0, 0, DateTimeKind.Utc), 3, 4, DayOfWeek.Sunday);
-                       }
-               
-                       [Test]
-                       [ExpectedException (typeof (ArgumentException))]
-                       public void DateNotInSeconds ()
-                       {
-                               TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (50), 3, 4, DayOfWeek.Sunday);
-                       }
-               
-                       [Test]
-                       [ExpectedException (typeof (ArgumentOutOfRangeException))]
-                       public void MonthOutOfRange ()
-                       {
-                               TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1, 1, 1, 2, 0, 0), 13, 4, DayOfWeek.Sunday);
-                       }
-               
-                       [Test]
-                       [ExpectedException (typeof (ArgumentOutOfRangeException))]
-                       public void WeekOutOfRange ()
-                       {
-                               TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1, 1, 1, 2, 0, 0), 3, -2, DayOfWeek.Sunday);
-                       }
-               
-                       [Test]
-                       [ExpectedException (typeof (ArgumentOutOfRangeException))]
-                       public void DayOfWeekOutOfRange ()
-                       {
-                               TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1, 1, 1, 2, 0, 0), 3, 4, (DayOfWeek)12);
-                       }
-               }
-
-               [TestFixture]
-               public class NonExceptional {
-
-                       [Test]
-                       public void EqualsObject ()
-                       {
-                               DateTime dt = new DateTime (1, 1, 1, 2, 0, 0, DateTimeKind.Unspecified);
-                               TimeZoneInfo.TransitionTime tt1 = TimeZoneInfo.TransitionTime.CreateFixedDateRule (dt, 1, 21);
-                               Assert.IsFalse (tt1.Equals (null), "null"); // found using Gendarme :)
-                               Assert.IsTrue (tt1.Equals (tt1), "self");
-                               TimeZoneInfo.TransitionTime tt2 = TimeZoneInfo.TransitionTime.CreateFixedDateRule (dt, 2, 12);
-                               Assert.IsFalse (tt2.Equals (tt1), "1!=2");
-                               Assert.IsFalse (tt1.Equals (tt2), "2!=1");
-                       }
-                       
-                       [Test]
-                       public void Serialize_Deserialize_FloatingDateRule ()
-                       {
-                               TimeZoneInfo.TransitionTime floatingDateRule = TimeZoneInfo.TransitionTime.CreateFloatingDateRule(new DateTime(1, 1, 1, 1, 0, 0), 3, 5, DayOfWeek.Sunday);
-                               MemoryStream stream = new MemoryStream ();
-                               BinaryFormatter formatter = new BinaryFormatter ();
-                               formatter.Serialize (stream, floatingDateRule);
-                               stream.Position = 0;
-                               TimeZoneInfo.TransitionTime deserialized = (TimeZoneInfo.TransitionTime) formatter.Deserialize (stream);
-                               stream.Close ();
-                               stream.Dispose ();
-                               Assert.AreEqual (floatingDateRule, deserialized);
-                       }
-
-                       [Test]
-                       public void Serialize_Deserialize_FixedDateRule ()
-                       {
-                               TimeZoneInfo.TransitionTime fixedDateRule = TimeZoneInfo.TransitionTime.CreateFixedDateRule(new DateTime(1, 1, 1, 1, 0, 0), 3, 12);
-                               MemoryStream stream = new MemoryStream ();
-                               BinaryFormatter formatter = new BinaryFormatter ();
-                               formatter.Serialize (stream, fixedDateRule);
-                               stream.Position = 0;
-                               TimeZoneInfo.TransitionTime deserialized = (TimeZoneInfo.TransitionTime) formatter.Deserialize (stream);
-                               stream.Close ();
-                               stream.Dispose ();
-                               Assert.AreEqual (fixedDateRule, deserialized);
-                       }
-               }
-       }
-}
diff --git a/mcs/class/System.Core/Test/System/TimeZoneInfoTest.cs b/mcs/class/System.Core/Test/System/TimeZoneInfoTest.cs
deleted file mode 100644 (file)
index 4648d8f..0000000
+++ /dev/null
@@ -1,986 +0,0 @@
-/*
- * TimeZoneInfo.Tests
- *
- * Author(s)
- *     Stephane Delcroix <stephane@delcroix.org>
- *
- * Copyright 2011 Xamarin Inc.
- *
- * Permission is hereby granted, free of charge, to any person obtaining
- * a copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sublicense, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- * 
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- * 
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
- * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-using System;
-using System.IO;
-using System.Runtime.Serialization.Formatters.Binary;
-using System.Collections;
-
-using NUnit.Framework;
-namespace MonoTests.System
-{
-       public class TimeZoneInfoTest
-       {
-               [TestFixture]
-               public class PropertiesTests
-               {
-                       [Test]
-                       public void GetLocal ()
-                       {
-                               if (Environment.OSVersion.Platform != PlatformID.Unix)
-                                       Assert.Ignore ("Not running on Unix.");
-                               TimeZoneInfo local = TimeZoneInfo.Local;
-                               Assert.IsNotNull (local);
-                               Assert.IsTrue (true);
-                       }
-               }
-
-               [TestFixture]
-               public class CreateCustomTimezoneTests
-               {
-                       [Test]
-                       [ExpectedException (typeof (ArgumentNullException))]
-                       public void IdIsNullException ()
-                       {
-                               TimeZoneInfo.CreateCustomTimeZone (null, new TimeSpan (0), null, null); 
-                       }
-               
-                       [Test]
-                       [ExpectedException (typeof (ArgumentException))]
-                       public void IdIsEmptyString ()
-                       {
-                               TimeZoneInfo.CreateCustomTimeZone ("", new TimeSpan (0), null, null);   
-                       }
-               
-                       [Test]
-                       [ExpectedException (typeof (ArgumentException))]
-                       public void OffsetIsNotMinutes ()
-                       {
-                               TimeZoneInfo.CreateCustomTimeZone ("mytimezone", new TimeSpan (0, 0, 55), null, null);  
-                       }
-               
-                       [Test]
-                       [ExpectedException (typeof (ArgumentOutOfRangeException))]
-                       public void OffsetTooBig ()
-                       {
-                               TimeZoneInfo.CreateCustomTimeZone ("mytimezone", new TimeSpan (14, 1, 0), null, null);
-                       }
-               
-                       [Test]
-                       [ExpectedException (typeof (ArgumentOutOfRangeException))]
-                       public void OffsetTooSmall ()
-                       {
-                               TimeZoneInfo.CreateCustomTimeZone ("mytimezone", - new TimeSpan (14, 1, 0), null, null);
-                       }
-               
-               #if STRICT
-                       [Test]
-                       [ExpectedException (typeof (ArgumentException))]
-                       public void IdLongerThan32 ()
-                       {
-                               TimeZoneInfo.CreateCustomTimeZone ("12345678901234567890123456789012345", new TimeSpan (0), null, null);        
-                       }       
-               #endif
-               
-                       [Test]
-                       [ExpectedException (typeof (InvalidTimeZoneException))]
-                       public void AdjustmentRulesOverlap ()
-                       {
-                               TimeZoneInfo.TransitionTime s1 = TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1,1,1,4,0,0), 3, 2, DayOfWeek.Sunday);
-                               TimeZoneInfo.TransitionTime e1 = TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1,1,1,4,0,0), 10, 2, DayOfWeek.Sunday);
-                               TimeZoneInfo.AdjustmentRule r1 = TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule (new DateTime (2000,1,1), new DateTime (2005,1,1), new TimeSpan (1,0,0), s1, e1);
-                               TimeZoneInfo.TransitionTime s2 = TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1,1,1,4,0,0), 2, 2, DayOfWeek.Sunday);
-                               TimeZoneInfo.TransitionTime e2 = TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1,1,1,4,0,0), 11, 2, DayOfWeek.Sunday);
-                               TimeZoneInfo.AdjustmentRule r2 = TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule (new DateTime (2004,1,1), new DateTime (2007,1,1), new TimeSpan (1,0,0), s2, e2);
-                               TimeZoneInfo.CreateCustomTimeZone ("mytimezone", new TimeSpan (6,0,0),null,null,null,new TimeZoneInfo.AdjustmentRule[] {r1, r2});
-                       }
-               
-                       [Test]
-                       [ExpectedException (typeof (InvalidTimeZoneException))]
-                       public void RulesNotOrdered ()
-                       {
-                               TimeZoneInfo.TransitionTime s1 = TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1,1,1,4,0,0), 3, 2, DayOfWeek.Sunday);
-                               TimeZoneInfo.TransitionTime e1 = TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1,1,1,4,0,0), 10, 2, DayOfWeek.Sunday);
-                               TimeZoneInfo.AdjustmentRule r1 = TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule (new DateTime (2000,1,1), new DateTime (2005,1,1), new TimeSpan (1,0,0), s1, e1);
-                               TimeZoneInfo.TransitionTime s2 = TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1,1,1,4,0,0), 2, 2, DayOfWeek.Sunday);
-                               TimeZoneInfo.TransitionTime e2 = TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1,1,1,4,0,0), 11, 2, DayOfWeek.Sunday);
-                               TimeZoneInfo.AdjustmentRule r2 = TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule (new DateTime (2006,1,1), new DateTime (2007,1,1), new TimeSpan (1,0,0), s2, e2);
-                               TimeZoneInfo.CreateCustomTimeZone ("mytimezone", new TimeSpan (6,0,0),null,null,null,new TimeZoneInfo.AdjustmentRule[] {r2, r1});
-                       }
-               
-                       [Test]
-                       [ExpectedException (typeof (InvalidTimeZoneException))]
-                       public void OffsetOutOfRange ()
-                       {
-                               TimeZoneInfo.TransitionTime startTransition = TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1,1,1,4,0,0), 3, 2, DayOfWeek.Sunday);
-                               TimeZoneInfo.TransitionTime endTransition = TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1,1,1,4,0,0), 10, 2, DayOfWeek.Sunday);
-                               TimeZoneInfo.AdjustmentRule rule = TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule (new DateTime (2000,1,1), new DateTime (2005,1,1), new TimeSpan (3,0,0), startTransition, endTransition);
-                               TimeZoneInfo.CreateCustomTimeZone ("mytimezone", new TimeSpan (12,0,0),null,null,null,new TimeZoneInfo.AdjustmentRule[] {rule});
-                       }
-               
-                       [Test]
-                       [ExpectedException (typeof (InvalidTimeZoneException))]
-                       public void NullRule ()
-                       {
-                               TimeZoneInfo.CreateCustomTimeZone ("mytimezone", new TimeSpan (12,0,0),null,null,null,new TimeZoneInfo.AdjustmentRule[] {null});
-                       }
-               
-                       [Test]
-                       [ExpectedException (typeof (InvalidTimeZoneException))]
-                       public void MultiplesRulesForDate ()
-                       {
-                               TimeZoneInfo.TransitionTime s1 = TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1,1,1,4,0,0), 3, 2, DayOfWeek.Sunday);
-                               TimeZoneInfo.TransitionTime e1 = TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1,1,1,4,0,0), 10, 2, DayOfWeek.Sunday);
-                               TimeZoneInfo.AdjustmentRule r1 = TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule (new DateTime (2000,1,1), new DateTime (2005,1,1), new TimeSpan (1,0,0), s1, e1);
-                               TimeZoneInfo.TransitionTime s2 = TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1,1,1,4,0,0), 2, 2, DayOfWeek.Sunday);
-                               TimeZoneInfo.TransitionTime e2 = TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1,1,1,4,0,0), 11, 2, DayOfWeek.Sunday);
-                               TimeZoneInfo.AdjustmentRule r2 = TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule (new DateTime (2005,1,1), new DateTime (2007,1,1), new TimeSpan (1,0,0), s2, e2);
-                               TimeZoneInfo.CreateCustomTimeZone ("mytimezone", new TimeSpan (6,0,0),null,null,null,new TimeZoneInfo.AdjustmentRule[] {r1, r2});
-                       }
-
-                       [Test]
-                       public void SupportsDaylightSavingTime_NonEmptyAdjustmentRule ()
-                       {
-                               TimeZoneInfo.TransitionTime s1 = TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1,1,1,4,0,0), 3, 2, DayOfWeek.Sunday);
-                               TimeZoneInfo.TransitionTime e1 = TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1,1,1,4,0,0), 10, 2, DayOfWeek.Sunday);
-                               TimeZoneInfo.AdjustmentRule r1 = TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule (new DateTime (2000,1,1), new DateTime (2005,1,1), new TimeSpan (1,0,0), s1, e1);
-                               TimeZoneInfo tz = TimeZoneInfo.CreateCustomTimeZone ("mytimezone", new TimeSpan (6,0,0),null,null,null,new TimeZoneInfo.AdjustmentRule[] {r1});
-                               Assert.IsTrue (tz.SupportsDaylightSavingTime);
-                       }
-
-                       [Test]
-                       public void SupportsDaylightSavingTime_EmptyAdjustmentRule ()
-                       {
-                               TimeZoneInfo tz = TimeZoneInfo.CreateCustomTimeZone ("mytimezone", new TimeSpan (6,0,0),null,null,null,null);
-                               Assert.IsFalse (tz.SupportsDaylightSavingTime);
-                       }
-
-                       [Test]
-                       public void SupportsDaylightSavingTime_NonEmptyAdjustmentRule_DisableDaylightSavingTime ()
-                       {
-                               TimeZoneInfo.TransitionTime s1 = TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1,1,1,4,0,0), 3, 2, DayOfWeek.Sunday);
-                               TimeZoneInfo.TransitionTime e1 = TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1,1,1,4,0,0), 10, 2, DayOfWeek.Sunday);
-                               TimeZoneInfo.AdjustmentRule r1 = TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule (new DateTime (2000,1,1), new DateTime (2005,1,1), new TimeSpan (1,0,0), s1, e1);
-                               TimeZoneInfo tz = TimeZoneInfo.CreateCustomTimeZone ("mytimezone", new TimeSpan (6,0,0),null,null,null,new TimeZoneInfo.AdjustmentRule[] {r1}, true);
-                               Assert.IsFalse (tz.SupportsDaylightSavingTime);
-                       }
-
-                       [Test]
-                       public void SupportsDaylightSavingTime_EmptyAdjustmentRule_DisableDaylightSavingTime ()
-                       {
-                               TimeZoneInfo tz = TimeZoneInfo.CreateCustomTimeZone ("mytimezone", new TimeSpan (6,0,0),null,null,null,null,true);
-                               Assert.IsFalse (tz.SupportsDaylightSavingTime);
-                       }
-               }
-               
-               [TestFixture]
-               public class IsDaylightSavingTimeTests
-               {
-                       TimeZoneInfo london;
-               
-                       [SetUp]
-                       public void CreateTimeZones ()
-                       {
-                               TimeZoneInfo.TransitionTime start = TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1,1,1,1,0,0), 3, 5, DayOfWeek.Sunday);
-                               TimeZoneInfo.TransitionTime end = TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1,1,1,2,0,0), 10, 5, DayOfWeek.Sunday);
-                               TimeZoneInfo.AdjustmentRule rule = TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule (DateTime.MinValue.Date, DateTime.MaxValue.Date, new TimeSpan (1,0,0), start, end);
-                               london = TimeZoneInfo.CreateCustomTimeZone ("Europe/London", new TimeSpan (0), "Europe/London", "British Standard Time", "British Summer Time", new TimeZoneInfo.AdjustmentRule [] {rule});
-                       }
-               
-                       [Test]
-                       public void NoDSTInUTC ()
-                       {
-                               DateTime june01 = new DateTime (2007, 06, 01);
-                               Assert.IsFalse (TimeZoneInfo.Utc.IsDaylightSavingTime (june01));
-                       }
-               
-                       [Test]
-                       public void DSTInLondon ()
-                       {
-                               if (Environment.OSVersion.Platform != PlatformID.Unix)
-                                       Assert.Ignore ("Not running on Unix.");
-                               DateTime june01 = new DateTime (2007, 06, 01);
-                               DateTime xmas = new DateTime (2007, 12, 25);
-                               Assert.IsTrue (london.IsDaylightSavingTime (june01), "June 01 is DST in London");
-                               Assert.IsFalse (london.IsDaylightSavingTime (xmas), "Xmas is not DST in London");
-                       }
-               
-                       [Test]
-                       public void DSTTransisions ()
-                       {
-                               if (Environment.OSVersion.Platform != PlatformID.Unix)
-                                       Assert.Ignore ("Not running on Unix.");
-                               DateTime beforeDST = new DateTime (2007, 03, 25, 0, 59, 59, DateTimeKind.Unspecified);
-                               DateTime startDST = new DateTime (2007, 03, 25, 2, 0, 0, DateTimeKind.Unspecified);
-                               DateTime endDST = new DateTime (2007, 10, 28, 1, 59, 59, DateTimeKind.Unspecified);
-                               DateTime afterDST = new DateTime (2007, 10, 28, 2, 0, 0, DateTimeKind.Unspecified);
-                               Assert.IsFalse (london.IsDaylightSavingTime (beforeDST), "Just before DST");
-                               Assert.IsTrue (london.IsDaylightSavingTime (startDST), "the first seconds of DST");
-                               Assert.IsFalse (london.IsDaylightSavingTime (endDST), "The last seconds of DST");
-                               Assert.IsFalse (london.IsDaylightSavingTime (afterDST), "Just after DST");
-                       }
-               
-                       [Test]
-                       public void DSTTransisionsUTC ()
-                       {
-                               DateTime beforeDST = new DateTime (2007, 03, 25, 0, 59, 59, DateTimeKind.Utc);
-                               DateTime startDST = new DateTime (2007, 03, 25, 1, 0, 0, DateTimeKind.Utc);
-                               DateTime endDST = new DateTime (2007, 10, 28, 0, 59, 59, DateTimeKind.Utc);
-                               DateTime afterDST = new DateTime (2007, 10, 28, 1, 0, 0, DateTimeKind.Utc);
-                               Assert.IsFalse (london.IsDaylightSavingTime (beforeDST), "Just before DST");
-                               Assert.IsTrue (london.IsDaylightSavingTime (startDST), "the first seconds of DST");
-                               Assert.IsTrue (london.IsDaylightSavingTime (endDST), "The last seconds of DST");
-                               Assert.IsFalse (london.IsDaylightSavingTime (afterDST), "Just after DST");
-                       }
-               
-               #if SLOW_TESTS
-                       [Test]
-                       public void MatchTimeZoneBehavior ()
-                       {
-                               TimeZone tzone = TimeZone.CurrentTimeZone;
-                               TimeZoneInfo local = TimeZoneInfo.Local;
-                               for (DateTime date = new DateTime (2007, 01, 01, 0, 0, 0, DateTimeKind.Local); date < new DateTime (2007, 12, 31, 23, 59, 59); date += new TimeSpan (0,1,0)) {
-                                       date = DateTime.SpecifyKind (date, DateTimeKind.Local);
-                                       if (local.IsInvalidTime (date))
-                                               continue;
-                                       Assert.IsTrue (tzone.IsDaylightSavingTime (date) == local.IsDaylightSavingTime (date));
-                               }
-                       }
-               #endif
-                       [Test (Description="Description xambug #17155")]
-                       public void AdjustmentRuleAfterNewYears ()
-                       {
-                               TimeZoneInfo tz;
-                               if (Environment.OSVersion.Platform == PlatformID.Unix)
-                                       tz = TimeZoneInfo.FindSystemTimeZoneById ("Pacific/Auckland"); // *nix
-                               else
-                                       tz = TimeZoneInfo.FindSystemTimeZoneById ("New Zealand Standard Time"); // Windows
-
-                               // DST start: 9/29/2013 2:00:00 AM
-                               // DST end: 4/6/2014 3:00:00 AM
-                               DateTime dt = new DateTime (2014, 1, 9, 23, 0, 0, DateTimeKind.Utc);
-                               Assert.IsTrue (tz.IsDaylightSavingTime (dt), "#1.1");
-
-                               // DST start: 9/29/2014 2:00:00 AM
-                               // DST end: 4/6/2015 3:00:00 AM
-                               dt = new DateTime (2014, 6, 9, 23, 0, 0, DateTimeKind.Utc);
-                               Assert.IsFalse (tz.IsDaylightSavingTime (dt), "#2.1");
-
-                               // DST start: 9/29/2014 2:00:00 AM
-                               // DST end: 4/6/2015 3:00:00 AM
-                               dt = new DateTime (2014, 10, 9, 23, 0, 0, DateTimeKind.Utc);
-                               Assert.IsTrue (tz.IsDaylightSavingTime (dt), "#3.1");
-                       }
-
-                       [Test] //Covers #26008
-                       public void DSTWithFloatingDateRule ()
-                       {
-                               // Construct a custom time zone where daylight saving time starts on the
-                               // 2nd Sunday in March.
-                               var transitionToDaylight = TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1, 1, 1, 2, 0, 0), 3, 2, DayOfWeek.Sunday);
-                               var transitionToStandard = TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1, 1, 1, 2, 0, 0), 11, 1, DayOfWeek.Sunday);
-                               var adjustment = TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule (DateTime.MinValue.Date, DateTime.MaxValue.Date, new TimeSpan (1, 0, 0), transitionToDaylight, transitionToStandard);
-                               var timeZone = TimeZoneInfo.CreateCustomTimeZone ("BugCheck", new TimeSpan (-8, 0, 0), "Testing", "Testing Standard", "Testing Daylight", new TimeZoneInfo.AdjustmentRule [] { adjustment });
-                               // See if March 7, 2014 is listed as being during daylight saving time.
-                               // If it is DST, then the runtime has the bug that we are looking for.
-                               Assert.IsFalse (timeZone.IsDaylightSavingTime (new DateTime (2014, 3, 7, 12, 0, 0, DateTimeKind.Unspecified)));
-                       }
-               }
-               
-               [TestFixture]
-               public class ConvertTimeTests
-               {
-                       TimeZoneInfo london;
-               
-                       [SetUp]
-                       public void CreateTimeZones ()
-                       {
-                               TimeZoneInfo.TransitionTime start = TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1,1,1,1,0,0), 3, 5, DayOfWeek.Sunday);
-                               TimeZoneInfo.TransitionTime end = TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1,1,1,2,0,0), 10, 5, DayOfWeek.Sunday);
-                               TimeZoneInfo.AdjustmentRule rule = TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule (DateTime.MinValue.Date, DateTime.MaxValue.Date, new TimeSpan (1,0,0), start, end);
-                               london = TimeZoneInfo.CreateCustomTimeZone ("Europe/London", new TimeSpan (0), "Europe/London", "British Standard Time", "British Summer Time", new TimeZoneInfo.AdjustmentRule [] {rule});
-                       }
-               
-                       [Test]
-                       [ExpectedException (typeof (ArgumentException))]
-                       public void ConvertFromUtc_KindIsLocalException ()
-                       {
-                               if (Environment.OSVersion.Platform != PlatformID.Unix)
-                                       throw new ArgumentException ();
-                               TimeZoneInfo.ConvertTimeFromUtc (new DateTime (2007, 5, 3, 11, 8, 0, DateTimeKind.Local), TimeZoneInfo.Local);  
-                       }
-               
-                       [Test]
-                       [ExpectedException (typeof (ArgumentNullException))]
-                       public void ConvertFromUtc_DestinationTimeZoneIsNullException ()
-                       {
-                               TimeZoneInfo.ConvertTimeFromUtc (new DateTime (2007, 5, 3, 11, 8, 0), null);            
-                       }
-               
-                       [Test]
-                       public void ConvertFromUtc_DestinationIsUTC ()
-                       {
-                               DateTime now = DateTime.UtcNow;
-                               DateTime converted = TimeZoneInfo.ConvertTimeFromUtc (now, TimeZoneInfo.Utc);
-                               Assert.AreEqual (now, converted);
-                       }
-                       
-                       [Test]
-                       public void ConvertFromUTC_ConvertInWinter ()
-                       {
-                               if (Environment.OSVersion.Platform != PlatformID.Unix)
-                                       Assert.Ignore ("Not running on Unix.");
-                               DateTime utc = new DateTime (2007, 12, 25, 12, 0, 0);
-                               DateTime converted = TimeZoneInfo.ConvertTimeFromUtc (utc, london);
-                               Assert.AreEqual (utc, converted);
-                       }
-               
-                       [Test]
-                       public void ConvertFromUtc_ConvertInSummer ()
-                       {
-                               if (Environment.OSVersion.Platform != PlatformID.Unix)
-                                       Assert.Ignore ("Not running on Unix.");
-                               DateTime utc = new DateTime (2007, 06, 01, 12, 0, 0);
-                               DateTime converted = TimeZoneInfo.ConvertTimeFromUtc (utc, london);
-                               Assert.AreEqual (utc + new TimeSpan (1,0,0), converted);
-                       }
-               
-                       [Test]
-                       public void ConvertToUTC_KindIsUtc ()
-                       {
-                               DateTime now = DateTime.UtcNow;
-                               Assert.AreEqual (now.Kind, DateTimeKind.Utc);
-                               DateTime converted = TimeZoneInfo.ConvertTimeToUtc (now);
-                               Assert.AreEqual (now, converted);
-                       }
-               
-                       [Test]
-                       [ExpectedException (typeof (ArgumentException))]
-                       public void ConvertToUTC_KindIsUTCButSourceIsNot ()
-                       {
-                               TimeZoneInfo.ConvertTimeToUtc (new DateTime (2007, 5, 3, 12, 8, 0, DateTimeKind.Utc), london);
-                       }
-               
-                       [Test]
-                       [ExpectedException (typeof (ArgumentException))]
-                       public void ConvertToUTC_KindIsLocalButSourceIsNot ()
-                       {
-                               if (Environment.OSVersion.Platform != PlatformID.Unix)
-                                       throw new ArgumentException ();
-                               TimeZoneInfo.ConvertTimeToUtc (new DateTime (2007, 5, 3, 12, 8, 0, DateTimeKind.Local), london);        
-                       }
-               
-                       [Test]
-                       [ExpectedException (typeof (ArgumentException))]
-                       public void ConvertToUTC_InvalidDate ()
-                       {
-                               TimeZoneInfo.ConvertTimeToUtc (new DateTime (2007, 3, 25, 1, 30, 0), london);
-                       }
-               
-                       [Test]
-                       [ExpectedException (typeof (ArgumentNullException))]
-                       public void ConvertToUTC_SourceIsNull ()
-                       {
-                               TimeZoneInfo.ConvertTimeToUtc (new DateTime (2007, 5, 3, 12, 16, 0), null);
-                       }
-               
-               #if SLOW_TESTS
-                       [Test]
-                       public void ConvertToUtc_MatchDateTimeBehavior ()
-                       {
-                               for (DateTime date = new DateTime (2007, 01, 01, 0, 0, 0); date < new DateTime (2007, 12, 31, 23, 59, 59); date += new TimeSpan (0,1,0)) {
-                                       Assert.AreEqual (TimeZoneInfo.ConvertTimeToUtc (date), date.ToUniversalTime ());
-                               }
-                       }
-               #endif
-               
-                       [Test]
-                       public void ConvertFromToUtc ()
-                       {
-                               if (Environment.OSVersion.Platform != PlatformID.Unix)
-                                       Assert.Ignore ("Not running on Unix.");
-                               DateTime utc = DateTime.UtcNow;
-                               Assert.AreEqual (utc.Kind, DateTimeKind.Utc);
-                               DateTime converted = TimeZoneInfo.ConvertTimeFromUtc (utc, london);
-                               Assert.AreEqual (converted.Kind, DateTimeKind.Unspecified);
-                               DateTime back = TimeZoneInfo.ConvertTimeToUtc (converted, london);
-                               Assert.AreEqual (back.Kind, DateTimeKind.Utc);
-                               Assert.AreEqual (utc, back);
-               
-                       }
-
-
-                       [Test]
-                       public void ConvertFromToLocal ()
-                       {
-                               DateTime utc = DateTime.UtcNow;
-                               Assert.AreEqual(utc.Kind, DateTimeKind.Utc);
-                               DateTime converted = TimeZoneInfo.ConvertTimeFromUtc(utc, TimeZoneInfo.Local);
-                       #if NET_4_0
-                               Assert.AreEqual(DateTimeKind.Local, converted.Kind);
-                       #else
-                               Assert.AreEqual(DateTimeKind.Unspecified, converted.Kind);
-                       #endif
-                               DateTime back = TimeZoneInfo.ConvertTimeToUtc(converted, TimeZoneInfo.Local);
-                               Assert.AreEqual(back.Kind, DateTimeKind.Utc);
-                               Assert.AreEqual(utc, back);
-                       }
-
-                       [Test]
-                       public void ConvertToTimeZone ()
-                       {
-                               if (Environment.OSVersion.Platform != PlatformID.Unix)
-                                       Assert.Ignore ("Not running on Unix.");
-
-                               TimeZoneInfo.ConvertTime (DateTime.Now, TimeZoneInfo.FindSystemTimeZoneById("Pacific/Auckland"));
-                       }
-
-                       [Test]
-                       [ExpectedException (typeof (ArgumentNullException))]
-                       public void ConvertTime_DateTime_TimeZoneInfo_DestinationTimeZoneIsNull ()
-                       {
-                               TimeZoneInfo.ConvertTime (DateTime.Now, null);
-                       }
-
-                       [Test]
-                       public void ConvertTime_DateTime_TimeZoneInfo_DateTimeKindMatch ()
-                       {
-                               var sdt = new DateTime (2014, 1, 9, 23, 0, 0, DateTimeKind.Utc);
-                               var ddt = TimeZoneInfo.ConvertTime (sdt, TimeZoneInfo.Utc);
-                               Assert.AreEqual (ddt.Kind, sdt.Kind, "#1.1");
-                               Assert.AreEqual (ddt.Kind, DateTimeKind.Utc, "#1.2");
-                               
-                               sdt = new DateTime (2014, 1, 9, 23, 0, 0, DateTimeKind.Local);
-                               ddt = TimeZoneInfo.ConvertTime (sdt, TimeZoneInfo.Local);
-                               Assert.AreEqual (ddt.Kind, sdt.Kind, "#2.1");
-                               Assert.AreEqual (ddt.Kind, DateTimeKind.Local, "#2.2");
-
-                               sdt = new DateTime (2014, 1, 9, 23, 0, 0);
-                               ddt = TimeZoneInfo.ConvertTime (sdt, TimeZoneInfo.Local);
-                               Assert.AreEqual (ddt.Kind, sdt.Kind, "#3.1");
-                               Assert.AreEqual (ddt.Kind, DateTimeKind.Unspecified, "#3.2");
-                       }
-
-                       [Test]
-                       [ExpectedException (typeof (ArgumentNullException))]
-                       public void ConverTime_DateTime_TimeZoneInfo_TimeZoneInfo_SourceTimeZoneIsNull ()
-                       {
-                               TimeZoneInfo.ConvertTime (DateTime.Now, null, TimeZoneInfo.Local);
-                       }
-
-                       [Test]
-                       [ExpectedException (typeof (ArgumentNullException))]
-                       public void ConverTime_DateTime_TimeZoneInfo_TimeZoneInfo_DestinationTimeZoneIsNull ()
-                       {
-                               TimeZoneInfo.ConvertTime (DateTime.Now, TimeZoneInfo.Utc, null);
-                       }
-
-                       [Test (Description="Fix for xambug https://bugzilla.xamarin.com/show_bug.cgi?id=17155")]
-                       public void ConvertTime_AdjustmentRuleAfterNewYears ()
-                       {
-                               TimeZoneInfo tz;
-                               if (Environment.OSVersion.Platform == PlatformID.Unix)
-                                       tz = TimeZoneInfo.FindSystemTimeZoneById ("Pacific/Auckland"); // *nix
-                               else
-                                       tz = TimeZoneInfo.FindSystemTimeZoneById ("New Zealand Standard Time"); // Windows
-
-                               // DST start: 9/29/2013 2:00:00 AM
-                               // DST end: 4/6/2014 3:00:00 AM
-                               DateTime sdt = new DateTime (2014, 1, 9, 23, 0, 0, DateTimeKind.Utc);
-                               DateTime ddt = TimeZoneInfo.ConvertTime (sdt, tz);
-                               Assert.AreEqual (10, ddt.Day, "#1.1");
-                               Assert.AreEqual (1, ddt.Month, "#1.2");
-                               Assert.AreEqual (2014, ddt.Year, "#1.3");
-                               Assert.AreEqual (12, ddt.Hour, "#1.4");
-                               Assert.AreEqual (0, ddt.Minute, "#1.5");
-                               Assert.AreEqual (0, ddt.Second, "#1.6");
-                               
-                               // DST start: 9/29/2014 2:00:00 AM
-                               // DST end: 4/6/2015 3:00:00 AM
-                               sdt = new DateTime (2014, 6, 9, 23, 0, 0, DateTimeKind.Utc);
-                               ddt = TimeZoneInfo.ConvertTime (sdt, tz);
-                               Assert.AreEqual (10, ddt.Day, "#2.1");
-                               Assert.AreEqual (6, ddt.Month, "#2.2");
-                               Assert.AreEqual (2014, ddt.Year, "#2.3");
-                               Assert.AreEqual (11, ddt.Hour, "#2.4");
-                               Assert.AreEqual (0, ddt.Minute, "#2.5");
-                               Assert.AreEqual (0, ddt.Second, "#2.6");
-                               
-                               // DST start: 9/29/2014 2:00:00 AM
-                               // DST end: 4/6/2015 3:00:00 AM
-                               sdt = new DateTime (2014, 10, 9, 23, 0, 0, DateTimeKind.Utc);
-                               ddt = TimeZoneInfo.ConvertTime (sdt, tz);
-                               Assert.AreEqual (10, ddt.Day, "#3.1");
-                               Assert.AreEqual (10, ddt.Month, "#3.2");
-                               Assert.AreEqual (2014, ddt.Year, "#3.3");
-                               Assert.AreEqual (12, ddt.Hour, "#3.4");
-                               Assert.AreEqual (0, ddt.Minute, "#3.5");
-                               Assert.AreEqual (0, ddt.Second, "#3.6");
-                       }
-
-                       [Test (Description="Fix the bug https://bugzilla.xamarin.com/show_bug.cgi?id=1849")]
-                       public void ConvertTime_AjustmentConvertTimeWithSourceTimeZone () {
-                               
-                               TimeZoneInfo easternTimeZone;
-                               TimeZoneInfo pacificTimeZone;
-
-                               if (Environment.OSVersion.Platform == PlatformID.Unix) {
-                                       // *nix
-                                       easternTimeZone = TimeZoneInfo.FindSystemTimeZoneById ("US/Eastern");
-                                       pacificTimeZone = TimeZoneInfo.FindSystemTimeZoneById ("US/Pacific");   
-                               }
-                               else {
-                                       // Windows
-                                       easternTimeZone = TimeZoneInfo.FindSystemTimeZoneById ("Eastern Standard Time");
-                                       pacificTimeZone = TimeZoneInfo.FindSystemTimeZoneById ("Pacific Standard Time");
-                               }
-
-                               DateTime lastMidnight = new DateTime (new DateTime (2012, 06, 13).Ticks, DateTimeKind.Unspecified);
-                               DateTime lastMidnightAsEST = TimeZoneInfo.ConvertTime (lastMidnight, pacificTimeZone, easternTimeZone);
-                               DateTime lastMidnightAsPST = TimeZoneInfo.ConvertTime (lastMidnightAsEST, easternTimeZone, pacificTimeZone);
-                       
-                               // Last midnight in PST as EST should be 3AM
-                               DateTime expectedDate = new DateTime (2012, 06, 13, 3, 0, 0);
-
-                               Assert.AreEqual (expectedDate, lastMidnightAsEST);
-                               Assert.AreEqual (lastMidnight, lastMidnightAsPST);
-                       }
-               }
-               
-               [TestFixture]
-               public class IsInvalidTimeTests
-               {
-                       TimeZoneInfo london;
-               
-                       [SetUp]
-                       public void CreateTimeZones ()
-                       {
-                               TimeZoneInfo.TransitionTime start = TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1,1,1,1,0,0), 3, 5, DayOfWeek.Sunday);
-                               TimeZoneInfo.TransitionTime end = TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1,1,1,2,0,0), 10, 5, DayOfWeek.Sunday);
-                               TimeZoneInfo.AdjustmentRule rule = TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule (DateTime.MinValue.Date, DateTime.MaxValue.Date, new TimeSpan (1,0,0), start, end);
-                               london = TimeZoneInfo.CreateCustomTimeZone ("Europe/London", new TimeSpan (0), "Europe/London", "British Standard Time", "British Summer Time", new TimeZoneInfo.AdjustmentRule [] {rule});
-                       }
-               
-               #if SLOW_TESTS
-                       [Test]
-                       public void UTCDate ()
-                       {
-                               for (DateTime date = new DateTime (2007, 01, 01, 0, 0, 0); date < new DateTime (2007, 12, 31, 23, 59, 59); date += new TimeSpan (0,1,0)) {
-                                       date = DateTime.SpecifyKind (date, DateTimeKind.Utc);
-                                       Assert.IsFalse (london.IsInvalidTime (date));
-                               }
-                       }
-               #endif
-                       [Test]
-                       public void InvalidDates ()
-                       {
-                               Assert.IsFalse (london.IsInvalidTime (new DateTime (2007, 03, 25, 0, 59, 59)));
-                               Assert.IsTrue (london.IsInvalidTime (new DateTime (2007, 03, 25, 1, 0, 0)));
-                               Assert.IsTrue (london.IsInvalidTime (new DateTime (2007, 03, 25, 1, 59, 59)));
-                               Assert.IsFalse (london.IsInvalidTime (new DateTime (2007, 03, 25, 2, 0, 0)));
-                       }
-               }
-               
-               [TestFixture]
-               public class IsAmbiguousTimeTests
-               {
-                       TimeZoneInfo london;
-               
-                       [SetUp]
-                       public void CreateTimeZones ()
-                       {
-                               TimeZoneInfo.TransitionTime start = TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1,1,1,1,0,0), 3, 5, DayOfWeek.Sunday);
-                               TimeZoneInfo.TransitionTime end = TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1,1,1,2,0,0), 10, 5, DayOfWeek.Sunday);
-                               TimeZoneInfo.AdjustmentRule rule = TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule (DateTime.MinValue.Date, DateTime.MaxValue.Date, new TimeSpan (1,0,0), start, end);
-                               london = TimeZoneInfo.CreateCustomTimeZone ("Europe/London", new TimeSpan (0), "Europe/London", "British Standard Time", "British Summer Time", new TimeZoneInfo.AdjustmentRule [] {rule});
-                       }
-               
-                       [Test]
-                       public void AmbiguousDates ()
-                       {
-                               if (Environment.OSVersion.Platform != PlatformID.Unix)
-                                       Assert.Ignore ("Not running on Unix.");
-                               Assert.IsFalse (london.IsAmbiguousTime (new DateTime (2007, 10, 28, 1, 0, 0)));
-                               Assert.IsTrue (london.IsAmbiguousTime (new DateTime (2007, 10, 28, 1, 0, 1)));
-                               Assert.IsTrue (london.IsAmbiguousTime (new DateTime (2007, 10, 28, 2, 0, 0)));
-                               Assert.IsFalse (london.IsAmbiguousTime (new DateTime (2007, 10, 28, 2, 0, 1)));
-                       }
-               
-                       [Test]
-                       public void AmbiguousUTCDates ()
-                       {
-                               if (Environment.OSVersion.Platform != PlatformID.Unix)
-                                       Assert.Ignore ("Not running on Unix.");
-                               Assert.IsFalse (london.IsAmbiguousTime (new DateTime (2007, 10, 28, 0, 0, 0, DateTimeKind.Utc)));
-                               Assert.IsTrue (london.IsAmbiguousTime (new DateTime (2007, 10, 28, 0, 0, 1, DateTimeKind.Utc)));
-                               Assert.IsTrue (london.IsAmbiguousTime (new DateTime (2007, 10, 28, 0, 59, 59, DateTimeKind.Utc)));
-                               Assert.IsFalse (london.IsAmbiguousTime (new DateTime (2007, 10, 28, 1, 0, 0, DateTimeKind.Utc)));
-                       }
-               
-               #if SLOW_TESTS
-                       [Test]
-                       public void AmbiguousInUTC ()
-                       {
-                               for (DateTime date = new DateTime (2007, 01, 01, 0, 0, 0); date < new DateTime (2007, 12, 31, 23, 59, 59); date += new TimeSpan (0,1,0)) {
-                                       Assert.IsFalse (TimeZoneInfo.Utc.IsAmbiguousTime (date));
-                               }
-                       }
-               #endif
-               }
-               
-               [TestFixture]
-               public class GetSystemTimeZonesTests
-               {
-                       [Test]
-                       public void NotEmpty ()
-                       {
-                               if (Environment.OSVersion.Platform != PlatformID.Unix)
-                                       Assert.Ignore ("Not running on Unix.");
-                               global::System.Collections.ObjectModel.ReadOnlyCollection<TimeZoneInfo> systemTZ = TimeZoneInfo.GetSystemTimeZones ();
-                               Assert.IsNotNull(systemTZ, "SystemTZ is null");
-                               Assert.IsFalse (systemTZ.Count == 0, "SystemTZ is empty");
-                       }
-               
-                       [Test]
-                       public void ContainsBrussels ()
-                       {
-                               if (Environment.OSVersion.Platform != PlatformID.Unix)
-                                       Assert.Ignore ("Not running on Unix.");
-                               global::System.Collections.ObjectModel.ReadOnlyCollection<TimeZoneInfo> systemTZ = TimeZoneInfo.GetSystemTimeZones ();
-                               foreach (TimeZoneInfo tz in systemTZ) {
-                                       if (tz.Id == "Europe/Brussels")
-                                               return;
-                               }
-                               Assert.Fail ("Europe/Brussels not found in SystemTZ");
-                       }
-               }
-               
-               [TestFixture]
-               public class FindSystemTimeZoneByIdTests
-               {
-                       [Test]
-                       [ExpectedException (typeof (ArgumentNullException))]
-                       public void NullId ()
-                       {
-                               TimeZoneInfo.FindSystemTimeZoneById (null);
-                       }
-               
-                       [Test]
-                       [ExpectedException (typeof (TimeZoneNotFoundException))]
-                       public void NonSystemTimezone ()
-                       {
-                               if (Environment.OSVersion.Platform != PlatformID.Unix)
-                                       throw new TimeZoneNotFoundException ();
-                               TimeZoneInfo.FindSystemTimeZoneById ("Neverland/The_Lagoon");
-                       }
-               
-                       [Test]
-                       public void FindBrusselsTZ ()
-                       {
-                               if (Environment.OSVersion.Platform != PlatformID.Unix)
-                                       Assert.Ignore ("Not running on Unix.");
-                               TimeZoneInfo brussels = TimeZoneInfo.FindSystemTimeZoneById ("Europe/Brussels");
-                               Assert.IsNotNull (brussels);
-                       }
-               
-                       [Test]
-                       public void OffsetIsCorrectInKinshasa ()
-                       {
-                               if (Environment.OSVersion.Platform != PlatformID.Unix)
-                                       Assert.Ignore ("Not running on Unix.");
-                               TimeZoneInfo kin = TimeZoneInfo.FindSystemTimeZoneById ("Africa/Kinshasa");
-                               Assert.AreEqual (new TimeSpan (1,0,0), kin.BaseUtcOffset, "BaseUtcOffset in Kinshasa is not +1h");
-                       }
-               
-                       [Test]
-                       public void OffsetIsCorrectInBrussels ()
-                       {
-                               if (Environment.OSVersion.Platform != PlatformID.Unix)
-                                       Assert.Ignore ("Not running on Unix.");
-                               TimeZoneInfo brussels = TimeZoneInfo.FindSystemTimeZoneById ("Europe/Brussels");
-                               Assert.AreEqual (new TimeSpan (1,0,0), brussels.BaseUtcOffset, "BaseUtcOffset for Brussels is not +1h");
-                       }
-               
-                       [Test]
-                       public void NoDSTInKinshasa ()
-                       {
-                               if (Environment.OSVersion.Platform != PlatformID.Unix)
-                                       Assert.Ignore ("Not running on Unix.");
-                               TimeZoneInfo kin = TimeZoneInfo.FindSystemTimeZoneById ("Africa/Kinshasa");
-                               Assert.IsFalse (kin.SupportsDaylightSavingTime);
-                       }
-               
-                       [Test]
-                       public void BrusselsSupportsDST ()
-                       {
-                               if (Environment.OSVersion.Platform != PlatformID.Unix)
-                                       Assert.Ignore ("Not running on Unix.");
-                               TimeZoneInfo brussels = TimeZoneInfo.FindSystemTimeZoneById ("Europe/Brussels");
-                               Assert.IsTrue (brussels.SupportsDaylightSavingTime);
-                       }
-               
-                       [Test]
-                       public void MelbourneSupportsDST ()
-                       {
-                               if (Environment.OSVersion.Platform != PlatformID.Unix)
-                                       Assert.Ignore ("Not running on Unix.");
-                               TimeZoneInfo melbourne = TimeZoneInfo.FindSystemTimeZoneById ("Australia/Melbourne");
-                               Assert.IsTrue (melbourne.SupportsDaylightSavingTime);
-                       }
-               
-                       [Test]
-                       public void RomeAndVaticanSharesTime ()
-                       {
-                               if (Environment.OSVersion.Platform != PlatformID.Unix)
-                                       Assert.Ignore ("Not running on Unix.");
-                               TimeZoneInfo rome = TimeZoneInfo.FindSystemTimeZoneById ("Europe/Rome");
-                               TimeZoneInfo vatican = TimeZoneInfo.FindSystemTimeZoneById ("Europe/Vatican");
-                               Assert.IsTrue (rome.HasSameRules (vatican));
-                       }
-
-                       [Test]
-                       public void FindSystemTimeZoneById_Local_Roundtrip ()
-                       {
-                               Assert.AreEqual (TimeZoneInfo.Local.Id, TimeZoneInfo.FindSystemTimeZoneById (TimeZoneInfo.Local.Id).Id);
-                       }
-
-                       [Test]
-                       public void Test326 ()
-                       {
-                               DateTime utc = DateTime.UtcNow;
-                               DateTime local = TimeZoneInfo.ConvertTime (utc, TimeZoneInfo.Utc, TimeZoneInfo.FindSystemTimeZoneById (TimeZoneInfo.Local.Id));
-                               Assert.AreEqual (local, utc + TimeZoneInfo.Local.GetUtcOffset (utc), "ConvertTime/Local");
-                       }
-               
-               #if SLOW_TESTS
-                       [Test]
-                       public void BrusselsAdjustments ()
-                       {
-                               TimeZoneInfo.TransitionTime start = TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1,1,1,2,0,0), 3, 5, DayOfWeek.Sunday);
-                               TimeZoneInfo.TransitionTime end = TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1,1,1,3,0,0), 10, 5, DayOfWeek.Sunday);
-                               TimeZoneInfo.AdjustmentRule rule = TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule (DateTime.MinValue.Date, DateTime.MaxValue.Date, new TimeSpan (1,0,0), start, end);
-                               TimeZoneInfo brussels = TimeZoneInfo.CreateCustomTimeZone ("Europe/Brussels", new TimeSpan (1, 0, 0), "Europe/Brussels", "", "", new TimeZoneInfo.AdjustmentRule [] {rule});
-               
-                               TimeZoneInfo brussels_sys = TimeZoneInfo.FindSystemTimeZoneById ("Europe/Brussels");
-               
-                               for (DateTime date = new DateTime (2006, 01, 01, 0, 0, 0, DateTimeKind.Local); date < new DateTime (2007, 12, 31, 23, 59, 59); date += new TimeSpan (0,30,0)) {
-                                       Assert.AreEqual (brussels.GetUtcOffset (date), brussels_sys.GetUtcOffset (date));
-                                       Assert.AreEqual (brussels.IsDaylightSavingTime (date), brussels_sys.IsDaylightSavingTime (date));
-                               }               
-                       }
-               #endif
-               }
-               
-               [TestFixture]
-               public class GetAmbiguousTimeOffsetsTests
-               {
-                       [Test]
-                       [ExpectedException (typeof(ArgumentException))]
-                       public void DateIsNotAmbiguous ()
-                       {
-                               if (Environment.OSVersion.Platform != PlatformID.Unix)
-                                       throw new ArgumentException ();
-                               TimeZoneInfo brussels = TimeZoneInfo.FindSystemTimeZoneById ("Europe/Brussels");
-                               DateTime date = new DateTime (2007, 05, 11, 11, 40, 00);
-                               brussels.GetAmbiguousTimeOffsets (date);
-                       }
-               
-                       [Test]
-                       public void AmbiguousOffsets ()
-                       {
-                               if (Environment.OSVersion.Platform != PlatformID.Unix)
-                                       Assert.Ignore ("Not running on Unix.");
-                               TimeZoneInfo brussels = TimeZoneInfo.FindSystemTimeZoneById ("Europe/Brussels");
-                               DateTime date = new DateTime (2007, 10, 28, 2, 30, 00);
-                               Assert.IsTrue (brussels.IsAmbiguousTime (date));
-                               Assert.AreEqual (2, brussels.GetAmbiguousTimeOffsets (date).Length);
-                               Assert.AreEqual (new TimeSpan[] {new TimeSpan (1, 0, 0), new TimeSpan (2, 0, 0)}, brussels.GetAmbiguousTimeOffsets (date));
-                       }
-               }
-
-               [TestFixture]
-               public class HasSameRulesTests
-               {
-                       [Test]
-                       public void NullAdjustments () //bnc #391011
-                       {
-                               TimeZoneInfo utc = TimeZoneInfo.Utc;
-                               TimeZoneInfo custom = TimeZoneInfo.CreateCustomTimeZone ("Custom", new TimeSpan (0), "Custom", "Custom");
-                               Assert.IsTrue (utc.HasSameRules (custom));
-                       }
-               }
-
-               [TestFixture]
-               public class SerializationTests
-               {
-                       [Test]
-                       public void Serialization_Deserialization ()
-                       {
-                               TimeZoneInfo.TransitionTime start = TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1,1,1,1,0,0), 3, 5, DayOfWeek.Sunday);
-                               TimeZoneInfo.TransitionTime end = TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1,1,1,2,0,0), 10, 5, DayOfWeek.Sunday);
-                               TimeZoneInfo.AdjustmentRule rule = TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule (DateTime.MinValue.Date, DateTime.MaxValue.Date, new TimeSpan (1,0,0), start, end);
-                               TimeZoneInfo london = TimeZoneInfo.CreateCustomTimeZone ("Europe/London", new TimeSpan (0), "Europe/London", "British Standard Time", "British Summer Time", new TimeZoneInfo.AdjustmentRule [] {rule});
-                               MemoryStream stream = new MemoryStream ();
-                               BinaryFormatter formatter = new BinaryFormatter ();
-                               formatter.Serialize (stream, london);
-                               stream.Position = 0;
-                               TimeZoneInfo deserialized = (TimeZoneInfo) formatter.Deserialize (stream);
-                               stream.Close ();
-                               stream.Dispose ();
-                               Assert.IsTrue (london.Equals (deserialized));
-                       }
-               }
-
-               [TestFixture]
-               public class MultipleDaylightSavingTimeTests {
-                       private TimeZoneInfo cairo;
-                       private DateTime dst1Start;
-                       private DateTime dst1End;
-                       private DateTime dst2Start;
-                       private DateTime dst2End;
-
-                       private TimeSpan baseUtcOffset;
-                       private TimeSpan dstUtcOffset;
-                       private TimeSpan dstOffset;
-
-                       [SetUp]
-                       public void CreateTimeZones ()
-                       {
-                               /*
-                               From 1/1/2014 12:00:00 AM to 6/30/2014 12:00:00 AM
-                                       Delta: 01:00:00
-                                       Begins at 12:00 AM on 16 May
-                                       Ends at 1:00 AM on 29 June
-                               From 7/1/2014 12:00:00 AM to 12/31/2014 12:00:00 AM
-                                       Delta: 01:00:00
-                                       Begins at 12:00 AM on 29 July
-                                       Ends at 12:00 AM on 26 September
-                               */
-                               dst1Start = new DateTime (2014, 5, 16);
-                               dst1End = new DateTime (2014, 6, 29);
-                               dst2Start = new DateTime (2014, 7, 29);
-                               dst2End = new DateTime (2014, 9, 26);
-
-                               baseUtcOffset = new TimeSpan (2, 0, 0);
-                               dstUtcOffset = new TimeSpan (3, 0, 0);
-                               dstOffset = dstUtcOffset - baseUtcOffset;
-
-                               var rule1 = TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule (
-                                       new DateTime (2014, 1, 1), new DateTime (2014, 6, 30), dstOffset,
-                                       CreateFixedDateRule (dst1Start), CreateFixedDateRule (dst1End));
-
-                               var rule2 = TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule (
-                                       new DateTime (2014, 7, 1), new DateTime (2014, 12, 31), dstOffset,
-                                       CreateFixedDateRule (dst2Start), CreateFixedDateRule (dst2End));
-
-                               cairo = TimeZoneInfo.CreateCustomTimeZone ("Africa/Cairo", baseUtcOffset, "Africa/Cairo", "EET", "EEST",
-                                       new [] {rule1, rule2});
-                       }
-
-                       private static TimeZoneInfo.TransitionTime CreateFixedDateRule (DateTime dateTime)
-                       {
-                               var time = new DateTime (dateTime.Ticks - dateTime.Date.Ticks);
-                               return TimeZoneInfo.TransitionTime.CreateFixedDateRule (time, dateTime.Month, dateTime.Day);
-                       }
-
-                       [Test]
-                       public void GetUtcOffset_FromUTC ()
-                       {
-                               var d = dst1Start.Add (-baseUtcOffset);
-                               d = DateTime.SpecifyKind (d, DateTimeKind.Utc);
-                               Assert.AreEqual(baseUtcOffset, cairo.GetUtcOffset (d.Add (new TimeSpan(0,0,0,-1))));
-                               Assert.AreEqual(dstUtcOffset, cairo.GetUtcOffset (d));
-                               Assert.AreEqual(dstUtcOffset, cairo.GetUtcOffset (d.Add (new TimeSpan(0,0,0, 1))));
-
-                               d = dst1End.Add (-baseUtcOffset-dstOffset);
-                               d = DateTime.SpecifyKind (d, DateTimeKind.Utc);
-                               Assert.AreEqual(dstUtcOffset, cairo.GetUtcOffset (d.Add (new TimeSpan(0,0,0,-1))));
-                               Assert.AreEqual(baseUtcOffset, cairo.GetUtcOffset (d));
-                               Assert.AreEqual(baseUtcOffset, cairo.GetUtcOffset (d.Add (new TimeSpan(0,0,0, 1))));
-
-                               d = dst2Start.Add (-baseUtcOffset);
-                               d = DateTime.SpecifyKind (d, DateTimeKind.Utc);
-                               Assert.AreEqual(baseUtcOffset, cairo.GetUtcOffset (d.Add (new TimeSpan(0,0,0,-1))));
-                               Assert.AreEqual(dstUtcOffset, cairo.GetUtcOffset (d));
-                               Assert.AreEqual(dstUtcOffset, cairo.GetUtcOffset (d.Add (new TimeSpan(0,0,0, 1))));
-
-                               d = dst2End.Add (-baseUtcOffset-dstOffset);
-                               d = DateTime.SpecifyKind (d, DateTimeKind.Utc);
-                               Assert.AreEqual(dstUtcOffset, cairo.GetUtcOffset (d.Add (new TimeSpan(0,0,0,-1))));
-                               Assert.AreEqual(baseUtcOffset, cairo.GetUtcOffset (d));
-                               Assert.AreEqual(baseUtcOffset, cairo.GetUtcOffset (d.Add (new TimeSpan(0,0,0, 1))));
-                       }
-
-                       [Test]
-                       public void GetUtcOffset_FromLocal ()
-                       {
-                               var d = dst1Start.Add (-baseUtcOffset);
-                               d = DateTime.SpecifyKind (d, DateTimeKind.Utc);
-                               d = d.ToLocalTime ();
-                               Assert.AreEqual(baseUtcOffset, cairo.GetUtcOffset (d.Add (new TimeSpan(0,0,0,-1))));
-                               Assert.AreEqual(dstUtcOffset, cairo.GetUtcOffset (d));
-                               Assert.AreEqual(dstUtcOffset, cairo.GetUtcOffset (d.Add (new TimeSpan(0,0,0, 1))));
-
-                               d = dst1End.Add (-baseUtcOffset-dstOffset);
-                               d = DateTime.SpecifyKind (d, DateTimeKind.Utc);
-                               d = d.ToLocalTime ();
-                               Assert.AreEqual(dstUtcOffset, cairo.GetUtcOffset (d.Add (new TimeSpan(0,0,0,-1))));
-                               Assert.AreEqual(baseUtcOffset, cairo.GetUtcOffset (d));
-                               Assert.AreEqual(baseUtcOffset, cairo.GetUtcOffset (d.Add (new TimeSpan(0,0,0, 1))));
-
-                               d = dst2Start.Add (-baseUtcOffset);
-                               d = DateTime.SpecifyKind (d, DateTimeKind.Utc);
-                               d = d.ToLocalTime ();
-                               Assert.AreEqual(baseUtcOffset, cairo.GetUtcOffset (d.Add (new TimeSpan(0,0,0,-1))));
-                               Assert.AreEqual(dstUtcOffset, cairo.GetUtcOffset (d));
-                               Assert.AreEqual(dstUtcOffset, cairo.GetUtcOffset (d.Add (new TimeSpan(0,0,0, 1))));
-
-                               d = dst2End.Add (-baseUtcOffset-dstOffset);
-                               d = DateTime.SpecifyKind (d, DateTimeKind.Utc);
-                               d = d.ToLocalTime ();
-                               Assert.AreEqual(dstUtcOffset, cairo.GetUtcOffset (d.Add (new TimeSpan(0,0,0,-1))));
-                               Assert.AreEqual(baseUtcOffset, cairo.GetUtcOffset (d));
-                               Assert.AreEqual(baseUtcOffset, cairo.GetUtcOffset (d.Add (new TimeSpan(0,0,0, 1))));
-                       }
-
-                       [Test]
-                       public void GetUtcOffset_FromUnspecified ()
-                       {
-                               var d = dst1Start.Add (dstOffset);
-                               Assert.AreEqual(baseUtcOffset, cairo.GetUtcOffset (d.Add (new TimeSpan(0,0,0,-1))));
-                               Assert.AreEqual(dstUtcOffset, cairo.GetUtcOffset (d));
-                               Assert.AreEqual(dstUtcOffset, cairo.GetUtcOffset (d.Add (new TimeSpan(0,0,0, 1))));
-
-                               d = dst1End.Add (-dstOffset);
-                               Assert.AreEqual(dstUtcOffset, cairo.GetUtcOffset (d.Add (new TimeSpan(0,0,0,-1))));
-                               Assert.AreEqual(baseUtcOffset, cairo.GetUtcOffset (d));
-                               Assert.AreEqual(baseUtcOffset, cairo.GetUtcOffset (d.Add (new TimeSpan(0,0,0, 1))));
-
-                               d = dst2Start.Add (dstOffset);
-                               Assert.AreEqual(baseUtcOffset, cairo.GetUtcOffset (d.Add (new TimeSpan(0,0,0,-1))));
-                               Assert.AreEqual(dstUtcOffset, cairo.GetUtcOffset (d));
-                               Assert.AreEqual(dstUtcOffset, cairo.GetUtcOffset (d.Add (new TimeSpan(0,0,0, 1))));
-
-                               d = dst2End.Add (-dstOffset);
-                               Assert.AreEqual(dstUtcOffset, cairo.GetUtcOffset (d.Add (new TimeSpan(0,0,0,-1))));
-                               Assert.AreEqual(baseUtcOffset, cairo.GetUtcOffset (d));
-                               Assert.AreEqual(baseUtcOffset, cairo.GetUtcOffset (d.Add (new TimeSpan(0,0,0, 1))));
-                       }
-               }
-       }
-}
index 6a8469e3e3004e4ad7d3ffc1ffb67d9d320ddde8..26832172d45a51421dc6655df30edb9ac0348fdd 100755 (executable)
@@ -17,7 +17,7 @@ TEST_MCS_FLAGS = $(LIB_MCS_FLAGS)
 EXTRA_DISTFILES = src/DbLinq/Schema/Dbml/DbmlSchema.xsd
 
 # This is a .NET 3.5+ assembly
-VALID_PROFILE := $(filter net_4_0 net_4_5, $(PROFILE))
+VALID_PROFILE := $(filter net_4_5, $(PROFILE))
 ifndef VALID_PROFILE
 LIBRARY_NAME = dummy-System.Data.Linq.dll
 NO_INSTALL = yes
index 9797abbeec9b40a825c2e77199bbaa7db2d8c72f..918da04f502013c941a25eccf00e34355621c468 100644 (file)
@@ -168,16 +168,6 @@ namespace System.Data.Common
 
                #endregion // Properties
                
-               #region Events
-
-#if ONLY_1_0 || ONLY_1_1
-               [DataCategory ("Fill")]
-               [DataSysDescription ("Event triggered when a recoverable error occurs during Fill.")]
-               public event FillErrorEventHandler FillError;
-
-#endif
-               #endregion // Events
-
                #region Methods
 
                protected virtual RowUpdatedEventArgs CreateRowUpdatedEvent (DataRow dataRow, IDbCommand command,
index d1b4cb2fb209c71d85cde9ddb07e7362b9658fe3..0daee9a956cc47330004afa90f7e2a9dd48b7737 100644 (file)
@@ -46,12 +46,6 @@ namespace System.Data.SqlClient {
        {
                #region Fields
 
-#if ONLY_1_0 || ONLY_1_1
-               SqlCommand _selectCommand;
-               SqlCommand _insertCommand;
-               SqlCommand _updateCommand;
-               SqlCommand _deleteCommand;              
-#endif
                int updateBatchSize;
                #endregion
 
index b78e1cc02533ab3808c97d09e66a4b7d91e19ef7..bd478795a1f77ca4bf84825658daeea3235bf5a6 100644 (file)
@@ -69,10 +69,6 @@ namespace System.Data.SqlClient
 
                #region Properties
 
-#if ONLY_1_1 || ONLY_1_0
-               [Browsable (false)]
-               [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
-#endif
                public
                override
                int Count {
index 47698d21bb7a72abb09b813b018dade100896c83..eaf0c4d73ce43e9a75ac411193cf2713c1867303 100644 (file)
@@ -2,16 +2,7 @@ thisdir=class/System.Data/Test/ProviderTests
 
 include ../../../../build/rules.make
 
-LIB_MCS_FLAGS += /r:System.Data,System.Data.OracleClient,System,System.Xml,nunit.framework
-
-ifeq (net_1_0, $(PROFILE))
-LIB_MCS_FLAGS += /r:Mono.Data.dll
-endif
-ifeq (net_1_1, $(PROFILE))
-LIB_MCS_FLAGS += /r:Mono.Data.dll
-else
-LIB_MCS_FLAGS += /r:System.Configuration.dll
-endif
+LIB_MCS_FLAGS += /r:System.Data,System.Data.OracleClient,System,System.Xml,nunit.framework,System.Configuration
 
 DATABASE=sqlserver
 ifndef CONNECTION
index 5c88280c460239e9b48b622dec685661268166b6..290608710b0c0340b916ea90a76786605670e034 100644 (file)
@@ -408,6 +408,16 @@ namespace System.DirectoryServices
                        }
                }
 
+               [DSDescription ("The provider-specific options for this entry.")]
+               [Browsable (false)]
+               [MonoTODO]
+               public DirectoryEntryConfiguration Options
+               { 
+                       get {
+                               throw new NotImplementedException ();
+                       }
+               }
+
                /// <summary>
                /// Gets or sets the password to use when authenticating the client.
                /// </summary>
index 37983a6aa39035b35f1d5f1325b25ef4c431614b..7f1201b75a008ade61bc4163ef10c99e564038fe 100644 (file)
@@ -14,7 +14,7 @@ $(DRAWING_TEST_HELPER):
        cp ../DrawingTestHelper/*.dll .
 
 run-test: Test.dll
-       MONO_PATH="../../../../../class/lib/net_1_1::$(MONO_PATH)" /home/andrews/monobuild/mono/runtime/mono-wrapper --debug ../../../../../class/lib/net_1_1/nunit-console.exe Test.dll $(NUNIT_FLAGS)
+       MONO_PATH="../../../../../class/lib/net_4_5::$(MONO_PATH)" /home/andrews/monobuild/mono/runtime/mono-wrapper --debug ../../../../../class/lib/net_4_5/nunit-console.exe Test.dll $(NUNIT_FLAGS)
 
 clean:
-       rm *dll
\ No newline at end of file
+       rm *dll
index 27d35840cc5e027ce5239552e3f8476253d2aa80..3f701837a1fba4b8590dc37762ac994a17964dc6 100644 (file)
@@ -3,13 +3,9 @@ SUBDIRS =
 include ../../build/rules.make
 
 LIBRARY = System.EnterpriseServices.dll
-LIB_MCS_FLAGS = /nowarn:0168 /nowarn:0162 /r:$(corlib)
+LIB_MCS_FLAGS = /nowarn:0168 /nowarn:0162 /r:$(corlib) /r:System.Transactions.dll
 NO_TEST = yes
 
-ifneq (net_1_1, $(PROFILE))
-LIB_MCS_FLAGS += /r:System.Transactions.dll
-endif
-
 EXTRA_DISTFILES = System.EnterpriseServices.Internal/ChangeLog
 
 include ../../build/library.make
index f9243edf7db9ffebcff2cf89b8f56eec8b043c78..d3b8f149f4d810c343753a2b735c99c21490b2b5 100755 (executable)
@@ -15,7 +15,7 @@ TEST_MCS_FLAGS = $(LIB_MCS_FLAGS)
 
 EXTRA_DISTFILES =
 
-VALID_PROFILE := $(filter net_4_0 net_4_5, $(PROFILE))
+VALID_PROFILE := $(filter net_4_5, $(PROFILE))
 ifndef VALID_PROFILE
 LIBRARY_NAME = dummy-System.IdentityModel.Selectors.dll
 NO_INSTALL = yes
index 956c2a72ec3b100eba721ef784163c568c22e111..4889b6c6b87a9220652ddc5df17d20214e087a7a 100644 (file)
@@ -26,7 +26,7 @@ EXTRA_DISTFILES = \
        Test/Resources/test.pfx \
        Test/Resources/test2.pfx
 
-VALID_PROFILE := $(filter net_4_0 net_4_5, $(PROFILE))
+VALID_PROFILE := $(filter net_4_5, $(PROFILE))
 ifndef VALID_PROFILE
 LIBRARY_NAME = dummy-System.IdentityModel.dll
 NO_INSTALL = yes
index 71e2b0dfc58cc2359146de9e290bc0e20cfd1ad3..b2ba1ba50ef7a5d2b3dadff0539ad38a5bda0555 100644 (file)
@@ -21,7 +21,7 @@ TEST_MCS_FLAGS = $(LIB_MCS_FLAGS)
 
 EXTRA_DISTFILES = more_build_args
 
-VALID_PROFILE := $(filter monotouch monodroid mobile mobile_static xammac net_4_0 net_4_5, $(PROFILE))
+VALID_PROFILE := $(filter monotouch monodroid mobile mobile_static xammac net_4_5, $(PROFILE))
 ifndef VALID_PROFILE
 LIBRARY_NAME = dummy-System.System.Interactive.Async.dll
 NO_SIGN_ASSEMBLY = yes
index ae8749cc6940caa0adafc2a20e0071b6e086108b..0326b0f05bf58ea9bd99e5e4faeb43300f4bdd8e 100644 (file)
@@ -22,7 +22,7 @@ TEST_MCS_FLAGS = $(LIB_MCS_FLAGS)
 
 EXTRA_DISTFILES = more_build_args
 
-VALID_PROFILE := $(filter monotouch monodroid xammac mobile mobile_static net_4_0 net_4_5, $(PROFILE))
+VALID_PROFILE := $(filter monotouch monodroid xammac mobile mobile_static net_4_5, $(PROFILE))
 ifndef VALID_PROFILE
 LIBRARY_NAME = dummy-System.System.Interactive.Providers.dll
 NO_SIGN_ASSEMBLY = yes
index 1429c533ef9955323768764ff68fd052328d3309..93261853ac72b20456ee8d5180dd6513e8d07fe6 100644 (file)
@@ -21,7 +21,7 @@ TEST_MCS_FLAGS = $(LIB_MCS_FLAGS)
 
 EXTRA_DISTFILES = more_build_args
 
-VALID_PROFILE := $(filter monotouch monodroid xammac mobile mobile_static net_4_0 net_4_5, $(PROFILE))
+VALID_PROFILE := $(filter monotouch monodroid xammac mobile mobile_static net_4_5, $(PROFILE))
 ifndef VALID_PROFILE
 LIBRARY_NAME = dummy-System.System.Interactive.dll
 NO_SIGN_ASSEMBLY = yes
index 5bf97d0b96f9cf613fcf4a8a309a0731707b0f22..79dbb8dd321ba9de2023524e66c84d8ff6d990f1 100644 (file)
@@ -232,10 +232,20 @@ namespace System.Net.Http.Headers
                                return false;
                        }
 
+                       int parens = 1;
                        while (pos < s.Length) {
                                var ch = s[pos];
+                               if (ch == '(') {
+                                       ++parens;
+                                       ++pos;
+                                       continue;
+                               }
+
                                if (ch == ')') {
                                        ++pos;
+                                       if (--parens > 0)
+                                               continue;
+
                                        var start = readToken.StartPosition;
                                        value = s.Substring (start, pos - start);
                                        return true;
index c8a30223259779ed13843fab26dde05efb6c6cec..a3ad9a5d82b734c39502f66966d6eb7ae260c73e 100644 (file)
@@ -101,12 +101,12 @@ namespace MonoTests.System.Net.Http.Headers
                        Assert.AreEqual ("1.1", res.ProtocolVersion, "#3");
                        Assert.AreEqual ("1.1 nowhere.com", res.ToString (), "#4");
 
-                       res = ViaHeaderValue.Parse ("foo / 1.1 nowhere.com:43   ( lalala ) ");
+                       res = ViaHeaderValue.Parse ("foo / 1.1 nowhere.com:43   ( lal ( a ) la ) ");
                        Assert.AreEqual ("foo", res.ProtocolName, "#10");
                        Assert.AreEqual ("1.1", res.ProtocolVersion, "#11");
                        Assert.AreEqual ("nowhere.com:43", res.ReceivedBy, "#12");
-                       Assert.AreEqual ("( lalala )", res.Comment, "#13");
-                       Assert.AreEqual ("foo/1.1 nowhere.com:43 ( lalala )", res.ToString (), "#14");
+                       Assert.AreEqual ("( lal ( a ) la )", res.Comment, "#13");
+                       Assert.AreEqual ("foo/1.1 nowhere.com:43 ( lal ( a ) la )", res.ToString (), "#14");
                }
 
                [Test]
index 624018c109826410c3f77d73d2bd7ad415965f7b..c01012146c48260588a285ed9282debad38df276 100644 (file)
@@ -35,7 +35,7 @@ TEST_MCS_FLAGS = $(LIB_MCS_FLAGS)
 
 EXTRA_DISTFILES = more_build_args $(RESX_RESOURCES:.resources=.resx) $(PREBUILT)
 
-VALID_PROFILE := $(filter monotouch monodroid xammac mobile mobile_static net_4_0 net_4_5, $(PROFILE))
+VALID_PROFILE := $(filter monotouch monodroid xammac mobile mobile_static net_4_5, $(PROFILE))
 ifndef VALID_PROFILE
 LIBRARY_NAME = dummy-System.System.Reactive.Core.dll
 NO_SIGN_ASSEMBLY = yes
index 3e308212455700332b681ae8fd5fdf56d117b64a..5c6bfce0e53384cc5aca2d1509c3392626edff8f 100644 (file)
@@ -24,7 +24,7 @@ TEST_MCS_FLAGS = $(LIB_MCS_FLAGS)
 
 EXTRA_DISTFILES = more_build_args
 
-VALID_PROFILE := $(filter monotouch monodroid xammac mobile mobile_static net_4_0 net_4_5, $(PROFILE))
+VALID_PROFILE := $(filter monotouch monodroid xammac mobile mobile_static net_4_5, $(PROFILE))
 ifndef VALID_PROFILE
 LIBRARY_NAME = dummy-System.System.Reactive.Debugger.dll
 NO_SIGN_ASSEMBLY = yes
index 834240acccced2c97b463e2d9c22a56a3bc1109c..ae09c0250c1973f6799ba210b93ddefcf3728b69 100644 (file)
@@ -24,7 +24,7 @@ TEST_MCS_FLAGS = $(LIB_MCS_FLAGS)
 
 EXTRA_DISTFILES = more_build_args
 
-VALID_PROFILE := $(filter monotouch monodroid xammac mobile mobile_static net_4_0 net_4_5, $(PROFILE))
+VALID_PROFILE := $(filter monotouch monodroid xammac mobile mobile_static net_4_5, $(PROFILE))
 ifndef VALID_PROFILE
 LIBRARY_NAME = dummy-System.System.Reactive.Experimental.dll
 NO_SIGN_ASSEMBLY = yes
index fae46634976d52c74dc03052ca9784cc990d6905..24134ebfae3b7f1f0ef5d11fca8f9007753880c6 100644 (file)
@@ -21,7 +21,7 @@ TEST_MCS_FLAGS = $(LIB_MCS_FLAGS)
 
 EXTRA_DISTFILES = more_build_args
 
-VALID_PROFILE := $(filter monotouch monodroid xammac mobile mobile_static net_4_0 net_4_5, $(PROFILE))
+VALID_PROFILE := $(filter monotouch monodroid xammac mobile mobile_static net_4_5, $(PROFILE))
 ifndef VALID_PROFILE
 LIBRARY_NAME = dummy-System.System.Reactive.Interfaces.dll
 NO_SIGN_ASSEMBLY = yes
index 3906cfc6adc2657985fa4dea86354e732d01a364..14f963dce29974a1773a5938705b8bd38ecb4bda 100644 (file)
@@ -36,7 +36,7 @@ TEST_MCS_FLAGS = $(LIB_MCS_FLAGS)
 
 EXTRA_DISTFILES = more_build_args $(RESX_RESOURCES:.resources=.resx) $(PREBUILT)
 
-VALID_PROFILE := $(filter monotouch monodroid xammac mobile mobile_static net_4_0 net_4_5, $(PROFILE))
+VALID_PROFILE := $(filter monotouch monodroid xammac mobile mobile_static net_4_5, $(PROFILE))
 ifndef VALID_PROFILE
 LIBRARY_NAME = dummy-System.System.Reactive.Linq.dll
 NO_SIGN_ASSEMBLY = yes
index 6a35d936f6b33d0254536ec93fb281e3b30e6fda..94257aee3c6f6798e3fe70c945bfcad2f7f787aa 100644 (file)
@@ -35,7 +35,7 @@ TEST_MCS_FLAGS = $(LIB_MCS_FLAGS)
 
 EXTRA_DISTFILES = more_build_args $(RESX_RESOURCES:.resources=.resx) $(PREBUILT)
 
-VALID_PROFILE := $(filter monodroid xammac net_4_0 net_4_5, $(PROFILE))
+VALID_PROFILE := $(filter monodroid xammac net_4_5, $(PROFILE))
 ifndef VALID_PROFILE
 LIBRARY_NAME = dummy-System.System.Reactive.Observable.Aliases.dll
 NO_SIGN_ASSEMBLY = yes
index 6fccc274c42098c9503f86aa116d976ac5781c95..46317bdfd8ccdc146d86708fd8040cf1f30ac5e2 100644 (file)
@@ -42,7 +42,7 @@ TEST_MCS_FLAGS = $(LIB_MCS_FLAGS) -r:Mono.Reactive.Tests.dll
 
 EXTRA_DISTFILES = more_build_args $(RESX_RESOURCES:.resources=.resx) $(PREBUILT)
 
-VALID_PROFILE := $(filter monotouch monodroid xammac mobile mobile_static net_4_0 net_4_5, $(PROFILE))
+VALID_PROFILE := $(filter monotouch monodroid xammac mobile mobile_static net_4_5, $(PROFILE))
 ifndef VALID_PROFILE
 LIBRARY_NAME = dummy-System.System.Reactive.PlatformServices.dll
 NO_SIGN_ASSEMBLY = yes
index bb695d90ee2092544e3879b2b6a813950281a5d2..a79e1e191bf4a8495f10629c25efcf353d87603e 100644 (file)
@@ -37,7 +37,7 @@ TEST_MCS_FLAGS = $(LIB_MCS_FLAGS)
 
 EXTRA_DISTFILES = more_build_args $(RESX_RESOURCES:.resources=.resx) $(PREBUILT)
 
-VALID_PROFILE := $(filter monodroid xammac net_4_0 net_4_5, $(PROFILE))
+VALID_PROFILE := $(filter monodroid xammac net_4_5, $(PROFILE))
 ifndef VALID_PROFILE
 LIBRARY_NAME = dummy-System.System.Reactive.Providers.dll
 NO_SIGN_ASSEMBLY = yes
index e5fbf287ad261a8568c4a08ba84d2029acdf1a60..8cce93de016a9cbdc091f49061e3a0bcb4672bbd 100644 (file)
@@ -24,7 +24,7 @@ TEST_MCS_FLAGS = $(LIB_MCS_FLAGS)
 
 EXTRA_DISTFILES = more_build_args
 
-VALID_PROFILE := $(filter net_4_0 net_4_5, $(PROFILE))
+VALID_PROFILE := $(filter net_4_5, $(PROFILE))
 ifndef VALID_PROFILE
 LIBRARY_NAME = dummy-System.System.Reactive.Runtime.Remoting.dll
 NO_SIGN_ASSEMBLY = yes
index bc427b92a19e358efaa0acc2e53a41d36f646e31..2cd018ccec32ac565fbed3631c30239ce8969d9e 100644 (file)
@@ -25,7 +25,7 @@ TEST_MCS_FLAGS = $(LIB_MCS_FLAGS)
 
 EXTRA_DISTFILES = more_build_args
 
-VALID_PROFILE := $(filter net_4_0 net_4_5, $(PROFILE))
+VALID_PROFILE := $(filter net_4_5, $(PROFILE))
 ifndef VALID_PROFILE
 LIBRARY_NAME = dummy-System.System.Reactive.Windows.Forms.dll
 NO_SIGN_ASSEMBLY = yes
index dd68cd5a03bd484cf8d4d7447c057e7854ac4584..31b469e77add98df6208631d002864de7c38f78f 100644 (file)
@@ -38,7 +38,7 @@ TEST_MCS_FLAGS = $(LIB_MCS_FLAGS)
 
 EXTRA_DISTFILES = more_build_args $(RESX_RESOURCES:.resources=.resx) $(PREBUILT)
 
-VALID_PROFILE := $(filter net_4_0 net_4_5, $(PROFILE))
+VALID_PROFILE := $(filter net_4_5, $(PROFILE))
 ifndef VALID_PROFILE
 LIBRARY_NAME = dummy-System.System.Reactive.Windows.Threading.dll
 NO_SIGN_ASSEMBLY = yes
index 752a5f3f82b2a6efa84b57d1f7c3bc224b07efc2..13da5a067e3bbbb0ec81dadf29cbd1fc5bd6e5f8 100644 (file)
@@ -12,7 +12,7 @@ LOCAL_MCS_FLAGS = -lib:$(secxml_libdir) -lib:$(bare_libdir)
 
 TEST_MCS_FLAGS = $(LIB_MCS_FLAGS) -nowarn:168,169,183,219,414,1595
 
-VALID_PROFILE := $(filter moonlight_raw net_4_0 net_4_5, $(PROFILE))
+VALID_PROFILE := $(filter moonlight_raw net_4_5, $(PROFILE))
 
 EXTRA_DISTFILES = \
        Test/System.Security.Cryptography.Xml/sample.pfx \
@@ -33,12 +33,3 @@ $(the_libdir_base)/Mono.Security.dll:
        (cd ../Mono.Security; $(MAKE))
 
 .NOTPARALLEL: $(secxml_libdir)/System.dll $(bare_libdir)/Mono.Security.dll
-
-# run the PKITS tests only if the data was installed/activated, otherwise ignore them
-ifeq (net_2_0, $(PROFILE))
-pkits_files := $(wildcard ../System/Test/System.Security.Cryptography.X509Certificates/pkits/hint)
-ifndef pkits_files
-TEST_HARNESS_EXCLUDES = -exclude:NotWorking,ValueAdd,CAS,InetAccess,PKITS
-TEST_HARNESS_EXCLUDES_ONDOTNET = -exclude:NotDotNet,CAS,PKITS
-endif
-endif
index b6259de7ad11c99465c0f96d24d462ee324cf03d..5c69fccc6ec9847ef5123bc55c6087aeb5800968 100644 (file)
@@ -1,13 +1,9 @@
-PROFILE = net_1_1
+PROFILE = net_4_5
 RUNTIME = MONO_PATH=../../../lib/$(PROFILE) mono --debug 
 #XMLDSIG_EXE_OPTIONS =
 XMLDSIG_EXE_OPTIONS = --decent-reader
 
-ifeq ($(PROFILE), net_2_0)
-CSCOMPILE = gmcs --debug -d:NET_2_0
-else
 CSCOMPILE = mcs --debug
-endif
 
 run-test: c14n.exe xmldsig.exe merlin-xmldsig-twenty-three
        $(RUNTIME) $(RUNTIME_FLAGS) c14n.exe merlin-xmldsig-twenty-three/signature-enveloped-dsa.xml SignedInfo | cmp merlin-xmldsig-twenty-three/signature-enveloped-dsa-c14n-1.txt
index 01d85a20b5d9f26215fd814c0dcde9f1bd8e9143..d73b0866495cf0a32fe3ef8b2796ea619e8a36f2 100644 (file)
@@ -29,11 +29,13 @@ using System;
 using System.Collections.Generic;
 using System.IO;
 using System.Net;
+using System.Net.Sockets;
 using System.Net.Security;
 using System.ServiceModel;
 using System.ServiceModel.Description;
 using System.ServiceModel.Security;
 using System.Threading;
+using System.Xml;
 
 namespace System.ServiceModel.Channels
 {
@@ -124,12 +126,29 @@ namespace System.ServiceModel.Channels
                                        }
                                        try {
                                                return TryReceiveRequest (tout, out ctx);
+                                       } catch (XmlException ex) {
+                                               Console.WriteLine ("Xml Exception (Dropped Connection?):" + ex.Message);
+                                               //on dropped connection, 
+                                               //whatever you do don't crash
+                                               //the whole app.  Ignore for now
+                                       } catch (SocketException ex) {
+                                               Console.WriteLine ("Socket Exception (Dropped Connection?):" + ex.Message);
+                                               //on dropped connection, 
+                                               //whatever you do don't crash
+                                               //the whole app.  Ignore for now
+                                       } catch (IOException ex) {
+                                               Console.WriteLine ("I/O Exception (Dropped Connection?):" + ex.Message);
+                                               //on dropped connection, 
+                                               //whatever you do don't crash
+                                               //the whole app.  Ignore for now
                                        } finally {
                                                lock (async_result_lock) {
                                                        CurrentAsyncResult = null;
                                                        CurrentAsyncThread = null;
                                                }
                                        }
+                                       ctx = null;
+                                       return false;
                                        });
                        RequestContext dummy;
                        IAsyncResult result;
index fe05194d15b9e2054b90e581a3e7bdb55ea01ab3..1fcb4e2c413219142c6373d833efc88a60b68263 100644 (file)
@@ -5,6 +5,9 @@ using System.ServiceModel.Channels;
 using System.ServiceModel.Security;
 using System.ServiceModel.Security.Tokens;
 using System.Text;
+using System.IO;
+using System.Xml;
+using System.Net.Sockets;
 
 namespace System.ServiceModel.Dispatcher
 {
@@ -24,8 +27,34 @@ namespace System.ServiceModel.Dispatcher
                        using (new OperationContextScope (mrc.OperationContext)) {
                                try {
                                        process_handlers_chain.ProcessRequestChain (mrc);
-                               }
-                               catch (Exception e) {
+                               } catch (IOException e) {
+                                       // FIXME?: On dropped connection do not
+                                       // dump a stacktrace, but should be safe
+                                       // to dump a console message as in
+                                       // default exception handler and 
+                                       // call error_handlers_chain
+                                       Console.WriteLine ("I/O Error (Dropped Connection?): " + e.Message);
+                                       mrc.ProcessingException = e;
+                                       error_handlers_chain.ProcessRequestChain (mrc);
+                               } catch (SocketException e) {
+                                       // FIXME?: On dropped connection do not
+                                       // dump a stacktrace, but should be safe
+                                       // to dump a console message as in
+                                       // default exception handler and 
+                                       // call error_handlers_chain
+                                       Console.WriteLine ("SocketExcpetion (Dropped Connection?): " + e.Message);
+                                       mrc.ProcessingException = e;
+                                       error_handlers_chain.ProcessRequestChain (mrc);
+                               } catch (XmlException e) {
+                                       // FIXME?: On dropped connection do not
+                                       // dump a stacktrace, but should be safe
+                                       // to dump a console message as in
+                                       // default exception handler and 
+                                       // call error_handlers_chain
+                                       Console.WriteLine ("XmlException (Dropped Connection?): " + e.Message);
+                                       mrc.ProcessingException = e;
+                                       error_handlers_chain.ProcessRequestChain (mrc);                         
+                               } catch (Exception e) {
                                        // FIXME: this is not really expected use of ChannelDispatcher.ErrorHandlers.
                                        // They are now correctly used in process_handler_chain (namely OperationInvokerHandler).
                                        // For this kind of "outsider" exceptions are actually left thrown
index 15731e65a3a594d4909d5bdf3a59236debb2f5ab..ca5e2e34c81bbd40723ec97a1865f59a52b58207 100644 (file)
@@ -35,6 +35,9 @@ using System.Threading;
 using System.Transactions;
 using System.ServiceModel;
 using System.ServiceModel.Description;
+using System.Net.Sockets;
+using System.Xml;
+using System.IO;
 
 namespace System.ServiceModel.Dispatcher
 {
@@ -598,7 +601,10 @@ namespace System.ServiceModel.Dispatcher
                                        if (ProcessErrorWithHandlers (reply, ex, out res))
                                                return;
 
-                                       rc.Reply (res);
+                                       if ((!(ex is SocketException)) && 
+                                           (!(ex is XmlException)) &&
+                                           (!(ex is IOException)))
+                                               rc.Reply (res);
                                        
                                        reply.Close (owner.DefaultCloseTimeout); // close the channel
                                } finally {
index 991adbe5b4a99a2c2f21dc48e65f84d54862a355..42b8119fa446de517bc42ee007c5d1fd74c3dc4f 100644 (file)
@@ -13,7 +13,7 @@ TEST_MCS_FLAGS = $(LIB_MCS_FLAGS)
 EXTRA_DISTFILES =
 
 # This is a .NET 3.5+ assembly
-VALID_PROFILE := $(filter net_4_0 net_4_5, $(PROFILE))
+VALID_PROFILE := $(filter net_4_5, $(PROFILE))
 ifndef VALID_PROFILE
 LIBRARY_NAME = dummy-System.Web.Abstractions.dll
 NO_INSTALL = yes
diff --git a/mcs/class/System.Web.ApplicationServices/ReferenceSources/ApplicationServicesStrings.cs b/mcs/class/System.Web.ApplicationServices/ReferenceSources/ApplicationServicesStrings.cs
deleted file mode 100644 (file)
index c443b2e..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-//
-// ApplicationServicesStrings.cs: Manually collected resource strings for ReferenceSources
-//
-// Authors:
-//     Alexander Köplinger  <alex.koeplinger@outlook.com>
-//     Jo Shields <jo.shields@xamarin.com>
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-internal class ApplicationServicesStrings
-{
-       public const string Can_not_use_encrypted_passwords_with_autogen_keys = "Can_not_use_encrypted_passwords_with_autogen_keys";
-       public const string CustomLoader_ForbiddenByHost = "CustomLoader_ForbiddenByHost";
-       public const string CustomLoader_NoAttributeFound = "CustomLoader_NoAttributeFound";
-       public const string CustomLoader_NotInFullTrust = "CustomLoader_NotInFullTrust";
-       public const string CustomLoader_MustImplementICustomLoader = "CustomLoader_MustImplementICustomLoader";
-       public const string Membership_DuplicateEmail = "Membership_DuplicateEmail";
-       public const string Membership_DuplicateProviderUserKey = "Membership_DuplicateProviderUserKey";
-       public const string Membership_DuplicateUserName = "Membership_DuplicateUserName";
-       public const string Membership_InvalidAnswer = "Membership_InvalidAnswer";
-       public const string Membership_InvalidEmail = "Membership_InvalidEmail";
-       public const string Membership_InvalidPassword = "Membership_InvalidPassword";
-       public const string Membership_InvalidProviderUserKey = "Membership_InvalidProviderUserKey";
-       public const string Membership_InvalidQuestion = "Membership_InvalidQuestion";
-       public const string Membership_InvalidUserName = "Membership_InvalidUserName";
-       public const string Membership_no_error = "Membership_no_error";
-       public const string Membership_provider_name_invalid = "Membership_provider_name_invalid";
-       public const string Membership_UserRejected = "Membership_UserRejected";
-       public const string Parameter_can_not_be_empty = "Parameter_can_not_be_empty";
-       public const string Platform_not_supported = "Platform_not_supported";
-       public const string Provider_Error = "Provider_Error";
-       public const string Provider_must_implement_type = "Provider_must_implement_type";
-}
diff --git a/mcs/class/System.Web.ApplicationServices/System.Web.Configuration/MembershipPasswordCompatibilityMode.cs b/mcs/class/System.Web.ApplicationServices/System.Web.Configuration/MembershipPasswordCompatibilityMode.cs
new file mode 100644 (file)
index 0000000..367108c
--- /dev/null
@@ -0,0 +1,37 @@
+//
+// System.Web.Security.MembershipPasswordCompatibilityMode
+//
+// Authors:
+//    Marek Habersack <mhabersack@novell.com>
+//
+// Copyright (C) 2010 Novell, Inc (http://novell.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+using System;
+
+namespace System.Web.Configuration
+{
+       public enum MembershipPasswordCompatibilityMode
+       {
+               Framework20,
+               Framework40
+       }
+}
diff --git a/mcs/class/System.Web.ApplicationServices/System.Web.Security/MembershipCreateStatus.cs b/mcs/class/System.Web.ApplicationServices/System.Web.Security/MembershipCreateStatus.cs
new file mode 100644 (file)
index 0000000..71fddb4
--- /dev/null
@@ -0,0 +1,51 @@
+//
+// System.Web.Security.MembershipCreateStatus
+//
+// Authors:
+//     Ben Maurer (bmaurer@users.sourceforge.net)
+//
+// (C) 2003 Ben Maurer
+// Copyright (C) 2005 Novell, Inc (http://www.novell.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+using System.Runtime.CompilerServices;
+
+namespace System.Web.Security
+{
+       [TypeForwardedFrom ("System.Web, Version=2.0.0.0, Culture=Neutral, PublicKeyToken=b03f5f7f11d50a3a")]
+       public enum MembershipCreateStatus
+       {
+               Success,
+               InvalidUserName,
+               InvalidPassword,
+               InvalidQuestion,
+               InvalidAnswer,
+               InvalidEmail,
+               DuplicateUserName,
+               DuplicateEmail,
+               UserRejected,
+               InvalidProviderUserKey,
+               DuplicateProviderUserKey,
+               ProviderError
+       }
+}
+
+
diff --git a/mcs/class/System.Web.ApplicationServices/System.Web.Security/MembershipCreateUserException.cs b/mcs/class/System.Web.ApplicationServices/System.Web.Security/MembershipCreateUserException.cs
new file mode 100644 (file)
index 0000000..a5f9e31
--- /dev/null
@@ -0,0 +1,77 @@
+//
+// System.Web.Security.MembershipCreateUserException
+//
+// Authors:
+//     Ben Maurer (bmaurer@users.sourceforge.net)
+//
+// (C) 2003 Ben Maurer
+//
+
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Runtime.Serialization;
+using System.Runtime.CompilerServices;
+
+namespace System.Web.Security
+{
+       [TypeForwardedFrom ("System.Web, Version=2.0.0.0, Culture=Neutral, PublicKeyToken=b03f5f7f11d50a3a")]
+       [Serializable]
+       public class MembershipCreateUserException : Exception
+       {
+               MembershipCreateStatus statusCode;
+               
+               public MembershipCreateUserException ()
+               {
+               }
+               
+               public MembershipCreateUserException (string message): base (message)
+               {
+               }
+               
+               public MembershipCreateUserException (string message, Exception innerException): base (message, innerException)
+               {
+               }
+               
+               protected MembershipCreateUserException (SerializationInfo info, StreamingContext context): base (info, context)
+               {
+                       info.AddValue ("statusCode", statusCode);
+               }
+               
+               public MembershipCreateUserException (MembershipCreateStatus statusCode) : base (statusCode.ToString ())
+               {
+                       this.statusCode = statusCode;
+               }
+               
+               public override void GetObjectData (SerializationInfo info, StreamingContext ctx)
+               {
+                       base.GetObjectData (info, ctx);
+                       statusCode = (MembershipCreateStatus) info.GetValue ("statusCode", typeof(MembershipCreateStatus));
+               }
+               
+               public MembershipCreateStatus StatusCode {
+                       get { return statusCode; }
+               }
+       }
+}
+
+
diff --git a/mcs/class/System.Web.ApplicationServices/System.Web.Security/MembershipPasswordException.cs b/mcs/class/System.Web.ApplicationServices/System.Web.Security/MembershipPasswordException.cs
new file mode 100644 (file)
index 0000000..5bf60eb
--- /dev/null
@@ -0,0 +1,51 @@
+//
+// System.Web.Security.MembershipPasswordException
+//
+// Authors:
+//     Ben Maurer (bmaurer@users.sourceforge.net)
+//
+// (C) 2003 Ben Maurer
+//
+
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Runtime.Serialization;
+using System.Runtime.CompilerServices;
+
+namespace System.Web.Security
+{
+       [TypeForwardedFrom ("System.Web, Version=2.0.0.0, Culture=Neutral, PublicKeyToken=b03f5f7f11d50a3a")]
+       [Serializable]
+       public class MembershipPasswordException : Exception
+       {
+               public MembershipPasswordException () : base () {}
+               public MembershipPasswordException (string message) : base (message) {}
+               public MembershipPasswordException (string message, Exception innerException) : base (message, innerException) {}
+               
+               protected MembershipPasswordException (SerializationInfo info, StreamingContext context): base (info, context)
+               {
+               }
+       }
+}
+
+
diff --git a/mcs/class/System.Web.ApplicationServices/System.Web.Security/MembershipPasswordFormat.cs b/mcs/class/System.Web.ApplicationServices/System.Web.Security/MembershipPasswordFormat.cs
new file mode 100644 (file)
index 0000000..2948618
--- /dev/null
@@ -0,0 +1,43 @@
+//
+// System.Web.Security.MembershipPasswordFormat
+//
+// Authors:
+//     Ben Maurer (bmaurer@users.sourceforge.net)
+//
+// (C) 2003 Ben Maurer
+//
+
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+using System.Runtime.CompilerServices;
+
+namespace System.Web.Security
+{
+       [TypeForwardedFrom ("System.Web, Version=2.0.0.0, Culture=Neutral, PublicKeyToken=b03f5f7f11d50a3a")]
+       public enum MembershipPasswordFormat
+       {
+               Clear = 0, 
+               Hashed = 1,
+               Encrypted = 2
+       }
+}
+
+
diff --git a/mcs/class/System.Web.ApplicationServices/System.Web.Security/MembershipProvider.cs b/mcs/class/System.Web.ApplicationServices/System.Web.Security/MembershipProvider.cs
new file mode 100644 (file)
index 0000000..068e1c4
--- /dev/null
@@ -0,0 +1,137 @@
+//
+// System.Web.Security.MembershipProvider
+//
+// Authors:
+//     Ben Maurer (bmaurer@users.sourceforge.net)
+//     Lluis Sanchez Gual (lluis@novell.com)
+//
+// (C) 2003 Ben Maurer
+// Copyright (C) 2005-2010 Novell, Inc (http://www.novell.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System.ComponentModel;
+using System.Configuration.Provider;
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Text;
+using System.Web.Configuration;
+
+namespace System.Web.Security
+{
+       [TypeForwardedFrom ("System.Web, Version=2.0.0.0, Culture=Neutral, PublicKeyToken=b03f5f7f11d50a3a")]
+       public abstract class MembershipProvider : ProviderBase
+       {
+               const string HELPER_TYPE_NAME = "System.Web.Security.MembershipHelper, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a";
+
+               internal static IMembershipHelper Helper {
+                       get { return helper; }
+               }
+               static IMembershipHelper helper;
+               
+               static readonly object validatingPasswordEvent = new object ();
+               
+               EventHandlerList events = new EventHandlerList ();
+               public event MembershipValidatePasswordEventHandler ValidatingPassword {
+                       add { events.AddHandler (validatingPasswordEvent, value); }
+                       remove { events.RemoveHandler (validatingPasswordEvent, value); }
+               }
+
+               static MembershipProvider ()
+               {
+                       Type type = Type.GetType (HELPER_TYPE_NAME, false);
+                       if (type == null)
+                               return;
+
+                       try {
+                               helper = Activator.CreateInstance (type) as IMembershipHelper;
+                       } catch {
+                               // ignore
+                       }
+               }
+
+               protected MembershipProvider ()
+               {
+               }
+               
+               public abstract bool ChangePassword (string name, string oldPwd, string newPwd);
+               public abstract bool ChangePasswordQuestionAndAnswer (string name, string password, string newPwdQuestion, string newPwdAnswer);
+               public abstract MembershipUser CreateUser (string username, string password, string email, string pwdQuestion, string pwdAnswer, bool isApproved, object providerUserKey, out MembershipCreateStatus status);
+               public abstract bool DeleteUser (string name, bool deleteAllRelatedData);
+               public abstract MembershipUserCollection FindUsersByEmail (string emailToMatch, int pageIndex, int pageSize, out int totalRecords);
+               public abstract MembershipUserCollection FindUsersByName (string nameToMatch, int pageIndex, int pageSize, out int totalRecords);
+               public abstract MembershipUserCollection GetAllUsers (int pageIndex, int pageSize, out int totalRecords);
+               public abstract int GetNumberOfUsersOnline ();
+               public abstract string GetPassword (string name, string answer);
+               public abstract MembershipUser GetUser (string name, bool userIsOnline);
+               public abstract MembershipUser GetUser (object providerUserKey, bool userIsOnline);
+               public abstract string GetUserNameByEmail (string email);
+               public abstract string ResetPassword (string name, string answer);
+               public abstract void UpdateUser (MembershipUser user);
+               public abstract bool ValidateUser (string name, string password);
+               public abstract bool UnlockUser (string userName);
+               
+               public abstract string ApplicationName { get; set; }
+               public abstract bool EnablePasswordReset { get; }
+               public abstract bool EnablePasswordRetrieval { get; }
+               public abstract bool RequiresQuestionAndAnswer { get; }
+               public abstract int MaxInvalidPasswordAttempts { get; }
+               public abstract int MinRequiredNonAlphanumericCharacters { get; }
+               public abstract int MinRequiredPasswordLength { get; }
+               public abstract int PasswordAttemptWindow { get; }
+               public abstract MembershipPasswordFormat PasswordFormat { get; }
+               public abstract string PasswordStrengthRegularExpression { get; }
+               public abstract bool RequiresUniqueEmail { get; }
+               
+               protected virtual void OnValidatingPassword (ValidatePasswordEventArgs args)
+               {
+                       MembershipValidatePasswordEventHandler eh = events [validatingPasswordEvent] as MembershipValidatePasswordEventHandler;
+                       if (eh != null)
+                               eh (this, args);
+               }
+
+               protected virtual byte [] DecryptPassword (byte [] encodedPassword)
+               {
+                       if (helper == null)
+                               throw new PlatformNotSupportedException ("This method is not available.");
+                       return helper.DecryptPassword (encodedPassword);
+               }
+
+               protected virtual byte[] EncryptPassword (byte[] password)
+               {
+                       return EncryptPassword (password, MembershipPasswordCompatibilityMode.Framework20);
+               }
+               [MonoTODO ("Discover what actually is 4.0 password compatibility mode.")]
+               protected virtual byte[] EncryptPassword (byte[] password, MembershipPasswordCompatibilityMode legacyPasswordCompatibilityMode)
+               {
+                       if (helper == null)
+                               throw new PlatformNotSupportedException ("This method is not available.");
+
+                       if (legacyPasswordCompatibilityMode == MembershipPasswordCompatibilityMode.Framework40)
+                               throw new PlatformNotSupportedException ("Framework 4.0 password encryption mode is not supported at this time.");
+                       
+                       return helper.EncryptPassword (password);
+               }
+       }
+}
+
+
+
diff --git a/mcs/class/System.Web.ApplicationServices/System.Web.Security/MembershipProviderCollection.cs b/mcs/class/System.Web.ApplicationServices/System.Web.Security/MembershipProviderCollection.cs
new file mode 100644 (file)
index 0000000..be25a05
--- /dev/null
@@ -0,0 +1,62 @@
+//
+// System.Web.Security.MembershipProviderCollection
+//
+// Authors:
+//     Ben Maurer (bmaurer@users.sourceforge.net)
+//     Sebastien Pouliot  <sebastien@ximian.com>
+//
+// (C) 2003 Ben Maurer
+// Copyright (c) 2005 Novell, Inc (http://www.novell.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+using System.Configuration.Provider;
+using System.Runtime.CompilerServices;
+
+namespace System.Web.Security
+{
+       [TypeForwardedFrom ("System.Web, Version=2.0.0.0, Culture=Neutral, PublicKeyToken=b03f5f7f11d50a3a")]
+       public sealed class MembershipProviderCollection : ProviderCollection
+       {
+               public override void Add (ProviderBase provider)
+               {
+                       if (provider == null)
+                               throw new ArgumentNullException ("provider");
+
+                       if (provider is MembershipProvider)
+                               base.Add (provider);
+                       else {
+                               throw new ArgumentException ("provider", Locale.GetText (
+                                       "Wrong type, expected {0}.", "MembershipProvider"));
+                       }
+               }
+               
+               public void CopyTo (MembershipProvider[] array, int index)
+               {
+                       base.CopyTo (array, index);
+               }
+               
+               public new MembershipProvider this [string name] {
+                       get { return (MembershipProvider) base [name]; }
+               }
+       }
+}
+
+
diff --git a/mcs/class/System.Web.ApplicationServices/System.Web.Security/MembershipUser.cs b/mcs/class/System.Web.ApplicationServices/System.Web.Security/MembershipUser.cs
new file mode 100644 (file)
index 0000000..c370f21
--- /dev/null
@@ -0,0 +1,239 @@
+//
+// System.Web.Security.MembershipUser
+//
+// Authors:
+//     Ben Maurer (bmaurer@users.sourceforge.net)
+//
+// (C) 2003 Ben Maurer
+//
+
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+using System;
+using System.Reflection;
+using System.Runtime.CompilerServices;
+
+namespace System.Web.Security
+{
+       [TypeForwardedFrom ("System.Web, Version=2.0.0.0, Culture=Neutral, PublicKeyToken=b03f5f7f11d50a3a")]
+       [Serializable]
+       public class MembershipUser
+       {
+               string providerName;
+               string name;
+               object providerUserKey;
+               string email;
+               string passwordQuestion;
+               string comment;
+               bool isApproved;
+               bool isLockedOut;
+               DateTime creationDate;
+               DateTime lastLoginDate;
+               DateTime lastActivityDate;
+               DateTime lastPasswordChangedDate;
+               DateTime lastLockoutDate;
+
+               protected MembershipUser ()
+               {
+               }
+               
+               public MembershipUser (string providerName, string name, object providerUserKey, string email,
+                       string passwordQuestion, string comment, bool isApproved, bool isLockedOut,
+                       DateTime creationDate, DateTime lastLoginDate, DateTime lastActivityDate,
+                       DateTime lastPasswordChangedDate, DateTime lastLockoutDate)
+               {
+                       this.providerName = providerName;
+                       this.name = name;
+                       this.providerUserKey = providerUserKey;
+                       this.email = email;
+                       this.passwordQuestion = passwordQuestion;
+                       this.comment = comment;
+                       this.isApproved = isApproved;
+                       this.isLockedOut = isLockedOut;
+                       this.creationDate = creationDate.ToUniversalTime ();
+                       this.lastLoginDate = lastLoginDate.ToUniversalTime ();
+                       this.lastActivityDate = lastActivityDate.ToUniversalTime ();
+                       this.lastPasswordChangedDate = lastPasswordChangedDate.ToUniversalTime ();
+                       this.lastLockoutDate = lastLockoutDate.ToUniversalTime ();
+               }
+               
+               void UpdateSelf (MembershipUser fromUser)
+               {
+                       try { Comment = fromUser.Comment; } catch (NotSupportedException) {}
+                       try { creationDate = fromUser.CreationDate; } catch (NotSupportedException) {}
+                       try { Email = fromUser.Email; } catch (NotSupportedException) {}
+                       try { IsApproved = fromUser.IsApproved; } catch (NotSupportedException) {}
+                       try { isLockedOut = fromUser.IsLockedOut; } catch (NotSupportedException) {}
+                       try { LastActivityDate = fromUser.LastActivityDate; } catch (NotSupportedException) {}
+                       try { lastLockoutDate = fromUser.LastLockoutDate; } catch (NotSupportedException) {}
+                       try { LastLoginDate = fromUser.LastLoginDate; } catch (NotSupportedException) {}
+                       try { lastPasswordChangedDate = fromUser.LastPasswordChangedDate; } catch (NotSupportedException) {}
+                       try { passwordQuestion = fromUser.PasswordQuestion; } catch (NotSupportedException) {}
+                       try { providerUserKey = fromUser.ProviderUserKey; } catch (NotSupportedException) {}
+               }
+
+               internal void UpdateUser ()
+               {
+                       MembershipUser newUser = Provider.GetUser (UserName, false);
+                       UpdateSelf (newUser);
+               }
+
+               public virtual bool ChangePassword (string oldPassword, string newPassword)
+               {
+                       bool success = Provider.ChangePassword (UserName, oldPassword, newPassword);
+
+                       UpdateUser ();
+                       
+                       return success;
+               }
+               
+               public virtual bool ChangePasswordQuestionAndAnswer (string password, string newPasswordQuestion, string newPasswordAnswer)
+               {
+                       bool success = Provider.ChangePasswordQuestionAndAnswer (UserName, password, newPasswordQuestion, newPasswordAnswer);
+
+                       UpdateUser ();
+                       
+                       return success;
+               }
+               
+               public virtual string GetPassword ()
+               {
+                       return GetPassword (null);
+               }
+               
+               public virtual string GetPassword (string answer)
+               {
+                       return Provider.GetPassword (UserName, answer);
+               }
+               
+               public virtual string ResetPassword ()
+               {
+                       return ResetPassword (null);
+               }
+               
+               public virtual string ResetPassword (string answer)
+               {
+                       string newPass = Provider.ResetPassword (UserName, answer);
+
+                       UpdateUser ();
+                       
+                       return newPass;
+               }
+               
+               public virtual string Comment {
+                       get { return comment; }
+                       set { comment = value; }
+               }
+               
+               public virtual DateTime CreationDate {
+                       get { return creationDate.ToLocalTime (); }
+               }
+               
+               public virtual string Email {
+                       get { return email; }
+                       set { email = value; }
+               }
+               
+               public virtual bool IsApproved {
+                       get { return isApproved; }
+                       set { isApproved = value; }
+               }
+               
+               public virtual bool IsLockedOut {
+                       get { return isLockedOut; }
+               }
+
+               public virtual
+               bool IsOnline {
+                       get {
+                               int minutes;
+                               IMembershipHelper helper = MembershipProvider.Helper;
+                               if (helper == null)
+                                       throw new PlatformNotSupportedException ("The method is not available.");
+                               minutes = helper.UserIsOnlineTimeWindow;
+                               return LastActivityDate > DateTime.Now - TimeSpan.FromMinutes (minutes);
+                       }
+               }
+               
+               public virtual DateTime LastActivityDate {
+                       get { return lastActivityDate.ToLocalTime (); }
+                       set { lastActivityDate = value.ToUniversalTime (); }
+               }
+               
+               public virtual DateTime LastLoginDate {
+                       get { return lastLoginDate.ToLocalTime (); }
+                       set { lastLoginDate = value.ToUniversalTime (); }
+               }
+               
+               public virtual DateTime LastPasswordChangedDate {
+                       get { return lastPasswordChangedDate.ToLocalTime (); }
+               }
+               
+               public virtual DateTime LastLockoutDate {
+                       get { return lastLockoutDate.ToLocalTime (); }
+               }
+               
+               public virtual string PasswordQuestion {
+                       get { return passwordQuestion; }
+               }
+               
+               public virtual string ProviderName {
+                       get { return providerName; }
+               }
+               
+               public virtual string UserName {
+                       get { return name; }
+               }
+               
+               public virtual object ProviderUserKey {
+                       get { return providerUserKey; }
+               }
+               
+               public override string ToString ()
+               {
+                       return UserName;
+               }
+               
+               public virtual bool UnlockUser ()
+               {
+                       bool retval = Provider.UnlockUser (UserName);
+
+                       UpdateUser ();
+
+                       return retval;
+               }
+               
+               MembershipProvider Provider {
+                       get {
+                               MembershipProvider p;                           
+                               IMembershipHelper helper = MembershipProvider.Helper;
+                               if (helper == null)
+                                       throw new PlatformNotSupportedException ("The method is not available.");
+                               p = helper.Providers [ProviderName];
+                               if (p == null)
+                                       throw new InvalidOperationException ("Membership provider '" + ProviderName + "' not found.");
+                               return p;
+                       }
+               }
+       }
+}
+
+
diff --git a/mcs/class/System.Web.ApplicationServices/System.Web.Security/MembershipUserCollection.cs b/mcs/class/System.Web.ApplicationServices/System.Web.Security/MembershipUserCollection.cs
new file mode 100644 (file)
index 0000000..bbb689f
--- /dev/null
@@ -0,0 +1,112 @@
+//
+// System.Web.Security.MembershipUserCollection
+//
+// Authors:
+//     Ben Maurer (bmaurer@users.sourceforge.net)
+//
+// (C) 2003 Ben Maurer
+// Copyright (C) 2005-2010 Novell, Inc (http://www.novell.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System.Collections;
+using System.Runtime.CompilerServices;
+using System.Web.UI;
+
+namespace System.Web.Security
+{
+       [TypeForwardedFrom ("System.Web, Version=2.0.0.0, Culture=Neutral, PublicKeyToken=b03f5f7f11d50a3a")]
+       [Serializable]
+       public sealed class MembershipUserCollection : ICollection
+       {
+               public MembershipUserCollection ()
+               {
+               }
+               
+               public void Add (MembershipUser user)
+               {
+                       if (user == null)
+                               throw new ArgumentNullException ("user");
+
+                       CheckNotReadOnly ();
+                       store.Add (user.UserName, user);
+               }
+               
+               public void Clear ()
+               {
+                       CheckNotReadOnly ();
+                       store.Clear ();
+               }
+               
+               void ICollection.CopyTo (Array array, int index)
+               {
+                       store.Values.CopyTo (array, index);
+               }
+               
+               public void CopyTo (MembershipUser[] array, int index)
+               {
+                       store.Values.CopyTo (array, index);
+               }
+               
+               public IEnumerator GetEnumerator ()
+               {
+                       return ((IEnumerable) store).GetEnumerator ();
+               }
+               
+               public void Remove (string name)
+               {
+                       CheckNotReadOnly ();
+                       store.Remove (name);
+               }
+               
+               public void SetReadOnly ()
+               {
+                       readOnly = true;
+               }
+               
+               public int Count {
+                       get { return store.Count; }
+               }
+               
+               public bool IsSynchronized {
+                       get { return false; }
+               }
+               
+               public MembershipUser this [string name] {
+                       get { return (MembershipUser) store [name]; }
+               }
+               
+               public object SyncRoot {
+                       get { return this; }
+               }
+               
+               void CheckNotReadOnly ()
+               {
+                       if (readOnly)
+                               throw new NotSupportedException ();
+               }
+               
+               KeyedList store = new KeyedList ();
+               bool readOnly = false;
+       }
+}
+
+
diff --git a/mcs/class/System.Web.ApplicationServices/System.Web.Security/MembershipValidatePasswordEventHandler.cs b/mcs/class/System.Web.ApplicationServices/System.Web.Security/MembershipValidatePasswordEventHandler.cs
new file mode 100644 (file)
index 0000000..1c47511
--- /dev/null
@@ -0,0 +1,39 @@
+//
+// System.Web.Security.MembershipValidatePasswordEventHandler
+//
+// Authors:
+//     Lluis Sanchez Gual (lluis@novell.com)
+//
+// (C) 2005 Novell, inc.
+//
+
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System.Runtime.CompilerServices;
+
+namespace System.Web.Security
+{
+       [TypeForwardedFrom ("System.Web, Version=2.0.0.0, Culture=Neutral, PublicKeyToken=b03f5f7f11d50a3a")]
+       public delegate void MembershipValidatePasswordEventHandler (object sender, ValidatePasswordEventArgs e);
+}
+
+
diff --git a/mcs/class/System.Web.ApplicationServices/System.Web.Security/RoleProvider.cs b/mcs/class/System.Web.ApplicationServices/System.Web.Security/RoleProvider.cs
new file mode 100644 (file)
index 0000000..ad9079c
--- /dev/null
@@ -0,0 +1,56 @@
+//
+// System.Web.Security.IRoleProvider
+//
+// Authors:
+//     Ben Maurer (bmaurer@users.sourceforge.net)
+//
+// (C) 2003 Ben Maurer
+//
+
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+using System.Configuration.Provider;
+using System.Runtime.CompilerServices;
+
+namespace System.Web.Security
+{
+       [TypeForwardedFrom ("System.Web, Version=2.0.0.0, Culture=Neutral, PublicKeyToken=b03f5f7f11d50a3a")]
+       public abstract class RoleProvider : ProviderBase
+       {
+               protected RoleProvider ()
+               {
+               }
+               
+               public abstract void AddUsersToRoles (string [] usernames, string [] rolenames);
+               public abstract void CreateRole (string rolename);
+               public abstract bool DeleteRole (string rolename, bool throwOnPopulatedRole);
+               public abstract string [] FindUsersInRole (string roleName, string usernameToMatch);
+               public abstract string [] GetAllRoles ();
+               public abstract string [] GetRolesForUser (string username);
+               public abstract string [] GetUsersInRole (string rolename);
+               public abstract bool IsUserInRole (string username, string rolename);
+               public abstract void RemoveUsersFromRoles (string [] usernames, string [] rolenames);
+               public abstract bool RoleExists (string rolename);
+               public abstract string ApplicationName { get; set; }
+       }
+}
+
+
diff --git a/mcs/class/System.Web.ApplicationServices/System.Web.Security/ValidatePasswordEventArgs.cs b/mcs/class/System.Web.ApplicationServices/System.Web.Security/ValidatePasswordEventArgs.cs
new file mode 100644 (file)
index 0000000..ea18903
--- /dev/null
@@ -0,0 +1,74 @@
+//
+// System.Web.Security.ValidatePasswordEventArgs
+//
+// Authors:
+//     Lluis Sanchez Gual (lluis@novell.com)
+//
+// (C) 2005 Novell, inc.
+//
+
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+using System;
+using System.Runtime.CompilerServices;
+
+namespace System.Web.Security
+{
+       [TypeForwardedFrom ("System.Web, Version=2.0.0.0, Culture=Neutral, PublicKeyToken=b03f5f7f11d50a3a")]
+       public sealed class ValidatePasswordEventArgs: EventArgs
+       {
+               bool cancel;
+               Exception exception;
+               bool isNewUser;
+               string userName;
+               string password;
+               
+               public ValidatePasswordEventArgs (string userName, string password, bool isNewUser)
+               {
+                       this.isNewUser = isNewUser;
+                       this.userName = userName;
+                       this.password = password;
+               }
+               
+               public bool Cancel {
+                       get { return cancel; }
+                       set { cancel = value; }
+               }
+               
+               public Exception FailureInformation {
+                       get { return exception; }
+                       set { exception = value; }
+               }
+               
+               public bool IsNewUser {
+                       get { return isNewUser; }
+               }
+               
+               public string UserName {
+                       get { return userName; }
+               }
+               
+               public string Password {
+                       get { return password; }
+               }
+       }
+}
+
diff --git a/mcs/class/System.Web.ApplicationServices/System.Web.UI/KeyedList.cs b/mcs/class/System.Web.ApplicationServices/System.Web.UI/KeyedList.cs
new file mode 100644 (file)
index 0000000..384ba52
--- /dev/null
@@ -0,0 +1,181 @@
+//
+// System.Web.UI/KeyedList.cs
+//
+// Author: Todd Berman <tberman@gentoo.org>
+//
+// (C) 2003 Todd Berman
+
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System.Collections;
+using System.Collections.Specialized;
+
+namespace System.Web.UI
+{
+       class KeyedList : IOrderedDictionary
+       {
+
+               Hashtable objectTable = new Hashtable ();
+               ArrayList objectList = new ArrayList ();
+
+               public void Add (object key, object value)
+               {
+                       objectTable.Add (key, value);
+                       objectList.Add (new DictionaryEntry (key, value));
+               }
+
+               public void Clear ()
+               {
+                       objectTable.Clear ();
+                       objectList.Clear ();
+               }
+
+               public bool Contains (object key)
+               {
+                       return objectTable.Contains (key);
+               }
+
+               public void CopyTo (Array array, int idx)
+               {
+                       objectTable.CopyTo (array, idx);
+               }
+
+               public void Insert (int idx, object key, object value)
+               {
+                       if (idx > Count)
+                               throw new ArgumentOutOfRangeException ("index");
+
+                       objectTable.Add (key, value);
+                       objectList.Insert (idx, new DictionaryEntry (key, value));
+               }
+
+               public void Remove (object key)
+               {
+                       objectTable.Remove (key);
+                       int index = IndexOf (key);
+                       if (index >= 0)
+                               objectList.RemoveAt (index);
+               }
+
+               public void RemoveAt (int idx)
+               {
+                       if (idx >= Count)
+                               throw new ArgumentOutOfRangeException ("index");
+
+                       objectTable.Remove ( ((DictionaryEntry)objectList[idx]).Key );
+                       objectList.RemoveAt (idx);
+               }
+
+               IDictionaryEnumerator IDictionary.GetEnumerator ()
+               {
+                       return new KeyedListEnumerator (objectList);
+               }
+
+               IDictionaryEnumerator IOrderedDictionary.GetEnumerator ()
+               {
+                       return new KeyedListEnumerator (objectList);
+               }
+
+               IEnumerator IEnumerable.GetEnumerator ()
+               {
+                       return new KeyedListEnumerator (objectList);
+               }
+               public int Count {
+                       get { return objectList.Count; }
+               }
+
+               public bool IsFixedSize {
+                       get { return false; }
+               }
+
+               public bool IsReadOnly {
+                       get { return false; }
+               }
+
+               public bool IsSynchronized {
+                       get { return false; }
+               }
+
+               public object this[int idx] {
+                       get { return ((DictionaryEntry) objectList[idx]).Value; }
+                       set {
+                               if (idx < 0 || idx >= Count)
+                                       throw new ArgumentOutOfRangeException ("index");
+
+                               object key = ((DictionaryEntry) objectList[idx]).Key;
+                               objectList[idx] = new DictionaryEntry (key, value);
+                               objectTable[key] = value;
+                       }
+               }
+
+               public object this[object key] {
+                       get { return objectTable[key]; }
+                       set {
+                               if (objectTable.Contains (key))
+                               {
+                                       objectTable[key] = value;
+                                       objectTable[IndexOf (key)] = new DictionaryEntry (key, value);
+                                       return;
+                               }
+                               Add (key, value);
+                       }
+               }
+
+               public ICollection Keys {
+                       get { 
+                               ArrayList retList = new ArrayList ();
+                               for (int i = 0; i < objectList.Count; i++)
+                               {
+                                       retList.Add ( ((DictionaryEntry)objectList[i]).Key );
+                               }
+                               return retList;
+                       }
+               }
+
+               public ICollection Values {
+                       get {
+                               ArrayList retList = new ArrayList ();
+                               for (int i = 0; i < objectList.Count; i++)
+                               {
+                                       retList.Add ( ((DictionaryEntry)objectList[i]).Value );
+                               }
+                               return retList;
+                       }
+               }
+
+               public object SyncRoot {
+                       get { return this; }
+               }
+
+               int IndexOf (object key)
+               {
+                       for (int i = 0; i < objectList.Count; i++)
+                       {
+                               if (((DictionaryEntry) objectList[i]).Key.Equals (key))
+                               {
+                                       return i;
+                               }
+                       }
+                       return -1;
+               }
+       }
+}
diff --git a/mcs/class/System.Web.ApplicationServices/System.Web.UI/KeyedListEnumerator.cs b/mcs/class/System.Web.ApplicationServices/System.Web.UI/KeyedListEnumerator.cs
new file mode 100644 (file)
index 0000000..db916a2
--- /dev/null
@@ -0,0 +1,84 @@
+//
+// System.Web.UI/KeyedListEnumerator.cs
+//
+// Author: Todd Berman <tberman@gentoo.org>
+//
+// (C) 2003 Todd Berman
+
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System.Collections;
+
+namespace System.Web.UI
+{
+       internal class KeyedListEnumerator : IDictionaryEnumerator
+       {
+               int index = -1;
+               ArrayList objs;
+
+               internal KeyedListEnumerator (ArrayList list)
+               {
+                       objs = list;
+               }
+
+               public bool MoveNext ()
+               {
+                       index++;
+                       if (index >= objs.Count)
+                               return false;
+
+                       return true;
+               }
+
+               public void Reset ()
+               {
+                       index = -1;
+               }
+
+               public object Current {
+                       get {
+                               if (index < 0 || index >= objs.Count)
+                                       throw new InvalidOperationException ();
+
+                               return ((DictionaryEntry)objs[index]).Value;
+                       }
+               }
+
+               public DictionaryEntry Entry {
+                       get {
+                               return (DictionaryEntry) Current;
+                       }
+               }
+
+               public object Key {
+                       get {
+                               return Entry.Key;
+                       }
+               }
+
+               public object Value {
+                       get {
+                               return Entry.Value;
+                       }
+               }
+       }
+}
index ac410a8aca23135dc5477f7aadede828e48a6cfe..262a1889c417a77a45b184c21161778c5a7e8090 100644 (file)
@@ -4,29 +4,20 @@ Assembly/AssemblyInfo.cs
 ../../build/common/Consts.cs
 ../../build/common/Locale.cs
 ../../build/common/MonoTODOAttribute.cs
-../../build/common/SR.cs
 
+System.Web.Configuration/MembershipPasswordCompatibilityMode.cs
 System.Web.Security/IMembershipHelper.cs
-ReferenceSources/ApplicationServicesStrings.cs
-
-../../../external/referencesource/System.Web.ApplicationServices/Hosting/CustomLoaderAttribute.cs
-../../../external/referencesource/System.Web.ApplicationServices/Hosting/ICustomLoaderHelperFunctions.cs
-../../../external/referencesource/System.Web.ApplicationServices/Hosting/CustomLoaderHelper.cs
-../../../external/referencesource/System.Web.ApplicationServices/Configuration/MembershipPasswordCompatibilityMode.cs
-../../../external/referencesource/System.Web.ApplicationServices/Util/SecurityServices.cs
-../../../external/referencesource/System.Web.ApplicationServices/Util/SystemWebProxy.cs
-../../../external/referencesource/System.Web.ApplicationServices/Security/IMembershipAdapter.cs
-../../../external/referencesource/System.Web.ApplicationServices/Security/MembershipProvider.cs
-../../../external/referencesource/System.Web.ApplicationServices/Security/RoleProvider.cs
-../../../external/referencesource/System.Web.ApplicationServices/Security/MembershipCreateStatus.cs
-../../../external/referencesource/System.Web.ApplicationServices/Security/MembershipCreateUserException.cs
-../../../external/referencesource/System.Web.ApplicationServices/Security/MembershipProviderCollection.cs
-../../../external/referencesource/System.Web.ApplicationServices/Security/DefaultMembershipAdapter.cs
-../../../external/referencesource/System.Web.ApplicationServices/Security/ValidatePasswordEventArgs.cs
-../../../external/referencesource/System.Web.ApplicationServices/Security/MembershipValidatePasswordEventHandler.cs
-../../../external/referencesource/System.Web.ApplicationServices/Security/MembershipPasswordException.cs
-../../../external/referencesource/System.Web.ApplicationServices/Security/MembershipPasswordFormat.cs
-../../../external/referencesource/System.Web.ApplicationServices/Security/MembershipUserCollection.cs
-../../../external/referencesource/System.Web.ApplicationServices/Security/MembershipUser.cs
-../../../external/referencesource/System.Web.ApplicationServices/Properties/AssemblyInfo.cs
 
+System.Web.UI/KeyedList.cs
+System.Web.UI/KeyedListEnumerator.cs
+System.Web.Security/MembershipCreateStatus.cs
+System.Web.Security/MembershipCreateUserException.cs
+System.Web.Security/MembershipPasswordException.cs
+System.Web.Security/MembershipPasswordFormat.cs
+System.Web.Security/MembershipProviderCollection.cs
+System.Web.Security/MembershipProvider.cs
+System.Web.Security/MembershipUserCollection.cs
+System.Web.Security/MembershipUser.cs
+System.Web.Security/MembershipValidatePasswordEventHandler.cs
+System.Web.Security/RoleProvider.cs
+System.Web.Security/ValidatePasswordEventArgs.cs
index 7b50cd5e070ff63355b6a2b8bfbf47386926f77f..2797e796bbaad730c406322c60ef9517f9326670 100644 (file)
@@ -181,7 +181,7 @@ endif
 EXTRA_DISTFILES = $(foreach resource,$(TEST_RESOURCE_FILES), $(shell echo $(subst \`,\\\`,$(resource)) | cut -d ',' -f 1))
 
 # This is a .NET 3.5+ assembly
-VALID_PROFILE := $(filter net_4_0 net_4_5, $(PROFILE))
+VALID_PROFILE := $(filter net_4_5, $(PROFILE))
 ifndef VALID_PROFILE
 LIBRARY_NAME = dummy-System.Web.DynamicData.dll
 NO_INSTALL = yes
diff --git a/mcs/class/System.Web.Extensions.Design_1.0/ChangeLog b/mcs/class/System.Web.Extensions.Design_1.0/ChangeLog
deleted file mode 100644 (file)
index 9d66225..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-2008-09-30  Marek Habersack  <mhabersack@novell.com>
-
-       * System.Web.Extensions.Design_1.0.dll.sources: added
-
-       * Makefile: added
-
diff --git a/mcs/class/System.Web.Extensions.Design_1.0/Makefile b/mcs/class/System.Web.Extensions.Design_1.0/Makefile
deleted file mode 100644 (file)
index e0bd85a..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-thisdir = class/System.Web.Extensions.Design_1.0
-SUBDIRS = 
-include ../../build/rules.make
-
-LIBRARY = System.Web.Extensions.Design_1.0.dll
-LIBRARY_NAME = System.Web.Extensions.Design.dll
-LIBRARY_COMPAT = yes
-NO_TEST = yes
-
-LIB_MCS_FLAGS = \
-       -r:System.dll -r:System.Design.dll -r:System.Drawing.dll -r:System.Windows.Forms.dll
-
-include ../../build/library.make
-
diff --git a/mcs/class/System.Web.Extensions.Design_1.0/System.Web.Extensions.Design_1.0.dll.sources b/mcs/class/System.Web.Extensions.Design_1.0/System.Web.Extensions.Design_1.0.dll.sources
deleted file mode 100644 (file)
index 4561402..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-../../build/common/Consts.cs
-../../build/common/Locale.cs
-../../build/common/MonoTODOAttribute.cs
-../System.Web.Extensions.Design/Assembly/AssemblyInfo.cs
-../System.Web.Extensions.Design/System.Web.Extensions.Design/AsyncPostBackTriggerControlIDConverter.cs
-../System.Web.Extensions.Design/System.Web.Extensions.Design/AsyncPostBackTriggerEventNameConverter.cs
-../System.Web.Extensions.Design/System.Web.Extensions.Design/CollectionEditorBase.cs
-../System.Web.Extensions.Design/System.Web.Extensions.Design/ExtenderControlDesigner.cs
-../System.Web.Extensions.Design/System.Web.Extensions.Design/PostBackTriggerControlIDConverter.cs
-../System.Web.Extensions.Design/System.Web.Extensions.Design/ScriptManagerDesigner.cs
-../System.Web.Extensions.Design/System.Web.Extensions.Design/ScriptManagerProxyDesigner.cs
-../System.Web.Extensions.Design/System.Web.Extensions.Design/TimerDesigner.cs
-../System.Web.Extensions.Design/System.Web.Extensions.Design/UpdatePanelDesigner.cs
-../System.Web.Extensions.Design/System.Web.Extensions.Design/UpdatePanelTriggerCollectionEditor.cs
-../System.Web.Extensions.Design/System.Web.Extensions.Design/UpdateProgressAssociatedUpdatePanelIDConverter.cs
-../System.Web.Extensions.Design/System.Web.Extensions.Design/UpdateProgressDesigner.cs
diff --git a/mcs/class/System.Web.Extensions_1.0/ChangeLog b/mcs/class/System.Web.Extensions_1.0/ChangeLog
deleted file mode 100644 (file)
index 62e8641..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-2008-12-05  Marek Habersack  <mhabersack@novell.com>
-
-       * Makefile (LIB_MCS_FLAGS): do not reference System.Core
-
-2008-09-30  Marek Habersack  <mhabersack@novell.com>
-
-       * System.Web.Extensions_1.0.dll.sources: added
-
-       * Makefile: added
-
diff --git a/mcs/class/System.Web.Extensions_1.0/Makefile b/mcs/class/System.Web.Extensions_1.0/Makefile
deleted file mode 100644 (file)
index 87ccbd6..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-thisdir = class/System.Web.Extensions_1.0
-SUBDIRS = 
-include ../../build/rules.make
-
-NO_TEST = yes
-LIBRARY = System.Web.Extensions_1.0.dll
-LIBRARY_NAME = System.Web.Extensions.dll
-LIBRARY_COMPAT = yes
-
-RESOURCE_FILES= \
-       ../MicrosoftAjaxLibrary/System.Web.Extensions/1.0.61025.0/MicrosoftAjax.debug.js        \
-       ../MicrosoftAjaxLibrary/System.Web.Extensions/1.0.61025.0/MicrosoftAjax.js              \
-       ../MicrosoftAjaxLibrary/System.Web.Extensions/1.0.61025.0/MicrosoftAjaxTimer.debug.js   \
-       ../MicrosoftAjaxLibrary/System.Web.Extensions/1.0.61025.0/MicrosoftAjaxTimer.js         \
-       ../MicrosoftAjaxLibrary/System.Web.Extensions/1.0.61025.0/MicrosoftAjaxWebForms.debug.js\
-       ../MicrosoftAjaxLibrary/System.Web.Extensions/1.0.61025.0/MicrosoftAjaxWebForms.js
-
-RESOURCE_FILES_DIST= \
-       ../MicrosoftAjaxLibrary/System.Web.Extensions/3.5.0.0/3.5.21022.8/MicrosoftAjax.debug.js        \
-       ../MicrosoftAjaxLibrary/System.Web.Extensions/3.5.0.0/3.5.21022.8/MicrosoftAjax.js              \
-       ../MicrosoftAjaxLibrary/System.Web.Extensions/3.5.0.0/3.5.21022.8/MicrosoftAjaxTimer.debug.js   \
-       ../MicrosoftAjaxLibrary/System.Web.Extensions/3.5.0.0/3.5.21022.8/MicrosoftAjaxTimer.js         \
-       ../MicrosoftAjaxLibrary/System.Web.Extensions/3.5.0.0/3.5.21022.8/MicrosoftAjaxWebForms.debug.js\
-       ../MicrosoftAjaxLibrary/System.Web.Extensions/3.5.0.0/3.5.21022.8/MicrosoftAjaxWebForms.js\
-       ../MicrosoftAjaxLibrary/System.Web.Extensions/1.0.61025.0/MicrosoftAjax.debug.js        \
-       ../MicrosoftAjaxLibrary/System.Web.Extensions/1.0.61025.0/MicrosoftAjax.js              \
-       ../MicrosoftAjaxLibrary/System.Web.Extensions/1.0.61025.0/MicrosoftAjaxTimer.debug.js   \
-       ../MicrosoftAjaxLibrary/System.Web.Extensions/1.0.61025.0/MicrosoftAjaxTimer.js         \
-       ../MicrosoftAjaxLibrary/System.Web.Extensions/1.0.61025.0/MicrosoftAjaxWebForms.debug.js\
-       ../MicrosoftAjaxLibrary/System.Web.Extensions/1.0.61025.0/MicrosoftAjaxWebForms.js
-       
-LIB_MCS_FLAGS = \
-       -unsafe \
-       -define:SYSTEM_WEB_EXTENSIONS   \
-       -r:$(corlib)                    \
-       -r:System.dll                   \
-       -r:System.Core.dll              \
-       -r:System.Drawing.dll           \
-       -r:System.Data.dll              \
-       -r:System.Xml.dll               \
-       -r:System.Web.dll               \
-       -r:System.Web.Services.dll      \
-       -r:System.Configuration.dll     \
-       -r:System.EnterpriseServices.dll \
-       $(OTHER_LIB_MCS_FLAGS)          \
-       $(RESOURCE_FILES:%=/resource:%)
-
-EXTRA_DISTFILES = $(RESOURCE_FILES_DIST) 
-
-include ../../build/library.make
-
diff --git a/mcs/class/System.Web.Extensions_1.0/System.Web.Extensions_1.0.dll.sources b/mcs/class/System.Web.Extensions_1.0/System.Web.Extensions_1.0.dll.sources
deleted file mode 100644 (file)
index 2ba19ea..0000000
+++ /dev/null
@@ -1,122 +0,0 @@
-../../build/common/Consts.cs
-../../build/common/Locale.cs
-../../build/common/MonoTODOAttribute.cs
-../System.Web/System.Web.Handlers/AssemblyResourceLoader.cs
-../System.Web/System.Web.Configuration_2.0/MachineKeyRegistryStorage.cs
-../System.Web/System.Web.Util/MachineKeySectionUtils.cs
-../System.Web.Extensions/Assembly/AssemblyInfo.cs
-../System.Web.Extensions/System.Web.Handlers/ScriptModule.cs
-../System.Web.Extensions/System.Web.Handlers/ScriptResourceHandler.cs
-../System.Web.Extensions/System.Web.Script.Serialization/JavaScriptTypeResolver.cs
-../System.Web.Extensions/System.Web.Script.Serialization/ScriptIgnoreAttribute.cs
-../System.Web.Extensions/System.Web.Script.Serialization/SimpleTypeResolver.cs
-../System.Web.Extensions/System.Web.Script.Serialization/JavaScriptConverter.cs
-../System.Web.Extensions/System.Web.Script.Serialization/JavaScriptSerializer.cs
-../System.Web.Extensions/System.Web.Script.Serialization/Json.cs
-../System.Web.Extensions/System.Web.Script.Serialization/JsonDeserializer.cs
-../System.Web.Extensions/System.Web.Script.Serialization/JsonSerializer.cs
-../System.Web.Extensions/System.Web.Script.Serialization/StringBuilderExtensions.cs
-../System.Web.Extensions/System.Web.Script.Serialization/JSON/JavaScriptUtils.cs
-../System.Web.Extensions/System.Web.Script.Serialization/JSON/ReflectionUtils.cs
-../System.Web.Extensions/System.Web.Script.Services/AuthenticationService.cs
-../System.Web.Extensions/System.Web.Script.Services/GenerateScriptTypeAttribute.cs
-../System.Web.Extensions/System.Web.Script.Services/ProfileService.cs
-../System.Web.Extensions/System.Web.Script.Services/ProxyGenerator.cs
-../System.Web.Extensions/System.Web.Script.Services/ResponseFormat.cs
-../System.Web.Extensions/System.Web.Script.Services/ScriptMethodAttribute.cs
-../System.Web.Extensions/System.Web.Script.Services/ScriptServiceAttribute.cs
-../System.Web.Extensions/System.Web.Script.Services/RestHandler.cs
-../System.Web.Extensions/System.Web.Script.Services/ClientProxyHandler.cs
-../System.Web.Extensions/System.Web.Script.Services/LogicalTypeInfo.cs
-../System.Web.Extensions/System.Web.Script.Services/ScriptHandlerFactory.cs
-../System.Web.Extensions/System.Web.Configuration/ScriptingScriptResourceHandlerSection.cs
-../System.Web.Extensions/System.Web.Configuration/ScriptingJsonSerializationSection.cs
-../System.Web.Extensions/System.Web.Configuration/ScriptingSectionGroup.cs
-../System.Web.Extensions/System.Web.Configuration/ConvertersCollection.cs
-../System.Web.Extensions/System.Web.Configuration/SystemWebExtensionsSectionGroup.cs
-../System.Web.Extensions/System.Web.Configuration/Converter.cs
-../System.Web.Extensions/System.Web.Configuration/ScriptingWebServicesSectionGroup.cs
-../System.Web.Extensions/System.Web.Configuration/ScriptingAuthenticationServiceSection.cs
-../System.Web.Extensions/System.Web.Configuration/ScriptingProfileServiceSection.cs
-../System.Web.Extensions/System.Web.UI/Timer.cs
-../System.Web.Extensions/System.Web.UI/ProfileServiceManager.cs
-../System.Web.Extensions/System.Web.UI/IScriptControl.cs
-../System.Web.Extensions/System.Web.UI/TargetControlTypeAttribute.cs
-../System.Web.Extensions/System.Web.UI/ExtenderControl.cs
-../System.Web.Extensions/System.Web.UI/ServiceReference.cs
-../System.Web.Extensions/System.Web.UI/AuthenticationServiceManager.cs
-../System.Web.Extensions/System.Web.UI/ScriptBehaviorDescriptor.cs
-../System.Web.Extensions/System.Web.UI/ScriptReference.cs
-../System.Web.Extensions/System.Web.UI/ScriptReferenceBase.cs
-../System.Web.Extensions/System.Web.UI/ScriptComponentDescriptor.cs
-../System.Web.Extensions/System.Web.UI/UpdatePanelTrigger.cs
-../System.Web.Extensions/System.Web.UI/UpdatePanelControlTrigger.cs
-../System.Web.Extensions/System.Web.UI/IExtenderControl.cs
-../System.Web.Extensions/System.Web.UI/AsyncPostBackTrigger.cs
-../System.Web.Extensions/System.Web.UI/PostBackTrigger.cs
-../System.Web.Extensions/System.Web.UI/ServiceReferenceCollection.cs
-../System.Web.Extensions/System.Web.UI/AsyncPostBackErrorEventArgs.cs
-../System.Web.Extensions/System.Web.UI/ScriptManager.cs
-../System.Web.Extensions/System.Web.UI/ScriptReferenceCollection.cs
-../System.Web.Extensions/System.Web.UI/ScriptResourceAttribute.cs
-../System.Web.Extensions/System.Web.UI/ScriptManagerProxy.cs
-../System.Web.Extensions/System.Web.UI/ScriptReferenceEventArgs.cs
-../System.Web.Extensions/System.Web.UI/UpdatePanel.cs
-../System.Web.Extensions/System.Web.UI/UpdatePanelTriggerCollection.cs
-../System.Web.Extensions/System.Web.UI/ScriptDescriptor.cs
-../System.Web.Extensions/System.Web.UI/ScriptControlDescriptor.cs
-../System.Web.Extensions/System.Web.UI/ScriptControl.cs
-../System.Web.Extensions/System.Web.UI/UpdatePanelRenderMode.cs
-../System.Web.Extensions/System.Web.UI/UpdateProgress.cs
-../System.Web.Extensions/System.Web.UI/ScriptMode.cs
-../System.Web.Extensions/System.Web.UI/UpdatePanelUpdateMode.cs
-../System.Web.Extensions/System.Web.UI/RegisteredArrayDeclaration.cs
-../System.Web.Extensions/System.Web.UI/RegisteredDisposeScript.cs
-../System.Web.Extensions/System.Web.UI/RegisteredExpandoAttribute.cs
-../System.Web.Extensions/System.Web.UI/RegisteredHiddenField.cs
-../System.Web.Extensions/System.Web.UI/RegisteredScript.cs
-../System.Web.Extensions/System.Web.UI/RegisteredScriptType.cs
-../System.Web.Extensions/System.Web.UI.WebControls/DataPager.cs
-../System.Web.Extensions/System.Web.UI.WebControls/DataPagerFieldCollection.cs
-../System.Web.Extensions/System.Web.UI.WebControls/DataPagerFieldCommandEventArgs.cs
-../System.Web.Extensions/System.Web.UI.WebControls/DataPagerField.cs
-../System.Web.Extensions/System.Web.UI.WebControls/DataPagerFieldItem.cs
-../System.Web.Extensions/System.Web.UI.WebControls/InsertItemPosition.cs
-../System.Web.Extensions/System.Web.UI.WebControls/IPageableItemContainer.cs
-../System.Web.Extensions/System.Web.UI.WebControls/ListViewCancelEventArgs.cs
-../System.Web.Extensions/System.Web.UI.WebControls/ListViewCancelMode.cs
-../System.Web.Extensions/System.Web.UI.WebControls/ListViewCommandEventArgs.cs
-../System.Web.Extensions/System.Web.UI.WebControls/ListView.cs
-../System.Web.Extensions/System.Web.UI.WebControls/ListViewDataItem.cs
-../System.Web.Extensions/System.Web.UI.WebControls/ListViewDeletedEventArgs.cs
-../System.Web.Extensions/System.Web.UI.WebControls/ListViewDeleteEventArgs.cs
-../System.Web.Extensions/System.Web.UI.WebControls/ListViewEditEventArgs.cs
-../System.Web.Extensions/System.Web.UI.WebControls/ListViewInsertedEventArgs.cs
-../System.Web.Extensions/System.Web.UI.WebControls/ListViewInsertEventArgs.cs
-../System.Web.Extensions/System.Web.UI.WebControls/ListViewItem.cs
-../System.Web.Extensions/System.Web.UI.WebControls/ListViewItemEventArgs.cs
-../System.Web.Extensions/System.Web.UI.WebControls/ListViewItemType.cs
-../System.Web.Extensions/System.Web.UI.WebControls/ListViewPagedDataSource.cs
-../System.Web.Extensions/System.Web.UI.WebControls/ListViewSelectEventArgs.cs
-../System.Web.Extensions/System.Web.UI.WebControls/ListViewSortEventArgs.cs
-../System.Web.Extensions/System.Web.UI.WebControls/ListViewTableRow.cs
-../System.Web.Extensions/System.Web.UI.WebControls/ListViewUpdatedEventArgs.cs
-../System.Web.Extensions/System.Web.UI.WebControls/ListViewUpdateEventArgs.cs
-../System.Web.Extensions/System.Web.UI.WebControls/NextPreviousPagerField.cs
-../System.Web.Extensions/System.Web.UI.WebControls/NumericPagerField.cs
-../System.Web.Extensions/System.Web.UI.WebControls/PageEventArgs.cs
-../System.Web.Extensions/System.Web.UI.WebControls/PagePropertiesChangingEventArgs.cs
-../System.Web.Extensions/System.Web.DynamicData/DynamicDataSourceOperation.cs
-../System.Web.Extensions/System.Web.DynamicData/DynamicValidatorEventArgs.cs
-../System.Web.Extensions/System.Web.DynamicData/IDynamicDataSource.cs
-../System.Web.Extensions/System.Web.DynamicData/IDynamicValidatorException.cs
-../System.Web.Extensions/System.Web.UI.WebControls/LinqDataSource.cs
-../System.Web.Extensions/System.Web.UI.WebControls/LinqDataSourceContextEventArgs.cs
-../System.Web.Extensions/System.Web.UI.WebControls/LinqDataSourceDeleteEventArgs.cs
-../System.Web.Extensions/System.Web.UI.WebControls/LinqDataSourceDisposeEventArgs.cs
-../System.Web.Extensions/System.Web.UI.WebControls/LinqDataSourceInsertEventArgs.cs
-../System.Web.Extensions/System.Web.UI.WebControls/LinqDataSourceSelectEventArgs.cs
-../System.Web.Extensions/System.Web.UI.WebControls/LinqDataSourceStatusEventArgs.cs
-../System.Web.Extensions/System.Web.UI.WebControls/LinqDataSourceUpdateEventArgs.cs
-../System.Web.Extensions/System.Web.UI.WebControls/LinqDataSourceValidationException.cs
-../System.Web.Extensions/System.Web.UI.WebControls/LinqDataSourceView.cs
index 0e4e57ef46db89ffbbfbac3465d1d9c2af01cf64..500b32910f3b2d9b668cae49357d9eec6c9fc78f 100644 (file)
@@ -18,7 +18,7 @@ TEST_MCS_FLAGS = $(LIB_MCS_FLAGS)
 EXTRA_DISTFILES =
 
 # This is a .NET 3.5+ assembly
-VALID_PROFILE := $(filter net_4_0 net_4_5, $(PROFILE))
+VALID_PROFILE := $(filter net_4_5, $(PROFILE))
 ifndef VALID_PROFILE
 LIBRARY_NAME = dummy-System.Web.Routing.dll
 NO_INSTALL = yes
index b8f4caa87bc97a927078780f685969c3a97bc761..6cd128b360bfea0ca0862b2976313534498f6bb2 100644 (file)
@@ -655,9 +655,6 @@ namespace System.Web.Services.Description {
                        
                        CodeAttributeDeclaration att = new CodeAttributeDeclaration ("System.Web.Services.Protocols.SoapHeaderAttribute");
                        att.Arguments.Add (GetArg (varName));
-#if ONLY_1_0
-                       att.Arguments.Add (GetArg ("Required", false));
-#endif
                        if (direction != SoapHeaderDirection.In) att.Arguments.Add (GetEnumArg ("Direction", "System.Web.Services.Protocols.SoapHeaderDirection", direction.ToString ()));
                        AddCustomAttribute (method, att, true);
                }
index 63b5c87579d64b1666bf9d860ec1a64c66df545c..925cb087bb6511d978287ac12bb448d61004e976 100644 (file)
@@ -1,5 +1,5 @@
 MCS=mcs -g
-MONO=MONO_PATH=../../../lib/net_1_1 mono
+MONO=MONO_PATH=../../../lib/net_4_5 mono
 sourcefile = proxies.sources
 
 tools: wstest.exe
@@ -71,7 +71,7 @@ test-clients: tests
        rm -f somefile && touch somefile
        (tail -f somefile | xsp --root server)&
        sleep 2
-       -harness=../../../lib/net_1_1/nunit-console.exe; \
+       -harness=../../../lib/net_4_5/nunit-console.exe; \
        if test -f $$harness; then :; else harness=../../../lib/nunit-console.exe; fi; \
        $(MONO) $$harness System.Web.Services-standalone_test.dll
        echo "" >> somefile
diff --git a/mcs/class/System.Web/System.Web.Security/MembershipCreateStatus.cs b/mcs/class/System.Web/System.Web.Security/MembershipCreateStatus.cs
deleted file mode 100644 (file)
index 71fddb4..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-//
-// System.Web.Security.MembershipCreateStatus
-//
-// Authors:
-//     Ben Maurer (bmaurer@users.sourceforge.net)
-//
-// (C) 2003 Ben Maurer
-// Copyright (C) 2005 Novell, Inc (http://www.novell.com)
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-using System.Runtime.CompilerServices;
-
-namespace System.Web.Security
-{
-       [TypeForwardedFrom ("System.Web, Version=2.0.0.0, Culture=Neutral, PublicKeyToken=b03f5f7f11d50a3a")]
-       public enum MembershipCreateStatus
-       {
-               Success,
-               InvalidUserName,
-               InvalidPassword,
-               InvalidQuestion,
-               InvalidAnswer,
-               InvalidEmail,
-               DuplicateUserName,
-               DuplicateEmail,
-               UserRejected,
-               InvalidProviderUserKey,
-               DuplicateProviderUserKey,
-               ProviderError
-       }
-}
-
-
diff --git a/mcs/class/System.Web/System.Web.Security/MembershipCreateUserException.cs b/mcs/class/System.Web/System.Web.Security/MembershipCreateUserException.cs
deleted file mode 100644 (file)
index a5f9e31..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-//
-// System.Web.Security.MembershipCreateUserException
-//
-// Authors:
-//     Ben Maurer (bmaurer@users.sourceforge.net)
-//
-// (C) 2003 Ben Maurer
-//
-
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System;
-using System.Runtime.Serialization;
-using System.Runtime.CompilerServices;
-
-namespace System.Web.Security
-{
-       [TypeForwardedFrom ("System.Web, Version=2.0.0.0, Culture=Neutral, PublicKeyToken=b03f5f7f11d50a3a")]
-       [Serializable]
-       public class MembershipCreateUserException : Exception
-       {
-               MembershipCreateStatus statusCode;
-               
-               public MembershipCreateUserException ()
-               {
-               }
-               
-               public MembershipCreateUserException (string message): base (message)
-               {
-               }
-               
-               public MembershipCreateUserException (string message, Exception innerException): base (message, innerException)
-               {
-               }
-               
-               protected MembershipCreateUserException (SerializationInfo info, StreamingContext context): base (info, context)
-               {
-                       info.AddValue ("statusCode", statusCode);
-               }
-               
-               public MembershipCreateUserException (MembershipCreateStatus statusCode) : base (statusCode.ToString ())
-               {
-                       this.statusCode = statusCode;
-               }
-               
-               public override void GetObjectData (SerializationInfo info, StreamingContext ctx)
-               {
-                       base.GetObjectData (info, ctx);
-                       statusCode = (MembershipCreateStatus) info.GetValue ("statusCode", typeof(MembershipCreateStatus));
-               }
-               
-               public MembershipCreateStatus StatusCode {
-                       get { return statusCode; }
-               }
-       }
-}
-
-
diff --git a/mcs/class/System.Web/System.Web.Security/MembershipPasswordException.cs b/mcs/class/System.Web/System.Web.Security/MembershipPasswordException.cs
deleted file mode 100644 (file)
index 5bf60eb..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-//
-// System.Web.Security.MembershipPasswordException
-//
-// Authors:
-//     Ben Maurer (bmaurer@users.sourceforge.net)
-//
-// (C) 2003 Ben Maurer
-//
-
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System;
-using System.Runtime.Serialization;
-using System.Runtime.CompilerServices;
-
-namespace System.Web.Security
-{
-       [TypeForwardedFrom ("System.Web, Version=2.0.0.0, Culture=Neutral, PublicKeyToken=b03f5f7f11d50a3a")]
-       [Serializable]
-       public class MembershipPasswordException : Exception
-       {
-               public MembershipPasswordException () : base () {}
-               public MembershipPasswordException (string message) : base (message) {}
-               public MembershipPasswordException (string message, Exception innerException) : base (message, innerException) {}
-               
-               protected MembershipPasswordException (SerializationInfo info, StreamingContext context): base (info, context)
-               {
-               }
-       }
-}
-
-
diff --git a/mcs/class/System.Web/System.Web.Security/MembershipPasswordFormat.cs b/mcs/class/System.Web/System.Web.Security/MembershipPasswordFormat.cs
deleted file mode 100644 (file)
index 2948618..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-//
-// System.Web.Security.MembershipPasswordFormat
-//
-// Authors:
-//     Ben Maurer (bmaurer@users.sourceforge.net)
-//
-// (C) 2003 Ben Maurer
-//
-
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-using System.Runtime.CompilerServices;
-
-namespace System.Web.Security
-{
-       [TypeForwardedFrom ("System.Web, Version=2.0.0.0, Culture=Neutral, PublicKeyToken=b03f5f7f11d50a3a")]
-       public enum MembershipPasswordFormat
-       {
-               Clear = 0, 
-               Hashed = 1,
-               Encrypted = 2
-       }
-}
-
-
diff --git a/mcs/class/System.Web/System.Web.Security/MembershipProvider.cs b/mcs/class/System.Web/System.Web.Security/MembershipProvider.cs
deleted file mode 100644 (file)
index 068e1c4..0000000
+++ /dev/null
@@ -1,137 +0,0 @@
-//
-// System.Web.Security.MembershipProvider
-//
-// Authors:
-//     Ben Maurer (bmaurer@users.sourceforge.net)
-//     Lluis Sanchez Gual (lluis@novell.com)
-//
-// (C) 2003 Ben Maurer
-// Copyright (C) 2005-2010 Novell, Inc (http://www.novell.com)
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System.ComponentModel;
-using System.Configuration.Provider;
-using System.Reflection;
-using System.Runtime.CompilerServices;
-using System.Text;
-using System.Web.Configuration;
-
-namespace System.Web.Security
-{
-       [TypeForwardedFrom ("System.Web, Version=2.0.0.0, Culture=Neutral, PublicKeyToken=b03f5f7f11d50a3a")]
-       public abstract class MembershipProvider : ProviderBase
-       {
-               const string HELPER_TYPE_NAME = "System.Web.Security.MembershipHelper, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a";
-
-               internal static IMembershipHelper Helper {
-                       get { return helper; }
-               }
-               static IMembershipHelper helper;
-               
-               static readonly object validatingPasswordEvent = new object ();
-               
-               EventHandlerList events = new EventHandlerList ();
-               public event MembershipValidatePasswordEventHandler ValidatingPassword {
-                       add { events.AddHandler (validatingPasswordEvent, value); }
-                       remove { events.RemoveHandler (validatingPasswordEvent, value); }
-               }
-
-               static MembershipProvider ()
-               {
-                       Type type = Type.GetType (HELPER_TYPE_NAME, false);
-                       if (type == null)
-                               return;
-
-                       try {
-                               helper = Activator.CreateInstance (type) as IMembershipHelper;
-                       } catch {
-                               // ignore
-                       }
-               }
-
-               protected MembershipProvider ()
-               {
-               }
-               
-               public abstract bool ChangePassword (string name, string oldPwd, string newPwd);
-               public abstract bool ChangePasswordQuestionAndAnswer (string name, string password, string newPwdQuestion, string newPwdAnswer);
-               public abstract MembershipUser CreateUser (string username, string password, string email, string pwdQuestion, string pwdAnswer, bool isApproved, object providerUserKey, out MembershipCreateStatus status);
-               public abstract bool DeleteUser (string name, bool deleteAllRelatedData);
-               public abstract MembershipUserCollection FindUsersByEmail (string emailToMatch, int pageIndex, int pageSize, out int totalRecords);
-               public abstract MembershipUserCollection FindUsersByName (string nameToMatch, int pageIndex, int pageSize, out int totalRecords);
-               public abstract MembershipUserCollection GetAllUsers (int pageIndex, int pageSize, out int totalRecords);
-               public abstract int GetNumberOfUsersOnline ();
-               public abstract string GetPassword (string name, string answer);
-               public abstract MembershipUser GetUser (string name, bool userIsOnline);
-               public abstract MembershipUser GetUser (object providerUserKey, bool userIsOnline);
-               public abstract string GetUserNameByEmail (string email);
-               public abstract string ResetPassword (string name, string answer);
-               public abstract void UpdateUser (MembershipUser user);
-               public abstract bool ValidateUser (string name, string password);
-               public abstract bool UnlockUser (string userName);
-               
-               public abstract string ApplicationName { get; set; }
-               public abstract bool EnablePasswordReset { get; }
-               public abstract bool EnablePasswordRetrieval { get; }
-               public abstract bool RequiresQuestionAndAnswer { get; }
-               public abstract int MaxInvalidPasswordAttempts { get; }
-               public abstract int MinRequiredNonAlphanumericCharacters { get; }
-               public abstract int MinRequiredPasswordLength { get; }
-               public abstract int PasswordAttemptWindow { get; }
-               public abstract MembershipPasswordFormat PasswordFormat { get; }
-               public abstract string PasswordStrengthRegularExpression { get; }
-               public abstract bool RequiresUniqueEmail { get; }
-               
-               protected virtual void OnValidatingPassword (ValidatePasswordEventArgs args)
-               {
-                       MembershipValidatePasswordEventHandler eh = events [validatingPasswordEvent] as MembershipValidatePasswordEventHandler;
-                       if (eh != null)
-                               eh (this, args);
-               }
-
-               protected virtual byte [] DecryptPassword (byte [] encodedPassword)
-               {
-                       if (helper == null)
-                               throw new PlatformNotSupportedException ("This method is not available.");
-                       return helper.DecryptPassword (encodedPassword);
-               }
-
-               protected virtual byte[] EncryptPassword (byte[] password)
-               {
-                       return EncryptPassword (password, MembershipPasswordCompatibilityMode.Framework20);
-               }
-               [MonoTODO ("Discover what actually is 4.0 password compatibility mode.")]
-               protected virtual byte[] EncryptPassword (byte[] password, MembershipPasswordCompatibilityMode legacyPasswordCompatibilityMode)
-               {
-                       if (helper == null)
-                               throw new PlatformNotSupportedException ("This method is not available.");
-
-                       if (legacyPasswordCompatibilityMode == MembershipPasswordCompatibilityMode.Framework40)
-                               throw new PlatformNotSupportedException ("Framework 4.0 password encryption mode is not supported at this time.");
-                       
-                       return helper.EncryptPassword (password);
-               }
-       }
-}
-
-
-
diff --git a/mcs/class/System.Web/System.Web.Security/MembershipProviderCollection.cs b/mcs/class/System.Web/System.Web.Security/MembershipProviderCollection.cs
deleted file mode 100644 (file)
index be25a05..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-//
-// System.Web.Security.MembershipProviderCollection
-//
-// Authors:
-//     Ben Maurer (bmaurer@users.sourceforge.net)
-//     Sebastien Pouliot  <sebastien@ximian.com>
-//
-// (C) 2003 Ben Maurer
-// Copyright (c) 2005 Novell, Inc (http://www.novell.com)
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-using System.Configuration.Provider;
-using System.Runtime.CompilerServices;
-
-namespace System.Web.Security
-{
-       [TypeForwardedFrom ("System.Web, Version=2.0.0.0, Culture=Neutral, PublicKeyToken=b03f5f7f11d50a3a")]
-       public sealed class MembershipProviderCollection : ProviderCollection
-       {
-               public override void Add (ProviderBase provider)
-               {
-                       if (provider == null)
-                               throw new ArgumentNullException ("provider");
-
-                       if (provider is MembershipProvider)
-                               base.Add (provider);
-                       else {
-                               throw new ArgumentException ("provider", Locale.GetText (
-                                       "Wrong type, expected {0}.", "MembershipProvider"));
-                       }
-               }
-               
-               public void CopyTo (MembershipProvider[] array, int index)
-               {
-                       base.CopyTo (array, index);
-               }
-               
-               public new MembershipProvider this [string name] {
-                       get { return (MembershipProvider) base [name]; }
-               }
-       }
-}
-
-
diff --git a/mcs/class/System.Web/System.Web.Security/MembershipUser.cs b/mcs/class/System.Web/System.Web.Security/MembershipUser.cs
deleted file mode 100644 (file)
index c370f21..0000000
+++ /dev/null
@@ -1,239 +0,0 @@
-//
-// System.Web.Security.MembershipUser
-//
-// Authors:
-//     Ben Maurer (bmaurer@users.sourceforge.net)
-//
-// (C) 2003 Ben Maurer
-//
-
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-using System;
-using System.Reflection;
-using System.Runtime.CompilerServices;
-
-namespace System.Web.Security
-{
-       [TypeForwardedFrom ("System.Web, Version=2.0.0.0, Culture=Neutral, PublicKeyToken=b03f5f7f11d50a3a")]
-       [Serializable]
-       public class MembershipUser
-       {
-               string providerName;
-               string name;
-               object providerUserKey;
-               string email;
-               string passwordQuestion;
-               string comment;
-               bool isApproved;
-               bool isLockedOut;
-               DateTime creationDate;
-               DateTime lastLoginDate;
-               DateTime lastActivityDate;
-               DateTime lastPasswordChangedDate;
-               DateTime lastLockoutDate;
-
-               protected MembershipUser ()
-               {
-               }
-               
-               public MembershipUser (string providerName, string name, object providerUserKey, string email,
-                       string passwordQuestion, string comment, bool isApproved, bool isLockedOut,
-                       DateTime creationDate, DateTime lastLoginDate, DateTime lastActivityDate,
-                       DateTime lastPasswordChangedDate, DateTime lastLockoutDate)
-               {
-                       this.providerName = providerName;
-                       this.name = name;
-                       this.providerUserKey = providerUserKey;
-                       this.email = email;
-                       this.passwordQuestion = passwordQuestion;
-                       this.comment = comment;
-                       this.isApproved = isApproved;
-                       this.isLockedOut = isLockedOut;
-                       this.creationDate = creationDate.ToUniversalTime ();
-                       this.lastLoginDate = lastLoginDate.ToUniversalTime ();
-                       this.lastActivityDate = lastActivityDate.ToUniversalTime ();
-                       this.lastPasswordChangedDate = lastPasswordChangedDate.ToUniversalTime ();
-                       this.lastLockoutDate = lastLockoutDate.ToUniversalTime ();
-               }
-               
-               void UpdateSelf (MembershipUser fromUser)
-               {
-                       try { Comment = fromUser.Comment; } catch (NotSupportedException) {}
-                       try { creationDate = fromUser.CreationDate; } catch (NotSupportedException) {}
-                       try { Email = fromUser.Email; } catch (NotSupportedException) {}
-                       try { IsApproved = fromUser.IsApproved; } catch (NotSupportedException) {}
-                       try { isLockedOut = fromUser.IsLockedOut; } catch (NotSupportedException) {}
-                       try { LastActivityDate = fromUser.LastActivityDate; } catch (NotSupportedException) {}
-                       try { lastLockoutDate = fromUser.LastLockoutDate; } catch (NotSupportedException) {}
-                       try { LastLoginDate = fromUser.LastLoginDate; } catch (NotSupportedException) {}
-                       try { lastPasswordChangedDate = fromUser.LastPasswordChangedDate; } catch (NotSupportedException) {}
-                       try { passwordQuestion = fromUser.PasswordQuestion; } catch (NotSupportedException) {}
-                       try { providerUserKey = fromUser.ProviderUserKey; } catch (NotSupportedException) {}
-               }
-
-               internal void UpdateUser ()
-               {
-                       MembershipUser newUser = Provider.GetUser (UserName, false);
-                       UpdateSelf (newUser);
-               }
-
-               public virtual bool ChangePassword (string oldPassword, string newPassword)
-               {
-                       bool success = Provider.ChangePassword (UserName, oldPassword, newPassword);
-
-                       UpdateUser ();
-                       
-                       return success;
-               }
-               
-               public virtual bool ChangePasswordQuestionAndAnswer (string password, string newPasswordQuestion, string newPasswordAnswer)
-               {
-                       bool success = Provider.ChangePasswordQuestionAndAnswer (UserName, password, newPasswordQuestion, newPasswordAnswer);
-
-                       UpdateUser ();
-                       
-                       return success;
-               }
-               
-               public virtual string GetPassword ()
-               {
-                       return GetPassword (null);
-               }
-               
-               public virtual string GetPassword (string answer)
-               {
-                       return Provider.GetPassword (UserName, answer);
-               }
-               
-               public virtual string ResetPassword ()
-               {
-                       return ResetPassword (null);
-               }
-               
-               public virtual string ResetPassword (string answer)
-               {
-                       string newPass = Provider.ResetPassword (UserName, answer);
-
-                       UpdateUser ();
-                       
-                       return newPass;
-               }
-               
-               public virtual string Comment {
-                       get { return comment; }
-                       set { comment = value; }
-               }
-               
-               public virtual DateTime CreationDate {
-                       get { return creationDate.ToLocalTime (); }
-               }
-               
-               public virtual string Email {
-                       get { return email; }
-                       set { email = value; }
-               }
-               
-               public virtual bool IsApproved {
-                       get { return isApproved; }
-                       set { isApproved = value; }
-               }
-               
-               public virtual bool IsLockedOut {
-                       get { return isLockedOut; }
-               }
-
-               public virtual
-               bool IsOnline {
-                       get {
-                               int minutes;
-                               IMembershipHelper helper = MembershipProvider.Helper;
-                               if (helper == null)
-                                       throw new PlatformNotSupportedException ("The method is not available.");
-                               minutes = helper.UserIsOnlineTimeWindow;
-                               return LastActivityDate > DateTime.Now - TimeSpan.FromMinutes (minutes);
-                       }
-               }
-               
-               public virtual DateTime LastActivityDate {
-                       get { return lastActivityDate.ToLocalTime (); }
-                       set { lastActivityDate = value.ToUniversalTime (); }
-               }
-               
-               public virtual DateTime LastLoginDate {
-                       get { return lastLoginDate.ToLocalTime (); }
-                       set { lastLoginDate = value.ToUniversalTime (); }
-               }
-               
-               public virtual DateTime LastPasswordChangedDate {
-                       get { return lastPasswordChangedDate.ToLocalTime (); }
-               }
-               
-               public virtual DateTime LastLockoutDate {
-                       get { return lastLockoutDate.ToLocalTime (); }
-               }
-               
-               public virtual string PasswordQuestion {
-                       get { return passwordQuestion; }
-               }
-               
-               public virtual string ProviderName {
-                       get { return providerName; }
-               }
-               
-               public virtual string UserName {
-                       get { return name; }
-               }
-               
-               public virtual object ProviderUserKey {
-                       get { return providerUserKey; }
-               }
-               
-               public override string ToString ()
-               {
-                       return UserName;
-               }
-               
-               public virtual bool UnlockUser ()
-               {
-                       bool retval = Provider.UnlockUser (UserName);
-
-                       UpdateUser ();
-
-                       return retval;
-               }
-               
-               MembershipProvider Provider {
-                       get {
-                               MembershipProvider p;                           
-                               IMembershipHelper helper = MembershipProvider.Helper;
-                               if (helper == null)
-                                       throw new PlatformNotSupportedException ("The method is not available.");
-                               p = helper.Providers [ProviderName];
-                               if (p == null)
-                                       throw new InvalidOperationException ("Membership provider '" + ProviderName + "' not found.");
-                               return p;
-                       }
-               }
-       }
-}
-
-
diff --git a/mcs/class/System.Web/System.Web.Security/MembershipUserCollection.cs b/mcs/class/System.Web/System.Web.Security/MembershipUserCollection.cs
deleted file mode 100644 (file)
index bbb689f..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-//
-// System.Web.Security.MembershipUserCollection
-//
-// Authors:
-//     Ben Maurer (bmaurer@users.sourceforge.net)
-//
-// (C) 2003 Ben Maurer
-// Copyright (C) 2005-2010 Novell, Inc (http://www.novell.com)
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System.Collections;
-using System.Runtime.CompilerServices;
-using System.Web.UI;
-
-namespace System.Web.Security
-{
-       [TypeForwardedFrom ("System.Web, Version=2.0.0.0, Culture=Neutral, PublicKeyToken=b03f5f7f11d50a3a")]
-       [Serializable]
-       public sealed class MembershipUserCollection : ICollection
-       {
-               public MembershipUserCollection ()
-               {
-               }
-               
-               public void Add (MembershipUser user)
-               {
-                       if (user == null)
-                               throw new ArgumentNullException ("user");
-
-                       CheckNotReadOnly ();
-                       store.Add (user.UserName, user);
-               }
-               
-               public void Clear ()
-               {
-                       CheckNotReadOnly ();
-                       store.Clear ();
-               }
-               
-               void ICollection.CopyTo (Array array, int index)
-               {
-                       store.Values.CopyTo (array, index);
-               }
-               
-               public void CopyTo (MembershipUser[] array, int index)
-               {
-                       store.Values.CopyTo (array, index);
-               }
-               
-               public IEnumerator GetEnumerator ()
-               {
-                       return ((IEnumerable) store).GetEnumerator ();
-               }
-               
-               public void Remove (string name)
-               {
-                       CheckNotReadOnly ();
-                       store.Remove (name);
-               }
-               
-               public void SetReadOnly ()
-               {
-                       readOnly = true;
-               }
-               
-               public int Count {
-                       get { return store.Count; }
-               }
-               
-               public bool IsSynchronized {
-                       get { return false; }
-               }
-               
-               public MembershipUser this [string name] {
-                       get { return (MembershipUser) store [name]; }
-               }
-               
-               public object SyncRoot {
-                       get { return this; }
-               }
-               
-               void CheckNotReadOnly ()
-               {
-                       if (readOnly)
-                               throw new NotSupportedException ();
-               }
-               
-               KeyedList store = new KeyedList ();
-               bool readOnly = false;
-       }
-}
-
-
diff --git a/mcs/class/System.Web/System.Web.Security/MembershipValidatePasswordEventHandler.cs b/mcs/class/System.Web/System.Web.Security/MembershipValidatePasswordEventHandler.cs
deleted file mode 100644 (file)
index 1c47511..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-//
-// System.Web.Security.MembershipValidatePasswordEventHandler
-//
-// Authors:
-//     Lluis Sanchez Gual (lluis@novell.com)
-//
-// (C) 2005 Novell, inc.
-//
-
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System.Runtime.CompilerServices;
-
-namespace System.Web.Security
-{
-       [TypeForwardedFrom ("System.Web, Version=2.0.0.0, Culture=Neutral, PublicKeyToken=b03f5f7f11d50a3a")]
-       public delegate void MembershipValidatePasswordEventHandler (object sender, ValidatePasswordEventArgs e);
-}
-
-
diff --git a/mcs/class/System.Web/System.Web.Security/RoleProvider.cs b/mcs/class/System.Web/System.Web.Security/RoleProvider.cs
deleted file mode 100644 (file)
index ad9079c..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-//
-// System.Web.Security.IRoleProvider
-//
-// Authors:
-//     Ben Maurer (bmaurer@users.sourceforge.net)
-//
-// (C) 2003 Ben Maurer
-//
-
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-using System.Configuration.Provider;
-using System.Runtime.CompilerServices;
-
-namespace System.Web.Security
-{
-       [TypeForwardedFrom ("System.Web, Version=2.0.0.0, Culture=Neutral, PublicKeyToken=b03f5f7f11d50a3a")]
-       public abstract class RoleProvider : ProviderBase
-       {
-               protected RoleProvider ()
-               {
-               }
-               
-               public abstract void AddUsersToRoles (string [] usernames, string [] rolenames);
-               public abstract void CreateRole (string rolename);
-               public abstract bool DeleteRole (string rolename, bool throwOnPopulatedRole);
-               public abstract string [] FindUsersInRole (string roleName, string usernameToMatch);
-               public abstract string [] GetAllRoles ();
-               public abstract string [] GetRolesForUser (string username);
-               public abstract string [] GetUsersInRole (string rolename);
-               public abstract bool IsUserInRole (string username, string rolename);
-               public abstract void RemoveUsersFromRoles (string [] usernames, string [] rolenames);
-               public abstract bool RoleExists (string rolename);
-               public abstract string ApplicationName { get; set; }
-       }
-}
-
-
diff --git a/mcs/class/System.Web/System.Web.Security/ValidatePasswordEventArgs.cs b/mcs/class/System.Web/System.Web.Security/ValidatePasswordEventArgs.cs
deleted file mode 100644 (file)
index ea18903..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-//
-// System.Web.Security.ValidatePasswordEventArgs
-//
-// Authors:
-//     Lluis Sanchez Gual (lluis@novell.com)
-//
-// (C) 2005 Novell, inc.
-//
-
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-using System;
-using System.Runtime.CompilerServices;
-
-namespace System.Web.Security
-{
-       [TypeForwardedFrom ("System.Web, Version=2.0.0.0, Culture=Neutral, PublicKeyToken=b03f5f7f11d50a3a")]
-       public sealed class ValidatePasswordEventArgs: EventArgs
-       {
-               bool cancel;
-               Exception exception;
-               bool isNewUser;
-               string userName;
-               string password;
-               
-               public ValidatePasswordEventArgs (string userName, string password, bool isNewUser)
-               {
-                       this.isNewUser = isNewUser;
-                       this.userName = userName;
-                       this.password = password;
-               }
-               
-               public bool Cancel {
-                       get { return cancel; }
-                       set { cancel = value; }
-               }
-               
-               public Exception FailureInformation {
-                       get { return exception; }
-                       set { exception = value; }
-               }
-               
-               public bool IsNewUser {
-                       get { return isNewUser; }
-               }
-               
-               public string UserName {
-                       get { return userName; }
-               }
-               
-               public string Password {
-                       get { return password; }
-               }
-       }
-}
-
diff --git a/mcs/class/System.Web/System.Web.UI/KeyedList.cs b/mcs/class/System.Web/System.Web.UI/KeyedList.cs
deleted file mode 100644 (file)
index 384ba52..0000000
+++ /dev/null
@@ -1,181 +0,0 @@
-//
-// System.Web.UI/KeyedList.cs
-//
-// Author: Todd Berman <tberman@gentoo.org>
-//
-// (C) 2003 Todd Berman
-
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System.Collections;
-using System.Collections.Specialized;
-
-namespace System.Web.UI
-{
-       class KeyedList : IOrderedDictionary
-       {
-
-               Hashtable objectTable = new Hashtable ();
-               ArrayList objectList = new ArrayList ();
-
-               public void Add (object key, object value)
-               {
-                       objectTable.Add (key, value);
-                       objectList.Add (new DictionaryEntry (key, value));
-               }
-
-               public void Clear ()
-               {
-                       objectTable.Clear ();
-                       objectList.Clear ();
-               }
-
-               public bool Contains (object key)
-               {
-                       return objectTable.Contains (key);
-               }
-
-               public void CopyTo (Array array, int idx)
-               {
-                       objectTable.CopyTo (array, idx);
-               }
-
-               public void Insert (int idx, object key, object value)
-               {
-                       if (idx > Count)
-                               throw new ArgumentOutOfRangeException ("index");
-
-                       objectTable.Add (key, value);
-                       objectList.Insert (idx, new DictionaryEntry (key, value));
-               }
-
-               public void Remove (object key)
-               {
-                       objectTable.Remove (key);
-                       int index = IndexOf (key);
-                       if (index >= 0)
-                               objectList.RemoveAt (index);
-               }
-
-               public void RemoveAt (int idx)
-               {
-                       if (idx >= Count)
-                               throw new ArgumentOutOfRangeException ("index");
-
-                       objectTable.Remove ( ((DictionaryEntry)objectList[idx]).Key );
-                       objectList.RemoveAt (idx);
-               }
-
-               IDictionaryEnumerator IDictionary.GetEnumerator ()
-               {
-                       return new KeyedListEnumerator (objectList);
-               }
-
-               IDictionaryEnumerator IOrderedDictionary.GetEnumerator ()
-               {
-                       return new KeyedListEnumerator (objectList);
-               }
-
-               IEnumerator IEnumerable.GetEnumerator ()
-               {
-                       return new KeyedListEnumerator (objectList);
-               }
-               public int Count {
-                       get { return objectList.Count; }
-               }
-
-               public bool IsFixedSize {
-                       get { return false; }
-               }
-
-               public bool IsReadOnly {
-                       get { return false; }
-               }
-
-               public bool IsSynchronized {
-                       get { return false; }
-               }
-
-               public object this[int idx] {
-                       get { return ((DictionaryEntry) objectList[idx]).Value; }
-                       set {
-                               if (idx < 0 || idx >= Count)
-                                       throw new ArgumentOutOfRangeException ("index");
-
-                               object key = ((DictionaryEntry) objectList[idx]).Key;
-                               objectList[idx] = new DictionaryEntry (key, value);
-                               objectTable[key] = value;
-                       }
-               }
-
-               public object this[object key] {
-                       get { return objectTable[key]; }
-                       set {
-                               if (objectTable.Contains (key))
-                               {
-                                       objectTable[key] = value;
-                                       objectTable[IndexOf (key)] = new DictionaryEntry (key, value);
-                                       return;
-                               }
-                               Add (key, value);
-                       }
-               }
-
-               public ICollection Keys {
-                       get { 
-                               ArrayList retList = new ArrayList ();
-                               for (int i = 0; i < objectList.Count; i++)
-                               {
-                                       retList.Add ( ((DictionaryEntry)objectList[i]).Key );
-                               }
-                               return retList;
-                       }
-               }
-
-               public ICollection Values {
-                       get {
-                               ArrayList retList = new ArrayList ();
-                               for (int i = 0; i < objectList.Count; i++)
-                               {
-                                       retList.Add ( ((DictionaryEntry)objectList[i]).Value );
-                               }
-                               return retList;
-                       }
-               }
-
-               public object SyncRoot {
-                       get { return this; }
-               }
-
-               int IndexOf (object key)
-               {
-                       for (int i = 0; i < objectList.Count; i++)
-                       {
-                               if (((DictionaryEntry) objectList[i]).Key.Equals (key))
-                               {
-                                       return i;
-                               }
-                       }
-                       return -1;
-               }
-       }
-}
diff --git a/mcs/class/System.Web/System.Web.UI/KeyedListEnumerator.cs b/mcs/class/System.Web/System.Web.UI/KeyedListEnumerator.cs
deleted file mode 100644 (file)
index db916a2..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-//
-// System.Web.UI/KeyedListEnumerator.cs
-//
-// Author: Todd Berman <tberman@gentoo.org>
-//
-// (C) 2003 Todd Berman
-
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System.Collections;
-
-namespace System.Web.UI
-{
-       internal class KeyedListEnumerator : IDictionaryEnumerator
-       {
-               int index = -1;
-               ArrayList objs;
-
-               internal KeyedListEnumerator (ArrayList list)
-               {
-                       objs = list;
-               }
-
-               public bool MoveNext ()
-               {
-                       index++;
-                       if (index >= objs.Count)
-                               return false;
-
-                       return true;
-               }
-
-               public void Reset ()
-               {
-                       index = -1;
-               }
-
-               public object Current {
-                       get {
-                               if (index < 0 || index >= objs.Count)
-                                       throw new InvalidOperationException ();
-
-                               return ((DictionaryEntry)objs[index]).Value;
-                       }
-               }
-
-               public DictionaryEntry Entry {
-                       get {
-                               return (DictionaryEntry) Current;
-                       }
-               }
-
-               public object Key {
-                       get {
-                               return Entry.Key;
-                       }
-               }
-
-               public object Value {
-                       get {
-                               return Entry.Value;
-                       }
-               }
-       }
-}
index 5a5f67915dd90a377c8050d53f512c2e2daa97c8..0e24b442bea8bbcbc7665ac5b79e5b99cf057e23 100644 (file)
@@ -8,16 +8,9 @@
 
 RUNTIME = mono
 
-ifeq ($(PROFILE), net_2_0)
-       nunit_MONO_PATH="../../../../../class/lib/net_2_0"
-       CSCOMPILE=gmcs
-       XSPSERVER=xsp2
-else
-       nunit_MONO_PATH="../../../../../class/lib/net_1_1"
-       CSCOMPILE=mcs
-       XSPSERVER=xsp
-endif
-
+nunit_MONO_PATH="../../../../../class/lib/net_4_5"
+CSCOMPILE=mcs
+XSPSERVER=xsp4
 
 TEST_PROG=bin/MainsoftWebApp.dll
 
index 990d1b697c780cda48626cb3370746c24e47d53c..a0b42fd484b3d08532fd2c13148a66053c3c9ca6 100644 (file)
@@ -1,12 +1,12 @@
 run-test: Test1.dll
-       mono nunit-console2 Test1.dll -out:res.log
+       mono nunit-console Test1.dll -out:res.log
 
 run-test-ondotnet: Test1.dll
-       nunit-console2 Test1.dll -out:res.log
+       nunit-console Test1.dll -out:res.log
 
 Test1.dll: NunitWeb.dll Test1/Class1.cs Makefile
-       gmcs -d:NET_2_0 -r:../../../../lib/net_2_0/nunit.framework -r:System.Web -r:NunitWeb -target:library -r:System.Drawing -out:Test1.dll Test1/Class1.cs
+       mcs -r:../../../../lib/net_4_5/nunit.framework -r:System.Web -r:NunitWeb -target:library -r:System.Drawing -out:Test1.dll Test1/Class1.cs
 
 
 NunitWeb.dll: NunitWeb/Helper.cs NunitWeb/MyHandler.cs NunitWeb/MyHost.cs NunitWeb/Resources/My.master NunitWeb/Resources/MyPage.aspx NunitWeb/Resources/MyPage.aspx.cs NunitWeb/Resources/MyPageWithMaster.aspx NunitWeb/Resources/MyPageWithMaster.aspx.cs NunitWeb/Resources/Web.config NunitWeb/Resources/MyPageWithMasterInvalidPlaceHolder.aspx Makefile
-       gmcs -d:NET_2_0 -r:System.Configuration -r:System.Web NunitWeb/CustomSection.cs NunitWeb/Helper.cs NunitWeb/MyHandler.cs NunitWeb/MyHost.cs -resource:NunitWeb/Resources/My.master -resource:NunitWeb/Resources/MyPage.aspx -resource:NunitWeb/Resources/MyPage.aspx.cs -resource:NunitWeb/Resources/MyPageWithMaster.aspx -resource:NunitWeb/Resources/MyPageWithMaster.aspx.cs -resource:NunitWeb/Resources/MyPageWithMasterInvalidPlaceHolder.aspx -resource:NunitWeb/Resources/Web.config -target:library -out:NunitWeb.dll
+       mcs -r:System.Configuration -r:System.Web NunitWeb/CustomSection.cs NunitWeb/Helper.cs NunitWeb/MyHandler.cs NunitWeb/MyHost.cs -resource:NunitWeb/Resources/My.master -resource:NunitWeb/Resources/MyPage.aspx -resource:NunitWeb/Resources/MyPage.aspx.cs -resource:NunitWeb/Resources/MyPageWithMaster.aspx -resource:NunitWeb/Resources/MyPageWithMaster.aspx.cs -resource:NunitWeb/Resources/MyPageWithMasterInvalidPlaceHolder.aspx -resource:NunitWeb/Resources/Web.config -target:library -out:NunitWeb.dll
index f44d93a6f0eaa473c248e7b68f906fbaaef17c43..6b103bd7c99900496531145a1acfd797c7375c9b 100644 (file)
@@ -66,7 +66,7 @@ EXTRA_DISTFILES = \
        $(nist_dom_files:%=Test/System.Xml/nist_dom/%)
 
 System.Xml.XPath/$(PROFILE)_Parser.cs: System.Xml.XPath/Parser.jay $(topdir)/jay/skeleton.cs
-       (cd System.Xml.XPath; $(topdir)/../jay/jay -ct < $(topdir)/../jay/skeleton.cs Parser.jay >> $(PROFILE)_Parser.cs)
+       (cd System.Xml.XPath; $(topdir)/../jay/jay -ct < $(topdir)/../jay/skeleton.cs Parser.jay > $(PROFILE)_Parser.cs)
 
 Mono.Xml.Xsl/$(PROFILE)_PatternParser.jay: System.Xml.XPath/Parser.jay $(topdir)/jay/skeleton.cs
        sed "s/\%start Expr/\%start Pattern/" $< >$@
index 8d75d7b0844c29b029b8b3f8585cc9e34e6b32b5..9f50b1846ad919a8cf5b59cb02d69e400306af3a 100644 (file)
@@ -31,9 +31,6 @@ using System.Xml;
 using System.ComponentModel;
 using Mono.Xml.Schema;
 using System.Xml.Serialization;
-#if NET_2_0_in_the_future
-using MS.Internal.Xml;
-#endif
 
 namespace System.Xml.Schema
 {
index b0009f5390243fd36b6f2a03464a8e75bd467ac4..8e9fe3e91bf86055ebf2019c66f76db07e94f97d 100644 (file)
@@ -762,6 +762,8 @@ namespace System.Xml.Serialization
                                cp.ReferencedAssemblies.Add ("System.Xml");
                        if (!cp.ReferencedAssemblies.Contains ("System.Data"))
                                cp.ReferencedAssemblies.Add ("System.Data");
+                       if (!cp.ReferencedAssemblies.Contains ("System.Web.Services"))
+                               cp.ReferencedAssemblies.Add ("System.Web.Services");
                        
                        CompilerResults res = comp.CompileAssemblyFromFile (cp, file);
                        if (res.Errors.HasErrors || res.CompiledAssembly == null) {
index b9ba4948d68ff7917f3c70cb12b7fdbe015c27c0..8a9d81dac33e571c71b512dff866db4c467d9216 100644 (file)
@@ -136,8 +136,12 @@ namespace System.Xml
                                req.Proxy = proxy;
                        if (credential != null)
                                req.Credentials = credential;
+#if BOOTSTRAP_BASIC
+                       return null;
+#else
                        var res = await req.GetResponseAsync ().ConfigureAwait (false);
                        return res.GetResponseStream ();
+#endif
                }
        }
 }
index 41109b2ae9483c275a0b29c6fcce7d88515baf90..7062d6482e22cb66088e6519bf84d7ac05b4cb9c 100644 (file)
@@ -87,11 +87,6 @@ namespace MonoTests.System.XmlSerialization
 
                [Test]
                [Category ("NotWorking")] // mark it NotWorking until fixes have landed in svn
-/*
-#if NET_2_0
-               [Category ("NotWorking")] // minOccurs is 1 on Mono
-#endif
-*/
                public void ExportClass_SimpleClass ()
                {
                        SoapAttributeOverrides overrides = new SoapAttributeOverrides ();
@@ -658,11 +653,6 @@ namespace MonoTests.System.XmlSerialization
 
                [Test]
                [Category ("NotWorking")] // mark it NotWorking until fixes have landed in svn
-/*
-#if NET_2_0
-               [Category ("NotWorking")] // minOccurs is 1 on Mono
-#endif
- */
                public void ExportClass_SimpleClass_Array ()
                {
                        SoapAttributeOverrides overrides = new SoapAttributeOverrides ();
index 01047b57ced9d0d559c037cc0bc414bc1b80ee7b..89174f2a72aaa7c9434e3f88ec189abeef3f9444 100644 (file)
@@ -1,20 +1,15 @@
 .SUFFIXES: .cs .exe .dll
-\r
-RUNTIME=mono\r
-XMLCONF_OPTIONS=\r
-
-ifeq ($(PROFILE), net_2_0)
-       nunit_MONO_PATH="../../../../../class/lib/net_2_0"
-       CSCOMPILE=gmcs\r
-else
-       nunit_MONO_PATH="../../../../../class/lib/net_1_1"
-       CSCOMPILE=mcs
-endif
+
+RUNTIME=mono
+XMLCONF_OPTIONS=
+
+nunit_MONO_PATH="../../../../../class/lib/net_4_5"
+CSCOMPILE=mcs
 
 REFERENCES=-d:NUNIT_SUPPORT -r:nunit.core -r:nunit.framework
-TEST_ARCHIVE=xmlts20031210.zip\r
-TEST_CATALOG=xmlconf/xmlconf.xml\r
-TEST_PROG=xmlconf.dll\r
+TEST_ARCHIVE=xmlts20031210.zip
+TEST_CATALOG=xmlconf/xmlconf.xml
+TEST_PROG=xmlconf.dll
 mono_wrapper_PATH="../../../../../../mono/runtime/mono-wrapper"
 NUNIT_CONSOLE=$(mono_wrapper_PATH) --debug $(nunit_MONO_PATH)/nunit-console.exe
 
@@ -28,9 +23,9 @@ ALL_FIXTURE=MonoTests.W3C_xmlconf.AllTests
 ALL_NUNIT_FLAGS=/fixture:$(ALL_FIXTURE) /xml=AllTestsResult.xml /out=AllTestsResult.log
 
 
-\r
-test: $(TEST_PROG) $(TEST_CATALOG)\r
-\r
+
+test: $(TEST_PROG) $(TEST_CATALOG)
+
 run-test: test
        MONO_PATH="$(nunit_MONO_PATH);$(MONO_PATH)" $(NUNIT_CONSOLE) $(TEST_PROG) $(CLEAN_NUNIT_FLAGS)
 
@@ -40,17 +35,17 @@ run-failing-test: test
 run-all-test: test
        MONO_PATH="$(nunit_MONO_PATH);$(MONO_PATH)" $(NUNIT_CONSOLE) $(TEST_PROG) $(ALL_NUNIT_FLAGS)
 
-test_archive: $(TEST_ARCHIVE)\r
-\r
-test_catalog: $(TEST_CATALOG)\r
-\r
-$(TEST_ARCHIVE):\r
-       wget http://www.w3.org/XML/Test/xmlts20031210.zip\r
-\r
-$(TEST_CATALOG): $(TEST_ARCHIVE)\r
-       mkdir xmlconf; unzip -un $(TEST_ARCHIVE)\r
-       touch $(TEST_CATALOG)\r
-\r
+test_archive: $(TEST_ARCHIVE)
+
+test_catalog: $(TEST_CATALOG)
+
+$(TEST_ARCHIVE):
+       wget http://www.w3.org/XML/Test/xmlts20031210.zip
+
+$(TEST_CATALOG): $(TEST_ARCHIVE)
+       mkdir xmlconf; unzip -un $(TEST_ARCHIVE)
+       touch $(TEST_CATALOG)
+
 .cs.dll:
        $(CSCOMPILE) /t:library /lib:$(nunit_MONO_PATH) $< $(REFERENCES)
 
index 295c4ef08e1875d7369784c3e4b4979b72f5665a..33f7070b1cfb361e8279b4785d3c5ad7511c862e 100644 (file)
@@ -1025,6 +1025,13 @@ namespace MonoTests.System.Xml
                        XmlConvert.ToDateTime ("0001-02-03T10:20:30.0000", m);
                        XmlConvert.ToDateTime ("0001-02-03T10:20:30.0000Z", m);
                        XmlConvert.ToDateTime ("0001-02-03T10:20:30.0000+09:00", m);
+               }
+
+               [Test]
+               [Category("NotWorking")]
+               public void XmlDateTimeSerializationModeBadFormats ()
+               {
+                       XmlDateTimeSerializationMode m = XmlDateTimeSerializationMode.RoundtripKind;
 
                        try {
                                XmlConvert.ToDateTime ("0001-02-03T", m);
index 0dad3a2fc9387b07d08c35054849ca1ada83af63..5a384918413d0c9e4118055e2fe0e18e3a544d69 100644 (file)
@@ -241,6 +241,8 @@ namespace System.Xaml
                        // change XamlXmlReader too if we change here.
                        if ((value as string) == String.Empty) // FIXME: there could be some escape syntax.
                                return "\"\"";
+                       if (value is string)
+                               return (string) value;
 
                        var xt = value == null ? XamlLanguage.Null : sctx.GetXamlType (value.GetType ());
                        var vs = xm.ValueSerializer ?? xt.ValueSerializer;
index a75c3fbd9f99d5147aabfd1aba5f71cf96451757..f5aa6a975018768f067e2fab5b79084c20bab36c 100644 (file)
@@ -116,25 +116,11 @@ $(build_lib): $(CYCLIC_DEP_FILES)
 
 $(test_lib): $(test_lib).config $(TEST_RESOURCES)
 
-ifeq (net_2_0, $(PROFILE))
-$(test_lib).config: Test/test-config-file-net-2.0
-       cp $< $@
-else
 $(test_lib).config: Test/test-config-file
        cp $< $@
-endif
 
 CLEAN_FILES = $(test_lib).config $(bare_libdir)/System.dll $(secxml_libdir)/System.dll $(bare_libdir)/System.dll.mdb $(secxml_libdir)/System.dll.mdb
 
-# run the PKITS tests only if the data was installed/activated, otherwise ignore them
-ifeq (net_2_0, $(PROFILE))
-pkits_files := $(wildcard Test/System.Security.Cryptography.X509Certificates/pkits/hint)
-ifndef pkits_files
-TEST_HARNESS_EXCLUDES = -exclude=$(PLATFORM_TEST_HARNESS_EXCLUDES)NotWorking,ValueAdd,CAS,InetAccess,PKITS
-TEST_HARNESS_EXCLUDES_ONDOTNET = -exclude=$(PLATFORM_TEST_HARNESS_EXCLUDES)NotDotNet,CAS,PKITS
-endif
-endif
-
 # Helper target to run the perl regex test suite
 regex-check:
        $(MAKE) check FIXTURE=System.Text.RegularExpressions.PerlTest
index d4aac126e88b2991b87eaba54e131ef2026c24d8..14790efb1a67220d30ab571f24d01ecd42766725 100644 (file)
@@ -80,6 +80,10 @@ namespace System.Diagnostics {
                public static void Assert (bool condition, string message,
                        string detailMessageFormat, params object [] args)
                {
+                       if (condition)
+                               // Return early to avoid the string formatting
+                               return;
+
                        TraceImpl.Assert (condition,
                                message,
                                string.Format (detailMessageFormat, args));
index 3f2ae21e2ea5b25933aea2257bd298a0bb517a9b..157b888871d4ff1b4b5f90e456bef5d7da26b217 100644 (file)
@@ -286,7 +286,7 @@ namespace System.Net.NetworkInformation {
 
                private PingReply SendUnprivileged (IPAddress address, int timeout, byte [] buffer, PingOptions options)
                {
-                       DateTime sentTime = DateTime.Now;
+                       DateTime sentTime = DateTime.UtcNow;
 
                        Process ping = new Process ();
                        string args = BuildPingArgs (address, timeout, options);
@@ -301,6 +301,7 @@ namespace System.Net.NetworkInformation {
                        ping.StartInfo.RedirectStandardOutput = true;
                        ping.StartInfo.RedirectStandardError = true;
 
+                       IPStatus status = IPStatus.Unknown;
                        try {
                                ping.Start ();
 
@@ -309,23 +310,21 @@ namespace System.Net.NetworkInformation {
                                string stderr = ping.StandardError.ReadToEnd ();
 #pragma warning restore 219
                                
-                               trip_time = (long) (DateTime.Now - sentTime).TotalMilliseconds;
+                               trip_time = (long) (DateTime.UtcNow - sentTime).TotalMilliseconds;
                                if (!ping.WaitForExit (timeout) || (ping.HasExited && ping.ExitCode == 2))
-                                       return new PingReply (address, buffer, options, trip_time, IPStatus.TimedOut); 
-
-                               if (ping.ExitCode == 1)
-                                       return new PingReply (address, buffer, options, trip_time, IPStatus.TtlExpired);
-                       } catch (Exception) {
-                               return new PingReply (address, buffer, options, trip_time, IPStatus.Unknown);
+                                       status = IPStatus.TimedOut;
+                               else if (ping.ExitCode == 0)
+                                       status = IPStatus.Success;
+                               else if (ping.ExitCode == 1)
+                                       status = IPStatus.TtlExpired;
+                       } catch {
                        } finally {
-                               if (ping != null) {
-                                       if (!ping.HasExited)
-                                               ping.Kill ();
-                                       ping.Dispose ();
-                               }
+                               if (!ping.HasExited)
+                                       ping.Kill ();
+                               ping.Dispose ();
                        }
 
-                       return new PingReply (address, buffer, options, trip_time, IPStatus.Success);
+                       return new PingReply (address, buffer, options, trip_time, status);
                }
 
                // Async
index 4c1d41405055574defaa1baa2cdc05159019c69f..04baad213dd3ed3f3df9b70d5008dcd06095c6fc 100644 (file)
@@ -1095,13 +1095,15 @@ namespace System.Net
                                break;
                        }
 
-                       if (method != "GET" && !InternalAllowBuffering)
+                       if (method != "GET" && !InternalAllowBuffering && writeStream.WriteBufferLength > 0)
                                e = new WebException ("The request requires buffering data to succeed.", null, WebExceptionStatus.ProtocolError, webResponse);
 
                        if (e != null)
                                throw e;
 
-                       contentLength = -1;
+                       if (AllowWriteStreamBuffering)
+                               contentLength = -1;
+
                        uriString = webResponse.Headers ["Location"];
 
                        if (uriString == null)
index f3ae9b3610e2a627816e93710a97d09e684998fe..ad7d0ae4b6dcae929fcd31220faf70e1f9c4c502 100644 (file)
@@ -190,15 +190,10 @@ namespace MonoTests.System.ComponentModel
                        DateTimeFormatInfo info = (DateTimeFormatInfo) culture.GetFormat (typeof (DateTimeFormatInfo));
                        DateTime date = DateTime.Now;
 
-                       DateTime newDate = (DateTime) converter.ConvertFrom (null, culture, date.ToString("G", info));
-
-                       Assert.AreEqual (date.Year, newDate.Year, "#1");
-                       Assert.AreEqual (date.Month, newDate.Month, "#2");
-                       Assert.AreEqual (date.Day, newDate.Day, "#3");
-                       Assert.AreEqual (date.Hour, newDate.Hour, "#4");
-                       Assert.AreEqual (date.Minute, newDate.Minute, "#5");
-                       Assert.AreEqual (date.Second, newDate.Second, "#6");
-                       Assert.AreEqual (0, newDate.Millisecond, "#7");
+                       try {
+                               converter.ConvertFrom (null, culture, date.ToString("G", info));
+                       } catch (FormatException) {
+                       }
                }
 
                [Test]
index 484e6b3130e6408c16093925a2fe5b43563ea294..b9123b57f62c63cda595e6f87087cc4518838052 100644 (file)
@@ -13,7 +13,7 @@ using System.ComponentModel;
 using DescriptionAttribute = System.ComponentModel.DescriptionAttribute;
 using System.ComponentModel.Design;
 using System.Globalization;
-
+using System.Linq;
 using System.Collections.Generic;
 
 using NUnit.Framework;
@@ -227,6 +227,8 @@ namespace MonoTests.System.ComponentModel
                
                public MyComponent  ()
                {
+                       // A workaround for aggressive linker
+                       Disposed -= null;
                }
                
                public MyComponent (ISite site)
@@ -1236,14 +1238,11 @@ namespace MonoTests.System.ComponentModel
 
                        // Test from bug #76686
                        Assert.AreEqual  (typeof (Int32Converter), TypeDescriptor.GetConverter ((int?) 1).GetType (), "#28");
-#if MOBILE
-                       Assert.IsFalse (TypeDescriptor.GetConverter (typeof (Component)) is ComponentConverter, "#29");
-                       Assert.IsFalse (TypeDescriptor.GetConverter (new Component()) is ComponentConverter, "#30");
-#else
+                       new ComponentConverter (null); // Needed for MT linker
                        Assert.IsTrue (TypeDescriptor.GetConverter (typeof (Component)) is ComponentConverter, "#29");
                        Assert.IsTrue (TypeDescriptor.GetConverter (new Component()) is ComponentConverter, "#30");
-#endif
                        Assert.AreEqual (typeof (NullableConverter), TypeDescriptor.GetConverter (typeof (int?)).GetType (), "#31");
+                       new DateTimeOffsetConverter (); // Needed for MT linker
                        Assert.AreEqual (typeof (DateTimeOffsetConverter), TypeDescriptor.GetConverter (typeof (DateTimeOffset)).GetType (), "#32");
                }
                
@@ -1522,7 +1521,6 @@ namespace MonoTests.System.ComponentModel
                        Assert.AreEqual ("Length", pc [0].Name, "#2");
                }
 
-#if NET_4_0
                [Test]
                public void InterfaceType ()
                {
@@ -1534,6 +1532,150 @@ namespace MonoTests.System.ComponentModel
                        Assert.IsFalse (interface_type.IsInterface, "#A4");
                        Assert.IsFalse (interface_type.IsPublic, "#A5");
                }
-#endif
+
+               [Test]
+               public void DynamicAttributesShouldBeReturnedForType()
+               {
+                       var testType = typeof(AttrTestClass);
+                       TypeDescriptor.AddAttributes(testType, new ProviderTestAttribute());
+                       var registeredAttributeTypes = TypeDescriptor.GetAttributes(testType).Cast<Attribute>().Select(attr => attr.GetType()).ToArray();
+                       Assert.AreEqual(2, registeredAttributeTypes.Length);
+                       Assert.IsTrue (registeredAttributeTypes.Contains (typeof(ProviderTestAttribute)), "Contains-1");
+                       Assert.IsTrue (registeredAttributeTypes.Contains (typeof(SerializableAttribute)), "Contains-2");
+               }
+
+               [Test]
+               public void DynamicAttributesShouldBeReturnedForInstance()
+               {
+                       var testObj = new AttrTestClass();
+                       TypeDescriptor.AddAttributes(testObj, new ProviderTestAttribute());
+                       var registeredAttributeTypes = TypeDescriptor.GetAttributes(testObj).Cast<Attribute>().Select(attr => attr.GetType()).ToArray();
+                       Assert.AreEqual(2, registeredAttributeTypes.Length);
+                       Assert.IsTrue (registeredAttributeTypes.Contains (typeof(ProviderTestAttribute)), "Contains-1");
+                       Assert.IsTrue (registeredAttributeTypes.Contains (typeof(SerializableAttribute)), "Contains-2");
+               }
+
+               [Test]
+               public void CustomTypeDescriptorsShouldBeUsedForType()
+               {
+                       var testType = typeof(CustomDescriptorTestClass);
+                       TypeDescriptor.AddProvider(new CustomDescriptionTestProvider(), testType);
+
+                       var registeredAttributeTypes = TypeDescriptor.GetAttributes(testType).Cast<Attribute>().Select(attr => attr.GetType()).ToArray();
+                       Assert.AreEqual(1, registeredAttributeTypes.Length);
+                       Assert.IsTrue (registeredAttributeTypes.Contains (typeof(ProviderTestAttribute)), "Contains-1");
+
+                       var registeredPropertyDescriptorTypes = TypeDescriptor.GetProperties(testType).Cast<PropertyDescriptor>().Select(prop => prop.GetType()).ToArray();
+                       Assert.AreEqual(1, registeredPropertyDescriptorTypes.Length);
+                       Assert.IsTrue (registeredPropertyDescriptorTypes.Contains (typeof(ProviderTestPropertyDescriptor)), "Contains-2");
+               }
+
+               [Test]
+               public void CustomTypeDescriptorsShouldBeUsedForInstance()
+               {
+                       var testObj = new CustomDescriptorTestClass();
+                       TypeDescriptor.AddProvider(new CustomDescriptionTestProvider(), testObj);
+
+                       var registeredAttributeTypes = TypeDescriptor.GetAttributes(testObj).Cast<Attribute>().Select(attr => attr.GetType()).ToArray();
+                       Assert.AreEqual(1, registeredAttributeTypes.Length);
+                       Assert.IsTrue (registeredAttributeTypes.Contains (typeof(ProviderTestAttribute)), "Contains-1");
+
+                       var registeredPropertyDescriptorTypes = TypeDescriptor.GetProperties(testObj).Cast<PropertyDescriptor>().Select(prop => prop.GetType()).ToArray();
+                       Assert.AreEqual(1, registeredPropertyDescriptorTypes.Length);
+                       Assert.IsTrue (registeredPropertyDescriptorTypes.Contains (typeof(ProviderTestPropertyDescriptor)), "Contains-2");
+               }
+
+               private class CustomDescriptionTestProvider : TypeDescriptionProvider
+               {
+                       public override ICustomTypeDescriptor GetTypeDescriptor(Type objectType, object instance)
+                       {
+                               return new CustomTestProvider();
+                       }
+               }
+
+               private class CustomTestProvider : CustomTypeDescriptor
+               {
+                       public CustomTestProvider()
+                       {
+                       }
+
+                       public override AttributeCollection GetAttributes()
+                       {
+                               return new AttributeCollection(new ProviderTestAttribute());
+                       }
+
+                       public override PropertyDescriptorCollection GetProperties()
+                       {
+                               return new PropertyDescriptorCollection(new PropertyDescriptor[] { new ProviderTestPropertyDescriptor() });
+                       }
+               }
+
+               private class ProviderTestAttribute : Attribute
+               {
+               }
+
+               private class ProviderTestPropertyDescriptor : PropertyDescriptor
+               {
+                       public ProviderTestPropertyDescriptor()
+                               : base("test", new Attribute[0])
+                       {
+                       }
+
+                       public override bool CanResetValue(object component)
+                       {
+                               return false;
+                       }
+
+                       public override object GetValue(object component)
+                       {
+                               return null;
+                       }
+
+                       public override void ResetValue(object component)
+                       {
+                       }
+
+                       public override void SetValue(object component, object value)
+                       {
+                       }
+
+                       public override bool ShouldSerializeValue(object component)
+                       {
+                               return false;
+                       }
+
+                       public override Type ComponentType
+                       {
+                               get
+                               {
+                                       return typeof(object);
+                               }
+                       }
+
+                       public override bool IsReadOnly
+                       {
+                               get
+                               {
+                                       return false;
+                               }
+                       }
+
+                       public override Type PropertyType
+                       {
+                               get
+                               {
+                                       return typeof(object);
+                               }
+                       }
+               }
+
+               [Serializable]
+               private class AttrTestClass
+               {
+               }
+
+               private class CustomDescriptorTestClass
+               {
+               }
        }
 }
index f8ad5f1c74b353a929aace34af422197b3324932..a9f896a9112af9c84341b3f2f85f0a69b1bd3b81 100644 (file)
@@ -27,7 +27,7 @@ namespace MonoTests.System.Net.NetworkInformation
                                UnicastIPAddressInformationCollection unicastAddresses = adapterProperties.UnicastAddresses;
                                numUnicastAddresses += unicastAddresses.Count;
                        }
-                       Assert.Greater (numUnicastAddresses, 0);
+                       Assert.IsTrue (numUnicastAddresses > 0);
                }
        
                [Test]
@@ -41,7 +41,7 @@ namespace MonoTests.System.Net.NetworkInformation
                                GatewayIPAddressInformationCollection gatewayAddresses = adapterProperties.GatewayAddresses;
                                numGatewayAddresses += gatewayAddresses.Count;
                        }
-                       Assert.Greater (numGatewayAddresses, 0);
+                       Assert.IsTrue (numGatewayAddresses > 0);
                }
        
                [Test]
@@ -66,7 +66,7 @@ namespace MonoTests.System.Net.NetworkInformation
                                IPAddressCollection dnsAddresses = adapterProperties.DnsAddresses;
                                numDnsAddresses += dnsAddresses.Count;
                        }
-                       Assert.Greater (numDnsAddresses, 0);
+                       Assert.IsTrue (numDnsAddresses > 0);
                }
        
        }
index d5bd176c0615e5c5dbd2d1d02f6aa6d070368daf..f3712dc9f6ebf678866aa7680c522565f29268ca 100644 (file)
@@ -26,28 +26,28 @@ namespace MonoTests.System.Net.NetworkInformation
                [Test]
                public void LoopbackInterfaceIndex ()
                {
-                       Assert.Greater (NetworkInterface.LoopbackInterfaceIndex, 0);
+                       Assert.IsTrue (NetworkInterface.LoopbackInterfaceIndex > 0);
                }
        
                [Test]
                public void AtLeastOneInterface ()
                {
                        NetworkInterface[] adapters = NetworkInterface.GetAllNetworkInterfaces ();
-                       Assert.Greater (adapters.Length, 0);
+                       Assert.IsTrue (adapters.Length > 0);
                }
        
                [Test]
                public void FirstInterfaceId ()
                {
                        NetworkInterface[] adapters = NetworkInterface.GetAllNetworkInterfaces ();
-                       Assert.Greater (adapters[0].Id.Length, 0);
+                       Assert.IsTrue (adapters[0].Id.Length > 0);
                }
        
                [Test]
                public void FirstInterfaceName ()
                {
                        NetworkInterface[] adapters = NetworkInterface.GetAllNetworkInterfaces ();
-                       Assert.Greater (adapters[0].Name.Length, 0);
+                       Assert.IsTrue (adapters[0].Name.Length > 0);
                }
        
                [Test]
@@ -70,7 +70,7 @@ namespace MonoTests.System.Net.NetworkInformation
                public void FirstInterfaceSpeed ()
                {
                        NetworkInterface[] adapters = NetworkInterface.GetAllNetworkInterfaces ();
-                       Assert.Greater (adapters[0].Speed, 0);
+                       Assert.IsTrue (adapters[0].Speed > 0);
                }
        
        }
index 906528a64bb0b50593d56e3a02e3b993ddee85c9..19a47097a7d84a270b7a491340627317e5754887 100644 (file)
@@ -10,15 +10,23 @@ namespace MonoTests.System.Net.NetworkInformation
                [Test] 
                public void PingFail()
                {
+#if MONOTOUCH
+                       Assert.Ignore ("Ping implementation is broken on MT (requires sudo access)");
+#else
                        var p = new Ping ().Send ("192.0.2.0");
                        Assert.AreNotEqual(IPStatus.Success, p.Status);
+#endif
                }
 
-               [Test] 
+               [Test]
                public void PingSuccess()
                {
+#if MONOTOUCH
+                       Assert.Ignore ("Ping implementation is broken on MT (requires sudo access)");
+#else
                        var p = new Ping ().Send ("127.0.0.1");
                        Assert.AreEqual(IPStatus.Success, p.Status);
+#endif
                }               
        }
 }
index ae44dfcb08921280cedc4b2a9e48e746738ed749..3f22e653c194bb21bb73162180d68468beb1be8e 100644 (file)
@@ -54,15 +54,6 @@ install-local:
        $(INSTALL_LIB) $(mcs_aot_image) $(DESTDIR)$(PROGRAM_INSTALL_DIR)
 endif
 
-# No mcs in net 2.0
-MSCORLIB_PROFILE := $(filter net_2_0, $(PROFILE))
-ifdef MSCORLIB_PROFILE
-all-local: $(mscorlib_aot_image)
-install-local:
-       $(MKINSTALLDIRS) $(DESTDIR)$(LIBRARY_INSTALL_DIR)
-       $(INSTALL_LIB) $(mscorlib_aot_image) $(DESTDIR)$(LIBRARY_INSTALL_DIR)
-endif
-
 endif
 
 endif
index 5fb084def4682647b2f1bc5c41a8600bdb9928cd..0e83f59cb600d633a7f7aba08614eeac19d056d9 100644 (file)
@@ -6,7 +6,7 @@ export __SECURITY_BOOTSTRAP_DB=$(topdir)/class/corlib
 LIBRARY = corlib.dll
 LIBRARY_NAME = mscorlib.dll
 
-REFERENCE_SOURCES_FLAGS = -d:FEATURE_PAL,PFX_LEGACY_3_5 -d:MONO
+REFERENCE_SOURCES_FLAGS = -d:FEATURE_PAL,PFX_LEGACY_3_5 -d:MONO -d:MONO_HYBRID_ENCODING_SUPPORT
 LIB_MCS_FLAGS = $(REFERENCE_SOURCES_FLAGS) $(RESOURCE_FILES:%=-resource:%)
 
 #LIBRARY_USE_INTERMEDIATE_FILE = yes
@@ -25,6 +25,7 @@ LIBRARY_COMPILE = $(BOOT_COMPILE)
 LIBRARY_INSTALL_DIR = $(mono_libdir)/mono/$(FRAMEWORK_VERSION)
 
 RESOURCE_FILES = \
+       resources/charinfo.nlp \
        resources/collation.core.bin \
        resources/collation.tailoring.bin \
        resources/collation.cjkCHS.bin \
@@ -33,8 +34,8 @@ RESOURCE_FILES = \
        resources/collation.cjkKO.bin \
        resources/collation.cjkKOlv2.bin
 
-REFERENCE_SOURCES_FLAGS = -d:FEATURE_PAL,GENERICS_WORK,FEATURE_LIST_PREDICATES
-LOCAL_MCS_FLAGS = -unsafe -nostdlib -nowarn:612,618 -d:INSIDE_CORLIB -d:LIBC $(REFERENCE_SOURCES_FLAGS)
+REFERENCE_SOURCES_FLAGS = -d:FEATURE_PAL,GENERICS_WORK,FEATURE_LIST_PREDICATES,FEATURE_SERIALIZATION,FEATURE_ASCII,FEATURE_LATIN1,FEATURE_UTF7,FEATURE_UTF32,MONO_HYBRID_ENCODING_SUPPORT
+LOCAL_MCS_FLAGS = -unsafe -nostdlib -nowarn:612,618 -d:INSIDE_CORLIB,MONO_CULTURE_DATA -d:LIBC $(REFERENCE_SOURCES_FLAGS)
 DEFAULT_REFERENCES =
 
 # System.IO/DirectoryInfoTest.cs needs Mono.Posix
@@ -158,3 +159,21 @@ EXTRA_DISTFILES += \
        $(vtsdir)/VersionTolerantSerializationTestLib/5.0/Address.cs \
        $(vtsdir)/VersionTolerantSerializationTestLib/6.0/Address.cs \
        $(vtsdir)/BinarySerializationOverVersions.cs
+
+#
+# Android TimeZoneInfo testing....
+#
+
+tzi.exe: System/AndroidPlatform.cs $(wildcard System/TimeZone*.cs) ../../build/common/Consts.cs ../../build/common/Locale.cs ../Mono.Options/Mono.Options/Options.cs ReferenceSources/TimeZoneInfoOptions.cs
+       mcs /debug+ /out:$@ /unsafe "/d:INSIDE_CORLIB;MONODROID;MOBILE;NET_4_5;NET_4_0;LIBC;SELF_TEST" $^
+
+android-pull-tzdb:
+       mkdir -p android/tzdb/usr/share/zoneinfo
+       mkdir -p android/tzdb/misc/zoneinfo/zoneinfo
+       android_root=`adb shell echo '$$ANDROID_ROOT' | tr -d "\r"` ; \
+       android_data=`adb shell echo '$$ANDROID_DATA' | tr -d "\r"` ; \
+       adb $(ADB_TARGET) pull $$android_root/usr/share/zoneinfo    android/tzdb/usr/share/zoneinfo ; \
+       adb $(ADB_TARGET) pull $$android_data/misc/zoneinfo/tzdata  android/tzdb/misc/zoneinfo
+
+android-dump-tzdata: tzi.exe android-pull-tzdb
+       __XA_OVERRIDE_TIMEZONE_ID__=America/New_York ANDROID_ROOT="`pwd`/android/tzdb" ANDROID_DATA="`pwd`/android/tzdb" mono --debug tzi.exe -o android/tzdata
index d0584a2e41d6fc5866998fbea5a63da0493c5ea6..37ded82917ed3537be14a07ae93dba29d5df30ec 100644 (file)
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+using System.Runtime.InteropServices;
+using System.Runtime.CompilerServices;
+
 namespace System.Globalization
 {
-       class CalendarData
+       [StructLayout (LayoutKind.Sequential)]
+       partial class CalendarData
        {
-               internal int iCurrentEra;
-
-               private CalendarData (int calendarId)
-               {
-                       // Japanese calendar is the only calendar with > 1 era. Its current era value
-                       // is total eras count in erras array
-                       if (calendarId == Calendar.CAL_JAPAN) {
-                               iCurrentEra = 4;
-                       } else {
-                               iCurrentEra = 1;
-                       }
-               }
-
                public static int nativeGetTwoDigitYearMax (int calID)
                {
                        // -1 mean OS does not override default BCL max year
                        return -1;
                }
 
-               internal static CalendarData GetCalendarData (int calendarId)
+               static bool nativeGetCalendarData (CalendarData data, string localeName, int calendarId)
                {
-                       // calendarID is any of CAL_ constants from calendar.cs
-                       return new CalendarData (calendarId);
+                       // TODO: Convert calendar-id to mono runtime calendar-id when it's used
+                       return data.fill_calendar_data (localeName.ToLowerInvariant (), calendarId);
                }
+
+               [MethodImplAttribute (MethodImplOptions.InternalCall)]
+               extern bool fill_calendar_data (string localeName, int datetimeIndex);
        }
 }
\ No newline at end of file
diff --git a/mcs/class/corlib/ReferenceSources/CompatibilitySwitches.cs b/mcs/class/corlib/ReferenceSources/CompatibilitySwitches.cs
new file mode 100644 (file)
index 0000000..e21e6d0
--- /dev/null
@@ -0,0 +1,35 @@
+//
+// CompatibilitySwitches.cs
+//
+// Authors:
+//     Marek Safar  <marek.safar@gmail.com>
+//
+// Copyright (C) 2015 Xamarin Inc (http://www.xamarin.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+namespace System
+{
+       static class CompatibilitySwitches
+       {
+               public const bool IsAppEarlierThanSilverlight4 = false;
+       }
+}
\ No newline at end of file
diff --git a/mcs/class/corlib/ReferenceSources/CultureData.cs b/mcs/class/corlib/ReferenceSources/CultureData.cs
new file mode 100644 (file)
index 0000000..4494697
--- /dev/null
@@ -0,0 +1,514 @@
+//
+// CultureData.cs
+//
+// Authors:
+//     Marek Safar  <marek.safar@gmail.com>
+//
+// Copyright (C) 2015 Xamarin Inc (http://www.xamarin.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Diagnostics.Contracts;
+using System.Text;
+using System.Threading;
+using System.Runtime.InteropServices;
+using System.Runtime.CompilerServices;
+
+namespace System.Globalization
+{
+       [StructLayout (LayoutKind.Sequential)]
+       class CultureData
+       {
+#region Sync with object-internals.h
+               // Time
+               private String sAM1159; // (user can override) AM designator
+               private String sPM2359; // (user can override) PM designator
+               private String sTimeSeparator;
+               private volatile String[] saLongTimes; // (user can override) time format
+               private volatile String[] saShortTimes; // short time format
+
+               // Calendar specific data
+               private int iFirstDayOfWeek; // (user can override) first day of week (gregorian really)
+               private int iFirstWeekOfYear; // (user can override) first week of year (gregorian really)
+#endregion             
+        private volatile int[] waCalendars; // all available calendar type(s).  The first one is the default calendar
+
+        // Store for specific data about each calendar
+        private CalendarData[] calendars; // Store for specific calendar data
+
+               // Language
+               private String sISO639Language; // ISO 639 Language Name
+
+               readonly string sRealName;
+
+               bool bUseOverrides;
+
+               // TODO: should query runtime with culture name for a list of culture's calendars
+               int calendarId;
+
+               private CultureData (string name)
+               {
+                       this.sRealName = name;
+               }
+
+               static CultureData s_Invariant;
+
+               public static CultureData Invariant {
+                       get {
+                               if (s_Invariant == null) {
+                                       var invariant = new CultureData ("");
+
+                                       // Language
+                                       invariant.sISO639Language = "iv";                   // ISO 639 Language Name
+
+                                       // Time
+                                       invariant.sAM1159 = "AM";                   // AM designator
+                                       invariant.sPM2359 = "PM";                   // PM designator
+                                       invariant.sTimeSeparator = ":";
+                                       invariant.saLongTimes = new String[] { "HH:mm:ss" };                             // time format
+                                       invariant.saShortTimes = new String[] { "HH:mm", "hh:mm tt", "H:mm", "h:mm tt" }; // short time format
+
+                                       // Calendar specific data
+                                       invariant.iFirstDayOfWeek = 0;                      // first day of week
+                                       invariant.iFirstWeekOfYear = 0;                      // first week of year
+                                       invariant.waCalendars = new int[] { (int)CalendarId.GREGORIAN };       // all available calendar type(s).  The first one is the default calendar
+
+                                       // Store for specific data about each calendar
+                               invariant.calendars = new CalendarData[CalendarData.MAX_CALENDARS];
+                               invariant.calendars[0] = CalendarData.Invariant;
+                                       
+                                       Interlocked.CompareExchange (ref s_Invariant, invariant, null);
+                               }
+
+                               return s_Invariant;
+                       }
+               }
+
+               public static CultureData GetCultureData (string cultureName, bool useUserOverride)
+               {
+                       try {
+                               var ci = new CultureInfo (cultureName, useUserOverride);
+                               return ci.m_cultureData;
+                       } catch {
+                               return null;
+                       }
+               }
+
+               public static CultureData GetCultureData (string cultureName, bool useUserOverride, int datetimeIndex, int calendarId, string iso2lang)
+               {
+                       if (string.IsNullOrEmpty (cultureName))
+                               return Invariant;
+
+                       var cd = new CultureData (cultureName);
+                       cd.fill_culture_data (datetimeIndex);
+                       cd.bUseOverrides = useUserOverride;
+                       cd.calendarId = calendarId;
+                       cd.sISO639Language = iso2lang;
+                       return cd;
+               }
+
+               [MethodImplAttribute (MethodImplOptions.InternalCall)]
+               extern void fill_culture_data (int datetimeIndex);
+
+               public CalendarData GetCalendar (int calendarId)
+               {
+            // arrays are 0 based, calendarIds are 1 based
+                       int calendarIndex = calendarId - 1;
+
+                       // Have to have calendars
+                       if (calendars == null)
+                       {
+                               calendars = new CalendarData[CalendarData.MAX_CALENDARS];
+                       }
+
+                       var calendarData = calendars[calendarIndex];
+                       if (calendarData == null) {
+                               calendarData = new CalendarData (sRealName, calendarId, bUseOverrides);
+                               calendars [calendarIndex] = calendarData;
+                       }
+
+                       return calendarData;
+               }
+
+               internal String[] LongTimes {
+                       get {
+                               return saLongTimes;
+                       }
+               }
+
+               internal String[] ShortTimes {
+                       get {
+                               return saShortTimes;
+                       }
+               }
+
+               internal String SISO639LANGNAME {
+                       get {
+                               return sISO639Language;
+                       }
+               }
+
+               internal int IFIRSTDAYOFWEEK {
+                       get {
+                               return iFirstDayOfWeek;
+                       }
+               }
+
+               internal int IFIRSTWEEKOFYEAR {
+                       get {
+                               return iFirstWeekOfYear;
+                       }
+               }
+
+               internal String SAM1159 {
+                       get {
+                               return sAM1159;
+                       }
+               }
+
+               internal String SPM2359 {
+                       get {
+                               return sPM2359;
+                       }
+               }
+
+               internal String TimeSeparator {
+                       get {
+                               return sTimeSeparator;
+                       }
+               }
+
+               internal int[] CalendarIds {
+                       get {
+                               if (this.waCalendars == null) {
+                                       // Need this specialization because GetJapaneseCalendarDTFI/GetTaiwanCalendarDTFI depend on
+                                       // optional calendars
+                                       switch (sISO639Language) {
+                                       case "ja":
+                                               waCalendars = new int[] { calendarId, Calendar.CAL_JAPAN };
+                                               break;
+                                       case "zh":
+                                               waCalendars = new int[] { calendarId, Calendar.CAL_TAIWAN };
+                                               break;
+                                       default:
+                                               waCalendars = new int [] { calendarId };
+                                               break;
+                                       }
+                               }
+
+                               return waCalendars;
+                       }
+               }
+
+        internal String CultureName {
+            get {
+                return sRealName;
+            }
+        }
+
+        internal String SCOMPAREINFO {
+               get {
+                       return "";
+               }
+       }
+
+#region from reference sources
+
+        // Are overrides enabled?
+        internal bool UseUserOverride
+        {
+            get
+            {
+                return this.bUseOverrides;
+            }
+        }
+
+               // Native calendar names.  index of optional calendar - 1, empty if no optional calendar at that number
+               internal String CalendarName(int calendarId)
+               {
+                       // Get the calendar
+                       return GetCalendar(calendarId).sNativeName;
+               }
+
+               // All of our era names
+               internal String[] EraNames(int calendarId)
+               {
+                       Contract.Assert(calendarId > 0, "[CultureData.saEraNames] Expected Calendar.ID > 0");
+
+                       return this.GetCalendar(calendarId).saEraNames;
+               }
+
+               internal String[] AbbrevEraNames(int calendarId)
+               {
+                       Contract.Assert(calendarId > 0, "[CultureData.saAbbrevEraNames] Expected Calendar.ID > 0");
+
+                       return this.GetCalendar(calendarId).saAbbrevEraNames;
+               }
+
+               internal String[] AbbreviatedEnglishEraNames(int calendarId)
+               {
+                       Contract.Assert(calendarId > 0, "[CultureData.saAbbrevEraNames] Expected Calendar.ID > 0");
+
+                       return this.GetCalendar(calendarId).saAbbrevEnglishEraNames;
+               }
+
+               // (user can override default only) short date format
+               internal String[] ShortDates(int calendarId)
+               {
+                       return GetCalendar(calendarId).saShortDates;
+               }
+
+               // (user can override default only) long date format
+               internal String[] LongDates(int calendarId)
+               {
+                       return GetCalendar(calendarId).saLongDates;
+               }
+
+               // (user can override) date year/month format.
+               internal String[] YearMonths(int calendarId)
+               {
+                       return GetCalendar(calendarId).saYearMonths;
+               }
+
+               // day names
+               internal string[] DayNames(int calendarId)
+               {
+                       return GetCalendar(calendarId).saDayNames;
+               }
+
+               // abbreviated day names
+               internal string[] AbbreviatedDayNames(int calendarId)
+               {
+                       // Get abbreviated day names for this calendar from the OS if necessary
+                       return GetCalendar(calendarId).saAbbrevDayNames;
+               }
+
+               // The super short day names
+               internal string[] SuperShortDayNames(int calendarId)
+               {
+                       return GetCalendar(calendarId).saSuperShortDayNames;
+               }
+
+               // month names
+               internal string[] MonthNames(int calendarId)
+               {
+                       return GetCalendar(calendarId).saMonthNames;
+               }
+
+               // Genitive month names
+               internal string[] GenitiveMonthNames(int calendarId)
+               {
+                       return GetCalendar(calendarId).saMonthGenitiveNames;
+               }
+
+               // month names
+               internal string[] AbbreviatedMonthNames(int calendarId)
+               {
+                       return GetCalendar(calendarId).saAbbrevMonthNames;
+               }
+
+               // Genitive month names
+               internal string[] AbbreviatedGenitiveMonthNames(int calendarId)
+               {
+                       return GetCalendar(calendarId).saAbbrevMonthGenitiveNames;
+               }
+
+               // Leap year month names
+               // Note: This only applies to Hebrew, and it basically adds a "1" to the 6th month name
+               // the non-leap names skip the 7th name in the normal month name array
+               internal string[] LeapYearMonthNames(int calendarId)
+               {
+                       return GetCalendar(calendarId).saLeapYearMonthNames;
+               }
+
+               // month/day format (single string, no override)
+               internal String MonthDay(int calendarId)
+               {
+                       return GetCalendar(calendarId).sMonthDay;
+               }
+
+               // Date separator (derived from short date format)
+               internal String DateSeparator(int calendarId)
+               {
+                       return GetDateSeparator(ShortDates(calendarId)[0]);
+               }
+
+               // NOTE: this method is used through reflection by System.Globalization.CultureXmlParser.ReadDateElement()
+               // and breaking changes here will not show up at build time, only at run time.
+               static private String GetDateSeparator(String format)
+               {
+                       // Date format separator (ie: / in 9/1/03)
+                       //
+                       // We calculate this from the provided short date
+                       //
+
+                       //
+                       //  Find the date separator so that we can pretend we know SDATE.
+                       //
+                       return GetSeparator(format, "dyM");
+               }
+
+               private static string GetSeparator(string format, string timeParts)
+               {
+                       int index = IndexOfTimePart(format, 0, timeParts);
+
+                       if (index != -1)
+                       {
+                               // Found a time part, find out when it changes
+                               char cTimePart = format[index];
+
+                               do
+                               {
+                                       index++;
+                               } while (index < format.Length && format[index] == cTimePart);
+
+                               int separatorStart = index;
+
+                               // Now we need to find the end of the separator
+                               if (separatorStart < format.Length)
+                               {
+                                       int separatorEnd = IndexOfTimePart(format, separatorStart, timeParts);
+                                       if (separatorEnd != -1)
+                                       {
+                                               // From [separatorStart, count) is our string, except we need to unescape
+                                               return UnescapeNlsString(format, separatorStart, separatorEnd - 1);
+                                       }
+                               }
+                       }
+
+                       return String.Empty;
+               }
+
+               private static int IndexOfTimePart(string format, int startIndex, string timeParts)
+               {
+                       Contract.Assert(startIndex >= 0, "startIndex cannot be negative");
+                       Contract.Assert(timeParts.IndexOfAny(new char[] { '\'', '\\' }) == -1, "timeParts cannot include quote characters");
+                       bool inQuote = false;
+                       for (int i = startIndex; i < format.Length; ++i)
+                       {
+                               // See if we have a time Part
+                               if (!inQuote && timeParts.IndexOf(format[i]) != -1)
+                               {
+                                       return i;
+                               }
+                               switch (format[i])
+                               {
+                                       case '\\':
+                                               if (i + 1 < format.Length)
+                                               {
+                                                       ++i;
+                                                       switch (format[i])
+                                                       {
+                                                               case '\'':
+                                                               case '\\':
+                                                                       break;
+                                                               default:
+                                                                       --i; //backup since we will move over this next
+                                                                       break;
+                                                       }
+                                               }
+                                               break;
+                                       case '\'':
+                                               inQuote = !inQuote;
+                                               break;
+                               }
+                       }
+
+                       return -1;
+               }
+
+               ////////////////////////////////////////////////////////////////////////////
+               //
+               // Unescape a NLS style quote string
+               //
+               // This removes single quotes:
+               //      'fred' -> fred
+               //      'fred -> fred
+               //      fred' -> fred
+               //      fred's -> freds
+               //
+               // This removes the first \ of escaped characters:
+               //      fred\'s -> fred's
+               //      a\\b -> a\b
+               //      a\b -> ab
+               //
+               // We don't build the stringbuilder unless we find a ' or a \.  If we find a ' or a \, we
+               // always build a stringbuilder because we need to remove the ' or \.
+               //
+               ////////////////////////////////////////////////////////////////////////////
+               static private String UnescapeNlsString(String str, int start, int end)
+               {
+                       Contract.Requires(str != null);
+                       Contract.Requires(start >= 0);
+                       Contract.Requires(end >= 0);
+                       StringBuilder result = null;
+
+                       for (int i = start; i < str.Length && i <= end; i++)
+                       {
+                               switch (str[i])
+                               {
+                                       case '\'':
+                                               if (result == null)
+                                               {
+                                                       result = new StringBuilder(str, start, i - start, str.Length);
+                                               }
+                                               break;
+                                       case '\\':
+                                               if (result == null)
+                                               {
+                                                       result = new StringBuilder(str, start, i - start, str.Length);
+                                               }
+                                               ++i;
+                                               if (i < str.Length)
+                                               {
+                                                       result.Append(str[i]);
+                                               }
+                                               break;
+                                       default:
+                                               if (result != null)
+                                               {
+                                                       result.Append(str[i]);
+                                               }
+                                               break;
+                               }
+                       }
+
+                       if (result == null)
+                               return (str.Substring(start, end - start + 1));
+
+                       return (result.ToString());
+               }
+
+#endregion
+
+
+               static internal String[] ReescapeWin32Strings(String[] array)
+               {
+                       return array;
+               }
+
+               static internal String ReescapeWin32String(String str)
+               {
+                       return str;
+               }
+       }
+}
diff --git a/mcs/class/corlib/ReferenceSources/Empty.cs b/mcs/class/corlib/ReferenceSources/Empty.cs
deleted file mode 100644 (file)
index ceff8d5..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-namespace System
-{
-       using System;
-       using System.Runtime.Remoting;
-       using System.Runtime.Serialization;
-
-       [Serializable]
-       internal sealed class Empty
-       {
-               private Empty() {
-               }
-       }
-}
\ No newline at end of file
diff --git a/mcs/class/corlib/ReferenceSources/EncodingDataItem.cs b/mcs/class/corlib/ReferenceSources/EncodingDataItem.cs
new file mode 100644 (file)
index 0000000..448bbcd
--- /dev/null
@@ -0,0 +1,123 @@
+// ==++==
+// 
+//   Copyright (c) Microsoft Corporation.  All rights reserved.
+// 
+// ==--==
+namespace System.Globalization {
+    using System.Text;
+    using System.Runtime.Remoting;
+    using System;
+    using System.Security;
+
+    //
+    // Data item for EncodingTable.  Along with EncodingTable, they are used by 
+    // System.Text.Encoding.
+    // 
+    // This class stores a pointer to the internal data and the index into that data
+    // where our required information is found.  We load the code page, flags and uiFamilyCodePage
+    // immediately because they don't require creating an object.  Creating any of the string
+    // names is delayed until somebody actually asks for them and the names are then cached.
+    
+    [Serializable]
+    internal class CodePageDataItem
+    {
+        internal int    m_dataIndex;
+        internal int    m_uiFamilyCodePage;
+        internal String m_webName;
+        internal String m_headerName;
+        internal String m_bodyName;
+        internal uint   m_flags;
+    
+        [SecurityCritical]
+        unsafe internal CodePageDataItem(int dataIndex) {
+            m_dataIndex = dataIndex;
+            m_uiFamilyCodePage = EncodingTable.codePageDataPtr[dataIndex].uiFamilyCodePage;
+            m_flags = EncodingTable.codePageDataPtr[dataIndex].flags;
+        }
+
+               static readonly char [] sep = {'|'};
+
+        [System.Security.SecurityCritical]
+        unsafe internal static String CreateString(string pStrings, uint index)
+        {
+            if (pStrings[0] == '|') // |str1|str2|str3
+            {
+                               return pStrings.Split (sep, StringSplitOptions.RemoveEmptyEntries) [index];
+                               /*
+                int start = 1;
+                
+                for (int i = 1; true; i ++)
+                {
+                    sbyte ch = pStrings[i];
+
+                    if ((ch == '|') || (ch == 0))
+                    {
+                        if (index == 0)
+                        {
+                            return new String(pStrings, start, i - start);
+                        }
+
+                        index --;
+                        start = i + 1;
+
+                        if (ch == 0)
+                        {
+                            break;
+                        }
+                    }
+                }
+
+                throw new ArgumentException("pStrings");
+                */
+            }
+            else
+            {
+                               return pStrings;
+                //return new String(pStrings);
+            }
+        }
+
+        unsafe public String WebName {
+            [System.Security.SecuritySafeCritical]  // auto-generated
+            get {
+                if (m_webName==null) {
+                    m_webName = CreateString(EncodingTable.codePageDataPtr[m_dataIndex].Names, 0);
+                }
+                return m_webName;
+            }
+        }
+    
+        public virtual int UIFamilyCodePage {
+            get {
+                return m_uiFamilyCodePage;
+            }
+        }
+    
+        unsafe public String HeaderName {
+            [System.Security.SecuritySafeCritical]  // auto-generated
+            get {
+                if (m_headerName==null) {
+                    m_headerName = CreateString(EncodingTable.codePageDataPtr[m_dataIndex].Names, 1);
+                }
+                return m_headerName;
+            }
+        }
+    
+        unsafe public String BodyName {
+            [System.Security.SecuritySafeCritical]  // auto-generated
+            get {
+                if (m_bodyName==null) {
+                    m_bodyName = CreateString(EncodingTable.codePageDataPtr[m_dataIndex].Names, 2);
+                }
+                return m_bodyName;
+            }
+        }    
+
+        unsafe public uint Flags {
+            get {
+                return (m_flags);
+            }
+        }
+    }
+}
+
diff --git a/mcs/class/corlib/ReferenceSources/EncodingTable.cs b/mcs/class/corlib/ReferenceSources/EncodingTable.cs
new file mode 100644 (file)
index 0000000..4f768cf
--- /dev/null
@@ -0,0 +1,957 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+namespace System.Globalization
+{
+    using System;
+    using System.Text;
+    using System.Collections;
+    using System.Collections.Generic;
+    using System.Runtime.CompilerServices;
+    using System.Runtime.InteropServices;
+    using System.Runtime.Versioning;
+    using System.Security;
+    using System.Threading;
+    using System.Diagnostics.Contracts;
+
+
+       internal static partial class EncodingTable
+       {
+        static int GetNumEncodingItems ()
+        {
+                       return encodingDataPtr.Length;
+               }
+               
+#region "from coreclr/src/classlibnative/nls/encodingdata.cpp"
+// as of d921298
+
+       static InternalEncodingDataItem ENC (string name, ushort cp) { return new InternalEncodingDataItem () { webName = name, codePage = cp }; }
+       
+        internal static InternalEncodingDataItem [] encodingDataPtr = new InternalEncodingDataItem [] {
+#if FEATURE_CORECLR
+    // encoding name, codepage.
+    ENC ("ANSI_X3.4-1968", 20127 ),
+    ENC ("ANSI_X3.4-1986", 20127 ),
+    ENC ("ascii", 20127 ),
+    ENC ("cp367", 20127 ),
+    ENC ("cp819", 28591 ),
+    ENC ("csASCII", 20127 ),
+    ENC ("csISOLatin1", 28591 ),
+    ENC ("csUnicode11UTF7", 65000 ),
+    ENC ("IBM367", 20127 ),
+    ENC ("ibm819", 28591 ),
+    ENC ("ISO-10646-UCS-2", 1200 ),
+    ENC ("iso-8859-1", 28591 ),
+    ENC ("iso-ir-100", 28591 ),
+    ENC ("iso-ir-6", 20127 ),
+    ENC ("ISO646-US", 20127 ),
+    ENC ("iso8859-1", 28591 ),
+    ENC ("ISO_646.irv:1991", 20127 ),
+    ENC ("iso_8859-1", 28591 ),
+    ENC ("iso_8859-1:1987", 28591 ),
+    ENC ("l1", 28591 ),
+    ENC ("latin1", 28591 ),
+    ENC ("ucs-2", 1200 ),
+    ENC ("unicode", 1200), 
+    ENC ("unicode-1-1-utf-7", 65000 ),
+    ENC ("unicode-1-1-utf-8", 65001 ),
+    ENC ("unicode-2-0-utf-7", 65000 ),
+    ENC ("unicode-2-0-utf-8", 65001 ),
+    // People get confused about the FFFE here.  We can't change this because it'd break existing apps.
+    // This has been this way for a long time, including in Mlang.
+    ENC ("unicodeFFFE", 1201),             // Big Endian, BOM seems backwards, think of the BOM in little endian order.
+    ENC ("us", 20127 ),
+    ENC ("us-ascii", 20127 ),
+    ENC ("utf-16", 1200 ),
+    ENC ("UTF-16BE", 1201), 
+    ENC ("UTF-16LE", 1200),        
+    ENC ("utf-32", 12000 ),
+    ENC ("UTF-32BE", 12001 ),
+    ENC ("UTF-32LE", 12000 ),
+    ENC ("utf-7", 65000 ),
+    ENC ("utf-8", 65001 ),
+    ENC ("x-unicode-1-1-utf-7", 65000 ),
+    ENC ("x-unicode-1-1-utf-8", 65001 ),
+    ENC ("x-unicode-2-0-utf-7", 65000 ),
+    ENC ("x-unicode-2-0-utf-8", 65001 ),
+#else
+ // Total Items: 455
+// encoding name, codepage.
+ENC ("437", 437), 
+ENC ("ANSI_X3.4-1968", 20127), 
+ENC ("ANSI_X3.4-1986", 20127), 
+// ENC (L"_autodetect", 50932), 
+// ENC (L"_autodetect_all", 50001), 
+// ENC (L"_autodetect_kr", 50949), 
+ENC ("arabic", 28596), 
+ENC ("ascii", 20127), 
+ENC ("ASMO-708", 708), 
+ENC ("Big5", 950), 
+ENC ("Big5-HKSCS", 950), 
+ENC ("CCSID00858", 858), 
+ENC ("CCSID00924", 20924), 
+ENC ("CCSID01140", 1140), 
+ENC ("CCSID01141", 1141), 
+ENC ("CCSID01142", 1142), 
+ENC ("CCSID01143", 1143), 
+ENC ("CCSID01144", 1144), 
+ENC ("CCSID01145", 1145), 
+ENC ("CCSID01146", 1146), 
+ENC ("CCSID01147", 1147), 
+ENC ("CCSID01148", 1148), 
+ENC ("CCSID01149", 1149), 
+ENC ("chinese", 936), 
+ENC ("cn-big5", 950), 
+ENC ("CN-GB", 936), 
+ENC ("CP00858", 858), 
+ENC ("CP00924", 20924), 
+ENC ("CP01140", 1140), 
+ENC ("CP01141", 1141), 
+ENC ("CP01142", 1142), 
+ENC ("CP01143", 1143), 
+ENC ("CP01144", 1144), 
+ENC ("CP01145", 1145), 
+ENC ("CP01146", 1146), 
+ENC ("CP01147", 1147), 
+ENC ("CP01148", 1148), 
+ENC ("CP01149", 1149), 
+ENC ("cp037", 37), 
+ENC ("cp1025", 21025), 
+ENC ("CP1026", 1026), 
+ENC ("cp1256", 1256), 
+ENC ("CP273", 20273), 
+ENC ("CP278", 20278), 
+ENC ("CP280", 20280), 
+ENC ("CP284", 20284), 
+ENC ("CP285", 20285), 
+ENC ("cp290", 20290), 
+ENC ("cp297", 20297), 
+ENC ("cp367", 20127), 
+ENC ("cp420", 20420), 
+ENC ("cp423", 20423), 
+ENC ("cp424", 20424), 
+ENC ("cp437", 437), 
+ENC ("CP500", 500), 
+ENC ("cp50227", 50227), 
+    //ENC (L"cp50229", 50229), 
+ENC ("cp819", 28591), 
+ENC ("cp850", 850), 
+ENC ("cp852", 852), 
+ENC ("cp855", 855), 
+ENC ("cp857", 857), 
+ENC ("cp858", 858), 
+ENC ("cp860", 860), 
+ENC ("cp861", 861), 
+ENC ("cp862", 862), 
+ENC ("cp863", 863), 
+ENC ("cp864", 864), 
+ENC ("cp865", 865), 
+ENC ("cp866", 866), 
+ENC ("cp869", 869), 
+ENC ("CP870", 870), 
+ENC ("CP871", 20871), 
+ENC ("cp875", 875), 
+ENC ("cp880", 20880), 
+ENC ("CP905", 20905), 
+//ENC (L"cp930", 50930), 
+//ENC (L"cp933", 50933), 
+//ENC (L"cp935", 50935), 
+//ENC (L"cp937", 50937), 
+//ENC (L"cp939", 50939), 
+ENC ("csASCII", 20127), 
+ENC ("csbig5", 950), 
+ENC ("csEUCKR", 51949), 
+ENC ("csEUCPkdFmtJapanese", 51932), 
+ENC ("csGB2312", 936), 
+ENC ("csGB231280", 936), 
+ENC ("csIBM037", 37), 
+ENC ("csIBM1026", 1026), 
+ENC ("csIBM273", 20273), 
+ENC ("csIBM277", 20277), 
+ENC ("csIBM278", 20278), 
+ENC ("csIBM280", 20280), 
+ENC ("csIBM284", 20284), 
+ENC ("csIBM285", 20285), 
+ENC ("csIBM290", 20290), 
+ENC ("csIBM297", 20297), 
+ENC ("csIBM420", 20420), 
+ENC ("csIBM423", 20423), 
+ENC ("csIBM424", 20424), 
+ENC ("csIBM500", 500), 
+ENC ("csIBM870", 870), 
+ENC ("csIBM871", 20871), 
+ENC ("csIBM880", 20880), 
+ENC ("csIBM905", 20905), 
+ENC ("csIBMThai", 20838), 
+ENC ("csISO2022JP", 50221), 
+ENC ("csISO2022KR", 50225), 
+ENC ("csISO58GB231280", 936), 
+ENC ("csISOLatin1", 28591), 
+ENC ("csISOLatin2", 28592), 
+ENC ("csISOLatin3", 28593), 
+ENC ("csISOLatin4", 28594), 
+ENC ("csISOLatin5", 28599), 
+ENC ("csISOLatin9", 28605), 
+ENC ("csISOLatinArabic", 28596), 
+ENC ("csISOLatinCyrillic", 28595), 
+ENC ("csISOLatinGreek", 28597), 
+ENC ("csISOLatinHebrew", 28598), 
+ENC ("csKOI8R", 20866), 
+ENC ("csKSC56011987", 949), 
+ENC ("csPC8CodePage437", 437), 
+ENC ("csShiftJIS", 932), 
+ENC ("csUnicode11UTF7", 65000), 
+ENC ("csWindows31J", 932), 
+ENC ("cyrillic", 28595), 
+ENC ("DIN_66003", 20106), 
+ENC ("DOS-720", 720), 
+ENC ("DOS-862", 862), 
+ENC ("DOS-874", 874), 
+ENC ("ebcdic-cp-ar1", 20420), 
+ENC ("ebcdic-cp-be", 500), 
+ENC ("ebcdic-cp-ca", 37), 
+ENC ("ebcdic-cp-ch", 500), 
+ENC ("EBCDIC-CP-DK", 20277), 
+ENC ("ebcdic-cp-es", 20284), 
+ENC ("ebcdic-cp-fi", 20278), 
+ENC ("ebcdic-cp-fr", 20297), 
+ENC ("ebcdic-cp-gb", 20285), 
+ENC ("ebcdic-cp-gr", 20423), 
+ENC ("ebcdic-cp-he", 20424), 
+ENC ("ebcdic-cp-is", 20871), 
+ENC ("ebcdic-cp-it", 20280), 
+ENC ("ebcdic-cp-nl", 37), 
+ENC ("EBCDIC-CP-NO", 20277), 
+ENC ("ebcdic-cp-roece", 870), 
+ENC ("ebcdic-cp-se", 20278), 
+ENC ("ebcdic-cp-tr", 20905), 
+ENC ("ebcdic-cp-us", 37), 
+ENC ("ebcdic-cp-wt", 37), 
+ENC ("ebcdic-cp-yu", 870), 
+ENC ("EBCDIC-Cyrillic", 20880), 
+ENC ("ebcdic-de-273+euro", 1141), 
+ENC ("ebcdic-dk-277+euro", 1142), 
+ENC ("ebcdic-es-284+euro", 1145), 
+ENC ("ebcdic-fi-278+euro", 1143), 
+ENC ("ebcdic-fr-297+euro", 1147), 
+ENC ("ebcdic-gb-285+euro", 1146), 
+ENC ("ebcdic-international-500+euro", 1148), 
+ENC ("ebcdic-is-871+euro", 1149), 
+ENC ("ebcdic-it-280+euro", 1144), 
+ENC ("EBCDIC-JP-kana", 20290), 
+ENC ("ebcdic-Latin9--euro", 20924), 
+ENC ("ebcdic-no-277+euro", 1142), 
+ENC ("ebcdic-se-278+euro", 1143), 
+ENC ("ebcdic-us-37+euro", 1140), 
+ENC ("ECMA-114", 28596), 
+ENC ("ECMA-118", 28597), 
+ENC ("ELOT_928", 28597), 
+ENC ("euc-cn", 51936), 
+ENC ("euc-jp", 51932), 
+ENC ("euc-kr", 51949), 
+ENC ("Extended_UNIX_Code_Packed_Format_for_Japanese", 51932), 
+ENC ("GB18030", 54936), 
+ENC ("GB2312", 936), 
+ENC ("GB2312-80", 936), 
+ENC ("GB231280", 936), 
+ENC ("GBK", 936), 
+ENC ("GB_2312-80", 936), 
+ENC ("German", 20106), 
+ENC ("greek", 28597), 
+ENC ("greek8", 28597), 
+ENC ("hebrew", 28598), 
+ENC ("hz-gb-2312", 52936), 
+ENC ("IBM-Thai", 20838), 
+ENC ("IBM00858", 858), 
+ENC ("IBM00924", 20924), 
+ENC ("IBM01047", 1047), 
+ENC ("IBM01140", 1140), 
+ENC ("IBM01141", 1141), 
+ENC ("IBM01142", 1142), 
+ENC ("IBM01143", 1143), 
+ENC ("IBM01144", 1144), 
+ENC ("IBM01145", 1145), 
+ENC ("IBM01146", 1146), 
+ENC ("IBM01147", 1147), 
+ENC ("IBM01148", 1148), 
+ENC ("IBM01149", 1149), 
+ENC ("IBM037", 37), 
+ENC ("IBM1026", 1026), 
+ENC ("IBM273", 20273), 
+ENC ("IBM277", 20277), 
+ENC ("IBM278", 20278), 
+ENC ("IBM280", 20280), 
+ENC ("IBM284", 20284), 
+ENC ("IBM285", 20285), 
+ENC ("IBM290", 20290), 
+ENC ("IBM297", 20297), 
+ENC ("IBM367", 20127), 
+ENC ("IBM420", 20420), 
+ENC ("IBM423", 20423), 
+ENC ("IBM424", 20424), 
+ENC ("IBM437", 437), 
+ENC ("IBM500", 500), 
+ENC ("ibm737", 737), 
+ENC ("ibm775", 775), 
+ENC ("ibm819", 28591), 
+ENC ("IBM850", 850), 
+ENC ("IBM852", 852), 
+ENC ("IBM855", 855), 
+ENC ("IBM857", 857), 
+ENC ("IBM860", 860), 
+ENC ("IBM861", 861), 
+ENC ("IBM862", 862), 
+ENC ("IBM863", 863), 
+ENC ("IBM864", 864), 
+ENC ("IBM865", 865), 
+ENC ("IBM866", 866), 
+ENC ("IBM869", 869), 
+ENC ("IBM870", 870), 
+ENC ("IBM871", 20871), 
+ENC ("IBM880", 20880), 
+ENC ("IBM905", 20905), 
+ENC ("irv", 20105), 
+ENC ("ISO-10646-UCS-2", 1200), 
+ENC ("iso-2022-jp", 50220), 
+ENC ("iso-2022-jpeuc", 51932), 
+ENC ("iso-2022-kr", 50225), 
+ENC ("iso-2022-kr-7", 50225), 
+ENC ("iso-2022-kr-7bit", 50225), 
+ENC ("iso-2022-kr-8", 51949), 
+ENC ("iso-2022-kr-8bit", 51949), 
+ENC ("iso-8859-1", 28591), 
+ENC ("iso-8859-11", 874), 
+ENC ("iso-8859-13", 28603), 
+ENC ("iso-8859-15", 28605), 
+ENC ("iso-8859-2", 28592), 
+ENC ("iso-8859-3", 28593), 
+ENC ("iso-8859-4", 28594), 
+ENC ("iso-8859-5", 28595), 
+ENC ("iso-8859-6", 28596), 
+ENC ("iso-8859-7", 28597), 
+ENC ("iso-8859-8", 28598), 
+ENC ("ISO-8859-8 Visual", 28598), 
+ENC ("iso-8859-8-i", 38598), 
+ENC ("iso-8859-9", 28599), 
+ENC ("iso-ir-100", 28591), 
+ENC ("iso-ir-101", 28592), 
+ENC ("iso-ir-109", 28593), 
+ENC ("iso-ir-110", 28594), 
+ENC ("iso-ir-126", 28597), 
+ENC ("iso-ir-127", 28596), 
+ENC ("iso-ir-138", 28598), 
+ENC ("iso-ir-144", 28595), 
+ENC ("iso-ir-148", 28599), 
+ENC ("iso-ir-149", 949), 
+ENC ("iso-ir-58", 936), 
+ENC ("iso-ir-6", 20127), 
+ENC ("ISO646-US", 20127), 
+ENC ("iso8859-1", 28591), 
+ENC ("iso8859-2", 28592), 
+ENC ("ISO_646.irv:1991", 20127), 
+ENC ("iso_8859-1", 28591), 
+ENC ("ISO_8859-15", 28605), 
+ENC ("iso_8859-1:1987", 28591), 
+ENC ("iso_8859-2", 28592), 
+ENC ("iso_8859-2:1987", 28592), 
+ENC ("ISO_8859-3", 28593), 
+ENC ("ISO_8859-3:1988", 28593), 
+ENC ("ISO_8859-4", 28594), 
+ENC ("ISO_8859-4:1988", 28594), 
+ENC ("ISO_8859-5", 28595), 
+ENC ("ISO_8859-5:1988", 28595), 
+ENC ("ISO_8859-6", 28596), 
+ENC ("ISO_8859-6:1987", 28596), 
+ENC ("ISO_8859-7", 28597), 
+ENC ("ISO_8859-7:1987", 28597), 
+ENC ("ISO_8859-8", 28598), 
+ENC ("ISO_8859-8:1988", 28598), 
+ENC ("ISO_8859-9", 28599), 
+ENC ("ISO_8859-9:1989", 28599), 
+ENC ("Johab", 1361), 
+ENC ("koi", 20866), 
+ENC ("koi8", 20866), 
+ENC ("koi8-r", 20866), 
+ENC ("koi8-ru", 21866), 
+ENC ("koi8-u", 21866), 
+ENC ("koi8r", 20866), 
+ENC ("korean", 949), 
+ENC ("ks-c-5601", 949), 
+ENC ("ks-c5601", 949), 
+ENC ("KSC5601", 949), 
+ENC ("KSC_5601", 949), 
+ENC ("ks_c_5601", 949), 
+ENC ("ks_c_5601-1987", 949), 
+ENC ("ks_c_5601-1989", 949), 
+ENC ("ks_c_5601_1987", 949), 
+ENC ("l1", 28591), 
+ENC ("l2", 28592), 
+ENC ("l3", 28593), 
+ENC ("l4", 28594), 
+ENC ("l5", 28599), 
+ENC ("l9", 28605), 
+ENC ("latin1", 28591), 
+ENC ("latin2", 28592), 
+ENC ("latin3", 28593), 
+ENC ("latin4", 28594), 
+ENC ("latin5", 28599), 
+ENC ("latin9", 28605), 
+ENC ("logical", 28598), 
+ENC ("macintosh", 10000), 
+ENC ("ms_Kanji", 932), 
+ENC ("Norwegian", 20108), 
+ENC ("NS_4551-1", 20108), 
+ENC ("PC-Multilingual-850+euro", 858), 
+ENC ("SEN_850200_B", 20107), 
+ENC ("shift-jis", 932), 
+ENC ("shift_jis", 932), 
+ENC ("sjis", 932), 
+ENC ("Swedish", 20107), 
+ENC ("TIS-620", 874), 
+ENC ("ucs-2", 1200), 
+ENC ("unicode", 1200), 
+ENC ("unicode-1-1-utf-7", 65000), 
+ENC ("unicode-1-1-utf-8", 65001), 
+ENC ("unicode-2-0-utf-7", 65000), 
+ENC ("unicode-2-0-utf-8", 65001), 
+// People get confused about the FFFE here.  We can't change this because it'd break existing apps.
+// This has been this way for a long time, including in Mlang.
+ENC ("unicodeFFFE", 1201),             // Big Endian, BOM seems backwards, think of the BOM in little endian order.
+ENC ("us", 20127), 
+ENC ("us-ascii", 20127), 
+ENC ("utf-16", 1200), 
+ENC ("UTF-16BE", 1201), 
+ENC ("UTF-16LE", 1200),
+ENC ("utf-32", 12000),
+ENC ("UTF-32BE", 12001),
+ENC ("UTF-32LE", 12000),
+ENC ("utf-7", 65000), 
+ENC ("utf-8", 65001),
+ENC ("visual", 28598), 
+ENC ("windows-1250", 1250), 
+ENC ("windows-1251", 1251), 
+ENC ("windows-1252", 1252), 
+ENC ("windows-1253", 1253), 
+ENC ("Windows-1254", 1254), 
+ENC ("windows-1255", 1255), 
+ENC ("windows-1256", 1256), 
+ENC ("windows-1257", 1257), 
+ENC ("windows-1258", 1258), 
+ENC ("windows-874", 874), 
+ENC ("x-ansi", 1252), 
+ENC ("x-Chinese-CNS", 20000), 
+ENC ("x-Chinese-Eten", 20002), 
+ENC ("x-cp1250", 1250), 
+ENC ("x-cp1251", 1251), 
+ENC ("x-cp20001", 20001), 
+ENC ("x-cp20003", 20003), 
+ENC ("x-cp20004", 20004), 
+ENC ("x-cp20005", 20005), 
+ENC ("x-cp20261", 20261), 
+ENC ("x-cp20269", 20269), 
+ENC ("x-cp20936", 20936), 
+ENC ("x-cp20949", 20949),
+ENC ("x-cp50227", 50227), 
+//ENC (L"x-cp50229", 50229), 
+//ENC (L"X-EBCDIC-JapaneseAndUSCanada", 50931), 
+ENC ("X-EBCDIC-KoreanExtended", 20833), 
+ENC ("x-euc", 51932), 
+ENC ("x-euc-cn", 51936), 
+ENC ("x-euc-jp", 51932), 
+ENC ("x-Europa", 29001), 
+ENC ("x-IA5", 20105), 
+ENC ("x-IA5-German", 20106), 
+ENC ("x-IA5-Norwegian", 20108), 
+ENC ("x-IA5-Swedish", 20107), 
+ENC ("x-iscii-as", 57006), 
+ENC ("x-iscii-be", 57003), 
+ENC ("x-iscii-de", 57002), 
+ENC ("x-iscii-gu", 57010), 
+ENC ("x-iscii-ka", 57008), 
+ENC ("x-iscii-ma", 57009), 
+ENC ("x-iscii-or", 57007), 
+ENC ("x-iscii-pa", 57011), 
+ENC ("x-iscii-ta", 57004), 
+ENC ("x-iscii-te", 57005), 
+ENC ("x-mac-arabic", 10004), 
+ENC ("x-mac-ce", 10029), 
+ENC ("x-mac-chinesesimp", 10008), 
+ENC ("x-mac-chinesetrad", 10002), 
+ENC ("x-mac-croatian", 10082), 
+ENC ("x-mac-cyrillic", 10007), 
+ENC ("x-mac-greek", 10006), 
+ENC ("x-mac-hebrew", 10005), 
+ENC ("x-mac-icelandic", 10079), 
+ENC ("x-mac-japanese", 10001), 
+ENC ("x-mac-korean", 10003), 
+ENC ("x-mac-romanian", 10010), 
+ENC ("x-mac-thai", 10021), 
+ENC ("x-mac-turkish", 10081), 
+ENC ("x-mac-ukrainian", 10017), 
+ENC ("x-ms-cp932", 932),
+ENC ("x-sjis", 932), 
+ENC ("x-unicode-1-1-utf-7", 65000), 
+ENC ("x-unicode-1-1-utf-8", 65001), 
+ENC ("x-unicode-2-0-utf-7", 65000), 
+ENC ("x-unicode-2-0-utf-8", 65001), 
+ENC ("x-x-big5", 950), 
+
+#endif // FEATURE_CORECLR
+    
+               };
+
+// Working set optimization: 
+// 1. code page, family code page stored as unsigned short
+// 2. if web/header/body names are the same, only web name is stored; otherwise, we store "|webname|headername|bodyname"
+// 3. Move flags before names to fill gap on 64-bit platforms
+
+       static InternalCodePageDataItem MapCodePageDataItem (UInt16 cp, UInt16 fcp, string names, uint flags) { return new InternalCodePageDataItem () { codePage = cp, uiFamilyCodePage = fcp, flags = flags, Names = names }; }
+//
+// Information about codepages.
+//
+       internal static InternalCodePageDataItem [] codePageDataPtr = new InternalCodePageDataItem [] {
+#if FEATURE_CORECLR
+
+// Total Items: 
+// code page, family code page, web name, header name, body name, flags
+
+    MapCodePageDataItem(  1200,  1200, "utf-16",      MIMECONTF_SAVABLE_BROWSER), // "Unicode"
+    MapCodePageDataItem(  1201,  1200, "utf-16BE",    0), // Big Endian, old FFFE BOM seems backwards, think of the BOM in little endian order.
+    MapCodePageDataItem(  12000, 1200, "utf-32", 0), // "Unicode (UTF-32)"
+    MapCodePageDataItem(  12001, 1200, "utf-32BE", 0), // "Unicode (UTF-32 Big Endian)"
+    MapCodePageDataItem(  20127, 1252, "us-ascii", MIMECONTF_MAILNEWS | MIMECONTF_SAVABLE_MAILNEWS), // "US-ASCII"
+    MapCodePageDataItem(  28591,  1252, "iso-8859-1",  MIMECONTF_MAILNEWS | MIMECONTF_BROWSER | MIMECONTF_SAVABLE_MAILNEWS | MIMECONTF_SAVABLE_BROWSER), // "Western European (ISO)"
+    MapCodePageDataItem(  65000, 1200, "utf-7", MIMECONTF_MAILNEWS | MIMECONTF_SAVABLE_MAILNEWS), // "Unicode (UTF-7)"
+    MapCodePageDataItem(  65001, 1200, "utf-8", MIMECONTF_MAILNEWS | MIMECONTF_BROWSER | MIMECONTF_SAVABLE_MAILNEWS | MIMECONTF_SAVABLE_BROWSER), // "Unicode (UTF-8)"
+
+#else //FEATURE_CORECLR
+
+// Total Items: 146
+// code page, family code page, web name, header name, body name, flags
+
+
+    MapCodePageDataItem(    37,  1252, "IBM037",      0), // "IBM EBCDIC (US-Canada)"
+    MapCodePageDataItem(   437,  1252, "IBM437",      0), // "OEM United States"
+    MapCodePageDataItem(   500,  1252, "IBM500",      0), // "IBM EBCDIC (International)"
+    MapCodePageDataItem(   708,  1256, "ASMO-708",    MIMECONTF_BROWSER | MIMECONTF_SAVABLE_BROWSER), // "Arabic (ASMO 708)"
+//    MapCodePageDataItem(   720,  1256, "DOS-720",     MIMECONTF_BROWSER | MIMECONTF_SAVABLE_BROWSER), // "Arabic (DOS)"
+//    MapCodePageDataItem(   737,  1253, "ibm737",      0), // "Greek (DOS)"
+//    MapCodePageDataItem(   775,  1257, "ibm775",      0), // "Baltic (DOS)"
+    MapCodePageDataItem(   850,  1252, "ibm850",      0), // "Western European (DOS)"
+    MapCodePageDataItem(   852,  1250, "ibm852",      MIMECONTF_BROWSER | MIMECONTF_SAVABLE_BROWSER), // "Central European (DOS)"
+    MapCodePageDataItem(   855,  1252, "IBM855",      0), // "OEM Cyrillic"
+    MapCodePageDataItem(   857,  1254, "ibm857",      0), // "Turkish (DOS)"
+    MapCodePageDataItem(   858,  1252, "IBM00858",    0), // "OEM Multilingual Latin I"
+    MapCodePageDataItem(   860,  1252, "IBM860",      0), // "Portuguese (DOS)"
+    MapCodePageDataItem(   861,  1252, "ibm861",      0), // "Icelandic (DOS)"
+    MapCodePageDataItem(   862,  1255, "DOS-862",     MIMECONTF_BROWSER | MIMECONTF_SAVABLE_BROWSER), // "Hebrew (DOS)"
+    MapCodePageDataItem(   863,  1252, "IBM863",      0), // "French Canadian (DOS)"
+    MapCodePageDataItem(   864,  1256, "IBM864",      0), // "Arabic (864)"
+    MapCodePageDataItem(   865,  1252, "IBM865",      0), // "Nordic (DOS)"
+    MapCodePageDataItem(   866,  1251, "cp866",       MIMECONTF_BROWSER | MIMECONTF_SAVABLE_BROWSER), // "Cyrillic (DOS)"
+    MapCodePageDataItem(   869,  1253, "ibm869",      0), // "Greek, Modern (DOS)"
+    MapCodePageDataItem(   870,  1250, "IBM870",      0), // "IBM EBCDIC (Multilingual Latin-2)"
+    MapCodePageDataItem(   874,   874, "windows-874", MIMECONTF_MAILNEWS | MIMECONTF_BROWSER | MIMECONTF_SAVABLE_MAILNEWS | MIMECONTF_SAVABLE_BROWSER), // "Thai (Windows)"
+    MapCodePageDataItem(   875,  1253, "cp875",       0), // "IBM EBCDIC (Greek Modern)"
+    MapCodePageDataItem(   932,   932, "|shift_jis|iso-2022-jp|iso-2022-jp",   MIMECONTF_MAILNEWS | MIMECONTF_BROWSER | MIMECONTF_SAVABLE_MAILNEWS | MIMECONTF_SAVABLE_BROWSER), // "Japanese (Shift-JIS)"
+    MapCodePageDataItem(   936,   936, "gb2312",      MIMECONTF_MAILNEWS | MIMECONTF_BROWSER | MIMECONTF_SAVABLE_MAILNEWS | MIMECONTF_SAVABLE_BROWSER), // "Chinese Simplified (GB2312)"
+    MapCodePageDataItem(   949,   949, "ks_c_5601-1987", MIMECONTF_MAILNEWS | MIMECONTF_BROWSER | MIMECONTF_SAVABLE_MAILNEWS | MIMECONTF_SAVABLE_BROWSER), // "Korean"
+    MapCodePageDataItem(   950,   950, "big5",        MIMECONTF_MAILNEWS | MIMECONTF_BROWSER | MIMECONTF_SAVABLE_MAILNEWS | MIMECONTF_SAVABLE_BROWSER), // "Chinese Traditional (Big5)"
+    MapCodePageDataItem(  1026,  1254, "IBM1026",     0), // "IBM EBCDIC (Turkish Latin-5)"
+    MapCodePageDataItem(  1047,  1252, "IBM01047",    0), // "IBM Latin-1"
+    MapCodePageDataItem(  1140,  1252, "IBM01140",    0), // "IBM EBCDIC (US-Canada-Euro)"
+    MapCodePageDataItem(  1141,  1252, "IBM01141",    0), // "IBM EBCDIC (Germany-Euro)"
+    MapCodePageDataItem(  1142,  1252, "IBM01142",    0), // "IBM EBCDIC (Denmark-Norway-Euro)"
+    MapCodePageDataItem(  1143,  1252, "IBM01143",    0), // "IBM EBCDIC (Finland-Sweden-Euro)"
+    MapCodePageDataItem(  1144,  1252, "IBM01144",    0), // "IBM EBCDIC (Italy-Euro)"
+    MapCodePageDataItem(  1145,  1252, "IBM01145",    0), // "IBM EBCDIC (Spain-Euro)"
+    MapCodePageDataItem(  1146,  1252, "IBM01146",    0), // "IBM EBCDIC (UK-Euro)"
+    MapCodePageDataItem(  1147,  1252, "IBM01147",    0), // "IBM EBCDIC (France-Euro)"
+    MapCodePageDataItem(  1148,  1252, "IBM01148",    0), // "IBM EBCDIC (International-Euro)"
+    MapCodePageDataItem(  1149,  1252, "IBM01149",    0), // "IBM EBCDIC (Icelandic-Euro)"
+    MapCodePageDataItem(  1200,  1200, "utf-16",      MIMECONTF_SAVABLE_BROWSER), // "Unicode"
+    MapCodePageDataItem(  1201,  1200, "utf-16BE",    0), // Big Endian, old FFFE BOM seems backwards, think of the BOM in little endian order.
+    MapCodePageDataItem(  1250,  1250, "|windows-1250|windows-1250|iso-8859-2", MIMECONTF_MAILNEWS | MIMECONTF_BROWSER | MIMECONTF_SAVABLE_MAILNEWS | MIMECONTF_SAVABLE_BROWSER), // "Central European (Windows)"
+    MapCodePageDataItem(  1251,  1251, "|windows-1251|windows-1251|koi8-r", MIMECONTF_MAILNEWS | MIMECONTF_BROWSER | MIMECONTF_SAVABLE_MAILNEWS | MIMECONTF_SAVABLE_BROWSER), // "Cyrillic (Windows)"
+    MapCodePageDataItem(  1252,  1252, "|Windows-1252|Windows-1252|iso-8859-1", MIMECONTF_MAILNEWS | MIMECONTF_BROWSER | MIMECONTF_SAVABLE_MAILNEWS | MIMECONTF_SAVABLE_BROWSER), // "Western European (Windows)"
+    MapCodePageDataItem(  1253,  1253, "|windows-1253|windows-1253|iso-8859-7", MIMECONTF_MAILNEWS | MIMECONTF_BROWSER | MIMECONTF_SAVABLE_MAILNEWS | MIMECONTF_SAVABLE_BROWSER), // "Greek (Windows)"
+    MapCodePageDataItem(  1254,  1254, "|windows-1254|windows-1254|iso-8859-9", MIMECONTF_MAILNEWS | MIMECONTF_BROWSER | MIMECONTF_SAVABLE_MAILNEWS | MIMECONTF_SAVABLE_BROWSER), // "Turkish (Windows)"
+    MapCodePageDataItem(  1255,  1255, "windows-1255", MIMECONTF_MAILNEWS | MIMECONTF_BROWSER | MIMECONTF_SAVABLE_MAILNEWS | MIMECONTF_SAVABLE_BROWSER), // "Hebrew (Windows)"
+    MapCodePageDataItem(  1256,  1256, "windows-1256", MIMECONTF_MAILNEWS | MIMECONTF_BROWSER | MIMECONTF_SAVABLE_MAILNEWS | MIMECONTF_SAVABLE_BROWSER), // "Arabic (Windows)"
+    MapCodePageDataItem(  1257,  1257, "windows-1257", MIMECONTF_MAILNEWS | MIMECONTF_BROWSER | MIMECONTF_SAVABLE_MAILNEWS | MIMECONTF_SAVABLE_BROWSER), // "Baltic (Windows)"
+    MapCodePageDataItem(  1258,  1258, "windows-1258", MIMECONTF_MAILNEWS | MIMECONTF_BROWSER | MIMECONTF_SAVABLE_MAILNEWS | MIMECONTF_SAVABLE_BROWSER), // "Vietnamese (Windows)"
+//    MapCodePageDataItem(  1361,   949, "Johab",        0), // "Korean (Johab)"
+    MapCodePageDataItem( 10000,  1252, "macintosh",    0), // "Western European (Mac)"
+/*
+    MapCodePageDataItem( 10001,   932, "x-mac-japanese", 0), // "Japanese (Mac)"
+    MapCodePageDataItem( 10002,   950, "x-mac-chinesetrad",   0), // "Chinese Traditional (Mac)"
+    MapCodePageDataItem( 10003,   949, "x-mac-korean",        0), // "Korean (Mac)"
+    MapCodePageDataItem( 10004,  1256, "x-mac-arabic",        0), // "Arabic (Mac)"
+    MapCodePageDataItem( 10005,  1255, "x-mac-hebrew",        0), // "Hebrew (Mac)"
+    MapCodePageDataItem( 10006,  1253, "x-mac-greek",         0), // "Greek (Mac)"
+    MapCodePageDataItem( 10007,  1251, "x-mac-cyrillic",      0), // "Cyrillic (Mac)"
+    MapCodePageDataItem( 10008,   936, "x-mac-chinesesimp",   0), // "Chinese Simplified (Mac)"
+    MapCodePageDataItem( 10010,  1250, "x-mac-romanian",      0), // "Romanian (Mac)"
+    MapCodePageDataItem( 10017,  1251, "x-mac-ukrainian",     0), // "Ukrainian (Mac)"
+    MapCodePageDataItem( 10021,   874, "x-mac-thai",          0), // "Thai (Mac)"
+    MapCodePageDataItem( 10029,  1250, "x-mac-ce",            0), // "Central European (Mac)"
+*/
+    MapCodePageDataItem( 10079,  1252, "x-mac-icelandic",     0), // "Icelandic (Mac)"
+//    MapCodePageDataItem( 10081,  1254, "x-mac-turkish",       0), // "Turkish (Mac)"
+//    MapCodePageDataItem( 10082,  1250, "x-mac-croatian",      0), // "Croatian (Mac)"
+    MapCodePageDataItem( 12000,  1200, "utf-32",              0), // "Unicode (UTF-32)"
+    MapCodePageDataItem( 12001,  1200, "utf-32BE",            0), // "Unicode (UTF-32 Big Endian)"
+/*
+    MapCodePageDataItem( 20000,   950, "x-Chinese-CNS",       0), // "Chinese Traditional (CNS)"
+    MapCodePageDataItem( 20001,   950, "x-cp20001",           0), // "TCA Taiwan"
+    MapCodePageDataItem( 20002,   950, "x-Chinese-Eten",      0), // "Chinese Traditional (Eten)"
+    MapCodePageDataItem( 20003,   950, "x-cp20003",           0), // "IBM5550 Taiwan"
+    MapCodePageDataItem( 20004,   950, "x-cp20004",           0), // "TeleText Taiwan"
+    MapCodePageDataItem( 20005,   950, "x-cp20005",           0), // "Wang Taiwan"
+    MapCodePageDataItem( 20105,  1252, "x-IA5",               0), // "Western European (IA5)"
+    MapCodePageDataItem( 20106,  1252, "x-IA5-German",        0), // "German (IA5)"
+    MapCodePageDataItem( 20107,  1252, "x-IA5-Swedish",       0), // "Swedish (IA5)"
+    MapCodePageDataItem( 20108,  1252, "x-IA5-Norwegian",     0), // "Norwegian (IA5)"
+*/
+    MapCodePageDataItem( 20127,  1252, "us-ascii",            MIMECONTF_MAILNEWS | MIMECONTF_SAVABLE_MAILNEWS), // "US-ASCII"
+//    MapCodePageDataItem( 20261,  1252, "x-cp20261",           0), // "T.61"
+//    MapCodePageDataItem( 20269,  1252, "x-cp20269",           0), // "ISO-6937"
+    MapCodePageDataItem( 20273,  1252, "IBM273",              0), // "IBM EBCDIC (Germany)"
+    MapCodePageDataItem( 20277,  1252, "IBM277",              0), // "IBM EBCDIC (Denmark-Norway)"
+    MapCodePageDataItem( 20278,  1252, "IBM278",              0), // "IBM EBCDIC (Finland-Sweden)"
+    MapCodePageDataItem( 20280,  1252, "IBM280",              0), // "IBM EBCDIC (Italy)"
+    MapCodePageDataItem( 20284,  1252, "IBM284",              0), // "IBM EBCDIC (Spain)"
+    MapCodePageDataItem( 20285,  1252, "IBM285",              0), // "IBM EBCDIC (UK)"
+    MapCodePageDataItem( 20290,   932, "IBM290",              0), // "IBM EBCDIC (Japanese katakana)"
+    MapCodePageDataItem( 20297,  1252, "IBM297",              0), // "IBM EBCDIC (France)"
+    MapCodePageDataItem( 20420,  1256, "IBM420",              0), // "IBM EBCDIC (Arabic)"
+//    MapCodePageDataItem( 20423,  1253, "IBM423",              0), // "IBM EBCDIC (Greek)"
+    MapCodePageDataItem( 20424,  1255, "IBM424",              0), // "IBM EBCDIC (Hebrew)"
+//    MapCodePageDataItem( 20833,   949, "x-EBCDIC-KoreanExtended", 0), // "IBM EBCDIC (Korean Extended)"
+//    MapCodePageDataItem( 20838,   874, "IBM-Thai",            0), // "IBM EBCDIC (Thai)"
+    MapCodePageDataItem( 20866,  1251, "koi8-r",              MIMECONTF_MAILNEWS | MIMECONTF_BROWSER | MIMECONTF_SAVABLE_MAILNEWS | MIMECONTF_SAVABLE_BROWSER), // "Cyrillic (KOI8-R)"
+    MapCodePageDataItem( 20871,  1252, "IBM871",              0), // "IBM EBCDIC (Icelandic)"
+/*
+    MapCodePageDataItem( 20880,  1251, "IBM880",              0), // "IBM EBCDIC (Cyrillic Russian)"
+    MapCodePageDataItem( 20905,  1254, "IBM905",              0), // "IBM EBCDIC (Turkish)"
+    MapCodePageDataItem( 20924,  1252, "IBM00924",            0), // "IBM Latin-1"
+    MapCodePageDataItem( 20932,   932, "EUC-JP",              0), // "Japanese (JIS 0208-1990 and 0212-1990)"
+    MapCodePageDataItem( 20936,   936, "x-cp20936",           0), // "Chinese Simplified (GB2312-80)"
+    MapCodePageDataItem( 20949,   949, "x-cp20949",           0), // "Korean Wansung"
+*/
+    MapCodePageDataItem( 21025,  1251, "cp1025",              0), // "IBM EBCDIC (Cyrillic Serbian-Bulgarian)"
+    MapCodePageDataItem( 21866,  1251, "koi8-u",              MIMECONTF_MAILNEWS | MIMECONTF_BROWSER | MIMECONTF_SAVABLE_MAILNEWS | MIMECONTF_SAVABLE_BROWSER), // "Cyrillic (KOI8-U)"
+    MapCodePageDataItem( 28591,  1252, "iso-8859-1",          MIMECONTF_MAILNEWS | MIMECONTF_BROWSER | MIMECONTF_SAVABLE_MAILNEWS | MIMECONTF_SAVABLE_BROWSER), // "Western European (ISO)"
+    MapCodePageDataItem( 28592,  1250, "iso-8859-2",          MIMECONTF_MAILNEWS | MIMECONTF_BROWSER | MIMECONTF_SAVABLE_MAILNEWS | MIMECONTF_SAVABLE_BROWSER), // "Central European (ISO)"
+    MapCodePageDataItem( 28593,  1254, "iso-8859-3",          MIMECONTF_MAILNEWS | MIMECONTF_SAVABLE_MAILNEWS), // "Latin 3 (ISO)"
+    MapCodePageDataItem( 28594,  1257, "iso-8859-4",          MIMECONTF_MAILNEWS | MIMECONTF_BROWSER | MIMECONTF_SAVABLE_MAILNEWS | MIMECONTF_SAVABLE_BROWSER), // "Baltic (ISO)"
+    MapCodePageDataItem( 28595,  1251, "iso-8859-5",          MIMECONTF_MAILNEWS | MIMECONTF_BROWSER | MIMECONTF_SAVABLE_MAILNEWS | MIMECONTF_SAVABLE_BROWSER), // "Cyrillic (ISO)"
+    MapCodePageDataItem( 28596,  1256, "iso-8859-6",          MIMECONTF_MAILNEWS | MIMECONTF_BROWSER | MIMECONTF_SAVABLE_MAILNEWS | MIMECONTF_SAVABLE_BROWSER), // "Arabic (ISO)"
+    MapCodePageDataItem( 28597,  1253, "iso-8859-7",          MIMECONTF_MAILNEWS | MIMECONTF_BROWSER | MIMECONTF_SAVABLE_MAILNEWS | MIMECONTF_SAVABLE_BROWSER), // "Greek (ISO)"
+    MapCodePageDataItem( 28598,  1255, "iso-8859-8",          MIMECONTF_BROWSER | MIMECONTF_SAVABLE_BROWSER), // "Hebrew (ISO-Visual)"
+    MapCodePageDataItem( 28599,  1254, "iso-8859-9",          MIMECONTF_MAILNEWS | MIMECONTF_BROWSER | MIMECONTF_SAVABLE_MAILNEWS | MIMECONTF_SAVABLE_BROWSER), // "Turkish (ISO)"
+//    MapCodePageDataItem( 28603,  1257, "iso-8859-13",         MIMECONTF_MAILNEWS | MIMECONTF_SAVABLE_MAILNEWS), // "Estonian (ISO)"
+    MapCodePageDataItem( 28605,  1252, "iso-8859-15",         MIMECONTF_MAILNEWS | MIMECONTF_SAVABLE_MAILNEWS | MIMECONTF_SAVABLE_BROWSER), // "Latin 9 (ISO)"
+//    MapCodePageDataItem( 29001,  1252, "x-Europa",            0), // "Europa"
+    MapCodePageDataItem( 38598,  1255, "iso-8859-8-i",        MIMECONTF_MAILNEWS | MIMECONTF_BROWSER | MIMECONTF_SAVABLE_MAILNEWS | MIMECONTF_SAVABLE_BROWSER), // "Hebrew (ISO-Logical)"
+    MapCodePageDataItem( 50220,   932, "iso-2022-jp",         MIMECONTF_MAILNEWS | MIMECONTF_SAVABLE_MAILNEWS), // "Japanese (JIS)"
+    MapCodePageDataItem( 50221,   932, "|csISO2022JP|iso-2022-jp|iso-2022-jp", MIMECONTF_MAILNEWS | MIMECONTF_SAVABLE_MAILNEWS | MIMECONTF_SAVABLE_BROWSER), // "Japanese (JIS-Allow 1 byte Kana)"
+    MapCodePageDataItem( 50222,   932, "iso-2022-jp",         0), // "Japanese (JIS-Allow 1 byte Kana - SO/SI)"
+//    MapCodePageDataItem( 50225,   949, "|iso-2022-kr|euc-kr|iso-2022-kr", MIMECONTF_MAILNEWS), // "Korean (ISO)"
+//    MapCodePageDataItem( 50227,   936, "x-cp50227",           0), // "Chinese Simplified (ISO-2022)"
+//MapCodePageDataItem( 50229,   950, L"x-cp50229", L"x-cp50229", L"x-cp50229", 0}, // "Chinese Traditional (ISO-2022)"
+//MapCodePageDataItem( 50930,   932, L"cp930", L"cp930", L"cp930", 0}, // "IBM EBCDIC (Japanese and Japanese Katakana)"
+//MapCodePageDataItem( 50931,   932, L"x-EBCDIC-JapaneseAndUSCanada", L"x-EBCDIC-JapaneseAndUSCanada", L"x-EBCDIC-JapaneseAndUSCanada", 0}, // "IBM EBCDIC (Japanese and US-Canada)"
+//MapCodePageDataItem( 50933,   949, L"cp933", L"cp933", L"cp933", 0}, // "IBM EBCDIC (Korean and Korean Extended)"
+//MapCodePageDataItem( 50935,   936, L"cp935", L"cp935", L"cp935", 0}, // "IBM EBCDIC (Simplified Chinese)"
+//MapCodePageDataItem( 50937,   950, L"cp937", L"cp937", L"cp937", 0}, // "IBM EBCDIC (Traditional Chinese)"
+//MapCodePageDataItem( 50939,   932, L"cp939", L"cp939", L"cp939", 0}, // "IBM EBCDIC (Japanese and Japanese-Latin)"
+    MapCodePageDataItem( 51932,   932, "euc-jp",              MIMECONTF_MAILNEWS | MIMECONTF_BROWSER | MIMECONTF_SAVABLE_MAILNEWS | MIMECONTF_SAVABLE_BROWSER), // "Japanese (EUC)"
+//    MapCodePageDataItem( 51936,   936, "EUC-CN",              0), // "Chinese Simplified (EUC)"
+    MapCodePageDataItem( 51949,   949, "euc-kr",              MIMECONTF_MAILNEWS | MIMECONTF_SAVABLE_MAILNEWS), // "Korean (EUC)"
+//    MapCodePageDataItem( 52936,   936, "hz-gb-2312",          MIMECONTF_MAILNEWS | MIMECONTF_BROWSER | MIMECONTF_SAVABLE_MAILNEWS | MIMECONTF_SAVABLE_BROWSER), // "Chinese Simplified (HZ)"
+    MapCodePageDataItem( 54936,   936, "GB18030",             MIMECONTF_MAILNEWS | MIMECONTF_BROWSER | MIMECONTF_SAVABLE_MAILNEWS | MIMECONTF_SAVABLE_BROWSER), // "Chinese Simplified (GB18030)"
+    MapCodePageDataItem( 57002, 57002, "x-iscii-de",          0), // "ISCII Devanagari"
+    MapCodePageDataItem( 57003, 57003, "x-iscii-be",          0), // "ISCII Bengali"
+    MapCodePageDataItem( 57004, 57004, "x-iscii-ta",          0), // "ISCII Tamil"
+    MapCodePageDataItem( 57005, 57005, "x-iscii-te",          0), // "ISCII Telugu"
+    MapCodePageDataItem( 57006, 57006, "x-iscii-as",          0), // "ISCII Assamese"
+    MapCodePageDataItem( 57007, 57007, "x-iscii-or",          0), // "ISCII Oriya"
+    MapCodePageDataItem( 57008, 57008, "x-iscii-ka",          0), // "ISCII Kannada"
+    MapCodePageDataItem( 57009, 57009, "x-iscii-ma",          0), // "ISCII Malayalam"
+    MapCodePageDataItem( 57010, 57010, "x-iscii-gu",          0), // "ISCII Gujarati"
+    MapCodePageDataItem( 57011, 57011, "x-iscii-pa",          0), // "ISCII Punjabi"
+    MapCodePageDataItem( 65000,  1200, "utf-7",               MIMECONTF_MAILNEWS | MIMECONTF_SAVABLE_MAILNEWS), // "Unicode (UTF-7)"
+    MapCodePageDataItem( 65001,  1200, "utf-8",               MIMECONTF_MAILNEWS | MIMECONTF_BROWSER | MIMECONTF_SAVABLE_MAILNEWS | MIMECONTF_SAVABLE_BROWSER), // "Unicode (UTF-8)"
+#endif // FEATURE_CORECLR
+
+    // End of data.
+    MapCodePageDataItem( 0, 0, null, 0),
+
+};
+
+#endregion
+
+#region "from coreclr/src/pal/inc/rt/palrt.h"
+// modified
+
+       const int
+//typedef 
+//enum tagMIMECONTF {
+    MIMECONTF_MAILNEWS  = 0x1,
+    MIMECONTF_BROWSER   = 0x2,
+    MIMECONTF_MINIMAL   = 0x4,
+    MIMECONTF_IMPORT    = 0x8,
+    MIMECONTF_SAVABLE_MAILNEWS  = 0x100,
+    MIMECONTF_SAVABLE_BROWSER   = 0x200,
+    MIMECONTF_EXPORT    = 0x400,
+    MIMECONTF_PRIVCONVERTER = 0x10000,
+    MIMECONTF_VALID = 0x20000,
+    MIMECONTF_VALID_NLS = 0x40000,
+    MIMECONTF_MIME_IE4  = 0x10000000,
+    MIMECONTF_MIME_LATEST   = 0x20000000,
+    MIMECONTF_MIME_REGISTRY = 0x40000000
+//    }   MIMECONTF;
+    ;
+#endregion
+}
+
+#region "from referencesource/mscorlib/system/globalization/encodingtable.cs"
+    //
+    // Data table for encoding classes.  Used by System.Text.Encoding.
+    // This class contains two hashtables to allow System.Text.Encoding
+    // to retrieve the data item either by codepage value or by webName.
+    //
+    
+    // Only statics, does not need to be marked with the serializable attribute
+    internal static partial class EncodingTable
+    {
+
+        //This number is the size of the table in native.  The value is retrieved by
+        //calling the native GetNumEncodingItems().
+        private static int lastEncodingItem = GetNumEncodingItems() - 1;
+
+        //This number is the size of the code page table.  Its generated when we walk the table the first time.
+        private static volatile int lastCodePageItem;
+
+/*        
+        //
+        // This points to a native data table which maps an encoding name to the correct code page.        
+        //
+        [SecurityCritical]
+        unsafe internal static InternalEncodingDataItem* encodingDataPtr = GetEncodingData();
+        //
+        // This points to a native data table which stores the properties for the code page, and
+        // the table is indexed by code page.
+        //
+        [SecurityCritical]
+        unsafe internal static InternalCodePageDataItem* codePageDataPtr = GetCodePageData();
+*/
+        //
+        // This caches the mapping of an encoding name to a code page.
+        //
+        private static Hashtable hashByName = Hashtable.Synchronized(new Hashtable(StringComparer.OrdinalIgnoreCase));
+        //
+        // THe caches the data item which is indexed by the code page value.
+        //
+        private static Hashtable hashByCodePage = Hashtable.Synchronized(new Hashtable());
+
+        [System.Security.SecuritySafeCritical] // static constructors should be safe to call
+        static EncodingTable()
+        { 
+        }
+
+        // Find the data item by binary searching the table that we have in native.
+        // nativeCompareOrdinalWC is an internal-only function.
+        [System.Security.SecuritySafeCritical]  // auto-generated
+        unsafe private static int internalGetCodePageFromName(String name) {
+            int left  = 0;
+            int right = lastEncodingItem;
+            int index;
+            int result;
+    
+            //Binary search the array until we have only a couple of elements left and then
+            //just walk those elements.
+            while ((right - left)>3) {
+                index = ((right - left)/2) + left;
+                
+                result = String.Compare (name, encodingDataPtr[index].webName, StringComparison.OrdinalIgnoreCase);
+    
+                if (result == 0) {
+                    //We found the item, return the associated codepage.
+                    return (encodingDataPtr[index].codePage);
+                } else if (result<0) {
+                    //The name that we're looking for is less than our current index.
+                    right = index;
+                } else {
+                    //The name that we're looking for is greater than our current index
+                    left = index;
+                }
+            }
+    
+            //Walk the remaining elements (it'll be 3 or fewer).
+            for (; left<=right; left++) {
+                if (String.Compare(name, encodingDataPtr[left].webName, StringComparison.OrdinalIgnoreCase) == 0) {
+                    return (encodingDataPtr[left].codePage);
+                }
+            }
+            // The encoding name is not valid.
+            throw new ArgumentException(
+                String.Format(
+                    CultureInfo.CurrentCulture,
+                    Environment.GetResourceString("Argument_EncodingNotSupported"), name), "name");
+        }
+
+        // Return a list of all EncodingInfo objects describing all of our encodings
+        [System.Security.SecuritySafeCritical]  // auto-generated
+        internal static unsafe EncodingInfo[] GetEncodings()
+        {
+            if (lastCodePageItem == 0)
+            {
+                int count;
+                for (count = 0; codePageDataPtr[count].codePage != 0; count++)
+                {
+                    // Count them
+                }
+                lastCodePageItem = count;
+            }
+
+            EncodingInfo[] arrayEncodingInfo = new EncodingInfo[lastCodePageItem];
+
+            int i;
+            for (i = 0; i < lastCodePageItem; i++)
+            {
+                arrayEncodingInfo[i] = new EncodingInfo(codePageDataPtr[i].codePage, CodePageDataItem.CreateString(codePageDataPtr[i].Names, 0),
+                    Environment.GetResourceString("Globalization.cp_" + codePageDataPtr[i].codePage));
+            }
+            
+            return arrayEncodingInfo;
+        }        
+    
+        /*=================================GetCodePageFromName==========================
+        **Action: Given a encoding name, return the correct code page number for this encoding.
+        **Returns: The code page for the encoding.
+        **Arguments:
+        **  name    the name of the encoding
+        **Exceptions:
+        **  ArgumentNullException if name is null.
+        **  internalGetCodePageFromName will throw ArgumentException if name is not a valid encoding name.
+        ============================================================================*/
+        
+        internal static int GetCodePageFromName(String name)
+        {   
+            if (name==null) {
+                throw new ArgumentNullException("name");
+            }
+            Contract.EndContractBlock();
+
+            Object codePageObj;
+
+            //
+            // The name is case-insensitive, but ToLower isn't free.  Check for
+            // the code page in the given capitalization first.
+            //
+            codePageObj = hashByName[name];
+
+            if (codePageObj!=null) {
+                return ((int)codePageObj);
+            }
+
+            //Okay, we didn't find it in the hash table, try looking it up in the 
+            //unmanaged data.
+            int codePage = internalGetCodePageFromName(name);
+
+            hashByName[name] = codePage;
+
+            return codePage;
+        }
+    
+        [System.Security.SecuritySafeCritical]  // auto-generated
+        unsafe internal static CodePageDataItem GetCodePageDataItem(int codepage) {
+            CodePageDataItem dataItem;
+
+            // We synchronize around dictionary gets/sets. There's still a possibility that two threads
+            // will create a CodePageDataItem and the second will clobber the first in the dictionary. 
+            // However, that's acceptable because the contents are correct and we make no guarantees
+            // other than that. 
+
+            //Look up the item in the hashtable.
+            dataItem = (CodePageDataItem)hashByCodePage[codepage];
+            
+            //If we found it, return it.
+            if (dataItem!=null) {
+                return dataItem;
+            }
+
+
+            //If we didn't find it, try looking it up now.
+            //If we find it, add it to the hashtable.
+            //This is a linear search, but we probably won't be doing it very often.
+            //
+            int i = 0;
+            int data;
+            while ((data = codePageDataPtr[i].codePage) != 0) {
+                if (data == codepage) {
+                    dataItem = new CodePageDataItem(i);
+                    hashByCodePage[codepage] = dataItem;
+                    return (dataItem);
+                }
+                i++;
+            }
+        
+            //Nope, we didn't find it.
+            return null;
+        }
+
+/*
+        [System.Security.SecurityCritical]  // auto-generated
+        [MethodImplAttribute(MethodImplOptions.InternalCall)]
+        private unsafe static extern InternalEncodingDataItem *GetEncodingData();
+        
+        //
+        // Return the number of encoding data items.
+        //
+        [System.Security.SecurityCritical]  // auto-generated
+        [MethodImplAttribute(MethodImplOptions.InternalCall)]
+        private static extern int GetNumEncodingItems();
+
+        [System.Security.SecurityCritical]  // auto-generated
+        [MethodImplAttribute(MethodImplOptions.InternalCall)]
+        private unsafe static extern InternalCodePageDataItem* GetCodePageData();
+
+        [System.Security.SecurityCritical]  // auto-generated
+        [MethodImplAttribute(MethodImplOptions.InternalCall)]
+        internal unsafe static extern byte* nativeCreateOpenFileMapping(
+            String inSectionName, int inBytesToAllocate, out IntPtr mappedFileHandle);   
+*/
+    }
+    
+    /*=================================InternalEncodingDataItem==========================
+    **Action: This is used to map a encoding name to a correct code page number. By doing this,
+    ** we can get the properties of this encoding via the InternalCodePageDataItem.
+    **
+    ** We use this structure to access native data exposed by the native side.
+    ============================================================================*/
+    
+    [System.Runtime.InteropServices.StructLayout(LayoutKind.Sequential)]
+    internal struct InternalEncodingDataItem {
+        [SecurityCritical]
+        internal string webName;
+        internal UInt16   codePage;
+    }
+
+    /*=================================InternalCodePageDataItem==========================
+    **Action: This is used to access the properties related to a code page.
+    ** We use this structure to access native data exposed by the native side.
+    ============================================================================*/
+
+    [System.Runtime.InteropServices.StructLayout(LayoutKind.Sequential)]
+    internal struct InternalCodePageDataItem {
+        internal UInt16   codePage;
+        internal UInt16   uiFamilyCodePage;
+        internal uint     flags;
+        [SecurityCritical]
+        internal string Names;
+    }
+#endregion
+}
index 246a01e44b320a227cf428cc4aface0cb9fe9137..28cc2df6a6c0db9588cc69df2429f96d313b2800 100644 (file)
@@ -6,52 +6,17 @@ namespace System
        {
                internal static string GetResourceString (string key)
                {
-                       switch (key) {
-                       case "AssertionFailed":
-                               return "Assertion failed.";
-                       case "AssumptionFailed":
-                               return "Assumption failed.";
-                       case "InvariantFailed":
-                               return "Invariant failed.";
-                       case "PostconditionFailed":
-                               return "Postcondition failed.";
-                       case "PostconditionOnExceptionFailed":
-                               return "Postcondition failed after throwing an exception.";
-                       case "PreconditionFailed":
-                               return "Precondition failed.";
-                       }
-
-                       return key;
+                       return Messages.GetMessage (key);
                }
 
                internal static string GetResourceString (string key, CultureInfo culture)
                {
-                       return key;
+                       return GetResourceString (key);
                }
 
                internal static string GetResourceString (string key, params object[] values)
                {
-                       switch (key) {
-                       case "AssertionFailed_Cnd":
-                               key = "Assertion failed: {0}";
-                               break;
-                       case "AssumptionFailed_Cnd":
-                               key = "Assumption failed: {0}";
-                               break;
-                       case "InvariantFailed_Cnd":
-                               key = "Invariant failed: {0}";
-                               break;
-                       case "PostconditionFailed_Cnd":
-                               key = "Postcondition failed: {0}";
-                               break;
-                       case "PostconditionOnExceptionFailed_Cnd":
-                               key = "Postcondition failed after throwing an exception: {0}";
-                               break;
-                       case "PreconditionFailed_Cnd":
-                               key = "Precondition failed: {0}";
-                               break;
-                       }
-
+                       key = Messages.GetMessage (key);
                        return string.Format (CultureInfo.InvariantCulture, key, values);
                }
        }
index 3dc95b431c88fa26fdfe9157de209c3b61122fa0..b6b73bea8179ff708eecdfdb69b00cc9a85365ff 100644 (file)
@@ -40,12 +40,19 @@ namespace System {
         internal const int TreatAsI1=0x400;
         internal const int TreatAsI2=0x800;
         internal const int IsTight=0x1000;
-//        internal const int NoSpace=0x2000;
+        internal const int NoSpace=0x2000;
 
-        public  static int StringToInt (string value, int fromBase, int flags)
+               public static int StringToInt (string value, int fromBase, int flags)
                {
-                       if ((flags & IsTight) == 0)
-                               throw new NotImplementedException ();
+                       unsafe {
+                               return StringToInt (value, fromBase, flags, null);
+                       }
+               }
+
+               public unsafe static int StringToInt (string value, int fromBase, int flags, int* parsePos)
+               {
+                       if ((flags & (IsTight | NoSpace)) == 0)
+                               throw new NotImplementedException (flags.ToString ());
                        
                        if (value == null)
                                return 0;
@@ -54,7 +61,6 @@ namespace System {
                        uint result = 0;
                        int digitValue;
 
-                       int i = 0; 
                        int len = value.Length;
                        bool negative = false;
 
@@ -63,6 +69,8 @@ namespace System {
                                throw new ArgumentOutOfRangeException ("Empty string");
                        }
 
+                       int i = parsePos == null ? 0 : *parsePos;
+
                        //Check for a sign
                        if (value [i] == '-') {
                                if (fromBase != 10)
@@ -91,17 +99,19 @@ namespace System {
                        }
 
                        while (i < len) {
-                               char c = value [i++];
+                               char c = value [i];
                                if (Char.IsNumber (c)) {
                                        digitValue = c - '0';
                                } else if (Char.IsLetter (c)) {
                                        digitValue = Char.ToLowerInvariant (c) - 'a' + 10;
                                } else {
-                                       if (chars > 0) {
+                                       if (i == 0)
+                                               throw new FormatException ("Could not find any parsable digits.");
+                                       
+                                       if ((flags & IsTight) != 0)
                                                throw new FormatException ("Additional unparsable characters are at the end of the string.");
-                                       }
                                        
-                                       throw new FormatException ("Could not find any parsable digits.");
+                                       break;
                                }
 
                                if (digitValue >= fromBase) {
@@ -118,11 +128,15 @@ namespace System {
                                        
                                result = res;
                                chars++;
+                               ++i;
                        }
 
                        if (chars == 0)
                                throw new FormatException ("Could not find any parsable digits.");
 
+                       if (parsePos != null)
+                               *parsePos = i;
+
                        return negative ? -(int)result : (int)result;
                }        
 
@@ -137,11 +151,11 @@ namespace System {
 
                        switch (toBase) {
                        case 2:
-                               return ConvertToBase2 (val);
+                               return ConvertToBase2 (val).ToString ();
                        case 8:
-                               return ConvertToBase8 (val);
+                               return ConvertToBase8 (val).ToString ();
                        case 16:
-                               return ConvertToBase16 (val);
+                               return ConvertToBase16 (val).ToString ();
                        default:
                                throw new NotImplementedException ();
                        }
@@ -149,8 +163,15 @@ namespace System {
 
                public static long StringToLong (string value, int fromBase, int flags)
                {
-                       if ((flags & IsTight) == 0)
-                               throw new NotImplementedException ();
+                       unsafe {
+                               return StringToLong (value, fromBase, flags, null);
+                       }
+               }
+
+               public unsafe static long StringToLong (string value, int fromBase, int flags, int* parsePos)
+               {
+                       if ((flags & (IsTight | NoSpace)) == 0)
+                               throw new NotImplementedException (flags.ToString ());
 
                        if (value == null)
                                return 0;
@@ -159,7 +180,6 @@ namespace System {
                        int digitValue = -1;
                        long result = 0;
 
-                       int i = 0; 
                        int len = value.Length;
                        bool negative = false;
 
@@ -168,6 +188,8 @@ namespace System {
                                throw new ArgumentOutOfRangeException ("Empty string");
                        }
 
+                       int i = parsePos == null ? 0 : *parsePos;
+
                        //Check for a sign
                        if (value [i] == '-') {
                                if (fromBase != 10)
@@ -187,19 +209,19 @@ namespace System {
                        }
 
                        while (i < len) {
-                               char c = value[i++];
+                               char c = value[i];
                                if (Char.IsNumber (c)) {
                                        digitValue = c - '0';
                                } else if (Char.IsLetter (c)) {
                                        digitValue = Char.ToLowerInvariant (c) - 'a' + 10;
                                } else {
-                                       if (chars > 0) {
-                                               throw new FormatException ("Additional unparsable "
-                                                       + "characters are at the end of the string.");
-                                       } else {
-                                               throw new FormatException ("Could not find any parsable"
-                                                       + " digits.");
-                                       }
+                                       if (i == 0)
+                                               throw new FormatException ("Could not find any parsable digits.");
+
+                                       if ((flags & IsTight) != 0)
+                                               throw new FormatException ("Additional unparsable characters are at the end of the string.");
+
+                                       break;
                                }
 
                                if (digitValue >= fromBase) {
@@ -214,41 +236,61 @@ namespace System {
 
                                result = fromBase * result + digitValue;
                                chars++;
+                               ++i;
                        }
 
                        if (chars == 0)
                                throw new FormatException ("Could not find any parsable digits.");
 
+                       if (parsePos != null)
+                               *parsePos = i;
+
                        return negative ? -result : result;
                }
 
                public static string IntToString (int value, int toBase, int width, char paddingChar, int flags)
                {
-                       if (value == 0)
-                               return "0";
-
-                       if (toBase == 10)
-                               return value.ToString ();
+                       StringBuilder sb;
+
+                       if (value == 0) {
+                               if (width <= 0)
+                                       return "0";
+
+                               sb = new StringBuilder ("0", width);
+                       } else if (toBase == 10)
+                               sb = new StringBuilder (value.ToString ());
+                       else {
+                               byte[] val;
+                               if ((flags & PrintAsI1) != 0) {
+                                       val = BitConverter.GetBytes ((byte) value);
+                               } else if ((flags & PrintAsI2) != 0) {
+                                       val = BitConverter.GetBytes ((short) value);
+                               } else {
+                                       val = BitConverter.GetBytes (value);
+                               }
 
-                       byte[] val;
-                       if ((flags & PrintAsI1) != 0) {
-                               val = BitConverter.GetBytes ((byte) value);
-                       } else if ((flags & PrintAsI2) != 0) {
-                               val = BitConverter.GetBytes ((short) value);
-                       } else {
-                               val = BitConverter.GetBytes (value);
+                               switch (toBase) {
+                               case 2:
+                                       sb = ConvertToBase2 (val);
+                                       break;
+                               case 8:
+                                       sb = ConvertToBase8 (val);
+                                       break;
+                               case 16:
+                                       sb = ConvertToBase16 (val);
+                                       break;
+                               default:
+                                       throw new NotImplementedException ();
+                               }
                        }
 
-                       switch (toBase) {
-                       case 2:
-                               return ConvertToBase2 (val);
-                       case 8:
-                               return ConvertToBase8 (val);
-                       case 16:
-                               return ConvertToBase16 (val);
-                       default:
-                               throw new NotImplementedException ();
+                       var padding = width - sb.Length;
+                       while (padding > 0) {
+                               sb.Insert (0, paddingChar);
+                               --padding;
                        }
+
+                       return sb.ToString ();
                }
 
                static void EndianSwap (ref byte[] value)
@@ -259,7 +301,7 @@ namespace System {
                        value = buf;
                }
 
-               static string ConvertToBase2 (byte[] value)
+               static StringBuilder ConvertToBase2 (byte[] value)
                {
                        if (!BitConverter.IsLittleEndian)
                                EndianSwap (ref value);
@@ -277,10 +319,10 @@ namespace System {
                                        b <<= 1;
                                }
                        }
-                       return sb.ToString ();
+                       return sb;
                }
 
-               static string ConvertToBase8 (byte[] value)
+               static StringBuilder ConvertToBase8 (byte[] value)
                {
                        ulong l = 0;
                        switch (value.Length) {
@@ -309,10 +351,10 @@ namespace System {
                                        sb.Append (val);
                                }
                        }
-                       return sb.ToString ();
+                       return sb;
                }
 
-               static string ConvertToBase16 (byte[] value)
+               static StringBuilder ConvertToBase16 (byte[] value)
                {
                        if (!BitConverter.IsLittleEndian)
                                EndianSwap (ref value);
@@ -340,8 +382,8 @@ namespace System {
                                        sb.Append (low);
                                }
                        }
-                       return sb.ToString ();
+                       return sb;
                }
 
     }
-}
\ No newline at end of file
+}
diff --git a/mcs/class/corlib/ReferenceSources/TimeZoneInfoOptions.cs b/mcs/class/corlib/ReferenceSources/TimeZoneInfoOptions.cs
new file mode 100644 (file)
index 0000000..50ce810
--- /dev/null
@@ -0,0 +1,8 @@
+namespace System
+{
+    [Flags]
+    internal enum TimeZoneInfoOptions {
+        None                      = 1,
+        NoThrowOnInvalidTime      = 2
+    };
+}
\ No newline at end of file
diff --git a/mcs/class/corlib/ReferenceSources/mscorlib.txt.cs b/mcs/class/corlib/ReferenceSources/mscorlib.txt.cs
new file mode 100644 (file)
index 0000000..3363402
--- /dev/null
@@ -0,0 +1,3510 @@
+/*
+
+Extracted from https://github.com/dotnet/coreclr/blob/master/src/mscorlib/src/mscorlib.txt
+
+       var res = File.ReadAllLines (input_file).Select (l => {
+               if (l.Length == 0 || l.StartsWith ("#"))
+                       return l;
+
+               if (l.StartsWith (";"))
+                       return "// " + l;
+
+               return "case \"" + l.Replace ("\"", "\\\"").Replace ("= ", "=").Replace (" =", "=").Replace ("=", "\": return \"") + "\";";
+       });
+
+*/
+
+#define INCLUDE_RUNTIME
+#define INCLUDE_DEBUG
+#define FEATURE_MACL
+#define FEATURE_IDENTITY_REFERENCE
+#define FEATURE_COMINTEROP
+#define FEATURE_CRYPTO
+#define FEATURE_REMOTING
+#define FEATURE_SERIALIZATION
+
+static class Messages
+{
+       public static string GetMessage (string id) {
+               switch (id) {
+
+// ;==++==
+// ;
+// ;   Copyright (c) Microsoft Corporation.  All rights reserved.
+// ;
+// ;==--==
+// ;
+// ; These are the managed resources for mscorlib.dll.
+// ; See those first three bytes in the file?  This is in UTF-8.  Leave the
+// ; Unicode byte order mark (U+FEFF) written in UTF-8 at the start of this file.
+
+// ; For resource info, see the ResourceManager documentation and the ResGen tool,
+// ; which is a managed app using ResourceWriter.
+// ; ResGen now supports C++ & C# style #ifdef's, like #ifndef FOO and #if BAR
+
+// ; The naming scheme is: [Namespace.] ExceptionName _ Reason
+// ; We'll suppress "System." where possible.
+// ; Examples:
+// ; Argument_Null
+// ; Reflection.TargetInvokation_someReason
+
+// ; Usage Notes:
+// ; * Keep exceptions in alphabetical order by package
+// ; * A single space may exist on either side of the equal sign.
+// ; * Follow the naming conventions.
+// ; * Any lines starting with a '#' or ';' are ignored
+// ; * Equal signs aren't legal characters for keys, but may occur in values.
+// ; * Correctly punctuate all sentences. Most resources should end in a period.
+// ;       Remember, your mother will probably read some of these messages.
+// ; * You may use " (quote), \n and \t. Use \\ for a single '\' character.
+// ; * String inserts work.  i.e., BadNumber_File = Wrong number in file "{0}".
+
+// ; Real words, used by code like Environment.StackTrace
+#if INCLUDE_RUNTIME
+case "Word_At": return "at";
+case "StackTrace_InFileLineNumber": return "in {0}:line {1}";
+case "UnknownError_Num": return "Unknown error \"{0}\".";
+case "AllocatedFrom": return "Allocated from:";
+
+// ; Note this one is special, used as a divider between stack traces!
+case "Exception_EndOfInnerExceptionStack": return "--- End of inner exception stack trace ---";
+case "Exception_WasThrown": return "Exception of type '{0}' was thrown.";
+
+// ; The following are used in the implementation of ExceptionDispatchInfo
+case "Exception_EndStackTraceFromPreviousThrow": return "--- End of stack trace from previous location where exception was thrown ---";
+
+case "Arg_ParamName_Name": return "Parameter name: {0}";
+case "ArgumentOutOfRange_ActualValue": return "Actual value was {0}.";
+
+#endif // INCLUDE_RUNTIME
+
+#if !FEATURE_CORECLR
+case "UnknownError": return "Unknown error.";
+#endif // !FEATURE_CORECLR
+
+#if INCLUDE_DEBUG
+
+// ; For code contracts
+case "AssumptionFailed": return "Assumption failed.";
+case "AssumptionFailed_Cnd": return "Assumption failed: {0}";
+case "AssertionFailed": return "Assertion failed.";
+case "AssertionFailed_Cnd": return "Assertion failed: {0}";
+case "PreconditionFailed": return "Precondition failed.";
+case "PreconditionFailed_Cnd": return "Precondition failed: {0}";
+case "PostconditionFailed": return "Postcondition failed.";
+case "PostconditionFailed_Cnd": return "Postcondition failed: {0}";
+case "PostconditionOnExceptionFailed": return "Postcondition failed after throwing an exception.";
+case "PostconditionOnExceptionFailed_Cnd": return "Postcondition failed after throwing an exception: {0}";
+case "InvariantFailed": return "Invariant failed.";
+case "InvariantFailed_Cnd": return "Invariant failed: {0}";
+#if PLATFORM_UNIX
+case "StackTrace_Stack": return "Stack trace: \n{0}";
+#endif
+#if !PLATFORM_UNIX
+case "StackTrace_Stack": return "Stack trace: \r\n{0}";
+#endif // PLATFORM_UNIX
+case "MustUseCCRewrite": return "An assembly (probably \"{1}\") must be rewritten using the code contracts binary rewriter (CCRewrite) because it is calling Contract.{0} and the CONTRACTS_FULL symbol is defined.  Remove any explicit definitions of the CONTRACTS_FULL symbol from your project and rebuild.";
+
+// ; Access Control
+#if FEATURE_MACL
+case "AccessControl_MustSpecifyContainerAcl": return "The named parameter must be a container ACL.";
+case "AccessControl_MustSpecifyLeafObjectAcl": return "The named parameter must be a non-container ACL.";
+case "AccessControl_AclTooLong": return "Length of the access control list exceed the allowed maximum.";
+case "AccessControl_MustSpecifyDirectoryObjectAcl": return "The named parameter must be a directory-object ACL.";
+case "AccessControl_MustSpecifyNonDirectoryObjectAcl": return "The named parameter must be a non-directory-object ACL.";
+case "AccessControl_InvalidSecurityDescriptorRevision": return "Security descriptor with revision other than '1' are not legal.";
+case "AccessControl_InvalidSecurityDescriptorSelfRelativeForm": return "Security descriptor must be in the self-relative form.";
+case "AccessControl_NoAssociatedSecurity": return "Unable to perform a security operation on an object that has no associated security. This can happen when trying to get an ACL of an anonymous kernel object.";
+case "AccessControl_InvalidHandle": return "The supplied handle is invalid. This can happen when trying to set an ACL on an anonymous kernel object.";
+case "AccessControl_UnexpectedError": return "Method failed with unexpected error code {0}.";
+case "AccessControl_InvalidSidInSDDLString": return "The SDDL string contains an invalid sid or a sid that cannot be translated.";
+case "AccessControl_InvalidOwner": return "The security identifier is not allowed to be the owner of this object.";
+case "AccessControl_InvalidGroup": return "The security identifier is not allowed to be the primary group of this object.";
+case "AccessControl_InvalidAccessRuleType": return "The access rule is not the correct type.";
+case "AccessControl_InvalidAuditRuleType": return "The audit rule is not the correct type.";
+#endif  // FEATURE_MACL
+
+// ; Identity Reference Library
+#if FEATURE_IDENTITY_REFERENCE
+case "IdentityReference_IdentityNotMapped": return "Some or all identity references could not be translated.";
+case "IdentityReference_MustBeIdentityReference": return "The targetType parameter must be of IdentityReference type.";
+case "IdentityReference_AccountNameTooLong": return "Account name is too long.";
+case "IdentityReference_DomainNameTooLong": return "Domain name is too long.";
+case "IdentityReference_InvalidNumberOfSubauthorities": return "The number of sub-authorities must not exceed {0}.";
+case "IdentityReference_IdentifierAuthorityTooLarge": return "The size of the identifier authority must not exceed 6 bytes.";
+case "IdentityReference_InvalidSidRevision": return "SIDs with revision other than '1' are not supported.";
+case "IdentityReference_CannotCreateLogonIdsSid": return "Well-known SIDs of type LogonIdsSid cannot be created.";
+case "IdentityReference_DomainSidRequired": return "The domainSid parameter must be specified for creating well-known SID of type {0}.";
+case "IdentityReference_NotAWindowsDomain": return "The domainSid parameter is not a valid Windows domain SID.";
+#endif // FEATURE_IDENTITY_REFERENCE
+
+// ; AccessException
+case "Acc_CreateGeneric": return "Cannot create a type for which Type.ContainsGenericParameters is true.";
+case "Acc_CreateAbst": return "Cannot create an abstract class.";
+case "Acc_CreateInterface": return "Cannot create an instance of an interface.";
+case "Acc_NotClassInit": return "Type initializer was not callable.";
+case "Acc_CreateGenericEx": return "Cannot create an instance of {0} because Type.ContainsGenericParameters is true.";
+case "Acc_CreateArgIterator": return "Cannot dynamically create an instance of ArgIterator.";
+case "Acc_CreateAbstEx": return "Cannot create an instance of {0} because it is an abstract class.";
+case "Acc_CreateInterfaceEx": return "Cannot create an instance of {0} because it is an interface.";
+case "Acc_CreateVoid": return "Cannot dynamically create an instance of System.Void.";
+case "Acc_ReadOnly": return "Cannot set a constant field.";
+case "Acc_RvaStatic": return "SkipVerification permission is needed to modify an image-based (RVA) static field.";
+case "Access_Void": return "Cannot create an instance of void.";
+
+// ; ArgumentException
+case "Arg_TypedReference_Null": return "The TypedReference must be initialized.";
+case "Argument_AddingDuplicate__": return "Item has already been added. Key in dictionary: '{0}'  Key being added: '{1}'";
+case "Argument_AddingDuplicate": return "An item with the same key has already been added.";
+case "Argument_MethodDeclaringTypeGenericLcg": return "Method '{0}' has a generic declaring type '{1}'. Explicitly provide the declaring type to GetTokenFor. ";
+case "Argument_MethodDeclaringTypeGeneric": return "Cannot resolve method {0} because the declaring type of the method handle {1} is generic. Explicitly provide the declaring type to GetMethodFromHandle. ";
+case "Argument_FieldDeclaringTypeGeneric": return "Cannot resolve field {0} because the declaring type of the field handle {1} is generic. Explicitly provide the declaring type to GetFieldFromHandle.";
+case "Argument_ApplicationTrustShouldHaveIdentity": return "An ApplicationTrust must have an application identity before it can be persisted.";
+case "Argument_ConversionOverflow": return "Conversion buffer overflow.";
+case "Argument_CodepageNotSupported": return "{0} is not a supported code page.";
+case "Argument_CultureNotSupported": return "Culture is not supported.";
+case "Argument_CultureInvalidIdentifier": return "{0} is an invalid culture identifier.";
+case "Argument_OneOfCulturesNotSupported": return "Culture name {0} or {1} is not supported.";
+case "Argument_CultureIetfNotSupported": return "Culture IETF Name {0} is not a recognized IETF name.";
+case "Argument_CultureIsNeutral": return "Culture ID {0} (0x{0:X4}) is a neutral culture; a region cannot be created from it.";
+case "Argument_InvalidNeutralRegionName": return "The region name {0} should not correspond to neutral culture; a specific culture name is required.";
+case "Argument_InvalidGenericInstArray": return "Generic arguments must be provided for each generic parameter and each generic argument must be a RuntimeType.";
+case "Argument_GenericArgsCount": return "The number of generic arguments provided doesn't equal the arity of the generic type definition.";
+case "Argument_CultureInvalidFormat": return "Culture '{0}' is a neutral culture. It cannot be used in formatting and parsing and therefore cannot be set as the thread's current culture.";
+case "Argument_CompareOptionOrdinal": return "CompareOption.Ordinal cannot be used with other options.";
+case "Argument_CustomCultureCannotBePassedByNumber": return "Customized cultures cannot be passed by LCID, only by name.";
+case "Argument_EncodingConversionOverflowChars": return "The output char buffer is too small to contain the decoded characters, encoding '{0}' fallback '{1}'.";
+case "Argument_EncodingConversionOverflowBytes": return "The output byte buffer is too small to contain the encoded data, encoding '{0}' fallback '{1}'.";
+case "Argument_EncoderFallbackNotEmpty": return "Must complete Convert() operation or call Encoder.Reset() before calling GetBytes() or GetByteCount(). Encoder '{0}' fallback '{1}'.";
+case "Argument_EmptyFileName": return "Empty file name is not legal.";
+case "Argument_EmptyPath": return "Empty path name is not legal.";
+case "Argument_EmptyName": return "Empty name is not legal.";
+case "Argument_ImplementIComparable": return "At least one object must implement IComparable.";
+case "Argument_InvalidType": return "The type of arguments passed into generic comparer methods is invalid.";
+case "Argument_InvalidTypeForCA": return "Cannot build type parameter for custom attribute with a type that does not support the AssemblyQualifiedName property. The type instance supplied was of type '{0}'.";
+case "Argument_IllegalEnvVarName": return "Environment variable name cannot contain equal character.";
+case "Argument_IllegalAppId": return "Application identity does not have same number of components as manifest paths.";
+case "Argument_IllegalAppBase": return "The application base specified is not valid.";
+case "Argument_UnableToParseManifest": return "Unexpected error while parsing the specified manifest.";
+case "Argument_IllegalAppIdMismatch": return "Application identity does not match identities in manifests.";
+case "Argument_InvalidAppId": return "Invalid identity: no deployment or application identity specified.";
+case "Argument_InvalidGenericArg": return "The generic type parameter was not valid";
+case "Argument_InvalidArrayLength": return "Length of the array must be {0}.";
+case "Argument_InvalidArrayType": return "Target array type is not compatible with the type of items in the collection.";
+case "Argument_InvalidAppendMode": return "Append access can be requested only in write-only mode.";
+case "Argument_InvalidEnumValue": return "The value '{0}' is not valid for this usage of the type {1}.";
+case "Argument_EnumIsNotIntOrShort": return "The underlying type of enum argument must be Int32 or Int16.";
+case "Argument_InvalidEnum": return "The Enum type should contain one and only one instance field.";
+case "Argument_InvalidKeyStore": return "'{0}' is not a valid KeyStore name. ";
+case "Argument_InvalidFileMode&AccessCombo": return "Combining FileMode: {0} with FileAccess: {1} is invalid.";
+case "Argument_InvalidFileMode&RightsCombo": return "Combining FileMode: {0} with FileSystemRights: {1} is invalid.";
+case "Argument_InvalidFileModeTruncate&RightsCombo": return "Combining FileMode: {0} with FileSystemRights: {1} is invalid. FileMode.Truncate is valid only when used with FileSystemRights.Write.";
+case "Argument_InvalidFlag": return "Value of flags is invalid.";
+case "Argument_InvalidAnyFlag": return "No flags can be set.";
+case "Argument_InvalidHandle": return "The handle is invalid.";
+case "Argument_InvalidRegistryKeyPermissionCheck": return "The specified RegistryKeyPermissionCheck value is invalid.";
+case "Argument_InvalidRegistryOptionsCheck": return "The specified RegistryOptions value is invalid.";
+case "Argument_InvalidRegistryViewCheck": return "The specified RegistryView value is invalid.";
+case "Argument_InvalidSubPath": return "The directory specified, '{0}', is not a subdirectory of '{1}'.";
+case "Argument_NoRegionInvariantCulture": return "There is no region associated with the Invariant Culture (Culture ID: 0x7F).";
+case "Argument_ResultCalendarRange": return "The result is out of the supported range for this calendar. The result should be between {0} (Gregorian date) and {1} (Gregorian date), inclusive.";
+case "Argument_ResultIslamicCalendarRange": return "The date is out of the supported range for the Islamic calendar. The date should be greater than July 18th, 622 AD (Gregorian date).";
+case "Argument_NeverValidGenericArgument": return "The type '{0}' may not be used as a type argument.";
+case "Argument_NotEnoughGenArguments": return "The type or method has {1} generic parameter(s), but {0} generic argument(s) were provided. A generic argument must be provided for each generic parameter.";
+case "Argument_NullFullTrustAssembly": return "A null StrongName was found in the full trust assembly list.";
+case "Argument_GenConstraintViolation": return "GenericArguments[{0}], '{1}', on '{2}' violates the constraint of type '{3}'.";
+case "Argument_InvalidToken": return "Token {0:x} is not valid in the scope of module {1}.";
+case "Argument_InvalidTypeToken": return "Token {0:x} is not a valid Type token.";
+case "Argument_ResolveType": return "Token {0:x} is not a valid Type token in the scope of module {1}.";
+case "Argument_ResolveMethod": return "Token {0:x} is not a valid MethodBase token in the scope of module {1}.";
+case "Argument_ResolveField": return "Token {0:x} is not a valid FieldInfo token in the scope of module {1}.";
+case "Argument_ResolveMember": return "Token {0:x} is not a valid MemberInfo token in the scope of module {1}.";
+case "Argument_ResolveString": return "Token {0:x} is not a valid string token in the scope of module {1}.";
+case "Argument_ResolveModuleType": return "Token {0} resolves to the special module type representing this module.";
+case "Argument_ResolveMethodHandle": return "Type handle '{0}' and method handle with declaring type '{1}' are incompatible. Get RuntimeMethodHandle and declaring RuntimeTypeHandle off the same MethodBase.";
+case "Argument_ResolveFieldHandle": return "Type handle '{0}' and field handle with declaring type '{1}' are incompatible. Get RuntimeFieldHandle and declaring RuntimeTypeHandle off the same FieldInfo.";
+case "Argument_ResourceScopeWrongDirection": return "Resource type in the ResourceScope enum is going from a more restrictive resource type to a more general one.  From: \"{0}\"  To: \"{1}\"";
+case "Argument_BadResourceScopeTypeBits": return "Unknown value for the ResourceScope: {0}  Too many resource type bits may be set.";
+case "Argument_BadResourceScopeVisibilityBits": return "Unknown value for the ResourceScope: {0}  Too many resource visibility bits may be set.";
+case "Argument_WaitHandleNameTooLong": return "The name can be no more than 260 characters in length.";
+case "Argument_EnumTypeDoesNotMatch": return "The argument type, '{0}', is not the same as the enum type '{1}'.";
+case "InvalidOperation_MethodBuilderBaked": return "The signature of the MethodBuilder can no longer be modified because an operation on the MethodBuilder caused the methodDef token to be created. For example, a call to SetCustomAttribute requires the methodDef token to emit the CustomAttribute token.";
+case "InvalidOperation_GenericParametersAlreadySet": return "The generic parameters are already defined on this MethodBuilder.";
+case "Arg_AccessException": return "Cannot access member.";
+case "Arg_AppDomainUnloadedException": return "Attempted to access an unloaded AppDomain.";
+case "Arg_ApplicationException": return "Error in the application.";
+case "Arg_ArgumentOutOfRangeException": return "Specified argument was out of the range of valid values.";
+case "Arg_ArithmeticException": return "Overflow or underflow in the arithmetic operation.";
+case "Arg_ArrayLengthsDiffer": return "Array lengths must be the same.";
+case "Arg_ArrayPlusOffTooSmall": return "Destination array is not long enough to copy all the items in the collection. Check array index and length.";
+case "Arg_ArrayTypeMismatchException": return "Attempted to access an element as a type incompatible with the array.";
+case "Arg_BadImageFormatException": return "Format of the executable (.exe) or library (.dll) is invalid.";
+case "Argument_BadImageFormatExceptionResolve": return "A BadImageFormatException has been thrown while parsing the signature. This is likely due to lack of a generic context. Ensure genericTypeArguments and genericMethodArguments are provided and contain enough context.";
+case "Arg_BufferTooSmall": return "Not enough space available in the buffer.";
+case "Arg_CATypeResolutionFailed": return "Failed to resolve type from string \"{0}\" which was embedded in custom attribute blob.";
+case "Arg_CannotHaveNegativeValue": return "String cannot contain a minus sign if the base is not 10.";
+case "Arg_CannotUnloadAppDomainException": return "Attempt to unload the AppDomain failed.";
+case "Arg_CannotMixComparisonInfrastructure": return "The usage of IKeyComparer and IHashCodeProvider/IComparer interfaces cannot be mixed; use one or the other.";
+case "Arg_ContextMarshalException": return "Attempted to marshal an object across a context boundary.";
+case "Arg_DataMisalignedException": return "A datatype misalignment was detected in a load or store instruction.";
+case "Arg_DevicesNotSupported": return "FileStream will not open Win32 devices such as disk partitions and tape drives. Avoid use of \"\\\\.\\\" in the path.";
+case "Arg_DuplicateWaitObjectException": return "Duplicate objects in argument.";
+case "Arg_EntryPointNotFoundException": return "Entry point was not found.";
+case "Arg_DllNotFoundException": return "Dll was not found.";
+case "Arg_ExecutionEngineException": return "Internal error in the runtime.";
+case "Arg_FieldAccessException": return "Attempted to access a field that is not accessible by the caller.";
+case "Arg_FileIsDirectory_Name": return "The target file \"{0}\" is a directory, not a file.";
+case "Arg_FormatException": return "One of the identified items was in an invalid format.";
+case "Arg_IndexOutOfRangeException": return "Index was outside the bounds of the array.";
+case "Arg_InsufficientExecutionStackException": return "Insufficient stack to continue executing the program safely. This can happen from having too many functions on the call stack or function on the stack using too much stack space.";
+case "Arg_InvalidCastException": return "Specified cast is not valid.";
+case "Arg_InvalidOperationException": return "Operation is not valid due to the current state of the object.";
+case "Arg_CorruptedCustomCultureFile": return "The file of the custom culture {0} is corrupt. Try to unregister this culture.";
+case "Arg_InvokeMember": return "InvokeMember can be used only for COM objects.";
+case "Arg_InvalidNeutralResourcesLanguage_Asm_Culture": return "The NeutralResourcesLanguageAttribute on the assembly \"{0}\" specifies an invalid culture name: \"{1}\".";
+case "Arg_InvalidNeutralResourcesLanguage_FallbackLoc": return "The NeutralResourcesLanguageAttribute specifies an invalid or unrecognized ultimate resource fallback location: \"{0}\".";
+case "Arg_InvalidSatelliteContract_Asm_Ver": return "Satellite contract version attribute on the assembly '{0}' specifies an invalid version: {1}.";
+case "Arg_MethodAccessException": return "Attempt to access the method failed.";
+case "Arg_MethodAccessException_WithMethodName": return "Attempt to access the method \"{0}\" on type \"{1}\" failed.";
+case "Arg_MethodAccessException_WithCaller": return "Attempt by security transparent method '{0}' to access security critical method '{1}' failed.";
+case "Arg_MissingFieldException": return "Attempted to access a non-existing field.";
+case "Arg_MissingMemberException": return "Attempted to access a missing member.";
+case "Arg_MissingMethodException": return "Attempted to access a missing method.";
+case "Arg_MulticastNotSupportedException": return "Attempted to add multiple callbacks to a delegate that does not support multicast.";
+case "Arg_NotFiniteNumberException": return "Number encountered was not a finite quantity.";
+case "Arg_NotSupportedException": return "Specified method is not supported.";
+case "Arg_UnboundGenParam": return "Late bound operations cannot be performed on types or methods for which ContainsGenericParameters is true.";
+case "Arg_UnboundGenField": return "Late bound operations cannot be performed on fields with types for which Type.ContainsGenericParameters is true.";
+case "Arg_NotGenericParameter": return "Method may only be called on a Type for which Type.IsGenericParameter is true.";
+case "Arg_GenericParameter": return "Method must be called on a Type for which Type.IsGenericParameter is false.";
+case "Arg_NotGenericTypeDefinition": return "{0} is not a GenericTypeDefinition. MakeGenericType may only be called on a type for which Type.IsGenericTypeDefinition is true.";
+case "Arg_NotGenericMethodDefinition": return "{0} is not a GenericMethodDefinition. MakeGenericMethod may only be called on a method for which MethodBase.IsGenericMethodDefinition is true.";
+case "Arg_BadLiteralFormat": return "Encountered an invalid type for a default value.";
+case "Arg_MissingActivationArguments": return "The AppDomainSetup must specify the activation arguments for this call.";
+case "Argument_BadParameterTypeForCAB": return "Cannot emit a CustomAttribute with argument of type {0}.";
+case "Argument_InvalidMemberForNamedArgument": return "The member must be either a field or a property.";
+case "Argument_InvalidTypeName": return "The name of the type is invalid.";
+
+// ; Note - don't change the NullReferenceException default message. This was
+// ; negotiated carefully with the VB team to avoid saying "null" or "nothing".
+case "Arg_NullReferenceException": return "Object reference not set to an instance of an object.";
+
+case "Arg_AccessViolationException": return "Attempted to read or write protected memory. This is often an indication that other memory is corrupt.";
+case "Arg_OverflowException": return "Arithmetic operation resulted in an overflow.";
+case "Arg_PathGlobalRoot": return "Paths that begin with \\\\?\\GlobalRoot are internal to the kernel and should not be opened by managed applications.";
+case "Arg_PathIllegal": return "The path is not of a legal form.";
+case "Arg_PathIllegalUNC": return "The UNC path should be of the form \\\\server\\share.";
+case "Arg_RankException": return "Attempted to operate on an array with the incorrect number of dimensions.";
+case "Arg_RankMultiDimNotSupported": return "Only single dimensional arrays are supported for the requested action.";
+case "Arg_NonZeroLowerBound": return "The lower bound of target array must be zero.";
+case "Arg_RegSubKeyValueAbsent": return "No value exists with that name.";
+case "Arg_ResourceFileUnsupportedVersion": return "The ResourceReader class does not know how to read this version of .resources files. Expected version: {0}  This file: {1}";
+case "Arg_ResourceNameNotExist": return "The specified resource name \"{0}\" does not exist in the resource file.";
+case "Arg_SecurityException": return "Security error.";
+case "Arg_SerializationException": return "Serialization error.";
+case "Arg_StackOverflowException": return "Operation caused a stack overflow.";
+case "Arg_SurrogatesNotAllowedAsSingleChar": return "Unicode surrogate characters must be written out as pairs together in the same call, not individually. Consider passing in a character array instead.";
+case "Arg_SynchronizationLockException": return "Object synchronization method was called from an unsynchronized block of code.";
+case "Arg_RWLockRestoreException": return "ReaderWriterLock.RestoreLock was called without releasing all locks acquired since the call to ReleaseLock.";
+case "Arg_SystemException": return "System error.";
+case "Arg_TimeoutException": return "The operation has timed out.";
+case "Arg_UnauthorizedAccessException": return "Attempted to perform an unauthorized operation.";
+case "Arg_ArgumentException": return "Value does not fall within the expected range.";
+case "Arg_DirectoryNotFoundException": return "Attempted to access a path that is not on the disk.";
+case "Arg_DriveNotFoundException": return "Attempted to access a drive that is not available.";
+case "Arg_EndOfStreamException": return "Attempted to read past the end of the stream.";
+case "Arg_HexStyleNotSupported": return "The number style AllowHexSpecifier is not supported on floating point data types.";
+case "Arg_IOException": return "I/O error occurred.";
+case "Arg_InvalidHexStyle": return "With the AllowHexSpecifier bit set in the enum bit field, the only other valid bits that can be combined into the enum value must be a subset of those in HexNumber.";
+case "Arg_KeyNotFound": return "The given key was not present in the dictionary.";
+case "Argument_InvalidNumberStyles": return "An undefined NumberStyles value is being used.";
+case "Argument_InvalidDateTimeStyles": return "An undefined DateTimeStyles value is being used.";
+case "Argument_InvalidTimeSpanStyles": return "An undefined TimeSpanStyles value is being used.";
+case "Argument_DateTimeOffsetInvalidDateTimeStyles": return "The DateTimeStyles value 'NoCurrentDateDefault' is not allowed when parsing DateTimeOffset.";
+case "Argument_NativeResourceAlreadyDefined": return "Native resource has already been defined.";
+case "Argument_BadObjRef": return "Invalid ObjRef provided to '{0}'.";
+case "Argument_InvalidCultureName": return "Culture name '{0}' is not supported.";
+case "Argument_NameTooLong": return "The name '{0}' is too long to be a Culture or Region name, which is limited to {1} characters.";
+case "Argument_NameContainsInvalidCharacters": return "The name '{0}' contains characters that are not valid for a Culture or Region.";
+case "Argument_InvalidRegionName": return "Region name '{0}' is not supported.";
+case "Argument_CannotCreateTypedReference": return "Cannot use function evaluation to create a TypedReference object.";
+case "Arg_ArrayZeroError": return "Array must not be of length zero.";
+case "Arg_BogusIComparer": return "Unable to sort because the IComparer.Compare() method returns inconsistent results. Either a value does not compare equal to itself, or one value repeatedly compared to another value yields different results. IComparer: '{0}'.";
+case "Arg_CreatInstAccess": return "Cannot specify both CreateInstance and another access type.";
+case "Arg_CryptographyException": return "Error occurred during a cryptographic operation.";
+case "Arg_DateTimeRange": return "Combination of arguments to the DateTime constructor is out of the legal range.";
+case "Arg_DecBitCtor": return "Decimal byte array constructor requires an array of length four containing valid decimal bytes.";
+case "Arg_DlgtTargMeth": return "Cannot bind to the target method because its signature or security transparency is not compatible with that of the delegate type.";
+case "Arg_DlgtTypeMis": return "Delegates must be of the same type.";
+case "Arg_DlgtNullInst": return "Delegate to an instance method cannot have null 'this'.";
+case "Arg_DllInitFailure": return "One machine may not have remote administration enabled, or both machines may not be running the remote registry service.";
+case "Arg_EmptyArray": return "Array may not be empty.";
+case "Arg_EmptyOrNullArray": return "Array may not be empty or null.";
+case "Arg_EmptyCollection": return "Collection must not be empty.";
+case "Arg_EmptyOrNullString": return "String may not be empty or null.";
+case "Argument_ItemNotExist": return "The specified item does not exist in this KeyedCollection.";
+case "Argument_EncodingNotSupported": return "'{0}' is not a supported encoding name. For information on defining a custom encoding, see the documentation for the Encoding.RegisterProvider method.";
+case "Argument_FallbackBufferNotEmpty": return "Cannot change fallback when buffer is not empty. Previous Convert() call left data in the fallback buffer.";
+case "Argument_InvalidCodePageConversionIndex": return "Unable to translate Unicode character \\u{0:X4} at index {1} to specified code page.";
+case "Argument_InvalidCodePageBytesIndex": return "Unable to translate bytes {0} at index {1} from specified code page to Unicode.";
+case "Argument_RecursiveFallback": return "Recursive fallback not allowed for character \\u{0:X4}.";
+case "Argument_RecursiveFallbackBytes": return "Recursive fallback not allowed for bytes {0}.";
+case "Arg_EnumAndObjectMustBeSameType": return "Object must be the same type as the enum. The type passed in was '{0}'; the enum type was '{1}'.";
+case "Arg_EnumIllegalVal": return "Illegal enum value: {0}.";
+case "Arg_EnumNotSingleFlag": return "Must set exactly one flag.";
+case "Arg_EnumAtLeastOneFlag": return "Must set at least one flag.";
+case "Arg_EnumUnderlyingTypeAndObjectMustBeSameType": return "Enum underlying type and the object must be same type or object must be a String. Type passed in was '{0}'; the enum underlying type was '{1}'.";
+case "Arg_EnumFormatUnderlyingTypeAndObjectMustBeSameType": return "Enum underlying type and the object must be same type or object. Type passed in was '{0}'; the enum underlying type was '{1}'.";
+case "Arg_EnumMustHaveUnderlyingValueField": return "All enums must have an underlying value__ field.";
+case "Arg_COMAccess": return "Must specify property Set or Get or method call for a COM Object.";
+case "Arg_COMPropSetPut": return "Only one of the following binding flags can be set: BindingFlags.SetProperty, BindingFlags.PutDispProperty,  BindingFlags.PutRefDispProperty.";
+case "Arg_FldSetGet": return "Cannot specify both Get and Set on a field.";
+case "Arg_PropSetGet": return "Cannot specify both Get and Set on a property.";
+case "Arg_CannotBeNaN": return "TimeSpan does not accept floating point Not-a-Number values.";
+case "Arg_FldGetPropSet": return "Cannot specify both GetField and SetProperty.";
+case "Arg_FldSetPropGet": return "Cannot specify both SetField and GetProperty.";
+case "Arg_FldSetInvoke": return "Cannot specify Set on a Field and Invoke on a method.";
+case "Arg_FldGetArgErr": return "No arguments can be provided to Get a field value.";
+case "Arg_FldSetArgErr": return "Only the field value can be specified to set a field value.";
+case "Arg_GetMethNotFnd": return "Property Get method was not found.";
+case "Arg_GuidArrayCtor": return "Byte array for GUID must be exactly {0} bytes long.";
+case "Arg_HandleNotAsync": return "Handle does not support asynchronous operations. The parameters to the FileStream constructor may need to be changed to indicate that the handle was opened synchronously (that is, it was not opened for overlapped I/O).";
+case "Arg_HandleNotSync": return "Handle does not support synchronous operations. The parameters to the FileStream constructor may need to be changed to indicate that the handle was opened asynchronously (that is, it was opened explicitly for overlapped I/O).";
+case "Arg_HTCapacityOverflow": return "Hashtable's capacity overflowed and went negative. Check load factor, capacity and the current size of the table.";
+case "Arg_IndexMustBeInt": return "All indexes must be of type Int32.";
+case "Arg_InvalidConsoleColor": return "The ConsoleColor enum value was not defined on that enum. Please use a defined color from the enum.";
+case "Arg_InvalidFileAttrs": return "Invalid File or Directory attributes value.";
+case "Arg_InvalidHandle": return "Invalid handle.";
+case "Arg_InvalidTypeInSignature": return "The signature Type array contains some invalid type (i.e. null, void)";
+case "Arg_InvalidTypeInRetType": return "The return Type contains some invalid type (i.e. null, ByRef)";
+case "Arg_EHClauseNotFilter": return "This ExceptionHandlingClause is not a filter.";
+case "Arg_EHClauseNotClause": return "This ExceptionHandlingClause is not a clause.";
+case "Arg_ReflectionOnlyCA": return "It is illegal to reflect on the custom attributes of a Type loaded via ReflectionOnlyGetType (see Assembly.ReflectionOnly) -- use CustomAttributeData instead.";
+case "Arg_ReflectionOnlyInvoke": return "It is illegal to invoke a method on a Type loaded via ReflectionOnlyGetType.";
+case "Arg_ReflectionOnlyField": return "It is illegal to get or set the value on a field on a Type loaded via ReflectionOnlyGetType.";
+case "Arg_MemberInfoNullModule": return "The Module object containing the member cannot be null.";
+case "Arg_ParameterInfoNullMember": return "The MemberInfo object defining the parameter cannot be null.";
+case "Arg_ParameterInfoNullModule": return "The Module object containing the parameter cannot be null.";
+case "Arg_AssemblyNullModule": return "The manifest module of the assembly cannot be null.";
+case "Arg_LongerThanSrcArray": return "Source array was not long enough. Check srcIndex and length, and the array's lower bounds.";
+case "Arg_LongerThanDestArray": return "Destination array was not long enough. Check destIndex and length, and the array's lower bounds.";
+case "Arg_LowerBoundsMustMatch": return "The arrays' lower bounds must be identical.";
+case "Arg_MustBeBoolean": return "Object must be of type Boolean.";
+case "Arg_MustBeByte": return "Object must be of type Byte.";
+case "Arg_MustBeChar": return "Object must be of type Char.";
+case "Arg_MustBeDateTime": return "Object must be of type DateTime.";
+case "Arg_MustBeDateTimeOffset": return "Object must be of type DateTimeOffset.";
+case "Arg_MustBeDecimal": return "Object must be of type Decimal.";
+case "Arg_MustBeDelegate": return "Type must derive from Delegate.";
+case "Arg_MustBeDouble": return "Object must be of type Double.";
+case "Arg_MustBeDriveLetterOrRootDir": return "Object must be a root directory (\"C:\\\") or a drive letter (\"C\").";
+case "Arg_MustBeEnum": return "Type provided must be an Enum.";
+case "Arg_MustBeEnumBaseTypeOrEnum": return "The value passed in must be an enum base or an underlying type for an enum, such as an Int32.";
+case "Arg_MustBeGuid": return "Object must be of type GUID.";
+case "Arg_MustBeIdentityReferenceType": return "Type must be an IdentityReference, such as NTAccount or SecurityIdentifier.";
+case "Arg_MustBeInterface": return "Type passed must be an interface.";
+case "Arg_MustBeInt16": return "Object must be of type Int16.";
+case "Arg_MustBeInt32": return "Object must be of type Int32.";
+case "Arg_MustBeInt64": return "Object must be of type Int64.";
+case "Arg_MustBePrimArray": return "Object must be an array of primitives.";
+case "Arg_MustBePointer": return "Type must be a Pointer.";
+case "Arg_MustBeStatic": return "Method must be a static method.";
+case "Arg_MustBeString": return "Object must be of type String.";
+case "Arg_MustBeStringPtrNotAtom": return "The pointer passed in as a String must not be in the bottom 64K of the process's address space.";
+case "Arg_MustBeSByte": return "Object must be of type SByte.";
+case "Arg_MustBeSingle": return "Object must be of type Single.";
+case "Arg_MustBeTimeSpan": return "Object must be of type TimeSpan.";
+case "Arg_MustBeType": return "Type must be a type provided by the runtime.";
+case "Arg_MustBeUInt16": return "Object must be of type UInt16.";
+case "Arg_MustBeUInt32": return "Object must be of type UInt32.";
+case "Arg_MustBeUInt64": return "Object must be of type UInt64.";
+case "Arg_MustBeVersion": return "Object must be of type Version.";
+case "Arg_MustBeTrue": return "Argument must be true.";
+case "Arg_MustAllBeRuntimeType": return "At least one type argument is not a runtime type.";
+case "Arg_NamedParamNull": return "Named parameter value must not be null.";
+case "Arg_NamedParamTooBig": return "Named parameter array cannot be bigger than argument array.";
+case "Arg_Need1DArray": return "Array was not a one-dimensional array.";
+case "Arg_Need2DArray": return "Array was not a two-dimensional array.";
+case "Arg_Need3DArray": return "Array was not a three-dimensional array.";
+case "Arg_NeedAtLeast1Rank": return "Must provide at least one rank.";
+case "Arg_NoDefCTor": return "No parameterless constructor defined for this object.";
+case "Arg_BitArrayTypeUnsupported": return "Only supported array types for CopyTo on BitArrays are Boolean[], Int32[] and Byte[].";
+case "Arg_DivideByZero": return "Attempted to divide by zero.";
+case "Arg_NoAccessSpec": return "Must specify binding flags describing the invoke operation required (BindingFlags.InvokeMethod CreateInstance GetField SetField GetProperty SetProperty).";
+case "Arg_NoStaticVirtual": return "Method cannot be both static and virtual.";
+case "Arg_NotFoundIFace": return "Interface not found.";
+case "Arg_ObjObjEx": return "Object of type '{0}' cannot be converted to type '{1}'.";
+case "Arg_ObjObj": return "Object type cannot be converted to target type.";
+case "Arg_FieldDeclTarget": return "Field '{0}' defined on type '{1}' is not a field on the target object which is of type '{2}'.";
+case "Arg_OleAutDateInvalid": return "Not a legal OleAut date.";
+case "Arg_OleAutDateScale": return "OleAut date did not convert to a DateTime correctly.";
+case "Arg_PlatformNotSupported": return "Operation is not supported on this platform.";
+case "Arg_PlatformSecureString": return "SecureString is only supported on Windows 2000 SP3 and higher platforms.";
+case "Arg_ParmCnt": return "Parameter count mismatch.";
+case "Arg_ParmArraySize": return "Must specify one or more parameters.";
+case "Arg_Path2IsRooted": return "Second path fragment must not be a drive or UNC name.";
+case "Arg_PathIsVolume": return "Path must not be a drive.";
+case "Arg_PrimWiden": return "Cannot widen from source type to target type either because the source type is a not a primitive type or the conversion cannot be accomplished.";
+case "Arg_NullIndex": return "Arrays indexes must be set to an object instance.";
+case "Arg_VarMissNull": return "Missing parameter does not have a default value.";
+case "Arg_PropSetInvoke": return "Cannot specify Set on a property and Invoke on a method.";
+case "Arg_PropNotFound": return "Could not find the specified property.";
+case "Arg_RankIndices": return "Indices length does not match the array rank.";
+case "Arg_RanksAndBounds": return "Number of lengths and lowerBounds must match.";
+case "Arg_RegSubKeyAbsent": return "Cannot delete a subkey tree because the subkey does not exist.";
+case "Arg_RemoveArgNotFound": return "Cannot remove the specified item because it was not found in the specified Collection.";
+case "Arg_RegKeyDelHive": return "Cannot delete a registry hive's subtree.";
+case "Arg_RegKeyNoRemoteConnect": return "No remote connection to '{0}' while trying to read the registry.";
+case "Arg_RegKeyOutOfRange": return "Registry HKEY was out of the legal range.";
+case "Arg_RegKeyNotFound": return "The specified registry key does not exist.";
+case "Arg_RegKeyStrLenBug": return "Registry key names should not be greater than 255 characters.";
+case "Arg_RegValStrLenBug": return "Registry value names should not be greater than 16,383 characters.";
+case "Arg_RegBadKeyKind": return "The specified RegistryValueKind is an invalid value.";
+case "Arg_RegGetOverflowBug": return "RegistryKey.GetValue does not allow a String that has a length greater than Int32.MaxValue.";
+case "Arg_RegSetMismatchedKind": return "The type of the value object did not match the specified RegistryValueKind or the object could not be properly converted.";
+case "Arg_RegSetBadArrType": return "RegistryKey.SetValue does not support arrays of type '{0}'. Only Byte[] and String[] are supported.";
+case "Arg_RegSetStrArrNull": return "RegistryKey.SetValue does not allow a String[] that contains a null String reference.";
+case "Arg_RegInvalidKeyName": return "Registry key name must start with a valid base key name.";
+case "Arg_ResMgrNotResSet": return "Type parameter must refer to a subclass of ResourceSet.";
+case "Arg_SetMethNotFnd": return "Property set method not found.";
+case "Arg_TypeRefPrimitve": return "TypedReferences cannot be redefined as primitives.";
+case "Arg_UnknownTypeCode": return "Unknown TypeCode value.";
+case "Arg_VersionString": return "Version string portion was too short or too long.";
+case "Arg_NoITypeInfo": return "Specified TypeInfo was invalid because it did not support the ITypeInfo interface.";
+case "Arg_NoITypeLib": return "Specified TypeLib was invalid because it did not support the ITypeLib interface.";
+case "Arg_NoImporterCallback": return "Specified type library importer callback was invalid because it did not support the ITypeLibImporterNotifySink interface.";
+case "Arg_ImporterLoadFailure": return "The type library importer encountered an error during type verification. Try importing without class members.";
+case "Arg_InvalidBase": return "Invalid Base.";
+case "Arg_EnumValueNotFound": return "Requested value '{0}' was not found.";
+case "Arg_EnumLitValueNotFound": return "Literal value was not found.";
+case "Arg_MustContainEnumInfo": return "Must specify valid information for parsing in the string.";
+case "Arg_InvalidSearchPattern": return "Search pattern cannot contain \"..\" to move up directories and can be contained only internally in file/directory names, as in \"a..b\".";
+case "Arg_NegativeArgCount": return "Argument count must not be negative.";
+case "Arg_InvalidAccessEntry": return "Specified access entry is invalid because it is unrestricted. The global flags should be specified instead.";
+case "Arg_InvalidFileName": return "Specified file name was invalid.";
+case "Arg_InvalidFileExtension": return "Specified file extension was not a valid extension.";
+case "Arg_COMException": return "Error HRESULT E_FAIL has been returned from a call to a COM component.";
+case "Arg_ExternalException": return "External component has thrown an exception.";
+case "Arg_InvalidComObjectException": return "Attempt has been made to use a COM object that does not have a backing class factory.";
+case "Arg_InvalidOleVariantTypeException": return "Specified OLE variant was invalid.";
+case "Arg_MarshalDirectiveException": return "Marshaling directives are invalid.";
+case "Arg_MarshalAsAnyRestriction": return "AsAny cannot be used on return types, ByRef parameters, ArrayWithOffset, or parameters passed from unmanaged to managed.";
+case "Arg_NDirectBadObject": return "No PInvoke conversion exists for value passed to Object-typed parameter.";
+case "Arg_SafeArrayTypeMismatchException": return "Specified array was not of the expected type.";
+case "Arg_VTableCallsNotSupportedException": return "Attempted to make an early bound call on a COM dispatch-only interface.";
+case "Arg_SafeArrayRankMismatchException": return "Specified array was not of the expected rank.";
+case "Arg_AmbiguousMatchException": return "Ambiguous match found.";
+case "Arg_CustomAttributeFormatException": return "Binary format of the specified custom attribute was invalid.";
+case "Arg_InvalidFilterCriteriaException": return "Specified filter criteria was invalid.";
+case "Arg_TypeLoadNullStr": return "A null or zero length string does not represent a valid Type.";
+case "Arg_TargetInvocationException": return "Exception has been thrown by the target of an invocation.";
+case "Arg_TargetParameterCountException": return "Number of parameters specified does not match the expected number.";
+case "Arg_TypeAccessException": return "Attempt to access the type failed.";
+case "Arg_TypeLoadException": return "Failure has occurred while loading a type.";
+case "Arg_TypeUnloadedException": return "Type had been unloaded.";
+case "Arg_ThreadStateException": return "Thread was in an invalid state for the operation being executed.";
+case "Arg_ThreadStartException": return "Thread failed to start.";
+case "Arg_WrongAsyncResult": return "IAsyncResult object did not come from the corresponding async method on this type.";
+case "Arg_WrongType": return "The value \"{0}\" is not of type \"{1}\" and cannot be used in this generic collection.";
+case "Argument_InvalidArgumentForComparison": return "Type of argument is not compatible with the generic comparer.";
+case "Argument_ALSInvalidCapacity": return "Specified capacity must not be less than the current capacity.";
+case "Argument_ALSInvalidSlot": return "Specified slot number was invalid.";
+case "Argument_IdnIllegalName": return "Decoded string is not a valid IDN name.";
+case "Argument_IdnBadBidi": return "Left to right characters may not be mixed with right to left characters in IDN labels.";
+case "Argument_IdnBadLabelSize": return "IDN labels must be between 1 and 63 characters long.";
+case "Argument_IdnBadNameSize": return "IDN names must be between 1 and {0} characters long.";
+case "Argument_IdnBadPunycode": return "Invalid IDN encoded string.";
+case "Argument_IdnBadStd3": return "Label contains character '{0}' not allowed with UseStd3AsciiRules";
+case "Arg_InvalidANSIString": return "The ANSI string passed in could not be converted from the default ANSI code page to Unicode.";
+case "Arg_InvalidUTF8String": return "The UTF8 string passed in could not be converted to Unicode.";
+case "Argument_InvalidCharSequence": return "Invalid Unicode code point found at index {0}.";
+case "Argument_InvalidCharSequenceNoIndex": return "String contains invalid Unicode code points.";
+case "Argument_InvalidCalendar": return "Not a valid calendar for the given culture.";
+case "Argument_InvalidNormalizationForm": return "Invalid or unsupported normalization form.";
+case "Argument_InvalidPathChars": return "Illegal characters in path.";
+case "Argument_InvalidOffLen": return "Offset and length were out of bounds for the array or count is greater than the number of elements from index to the end of the source collection.";
+case "Argument_InvalidSeekOrigin": return "Invalid seek origin.";
+case "Argument_SeekOverflow": return "The specified seek offset '{0}' would result in a negative Stream position.";
+case "Argument_InvalidUnity": return "Invalid Unity type.";
+case "Argument_LongEnvVarName": return "Environment variable name cannot contain 1024 or more characters.";
+case "Argument_LongEnvVarValue": return "Environment variable name or value is too long.";
+case "Argument_StringFirstCharIsZero": return "The first char in the string is the null character.";
+case "Argument_OnlyMscorlib": return "Only mscorlib's assembly is valid.";
+case "Argument_PathEmpty": return "Path cannot be the empty string or all whitespace.";
+case "Argument_PathFormatNotSupported": return "The given path's format is not supported.";
+case "Argument_PathUriFormatNotSupported": return "URI formats are not supported.";
+case "Argument_TypeNameTooLong": return "Type name was too long. The fully qualified type name must be less than 1,024 characters.";
+case "Argument_StreamNotReadable": return "Stream was not readable.";
+case "Argument_StreamNotWritable": return "Stream was not writable.";
+case "Argument_InvalidNumberOfMembers": return "MemberData contains an invalid number of members.";
+case "Argument_InvalidValue": return "Value was invalid.";
+case "Argument_InvalidKey": return "Key was invalid.";
+case "Argument_MinMaxValue": return "'{0}' cannot be greater than {1}.";
+case "Argument_InvalidGroupSize": return "Every element in the value array should be between one and nine, except for the last element, which can be zero.";
+case "Argument_MustHaveAttributeBaseClass": return "Type passed in must be derived from System.Attribute or System.Attribute itself.";
+case "Argument_NoUninitializedStrings": return "Uninitialized Strings cannot be created.";
+case "Argument_UnequalMembers": return "Supplied MemberInfo does not match the expected type.";
+case "Argument_BadFormatSpecifier": return "Format specifier was invalid.";
+case "Argument_InvalidHighSurrogate": return "Found a high surrogate char without a following low surrogate at index: {0}. The input may not be in this encoding, or may not contain valid Unicode (UTF-16) characters.";
+case "Argument_InvalidLowSurrogate": return "Found a low surrogate char without a preceding high surrogate at index: {0}. The input may not be in this encoding, or may not contain valid Unicode (UTF-16) characters.";
+case "Argument_UnmatchingSymScope": return "Non-matching symbol scope.";
+case "Argument_NotInExceptionBlock": return "Not currently in an exception block.";
+case "Argument_BadExceptionCodeGen": return "Incorrect code generation for exception block.";
+case "Argument_NotExceptionType": return "Does not extend Exception.";
+case "Argument_DuplicateResourceName": return "Duplicate resource name within an assembly.";
+case "Argument_BadPersistableModuleInTransientAssembly": return "Cannot have a persistable module in a transient assembly.";
+case "Argument_InvalidPermissionState": return "Invalid permission state.";
+case "Argument_UnrestrictedIdentityPermission": return "Identity permissions cannot be unrestricted.";
+case "Argument_WrongType": return "Operation on type '{0}' attempted with target of incorrect type.";
+case "Argument_IllegalZone": return "Illegal security permission zone specified.";
+case "Argument_HasToBeArrayClass": return "Must be an array type.";
+case "Argument_InvalidDirectory": return "Invalid directory, '{0}'.";
+case "Argument_DataLengthDifferent": return "Parameters 'members' and 'data' must have the same length.";
+case "Argument_SigIsFinalized": return "Completed signature cannot be modified.";
+case "Argument_ArraysInvalid": return "Array or pointer types are not valid.";
+case "Argument_GenericsInvalid": return "Generic types are not valid.";
+case "Argument_LargeInteger": return "Integer or token was too large to be encoded.";
+case "Argument_BadSigFormat": return "Incorrect signature format.";
+case "Argument_UnmatchedMethodForLocal": return "Local passed in does not belong to this ILGenerator.";
+case "Argument_DuplicateName": return "Tried to add NamedPermissionSet with non-unique name.";
+case "Argument_InvalidXMLElement": return "Invalid XML. Missing required tag <{0}> for type '{1}'.";
+case "Argument_InvalidXMLMissingAttr": return "Invalid XML. Missing required attribute '{0}'.";
+case "Argument_CannotGetTypeTokenForByRef": return "Cannot get TypeToken for a ByRef type.";
+case "Argument_NotASimpleNativeType": return "The UnmanagedType passed to DefineUnmanagedMarshal is not a simple type. None of the following values may be used: UnmanagedType.ByValTStr, UnmanagedType.SafeArray, UnmanagedType.ByValArray, UnmanagedType.LPArray, UnmanagedType.CustomMarshaler.";
+case "Argument_NotACustomMarshaler": return "Not a custom marshal.";
+case "Argument_NoUnmanagedElementCount": return "Unmanaged marshal does not have ElementCount.";
+case "Argument_NoNestedMarshal": return "Only LPArray or SafeArray has nested unmanaged marshal.";
+case "Argument_InvalidXML": return "Invalid Xml.";
+case "Argument_NoUnderlyingCCW": return "The object has no underlying COM data associated with it.";
+case "Argument_BadFieldType": return "Bad field type in defining field.";
+case "Argument_InvalidXMLBadVersion": return "Invalid Xml - can only parse elements of version one.";
+case "Argument_NotAPermissionElement": return "'elem' was not a permission element.";
+case "Argument_NPMSInvalidName": return "Name can be neither null nor empty.";
+case "Argument_InvalidElementTag": return "Invalid element tag '{0}'.";
+case "Argument_InvalidElementText": return "Invalid element text '{0}'.";
+case "Argument_InvalidElementName": return "Invalid element name '{0}'.";
+case "Argument_InvalidElementValue": return "Invalid element value '{0}'.";
+case "Argument_AttributeNamesMustBeUnique": return "Attribute names must be unique.";
+#if FEATURE_CAS_POLICY
+case "Argument_UninitializedCertificate": return "Uninitialized certificate object.";
+case "Argument_MembershipConditionElement": return "Element must be a <IMembershipCondition> element.";
+case "Argument_ReservedNPMS": return "Cannot remove or modify reserved permissions set '{0}'.";
+case "Argument_NPMSInUse": return "Permission set '{0}' was in use and could not be deleted.";
+case "Argument_StrongNameGetPublicKey": return "Unable to obtain public key for StrongNameKeyPair.";
+case "Argument_SiteCannotBeNull": return "Site name must be specified.";
+case "Argument_BlobCannotBeNull": return "Public key must be specified.";
+case "Argument_ZoneCannotBeNull": return "Zone must be specified.";
+case "Argument_UrlCannotBeNull": return "URL must be specified.";
+case "Argument_NoNPMS": return "Unable to find a permission set with the provided name.";
+case "Argument_FailedCodeGroup": return "Failed to create a code group of type '{0}'.";
+case "Argument_CodeGroupChildrenMustBeCodeGroups": return "All objects in the input list must have a parent type of 'CodeGroup'.";
+#endif // FEATURE_CAS_POLICY
+#if FEATURE_IMPERSONATION
+case "Argument_InvalidPrivilegeName": return "Privilege '{0}' is not valid on this system.";
+case "Argument_TokenZero": return "Token cannot be zero.";
+case "Argument_InvalidImpersonationToken": return "Invalid token for impersonation - it cannot be duplicated.";
+case "Argument_ImpersonateUser": return "Unable to impersonate user.";
+#endif // FEATURE_IMPERSONATION
+case "Argument_InvalidHexFormat": return "Improperly formatted hex string.";
+case "Argument_InvalidSite": return "Invalid site.";
+case "Argument_InterfaceMap": return "'this' type cannot be an interface itself.";
+case "Argument_ArrayGetInterfaceMap": return "Interface maps for generic interfaces on arrays cannot be retrived.";
+case "Argument_InvalidName": return "Invalid name.";
+case "Argument_InvalidDirectoryOnUrl": return "Invalid directory on URL.";
+case "Argument_InvalidUrl": return "Invalid URL.";
+case "Argument_InvalidKindOfTypeForCA": return "This type cannot be represented as a custom attribute.";
+case "Argument_MustSupplyContainer": return "When supplying a FieldInfo for fixing up a nested type, a valid ID for that containing object must also be supplied.";
+case "Argument_MustSupplyParent": return "When supplying the ID of a containing object, the FieldInfo that identifies the current field within that object must also be supplied.";
+case "Argument_NoClass": return "Element does not specify a class.";
+case "Argument_WrongElementType": return "'{0}' element required.";
+case "Argument_UnableToGeneratePermissionSet": return "Unable to generate permission set; input XML may be malformed.";
+case "Argument_NoEra": return "No Era was supplied.";
+case "Argument_AssemblyAlreadyFullTrust": return "Assembly was already fully trusted.";
+case "Argument_AssemblyNotFullTrust": return "Assembly was not fully trusted.";
+case "Argument_AssemblyWinMD": return "Assembly must not be a Windows Runtime assembly.";
+case "Argument_MemberAndArray": return "Cannot supply both a MemberInfo and an Array to indicate the parent of a value type.";
+case "Argument_ObjNotComObject": return "The object's type must be __ComObject or derived from __ComObject.";
+case "Argument_ObjIsWinRTObject": return "The object's type must not be a Windows Runtime type.";
+case "Argument_TypeNotComObject": return "The type must be __ComObject or be derived from __ComObject.";
+case "Argument_TypeIsWinRTType": return "The type must not be a Windows Runtime type.";
+case "Argument_CantCallSecObjFunc": return "Cannot evaluate a security function.";
+case "Argument_StructMustNotBeValueClass": return "The structure must not be a value class.";
+case "Argument_NoSpecificCulture": return "Please select a specific culture, such as zh-CN, zh-HK, zh-TW, zh-MO, zh-SG.";
+case "Argument_InvalidResourceCultureName": return "The given culture name '{0}' cannot be used to locate a resource file. Resource filenames must consist of only letters, numbers, hyphens or underscores.";
+case "Argument_InvalidParamInfo": return "Invalid type for ParameterInfo member in Attribute class.";
+case "Argument_EmptyDecString": return "Decimal separator cannot be the empty string.";
+case "Argument_OffsetOfFieldNotFound": return "Field passed in is not a marshaled member of the type '{0}'.";
+case "Argument_EmptyStrongName": return "StrongName cannot have an empty string for the assembly name.";
+case "Argument_NotSerializable": return "Argument passed in is not serializable.";
+case "Argument_EmptyApplicationName": return "ApplicationId cannot have an empty string for the name.";
+case "Argument_NoDomainManager": return "The domain manager specified by the host could not be instantiated.";
+case "Argument_NoMain": return "Main entry point not defined.";
+case "Argument_InvalidDateTimeKind": return "Invalid DateTimeKind value.";
+case "Argument_ConflictingDateTimeStyles": return "The DateTimeStyles values AssumeLocal and AssumeUniversal cannot be used together.";
+case "Argument_ConflictingDateTimeRoundtripStyles": return "The DateTimeStyles value RoundtripKind cannot be used with the values AssumeLocal, AssumeUniversal or AdjustToUniversal.";
+case "Argument_InvalidDigitSubstitution": return "The DigitSubstitution property must be of a valid member of the DigitShapes enumeration. Valid entries include Context, NativeNational or None.";
+case "Argument_InvalidNativeDigitCount": return "The NativeDigits array must contain exactly ten members.";
+case "Argument_InvalidNativeDigitValue": return "Each member of the NativeDigits array must be a single text element (one or more UTF16 code points) with a Unicode Nd (Number, Decimal Digit) property indicating it is a digit.";
+case "ArgumentException_InvalidAceBinaryForm": return "The binary form of an ACE object is invalid.";
+case "ArgumentException_InvalidAclBinaryForm": return "The binary form of an ACL object is invalid.";
+case "ArgumentException_InvalidSDSddlForm": return "The SDDL form of a security descriptor object is invalid.";
+case "Argument_InvalidSafeHandle": return "The SafeHandle is invalid.";
+case "Argument_CannotPrepareAbstract": return "Abstract methods cannot be prepared.";
+case "Argument_ArrayTooLarge": return "The input array length must not exceed Int32.MaxValue / {0}. Otherwise BitArray.Length would exceed Int32.MaxValue.";
+case "Argument_RelativeUrlMembershipCondition": return "UrlMembershipCondition requires an absolute URL.";
+case "Argument_EmptyWaithandleArray": return "Waithandle array may not be empty.";
+case "Argument_InvalidSafeBufferOffLen": return "Offset and length were greater than the size of the SafeBuffer.";
+case "Argument_NotEnoughBytesToRead": return "There are not enough bytes remaining in the accessor to read at this position.";
+case "Argument_NotEnoughBytesToWrite": return "There are not enough bytes remaining in the accessor to write at this position.";
+case "Argument_OffsetAndLengthOutOfBounds": return "Offset and length were out of bounds for the array or count is greater than the number of elements from index to the end of the source collection.";
+case "Argument_OffsetAndCapacityOutOfBounds": return "Offset and capacity were greater than the size of the view.";
+case "Argument_UnmanagedMemAccessorWrapAround": return "The UnmanagedMemoryAccessor capacity and offset would wrap around the high end of the address space.";
+case "Argument_UnrecognizedLoaderOptimization": return "Unrecognized LOADER_OPTIMIZATION property value.  Supported values may include \"SingleDomain\", \"MultiDomain\", \"MultiDomainHost\", and \"NotSpecified\".";
+case "ArgumentException_NotAllCustomSortingFuncsDefined": return "Implementations of all the NLS functions must be provided.";
+case "ArgumentException_MinSortingVersion": return "The runtime does not support a version of \"{0}\" less than {1}.";
+
+// ;
+// ; =====================================================
+// ; Reflection Emit resource strings
+case "Arugment_EmitMixedContext1": return "Type '{0}' was loaded in the ReflectionOnly context but the AssemblyBuilder was not created as AssemblyBuilderAccess.ReflectionOnly.";
+case "Arugment_EmitMixedContext2": return "Type '{0}' was not loaded in the ReflectionOnly context but the AssemblyBuilder was created as AssemblyBuilderAccess.ReflectionOnly.";
+case "Argument_BadSizeForData": return "Data size must be > 0 and < 0x3f0000";
+case "Argument_InvalidLabel": return "Invalid Label.";
+case "Argument_RedefinedLabel": return "Label multiply defined.";
+case "Argument_UnclosedExceptionBlock": return "The IL Generator cannot be used while there are unclosed exceptions.";
+case "Argument_MissingDefaultConstructor": return "was missing default constructor.";
+case "Argument_TooManyFinallyClause": return "Exception blocks may have at most one finally clause.";
+case "Argument_NotInTheSameModuleBuilder": return "The argument passed in was not from the same ModuleBuilder.";
+case "Argument_BadCurrentLocalVariable": return "Bad current local variable for setting symbol information.";
+case "Argument_DuplicateModuleName": return "Duplicate dynamic module name within an assembly.";
+case "Argument_DuplicateTypeName": return "Duplicate type name within an assembly.";
+case "Argument_InvalidAssemblyName": return "Assembly names may not begin with whitespace or contain the characters '/', or '\\' or ':'.";
+case "Argument_InvalidGenericInstantiation": return "The given generic instantiation was invalid.";
+case "Argument_DuplicatedFileName": return "Duplicate file names.";
+case "Argument_GlobalFunctionHasToBeStatic": return "Global members must be static.";
+case "Argument_BadPInvokeOnInterface": return "PInvoke methods cannot exist on interfaces.";
+case "Argument_BadPInvokeMethod": return "PInvoke methods must be static and native and cannot be abstract.";
+case "Argument_MethodRedefined": return "Method has been already defined.";
+case "Argument_BadTypeAttrAbstractNFinal": return "Bad type attributes. A type cannot be both abstract and final.";
+case "Argument_BadTypeAttrNestedVisibilityOnNonNestedType": return "Bad type attributes. Nested visibility flag set on a non-nested type.";
+case "Argument_BadTypeAttrNonNestedVisibilityNestedType": return "Bad type attributes. Non-nested visibility flag set on a nested type.";
+case "Argument_BadTypeAttrInvalidLayout": return "Bad type attributes. Invalid layout attribute specified.";
+case "Argument_BadTypeAttrReservedBitsSet": return "Bad type attributes. Reserved bits set on the type.";
+case "Argument_BadFieldSig": return "Field signatures do not have return types.";
+case "Argument_ShouldOnlySetVisibilityFlags": return "Should only set visibility flags when creating EnumBuilder.";
+case "Argument_BadNestedTypeFlags": return "Visibility of interfaces must be one of the following: NestedAssembly, NestedFamANDAssem, NestedFamily, NestedFamORAssem, NestedPrivate or NestedPublic.";
+case "Argument_ShouldNotSpecifyExceptionType": return "Should not specify exception type for catch clause for filter block.";
+case "Argument_BadLabel": return "Bad label in ILGenerator.";
+case "Argument_BadLabelContent": return "Bad label content in ILGenerator.";
+case "Argument_EmitWriteLineType": return "EmitWriteLine does not support this field or local type.";
+case "Argument_ConstantNull": return "Null is not a valid constant value for this type.";
+case "Argument_ConstantDoesntMatch": return "Constant does not match the defined type.";
+case "Argument_ConstantNotSupported": return "{0} is not a supported constant type.";
+case "Argument_BadConstructor": return "Cannot have private or static constructor.";
+case "Argument_BadConstructorCallConv": return "Constructor must have standard calling convention.";
+case "Argument_BadPropertyForConstructorBuilder": return "Property must be on the same type of the given ConstructorInfo.";
+case "Argument_NotAWritableProperty": return "Not a writable property.";
+case "Argument_BadFieldForConstructorBuilder": return "Field must be on the same type of the given ConstructorInfo.";
+case "Argument_BadAttributeOnInterfaceMethod": return "Interface method must be abstract and virtual.";
+case "ArgumentException_BadMethodImplBody": return "MethodOverride's body must be from this type.";
+case "Argument_BadParameterCountsForConstructor": return "Parameter count does not match passed in argument value count.";
+case "Argument_BadParameterTypeForConstructor": return "Passed in argument value at index {0} does not match the parameter type.";
+case "Argument_BadTypeInCustomAttribute": return "An invalid type was used as a custom attribute constructor argument, field or property.";
+case "Argument_DateTimeBadBinaryData": return "The binary data must result in a DateTime with ticks between DateTime.MinValue.Ticks and DateTime.MaxValue.Ticks.";
+case "Argument_VerStringTooLong": return "The unmanaged Version information is too large to persist.";
+case "Argument_UnknownUnmanagedCallConv": return "Unknown unmanaged calling convention for function signature.";
+case "Argument_BadConstantValue": return "Bad default value.";
+case "Argument_IllegalName": return "Illegal name.";
+case "Argument_cvtres_NotFound": return "Cannot find cvtres.exe";
+case "Argument_BadCAForUnmngRSC": return "Bad '{0}' while generating unmanaged resource information.";
+case "Argument_MustBeInterfaceMethod": return "The MemberInfo must be an interface method.";
+case "Argument_CORDBBadVarArgCallConv": return "Cannot evaluate a VarArgs function.";
+case "Argument_CORDBBadMethod": return "Cannot find the method on the object instance.";
+case "Argument_InvalidOpCodeOnDynamicMethod": return "Ldtoken, Ldftn and Ldvirtftn OpCodes cannot target DynamicMethods.";
+case "Argument_InvalidTypeForDynamicMethod": return "Invalid type owner for DynamicMethod.";
+case "Argument_NeedGenericMethodDefinition": return "Method must represent a generic method definition on a generic type definition.";
+case "Argument_MethodNeedGenericDeclaringType": return "The specified method cannot be dynamic or global and must be declared on a generic type definition.";
+case "Argument_ConstructorNeedGenericDeclaringType": return "The specified constructor must be declared on a generic type definition.";
+case "Argument_FieldNeedGenericDeclaringType": return "The specified field must be declared on a generic type definition.";
+case "Argument_InvalidMethodDeclaringType": return "The specified method must be declared on the generic type definition of the specified type.";
+case "Argument_InvalidConstructorDeclaringType": return "The specified constructor must be declared on the generic type definition of the specified type.";
+case "Argument_InvalidFieldDeclaringType": return "The specified field must be declared on the generic type definition of the specified type.";
+case "Argument_NeedNonGenericType": return "The specified Type must not be a generic type definition.";
+case "Argument_MustBeTypeBuilder": return "'type' must contain a TypeBuilder as a generic argument.";
+case "Argument_CannotSetParentToInterface": return "Cannot set parent to an interface.";
+case "Argument_MismatchedArrays": return "Two arrays, {0} and {1}, must be of  the same size.";
+case "Argument_NeedNonGenericObject": return "The specified object must not be an instance of a generic type.";
+case "Argument_NeedStructWithNoRefs": return "The specified Type must be a struct containing no references.";
+case "Argument_NotMethodCallOpcode": return "The specified opcode cannot be passed to EmitCall.";
+
+// ; =====================================================
+// ;
+case "Argument_ModuleAlreadyLoaded": return "The specified module has already been loaded.";
+case "Argument_MustHaveLayoutOrBeBlittable": return "The specified structure must be blittable or have layout information.";
+case "Argument_NotSimpleFileName": return "The filename must not include a path specification.";
+case "Argument_TypeMustBeVisibleFromCom": return "The specified type must be visible from COM.";
+case "Argument_TypeMustBeComCreatable": return "The type must be creatable from COM.";
+case "Argument_TypeMustNotBeComImport": return "The type must not be imported from COM.";
+case "Argument_PolicyFileDoesNotExist": return "The requested policy file does not exist.";
+case "Argument_NonNullObjAndCtx": return "Either obj or ctx must be null.";
+case "Argument_NoModuleFileExtension": return "Module file name '{0}' must have file extension.";
+case "Argument_TypeDoesNotContainMethod": return "Type does not contain the given method.";
+case "Argument_StringZeroLength": return "String cannot be of zero length.";
+case "Argument_MustBeString": return "String is too long or has invalid contents.";
+case "Argument_AbsolutePathRequired": return "Absolute path information is required.";
+case "Argument_ManifestFileDoesNotExist": return "The specified manifest file does not exist.";
+case "Argument_MustBeRuntimeType": return "Type must be a runtime Type object.";
+case "Argument_TypeNotValid": return "The Type object is not valid.";
+case "Argument_MustBeRuntimeMethodInfo": return "MethodInfo must be a runtime MethodInfo object.";
+case "Argument_MustBeRuntimeFieldInfo": return "FieldInfo must be a runtime FieldInfo object.";
+case "Argument_InvalidFieldInfo": return "The FieldInfo object is not valid.";
+case "Argument_InvalidConstructorInfo": return "The ConstructorInfo object is not valid.";
+case "Argument_MustBeRuntimeAssembly": return "Assembly must be a runtime Assembly object.";
+case "Argument_MustBeRuntimeModule": return "Module must be a runtime Module object.";
+case "Argument_MustBeRuntimeParameterInfo": return "ParameterInfo must be a runtime ParameterInfo object.";
+case "Argument_InvalidParameterInfo": return "The ParameterInfo object is not valid.";
+case "Argument_MustBeRuntimeReflectionObject": return "The object must be a runtime Reflection object.";
+case "Argument_InvalidMarshalByRefObject": return "The MarshalByRefObject is not valid.";
+case "Argument_TypedReferenceInvalidField": return "Field in TypedReferences cannot be static or init only.";
+case "Argument_HandleLeak": return "Cannot pass a GCHandle across AppDomains.";
+case "Argument_ArgumentZero": return "Argument cannot be zero.";
+case "Argument_ImproperType": return "Improper types in collection.";
+case "Argument_NotAMembershipCondition": return "The type does not implement IMembershipCondition";
+case "Argument_NotAPermissionType": return "The type does not implement IPermission";
+case "Argument_NotACodeGroupType": return "The type does not inherit from CodeGroup";
+case "Argument_NotATP": return "Type must be a TransparentProxy";
+case "Argument_AlreadyACCW": return "The object already has a CCW associated with it.";
+case "Argument_OffsetLocalMismatch": return "The UTC Offset of the local dateTime parameter does not match the offset argument.";
+case "Argument_OffsetUtcMismatch": return "The UTC Offset for Utc DateTime instances must be 0.";
+case "Argument_UTCOutOfRange": return "The UTC time represented when the offset is applied must be between year 0 and 10,000.";
+case "Argument_OffsetOutOfRange": return "Offset must be within plus or minus 14 hours.";
+case "Argument_OffsetPrecision": return "Offset must be specified in whole minutes.";
+case "Argument_FlagNotSupported": return "One or more flags are not supported.";
+case "Argument_MustBeFalse": return "Argument must be initialized to false";
+case "Argument_ToExclusiveLessThanFromExclusive": return "fromInclusive must be less than or equal to toExclusive.";
+case "Argument_FrameworkNameTooShort": return "FrameworkName cannot have less than two components or more than three components.";
+case "Argument_FrameworkNameInvalid": return "FrameworkName is invalid.";
+case "Argument_FrameworkNameMissingVersion": return "FrameworkName version component is missing.";
+#if FEATURE_COMINTEROP
+case "Argument_TypeNotActivatableViaWindowsRuntime": return "Type '{0}' does not have an activation factory because it is not activatable by Windows Runtime.";
+case "Argument_WinRTSystemRuntimeType": return "Cannot marshal type '{0}' to Windows Runtime. Only 'System.RuntimeType' is supported.";
+case "Argument_Unexpected_TypeSource": return "Unexpected TypeKind when marshaling Windows.Foundation.TypeName. ";
+#endif // FEATURE_COMINTEROP
+
+// ; ArgumentNullException
+case "ArgumentNull_Array": return "Array cannot be null.";
+case "ArgumentNull_ArrayValue": return "Found a null value within an array.";
+case "ArgumentNull_ArrayElement": return "At least one element in the specified array was null.";
+case "ArgumentNull_Assembly": return "Assembly cannot be null.";
+case "ArgumentNull_AssemblyName": return "AssemblyName cannot be null.";
+case "ArgumentNull_AssemblyNameName": return "AssemblyName.Name cannot be null or an empty string.";
+case "ArgumentNull_Buffer": return "Buffer cannot be null.";
+case "ArgumentNull_Collection": return "Collection cannot be null.";
+case "ArgumentNull_CultureInfo": return "CultureInfo cannot be null.";
+case "ArgumentNull_Dictionary": return "Dictionary cannot be null.";
+case "ArgumentNull_FileName": return "File name cannot be null.";
+case "ArgumentNull_Key": return "Key cannot be null.";
+case "ArgumentNull_Graph": return "Object Graph cannot be null.";
+case "ArgumentNull_Path": return "Path cannot be null.";
+case "ArgumentNull_Stream": return "Stream cannot be null.";
+case "ArgumentNull_String": return "String reference not set to an instance of a String.";
+case "ArgumentNull_Type": return "Type cannot be null.";
+case "ArgumentNull_Obj": return "Object cannot be null.";
+case "ArgumentNull_GUID": return "GUID cannot be null.";
+case "ArgumentNull_NullMember": return "Member at position {0} was null.";
+case "ArgumentNull_Generic": return "Value cannot be null.";
+case "ArgumentNull_WithParamName": return "Parameter '{0}' cannot be null.";
+case "ArgumentNull_Child": return "Cannot have a null child.";
+case "ArgumentNull_SafeHandle": return "SafeHandle cannot be null.";
+case "ArgumentNull_CriticalHandle": return "CriticalHandle cannot be null.";
+case "ArgumentNull_TypedRefType": return "Type in TypedReference cannot be null.";
+case "ArgumentNull_ApplicationTrust": return "The application trust cannot be null.";
+case "ArgumentNull_TypeRequiredByResourceScope": return "The type parameter cannot be null when scoping the resource's visibility to Private or Assembly.";
+case "ArgumentNull_Waithandles": return "The waitHandles parameter cannot be null.";
+
+// ; ArgumentOutOfRangeException
+case "ArgumentOutOfRange_AddressSpace": return "The number of bytes cannot exceed the virtual address space on a 32 bit machine.";
+case "ArgumentOutOfRange_ArrayLB": return "Number was less than the array's lower bound in the first dimension.";
+case "ArgumentOutOfRange_ArrayLBAndLength": return "Higher indices will exceed Int32.MaxValue because of large lower bound and/or length.";
+case "ArgumentOutOfRange_ArrayLength": return "The length of the array must be between {0} and {1}, inclusive.";
+case "ArgumentOutOfRange_ArrayLengthMultiple": return "The length of the array must be a multiple of {0}.";
+case "ArgumentOutOfRange_ArrayListInsert": return "Insertion index was out of range. Must be non-negative and less than or equal to size.";
+case "ArgumentOutOfRange_ArrayTooSmall": return "Destination array is not long enough to copy all the required data. Check array length and offset.";
+case "ArgumentOutOfRange_BeepFrequency": return "Console.Beep's frequency must be between {0} and {1}.";
+case "ArgumentOutOfRange_BiggerThanCollection": return "Larger than collection size.";
+case "ArgumentOutOfRange_Bounds_Lower_Upper": return "Argument must be between {0} and {1}.";
+case "ArgumentOutOfRange_Count": return "Count must be positive and count must refer to a location within the string/array/collection.";
+case "ArgumentOutOfRange_CalendarRange": return "Specified time is not supported in this calendar. It should be between {0} (Gregorian date) and {1} (Gregorian date), inclusive.";
+case "ArgumentOutOfRange_ConsoleBufferBoundaries": return "The value must be greater than or equal to zero and less than the console's buffer size in that dimension.";
+case "ArgumentOutOfRange_ConsoleBufferLessThanWindowSize": return "The console buffer size must not be less than the current size and position of the console window, nor greater than or equal to Int16.MaxValue.";
+case "ArgumentOutOfRange_ConsoleWindowBufferSize": return "The new console window size would force the console buffer size to be too large.";
+case "ArgumentOutOfRange_ConsoleTitleTooLong": return "The console title is too long.";
+case "ArgumentOutOfRange_ConsoleWindowPos": return "The window position must be set such that the current window size fits within the console's buffer, and the numbers must not be negative.";
+case "ArgumentOutOfRange_ConsoleWindowSize_Size": return "The value must be less than the console's current maximum window size of {0} in that dimension. Note that this value depends on screen resolution and the console font.";
+case "ArgumentOutOfRange_ConsoleKey": return "Console key values must be between 0 and 255.";
+case "ArgumentOutOfRange_CursorSize": return "The cursor size is invalid. It must be a percentage between 1 and 100.";
+case "ArgumentOutOfRange_BadYearMonthDay": return "Year, Month, and Day parameters describe an un-representable DateTime.";
+case "ArgumentOutOfRange_BadHourMinuteSecond": return "Hour, Minute, and Second parameters describe an un-representable DateTime.";
+case "ArgumentOutOfRange_DateArithmetic": return "The added or subtracted value results in an un-representable DateTime.";
+case "ArgumentOutOfRange_DateTimeBadMonths": return "Months value must be between +/-120000.";
+case "ArgumentOutOfRange_DateTimeBadYears": return "Years value must be between +/-10000.";
+case "ArgumentOutOfRange_DateTimeBadTicks": return "Ticks must be between DateTime.MinValue.Ticks and DateTime.MaxValue.Ticks.";
+case "ArgumentOutOfRange_Day": return "Day must be between 1 and {0} for month {1}.";
+case "ArgumentOutOfRange_DecimalRound": return "Decimal can only round to between 0 and 28 digits of precision.";
+case "ArgumentOutOfRange_DecimalScale": return "Decimal's scale value must be between 0 and 28, inclusive.";
+case "ArgumentOutOfRange_Era": return "Time value was out of era range.";
+case "ArgumentOutOfRange_Enum": return "Enum value was out of legal range.";
+case "ArgumentOutOfRange_FileLengthTooBig": return "Specified file length was too large for the file system.";
+case "ArgumentOutOfRange_FileTimeInvalid": return "Not a valid Win32 FileTime.";
+case "ArgumentOutOfRange_GetByteCountOverflow": return "Too many characters. The resulting number of bytes is larger than what can be returned as an int.";
+case "ArgumentOutOfRange_GetCharCountOverflow": return "Too many bytes. The resulting number of chars is larger than what can be returned as an int.";
+case "ArgumentOutOfRange_HashtableLoadFactor": return "Load factor needs to be between 0.1 and 1.0.";
+case "ArgumentOutOfRange_HugeArrayNotSupported": return "Arrays larger than 2GB are not supported.";
+case "ArgumentOutOfRange_InvalidHighSurrogate": return "A valid high surrogate character is between 0xd800 and 0xdbff, inclusive.";
+case "ArgumentOutOfRange_InvalidLowSurrogate": return "A valid low surrogate character is between 0xdc00 and 0xdfff, inclusive.";
+case "ArgumentOutOfRange_InvalidEraValue": return "Era value was not valid.";
+case "ArgumentOutOfRange_InvalidUserDefinedAceType": return "User-defined ACEs must not have a well-known ACE type.";
+case "ArgumentOutOfRange_InvalidUTF32": return "A valid UTF32 value is between 0x000000 and 0x10ffff, inclusive, and should not include surrogate codepoint values (0x00d800 ~ 0x00dfff).";
+case "ArgumentOutOfRange_Index": return "Index was out of range. Must be non-negative and less than the size of the collection.";
+case "ArgumentOutOfRange_IndexString": return "Index was out of range. Must be non-negative and less than the length of the string.";
+case "ArgumentOutOfRange_StreamLength": return "Stream length must be non-negative and less than 2^31 - 1 - origin.";
+case "ArgumentOutOfRange_LessEqualToIntegerMaxVal": return "Argument must be less than or equal to 2^31 - 1 milliseconds.";
+case "ArgumentOutOfRange_Month": return "Month must be between one and twelve.";
+case "ArgumentOutOfRange_MustBeNonNegInt32": return "Value must be non-negative and less than or equal to Int32.MaxValue.";
+case "ArgumentOutOfRange_NeedNonNegNum": return "Non-negative number required.";
+case "ArgumentOutOfRange_NeedNonNegOrNegative1": return "Number must be either non-negative and less than or equal to Int32.MaxValue or -1.";
+case "ArgumentOutOfRange_NeedPosNum": return "Positive number required.";
+case "ArgumentOutOfRange_NegativeCapacity": return "Capacity must be positive.";
+case "ArgumentOutOfRange_NegativeCount": return "Count cannot be less than zero.";
+case "ArgumentOutOfRange_NegativeLength": return "Length cannot be less than zero.";
+case "ArgumentOutOfRange_NegFileSize": return "Length must be non-negative.";
+case "ArgumentOutOfRange_ObjectID": return "objectID cannot be less than or equal to zero.";
+case "ArgumentOutOfRange_SmallCapacity": return "capacity was less than the current size.";
+case "ArgumentOutOfRange_QueueGrowFactor": return "Queue grow factor must be between {0} and {1}.";
+case "ArgumentOutOfRange_RoundingDigits": return "Rounding digits must be between 0 and 15, inclusive.";
+case "ArgumentOutOfRange_StartIndex": return "StartIndex cannot be less than zero.";
+case "ArgumentOutOfRange_MustBePositive": return "'{0}' must be greater than zero.";
+case "ArgumentOutOfRange_MustBeNonNegNum": return "'{0}' must be non-negative.";
+case "ArgumentOutOfRange_LengthGreaterThanCapacity": return "The length cannot be greater than the capacity.";
+case "ArgumentOutOfRange_ListInsert": return "Index must be within the bounds of the List.";
+case "ArgumentOutOfRange_StartIndexLessThanLength": return "startIndex must be less than length of string.";
+case "ArgumentOutOfRange_StartIndexLargerThanLength": return "startIndex cannot be larger than length of string.";
+case "ArgumentOutOfRange_EndIndexStartIndex": return "endIndex cannot be greater than startIndex.";
+case "ArgumentOutOfRange_IndexCount": return "Index and count must refer to a location within the string.";
+case "ArgumentOutOfRange_IndexCountBuffer": return "Index and count must refer to a location within the buffer.";
+case "ArgumentOutOfRange_IndexLength": return "Index and length must refer to a location within the string.";
+case "ArgumentOutOfRange_InvalidThreshold": return "The specified threshold for creating dictionary is out of range.";
+case "ArgumentOutOfRange_Capacity": return "Capacity exceeds maximum capacity.";
+case "ArgumentOutOfRange_Length": return "The specified length exceeds maximum capacity of SecureString.";
+case "ArgumentOutOfRange_LengthTooLarge": return "The specified length exceeds the maximum value of {0}.";
+case "ArgumentOutOfRange_SmallMaxCapacity": return "MaxCapacity must be one or greater.";
+case "ArgumentOutOfRange_GenericPositive": return "Value must be positive.";
+case "ArgumentOutOfRange_Range": return "Valid values are between {0} and {1}, inclusive.";
+case "ArgumentOutOfRange_AddValue": return "Value to add was out of range.";
+case "ArgumentOutOfRange_OffsetLength": return "Offset and length must refer to a position in the string.";
+case "ArgumentOutOfRange_OffsetOut": return "Either offset did not refer to a position in the string, or there is an insufficient length of destination character array.";
+case "ArgumentOutOfRange_PartialWCHAR": return "Pointer startIndex and length do not refer to a valid string.";
+case "ArgumentOutOfRange_ParamSequence": return "The specified parameter index is not in range.";
+case "ArgumentOutOfRange_Version": return "Version's parameters must be greater than or equal to zero.";
+case "ArgumentOutOfRange_TimeoutTooLarge": return "Time-out interval must be less than 2^32-2.";
+case "ArgumentOutOfRange_UIntPtrMax-1": return "The length of the buffer must be less than the maximum UIntPtr value for your platform.";
+case "ArgumentOutOfRange_UnmanagedMemStreamLength": return "UnmanagedMemoryStream length must be non-negative and less than 2^63 - 1 - baseAddress.";
+case "ArgumentOutOfRange_UnmanagedMemStreamWrapAround": return "The UnmanagedMemoryStream capacity would wrap around the high end of the address space.";
+case "ArgumentOutOfRange_PeriodTooLarge": return "Period must be less than 2^32-2.";
+case "ArgumentOutOfRange_Year": return "Year must be between 1 and 9999.";
+case "ArgumentOutOfRange_BinaryReaderFillBuffer": return "The number of bytes requested does not fit into BinaryReader's internal buffer.";
+case "ArgumentOutOfRange_PositionLessThanCapacityRequired": return "The position may not be greater or equal to the capacity of the accessor.";
+
+// ; ArithmeticException
+case "Arithmetic_NaN": return "Function does not accept floating point Not-a-Number values.";
+
+// ; ArrayTypeMismatchException
+case "ArrayTypeMismatch_CantAssignType": return "Source array type cannot be assigned to destination array type.";
+case "ArrayTypeMismatch_ConstrainedCopy": return "Array.ConstrainedCopy will only work on array types that are provably compatible, without any form of boxing, unboxing, widening, or casting of each array element.  Change the array types (i.e., copy a Derived[] to a Base[]), or use a mitigation strategy in the CER for Array.Copy's less powerful reliability contract, such as cloning the array or throwing away the potentially corrupt destination array.";
+
+// ; BadImageFormatException
+case "BadImageFormat_ResType&SerBlobMismatch": return "The type serialized in the .resources file was not the same type that the .resources file said it contained. Expected '{0}' but read '{1}'.";
+case "BadImageFormat_ResourcesIndexTooLong": return "Corrupt .resources file. String for name index '{0}' extends past the end of the file.";
+case "BadImageFormat_ResourcesNameTooLong": return "Corrupt .resources file. Resource name extends past the end of the file.";
+case "BadImageFormat_ResourcesNameInvalidOffset": return "Corrupt .resources file. Invalid offset '{0}' into name section.";
+case "BadImageFormat_ResourcesHeaderCorrupted": return "Corrupt .resources file. Unable to read resources from this file because of invalid header information. Try regenerating the .resources file.";
+case "BadImageFormat_ResourceNameCorrupted": return "Corrupt .resources file. A resource name extends past the end of the stream.";
+case "BadImageFormat_ResourceNameCorrupted_NameIndex": return "Corrupt .resources file. The resource name for name index {0} extends past the end of the stream.";
+case "BadImageFormat_ResourceDataLengthInvalid": return "Corrupt .resources file.  The specified data length '{0}' is not a valid position in the stream.";
+case "BadImageFormat_TypeMismatch": return "Corrupt .resources file.  The specified type doesn't match the available data in the stream.";
+case "BadImageFormat_InvalidType": return "Corrupt .resources file.  The specified type doesn't exist.";
+case "BadImageFormat_ResourcesIndexInvalid": return "Corrupt .resources file. The resource index '{0}' is outside the valid range.";
+case "BadImageFormat_StreamPositionInvalid": return "Corrupt .resources file.  The specified position '{0}' is not a valid position in the stream.";
+case "BadImageFormat_ResourcesDataInvalidOffset": return "Corrupt .resources file. Invalid offset '{0}' into data section.";
+case "BadImageFormat_NegativeStringLength": return "Corrupt .resources file. String length must be non-negative.";
+case "BadImageFormat_ParameterSignatureMismatch": return "The parameters and the signature of the method don't match.";
+
+// ; Cryptography
+// ; These strings still appear in bcl.small but should go away eventually
+case "Cryptography_CSSM_Error": return "Error 0x{0} from the operating system security framework: '{1}'.";
+case "Cryptography_CSSM_Error_Unknown": return "Error 0x{0} from the operating system security framework.";
+case "Cryptography_InvalidDSASignatureSize": return "Length of the DSA signature was not 40 bytes.";
+case "Cryptography_InvalidHandle": return "{0} is an invalid handle.";
+case "Cryptography_InvalidOID": return "Object identifier (OID) is unknown.";
+case "Cryptography_OAEPDecoding": return "Error occurred while decoding OAEP padding.";
+case "Cryptography_PasswordDerivedBytes_InvalidIV": return "The Initialization vector should have the same length as the algorithm block size in bytes.";
+case "Cryptography_SSE_InvalidDataSize": return "Length of the data to encrypt is invalid.";
+case "Cryptography_X509_ExportFailed": return "The certificate export operation failed.";
+case "Cryptography_X509_InvalidContentType": return "Invalid content type.";
+case "Cryptography_CryptoStream_FlushFinalBlockTwice": return "FlushFinalBlock() method was called twice on a CryptoStream. It can only be called once.";
+case "Cryptography_HashKeySet": return "Hash key cannot be changed after the first write to the stream.";
+case "Cryptography_HashNotYetFinalized": return "Hash must be finalized before the hash value is retrieved.";
+case "Cryptography_InsufficientBuffer": return "Input buffer contains insufficient data.";
+case "Cryptography_InvalidBlockSize": return "Specified block size is not valid for this algorithm.";
+case "Cryptography_InvalidCipherMode": return "Specified cipher mode is not valid for this algorithm.";
+case "Cryptography_InvalidIVSize": return "Specified initialization vector (IV) does not match the block size for this algorithm.";
+case "Cryptography_InvalidKeySize": return "Specified key is not a valid size for this algorithm.";
+case "Cryptography_PasswordDerivedBytes_FewBytesSalt": return "Salt is not at least eight bytes.";
+case "Cryptography_PKCS7_InvalidPadding": return "Padding is invalid and cannot be removed.";
+case "Cryptography_UnknownHashAlgorithm": return "'{0}' is not a known hash algorithm.";
+case "Cryptography_LegacyNetCF_UnknownError": return "Unknown Error '{0}'.";
+case "Cryptography_LegacyNetCF_CSP_CouldNotAcquire": return "CryptoAPI cryptographic service provider (CSP) for this implementation could not be acquired.";
+
+#if FEATURE_CRYPTO
+case "Cryptography_Config_EncodedOIDError": return "Encoded OID length is too large (greater than 0x7f bytes).";
+case "Cryptography_CSP_AlgKeySizeNotAvailable": return "Algorithm implementation does not support a key size of {0}.";
+case "Cryptography_CSP_AlgorithmNotAvailable": return "Cryptographic service provider (CSP) could not be found for this algorithm.";
+case "Cryptography_CSP_CFBSizeNotSupported": return "Feedback size for the cipher feedback mode (CFB) must be 8 bits.";
+case "Cryptography_CSP_NotFound": return "The requested key container was not found.";
+case "Cryptography_CSP_NoPrivateKey": return "Object contains only the public half of a key pair. A private key must also be provided.";
+case "Cryptography_CSP_OFBNotSupported": return "Output feedback mode (OFB) is not supported by this implementation.";
+case "Cryptography_CSP_WrongKeySpec": return "The specified cryptographic service provider (CSP) does not support this key algorithm.";
+case "Cryptography_HashNameSet": return "Hash name cannot be changed after the first write to the stream.";
+case "Cryptography_InvalidHashSize": return "{0} algorithm hash size is {1} bytes.";
+case "Cryptography_InvalidKey_Weak": return "Specified key is a known weak key for '{0}' and cannot be used.";
+case "Cryptography_InvalidKey_SemiWeak": return "Specified key is a known semi-weak key for '{0}' and cannot be used.";
+case "Cryptography_InvalidKeyParameter": return "Parameter '{0}' is not a valid key parameter.";
+case "Cryptography_InvalidFeedbackSize": return "Specified feedback size is invalid.";
+case "Cryptography_InvalidOperation": return "This operation is not supported for this class.";
+case "Cryptography_InvalidPaddingMode": return "Specified padding mode is not valid for this algorithm.";
+case "Cryptography_InvalidFromXmlString": return "Input string does not contain a valid encoding of the '{0}' '{1}' parameter.";
+case "Cryptography_MissingKey": return "No asymmetric key object has been associated with this formatter object.";
+case "Cryptography_MissingOID": return "Required object identifier (OID) cannot be found.";
+case "Cryptography_NotInteractive": return "The current session is not interactive.";
+case "Cryptography_NonCompliantFIPSAlgorithm": return "This implementation is not part of the Windows Platform FIPS validated cryptographic algorithms.";
+case "Cryptography_Padding_Win2KEnhOnly": return "Direct Encryption and decryption using RSA are not available on this platform.";
+case "Cryptography_Padding_EncDataTooBig": return "The data to be encrypted exceeds the maximum for this modulus of {0} bytes.";
+case "Cryptography_Padding_DecDataTooBig": return "The data to be decrypted exceeds the maximum for this modulus of {0} bytes.";
+case "Cryptography_PasswordDerivedBytes_ValuesFixed": return "Value of '{0}' cannot be changed after the bytes have been retrieved.";
+case "Cryptography_PasswordDerivedBytes_TooManyBytes": return "Requested number of bytes exceeds the maximum.";
+case "Cryptography_PasswordDerivedBytes_InvalidAlgorithm": return "Algorithm is unavailable or is not supported for this operation.";
+case "Cryptography_PKCS1Decoding": return "Error occurred while decoding PKCS1 padding.";
+case "Cryptography_RC2_EKSKS": return "EffectiveKeySize value must be at least as large as the KeySize value.";
+case "Cryptography_RC2_EKSKS2": return "EffectiveKeySize must be the same as KeySize in this implementation.";
+case "Cryptography_RC2_EKS40": return "EffectiveKeySize value must be at least 40 bits.";
+case "Cryptography_SSD_InvalidDataSize": return "Length of the data to decrypt is invalid.";
+case "Cryptography_AddNullOrEmptyName": return "CryptoConfig cannot add a mapping for a null or empty name.";
+case "Cryptography_AlgorithmTypesMustBeVisible": return "Algorithms added to CryptoConfig must be accessable from outside their assembly.";
+#endif  // FEATURE_CRYPTO
+
+// ; EventSource
+case "EventSource_ToString": return "EventSource({0}, {1})";
+case "EventSource_EventSourceGuidInUse": return "An instance of EventSource with Guid {0} already exists.";
+case "EventSource_KeywordNeedPowerOfTwo": return "Value {0} for keyword {1} needs to be a power of 2.";
+case "EventSource_UndefinedKeyword": return "Use of undefined keyword value {0} for event {1}.";
+case "EventSource_UnsupportedEventTypeInManifest": return "Unsupported type {0} in event source.";
+case "EventSource_ListenerNotFound": return "Listener not found.";
+case "EventSource_ListenerCreatedInsideCallback": return "Creating an EventListener inside a EventListener callback.";
+case "EventSource_AttributeOnNonVoid": return "Event attribute placed on method {0} which does not return 'void'.";
+case "EventSource_NeedPositiveId": return "Event IDs must be positive integers.";
+case "EventSource_ReservedOpcode": return "Opcode values less than 11 are reserved for system use.";
+case "EventSource_ReservedKeywords": return "Keywords values larger than 0x0000100000000000 are reserved for system use";
+case "EventSource_PayloadTooBig": return "The payload for a single event is too large.";
+case "EventSource_NoFreeBuffers": return "No Free Buffers available from the operating system (e.g. event rate too fast).";
+case "EventSource_NullInput": return "Null passed as a event argument.";
+case "EventSource_TooManyArgs": return "Too many arguments.";
+case "EventSource_SessionIdError": return "Bit position in AllKeywords ({0}) must equal the command argument named \"EtwSessionKeyword\" ({1}).";
+case "EventSource_EnumKindMismatch": return "The type of {0} is not expected in {1}.";
+case "EventSource_MismatchIdToWriteEvent": return "Event {0} is givien event ID {1} but {2} was passed to WriteEvent.";
+case "EventSource_EventIdReused": return "Event {0} has ID {1} which is already in use.";
+case "EventSource_EventNameReused": return "Event name {0} used more than once.  If you wish to overload a method, the overloaded method should have a NonEvent attribute.";
+case "EventSource_UndefinedChannel": return "Use of undefined channel value {0} for event {1}.";
+case "EventSource_UndefinedOpcode": return "Use of undefined opcode value {0} for event {1}.";
+case "ArgumentOutOfRange_MaxArgExceeded": return "The total number of parameters must not exceed {0}.";
+case "ArgumentOutOfRange_MaxStringsExceeded": return "The number of String parameters must not exceed {0}.";
+case "ArgumentOutOfRange_NeedValidId": return "The ID parameter must be in the range {0} through {1}.";
+case "EventSource_NeedGuid": return "The Guid of an EventSource must be non zero.";
+case "EventSource_NeedName": return "The name of an EventSource must not be null.";
+case "EventSource_EtwAlreadyRegistered": return "The provider has already been registered with the operating system.";
+case "EventSource_ListenerWriteFailure": return "An error occurred when writing to a listener.";
+case "EventSource_TypeMustDeriveFromEventSource": return "Event source types must derive from EventSource.";
+case "EventSource_TypeMustBeSealedOrAbstract": return "Event source types must be sealed or abstract.";
+case "EventSource_TaskOpcodePairReused": return "Event {0} (with ID {1}) has the same task/opcode pair as event {2} (with ID {3}).";
+case "EventSource_EventMustHaveTaskIfNonDefaultOpcode": return "Event {0} (with ID {1}) has a non-default opcode but not a task.";
+case "EventSource_EventNameDoesNotEqualTaskPlusOpcode": return "Event {0} (with ID {1}) has a name that is not the concatenation of its task name and opcode.";
+case "EventSource_PeriodIllegalInProviderName": return "Period character ('.') is illegal in an ETW provider name ({0}).";
+case "EventSource_IllegalOpcodeValue": return "Opcode {0} has a value of {1} which is outside the legal range (11-238).";
+case "EventSource_OpcodeCollision": return "Opcodes {0} and {1} are defined with the same value ({2}).";
+case "EventSource_IllegalTaskValue": return "Task {0} has a value of {1} which is outside the legal range (1-65535).";
+case "EventSource_TaskCollision": return "Tasks {0} and {1} are defined with the same value ({2}).";
+case "EventSource_IllegalKeywordsValue": return "Keyword {0} has a value of {1} which is outside the legal range (0-0x0000080000000000).";
+case "EventSource_KeywordCollision": return "Keywords {0} and {1} are defined with the same value ({2}).";
+case "EventSource_EventChannelOutOfRange": return "Channel {0} has a value of [1} which is outside the legal range (16-254).";
+case "EventSource_ChannelTypeDoesNotMatchEventChannelValue": return "Channel {0} does not match event channel value {1}.";
+case "EventSource_MaxChannelExceeded": return "Attempt to define more than the maximum limit of 8 channels for a provider.";
+case "EventSource_DuplicateStringKey": return "Multiple definitions for string \"{0}\".";
+case "EventSource_EventWithAdminChannelMustHaveMessage": return "Event {0} specifies an Admin channel {1}. It must specify a Message property.";
+case "EventSource_UnsupportedMessageProperty": return "Event {0} specifies an illegal or unsupported formatting message (\"{1}\").";
+case "EventSource_AbstractMustNotDeclareKTOC": return "Abstract event source must not declare {0} nested type.";
+case "EventSource_AbstractMustNotDeclareEventMethods": return "Abstract event source must not declare event methods ({0} with ID {1}).";
+case "EventSource_EventMustNotBeExplicitImplementation": return "Event method {0} (with ID {1}) is an explicit interface method implementation. Re-write method as implicit implementation.";
+case "EventSource_EventParametersMismatch": return "Event {0} was called with {1} argument(s) , but it is defined with {2} paramenter(s).";
+case "EventSource_InvalidCommand": return "Invalid command value.";
+case "EventSource_InvalidEventFormat": return "Can't specify both etw event format flags.";
+case "EventSource_AddScalarOutOfRange": return "Getting out of bounds during scalar addition. ";
+case "EventSource_PinArrayOutOfRange": return " Pins are out of range.";
+case "EventSource_DataDescriptorsOutOfRange": return "Data descriptors are out of range.";
+case "EventSource_NotSupportedArrayOfNil": return "Arrays of Nil are not supported.";
+case "EventSource_NotSupportedArrayOfBinary": return "Arrays of Binary are not supported.";
+case "EventSource_NotSupportedArrayOfNullTerminatedString": return "Arrays of null-terminated string are not supported.";
+case "EventSource_TooManyFields": return "Too many fields in structure.";
+case "EventSource_RecursiveTypeDefinition": return "Recursive type definition is not supported.";
+case "EventSource_NotSupportedEnumType": return "Enum type {0} underlying type {1} is not supported for serialization.";
+case "EventSource_NonCompliantTypeError": return "The API supports only anonymous types or types decorated with the EventDataAttribute. Non-compliant type: {0} dataType.";
+case "EventSource_NotSupportedNestedArraysEnums": return "Nested arrays/enumerables are not supported.";
+case "EventSource_IncorrentlyAuthoredTypeInfo": return "Incorrectly-authored TypeInfo - a type should be serialized as one field or as one group";
+case "EventSource_NotSupportedCustomSerializedData": return "Enumerables of custom-serialized data are not supported";
+case "EventSource_StopsFollowStarts": return "An event with stop suffix must follow a corresponding event with a start suffix.";
+
+// ; ExecutionEngineException
+case "ExecutionEngine_InvalidAttribute": return "Attribute cannot have multiple definitions.";
+case "ExecutionEngine_MissingSecurityDescriptor": return "Unable to retrieve security descriptor for this frame.";
+
+// ;;ExecutionContext
+case "ExecutionContext_UndoFailed": return "Undo operation on a component context threw an exception";
+case "ExecutionContext_ExceptionInAsyncLocalNotification": return "An exception was not handled in an AsyncLocal<T> notification callback.";
+
+
+// ; FieldAccessException
+case "FieldAccess_InitOnly": return "InitOnly (aka ReadOnly) fields can only be initialized in the type/instance constructor.";
+
+// ; FormatException
+case "Format_AttributeUsage": return "Duplicate AttributeUsageAttribute found on attribute type {0}.";
+case "Format_Bad7BitInt32": return "Too many bytes in what should have been a 7 bit encoded Int32.";
+case "Format_BadBase": return "Invalid digits for the specified base.";
+case "Format_BadBase64Char": return "The input is not a valid Base-64 string as it contains a non-base 64 character, more than two padding characters, or an illegal character among the padding characters. ";
+case "Format_BadBase64CharArrayLength": return "Invalid length for a Base-64 char array or string.";
+case "Format_BadBoolean": return "String was not recognized as a valid Boolean.";
+case "Format_BadDateTime": return "String was not recognized as a valid DateTime.";
+case "Format_BadDateTimeCalendar": return "The DateTime represented by the string is not supported in calendar {0}.";
+case "Format_BadDayOfWeek": return "String was not recognized as a valid DateTime because the day of week was incorrect.";
+case "Format_DateOutOfRange": return "The DateTime represented by the string is out of range.";
+case "Format_BadDatePattern": return "Could not determine the order of year, month, and date from '{0}'.";
+case "Format_BadFormatSpecifier": return "Format specifier was invalid.";
+case "Format_BadTimeSpan": return "String was not recognized as a valid TimeSpan.";
+case "Format_BadQuote": return "Cannot find a matching quote character for the character '{0}'.";
+case "Format_EmptyInputString": return "Input string was either empty or contained only whitespace.";
+case "Format_ExtraJunkAtEnd": return "Additional non-parsable characters are at the end of the string.";
+case "Format_GuidBrace": return "Expected {0xdddddddd, etc}.";
+case "Format_GuidComma": return "Could not find a comma, or the length between the previous token and the comma was zero (i.e., '0x,'etc.).";
+case "Format_GuidBraceAfterLastNumber": return "Could not find a brace, or the length between the previous token and the brace was zero (i.e., '0x,'etc.).";
+case "Format_GuidDashes": return "Dashes are in the wrong position for GUID parsing.";
+case "Format_GuidEndBrace": return "Could not find the ending brace.";
+case "Format_GuidHexPrefix": return "Expected hex 0x in '{0}'.";
+case "Format_GuidInvLen": return "Guid should contain 32 digits with 4 dashes (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx).";
+case "Format_GuidInvalidChar": return "Guid string should only contain hexadecimal characters.";
+case "Format_GuidUnrecognized": return "Unrecognized Guid format.";
+case "Format_InvalidEnumFormatSpecification": return "Format String can be only \"G\", \"g\", \"X\", \"x\", \"F\", \"f\", \"D\" or \"d\".";
+case "Format_InvalidGuidFormatSpecification": return "Format String can be only \"D\", \"d\", \"N\", \"n\", \"P\", \"p\", \"B\", \"b\", \"X\" or \"x\".";
+case "Format_InvalidString": return "Input string was not in a correct format.";
+case "Format_IndexOutOfRange": return "Index (zero based) must be greater than or equal to zero and less than the size of the argument list.";
+case "Format_UnknowDateTimeWord": return "The string was not recognized as a valid DateTime. There is an unknown word starting at index {0}.";
+case "Format_NeedSingleChar": return "String must be exactly one character long.";
+case "Format_NoParsibleDigits": return "Could not find any recognizable digits.";
+case "Format_RepeatDateTimePattern": return "DateTime pattern '{0}' appears more than once with different values.";
+case "Format_StringZeroLength": return "String cannot have zero length.";
+case "Format_TwoTimeZoneSpecifiers": return "The String being parsed cannot contain two TimeZone specifiers.";
+case "Format_UTCOutOfRange": return "The UTC representation of the date falls outside the year range 1-9999.";
+case "Format_OffsetOutOfRange": return "The time zone offset must be within plus or minus 14 hours.";
+case "Format_MissingIncompleteDate": return "There must be at least a partial date with a year present in the input.";
+
+// ; IndexOutOfRangeException
+case "IndexOutOfRange_ArrayRankIndex": return "Array does not have that many dimensions.";
+case "IndexOutOfRange_IORaceCondition": return "Probable I/O race condition detected while copying memory. The I/O package is not thread safe by default. In multithreaded applications, a stream must be accessed in a thread-safe way, such as a thread-safe wrapper returned by TextReader's or TextWriter's Synchronized methods. This also applies to classes like StreamWriter and StreamReader.";
+case "IndexOutOfRange_UMSPosition": return "Unmanaged memory stream position was beyond the capacity of the stream.";
+
+// ; InsufficientMemoryException
+case "InsufficientMemory_MemFailPoint": return "Insufficient available memory to meet the expected demands of an operation at this time.  Please try again later.";
+case "InsufficientMemory_MemFailPoint_TooBig": return "Insufficient memory to meet the expected demands of an operation, and this system is likely to never satisfy this request.  If this is a 32 bit system, consider booting in 3 GB mode.";
+case "InsufficientMemory_MemFailPoint_VAFrag": return "Insufficient available memory to meet the expected demands of an operation at this time, possibly due to virtual address space fragmentation.  Please try again later.";
+
+
+// ; InvalidCastException
+case "InvalidCast_DBNull": return "Object cannot be cast to DBNull.";
+case "InvalidCast_DownCastArrayElement": return "At least one element in the source array could not be cast down to the destination array type.";
+case "InvalidCast_Empty": return "Object cannot be cast to Empty.";
+case "InvalidCast_FromDBNull": return "Object cannot be cast from DBNull to other types.";
+case "InvalidCast_FromTo": return "Invalid cast from '{0}' to '{1}'.";
+case "InvalidCast_IConvertible": return "Object must implement IConvertible.";
+case "InvalidCast_OATypeMismatch": return "OleAut reported a type mismatch.";
+case "InvalidCast_StoreArrayElement": return "Object cannot be stored in an array of this type.";
+case "InvalidCast_CannotCoerceByRefVariant": return "Object cannot be coerced to the original type of the ByRef VARIANT it was obtained from.";
+case "InvalidCast_CannotCastNullToValueType": return "Null object cannot be converted to a value type.";
+#if FEATURE_COMINTEROP
+case "InvalidCast_WinRTIPropertyValueElement": return "Object in an IPropertyValue is of type '{0}', which cannot be converted to a '{1}'.";
+case "InvalidCast_WinRTIPropertyValueCoersion": return "Object in an IPropertyValue is of type '{0}' with value '{1}', which cannot be converted to a '{2}'.";
+case "InvalidCast_WinRTIPropertyValueArrayCoersion": return "Object in an IPropertyValue is of type '{0}' which cannot be convereted to a '{1}' due to array element '{2}': {3}.";
+#endif // FEATURE_COMINTEROP
+
+// ; InvalidOperationException
+case "InvalidOperation_ActivationArgsAppTrustMismatch": return "The activation arguments and application trust for the AppDomain must correspond to the same application identity.";
+case "InvalidOperation_AddContextFrozen": return "Attempted to add properties to a frozen context.";
+case "InvalidOperation_AppDomainSandboxAPINeedsExplicitAppBase": return "This API requires the ApplicationBase to be specified explicitly in the AppDomainSetup parameter.";
+case "InvalidOperation_CantCancelCtrlBreak": return "Applications may not prevent control-break from terminating their process.";
+case "InvalidOperation_CalledTwice": return "The method cannot be called twice on the same instance.";
+case "InvalidOperation_CollectionCorrupted": return "A prior operation on this collection was interrupted by an exception. Collection's state is no longer trusted.";
+case "InvalidOperation_CriticalTransparentAreMutuallyExclusive": return "SecurityTransparent and SecurityCritical attributes cannot be applied to the assembly scope at the same time.";
+case "InvalidOperation_SubclassedObject": return "Cannot set sub-classed {0} object to {1} object.";
+case "InvalidOperation_ExceptionStateCrossAppDomain": return "Thread.ExceptionState cannot access an ExceptionState from a different AppDomain.";
+case "InvalidOperation_DebuggerLaunchFailed": return "Debugger unable to launch.";
+case "InvalidOperation_ApartmentStateSwitchFailed": return "Failed to set the specified COM apartment state.";
+case "InvalidOperation_EmptyQueue": return "Queue empty.";
+case "InvalidOperation_EmptyStack": return "Stack empty.";
+case "InvalidOperation_CannotRemoveFromStackOrQueue": return "Removal is an invalid operation for Stack or Queue.";
+case "InvalidOperation_EnumEnded": return "Enumeration already finished.";
+case "InvalidOperation_EnumFailedVersion": return "Collection was modified; enumeration operation may not execute.";
+case "InvalidOperation_EnumNotStarted": return "Enumeration has not started. Call MoveNext.";
+case "InvalidOperation_EnumOpCantHappen": return "Enumeration has either not started or has already finished.";
+case "InvalidOperation_ModifyRONumFmtInfo": return "Unable to modify a read-only NumberFormatInfo object.";
+#if FEATURE_CAS_POLICY
+case "InvalidOperation_ModifyROPermSet": return "ReadOnlyPermissionSet objects may not be modified.";
+#endif // FEATURE_CAS_POLICY
+case "InvalidOperation_MustBeSameThread": return "This operation must take place on the same thread on which the object was created.";
+case "InvalidOperation_MustRevertPrivilege": return "Must revert the privilege prior to attempting this operation.";
+case "InvalidOperation_ReadOnly": return "Instance is read-only.";
+case "InvalidOperation_RegRemoveSubKey": return "Registry key has subkeys and recursive removes are not supported by this method.";
+case "InvalidOperation_IComparerFailed": return "Failed to compare two elements in the array.";
+case "InvalidOperation_InternalState": return "Invalid internal state.";
+case "InvalidOperation_DuplicatePropertyName": return "Another property by this name already exists.";
+case "InvalidOperation_NotCurrentDomain": return "You can only define a dynamic assembly on the current AppDomain.";
+case "InvalidOperation_ContextAlreadyFrozen": return "Context is already frozen.";
+case "InvalidOperation_WriteOnce": return "This property has already been set and cannot be modified.";
+case "InvalidOperation_MethodBaked": return "Type definition of the method is complete.";
+case "InvalidOperation_MethodHasBody": return "Method already has a body.";
+case "InvalidOperation_ModificationOfNonCanonicalAcl": return "This access control list is not in canonical form and therefore cannot be modified.";
+case "InvalidOperation_Method": return "This method is not supported by the current object.";
+case "InvalidOperation_NotADebugModule": return "Not a debug ModuleBuilder.";
+case "InvalidOperation_NoMultiModuleAssembly": return "You cannot have more than one dynamic module in each dynamic assembly in this version of the runtime.";
+case "InvalidOperation_OpenLocalVariableScope": return "Local variable scope was not properly closed.";
+case "InvalidOperation_SetVolumeLabelFailed": return "Volume labels can only be set for writable local volumes.";
+case "InvalidOperation_SetData": return "An additional permission should not be supplied for setting loader information.";
+case "InvalidOperation_SetData_OnlyOnce": return "SetData can only be used to set the value of a given name once.";
+case "InvalidOperation_SetData_OnlyLocationURI": return "SetData cannot be used to set the value for '{0}'.";
+case "InvalidOperation_TypeHasBeenCreated": return "Unable to change after type has been created.";
+case "InvalidOperation_TypeNotCreated": return "Type has not been created.";
+case "InvalidOperation_NoUnderlyingTypeOnEnum": return "Underlying type information on enumeration is not specified.";
+case "InvalidOperation_ResMgrBadResSet_Type": return "'{0}': ResourceSet derived classes must provide a constructor that takes a String file name and a constructor that takes a Stream.";
+case "InvalidOperation_AssemblyHasBeenSaved": return "Assembly '{0}' has been saved.";
+case "InvalidOperation_ModuleHasBeenSaved": return "Module '{0}' has been saved.";
+case "InvalidOperation_CannotAlterAssembly": return "Unable to alter assembly information.";
+case "InvalidOperation_BadTransientModuleReference": return "Unable to make a reference to a transient module from a non-transient module.";
+case "InvalidOperation_BadILGeneratorUsage": return "ILGenerator usage is invalid.";
+case "InvalidOperation_BadInstructionOrIndexOutOfBound": return "MSIL instruction is invalid or index is out of bounds.";
+case "InvalidOperation_ShouldNotHaveMethodBody": return "Method body should not exist.";
+case "InvalidOperation_EntryMethodNotDefinedInAssembly": return "Entry method is not defined in the same assembly.";
+case "InvalidOperation_CantSaveTransientAssembly": return "Cannot save a transient assembly.";
+case "InvalidOperation_BadResourceContainer": return "Unable to add resource to transient module or transient assembly.";
+case "InvalidOperation_CantInstantiateAbstractClass": return "Instances of abstract classes cannot be created.";
+case "InvalidOperation_CantInstantiateFunctionPointer": return "Instances of function pointers cannot be created.";
+case "InvalidOperation_BadTypeAttributesNotAbstract": return "Type must be declared abstract if any of its methods are abstract.";
+case "InvalidOperation_BadInterfaceNotAbstract": return "Interface must be declared abstract.";
+case "InvalidOperation_ConstructorNotAllowedOnInterface": return "Interface cannot have constructors.";
+case "InvalidOperation_BadMethodBody": return "Method '{0}' cannot have a method body.";
+case "InvalidOperation_MetaDataError": return "Metadata operation failed.";
+case "InvalidOperation_BadEmptyMethodBody": return "Method '{0}' does not have a method body.";
+case "InvalidOperation_EndInvokeCalledMultiple": return "EndInvoke can only be called once for each asynchronous operation.";
+case "InvalidOperation_EndReadCalledMultiple": return "EndRead can only be called once for each asynchronous operation.";
+case "InvalidOperation_EndWriteCalledMultiple": return "EndWrite can only be called once for each asynchronous operation.";
+case "InvalidOperation_AsmLoadedForReflectionOnly": return "Assembly has been loaded as ReflectionOnly. This API requires an assembly capable of execution.";
+case "InvalidOperation_NoAsmName": return "Assembly does not have an assembly name. In order to be registered for use by COM, an assembly must have a valid assembly name.";
+case "InvalidOperation_NoAsmCodeBase": return "Assembly does not have a code base.";
+case "InvalidOperation_HandleIsNotInitialized": return "Handle is not initialized.";
+case "InvalidOperation_HandleIsNotPinned": return "Handle is not pinned.";
+case "InvalidOperation_SlotHasBeenFreed": return "LocalDataStoreSlot storage has been freed.";
+case "InvalidOperation_GlobalsHaveBeenCreated": return "Type definition of the global function has been completed.";
+case "InvalidOperation_NotAVarArgCallingConvention": return "Calling convention must be VarArgs.";
+case "InvalidOperation_CannotImportGlobalFromDifferentModule": return "Unable to import a global method or field from a different module.";
+case "InvalidOperation_NonStaticComRegFunction": return "COM register function must be static.";
+case "InvalidOperation_NonStaticComUnRegFunction": return "COM unregister function must be static.";
+case "InvalidOperation_InvalidComRegFunctionSig": return "COM register function must have a System.Type parameter and a void return type.";
+case "InvalidOperation_InvalidComUnRegFunctionSig": return "COM unregister function must have a System.Type parameter and a void return type.";
+case "InvalidOperation_MultipleComRegFunctions": return "Type '{0}' has more than one COM registration function.";
+case "InvalidOperation_MultipleComUnRegFunctions": return "Type '{0}' has more than one COM unregistration function.";
+case "InvalidOperation_MustCallInitialize": return "You must call Initialize on this object instance before using it.";
+case "InvalidOperation_MustLockForReadOrWrite": return "Object must be locked for read or write.";
+case "InvalidOperation_MustLockForWrite": return "Object must be locked for read.";
+case "InvalidOperation_NoValue": return "Nullable object must have a value.";
+case "InvalidOperation_ResourceNotStream_Name": return "Resource '{0}' was not a Stream - call GetObject instead.";
+case "InvalidOperation_ResourceNotString_Name": return "Resource '{0}' was not a String - call GetObject instead.";
+case "InvalidOperation_ResourceNotString_Type": return "Resource was of type '{0}' instead of String - call GetObject instead.";
+case "InvalidOperation_ResourceWriterSaved": return "The resource writer has already been closed and cannot be edited.";
+case "InvalidOperation_UnderlyingArrayListChanged": return "This range in the underlying list is invalid. A possible cause is that elements were removed.";
+case "InvalidOperation_AnonymousCannotImpersonate": return "An anonymous identity cannot perform an impersonation.";
+case "InvalidOperation_DefaultConstructorILGen": return "Unable to access ILGenerator on a constructor created with DefineDefaultConstructor.";
+case "InvalidOperation_DefaultConstructorDefineBody": return "The method body of the default constructor cannot be changed.";
+case "InvalidOperation_ComputerName": return "Computer name could not be obtained.";
+case "InvalidOperation_MismatchedAsyncResult": return "The IAsyncResult object provided does not match this delegate.";
+case "InvalidOperation_PIAMustBeStrongNamed": return "Primary interop assemblies must be strongly named.";
+case "InvalidOperation_HashInsertFailed": return "Hashtable insert failed. Load factor too high. The most common cause is multiple threads writing to the Hashtable simultaneously.";
+case "InvalidOperation_UnknownEnumType": return "Unknown enum type.";
+case "InvalidOperation_GetVersion": return "OSVersion's call to GetVersionEx failed.";
+case "InvalidOperation_DateTimeParsing": return "Internal Error in DateTime and Calendar operations.";
+case "InvalidOperation_UserDomainName": return "UserDomainName native call failed.";
+case "InvalidOperation_WaitOnTransparentProxy": return "Cannot wait on a transparent proxy.";
+case "InvalidOperation_NoPublicAddMethod": return "Cannot add the event handler since no public add method exists for the event.";
+case "InvalidOperation_NoPublicRemoveMethod": return "Cannot remove the event handler since no public remove method exists for the event.";
+case "InvalidOperation_NotSupportedOnWinRTEvent": return "Adding or removing event handlers dynamically is not supported on WinRT events.";
+case "InvalidOperation_ConsoleKeyAvailableOnFile": return "Cannot see if a key has been pressed when either application does not have a console or when console input has been redirected from a file. Try Console.In.Peek.";
+case "InvalidOperation_ConsoleReadKeyOnFile": return "Cannot read keys when either application does not have a console or when console input has been redirected from a file. Try Console.Read.";
+case "InvalidOperation_ThreadWrongThreadStart": return "The thread was created with a ThreadStart delegate that does not accept a parameter.";
+case "InvalidOperation_ThreadAPIsNotSupported": return "Use CompressedStack.(Capture/Run) or ExecutionContext.(Capture/Run) APIs instead.";
+case "InvalidOperation_NotNewCaptureContext": return "Cannot apply a context that has been marshaled across AppDomains, that was not acquired through a Capture operation or that has already been the argument to a Set call.";
+case "InvalidOperation_NullContext": return "Cannot call Set on a null context";
+case "InvalidOperation_CannotCopyUsedContext": return "Only newly captured contexts can be copied";
+case "InvalidOperation_CannotUseSwitcherOtherThread": return "Undo operation must be performed on the thread where the corresponding context was Set.";
+case "InvalidOperation_SwitcherCtxMismatch": return "The Undo operation encountered a context that is different from what was applied in the corresponding Set operation. The possible cause is that a context was Set on the thread and not reverted(undone).";
+case "InvalidOperation_CannotOverrideSetWithoutRevert": return "Must override both HostExecutionContextManager.SetHostExecutionContext and HostExecutionContextManager.Revert.";
+case "InvalidOperation_CannotUseAFCOtherThread": return "AsyncFlowControl object must be used on the thread where it was created.";
+case "InvalidOperation_CannotRestoreUnsupressedFlow": return "Cannot restore context flow when it is not suppressed.";
+case "InvalidOperation_CannotSupressFlowMultipleTimes": return "Context flow is already suppressed.";
+case "InvalidOperation_CannotUseAFCMultiple": return "AsyncFlowControl object can be used only once to call Undo().";
+case "InvalidOperation_AsyncFlowCtrlCtxMismatch": return "AsyncFlowControl objects can be used to restore flow only on the Context that had its flow suppressed.";
+case "InvalidOperation_TimeoutsNotSupported": return "Timeouts are not supported on this stream.";
+case "InvalidOperation_Overlapped_Pack": return "Cannot pack a packed Overlapped again.";
+case "InvalidOperation_OnlyValidForDS": return "Adding ACEs with Object Flags and Object GUIDs is only valid for directory-object ACLs.";
+case "InvalidOperation_WrongAsyncResultOrEndReadCalledMultiple": return "Either the IAsyncResult object did not come from the corresponding async method on this type, or EndRead was called multiple times with the same IAsyncResult.";
+case "InvalidOperation_WrongAsyncResultOrEndWriteCalledMultiple": return "Either the IAsyncResult object did not come from the corresponding async method on this type, or EndWrite was called multiple times with the same IAsyncResult.";
+case "InvalidOperation_WrongAsyncResultOrEndCalledMultiple": return "Either the IAsyncResult object did not come from the corresponding async method on this type, or the End method was called multiple times with the same IAsyncResult.";
+case "InvalidOperation_NoSecurityDescriptor": return "The object does not contain a security descriptor.";
+case "InvalidOperation_NotAllowedInReflectionOnly": return "The requested operation is invalid in the ReflectionOnly context.";
+case "InvalidOperation_NotAllowedInDynamicMethod": return "The requested operation is invalid for DynamicMethod.";
+case "InvalidOperation_PropertyInfoNotAvailable": return "This API does not support PropertyInfo tokens.";
+case "InvalidOperation_EventInfoNotAvailable": return "This API does not support EventInfo tokens.";
+case "InvalidOperation_UnexpectedWin32Error": return "Unexpected error when calling an operating system function.  The returned error code is 0x{0:x}.";
+case "InvalidOperation_AssertTransparentCode": return "Cannot perform CAS Asserts in Security Transparent methods";
+case "InvalidOperation_NullModuleHandle": return "The requested operation is invalid when called on a null ModuleHandle.";
+case "InvalidOperation_NotWithConcurrentGC": return "This API is not available when the concurrent GC is enabled.";
+case "InvalidOperation_WithoutARM": return "This API is not available when AppDomain Resource Monitoring is not turned on.";
+case "InvalidOperation_NotGenericType": return "This operation is only valid on generic types.";
+case "InvalidOperation_TypeCannotBeBoxed": return "The given type cannot be boxed.";
+case "InvalidOperation_HostModifiedSecurityState": return "The security state of an AppDomain was modified by an AppDomainManager configured with the NoSecurityChanges flag.";
+case "InvalidOperation_StrongNameKeyPairRequired": return "A strong name key pair is required to emit a strong-named dynamic assembly.";
+#if FEATURE_COMINTEROP
+case "InvalidOperation_EventTokenTableRequiresDelegate": return "Type '{0}' is not a delegate type.  EventTokenTable may only be used with delegate types.";
+#endif // FEATURE_COMINTEROP
+case "InvalidOperation_NullArray": return "The underlying array is null.";
+// ;system.security.claims
+case "InvalidOperation_ClaimCannotBeRemoved": return "The Claim '{0}' was not able to be removed.  It is either not part of this Identity or it is a claim that is owned by the Principal that contains this Identity. For example, the Principal will own the claim when creating a GenericPrincipal with roles. The roles will be exposed through the Identity that is passed in the constructor, but not actually owned by the Identity.  Similar logic exists for a RolePrincipal.";
+case "InvalidOperationException_ActorGraphCircular": return "Actor cannot be set so that circular directed graph will exist chaining the subjects together.";
+case "InvalidOperation_AsyncIOInProgress": return "The stream is currently in use by a previous operation on the stream.";
+case "InvalidOperation_APIInvalidForCurrentContext": return "The API '{0}' cannot be used on the current platform.";
+
+// ; InvalidProgramException
+case "InvalidProgram_Default": return "Common Language Runtime detected an invalid program.";
+
+// ; Isolated Storage
+#if FEATURE_ISOSTORE
+case "IsolatedStorage_AssemblyMissingIdentity": return "Unable to determine assembly of the caller.";
+case "IsolatedStorage_ApplicationMissingIdentity": return "Unable to determine application identity of the caller.";
+case "IsolatedStorage_DomainMissingIdentity": return "Unable to determine domain of the caller.";
+case "IsolatedStorage_AssemblyGrantSet": return "Unable to determine granted permission for assembly.";
+case "IsolatedStorage_DomainGrantSet": return "Unable to determine granted permission for domain.";
+case "IsolatedStorage_ApplicationGrantSet": return "Unable to determine granted permission for application.";
+case "IsolatedStorage_Init": return "Initialization failed.";
+case "IsolatedStorage_ApplicationNoEvidence": return "Unable to determine identity of application.";
+case "IsolatedStorage_AssemblyNoEvidence": return "Unable to determine identity of assembly.";
+case "IsolatedStorage_DomainNoEvidence": return "Unable to determine the identity of domain.";
+case "IsolatedStorage_DeleteDirectories": return "Unable to delete; directory or files in the directory could be in use.";
+case "IsolatedStorage_DeleteFile": return "Unable to delete file.";
+case "IsolatedStorage_CreateDirectory": return "Unable to create directory.";
+case "IsolatedStorage_DeleteDirectory": return "Unable to delete, directory not empty or does not exist.";
+case "IsolatedStorage_Operation_ISFS": return "Operation not permitted on IsolatedStorageFileStream.";
+case "IsolatedStorage_Operation": return "Operation not permitted.";
+case "IsolatedStorage_Path": return "Path must be a valid file name.";
+case "IsolatedStorage_FileOpenMode": return "Invalid mode, see System.IO.FileMode.";
+case "IsolatedStorage_SeekOrigin": return "Invalid origin, see System.IO.SeekOrigin.";
+case "IsolatedStorage_Scope_U_R_M": return "Invalid scope, expected User, User|Roaming or Machine.";
+case "IsolatedStorage_Scope_Invalid": return "Invalid scope.";
+case "IsolatedStorage_Exception": return "An error occurred while accessing IsolatedStorage.";
+case "IsolatedStorage_QuotaIsUndefined": return "{0} is not defined for this store. An operation was performed that requires access to {0}. Stores obtained using enumeration APIs do not have a well-defined {0}, since partial evidence is used to open the store.";
+case "IsolatedStorage_CurrentSizeUndefined": return "Current size cannot be determined for this store.";
+case "IsolatedStorage_DomainUndefined": return "Domain cannot be determined on an Assembly or Application store.";
+case "IsolatedStorage_ApplicationUndefined": return "Application cannot be determined on an Assembly or Domain store.";
+case "IsolatedStorage_AssemblyUndefined": return "Assembly cannot be determined for an Application store.";
+case "IsolatedStorage_StoreNotOpen": return "Store must be open for this operation.";
+case "IsolatedStorage_OldQuotaLarger": return "The new quota must be larger than the old quota.";
+case "IsolatedStorage_UsageWillExceedQuota": return "There is not enough free space to perform the operation.";
+case "IsolatedStorage_NotValidOnDesktop": return "The Site scope is currently not supported.";
+case "IsolatedStorage_OnlyIncreaseUserApplicationStore": return "Increasing the quota of this scope is not supported.  Only the user application scope�s quota can be increased.";
+#endif  // FEATURE_ISOSTORE
+
+// ; Verification Exception
+case "Verification_Exception": return "Operation could destabilize the runtime.";
+
+// ; IL stub marshaler exceptions
+case "Marshaler_StringTooLong": return "Marshaler restriction: Excessively long string.";
+
+// ; Missing (General)
+case "MissingConstructor_Name": return "Constructor on type '{0}' not found.";
+case "MissingField": return "Field not found.";
+case "MissingField_Name": return "Field '{0}' not found.";
+case "MissingMember": return "Member not found.";
+case "MissingMember_Name": return "Member '{0}' not found.";
+case "MissingMethod_Name": return "Method '{0}' not found.";
+case "MissingModule": return "Module '{0}' not found.";
+case "MissingType": return "Type '{0}' not found.";
+
+// ; MissingManifestResourceException
+case "Arg_MissingManifestResourceException": return "Unable to find manifest resource.";
+case "MissingManifestResource_LooselyLinked": return "Could not find a manifest resource entry called \"{0}\" in assembly \"{1}\". Please check spelling, capitalization, and build rules to ensure \"{0}\" is being linked into the assembly.";
+case "MissingManifestResource_NoNeutralAsm": return "Could not find any resources appropriate for the specified culture or the neutral culture.  Make sure \"{0}\" was correctly embedded or linked into assembly \"{1}\" at compile time, or that all the satellite assemblies required are loadable and fully signed.";
+case "MissingManifestResource_NoNeutralDisk": return "Could not find any resources appropriate for the specified culture (or the neutral culture) on disk.";
+case "MissingManifestResource_MultipleBlobs": return "A case-insensitive lookup for resource file \"{0}\" in assembly \"{1}\" found multiple entries. Remove the duplicates or specify the exact case.";
+#if !FEATURE_CORECLR
+case "MissingManifestResource_ResWFileNotLoaded": return "Unable to load resources for resource file \"{0}\" in package \"{1}\".";
+case "MissingManifestResource_NoPRIresources": return "Unable to open Package Resource Index.";
+#endif
+
+// ; MissingMember
+case "MissingMemberTypeRef": return "FieldInfo does not match the target Type.";
+case "MissingMemberNestErr": return "TypedReference can only be made on nested value Types.";
+
+// ; MissingSatelliteAssemblyException
+case "MissingSatelliteAssembly_Default": return "Resource lookup fell back to the ultimate fallback resources in a satellite assembly, but that satellite either was not found or could not be loaded. Please consider reinstalling or repairing the application.";
+case "MissingSatelliteAssembly_Culture_Name": return "The satellite assembly named \"{1}\" for fallback culture \"{0}\" either could not be found or could not be loaded. This is generally a setup problem. Please consider reinstalling or repairing the application.";
+
+// ; MulticastNotSupportedException
+case "Multicast_Combine": return "Delegates that are not of type MulticastDelegate may not be combined.";
+
+// ; NotImplementedException
+case "Arg_NotImplementedException": return "The method or operation is not implemented.";
+case "NotImplemented_ResourcesLongerThan2^63": return "Resource files longer than 2^63 bytes are not currently implemented.";
+
+// ; NotSupportedException
+case "NotSupported_NYI": return "This feature is not currently implemented.";
+case "NotSupported_AbstractNonCLS": return "This non-CLS method is not implemented.";
+case "NotSupported_ChangeType": return "ChangeType operation is not supported.";
+case "NotSupported_ContainsStackPtr": return "Cannot create boxed TypedReference, ArgIterator, or RuntimeArgumentHandle Objects.";
+case "NotSupported_ContainsStackPtr[]": return "Cannot create arrays of TypedReference, ArgIterator, ByRef, or RuntimeArgumentHandle Objects.";
+case "NotSupported_OpenType": return "Cannot create arrays of open type. ";
+case "NotSupported_DBNullSerial": return "Only one DBNull instance may exist, and calls to DBNull deserialization methods are not allowed.";
+case "NotSupported_DelegateSerHolderSerial": return "DelegateSerializationHolder objects are designed to represent a delegate during serialization and are not serializable themselves.";
+case "NotSupported_DelegateCreationFromPT": return "Application code cannot use Activator.CreateInstance to create types that derive from System.Delegate. Delegate.CreateDelegate can be used instead.";
+case "NotSupported_EncryptionNeedsNTFS": return "File encryption support only works on NTFS partitions.";
+case "NotSupported_FileStreamOnNonFiles": return "FileStream was asked to open a device that was not a file. For support for devices like 'com1:' or 'lpt1:', call CreateFile, then use the FileStream constructors that take an OS handle as an IntPtr.";
+case "NotSupported_FixedSizeCollection": return "Collection was of a fixed size.";
+case "NotSupported_KeyCollectionSet": return "Mutating a key collection derived from a dictionary is not allowed.";
+case "NotSupported_ValueCollectionSet": return "Mutating a value collection derived from a dictionary is not allowed.";
+case "NotSupported_MemStreamNotExpandable": return "Memory stream is not expandable.";
+case "NotSupported_ObsoleteResourcesFile": return "Found an obsolete .resources file in assembly '{0}'. Rebuild that .resources file then rebuild that assembly.";
+case "NotSupported_OleAutBadVarType": return "The given Variant type is not supported by this OleAut function.";
+case "NotSupported_PopulateData": return "This Surrogate does not support PopulateData().";
+case "NotSupported_ReadOnlyCollection": return "Collection is read-only.";
+case "NotSupported_RangeCollection": return "The specified operation is not supported on Ranges.";
+case "NotSupported_SortedListNestedWrite": return "This operation is not supported on SortedList nested types because they require modifying the original SortedList.";
+case "NotSupported_SubclassOverride": return "Derived classes must provide an implementation.";
+case "NotSupported_TypeCannotDeserialized": return "Direct deserialization of type '{0}' is not supported.";
+case "NotSupported_UnreadableStream": return "Stream does not support reading.";
+case "NotSupported_UnseekableStream": return "Stream does not support seeking.";
+case "NotSupported_UnwritableStream": return "Stream does not support writing.";
+case "NotSupported_CannotWriteToBufferedStreamIfReadBufferCannotBeFlushed": return "Cannot write to a BufferedStream while the read buffer is not empty if the underlying stream is not seekable. Ensure that the stream underlying this BufferedStream can seek or avoid interleaving read and write operations on this BufferedStream.";
+case "NotSupported_Method": return "Method is not supported.";
+case "NotSupported_Constructor": return "Object cannot be created through this constructor.";
+case "NotSupported_DynamicModule": return "The invoked member is not supported in a dynamic module.";
+case "NotSupported_TypeNotYetCreated": return "The invoked member is not supported before the type is created.";
+case "NotSupported_SymbolMethod": return "Not supported in an array method of a type definition that is not complete.";
+case "NotSupported_NotDynamicModule": return "The MethodRental.SwapMethodBody method can only be called to swap the method body of a method in a dynamic module.";
+case "NotSupported_DynamicAssembly": return "The invoked member is not supported in a dynamic assembly.";
+case "NotSupported_NotAllTypesAreBaked": return "Type '{0}' was not completed.";
+case "NotSupported_CannotSaveModuleIndividually": return "Unable to save a ModuleBuilder if it was created underneath an AssemblyBuilder. Call Save on the AssemblyBuilder instead.";
+case "NotSupported_MaxWaitHandles": return "The number of WaitHandles must be less than or equal to 64.";
+case "NotSupported_IllegalOneByteBranch": return "Illegal one-byte branch at position: {0}. Requested branch was: {1}.";
+case "NotSupported_OutputStreamUsingTypeBuilder": return "Output streams do not support TypeBuilders.";
+case "NotSupported_ValueClassCM": return "Custom marshalers for value types are not currently supported.";
+case "NotSupported_Void[]": return "Arrays of System.Void are not supported.";
+case "NotSupported_NoParentDefaultConstructor": return "Parent does not have a default constructor. The default constructor must be explicitly defined.";
+case "NotSupported_NonReflectedType": return "Not supported in a non-reflected type.";
+case "NotSupported_GlobalFunctionNotBaked": return "The type definition of the global function is not completed.";
+case "NotSupported_SecurityPermissionUnion": return "Union is not implemented.";
+case "NotSupported_UnitySerHolder": return "The UnitySerializationHolder object is designed to transmit information about other types and is not serializable itself.";
+case "NotSupported_UnknownTypeCode": return "TypeCode '{0}' was not valid.";
+case "NotSupported_WaitAllSTAThread": return "WaitAll for multiple handles on a STA thread is not supported.";
+case "NotSupported_SignalAndWaitSTAThread": return "SignalAndWait on a STA thread is not supported.";
+case "NotSupported_CreateInstanceWithTypeBuilder": return "CreateInstance cannot be used with an object of type TypeBuilder.";
+case "NotSupported_NonUrlAttrOnMBR": return "UrlAttribute is the only attribute supported for MarshalByRefObject.";
+case "NotSupported_ActivAttrOnNonMBR": return "Activation Attributes are not supported for types not deriving from MarshalByRefObject.";
+case "NotSupported_ActivForCom": return "Activation Attributes not supported for COM Objects.";
+case "NotSupported_NoCodepageData": return "No data is available for encoding {0}. For information on defining a custom encoding, see the documentation for the Encoding.RegisterProvider method.";
+case "NotSupported_CodePage50229": return "The ISO-2022-CN Encoding (Code page 50229) is not supported.";
+case "NotSupported_DynamicAssemblyNoRunAccess": return "Cannot execute code on a dynamic assembly without run access.";
+case "NotSupported_IDispInvokeDefaultMemberWithNamedArgs": return "Invoking default method with named arguments is not supported.";
+case "NotSupported_Type": return "Type is not supported.";
+case "NotSupported_GetMethod": return "The 'get' method is not supported on this property.";
+case "NotSupported_SetMethod": return "The 'set' method is not supported on this property.";
+case "NotSupported_DeclarativeUnion": return "Declarative unionizing of these permissions is not supported.";
+case "NotSupported_StringComparison": return "The string comparison type passed in is currently not supported.";
+case "NotSupported_WrongResourceReader_Type": return "This .resources file should not be read with this reader. The resource reader type is \"{0}\".";
+case "NotSupported_MustBeModuleBuilder": return "Module argument must be a ModuleBuilder.";
+case "NotSupported_CallToVarArg": return "Vararg calling convention not supported.";
+case "NotSupported_TooManyArgs": return "Stack size too deep. Possibly too many arguments.";
+case "NotSupported_DeclSecVarArg": return "Assert, Deny, and PermitOnly are not supported on methods with a Vararg calling convention.";
+case "NotSupported_AmbiguousIdentity": return "The operation is ambiguous because the permission represents multiple identities.";
+case "NotSupported_DynamicMethodFlags": return "Wrong MethodAttributes or CallingConventions for DynamicMethod. Only public, static, standard supported";
+case "NotSupported_GlobalMethodSerialization": return "Serialization of global methods (including implicit serialization via the use of asynchronous delegates) is not supported.";
+case "NotSupported_InComparableType": return "A type must implement IComparable<T> or IComparable to support comparison.";
+case "NotSupported_ManagedActivation": return "Cannot create uninitialized instances of types requiring managed activation.";
+case "NotSupported_ByRefReturn": return "ByRef return value not supported in reflection invocation.";
+case "NotSupported_DelegateMarshalToWrongDomain": return "Delegates cannot be marshaled from native code into a domain other than their home domain.";
+case "NotSupported_ResourceObjectSerialization": return "Cannot read resources that depend on serialization.";
+case "NotSupported_One": return "The arithmetic type '{0}' cannot represent the number one.";
+case "NotSupported_Zero": return "The arithmetic type '{0}' cannot represent the number zero.";
+case "NotSupported_MaxValue": return "The arithmetic type '{0}' does not have a maximum value.";
+case "NotSupported_MinValue": return "The arithmetic type '{0}' does not have a minimum value.";
+case "NotSupported_PositiveInfinity": return "The arithmetic type '{0}' cannot represent positive infinity.";
+case "NotSupported_NegativeInfinity": return "The arithmetic type '{0}' cannot represent negative infinity.";
+case "NotSupported_UmsSafeBuffer": return "This operation is not supported for an UnmanagedMemoryStream created from a SafeBuffer.";
+case "NotSupported_Reading": return "Accessor does not support reading.";
+case "NotSupported_Writing": return "Accessor does not support writing.";
+case "NotSupported_UnsafePointer": return "This accessor was created with a SafeBuffer; use the SafeBuffer to gain access to the pointer.";
+case "NotSupported_CollectibleCOM": return "COM Interop is not supported for collectible types.";
+case "NotSupported_CollectibleAssemblyResolve": return "Resolving to a collectible assembly is not supported.";
+case "NotSupported_CollectibleBoundNonCollectible": return "A non-collectible assembly may not reference a collectible assembly.";
+case "NotSupported_CollectibleDelegateMarshal": return "Delegate marshaling for types within collectible assemblies is not supported.";
+#if FEATURE_WINDOWSPHONE
+case "NotSupported_UserDllImport": return "DllImport cannot be used on user-defined methods.";
+case "NotSupported_UserCOM": return "COM Interop is not supported for user-defined types.";
+#endif //FEATURE_WINDOWSPHONE
+#if FEATURE_CAS_POLICY
+case "NotSupported_RequiresCasPolicyExplicit": return "This method explicitly uses CAS policy, which has been obsoleted by the .NET Framework. In order to enable CAS policy for compatibility reasons, please use the NetFx40_LegacySecurityPolicy configuration switch. Please see http://go.microsoft.com/fwlink/?LinkID": return "155570 for more information.";
+case "NotSupported_RequiresCasPolicyImplicit": return "This method implicitly uses CAS policy, which has been obsoleted by the .NET Framework. In order to enable CAS policy for compatibility reasons, please use the NetFx40_LegacySecurityPolicy configuration switch. Please see http://go.microsoft.com/fwlink/?LinkID": return "155570 for more information.";
+case "NotSupported_CasDeny": return "The Deny stack modifier has been obsoleted by the .NET Framework.  Please see http://go.microsoft.com/fwlink/?LinkId": return "155571 for more information.";
+case "NotSupported_SecurityContextSourceAppDomainInHeterogenous": return "SecurityContextSource.CurrentAppDomain is not supported in heterogenous AppDomains.";
+#endif // FEATURE_CAS_POLICY
+#if FEATURE_APPX
+case "NotSupported_AppX": return "{0} is not supported in AppX.";
+case "LoadOfFxAssemblyNotSupported_AppX": return "{0} of .NET Framework assemblies is not supported in AppX.";
+#endif
+#if FEATURE_COMINTEROP
+case "NotSupported_WinRT_PartialTrust": return "Windows Runtime is not supported in partial trust.";
+#endif // FEATURE_COMINTEROP
+// ; ReflectionTypeLoadException
+case "ReflectionTypeLoad_LoadFailed": return "Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information.";
+#if !FEATURE_CORECLR
+case "NotSupported_NoTypeInfo": return "Cannot resolve {0} to a TypeInfo object.";
+#endif
+#if FEATURE_COMINTEROP
+case "NotSupported_PIAInAppxProcess": return "A Primary Interop Assembly is not supported in AppX.";
+#endif
+#if FEATURE_WINDOWSPHONE
+case "NotSupported_WindowsPhone": return "{0} is not supported on Windows Phone.";
+case "NotSupported_AssemblyLoadCodeBase": return "Assembly.Load with a Codebase is not supported on Windows Phone.";
+#endif
+
+// ; TypeLoadException
+case "TypeLoad_ResolveType": return "Could not resolve type '{0}'.";
+case "TypeLoad_ResolveTypeFromAssembly": return "Could not resolve type '{0}' in assembly '{1}'.";
+case "TypeLoad_ResolveNestedType": return "Could not resolve nested type '{0}' in type \"{1}'.";
+case "FileNotFound_ResolveAssembly": return "Could not resolve assembly '{0}'.";
+
+// ; NullReferenceException
+case "NullReference_This": return "The pointer for this method was null.";
+
+// ; ObjectDisposedException
+case "ObjectDisposed_Generic": return "Cannot access a disposed object.";
+case "ObjectDisposed_FileClosed": return "Cannot access a closed file.";
+case "ObjectDisposed_ObjectName_Name": return "Object name: '{0}'.";
+case "ObjectDisposed_ReaderClosed": return "Cannot read from a closed TextReader.";
+case "ObjectDisposed_ResourceSet": return "Cannot access a closed resource set.";
+case "ObjectDisposed_RegKeyClosed": return "Cannot access a closed registry key.";
+case "ObjectDisposed_StreamClosed": return "Cannot access a closed Stream.";
+case "ObjectDisposed_WriterClosed": return "Cannot write to a closed TextWriter.";
+case "ObjectDisposed_ViewAccessorClosed": return "Cannot access a closed accessor.";
+
+// ; OperationCanceledException
+case "OperationCanceled": return "The operation was canceled.";
+
+// ; OutOfMemoryException
+case "OutOfMemory_GCHandleMDA": return "The GCHandle MDA has run out of available cookies.";
+
+// ; OverflowException
+case "Overflow_Byte": return "Value was either too large or too small for an unsigned byte.";
+case "Overflow_Char": return "Value was either too large or too small for a character.";
+case "Overflow_Currency": return "Value was either too large or too small for a Currency.";
+case "Overflow_Decimal": return "Value was either too large or too small for a Decimal.";
+case "Overflow_Int16": return "Value was either too large or too small for an Int16.";
+case "Overflow_Int32": return "Value was either too large or too small for an Int32.";
+case "Overflow_Int64": return "Value was either too large or too small for an Int64.";
+case "Overflow_NegateTwosCompNum": return "Negating the minimum value of a twos complement number is invalid.";
+case "Overflow_NegativeUnsigned": return "The string was being parsed as an unsigned number and could not have a negative sign.";
+case "Overflow_SByte": return "Value was either too large or too small for a signed byte.";
+case "Overflow_Single": return "Value was either too large or too small for a Single.";
+case "Overflow_Double": return "Value was either too large or too small for a Double.";
+case "Overflow_TimeSpanTooLong": return "TimeSpan overflowed because the duration is too long.";
+case "Overflow_TimeSpanElementTooLarge": return "The TimeSpan could not be parsed because at least one of the numeric components is out of range or contains too many digits.";
+case "Overflow_Duration": return "The duration cannot be returned for TimeSpan.MinValue because the absolute value of TimeSpan.MinValue exceeds the value of TimeSpan.MaxValue.";
+case "Overflow_UInt16": return "Value was either too large or too small for a UInt16.";
+case "Overflow_UInt32": return "Value was either too large or too small for a UInt32.";
+case "Overflow_UInt64": return "Value was either too large or too small for a UInt64.";
+
+// ; PlatformNotsupportedException
+case "PlatformNotSupported_RequiresLonghorn": return "This operation is only supported on Windows Vista and above.";
+case "PlatformNotSupported_RequiresNT": return "This operation is only supported on Windows 2000, Windows XP, and higher.";
+case "PlatformNotSupported_RequiresW2kSP3": return "This operation is only supported on Windows 2000 SP3 or later operating systems.";
+#if FEATURE_COMINTEROP
+case "PlatformNotSupported_WinRT": return "Windows Runtime is not supported on this operating system.";
+#endif // FEATURE_COMINTEROP
+
+// ; PolicyException
+// ; This still appears in bcl.small but should go away eventually
+case "Policy_Default": return "Error occurred while performing a policy operation.";
+case "Policy_CannotLoadSemiTrustAssembliesDuringInit": return "All assemblies loaded as part of AppDomain initialization must be fully trusted.";
+#if FEATURE_IMPERSONATION
+case "Policy_PrincipalTwice": return "Default principal object cannot be set twice.";
+#endif // FEATURE_IMPERSONATION
+#if FEATURE_CAS_POLICY
+case "Policy_PolicyAlreadySet": return "Policy for this domain cannot be set twice.";
+case "Policy_NoExecutionPermission": return "Execution permission cannot be acquired.";
+case "Policy_NoRequiredPermission": return "Required permissions cannot be acquired.";
+case "Policy_MultipleExclusive": return "More than one exclusive group is not allowed.";
+case "Policy_RecoverNotFileBased": return "PolicyLevel object not based on a file cannot be recovered.";
+case "Policy_RecoverNoConfigFile": return "No old configuration file exists to recover.";
+case "Policy_UnableToSave": return "Policy level '{0}' could not be saved: {1}.";
+case "Policy_BadXml": return "Policy configuration XML is invalid. The required tag '{0}' is missing.";
+case "Policy_NonFullTrustAssembly": return "Policy references an assembly not in the full trust assemblies list.";
+case "Policy_MissingActivationContextInAppEvidence": return "The application evidence does not contain a Fusion activation context.";
+case "Policy_NoTrustManager": return "A trust manager could not be loaded for this application.";
+case "Policy_GrantSetDoesNotMatchDomain": return "An assembly was provided an invalid grant set by runtime host '{0}'. In a homogenous AppDomain, the only valid grant sets are FullTrust and the AppDomain's sandbox grant set.";
+#endif  // FEATURE_CAS_POLICY
+case "Policy_SaveNotFileBased": return "PolicyLevel object not based on a file cannot be saved.";
+case "Policy_AppTrustMustGrantAppRequest": return "ApplicationTrust grant set does not contain ActivationContext's minimum request set.";
+
+case "Error_SecurityPolicyFileParse": return "Error occurred while parsing the '{0}' policy level. The default policy level was used instead.";
+case "Error_SecurityPolicyFileParseEx": return "Error '{1}' occurred while parsing the '{0}' policy level. The default policy level was used instead.";
+
+#if FEATURE_CAS_POLICY
+case "Policy_EvidenceMustBeSerializable": return "Objects used as evidence must be serializable.";
+case "Policy_DuplicateEvidence": return "The evidence collection already contains evidence of type '{0}'. Multiple pieces of the same type of evidence are not allowed.";
+case "Policy_IncorrectHostEvidence": return "Runtime host '{0}' returned evidence of type '{1}' from a request for evidence of type '{2}'.";
+case "Policy_NullHostEvidence": return "Runtime host '{0}' returned null when asked for assembly evidence for assembly '{1}'.";
+case "Policy_NullHostGrantSet": return "Runtime host '{0}' returned a null grant set from ResolvePolicy.";
+#endif // FEATURE_CAS_POLICY
+
+// ; Policy codegroup and permission set names and descriptions
+#if FEATURE_CAS_POLICY
+case "Policy_AllCode_Name": return "All_Code";
+case "Policy_AllCode_DescriptionFullTrust": return "Code group grants all code full trust and forms the root of the code group tree.";
+case "Policy_AllCode_DescriptionNothing": return "Code group grants no permissions and forms the root of the code group tree.";
+case "Policy_MyComputer_Name": return "My_Computer_Zone";
+case "Policy_MyComputer_Description": return "Code group grants full trust to all code originating on the local computer";
+case "Policy_Intranet_Name": return "LocalIntranet_Zone";
+case "Policy_Intranet_Description": return "Code group grants the intranet permission set to code from the intranet zone. This permission set grants intranet code the right to use isolated storage, full UI access, some capability to do reflection, and limited access to environment variables.";
+case "Policy_IntranetNet_Name": return "Intranet_Same_Site_Access";
+case "Policy_IntranetNet_Description": return "All intranet code gets the right to connect back to the site of its origin.";
+case "Policy_IntranetFile_Name": return "Intranet_Same_Directory_Access";
+case "Policy_IntranetFile_Description": return "All intranet code gets the right to read from its install directory.";
+case "Policy_Internet_Name": return "Internet_Zone";
+case "Policy_Internet_Description": return "Code group grants code from the Internet zone the Internet permission set. This permission set grants Internet code the right to use isolated storage and limited UI access.";
+case "Policy_InternetNet_Name": return "Internet_Same_Site_Access";
+case "Policy_InternetNet_Description": return "All Internet code gets the right to connect back to the site of its origin.";
+case "Policy_Trusted_Name": return "Trusted_Zone";
+case "Policy_Trusted_Description": return "Code from a trusted zone is granted the Internet permission set. This permission set grants the right to use isolated storage and limited UI access.";
+case "Policy_TrustedNet_Name": return "Trusted_Same_Site_Access";
+case "Policy_TrustedNet_Description": return "All Trusted Code gets the right to connect back to the site of its origin.";
+case "Policy_Untrusted_Name": return "Restricted_Zone";
+case "Policy_Untrusted_Description": return "Code coming from a restricted zone does not receive any permissions.";
+case "Policy_Microsoft_Name": return "Microsoft_Strong_Name";
+case "Policy_Microsoft_Description": return "Code group grants full trust to code signed with the Microsoft strong name.";
+case "Policy_Ecma_Name": return "ECMA_Strong_Name";
+case "Policy_Ecma_Description": return "Code group grants full trust to code signed with the ECMA strong name.";
+
+// ; Policy permission set descriptions
+case "Policy_PS_FullTrust": return "Allows full access to all resources";
+case "Policy_PS_Everything": return "Allows unrestricted access to all resources covered by built-in permissions";
+case "Policy_PS_Nothing": return "Denies all resources, including the right to execute";
+case "Policy_PS_Execution": return "Permits execution";
+case "Policy_PS_SkipVerification": return "Grants right to bypass the verification";
+case "Policy_PS_Internet": return "Default rights given to Internet applications";
+case "Policy_PS_LocalIntranet": return "Default rights given to applications on the local intranet";
+
+// ; default Policy level names
+case "Policy_PL_Enterprise": return "Enterprise";
+case "Policy_PL_Machine": return "Machine";
+case "Policy_PL_User": return "User";
+case "Policy_PL_AppDomain": return "AppDomain";
+#endif  // FEATURE_CAS_POLICY
+
+// ; RankException
+case "Rank_MultiDimNotSupported": return "Only single dimension arrays are supported here.";
+case "Rank_MustMatch": return "The specified arrays must have the same number of dimensions.";
+
+// ; TypeInitializationException
+case "TypeInitialization_Default": return "Type constructor threw an exception.";
+case "TypeInitialization_Type": return "The type initializer for '{0}' threw an exception.";
+
+// ; TypeLoadException
+
+
+// ;
+// ; Reflection exceptions
+// ;
+case "RtType.InvalidCaller": return "Caller is not a friend.";
+
+// ;CustomAttributeFormatException
+case "RFLCT.InvalidPropFail": return "'{0}' property specified was not found.";
+case "RFLCT.InvalidFieldFail": return "'{0}' field specified was not found.";
+
+// ;InvalidFilterCriteriaException
+case "RFLCT.FltCritString": return "A String must be provided for the filter criteria.";
+case "RFLCT.FltCritInt": return "An Int32 must be provided for the filter criteria.";
+
+// ; TargetException
+case "RFLCT.Targ_ITargMismatch": return "Object does not match target type.";
+case "RFLCT.Targ_StatMethReqTarg": return "Non-static method requires a target.";
+case "RFLCT.Targ_StatFldReqTarg": return "Non-static field requires a target.";
+
+// ;AmbiguousMatchException
+case "RFLCT.Ambiguous": return "Ambiguous match found.";
+case "RFLCT.AmbigCust": return "Multiple custom attributes of the same type found.";
+
+// ;
+// ; Remoting exceptions
+// ;
+case "Remoting_AppDomainUnloaded_ThreadUnwound": return "The application domain in which the thread was running has been unloaded.";
+case "Remoting_AppDomainUnloaded": return "The target application domain has been unloaded.";
+case "Remoting_CantRemotePointerType": return "Pointer types cannot be passed in a remote call.";
+case "Remoting_TypeCantBeRemoted": return "The given type cannot be passed in a remote call.";
+case "Remoting_Delegate_TooManyTargets": return "The delegate must have only one target.";
+case "Remoting_InvalidContext": return "The context is not valid.";
+case "Remoting_InvalidValueTypeFieldAccess": return "An attempt was made to calculate the address of a value type field on a remote object. This was likely caused by an attempt to directly get or set the value of a field within this embedded value type. Avoid this and instead provide and use access methods for each field in the object that will be accessed remotely.";
+case "Remoting_Message_BadRetValOrOutArg": return "Bad return value or out-argument inside the return message.";
+case "Remoting_NonPublicOrStaticCantBeCalledRemotely": return "Permission denied: cannot call non-public or static methods remotely.";
+case "Remoting_Proxy_ProxyTypeIsNotMBR": return "classToProxy argument must derive from MarshalByRef type.";
+case "Remoting_TP_NonNull": return "The transparent proxy field of a real proxy must be null.";
+#if FEATURE_REMOTING
+case "Remoting_Activation_BadAttribute": return "Activation attribute does not implement the IContextAttribute interface.";
+case "Remoting_Activation_BadObject": return "Proxy Attribute returned an incompatible object when constructing an instance of type {0}.";
+case "Remoting_Activation_MBR_ProxyAttribute": return "Proxy Attributes are supported on ContextBound types only.";
+case "Remoting_Activation_ConnectFailed": return "An attempt to connect to the remote activator failed with exception '{0}'.";
+case "Remoting_Activation_Failed": return "Activation failed due to an unknown reason.";
+case "Remoting_Activation_InconsistentState": return "Inconsistent state during activation; there may be two proxies for the same object.";
+case "Remoting_Activation_MissingRemoteAppEntry": return "Cannot find an entry for remote application '{0}'.";
+case "Remoting_Activation_NullReturnValue": return "Return value of construction call was null.";
+case "Remoting_Activation_NullFromInternalUnmarshal": return "InternalUnmarshal of returned ObjRef from activation call returned null.";
+case "Remoting_Activation_WellKnownCTOR": return "Cannot run a non-default constructor when connecting to well-known objects.";
+case "Remoting_Activation_PermissionDenied": return "Type '{0}' is not registered for activation.";
+case "Remoting_Activation_PropertyUnhappy": return "A context property did not approve the candidate context for activating the object.";
+case "Remoting_Activation_AsyncUnsupported": return "Async Activation not supported.";
+case "Remoting_AmbiguousCTOR": return "Cannot resolve the invocation to the correct constructor.";
+case "Remoting_AmbiguousMethod": return "Cannot resolve the invocation to the correct method.";
+case "Remoting_AppDomains_NYI": return "This feature is not yet supported for cross-application domain.";
+case "Remoting_AppDomainsCantBeCalledRemotely": return "Permission denied: cannot call methods on the AppDomain class remotely.";
+case "Remoting_AssemblyLoadFailed": return "Cannot load assembly '{0}'.";
+case "Remoting_Attribute_UseAttributeNotsettable": return "UseAttribute not allowed in SoapTypeAttribute.";
+case "Remoting_BadType": return "Cannot load type '{0}'.";
+case "Remoting_BadField": return "Remoting cannot find field '{0}' on type '{1}'.";
+case "Remoting_BadInternalState_ActivationFailure": return "Invalid internal state: Activation service failed to initialize.";
+case "Remoting_BadInternalState_ProxySameAppDomain": return "Invalid internal state: A marshal by ref object should not have a proxy in its own AppDomain.";
+case "Remoting_BadInternalState_FailEnvoySink": return "Invalid internal state: Failed to create an envoy sink for the object.";
+case "Remoting_CantDisconnectClientProxy": return "Cannot call disconnect on a proxy.";
+case "Remoting_CantInvokeIRemoteDispatch": return "Cannot invoke methods on IRemoteDispatch.";
+case "Remoting_ChannelNameAlreadyRegistered": return "The channel '{0}' is already registered.";
+case "Remoting_ChannelNotRegistered": return "The channel '{0}' is not registered with remoting services.";
+case "Remoting_Channel_PopOnEmptySinkStack": return "Tried to pop data from an empty channel sink stack.";
+case "Remoting_Channel_PopFromSinkStackWithoutPush": return "A channel sink tried to pop data from the stack without first pushing data onto the stack.";
+case "Remoting_Channel_StoreOnEmptySinkStack": return "A channel sink called the Store method when the sink stack was empty.";
+case "Remoting_Channel_StoreOnSinkStackWithoutPush": return "A channel sink called the Store method on the sink stack without first pushing data onto the stack.";
+case "Remoting_Channel_CantCallAPRWhenStackEmpty": return "Cannot call the AsyncProcessResponse method on the previous channel sink because the stack is empty.";
+case "Remoting_Channel_CantCallFRSWhenStackEmtpy": return "Called FlipRememberedStack() when stack was not null.";
+case "Remoting_Channel_CantCallGetResponseStreamWhenStackEmpty": return "Cannot call the GetResponseStream method on the previous channel sink because the stack is empty.";
+case "Remoting_Channel_DispatchSinkMessageMissing": return "No message was deserialized prior to calling the DispatchChannelSink.";
+case "Remoting_Channel_DispatchSinkWantsNullRequestStream": return "The request stream should be null when the DispatchChannelSink is called. ";
+case "Remoting_Channel_CannotBeSecured": return "Channel {0} cannot be secured. Please consider using a channel that implements ISecurableChannel";
+case "Remoting_Config_ChannelMissingCtor": return "To be used from a .config file, the channel type '{0}' must have a constructor of the form '{1}'";
+case "Remoting_Config_SinkProviderMissingCtor": return "To be used from a .config file, the sink provider type '{0}' must have a constructor of the form '{1}'";
+case "Remoting_Config_SinkProviderNotFormatter": return "A sink provider of type '{0}' is incorrectly labeled as a 'formatter'.";
+case "Remoting_Config_ConfigurationFailure": return "Remoting configuration failed with the exception '{0}'.";
+case "Remoting_Config_InvalidTimeFormat": return "Invalid time format '{0}'. Examples of valid time formats include 7D, 10H, 5M, 30S, or 20MS.";
+case "Remoting_Config_AppNameSet": return "The remoting application name, '{0}', had already been set.";
+case "Remoting_Config_ErrorsModeSet": return "The remoting custom errors mode had already been set.";
+case "Remoting_Config_CantRedirectActivationOfWellKnownService": return "Attempt to redirect activation for type '{0}, {1}'. This is not allowed since either a well-known service type has already been registered with that type or that type has been registered has a activated service type.";
+case "Remoting_Config_CantUseRedirectedTypeForWellKnownService": return "Attempt to register a well-known or activated service type of type '{0}, {1}'. This is not allowed since the type has already been redirected to activate elsewhere.";
+case "Remoting_Config_InvalidChannelType": return "'{0}' does not implement IChannelReceiver or IChannelSender. All channels must implement one of these interfaces.";
+case "Remoting_Config_InvalidSinkProviderType": return "Unable to use '{0}' as a channel sink provider. It does not implement '{1}'.";
+case "Remoting_Config_MissingWellKnownModeAttribute": return "Well-known service entries must contain a 'mode' attribute with a value of 'Singleton' or 'SingleCall'.";
+case "Remoting_Config_MissingTypeAttribute": return "'{0}' entries must contain a '{1}' attribute of the form 'typeName, assemblyName'.";
+case "Remoting_Config_MissingXmlTypeAttribute": return "'{0}' entries must contain a '{1}' attribute of the form 'xmlTypeName, xmlTypeNamespace'.";
+case "Remoting_Config_NoAppName": return "Improper remoting configuration: missing ApplicationName property.";
+case "Remoting_Config_NonTemplateIdAttribute": return "Only '{0}' templates can have an 'id' attribute.";
+case "Remoting_Config_PreloadRequiresTypeOrAssembly": return "Preload entries require a type or assembly attribute.";
+case "Remoting_Config_ProviderNeedsElementName": return "Sink providers must have an element name of 'formatter' or 'provider'.";
+case "Remoting_Config_RequiredXmlAttribute": return "'{0}' entries require a '{1}' attribute.";
+case "Remoting_Config_ReadFailure": return ".Config file '{0}' cannot be read successfully due to exception '{1}'.";
+case "Remoting_Config_NodeMustBeUnique": return "There can be only one '{0}' node in the '{1}' section of a config file.";
+case "Remoting_Config_TemplateCannotReferenceTemplate": return "A '{0}' template cannot reference another '{0}' template.";
+case "Remoting_Config_TypeAlreadyRedirected": return "Attempt to redirect activation of type '{0}, {1}' which is already redirected.";
+case "Remoting_Config_UnknownValue": return "Unknown value {1} was found on the {0} node.";
+case "Remoting_Config_UnableToResolveTemplate": return "Cannot resolve '{0}' template reference: '{1}'.";
+case "Remoting_Config_VersionPresent": return "Version information is present in the assembly name '{0}' which is not allowed for '{1}' entries.";
+case "Remoting_Contexts_BadProperty": return "A property that contributed a bad sink to the chain was found.";
+case "Remoting_Contexts_NoProperty": return "A property with the name '{0}' was not found.";
+case "Remoting_Contexts_ContextNotFrozenForCallBack": return "Context should be frozen before calling the DoCallBack method.";
+case "Remoting_Default": return "Unknown remoting error.";
+case "Remoting_HandlerNotRegistered": return "The tracking handler of type '{0}' is not registered with Remoting Services.";
+case "Remoting_InvalidMsg": return "Invalid Message Object.";
+case "Remoting_InvalidCallingType": return "Attempted to call a method declared on type '{0}' on an object which exposes '{1}'.";
+case "Remoting_InvalidRequestedType": return "The server object type cannot be cast to the requested type '{0}'.";
+case "Remoting_InternalError": return "Server encountered an internal error. For more information, turn off customErrors in the server's .config file.";
+case "Remoting_Lifetime_ILeaseReturn": return "Expected a return object of type ILease, but received '{0}'.";
+case "Remoting_Lifetime_InitialStateInitialLeaseTime": return "InitialLeaseTime property can only be set when the lease is in initial state. The state is '{0}'.";
+case "Remoting_Lifetime_InitialStateRenewOnCall": return "RenewOnCallTime property can only be set when the lease is in initial state. The state is '{0}'.";
+case "Remoting_Lifetime_InitialStateSponsorshipTimeout": return "SponsorshipTimeout property can only be set when the lease is in initial state. State is '{0}'.";
+case "Remoting_Lifetime_SetOnce": return "'{0}' can only be set once within an AppDomain.";
+case "Remoting_Message_ArgMismatch": return "{2} arguments were passed to '{0}::{1}'. {3} arguments were expected by this method.";
+case "Remoting_Message_BadAsyncResult": return "The async result object is null or of an unexpected type.";
+case "Remoting_Message_BadType": return "The method was called with a Message of an unexpected type.";
+case "Remoting_Message_CoercionFailed": return "The argument type '{0}' cannot be converted into parameter type '{1}'.";
+case "Remoting_Message_MissingArgValue": return "Expecting an instance of type '{0}' at pos {1} in the args array.";
+case "Remoting_Message_BadSerialization": return "Invalid or malformed serialization information for the message object.";
+case "Remoting_NoIdentityEntry": return "No remoting information was found for this object.";
+case "Remoting_NotRemotableByReference": return "Trying to create a proxy to an unbound type.";
+case "Remoting_NullMessage": return "The method was called with a null message.";
+case "Remoting_Proxy_BadType": return "The proxy is of an unsupported type.";
+case "Remoting_ResetURI": return "Attempt to reset the URI for an object from '{0}' to '{1}'.";
+case "Remoting_ServerObjectNotFound": return "The server object for URI '{0}' is not registered with the remoting infrastructure (it may have been disconnected).";
+case "Remoting_SetObjectUriForMarshal__ObjectNeedsToBeLocal": return "SetObjectUriForMarshal method should only be called for MarshalByRefObjects that exist in the current AppDomain.";
+case "Remoting_SetObjectUriForMarshal__UriExists": return "SetObjectUriForMarshal method has already been called on this object or the object has already been marshaled.";
+case "Remoting_Proxy_BadReturnType": return "Return argument has an invalid type.";
+case "Remoting_Proxy_ReturnValueTypeCannotBeNull": return "ByRef value type parameter cannot be null.";
+case "Remoting_Proxy_BadReturnTypeForActivation": return "Bad return type for activation call via Invoke: must be of type IConstructionReturnMessage.";
+case "Remoting_Proxy_BadTypeForActivation": return "Type mismatch between proxy type '{0}' and activation type '{1}'.";
+case "Remoting_Proxy_ExpectedOriginalMessage": return "The message passed to Invoke should be passed to PropagateOutParameters.";
+case "Remoting_Proxy_InvalidCall": return "Trying to call proxy while constructor call is in progress.";
+case "Remoting_Proxy_InvalidState": return "Channel sink does not exist. Failed to dispatch async call.";
+case "Remoting_Proxy_NoChannelSink": return "This remoting proxy has no channel sink which means either the server has no registered server channels that are listening, or this application has no suitable client channel to talk to the server.";
+case "Remoting_Proxy_InvalidCallType": return "Only the synchronous call type is supported for messages that are not of type Message.";
+case "Remoting_Proxy_WrongContext": return " ExecuteMessage can be called only from the native context of the object.";
+case "Remoting_SOAPInteropxsdInvalid": return "Soap Parse error, xsd:type '{0}' invalid {1}";
+case "Remoting_SOAPQNameNamespace": return "SoapQName missing a Namespace value '{0}'.";
+case "Remoting_ThreadAffinity_InvalidFlag": return "The specified flag '{0}' does not have one of the valid values.";
+case "Remoting_TrackingHandlerAlreadyRegistered": return "The handler has already been registered with TrackingServices.";
+case "Remoting_URIClash": return "Found two different objects associated with the same URI, '{0}'.";
+case "Remoting_URIExists": return "The remoted object already has an associated URI.";
+case "Remoting_URIToProxy": return "Trying to associate the URI with a proxy.";
+case "Remoting_WellKnown_MustBeMBR": return "Attempted to create well-known object of type '{0}'. Well-known objects must derive from the MarshalByRefObject class.";
+case "Remoting_WellKnown_CtorCantMarshal": return "'{0}': A well-known object cannot marshal itself in its constructor, or perform any action that would cause it to be marshaled (such as passing the 'this' pointer as a parameter to a remote method).";
+case "Remoting_WellKnown_CantDirectlyConnect": return "Attempt to connect to a server using its object URI: '{0}'. A valid, complete URL must be used.";
+case "Remoting_Connect_CantCreateChannelSink": return "Cannot create channel sink to connect to URL '{0}'. An appropriate channel has probably not been registered.";
+case "Remoting_UnexpectedNullTP": return "Failed to create a transparent proxy. If a custom RealProxy is being used ensure it sets the proxy type.";
+// ; The following remoting exception messages appear in native resources too (mscorrc.rc)
+case "Remoting_Disconnected": return "Object '{0}' has been disconnected or does not exist at the server.";
+case "Remoting_Message_MethodMissing": return "The method '{0}' was not found on the interface/type '{1}'.";
+#endif  // FEATURE_REMOTING
+
+// ; Resources exceptions
+// ;
+case "Resources_StreamNotValid": return "Stream is not a valid resource file.";
+case "ResourceReaderIsClosed": return "ResourceReader is closed.";
+
+// ; RuntimeWrappedException
+case "RuntimeWrappedException": return "An object that does not derive from System.Exception has been wrapped in a RuntimeWrappedException.";
+
+// ; UnauthorizedAccessException
+case "UnauthorizedAccess_MemStreamBuffer": return "MemoryStream's internal buffer cannot be accessed.";
+case "UnauthorizedAccess_IODenied_Path": return "Access to the path '{0}' is denied.";
+case "UnauthorizedAccess_IODenied_NoPathName": return "Access to the path is denied.";
+case "UnauthorizedAccess_RegistryKeyGeneric_Key": return "Access to the registry key '{0}' is denied.";
+case "UnauthorizedAccess_RegistryNoWrite": return "Cannot write to the registry key.";
+case "UnauthorizedAccess_SystemDomain": return "Cannot execute an assembly in the system domain.";
+
+// ;
+// ; Security exceptions
+// ;
+
+// ;SecurityException
+// ; These still appear in bcl.small but should go away eventually
+case "Security_Generic": return "Request for the permission of type '{0}' failed.";
+case "Security_GenericNoType": return "Request failed.";
+case "Security_NoAPTCA": return "That assembly does not allow partially trusted callers.";
+case "Security_RegistryPermission": return "Requested registry access is not allowed.";
+case "Security_MustRevertOverride": return "Stack walk modifier must be reverted before another modification of the same type can be performed.";
+#if FEATURE_CAS_POLICY
+case "Security_CannotGenerateHash": return "Hash for the assembly cannot be generated.";
+case "Security_CannotGetRawData": return "Assembly bytes could not be retrieved.";
+case "Security_PrincipalPermission": return "Request for principal permission failed.";
+case "Security_Action": return "The action that failed was:";
+case "Security_TypeFirstPermThatFailed": return "The type of the first permission that failed was:";
+case "Security_FirstPermThatFailed": return "The first permission that failed was:";
+case "Security_Demanded": return "The demand was for:";
+case "Security_GrantedSet": return "The granted set of the failing assembly was:";
+case "Security_RefusedSet": return "The refused set of the failing assembly was:";
+case "Security_Denied": return "The denied permissions were:";
+case "Security_PermitOnly": return "The only permitted permissions were:";
+case "Security_Assembly": return "The assembly or AppDomain that failed was:";
+case "Security_Method": return "The method that caused the failure was:";
+case "Security_Zone": return "The Zone of the assembly that failed was:";
+case "Security_Url": return "The Url of the assembly that failed was:";
+case "Security_AnonymouslyHostedDynamicMethodCheckFailed": return "The demand failed due to the code access security information captured during the creation of an anonymously hosted dynamic method. In order for this operation to succeed, ensure that the demand would have succeeded at the time the method was created. See http://go.microsoft.com/fwlink/?LinkId": return "288746 for more information.";
+#endif  // FEATURE_CAS_POLICY
+
+// ;
+// ; HostProtection exceptions
+// ;
+
+case "HostProtection_HostProtection": return "Attempted to perform an operation that was forbidden by the CLR host.";
+case "HostProtection_ProtectedResources": return "The protected resources (only available with full trust) were:";
+case "HostProtection_DemandedResources": return "The demanded resources were:";
+
+// ;
+// ; IO exceptions
+// ;
+
+// ; EOFException
+case "IO.EOF_ReadBeyondEOF": return "Unable to read beyond the end of the stream.";
+
+// ; FileNotFoundException
+case "IO.FileNotFound": return "Unable to find the specified file.";
+case "IO.FileNotFound_FileName": return "Could not find file '{0}'.";
+case "IO.FileName_Name": return "File name: '{0}'";
+case "IO.FileLoad": return "Could not load the specified file.";
+
+// ; IOException
+case "IO.IO_AlreadyExists_Name": return "Cannot create \"{0}\" because a file or directory with the same name already exists.";
+case "IO.IO_BindHandleFailed": return "BindHandle for ThreadPool failed on this handle.";
+case "IO.IO_FileExists_Name": return "The file '{0}' already exists.";
+case "IO.IO_FileStreamHandlePosition": return "The OS handle's position is not what FileStream expected. Do not use a handle simultaneously in one FileStream and in Win32 code or another FileStream. This may cause data loss.";
+case "IO.IO_FileTooLong2GB": return "The file is too long. This operation is currently limited to supporting files less than 2 gigabytes in size.";
+case "IO.IO_FileTooLongOrHandleNotSync": return "IO operation will not work. Most likely the file will become too long or the handle was not opened to support synchronous IO operations.";
+case "IO.IO_FixedCapacity": return "Unable to expand length of this stream beyond its capacity.";
+case "IO.IO_InvalidStringLen_Len": return "BinaryReader encountered an invalid string length of {0} characters.";
+case "IO.IO_NoConsole": return "There is no console.";
+case "IO.IO_NoPermissionToDirectoryName": return "<Path discovery permission to the specified directory was denied.>";
+case "IO.IO_SeekBeforeBegin": return "An attempt was made to move the position before the beginning of the stream.";
+case "IO.IO_SeekAppendOverwrite": return "Unable seek backward to overwrite data that previously existed in a file opened in Append mode.";
+case "IO.IO_SetLengthAppendTruncate": return "Unable to truncate data that previously existed in a file opened in Append mode.";
+case "IO.IO_SharingViolation_File": return "The process cannot access the file '{0}' because it is being used by another process.";
+case "IO.IO_SharingViolation_NoFileName": return "The process cannot access the file because it is being used by another process.";
+case "IO.IO_StreamTooLong": return "Stream was too long.";
+case "IO.IO_CannotCreateDirectory": return "The specified directory '{0}' cannot be created.";
+case "IO.IO_SourceDestMustBeDifferent": return "Source and destination path must be different.";
+case "IO.IO_SourceDestMustHaveSameRoot": return "Source and destination path must have identical roots. Move will not work across volumes.";
+
+// ; DirectoryNotFoundException
+case "IO.DriveNotFound_Drive": return "Could not find the drive '{0}'. The drive might not be ready or might not be mapped.";
+case "IO.PathNotFound_Path": return "Could not find a part of the path '{0}'.";
+case "IO.PathNotFound_NoPathName": return "Could not find a part of the path.";
+
+// ; PathTooLongException
+case "IO.PathTooLong": return "The specified path, file name, or both are too long. The fully qualified file name must be less than 260 characters, and the directory name must be less than 248 characters.";
+
+#if FEATURE_CORECLR
+// ; SecurityException
+case "FileSecurityState_OperationNotPermitted": return "File operation not permitted. Access to path '{0}' is denied.";
+#endif
+
+// ; PrivilegeNotHeldException
+case "PrivilegeNotHeld_Default": return "The process does not possess some privilege required for this operation.";
+case "PrivilegeNotHeld_Named": return "The process does not possess the '{0}' privilege which is required for this operation.";
+
+// ; General strings used in the IO package
+case "IO_UnknownFileName": return "[Unknown]";
+case "IO_StreamWriterBufferedDataLost": return "A StreamWriter was not closed and all buffered data within that StreamWriter was not flushed to the underlying stream.  (This was detected when the StreamWriter was finalized with data in its buffer.)  A portion of the data was lost.  Consider one of calling Close(), Flush(), setting the StreamWriter's AutoFlush property to true, or allocating the StreamWriter with a \"using\" statement.  Stream type: {0}\r\nFile name: {1}\r\nAllocated from:\r\n {2}";
+case "IO_StreamWriterBufferedDataLostCaptureAllocatedFromCallstackNotEnabled": return "callstack information is not captured by default for performance reasons. Please enable captureAllocatedCallStack config switch for streamWriterBufferedDataLost MDA (refer to MSDN MDA documentation for how to do this).  ";
+
+// ;
+// ; Serialization Exceptions
+// ;
+#if FEATURE_SERIALIZATION
+// ; SerializationException
+case "Serialization_NoID": return "Object has never been assigned an objectID.";
+case "Serialization_UnknownMemberInfo": return "Only FieldInfo, PropertyInfo, and SerializationMemberInfo are recognized.";
+case "Serialization_UnableToFixup": return "Cannot perform fixup.";
+case "Serialization_NoType": return "Object does not specify a type.";
+case "Serialization_ValueTypeFixup": return "ValueType fixup on Arrays is not implemented.";
+case "Serialization_PartialValueTypeFixup": return "Fixing up a partially available ValueType chain is not implemented.";
+case "Serialization_InvalidData": return "An error occurred while deserializing the object.  The serialized data is corrupt.";
+case "Serialization_InvalidID": return "Object specifies an invalid ID.";
+case "Serialization_InvalidPtrValue": return "An IntPtr or UIntPtr with an eight byte value cannot be deserialized on a machine with a four byte word size.";
+case "Serialization_DuplicateSelector": return "Selector is already on the list of checked selectors.";
+case "Serialization_MemberTypeNotRecognized": return "Unknown member type.";
+case "Serialization_NoBaseType": return "Object does not specify a base type.";
+case "Serialization_ArrayNoLength": return "Array does not specify a length.";
+case "Serialization_CannotGetType": return "Cannot get the type '{0}'.";
+case "Serialization_AssemblyNotFound": return "Unable to find assembly '{0}'.";
+case "Serialization_ArrayInvalidLength": return "Array specifies an invalid length.";
+case "Serialization_MalformedArray": return "The array information in the stream is invalid.";
+case "Serialization_InsufficientState": return "Insufficient state to return the real object.";
+case "Serialization_InvalidFieldState": return "Object fields may not be properly initialized.";
+case "Serialization_MissField": return "Field {0} is missing.";
+case "Serialization_MultipleMembers": return "Cannot resolve multiple members with the same name.";
+case "Serialization_NullSignature": return "The method signature cannot be null.";
+case "Serialization_ObjectUsedBeforeDeserCallback": return "An object was used before its deserialization callback ran, which may break higher-level consistency guarantees in the application.";
+case "Serialization_UnknownMember": return "Cannot get the member '{0}'.";
+case "Serialization_RegisterTwice": return "An object cannot be registered twice.";
+case "Serialization_IdTooSmall": return "Object IDs must be greater than zero.";
+case "Serialization_NotFound": return "Member '{0}' was not found.";
+case "Serialization_InsufficientDeserializationState": return "Insufficient state to deserialize the object. Missing field '{0}'. More information is needed.";
+case "Serialization_UnableToFindModule": return "The given module {0} cannot be found within the assembly {1}.";
+case "Serialization_TooManyReferences": return "The implementation of the IObjectReference interface returns too many nested references to other objects that implement IObjectReference.";
+case "Serialization_NotISer": return "The given object does not implement the ISerializable interface.";
+case "Serialization_InvalidOnDeser": return "OnDeserialization method was called while the object was not being deserialized.";
+case "Serialization_MissingKeys": return "The Keys for this Hashtable are missing.";
+case "Serialization_MissingKeyValuePairs": return "The KeyValuePairs for this Dictionary are missing.";
+case "Serialization_MissingValues": return "The values for this dictionary are missing.";
+case "Serialization_NullKey": return "One of the serialized keys is null.";
+case "Serialization_KeyValueDifferentSizes": return "The keys and values arrays have different sizes.";
+case "Serialization_SurrogateCycleInArgument": return "Selector contained a cycle.";
+case "Serialization_SurrogateCycle": return "Adding selector will introduce a cycle.";
+case "Serialization_NeverSeen": return "A fixup is registered to the object with ID {0}, but the object does not appear in the graph.";
+case "Serialization_IORIncomplete": return "The object with ID {0} implements the IObjectReference interface for which all dependencies cannot be resolved. The likely cause is two instances of IObjectReference that have a mutual dependency on each other.";
+case "Serialization_NotCyclicallyReferenceableSurrogate": return "{0}.SetObjectData returns a value that is neither null nor equal to the first parameter. Such Surrogates cannot be part of cyclical reference.";
+case "Serialization_ObjectNotSupplied": return "The object with ID {0} was referenced in a fixup but does not exist.";
+case "Serialization_TooManyElements": return "The internal array cannot expand to greater than Int32.MaxValue elements.";
+case "Serialization_SameNameTwice": return "Cannot add the same member twice to a SerializationInfo object.";
+case "Serialization_InvalidType": return "Only system-provided types can be passed to the GetUninitializedObject method. '{0}' is not a valid instance of a type.";
+case "Serialization_MissingObject": return "The object with ID {0} was referenced in a fixup but has not been registered.";
+case "Serialization_InvalidFixupType": return "A member fixup was registered for an object which implements ISerializable or has a surrogate. In this situation, a delayed fixup must be used.";
+case "Serialization_InvalidFixupDiscovered": return "A fixup on an object implementing ISerializable or having a surrogate was discovered for an object which does not have a SerializationInfo available.";
+case "Serialization_InvalidFormat": return "The input stream is not a valid binary format. The starting contents (in bytes) are: {0} ...";
+case "Serialization_ParentChildIdentical": return "The ID of the containing object cannot be the same as the object ID.";
+case "Serialization_IncorrectNumberOfFixups": return "The ObjectManager found an invalid number of fixups. This usually indicates a problem in the Formatter.";
+case "Serialization_BadParameterInfo": return "Non existent ParameterInfo. Position bigger than member's parameters length.";
+case "Serialization_NoParameterInfo": return "Serialized member does not have a ParameterInfo.";
+case "Serialization_StringBuilderMaxCapacity": return "The serialized MaxCapacity property of StringBuilder must be positive and greater than or equal to the String length.";
+case "Serialization_StringBuilderCapacity": return "The serialized Capacity property of StringBuilder must be positive, less than or equal to MaxCapacity and greater than or equal to the String length.";
+case "Serialization_InvalidDelegateType": return "Cannot serialize delegates over unmanaged function pointers, dynamic methods or methods outside the delegate creator's assembly.";
+case "Serialization_OptionalFieldVersionValue": return "Version value must be positive.";
+case "Serialization_MissingDateTimeData": return "Invalid serialized DateTime data. Unable to find 'ticks' or 'dateData'.";
+case "Serialization_DateTimeTicksOutOfRange": return "Invalid serialized DateTime data. Ticks must be between DateTime.MinValue.Ticks and DateTime.MaxValue.Ticks. ";
+// ; The following serialization exception messages appear in native resources too (mscorrc.rc)
+case "Serialization_NonSerType": return "Type '{0}' in Assembly '{1}' is not marked as serializable.";
+case "Serialization_ConstructorNotFound": return "The constructor to deserialize an object of type '{0}' was not found.";
+
+// ; SerializationException used by Formatters
+case "Serialization_ArrayType": return "Invalid array type '{0}'.";
+case "Serialization_ArrayTypeObject": return "Array element type is Object, 'dt' attribute is null.";
+case "Serialization_Assembly": return "No assembly information is available for object on the wire, '{0}'.";
+case "Serialization_AssemblyId": return "No assembly ID for object type '{0}'.";
+case "Serialization_BinaryHeader": return "Binary stream '{0}' does not contain a valid BinaryHeader. Possible causes are invalid stream or object version change between serialization and deserialization.";
+case "Serialization_CrossAppDomainError": return "Cross-AppDomain BinaryFormatter error; expected '{0}' but received '{1}'.";
+case "Serialization_CorruptedStream": return "Invalid BinaryFormatter stream.";
+case "Serialization_HeaderReflection": return "Header reflection error: number of value members: {0}.";
+case "Serialization_ISerializableTypes": return "Types not available for ISerializable object '{0}'.";
+case "Serialization_ISerializableMemberInfo": return "MemberInfo requested for ISerializable type.";
+case "Serialization_MBRAsMBV": return "Type {0} must be marshaled by reference in this context.";
+case "Serialization_Map": return "No map for object '{0}'.";
+case "Serialization_MemberInfo": return "MemberInfo cannot be obtained for ISerialized Object '{0}'.";
+case "Serialization_Method": return "Invalid MethodCall or MethodReturn stream format.";
+case "Serialization_MissingMember": return "Member '{0}' in class '{1}' is not present in the serialized stream and is not marked with {2}.";
+case "Serialization_NoMemberInfo": return "No MemberInfo for Object {0}.";
+case "Serialization_ObjNoID": return "Object {0} has never been assigned an objectID.";
+case "Serialization_ObjectTypeEnum": return "Invalid ObjectTypeEnum {0}.";
+case "Serialization_ParseError": return "Parse error. Current element is not compatible with the next element, {0}.";
+case "Serialization_SerMemberInfo": return "MemberInfo type {0} cannot be serialized.";
+case "Serialization_Stream": return "Attempting to deserialize an empty stream.";
+case "Serialization_StreamEnd": return "End of Stream encountered before parsing was completed.";
+case "Serialization_TopObject": return "No top object.";
+case "Serialization_TopObjectInstantiate": return "Top object cannot be instantiated for element '{0}'.";
+case "Serialization_TypeCode": return "Invalid type code in stream '{0}'.";
+case "Serialization_TypeExpected": return "Invalid expected type.";
+case "Serialization_TypeMissing": return "Type is missing for member of type Object '{0}'.";
+case "Serialization_TypeRead": return "Invalid read type request '{0}'.";
+case "Serialization_TypeSecurity": return "Type {0} and the types derived from it (such as {1}) are not permitted to be deserialized at this security level.";
+case "Serialization_TypeWrite": return "Invalid write type request '{0}'.";
+case "Serialization_XMLElement": return "Invalid element '{0}'.";
+case "Serialization_Security": return "Because of security restrictions, the type {0} cannot be accessed.";
+case "Serialization_TypeLoadFailure": return "Unable to load type {0} required for deserialization.";
+case "Serialization_RequireFullTrust": return "A type '{0}' that is defined in a partially trusted assembly cannot be type forwarded from an assembly with a different Public Key Token or without a public key token. To fix this, please either turn on unsafeTypeForwarding flag in the configuration file or remove the TypeForwardedFrom attribute.";
+// ; The following serialization exception messages appear in native resources too (mscorrc.rc)
+case "Serialization_TypeResolved": return "Type is not resolved for member '{0}'.";
+case "Serialization_MemberOutOfRange": return "The deserialized value of the member \"{0}\" in the class \"{1}\" is out of range.";
+#endif  // FEATURE_SERIALIZATION
+
+// ;
+// ; StringBuilder Exceptions
+// ;
+case "Arg_LongerThanSrcString": return "Source string was not long enough. Check sourceIndex and count.";
+
+
+// ;
+// ; System.Threading
+// ;
+
+// ;
+// ; Thread Exceptions
+// ;
+case "ThreadState_NoAbortRequested": return "Unable to reset abort because no abort was requested.";
+case "Threading.WaitHandleTooManyPosts": return "The WaitHandle cannot be signaled because it would exceed its maximum count.";
+// ;
+// ; WaitHandleCannotBeOpenedException
+// ;
+case "Threading.WaitHandleCannotBeOpenedException": return "No handle of the given name exists.";
+case "Threading.WaitHandleCannotBeOpenedException_InvalidHandle": return "A WaitHandle with system-wide name '{0}' cannot be created. A WaitHandle of a different type might have the same name.";
+
+// ;
+// ; AbandonedMutexException
+// ;
+case "Threading.AbandonedMutexException": return "The wait completed due to an abandoned mutex.";
+
+// ; AggregateException
+case "AggregateException_ctor_DefaultMessage": return "One or more errors occurred.";
+case "AggregateException_ctor_InnerExceptionNull": return "An element of innerExceptions was null.";
+case "AggregateException_DeserializationFailure": return "The serialization stream contains no inner exceptions.";
+case "AggregateException_ToString": return "{0}{1}---> (Inner Exception #{2}) {3}{4}{5}";
+
+// ; Cancellation
+case "CancellationToken_CreateLinkedToken_TokensIsEmpty": return "No tokens were supplied.";
+case "CancellationTokenSource_Disposed": return "The CancellationTokenSource has been disposed.";
+case "CancellationToken_SourceDisposed": return "The CancellationTokenSource associated with this CancellationToken has been disposed.";
+
+// ; Exceptions shared by all concurrent collection
+case "ConcurrentCollection_SyncRoot_NotSupported": return "The SyncRoot property may not be used for the synchronization of concurrent collections.";
+
+// ; Exceptions shared by ConcurrentStack and ConcurrentQueue
+case "ConcurrentStackQueue_OnDeserialization_NoData": return "The serialization stream contains no elements.";
+
+// ; ConcurrentStack<T>
+case "ConcurrentStack_PushPopRange_StartOutOfRange": return "The startIndex argument must be greater than or equal to zero.";
+case "ConcurrentStack_PushPopRange_CountOutOfRange": return "The count argument must be greater than or equal to zero.";
+case "ConcurrentStack_PushPopRange_InvalidCount": return "The sum of the startIndex and count arguments must be less than or equal to the collection's Count.";
+
+// ; ConcurrentDictionary<TKey, TValue>
+case "ConcurrentDictionary_ItemKeyIsNull": return "TKey is a reference type and item.Key is null.";
+case "ConcurrentDictionary_SourceContainsDuplicateKeys": return "The source argument contains duplicate keys.";
+case "ConcurrentDictionary_IndexIsNegative": return "The index argument is less than zero.";
+case "ConcurrentDictionary_ConcurrencyLevelMustBePositive": return "The concurrencyLevel argument must be positive.";
+case "ConcurrentDictionary_CapacityMustNotBeNegative": return "The capacity argument must be greater than or equal to zero.";
+case "ConcurrentDictionary_ArrayNotLargeEnough": return "The index is equal to or greater than the length of the array, or the number of elements in the dictionary is greater than the available space from index to the end of the destination array.";
+case "ConcurrentDictionary_ArrayIncorrectType": return "The array is multidimensional, or the type parameter for the set cannot be cast automatically to the type of the destination array.";
+case "ConcurrentDictionary_KeyAlreadyExisted": return "The key already existed in the dictionary.";
+case "ConcurrentDictionary_TypeOfKeyIncorrect": return "The key was of an incorrect type for this dictionary.";
+case "ConcurrentDictionary_TypeOfValueIncorrect": return "The value was of an incorrect type for this dictionary.";
+
+// ; Partitioner
+case "Partitioner_DynamicPartitionsNotSupported": return "Dynamic partitions are not supported by this partitioner.";
+
+// ; OrderablePartitioner
+case "OrderablePartitioner_GetPartitions_WrongNumberOfPartitions": return "GetPartitions returned an incorrect number of partitions.";
+
+// ; PartitionerStatic
+case "PartitionerStatic_CurrentCalledBeforeMoveNext": return "MoveNext must be called at least once before calling Current.";
+case "PartitionerStatic_CanNotCallGetEnumeratorAfterSourceHasBeenDisposed": return "Can not call GetEnumerator on partitions after the source enumerable is disposed";
+
+// ; CDSCollectionETWBCLProvider events
+case "event_ConcurrentStack_FastPushFailed": return "Push to ConcurrentStack spun {0} time(s).";
+case "event_ConcurrentStack_FastPopFailed": return "Pop from ConcurrentStack spun {0} time(s).";
+case "event_ConcurrentDictionary_AcquiringAllLocks": return "ConcurrentDictionary acquiring all locks on {0} bucket(s).";
+case "event_ConcurrentBag_TryTakeSteals": return "ConcurrentBag stealing in TryTake.";
+case "event_ConcurrentBag_TryPeekSteals": return "ConcurrentBag stealing in TryPeek.";
+
+// ; CountdownEvent
+case "CountdownEvent_Decrement_BelowZero": return "Invalid attempt made to decrement the event's count below zero.";
+case "CountdownEvent_Increment_AlreadyZero": return "The event is already signaled and cannot be incremented.";
+case "CountdownEvent_Increment_AlreadyMax": return "The increment operation would cause the CurrentCount to overflow.";
+
+// ; Parallel
+case "Parallel_Invoke_ActionNull": return "One of the actions was null.";
+case "Parallel_ForEach_OrderedPartitionerKeysNotNormalized": return "This method requires the use of an OrderedPartitioner with the KeysNormalized property set to true.";
+case "Parallel_ForEach_PartitionerNotDynamic": return "The Partitioner used here must support dynamic partitioning.";
+case "Parallel_ForEach_PartitionerReturnedNull": return "The Partitioner used here returned a null partitioner source.";
+case "Parallel_ForEach_NullEnumerator": return "The Partitioner source returned a null enumerator.";
+
+// ; SemaphyoreFullException
+case "Threading_SemaphoreFullException": return "Adding the specified count to the semaphore would cause it to exceed its maximum count.";
+
+// ; Lazy
+case "Lazy_ctor_ValueSelectorNull": return "The valueSelector argument is null.";
+case "Lazy_ctor_InfoNull": return "The info argument is null.";
+case "Lazy_ctor_deserialization_ValueInvalid": return "The Value cannot be null.";
+case "Lazy_ctor_ModeInvalid": return "The mode argument specifies an invalid value.";
+case "Lazy_CreateValue_NoParameterlessCtorForT": return "The lazily-initialized type does not have a public, parameterless constructor.";
+case "Lazy_StaticInit_InvalidOperation": return "ValueFactory returned null.";
+case "Lazy_Value_RecursiveCallsToValue": return "ValueFactory attempted to access the Value property of this instance.";
+case "Lazy_ToString_ValueNotCreated": return "Value is not created.";
+
+
+// ;ThreadLocal
+case "ThreadLocal_Value_RecursiveCallsToValue": return "ValueFactory attempted to access the Value property of this instance.";
+case "ThreadLocal_Disposed": return "The ThreadLocal object has been disposed.";
+case "ThreadLocal_ValuesNotAvailable": return "The ThreadLocal object is not tracking values. To use the Values property, use a ThreadLocal constructor that accepts the trackAllValues parameter and set the parameter to true.";
+
+// ; SemaphoreSlim
+case "SemaphoreSlim_ctor_InitialCountWrong": return "The initialCount argument must be non-negative and less than or equal to the maximumCount.";
+case "SemaphoreSlim_ctor_MaxCountWrong": return "The maximumCount argument must be a positive number. If a maximum is not required, use the constructor without a maxCount parameter.";
+case "SemaphoreSlim_Wait_TimeoutWrong": return "The timeout must represent a value between -1 and Int32.MaxValue, inclusive.";
+case "SemaphoreSlim_Release_CountWrong": return "The releaseCount argument must be greater than zero.";
+case "SemaphoreSlim_Disposed": return "The semaphore has been disposed.";
+
+// ; ManualResetEventSlim
+case "ManualResetEventSlim_ctor_SpinCountOutOfRange": return "The spinCount argument must be in the range 0 to {0}, inclusive.";
+case "ManualResetEventSlim_ctor_TooManyWaiters": return "There are too many threads currently waiting on the event. A maximum of {0} waiting threads are supported.";
+case "ManualResetEventSlim_Disposed": return "The event has been disposed.";
+
+// ; SpinLock
+case "SpinLock_TryEnter_ArgumentOutOfRange": return "The timeout must be a value between -1 and Int32.MaxValue, inclusive.";
+case "SpinLock_TryEnter_LockRecursionException": return "The calling thread already holds the lock.";
+case "SpinLock_TryReliableEnter_ArgumentException": return "The tookLock argument must be set to false before calling this method.";
+case "SpinLock_Exit_SynchronizationLockException": return "The calling thread does not hold the lock.";
+case "SpinLock_IsHeldByCurrentThread": return "Thread tracking is disabled.";
+
+// ; SpinWait
+case "SpinWait_SpinUntil_TimeoutWrong": return "The timeout must represent a value between -1 and Int32.MaxValue, inclusive.";
+case "SpinWait_SpinUntil_ArgumentNull": return "The condition argument is null.";
+
+// ; CdsSyncEtwBCLProvider events
+case "event_SpinLock_FastPathFailed": return "SpinLock beginning to spin.";
+case "event_SpinWait_NextSpinWillYield": return "Next spin will yield.";
+case "event_Barrier_PhaseFinished": return "Barrier finishing phase {1}.";
+
+// ;
+// ; System.Threading.Tasks
+// ;
+
+// ; AsyncMethodBuilder
+case "AsyncMethodBuilder_InstanceNotInitialized": return "The builder was not properly initialized.";
+
+// ; TaskAwaiter and YieldAwaitable
+case "AwaitableAwaiter_InstanceNotInitialized": return "The awaitable or awaiter was not properly initialized.";
+case "TaskAwaiter_TaskNotCompleted": return "The awaited task has not yet completed.";
+
+// ; Task<T>
+case "TaskT_SetException_HasAnInitializer": return "A task's Exception may only be set directly if the task was created without a function.";
+case "TaskT_TransitionToFinal_AlreadyCompleted": return "An attempt was made to transition a task to a final state when it had already completed.";
+case "TaskT_ctor_SelfReplicating": return "It is invalid to specify TaskCreationOptions.SelfReplicating for a Task<TResult>.";
+case "TaskT_DebuggerNoResult": return "{Not yet computed}";
+
+// ; Task
+case "Task_ctor_LRandSR": return "(Internal)An attempt was made to create a LongRunning SelfReplicating task.";
+case "Task_ThrowIfDisposed": return "The task has been disposed.";
+case "Task_Dispose_NotCompleted": return "A task may only be disposed if it is in a completion state (RanToCompletion, Faulted or Canceled).";
+case "Task_Start_Promise": return "Start may not be called on a promise-style task.";
+case "Task_Start_AlreadyStarted": return "Start may not be called on a task that was already started.";
+case "Task_Start_TaskCompleted": return "Start may not be called on a task that has completed.";
+case "Task_Start_ContinuationTask": return "Start may not be called on a continuation task.";
+case "Task_RunSynchronously_AlreadyStarted": return "RunSynchronously may not be called on a task that was already started.";
+case "Task_RunSynchronously_TaskCompleted": return "RunSynchronously may not be called on a task that has already completed.";
+case "Task_RunSynchronously_Promise": return "RunSynchronously may not be called on a task not bound to a delegate, such as the task returned from an asynchronous method.";
+case "Task_RunSynchronously_Continuation": return "RunSynchronously may not be called on a continuation task.";
+case "Task_ContinueWith_NotOnAnything": return "The specified TaskContinuationOptions excluded all continuation kinds.";
+case "Task_ContinueWith_ESandLR": return "The specified TaskContinuationOptions combined LongRunning and ExecuteSynchronously.  Synchronous continuations should not be long running.";
+case "Task_MultiTaskContinuation_NullTask": return "The tasks argument included a null value.";
+case "Task_MultiTaskContinuation_FireOptions": return "It is invalid to exclude specific continuation kinds for continuations off of multiple tasks.";
+case "Task_MultiTaskContinuation_EmptyTaskList": return "The tasks argument contains no tasks.";
+case "Task_FromAsync_TaskManagerShutDown": return "FromAsync was called with a TaskManager that had already shut down.";
+case "Task_FromAsync_SelfReplicating": return "It is invalid to specify TaskCreationOptions.SelfReplicating in calls to FromAsync.";
+case "Task_FromAsync_LongRunning": return "It is invalid to specify TaskCreationOptions.LongRunning in calls to FromAsync.";
+case "Task_FromAsync_PreferFairness": return "It is invalid to specify TaskCreationOptions.PreferFairness in calls to FromAsync.";
+case "Task_WaitMulti_NullTask": return "The tasks array included at least one null element.";
+case "Task_Delay_InvalidMillisecondsDelay": return "The value needs to be either -1 (signifying an infinite timeout), 0 or a positive integer.";
+case "Task_Delay_InvalidDelay": return "The value needs to translate in milliseconds to -1 (signifying an infinite timeout), 0 or a positive integer less than or equal to Int32.MaxValue.";
+
+// ; TaskCanceledException
+case "TaskCanceledException_ctor_DefaultMessage": return "A task was canceled.";
+
+// ;TaskCompletionSource<T>
+case "TaskCompletionSourceT_TrySetException_NullException": return "The exceptions collection included at least one null element.";
+case "TaskCompletionSourceT_TrySetException_NoExceptions": return "The exceptions collection was empty.";
+
+// ;TaskExceptionHolder
+case "TaskExceptionHolder_UnknownExceptionType": return "(Internal)Expected an Exception or an IEnumerable<Exception>";
+case "TaskExceptionHolder_UnhandledException": return "A Task's exception(s) were not observed either by Waiting on the Task or accessing its Exception property. As a result, the unobserved exception was rethrown by the finalizer thread.";
+
+// ; TaskScheduler
+case "TaskScheduler_ExecuteTask_TaskAlreadyExecuted": return "ExecuteTask may not be called for a task which was already executed.";
+case "TaskScheduler_ExecuteTask_WrongTaskScheduler": return "ExecuteTask may not be called for a task which was previously queued to a different TaskScheduler.";
+case "TaskScheduler_InconsistentStateAfterTryExecuteTaskInline": return "The TryExecuteTaskInline call to the underlying scheduler succeeded, but the task body was not invoked.";
+case "TaskScheduler_FromCurrentSynchronizationContext_NoCurrent": return "The current SynchronizationContext may not be used as a TaskScheduler.";
+
+// ; TaskSchedulerException
+case "TaskSchedulerException_ctor_DefaultMessage": return "An exception was thrown by a TaskScheduler.";
+
+// ;
+// ; ParallelState ( used in Parallel.For(), Parallel.ForEach() )
+case "ParallelState_Break_InvalidOperationException_BreakAfterStop": return "Break was called after Stop was called.";
+case "ParallelState_Stop_InvalidOperationException_StopAfterBreak": return "Stop was called after Break was called.";
+case "ParallelState_NotSupportedException_UnsupportedMethod": return "This method is not supported.";
+
+// ;
+// ; TPLETWProvider events
+case "event_ParallelLoopBegin": return "Beginning {3} loop {2} from Task {1}.";
+case "event_ParallelLoopEnd": return "Ending loop {2} after {3} iterations.";
+case "event_ParallelInvokeBegin": return "Beginning ParallelInvoke {2} from Task {1} for {4} actions.";
+case "event_ParallelInvokeEnd": return "Ending ParallelInvoke {2}.";
+case "event_ParallelFork": return "Task {1} entering fork/join {2}.";
+case "event_ParallelJoin": return "Task {1} leaving fork/join {2}.";
+case "event_TaskScheduled": return "Task {2} scheduled to TaskScheduler {0}.";
+case "event_TaskStarted": return "Task {2} executing.";
+case "event_TaskCompleted": return "Task {2} completed.";
+case "event_TaskWaitBegin": return "Beginning wait ({3}) on Task {2}.";
+case "event_TaskWaitEnd": return "Ending wait on Task {2}.";
+
+
+// ;
+// ; Weak Reference Exception
+// ;
+case "WeakReference_NoLongerValid": return "The weak reference is no longer valid.";
+
+
+// ;
+// ; Interop Exceptions
+// ;
+case "Interop.COM_TypeMismatch": return "Type mismatch between source and destination types.";
+case "Interop_Marshal_Unmappable_Char": return "Cannot marshal: Encountered unmappable character.";
+
+#if FEATURE_COMINTEROP_WINRT_DESKTOP_HOST
+case "WinRTHostDomainName": return "Windows Runtime Object Host Domain for '{0}'";
+#endif
+
+// ;
+// ; Loader Exceptions
+// ;
+case "Loader_InvalidPath": return "Relative path must be a string that contains the substring, \"..\", or does not contain a root directory.";
+case "Loader_Name": return "Name:";
+case "Loader_NoContextPolicies": return "There are no context policies.";
+case "Loader_ContextPolicies": return "Context Policies:";
+
+// ;
+// ; AppDomain Exceptions
+case "AppDomain_RequireApplicationName": return "ApplicationName must be set before the DynamicBase can be set.";
+case "AppDomain_AppBaseNotSet": return "The ApplicationBase must be set before retrieving this property.";
+
+#if FEATURE_HOST_ASSEMBLY_RESOLVER
+case "AppDomain_BindingModelIsLocked": return "Binding model is already locked for the AppDomain and cannot be reset.";
+case "Argument_CustomAssemblyLoadContextRequestedNameMismatch": return "Resolved assembly's simple name should be the same as of the requested assembly.";
+#endif // FEATURE_HOST_ASSEMBLY_RESOLVER
+// ;
+// ; XMLSyntaxExceptions
+case "XMLSyntax_UnexpectedEndOfFile": return "Unexpected end of file.";
+case "XMLSyntax_ExpectedCloseBracket": return "Expected > character.";
+case "XMLSyntax_ExpectedSlashOrString": return "Expected / character or string.";
+case "XMLSyntax_UnexpectedCloseBracket": return "Unexpected > character.";
+case "XMLSyntax_SyntaxError": return "Invalid syntax on line {0}.";
+case "XMLSyntax_SyntaxErrorEx": return "Invalid syntax on line {0} - '{1}'.";
+case "XMLSyntax_InvalidSyntax": return "Invalid syntax.";
+case "XML_Syntax_InvalidSyntaxInFile": return "Invalid XML in file '{0}' near element '{1}'.";
+case "XMLSyntax_InvalidSyntaxSatAssemTag": return "Invalid XML in file \"{0}\" near element \"{1}\". The <satelliteassemblies> section only supports <assembly> tags.";
+case "XMLSyntax_InvalidSyntaxSatAssemTagBadAttr": return "Invalid XML in file \"{0}\" near \"{1}\" and \"{2}\". In the <satelliteassemblies> section, the <assembly> tag must have exactly 1 attribute called 'name', whose value is a fully-qualified assembly name.";
+case "XMLSyntax_InvalidSyntaxSatAssemTagNoAttr": return "Invalid XML in file \"{0}\". In the <satelliteassemblies> section, the <assembly> tag must have exactly 1 attribute called 'name', whose value is a fully-qualified assembly name.";
+
+// ; CodeGroup
+#if FEATURE_CAS_POLICY
+case "NetCodeGroup_PermissionSet": return "Same site Web";
+case "MergeLogic_Union": return "Union";
+case "MergeLogic_FirstMatch": return "First Match";
+case "FileCodeGroup_PermissionSet": return "Same directory FileIO - '{0}'";
+#endif // FEATURE_CAS_POLICY
+
+// ; MembershipConditions
+case "StrongName_ToString": return "StrongName - {0}{1}{2}";
+case "StrongName_Name": return "name = {0}";
+case "StrongName_Version": return "version = {0}";
+case "Site_ToString": return "Site";
+case "Publisher_ToString": return "Publisher";
+case "Hash_ToString": return "Hash - {0} = {1}";
+case "ApplicationDirectory_ToString": return "ApplicationDirectory";
+case "Zone_ToString": return "Zone - {0}";
+case "All_ToString": return "All code";
+case "Url_ToString": return "Url";
+case "GAC_ToString": return "GAC";
+#if FEATURE_CAS_POLICY
+case "Site_ToStringArg": return "Site - {0}";
+case "Publisher_ToStringArg": return "Publisher - {0}";
+case "Url_ToStringArg": return "Url - {0}";
+#endif // FEATURE_CAS_POLICY
+
+
+// ; Interop non exception strings.
+case "TypeLibConverter_ImportedTypeLibProductName": return "Assembly imported from type library '{0}'.";
+
+// ;
+// ; begin System.TimeZoneInfo ArgumentException's
+// ;
+case "Argument_AdjustmentRulesNoNulls": return "The AdjustmentRule array cannot contain null elements.";
+case "Argument_AdjustmentRulesOutOfOrder": return "The elements of the AdjustmentRule array must be in chronological order and must not overlap.";
+case "Argument_AdjustmentRulesAmbiguousOverlap": return "The elements of the AdjustmentRule array must not contain ambiguous time periods that extend beyond the DateStart or DateEnd properties of the element.";
+case "Argument_AdjustmentRulesrDaylightSavingTimeOverlap": return "The elements of the AdjustmentRule array must not contain Daylight Saving Time periods that overlap adjacent elements in such a way as to cause invalid or ambiguous time periods.";
+case "Argument_AdjustmentRulesrDaylightSavingTimeOverlapNonRuleRange": return "The elements of the AdjustmentRule array must not contain Daylight Saving Time periods that overlap the DateStart or DateEnd properties in such a way as to cause invalid or ambiguous time periods.";
+case "Argument_AdjustmentRulesInvalidOverlap": return "The elements of the AdjustmentRule array must not contain invalid time periods that extend beyond the DateStart or DateEnd properties of the element. ";
+case "Argument_ConvertMismatch": return "The conversion could not be completed because the supplied DateTime did not have the Kind property set correctly.  For example, when the Kind property is DateTimeKind.Local, the source time zone must be TimeZoneInfo.Local.";
+case "Argument_DateTimeHasTimeOfDay": return "The supplied DateTime includes a TimeOfDay setting.   This is not supported.";
+case "Argument_DateTimeIsInvalid": return "The supplied DateTime represents an invalid time.  For example, when the clock is adjusted forward, any time in the period that is skipped is invalid.";
+case "Argument_DateTimeIsNotAmbiguous": return "The supplied DateTime is not in an ambiguous time range.";
+case "Argument_DateTimeOffsetIsNotAmbiguous": return "The supplied DateTimeOffset is not in an ambiguous time range.";
+case "Argument_DateTimeKindMustBeUnspecified": return "The supplied DateTime must have the Kind property set to DateTimeKind.Unspecified.";
+case "Argument_DateTimeHasTicks": return "The supplied DateTime must have the Year, Month, and Day properties set to 1.  The time cannot be specified more precisely than whole milliseconds.";
+case "Argument_InvalidId": return "The specified ID parameter '{0}' is not supported.";
+case "Argument_InvalidSerializedString": return "The specified serialized string '{0}' is not supported.";
+case "Argument_InvalidREG_TZI_FORMAT": return "The REG_TZI_FORMAT structure is corrupt.";
+case "Argument_OutOfOrderDateTimes": return "The DateStart property must come before the DateEnd property.";
+case "Argument_TimeSpanHasSeconds": return "The TimeSpan parameter cannot be specified more precisely than whole minutes.";
+case "Argument_TimeZoneInfoBadTZif": return "The tzfile does not begin with the magic characters 'TZif'.  Please verify that the file is not corrupt.";
+case "Argument_TimeZoneInfoInvalidTZif": return "The TZif data structure is corrupt.";
+case "Argument_TransitionTimesAreIdentical": return "The DaylightTransitionStart property must not equal the DaylightTransitionEnd property.";
+// ;
+// ; begin System.TimeZoneInfo ArgumentOutOfRangeException's
+// ;
+case "ArgumentOutOfRange_DayParam": return "The Day parameter must be in the range 1 through 31.";
+case "ArgumentOutOfRange_DayOfWeek": return "The DayOfWeek enumeration must be in the range 0 through 6.";
+case "ArgumentOutOfRange_MonthParam": return "The Month parameter must be in the range 1 through 12.";
+case "ArgumentOutOfRange_UtcOffset": return "The TimeSpan parameter must be within plus or minus 14.0 hours.";
+case "ArgumentOutOfRange_UtcOffsetAndDaylightDelta": return "The sum of the BaseUtcOffset and DaylightDelta properties must within plus or minus 14.0 hours.";
+case "ArgumentOutOfRange_Week": return "The Week parameter must be in the range 1 through 5.";
+// ;
+// ; begin System.TimeZoneInfo InvalidTimeZoneException's
+// ;
+case "InvalidTimeZone_InvalidRegistryData": return "The time zone ID '{0}' was found on the local computer, but the registry information was corrupt.";
+case "InvalidTimeZone_InvalidWin32APIData": return "The Local time zone was found on the local computer, but the data was corrupt.";
+// ;
+// ; begin System.TimeZoneInfo SecurityException's
+// ;
+case "Security_CannotReadRegistryData": return "The time zone ID '{0}' was found on the local computer, but the application does not have permission to read the registry information.";
+// ;
+// ; begin System.TimeZoneInfo SerializationException's
+// ;
+case "Serialization_CorruptField": return "The value of the field '{0}' is invalid.  The serialized data is corrupt.  ";
+case "Serialization_InvalidEscapeSequence": return "The serialized data contained an invalid escape sequence '\\{0}'.";
+// ;
+// ; begin System.TimeZoneInfo TimeZoneNotFoundException's
+// ;
+case "TimeZoneNotFound_MissingRegistryData": return "The time zone ID '{0}' was not found on the local computer.";
+// ;
+// ; end System.TimeZoneInfo
+// ;
+
+
+// ; Tuple
+case "ArgumentException_TupleIncorrectType": return "Argument must be of type {0}.";
+case "ArgumentException_TupleNonIComparableElement": return "The tuple contains an element of type {0} which does not implement the IComparable interface.";
+case "ArgumentException_TupleLastArgumentNotATuple": return "The last element of an eight element tuple must be a Tuple.";
+case "ArgumentException_OtherNotArrayOfCorrectLength": return "Object is not a array with the same number of elements as the array to compare it to.";
+
+// ; WinRT collection adapters
+case "Argument_IndexOutOfArrayBounds": return "The specified index is out of bounds of the specified array.";
+case "Argument_InsufficientSpaceToCopyCollection": return "The specified space is not sufficient to copy the elements from this Collection.";
+case "ArgumentOutOfRange_IndexLargerThanMaxValue": return "This collection cannot work with indices larger than Int32.MaxValue - 1 (0x7FFFFFFF - 1).";
+case "ArgumentOutOfRange_IndexOutOfRange": return "The specified index is outside the current index range of this collection.";
+case "InvalidOperation_CollectionBackingListTooLarge": return "The collection backing this List contains too many elements.";
+case "InvalidOperation_CollectionBackingDictionaryTooLarge": return "The collection backing this Dictionary contains too many elements.";
+case "InvalidOperation_CannotRemoveLastFromEmptyCollection": return "Cannot remove the last element from an empty collection.";
+
+// ; Globalization resources
+// ;------------------
+
+#if !FEATURE_CORECLR
+case "Globalization.LegacyModifier": return " Legacy";
+
+// ;
+// ;Total items: 809
+// ;
+case "Globalization.ci_": return "Invariant Language (Invariant Country)";
+case "Globalization.ci_aa": return "Afar";
+case "Globalization.ci_aa-DJ": return "Afar (Djibouti)";
+case "Globalization.ci_aa-ER": return "Afar (Eritrea)";
+case "Globalization.ci_aa-ET": return "Afar (Ethiopia)";
+case "Globalization.ci_af": return "Afrikaans";
+case "Globalization.ci_af-NA": return "Afrikaans (Namibia)";
+case "Globalization.ci_af-ZA": return "Afrikaans (South Africa)";
+case "Globalization.ci_agq": return "Aghem";
+case "Globalization.ci_agq-CM": return "Aghem (Cameroon)";
+case "Globalization.ci_ak": return "Akan";
+case "Globalization.ci_ak-GH": return "Akan (Ghana)";
+case "Globalization.ci_am": return "Amharic";
+case "Globalization.ci_am-ET": return "Amharic (Ethiopia)";
+case "Globalization.ci_ar": return "Arabic";
+case "Globalization.ci_ar-001": return "Arabic (World)";
+case "Globalization.ci_ar-AE": return "Arabic (U.A.E.)";
+case "Globalization.ci_ar-BH": return "Arabic (Bahrain)";
+case "Globalization.ci_ar-DJ": return "Arabic (Djibouti)";
+case "Globalization.ci_ar-DZ": return "Arabic (Algeria)";
+case "Globalization.ci_ar-EG": return "Arabic (Egypt)";
+case "Globalization.ci_ar-ER": return "Arabic (Eritrea)";
+case "Globalization.ci_ar-IL": return "Arabic (Israel)";
+case "Globalization.ci_ar-IQ": return "Arabic (Iraq)";
+case "Globalization.ci_ar-JO": return "Arabic (Jordan)";
+case "Globalization.ci_ar-KM": return "Arabic (Comoros)";
+case "Globalization.ci_ar-KW": return "Arabic (Kuwait)";
+case "Globalization.ci_ar-LB": return "Arabic (Lebanon)";
+case "Globalization.ci_ar-LY": return "Arabic (Libya)";
+case "Globalization.ci_ar-MA": return "Arabic (Morocco)";
+case "Globalization.ci_ar-MR": return "Arabic (Mauritania)";
+case "Globalization.ci_ar-OM": return "Arabic (Oman)";
+case "Globalization.ci_ar-PS": return "Arabic (Palestinian Authority)";
+case "Globalization.ci_ar-QA": return "Arabic (Qatar)";
+case "Globalization.ci_ar-SA": return "Arabic (Saudi Arabia)";
+case "Globalization.ci_ar-SD": return "Arabic (Sudan)";
+case "Globalization.ci_ar-SO": return "Arabic (Somalia)";
+case "Globalization.ci_ar-SS": return "Arabic (South Sudan)";
+case "Globalization.ci_ar-SY": return "Arabic (Syria)";
+case "Globalization.ci_ar-TD": return "Arabic (Chad)";
+case "Globalization.ci_ar-TN": return "Arabic (Tunisia)";
+case "Globalization.ci_ar-YE": return "Arabic (Yemen)";
+case "Globalization.ci_arn": return "Mapudungun";
+case "Globalization.ci_arn-CL": return "Mapudungun (Chile)";
+case "Globalization.ci_as": return "Assamese";
+case "Globalization.ci_as-IN": return "Assamese (India)";
+case "Globalization.ci_asa": return "Asu";
+case "Globalization.ci_asa-TZ": return "Asu (Tanzania)";
+case "Globalization.ci_ast": return "Asturian";
+case "Globalization.ci_ast-ES": return "Asturian (Spain)";
+case "Globalization.ci_az": return "Azerbaijani";
+case "Globalization.ci_az-Cyrl": return "Azerbaijani (Cyrillic)";
+case "Globalization.ci_az-Cyrl-AZ": return "Azerbaijani (Cyrillic, Azerbaijan)";
+case "Globalization.ci_az-Latn": return "Azerbaijani (Latin)";
+case "Globalization.ci_az-Latn-AZ": return "Azerbaijani (Latin, Azerbaijan)";
+case "Globalization.ci_ba": return "Bashkir";
+case "Globalization.ci_ba-RU": return "Bashkir (Russia)";
+case "Globalization.ci_bas": return "Basaa";
+case "Globalization.ci_bas-CM": return "Basaa (Cameroon)";
+case "Globalization.ci_be": return "Belarusian";
+case "Globalization.ci_be-BY": return "Belarusian (Belarus)";
+case "Globalization.ci_bem": return "Bemba";
+case "Globalization.ci_bem-ZM": return "Bemba (Zambia)";
+case "Globalization.ci_bez": return "Bena";
+case "Globalization.ci_bez-TZ": return "Bena (Tanzania)";
+case "Globalization.ci_bg": return "Bulgarian";
+case "Globalization.ci_bg-BG": return "Bulgarian (Bulgaria)";
+case "Globalization.ci_bm": return "Bambara";
+case "Globalization.ci_bm-Latn": return "Bambara (Latin)";
+case "Globalization.ci_bm-Latn-ML": return "Bambara (Latin, Mali)";
+case "Globalization.ci_bm-ML": return "Bamanankan (Latin, Mali)";
+case "Globalization.ci_bn": return "Bangla";
+case "Globalization.ci_bn-BD": return "Bangla (Bangladesh)";
+case "Globalization.ci_bn-IN": return "Bangla (India)";
+case "Globalization.ci_bo": return "Tibetan";
+case "Globalization.ci_bo-CN": return "Tibetan (PRC)";
+case "Globalization.ci_bo-IN": return "Tibetan (India)";
+case "Globalization.ci_br": return "Breton";
+case "Globalization.ci_br-FR": return "Breton (France)";
+case "Globalization.ci_brx": return "Bodo";
+case "Globalization.ci_brx-IN": return "Bodo (India)";
+case "Globalization.ci_bs": return "Bosnian";
+case "Globalization.ci_bs-Cyrl": return "Bosnian (Cyrillic)";
+case "Globalization.ci_bs-Cyrl-BA": return "Bosnian (Cyrillic, Bosnia and Herzegovina)";
+case "Globalization.ci_bs-Latn": return "Bosnian (Latin)";
+case "Globalization.ci_bs-Latn-BA": return "Bosnian (Latin, Bosnia and Herzegovina)";
+case "Globalization.ci_byn": return "Blin";
+case "Globalization.ci_byn-ER": return "Blin (Eritrea)";
+case "Globalization.ci_ca": return "Catalan";
+case "Globalization.ci_ca-AD": return "Catalan (Andorra)";
+case "Globalization.ci_ca-ES": return "Catalan (Catalan)";
+case "Globalization.ci_ca-ES-valencia": return "Valencian (Spain)";
+case "Globalization.ci_ca-FR": return "Catalan (France)";
+case "Globalization.ci_ca-IT": return "Catalan (Italy)";
+case "Globalization.ci_cgg": return "Chiga";
+case "Globalization.ci_cgg-UG": return "Chiga (Uganda)";
+case "Globalization.ci_chr": return "Cherokee";
+case "Globalization.ci_chr-Cher": return "Cherokee (Cherokee)";
+case "Globalization.ci_chr-Cher-US": return "Cherokee (Cherokee)";
+case "Globalization.ci_co": return "Corsican";
+case "Globalization.ci_co-FR": return "Corsican (France)";
+case "Globalization.ci_cs": return "Czech";
+case "Globalization.ci_cs-CZ": return "Czech (Czech Republic)";
+case "Globalization.ci_cy": return "Welsh";
+case "Globalization.ci_cy-GB": return "Welsh (United Kingdom)";
+case "Globalization.ci_da": return "Danish";
+case "Globalization.ci_da-DK": return "Danish (Denmark)";
+case "Globalization.ci_da-GL": return "Danish (Greenland)";
+case "Globalization.ci_dav": return "Taita";
+case "Globalization.ci_dav-KE": return "Taita (Kenya)";
+case "Globalization.ci_de": return "German";
+case "Globalization.ci_de-AT": return "German (Austria)";
+case "Globalization.ci_de-BE": return "German (Belgium)";
+case "Globalization.ci_de-CH": return "German (Switzerland)";
+case "Globalization.ci_de-DE": return "German (Germany)";
+case "Globalization.ci_de-DE_phoneb": return "German (Germany)";
+case "Globalization.ci_de-LI": return "German (Liechtenstein)";
+case "Globalization.ci_de-LU": return "German (Luxembourg)";
+case "Globalization.ci_dje": return "Zarma";
+case "Globalization.ci_dje-NE": return "Zarma (Niger)";
+case "Globalization.ci_dsb": return "Lower Sorbian";
+case "Globalization.ci_dsb-DE": return "Lower Sorbian (Germany)";
+case "Globalization.ci_dua": return "Duala";
+case "Globalization.ci_dua-CM": return "Duala (Cameroon)";
+case "Globalization.ci_dv": return "Divehi";
+case "Globalization.ci_dv-MV": return "Divehi (Maldives)";
+case "Globalization.ci_dyo": return "Jola-Fonyi";
+case "Globalization.ci_dyo-SN": return "Jola-Fonyi (Senegal)";
+case "Globalization.ci_dz": return "Dzongkha";
+case "Globalization.ci_dz-BT": return "Dzongkha (Bhutan)";
+case "Globalization.ci_ebu": return "Embu";
+case "Globalization.ci_ebu-KE": return "Embu (Kenya)";
+case "Globalization.ci_ee": return "Ewe";
+case "Globalization.ci_ee-GH": return "Ewe (Ghana)";
+case "Globalization.ci_ee-TG": return "Ewe (Togo)";
+case "Globalization.ci_el": return "Greek";
+case "Globalization.ci_el-CY": return "Greek (Cyprus)";
+case "Globalization.ci_el-GR": return "Greek (Greece)";
+case "Globalization.ci_en": return "English";
+case "Globalization.ci_en-001": return "English (World)";
+case "Globalization.ci_en-029": return "English (Caribbean)";
+case "Globalization.ci_en-150": return "English (Europe)";
+case "Globalization.ci_en-AG": return "English (Antigua and Barbuda)";
+case "Globalization.ci_en-AI": return "English (Anguilla)";
+case "Globalization.ci_en-AS": return "English (American Samoa)";
+case "Globalization.ci_en-AU": return "English (Australia)";
+case "Globalization.ci_en-BB": return "English (Barbados)";
+case "Globalization.ci_en-BE": return "English (Belgium)";
+case "Globalization.ci_en-BM": return "English (Bermuda)";
+case "Globalization.ci_en-BS": return "English (Bahamas)";
+case "Globalization.ci_en-BW": return "English (Botswana)";
+case "Globalization.ci_en-BZ": return "English (Belize)";
+case "Globalization.ci_en-CA": return "English (Canada)";
+case "Globalization.ci_en-CC": return "English (Cocos [Keeling] Islands)";
+case "Globalization.ci_en-CK": return "English (Cook Islands)";
+case "Globalization.ci_en-CM": return "English (Cameroon)";
+case "Globalization.ci_en-CX": return "English (Christmas Island)";
+case "Globalization.ci_en-DM": return "English (Dominica)";
+case "Globalization.ci_en-ER": return "English (Eritrea)";
+case "Globalization.ci_en-FJ": return "English (Fiji)";
+case "Globalization.ci_en-FK": return "English (Falkland Islands)";
+case "Globalization.ci_en-FM": return "English (Micronesia)";
+case "Globalization.ci_en-GB": return "English (United Kingdom)";
+case "Globalization.ci_en-GD": return "English (Grenada)";
+case "Globalization.ci_en-GG": return "English (Guernsey)";
+case "Globalization.ci_en-GH": return "English (Ghana)";
+case "Globalization.ci_en-GI": return "English (Gibraltar)";
+case "Globalization.ci_en-GM": return "English (Gambia)";
+case "Globalization.ci_en-GU": return "English (Guam)";
+case "Globalization.ci_en-GY": return "English (Guyana)";
+case "Globalization.ci_en-HK": return "English (Hong Kong SAR)";
+case "Globalization.ci_en-IE": return "English (Ireland)";
+case "Globalization.ci_en-IM": return "English (Isle of Man)";
+case "Globalization.ci_en-IN": return "English (India)";
+case "Globalization.ci_en-IO": return "English (British Indian Ocean Territory)";
+case "Globalization.ci_en-JE": return "English (Jersey)";
+case "Globalization.ci_en-JM": return "English (Jamaica)";
+case "Globalization.ci_en-KE": return "English (Kenya)";
+case "Globalization.ci_en-KI": return "English (Kiribati)";
+case "Globalization.ci_en-KN": return "English (Saint Kitts and Nevis)";
+case "Globalization.ci_en-KY": return "English (Cayman Islands)";
+case "Globalization.ci_en-LC": return "English (Saint Lucia)";
+case "Globalization.ci_en-LR": return "English (Liberia)";
+case "Globalization.ci_en-LS": return "English (Lesotho)";
+case "Globalization.ci_en-MG": return "English (Madagascar)";
+case "Globalization.ci_en-MH": return "English (Marshall Islands)";
+case "Globalization.ci_en-MO": return "English (Macao SAR)";
+case "Globalization.ci_en-MP": return "English (Northern Mariana Islands)";
+case "Globalization.ci_en-MS": return "English (Montserrat)";
+case "Globalization.ci_en-MT": return "English (Malta)";
+case "Globalization.ci_en-MU": return "English (Mauritius)";
+case "Globalization.ci_en-MW": return "English (Malawi)";
+case "Globalization.ci_en-MY": return "English (Malaysia)";
+case "Globalization.ci_en-NA": return "English (Namibia)";
+case "Globalization.ci_en-NF": return "English (Norfolk Island)";
+case "Globalization.ci_en-NG": return "English (Nigeria)";
+case "Globalization.ci_en-NR": return "English (Nauru)";
+case "Globalization.ci_en-NU": return "English (Niue)";
+case "Globalization.ci_en-NZ": return "English (New Zealand)";
+case "Globalization.ci_en-PG": return "English (Papua New Guinea)";
+case "Globalization.ci_en-PH": return "English (Republic of the Philippines)";
+case "Globalization.ci_en-PK": return "English (Pakistan)";
+case "Globalization.ci_en-PN": return "English (Pitcairn Islands)";
+case "Globalization.ci_en-PR": return "English (Puerto Rico)";
+case "Globalization.ci_en-PW": return "English (Palau)";
+case "Globalization.ci_en-RW": return "English (Rwanda)";
+case "Globalization.ci_en-SB": return "English (Solomon Islands)";
+case "Globalization.ci_en-SC": return "English (Seychelles)";
+case "Globalization.ci_en-SD": return "English (Sudan)";
+case "Globalization.ci_en-SG": return "English (Singapore)";
+case "Globalization.ci_en-SH": return "English (St Helena, Ascension, Tristan da Cunha)";
+case "Globalization.ci_en-SL": return "English (Sierra Leone)";
+case "Globalization.ci_en-SS": return "English (South Sudan)";
+case "Globalization.ci_en-SX": return "English (Sint Maarten)";
+case "Globalization.ci_en-SZ": return "English (Swaziland)";
+case "Globalization.ci_en-TC": return "English (Turks and Caicos Islands)";
+case "Globalization.ci_en-TK": return "English (Tokelau)";
+case "Globalization.ci_en-TO": return "English (Tonga)";
+case "Globalization.ci_en-TT": return "English (Trinidad and Tobago)";
+case "Globalization.ci_en-TV": return "English (Tuvalu)";
+case "Globalization.ci_en-TZ": return "English (Tanzania)";
+case "Globalization.ci_en-UG": return "English (Uganda)";
+case "Globalization.ci_en-UM": return "English (US Minor Outlying Islands)";
+case "Globalization.ci_en-US": return "English (United States)";
+case "Globalization.ci_en-VC": return "English (Saint Vincent and the Grenadines)";
+case "Globalization.ci_en-VG": return "English (British Virgin Islands)";
+case "Globalization.ci_en-VI": return "English (US Virgin Islands)";
+case "Globalization.ci_en-VU": return "English (Vanuatu)";
+case "Globalization.ci_en-WS": return "English (Samoa)";
+case "Globalization.ci_en-ZA": return "English (South Africa)";
+case "Globalization.ci_en-ZM": return "English (Zambia)";
+case "Globalization.ci_en-ZW": return "English (Zimbabwe)";
+case "Globalization.ci_eo": return "Esperanto";
+case "Globalization.ci_eo-001": return "Esperanto (World)";
+case "Globalization.ci_es": return "Spanish";
+case "Globalization.ci_es-419": return "Spanish (Latin America)";
+case "Globalization.ci_es-AR": return "Spanish (Argentina)";
+case "Globalization.ci_es-BO": return "Spanish (Bolivia)";
+case "Globalization.ci_es-CL": return "Spanish (Chile)";
+case "Globalization.ci_es-CO": return "Spanish (Colombia)";
+case "Globalization.ci_es-CR": return "Spanish (Costa Rica)";
+case "Globalization.ci_es-CU": return "Spanish (Cuba)";
+case "Globalization.ci_es-DO": return "Spanish (Dominican Republic)";
+case "Globalization.ci_es-EC": return "Spanish (Ecuador)";
+case "Globalization.ci_es-ES": return "Spanish (Spain)";
+case "Globalization.ci_es-ES_tradnl": return "Spanish (Spain)";
+case "Globalization.ci_es-GQ": return "Spanish (Equatorial Guinea)";
+case "Globalization.ci_es-GT": return "Spanish (Guatemala)";
+case "Globalization.ci_es-HN": return "Spanish (Honduras)";
+case "Globalization.ci_es-MX": return "Spanish (Mexico)";
+case "Globalization.ci_es-NI": return "Spanish (Nicaragua)";
+case "Globalization.ci_es-PA": return "Spanish (Panama)";
+case "Globalization.ci_es-PE": return "Spanish (Peru)";
+case "Globalization.ci_es-PH": return "Spanish (Philippines)";
+case "Globalization.ci_es-PR": return "Spanish (Puerto Rico)";
+case "Globalization.ci_es-PY": return "Spanish (Paraguay)";
+case "Globalization.ci_es-SV": return "Spanish (El Salvador)";
+case "Globalization.ci_es-US": return "Spanish (United States)";
+case "Globalization.ci_es-UY": return "Spanish (Uruguay)";
+case "Globalization.ci_es-VE": return "Spanish (Bolivarian Republic of Venezuela)";
+case "Globalization.ci_et": return "Estonian";
+case "Globalization.ci_et-EE": return "Estonian (Estonia)";
+case "Globalization.ci_eu": return "Basque";
+case "Globalization.ci_eu-ES": return "Basque (Basque)";
+case "Globalization.ci_ewo": return "Ewondo";
+case "Globalization.ci_ewo-CM": return "Ewondo (Cameroon)";
+case "Globalization.ci_fa": return "Persian";
+case "Globalization.ci_fa-AF": return "Persian (Afghanistan)";
+case "Globalization.ci_fa-IR": return "Persian";
+case "Globalization.ci_ff": return "Fulah";
+case "Globalization.ci_ff-CM": return "Fulah (Cameroon)";
+case "Globalization.ci_ff-GN": return "Fulah (Guinea)";
+case "Globalization.ci_ff-Latn": return "Fulah (Latin)";
+case "Globalization.ci_ff-Latn-SN": return "Fulah (Latin, Senegal)";
+case "Globalization.ci_ff-MR": return "Fulah (Mauritania)";
+case "Globalization.ci_fi": return "Finnish";
+case "Globalization.ci_fi-FI": return "Finnish (Finland)";
+case "Globalization.ci_fil": return "Filipino";
+case "Globalization.ci_fil-PH": return "Filipino (Philippines)";
+case "Globalization.ci_fo": return "Faroese";
+case "Globalization.ci_fo-FO": return "Faroese (Faroe Islands)";
+case "Globalization.ci_fr": return "French";
+case "Globalization.ci_fr-BE": return "French (Belgium)";
+case "Globalization.ci_fr-BF": return "French (Burkina Faso)";
+case "Globalization.ci_fr-BI": return "French (Burundi)";
+case "Globalization.ci_fr-BJ": return "French (Benin)";
+case "Globalization.ci_fr-BL": return "French (Saint Barth�lemy)";
+case "Globalization.ci_fr-CA": return "French (Canada)";
+case "Globalization.ci_fr-CD": return "French (Congo DRC)";
+case "Globalization.ci_fr-CF": return "French (Central African Republic)";
+case "Globalization.ci_fr-CG": return "French (Congo)";
+case "Globalization.ci_fr-CH": return "French (Switzerland)";
+case "Globalization.ci_fr-CI": return "French (C�te d�Ivoire)";
+case "Globalization.ci_fr-CM": return "French (Cameroon)";
+case "Globalization.ci_fr-DJ": return "French (Djibouti)";
+case "Globalization.ci_fr-DZ": return "French (Algeria)";
+case "Globalization.ci_fr-FR": return "French (France)";
+case "Globalization.ci_fr-GA": return "French (Gabon)";
+case "Globalization.ci_fr-GF": return "French (French Guiana)";
+case "Globalization.ci_fr-GN": return "French (Guinea)";
+case "Globalization.ci_fr-GP": return "French (Guadeloupe)";
+case "Globalization.ci_fr-GQ": return "French (Equatorial Guinea)";
+case "Globalization.ci_fr-HT": return "French (Haiti)";
+case "Globalization.ci_fr-KM": return "French (Comoros)";
+case "Globalization.ci_fr-LU": return "French (Luxembourg)";
+case "Globalization.ci_fr-MA": return "French (Morocco)";
+case "Globalization.ci_fr-MC": return "French (Monaco)";
+case "Globalization.ci_fr-MF": return "French (Saint Martin)";
+case "Globalization.ci_fr-MG": return "French (Madagascar)";
+case "Globalization.ci_fr-ML": return "French (Mali)";
+case "Globalization.ci_fr-MQ": return "French (Martinique)";
+case "Globalization.ci_fr-MR": return "French (Mauritania)";
+case "Globalization.ci_fr-MU": return "French (Mauritius)";
+case "Globalization.ci_fr-NC": return "French (New Caledonia)";
+case "Globalization.ci_fr-NE": return "French (Niger)";
+case "Globalization.ci_fr-PF": return "French (French Polynesia)";
+case "Globalization.ci_fr-PM": return "French (Saint Pierre and Miquelon)";
+case "Globalization.ci_fr-RE": return "French (Reunion)";
+case "Globalization.ci_fr-RW": return "French (Rwanda)";
+case "Globalization.ci_fr-SC": return "French (Seychelles)";
+case "Globalization.ci_fr-SN": return "French (Senegal)";
+case "Globalization.ci_fr-SY": return "French (Syria)";
+case "Globalization.ci_fr-TD": return "French (Chad)";
+case "Globalization.ci_fr-TG": return "French (Togo)";
+case "Globalization.ci_fr-TN": return "French (Tunisia)";
+case "Globalization.ci_fr-VU": return "French (Vanuatu)";
+case "Globalization.ci_fr-WF": return "French (Wallis and Futuna)";
+case "Globalization.ci_fr-YT": return "French (Mayotte)";
+case "Globalization.ci_fur": return "Friulian";
+case "Globalization.ci_fur-IT": return "Friulian (Italy)";
+case "Globalization.ci_fy": return "Frisian";
+case "Globalization.ci_fy-NL": return "Frisian (Netherlands)";
+case "Globalization.ci_ga": return "Irish";
+case "Globalization.ci_ga-IE": return "Irish (Ireland)";
+case "Globalization.ci_gd": return "Scottish Gaelic";
+case "Globalization.ci_gd-GB": return "Scottish Gaelic (United Kingdom)";
+case "Globalization.ci_gl": return "Galician";
+case "Globalization.ci_gl-ES": return "Galician (Galician)";
+case "Globalization.ci_gn": return "Guarani";
+case "Globalization.ci_gn-PY": return "Guarani (Paraguay)";
+case "Globalization.ci_gsw": return "Alsatian";
+case "Globalization.ci_gsw-CH": return "Alsatian (Switzerland)";
+case "Globalization.ci_gsw-FR": return "Alsatian (France)";
+case "Globalization.ci_gsw-LI": return "Alsatian (Liechtenstein)";
+case "Globalization.ci_gu": return "Gujarati";
+case "Globalization.ci_gu-IN": return "Gujarati (India)";
+case "Globalization.ci_guz": return "Gusii";
+case "Globalization.ci_guz-KE": return "Gusii (Kenya)";
+case "Globalization.ci_gv": return "Manx";
+case "Globalization.ci_gv-IM": return "Manx (Isle of Man)";
+case "Globalization.ci_ha": return "Hausa";
+case "Globalization.ci_ha-Latn": return "Hausa (Latin)";
+case "Globalization.ci_ha-Latn-GH": return "Hausa (Latin, Ghana)";
+case "Globalization.ci_ha-Latn-NE": return "Hausa (Latin, Niger)";
+case "Globalization.ci_ha-Latn-NG": return "Hausa (Latin, Nigeria)";
+case "Globalization.ci_haw": return "Hawaiian";
+case "Globalization.ci_haw-US": return "Hawaiian (United States)";
+case "Globalization.ci_he": return "Hebrew";
+case "Globalization.ci_he-IL": return "Hebrew (Israel)";
+case "Globalization.ci_hi": return "Hindi";
+case "Globalization.ci_hi-IN": return "Hindi (India)";
+case "Globalization.ci_hr": return "Croatian";
+case "Globalization.ci_hr-BA": return "Croatian (Latin, Bosnia and Herzegovina)";
+case "Globalization.ci_hr-HR": return "Croatian (Croatia)";
+case "Globalization.ci_hsb": return "Upper Sorbian";
+case "Globalization.ci_hsb-DE": return "Upper Sorbian (Germany)";
+case "Globalization.ci_hu": return "Hungarian";
+case "Globalization.ci_hu-HU": return "Hungarian (Hungary)";
+case "Globalization.ci_hu-HU_technl": return "Hungarian (Hungary)";
+case "Globalization.ci_hy": return "Armenian";
+case "Globalization.ci_hy-AM": return "Armenian (Armenia)";
+case "Globalization.ci_ia": return "Interlingua";
+case "Globalization.ci_ia-001": return "Interlingua (World)";
+case "Globalization.ci_ia-FR": return "Interlingua (France)";
+case "Globalization.ci_id": return "Indonesian";
+case "Globalization.ci_id-ID": return "Indonesian (Indonesia)";
+case "Globalization.ci_ig": return "Igbo";
+case "Globalization.ci_ig-NG": return "Igbo (Nigeria)";
+case "Globalization.ci_ii": return "Yi";
+case "Globalization.ci_ii-CN": return "Yi (PRC)";
+case "Globalization.ci_is": return "Icelandic";
+case "Globalization.ci_is-IS": return "Icelandic (Iceland)";
+case "Globalization.ci_it": return "Italian";
+case "Globalization.ci_it-CH": return "Italian (Switzerland)";
+case "Globalization.ci_it-IT": return "Italian (Italy)";
+case "Globalization.ci_it-SM": return "Italian (San Marino)";
+case "Globalization.ci_iu": return "Inuktitut";
+case "Globalization.ci_iu-Cans": return "Inuktitut (Syllabics)";
+case "Globalization.ci_iu-Cans-CA": return "Inuktitut (Syllabics, Canada)";
+case "Globalization.ci_iu-Latn": return "Inuktitut (Latin)";
+case "Globalization.ci_iu-Latn-CA": return "Inuktitut (Latin, Canada)";
+case "Globalization.ci_ja": return "Japanese";
+case "Globalization.ci_ja-JP": return "Japanese (Japan)";
+case "Globalization.ci_ja-JP_radstr": return "Japanese (Japan)";
+case "Globalization.ci_jgo": return "Ngomba";
+case "Globalization.ci_jgo-CM": return "Ngomba (Cameroon)";
+case "Globalization.ci_jmc": return "Machame";
+case "Globalization.ci_jmc-TZ": return "Machame (Tanzania)";
+case "Globalization.ci_jv": return "Javanese";
+case "Globalization.ci_jv-Latn": return "Javanese";
+case "Globalization.ci_jv-Latn-ID": return "Javanese (Indonesia)";
+case "Globalization.ci_ka": return "Georgian";
+case "Globalization.ci_ka-GE": return "Georgian (Georgia)";
+case "Globalization.ci_ka-GE_modern": return "Georgian (Georgia)";
+case "Globalization.ci_kab": return "Kabyle";
+case "Globalization.ci_kab-DZ": return "Kabyle (Algeria)";
+case "Globalization.ci_kam": return "Kamba";
+case "Globalization.ci_kam-KE": return "Kamba (Kenya)";
+case "Globalization.ci_kde": return "Makonde";
+case "Globalization.ci_kde-TZ": return "Makonde (Tanzania)";
+case "Globalization.ci_kea": return "Kabuverdianu";
+case "Globalization.ci_kea-CV": return "Kabuverdianu (Cabo Verde)";
+case "Globalization.ci_khq": return "Koyra Chiini";
+case "Globalization.ci_khq-ML": return "Koyra Chiini (Mali)";
+case "Globalization.ci_ki": return "Kikuyu";
+case "Globalization.ci_ki-KE": return "Kikuyu (Kenya)";
+case "Globalization.ci_kk": return "Kazakh";
+case "Globalization.ci_kk-KZ": return "Kazakh (Kazakhstan)";
+case "Globalization.ci_kkj": return "Kako";
+case "Globalization.ci_kkj-CM": return "Kako (Cameroon)";
+case "Globalization.ci_kl": return "Greenlandic";
+case "Globalization.ci_kl-GL": return "Greenlandic (Greenland)";
+case "Globalization.ci_kln": return "Kalenjin";
+case "Globalization.ci_kln-KE": return "Kalenjin (Kenya)";
+case "Globalization.ci_km": return "Khmer";
+case "Globalization.ci_km-KH": return "Khmer (Cambodia)";
+case "Globalization.ci_kn": return "Kannada";
+case "Globalization.ci_kn-IN": return "Kannada (India)";
+case "Globalization.ci_ko": return "Korean";
+case "Globalization.ci_ko-KR": return "Korean (Korea)";
+case "Globalization.ci_kok": return "Konkani";
+case "Globalization.ci_kok-IN": return "Konkani (India)";
+case "Globalization.ci_ks": return "Kashmiri";
+case "Globalization.ci_ks-Arab": return "Kashmiri (Perso-Arabic)";
+case "Globalization.ci_ks-Arab-IN": return "Kashmiri (Perso-Arabic)";
+case "Globalization.ci_ksb": return "Shambala";
+case "Globalization.ci_ksb-TZ": return "Shambala (Tanzania)";
+case "Globalization.ci_ksf": return "Bafia";
+case "Globalization.ci_ksf-CM": return "Bafia (Cameroon)";
+case "Globalization.ci_ksh": return "Colognian";
+case "Globalization.ci_ksh-DE": return "Ripuarian (Germany)";
+case "Globalization.ci_ku": return "Central Kurdish";
+case "Globalization.ci_ku-Arab": return "Central Kurdish (Arabic)";
+case "Globalization.ci_ku-Arab-IQ": return "Central Kurdish (Iraq)";
+case "Globalization.ci_kw": return "Cornish";
+case "Globalization.ci_kw-GB": return "Cornish (United Kingdom)";
+case "Globalization.ci_ky": return "Kyrgyz";
+case "Globalization.ci_ky-KG": return "Kyrgyz (Kyrgyzstan)";
+case "Globalization.ci_lag": return "Langi";
+case "Globalization.ci_lag-TZ": return "Langi (Tanzania)";
+case "Globalization.ci_lb": return "Luxembourgish";
+case "Globalization.ci_lb-LU": return "Luxembourgish (Luxembourg)";
+case "Globalization.ci_lg": return "Ganda";
+case "Globalization.ci_lg-UG": return "Ganda (Uganda)";
+case "Globalization.ci_lkt": return "Lakota";
+case "Globalization.ci_lkt-US": return "Lakota (United States)";
+case "Globalization.ci_ln": return "Lingala";
+case "Globalization.ci_ln-AO": return "Lingala (Angola)";
+case "Globalization.ci_ln-CD": return "Lingala (Congo DRC)";
+case "Globalization.ci_ln-CF": return "Lingala (Central African Republic)";
+case "Globalization.ci_ln-CG": return "Lingala (Congo)";
+case "Globalization.ci_lo": return "Lao";
+case "Globalization.ci_lo-LA": return "Lao (Lao P.D.R.)";
+case "Globalization.ci_lt": return "Lithuanian";
+case "Globalization.ci_lt-LT": return "Lithuanian (Lithuania)";
+case "Globalization.ci_lu": return "Luba-Katanga";
+case "Globalization.ci_lu-CD": return "Luba-Katanga (Congo DRC)";
+case "Globalization.ci_luo": return "Luo";
+case "Globalization.ci_luo-KE": return "Luo (Kenya)";
+case "Globalization.ci_luy": return "Luyia";
+case "Globalization.ci_luy-KE": return "Luyia (Kenya)";
+case "Globalization.ci_lv": return "Latvian";
+case "Globalization.ci_lv-LV": return "Latvian (Latvia)";
+case "Globalization.ci_mas": return "Masai";
+case "Globalization.ci_mas-KE": return "Masai (Kenya)";
+case "Globalization.ci_mas-TZ": return "Masai (Tanzania)";
+case "Globalization.ci_mer": return "Meru";
+case "Globalization.ci_mer-KE": return "Meru (Kenya)";
+case "Globalization.ci_mfe": return "Morisyen";
+case "Globalization.ci_mfe-MU": return "Morisyen (Mauritius)";
+case "Globalization.ci_mg": return "Malagasy";
+case "Globalization.ci_mg-MG": return "Malagasy (Madagascar)";
+case "Globalization.ci_mgh": return "Makhuwa-Meetto";
+case "Globalization.ci_mgh-MZ": return "Makhuwa-Meetto (Mozambique)";
+case "Globalization.ci_mgo": return "Meta'";
+case "Globalization.ci_mgo-CM": return "Meta' (Cameroon)";
+case "Globalization.ci_mi": return "Maori";
+case "Globalization.ci_mi-NZ": return "Maori (New Zealand)";
+case "Globalization.ci_mk": return "Macedonian (FYROM)";
+case "Globalization.ci_mk-MK": return "Macedonian (Former Yugoslav Republic of Macedonia)";
+case "Globalization.ci_ml": return "Malayalam";
+case "Globalization.ci_ml-IN": return "Malayalam (India)";
+case "Globalization.ci_mn": return "Mongolian";
+case "Globalization.ci_mn-Cyrl": return "Mongolian (Cyrillic)";
+case "Globalization.ci_mn-MN": return "Mongolian (Cyrillic, Mongolia)";
+case "Globalization.ci_mn-Mong": return "Mongolian (Traditional Mongolian)";
+case "Globalization.ci_mn-Mong-CN": return "Mongolian (Traditional Mongolian, PRC)";
+case "Globalization.ci_mn-Mong-MN": return "Mongolian (Traditional Mongolian, Mongolia)";
+case "Globalization.ci_moh": return "Mohawk";
+case "Globalization.ci_moh-CA": return "Mohawk (Mohawk)";
+case "Globalization.ci_mr": return "Marathi";
+case "Globalization.ci_mr-IN": return "Marathi (India)";
+case "Globalization.ci_ms": return "Malay";
+case "Globalization.ci_ms-BN": return "Malay (Brunei Darussalam)";
+case "Globalization.ci_ms-MY": return "Malay (Malaysia)";
+case "Globalization.ci_ms-SG": return "Malay (Latin, Singapore)";
+case "Globalization.ci_mt": return "Maltese";
+case "Globalization.ci_mt-MT": return "Maltese (Malta)";
+case "Globalization.ci_mua": return "Mundang";
+case "Globalization.ci_mua-CM": return "Mundang (Cameroon)";
+case "Globalization.ci_my": return "Burmese";
+case "Globalization.ci_my-MM": return "Burmese (Myanmar)";
+case "Globalization.ci_naq": return "Nama";
+case "Globalization.ci_naq-NA": return "Nama (Namibia)";
+case "Globalization.ci_nb": return "Norwegian (Bokm�l)";
+case "Globalization.ci_nb-NO": return "Norwegian, Bokm�l (Norway)";
+case "Globalization.ci_nb-SJ": return "Norwegian, Bokm�l (Svalbard and Jan Mayen)";
+case "Globalization.ci_nd": return "North Ndebele";
+case "Globalization.ci_nd-ZW": return "North Ndebele (Zimbabwe)";
+case "Globalization.ci_ne": return "Nepali";
+case "Globalization.ci_ne-IN": return "Nepali (India)";
+case "Globalization.ci_ne-NP": return "Nepali (Nepal)";
+case "Globalization.ci_nl": return "Dutch";
+case "Globalization.ci_nl-AW": return "Dutch (Aruba)";
+case "Globalization.ci_nl-BE": return "Dutch (Belgium)";
+case "Globalization.ci_nl-BQ": return "Dutch (Bonaire, Sint Eustatius and Saba)";
+case "Globalization.ci_nl-CW": return "Dutch (Cura�ao)";
+case "Globalization.ci_nl-NL": return "Dutch (Netherlands)";
+case "Globalization.ci_nl-SR": return "Dutch (Suriname)";
+case "Globalization.ci_nl-SX": return "Dutch (Sint Maarten)";
+case "Globalization.ci_nmg": return "Kwasio";
+case "Globalization.ci_nmg-CM": return "Kwasio (Cameroon)";
+case "Globalization.ci_nn": return "Norwegian (Nynorsk)";
+case "Globalization.ci_nn-NO": return "Norwegian, Nynorsk (Norway)";
+case "Globalization.ci_nnh": return "Ngiemboon";
+case "Globalization.ci_nnh-CM": return "Ngiemboon (Cameroon)";
+case "Globalization.ci_no": return "Norwegian";
+case "Globalization.ci_nqo": return "N'ko";
+case "Globalization.ci_nqo-GN": return "N'ko (Guinea)";
+case "Globalization.ci_nr": return "South Ndebele";
+case "Globalization.ci_nr-ZA": return "South Ndebele (South Africa)";
+case "Globalization.ci_nso": return "Sesotho sa Leboa";
+case "Globalization.ci_nso-ZA": return "Sesotho sa Leboa (South Africa)";
+case "Globalization.ci_nus": return "Nuer";
+case "Globalization.ci_nus-SD": return "Nuer (Sudan)";
+case "Globalization.ci_nyn": return "Nyankole";
+case "Globalization.ci_nyn-UG": return "Nyankole (Uganda)";
+case "Globalization.ci_oc": return "Occitan";
+case "Globalization.ci_oc-FR": return "Occitan (France)";
+case "Globalization.ci_om": return "Oromo";
+case "Globalization.ci_om-ET": return "Oromo (Ethiopia)";
+case "Globalization.ci_om-KE": return "Oromo (Kenya)";
+case "Globalization.ci_or": return "Odia";
+case "Globalization.ci_or-IN": return "Odia (India)";
+case "Globalization.ci_os": return "Ossetic";
+case "Globalization.ci_os-GE": return "Ossetian (Cyrillic, Georgia)";
+case "Globalization.ci_os-RU": return "Ossetian (Cyrillic, Russia)";
+case "Globalization.ci_pa": return "Punjabi";
+case "Globalization.ci_pa-Arab": return "Punjabi (Arabic)";
+case "Globalization.ci_pa-Arab-PK": return "Punjabi (Islamic Republic of Pakistan)";
+case "Globalization.ci_pa-IN": return "Punjabi (India)";
+case "Globalization.ci_pl": return "Polish";
+case "Globalization.ci_pl-PL": return "Polish (Poland)";
+case "Globalization.ci_prs": return "Dari";
+case "Globalization.ci_prs-AF": return "Dari (Afghanistan)";
+case "Globalization.ci_ps": return "Pashto";
+case "Globalization.ci_ps-AF": return "Pashto (Afghanistan)";
+case "Globalization.ci_pt": return "Portuguese";
+case "Globalization.ci_pt-AO": return "Portuguese (Angola)";
+case "Globalization.ci_pt-BR": return "Portuguese (Brazil)";
+case "Globalization.ci_pt-CV": return "Portuguese (Cabo Verde)";
+case "Globalization.ci_pt-GW": return "Portuguese (Guinea-Bissau)";
+case "Globalization.ci_pt-MO": return "Portuguese (Macao SAR)";
+case "Globalization.ci_pt-MZ": return "Portuguese (Mozambique)";
+case "Globalization.ci_pt-PT": return "Portuguese (Portugal)";
+case "Globalization.ci_pt-ST": return "Portuguese (S�o Tom� and Pr�ncipe)";
+case "Globalization.ci_pt-TL": return "Portuguese (Timor-Leste)";
+case "Globalization.ci_qps-ploc": return "Pseudo Language (Pseudo)";
+case "Globalization.ci_qps-ploca": return "Pseudo Language (Pseudo Asia)";
+case "Globalization.ci_qps-plocm": return "Pseudo Language (Pseudo Mirrored)";
+case "Globalization.ci_qu": return "Quechua";
+case "Globalization.ci_qu-BO": return "Quechua (Bolivia)";
+case "Globalization.ci_qu-EC": return "Quechua (Ecuador)";
+case "Globalization.ci_qu-PE": return "Quechua (Peru)";
+case "Globalization.ci_quc": return "K'iche'";
+case "Globalization.ci_quc-Latn": return "K'iche'";
+case "Globalization.ci_quc-Latn-GT": return "K'iche' (Guatemala)";
+case "Globalization.ci_qut": return "K'iche";
+case "Globalization.ci_qut-GT": return "K'iche (Guatemala)";
+case "Globalization.ci_quz": return "Quechua";
+case "Globalization.ci_quz-BO": return "Quechua (Bolivia)";
+case "Globalization.ci_quz-EC": return "Quechua (Ecuador)";
+case "Globalization.ci_quz-PE": return "Quechua (Peru)";
+case "Globalization.ci_rm": return "Romansh";
+case "Globalization.ci_rm-CH": return "Romansh (Switzerland)";
+case "Globalization.ci_rn": return "Rundi";
+case "Globalization.ci_rn-BI": return "Rundi (Burundi)";
+case "Globalization.ci_ro": return "Romanian";
+case "Globalization.ci_ro-MD": return "Romanian (Moldova)";
+case "Globalization.ci_ro-RO": return "Romanian (Romania)";
+case "Globalization.ci_rof": return "Rombo";
+case "Globalization.ci_rof-TZ": return "Rombo (Tanzania)";
+case "Globalization.ci_ru": return "Russian";
+case "Globalization.ci_ru-BY": return "Russian (Belarus)";
+case "Globalization.ci_ru-KG": return "Russian (Kyrgyzstan)";
+case "Globalization.ci_ru-KZ": return "Russian (Kazakhstan)";
+case "Globalization.ci_ru-MD": return "Russian (Moldova)";
+case "Globalization.ci_ru-RU": return "Russian (Russia)";
+case "Globalization.ci_ru-UA": return "Russian (Ukraine)";
+case "Globalization.ci_rw": return "Kinyarwanda";
+case "Globalization.ci_rw-RW": return "Kinyarwanda (Rwanda)";
+case "Globalization.ci_rwk": return "Rwa";
+case "Globalization.ci_rwk-TZ": return "Rwa (Tanzania)";
+case "Globalization.ci_sa": return "Sanskrit";
+case "Globalization.ci_sa-IN": return "Sanskrit (India)";
+case "Globalization.ci_sah": return "Sakha";
+case "Globalization.ci_sah-RU": return "Sakha (Russia)";
+case "Globalization.ci_saq": return "Samburu";
+case "Globalization.ci_saq-KE": return "Samburu (Kenya)";
+case "Globalization.ci_sbp": return "Sangu";
+case "Globalization.ci_sbp-TZ": return "Sangu (Tanzania)";
+case "Globalization.ci_sd": return "Sindhi";
+case "Globalization.ci_sd-Arab": return "Sindhi (Arabic)";
+case "Globalization.ci_sd-Arab-PK": return "Sindhi (Islamic Republic of Pakistan)";
+case "Globalization.ci_se": return "Sami (Northern)";
+case "Globalization.ci_se-FI": return "Sami, Northern (Finland)";
+case "Globalization.ci_se-NO": return "Sami, Northern (Norway)";
+case "Globalization.ci_se-SE": return "Sami, Northern (Sweden)";
+case "Globalization.ci_seh": return "Sena";
+case "Globalization.ci_seh-MZ": return "Sena (Mozambique)";
+case "Globalization.ci_ses": return "Koyraboro Senni";
+case "Globalization.ci_ses-ML": return "Koyraboro Senni (Mali)";
+case "Globalization.ci_sg": return "Sango";
+case "Globalization.ci_sg-CF": return "Sango (Central African Republic)";
+case "Globalization.ci_shi": return "Tachelhit";
+case "Globalization.ci_shi-Latn": return "Tachelhit (Latin)";
+case "Globalization.ci_shi-Latn-MA": return "Tachelhit (Latin, Morocco)";
+case "Globalization.ci_shi-Tfng": return "Tachelhit (Tifinagh)";
+case "Globalization.ci_shi-Tfng-MA": return "Tachelhit (Tifinagh, Morocco)";
+case "Globalization.ci_si": return "Sinhala";
+case "Globalization.ci_si-LK": return "Sinhala (Sri Lanka)";
+case "Globalization.ci_sk": return "Slovak";
+case "Globalization.ci_sk-SK": return "Slovak (Slovakia)";
+case "Globalization.ci_sl": return "Slovenian";
+case "Globalization.ci_sl-SI": return "Slovenian (Slovenia)";
+case "Globalization.ci_sma": return "Sami (Southern)";
+case "Globalization.ci_sma-NO": return "Sami, Southern (Norway)";
+case "Globalization.ci_sma-SE": return "Sami, Southern (Sweden)";
+case "Globalization.ci_smj": return "Sami (Lule)";
+case "Globalization.ci_smj-NO": return "Sami, Lule (Norway)";
+case "Globalization.ci_smj-SE": return "Sami, Lule (Sweden)";
+case "Globalization.ci_smn": return "Sami (Inari)";
+case "Globalization.ci_smn-FI": return "Sami, Inari (Finland)";
+case "Globalization.ci_sms": return "Sami (Skolt)";
+case "Globalization.ci_sms-FI": return "Sami, Skolt (Finland)";
+case "Globalization.ci_sn": return "Shona";
+case "Globalization.ci_sn-Latn": return "Shona (Latin)";
+case "Globalization.ci_sn-Latn-ZW": return "Shona (Latin, Zimbabwe)";
+case "Globalization.ci_so": return "Somali";
+case "Globalization.ci_so-DJ": return "Somali (Djibouti)";
+case "Globalization.ci_so-ET": return "Somali (Ethiopia)";
+case "Globalization.ci_so-KE": return "Somali (Kenya)";
+case "Globalization.ci_so-SO": return "Somali (Somalia)";
+case "Globalization.ci_sq": return "Albanian";
+case "Globalization.ci_sq-AL": return "Albanian (Albania)";
+case "Globalization.ci_sq-MK": return "Albanian (Macedonia, FYRO)";
+case "Globalization.ci_sr": return "Serbian";
+case "Globalization.ci_sr-Cyrl": return "Serbian (Cyrillic)";
+case "Globalization.ci_sr-Cyrl-BA": return "Serbian (Cyrillic, Bosnia and Herzegovina)";
+case "Globalization.ci_sr-Cyrl-CS": return "Serbian (Cyrillic, Serbia and Montenegro (Former))";
+case "Globalization.ci_sr-Cyrl-ME": return "Serbian (Cyrillic, Montenegro)";
+case "Globalization.ci_sr-Cyrl-RS": return "Serbian (Cyrillic, Serbia)";
+case "Globalization.ci_sr-Latn": return "Serbian (Latin)";
+case "Globalization.ci_sr-Latn-BA": return "Serbian (Latin, Bosnia and Herzegovina)";
+case "Globalization.ci_sr-Latn-CS": return "Serbian (Latin, Serbia and Montenegro (Former))";
+case "Globalization.ci_sr-Latn-ME": return "Serbian (Latin, Montenegro)";
+case "Globalization.ci_sr-Latn-RS": return "Serbian (Latin, Serbia)";
+case "Globalization.ci_ss": return "Swati";
+case "Globalization.ci_ss-SZ": return "Swati (Swaziland)";
+case "Globalization.ci_ss-ZA": return "Swati (South Africa)";
+case "Globalization.ci_ssy": return "Saho";
+case "Globalization.ci_ssy-ER": return "Saho (Eritrea)";
+case "Globalization.ci_st": return "Southern Sotho";
+case "Globalization.ci_st-LS": return "Sesotho (Lesotho)";
+case "Globalization.ci_st-ZA": return "Southern Sotho (South Africa)";
+case "Globalization.ci_sv": return "Swedish";
+case "Globalization.ci_sv-AX": return "Swedish (�land Islands)";
+case "Globalization.ci_sv-FI": return "Swedish (Finland)";
+case "Globalization.ci_sv-SE": return "Swedish (Sweden)";
+case "Globalization.ci_sw": return "Kiswahili";
+case "Globalization.ci_sw-KE": return "Kiswahili (Kenya)";
+case "Globalization.ci_sw-TZ": return "Kiswahili (Tanzania)";
+case "Globalization.ci_sw-UG": return "Kiswahili (Uganda)";
+case "Globalization.ci_swc": return "Congo Swahili";
+case "Globalization.ci_swc-CD": return "Congo Swahili (Congo DRC)";
+case "Globalization.ci_syr": return "Syriac";
+case "Globalization.ci_syr-SY": return "Syriac (Syria)";
+case "Globalization.ci_ta": return "Tamil";
+case "Globalization.ci_ta-IN": return "Tamil (India)";
+case "Globalization.ci_ta-LK": return "Tamil (Sri Lanka)";
+case "Globalization.ci_ta-MY": return "Tamil (Malaysia)";
+case "Globalization.ci_ta-SG": return "Tamil (Singapore)";
+case "Globalization.ci_te": return "Telugu";
+case "Globalization.ci_te-IN": return "Telugu (India)";
+case "Globalization.ci_teo": return "Teso";
+case "Globalization.ci_teo-KE": return "Teso (Kenya)";
+case "Globalization.ci_teo-UG": return "Teso (Uganda)";
+case "Globalization.ci_tg": return "Tajik";
+case "Globalization.ci_tg-Cyrl": return "Tajik (Cyrillic)";
+case "Globalization.ci_tg-Cyrl-TJ": return "Tajik (Cyrillic, Tajikistan)";
+case "Globalization.ci_th": return "Thai";
+case "Globalization.ci_th-TH": return "Thai (Thailand)";
+case "Globalization.ci_ti": return "Tigrinya";
+case "Globalization.ci_ti-ER": return "Tigrinya (Eritrea)";
+case "Globalization.ci_ti-ET": return "Tigrinya (Ethiopia)";
+case "Globalization.ci_tig": return "Tigre";
+case "Globalization.ci_tig-ER": return "Tigre (Eritrea)";
+case "Globalization.ci_tk": return "Turkmen";
+case "Globalization.ci_tk-TM": return "Turkmen (Turkmenistan)";
+case "Globalization.ci_tn": return "Setswana";
+case "Globalization.ci_tn-BW": return "Setswana (Botswana)";
+case "Globalization.ci_tn-ZA": return "Setswana (South Africa)";
+case "Globalization.ci_to": return "Tongan";
+case "Globalization.ci_to-TO": return "Tongan (Tonga)";
+case "Globalization.ci_tr": return "Turkish";
+case "Globalization.ci_tr-CY": return "Turkish (Cyprus)";
+case "Globalization.ci_tr-TR": return "Turkish (Turkey)";
+case "Globalization.ci_ts": return "Tsonga";
+case "Globalization.ci_ts-ZA": return "Tsonga (South Africa)";
+case "Globalization.ci_tt": return "Tatar";
+case "Globalization.ci_tt-RU": return "Tatar (Russia)";
+case "Globalization.ci_twq": return "Tasawaq";
+case "Globalization.ci_twq-NE": return "Tasawaq (Niger)";
+case "Globalization.ci_tzm": return "Tamazight";
+case "Globalization.ci_tzm-Latn": return "Tamazight (Latin)";
+case "Globalization.ci_tzm-Latn-DZ": return "Tamazight (Latin, Algeria)";
+case "Globalization.ci_tzm-Latn-MA": return "Central Atlas Tamazight (Latin, Morocco)";
+case "Globalization.ci_tzm-Tfng": return "Tamazight (Tifinagh)";
+case "Globalization.ci_tzm-Tfng-MA": return "Central Atlas Tamazight (Tifinagh, Morocco)";
+case "Globalization.ci_ug": return "Uyghur";
+case "Globalization.ci_ug-CN": return "Uyghur (PRC)";
+case "Globalization.ci_uk": return "Ukrainian";
+case "Globalization.ci_uk-UA": return "Ukrainian (Ukraine)";
+case "Globalization.ci_ur": return "Urdu";
+case "Globalization.ci_ur-IN": return "Urdu (India)";
+case "Globalization.ci_ur-PK": return "Urdu (Islamic Republic of Pakistan)";
+case "Globalization.ci_uz": return "Uzbek";
+case "Globalization.ci_uz-Arab": return "Uzbek (Perso-Arabic)";
+case "Globalization.ci_uz-Arab-AF": return "Uzbek (Perso-Arabic, Afghanistan)";
+case "Globalization.ci_uz-Cyrl": return "Uzbek (Cyrillic)";
+case "Globalization.ci_uz-Cyrl-UZ": return "Uzbek (Cyrillic, Uzbekistan)";
+case "Globalization.ci_uz-Latn": return "Uzbek (Latin)";
+case "Globalization.ci_uz-Latn-UZ": return "Uzbek (Latin, Uzbekistan)";
+case "Globalization.ci_vai": return "Vai";
+case "Globalization.ci_vai-Latn": return "Vai (Latin)";
+case "Globalization.ci_vai-Latn-LR": return "Vai (Latin, Liberia)";
+case "Globalization.ci_vai-Vaii": return "Vai (Vai)";
+case "Globalization.ci_vai-Vaii-LR": return "Vai (Vai, Liberia)";
+case "Globalization.ci_ve": return "Venda";
+case "Globalization.ci_ve-ZA": return "Venda (South Africa)";
+case "Globalization.ci_vi": return "Vietnamese";
+case "Globalization.ci_vi-VN": return "Vietnamese (Vietnam)";
+case "Globalization.ci_vo": return "Volap�k";
+case "Globalization.ci_vo-001": return "Volap�k (World)";
+case "Globalization.ci_vun": return "Vunjo";
+case "Globalization.ci_vun-TZ": return "Vunjo (Tanzania)";
+case "Globalization.ci_wae": return "Walser";
+case "Globalization.ci_wae-CH": return "Walser (Switzerland)";
+case "Globalization.ci_wal": return "Wolaytta";
+case "Globalization.ci_wal-ET": return "Wolaytta (Ethiopia)";
+case "Globalization.ci_wo": return "Wolof";
+case "Globalization.ci_wo-SN": return "Wolof (Senegal)";
+case "Globalization.ci_x-IV": return "Invariant Language (Invariant Country)";
+case "Globalization.ci_x-IV_mathan": return "Invariant Language (Invariant Country)";
+case "Globalization.ci_xh": return "isiXhosa";
+case "Globalization.ci_xh-ZA": return "isiXhosa (South Africa)";
+case "Globalization.ci_xog": return "Soga";
+case "Globalization.ci_xog-UG": return "Soga (Uganda)";
+case "Globalization.ci_yav": return "Yangben";
+case "Globalization.ci_yav-CM": return "Yangben (Cameroon)";
+case "Globalization.ci_yi": return "Yiddish";
+case "Globalization.ci_yi-001": return "Yiddish (World)";
+case "Globalization.ci_yo": return "Yoruba";
+case "Globalization.ci_yo-BJ": return "Yoruba (Benin)";
+case "Globalization.ci_yo-NG": return "Yoruba (Nigeria)";
+case "Globalization.ci_zgh": return "Standard Moroccan Tamazight";
+case "Globalization.ci_zgh-Tfng": return "Standard Moroccan Tamazight (Tifinagh)";
+case "Globalization.ci_zgh-Tfng-MA": return "Standard Moroccan Tamazight (Tifinagh, Morocco)";
+case "Globalization.ci_zh": return "Chinese";
+case "Globalization.ci_zh-CHS": return "Chinese (Simplified) Legacy";
+case "Globalization.ci_zh-CHT": return "Chinese (Traditional) Legacy";
+case "Globalization.ci_zh-CN": return "Chinese (Simplified, PRC)";
+case "Globalization.ci_zh-CN_stroke": return "Chinese (Simplified, PRC)";
+case "Globalization.ci_zh-Hans": return "Chinese (Simplified)";
+case "Globalization.ci_zh-Hant": return "Chinese (Traditional)";
+case "Globalization.ci_zh-HK": return "Chinese (Traditional, Hong Kong S.A.R.)";
+case "Globalization.ci_zh-HK_radstr": return "Chinese (Traditional, Hong Kong S.A.R.)";
+case "Globalization.ci_zh-MO": return "Chinese (Traditional, Macao S.A.R.)";
+case "Globalization.ci_zh-MO_radstr": return "Chinese (Traditional, Macao S.A.R.)";
+case "Globalization.ci_zh-MO_stroke": return "Chinese (Traditional, Macao S.A.R.)";
+case "Globalization.ci_zh-SG": return "Chinese (Simplified, Singapore)";
+case "Globalization.ci_zh-SG_stroke": return "Chinese (Simplified, Singapore)";
+case "Globalization.ci_zh-TW": return "Chinese (Traditional, Taiwan)";
+case "Globalization.ci_zh-TW_pronun": return "Chinese (Traditional, Taiwan)";
+case "Globalization.ci_zh-TW_radstr": return "Chinese (Traditional, Taiwan)";
+case "Globalization.ci_zu": return "isiZulu";
+case "Globalization.ci_zu-ZA": return "isiZulu (South Africa)";
+// ;------------------
+// ;
+// ;Total items: 129
+// ;
+case "Globalization.ri_029": return "Caribbean";
+case "Globalization.ri_AE": return "U.A.E.";
+case "Globalization.ri_AF": return "Afghanistan";
+case "Globalization.ri_AL": return "Albania";
+case "Globalization.ri_AM": return "Armenia";
+case "Globalization.ri_AR": return "Argentina";
+case "Globalization.ri_AT": return "Austria";
+case "Globalization.ri_AU": return "Australia";
+case "Globalization.ri_AZ": return "Azerbaijan";
+case "Globalization.ri_BA": return "Bosnia and Herzegovina";
+case "Globalization.ri_BD": return "Bangladesh";
+case "Globalization.ri_BE": return "Belgium";
+case "Globalization.ri_BG": return "Bulgaria";
+case "Globalization.ri_BH": return "Bahrain";
+case "Globalization.ri_BN": return "Brunei Darussalam";
+case "Globalization.ri_BO": return "Bolivia";
+case "Globalization.ri_BR": return "Brazil";
+case "Globalization.ri_BY": return "Belarus";
+case "Globalization.ri_BZ": return "Belize";
+case "Globalization.ri_CA": return "Canada";
+case "Globalization.ri_CH": return "Switzerland";
+case "Globalization.ri_CL": return "Chile";
+case "Globalization.ri_CN": return "People's Republic of China";
+case "Globalization.ri_CO": return "Colombia";
+case "Globalization.ri_CR": return "Costa Rica";
+case "Globalization.ri_CS": return "Serbia and Montenegro (Former)";
+case "Globalization.ri_CZ": return "Czech Republic";
+case "Globalization.ri_DE": return "Germany";
+case "Globalization.ri_DK": return "Denmark";
+case "Globalization.ri_DO": return "Dominican Republic";
+case "Globalization.ri_DZ": return "Algeria";
+case "Globalization.ri_EC": return "Ecuador";
+case "Globalization.ri_EE": return "Estonia";
+case "Globalization.ri_EG": return "Egypt";
+case "Globalization.ri_ER": return "Eritrea";
+case "Globalization.ri_ES": return "Spain";
+case "Globalization.ri_ET": return "Ethiopia";
+case "Globalization.ri_FI": return "Finland";
+case "Globalization.ri_FO": return "Faroe Islands";
+case "Globalization.ri_FR": return "France";
+case "Globalization.ri_GB": return "United Kingdom";
+case "Globalization.ri_GE": return "Georgia";
+case "Globalization.ri_GL": return "Greenland";
+case "Globalization.ri_GR": return "Greece";
+case "Globalization.ri_GT": return "Guatemala";
+case "Globalization.ri_HK": return "Hong Kong S.A.R.";
+case "Globalization.ri_HN": return "Honduras";
+case "Globalization.ri_HR": return "Croatia";
+case "Globalization.ri_HU": return "Hungary";
+case "Globalization.ri_ID": return "Indonesia";
+case "Globalization.ri_IE": return "Ireland";
+case "Globalization.ri_IL": return "Israel";
+case "Globalization.ri_IN": return "India";
+case "Globalization.ri_IQ": return "Iraq";
+case "Globalization.ri_IR": return "Iran";
+case "Globalization.ri_IS": return "Iceland";
+case "Globalization.ri_IT": return "Italy";
+case "Globalization.ri_IV": return "Invariant Country";
+case "Globalization.ri_JM": return "Jamaica";
+case "Globalization.ri_JO": return "Jordan";
+case "Globalization.ri_JP": return "Japan";
+case "Globalization.ri_KE": return "Kenya";
+case "Globalization.ri_KG": return "Kyrgyzstan";
+case "Globalization.ri_KH": return "Cambodia";
+case "Globalization.ri_KR": return "Korea";
+case "Globalization.ri_KW": return "Kuwait";
+case "Globalization.ri_KZ": return "Kazakhstan";
+case "Globalization.ri_LA": return "Lao P.D.R.";
+case "Globalization.ri_LB": return "Lebanon";
+case "Globalization.ri_LI": return "Liechtenstein";
+case "Globalization.ri_LK": return "Sri Lanka";
+case "Globalization.ri_LT": return "Lithuania";
+case "Globalization.ri_LU": return "Luxembourg";
+case "Globalization.ri_LV": return "Latvia";
+case "Globalization.ri_LY": return "Libya";
+case "Globalization.ri_MA": return "Morocco";
+case "Globalization.ri_MC": return "Principality of Monaco";
+case "Globalization.ri_ME": return "Montenegro";
+case "Globalization.ri_MK": return "Macedonia (FYROM)";
+case "Globalization.ri_MN": return "Mongolia";
+case "Globalization.ri_MO": return "Macao S.A.R.";
+case "Globalization.ri_MT": return "Malta";
+case "Globalization.ri_MV": return "Maldives";
+case "Globalization.ri_MX": return "Mexico";
+case "Globalization.ri_MY": return "Malaysia";
+case "Globalization.ri_NG": return "Nigeria";
+case "Globalization.ri_NI": return "Nicaragua";
+case "Globalization.ri_NL": return "Netherlands";
+case "Globalization.ri_NO": return "Norway";
+case "Globalization.ri_NP": return "Nepal";
+case "Globalization.ri_NZ": return "New Zealand";
+case "Globalization.ri_OM": return "Oman";
+case "Globalization.ri_PA": return "Panama";
+case "Globalization.ri_PE": return "Peru";
+case "Globalization.ri_PH": return "Philippines";
+case "Globalization.ri_PK": return "Islamic Republic of Pakistan";
+case "Globalization.ri_PL": return "Poland";
+case "Globalization.ri_PR": return "Puerto Rico";
+case "Globalization.ri_PT": return "Portugal";
+case "Globalization.ri_PY": return "Paraguay";
+case "Globalization.ri_QA": return "Qatar";
+case "Globalization.ri_RO": return "Romania";
+case "Globalization.ri_RS": return "Serbia";
+case "Globalization.ri_RU": return "Russia";
+case "Globalization.ri_RW": return "Rwanda";
+case "Globalization.ri_SA": return "Saudi Arabia";
+case "Globalization.ri_SE": return "Sweden";
+case "Globalization.ri_SG": return "Singapore";
+case "Globalization.ri_SI": return "Slovenia";
+case "Globalization.ri_SK": return "Slovakia";
+case "Globalization.ri_SN": return "Senegal";
+case "Globalization.ri_SV": return "El Salvador";
+case "Globalization.ri_SY": return "Syria";
+case "Globalization.ri_TH": return "Thailand";
+case "Globalization.ri_TJ": return "Tajikistan";
+case "Globalization.ri_TM": return "Turkmenistan";
+case "Globalization.ri_TN": return "Tunisia";
+case "Globalization.ri_TR": return "Turkey";
+case "Globalization.ri_TT": return "Trinidad and Tobago";
+case "Globalization.ri_TW": return "Taiwan";
+case "Globalization.ri_UA": return "Ukraine";
+case "Globalization.ri_US": return "United States";
+case "Globalization.ri_UY": return "Uruguay";
+case "Globalization.ri_UZ": return "Uzbekistan";
+case "Globalization.ri_VE": return "Bolivarian Republic of Venezuela";
+case "Globalization.ri_VN": return "Vietnam";
+case "Globalization.ri_YE": return "Yemen";
+case "Globalization.ri_ZA": return "South Africa";
+case "Globalization.ri_ZW": return "Zimbabwe";
+#endif //!FEATURE_CORECLR
+
+// ;------------------
+// ; Encoding names:
+// ;
+// ;Total items: 147
+// ;
+case "Globalization.cp_1200": return "Unicode";
+case "Globalization.cp_1201": return "Unicode (Big-Endian)";
+case "Globalization.cp_65001": return "Unicode (UTF-8)";
+case "Globalization.cp_65000": return "Unicode (UTF-7)";
+case "Globalization.cp_12000": return "Unicode (UTF-32)";
+case "Globalization.cp_12001": return "Unicode (UTF-32 Big-Endian)";
+case "Globalization.cp_20127": return "US-ASCII";
+case "Globalization.cp_28591": return "Western European (ISO)";
+
+#if FEATURE_NON_UNICODE_CODE_PAGES
+case "Globalization.cp_37": return "IBM EBCDIC (US-Canada)";
+case "Globalization.cp_437": return "OEM United States";
+case "Globalization.cp_500": return "IBM EBCDIC (International)";
+case "Globalization.cp_708": return "Arabic (ASMO 708)";
+case "Globalization.cp_720": return "Arabic (DOS)";
+case "Globalization.cp_737": return "Greek (DOS)";
+case "Globalization.cp_775": return "Baltic (DOS)";
+case "Globalization.cp_850": return "Western European (DOS)";
+case "Globalization.cp_852": return "Central European (DOS)";
+case "Globalization.cp_855": return "OEM Cyrillic";
+case "Globalization.cp_857": return "Turkish (DOS)";
+case "Globalization.cp_858": return "OEM Multilingual Latin I";
+case "Globalization.cp_860": return "Portuguese (DOS)";
+case "Globalization.cp_861": return "Icelandic (DOS)";
+case "Globalization.cp_862": return "Hebrew (DOS)";
+case "Globalization.cp_863": return "French Canadian (DOS)";
+case "Globalization.cp_864": return "Arabic (864)";
+case "Globalization.cp_865": return "Nordic (DOS)";
+case "Globalization.cp_866": return "Cyrillic (DOS)";
+case "Globalization.cp_869": return "Greek, Modern (DOS)";
+case "Globalization.cp_870": return "IBM EBCDIC (Multilingual Latin-2)";
+case "Globalization.cp_874": return "Thai (Windows)";
+case "Globalization.cp_875": return "IBM EBCDIC (Greek Modern)";
+case "Globalization.cp_932": return "Japanese (Shift-JIS)";
+case "Globalization.cp_936": return "Chinese Simplified (GB2312)";
+case "Globalization.cp_949": return "Korean";
+case "Globalization.cp_950": return "Chinese Traditional (Big5)";
+case "Globalization.cp_1026": return "IBM EBCDIC (Turkish Latin-5)";
+case "Globalization.cp_1047": return "IBM Latin-1";
+case "Globalization.cp_1140": return "IBM EBCDIC (US-Canada-Euro)";
+case "Globalization.cp_1141": return "IBM EBCDIC (Germany-Euro)";
+case "Globalization.cp_1142": return "IBM EBCDIC (Denmark-Norway-Euro)";
+case "Globalization.cp_1143": return "IBM EBCDIC (Finland-Sweden-Euro)";
+case "Globalization.cp_1144": return "IBM EBCDIC (Italy-Euro)";
+case "Globalization.cp_1145": return "IBM EBCDIC (Spain-Euro)";
+case "Globalization.cp_1146": return "IBM EBCDIC (UK-Euro)";
+case "Globalization.cp_1147": return "IBM EBCDIC (France-Euro)";
+case "Globalization.cp_1148": return "IBM EBCDIC (International-Euro)";
+case "Globalization.cp_1149": return "IBM EBCDIC (Icelandic-Euro)";
+case "Globalization.cp_1250": return "Central European (Windows)";
+case "Globalization.cp_1251": return "Cyrillic (Windows)";
+case "Globalization.cp_1252": return "Western European (Windows)";
+case "Globalization.cp_1253": return "Greek (Windows)";
+case "Globalization.cp_1254": return "Turkish (Windows)";
+case "Globalization.cp_1255": return "Hebrew (Windows)";
+case "Globalization.cp_1256": return "Arabic (Windows)";
+case "Globalization.cp_1257": return "Baltic (Windows)";
+case "Globalization.cp_1258": return "Vietnamese (Windows)";
+case "Globalization.cp_1361": return "Korean (Johab)";
+case "Globalization.cp_10000": return "Western European (Mac)";
+case "Globalization.cp_10001": return "Japanese (Mac)";
+case "Globalization.cp_10002": return "Chinese Traditional (Mac)";
+case "Globalization.cp_10003": return "Korean (Mac)";
+case "Globalization.cp_10004": return "Arabic (Mac)";
+case "Globalization.cp_10005": return "Hebrew (Mac)";
+case "Globalization.cp_10006": return "Greek (Mac)";
+case "Globalization.cp_10007": return "Cyrillic (Mac)";
+case "Globalization.cp_10008": return "Chinese Simplified (Mac)";
+case "Globalization.cp_10010": return "Romanian (Mac)";
+case "Globalization.cp_10017": return "Ukrainian (Mac)";
+case "Globalization.cp_10021": return "Thai (Mac)";
+case "Globalization.cp_10029": return "Central European (Mac)";
+case "Globalization.cp_10079": return "Icelandic (Mac)";
+case "Globalization.cp_10081": return "Turkish (Mac)";
+case "Globalization.cp_10082": return "Croatian (Mac)";
+case "Globalization.cp_20000": return "Chinese Traditional (CNS)";
+case "Globalization.cp_20001": return "TCA Taiwan";
+case "Globalization.cp_20002": return "Chinese Traditional (Eten)";
+case "Globalization.cp_20003": return "IBM5550 Taiwan";
+case "Globalization.cp_20004": return "TeleText Taiwan";
+case "Globalization.cp_20005": return "Wang Taiwan";
+case "Globalization.cp_20105": return "Western European (IA5)";
+case "Globalization.cp_20106": return "German (IA5)";
+case "Globalization.cp_20107": return "Swedish (IA5)";
+case "Globalization.cp_20108": return "Norwegian (IA5)";
+case "Globalization.cp_20261": return "T.61";
+case "Globalization.cp_20269": return "ISO-6937";
+case "Globalization.cp_20273": return "IBM EBCDIC (Germany)";
+case "Globalization.cp_20277": return "IBM EBCDIC (Denmark-Norway)";
+case "Globalization.cp_20278": return "IBM EBCDIC (Finland-Sweden)";
+case "Globalization.cp_20280": return "IBM EBCDIC (Italy)";
+case "Globalization.cp_20284": return "IBM EBCDIC (Spain)";
+case "Globalization.cp_20285": return "IBM EBCDIC (UK)";
+case "Globalization.cp_20290": return "IBM EBCDIC (Japanese katakana)";
+case "Globalization.cp_20297": return "IBM EBCDIC (France)";
+case "Globalization.cp_20420": return "IBM EBCDIC (Arabic)";
+case "Globalization.cp_20423": return "IBM EBCDIC (Greek)";
+case "Globalization.cp_20424": return "IBM EBCDIC (Hebrew)";
+case "Globalization.cp_20833": return "IBM EBCDIC (Korean Extended)";
+case "Globalization.cp_20838": return "IBM EBCDIC (Thai)";
+case "Globalization.cp_20866": return "Cyrillic (KOI8-R)";
+case "Globalization.cp_20871": return "IBM EBCDIC (Icelandic)";
+case "Globalization.cp_20880": return "IBM EBCDIC (Cyrillic Russian)";
+case "Globalization.cp_20905": return "IBM EBCDIC (Turkish)";
+case "Globalization.cp_20924": return "IBM Latin-1";
+case "Globalization.cp_20932": return "Japanese (JIS 0208-1990 and 0212-1990)";
+case "Globalization.cp_20936": return "Chinese Simplified (GB2312-80)";
+case "Globalization.cp_20949": return "Korean Wansung";
+case "Globalization.cp_21025": return "IBM EBCDIC (Cyrillic Serbian-Bulgarian)";
+case "Globalization.cp_21027": return "Ext Alpha Lowercase";
+case "Globalization.cp_21866": return "Cyrillic (KOI8-U)";
+case "Globalization.cp_28592": return "Central European (ISO)";
+case "Globalization.cp_28593": return "Latin 3 (ISO)";
+case "Globalization.cp_28594": return "Baltic (ISO)";
+case "Globalization.cp_28595": return "Cyrillic (ISO)";
+case "Globalization.cp_28596": return "Arabic (ISO)";
+case "Globalization.cp_28597": return "Greek (ISO)";
+case "Globalization.cp_28598": return "Hebrew (ISO-Visual)";
+case "Globalization.cp_28599": return "Turkish (ISO)";
+case "Globalization.cp_28603": return "Estonian (ISO)";
+case "Globalization.cp_28605": return "Latin 9 (ISO)";
+case "Globalization.cp_29001": return "Europa";
+case "Globalization.cp_38598": return "Hebrew (ISO-Logical)";
+case "Globalization.cp_50000": return "User Defined";
+case "Globalization.cp_50220": return "Japanese (JIS)";
+case "Globalization.cp_50221": return "Japanese (JIS-Allow 1 byte Kana)";
+case "Globalization.cp_50222": return "Japanese (JIS-Allow 1 byte Kana - SO/SI)";
+case "Globalization.cp_50225": return "Korean (ISO)";
+case "Globalization.cp_50227": return "Chinese Simplified (ISO-2022)";
+case "Globalization.cp_50229": return "Chinese Traditional (ISO-2022)";
+case "Globalization.cp_50930": return "IBM EBCDIC (Japanese and Japanese Katakana)";
+case "Globalization.cp_50931": return "IBM EBCDIC (Japanese and US-Canada)";
+case "Globalization.cp_50933": return "IBM EBCDIC (Korean and Korean Extended)";
+case "Globalization.cp_50935": return "IBM EBCDIC (Simplified Chinese)";
+case "Globalization.cp_50937": return "IBM EBCDIC (Traditional Chinese)";
+case "Globalization.cp_50939": return "IBM EBCDIC (Japanese and Japanese-Latin)";
+case "Globalization.cp_51932": return "Japanese (EUC)";
+case "Globalization.cp_51936": return "Chinese Simplified (EUC)";
+case "Globalization.cp_51949": return "Korean (EUC)";
+case "Globalization.cp_52936": return "Chinese Simplified (HZ)";
+case "Globalization.cp_54936": return "Chinese Simplified (GB18030)";
+case "Globalization.cp_57002": return "ISCII Devanagari";
+case "Globalization.cp_57003": return "ISCII Bengali";
+case "Globalization.cp_57004": return "ISCII Tamil";
+case "Globalization.cp_57005": return "ISCII Telugu";
+case "Globalization.cp_57006": return "ISCII Assamese";
+case "Globalization.cp_57007": return "ISCII Oriya";
+case "Globalization.cp_57008": return "ISCII Kannada";
+case "Globalization.cp_57009": return "ISCII Malayalam";
+case "Globalization.cp_57010": return "ISCII Gujarati";
+case "Globalization.cp_57011": return "ISCII Punjabi";
+#endif // FEATURE_NON_UNICODE_CODE_PAGES
+#endif // INCLUDE_DEBUG
+
+// ;------------------
+
+}
+
+return id;
+
+} }
diff --git a/mcs/class/corlib/System.Globalization/CharUnicodeInfo.cs b/mcs/class/corlib/System.Globalization/CharUnicodeInfo.cs
deleted file mode 100644 (file)
index e4f6594..0000000
+++ /dev/null
@@ -1,434 +0,0 @@
-//
-// System.Globalization.CharUnicodeInfo.cs
-//
-// Author:
-//     Atsushi Enomoto  <atsushi@ximian.com>
-//
-// (C)2005 Novell Inc,
-//
-
-//
-// Copyright (C) 2005 Novell, Inc (http://www.novell.com)
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-using System;
-using System.Diagnostics.Contracts;
-using System.Runtime.CompilerServices;
-
-namespace System.Globalization
-{
-       public static class CharUnicodeInfo
-       {
-               static CharUnicodeInfo ()
-               {
-                       unsafe {
-                               GetDataTablePointers (CategoryDataVersion,
-                                       out category_data, out category_astral_index, out numeric_data,
-                                       out numeric_data_values, out to_lower_data_low, out to_lower_data_high,
-                                       out to_upper_data_low, out to_upper_data_high);
-                               category_check_pair = category_astral_index != null
-                                       ? (byte)UnicodeCategory.Surrogate
-                                       : (byte)0xff;
-                       }
-               }
-
-               private readonly unsafe static byte *category_data;
-               private readonly unsafe static ushort *category_astral_index;
-               private readonly unsafe static byte *numeric_data; // unused
-               private readonly unsafe static double *numeric_data_values;      // unused
-               private readonly unsafe static ushort *to_lower_data_low;
-               private readonly unsafe static ushort *to_lower_data_high;
-               private readonly unsafe static ushort *to_upper_data_low;
-               private readonly unsafe static ushort *to_upper_data_high;
-
-               // UnicodeCategory.Surrogate if astral plane
-               // categories are available, 0xff otherwise.
-               private readonly static byte category_check_pair;
-
-               private const int CategoryDataVersion = 4;
-
-               [MethodImplAttribute(System.Runtime.CompilerServices.MethodImplOptions.InternalCall)]
-               private unsafe static extern void GetDataTablePointers (int category_data_version,
-                       out byte *category_data, out ushort *category_astral_index, out byte *numeric_data,
-                       out double *numeric_data_values, out ushort *to_lower_data_low, out ushort *to_lower_data_high,
-                       out ushort *to_upper_data_low, out ushort *to_upper_data_high);
-
-               public static int GetDecimalDigitValue (char ch)
-               {
-                       int i = (int) ch;
-                       switch (i) {
-                       // They are not decimal digits but are regarded as they were.
-                       case 178:
-                               return 2;
-                       case 179:
-                               return 3;
-                       case 185:
-                               return 1;
-                       case 8304:
-                               return 0;
-                       }
-
-                       // They are not decimal digits but are regarded as they were.
-                       if (8308 <= i && i < 8314)
-                               return i - 8304;
-                       if (8320 <= i && i < 8330)
-                               return i - 8320;
-
-                       if (!Char.IsDigit (ch))
-                               return -1;
-
-                       if (i < 58)
-                               return i - 48;
-
-                       if (i < 1642)
-                               return i - 1632;
-                       if (i < 1786)
-                               return i - 1776;
-                       if (i < 2416)
-                               return i - 2406;
-                       if (i < 2544)
-                               return i - 2534;
-                       if (i < 2672)
-                               return i - 2662;
-                       if (i < 2800)
-                               return i - 2790;
-                       if (i < 2928)
-                               return i - 2918;
-                       if (i < 3056)
-                               return i - 3046;
-                       if (i < 3184)
-                               return i - 3174;
-                       if (i < 3312)
-                               return i - 3302;
-                       if (i < 3440)
-                               return i - 3430;
-                       if (i < 3674)
-                               return i - 3664;
-                       if (i < 3802)
-                               return i - 3792;
-                       if (i < 3882)
-                               return i - 3872;
-                       if (i < 4170)
-                               return i - 4160;
-                       if (i < 4978)
-                               return i - 4968;
-                       if (i < 6122)
-                               return i - 6112;
-                       if (i < 6170)
-                               return i - 6160;
-                       if (i < 8314)
-                               return i - 8304;
-                       if (i < 8330)
-                               return i - 8320;
-                       if (i < 65296)
-                               return -1;
-                       if (i < 65306)
-                               return i - 65296;
-                       return -1;
-               }
-
-               public static int GetDecimalDigitValue (string s, int index)
-               {
-                       if (s == null)
-                               throw new ArgumentNullException ("s");
-                       return GetDecimalDigitValue (s [index]);
-               }
-
-               public static int GetDigitValue (char ch)
-               {
-                       int i = GetDecimalDigitValue (ch);
-
-                       if (i >= 0)
-                               return i;
-                       i = (int) ch;
-
-                       if (i == 9450)
-                               return 0;
-
-                       // They are False in Char.IsDigit(), but returns a digit
-                       if (i >= 9312 && i < 9321)
-                               return i - 9311;
-                       if (i >= 9332 && i < 9341)
-                               return i - 9331;
-                       if (i >= 9352 && i < 9361)
-                               return i - 9351;
-                       if (i >= 9461 && i < 9470)
-                               return i - 9460;
-                       if (i >= 10102 && i < 10111)
-                               return i - 10101;
-                       if (i >= 10112 && i < 10121)
-                               return i - 10111;
-                       if (i >= 10122 && i < 10131)
-                               return i - 10121;
-
-                       return -1;
-               }
-
-               public static int GetDigitValue (string s, int index)
-               {
-                       if (s == null)
-                               throw new ArgumentNullException ("s");
-                       return GetDigitValue (s [index]);
-               }
-
-               public static double GetNumericValue (char ch)
-               {
-                       int i = GetDigitValue (ch);
-                       if (i >= 0)
-                               return i;
-
-                       i = (int) ch;
-
-                       switch (i) {
-                       case 188:
-                               return 0.25;
-                       case 189:
-                               return 0.5;
-                       case 190:
-                               return 0.75;
-                       case 2548:
-                               return 1;
-                       case 2549:
-                               return 2;
-                       case 2550:
-                               return 3;
-                       case 2551:
-                               return 4;
-                       case 2553:
-                               return 16;
-                       case 3056:
-                               return 10;
-                       case 3057:
-                               return 100;
-                       case 3058:
-                               return 1000;
-                       case 4988:
-                               return 10000;
-                       case 5870:
-                               return 17;
-                       case 5871:
-                               return 18;
-                       case 5872:
-                               return 19;
-                       case 8531:
-                               return 1.0 / 3;
-                       case 8532:
-                               return 2.0 / 3;
-                       case 8537:
-                               return 1.0 / 6;
-                       case 8538:
-                               return 5.0 / 6;
-                       case 8539:
-                               return 1.0 / 8;
-                       case 8540:
-                               return 3.0 / 8;
-                       case 8541:
-                               return 5.0 / 8;
-                       case 8542:
-                               return 7.0 / 8;
-                       case 8543:
-                               return 1;
-                       case 8556:
-                               return 50;
-                       case 8557:
-                               return 100;
-                       case 8558:
-                               return 500;
-                       case 8559:
-                               return 1000;
-                       case 8572:
-                               return 50;
-                       case 8573:
-                               return 100;
-                       case 8574:
-                               return 500;
-                       case 8575:
-                               return 1000;
-                       case 8576:
-                               return 1000;
-                       case 8577:
-                               return 5000;
-                       case 8578:
-                               return 10000;
-                       case 9470: // IsNumber(c) is False BTW.
-                       case 10111:
-                       case 10121:
-                       case 10131:
-                               return 10;
-                       case 12295:
-                               return 0;
-                       case 12344:
-                               return 10;
-                       case 12345:
-                               return 20;
-                       case 12346:
-                               return 30;
-                       }
-
-                       // They are not True by IsNumber() but regarded as they were.
-                       if (9451 <= i && i < 9461)
-                               return i - 9440;
-                       if (12321 <= i && i < 12330)
-                               return i - 12320;
-                       if (12881 <= i && i < 12896)
-                               return i - 12860;
-                       if (12977 <= i && i < 12992)
-                               return i - 12941;
-
-                       if (!char.IsNumber (ch))
-                               return -1;
-
-                       if (i < 3891)
-                               return 0.5 + i - 3882;
-                       if (i < 4988)
-                               return (i - 4977) * 10;
-                       if (i < 8537)
-                               return 0.2 * (i - 8532);
-                       if (i < 8556)
-                               return i - 8543;
-                       if (i < 8572)
-                               return i - 8559;
-                       if (i < 9332)
-                               return i - 9311;
-                       if (i < 9352)
-                               return i - 9331;
-                       if (i < 9372)
-                               return i - 9351;
-                       if (i < 12694)
-                               return i - 12689;
-                       if (i < 12842)
-                               return i - 12831;
-                       if (i < 12938)
-                               return i - 12927;
-
-                       return -1;
-               }
-
-               public static double GetNumericValue (string s, int index)
-               {
-                       if (s == null)
-                               throw new ArgumentNullException ("s");
-                       if (((uint)index)>=((uint)s.Length))
-                               throw new ArgumentOutOfRangeException("index");
-                       return GetNumericValue (s [index]);
-               }
-
-               public static UnicodeCategory GetUnicodeCategory (char ch)
-               {
-                       return (InternalGetUnicodeCategory(ch)) ;
-               }
-
-               public static UnicodeCategory GetUnicodeCategory (string s, int index)
-               {
-                       if (s==null)
-                               throw new ArgumentNullException("s");
-                       if (((uint)index)>=((uint)s.Length)) {
-                               throw new ArgumentOutOfRangeException("index");
-                       }
-                       Contract.EndContractBlock();
-                       return InternalGetUnicodeCategory(s, index);
-               }
-
-               internal static char ToLowerInvariant (char c)
-               {
-                       unsafe {
-                               if (c <= ((char)0x24cf))
-                                       return (char) to_lower_data_low [c];
-                               if (c >= ((char)0xff21))
-                                       return (char) to_lower_data_high[c - 0xff21];
-                       }
-                       return c;
-               }
-
-               public static char ToUpperInvariant (char c)
-               {
-                       unsafe {
-                               if (c <= ((char)0x24e9))
-                                       return (char) to_upper_data_low [c];
-                               if (c >= ((char)0xff21))
-                                       return (char) to_upper_data_high [c - 0xff21];
-                       }
-                       return c;
-               }
-
-               internal unsafe static UnicodeCategory InternalGetUnicodeCategory (int ch)
-               {
-                       return (UnicodeCategory)(category_data [ch]);
-               }
-
-               internal static UnicodeCategory InternalGetUnicodeCategory (string value, int index) {
-                       Contract.Assert(value != null, "value can not be null");
-                       Contract.Assert(index < value.Length, "index < value.Length");
-
-                       UnicodeCategory c = GetUnicodeCategory (value [index]);
-                       if ((byte)c == category_check_pair &&
-                               Char.IsSurrogatePair (value, index)) {
-                               int u = Char.ConvertToUtf32 (value [index], value [index + 1]);
-                               unsafe {
-                                       // ConvertToUtf32 guarantees 0x10000 <= u <= 0x10ffff
-                                       int x = (category_astral_index [(u - 0x10000) >> 8] << 8) + (u & 0xff);
-
-                                       c = (UnicodeCategory)category_data [x];
-                               }
-                       }
-
-                       return c;
-               }
-
-               internal const char  HIGH_SURROGATE_START  = '\ud800';
-               internal const char  HIGH_SURROGATE_END    = '\udbff';
-               internal const char  LOW_SURROGATE_START   = '\udc00';
-               internal const char  LOW_SURROGATE_END     = '\udfff';
-
-               internal static bool IsWhiteSpace(String s, int index)
-               {
-                       Contract.Assert(s != null, "s!=null");
-                       Contract.Assert(index >= 0 && index < s.Length, "index >= 0 && index < s.Length");
-
-                       UnicodeCategory uc = GetUnicodeCategory(s, index);
-                       // In Unicode 3.0, U+2028 is the only character which is under the category "LineSeparator".
-                       // And U+2029 is th eonly character which is under the category "ParagraphSeparator".
-                       switch (uc) {
-                               case (UnicodeCategory.SpaceSeparator):
-                               case (UnicodeCategory.LineSeparator):
-                               case (UnicodeCategory.ParagraphSeparator):
-                                       return (true);
-                       }
-                       return (false);
-               }
-
-
-               internal static bool IsWhiteSpace(char c)
-               {
-                       UnicodeCategory uc = GetUnicodeCategory(c);
-                       // In Unicode 3.0, U+2028 is the only character which is under the category "LineSeparator".
-                       // And U+2029 is th eonly character which is under the category "ParagraphSeparator".
-                       switch (uc) {
-                               case (UnicodeCategory.SpaceSeparator):
-                               case (UnicodeCategory.LineSeparator):
-                               case (UnicodeCategory.ParagraphSeparator):
-                                       return (true);
-                       }
-
-                       return (false);
-               }
-       }
-}
index a68bacf3ba125a183158208f9d01c1557f3a5cca..e9f9ac4f7b09074a84d1cbfdf4ab0ffcf66cfd84 100644 (file)
@@ -34,6 +34,7 @@ using System.Collections.Generic;
 using System.Threading;
 using System.Runtime.CompilerServices;
 using System.Runtime.InteropServices;
+using System.Diagnostics.Contracts;
 
 namespace System.Globalization
 {
@@ -60,7 +61,7 @@ namespace System.Globalization
                bool m_useUserOverride;
                [NonSerialized]
                volatile NumberFormatInfo numInfo;
-               volatile DateTimeFormatInfo dateTimeInfo;
+               internal volatile DateTimeFormatInfo dateTimeInfo;
                volatile TextInfo textInfo;
                private string m_name;
                
@@ -98,6 +99,9 @@ namespace System.Globalization
                [NonSerialized]
                // Used by Thread.set_CurrentCulture
                internal byte[] cached_serialized_form;
+
+               [NonSerialized]internal CultureData m_cultureData;
+               [NonSerialized]internal bool m_isInherited;
                
                internal const int InvariantCultureId = 0x7F;
                const int CalendarTypeBits = 8;
@@ -378,7 +382,6 @@ namespace System.Globalization
 
                        RegionInfo.ClearCachedData ();
                        TimeZone.ClearCachedData ();
-                       DateTime.ClearCachedData ();
                        TimeZoneInfo.ClearCachedData ();
                }
 
@@ -418,6 +421,11 @@ namespace System.Globalization
                                infos [0] = (CultureInfo) InvariantCulture.Clone ();
                        }
 
+                       for (int i = 1; i < infos.Length; ++i) {
+                               var ci = infos [i];
+                               infos [i].m_cultureData = CultureData.GetCultureData (ci.m_name, false, ci.datetime_index, ci.CalendarType, ci.iso2lang);
+                       }
+
                        return infos;
                }
 
@@ -519,17 +527,10 @@ namespace System.Globalization
                                if (!constructed) Construct ();
                                CheckNeutral ();
 
-                               // TODO: Have to lock because construct_datetime_format is not atomic
-                               lock (this) {
-                                       if (cultureID == InvariantCultureId && m_isReadOnly)
-                                               dateTimeInfo = DateTimeFormatInfo.InvariantInfo;
-                                       else if (dateTimeInfo == null) {
-                                               dateTimeInfo = new DateTimeFormatInfo (this, m_isReadOnly);
-                                               if (cultureID != InvariantCultureId)
-                                                       construct_datetime_format ();
-                                       }
-                               }
-
+                               var temp = new DateTimeFormatInfo (m_cultureData, Calendar);
+                               temp.m_isReadOnly = m_isReadOnly;
+                               System.Threading.Thread.MemoryBarrier();
+                               dateTimeInfo = temp;
                                return dateTimeInfo;
                        }
 
@@ -604,9 +605,6 @@ namespace System.Globalization
                [MethodImplAttribute (MethodImplOptions.InternalCall)]
                private extern static CultureInfo [] internal_get_cultures (bool neutral, bool specific, bool installed);
 
-               [MethodImplAttribute (MethodImplOptions.InternalCall)]
-               private extern void construct_datetime_format ();
-
                [MethodImplAttribute (MethodImplOptions.InternalCall)]
                private extern void construct_number_format ();
 
@@ -655,6 +653,7 @@ namespace System.Globalization
                        if (culture == InvariantCultureId) {
                                /* Short circuit the invariant culture */
                                ConstructInvariant (read_only);
+                               m_cultureData = CultureData.Invariant;
                                return;
                        }
 
@@ -665,6 +664,8 @@ namespace System.Globalization
                                var msg = string.Format (InvariantCulture, "Culture ID {0} (0x{1}) is not a supported culture.", culture.ToString (InvariantCulture), culture.ToString ("X4", InvariantCulture));
                                throw new CultureNotFoundException ("culture", msg);
                        }
+
+                       m_cultureData = CultureData.GetCultureData (m_name, m_useUserOverride, datetime_index, CalendarType, iso2lang);
                }
 
                public CultureInfo (string name) : this (name, true) {}
@@ -680,16 +681,20 @@ namespace System.Globalization
                        constructed = true;
                        m_isReadOnly = read_only;
                        m_useUserOverride = useUserOverride;
+                       m_isInherited = GetType() != typeof(System.Globalization.CultureInfo);
 
                        if (name.Length == 0) {
                                /* Short circuit the invariant culture */
                                ConstructInvariant (read_only);
+                               m_cultureData = CultureData.Invariant;
                                return;
                        }
 
                        if (!construct_internal_locale_from_name (name.ToLowerInvariant ())) {
                                throw CreateNotFoundException (name);
                        }
+
+                       m_cultureData = CultureData.GetCultureData (m_name, useUserOverride, datetime_index, CalendarType, iso2lang);
                }
 
                // This is used when creating by specific name and creating by
@@ -806,6 +811,7 @@ namespace System.Globalization
                        if (ci.IsNeutralCulture)
                                ci = CreateSpecificCultureFromNeutral (ci.Name);
 
+                       ci.m_cultureData = CultureData.GetCultureData (ci.m_name, false, ci.datetime_index, ci.CalendarType, ci.iso2lang);
                        return ci;
                }
 
@@ -979,6 +985,23 @@ namespace System.Globalization
                        return new CultureInfo (id);
                }
 
+               internal int CalendarType {
+                       get {
+                               switch (default_calendar_type >> CalendarTypeBits) {
+                               case 1:
+                                       return Calendar.CAL_GREGORIAN;
+                               case 2:
+                                       return Calendar.CAL_THAI;
+                               case 3:
+                                       return Calendar.CAL_UMALQURA;
+                               case 4:
+                                       return Calendar.CAL_HIJRI;
+                               default:
+                                       throw new NotImplementedException ("CalendarType");
+                               }
+                       }
+               }
+
                static Calendar CreateCalendar (int calendarType)
                {
                        string name = null;
@@ -1028,5 +1051,30 @@ namespace System.Globalization
                                Thread.default_ui_culture = value;
                        }
                }
+
+#region reference sources
+               // TODO:
+               internal static readonly bool IsTaiwanSku;
+
+        //
+        // CheckDomainSafetyObject throw if the object is customized object which cannot be attached to 
+        // other object (like CultureInfo or DateTimeFormatInfo).
+        //
+
+        internal static void CheckDomainSafetyObject(Object obj, Object container)
+        {
+            if (obj.GetType().Assembly != typeof(System.Globalization.CultureInfo).Assembly) {
+                
+                throw new InvalidOperationException(
+                            String.Format(
+                                CultureInfo.CurrentCulture, 
+                                Environment.GetResourceString("InvalidOperation_SubclassedObject"), 
+                                obj.GetType(),
+                                container.GetType()));
+            }
+            Contract.EndContractBlock();
+        }
+
+#endregion
        }
 }
index 2df83bd24149fb67df6b024d104a98bdd75a8118..2eb8957f69329adfc6bcf35b3c056c0c6de97f8e 100644 (file)
 
 using System;
 using System.Collections.Generic;
-using System.Runtime.InteropServices;
-using System.Threading;
 
 namespace System.Globalization
 {
-       [Flags]
-       enum DateTimeFormatFlags {
-               Unused,
-               But,
-               Serialized,
-               By,
-               Microsoft
-       }
-
-       [Serializable]
-       [ComVisible (true)]
-       [StructLayout (LayoutKind.Sequential)]
-       public sealed class DateTimeFormatInfo : ICloneable, IFormatProvider
+       public sealed partial class DateTimeFormatInfo : ICloneable, IFormatProvider
        {
-               const string MSG_READONLY = "This instance is read only";
-               private static readonly string[] INVARIANT_ABBREVIATED_DAY_NAMES
-                       = new string[7] { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" };
-               private static readonly string[] INVARIANT_DAY_NAMES
-                       = new string[7] { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" };
-               private static readonly string[] INVARIANT_ABBREVIATED_MONTH_NAMES
-                       = new string[13] { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec", "" };
-               private static readonly string[] INVARIANT_MONTH_NAMES
-                       = new string[13] { "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December", "" };
-               static readonly string[] INVARIANT_SHORT_DAY_NAMES =
-                       new string[7] { "Su", "Mo", "Tu", "We", "Th", "Fr", "Sa" };
-               static readonly string[] INVARIANT_ERA_NAMES = { "A.D." };
-               static readonly string[] INVARIANT_ABBREVIATED_ERA_NAMES = { "AD" };
-
-               private static DateTimeFormatInfo theInvariantDateTimeFormatInfo;
-
-#pragma warning disable 169
-               #region Sync with object-internals.h
-               private bool m_isReadOnly;
-               private string amDesignator;
-               private string pmDesignator;
-               private string dateSeparator;
-               private string timeSeparator;
-               private string shortDatePattern;
-               private string longDatePattern;
-               private string shortTimePattern;
-               private string longTimePattern;
-               private string monthDayPattern;
-               private string yearMonthPattern;
-               private int firstDayOfWeek;
-               private int calendarWeekRule;
-               private string[] abbreviatedDayNames;
-               private string[] dayNames;
-               private string[] monthNames;
-               private string[] genitiveMonthNames;
-               private string[] abbreviatedMonthNames;
-               private string[] m_genitiveAbbreviatedMonthNames;
-
-               private string[] allShortDatePatterns;
-               private string[] allLongDatePatterns;
-               private string[] allShortTimePatterns;
-               private string[] allLongTimePatterns;
-               private string[] monthDayPatterns;
-               private string[] yearMonthPatterns;
-               private string[] shortestDayNames;
-               #endregion
-
-               internal readonly CultureInfo culture;
-               Calendar calendar;
-
-               // MS Serialization needs this
-               private string fullDateTimePattern;
-               private int nDataItem;
-               private bool m_useUserOverride;
-               private bool m_isDefaultCalendar;
-               private int CultureID;
-               private bool bUseCalendarInfo;
-               private string generalShortTimePattern;
-               private string generalLongTimePattern;
-               private string[] m_eraNames;
-               private string[] m_abbrevEraNames;
-               private string[] m_abbrevEnglishEraNames;
-               private string[] m_dateWords;
-               private int[] optionalCalendars;
-               private string[] leapYearMonthNames;
-               private DateTimeFormatFlags formatFlags;
-               private string m_name; // Unused, but MS.NET serializes this
-#pragma warning restore 169
-
-               internal DateTimeFormatInfo (CultureInfo culture, bool read_only)
-               {
-                       if (culture == null)
-                               throw new ArgumentNullException ("culture");
-
-                       this.culture = culture;
-                       m_isReadOnly = read_only;
-
-                       amDesignator = "AM";
-                       pmDesignator = "PM";
-                       dateSeparator = "/";
-                       timeSeparator = ":";
-                       shortDatePattern = "MM/dd/yyyy";
-                       longDatePattern = "dddd, dd MMMM yyyy";
-                       shortTimePattern = "HH:mm";
-                       longTimePattern = "HH:mm:ss";
-                       monthDayPattern = "MMMM dd";
-                       yearMonthPattern = "yyyy MMMM";
-
-                       firstDayOfWeek = (int) DayOfWeek.Sunday;
-                       calendarWeekRule = (int) CalendarWeekRule.FirstDay;
-
-                       abbreviatedDayNames = INVARIANT_ABBREVIATED_DAY_NAMES;
-                       dayNames = INVARIANT_DAY_NAMES;
-                       abbreviatedMonthNames = INVARIANT_ABBREVIATED_MONTH_NAMES;
-                       monthNames = INVARIANT_MONTH_NAMES;
-                       m_genitiveAbbreviatedMonthNames = INVARIANT_ABBREVIATED_MONTH_NAMES;
-                       genitiveMonthNames = INVARIANT_MONTH_NAMES;
-                       shortestDayNames = INVARIANT_SHORT_DAY_NAMES;
-               }
-
-               public DateTimeFormatInfo ()
-                       : this (CultureInfo.InvariantCulture, false)
-               {
-               }
-                               
-               public static DateTimeFormatInfo GetInstance(IFormatProvider provider)
-               {
-                       if (provider != null) {
-                               DateTimeFormatInfo dtfi;
-                               dtfi = (DateTimeFormatInfo)provider.GetFormat(typeof(DateTimeFormatInfo));
-                               if (dtfi != null)
-                                       return dtfi;
-                       }
-                       
-                       return CurrentInfo;
-               }
-
-               public bool IsReadOnly {
-                       get {
-                               return m_isReadOnly;
-                       }
-               }
-
-               public static DateTimeFormatInfo ReadOnly(DateTimeFormatInfo dtfi)
-               {
-                       DateTimeFormatInfo copy = (DateTimeFormatInfo)dtfi.Clone();
-                       copy.m_isReadOnly = true;
-                       return copy;
-               }                       
-
-               public object Clone () 
-               {
-                       DateTimeFormatInfo clone = (DateTimeFormatInfo) MemberwiseClone();
-                       // clone is not read only
-                       clone.m_isReadOnly = false;
-                       return clone;
-               }
-
-               public object GetFormat(Type formatType)
-               {
-                       return (formatType == GetType()) ? this : null;
-               }
-
-               public string GetAbbreviatedEraName (int era)
-               {
-                       if (era < 0 || era > AbbreviatedEraNames.Length)
-                               throw new ArgumentOutOfRangeException ("era", era.ToString ());
-                       if (era == Calendar.CurrentEra)
-                               era = EraNames.Length;
-                       return AbbreviatedEraNames [era - 1];
-               }
-
-               public string GetAbbreviatedMonthName(int month)
-               {
-                       if (month < 1 || month > 13) throw new ArgumentOutOfRangeException();
-                       return abbreviatedMonthNames[month-1];
-               }
-
-               public int GetEra (string eraName)
-               {
-                       if (eraName == null)
-                               throw new ArgumentNullException ();
-                       string [] eras = EraNames;
-                       for (int i = 0; i < eras.Length; i++)
-                               if (CultureInfo.InvariantCulture.CompareInfo
-                                       .Compare (eraName, eras [i],
-                                       CompareOptions.IgnoreCase) == 0)
-                                       return Calendar.Eras [i];
-                       
-                       eras = AbbreviatedEraNames;
-                       for (int i = 0; i < eras.Length; i++)
-                               if (CultureInfo.InvariantCulture.CompareInfo
-                                       .Compare (eraName, eras [i],
-                                       CompareOptions.IgnoreCase) == 0)
-                                       return Calendar.Eras [i];
-                       
-                       return -1;
-               }
-
-               public string GetEraName (int era)
-               {
-                       if (era < 0 || era > EraNames.Length)
-                               throw new ArgumentOutOfRangeException ("era", era.ToString ());
-                       if (era == Calendar.CurrentEra)
-                           era = EraNames.Length;
-                       return EraNames [era - 1];
-               }
-
-               internal string[] EraNames {
-                       get {
-                               if (m_eraNames != null)
-                                       return m_eraNames;
-
-                               // TODO: Should use Calendar.ID to initialize calendar specific era names
-                               // from current culture. We don't have such data yet
-                               m_eraNames = INVARIANT_ERA_NAMES;
-                               return m_eraNames;
-                       }
-               }
-
-               internal string[] AbbreviatedEraNames {
-                       get {
-                               if (m_abbrevEraNames != null)
-                                       return m_abbrevEraNames;
-
-                               // TODO: Should use Calendar.ID to initialize calendar specific era names
-                               // from current culture. We don't have such data yet
-                               m_abbrevEraNames = INVARIANT_ABBREVIATED_ERA_NAMES;
-                               return m_abbrevEraNames;
-                       }
-               }
-
-               public string GetMonthName(int month)
-               {
-                       if (month < 1 || month > 13) throw new ArgumentOutOfRangeException();
-                       return monthNames[month-1];
-               }
-               
-               internal string GetMonthGenitiveName (int month)
-               {
-                       return genitiveMonthNames [month - 1];
-               }
-
-               public string[] AbbreviatedDayNames
-               {
-                       get { return (string[]) RawAbbreviatedDayNames.Clone (); }
-                       set { RawAbbreviatedDayNames = value; }
-               }
-
-               internal string[] RawAbbreviatedDayNames
-               {
-                       get
-                       {
-                               return abbreviatedDayNames;
-                       }
-                       set {
-                               CheckDaysValue (value);
-                               abbreviatedDayNames = (string[]) value.Clone();
-                       }
-               }
-
-               public string[] AbbreviatedMonthNames
-               {
-                       get { return (string[]) RawAbbreviatedMonthNames.Clone (); }
-                       set { RawAbbreviatedMonthNames = value; }
-               }
-
-               internal string[] RawAbbreviatedMonthNames
-               {
-                       get
-                       {
-                               return abbreviatedMonthNames;
-                       }
-                       set {
-                               CheckMonthsValue (value);
-                               abbreviatedMonthNames = (string[]) value.Clone();
-                       }
-               }
-
-               public string[] DayNames {
-                       get {
-                               return (string[]) dayNames.Clone ();
-                       }
-                       set {
-                               CheckDaysValue (value);
-                               dayNames = (string[]) value.Clone();
-                       }
-               }
-
-               internal string[] RawDayNames  {
-                       get {
-                               return dayNames;
-                       }
-               }
-
-               public string[] MonthNames {
-                       get {
-                               return (string[]) monthNames.Clone ();
-                       }
-                       set {
-                               CheckMonthsValue (value);
-                               monthNames = (string[]) value.Clone();
-                       }
-               }
-
-               internal string[] RawMonthNames {
-                       get {
-                               return monthNames;
-                       }
-               }
-               
-               [ComVisible (false)]
-               public string[] AbbreviatedMonthGenitiveNames {
-                       get {
-                               return (string[]) m_genitiveAbbreviatedMonthNames.Clone ();
-                       }
-                       set {
-                               CheckMonthsValue (value);
-                               m_genitiveAbbreviatedMonthNames = value;
-                       }
-               }
-
-               [ComVisible (false)]
-               public string[] MonthGenitiveNames {
-                       get {
-                               return (string[]) genitiveMonthNames.Clone ();
-                       }
-                       set {
-                               CheckMonthsValue (value);
-                               genitiveMonthNames = value;
-                       }
-               }
-               
-               [MonoLimitation ("Only default calendar is supported")]
-               [ComVisible (false)]
-               public string NativeCalendarName {
-                       get {
-                               if (Calendar != culture.Calendar)
-                                       return "";
-
-                               return culture.NativeCalendarName;
-                       }
-               }
-
-               [ComVisible (false)]
-               public string[] ShortestDayNames {
-                       get {
-                               return (string[]) shortestDayNames.Clone ();
-                       }
-
-                       set {
-                               CheckDaysValue (value);
-                               shortestDayNames = value;
-                       }
-               }
-
-               public string AMDesignator {
-                       get {
-                               return amDesignator;
-                       }
-                       set {
-                               if (IsReadOnly) throw new InvalidOperationException(MSG_READONLY);
-                               if (value == null) throw new ArgumentNullException();
-                               amDesignator = value;
-                       }
-               }
-
-               public string PMDesignator {
-                       get {
-                               return pmDesignator;
-                       }
-                       set {
-                               if (IsReadOnly) throw new InvalidOperationException(MSG_READONLY);
-                               if (value == null) throw new ArgumentNullException();
-                               pmDesignator = value;
-                       }
-               }
-
-               public string DateSeparator
-               {
-                       get
-                       {
-                               return dateSeparator;
-                       }
-                       set
-                       {
-                               if (IsReadOnly) throw new InvalidOperationException(MSG_READONLY);
-                               if (value == null) throw new ArgumentNullException();
-                               dateSeparator = value;
-                       }
-               }
-
-               public string TimeSeparator
-               {
-                       get
-                       {
-                               return timeSeparator;
-                       }
-                       set
-                       {
-                               if (IsReadOnly) throw new InvalidOperationException(MSG_READONLY);
-                               if (value == null) throw new ArgumentNullException();
-                               timeSeparator = value;
-                       }
-               }
-
-               public string LongDatePattern
-               {
-                       get
-                       {
-                               return longDatePattern;
-                       }
-                       set
-                       {
-                               if (IsReadOnly) throw new InvalidOperationException(MSG_READONLY);
-                               if (value == null) throw new ArgumentNullException();
-                               longDatePattern = value;
-                       }
-               }
-
-               public string ShortDatePattern
-               {
-                       get
-                       {
-                               return shortDatePattern;
-                       }
-                       set
-                       {
-                               if (IsReadOnly) throw new InvalidOperationException(MSG_READONLY);
-                               if (value == null) throw new ArgumentNullException();
-                               shortDatePattern = value;
-                       }
-               }
-
-               public string ShortTimePattern
-               {
-                       get
-                       {
-                               return shortTimePattern;
-                       }
-                       set
-                       {
-                               if (IsReadOnly) throw new InvalidOperationException(MSG_READONLY);
-                               if (value == null) throw new ArgumentNullException();
-                               shortTimePattern = value;
-                       }
-               }
-
-               public string LongTimePattern
-               {
-                       get
-                       {
-                               return longTimePattern;
-                       }
-                       set
-                       {
-                               if (IsReadOnly) throw new InvalidOperationException(MSG_READONLY);
-                               if (value == null) throw new ArgumentNullException();
-                               longTimePattern = value;
-                       }
-               }
-
-               public string MonthDayPattern
-               {
-                       get
-                       {
-                               return monthDayPattern;
-                       }
-                       set
-                       {
-                               if (IsReadOnly) throw new InvalidOperationException(MSG_READONLY);
-                               if (value == null) throw new ArgumentNullException();
-                               monthDayPattern = value;
-                       }
-               }
-
-               public string YearMonthPattern
-               {
-                       get
-                       {
-                               return yearMonthPattern;
-                       }
-                       set
-                       {
-                               if (IsReadOnly) throw new InvalidOperationException(MSG_READONLY);
-                               if (value == null) throw new ArgumentNullException();
-                               yearMonthPattern = value;
-                       }
-               }
-
-               public string FullDateTimePattern
-               {
-                       get {
-                               return fullDateTimePattern ?? (longDatePattern + " " + longTimePattern);
-                       }
-                       set
-                       {
-                               if (IsReadOnly) throw new InvalidOperationException(MSG_READONLY);
-                               if (value == null) throw new ArgumentNullException();
-                               fullDateTimePattern = value;
-                       }
-               }
-
-               public static DateTimeFormatInfo CurrentInfo
-               {
-                       get
-                       {
-                               return Thread.CurrentThread.CurrentCulture.DateTimeFormat;
-                       }
-               }
-
-               public static DateTimeFormatInfo InvariantInfo
-               {
+               [NonSerialized]
+               private string m_fullTimeSpanPositivePattern;
+               internal String FullTimeSpanPositivePattern {
                        get {
-                               if (theInvariantDateTimeFormatInfo == null) {
-                                       var tmp = new DateTimeFormatInfo (CultureInfo.InvariantCulture, true);
-                                       tmp.FillInvariantPatterns ();
-                                       theInvariantDateTimeFormatInfo = tmp;
-                               }
-
-                               return theInvariantDateTimeFormatInfo;
-                       }
-               }
-
-               public DayOfWeek FirstDayOfWeek
-               {
-                       get
-                       {
-                               return (DayOfWeek)firstDayOfWeek;
-                       }
-                       set
-                       {
-                               if (IsReadOnly) throw new InvalidOperationException(MSG_READONLY);
-                               if ((int) value < 0 || (int) value > 6) throw new ArgumentOutOfRangeException();
-                               firstDayOfWeek = (int)value;
-                       }
-               }
-
-               public Calendar Calendar {
-                       get {
-                               return calendar ?? culture.Calendar;
-                       }
-
-                       [MonoLimitation ("Only default calendar specific data are available")]
-                       set {
-                               if (IsReadOnly)
-                                       throw new InvalidOperationException(MSG_READONLY);
-                               if (value == null)
-                                       throw new ArgumentNullException();
-
-                               if (calendar == value)
-                                       return;
-
-                               // TODO: Should use only ids
-                               var calendars = culture.OptionalCalendars;
-                               for (int i = 0; i < calendars.Length; ++i) {
-                                       if (calendars [i].ID != value.ID)
-                                               continue;
+                               if (m_fullTimeSpanPositivePattern == null) {
+                                       String decimalSeparator = Culture.NumberFormat.NumberDecimalSeparator;
 
-                                       calendar = value;
-                                       m_eraNames = null;
-                                       m_abbrevEraNames = null;
+                                       m_fullTimeSpanPositivePattern = "d':'h':'mm':'ss'" + decimalSeparator + "'FFFFFFF";
                                }
 
-                               throw new ArgumentOutOfRangeException ("Invalid calendar");
+                               return m_fullTimeSpanPositivePattern;
                        }
                }
-
-               public CalendarWeekRule CalendarWeekRule
-               {
-                       get
-                       {
-                               return (CalendarWeekRule)calendarWeekRule;
-                       }
-                       set
-                       {
-                               if (IsReadOnly) throw new InvalidOperationException(MSG_READONLY);
-                               calendarWeekRule = (int)value;
-                       }
-               }
-
-               public string RFC1123Pattern {
-                       get {
-                               return "ddd, dd MMM yyyy HH':'mm':'ss 'GMT'";
-                       }
-               }
-
-               internal string RoundtripPattern {
-                       get {
-                               return "yyyy'-'MM'-'dd'T'HH':'mm':'ss.fffffffK";
-                       }
-               }
-
-               public string SortableDateTimePattern {
-                       get {
-                               return "yyyy'-'MM'-'dd'T'HH':'mm':'ss";
-                       }
-               }
-
-               public string UniversalSortableDateTimePattern {
-                       get {
-                               return "yyyy'-'MM'-'dd HH':'mm':'ss'Z'";
-                       }
-               }
-               
-               // FIXME: Not complete depending on GetAllDateTimePatterns(char)")]
-               public string[] GetAllDateTimePatterns () 
-               {
-                       return (string[]) GetAllDateTimePatternsInternal ().Clone ();
-               }
-
-               // Same as above, but with no cloning, because we know that
-               // clients are friendly
-               internal string [] GetAllDateTimePatternsInternal ()
-               {
-                       FillAllDateTimePatterns ();
-                       return all_date_time_patterns;
-               }
-               
-               // Prevent write reordering
-               volatile string [] all_date_time_patterns;
-               
-               void FillAllDateTimePatterns (){
-
-                       if (all_date_time_patterns != null)
-                               return;
-                       
-                       var al = new List<string> (16);
-                       al.AddRange (GetAllRawDateTimePatterns ('d'));
-                       al.AddRange (GetAllRawDateTimePatterns ('D'));
-                       al.AddRange (GetAllRawDateTimePatterns ('f'));
-                       al.AddRange (GetAllRawDateTimePatterns ('F'));
-                       al.AddRange (GetAllRawDateTimePatterns ('g'));
-                       al.AddRange (GetAllRawDateTimePatterns ('G'));
-                       al.AddRange (GetAllRawDateTimePatterns ('m'));
-                       al.AddRange (GetAllRawDateTimePatterns ('M'));
-                       al.AddRange (GetAllRawDateTimePatterns ('o'));
-                       al.AddRange (GetAllRawDateTimePatterns ('O'));
-                       al.AddRange (GetAllRawDateTimePatterns ('r'));
-                       al.AddRange (GetAllRawDateTimePatterns ('R'));
-                       al.AddRange (GetAllRawDateTimePatterns ('s'));
-                       al.AddRange (GetAllRawDateTimePatterns ('t'));
-                       al.AddRange (GetAllRawDateTimePatterns ('T'));
-                       al.AddRange (GetAllRawDateTimePatterns ('u'));
-                       al.AddRange (GetAllRawDateTimePatterns ('U'));
-                       al.AddRange (GetAllRawDateTimePatterns ('y'));
-                       al.AddRange (GetAllRawDateTimePatterns ('Y'));
-
-                       // all_date_time_patterns needs to be volatile to prevent
-                       // reordering of writes here and still avoid any locking.
-                       all_date_time_patterns = al.ToArray ();
-               }
-
-               //
-               // FIXME: We need more culture data in locale-builder
-               //   Whoever put that comment, please expand.
-               //
-               public string[] GetAllDateTimePatterns (char format)
-               {
-                       return (string[]) GetAllRawDateTimePatterns (format).Clone ();
-               }
-
-               internal string[] GetAllRawDateTimePatterns (char format)
-               {
-                       switch (format) {
-                       // Date
-                       case 'D':
-                               if (allLongDatePatterns != null && allLongDatePatterns.Length > 0)
-                                       return allLongDatePatterns;
-                               return new string [] {LongDatePattern};
-                       case 'd':
-                               if (allShortDatePatterns != null && allShortDatePatterns.Length > 0)
-                                       return allShortDatePatterns;
-                               return new string [] {ShortDatePattern};
-                       // Time
-                       case 'T':
-                               if (allLongTimePatterns != null && allLongTimePatterns.Length > 0)
-                                       return allLongTimePatterns;
-                               return new string [] {LongTimePattern};
-                       case 't':
-                               if (allShortTimePatterns != null && allShortTimePatterns.Length > 0)
-                                       return allShortTimePatterns;
-                               return new string [] {ShortTimePattern};
-                       // MonthDay
-                       case 'm':
-                       case 'M':
-                               if (monthDayPatterns != null && monthDayPatterns.Length > 0)
-                                       return monthDayPatterns;
-                               return new string[] { MonthDayPattern };
-                       // YearMonth
-                       case 'Y':
-                       case 'y':
-                               if (yearMonthPatterns != null && yearMonthPatterns.Length > 0)
-                                       return yearMonthPatterns;
-                               return new string[] { YearMonthPattern };
-                       case 'r':
-                       case 'R':
-                               return new string[] { RFC1123Pattern };
-                       case 'O':
-                       case 'o':
-                               return new string[] { RoundtripPattern };
-                       case 's':
-                               return new string[] { SortableDateTimePattern };
-                       case 'u':
-                               return new string[] { UniversalSortableDateTimePattern };
-
-                       //
-                       // Following patterns are combinations of {Short|Long}Date + {Short|Long}Time. Patters can
-                       // be null for non-readonly invariant culture
-                       //
-                       case 'G':
-                               return allShortDatePatterns == null ?
-                                       new string [] { ShortDatePattern + " " + LongTimePattern } :
-                                       PopulateCombinedList (allShortDatePatterns, allLongTimePatterns);
-                       case 'g':
-                               return allShortDatePatterns == null ?
-                                       new string [] { ShortDatePattern + " " + ShortTimePattern } :
-                                       PopulateCombinedList (allShortDatePatterns, allShortTimePatterns);
-                       case 'U': // The 'U' pattern strings are always the same as 'F' (only differs in assuming UTC or not.)
-                       case 'F':
-                               return allLongDatePatterns == null ?
-                                       new string [] { LongDatePattern + " " + ShortTimePattern } :
-                                       PopulateCombinedList (allLongDatePatterns, allLongTimePatterns);
-                       case 'f':
-                               return allLongDatePatterns == null ?
-                                       new string [] { LongDatePattern + " " + ShortTimePattern } :
-                                       PopulateCombinedList (allLongDatePatterns, allShortTimePatterns);
-                       }
-                       throw new ArgumentException ("Format specifier was invalid.");
-               }
-
-               public string GetDayName(DayOfWeek dayofweek)
-               {
-                       int index = (int) dayofweek;
-                       if (index < 0 || index > 6) throw new ArgumentOutOfRangeException();
-                       return dayNames[index];
-               }
-
-               public string GetAbbreviatedDayName(DayOfWeek dayofweek)
-               {
-                       int index = (int) dayofweek;
-                       if (index < 0 || index > 6) throw new ArgumentOutOfRangeException();
-                       return abbreviatedDayNames[index];
-               }
-
-               void FillInvariantPatterns ()
-               {
-                       allShortDatePatterns = new string [] {"MM/dd/yyyy"};
-                       allLongDatePatterns = new string [] {"dddd, dd MMMM yyyy"};
-                       allLongTimePatterns = new string [] {"HH:mm:ss"};
-                       allShortTimePatterns = new string [] {
-                               "HH:mm",
-                               "hh:mm tt",
-                               "H:mm",
-                               "h:mm tt"
-                       };
-                       monthDayPatterns = new string [] {"MMMM dd"};
-                       yearMonthPatterns = new string [] {"yyyy MMMM"};
-
-                       fullDateTimePattern = "dddd, dd MMMM yyyy HH:mm:ss";
-               }
-
-               static string [] PopulateCombinedList (string [] dates, string [] times)
-               {
-                       string[] list = new string[dates.Length * times.Length];
-                       int i = 0;
-                       foreach (string d in dates)
-                               foreach (string t in times)
-                                       list[i++] = d + " " + t;
-                       return list;
-               }
-
-               [ComVisible (false)]
-               public string GetShortestDayName (DayOfWeek dayOfWeek)
-               {
-                       int index = (int) dayOfWeek;
-                       if (index < 0 || index > 6)
-                               throw new ArgumentOutOfRangeException ("dayOfWeek");
-
-                       return shortestDayNames [index];
-               }
-
-               [ComVisible (false)]
-               public void SetAllDateTimePatterns (string [] patterns, char format)
-               {
-                       if (patterns == null)
-                               throw new ArgumentNullException ("patterns");
-                       if (patterns.Length == 0)
-                               throw new ArgumentException ("patterns", "The argument patterns must not be of zero-length");
-
-                       switch (format) {
-                       // YearMonth
-                       case 'Y':
-                       case 'y':
-                               yearMonthPatterns = patterns;
-                               break;
-                       // MonthDay
-                       case 'm':
-                       case 'M':
-                               monthDayPatterns = patterns;
-                               break;
-                       // Date
-                       case 'D':
-                               allLongDatePatterns = patterns;
-                               break;
-                       case 'd':
-                               allShortDatePatterns = patterns;
-                               break;
-                       // Time
-                       case 'T':
-                               allLongTimePatterns = patterns;
-                               break;
-                       case 't':
-                               allShortTimePatterns = patterns;
-                               break;
-                       default:
-                               // note that any other formats are invalid (such as 'r', 'g', 'U')
-                               throw new ArgumentException ("format", "Format specifier is invalid");
-                       }
-               }
-               
-               void CheckDaysValue (string[] value)
-               {
-                       if (IsReadOnly)
-                               throw new InvalidOperationException (MSG_READONLY);
-                               
-                       if (value == null)
-                               throw new ArgumentNullException ();
-
-                       if (value.Length != 7)
-                               throw new ArgumentException ("An array with exactly 7 elements is required");
-
-                       int ni = Array.IndexOf (value, null);
-                       if (ni >= 0)
-                               throw new ArgumentNullException (string.Format ("Element at index {0} is null", ni));
-               }
-               
-               void CheckMonthsValue (string[] value)
-               {
-                       if (IsReadOnly)
-                               throw new InvalidOperationException (MSG_READONLY);
-                               
-                       if (value == null)
-                               throw new ArgumentNullException ();
-
-                       if (value.Length != 13)
-                               throw new ArgumentException ("An array with exactly 13 elements is required");
-
-                       int ni = Array.IndexOf (value, null);
-                       if (ni >= 0)
-                               throw new ArgumentNullException (string.Format ("Element at index {0} is null", ni));
-               }               
        }
 }
diff --git a/mcs/class/corlib/System.Globalization/DaylightTime.cs b/mcs/class/corlib/System.Globalization/DaylightTime.cs
deleted file mode 100644 (file)
index a8f3f7b..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-//
-// System.Globalization.DaylightTime
-//
-// Author:
-//   Chris Hynes (chrish@assistedsolutions.com)
-//
-// (C) 2001 Chris Hynes
-// Copyright (C) 2004-2005 Novell, Inc (http://www.novell.com)
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-namespace System.Globalization
-{
-       [System.Runtime.InteropServices.ComVisible (true)]
-       [Serializable]
-       public class DaylightTime
-       {
-               DateTime m_start, m_end;
-               TimeSpan m_delta;
-
-               public DaylightTime(DateTime start, DateTime end, TimeSpan delta)
-               {
-                       m_start = start;
-                       m_end = end;
-                       m_delta = delta;
-               }
-
-               public DateTime Start
-               {
-                       get
-                       {
-                               return m_start;
-                       }
-               }
-
-               public DateTime End
-               {
-                       get
-                       {
-                               return m_end;
-                       }
-               }
-
-               public TimeSpan Delta
-               {
-                       get
-                       {
-                               return m_delta;
-                       }
-               }
-       }
-}
index cad47f2e486b6527a7c23cad719b6dc251de10ea..f8f4f901deaf6d3ef9d689d342d29592260ac4a4 100644 (file)
@@ -36,6 +36,7 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+using System.Runtime.CompilerServices;
 using System.Runtime.Serialization;
 using System.Runtime.InteropServices;
 using System.Text;
@@ -47,6 +48,43 @@ namespace System.Globalization {
        [MonoTODO ("IDeserializationCallback isn't implemented.")]
        public class TextInfo: IDeserializationCallback, ICloneable
        {
+               static TextInfo ()
+               {
+                       unsafe {
+                               GetDataTablePointersLite (out to_lower_data_low, out to_lower_data_high, out to_upper_data_low, out to_upper_data_high);
+                       }
+               }
+               
+               private readonly unsafe static ushort *to_lower_data_low;
+               private readonly unsafe static ushort *to_lower_data_high;
+               private readonly unsafe static ushort *to_upper_data_low;
+               private readonly unsafe static ushort *to_upper_data_high;
+               [MethodImplAttribute(System.Runtime.CompilerServices.MethodImplOptions.InternalCall)]
+               private unsafe static extern void GetDataTablePointersLite (out ushort *to_lower_data_low, out ushort *to_lower_data_high,
+                       out ushort *to_upper_data_low, out ushort *to_upper_data_high);
+
+               static char ToLowerInvariant (char c)
+               {
+                       unsafe {
+                               if (c <= ((char)0x24cf))
+                                       return (char) to_lower_data_low [c];
+                               if (c >= ((char)0xff21))
+                                       return (char) to_lower_data_high[c - 0xff21];
+                       }
+                       return c;
+               }
+
+               static char ToUpperInvariant (char c)
+               {
+                       unsafe {
+                               if (c <= ((char)0x24e9))
+                                       return (char) to_upper_data_low [c];
+                               if (c >= ((char)0xff21))
+                                       return (char) to_upper_data_high [c - 0xff21];
+                       }
+                       return c;
+               }
+               
                [StructLayout (LayoutKind.Sequential)]
                struct Data {
                        public int ansi;
@@ -311,7 +349,7 @@ namespace System.Globalization {
                                return (char) (c + 0x20);
 
                        if (ci == null || ci.LCID == 0x7F)
-                               return CharUnicodeInfo.ToLowerInvariant (c);
+                               return ToLowerInvariant (c);
 
                        switch (c) {
                        case '\u0049': // Latin uppercase I
@@ -341,7 +379,7 @@ namespace System.Globalization {
                        case '\u03d4':  // ? it is not in ICU
                                return '\u03cb';
                        }
-                       return CharUnicodeInfo.ToLowerInvariant (c);
+                       return ToLowerInvariant (c);
                }
 
                public virtual char ToUpper (char c)
@@ -353,7 +391,7 @@ namespace System.Globalization {
                                return (char) (c - 0x20);
 
                        if (ci == null || ci.LCID == 0x7F)
-                               return CharUnicodeInfo.ToUpperInvariant (c);
+                               return ToUpperInvariant (c);
 
                        switch (c) {
                        case '\u0069': // Latin lowercase i
@@ -391,7 +429,7 @@ namespace System.Globalization {
                        // not handled here.
                        }
 
-                       return CharUnicodeInfo.ToUpperInvariant (c);
+                       return ToUpperInvariant (c);
                }
 
                private char ToTitleCase (char c)
diff --git a/mcs/class/corlib/System.Globalization/TimeSpanStyles.cs b/mcs/class/corlib/System.Globalization/TimeSpanStyles.cs
deleted file mode 100644 (file)
index cb24371..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-//
-// System.Globalization.TimeSpanStyles.cs
-//
-// Authors:
-//     Gonzalo Paniagua Javier (gonzalo@novell.com)
-//
-// Copyright (c) 2010 Novell (http://www.novell.com)
-//
-
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System;
-
-namespace System.Globalization {
-       [Flags]
-       public enum TimeSpanStyles {
-               None,
-               AssumeNegative
-       }
-}
-
index 0ee3a5c94c4621dacb0bc354d9c04c66ed96a0fc..73235c9c23d14f10337b09296ca8ca8d80a01623 100644 (file)
@@ -58,7 +58,7 @@ namespace System.IO {
                private bool m_disposed;
                
                public BinaryReader(Stream input) 
-                       : this(input, Encoding.UTF8UnmarkedUnsafe)
+                       : this(input, EncodingHelper.UTF8UnmarkedUnsafe)
                {
                }
                
index 292573c45ac7429bdc673b0779d8971d6408332e..e433115ea629b4fed017caed31c896cc5bc25184 100644 (file)
@@ -51,11 +51,11 @@ namespace System.IO {
                int maxCharsPerRound;
                bool disposed;
 
-               protected BinaryWriter() : this (Stream.Null, Encoding.UTF8UnmarkedUnsafe)
+               protected BinaryWriter() : this (Stream.Null, EncodingHelper.UTF8UnmarkedUnsafe)
                {
                }
 
-               public BinaryWriter(Stream output) : this(output, Encoding.UTF8UnmarkedUnsafe)
+               public BinaryWriter(Stream output) : this(output, EncodingHelper.UTF8UnmarkedUnsafe)
                {
                }
                
index de1758611c936cd78e37e8310a5ae226f906e8c9..8f4b57290c822e271064aadd68ae09223bed966d 100644 (file)
@@ -575,7 +575,7 @@ namespace System.IO
 
                public static void WriteAllText (string path, string contents)
                {
-                       WriteAllText (path, contents, Encoding.UTF8Unmarked);
+                       WriteAllText (path, contents, EncodingHelper.UTF8Unmarked);
                }
 
                public static void WriteAllText (string path, string contents, Encoding encoding)
index 1adf8ab51accd07f3c00a3cf6da0fe55097338b3..e32675a0a994d8db4bcef8ddc7aed5fc7bf95855 100644 (file)
@@ -328,7 +328,7 @@ namespace System.IO {
                                        return 0;
 
                                if (input_buffer [0] == 0xef && input_buffer [1] == 0xbb && input_buffer [2] == 0xbf){
-                                       this.encoding = Encoding.UTF8Unmarked;
+                                       this.encoding = EncodingHelper.UTF8Unmarked;
                                        return 3;
                                }
 
@@ -343,7 +343,7 @@ namespace System.IO {
                                if (input_buffer [0] == 0 && input_buffer [1] == 0
                                        && input_buffer [2] == 0xfe && input_buffer [3] == 0xff)
                                {
-                                       this.encoding = Encoding.BigEndianUTF32;
+                                       this.encoding = EncodingHelper.BigEndianUTF32;
                                        return 4;
                                }
 
index ef4e866f3c4bf1fc8c627f2257fb315fa2aca0f1..73aeac939aa418268c4e486f90e7b623701d9536 100644 (file)
@@ -59,10 +59,10 @@ namespace System.IO {
                readonly bool leave_open;\r
                IDecoupledTask async_task;\r
 \r
-               public new static readonly StreamWriter Null = new StreamWriter (Stream.Null, Encoding.UTF8Unmarked, 1);\r
+               public new static readonly StreamWriter Null = new StreamWriter (Stream.Null, EncodingHelper.UTF8Unmarked, 1);\r
 \r
                public StreamWriter (Stream stream)\r
-                       : this (stream, Encoding.UTF8Unmarked, DefaultBufferSize) {}\r
+                       : this (stream, EncodingHelper.UTF8Unmarked, DefaultBufferSize) {}\r
 \r
                public StreamWriter (Stream stream, Encoding encoding)\r
                        : this (stream, encoding, DefaultBufferSize) {}\r
@@ -102,10 +102,10 @@ namespace System.IO {
                }\r
 \r
                public StreamWriter (string path)\r
-                       : this (path, false, Encoding.UTF8Unmarked, DefaultFileBufferSize) {}\r
+                       : this (path, false, EncodingHelper.UTF8Unmarked, DefaultFileBufferSize) {}\r
 \r
                public StreamWriter (string path, bool append)\r
-                       : this (path, append, Encoding.UTF8Unmarked, DefaultFileBufferSize) {}\r
+                       : this (path, append, EncodingHelper.UTF8Unmarked, DefaultFileBufferSize) {}\r
 \r
                public StreamWriter (string path, bool append, Encoding encoding)\r
                        : this (path, append, encoding, DefaultFileBufferSize) {}\r
index e5326dc08f603cd258460221d1d28a53c24d16f5..b8ce8edd87cfd49ac5abf649c37d6b88c502325b 100644 (file)
@@ -583,8 +583,7 @@ namespace System.Reflection.Emit {
                {
                        if (method == null)
                                throw new ArgumentNullException ("method");
-                       if (method.DeclaringType.Module != this)
-                               throw new InvalidOperationException ("The method is not in this module");
+
                        return new MethodToken (GetToken (method));
                }
 
index 5401c0b7bcafff392dc649c0737d0a32a8925e9c..f1ba85efdd76de8d9cf04bf3c0715fb3d7515dcb 100644 (file)
@@ -201,13 +201,9 @@ namespace System.Reflection {
                        }
                }
 
-               [SecurityPermission (SecurityAction.LinkDemand, SerializationFormatter = true)]
                public virtual void GetObjectData (SerializationInfo info, StreamingContext context)
                {
-                       if (info == null)
-                               throw new ArgumentNullException ("info");
-
-                       UnitySerializationHolder.GetAssemblyData (this, info, context);
+                       throw new NotImplementedException ();
                }
 
                public virtual bool IsDefined (Type attributeType, bool inherit)
index a414acc3d5fa01769f2b910492e5254f2d5f7bd9..79bddc252ae00193b1fe70f2ab0a332929efe4c1 100644 (file)
@@ -122,10 +122,7 @@ namespace System.Reflection {
                [SecurityPermission (SecurityAction.LinkDemand, SerializationFormatter = true)]
                public virtual void GetObjectData (SerializationInfo info, StreamingContext context) 
                {
-                       if (info == null)
-                               throw new ArgumentNullException ("info");
-
-                       UnitySerializationHolder.GetModuleData (this, info, context);
+                       throw new NotImplementedException ();
                }
 
                [ComVisible (true)]
index 80eb4c79d76c8f2269af0b0a6ad8f18fd7c43b91..cb9faca36dceb08ceb9f866ecdda437ccdb38133 100644 (file)
@@ -34,14 +34,30 @@ using System.Runtime.InteropServices;
 using System.Reflection.Emit;
 #endif
 using System.Collections.Generic;
+using System.Runtime.Serialization;
 
 namespace System.Reflection {
 
+       abstract class RuntimeAssembly : Assembly
+       {
+               public override void GetObjectData (SerializationInfo info, StreamingContext context)
+               {
+                       if (info == null)
+                               throw new ArgumentNullException ("info");
+
+                       UnitySerializationHolder.GetUnitySerializationInfo (info,
+                                                               UnitySerializationHolder.AssemblyUnity,
+                                                               this.FullName,
+                                                               this);
+               }
+       }
+
        [ComVisible (true)]
        [ComDefaultInterfaceAttribute (typeof (_Assembly))]
        [Serializable]
        [ClassInterface(ClassInterfaceType.None)]
-       class MonoAssembly : Assembly {
+       class MonoAssembly : RuntimeAssembly
+       {
                public
                override
                Type GetType (string name, bool throwOnError, bool ignoreCase)
index 19c756a0d65ce88db213e25dafd0c93350eb2d3e..f710da52cdd977cc6333f5947313b187bec60de0 100644 (file)
@@ -34,7 +34,7 @@ using System.Runtime.InteropServices;
 using System.Security.Cryptography.X509Certificates;
 using System.Security;
 using System.Security.Permissions;
-
+using System.Runtime.Serialization;
 
 namespace System.Reflection {
 
@@ -267,6 +267,14 @@ namespace System.Reflection {
                                return res;
                }
 
+               public override void GetObjectData (SerializationInfo info, StreamingContext context)
+               {
+                       if (info == null)
+                               throw new ArgumentNullException ("info");
+
+                       UnitySerializationHolder.GetUnitySerializationInfo (info, UnitySerializationHolder.ModuleUnity, this.ScopeName, this.GetRuntimeAssembly ());
+               }
+
 #if !NET_2_1
 
                public
@@ -291,5 +299,10 @@ namespace System.Reflection {
                public override IList<CustomAttributeData> GetCustomAttributesData () {
                        return CustomAttributeData.GetCustomAttributes (this);
                }
+
+               internal RuntimeAssembly GetRuntimeAssembly ()
+               {
+                       return (RuntimeAssembly)assembly;
+               }
        }
 }
index d17ecb67c889d5f3ec4b37d6e92eaf96078a1cd6..b8a660ffa4692c366ddd04661f6b3101071a1870 100755 (executable)
@@ -208,6 +208,11 @@ namespace System.Security.Claims {
                                throw new ArgumentNullException ("type");
                        return FindAll(x => x.Type == type);
                }
-               
+
+               [MonoTODO]
+               protected virtual void GetObjectData (SerializationInfo info, StreamingContext context)
+               {
+                       throw new NotImplementedException ();
+               }
        }
 }
index 38bf12b7a9d63f7bb39820604dc228974120d848..f36b8336ba73b595001c68fd9f6f59f92f5ddf23 100644 (file)
@@ -38,7 +38,7 @@ namespace System.Security.Cryptography {
        public class HMACRIPEMD160 : HMAC {
 
                public HMACRIPEMD160 () 
-                       : this (KeyBuilder.Key (8))
+                       : this (KeyBuilder.Key (64))
                {
                }
 
index baf644a6ab12166bc9feb55f1f6c6e4060653784..c5285cd359e77da5ccc69143ff492ae05a73adec 100644 (file)
@@ -52,7 +52,7 @@ namespace System.Security.Cryptography {
        public class HMACSHA1 : HMAC {
 
                public HMACSHA1 ()
-                       : this (KeyBuilder.Key (8))
+                       : this (KeyBuilder.Key (64))
                {
                }
 
index 14c208d1fcf0f7d1464ffe8890f1c35cbe1ab438..0682438d445f66118fd0211c9e79cfd34d03820e 100644 (file)
@@ -38,7 +38,7 @@ namespace System.Security.Cryptography {
        public class HMACSHA256 : HMAC {
 
                public HMACSHA256 () 
-                       : this (KeyBuilder.Key (8))
+                       : this (KeyBuilder.Key (64))
                {
                }
 
index a25b0e71f4e5a40693492b5d3ed513ec948bbccd..2ff07ee0fa79bf992bb233a4be6b353ef5298ccc 100644 (file)
@@ -49,7 +49,7 @@ namespace System.Security.Cryptography {
 #endif
 
                public HMACSHA384 () 
-                       : this (KeyBuilder.Key (8))
+                       : this (KeyBuilder.Key (128))
                {
                }
 
index 2f7c16632a16a937da97cbd62ed905fa4977a761..abfe523a538999713ce24b514e79926a8fba7159 100644 (file)
@@ -49,7 +49,7 @@ namespace System.Security.Cryptography {
 #endif
 
                public HMACSHA512 ()
-                       : this (KeyBuilder.Key (8))
+                       : this (KeyBuilder.Key (128))
                {
                }
 
diff --git a/mcs/class/corlib/System.Text/EncodingHelper.cs b/mcs/class/corlib/System.Text/EncodingHelper.cs
new file mode 100644 (file)
index 0000000..f077e44
--- /dev/null
@@ -0,0 +1,195 @@
+using System;
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using System.Security;
+
+namespace System.Text
+{
+
+internal static class EncodingHelper
+{
+       //
+       // Only internal, to be used by the class libraries: Unmarked and non-input-validating
+       //
+       internal static Encoding UTF8Unmarked {
+               get {
+                       if (utf8EncodingWithoutMarkers == null) {
+                               lock (lockobj){
+                                       if (utf8EncodingWithoutMarkers == null){
+                                               utf8EncodingWithoutMarkers = new UTF8Encoding (false, false);
+                                               utf8EncodingWithoutMarkers.setReadOnly ();
+                                       }
+                               }
+                       }
+
+                       return utf8EncodingWithoutMarkers;
+               }
+       }
+       
+       //
+       // Only internal, to be used by the class libraries: Unmarked and non-input-validating
+       //
+       internal static Encoding UTF8UnmarkedUnsafe {
+               get {
+                       if (utf8EncodingUnsafe == null) {
+                               lock (lockobj){
+                                       if (utf8EncodingUnsafe == null){
+                                               utf8EncodingUnsafe = new UTF8Encoding (false, false);
+                                               utf8EncodingUnsafe.setReadOnly (false);
+                                               utf8EncodingUnsafe.DecoderFallback = new DecoderReplacementFallback (String.Empty);
+                                               utf8EncodingUnsafe.setReadOnly ();
+                                       }
+                               }
+                       }
+
+                       return utf8EncodingUnsafe;
+               }
+       }
+
+       // Get the standard big-endian UTF-32 encoding object.
+       internal static Encoding BigEndianUTF32
+       {
+               get {
+                       if (bigEndianUTF32Encoding == null) {
+                               lock (lockobj) {
+                                       if (bigEndianUTF32Encoding == null) {
+                                               bigEndianUTF32Encoding = new UTF32Encoding (true, true);
+                                               bigEndianUTF32Encoding.setReadOnly ();
+                                       }
+                               }
+                       }
+
+                       return bigEndianUTF32Encoding;
+               }
+       }
+       static volatile Encoding utf8EncodingWithoutMarkers;
+       static volatile Encoding utf8EncodingUnsafe;
+       static volatile Encoding bigEndianUTF32Encoding;
+       static readonly object lockobj = new object ();
+
+       [MethodImpl (MethodImplOptions.InternalCall)]
+       extern internal static string InternalCodePage (ref int code_page);
+
+       internal static Encoding GetDefaultEncoding ()
+       {
+               Encoding enc = null;
+                                               // See if the underlying system knows what
+                                               // code page handler we should be using.
+                                               int code_page = 1;
+                                               
+                                               string code_page_name = InternalCodePage (ref code_page);
+                                               try {
+                                                       if (code_page == -1)
+                                                               enc = Encoding.GetEncoding (code_page_name);
+                                                       else {
+                                                               // map the codepage from internal to our numbers
+                                                               code_page = code_page & 0x0fffffff;
+                                                               switch (code_page){
+                                                               case 1: code_page = 20127; break; // ASCIIEncoding.ASCII_CODE_PAGE
+                                                               case 2: code_page = 65007; break; // UTF7Encoding.UTF7_CODE_PAGE
+                                                               case 3: code_page = 65001; break; // UTF8Encoding.UTF8_CODE_PAGE
+                                                               case 4: code_page = 1200; break; // UnicodeEncoding.UNICODE_CODE_PAGE
+                                                               case 5: code_page = 1201; break; // UnicodeEncoding.BIG_UNICODE_CODE_PAGE
+                                                               case 6: code_page = 1252; break; // Latin1Encoding.ISOLATIN_CODE_PAGE
+                                                               }
+                                                               enc = Encoding.GetEncoding (code_page);
+                                                       }
+                                               } catch (NotSupportedException) {
+                                                       // code_page is not supported on underlying platform
+                                                       enc = EncodingHelper.UTF8Unmarked;
+                                               } catch (ArgumentException) {
+                                                       // code_page_name is not a valid code page, or is 
+                                                       // not supported by underlying OS
+                                                       enc = EncodingHelper.UTF8Unmarked;
+                                               }
+               return enc;
+       }
+
+       // Loaded copy of the "I18N" assembly.  We need to move
+       // this into a class in "System.Private" eventually.
+       private static Assembly i18nAssembly;
+       private static bool i18nDisabled;
+
+       // Invoke a specific method on the "I18N" manager object.
+       // Returns NULL if the method failed.
+       internal static Object InvokeI18N (String name, params Object[] args)
+       {
+               lock (lockobj) {
+                       // Bail out if we previously detected that there
+                       // is insufficent engine support for I18N handling.
+                       if (i18nDisabled) {
+                               return null;
+                       }
+
+                       // Find or load the "I18N" assembly.
+                       if (i18nAssembly == null) {
+                               try {
+                                       try {
+                                               i18nAssembly = Assembly.Load (Consts.AssemblyI18N);
+                                       } catch (NotImplementedException) {
+                                               // Assembly loading unsupported by the engine.
+                                               i18nDisabled = true;
+                                               return null;
+                                       }
+                                       if (i18nAssembly == null) {
+                                               return null;
+                                       }
+                               } catch (SystemException) {
+                                       return null;
+                               }
+                       }
+
+                       // Find the "I18N.Common.Manager" class.
+                       Type managerClass;
+                       try {
+                               managerClass = i18nAssembly.GetType ("I18N.Common.Manager");
+                       } catch (NotImplementedException) {
+                               // "GetType" is not supported by the engine.
+                               i18nDisabled = true;
+                               return null;
+                       }
+                       if (managerClass == null) {
+                               return null;
+                       }
+
+                       // Get the value of the "PrimaryManager" property.
+                       Object manager;
+                       try {
+                               manager = managerClass.InvokeMember
+                                               ("PrimaryManager",
+                                                BindingFlags.GetProperty |
+                                                       BindingFlags.Static |
+                                                       BindingFlags.Public,
+                                                null, null, null, null, null, null);
+                               if (manager == null) {
+                                       return null;
+                               }
+                       } catch (MissingMethodException) {
+                               return null;
+                       } catch (SecurityException) {
+                               return null;
+                       } catch (NotImplementedException) {
+                               // "InvokeMember" is not supported by the engine.
+                               i18nDisabled = true;
+                               return null;
+                       }
+
+                       // Invoke the requested method on the manager.
+                       try {
+                               return managerClass.InvokeMember
+                                               (name,
+                                                BindingFlags.InvokeMethod |
+                                                       BindingFlags.Instance |
+                                                       BindingFlags.Public,
+                                                null, manager, args, null, null, null);
+                       } catch (MissingMethodException) {
+                               return null;
+                       } catch (SecurityException) {
+                               return null;
+                       }
+               }
+       }
+}
+
+}
\ No newline at end of file
index ab3911286bb14e71ace61188a76803f60206cfca..1fb0165530be8c7b308557fe756ed2e2accceb0e 100644 (file)
@@ -31,6 +31,11 @@ using System;
 [Serializable]
 internal class Latin1Encoding : Encoding
 {
+       // until we change the callers:
+       internal static string _ (string arg) {
+               return arg;
+       }
+
        // Magic number used by Windows for the ISO Latin1 code page.
        internal const int ISOLATIN_CODE_PAGE = 28591;
 
index 477a456a6119742fd82bccd633de8d7b87c02785..629f52cd0d4421502064a788b6d69aa25ca56f59 100644 (file)
@@ -505,6 +505,19 @@ namespace System.Text {
                        return this;
                }
 
+               internal unsafe StringBuilder Append (char* value, int valueCount)
+               {
+                       int needed_cap = _length + valueCount;
+                       InternalEnsureCapacity (needed_cap);
+
+                       fixed (char* src = _str) {
+                               String.CharCopy (src + _length, value, valueCount);
+                       }
+                       _length = needed_cap;
+
+                       return this;
+               }
+
                public StringBuilder Clear ()
                {
                        Length = 0;
index c0028c84905dd5354f2d14c16029ce9531068dec..9008cf2d076c3521267ab0729b9a2805ebc869d9 100644 (file)
@@ -29,7 +29,7 @@
 namespace System.Threading {
 
        [MonoTODO ("Useless until the runtime supports it")]
-       public class HostExecutionContext {
+       public class HostExecutionContext : IDisposable {
 
                private object _state;
 
@@ -52,5 +52,15 @@ namespace System.Threading {
                        get { return _state; }
                        set { _state = value; }
                }
+
+               public void Dispose ()
+               {
+                       Dispose (true);
+                       GC.SuppressFinalize (this);
+               }
+
+               public virtual void Dispose (bool disposing)
+               {
+               }
        }
 }
index 68207664b64150f79eff1b18845482ab6e77dc38..780cb9a140db65a2fb62789214ea5229874e8aaf 100644 (file)
@@ -31,6 +31,7 @@
 using System.Runtime.InteropServices;
 using System.Collections.Generic;
 using System.Collections;
+using System.Runtime.CompilerServices;
 
 namespace System.Threading
 {
@@ -153,7 +154,7 @@ namespace System.Threading
                                        return true;
                                }
                        } else {
-                               nr = dueTime * TimeSpan.TicksPerMillisecond + DateTime.GetTimeMonotonic ();
+                               nr = dueTime * TimeSpan.TicksPerMillisecond + GetTimeMonotonic ();
                        }
 
                        scheduler.Change (this, nr);
@@ -174,6 +175,10 @@ namespace System.Threading
                {
                }
 
+               // TODO: Environment.TickCount should be enough as is everywhere else
+               [MethodImplAttribute(MethodImplOptions.InternalCall)]
+               static extern long GetTimeMonotonic ();
+
                sealed class TimerComparer : IComparer {
                        public int Compare (object x, object y)
                        {
@@ -328,7 +333,7 @@ namespace System.Threading
                                var new_time = new List<Timer> (512);
                                while (true) {
                                        int ms_wait = -1;
-                                       long ticks = DateTime.GetTimeMonotonic ();
+                                       long ticks = GetTimeMonotonic ();
                                        lock (this) {
                                                changed.Reset ();
                                                //PrintList ();
@@ -349,7 +354,7 @@ namespace System.Threading
                                                        if (no_more) {
                                                                timer.next_run = Int64.MaxValue;
                                                        } else {
-                                                               timer.next_run = DateTime.GetTimeMonotonic () + TimeSpan.TicksPerMillisecond * timer.period_ms;
+                                                               timer.next_run = GetTimeMonotonic () + TimeSpan.TicksPerMillisecond * timer.period_ms;
                                                                new_time.Add (timer);
                                                        }
                                                }
@@ -376,7 +381,7 @@ namespace System.Threading
                                                //PrintList ();
                                                ms_wait = -1;
                                                if (min_next_run != Int64.MaxValue) {
-                                                       long diff = (min_next_run - DateTime.GetTimeMonotonic ())  / TimeSpan.TicksPerMillisecond;
+                                                       long diff = (min_next_run - GetTimeMonotonic ())  / TimeSpan.TicksPerMillisecond;
                                                        if (diff > Int32.MaxValue)
                                                                ms_wait = Int32.MaxValue - 1;
                                                        else {
diff --git a/mcs/class/corlib/System.Threading/Watch.cs b/mcs/class/corlib/System.Threading/Watch.cs
deleted file mode 100644 (file)
index ef19461..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-// Task.cs
-//
-// Copyright (c) 2008 Jérémie "Garuma" Laval
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-//
-//
-
-using System;
-
-namespace System.Threading
-{
-       internal struct Watch
-       {
-               long startTicks;
-               
-               public static Watch StartNew ()
-               {
-                       Watch watch = new Watch ();
-                       watch.Start ();
-                       return watch;
-               }
-               
-               public void Start ()
-               {
-                       startTicks = TicksNow ();
-               }
-               
-               public void Stop ()
-               {
-                       
-               }
-               
-               public long ElapsedMilliseconds {
-                       get {
-                               return (TicksNow () - startTicks) / TimeSpan.TicksPerMillisecond;
-                       }
-               }
-               
-               static long TicksNow ()
-               {
-                       return DateTime.GetTimeMonotonic ();
-               }
-       }
-}
diff --git a/mcs/class/corlib/System/BitConverter.cs b/mcs/class/corlib/System/BitConverter.cs
deleted file mode 100644 (file)
index 9fab011..0000000
+++ /dev/null
@@ -1,319 +0,0 @@
-//
-// System.BitConverter.cs
-//
-// Author:
-//   Matt Kimball (matt@kimball.net)
-//
-//
-// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System.Text;
-
-namespace System
-{
-       public
-       static
-       class BitConverter
-       {
-               public static readonly bool IsLittleEndian = AmILittleEndian ();
-
-               static unsafe bool AmILittleEndian ()
-               {
-                       // binary representations of 1.0:
-                       // big endian:            3f f0 00 00 00 00 00 00
-                       // little endian:         00 00 00 00 00 00 f0 3f
-                       double d = 1.0;
-                       byte *b = (byte*)&d;
-                       return (b [0] == 0);
-               }
-
-               public unsafe static long DoubleToInt64Bits (double value)
-               {
-                       return *(long *) &value;
-               }
-
-               public unsafe static double Int64BitsToDouble (long value)
-               {
-                       return *(double *) &value;
-               }
-
-               unsafe static byte[] GetBytes (byte *ptr, int count)
-               {
-                       byte [] ret = new byte [count];
-
-                       for (int i = 0; i < count; i++) {
-                               ret [i] = ptr [i];
-                       }
-
-                       return ret;
-               }
-
-               unsafe public static byte[] GetBytes (bool value)
-               {
-                       return GetBytes ((byte *) &value, 1);
-               }
-
-               unsafe public static byte[] GetBytes (char value)
-               {
-                       return GetBytes ((byte *) &value, 2);
-               }
-
-               unsafe public static byte[] GetBytes (short value)
-               {
-                       return GetBytes ((byte *) &value, 2);
-               }
-
-               unsafe public static byte[] GetBytes (int value)
-               {
-                       return GetBytes ((byte *) &value, 4);
-               }
-
-               unsafe public static byte[] GetBytes (long value)
-               {
-                       return GetBytes ((byte *) &value, 8);
-               }
-
-               [CLSCompliant (false)]
-               unsafe public static byte[] GetBytes (ushort value)
-               {
-                       return GetBytes ((byte *) &value, 2);
-               }
-
-               [CLSCompliant (false)]
-               unsafe public static byte[] GetBytes (uint value)
-               {
-                       return GetBytes ((byte *) &value, 4);
-               }
-
-               [CLSCompliant (false)]
-               unsafe public static byte[] GetBytes (ulong value)
-               {
-                       return GetBytes ((byte *) &value, 8);
-               }
-
-               unsafe public static byte[] GetBytes (float value)
-               {
-                       return GetBytes ((byte *) &value, 4);
-               }
-
-               unsafe public static byte[] GetBytes (double value)
-               {
-                       return GetBytes ((byte *) &value, 8);
-               }
-
-               unsafe static void PutBytes (byte *dst, byte[] src, int start_index, int count)
-               {
-                       if (src == null)
-                               throw new ArgumentNullException ("value");
-
-                       if (start_index < 0 || (start_index > src.Length - 1))
-                               throw new ArgumentOutOfRangeException ("startIndex", "Index was"
-                                       + " out of range. Must be non-negative and less than the"
-                                       + " size of the collection.");
-
-                       // avoid integer overflow (with large pos/neg start_index values)
-                       if (src.Length - count < start_index)
-                               throw new ArgumentException ("Destination array is not long"
-                                       + " enough to copy all the items in the collection."
-                                       + " Check array index and length.");
-
-                       for (int i = 0; i < count; i++)
-                               dst[i] = src[i + start_index];
-               }
-
-               unsafe public static bool ToBoolean (byte[] value, int startIndex)
-               {
-                       if (value == null) 
-                               throw new ArgumentNullException ("value");
-
-                       if (startIndex < 0 || (startIndex > value.Length - 1))
-                               throw new ArgumentOutOfRangeException ("startIndex", "Index was"
-                                       + " out of range. Must be non-negative and less than the"
-                                       + " size of the collection.");
-
-                       if (value [startIndex] != 0)
-                               return true;
-                       
-                       return false;
-               }
-
-               unsafe public static char ToChar (byte[] value, int startIndex)
-               {
-                       char ret;
-
-                       PutBytes ((byte *) &ret, value, startIndex, 2);
-
-                       return ret;
-               }
-
-               unsafe public static short ToInt16 (byte[] value, int startIndex)
-               {
-                       short ret;
-
-                       PutBytes ((byte *) &ret, value, startIndex, 2);
-
-                       return ret;
-               }
-
-               unsafe public static int ToInt32 (byte[] value, int startIndex)
-               {
-                       int ret;
-
-                       PutBytes ((byte *) &ret, value, startIndex, 4);
-
-                       return ret;
-               }
-
-               unsafe public static long ToInt64 (byte[] value, int startIndex)
-               {
-                       long ret;
-
-                       PutBytes ((byte *) &ret, value, startIndex, 8);
-
-                       return ret;
-               }
-
-               [CLSCompliant (false)]
-               unsafe public static ushort ToUInt16 (byte[] value, int startIndex)
-               {
-                       ushort ret;
-
-                       PutBytes ((byte *) &ret, value, startIndex, 2);
-
-                       return ret;
-               }
-
-               [CLSCompliant (false)]
-               unsafe public static uint ToUInt32 (byte[] value, int startIndex)
-               {
-                       uint ret;
-
-                       PutBytes ((byte *) &ret, value, startIndex, 4);
-
-                       return ret;
-               }
-
-               [CLSCompliant (false)]
-               unsafe public static ulong ToUInt64 (byte[] value, int startIndex)
-               {
-                       ulong ret;
-
-                       PutBytes ((byte *) &ret, value, startIndex, 8);
-
-                       return ret;
-               }
-
-               unsafe public static float ToSingle (byte[] value, int startIndex)
-               {
-                       float ret;
-
-                       PutBytes ((byte *) &ret, value, startIndex, 4);
-
-                       return ret;
-               }
-
-               unsafe public static double ToDouble (byte[] value, int startIndex)
-               {
-                       double ret;
-
-                       PutBytes ((byte *) &ret, value, startIndex, 8);
-
-                       return ret;
-               }
-
-               public static string ToString (byte[] value)
-               {
-                       if (value == null)
-                               throw new ArgumentNullException ("value");
-
-                       return ToString (value, 0, value.Length);
-               }
-
-               public static string ToString (byte[] value, int startIndex)
-               {
-                       if (value == null)
-                               throw new ArgumentNullException ("value");
-
-                       return ToString (value, startIndex, value.Length - startIndex);
-               }
-
-               public static string ToString (byte[] value, int startIndex, int length)
-               {
-                       if (value == null)
-                               throw new ArgumentNullException ("byteArray");
-
-                       // The 4th and last clause (start_index >= value.Length)
-                       // was added as a small fix to a very obscure bug.
-                       // It makes a small difference when start_index is
-                       // outside the range and length==0. 
-                       if (startIndex < 0 || startIndex >= value.Length) {
-                               // special (but valid) case (e.g. new byte [0])
-                               if ((startIndex == 0) && (value.Length == 0))
-                                       return String.Empty;
-                               throw new ArgumentOutOfRangeException ("startIndex", "Index was"
-                                       + " out of range. Must be non-negative and less than the"
-                                       + " size of the collection.");
-                       }
-
-                       if (length < 0)
-                               throw new ArgumentOutOfRangeException ("length",
-                                       "Value must be positive.");
-
-                       // note: re-ordered to avoid possible integer overflow
-                       if (startIndex > value.Length - length)
-                               throw new ArgumentException ("startIndex + length > value.Length");
-
-                       if (length == 0)
-                               return string.Empty;
-
-                       StringBuilder builder = new StringBuilder(length * 3 - 1);
-                       int end = startIndex + length;
-
-                       for (int i = startIndex; i < end; i++) {
-                               if (i > startIndex)
-                                       builder.Append('-');
-                               
-                               char high = (char)((value[i] >> 4) & 0x0f);
-                               char low = (char)(value[i] & 0x0f);
-
-                               if (high < 10) 
-                                       high += '0';
-                               else {
-                                       high -= (char) 10;
-                                       high += 'A';
-                               }
-
-                               if (low < 10)
-                                       low += '0';
-                               else {
-                                       low -= (char) 10;
-                                       low += 'A';
-                               }
-                               builder.Append(high);
-                               builder.Append(low);
-                       }
-
-                       return builder.ToString ();
-               }
-       }
-}
diff --git a/mcs/class/corlib/System/Boolean.cs b/mcs/class/corlib/System/Boolean.cs
deleted file mode 100644 (file)
index e317440..0000000
+++ /dev/null
@@ -1,305 +0,0 @@
-//
-// System.Boolean.cs
-//
-// Author:
-//   Derek Holden (dholden@draper.com)
-//
-// (C) Ximian, Inc.  http://www.ximian.com
-//
-
-//
-// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-// Testing SVN 
-//
-// I guess this is the Boolean class. This was written word for word
-// off the Library specification for System.Boolean in the ECMA
-// TC39 TG2 and TG3 working documents.
-//
-// The XML style documentation isn't that elegant, but it seems to 
-// be the standard way according to the poorly documented C# 
-// Programmer's Reference section on XML Documentation.
-//
-
-using System.Globalization;
-using System.Runtime.InteropServices;
-
-namespace System
-{
-       /// <summary>
-       /// Represents the boolean values of logical true and false.
-       /// </summary>
-       [Serializable]
-       [ComVisible (true)]
-       public struct Boolean : IComparable, IConvertible, IComparable <bool>, IEquatable <bool>
-       {
-               /// <value>
-               /// The String representation of Boolean False
-               /// </value>    
-               public static readonly string FalseString = "False";
-
-               /// <value>
-               /// The String representation of Boolean True
-               /// </value>    
-               public static readonly string TrueString = "True";
-
-               internal bool m_value;
-
-               internal const int True = 1;
-               internal const int False = 0;
-
-               /// <summary>
-               /// Compares the current Boolean instance against another object.
-               /// </summary>
-               /// <remarks>
-               /// Throws an ArgumentException if <c>obj</c> isn't null or 
-               /// a Boolean.
-               /// </remarks>
-               /// <param name="obj">
-               /// The object to compare against
-               /// </param>
-               /// <returns>
-               /// An int reflecting the sort order of this instance as 
-               /// compared to <c>obj</c>
-               /// -1 if this instance is false and <c>obj</c> is true
-               ///  0 if this instance is equal to <c>obj</c>
-               ///  1 if this instance is true and <c>obj</c> is false, 
-               ///    or <c>obj</c> is null
-               /// </returns>
-               public int CompareTo (object obj)
-               {
-                       if (obj == null)
-                               return 1;
-
-                       if (!(obj is System.Boolean))
-                               throw new ArgumentException (Locale.GetText (
-                                       "Object is not a Boolean."));
-
-                       bool value = (bool) obj;
-
-                       // for case #3
-                       if (m_value && !value)
-                               return 1;
-
-                       // for case #2, else it's #1
-                       return (m_value == value) ? 0 : -1;
-               }
-
-               /// <summary>
-               /// Determines whether this instance and another object represent the
-               /// same type and value.
-               /// </summary>
-               /// <param name="obj">
-               /// The object to check against
-               /// </param>
-               /// <returns>
-               /// true if this instnace and <c>obj</c> are same value, 
-               /// otherwise false if it is not or null
-               /// </returns>
-               public override bool Equals (Object obj)
-               {
-                       if (obj == null || !(obj is System.Boolean))
-                               return false;
-
-                       bool value = (bool) obj;
-
-                       return m_value ? value : !value;
-               }
-
-               public int CompareTo (bool value)
-               {
-                       if (m_value == value)
-                               return 0;
-                       return !m_value ? -1 : 1;
-               }
-
-               public bool Equals (bool obj)
-               {
-                       return m_value == obj;
-               }
-
-               /// <summary>
-               /// Generates a hashcode for this object.
-               /// </summary>
-               /// <returns>
-               /// An Int32 value holding the hash code
-               /// </returns>
-               public override int GetHashCode ()
-               {
-                       // Guess there's not too many ways to hash a Boolean
-                       return m_value ? 1 : 0;
-               }
-
-               /// <summary>
-               /// Returns a given string as a boolean value. The string must be 
-               /// equivalent to either TrueString or FalseString, with leading and/or
-               /// trailing spaces, and is parsed case-insensitively.
-               /// </summary>
-               /// <remarks>
-               /// Throws an ArgumentNullException if <c>val</c> is null, or a 
-               /// FormatException if <c>val</c> doesn't match <c>TrueString</c> 
-               /// or <c>FalseString</c>
-               /// </remarks>
-               /// <param name="val">
-               /// The string value to parse
-               /// </param>
-               /// <returns>
-               /// true if <c>val</c> is equivalent to TrueString, 
-               /// otherwise false
-               /// </returns>
-               public static bool Parse (string value)
-               {
-                       if (value == null)
-                               throw new ArgumentNullException ("value");
-
-                       value = value.Trim ();
-
-                       if (string.CompareOrdinalCaseInsensitiveUnchecked (value, TrueString) == 0)
-                               return true;
-
-                       if (string.CompareOrdinalCaseInsensitiveUnchecked (value, FalseString) == 0)
-                               return false;
-
-                       throw new FormatException (Locale.GetText (
-                               "Value is not equivalent to either TrueString or FalseString."));
-               }
-
-               public static bool TryParse (string value, out bool result)
-               {
-                       result = false;
-                       if (value == null)
-                               return false;
-
-                       value = value.Trim ();
-
-                       if (string.CompareOrdinalCaseInsensitiveUnchecked (value, TrueString) == 0) {
-                               result = true;
-                               return true;
-                       }
-
-                       if (string.CompareOrdinalCaseInsensitiveUnchecked (value, FalseString) == 0) {
-                               // result = false; // already set at false by default
-                               return true;
-                       }
-
-                       return false;
-               }
-
-               /// <summary>
-               /// Returns a string representation of this Boolean object.
-               /// </summary>
-               /// <returns>
-               /// <c>FalseString</c> if the instance value is false, otherwise 
-               /// <c>TrueString</c>
-               /// </returns>
-               public override string ToString ()
-               {
-                       return m_value ? TrueString : FalseString;
-               }
-
-               // =========== IConvertible Methods =========== //
-               public TypeCode GetTypeCode ()
-               {
-                       return TypeCode.Boolean;
-               }
-
-               object IConvertible.ToType (Type type, IFormatProvider provider)
-               {
-                       return Convert.DefaultToType ((IConvertible)this, type, provider);
-               }
-
-               bool IConvertible.ToBoolean (IFormatProvider provider)
-               {
-                       return m_value;
-               }
-
-               byte IConvertible.ToByte (IFormatProvider provider)
-               {
-                       return System.Convert.ToByte (m_value);
-               }
-
-               char IConvertible.ToChar (IFormatProvider provider)
-               {
-                       throw new InvalidCastException ();
-               }
-
-               DateTime IConvertible.ToDateTime (IFormatProvider provider)
-               {
-                       throw new InvalidCastException ();
-               }
-
-               decimal IConvertible.ToDecimal (IFormatProvider provider)
-               {
-                       return System.Convert.ToDecimal (m_value);
-               }
-
-               double IConvertible.ToDouble (IFormatProvider provider)
-               {
-                       return System.Convert.ToDouble (m_value);
-               }
-
-               short IConvertible.ToInt16 (IFormatProvider provider)
-               {
-                       return System.Convert.ToInt16 (m_value);
-               }
-
-               int IConvertible.ToInt32 (IFormatProvider provider)
-               {
-                       return System.Convert.ToInt32 (m_value);
-               }
-
-               long IConvertible.ToInt64 (IFormatProvider provider)
-               {
-                       return System.Convert.ToInt64 (m_value);
-               }
-
-               sbyte IConvertible.ToSByte (IFormatProvider provider)
-               {
-                       return System.Convert.ToSByte (m_value);
-               }
-
-               float IConvertible.ToSingle (IFormatProvider provider)
-               {
-                       return System.Convert.ToSingle (m_value);
-               }
-
-               public string ToString (IFormatProvider provider)
-               {
-                       return ToString ();
-               }
-
-               ushort IConvertible.ToUInt16 (IFormatProvider provider)
-               {
-                       return System.Convert.ToUInt16 (m_value);
-               }
-
-               uint IConvertible.ToUInt32 (IFormatProvider provider)
-               {
-                       return System.Convert.ToUInt32 (m_value);
-               }
-
-               ulong IConvertible.ToUInt64 (IFormatProvider provider)
-               {
-                       return System.Convert.ToUInt64 (m_value);
-               }
-       }
-}
index c0cc6f85e0775ed821ed52817a241796d73301c3..caa92b8446033b1aaa4b8e2a48a1347996afe8b9 100644 (file)
@@ -125,11 +125,11 @@ namespace System
                                // UTF-8 ZWNBSP (zero-width non-breaking space).
                                //
                                int code_page = 0;
-                               Encoding.InternalCodePage (ref code_page);
+                               EncodingHelper.InternalCodePage (ref code_page);
 
                                if (code_page != -1 && ((code_page & 0x0fffffff) == 3 // UTF8Encoding.UTF8_CODE_PAGE
                                        || ((code_page & 0x10000000) != 0)))
-                                       inputEncoding = outputEncoding = Encoding.UTF8Unmarked;
+                                       inputEncoding = outputEncoding = EncodingHelper.UTF8Unmarked;
                                else
                                        inputEncoding = outputEncoding = Encoding.Default;
                        }
diff --git a/mcs/class/corlib/System/DBNull.cs b/mcs/class/corlib/System/DBNull.cs
deleted file mode 100644 (file)
index e730cc8..0000000
+++ /dev/null
@@ -1,157 +0,0 @@
-//
-// System.DBNull.cs
-//
-// Authors:
-//   Duncan Mak (duncan@ximian.com)
-//   Ben Maurer (bmaurer@users.sourceforge.net)
-//
-// (C) 2002 Ximian, Inc. http://www.ximian.com
-// (C) 2003 Ben Maurer
-//
-
-//
-// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System.Runtime.Serialization;
-using System.Runtime.InteropServices;
-
-namespace System
-{
-       [Serializable]
-       [ComVisible (true)]
-       public sealed class DBNull : ISerializable, IConvertible
-       {
-               // Fields
-               public static readonly DBNull Value = new DBNull ();
-
-               // Private constructor
-               private DBNull ()
-               {
-               }
-
-               private DBNull (SerializationInfo info, StreamingContext context)
-               {
-                       throw new NotSupportedException ();
-               }
-
-               // Methods
-               public void GetObjectData (SerializationInfo info, StreamingContext context)
-               {
-                       UnitySerializationHolder.GetDBNullData (this, info, context);
-               }
-
-               public TypeCode GetTypeCode ()
-               {
-                       return TypeCode.DBNull;
-               }
-
-               bool IConvertible.ToBoolean (IFormatProvider provider)
-               {
-                       throw new InvalidCastException ();
-               }                       
-
-               byte IConvertible.ToByte (IFormatProvider provider)
-               {
-                       throw new InvalidCastException ();
-               }
-
-               char IConvertible.ToChar (IFormatProvider provider)
-               {
-                       throw new InvalidCastException ();
-               }
-
-               DateTime IConvertible.ToDateTime (IFormatProvider provider)
-               {
-                       throw new InvalidCastException ();
-               }
-
-               decimal IConvertible.ToDecimal (IFormatProvider provider)
-               {
-                       throw new InvalidCastException ();
-               }
-               
-               double IConvertible.ToDouble (IFormatProvider provider)
-               {
-                       throw new InvalidCastException ();
-               }
-
-               short IConvertible.ToInt16 (IFormatProvider provider)
-               {
-                       throw new InvalidCastException ();
-               }
-
-               int IConvertible.ToInt32 (IFormatProvider provider)
-               {
-                       throw new InvalidCastException ();
-               }
-
-               long IConvertible.ToInt64 (IFormatProvider provider)
-               {
-                       throw new InvalidCastException ();
-               }
-
-               sbyte IConvertible.ToSByte (IFormatProvider provider)
-               {
-                       throw new InvalidCastException ();
-               }
-
-               float IConvertible.ToSingle (IFormatProvider provider)
-               {
-                       throw new InvalidCastException ();
-               }
-
-               object IConvertible.ToType (Type targetType, IFormatProvider provider)
-               {
-                       if (targetType == typeof (string))
-                               return String.Empty;
-                       if (targetType == typeof (DBNull))
-                               return this;
-                       throw new InvalidCastException ();
-               }
-
-               ushort IConvertible.ToUInt16 (IFormatProvider provider)
-               {
-                       throw new InvalidCastException ();
-               }
-
-               uint IConvertible.ToUInt32 (IFormatProvider provider)
-               {
-                       throw new InvalidCastException ();
-               }
-
-               ulong IConvertible.ToUInt64 (IFormatProvider provider)
-               {
-                       throw new InvalidCastException ();
-               }
-
-               public override string ToString ()
-               {
-                       return String.Empty;
-               }
-
-               public string ToString (IFormatProvider provider)
-               {
-                       return String.Empty;
-               }
-       }
-}
diff --git a/mcs/class/corlib/System/DateTime.cs b/mcs/class/corlib/System/DateTime.cs
deleted file mode 100644 (file)
index 602d5e0..0000000
+++ /dev/null
@@ -1,2351 +0,0 @@
-//
-// System.DateTime.cs
-//
-// Authors:
-//   Marcel Narings (marcel@narings.nl)
-//   Martin Baulig (martin@gnome.org)
-//   Atsushi Enomoto (atsushi@ximian.com)
-//   Marek Safar (marek.safar@gmail.com)
-//
-//   (C) 2001 Marcel Narings
-// Copyright (C) 2004-2006 Novell, Inc (http://www.novell.com)
-// Copyright (C) 2012 Xamarin Inc (http://www.xamarin.com)
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System.Collections.Generic;
-using System.Globalization;
-using System.Runtime.CompilerServices;
-using System.Runtime.InteropServices;
-using System.Text;
-using System.Runtime.Serialization;
-
-namespace System
-{
-       /// <summary>
-       /// The DateTime structure represents dates and time ranging from
-       /// 1-1-0001 12:00:00 AM to 31-12-9999 23:59:00 Common Era.
-       /// </summary>
-       /// 
-       [Serializable]
-       [StructLayout (LayoutKind.Auto)]
-       public struct DateTime : IFormattable, IConvertible, IComparable, ISerializable, IComparable<DateTime>, IEquatable <DateTime>
-       {
-               //
-               // Encodes the DateTime in 64 bits, top two bits contain the DateTimeKind,
-               // the rest contains the 62 bit value for the ticks.   This reduces the
-               // memory usage from 16 to 8 bytes, see bug: 592221.   This also fixes the
-               // 622127 issue and simplifies the code in reflection.c to encode DateTimes
-               //
-               long encoded;
-               const long TicksMask = 0x3fffffffffffffff;
-               const long KindMask = unchecked ((long) 0xc000000000000000);
-               const int KindShift = 62;
-
-               private const int dp400 = 146097;
-               private const int dp100 = 36524;
-               private const int dp4 = 1461;
-
-               // w32 file time starts counting from 1/1/1601 00:00 GMT
-               // which is the constant ticks from the .NET epoch
-               private const long w32file_epoch = 504911232000000000L;
-
-               //private const long MAX_VALUE_TICKS = 3155378975400000000L;
-               // -- Microsoft .NET has this value.
-               private const long MAX_VALUE_TICKS = 3155378975999999999L;
-
-               //
-               // The UnixEpoch, it begins on Jan 1, 1970 at 0:0:0, expressed
-               // in Ticks
-               //
-               internal const long UnixEpoch = 621355968000000000L;
-
-               // for OLE Automation dates
-               private const long ticks18991230 = 599264352000000000L;
-               private const double OAMinValue = -657435.0d;
-               private const double OAMaxValue = 2958466.0d;
-
-               public static readonly DateTime MaxValue = new DateTime (3155378975999999999);
-               public static readonly DateTime MinValue = new DateTime (0);
-
-               // DateTime.Parse patterns
-               // Patterns are divided to date and time patterns. The algorithm will
-               // try combinations of these patterns. The algorithm also looks for
-               // day of the week, AM/PM GMT and Z independently of the patterns.
-               private static readonly string[] ParseTimeFormats = new string [] {
-                       "H:m:s.fff zzz",
-                       "H:m:s.fffffffzzz",
-                       "H:m:s.fffffff",
-                       "H:m:s.ffffff",
-                       "H:m:s.ffffffzzz",
-                       "H:m:s.fffff",
-                       "H:m:s.ffff",
-                       "H:m:s.fff",
-                       "H:m:s.ff",
-                       "H:m:s.f",
-                       "H:m:s tt zzz",
-                       "H:m:szzz",
-                       "H:m:s",
-                       "H:mzzz",
-                       "H:m",
-                       "H tt", // Specifies AM to disallow '8'.
-                       "H'\u6642'm'\u5206's'\u79D2'"
-               };
-
-               // DateTime.Parse date patterns extend ParseExact patterns as follows:
-               //   MMM - month short name or month full name
-               //   MMMM - month number or short name or month full name
-
-               // Parse behaves differently according to the ShorDatePattern of the
-               // DateTimeFormatInfo. The following define the date patterns for
-               // different orders of day, month and year in ShorDatePattern.
-               // Note that the year cannot go between the day and the month.
-               private static readonly string[] ParseYearDayMonthFormats = new string [] {
-                       "yyyy/M/dT",
-                       "M/yyyy/dT",
-                       "yyyy'\u5E74'M'\u6708'd'\u65E5",
-
-
-                       "yyyy/d/MMMM",
-                       "yyyy/MMM/d",
-                       "d/MMMM/yyyy",
-                       "MMM/d/yyyy",
-                       "d/yyyy/MMMM",
-                       "MMM/yyyy/d",
-
-                       "yy/d/M",
-               };
-
-               private static readonly string[] ParseYearMonthDayFormats = new string [] {
-                       "yyyy/M/dT",
-                       "M/yyyy/dT",
-                       "yyyy'\u5E74'M'\u6708'd'\u65E5",
-
-                       "yyyy/MMMM/d",
-                       "yyyy/d/MMM",
-                       "MMMM/d/yyyy",
-                       "d/MMM/yyyy",
-                       "MMMM/yyyy/d",
-                       "d/yyyy/MMM",
-
-                       "yy/MMMM/d",
-                       "yy/d/MMM",
-                       "MMM/yy/d",
-               };
-
-               private static readonly string[] ParseDayMonthYearFormats = new string [] {
-                       "yyyy/M/dT",
-                       "M/yyyy/dT",
-                       "yyyy'\u5E74'M'\u6708'd'\u65E5",
-
-                       "yyyy/MMMM/d",
-                       "yyyy/d/MMM",
-                       "d/MMMM/yyyy",
-                       "MMM/d/yyyy",
-                       "MMMM/yyyy/d",
-                       "d/yyyy/MMM",
-
-                       "d/MMMM/yy",
-                       "yy/MMM/d",
-                       "d/yy/MMM",
-                       "yy/d/MMM",
-                       "MMM/d/yy",
-                       "MMM/yy/d",
-               };
-
-               private static readonly string[] ParseMonthDayYearFormats = new string [] {
-                       "yyyy/M/dT",
-                       "M/yyyy/dT",
-                       "yyyy'\u5E74'M'\u6708'd'\u65E5",
-
-                       "yyyy/MMMM/d",
-                       "yyyy/d/MMM",
-                       "MMMM/d/yyyy",
-                       "d/MMM/yyyy",
-                       "MMMM/yyyy/d",
-                       "d/yyyy/MMM",
-
-                       "MMMM/d/yy",
-                       "MMM/yy/d",
-                       "d/MMM/yy",
-                       "yy/MMM/d",
-                       "d/yy/MMM",
-                       "yy/d/MMM",
-               };
-               
-               private static readonly string[] ParseGenericYearMonthDayFormats = new string [] {
-                       "yyyy/M/dT",
-                       "yyyy/M/d",
-                       "M/yyyy/dT",
-                       "M/yyyy/d",
-                       "yyyy'\u5E74'M'\u6708'd'\u65E5",
-                       "yyyy'-'M'-'dT",
-                       "yyyy'-'M'-'d",
-               };
-
-               // Patterns influenced by the MonthDayPattern in DateTimeFormatInfo.
-               // Note that these patterns cannot be followed by the time.
-               private static readonly string[] MonthDayShortFormats = new string [] {
-                       "MMMM/d",
-                       "d/MMM",
-                       "yyyy/MMMM",
-               };
-               private static readonly string[] DayMonthShortFormats = new string [] {
-                       "d/MMMM",
-                       "MMM/yy",
-                       "yyyy/MMMM",
-               };
-
-               private static readonly string[] ExoticAndNonStandardFormats = new string[] {
-                       "ddMMMyyyy"
-               };
-
-               private enum Which 
-               {
-                       Day,
-                       DayYear,
-                       Month,
-                       Year
-               };
-       
-               private static readonly int[] daysmonth = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };        
-               private static readonly int[] daysmonthleap = { 0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };    
-
-               private static int AbsoluteDays (int year, int month, int day)
-               {
-                       int[] days;
-                       int temp = 0, m=1 ;
-               
-                       days = (IsLeapYear(year) ? daysmonthleap  : daysmonth);
-                       
-                       while (m < month)
-                               temp += days[m++];
-                       return ((day-1) + temp + (365* (year-1)) + ((year-1)/4) - ((year-1)/100) + ((year-1)/400));
-               }
-
-               private int FromTicks(Which what)
-               {
-                       int num400, num100, num4, numyears; 
-                       int M =1;
-
-                       int[] days = daysmonth;
-                       int totaldays = (int) ((encoded & TicksMask) / TimeSpan.TicksPerDay);
-
-                       num400 = (totaldays / dp400);
-                       totaldays -=  num400 * dp400;
-               
-                       num100 = (totaldays / dp100);
-                       if (num100 == 4)   // leap
-                               num100 = 3;
-                       totaldays -= (num100 * dp100);
-
-                       num4 = totaldays / dp4;
-                       totaldays -= (num4 * dp4);
-
-                       numyears = totaldays / 365 ;
-
-                       if (numyears == 4)  //leap
-                               numyears =3 ;
-                       if (what == Which.Year )
-                               return num400*400 + num100*100 + num4*4 + numyears + 1;
-
-                       totaldays -= (numyears * 365) ;
-                       if (what == Which.DayYear )
-                               return totaldays + 1;
-                       
-                       if  ((numyears==3) && ((num100 == 3) || !(num4 == 24)) ) //31 dec leapyear
-                               days = daysmonthleap;
-
-                       while (totaldays >= days[M])
-                               totaldays -= days[M++];
-
-                       if (what == Which.Month )
-                               return M;
-
-                       return totaldays +1; 
-               }
-
-               static void InvalidTickValue (long ticks)
-               {
-                       string msg = Locale.GetText ("Value {0} is outside the valid range [0,{1}].", ticks, MAX_VALUE_TICKS);
-                       throw new ArgumentOutOfRangeException ("ticks", msg);
-               }
-
-               // Constructors
-               
-               /// <summary>
-               /// Constructs a DateTime for specified ticks
-               /// </summary>
-               /// 
-               public DateTime (long ticks)
-               {
-                       if (ticks < 0 || ticks > MAX_VALUE_TICKS)
-                               InvalidTickValue (ticks);
-                       encoded = ticks;
-               }
-
-               public DateTime (int year, int month, int day)
-                       : this (year, month, day,0,0,0,0) {}
-
-               public DateTime (int year, int month, int day, int hour, int minute, int second)
-                       : this (year, month, day, hour, minute, second, 0)      {}
-
-               public DateTime (int year, int month, int day, int hour, int minute, int second, int millisecond)
-               {
-                       if (year < 1 || year > 9999 || 
-                           month < 1 || month >12  ||
-                           day < 1 || day > DaysInMonth(year, month) ||
-                           hour < 0 || hour > 23 ||
-                           minute < 0 || minute > 59 ||
-                           second < 0 || second > 59 ||
-                           millisecond < 0 || millisecond > 999)
-                               throw new ArgumentOutOfRangeException ("Parameters describe an " +
-                                                                      "unrepresentable DateTime.");
-
-                       encoded = new TimeSpan (AbsoluteDays (year,month,day), hour, minute, second, millisecond).Ticks;
-               }
-
-               public DateTime (int year, int month, int day, Calendar calendar)
-                       : this (year, month, day, 0, 0, 0, 0, calendar)
-               {
-               }
-               
-               public DateTime (int year, int month, int day, int hour, int minute, int second, Calendar calendar)
-                       : this (year, month, day, hour, minute, second, 0, calendar)
-               {
-               }
-
-               public DateTime (int year, int month, int day, int hour, int minute, int second, int millisecond, Calendar calendar)
-               {
-                       if (calendar == null)
-                               throw new ArgumentNullException ("calendar");
-                       encoded = calendar.ToDateTime (year, month, day, hour, minute, second, millisecond).encoded;
-               }
-
-               public DateTime (long ticks, DateTimeKind kind) 
-               {
-                       if (ticks < 0 || ticks > MAX_VALUE_TICKS)
-                               InvalidTickValue (ticks);
-                       if (kind < 0 || kind > DateTimeKind.Local)
-                               throw new ArgumentException ("Invalid DateTimeKind value.", "kind");
-
-                       encoded = ((long)kind << KindShift) | ticks;
-               }
-
-               public DateTime (int year, int month, int day, int hour, int minute, int second, DateTimeKind kind)
-                       : this (year, month, day, hour, minute, second)
-               {
-                       if (kind < 0 || kind > DateTimeKind.Local)
-                               throw new ArgumentException ("Invalid DateTimeKind value.", "kind");
-                       encoded |= ((long)kind << KindShift);
-               }
-
-               public DateTime (int year, int month, int day, int hour, int minute, int second, int millisecond, DateTimeKind kind)
-                       : this (year, month, day, hour, minute, second, millisecond)
-               {
-                       if (kind < 0 || kind > DateTimeKind.Local)
-                               throw new ArgumentException ("Invalid DateTimeKind value.", "kind");
-                       encoded |= ((long)kind << KindShift);
-               }
-
-               public DateTime (int year, int month, int day, int hour, int minute, int second, int millisecond, Calendar calendar, DateTimeKind kind)
-                       : this (year, month, day, hour, minute, second, millisecond, calendar)
-               {
-                       if (kind < 0 || kind > DateTimeKind.Local)
-                               throw new ArgumentException ("Invalid DateTimeKind value.", "kind");
-                       encoded |= ((long)kind << KindShift);
-               }
-
-               //
-               // Not visible, but can be invoked during deserialization
-               //
-               DateTime (SerializationInfo info, StreamingContext context)
-               {
-                       if (info.HasKey ("dateData")){
-                               encoded = (Int64)info.GetUInt64 ("dateData");
-                       } else if (info.HasKey ("ticks")){
-                               encoded = info.GetInt64 ("ticks") & TicksMask;
-                       } else {
-                               encoded = 0;
-                       }
-               }
-               
-                             
-               /* Properties  */
-
-               public DateTime Date {
-                       get { 
-                               DateTime ret = new DateTime (Year, Month, Day);
-                               ret.encoded |= encoded & KindMask;
-                               return ret;
-                       }
-               }
-
-               public int Month {
-                       get { 
-                               return FromTicks (Which.Month); 
-                       }
-               }
-
-               public int Day {
-                       get { 
-                               return FromTicks (Which.Day); 
-                       }
-               }
-
-               public DayOfWeek DayOfWeek {
-                       get {
-                               return (DayOfWeek) ((((encoded & TicksMask)/TimeSpan.TicksPerDay)+1) % 7);
-                       }
-               }
-
-               public int DayOfYear {
-                       get { 
-                               return FromTicks (Which.DayYear); 
-                       }
-               }
-
-               public TimeSpan TimeOfDay {
-                       get { 
-                               return new TimeSpan ((encoded & TicksMask) % TimeSpan.TicksPerDay);
-                       }
-                       
-               }
-
-               public int Hour {
-                       get { 
-                               return (int) ((encoded & TicksMask) % TimeSpan.TicksPerDay / TimeSpan.TicksPerHour);
-                       }
-               }
-
-               public int Minute {
-                       get { 
-                               return (int)  ((encoded & TicksMask) % TimeSpan.TicksPerHour / TimeSpan.TicksPerMinute);
-                       }
-               }
-
-               public int Second {
-                       get { 
-                               return (int) ((encoded & TicksMask) % TimeSpan.TicksPerMinute / TimeSpan.TicksPerSecond);
-                       }
-               }
-
-               public int Millisecond {
-                       get { 
-                               return (int) ((encoded & TicksMask) % TimeSpan.TicksPerSecond / TimeSpan.TicksPerMillisecond);
-                       }
-               }
-               
-               [MethodImplAttribute(MethodImplOptions.InternalCall)]
-               internal static extern long GetTimeMonotonic ();
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)]
-               internal static extern long GetNow ();
-
-               internal static void ClearCachedData ()
-               {
-                       to_local_time_span_object = null;
-               }
-
-               //
-               // To reduce the time consumed by DateTime.Now, we keep
-               // the difference to map the system time into a local
-               // time into `to_local_time_span', we record the timestamp
-               // for this in `last_now'
-               //
-               static object to_local_time_span_object;
-               static long last_now;
-               
-               public static DateTime Now {
-                       get {
-                               long now = GetNow ();
-                               DateTime dt = new DateTime (now);
-
-                               if (to_local_time_span_object == null || Math.Abs (now - last_now) > TimeSpan.TicksPerMinute){
-                                       to_local_time_span_object = TimeZone.CurrentTimeZone.GetLocalTimeDiff (dt);
-                                       last_now = now;
-
-                               }
-
-                               // This is boxed, so we avoid locking.
-                               DateTime ret = dt + (TimeSpan) to_local_time_span_object;
-                               ret.encoded |= ((long)DateTimeKind.Local << KindShift);
-                               return ret;
-                       }
-               }
-
-               public long Ticks { 
-                       get { 
-                               return encoded & TicksMask;
-                       }
-               }
-       
-               public static DateTime Today {
-                       get {
-                               DateTime now = Now;
-                               DateTime today = new DateTime (now.Year, now.Month, now.Day);
-                               today.encoded |= ((long)DateTimeKind.Local << KindShift);
-                               return today;
-                       }
-               }
-
-               public static DateTime UtcNow {
-                       get {
-                               return new DateTime (GetNow (), DateTimeKind.Utc);
-                       }
-               }
-
-               public int Year {
-                       get { 
-                               return FromTicks (Which.Year); 
-                       }
-               }
-
-               public DateTimeKind Kind {
-                       get {
-                               return (DateTimeKind) ((ulong)encoded >> KindShift);
-                       }
-               }
-
-               /* methods */
-
-               public DateTime Add (TimeSpan value)
-               {
-                       DateTime ret = AddTicks (value.Ticks);
-                       return ret;
-               }
-
-               public DateTime AddDays (double value)
-               {
-                       return AddMilliseconds (Math.Round (value * 86400000));
-               }
-               
-               public DateTime AddTicks (long value)
-               {
-                       long res = value + (encoded & TicksMask);
-                       if (res < 0 || res > MAX_VALUE_TICKS)
-                               throw new ArgumentOutOfRangeException();
-
-                       DateTime ret = new DateTime (res);
-                       ret.encoded |= (encoded & KindMask);
-                       return ret;
-               }
-
-               public DateTime AddHours (double value)
-               {
-                       return AddMilliseconds (value * 3600000);
-               }
-
-               public DateTime AddMilliseconds (double value)
-               {
-                       if ((value * TimeSpan.TicksPerMillisecond) > long.MaxValue ||
-                           (value * TimeSpan.TicksPerMillisecond) < long.MinValue) {
-                               throw new ArgumentOutOfRangeException();
-                       }
-                       long msticks = (long) Math.Round (value * TimeSpan.TicksPerMillisecond);
-
-                       return AddTicks (msticks);
-               }
-
-               // required to match MS implementation for OADate (OLE Automation)
-               private DateTime AddRoundedMilliseconds (double ms)
-               {
-                       if ((ms * TimeSpan.TicksPerMillisecond) > long.MaxValue ||
-                               (ms * TimeSpan.TicksPerMillisecond) < long.MinValue) {
-                               throw new ArgumentOutOfRangeException ();
-                       }
-                       long msticks = (long) (ms += ms > 0 ? 0.5 : -0.5) * TimeSpan.TicksPerMillisecond;
-
-                       return AddTicks (msticks);
-               }
-
-               public DateTime AddMinutes (double value)
-               {
-                       return AddMilliseconds (value * 60000);
-               }
-               
-               public DateTime AddMonths (int months)
-               {
-                       int day, month, year,  maxday ;
-                       DateTime temp ;
-
-                       day = this.Day;
-                       month = this.Month + (months % 12);
-                       year = this.Year + months/12 ;
-                       
-                       if (month < 1)
-                       {
-                               month = 12 + month ;
-                               year -- ;
-                       }
-                       else if (month>12) 
-                       {
-                               month = month -12;
-                               year ++;
-                       }
-                       maxday = DaysInMonth(year, month);
-                       if (day > maxday)
-                               day = maxday;
-
-                       temp = new DateTime (year, month, day);
-                       temp.encoded |= encoded & KindMask;
-                       return  temp.Add (this.TimeOfDay);
-               }
-
-               public DateTime AddSeconds (double value)
-               {
-                       return AddMilliseconds (value * 1000);
-               }
-
-               public DateTime AddYears (int value)
-               {
-                       return AddMonths (value * 12);
-               }
-
-               public static int Compare (DateTime t1, DateTime t2)
-               {
-                       long t1t = t1.encoded & TicksMask;
-                       long t2t = t2.encoded & TicksMask;
-                       
-                       if (t1t < t2t) 
-                               return -1;
-                       else if (t1t > t2t) 
-                               return 1;
-                       else
-                               return 0;
-               }
-
-               public int CompareTo (object value)
-               {
-                       if (value == null)
-                               return 1;
-
-                       if (!(value is System.DateTime))
-                               throw new ArgumentException (Locale.GetText (
-                                       "Value is not a System.DateTime"));
-
-                       return Compare (this, (DateTime) value);
-               }
-
-               public bool IsDaylightSavingTime ()
-               {
-                       if ((int)((ulong)encoded >> KindShift) == (int) DateTimeKind.Utc)
-                               return false;
-                       return TimeZone.CurrentTimeZone.IsDaylightSavingTime (this);
-               }
-
-               public int CompareTo (DateTime value)
-               {
-                       return Compare (this, value);
-               }
-
-               public bool Equals (DateTime value)
-               {
-                       return (value.encoded & TicksMask) == (encoded & TicksMask);
-               }
-
-               public long ToBinary ()
-               {
-                       if ((encoded & ((long)DateTimeKind.Local << KindShift)) != 0)
-                               return (long) ((ulong) ToUniversalTime ().Ticks | 0x8000000000000000);
-                       
-                       return encoded;
-               }
-
-               public static DateTime FromBinary (long dateData)
-               {
-                       switch ((ulong)dateData >> KindShift) {
-                       case 1: // Utc
-                               return new DateTime (dateData & TicksMask, DateTimeKind.Utc);
-                       case 0: // Unspecified
-                               return new DateTime (dateData, DateTimeKind.Unspecified);
-                       default: // Local
-                               return new DateTime (dateData & TicksMask, DateTimeKind.Utc).ToLocalTime ();
-                       }
-               }
-
-               public static DateTime SpecifyKind (DateTime value, DateTimeKind kind)
-               {
-                       return new DateTime (value.Ticks, kind);
-               }
-
-               public static int DaysInMonth (int year, int month)
-               {
-                       int[] days ;
-
-                       if (month < 1 || month >12)
-                               throw new ArgumentOutOfRangeException ();
-
-                       if (year < 1 || year > 9999)
-                               throw new ArgumentOutOfRangeException ();
-
-                       days = (IsLeapYear(year) ? daysmonthleap  : daysmonth);
-                       return days[month];                     
-               }
-               
-               public override bool Equals (object value)
-               {
-                       if (!(value is System.DateTime))
-                               return false;
-
-                       return (((DateTime) value).encoded & TicksMask) == (encoded & TicksMask);
-               }
-
-               public static bool Equals (DateTime t1, DateTime t2 )
-               {
-                       return (t1.encoded & TicksMask) == (t2.encoded & TicksMask);
-               }
-
-               public static DateTime FromFileTime (long fileTime) 
-               {
-                       if (fileTime < 0)
-                               throw new ArgumentOutOfRangeException ("fileTime", "< 0");
-
-                       return new DateTime (w32file_epoch + fileTime).ToLocalTime ();
-               }
-
-               public static DateTime FromFileTimeUtc (long fileTime) 
-               {
-                       if (fileTime < 0)
-                               throw new ArgumentOutOfRangeException ("fileTime", "< 0");
-
-                       return new DateTime (w32file_epoch + fileTime, DateTimeKind.Utc);
-               }
-
-               public static DateTime FromOADate (double d)
-               {
-                       // An OLE Automation date is implemented as a floating-point number
-                       // whose value is the number of days from midnight, 30 December 1899.
-
-                       // d must be negative 657435.0 through positive 2958466.0.
-                       if ((d <= OAMinValue) || (d >= OAMaxValue))
-                               throw new ArgumentException ("d", "[-657435,2958466]");
-
-                       DateTime dt = new DateTime (ticks18991230);
-                       if (d < 0.0d) {
-                               Double days = Math.Ceiling (d);
-                               // integer part is the number of days (negative)
-                               dt = dt.AddRoundedMilliseconds (days * 86400000);
-                               // but decimals are the number of hours (in days fractions) and positive
-                               Double hours = (days - d);
-                               dt = dt.AddRoundedMilliseconds (hours * 86400000);
-                       }
-                       else {
-                               dt = dt.AddRoundedMilliseconds (d * 86400000);
-                       }
-
-                       return dt;
-               }
-
-               public string[] GetDateTimeFormats() 
-               {
-                       return GetDateTimeFormats (CultureInfo.CurrentCulture);
-               }
-
-               public string[] GetDateTimeFormats(char format)
-               {
-                       if ("dDgGfFmMrRstTuUyY".IndexOf (format) < 0)
-                               throw new FormatException ("Invalid format character.");
-                       string[] result = new string[1];
-                       result[0] = this.ToString(format.ToString());
-                       return result;
-               }
-               
-               public string[] GetDateTimeFormats(IFormatProvider provider)
-               {
-                       DateTimeFormatInfo info = (DateTimeFormatInfo) provider.GetFormat (typeof(DateTimeFormatInfo));
-//                     return GetDateTimeFormats (info.GetAllDateTimePatterns ());
-                       var l = new List<string> ();
-                       foreach (char c in "dDgGfFmMrRstTuUyY")
-                               l.AddRange (GetDateTimeFormats (c, info));
-                       return l.ToArray ();
-               }
-
-               public string[] GetDateTimeFormats(char format,IFormatProvider provider )
-               {
-                       if ("dDgGfFmMrRstTuUyY".IndexOf (format) < 0)
-                               throw new FormatException ("Invalid format character.");
-
-                       // LAMESPEC: There is NO assurance that 'U' ALWAYS
-                       // euqals to 'F', but since we have to iterate all
-                       // the pattern strings, we cannot just use 
-                       // ToString("U", provider) here. I believe that the 
-                       // method's behavior cannot be formalized.
-                       bool adjustutc = false;
-                       switch (format) {
-                       case 'U':
-//                     case 'r':
-//                     case 'R':
-//                     case 'u':
-                               adjustutc = true;
-                               break;
-                       }
-                       DateTimeFormatInfo info = (DateTimeFormatInfo) provider.GetFormat (typeof(DateTimeFormatInfo));
-                       return GetDateTimeFormats (adjustutc, info.GetAllRawDateTimePatterns (format), info);
-               }
-
-               private string [] GetDateTimeFormats (bool adjustutc, string [] patterns, DateTimeFormatInfo dfi)
-               {
-                       string [] results = new string [patterns.Length];
-                       DateTime val = adjustutc ? ToUniversalTime () : this;
-                       for (int i = 0; i < results.Length; i++)
-                               results [i] = DateTimeUtils.ToString (val, patterns [i], dfi);
-                       return results;
-               }
-
-               public override int GetHashCode ()
-               {
-                       return (int) encoded;
-               }
-
-               public TypeCode GetTypeCode ()
-               {
-                       return TypeCode.DateTime;
-               }
-
-               public static bool IsLeapYear (int year)
-               {
-                       if (year < 1 || year > 9999)
-                               throw new ArgumentOutOfRangeException ();
-                       return  ( (year % 4 == 0 && year % 100 != 0) || year % 400 == 0) ;
-               }
-
-               public static DateTime Parse (string s)
-               {
-                       return Parse (s, null);
-               }
-
-               public static DateTime Parse (string s, IFormatProvider provider)
-               {
-                       return Parse (s, provider, DateTimeStyles.AllowWhiteSpaces);
-               }
-
-               public static DateTime Parse (string s, IFormatProvider provider, DateTimeStyles styles)
-               {
-                       if (s == null)
-                               throw new ArgumentNullException ("s");
-
-                       DateTime res;
-                       DateTimeOffset dto;
-                       Exception exception = null;
-                       if (!CoreParse (s, provider, styles, out res, out dto, true, ref exception))
-                               throw exception;
-                       
-                       return res;
-               }
-
-               const string formatExceptionMessage = "String was not recognized as a valid DateTime.";
-               
-               internal static bool CoreParse (string s, IFormatProvider provider, DateTimeStyles styles,
-                                             out DateTime result, out DateTimeOffset dto, bool setExceptionOnError, ref Exception exception)
-               {
-                       dto = new DateTimeOffset (0, TimeSpan.Zero);
-                       if (s == null || s.Length == 0) {
-                               if (setExceptionOnError)
-                                       exception = new FormatException (formatExceptionMessage);
-                               result = MinValue;
-                               return false;
-                       }
-
-                       if (provider == null)
-                               provider = CultureInfo.CurrentCulture;
-                       DateTimeFormatInfo dfi = DateTimeFormatInfo.GetInstance (provider);
-
-                       // Try first all the combinations of ParseAllDateFormats & ParseTimeFormats
-                       string[] allDateFormats = YearMonthDayFormats (dfi);
-                       if (allDateFormats == null){
-                               result = MinValue;
-                               return false;
-                       }
-
-                       bool longYear = false;
-                       for (int i = 0; i < allDateFormats.Length; i++) {
-                               string firstPart = allDateFormats [i];
-                               bool incompleteFormat = false;
-                               if (_DoParse (s, firstPart, "", false, out result, out dto, dfi, styles, true, ref incompleteFormat, ref longYear))
-                                       return true;
-
-                               if (!incompleteFormat)
-                                       continue;
-
-                               for (int j = 0; j < ParseTimeFormats.Length; j++) {
-                                       if (_DoParse (s, firstPart, ParseTimeFormats [j], false, out result, out dto, dfi, styles, true, ref incompleteFormat, ref longYear))
-                                               return true;
-                               }
-
-                               if (_DoParse (s, firstPart, "zzz", false, out result, out dto, dfi, styles, true, ref incompleteFormat, ref longYear))
-                                       return true;
-                       }
-
-                       //
-                       // Month day formats
-                       //
-                       int dayIndex = dfi.MonthDayPattern.IndexOf('d');
-                       int monthIndex = dfi.MonthDayPattern.IndexOf('M');
-                       if (dayIndex == -1 || monthIndex == -1){
-                               result = MinValue;
-                               if (setExceptionOnError)
-                                       exception = new FormatException (Locale.GetText("Order of month and date is not defined by {0}", dfi.MonthDayPattern));
-                               return false;
-                       }
-                       bool is_day_before_month = dayIndex < monthIndex;
-                       string[] monthDayFormats = is_day_before_month ? DayMonthShortFormats : MonthDayShortFormats;
-                       for (int i = 0; i < monthDayFormats.Length; i++) {
-                               bool incompleteFormat = false;
-                               if (_DoParse (s, monthDayFormats[i], "", false, out result, out dto, dfi, styles, true, ref incompleteFormat, ref longYear))
-                                       return true;
-                       }
-                       
-                       for (int j = 0; j < ParseTimeFormats.Length; j++) {
-                               string firstPart = ParseTimeFormats [j];
-                               bool incompleteFormat = false;
-                               if (_DoParse (s, firstPart, "", false, out result, out dto, dfi, styles, false, ref incompleteFormat, ref longYear))
-                                       return true;
-                               if (!incompleteFormat)
-                                       continue;
-
-                               for (int i = 0; i < monthDayFormats.Length; i++) {
-                                       if (_DoParse (s, firstPart, monthDayFormats [i], false, out result, out dto, dfi, styles, false, ref incompleteFormat, ref longYear))
-                                               return true;
-                               }
-                               for (int i = 0; i < allDateFormats.Length; i++) {
-                                       string dateFormat = allDateFormats [i];
-                                       if (dateFormat[dateFormat.Length - 1] == 'T')
-                                               continue; // T formats must be before the time part
-                                       if (_DoParse (s, firstPart, dateFormat, false, out result, out dto, dfi, styles, false, ref incompleteFormat, ref longYear))
-                                               return true;
-                               }
-                       }
-
-                       // Try as a last resort all the patterns
-                       if (CoreParseExact (s, dfi.GetAllDateTimePatternsInternal (), dfi, styles, out result, out dto, false, ref longYear, setExceptionOnError, ref exception))
-                               return true;
-
-                       if (CoreParseExact (s, ExoticAndNonStandardFormats, dfi, styles, out result, out dto, false, ref longYear, setExceptionOnError, ref exception))
-                               return true;
-
-                       if (!setExceptionOnError)
-                               return false;
-                       
-                       // .NET 2.x does not throw an ArgumentOutOfRangeException, but .NET 1.1 does.
-                       exception = new FormatException (formatExceptionMessage);
-                       return false;
-               }
-
-               public static DateTime ParseExact (string s, string format, IFormatProvider provider)
-               {
-                       return ParseExact (s, format, provider, DateTimeStyles.None);
-               }
-
-               private static string[] YearMonthDayFormats (DateTimeFormatInfo dfi)
-               {
-                       int dayIndex = dfi.ShortDatePattern.IndexOf('d');
-                       int monthIndex = dfi.ShortDatePattern.IndexOf('M');
-                       int yearIndex = dfi.ShortDatePattern.IndexOf('y');
-                       if (dayIndex == -1 || monthIndex == -1 || yearIndex == -1)
-                               return ParseGenericYearMonthDayFormats;
-
-                       if (yearIndex < monthIndex)
-                               if (monthIndex < dayIndex)
-                                       return ParseYearMonthDayFormats;
-                               else if (yearIndex < dayIndex)
-                                       return ParseYearDayMonthFormats;
-                               else {
-                                       // The year cannot be between the date and the month
-                                       return ParseGenericYearMonthDayFormats;
-                               }
-                       else if (dayIndex < monthIndex)
-                               return ParseDayMonthYearFormats;
-                       else if (dayIndex < yearIndex)
-                               return ParseMonthDayYearFormats;
-                       else {
-                               // The year cannot be between the month and the date
-                               return ParseGenericYearMonthDayFormats;
-                       }
-               }
-
-               private static int _ParseNumber (string s, int valuePos,
-                                                int min_digits,
-                                                int digits,
-                                                bool leadingzero,
-                                                bool sloppy_parsing,
-                                                out int num_parsed)
-               {
-                       int number = 0, i;
-
-                       if (sloppy_parsing)
-                               leadingzero = false;
-
-                       if (!leadingzero) {
-                               int real_digits = 0;
-                               for (i = valuePos; i < s.Length && i < digits + valuePos; i++) {
-                                       if (!Char.IsDigit (s[i]))
-                                               break;
-
-                                       real_digits++;
-                               }
-
-                               digits = real_digits;
-                       }
-                       if (digits < min_digits) {
-                               num_parsed = -1;
-                               return 0;
-                       }
-
-                       if (s.Length - valuePos < digits) {
-                               num_parsed = -1;
-                               return 0;
-                       }
-
-                       for (i = valuePos; i < digits + valuePos; i++) {
-                               char c = s[i];
-                               if (!Char.IsDigit (c)) {
-                                       num_parsed = -1;
-                                       return 0;
-                               }
-
-                               number = number * 10 + (byte) (c - '0');
-                       }
-
-                       num_parsed = digits;
-                       return number;
-               }
-
-               private static int _ParseEnum (string s, int sPos, string[] values, string[] invValues, bool exact, out int num_parsed)
-               {
-                       // FIXME: I know this is somehow lame code. Probably
-                       // it should iterate all the enum value and return
-                       // the longest match. However right now I don't see
-                       // anything but "1" and "10" - "12" that might match
-                       // two or more values. (They are only abbrev month
-                       // names, so do reverse order search). See bug #80094.
-                       for (int i = values.Length - 1; i >= 0; i--) {
-                               if (!exact && invValues [i].Length > values[i].Length) {
-                                       if (invValues [i].Length > 0 && _ParseString (s, sPos, 0, invValues [i], out num_parsed))
-                                               return i;
-                                       if (values [i].Length > 0 && _ParseString (s, sPos, 0, values [i], out num_parsed))
-                                               return i;
-                               }
-                               else {
-                                       if (values [i].Length > 0 && _ParseString (s, sPos, 0, values [i], out num_parsed))
-                                               return i;
-                                       if (!exact && invValues [i].Length > 0 && _ParseString (s, sPos, 0, invValues [i], out num_parsed))
-                                       return i;
-                               }
-                       }
-
-                       num_parsed = -1;
-                       return -1;
-               }
-
-               private static bool _ParseString (string s, int sPos, int maxlength, string value, out int num_parsed)
-               {
-                       if (maxlength <= 0)
-                               maxlength = value.Length;
-
-                       if (sPos + maxlength <= s.Length && String.CompareOrdinalCaseInsensitive (s, sPos, value, 0, maxlength) == 0) {
-                               num_parsed = maxlength;
-                               return true;
-                       }
-
-                       num_parsed = -1;
-                       return false;
-               }
-
-               // Note that in case of Parse (exact == false) we check both for AM/PM
-               // and the culture spcific AM/PM strings.
-               private static bool _ParseAmPm(string s,
-                                              int valuePos,
-                                              int num,
-                                              DateTimeFormatInfo dfi,
-                                              bool exact,
-                                              out int num_parsed,
-                                              ref int ampm)
-               {
-                       num_parsed = -1;
-                       if (ampm != -1)
-                               return false;
-
-                       if (!IsLetter (s, valuePos)) {
-                               if (dfi.AMDesignator != "")
-                                       return false;
-                               if (exact)
-                                       ampm = 0;
-                               num_parsed = 0;
-                               return true;
-                       }
-                       DateTimeFormatInfo invInfo = DateTimeFormatInfo.InvariantInfo;
-                       if (!exact && _ParseString (s, valuePos, num, invInfo.PMDesignator, out num_parsed) ||
-                           dfi.PMDesignator != "" && _ParseString(s, valuePos, num, dfi.PMDesignator, out num_parsed))
-                               ampm = 1;
-                       else if (!exact && _ParseString (s, valuePos, num, invInfo.AMDesignator, out num_parsed) ||
-                                _ParseString (s, valuePos, num, dfi.AMDesignator, out num_parsed)) {
-                               if (exact || num_parsed != 0)
-                                       ampm = 0;
-                       }
-                       else
-                               return false;
-                       return true;
-               }
-
-               // Note that in case of Parse (exact == false) we check both for ':'
-               // and the culture spcific TimeSperator
-               private static bool _ParseTimeSeparator (string s, int sPos, DateTimeFormatInfo dfi, bool exact, out int num_parsed)
-               {
-                       return _ParseString (s, sPos, 0, dfi.TimeSeparator, out num_parsed) ||
-                              !exact && _ParseString (s, sPos, 0, ":", out num_parsed);
-               }
-
-               // Accept any character for DateSeparator, except TimeSeparator,
-               // a digit or a letter.
-               // Not documented, but seems to be MS behaviour here.  See bug 54047.
-               private static bool _ParseDateSeparator (string s, int sPos, DateTimeFormatInfo dfi, bool exact, out int num_parsed)
-               {
-                       num_parsed = -1;
-                       if (exact && s [sPos] != '/')
-                               return false;
-
-                       if (_ParseTimeSeparator (s, sPos, dfi, exact, out num_parsed) ||
-                               Char.IsDigit (s [sPos]) || Char.IsLetter (s [sPos]))
-                               return(false);
-
-                       num_parsed = 1;
-                       return true;
-               }
-
-               private static bool IsLetter (string s, int pos)
-               {
-                       return pos < s.Length && Char.IsLetter (s [pos]);
-               }
-
-               // To implement better DateTime.Parse we use two format strings one
-               // for Date and one for Time. This allows us to define two different
-               // arrays of formats for Time and Dates and to combine them more or less
-               // efficiently. When this mode is used flexibleTwoPartsParsing is true.
-               private static bool _DoParse (string s,
-                                             string firstPart,
-                                             string secondPart,
-                                             bool exact,
-                                             out DateTime result,
-                                             out DateTimeOffset dto,
-                                             DateTimeFormatInfo dfi,
-                                             DateTimeStyles style,
-                                             bool firstPartIsDate,
-                                             ref bool incompleteFormat,
-                                             ref bool longYear,
-                                             bool dateTimeOffset = false)
-               {
-                       bool useutc = false;
-                       bool use_invariant = false;
-                       bool sloppy_parsing = false;
-                       dto = new DateTimeOffset (0, TimeSpan.Zero);
-                       bool flexibleTwoPartsParsing = !exact && secondPart != null;
-                       incompleteFormat = false;
-                       int valuePos = 0;
-                       string format = firstPart;
-                       bool afterTFormat = false;
-                       DateTimeFormatInfo invInfo = DateTimeFormatInfo.InvariantInfo;
-                       if (format.Length == 1)
-                               format = DateTimeUtils.GetStandardPattern (format [0], dfi, out useutc, out use_invariant, dateTimeOffset);
-
-                       result = new DateTime (0);
-                       if (format == null)
-                               return false;
-
-                       if (s == null)
-                               return false;
-                               
-                       if ((style & DateTimeStyles.AllowLeadingWhite) != 0) {
-                               format = format.TrimStart (null);
-
-                               s = s.TrimStart (null); // it could be optimized, but will make little good.
-                       }
-
-                       if ((style & DateTimeStyles.AllowTrailingWhite) != 0) {
-                               format = format.TrimEnd (null);
-                               s = s.TrimEnd (null); // it could be optimized, but will make little good.
-                       }
-
-                       if (use_invariant)
-                               dfi = invInfo;
-
-                       if ((style & DateTimeStyles.AllowInnerWhite) != 0)
-                               sloppy_parsing = true;
-
-                       string chars = format;
-                       int len = format.Length, pos = 0, num = 0;
-                       if (len == 0)
-                               return false;
-
-                       int day = -1, dayofweek = -1, month = -1, year = -1;
-                       int hour = -1, minute = -1, second = -1;
-                       double fractionalSeconds = -1;
-                       int ampm = -1;
-                       int tzsign = -1, tzoffset = -1, tzoffmin = -1;
-                       bool isFirstPart = true;
-                       bool format_with_24_hours = false;
-
-                       for (; ; )
-                       {
-                               if (valuePos == s.Length)
-                                       break;
-
-                               int num_parsed = 0;
-                               if (flexibleTwoPartsParsing && pos + num == 0)
-                               {
-                                       bool isLetter = IsLetter(s, valuePos);
-                                       if (isLetter) {
-                                               if (s [valuePos] == 'Z')
-                                                       num_parsed = 1;
-                                               else
-                                                       _ParseString (s, valuePos, 0, "GMT", out num_parsed);
-                                               if (num_parsed > 0 && !IsLetter (s, valuePos + num_parsed)) {
-                                                       valuePos += num_parsed;
-                                                       useutc = true;
-                                                       continue;
-                                               }
-                                       }
-                                       if (!afterTFormat && _ParseAmPm (s, valuePos, 0, dfi, exact, out num_parsed, ref ampm)) {
-                                               if (IsLetter (s, valuePos + num_parsed))
-                                                       ampm = -1;
-                                               else if (num_parsed > 0) {
-                                                       valuePos += num_parsed;
-                                                       continue;
-                                               }
-                                       }
-
-                                       if (!afterTFormat && dayofweek == -1 && isLetter) {
-                                               dayofweek = _ParseEnum (s, valuePos, dfi.RawDayNames, invInfo.RawDayNames, exact, out num_parsed);
-                                               if (dayofweek == -1)
-                                                       dayofweek = _ParseEnum (s, valuePos, dfi.RawAbbreviatedDayNames, invInfo.RawAbbreviatedDayNames, exact, out num_parsed);
-                                               if (dayofweek != -1 && !IsLetter (s, valuePos + num_parsed)) {
-                                                       valuePos += num_parsed;
-                                                       continue;
-                                               }
-                                               else
-                                                       dayofweek = -1;
-                                       }
-
-                                       if (char.IsWhiteSpace (s [valuePos]) || s [valuePos] == ',') {
-                                               valuePos += 1;
-                                               continue;
-                                       }
-                                       num_parsed = 0;
-                               }
-
-                               if (pos + num >= len)
-                               {
-                                       if (flexibleTwoPartsParsing && num == 0) {
-                                               afterTFormat = isFirstPart && firstPart [firstPart.Length - 1] == 'T';
-                                               if (!isFirstPart && format == "")
-                                                       break;
-
-                                               pos = 0;
-                                               if (isFirstPart)
-                                                       format = secondPart;
-                                               else
-                                                       format = "";
-                                               chars = format;
-                                               len = chars.Length;
-                                               isFirstPart = false;
-                                               continue;
-                                       }
-                                       break;
-                               }
-
-                               bool leading_zeros = true;
-
-                               if (chars[pos] == '\'') {
-                                       num = 1;
-                                       while (pos+num < len) {
-                                               if (chars[pos+num] == '\'')
-                                                       break;
-
-                                               if (valuePos == s.Length || s [valuePos] != chars [pos + num])
-                                                       return false;
-
-                                               valuePos++;
-                                               num++;
-                                       }
-
-                                       pos += num + 1;
-                                       num = 0;
-                                       continue;
-                               } else if (chars[pos] == '"') {
-                                       num = 1;
-                                       while (pos+num < len) {
-                                               if (chars[pos+num] == '"')
-                                                       break;
-
-                                               if (valuePos == s.Length || s [valuePos] != chars[pos+num])
-                                                       return false;
-
-                                               valuePos++;
-                                               num++;
-                                       }
-
-                                       pos += num + 1;
-                                       num = 0;
-                                       continue;
-                               } else if (chars[pos] == '\\') {
-                                       pos += num + 1;
-                                       num = 0;
-                                       if (pos >= len)
-                                               return false;
-                                       if (s [valuePos] != chars [pos])
-                                               return false;
-
-                                       valuePos++;
-                                       pos++;
-                                       continue;
-                               } else if (chars[pos] == '%') {
-                                       pos++;
-                                       continue;
-                               } else if (char.IsWhiteSpace (s [valuePos]) ||
-                                       s [valuePos] == ',' && (!exact && chars [pos] == '/' || Char.IsWhiteSpace (chars [pos]))) {
-                                       valuePos++;
-                                       num = 0;
-                                       if (exact && (style & DateTimeStyles.AllowInnerWhite) == 0) {
-                                               if (!Char.IsWhiteSpace (chars[pos]))
-                                                       return false;
-                                               pos++;
-                                               continue;
-                                       }
-
-                                       int ws = valuePos;
-                                       while (ws < s.Length) {
-                                               if (Char.IsWhiteSpace (s [ws]) || s [ws] == ',')
-                                                       ws++;
-                                               else
-                                                       break;
-                                       }
-                                       valuePos = ws;
-                                       ws = pos;
-                                       while (ws < chars.Length) {
-                                               if (Char.IsWhiteSpace (chars [ws]) || chars [ws] == ',')
-                                                       ws++;
-                                               else
-                                                       break;
-                                       }
-                                       pos = ws;
-                                       // A whitespace may match a '/' in the pattern.
-                                       if (!exact && pos < chars.Length && chars[pos] == '/')
-                                               if (!_ParseDateSeparator (s, valuePos, dfi, exact, out num_parsed))
-                                                       pos++;
-                                       continue;
-                               }
-
-                               if ((pos+num+1 < len) && (chars[pos+num+1] == chars[pos+num])) {
-                                       num++;
-                                       continue;
-                               }
-
-                               switch (chars[pos])
-                               {
-                               case 'd':
-                                       if (num < 2 && day != -1 || num >= 2 && dayofweek != -1)
-                                               return false;
-                                       if (num == 0)
-                                               day = _ParseNumber (s, valuePos, 1, 2, false, sloppy_parsing, out num_parsed);
-                                       else if (num == 1)
-                                               day = _ParseNumber (s, valuePos, 1, 2, true, sloppy_parsing, out num_parsed);
-                                       else if (num == 2)
-                                               dayofweek = _ParseEnum (s, valuePos, dfi.RawAbbreviatedDayNames, invInfo.RawAbbreviatedDayNames, exact, out num_parsed);
-                                       else
-                                               dayofweek = _ParseEnum (s, valuePos, dfi.RawDayNames, invInfo.RawDayNames, exact, out num_parsed);
-                                       break;
-                               case 'M':
-                                       if (month != -1)
-                                               return false;
-
-                                       if (flexibleTwoPartsParsing) {
-                                               num_parsed = -1;
-                                               if (num == 0 || num == 3)
-                                                       month = _ParseNumber (s, valuePos, 1, 2, false, sloppy_parsing, out num_parsed);
-                                               if (num > 1 && num_parsed == -1)
-                                                       month = _ParseEnum (s, valuePos, dfi.RawMonthNames, invInfo.RawMonthNames, exact, out num_parsed) + 1;
-                                               if (num > 1 && num_parsed == -1)
-                                                       month = _ParseEnum (s, valuePos, dfi.RawAbbreviatedMonthNames, invInfo.RawAbbreviatedMonthNames, exact, out num_parsed) + 1;
-                                               break;
-                                       }
-
-                                       if (num == 0)
-                                               month = _ParseNumber (s, valuePos, 1, 2, false, sloppy_parsing, out num_parsed);
-                                       else if (num == 1)
-                                               month = _ParseNumber (s, valuePos, 1, 2, true, sloppy_parsing, out num_parsed);
-                                       else if (num == 2)
-                                               month = _ParseEnum (s, valuePos, dfi.RawAbbreviatedMonthNames, invInfo.RawAbbreviatedMonthNames, exact, out num_parsed) + 1;
-                                       else
-                                               month = _ParseEnum (s, valuePos, dfi.RawMonthNames, invInfo.RawMonthNames, exact, out num_parsed) + 1;
-                                       break;
-                               case 'y':
-                                       if (year != -1)
-                                               return false;
-
-                                       if (num == 0) {
-                                               year = _ParseNumber (s, valuePos, 1, 2, false, sloppy_parsing, out num_parsed);
-                                       } else if (num < 3) {
-                                               year = _ParseNumber (s, valuePos, 1, 2, true, sloppy_parsing, out num_parsed);
-                                       } else {
-                                               year = _ParseNumber (s, valuePos, exact ? num + 1 : 3, num + 1, false, sloppy_parsing, out num_parsed);
-                                               longYear = (year > 9999);
-                                       }
-
-                                       //FIXME: We should do use dfi.Calendat.TwoDigitYearMax
-                                       if (num_parsed <= 2)
-                                               year += (year < 30) ? 2000 : 1900;
-                                       break;
-                               case 'h':
-                                       if (hour != -1)
-                                               return false;
-                                       if (num == 0)
-                                               hour = _ParseNumber (s, valuePos, 1, 2, false, sloppy_parsing, out num_parsed);
-                                       else
-                                               hour = _ParseNumber (s, valuePos, 1, 2, true, sloppy_parsing, out num_parsed);
-
-                                       if (hour > 12)
-                                               return false;
-                                       if (hour == 12)
-                                               hour = 0;
-
-                                       break;
-                               case 'H':
-                                       if (hour != -1 || !flexibleTwoPartsParsing && ampm >= 0)
-                                               return false;
-                                       if (num == 0)
-                                               hour = _ParseNumber (s, valuePos, 1, 2, false, sloppy_parsing, out num_parsed);
-                                       else
-                                               hour = _ParseNumber (s, valuePos, 1, 2, true, sloppy_parsing, out num_parsed);
-
-                                       if (hour >= 24)
-                                               return false;
-
-                                       format_with_24_hours = true;
-                                       break;
-                               case 'm':
-                                       if (minute != -1)
-                                               return false;
-                                       if (num == 0)
-                                               minute = _ParseNumber (s, valuePos, 1, 2, false, sloppy_parsing, out num_parsed);
-                                       else
-                                               minute = _ParseNumber (s, valuePos, 1, 2, true, sloppy_parsing, out num_parsed);
-
-                                       if (minute >= 60)
-                                               return false;
-
-                                       break;
-                               case 's':
-                                       if (second != -1)
-                                               return false;
-                                       if (num == 0)
-                                               second = _ParseNumber (s, valuePos, 1, 2, false, sloppy_parsing, out num_parsed);
-                                       else
-                                               second = _ParseNumber (s, valuePos, 1, 2, true, sloppy_parsing, out num_parsed);
-
-                                       if (second >= 60)
-                                               return false;
-
-                                       break;
-                               case 'F':
-                                       leading_zeros = false;
-                                       goto case 'f';
-                               case 'f':
-                                       if (num > 6 || fractionalSeconds != -1)
-                                               return false;
-                                       double decimalNumber = (double) _ParseNumber (s, valuePos, 0, num+1, leading_zeros, sloppy_parsing, out num_parsed);
-                                       if (num_parsed == -1)
-                                               return false;
-                                       fractionalSeconds = decimalNumber / Math.Pow(10.0, num_parsed);
-
-                                       //Parse ISO8601 with an unlimited number of fractional digits.
-                                       if (!exact && num == 6 && hour != -1 && minute != -1 && second != -1) {
-                                               var total_num_parsed = num_parsed;
-                                               while (true) {
-                                                       valuePos += num_parsed;
-                                                       decimalNumber = (double) _ParseNumber (s, valuePos, 0, 1, leading_zeros, sloppy_parsing, out num_parsed);
-                                                       if (num_parsed < 1) {
-                                                               num_parsed = 0;
-                                                               break;
-                                                       }
-
-                                                       total_num_parsed += num_parsed;
-                                                       if (total_num_parsed > 15)
-                                                               continue; //not enough precision, ignore additional digits.
-
-                                                       fractionalSeconds += decimalNumber / Math.Pow (10.0, total_num_parsed);
-                                               }
-                                       }
-                                       break;
-                               case 't':
-                                       if (!_ParseAmPm (s, valuePos, num > 0 ? 0 : 1, dfi, exact, out num_parsed, ref ampm))
-                                                       return false;
-                                       break;
-                               case 'z':
-                                       if (tzsign != -1)
-                                               return false;
-
-                                       if (s [valuePos] == '+')
-                                               tzsign = 0;
-                                       else if (s [valuePos] == '-')
-                                               tzsign = 1;
-                                       else
-                                               return false;
-                                       valuePos++;
-
-                                       if (num == 0)
-                                               tzoffset = _ParseNumber (s, valuePos, 1, 2, false, sloppy_parsing, out num_parsed);
-                                       else if (num == 1)
-                                               tzoffset = _ParseNumber (s, valuePos, 1, 2, true, sloppy_parsing, out num_parsed);
-                                       else {
-                                               tzoffset = _ParseNumber (s, valuePos, 1, 2, true, /*sloppy_parsing*/true, out num_parsed);
-                                               valuePos += num_parsed;
-                                               if (num_parsed < 0)
-                                                       return false;
-
-                                               num_parsed = 0;
-                                               if (valuePos < s.Length && Char.IsDigit (s [valuePos]) ||
-                                                       _ParseTimeSeparator (s, valuePos, dfi, exact, out num_parsed)) {
-                                                       valuePos += num_parsed;
-                                                       tzoffmin = _ParseNumber (s, valuePos, 1, 2, true, sloppy_parsing, out num_parsed);
-                                                       if (num_parsed < 0)
-                                                               return false;
-                                               }
-                                               else if (!flexibleTwoPartsParsing)
-                                                       return false;
-                                               else
-                                                       num_parsed = 0;
-                                       }
-                                       break;
-                               case 'K':
-                                       if (s [valuePos] == 'Z') {
-                                               valuePos++;
-                                               useutc = true;                                          
-                                       }
-                                       else if (s [valuePos] == '+' || s [valuePos] == '-') {
-                                               if (tzsign != -1)
-                                                       return false;
-                                               if (s [valuePos] == '+')
-                                                       tzsign = 0;
-                                               else if (s [valuePos] == '-')
-                                                       tzsign = 1;
-                                               valuePos++;
-
-                                               // zzz
-                                               tzoffset = _ParseNumber (s, valuePos, 0, 2, true, sloppy_parsing, out num_parsed);
-                                               valuePos += num_parsed;
-                                               if (num_parsed < 0)
-                                                       return false;
-
-                                               if (Char.IsDigit (s [valuePos]))
-                                                       num_parsed = 0;
-                                               else if (!_ParseString (s, valuePos, 0, dfi.TimeSeparator, out num_parsed))
-                                                       return false;
-                                               valuePos += num_parsed;
-
-                                               tzoffmin = _ParseNumber (s, valuePos, 0, 2, true, sloppy_parsing, out num_parsed);
-                                               if (num_parsed < 0)
-                                                       return false;
-                                       }
-                                       break;
-
-                               // LAMESPEC: This should be part of UTCpattern
-                               // string and thus should not be considered here.
-                               //
-                               // Note that 'Z' is not defined as a pattern
-                               // character. Keep it for X509 certificate
-                               // verification. Also, "Z" != "'Z'" under MS.NET
-                               // ("'Z'" is just literal; handled above)
-                               case 'Z':
-                                       if (s [valuePos] != 'Z')
-                                               return false;
-                                       num = 0;
-                                       num_parsed = 1;
-                                       useutc = true;
-                                       break;
-                               case 'G':
-                                       if (s [valuePos] != 'G')
-                                               return false;
-
-                                       if ((pos + 2 < len) && (valuePos + 2 < s.Length) &&
-                                               (chars [pos + 1] == 'M') && (s[valuePos + 1] == 'M') &&
-                                               (chars [pos + 2] == 'T') && (s[valuePos + 2] == 'T'))
-                                       {
-                                               useutc = true;
-                                               num = 2;
-                                               num_parsed = 3;
-                                       }
-                                       else {
-                                               num = 0;
-                                               num_parsed = 1;
-                                       }
-                                       break;
-                               case ':':
-                                       if (!_ParseTimeSeparator (s, valuePos, dfi, exact, out num_parsed))
-                                               return false;
-                                       break;
-                               case '/':
-                                       if (!_ParseDateSeparator (s, valuePos, dfi, exact, out num_parsed))
-                                               return false;
-
-                                       num = 0;
-                                       break;
-                               case '.':
-                                       if (s[valuePos] == '.') {
-                                               num = 0;
-                                               num_parsed = 1;
-                                               break;
-                                       }
-
-                                       // '.FFF....' can be mapped to nothing
-                                       if (pos + 1 < len && chars[pos + 1] == 'F') {
-                                               ++pos;
-                                               while (pos + 1 < len && chars[pos + 1] == 'F') {
-                                                       ++pos;
-                                               }
-
-                                               num = 0;
-                                               num_parsed = 0;
-                                               break;
-                                       }
-
-                                       return false;
-
-                               default:
-                                       if (s [valuePos] != chars [pos])
-                                                       return false;
-
-                                       num = 0;
-                                       num_parsed = 1;
-                                       break;
-                               }
-
-                               if (num_parsed < 0)
-                                       return false;
-
-                               valuePos += num_parsed;
-
-                               if (!exact && !flexibleTwoPartsParsing) {
-                                       switch (chars [pos]) {
-                                       case 'm':
-                                       case 's':
-                                       case 'F':
-                                       case 'f':
-                                       case 'z':
-                                               if (s.Length > valuePos && s [valuePos] == 'Z' &&
-                                                       (pos + 1 == chars.Length || chars [pos + 1] != 'Z')) {
-                                                       useutc = true;
-                                                       valuePos++;
-                                               }
-                                               break;
-                                       }
-                               }
-
-                               pos = pos + num + 1;
-                               num = 0;
-                       }
-
-                       if (pos + 1 < len && chars [pos] == '.' && chars [pos + 1] == 'F') {
-                               pos++;
-                               while (pos < len && chars [pos] == 'F') // '.FFF....' can be mapped to nothing. See bug #444103
-                                       pos++;
-                       }
-                       while (pos < len && chars [pos] == 'K') // 'K' can be mapped to nothing
-                               pos++;
-
-                       if (pos < len)
-                               return false;
-
-                       if (s.Length > valuePos) // extraneous tail.
-                       {
-                               if (valuePos == 0)
-                                       return false;
-
-                               if (Char.IsDigit (s [valuePos]) && Char.IsDigit (s [valuePos - 1]))
-                                       return false;
-                               if (Char.IsLetter (s [valuePos]) && Char.IsLetter (s [valuePos - 1]))
-                                       return false;
-                               incompleteFormat = true;
-                               return false;
-                       }
-
-                       if (hour == -1)
-                               hour = 0;
-                       if (minute == -1)
-                               minute = 0;
-
-                       if (second == -1)
-                               second = 0;
-                       if (fractionalSeconds == -1)
-                               fractionalSeconds = 0;
-
-                       // If no date was given
-                       if ((day == -1) && (month == -1) && (year == -1)) {
-                               if ((style & DateTimeStyles.NoCurrentDateDefault) != 0) {
-                                       day = 1;
-                                       month = 1;
-                                       year = 1;
-                               } else {
-                                       day = DateTime.Today.Day;
-                                       month = DateTime.Today.Month;
-                                       year = DateTime.Today.Year;
-                               }
-                       }
-
-                       if (day == -1)
-                               day = 1;
-                       if (month == -1)
-                               month = 1;
-                       if (year == -1) {
-                               if ((style & DateTimeStyles.NoCurrentDateDefault) != 0)
-                                       year = 1;
-                               else
-                                       year = DateTime.Today.Year;
-                       }
-                       
-                       if (ampm == 0) { // AM designator
-                               if (hour >= 12 && format_with_24_hours && exact)
-                                       return false;
-                               
-                               if (hour == 12)
-                                       hour = 0;
-                       } else if (ampm == 1) { // PM designator
-                               if (hour < 12) {
-                                       if (format_with_24_hours && exact)
-                                               return false;
-                                       
-                                       hour += 12;
-                               }
-                       }
-                       
-                       try {
-                               result = dfi.Calendar.ToDateTime (year, month, day, hour, minute, second, 0);
-                       } catch {
-                               return false;
-                       }
-
-                       result = result.AddSeconds(fractionalSeconds);
-
-                       if (dayofweek != -1 && dayofweek != (int) result.DayOfWeek)
-                               return false;
-
-                       if (tzsign == -1) {
-                               if (result != DateTime.MinValue) {
-                                       try {
-                                               if (((style & DateTimeStyles.AssumeUniversal) != 0) || useutc) {
-                                                       dto = new DateTimeOffset (result, TimeSpan.Zero);
-                                               } else if ((style & DateTimeStyles.AssumeLocal) != 0) {
-                                                       var offset = use_invariant ?
-                                                               TimeSpan.Zero :
-                                                               TimeZone.CurrentTimeZone.GetUtcOffset (DateTime.Now);
-                                                       dto = new DateTimeOffset (result, offset);
-                                               } else {
-                                                       dto = new DateTimeOffset (result);
-                                               }
-                                       } catch { } // We handle this error in DateTimeOffset.Parse
-                               }
-                       } else {
-                               if (tzoffmin == -1)
-                                       tzoffmin = 0;
-                               if (tzoffset == -1)
-                                       tzoffset = 0;
-                               if (tzsign == 1) {
-                                       tzoffset = -tzoffset;
-                                       tzoffmin = -tzoffmin;
-                               }
-                               try {
-                                       dto = new DateTimeOffset (result, new TimeSpan (tzoffset, tzoffmin, 0));
-                               } catch {} // We handle this error in DateTimeOffset.Parse
-                       }
-                       bool adjustToUniversal = (style & DateTimeStyles.AdjustToUniversal) != 0;
-                       
-                       if (tzsign != -1) {
-                               long newticks = (result - dto.Offset).Ticks;
-                               if (newticks < 0)
-                                       newticks += TimeSpan.TicksPerDay;
-                               result = new DateTime (newticks, DateTimeKind.Utc);
-                               if ((style & DateTimeStyles.RoundtripKind) != 0)
-                                       result = result.ToLocalTime ();
-                       } else if (useutc || ((style & DateTimeStyles.AssumeUniversal) != 0))
-                               result.encoded |= ((long) DateTimeKind.Utc << KindShift);
-                       else if ((style & DateTimeStyles.AssumeLocal) != 0)
-                               result.encoded |= ((long) DateTimeKind.Local << KindShift);
-
-                       bool adjustToLocal = !adjustToUniversal && (style & DateTimeStyles.RoundtripKind) == 0;
-                       if ((DateTimeKind)(((ulong) result.encoded >> KindShift)) != DateTimeKind.Unspecified) {
-                               if (adjustToUniversal)
-                                       result = result.ToUniversalTime ();
-                               else if (adjustToLocal)
-                                       result = result.ToLocalTime ();
-                       }
-                       return true;
-               }
-               
-
-               public static DateTime ParseExact (string s, string format,
-                                                  IFormatProvider provider, DateTimeStyles style)
-               {
-                       if (format == null)
-                               throw new ArgumentNullException ("format");
-
-                       string [] formats = new string [1];
-                       formats[0] = format;
-
-                       return ParseExact (s, formats, provider, style);
-               }
-
-               public static DateTime ParseExact (string s, string[] formats,
-                                                  IFormatProvider provider,
-                                                  DateTimeStyles style)
-               {
-                       DateTimeFormatInfo dfi = DateTimeFormatInfo.GetInstance (provider);
-                       CheckStyle (style);
-                       if (s == null)
-                               throw new ArgumentNullException ("s");
-                       if (formats == null)
-                               throw new ArgumentNullException ("formats");
-                       if (formats.Length == 0)
-                               throw new FormatException ("Format specifier was invalid.");
-
-                       DateTime result;
-                       DateTimeOffset dto;
-                       bool longYear = false;
-                       Exception e = null;
-                       if (!CoreParseExact (s, formats, dfi, style, out result, out dto, true, ref longYear, true, ref e))
-                               throw e;
-                       return result;
-               }               
-
-               private static void CheckStyle (DateTimeStyles style)
-               {
-                       if ( (style & DateTimeStyles.RoundtripKind) != 0)
-                       {
-                               if ((style & DateTimeStyles.AdjustToUniversal) != 0 || (style & DateTimeStyles.AssumeLocal) != 0 ||
-                                        (style & DateTimeStyles.AssumeUniversal) != 0)
-                                       throw new ArgumentException ("The DateTimeStyles value RoundtripKind cannot be used with the values AssumeLocal, AssumeUniversal or AdjustToUniversal.", "style");
-                       }
-                       if ((style & DateTimeStyles.AssumeUniversal) != 0 && (style & DateTimeStyles.AssumeLocal) != 0)                 
-                               throw new ArgumentException ("The DateTimeStyles values AssumeLocal and AssumeUniversal cannot be used together.", "style");
-               }
-
-               public static bool TryParse (string s, out DateTime result)
-               {
-                       if (s != null){
-                               try {
-                                       Exception exception = null;
-                                       DateTimeOffset dto;
-
-                                       return CoreParse (s, null, DateTimeStyles.AllowWhiteSpaces, out result, out dto, false, ref exception);
-                               } catch { }
-                       }
-                       result = MinValue;
-                       return false;
-               }
-               
-               public static bool TryParse (string s, IFormatProvider provider, DateTimeStyles styles, out DateTime result)
-               {
-                       if (s != null){
-                               try {
-                                       Exception exception = null;
-                                       DateTimeOffset dto;
-                                       
-                                       return CoreParse (s, provider, styles, out result, out dto, false, ref exception);
-                               } catch {}
-                       } 
-                       result = MinValue;
-                       return false;
-               }
-               
-               public static bool TryParseExact (string s, string format,
-                                                 IFormatProvider provider,
-                                                 DateTimeStyles style,
-                                                 out DateTime result)
-               {
-                       string[] formats;
-                       formats = new string [1];
-                       formats[0] = format;
-
-                       return TryParseExact (s, formats, provider, style, out result);
-               }
-
-               public static bool TryParseExact (string s, string[] formats,
-                                                 IFormatProvider provider,
-                                                 DateTimeStyles style,
-                                                 out DateTime result)
-               {
-                       try {
-                               DateTimeFormatInfo dfi = DateTimeFormatInfo.GetInstance (provider);
-                               DateTimeOffset dto;
-
-                               bool longYear = false;
-                               Exception e = null;
-                               return CoreParseExact (s, formats, dfi, style, out result, out dto, true, ref longYear, false, ref e);
-                       } catch {
-                               result = MinValue;
-                               return false;
-                       }
-               }
-
-               internal static bool CoreParseExact (string s, string [] formats,
-                                               DateTimeFormatInfo dfi, DateTimeStyles style,
-                                               out DateTime ret, out DateTimeOffset dto,
-                                               bool exact, ref bool longYear,
-                                               bool setExceptionOnError, ref Exception exception,
-                                               bool dateTimeOffset = false)
-               {
-                       dto = new DateTimeOffset (0, TimeSpan.Zero);
-                       int i;
-                       bool incompleteFormat = false;
-                       for (i = 0; i < formats.Length; i++)
-                       {
-                               DateTime result;
-                               string format = formats[i];
-                               if (format == null || format == String.Empty)
-                                       break;
-
-                               if (_DoParse (s, formats[i], null, exact, out result, out dto, dfi, style, false, ref incompleteFormat, ref longYear, dateTimeOffset)) {
-                                       ret = result;
-                                       return true;
-                               }
-                       }
-
-                       if (setExceptionOnError)
-                               exception = new FormatException ("Invalid format string");
-                       ret = DateTime.MinValue;
-                       return false;
-               }
-               
-               public TimeSpan Subtract (DateTime value)
-               {
-                       return new TimeSpan (Ticks) - new TimeSpan (value.Ticks);
-               }
-
-               public DateTime Subtract(TimeSpan value)
-               {
-                       long newticks;
-
-                       newticks = Ticks - value.Ticks;
-                       if (newticks < 0 || newticks > MAX_VALUE_TICKS)
-                               throw new ArgumentOutOfRangeException ();
-                       DateTime ret = new DateTime (newticks);
-                       ret.encoded |= (encoded & KindMask);
-                       return ret;
-               }
-
-               public long ToFileTime()
-               {
-                       DateTime universalTime = ToUniversalTime();
-                       
-                       if (universalTime.Ticks < w32file_epoch) {
-                               throw new ArgumentOutOfRangeException("file time is not valid");
-                       }
-                       
-                       return(universalTime.Ticks - w32file_epoch);
-               }
-
-               public long ToFileTimeUtc()
-               {
-                       if (Kind == DateTimeKind.Local)
-                               return ToFileTime ();
-
-                       if (Ticks < w32file_epoch) {
-                               throw new ArgumentOutOfRangeException("file time is not valid");
-                       }
-                       
-                       return (Ticks - w32file_epoch);
-               }
-
-               public string ToLongDateString()
-               {
-                       return ToString ("D");
-               }
-
-               public string ToLongTimeString()
-               {
-                       return ToString ("T");
-               }
-
-               public double ToOADate ()
-               {
-                       long t = this.Ticks;
-                       // uninitialized DateTime case
-                       if (t == 0)
-                               return 0;
-                       // we can't reach minimum value
-                       if (t < 31242239136000000)
-                               return OAMinValue + 0.001;
-
-                       TimeSpan ts = new TimeSpan (this.Ticks - ticks18991230);
-                       double result = ts.TotalDays;
-                       // t < 0 (where 599264352000000000 == 0.0d for OA)
-                       if (t < 599264352000000000) {
-                               // negative days (int) but decimals are positive
-                               double d = Math.Ceiling (result);
-                               result = d - 2 - (result - d);
-                       }
-                       else {
-                               // we can't reach maximum value
-                               if (result >= OAMaxValue)
-                                       result = OAMaxValue - 0.00000001d;
-                       }
-                       return result;
-               }
-
-               public string ToShortDateString()
-               {
-                       return ToString ("d");
-               }
-
-               public string ToShortTimeString()
-               {
-                       return ToString ("t");
-               }
-               
-               public override string ToString ()
-               {
-                       return ToString ("G", null);
-               }
-
-               public string ToString (IFormatProvider provider)
-               {
-                       return ToString (null, provider);
-               }
-
-               public string ToString (string format)
-               {
-                       return ToString (format, null);
-               }
-       
-               public string ToString (string format, IFormatProvider provider)
-               {
-                       DateTimeFormatInfo dfi = DateTimeFormatInfo.GetInstance (provider);
-
-                       if (format == null || format == String.Empty)
-                               format = "G";
-
-                       if (format.Length == 1) {
-                               char fchar = format [0];
-                               bool use_invariant, useutc;
-                               format = DateTimeUtils.GetStandardPattern (fchar, dfi, out useutc, out use_invariant);
-                               if (fchar == 'U')
-                                       return DateTimeUtils.ToString (ToUniversalTime (), format, dfi);
-//                                     return ToUniversalTime()._ToString (format, dfi);
-
-                               if (format == null)
-                                       throw new FormatException ("format is not one of the format specifier characters defined for DateTimeFormatInfo");
-
-                               if (use_invariant)
-                                       dfi = DateTimeFormatInfo.InvariantInfo;
-                       }
-
-                       // Don't convert UTC value. It just adds 'Z' for 
-                       // 'u' format, for the same ticks.
-                       return DateTimeUtils.ToString (this, format, dfi);
-               }
-
-               public DateTime ToLocalTime ()
-               {
-                       return TimeZone.CurrentTimeZone.ToLocalTime (this);
-               }
-
-               public DateTime ToUniversalTime()
-               {
-                       return TimeZone.CurrentTimeZone.ToUniversalTime (this);
-               }
-
-               /*  OPERATORS */
-
-               public static DateTime operator +(DateTime d, TimeSpan t)
-               {
-                       try {
-                               long res = checked ((d.encoded & TicksMask) + t.Ticks);
-                               if (res < 0 || res > MAX_VALUE_TICKS){
-                                       throw new ArgumentOutOfRangeException ();
-                               }
-                               
-                               return new DateTime (res, d.Kind);
-                       } catch (OverflowException){
-                               throw new ArgumentOutOfRangeException ();
-                       }
-               }
-
-               public static bool operator ==(DateTime d1, DateTime d2)
-               {
-                       return ((d1.encoded & TicksMask) == (d2.encoded & TicksMask));
-               }
-
-               public static bool operator >(DateTime t1,DateTime t2)
-               {
-                       return ((t1.encoded & TicksMask) > (t2.encoded & TicksMask));
-               }
-
-               public static bool operator >=(DateTime t1,DateTime t2)
-               {
-                       return ((t1.encoded & TicksMask) >= (t2.encoded & TicksMask));
-               }
-
-               public static bool operator !=(DateTime d1, DateTime d2)
-               {
-                       return ((d1.encoded & TicksMask) != (d2.encoded & TicksMask));
-               }
-
-               public static bool operator <(DateTime t1, DateTime t2)
-               {
-                       return ((t1.encoded & TicksMask) < (t2.encoded & TicksMask));
-               }
-
-               public static bool operator <=(DateTime t1, DateTime t2)
-               {
-                       return ((t1.encoded & TicksMask) <= (t2.encoded & TicksMask));
-               }
-
-               public static TimeSpan operator -(DateTime d1, DateTime d2)
-               {
-                       return new TimeSpan ((d1.encoded & TicksMask) - (d2.encoded & TicksMask));
-               }
-
-               public static DateTime operator -(DateTime d, TimeSpan t)
-               {
-                       try {
-                               long res = checked ((d.encoded & TicksMask) - t.Ticks);
-                               if (res < 0 || res > MAX_VALUE_TICKS)
-                                       throw new ArgumentOutOfRangeException ();
-                               return new DateTime (res, d.Kind);
-                       } catch (OverflowException){
-                               throw new ArgumentOutOfRangeException ();
-                       }
-               }
-
-               bool IConvertible.ToBoolean (IFormatProvider provider)
-               {
-                       throw new InvalidCastException();
-               }
-               
-               byte IConvertible.ToByte (IFormatProvider provider)
-               {
-                       throw new InvalidCastException();
-
-               }
-
-               char IConvertible.ToChar (IFormatProvider provider)
-               {
-                       throw new InvalidCastException();
-               }
-
-               System.DateTime IConvertible.ToDateTime (IFormatProvider provider)
-               {
-                       return this;
-               } 
-               
-               decimal IConvertible.ToDecimal (IFormatProvider provider)
-               {
-                        throw new InvalidCastException();
-               }
-
-               double IConvertible.ToDouble (IFormatProvider provider)
-               {
-                       throw new InvalidCastException();
-               }
-
-               Int16 IConvertible.ToInt16 (IFormatProvider provider)
-               {
-                       throw new InvalidCastException();
-               }
-
-               Int32 IConvertible.ToInt32 (IFormatProvider provider)
-               {
-                       throw new InvalidCastException();
-               }
-
-               Int64 IConvertible.ToInt64 (IFormatProvider provider)
-               {
-                       throw new InvalidCastException();
-               }
-
-               SByte IConvertible.ToSByte (IFormatProvider provider)
-               {
-                       throw new InvalidCastException();
-               }
-
-               Single IConvertible.ToSingle (IFormatProvider provider)
-               {
-                       throw new InvalidCastException();
-               }
-
-               object IConvertible.ToType (Type targetType, IFormatProvider provider)
-               {
-                       if (targetType == null)
-                               throw new ArgumentNullException ("targetType");
-
-                       if (targetType == typeof (DateTime))
-                               return this;
-                       else if (targetType == typeof (String))
-                               return this.ToString (provider);
-                       else if (targetType == typeof (Object))
-                               return this;
-                       else
-                               throw new InvalidCastException();
-               }
-
-               UInt16 IConvertible.ToUInt16 (IFormatProvider provider)
-               {
-                       throw new InvalidCastException();
-               }
-
-               UInt32 IConvertible.ToUInt32 (IFormatProvider provider)
-               {
-                       throw new InvalidCastException();
-               }
-
-               UInt64 IConvertible.ToUInt64 (IFormatProvider provider)
-               {
-                       throw new InvalidCastException();
-               }
-
-               void ISerializable.GetObjectData (SerializationInfo info, StreamingContext context)
-               {
-                       long t = Ticks;
-                       info.AddValue ("ticks", t);
-
-                       // This is the new .NET format, encodes the kind on the top bits
-                       info.AddValue ("dateData", (UInt64)encoded);
-               }
-
-#region Extracted from Microsoft reference sources
-
-        // Number of 100ns ticks per time unit
-        private const long TicksPerMillisecond = 10000;
-        private const long TicksPerSecond = TicksPerMillisecond * 1000;
-        private const long TicksPerMinute = TicksPerSecond * 60;
-        private const long TicksPerHour = TicksPerMinute * 60;
-        private const long TicksPerDay = TicksPerHour * 24;
-    
-        // Number of milliseconds per time unit
-        private const int MillisPerSecond = 1000;
-        private const int MillisPerMinute = MillisPerSecond * 60;
-        private const int MillisPerHour = MillisPerMinute * 60;
-        private const int MillisPerDay = MillisPerHour * 24;
-    
-        // Number of days in a non-leap year
-        private const int DaysPerYear = 365;
-        // Number of days in 4 years
-        private const int DaysPer4Years = DaysPerYear * 4 + 1;       // 1461
-        // Number of days in 100 years
-        private const int DaysPer100Years = DaysPer4Years * 25 - 1;  // 36524
-        // Number of days in 400 years
-        private const int DaysPer400Years = DaysPer100Years * 4 + 1; // 146097
-    
-        // Number of days from 1/1/0001 to 12/31/1600
-        private const int DaysTo1601 = DaysPer400Years * 4;          // 584388
-        // Number of days from 1/1/0001 to 12/30/1899
-        private const int DaysTo1899 = DaysPer400Years * 4 + DaysPer100Years * 3 - 367;
-        // Number of days from 1/1/0001 to 12/31/9999
-        private const int DaysTo10000 = DaysPer400Years * 25 - 366;  // 3652059
-    
-        internal const long MinTicks = 0;
-        internal const long MaxTicks = DaysTo10000 * TicksPerDay - 1;
-        private const long MaxMillis = (long)DaysTo10000 * MillisPerDay;
-    
-        private const long FileTimeOffset = DaysTo1601 * TicksPerDay;
-        private const long DoubleDateOffset = DaysTo1899 * TicksPerDay;
-        // The minimum OA date is 0100/01/01 (Note it's year 100).
-        // The maximum OA date is 9999/12/31
-        private const long OADateMinAsTicks = (DaysPer100Years - DaysPerYear) * TicksPerDay;
-        // All OA dates must be greater than (not >=) OADateMinAsDouble
-        private const double OADateMinAsDouble = -657435.0;
-        // All OA dates must be less than (not <=) OADateMaxAsDouble
-        private const double OADateMaxAsDouble = 2958466.0;
-    
-        private const int DatePartYear = 0;
-        private const int DatePartDayOfYear = 1;
-        private const int DatePartMonth = 2;
-        private const int DatePartDay = 3;
-    
-        private static readonly int[] DaysToMonth365 = {
-            0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365};
-        private static readonly int[] DaysToMonth366 = {
-            0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366};
-
-        // Returns the tick count corresponding to the given year, month, and day.
-        // Will check the if the parameters are valid.
-        private static long DateToTicks(int year, int month, int day) {     
-            if (year >= 1 && year <= 9999 && month >= 1 && month <= 12) {
-                int[] days = IsLeapYear(year)? DaysToMonth366: DaysToMonth365;
-                if (day >= 1 && day <= days[month] - days[month - 1]) {
-                    int y = year - 1;
-                    int n = y * 365 + y / 4 - y / 100 + y / 400 + days[month - 1] + day - 1;
-                    return n * TicksPerDay;
-                }
-            }
-            throw new ArgumentOutOfRangeException(null, Environment.GetResourceString("ArgumentOutOfRange_BadYearMonthDay"));
-        }
-
-        // Return the tick count corresponding to the given hour, minute, second.
-        // Will check the if the parameters are valid.
-        private static long TimeToTicks(int hour, int minute, int second)
-        {
-            //TimeSpan.TimeToTicks is a family access function which does no error checking, so
-            //we need to put some error checking out here.
-            if (hour >= 0 && hour < 24 && minute >= 0 && minute < 60 && second >=0 && second < 60)
-            {
-                return (TimeSpan.TimeToTicks(hour, minute, second));
-            }
-            throw new ArgumentOutOfRangeException(null, Environment.GetResourceString("ArgumentOutOfRange_BadHourMinuteSecond"));
-        }        
-
-        // Tries to construct a DateTime from a given year, month, day, hour,
-        // minute, second and millisecond.
-        //
-        internal static Boolean TryCreate(int year, int month, int day, int hour, int minute, int second, int millisecond, out DateTime result) {
-            result = DateTime.MinValue;
-            if (year < 1 || year > 9999 || month < 1 || month > 12) {
-                return false;
-            }
-            int[] days = IsLeapYear(year) ? DaysToMonth366 : DaysToMonth365;
-            if (day < 1 || day > days[month] - days[month - 1]) {
-                return false;
-            }                
-            if (hour < 0 || hour >= 24 || minute < 0 || minute >= 60 || second < 0 || second >= 60) {
-                return false;
-            }                
-            if (millisecond < 0 || millisecond >= MillisPerSecond) {
-                return false;
-            }
-            long ticks = DateToTicks(year, month, day) + TimeToTicks(hour, minute, second);
-            
-            ticks += millisecond * TicksPerMillisecond;
-            if (ticks < MinTicks || ticks > MaxTicks) {
-                return false;
-            }
-            result = new DateTime(ticks, DateTimeKind.Unspecified);
-            return true;
-        }              
-#endregion
-
-#if MONOTOUCH
-               static DateTime () {
-                       if (MonoTouchAOTHelper.FalseFlag) {
-                               var comparer = new System.Collections.Generic.GenericComparer <DateTime> ();
-                               var eqcomparer = new System.Collections.Generic.GenericEqualityComparer <DateTime> ();
-                       }
-               }
-#endif
-       }
-}
diff --git a/mcs/class/corlib/System/DateTimeKind.cs b/mcs/class/corlib/System/DateTimeKind.cs
deleted file mode 100644 (file)
index 74138de..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-//
-// System.DateTimeKind enumeration
-//
-// Author:
-//     Sebastien Pouliot  <sebastien@ximian.com>
-//
-// Copyright (C) 2005 Novell, Inc (http://www.novell.com)
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-
-using System.Runtime.InteropServices;
-
-namespace System {
-
-       [ComVisible (true)]
-       [Serializable]
-       public enum DateTimeKind {
-
-               Unspecified,
-               Utc,
-               Local
-       }
-}
diff --git a/mcs/class/corlib/System/DateTimeOffset.cs b/mcs/class/corlib/System/DateTimeOffset.cs
deleted file mode 100644 (file)
index 1267f92..0000000
+++ /dev/null
@@ -1,558 +0,0 @@
-/*
- * System.DateTimeOffset.cs
- *
- * Author(s)
- *     Stephane Delcroix <stephane@delcroix.org>
- *     Marek Safar (marek.safar@gmail.com)
- *
- *  Copyright (C) 2007 Novell, Inc (http://www.novell.com) 
- *  Copyright 2012 Xamarin, Inc (http://www.xamarin.com) 
- *
- * Permission is hereby granted, free of charge, to any person obtaining
- * a copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sublicense, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- * 
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- * 
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
- * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-
-using System.Globalization;
-using System.Runtime.InteropServices;
-using System.Runtime.Serialization;
-using System.Text;
-
-namespace System
-{
-       [Serializable]
-       [StructLayout (LayoutKind.Auto)]
-       public struct DateTimeOffset : IComparable, IFormattable, ISerializable, IDeserializationCallback, IComparable<DateTimeOffset>, IEquatable<DateTimeOffset>
-       {
-#if MONOTOUCH
-               static DateTimeOffset () {
-                       if (MonoTouchAOTHelper.FalseFlag) {
-                               var comparer = new System.Collections.Generic.GenericComparer <DateTimeOffset> ();
-                               var eqcomparer = new System.Collections.Generic.GenericEqualityComparer <DateTimeOffset> ();
-                       }
-               }
-#endif
-               public static readonly DateTimeOffset MaxValue = new DateTimeOffset (DateTime.MaxValue, TimeSpan.Zero);
-               public static readonly DateTimeOffset MinValue = new DateTimeOffset (DateTime.MinValue, TimeSpan.Zero);
-               
-               DateTime dt;
-               TimeSpan utc_offset;
-       
-               public DateTimeOffset (DateTime dateTime)
-               {
-                       dt = dateTime;
-
-                       if (dateTime.Kind == DateTimeKind.Utc)
-                               utc_offset = TimeSpan.Zero;
-                       else 
-                               utc_offset = TimeZone.CurrentTimeZone.GetUtcOffset (dateTime);
-                               
-                       if (UtcDateTime < DateTime.MinValue || UtcDateTime > DateTime.MaxValue)
-                               throw new ArgumentOutOfRangeException ("The UTC date and time that results from applying the offset is earlier than MinValue or later than MaxValue.");
-
-               }
-               
-               public DateTimeOffset (DateTime dateTime, TimeSpan offset)
-               {
-                       if (dateTime.Kind == DateTimeKind.Utc && offset != TimeSpan.Zero)
-                               throw new ArgumentException ("dateTime.Kind equals Utc and offset does not equal zero.");
-
-                       if (dateTime.Kind == DateTimeKind.Local && offset != TimeZone.CurrentTimeZone.GetUtcOffset (dateTime))
-                               throw new ArgumentException ("dateTime.Kind equals Local and offset does not equal the offset of the system's local time zone.");
-
-                       if (offset.Ticks % TimeSpan.TicksPerMinute != 0)
-                               throw new ArgumentException ("offset is not specified in whole minutes.");
-
-                       if (offset < new TimeSpan (-14, 0 ,0) || offset > new TimeSpan (14, 0, 0))
-                               throw new ArgumentOutOfRangeException ("offset is less than -14 hours or greater than 14 hours.");
-
-                       dt = dateTime;
-                       utc_offset = offset;
-
-                       if (UtcDateTime < DateTime.MinValue || UtcDateTime > DateTime.MaxValue)
-                               throw new ArgumentOutOfRangeException ("The UtcDateTime property is earlier than MinValue or later than MaxValue.");
-               }
-
-               public DateTimeOffset (long ticks, TimeSpan offset) : this (new DateTime (ticks), offset)
-               {
-               }
-
-               public DateTimeOffset (int year, int month, int day, int hour, int minute, int second, TimeSpan offset) : 
-                       this (new DateTime (year, month, day, hour, minute, second), offset)
-               {
-               }
-
-               public DateTimeOffset (int year, int month, int day, int hour, int minute, int second, int millisecond, TimeSpan offset) :
-                       this (new DateTime (year, month, day, hour, minute, second, millisecond), offset)
-               {
-               }
-
-               public DateTimeOffset (int year, int month, int day, int hour, int minute, int second, int millisecond, Calendar calendar, TimeSpan offset) :
-                       this (new DateTime (year, month, day, hour, minute, second, millisecond, calendar), offset)
-               {
-               }
-
-               public DateTimeOffset Add (TimeSpan timeSpan)
-               {
-                       return new DateTimeOffset (dt.Add (timeSpan).Ticks, utc_offset);
-               }
-       
-               public DateTimeOffset AddDays (double days)
-               {
-                       return new DateTimeOffset (dt.AddDays (days).Ticks, utc_offset);        
-               }
-               
-               public DateTimeOffset AddHours (double hours)
-               {
-                       return new DateTimeOffset (dt.AddHours (hours).Ticks, utc_offset);
-               }
-
-               public static DateTimeOffset operator + (DateTimeOffset dateTimeOffset, TimeSpan timeSpan)
-               {
-                       return dateTimeOffset.Add (timeSpan);
-               }
-
-               public DateTimeOffset AddMilliseconds (double milliseconds)
-               {
-                       return new DateTimeOffset (dt.AddMilliseconds (milliseconds).Ticks, utc_offset);
-               }
-
-               public DateTimeOffset AddMinutes (double minutes)
-               {
-                       return new DateTimeOffset (dt.AddMinutes (minutes).Ticks, utc_offset);  
-               }
-
-               public DateTimeOffset AddMonths (int months)
-               {
-                       return new DateTimeOffset (dt.AddMonths (months).Ticks, utc_offset);
-               }
-
-               public DateTimeOffset AddSeconds (double seconds)
-               {
-                       return new DateTimeOffset (dt.AddSeconds (seconds).Ticks, utc_offset);
-               }
-
-               public DateTimeOffset AddTicks (long ticks)
-               {
-                       return new DateTimeOffset (dt.AddTicks (ticks).Ticks, utc_offset);      
-               }
-
-               public DateTimeOffset AddYears (int years)
-               {
-                       return new DateTimeOffset (dt.AddYears (years).Ticks, utc_offset);
-               }
-
-               public static int Compare (DateTimeOffset first, DateTimeOffset second)
-               {
-                       return first.CompareTo (second);        
-               }
-
-               public int CompareTo (DateTimeOffset other)
-               {
-                       return UtcDateTime.CompareTo (other.UtcDateTime);
-               }
-
-               int IComparable.CompareTo (object obj)
-               {
-                       return CompareTo ((DateTimeOffset) obj);
-               }
-
-               public static bool operator == (DateTimeOffset left, DateTimeOffset right)
-               {
-                       return left.Equals (right);     
-               }
-
-               public bool Equals (DateTimeOffset other)
-               {
-                       return UtcDateTime == other.UtcDateTime;
-               }
-
-               public override bool Equals (object obj)
-               {
-                       if (obj is DateTimeOffset)
-                               return UtcDateTime == ((DateTimeOffset) obj).UtcDateTime;
-                       return false;
-               }
-
-               public static bool Equals (DateTimeOffset first, DateTimeOffset second)
-               {
-                       return first.Equals (second);   
-               }
-
-               public bool EqualsExact (DateTimeOffset other)
-               {
-                       return dt == other.dt && utc_offset == other.utc_offset;        
-               }
-
-               public static DateTimeOffset FromFileTime (long fileTime)
-               {
-                       if (fileTime < 0 || fileTime > MaxValue.Ticks)
-                               throw new ArgumentOutOfRangeException ("fileTime is less than zero or greater than DateTimeOffset.MaxValue.Ticks.");
-                       
-                       return new DateTimeOffset (DateTime.FromFileTime (fileTime), TimeZone.CurrentTimeZone.GetUtcOffset (DateTime.FromFileTime (fileTime)));
-
-               }
-
-               public override int GetHashCode ()
-               {
-                       return dt.GetHashCode () ^ utc_offset.GetHashCode ();
-               }
-
-               [System.Security.Permissions.SecurityPermission (System.Security.Permissions.SecurityAction.LinkDemand, SerializationFormatter = true)]
-               void ISerializable.GetObjectData (SerializationInfo info, StreamingContext context)
-               {
-                       if (info == null)
-                               throw new ArgumentNullException ("info");
-                       // An example SOAP serialization on MSFT is the following, so field 
-                       // names "DateTime" and "OffsetMinutes":
-                       //    <SOAP-ENV:Envelope ...>
-                       //    <SOAP-ENV:Body>
-                       //    <a1:DateTimeOffset id="ref-1" xmlns:a1="http://schemas.microsoft.com/clr/ns/System">
-                       //    <DateTime xsi:type="xsd:dateTime">2007-01-02T12:30:50.0000000+00:00</DateTime>
-                       //    <OffsetMinutes>0</OffsetMinutes>
-                       //    </a1:DateTimeOffset>
-                       //    </SOAP-ENV:Body>
-                       //    </SOAP-ENV:Envelope>
-                       DateTime dt0 = new DateTime (dt.Ticks).Subtract (utc_offset);
-                       info.AddValue ("DateTime", dt0);
-                       // MSFT BinaryFormatter output contains primitive code 6, i.e. Int16.
-                       info.AddValue ("OffsetMinutes", (Int16)utc_offset.TotalMinutes);
-               }
-
-               [System.Security.Permissions.SecurityPermission (System.Security.Permissions.SecurityAction.LinkDemand, SerializationFormatter = true)]
-               private DateTimeOffset(SerializationInfo info, StreamingContext context)
-               {
-                       DateTime dt0 = (DateTime)info.GetValue ("DateTime", typeof(DateTime));
-                       Int16 totalMinutes = info.GetInt16 ("OffsetMinutes");
-                       utc_offset = TimeSpan.FromMinutes(totalMinutes);
-                       dt = dt0.Add(utc_offset);
-               }
-
-               public static bool operator > (DateTimeOffset left, DateTimeOffset right)
-               {
-                       return left.UtcDateTime > right.UtcDateTime;
-               }                       
-
-               public static bool operator >= (DateTimeOffset left, DateTimeOffset right)
-               {
-                       return left.UtcDateTime >= right.UtcDateTime;
-               }                       
-
-               public static implicit operator DateTimeOffset (DateTime dateTime)
-               {
-                       return new DateTimeOffset (dateTime);
-               }
-
-               public static bool operator != (DateTimeOffset left, DateTimeOffset right)
-               {
-                       return left.UtcDateTime != right.UtcDateTime;
-               }
-
-               public static bool operator < (DateTimeOffset left, DateTimeOffset right)
-               {
-                       return left.UtcDateTime < right.UtcDateTime;
-               }
-               
-               public static bool operator <= (DateTimeOffset left, DateTimeOffset right)
-               {
-                       return left.UtcDateTime <= right.UtcDateTime;
-               }
-       
-               [MonoTODO]
-               void IDeserializationCallback.OnDeserialization (object sender)
-               {
-               }
-
-               public static DateTimeOffset Parse (string input)
-               {
-                       return Parse (input, null);
-               }
-
-               public static DateTimeOffset Parse (string input, IFormatProvider formatProvider)
-               {
-                       return Parse (input, formatProvider, DateTimeStyles.AllowWhiteSpaces);
-               }
-
-               public static DateTimeOffset Parse (string input, IFormatProvider formatProvider, DateTimeStyles styles)
-               {
-                       if (input == null)
-                               throw new ArgumentNullException ("input");
-
-                       DateTime d;
-                       DateTimeOffset dto;
-                       Exception exception = null;
-                       try {
-                               if (!DateTime.CoreParse (input, formatProvider, styles, out d, out dto, true, ref exception))
-                                       throw exception;
-                       } catch (ArgumentOutOfRangeException ex) {
-                               throw new FormatException ("The UTC representation falls outside the 1-9999 year range", ex);
-                       }
-
-                       if (d.Ticks != 0 && dto.Ticks == 0)
-                               throw new FormatException ("The UTC representation falls outside the 1-9999 year range");
-
-                       return dto;
-               }
-
-               public static DateTimeOffset ParseExact (string input, string format, IFormatProvider formatProvider)
-               {
-                       return ParseExact (input, format, formatProvider, DateTimeStyles.AssumeLocal);
-               }
-
-               public static DateTimeOffset ParseExact (string input, string format, IFormatProvider formatProvider, DateTimeStyles styles)
-               {
-                       if (format == null)
-                               throw new ArgumentNullException ("format");
-
-                       if (format == String.Empty)
-                               throw new FormatException ("format is an empty string");
-
-                       return ParseExact (input, new string [] {format}, formatProvider, styles);
-               }
-
-               public static DateTimeOffset ParseExact (string input, string[] formats, IFormatProvider formatProvider, DateTimeStyles styles)
-               {
-                       if (input == null)
-                               throw new ArgumentNullException ("input");
-
-                       if (input == String.Empty)
-                               throw new FormatException ("input is an empty string");
-
-                       if (formats == null)
-                               throw new ArgumentNullException ("formats");
-
-                       if (formats.Length == 0)
-                               throw new FormatException ("Invalid format specifier");
-
-                       if ((styles & DateTimeStyles.AssumeLocal) != 0 && (styles & DateTimeStyles.AssumeUniversal) != 0)
-                               throw new ArgumentException ("styles parameter contains incompatible flags");
-
-                       DateTimeFormatInfo dfi = DateTimeFormatInfo.GetInstance (formatProvider);
-                       DateTime d;
-                       DateTimeOffset result;
-                       Exception exception = null;
-                       bool longYear = false;
-                       try {
-                               if (!DateTime.CoreParseExact (input, formats, dfi, styles, out d, out result, true, ref longYear, true, ref exception, true))
-                                       throw exception;
-                       } catch (ArgumentOutOfRangeException ex) {
-                               throw new FormatException ("The UTC representation falls outside the 1-9999 year range", ex);
-                       }
-
-                       return result;
-               }
-
-               public TimeSpan Subtract (DateTimeOffset value)
-               {
-                       return UtcDateTime - value.UtcDateTime;
-               }
-
-               public DateTimeOffset Subtract (TimeSpan value)
-               {
-                       return Add (-value);
-               }
-
-               public static TimeSpan operator - (DateTimeOffset left, DateTimeOffset right)
-               {
-                       return left.Subtract (right);
-               }
-
-               public static DateTimeOffset operator - (DateTimeOffset dateTimeOffset, TimeSpan timeSpan)
-               {
-                       return dateTimeOffset.Subtract (timeSpan);      
-               }
-
-               public long ToFileTime ()
-               {
-                       return UtcDateTime.ToFileTime ();
-               }
-
-               public DateTimeOffset ToLocalTime ()
-               {
-                       return new DateTimeOffset (UtcDateTime.ToLocalTime (), TimeZone.CurrentTimeZone.GetUtcOffset (UtcDateTime.ToLocalTime ()));
-               }
-
-               public DateTimeOffset ToOffset (TimeSpan offset)
-               {
-                       return new DateTimeOffset (dt - utc_offset + offset, offset);
-               }
-
-               public override string ToString ()
-               {
-                       return ToString (null, null);
-               }
-
-               public string ToString (IFormatProvider formatProvider)
-               {
-                       return ToString (null, formatProvider);
-               }
-
-               public string ToString (string format)
-               {
-                       return ToString (format, null);
-               }
-
-               public string ToString (string format, IFormatProvider formatProvider)
-               {
-                       DateTimeFormatInfo dfi = DateTimeFormatInfo.GetInstance(formatProvider);
-
-                       if (format == null || format == String.Empty)
-                               format = dfi.ShortDatePattern + " " + dfi.LongTimePattern + " zzz";
-
-                       bool to_utc = false, use_invariant = false;
-                       if (format.Length == 1) {
-                               char fchar = format [0];
-                               try {
-                                       format = DateTimeUtils.GetStandardPattern (fchar, dfi, out to_utc, out use_invariant, true);
-                               } catch {
-                                       format = null;
-                               }
-               
-                               if (format == null)
-                                       throw new FormatException ("format is not one of the format specifier characters defined for DateTimeFormatInfo");
-                       }
-                       return to_utc ? DateTimeUtils.ToString (UtcDateTime, TimeSpan.Zero, format, dfi) : DateTimeUtils.ToString (DateTime, Offset, format, dfi);
-               }
-
-               public DateTimeOffset ToUniversalTime ()
-               {
-                       return new DateTimeOffset (UtcDateTime, TimeSpan.Zero); 
-               }
-
-               public static bool TryParse (string input, out DateTimeOffset result)
-               {
-                       try {
-                               result = Parse (input);
-                               return true;
-                       } catch {
-                               result = MinValue;
-                               return false;
-                       }
-               }
-
-               public static bool TryParse (string input, IFormatProvider formatProvider, DateTimeStyles styles, out DateTimeOffset result)
-               {
-                       try {
-                               result = Parse (input, formatProvider, styles);
-                               return true;
-                       } catch {
-                               result = MinValue;
-                               return false;
-                       }       
-               }
-
-               public static bool TryParseExact (string input, string format, IFormatProvider formatProvider, DateTimeStyles styles, out DateTimeOffset result)
-               {
-                       try {
-                               result = ParseExact (input, format, formatProvider, styles);
-                               return true;
-                       } catch {
-                               result = MinValue;
-                               return false;
-                       }
-               }
-
-               public static bool TryParseExact (string input, string[] formats, IFormatProvider formatProvider, DateTimeStyles styles, out DateTimeOffset result)
-               {
-                       try {
-                               result = ParseExact (input, formats, formatProvider, styles);
-                               return true;
-                       } catch {
-                               result = MinValue;
-                               return false;
-                       }
-               }
-
-               public DateTime Date {
-                       get { return DateTime.SpecifyKind (dt.Date, DateTimeKind.Unspecified); }
-               }
-
-               public DateTime DateTime {
-                       get { return DateTime.SpecifyKind (dt, DateTimeKind.Unspecified); }
-               }
-
-               public int Day {
-                       get { return dt.Day; }
-               }
-
-               public DayOfWeek DayOfWeek {
-                       get { return dt.DayOfWeek; }
-               }
-
-               public int DayOfYear {
-                       get { return dt.DayOfYear; }
-               }
-
-               public int Hour {
-                       get { return dt.Hour; }
-               }
-
-               public DateTime LocalDateTime {
-                       get { return UtcDateTime.ToLocalTime (); }
-               }
-
-               public int Millisecond {
-                       get { return dt.Millisecond; }
-               }
-
-               public int Minute {
-                       get { return dt.Minute; }
-               }
-
-               public int Month {
-                       get { return dt.Month; }
-               }
-
-               public static DateTimeOffset Now {
-                       get { return new DateTimeOffset (DateTime.Now);}
-               }
-
-               public TimeSpan Offset {
-                       get { return utc_offset; }      
-               }
-
-               public int Second {
-                       get { return dt.Second; }
-               }
-
-               public long Ticks {
-                       get { return dt.Ticks; }        
-               }
-
-               public TimeSpan TimeOfDay {
-                       get { return dt.TimeOfDay; }
-               }
-
-               public DateTime UtcDateTime {
-                       get { return DateTime.SpecifyKind (dt - utc_offset, DateTimeKind.Utc); }        
-               }
-               
-               public static DateTimeOffset UtcNow {
-                       get { return new DateTimeOffset (DateTime.UtcNow); }
-               }
-
-               public long UtcTicks {
-                       get { return UtcDateTime.Ticks; }
-               }
-
-               public int Year {
-                       get { return dt.Year; }
-               }
-       }
-}
diff --git a/mcs/class/corlib/System/DateTimeUtils.cs b/mcs/class/corlib/System/DateTimeUtils.cs
deleted file mode 100644 (file)
index 61bbe7a..0000000
+++ /dev/null
@@ -1,414 +0,0 @@
-/*
- * System.DateTimeUtils
- *
- *  Copyright (C) 2007 Novell, Inc (http://www.novell.com) 
- *
- * Permission is hereby granted, free of charge, to any person obtaining
- * a copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sublicense, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- * 
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- * 
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
- * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-using System.Globalization;
-using System.Text;
-
-namespace System {
-       internal static class DateTimeUtils {
-               public static int CountRepeat (string fmt, int p, char c)
-               {
-                       int l = fmt.Length;
-                       int i = p + 1;
-                       while ((i < l) && (fmt [i] == c)) 
-                               i++;
-                       
-                       return i - p;
-               }
-
-               public static unsafe void ZeroPad (StringBuilder output, int digits, int len)
-               {
-                       // more than enough for an int
-                       char* buffer = stackalloc char [16];
-                       int pos = 16;
-                       
-                       do {
-                               buffer [-- pos] = (char) ('0' + digits % 10);
-                               digits /= 10;
-                               len --;
-                       } while (digits > 0);
-                       
-                       while (len -- > 0)
-                               buffer [-- pos] = '0';
-                       
-                       output.Append (new string (buffer, pos, 16 - pos));
-               }
-
-               static int ParseQuotedString (string fmt, int pos, StringBuilder output)
-               {
-                       // pos == position of " or '
-                       
-                       int len = fmt.Length;
-                       int start = pos;
-                       char quoteChar = fmt [pos++];
-                       
-                       while (pos < len) {
-                               char ch = fmt [pos++];
-                               
-                               if (ch == quoteChar)
-                                       return pos - start;
-                               
-                               if (ch == '\\') {
-                                       // C-Style escape
-                                       if (pos >= len)
-                                               throw new FormatException("Un-ended quote");
-       
-                                       if (output != null)
-                                               output.Append (fmt [pos++]);
-                               } else {
-                                       if (output != null)
-                                               output.Append (ch);
-                               }
-                       }
-
-                       throw new FormatException("Un-ended quote");
-               }
-
-               public static string GetStandardPattern (char format, DateTimeFormatInfo dfi, out bool useutc, out bool use_invariant)
-               {
-                       return GetStandardPattern (format, dfi, out useutc, out use_invariant, false);
-               }
-
-               public static string GetStandardPattern (char format, DateTimeFormatInfo dfi, out bool useutc, out bool use_invariant, bool date_time_offset)
-               {
-                       String pattern;
-
-                       useutc = false;
-                       use_invariant = false;
-
-                       switch (format)
-                       {
-                       case 'd':
-                               pattern = dfi.ShortDatePattern;
-                               break;
-                       case 'D':
-                               pattern = dfi.LongDatePattern;
-                               break;
-                       case 'f':
-                               pattern = dfi.LongDatePattern + " " + dfi.ShortTimePattern;
-                               break;
-                       case 'F':
-                               pattern = dfi.FullDateTimePattern;
-                               break;
-                       case 'g':
-                               pattern = dfi.ShortDatePattern + " " + dfi.ShortTimePattern;
-                               break;
-                       case 'G':
-                               pattern = dfi.ShortDatePattern + " " + dfi.LongTimePattern;
-                               break;
-                       case 'm':
-                       case 'M':
-                               pattern = dfi.MonthDayPattern;
-                               break;
-                       case 'o':
-                       case 'O':
-                               pattern = dfi.RoundtripPattern;
-                               use_invariant = true;
-                               break;
-                       case 'r':
-                       case 'R':
-                               pattern = dfi.RFC1123Pattern;
-                               if (date_time_offset)
-                                       useutc = true;
-                               use_invariant = true;
-                               break;
-                       case 's':
-                               pattern = dfi.SortableDateTimePattern;
-                               use_invariant = true;
-                               break;
-                       case 't':
-                               pattern = dfi.ShortTimePattern;
-                               break;
-                       case 'T':
-                               pattern = dfi.LongTimePattern;
-                               break;
-                       case 'u':
-                               pattern = dfi.UniversalSortableDateTimePattern;
-                               if (date_time_offset)
-                                       useutc = true;
-                               use_invariant = true;
-                               break;
-                       case 'U':
-                               if (date_time_offset)
-                                       pattern = null;
-                               else {
-//                                     pattern = dfi.LongDatePattern + " " + dfi.LongTimePattern;
-                                       pattern = dfi.FullDateTimePattern;
-                                       useutc = true;
-                               }
-                               break;
-                       case 'y':
-                       case 'Y':
-                               pattern = dfi.YearMonthPattern;
-                               break;
-                       default:
-                               pattern = null;
-                               break;
-//                             throw new FormatException (String.Format ("Invalid format pattern: '{0}'", format));
-                       }
-
-                       return pattern;
-               }
-
-               public static string ToString (DateTime dt, string format, DateTimeFormatInfo dfi)
-               {
-                       return ToString (dt, null, format, dfi);
-               }
-
-               public static string ToString (DateTime dt, TimeSpan? utc_offset, string format, DateTimeFormatInfo dfi)
-               {
-                       // the length of the format is usually a good guess of the number
-                       // of chars in the result. Might save us a few bytes sometimes
-                       // Add + 10 for cases like mmmm dddd
-                       StringBuilder result = new StringBuilder (format.Length + 10);
-
-                       int i = 0;
-                       bool saw_day_specifier = false;
-
-                       while (i < format.Length) {
-                               int tokLen;
-                               bool omitZeros = false;
-                               char ch = format [i];
-
-                               switch (ch) {
-
-                               //
-                               // Time Formats
-                               //
-                               case 'h':
-                                       // hour, [1, 12]
-                                       tokLen = DateTimeUtils.CountRepeat (format, i, ch);
-
-                                       int hr = dt.Hour % 12;
-                                       if (hr == 0)
-                                               hr = 12;
-
-                                       DateTimeUtils.ZeroPad (result, hr, tokLen == 1 ? 1 : 2);
-                                       break;
-                               case 'H':
-                                       // hour, [0, 23]
-                                       tokLen = DateTimeUtils.CountRepeat (format, i, ch);
-                                       DateTimeUtils.ZeroPad (result, dt.Hour, tokLen == 1 ? 1 : 2);
-                                       break;
-                               case 'm':
-                                       // minute, [0, 59]
-                                       tokLen = DateTimeUtils.CountRepeat (format, i, ch);
-                                       DateTimeUtils.ZeroPad (result, dt.Minute, tokLen == 1 ? 1 : 2);
-                                       break;
-                               case 's':
-                                       // second [0, 29]
-                                       tokLen = DateTimeUtils.CountRepeat (format, i, ch);
-                                       DateTimeUtils.ZeroPad (result, dt.Second, tokLen == 1 ? 1 : 2);
-                                       break;
-                               case 'F':
-                                       omitZeros = true;
-                                       goto case 'f';
-                               case 'f':
-                                       // fraction of second, to same number of
-                                       // digits as there are f's
-
-                                       tokLen = DateTimeUtils.CountRepeat (format, i, ch);
-                                       if (tokLen > 7)
-                                               throw new FormatException ("Invalid Format String");
-
-                                       int dec = (int)((long)(dt.Ticks % TimeSpan.TicksPerSecond) / (long) Math.Pow (10, 7 - tokLen));
-                                       int startLen = result.Length;
-                                       DateTimeUtils.ZeroPad (result, dec, tokLen);
-
-                                       if (omitZeros) {
-                                               while (result.Length > startLen && result [result.Length - 1] == '0')
-                                                       result.Length--;
-                                               // when the value was 0, then trim even preceding '.' (!) It is fixed character.
-                                               if (dec == 0 && startLen > 0 && result [startLen - 1] == '.')
-                                                       result.Length--;
-                                       }
-
-                                       break;
-                               case 't':
-                                       // AM/PM. t == first char, tt+ == full
-                                       tokLen = DateTimeUtils.CountRepeat (format, i, ch);
-                                       string desig = dt.Hour < 12 ? dfi.AMDesignator : dfi.PMDesignator;
-
-                                       if (tokLen == 1) {
-                                               if (desig.Length >= 1)
-                                                       result.Append (desig [0]);
-                                       }
-                                       else
-                                               result.Append (desig);
-
-                                       break;
-                               case 'z':
-                                       // timezone. t = +/-h; tt = +/-hh; ttt+=+/-hh:mm
-                                       tokLen = DateTimeUtils.CountRepeat (format, i, ch);
-                                       TimeSpan offset = 
-                                               utc_offset ?? 
-                                               TimeZone.CurrentTimeZone.GetUtcOffset (dt);
-
-                                       if (offset.Ticks >= 0)
-                                               result.Append ('+');
-                                       else
-                                               result.Append ('-');
-
-                                       switch (tokLen) {
-                                       case 1:
-                                               result.Append (Math.Abs (offset.Hours));
-                                               break;
-                                       case 2:
-                                               result.Append (Math.Abs (offset.Hours).ToString ("00"));
-                                               break;
-                                       default:
-                                               result.Append (Math.Abs (offset.Hours).ToString ("00"));
-                                               result.Append (':');
-                                               result.Append (Math.Abs (offset.Minutes).ToString ("00"));
-                                               break;
-                                       }
-                                       break;
-                               case 'K': // 'Z' (UTC) or zzz (Local)
-                                       tokLen = 1;
-
-                                       if (utc_offset != null || dt.Kind == DateTimeKind.Local) {
-                                               offset = utc_offset ?? TimeZone.CurrentTimeZone.GetUtcOffset (dt);
-                                               if (offset.Ticks >= 0)
-                                                       result.Append ('+');
-                                               else
-                                                       result.Append ('-');
-                                               result.Append (Math.Abs (offset.Hours).ToString ("00"));
-                                               result.Append (':');
-                                               result.Append (Math.Abs (offset.Minutes).ToString ("00"));
-                                       } else if (dt.Kind == DateTimeKind.Utc)
-                                               result.Append ('Z');
-                                       break;
-                               //
-                               // Date tokens
-                               //
-                               case 'd':
-                                       // day. d(d?) = day of month (leading 0 if two d's)
-                                       // ddd = three leter day of week
-                                       // dddd+ full day-of-week
-                                       tokLen = DateTimeUtils.CountRepeat (format, i, ch);
-
-                                       if (tokLen <= 2)
-                                               DateTimeUtils.ZeroPad (result, dfi.Calendar.GetDayOfMonth (dt), tokLen == 1 ? 1 : 2);
-                                       else if (tokLen == 3)
-                                               result.Append (dfi.GetAbbreviatedDayName (dfi.Calendar.GetDayOfWeek (dt)));
-                                       else
-                                               result.Append (dfi.GetDayName (dfi.Calendar.GetDayOfWeek (dt)));
-
-                                       saw_day_specifier = true;
-                                       break;
-                               case 'M':
-                                       // Month.m(m?) = month # (with leading 0 if two mm)
-                                       // mmm = 3 letter name
-                                       // mmmm+ = full name
-                                       tokLen = DateTimeUtils.CountRepeat (format, i, ch);
-                                       int month = dfi.Calendar.GetMonth(dt);
-                                       if (tokLen <= 2)
-                                               DateTimeUtils.ZeroPad (result, month, tokLen);
-                                       else if (tokLen == 3)
-                                               result.Append (dfi.GetAbbreviatedMonthName (month));
-                                       else {
-                                               // Handles MMMM dd format
-                                               if (!saw_day_specifier) {
-                                                       for (int ii = i + 1; ii < format.Length; ++ii) {
-                                                               ch = format [ii];
-                                                               if (ch == 'd') {
-                                                                       saw_day_specifier = true;
-                                                                       break;
-                                                               }
-
-                                                               if (ch == '\'' || ch == '"') {
-                                                                       ii += ParseQuotedString (format, ii, null) - 1;
-                                                               }
-                                                       }
-                                               }
-
-                                               // NOTE: .NET ignores quoted 'd' and reads it as day specifier but I think 
-                                               // that's wrong
-                                               result.Append (saw_day_specifier ? dfi.GetMonthGenitiveName (month) : dfi.GetMonthName (month));
-                                       }
-
-                                       break;
-                               case 'y':
-                                       // Year. y(y?) = two digit year, with leading 0 if yy
-                                       // yyy+ full year with leading zeros if needed.
-                                       tokLen = DateTimeUtils.CountRepeat (format, i, ch);
-
-                                       if (tokLen <= 2)
-                                               DateTimeUtils.ZeroPad (result, dfi.Calendar.GetYear (dt) % 100, tokLen);
-                                       else
-                                               DateTimeUtils.ZeroPad (result, dfi.Calendar.GetYear (dt), tokLen);
-                                       break;
-
-                               case 'g':
-                                       // Era name
-                                       tokLen = DateTimeUtils.CountRepeat (format, i, ch);
-                                       result.Append (dfi.GetEraName (dfi.Calendar.GetEra (dt)));
-                                       break;
-
-                               //
-                               // Other
-                               //
-                               case ':':
-                                       result.Append (dfi.TimeSeparator);
-                                       tokLen = 1;
-                                       break;
-                               case '/':
-                                       result.Append (dfi.DateSeparator);
-                                       tokLen = 1;
-                                       break;
-                               case '\'': case '"':
-                                       tokLen = ParseQuotedString (format, i, result);
-                                       break;
-                               case '%':
-                                       if (i >= format.Length - 1)
-                                               throw new FormatException ("% at end of date time string");
-                                       if (format [i + 1] == '%')
-                                               throw new FormatException ("%% in date string");
-
-                                       // Look for the next char
-                                       tokLen = 1;
-                                       break;
-                               case '\\':
-                                       // C-Style escape
-                                       if (i >= format.Length - 1)
-                                               throw new FormatException ("\\ at end of date time string");
-
-                                       result.Append (format [i + 1]);
-                                       tokLen = 2;
-
-                                       break;
-                               default:
-                                       // catch all
-                                       result.Append (ch);
-                                       tokLen = 1;
-                                       break;
-                               }
-                               i += tokLen;
-                       }
-                       return result.ToString ();
-               }
-       
-       }
-}      
diff --git a/mcs/class/corlib/System/DayOfWeek.cs b/mcs/class/corlib/System/DayOfWeek.cs
deleted file mode 100644 (file)
index 3cbbce2..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-//
-// System.DayOfWeek.cs
-//
-// author:
-//   Marcel Narings (marcel@narings.nl)
-//   Martin Baulig (martin@gnome.org)
-//   Atsushi Enomoto (atsushi@ximian.com)
-//
-//   (C) 2001 Marcel Narings
-// Copyright (C) 2004-2005 Novell, Inc (http://www.novell.com)
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System.Runtime.InteropServices;
-
-namespace System {
-
-       [ComVisible (true)]
-       [Serializable]
-       public enum DayOfWeek {
-
-               Sunday,
-               Monday,
-               Tuesday,
-               Wednesday,
-               Thursday,
-               Friday,
-               Saturday
-       }
-}
diff --git a/mcs/class/corlib/System/Decimal.cs b/mcs/class/corlib/System/Decimal.cs
deleted file mode 100644 (file)
index 66bbd1e..0000000
+++ /dev/null
@@ -1,1465 +0,0 @@
-//
-// System.Decimal.cs
-//
-// Represents a floating-point decimal data type with up to 29 
-// significant digits, suitable for financial and commercial calculations.
-//
-// Authors:
-//   Martin Weindel (martin.weindel@t-online.de)
-//   Marek Safar (marek.safar@gmail.com)
-//
-// (C) 2001 Martin Weindel
-// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
-// Copyright (C) 2014 Xamarin Inc (http://www.xamarin.com)
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System;
-using System.Globalization;
-using System.Text;
-using System.Runtime.CompilerServices;
-using System.Runtime.ConstrainedExecution;
-using System.Runtime.Serialization;
-
-#if MSTEST
-using System.Runtime.InteropServices;
-#endif
-
-
-namespace System
-{
-       /// <summary>
-       /// Represents a floating-point decimal data type with up to 29 significant
-       /// digits, suitable for financial and commercial calculations
-       /// </summary>
-       [Serializable]
-       [System.Runtime.InteropServices.ComVisible (true)]
-       public struct Decimal: IFormattable, IConvertible, IComparable, IComparable<Decimal>, IEquatable <Decimal>
-               , IDeserializationCallback
-       {
-               public const decimal MinValue = -79228162514264337593543950335m;
-               public const decimal MaxValue =  79228162514264337593543950335m;
-
-               public const decimal MinusOne = -1;
-               public const decimal One = 1;
-               public const decimal Zero = 0;
-
-               private static readonly Decimal MaxValueDiv10 = MaxValue / 10;
-
-               // some constants
-               private const uint MAX_SCALE = 28;
-               private const uint SIGN_FLAG = 0x80000000;
-               private const int SCALE_SHIFT = 16;
-               private const uint RESERVED_SS32_BITS = 0x7F00FFFF;
-
-               // internal representation of decimal
-               private uint flags;
-               private uint hi;
-               private uint lo;
-               private uint mid;
-
-               public Decimal (int lo, int mid, int hi, bool isNegative, byte scale)
-               {
-                       unchecked 
-                       {
-                               this.lo = (uint) lo;
-                               this.mid = (uint) mid;
-                               this.hi = (uint) hi;
-
-                               if (scale > MAX_SCALE) 
-                                       throw new ArgumentOutOfRangeException (Locale.GetText ("scale must be between 0 and 28"));
-
-                               flags = scale;
-                               flags <<= SCALE_SHIFT;
-                               if (isNegative) flags |= SIGN_FLAG;
-                       }
-               }
-
-               public Decimal (int value) 
-               {
-                       unchecked 
-                       {
-                               hi = mid = 0;
-                               if (value < 0) 
-                               {
-                                       flags = SIGN_FLAG;
-                                       lo = ((uint)~value) + 1;
-                               }
-                               else 
-                               {
-                                       flags = 0;
-                                       lo = (uint) value;
-                               }
-                       }
-               }
-
-               [CLSCompliant(false)]
-               public Decimal (uint value) 
-               {
-                       lo = value;
-                       flags = hi = mid = 0;
-               }
-
-               public Decimal (long value) 
-               {
-                       unchecked 
-                       {
-                               hi = 0;
-                               if (value < 0) 
-                               {
-                                       flags = SIGN_FLAG;
-                                       ulong u = ((ulong)~value) + 1;
-                                       lo = (uint)u;
-                                       mid = (uint)(u >> 32);
-                               }
-                               else 
-                               {
-                                       flags = 0;
-                                       ulong u = (ulong)value;
-                                       lo = (uint)u;
-                                       mid = (uint)(u >> 32);
-                               }
-                       }
-               }
-
-               [CLSCompliant(false)]
-               public Decimal (ulong value) 
-               {
-                       unchecked 
-                       {
-                               flags = hi = 0;
-                               lo = (uint)value;
-                               mid = (uint)(value >> 32);
-                       }
-               }
-
-               public Decimal (float value) 
-               {
-#if false
-                       //
-                       // We cant use the double2decimal method
-                       // because it incorrectly turns the floating point
-                       // value 1.23456789E-25F which should be:
-                       //    0.0000000000000000000000001235
-                       // into the incorrect:
-                       //   0.0000000000000000000000001234
-                       //
-                       //    The code currently parses the double value 0.6 as
-                       //    0.600000000000000
-                       //
-                       // And we have a patch for that called (trim
-                       if (double2decimal (out this, value, 7) != 0)
-                               throw new OverflowException ();
-#else
-                       if (value > (float)Decimal.MaxValue || value < (float)Decimal.MinValue ||
-                               float.IsNaN (value) || float.IsNegativeInfinity (value) || float.IsPositiveInfinity (value)) {
-                               throw new OverflowException (Locale.GetText (
-                                       "Value {0} is greater than Decimal.MaxValue or less than Decimal.MinValue", value));
-                       }
-                       
-                       // we must respect the precision (double2decimal doesn't)
-                       Decimal d = Decimal.Parse (value.ToString (CultureInfo.InvariantCulture),
-                                       NumberStyles.Float, CultureInfo.InvariantCulture);
-                       flags = d.flags;
-                       hi = d.hi;
-                       lo = d.lo;
-                       mid = d.mid;
-#endif
-               }
-
-               public Decimal (double value) 
-               {
-#if true
-                       //
-                       // We cant use the double2decimal method
-                       // because it incorrectly turns the floating point
-                       // value 1.23456789E-25F which should be:
-                       //    0.0000000000000000000000001235
-                       // into the incorrect:
-                       //   0.0000000000000000000000001234
-                       //
-                       //    The code currently parses the double value 0.6 as
-                       //    0.600000000000000
-                       //
-                       // And we have a patch for that called (trim
-                       if (double2decimal (out this, value, 15) != 0)
-                               throw new OverflowException ();
-#else
-                       if (value > (double)Decimal.MaxValue || value < (double)Decimal.MinValue ||
-                               double.IsNaN (value) || double.IsNegativeInfinity (value) || double.IsPositiveInfinity (value)) {
-                               throw new OverflowException (Locale.GetText (
-                                       "Value {0} is greater than Decimal.MaxValue or less than Decimal.MinValue", value));
-                       }
-                       // we must respect the precision (double2decimal doesn't)
-                       Decimal d = Decimal.Parse (value.ToString (CultureInfo.InvariantCulture),
-                                       NumberStyles.Float, CultureInfo.InvariantCulture);
-                       flags = d.flags;
-                       hi = d.hi;
-                       lo = d.lo;
-                       mid = d.mid;
-#endif
-               }
-
-               public Decimal (int[] bits) 
-               {
-                       if (bits == null) 
-                       {
-                               throw new ArgumentNullException (Locale.GetText ("bits is a null reference"));
-                       }
-
-                       if (bits.Length != 4) 
-                       {
-                               throw new ArgumentException (Locale.GetText ("bits does not contain four values"));
-                       }
-
-                       unchecked {
-                               lo = (uint) bits[0];
-                               mid = (uint) bits[1];
-                               hi = (uint) bits[2];
-                               flags = (uint) bits[3];
-                               byte scale = (byte)(flags >> SCALE_SHIFT);
-                               if (scale > MAX_SCALE || (flags & RESERVED_SS32_BITS) != 0) 
-                               {
-                                       throw new ArgumentException (Locale.GetText ("Invalid bits[3]"));
-                               }
-                       }
-               }
-
-               public static decimal FromOACurrency (long cy)
-               {
-                       return (decimal)cy / (decimal)10000;
-               }
-
-               public static int[] GetBits (Decimal d) 
-               {
-                       unchecked 
-                       {
-                               return new int[] { (int)d.lo, (int)d.mid, (int)d.hi, (int)d.flags };
-                       }
-               }
-
-               public static Decimal Negate (Decimal d) 
-               {
-                       d.flags ^= SIGN_FLAG;
-                       return d;
-               }
-
-               public static Decimal Add (Decimal d1, Decimal d2) 
-               {
-                       if (decimalIncr (ref d1, ref d2) == 0)
-                               return d1;
-                       else
-                               throw new OverflowException (Locale.GetText ("Overflow on adding decimal number"));
-               }
-
-               public static Decimal Subtract (Decimal d1, Decimal d2) 
-               {
-                       d2.flags ^= SIGN_FLAG;
-                       int result = decimalIncr (ref d1, ref d2);
-                       if (result == 0)
-                               return d1;
-                       else
-                               throw new OverflowException (Locale.GetText ("Overflow on subtracting decimal numbers ("+result+")"));
-               }
-
-               public override int GetHashCode () 
-               {
-                       return (int) (flags ^ hi ^ lo ^ mid);
-               }
-
-               public static Decimal operator + (Decimal d1, Decimal d2)
-               {
-                       return Add (d1, d2);
-               }
-
-               public static Decimal operator -- (Decimal d) 
-               {
-                       return Add(d, MinusOne);
-               }
-
-               public static Decimal operator ++ (Decimal d) 
-               {
-                       return Add (d, One);
-               }
-
-               public static Decimal operator - (Decimal d1, Decimal d2) 
-               {
-                       return Subtract (d1, d2);
-               }
-
-               public static Decimal operator - (Decimal d) 
-               {
-                       return Negate (d);
-               }
-
-               public static Decimal operator + (Decimal d) 
-               {
-                       return d;
-               }
-
-               public static Decimal operator * (Decimal d1, Decimal d2)
-               {
-                       return Multiply (d1, d2);
-               }
-               
-               public static Decimal operator / (Decimal d1, Decimal d2) 
-               {
-                       return Divide (d1, d2);
-               }
-               
-               public static Decimal operator % (Decimal d1, Decimal d2) 
-               {
-                       return Remainder (d1, d2);
-               }
-
-               private static ulong u64 (Decimal value) 
-               {
-                       ulong result;
-
-                       decimalFloorAndTrunc (ref value, 0);
-                       if (decimal2UInt64 (ref value, out result) != 0) {
-                               throw new System.OverflowException ();
-                       }
-                       return result;
-               }
-
-               private static long s64 (Decimal value) 
-               {
-                       long result;
-
-                       decimalFloorAndTrunc (ref value, 0);
-                       if (decimal2Int64 (ref value, out result) != 0) {
-                               throw new System.OverflowException ();
-                       }
-                       return result;
-               }
-
-               public static explicit operator byte (Decimal value)
-               {
-                       ulong result = u64 (value);
-                       return checked ((byte) result);
-               }
-
-               [CLSCompliant (false)]
-               public static explicit operator sbyte (Decimal value)
-               {
-                       long result = s64 (value);
-                       return checked ((sbyte) result);
-               }
-
-               public static explicit operator char (Decimal value) 
-               {
-                       ulong result = u64 (value);
-                       return checked ((char) result);
-               }
-
-               public static explicit operator short (Decimal value) 
-               {
-                       long result = s64 (value);
-                       return checked ((short) result);
-               }
-
-               [CLSCompliant (false)]
-               public static explicit operator ushort (Decimal value) 
-               {
-                       ulong result = u64 (value);
-                       return checked ((ushort) result);
-               }
-
-               public static explicit operator int (Decimal value) 
-               {
-                       long result = s64 (value);
-                       return checked ((int) result);
-               }
-
-               [CLSCompliant(false)]
-               public static explicit operator uint (Decimal value) 
-               {
-                       ulong result = u64 (value);
-                       return checked ((uint) result);
-               }
-
-               public static explicit operator long (Decimal value) 
-               {
-                       return s64 (value);
-               }
-
-               [CLSCompliant(false)]
-               public static explicit operator ulong (Decimal value) 
-               {
-                       return u64 (value);
-               }
-
-               public static implicit operator Decimal (byte value) 
-               {
-                       return new Decimal (value);
-               }
-
-               [CLSCompliant(false)]
-               public static implicit operator Decimal (sbyte value) 
-               {
-                       return new Decimal (value);
-               }
-
-               public static implicit operator Decimal (short value) 
-               {
-                       return new Decimal (value);
-               }
-
-               [CLSCompliant(false)]
-               public static implicit operator Decimal (ushort value) 
-               {
-                       return new Decimal (value);
-               }
-
-               public static implicit operator Decimal (char value) 
-               {
-                       return new Decimal (value);
-               }
-
-               public static implicit operator Decimal (int value) 
-               {
-                       return new Decimal (value);
-               }
-
-               [CLSCompliant(false)]
-               public static implicit operator Decimal (uint value) 
-               {
-                       return new Decimal (value);
-               }
-
-               public static implicit operator Decimal (long value) 
-               {
-                       return new Decimal (value);
-               }
-
-               [CLSCompliant(false)]
-               public static implicit operator Decimal (ulong value) 
-               {
-                       return new Decimal (value);
-               }
-
-               public static explicit operator Decimal (float value) 
-               {
-                       return new Decimal (value);
-               }
-
-               public static explicit operator Decimal (double value)
-               {
-                       return new Decimal (value);
-               }
-
-               public static explicit operator float (Decimal value)
-               {
-                       return (float) (double) value;
-               }
-
-               public static explicit operator double (Decimal value)
-               {
-                       return decimal2double (ref value);
-               }
-
-
-               public static bool operator != (Decimal d1, Decimal d2) 
-               {
-                       return !Equals (d1, d2);
-               }
-
-               public static bool operator == (Decimal d1, Decimal d2) 
-               {
-                       return Equals (d1, d2);
-               }
-
-               public static bool operator > (Decimal d1, Decimal d2) 
-               {
-                       return Compare (d1, d2) > 0;
-               }
-
-               public static bool operator >= (Decimal d1, Decimal d2) 
-               {
-                       return Compare (d1, d2) >= 0;
-               }
-
-               public static bool operator < (Decimal d1, Decimal d2) 
-               {
-                       return Compare (d1, d2) < 0;
-               }
-
-               public static bool operator <= (Decimal d1, Decimal d2) 
-               {
-                       return Compare (d1, d2) <= 0;
-               }
-
-               public static bool Equals (Decimal d1, Decimal d2) 
-               {
-                       return Compare (d1, d2) == 0;
-               }
-
-               public override bool Equals (object value) 
-               {
-                       if (!(value is Decimal))
-                               return false;
-
-                       return Equals ((Decimal) value, this);
-               }
-
-               // avoid unmanaged call
-               private bool IsZero () 
-               {
-                       return ((hi == 0) && (lo == 0) && (mid == 0));
-               }
-
-               // avoid unmanaged call
-               private bool IsNegative () 
-               {
-                       return ((flags & 0x80000000) == 0x80000000);
-               }
-
-               public static Decimal Floor (Decimal d) 
-               {
-                       decimalFloorAndTrunc (ref d, 1);
-                       return d;
-               }
-
-               public static Decimal Truncate (Decimal d) 
-               {
-                       decimalFloorAndTrunc (ref d, 0);
-                       return d;
-               }
-
-               public static Decimal Round (Decimal d, int decimals) 
-               {
-                       return Round (d, decimals, MidpointRounding.ToEven);
-               }
-
-               public static Decimal Round (Decimal d, int decimals, MidpointRounding mode) 
-               {
-                       if ((mode != MidpointRounding.ToEven) && (mode != MidpointRounding.AwayFromZero))
-                               throw new ArgumentException ("The value '" + mode + "' is not valid for this usage of the type MidpointRounding.", "mode");
-
-                       if (decimals < 0 || decimals > 28) {
-                               throw new ArgumentOutOfRangeException ("decimals", "[0,28]");
-                       }
-
-                       if (mode == MidpointRounding.ToEven && decimals == 0)
-                               return Round (d);
-
-                       bool negative = d.IsNegative ();
-                       if (negative)
-                               d.flags ^= SIGN_FLAG;
-
-                       // Moved from Math.cs because it's easier to fix the "sign"
-                       // issue here :( as the logic is OK only for positive numbers
-                       decimal p = (decimal) Math.Pow (10, decimals);
-                       decimal int_part = Decimal.Floor (d);
-                       decimal dec_part = d - int_part;
-                       dec_part *= 10000000000000000000000000000M;
-                       dec_part = Decimal.Floor(dec_part);
-                       dec_part /= (10000000000000000000000000000M / p);
-                       dec_part = Math.Round (dec_part, mode);
-
-                       // ignore trailing zeros
-                       while (decimals > 0 && (dec_part % 10) == 0) {
-                               decimals--;
-                               dec_part /= 10;
-                               p /= 10;
-                       }
-
-                       dec_part /= p;
-                       decimal result = int_part + dec_part;
-
-                       // that fixes the precision/scale (which we must keep for output)
-                       // (moved and adapted from System.Data.SqlTypes.SqlMoney)
-                       long scaleDiff = decimals - ((result.flags & 0x7FFF0000) >> 16);
-                       // integrify
-                       if (scaleDiff > 0) {
-                               // note: here we always work with positive numbers
-                               while (scaleDiff > 0) {
-                                       if (result > MaxValueDiv10)
-                                               break;
-                                       result *= 10;
-                                       scaleDiff--;
-                               }
-                       }
-                       else if (scaleDiff < 0) {
-                               while (scaleDiff < 0) {
-                                       result /= 10;
-                                       scaleDiff++;
-                               }
-                       }
-                       result.flags = (uint)((decimals - scaleDiff) << SCALE_SHIFT);
-
-                       if (negative)
-                               result.flags ^= SIGN_FLAG;
-                       return result;
-               }
-
-               public static Decimal Round (Decimal d)
-               {
-                       return Math.Round (d);
-               }
-
-               public static Decimal Round (Decimal d, MidpointRounding mode)
-               {
-                       return Math.Round (d, mode);
-               }
-
-               public static Decimal Multiply (Decimal d1, Decimal d2) 
-               {
-                       if (d1.IsZero () || d2.IsZero ())
-                               return Decimal.Zero;
-
-                       if (decimalMult (ref d1, ref d2) != 0)
-                               throw new OverflowException ();
-                       return d1;
-               }
-
-               public static Decimal Divide (Decimal d1, Decimal d2) 
-               {
-                       if (d2.IsZero ())
-                               throw new DivideByZeroException ();
-                       if (d1.IsZero ())
-                               return Decimal.Zero;
-
-                       d1.flags ^= SIGN_FLAG;
-                       d1.flags ^= SIGN_FLAG;
-
-                       Decimal result;
-                       if (decimalDiv (out result, ref d1, ref d2) != 0)
-                               throw new OverflowException ();
-
-                       return result;
-               }
-
-               public static Decimal Remainder (Decimal d1, Decimal d2) 
-               {
-                       if (d2.IsZero ())
-                               throw new DivideByZeroException ();
-                       if (d1.IsZero ())
-                               return Decimal.Zero;
-
-                       bool negative = d1.IsNegative ();
-                       if (negative)
-                               d1.flags ^= SIGN_FLAG;
-                       if (d2.IsNegative ())
-                               d2.flags ^= SIGN_FLAG;
-
-                       Decimal result;
-                       if (d1 == d2) {
-                               return Decimal.Zero;
-                       }
-                       else if (d2 > d1) {
-                               result = d1;
-                       }
-                       else {
-                               if (decimalDiv (out result, ref d1, ref d2) != 0)
-                                       throw new OverflowException ();
-                               result = Decimal.Truncate (result);
-
-                               // FIXME: not really performant here
-                               result = d1 - result * d2;
-                       }
-
-                       if (negative)
-                               result.flags ^= SIGN_FLAG;
-                       return result;
-               }
-
-               [ReliabilityContractAttribute (Consistency.WillNotCorruptState, Cer.Success)]
-               public static int Compare (Decimal d1, Decimal d2) 
-               {
-                       return decimalCompare (ref d1, ref d2);
-               }
-
-               public int CompareTo (object value)
-               {
-                       if (value == null)
-                               return 1;
-
-                       if (!(value is Decimal))
-                               throw new ArgumentException (Locale.GetText ("Value is not a System.Decimal"));
-
-                       return Compare (this, (Decimal)value);
-               }
-
-               public int CompareTo (Decimal value)
-               {
-                       return Compare (this, value);
-               }
-
-               public bool Equals (Decimal value) 
-               {
-                       return Equals (value, this);
-               }
-
-               public static Decimal Ceiling (Decimal d)
-               {
-                       return Math.Ceiling (d);
-               }
-
-               public static Decimal Parse (string s) 
-               {
-                       return Parse (s, NumberStyles.Number, null);
-               }
-
-               public static Decimal Parse (string s, NumberStyles style) 
-               {
-                       return Parse (s, style, null);
-               }
-
-               public static Decimal Parse (string s, IFormatProvider provider) 
-               {
-                       return Parse (s, NumberStyles.Number, provider);
-               }
-
-               static void ThrowAtPos (int pos)
-               {
-                       throw new FormatException (String.Format (Locale.GetText ("Invalid character at position {0}"), pos));
-               }
-
-               static void ThrowInvalidExp ()
-               {
-                       throw new FormatException (Locale.GetText ("Invalid exponent"));
-               }
-
-               private static string stripStyles (string s, NumberStyles style, NumberFormatInfo nfi, 
-                 out int decPos, out bool isNegative, out bool expFlag, out int exp, bool throwex)
-               {
-                       isNegative = false;
-                       expFlag = false;
-                       exp = 0;
-                       decPos = -1;
-
-                       bool hasSign = false;
-                       bool hasOpeningParentheses = false;
-                       bool hasDecimalPoint = false;
-                       bool allowedLeadingWhiteSpace = ((style & NumberStyles.AllowLeadingWhite) != 0);
-                       bool allowedTrailingWhiteSpace = ((style & NumberStyles.AllowTrailingWhite) != 0);
-                       bool allowedLeadingSign = ((style & NumberStyles.AllowLeadingSign) != 0);
-                       bool allowedTrailingSign = ((style & NumberStyles.AllowTrailingSign) != 0);
-                       bool allowedParentheses = ((style & NumberStyles.AllowParentheses) != 0);
-                       bool allowedThousands = ((style & NumberStyles.AllowThousands) != 0);
-                       bool allowedDecimalPoint = ((style & NumberStyles.AllowDecimalPoint) != 0);
-                       bool allowedExponent = ((style & NumberStyles.AllowExponent) != 0);
-
-                       /* get rid of currency symbol */
-                       bool hasCurrency = false;
-                       if ((style & NumberStyles.AllowCurrencySymbol) != 0)
-                       {
-                               int index = s.IndexOfOrdinalUnchecked (nfi.CurrencySymbol);
-                               if (index >= 0) 
-                               {
-                                       s = s.Remove (index, nfi.CurrencySymbol.Length);
-                                       hasCurrency = true;
-                               }
-                       }
-
-                       string decimalSep = (hasCurrency) ? nfi.CurrencyDecimalSeparator : nfi.NumberDecimalSeparator;
-                       string groupSep = (hasCurrency) ? nfi.CurrencyGroupSeparator : nfi.NumberGroupSeparator;
-                       string negativeSign = nfi.NegativeSign;
-                       string positiveSign = nfi.PositiveSign;
-
-                       // If we don't have a group separator defined, it has the same effect as if it wasn't allowed.
-                       if (string.IsNullOrEmpty(groupSep)) allowedThousands = false;
-
-                       int pos = 0;
-                       int len = s.Length;
-
-                       StringBuilder sb = new StringBuilder (len);
-
-                       // leading
-                       while (pos < len) 
-                       {
-                               char ch = s[pos];
-                               if (Char.IsDigit (ch))
-                               {
-                                       break; // end of leading
-                               }
-                               else if (allowedLeadingWhiteSpace && Char.IsWhiteSpace (ch))
-                               {
-                                       pos++;
-                               }
-                               else if (allowedParentheses && ch == '(' && !hasSign && !hasOpeningParentheses) 
-                               {
-                                       hasOpeningParentheses = true;
-                                       hasSign = true;
-                                       isNegative = true;
-                                       pos++;
-                               }
-                               else if (allowedLeadingSign && !string.IsNullOrEmpty (negativeSign) && ch == negativeSign[0] && !hasSign)
-                               {
-                                       int slen = negativeSign.Length;
-                                       if (slen == 1 || s.IndexOfOrdinalUnchecked (negativeSign, pos, slen) == pos)
-                                       {
-                                               hasSign = true;
-                                               isNegative = true;
-                                               pos += slen;
-                                       }
-                               }
-                               else if (allowedLeadingSign && !string.IsNullOrEmpty (positiveSign) && ch == positiveSign[0] && !hasSign)
-                               {
-                                       int slen = positiveSign.Length;
-                                       if (slen == 1 || s.IndexOfOrdinalUnchecked (positiveSign, pos, slen) == pos)
-                                       {
-                                               hasSign = true;
-                                               pos += slen;
-                                       }
-                               }
-                               else if (allowedDecimalPoint && ch == decimalSep[0])
-                               {
-                                       int slen = decimalSep.Length;
-                                       if (slen != 1 && s.IndexOfOrdinalUnchecked (decimalSep, pos, slen) != pos) 
-                                       {
-                                               if (throwex)
-                                                       ThrowAtPos (pos);
-                                               else
-                                                       return null;
-                                       }
-                                       break;
-                               }
-                               else
-                               {
-                                       if (throwex)
-                                               ThrowAtPos (pos);
-                                       else
-                                               return null;
-                               }
-                       }
-
-                       if (pos == len) {
-                               if (throwex)
-                                       throw new FormatException (Locale.GetText ("No digits found"));
-                               else
-                                       return null;
-                       }
-
-                       // digits 
-                       while (pos < len)
-                       {
-                               char ch = s[pos];
-                               if (Char.IsDigit (ch)) 
-                               {
-                                       sb.Append(ch);
-                                       pos++;
-                               }
-                               else if (allowedThousands && ch == groupSep[0] && ch != decimalSep [0]) 
-                               {
-                                       int slen = groupSep.Length;
-                                       if (slen != 1 && s.IndexOfOrdinalUnchecked(groupSep, pos, slen) != pos) 
-                                       {
-                                               if (throwex)
-                                                       ThrowAtPos (pos);
-                                               else
-                                                       return null;
-                                       }
-                                       pos += slen;
-                               }
-                               else if (allowedDecimalPoint && ch == decimalSep[0] && !hasDecimalPoint)
-                               {
-                                       int slen = decimalSep.Length;
-                                       if (slen == 1 || s.IndexOfOrdinalUnchecked(decimalSep, pos, slen) == pos) 
-                                       {
-                                               decPos = sb.Length;
-                                               hasDecimalPoint = true;
-                                               pos += slen;
-                                       }
-                               }
-                               else
-                               {
-                                       break;
-                               }
-                       }
-
-                       // exponent
-                       if (pos < len)
-                       {
-                               char ch = s[pos];
-                               if (allowedExponent && Char.ToUpperInvariant (ch) == 'E')
-                               {
-                                       expFlag = true;
-                                       pos++;
-                                       if (pos >= len){
-                                               if (throwex)
-                                                       ThrowInvalidExp ();
-                                               else
-                                                       return null;
-                                       }
-                                       ch = s[pos];
-                                       bool isNegativeExp = false;
-                                       if (!string.IsNullOrEmpty (positiveSign) && ch == positiveSign[0])
-                                       {
-                                               int slen = positiveSign.Length;
-                                               if (slen == 1 || s.IndexOfOrdinalUnchecked (positiveSign, pos, slen) == pos)
-                                               {
-                                                       pos += slen;
-                                                       if (pos >= len) {
-                                                               if (throwex)
-                                                                       ThrowInvalidExp ();
-                                                               else
-                                                                       return null;
-                                                       }
-                                               }
-                                       }
-                                       else if (!string.IsNullOrEmpty (negativeSign) && ch == negativeSign[0])
-                                       {
-                                               int slen = negativeSign.Length;
-                                               if (slen == 1 || s.IndexOfOrdinalUnchecked (negativeSign, pos, slen) == pos)
-                                               {
-                                                       pos += slen;
-                                                       if (pos >= len) {
-                                                               if (throwex)
-                                                                       ThrowInvalidExp ();
-                                                               else
-                                                                       return null;
-                                                       }
-                                                       isNegativeExp = true;
-                                               }
-                                       }
-                                       ch = s[pos];
-                                       if (!Char.IsDigit(ch)) {
-                                               if (throwex)
-                                                       ThrowInvalidExp ();
-                                               else
-                                                       return null;
-                                       }
-
-                                       exp = ch - '0';
-                                       pos++;
-                                       while (pos < len && Char.IsDigit (s[pos])) 
-                                       {
-                                               exp *= 10;
-                                               exp += s[pos] - '0';
-                                               pos++;
-                                       }
-                                       if (isNegativeExp) exp *= -1;
-                               }
-                       }
-
-                       // trailing
-                       while (pos < len)
-                       {
-                               char ch = s[pos];
-                               if (allowedTrailingWhiteSpace && Char.IsWhiteSpace (ch)) 
-                               {
-                                       pos++;
-                               }
-                               else if (allowedParentheses && ch == ')' && hasOpeningParentheses) 
-                               {
-                                       hasOpeningParentheses = false;
-                                       pos++;
-                               }
-                               else if (allowedTrailingSign && !string.IsNullOrWhiteSpace (negativeSign) && ch == negativeSign[0] && !hasSign)
-                               {
-                                       int slen = negativeSign.Length;
-                                       if (slen == 1 || s.IndexOfOrdinalUnchecked(negativeSign, pos, slen) == pos)
-                                       {
-                                               hasSign = true;
-                                               isNegative = true;
-                                               pos += slen;
-                                       }
-                               }
-                               else if (allowedTrailingSign && !string.IsNullOrWhiteSpace (positiveSign) && ch == positiveSign[0] && !hasSign)
-                               {
-                                       int slen = positiveSign.Length;
-                                       if (slen == 1 || s.IndexOfOrdinalUnchecked (positiveSign, pos, slen) == pos)
-                                       {
-                                               hasSign = true;
-                                               pos += slen;
-                                       }
-                               }
-                               else
-                               {
-                                       // trailing zero characters are allowed
-                                       if (ch == 0){
-                                               while (++pos < len && s [pos] == 0)
-                                                       ;
-                                               if (pos == len)
-                                                       break;
-                                       }
-                                       
-                                       if (throwex)
-                                               ThrowAtPos (pos);
-                                       else
-                                               return null;
-                               }
-                       }
-
-                       if (hasOpeningParentheses) {
-                               if (throwex)
-                                       throw new FormatException (Locale.GetText ("Closing Parentheses not found"));
-                               else
-                                       return null;
-                       }
-
-                       if (!hasDecimalPoint)
-                               decPos = sb.Length;
-
-                       return sb.ToString ();
-               }
-
-               public static Decimal Parse (string s, NumberStyles style, IFormatProvider provider) 
-               {
-                       if (s == null)
-                               throw new ArgumentNullException ("s");
-
-                       if ((style & NumberStyles.AllowHexSpecifier) != 0)
-                               throw new ArgumentException ("Decimal.TryParse does not accept AllowHexSpecifier", "style");
-
-                       Decimal result;
-                       PerformParse (s, style, provider, out result, true);
-                       return result;
-               }
-       
-               public static bool TryParse (string s, out Decimal result)
-               {
-                       if (s == null){
-                               result = 0;
-                               return false;
-                       }
-                       return PerformParse (s, NumberStyles.Number, null, out result, false);
-               }
-
-               public static bool TryParse (string s, NumberStyles style, IFormatProvider provider, out decimal result)
-               {
-                       if (s == null || (style & NumberStyles.AllowHexSpecifier) != 0){
-                               result = 0;
-                               return false;
-                       }
-
-                       return PerformParse (s, style, provider, out result, false);
-               }
-
-               static bool PerformParse (string s, NumberStyles style, IFormatProvider provider, out Decimal res, bool throwex) 
-               {
-                       NumberFormatInfo nfi = NumberFormatInfo.GetInstance (provider);
-
-                       int iDecPos, exp;
-                       bool isNegative, expFlag;
-                       s = stripStyles(s, style, nfi, out iDecPos, out isNegative, out expFlag, out exp, throwex);
-                       if (s == null){
-                               res = 0;
-                               return false;
-                       }
-
-                       if (iDecPos < 0){
-                               if (throwex)
-                                       throw new Exception (Locale.GetText ("Error in System.Decimal.Parse"));
-                               res = 0;
-                               return false;
-                       }
-
-                       // first we remove leading 0
-                       int len = s.Length;
-                       int i = 0;
-                       while ((i < iDecPos) && (s [i] == '0'))
-                               i++;
-                       if ((i > 1) && (len > 1)) {
-                               s = s.Substring (i, len - i);
-                               iDecPos -= i;
-                       }
-
-                       // first 0. may not be here but is part of the maximum length
-                       int max = ((iDecPos == 0) ? 27 : 28);
-                       len = s.Length;
-                       if (len >= max + 1) {
-                               // number lower than MaxValue (base-less) can have better precision
-                               if (String.CompareOrdinal (s, 0, "79228162514264337593543950335", 0, max + 1) <= 0) {
-                                       max++;
-                               }
-                       }
-
-                       // then we trunc the string
-                       if ((len > max) && (iDecPos < len)) {
-                               int round = (s [max] - '0');
-
-                               bool addone = false;
-                               if (round > 5) {
-                                       addone = true;
-                               } else if (round == 5) {
-                                       if (isNegative) {
-                                               addone = true;
-                                       } else {
-                                               // banker's rounding applies
-                                               if (len > max + 1) {
-                                                       addone = s [max + 1] > '0';
-                                               } else {
-                                                       int previous = s [max - 1] - '0';
-                                                       addone = ((previous & 0x01) == 0x01);
-                                               }
-                                       }
-                               }
-
-                               s = s.Substring (0, max);
-                               if (addone) {
-                                       char[] array = s.ToCharArray ();
-                                       int p = max - 1;
-                                       while (p >= 0) {
-                                               int b = (array [p] - '0');
-                                               if (array [p] != '9') {
-                                                       array [p] = (char)(b + '1');
-                                                       break;
-                                               }
-                                               else {
-                                                       array [p--] = '0';
-                                               }
-                                       }
-                                       if ((p == -1) && (array [0] == '0')) {
-                                               iDecPos++;
-                                               s = "1".PadRight (iDecPos, '0');
-                                       }
-                                       else
-                                               s = new String (array);
-                               }
-                       }
-
-                       Decimal result;
-                       // always work in positive (rounding issues)
-                       if (string2decimal (out result, s, (uint)iDecPos, 0) != 0){
-                               if (throwex)
-                                       throw new OverflowException ();
-                               res = 0;
-                               return false;
-                       }
-
-                       if (expFlag) {
-                               if (decimalSetExponent (ref result, exp) != 0){
-                                       if (throwex)
-                                               throw new OverflowException ();
-                                       res = 0;
-                                       return false;
-                               }
-                       }
-
-                       if (isNegative)
-                               result.flags ^= SIGN_FLAG;
-
-                       res = result;
-                       return true;
-               }
-
-               public TypeCode GetTypeCode ()
-               {
-                       return TypeCode.Decimal;
-               }
-
-               public static byte ToByte (decimal value)
-               {
-                       if (value > Byte.MaxValue || value < Byte.MinValue)
-                               throw new OverflowException (Locale.GetText (
-                                       "Value is greater than Byte.MaxValue or less than Byte.MinValue"));
-
-                       // return truncated value
-                       return (byte)(Decimal.Truncate (value));
-               }
-
-               public static double ToDouble (decimal d)
-               {
-                       return Convert.ToDouble (d);
-               }
-
-               public static short ToInt16 (decimal value)
-               {
-                       if (value > Int16.MaxValue || value < Int16.MinValue)
-                               throw new OverflowException (Locale.GetText (
-                                       "Value is greater than Int16.MaxValue or less than Int16.MinValue"));
-
-                       // return truncated value
-                       return (Int16)(Decimal.Truncate (value));
-               }
-
-               public static int ToInt32 (decimal d)
-               {
-                       if (d > Int32.MaxValue || d < Int32.MinValue)
-                               throw new OverflowException (Locale.GetText (
-                                       "Value is greater than Int32.MaxValue or less than Int32.MinValue"));
-
-                       // return truncated value
-                       return (Int32)(Decimal.Truncate (d));
-               }
-       
-               public static long ToInt64 (decimal d)
-               {
-                       if (d > Int64.MaxValue || d < Int64.MinValue)
-                               throw new OverflowException (Locale.GetText (
-                                       "Value is greater than Int64.MaxValue or less than Int64.MinValue"));
-
-                       // return truncated value
-                       return (Int64)(Decimal.Truncate (d));
-               }
-
-               public static long ToOACurrency (decimal value)
-               {
-                       return (long) (value * 10000);
-               }
-
-               [CLSCompliant(false)]
-               public static sbyte ToSByte (decimal value)
-               {
-                       if (value > SByte.MaxValue || value < SByte.MinValue)
-                               throw new OverflowException (Locale.GetText (
-                                       "Value is greater than SByte.MaxValue or less than SByte.MinValue"));
-
-                       // return truncated value
-                       return (SByte)(Decimal.Truncate (value));
-               }
-       
-               public static float ToSingle (decimal d)
-               {
-                       return Convert.ToSingle (d);
-               }
-
-               [CLSCompliant(false)]
-               public static ushort ToUInt16 (decimal value)
-               {
-                       if (value > UInt16.MaxValue || value < UInt16.MinValue)
-                               throw new OverflowException (Locale.GetText (
-                                       "Value is greater than UInt16.MaxValue or less than UInt16.MinValue"));
-
-                       // return truncated value
-                       return (UInt16)(Decimal.Truncate (value));
-               }
-
-               [CLSCompliant(false)]
-               public static uint ToUInt32 (decimal d)
-               {
-                       if (d > UInt32.MaxValue || d < UInt32.MinValue)
-                               throw new OverflowException (Locale.GetText (
-                                       "Value is greater than UInt32.MaxValue or less than UInt32.MinValue"));
-
-                       // return truncated value
-                       return (UInt32)(Decimal.Truncate (d));
-               }
-
-               [CLSCompliant(false)]
-               public static ulong ToUInt64 (decimal d)
-               {
-                       if (d > UInt64.MaxValue || d < UInt64.MinValue)
-                               throw new OverflowException (Locale.GetText (
-                                       "Value is greater than UInt64.MaxValue or less than UInt64.MinValue"));
-
-                       // return truncated value
-                       return (UInt64)(Decimal.Truncate (d));
-               }
-
-               object IConvertible.ToType (Type type, IFormatProvider provider)
-               {
-                       return Convert.DefaultToType ((IConvertible)this, type, provider);
-               }
-
-               bool IConvertible.ToBoolean (IFormatProvider provider)
-               {
-                       return Convert.ToBoolean (this);
-               }
-
-               byte IConvertible.ToByte (IFormatProvider provider)
-               {
-                       return Convert.ToByte (this);
-               }
-
-               char IConvertible.ToChar (IFormatProvider provider)
-               {
-                       throw new InvalidCastException ();
-               }
-
-               DateTime IConvertible.ToDateTime (IFormatProvider provider)
-               {
-                       throw new InvalidCastException ();
-               }
-
-               decimal IConvertible.ToDecimal (IFormatProvider provider)
-               {
-                       return this;
-               }
-
-               double IConvertible.ToDouble (IFormatProvider provider)
-               {
-                       return Convert.ToDouble (this);
-               }
-
-               short IConvertible.ToInt16 (IFormatProvider provider)
-               {
-                       return Convert.ToInt16 (this);
-               }
-
-               int IConvertible.ToInt32 (IFormatProvider provider)
-               {
-                       return Convert.ToInt32 (this);
-               }
-
-               long IConvertible.ToInt64 (IFormatProvider provider)
-               {
-                       return Convert.ToInt64 (this);
-               }
-
-               sbyte IConvertible.ToSByte (IFormatProvider provider)
-               {
-                       return Convert.ToSByte (this);
-               }
-
-               float IConvertible.ToSingle (IFormatProvider provider)
-               {
-                       return Convert.ToSingle (this);
-               }
-
-               ushort IConvertible.ToUInt16 (IFormatProvider provider)
-               {
-                       return Convert.ToUInt16 (this);
-               }
-
-               uint IConvertible.ToUInt32 (IFormatProvider provider)
-               {
-                       return Convert.ToUInt32 (this);
-               }
-
-               ulong IConvertible.ToUInt64 (IFormatProvider provider)
-               {
-                       return Convert.ToUInt64 (this);
-               }
-
-               public string ToString (string format, IFormatProvider provider) 
-               {
-                       return NumberFormatter.NumberToString (format, this, provider);
-               }
-
-               public override string ToString () 
-               {
-                       return ToString ("G", null);
-               }
-
-               public string ToString (string format) 
-               {
-                       return ToString (format, null);
-               }
-
-               public string ToString (IFormatProvider provider) 
-               {
-                       return ToString ("G", provider);
-               }
-               
-               void IDeserializationCallback.OnDeserialization(object sender)
-               {
-               }
-
-               // TODO: .net icall
-               internal static int FCallToInt32 (Decimal d)
-               {
-                       // Returned Even-Rounded
-                       return checked ((int) Math.Round (d));
-               }
-
-
-#if !MSTEST
-               [MethodImplAttribute(MethodImplOptions.InternalCall)]
-               private static extern int decimal2UInt64 (ref Decimal val, out ulong result);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)]
-               private static extern int decimal2Int64 (ref Decimal val, out long result);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)]
-               private static extern int double2decimal (out Decimal erg, double val, int digits);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)]
-               private static extern int decimalIncr (ref Decimal d1, ref Decimal d2);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)]
-               internal static extern int string2decimal (out Decimal val, String sDigits, uint decPos, int sign);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)]
-               internal static extern int decimalSetExponent (ref Decimal val, int exp);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)]
-               private static extern double decimal2double (ref Decimal val);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)]
-               private static extern void decimalFloorAndTrunc (ref Decimal val, int floorFlag);
-
-//             [MethodImplAttribute(MethodImplOptions.InternalCall)]
-//             private static extern void decimalRound (ref Decimal val, int decimals);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)]
-               private static extern int decimalMult (ref Decimal pd1, ref Decimal pd2);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)]
-               private static extern int decimalDiv (out Decimal pc, ref Decimal pa, ref Decimal pb);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)]
-               private static extern int decimalIntDiv (out Decimal pc, ref Decimal pa, ref Decimal pb);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)]
-               private static extern int decimalCompare (ref Decimal d1, ref Decimal d2);
-#else
-               //![MethodImplAttribute(MethodImplOptions.InternalCall)]
-               [DllImport("libdec", EntryPoint="decimal2UInt64")]
-               private static extern int decimal2UInt64 (ref Decimal val, out ulong result);
-
-               //![MethodImplAttribute(MethodImplOptions.InternalCall)]
-               [DllImport("libdec", EntryPoint="decimal2Int64")]
-               private static extern int decimal2Int64 (ref Decimal val, out long result);
-
-               //![MethodImplAttribute(MethodImplOptions.InternalCall)]
-               [DllImport("libdec", EntryPoint="double2decimal")]
-               private static extern int double2decimal (out Decimal erg, double val, int digits);
-
-               //![MethodImplAttribute(MethodImplOptions.InternalCall)]
-               [DllImport("libdec", EntryPoint="decimalIncr")]
-               private static extern int decimalIncr (ref Decimal d1, ref Decimal d2);
-
-               //![MethodImplAttribute(MethodImplOptions.InternalCall)]
-               [DllImport("libdec", EntryPoint="string2decimal")]
-               internal static extern int string2decimal (out Decimal val,
-                   [MarshalAs(UnmanagedType.LPWStr)]String sDigits,
-                   uint decPos, int sign);
-
-               //![MethodImplAttribute(MethodImplOptions.InternalCall)]
-               [DllImport("libdec", EntryPoint="decimalSetExponent")]
-               internal static extern int decimalSetExponent (ref Decimal val, int exp);
-
-               //![MethodImplAttribute(MethodImplOptions.InternalCall)]
-               [DllImport("libdec", EntryPoint="decimal2double")]
-               private static extern double decimal2double (ref Decimal val);
-
-               //![MethodImplAttribute(MethodImplOptions.InternalCall)]
-               [DllImport("libdec", EntryPoint="decimalFloorAndTrunc")]
-               private static extern void decimalFloorAndTrunc (ref Decimal val, int floorFlag);
-
-               //![MethodImplAttribute(MethodImplOptions.InternalCall)]
-               [DllImport("libdec", EntryPoint="decimalRound")]
-               private static extern void decimalRound (ref Decimal val, int decimals);
-
-               //![MethodImplAttribute(MethodImplOptions.InternalCall)]
-               [DllImport("libdec", EntryPoint="decimalMult")]
-               private static extern int decimalMult (ref Decimal pd1, ref Decimal pd2);
-
-               //![MethodImplAttribute(MethodImplOptions.InternalCall)]
-               [DllImport("libdec", EntryPoint="decimalDiv")]
-               private static extern int decimalDiv (out Decimal pc, ref Decimal pa, ref Decimal pb);
-
-               //![MethodImplAttribute(MethodImplOptions.InternalCall)]
-               [DllImport("libdec", EntryPoint="decimalIntDiv")]
-               private static extern int decimalIntDiv (out Decimal pc, ref Decimal pa, ref Decimal pb);
-
-               //![MethodImplAttribute(MethodImplOptions.InternalCall)]
-               [DllImport("libdec", EntryPoint="decimalCompare")]
-               private static extern int decimalCompare (ref Decimal d1, ref Decimal d2);
-
-#endif
-       }
-}
index 0a1be9fab19ebdd8e92f1f8c099039f12e5a12ae..9b764637a61ae0a2d83c1e11ed57bbc25ccded4b 100644 (file)
@@ -57,7 +57,7 @@ namespace System {
                 * of icalls, do not require an increment.
                 */
 #pragma warning disable 169
-               private const int mono_corlib_version = 116;
+               private const int mono_corlib_version = 117;
 #pragma warning restore 169
 
                [ComVisible (true)]
diff --git a/mcs/class/corlib/System/Guid.MonoTouch.cs b/mcs/class/corlib/System/Guid.MonoTouch.cs
new file mode 100644 (file)
index 0000000..714bdb6
--- /dev/null
@@ -0,0 +1,25 @@
+#if MONOTOUCH && FULL_AOT_RUNTIME
+
+using Crimson.CommonCrypto;
+
+namespace System
+{
+       partial struct Guid
+       {
+               public static Guid NewGuid ()
+               {
+                       byte[] b = new byte [16];
+                       Cryptor.GetRandom (b);
+
+                       Guid res = new Guid (b);
+                       // Mask in Variant 1-0 in Bit[7..6]
+                       res._d = (byte) ((res._d & 0x3fu) | 0x80u);
+                       // Mask in Version 4 (random based Guid) in Bits[15..13]
+                       res._c = (short) ((res._c & 0x0fffu) | 0x4000u);
+
+                       return res;
+               }
+       }
+}
+
+#endif
\ No newline at end of file
index 630f54b8daa0ec7ed43ac705512df4bc5ae5da55..c528065628cd3c66dbf75a4f6107e067a1e1eeb2 100644 (file)
 // Copyright (C) 2004-2010 Novell, Inc (http://www.novell.com)
 // Copyright 2012, 2014 Xamarin, Inc (http://www.xamarin.com)
 //
-// References
-// 1.  UUIDs and GUIDs (DRAFT), Section 3.4
-//     http://www.ics.uci.edu/~ejw/authoring/uuid-guid/draft-leach-uuids-guids-01.txt 
-//
 // Permission is hereby granted, free of charge, to any person obtaining
 // a copy of this software and associated documentation files (the
 // "Software"), to deal in the Software without restriction, including
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
-using System.Runtime.InteropServices;
-using System.Security.Cryptography;
-using System.Text;
-#if MONOTOUCH && FULL_AOT_RUNTIME
-using Crimson.CommonCrypto;
-#endif
-
-namespace System {
-
-       [Serializable]
-       [StructLayout (LayoutKind.Sequential)]
-       [ComVisible (true)]
-       public struct Guid : IFormattable, IComparable, IComparable<Guid>, IEquatable<Guid> {
-#if MONOTOUCH
-               static Guid () {
-                       if (MonoTouchAOTHelper.FalseFlag) {
-                               var comparer = new System.Collections.Generic.GenericComparer <Guid> ();
-                               var eqcomparer = new System.Collections.Generic.GenericEqualityComparer <Guid> ();
-                       }
-               }
-#endif
-               private int _a; //_timeLow;
-               private short _b; //_timeMid;
-               private short _c; //_timeHighAndVersion;
-               private byte _d; //_clockSeqHiAndReserved;
-               private byte _e; //_clockSeqLow;
-               private byte _f; //_node0;
-               private byte _g; //_node1;
-               private byte _h; //_node2;
-               private byte _i; //_node3;
-               private byte _j; //_node4;
-               private byte _k; //_node5;
-
-               enum Format {
-                       N, // 00000000000000000000000000000000
-                       D, // 00000000-0000-0000-0000-000000000000
-                       B, // {00000000-0000-0000-0000-000000000000}
-                       P, // (00000000-0000-0000-0000-000000000000)
-                       X, // {0x00000000,0x0000,0x0000,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}}
-               }
-
-               struct GuidParser
-               {
-                       private string _src;
-                       private int _length;
-                       private int _cur;
-
-                       public GuidParser (string src)
-                       {
-                               _src = src.Trim ();
-                               _cur = 0;
-                               _length = _src.Length;
-                       }
-
-                       void Reset ()
-                       {
-                               _cur = 0;
-                               _length = _src.Length;
-                       }
-
-                       bool Eof {
-                               get { return _cur >= _length; }
-                       }
-
-                       public static bool HasHyphen (Format format)
-                       {
-                               switch (format) {
-                               case Format.D:
-                               case Format.B:
-                               case Format.P:
-                                       return true;
-                               default:
-                                       return false;
-                               }
-                       }
-
-                       bool TryParseNDBP (Format format, out Guid guid)
-                       {
-                               ulong a, b, c;
-                               guid = new Guid ();
-
-                               if (format == Format.B && !ParseChar ('{'))
-                                       return false;
-
-                               if (format == Format.P && !ParseChar ('('))
-                                       return false;
-
-                               if (!ParseHex (8, true, out a))
-                                       return false;
-
-                               var has_hyphen = HasHyphen (format);
-
-                               if (has_hyphen && !ParseChar ('-'))
-                                       return false;
-
-                               if (!ParseHex (4, true, out b))
-                                       return false;
-
-                               if (has_hyphen && !ParseChar ('-'))
-                                       return false;
-
-                               if (!ParseHex (4, true, out c))
-                                       return false;
-
-                               if (has_hyphen && !ParseChar ('-'))
-                                       return false;
-
-                               var d = new byte [8];
-                               for (int i = 0; i < d.Length; i++) {
-                                       ulong dd;
-                                       if (!ParseHex (2, true, out dd))
-                                               return false;
-
-                                       if (i == 1 && has_hyphen && !ParseChar ('-'))
-                                               return false;
-
-                                       d [i] = (byte) dd;
-                               }
-
-                               if (format == Format.B && !ParseChar ('}'))
-                                       return false;
-
-                               if (format == Format.P && !ParseChar (')'))
-                                       return false;
-
-                               if (!Eof)
-                                       return false;
-
-                               guid = new Guid ((int) a, (short) b, (short) c, d);
-                               return true;
-                       }
-
-                       bool TryParseX (out Guid guid)
-                       {
-                               ulong a, b, c;
-                               guid = new Guid ();
-
-                               if (!(ParseChar ('{')
-                                       && ParseHexPrefix ()
-                                       && ParseHex (8, false, out a)
-                                       && ParseCharWithWhiteSpaces (',')
-                                       && ParseHexPrefix ()
-                                       && ParseHex (4, false, out b)
-                                       && ParseCharWithWhiteSpaces (',')
-                                       && ParseHexPrefix ()
-                                       && ParseHex (4, false, out c)
-                                       && ParseCharWithWhiteSpaces (',')
-                                       && ParseCharWithWhiteSpaces ('{'))) {
-
-                                       return false;
-                               }
-
-                               var d = new byte [8];
-                               for (int i = 0; i < d.Length; ++i) {
-                                       ulong dd;
-
-                                       if (!(ParseHexPrefix () && ParseHex (2, false, out dd)))
-                                               return false;
-
-                                       d [i] = (byte) dd;
-
-                                       if (i != 7 && !ParseCharWithWhiteSpaces (','))
-                                               return false;
-                               }
-
-                               if (!(ParseCharWithWhiteSpaces ('}') && ParseCharWithWhiteSpaces ('}')))
-                                       return false;
-
-                               if (!Eof)
-                                       return false;
-
-                               guid = new Guid ((int) a, (short) b, (short) c, d);
-                               return true;
-                       }
-
-                       bool ParseHexPrefix ()
-                       {
-                               // It can be prefixed with whitespaces
-                               for (; _cur < _length - 1; ++_cur) {
-                                       var ch = _src [_cur];
-                                       if (ch == '0') {
-                                               ++_cur;
-                                               return _src [_cur++] == 'x';
-                                       }
-
-                                       if (!char.IsWhiteSpace (ch))
-                                               break;
-                               }
-
-                               return false;
-                       }
-
-                       bool ParseCharWithWhiteSpaces (char c)
-                       {
-                               while (!Eof) {
-                                       var ch = _src [_cur++];
-                                       if (ch == c)
-                                               return true;
-
-                                       if (!char.IsWhiteSpace (ch))
-                                               break;
-                               }
-
-                               return false;
-                       }
-
-                       bool ParseChar (char c)
-                       {
-                               if (!Eof && _src [_cur] == c) {
-                                       _cur++;
-                                       return true;
-                               }
-
-                               return false;
-                       }
-
-                       bool ParseHex (int length, bool strict, out ulong res)
-                       {
-                               res = 0;
-
-                               for (int i = 0; i < length; i++) {
-                                       if (Eof)
-                                               return !(strict && (i + 1 != length));
-
-                                       char c = _src [_cur];
-                                       if (Char.IsDigit (c)) {
-                                               res = res * 16 + c - '0';
-                                               _cur++;
-                                               continue;
-                                       }
-
-                                       if (c >= 'a' && c <= 'f') {
-                                               res = res * 16 + c - 'a' + 10;
-                                               _cur++;
-                                               continue;
-                                       }
-
-                                       if (c >= 'A' && c <= 'F') {
-                                               res = res * 16 + c - 'A' + 10;
-                                               _cur++;
-                                               continue;
-                                       }
-
-                                       if (!strict)
-                                               return true;
-
-                                       return false; //!(strict && (i + 1 != length));
-                               }
-
-                               return true;
-                       }
-
-                       public bool Parse (Format format, out Guid guid)
-                       {
-                               if (format == Format.X)
-                                       return TryParseX (out guid);
-
-                               return TryParseNDBP (format, out guid);
-                       }
-
-                       public bool Parse (out Guid guid)
-                       {
-                               switch (_length) {
-                               case 32:
-                                       if (TryParseNDBP (Format.N, out guid))
-                                               return true;
-                                       break;
-                               case 36:
-                                       if (TryParseNDBP (Format.D, out guid))
-                                               return true;
-                                       break;
-                               case 38:
-                                       switch (_src [0]) {
-                                       case '{':
-                                               if (TryParseNDBP (Format.B, out guid))
-                                                       return true;
-                                               break;
-                                       case '(':
-                                               if (TryParseNDBP (Format.P, out guid))
-                                                       return true;
-                                               break;
-                                       }
-                                       break;
-                               }
-
-                               Reset ();
-                               return TryParseX (out guid);
-                       }
-               }
-
-               private static void CheckNull (object o)
-               {
-                       if (o == null) {
-                               throw new ArgumentNullException (Locale.GetText ("Value cannot be null."));
-                       }
-               }
-
-               private static void CheckLength (byte[] o, int l)
-               {
-                       if (o . Length != l) {
-                               throw new ArgumentException (String.Format (Locale.GetText ("Array should be exactly {0} bytes long."), l));
-                       }
-               }
-
-               private static void CheckArray (byte[] o, int l)
-               {
-                       CheckNull (o);
-                       CheckLength (o, l);
-               }
-
-               public Guid (byte[] b)
-               {
-                       CheckArray (b, 16);
-                       _a = Mono.Security.BitConverterLE.ToInt32 (b, 0);
-                       _b = Mono.Security.BitConverterLE.ToInt16 (b, 4);
-                       _c = Mono.Security.BitConverterLE.ToInt16 (b, 6);
-                       _d = b [8];
-                       _e = b [9];
-                       _f = b [10];
-                       _g = b [11];
-                       _h = b [12];
-                       _i = b [13];
-                       _j = b [14];
-                       _k = b [15];
-               }
-
-               public Guid (string g)
-               {
-                       CheckNull (g);
-                       Guid guid;
-                       if (!new GuidParser (g).Parse (out guid))
-                               throw CreateFormatException (g);
-
-                       this = guid;
-               }
-
-               static Exception CreateFormatException (string s)
-               {
-                       return new FormatException (string.Format ("Invalid Guid format: {0}", s));
-               }
-
-               public Guid (int a, short b, short c, byte[] d)
-               {
-                       CheckArray (d, 8);
-                       _a = (int) a;
-                       _b = (short) b;
-                       _c = (short) c;
-                       _d = d [0];
-                       _e = d [1];
-                       _f = d [2];
-                       _g = d [3];
-                       _h = d [4];
-                       _i = d [5];
-                       _j = d [6];
-                       _k = d [7];
-               }
-
-               public Guid (int a, short b, short c, byte d, byte e, byte f, byte g, byte h, byte i, byte j, byte k)
-               {
-                       _a = a;
-                       _b = b;
-                       _c = c;
-                       _d = d;
-                       _e = e;
-                       _f = f;
-                       _g = g;
-                       _h = h;
-                       _i = i;
-                       _j = j;
-                       _k = k;
-               }
-
-               [CLSCompliant (false)]
-               public Guid (uint a, ushort b, ushort c, byte d, byte e, byte f, byte g, byte h, byte i, byte j, byte k)
-                       : this((int) a, (short) b, (short) c, d, e, f, g, h, i, j, k)
-               {
-               }
-
-               public static readonly Guid Empty = new Guid (0,0,0,0,0,0,0,0,0,0,0);
-
-               private static int Compare (int x, int y)
-               {
-                       return ((uint)x < (uint)y) ? -1 : 1;
-               }
-
-               public int CompareTo (object value)
-               {
-                       if (value == null)
-                               return 1;
-
-                       if (!(value is Guid)) {
-                               throw new ArgumentException ("value", Locale.GetText (
-                                       "Argument of System.Guid.CompareTo should be a Guid."));
-                       }
-
-                       return CompareTo ((Guid)value);
-               }
-
-               public override bool Equals (object o)
-               {
-                       if (o is Guid)
-                               return CompareTo ((Guid)o) == 0;
-                       return false;
-               }
-
-               public int CompareTo (Guid value)
-               {
-                       if (_a != value._a) {
-                               return Compare (_a, value._a);
-                       }
-                       if (_b != value._b) {
-                               return Compare (_b, value._b);
-                       }
-                       if (_c != value._c) {
-                               return Compare (_c, value._c);
-                       }
-                       if (_d != value._d) {
-                               return Compare (_d, value._d);
-                       }
-                       if (_e != value._e) {
-                               return Compare (_e, value._e);
-                       }
-                       if (_f != value._f) {
-                               return Compare (_f, value._f);
-                       }
-                       if (_g != value._g) {
-                               return Compare (_g, value._g);
-                       }
-                       if (_h != value._h) {
-                               return Compare (_h, value._h);
-                       }
-                       if (_i != value._i) {
-                               return Compare (_i, value._i);
-                       }
-                       if (_j != value._j) {
-                               return Compare (_j, value._j);
-                       }
-                       if (_k != value._k) {
-                               return Compare (_k, value._k);
-                       }
-                       return 0;
-               }
-
-               public bool Equals (Guid g)
-               {
-                       return CompareTo (g) == 0;
-               }
-
-               public override int GetHashCode ()
-               {
-                       int res;
-       
-                       res = (int) _a; 
-                       res = res ^ ((int) _b << 16 | _c);
-                       res = res ^ ((int) _d << 24);
-                       res = res ^ ((int) _e << 16);
-                       res = res ^ ((int) _f << 8);
-                       res = res ^ ((int) _g);
-                       res = res ^ ((int) _h << 24);
-                       res = res ^ ((int) _i << 16);
-                       res = res ^ ((int) _j << 8);
-                       res = res ^ ((int) _k);
-
-                       return res;
-               }
+#if !FULL_AOT_RUNTIME
 
-               private static char ToHex (int b)
-               {
-                       return (char)((b<0xA)?('0' + b):('a' + b - 0xA));
-               }
+using System.Security.Cryptography;
 
-#if !FULL_AOT_RUNTIME
+namespace System
+{
+       partial struct Guid
+       {
                private static object _rngAccess = new object ();
                private static RandomNumberGenerator _rng;
                private static RandomNumberGenerator _fastRng;
-#endif
 
-#if FULL_AOT_RUNTIME && !MONOTOUCH
-               // NSA approved random generator.
-               static void LameRandom (byte [] b)
-               {
-                       var r = new Random ();
-                       r.NextBytes (b);
-               }
-#endif
-               
-               // generated as per section 3.4 of the specification
                public static Guid NewGuid ()
                {
                        byte[] b = new byte [16];
-#if !FULL_AOT_RUNTIME
                        // thread-safe access to the prng
                        lock (_rngAccess) {
                                if (_rng == null)
                                        _rng = RandomNumberGenerator.Create ();
                                _rng.GetBytes (b);
                        }
-#elif MONOTOUCH
-                       Cryptor.GetRandom (b);
-#else
-                       LameRandom (b);
-#endif
 
                        Guid res = new Guid (b);
                        // Mask in Variant 1-0 in Bit[7..6]
@@ -547,7 +62,6 @@ namespace System {
                        return res;
                }
 
-#if !FULL_AOT_RUNTIME
                // used in ModuleBuilder so mcs doesn't need to invoke 
                // CryptoConfig for simple assemblies.
                internal static byte[] FastNewGuidArray ()
@@ -572,258 +86,7 @@ namespace System {
 
                        return guid;
                }
-#endif
-               public byte[] ToByteArray ()
-               {
-                       byte[] res = new byte[16];
-                       byte[] tmp;
-                       int d = 0;
-                       int s;
-
-                       tmp = Mono.Security.BitConverterLE.GetBytes(_a);
-                       for (s=0; s<4; ++s) {
-                               res[d++] = tmp[s];
-                       }
-
-                       tmp = Mono.Security.BitConverterLE.GetBytes(_b);
-                       for (s=0; s<2; ++s) {
-                               res[d++] = tmp[s];
-                       }
-
-                       tmp = Mono.Security.BitConverterLE.GetBytes(_c);
-                       for (s=0; s<2; ++s) {
-                               res[d++] = tmp[s];
-                       }
-
-                       res[8] = _d;
-                       res[9] = _e;
-                       res[10] = _f;
-                       res[11] = _g;
-                       res[12] = _h;
-                       res[13] = _i;
-                       res[14] = _j;
-                       res[15] = _k;
-
-                       return res;
-               }
-
-               static void AppendInt (StringBuilder builder, int value) {
-                       builder.Append (ToHex ((value >> 28) & 0xf));
-                       builder.Append (ToHex ((value >> 24) & 0xf));
-                       builder.Append (ToHex ((value >> 20) & 0xf));
-                       builder.Append (ToHex ((value >> 16) & 0xf));
-                       builder.Append (ToHex ((value >> 12) & 0xf));
-                       builder.Append (ToHex ((value >> 8) & 0xf));
-                       builder.Append (ToHex ((value >> 4) & 0xf));
-                       builder.Append (ToHex (value & 0xf));
-               }
-
-               static void AppendShort (StringBuilder builder, short value) {
-                       builder.Append (ToHex ((value >> 12) & 0xf));
-                       builder.Append (ToHex ((value >> 8) & 0xf));
-                       builder.Append (ToHex ((value >> 4) & 0xf));
-                       builder.Append (ToHex (value & 0xf));
-               }
-
-               static void AppendByte (StringBuilder builder, byte value) {
-                       builder.Append (ToHex ((value >> 4) & 0xf));
-                       builder.Append (ToHex (value & 0xf));
-               }
-
-               string ToString (Format format)
-               {
-                       int length;
-                       switch (format) {
-                       case Format.B:
-                       case Format.P:
-                               length = 38;
-                               break;
-                       case Format.D:
-                               length = 36;
-                               break;
-                       case Format.N:
-                               length = 32;
-                               break;
-                       case Format.X:
-                               length = 68;
-                               break;          
-                       default:
-                               throw new NotImplementedException (format.ToString ());
-                       }
-                       
-                       StringBuilder res = new StringBuilder (length);
-                       bool has_hyphen = GuidParser.HasHyphen (format);
-                       
-                       if (format == Format.P) {
-                               res.Append ('(');
-                       } else if (format == Format.B) {
-                               res.Append ('{');
-                       } else if (format == Format.X) {
-                               res.Append ('{').Append ('0').Append ('x');
-                       }
-               
-                       AppendInt (res, _a);
-                       if (has_hyphen) {
-                               res.Append ('-');
-                       } else if (format == Format.X) {
-                               res.Append (',').Append ('0').Append ('x');
-                       }
-                       
-                       AppendShort (res, _b);
-                       if (has_hyphen) {
-                               res.Append ('-');
-                       } else if (format == Format.X) {
-                               res.Append (',').Append ('0').Append ('x');
-                       }
-
-                       AppendShort (res, _c);
-                       if (has_hyphen) {
-                               res.Append ('-');
-                       }
-       
-                       if (format == Format.X) {
-                               res.Append (',').Append ('{').Append ('0').Append ('x');
-                               AppendByte (res, _d);
-                               res.Append (',').Append ('0').Append ('x');
-                               AppendByte (res, _e);
-                               res.Append (',').Append ('0').Append ('x');
-                               AppendByte (res, _f);
-                               res.Append (',').Append ('0').Append ('x');
-                               AppendByte (res, _g);
-                               res.Append (',').Append ('0').Append ('x');
-                               AppendByte (res, _h);
-                               res.Append (',').Append ('0').Append ('x');
-                               AppendByte (res, _i);
-                               res.Append (',').Append ('0').Append ('x');
-                               AppendByte (res, _j);
-                               res.Append (',').Append ('0').Append ('x');
-                               AppendByte (res, _k);
-                               res.Append ('}').Append ('}');;
-                       } else {
-                               AppendByte (res, _d);
-                               AppendByte (res, _e);
-       
-                               if (has_hyphen) {
-                                       res.Append ('-');
-                               }
-       
-                               AppendByte (res, _f);
-                               AppendByte (res, _g);
-                               AppendByte (res, _h);
-                               AppendByte (res, _i);
-                               AppendByte (res, _j);
-                               AppendByte (res, _k);
-       
-                               if (format == Format.P) {
-                                       res.Append (')');
-                               } else if (format == Format.B) {
-                                       res.Append ('}');
-                               }
-                       }
-               
-                       return res.ToString ();
-               }
-       
-               public override string ToString ()
-               {
-                       return ToString (Format.D);
-               }
-       
-               public string ToString (string format)
-               {
-                       return ToString (ParseFormat (format));
-               }
-
-               // provider value is never used
-               public string ToString (string format, IFormatProvider provider)
-               {
-                       return ToString (format);
-               }
-
-               public static bool operator == (Guid a, Guid b)
-               {
-                       return a.Equals(b);
-               }
-
-               public static bool operator != (Guid a, Guid b)
-               {
-                       return !( a.Equals (b) );
-               }
-
-               public static Guid Parse (string input)
-               {
-                       if (input == null)
-                               throw new ArgumentNullException ("input");
-
-                       Guid guid;
-                       if (!TryParse (input, out guid))
-                               throw CreateFormatException (input);
-
-                       return guid;
-               }
-
-               public static Guid ParseExact (string input, string format)
-               {
-                       if (input == null)
-                               throw new ArgumentNullException ("input");
-                       if (format == null)
-                               throw new ArgumentNullException ("format");
-
-                       Guid guid;
-                       if (!TryParseExact (input, format, out guid))
-                               throw CreateFormatException (input);
-
-                       return guid;
-               }
-
-               public static bool TryParse (string input, out Guid result)
-               {
-                       if (input == null) {
-                               result = Empty;
-                               return false;
-                       }
-
-                       var parser = new GuidParser (input);
-                       return parser.Parse (out result);
-               }
-
-               public static bool TryParseExact (string input, string format, out Guid result)
-               {
-                       if (input == null || format == null) {
-                               result = Empty;
-                               return false;
-                       }
-
-                       var parser = new GuidParser (input);
-                       return parser.Parse (ParseFormat (format), out result);
-               }
-
-               static Format ParseFormat (string format)
-               {
-                       if (string.IsNullOrEmpty (format))
-                               return Format.D;
-                       
-                       switch (format [0]) {
-                       case 'N':
-                       case 'n':
-                               return Format.N;
-                       case 'D':
-                       case 'd':
-                               return Format.D;
-                       case 'B':
-                       case 'b':
-                               return Format.B;
-                       case 'P':
-                       case 'p':
-                               return Format.P;
-                       case 'X':
-                       case 'x':
-                               return Format.X;
-                       }
-
-                       throw new FormatException (
-                               "Format String can be only one of \"D\", \"d\", \"N\", \"n\", \"P\", \"p\", \"B\", \"b\", \"X\" or \"x\""
-                               );
-               }
        }
 }
+
+#endif
\ No newline at end of file
diff --git a/mcs/class/corlib/System/MemberAccessException.cs b/mcs/class/corlib/System/MemberAccessException.cs
deleted file mode 100644 (file)
index 5504dc2..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-//
-// System.MemberAccessException.cs
-//
-// Author:
-//   Andreas Nahr (ClassDevelopment@A-SoftTech.com)
-//
-
-//
-// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System.Runtime.Serialization;
-using System.Runtime.InteropServices;
-
-namespace System
-{
-       [Serializable]
-       [ComVisible (true)]
-       public class MemberAccessException : SystemException
-       {
-               const int Result = unchecked ((int)0x8013151A);
-
-               public MemberAccessException ()
-                       : base (Locale.GetText ("Cannot access a class member."))
-               {
-                       HResult = Result;
-               }
-
-               public MemberAccessException (string message)
-                       : base (message)
-               {
-                       HResult = Result;
-               }
-
-               protected MemberAccessException (SerializationInfo info, StreamingContext context)
-                       : base (info, context)
-               {
-               }
-               
-               public MemberAccessException (string message, Exception inner)
-                       : base (message, inner)
-               {
-                       HResult = Result;
-               }
-       }
-}
diff --git a/mcs/class/corlib/System/MethodAccessException.cs b/mcs/class/corlib/System/MethodAccessException.cs
deleted file mode 100644 (file)
index ea2a1e6..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-//     
-// System.MethodAccessException.cs
-//
-// Authors:
-//   Duncan Mak (duncan@ximian.com)
-//   Andreas Nahr (ClassDevelopment@A-SoftTech.com)
-//
-// 2002 (C) Ximian, Inc. http://www.ximian.com
-//
-
-//
-// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System.Runtime.Serialization;
-using System.Runtime.InteropServices;
-
-namespace System
-{
-       [Serializable]
-       [ComVisible (true)]
-       public class MethodAccessException : MemberAccessException
-       {
-               const int Result = unchecked ((int)0x80131510);
-
-               // Constructors
-               public MethodAccessException ()
-                       : base (Locale.GetText ("Attempt to access a private/protected method failed."))
-               {
-                       HResult = Result;
-               }
-
-               public MethodAccessException (string message)
-                       : base (message)
-               {
-                       HResult = Result;
-               }
-
-               protected MethodAccessException (SerializationInfo info, StreamingContext context)
-                       : base (info, context)
-               {
-               }
-
-               public MethodAccessException (string message, Exception inner)
-                       :base (message, inner)
-               {
-                       HResult = Result;
-               }
-       }
-}
diff --git a/mcs/class/corlib/System/MidpointRounding.cs b/mcs/class/corlib/System/MidpointRounding.cs
deleted file mode 100644 (file)
index caea9cd..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-//
-// System.MidpointRounding.cs
-//
-// Copyright (C) 2004-2005 Novell (http://www.novell.com)
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-
-using System.Runtime.InteropServices;
-
-namespace System
-{
-       [ComVisible (true)]
-       public enum MidpointRounding
-       {
-               ToEven = 0,
-               AwayFromZero = 1
-       }
-}
diff --git a/mcs/class/corlib/System/MissingFieldException.cs b/mcs/class/corlib/System/MissingFieldException.cs
deleted file mode 100644 (file)
index 8963138..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-//     
-// System.MissingFieldException.cs
-//
-// Authors:
-//   Duncan Mak (duncan@ximian.com)
-//   Andreas Nahr (ClassDevelopment@A-SoftTech.com)
-//
-// 2002 (C) Ximian, Inc. http://www.ximian.com
-//
-
-//
-// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System.Runtime.Serialization;
-using System.Runtime.InteropServices;
-
-namespace System
-{
-       [Serializable]
-       [ComVisible (true)]
-       public class MissingFieldException : MissingMemberException
-       {
-               const int Result = unchecked ((int)0x80131511);
-
-               // Constructors
-               public MissingFieldException ()
-                       : base (Locale.GetText ("Cannot find requested field."))
-               {
-                       HResult = Result;
-               }
-
-               public MissingFieldException (string message)
-                       : base (message)
-               {
-                       HResult = Result;
-               }
-
-               protected MissingFieldException (SerializationInfo info, StreamingContext context)
-                       : base (info, context)
-               {
-               }
-
-               public MissingFieldException (string message, Exception inner)
-                       : base (message, inner)
-               {
-                       HResult = Result;
-               }
-
-               public MissingFieldException (string className, string fieldName)
-                       : base (className, fieldName)
-               {
-                       HResult = Result;
-               }
-
-               public override string Message {
-                       get {
-                               if (ClassName == null)
-                                       return base.Message;
-
-                               String msg = Locale.GetText ("Field '{0}.{1}' not found.");
-                               return String.Format (msg, ClassName, MemberName);
-                       }
-               }
-       }
-}
diff --git a/mcs/class/corlib/System/MissingMemberException.cs b/mcs/class/corlib/System/MissingMemberException.cs
deleted file mode 100644 (file)
index 86a9429..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
-//
-// System.MissingMemberException.cs
-//
-// Authors:
-//   Duncan Mak (duncan@ximian.com)
-//   Andreas Nahr (ClassDevelopment@A-SoftTech.com)
-//
-// (C) Ximian, Inc. http://www.ximian.com
-//
-
-//
-// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System.Runtime.Serialization;
-using System.Runtime.InteropServices;
-
-namespace System
-{
-       [Serializable]
-       [ComVisible (true)]
-       public class MissingMemberException : MemberAccessException
-       {
-               const int Result = unchecked ((int)0x80131512);
-
-               // Fields
-               protected string ClassName;
-               protected string MemberName;
-               protected byte[] Signature;
-
-               public MissingMemberException ()
-                       : base (Locale.GetText ("Cannot find the requested class member."))
-               {
-                       HResult = Result;
-               }
-
-               public MissingMemberException (string message)
-                       : base (message)
-               {
-                       HResult = Result;
-               }
-
-               public MissingMemberException (string message, Exception inner)
-                       : base (message, inner)
-               {
-                       HResult = Result;
-               }
-
-               protected MissingMemberException (SerializationInfo info, StreamingContext context)
-                       : base (info, context)
-               {
-                       ClassName = info.GetString ("MMClassName");
-                       MemberName = info.GetString ("MMMemberName");
-                       Signature = (byte[]) info.GetValue ("MMSignature", typeof(byte[]));
-               }
-
-               public MissingMemberException (string className, string memberName)
-               {
-                       ClassName = className;
-                       MemberName = memberName;
-                       HResult = Result;
-               }
-
-               // Methods
-               public override void GetObjectData (SerializationInfo info, StreamingContext context)
-               {
-                       base.GetObjectData (info, context);
-                       info.AddValue ("MMClassName", ClassName);
-                       info.AddValue ("MMMemberName", MemberName);
-                       info.AddValue ("MMSignature", Signature);
-               }
-
-               public override string Message {
-                       get {
-                               if (ClassName == null)
-                                       return base.Message;
-
-                               String msg = Locale.GetText ("Member {0}.{1} not found.");
-                               return String.Format (msg, ClassName, MemberName);
-                       }
-               }
-       }
-}
diff --git a/mcs/class/corlib/System/MissingMethodException.cs b/mcs/class/corlib/System/MissingMethodException.cs
deleted file mode 100644 (file)
index eb66cf5..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-//
-// System.MissingMethodException.cs
-//
-// Author:
-//   Andreas Nahr (ClassDevelopment@A-SoftTech.com)
-//
-
-//
-// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System.Runtime.Serialization;
-using System.Runtime.InteropServices;
-
-namespace System
-{
-       [Serializable]
-       [ComVisible (true)]
-       public class MissingMethodException : MissingMemberException
-       {
-               const int Result = unchecked ((int)0x80131513);
-
-               public MissingMethodException ()
-                       : base (Locale.GetText ("Cannot find the requested method."))
-               {
-                       HResult = Result;
-               }
-
-               public MissingMethodException (string message)
-                       : base (message)
-               {
-                       HResult = Result;
-               }
-
-               protected MissingMethodException (SerializationInfo info, StreamingContext context)
-                       : base (info, context)
-               {
-               }
-
-               public MissingMethodException (string message, Exception inner)
-                       : base (message, inner)
-               {
-                       HResult = Result;
-               }
-
-               public MissingMethodException (string className, string methodName)
-                       : base (className, methodName)
-               {
-                       HResult = Result;
-               }
-
-               public override string Message {
-                       get {
-                               if (ClassName == null)
-                                       return base.Message;
-
-                               String msg = Locale.GetText ("Method not found: '{0}.{1}'.");
-                               return String.Format (msg, ClassName, MemberName);
-                       }
-               }
-       }
-}
index b7e0ee70e00bc72ee57e9e387672c9584192b6dc..d415645f5e2039d2016bef7d664b39f53a4ed2d3 100644 (file)
@@ -51,7 +51,16 @@ namespace System
                
        abstract class RuntimeType : TypeInfo
        {
+               internal RuntimeAssembly GetRuntimeAssembly ()
+               {
+                       return (RuntimeAssembly) Assembly;
+               }
 
+               internal virtual bool IsSzArray {
+                       get {
+                               return IsArrayImpl () && GetArrayRank () == 1;
+                       }
+               }
        }
 
        [Serializable]
@@ -656,7 +665,7 @@ namespace System
 
                public void GetObjectData(SerializationInfo info, StreamingContext context)
                {
-                       UnitySerializationHolder.GetTypeData (this, info, context);
+                       UnitySerializationHolder.GetUnitySerializationInfo(info, this);
                }
 
                public override string ToString()
diff --git a/mcs/class/corlib/System/Random.cs b/mcs/class/corlib/System/Random.cs
deleted file mode 100644 (file)
index 0bf5c74..0000000
+++ /dev/null
@@ -1,146 +0,0 @@
-//
-// System.Random.cs
-//
-// Authors:
-//   Bob Smith (bob@thestuff.net)
-//   Ben Maurer (bmaurer@users.sourceforge.net)
-//   Sebastien Pouliot  <sebastien@xamarin.com>
-//
-// (C) 2001 Bob Smith.  http://www.thestuff.net
-// (C) 2003 Ben Maurer
-// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
-// Copyright 2013 Xamarin Inc. (http://www.xamarin.com)
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-using System.Runtime.InteropServices;
-
-namespace System
-{
-       [Serializable]
-       [ComVisible (true)]
-       public class Random
-       {
-               uint x;
-               uint y;
-               uint z;
-               uint c;
-
-               public Random ()
-                       : this (Environment.TickCount)
-               {
-               }
-
-               public Random (int Seed)
-               {
-                       x = (uint) Seed;
-                       y = (uint) 987654321;
-                       z = (uint) 43219876;
-                       c = (uint) 6543217;
-               }
-
-               uint JKiss ()
-               {
-                       x = 314527869 * x + 1234567;
-                       y ^= y << 5;
-                       y ^= y >> 7;
-                       y ^= y << 22;
-                       ulong t = ((ulong) 4294584393 * z + c);
-                       c = (uint) (t >> 32);
-                       z = (uint) t;
-                       return (x + y + z);
-               }
-
-               public virtual int Next (int minValue, int maxValue)
-               {
-                       if (minValue > maxValue)
-                               throw new ArgumentOutOfRangeException ("Maximum value is less than minimal value.");
-
-                       // special case: a difference of one (or less) will always return the minimum
-                       // e.g. -1,-1 or -1,0 will always return -1
-                       uint diff = (uint) (maxValue - minValue);
-                       if (diff <= 1)
-                               return minValue;
-
-                       return minValue + ((int) (JKiss () % diff));
-               }
-
-               public virtual int Next (int maxValue)
-               {
-                       if (maxValue < 0)
-                               throw new ArgumentOutOfRangeException ("Maximum value is less than minimal value.");
-
-                       return maxValue > 0 ? (int)(JKiss () % maxValue) : 0;
-               }
-
-               public virtual int Next ()
-               {
-                       // returns a non-negative, [0 - Int32.MacValue], random number
-                       // but we want to avoid calls to Math.Abs (call cost and branching cost it requires)
-                       // and the fact it would throw for Int32.MinValue (so roughly 1 time out of 2^32)
-                       int random = (int) JKiss ();
-                       while (random == Int32.MinValue)
-                               random = (int) JKiss ();
-                       int mask = random >> 31;
-                       random ^= mask;
-                       return random + (mask & 1);
-               }
-
-               public virtual void NextBytes (byte [] buffer)
-               {
-                       if (buffer == null)
-                               throw new ArgumentNullException ("buffer");
-
-                       // each random `int` can fill 4 bytes
-                       int p = 0;
-                       uint random;
-                       for (int i = 0; i < (buffer.Length >> 2); i++) {
-                               random = JKiss ();
-                               buffer [p++] = (byte) (random >> 24);
-                               buffer [p++] = (byte) (random >> 16);
-                               buffer [p++] = (byte) (random >> 8);
-                               buffer [p++] = (byte) random;
-                       }
-                       if (p == buffer.Length)
-                               return;
-
-                       // complete the array
-                       random = JKiss ();
-                       while (p < buffer.Length) {
-                               buffer [p++] = (byte) random;
-                               random >>= 8;
-                       }
-               }
-
-               public virtual double NextDouble ()
-               {
-                       // return a double value between [0,1]
-                       return Sample ();
-               }
-
-               protected virtual double Sample ()
-               {
-                       // a single 32 bits random value is not enough to create a random double value
-                       uint a = JKiss () >> 6; // Upper 26 bits
-                       uint b = JKiss () >> 5; // Upper 27 bits
-                       return (a * 134217728.0 + b) / 9007199254740992.0;
-               }
-       }
-}
\ No newline at end of file
index 42ba5d91bfc007c2b966e4751c3c21409b8ec739..fcef4169705e4ffa0a64bf24a6b516780e70b0f6 100644 (file)
@@ -51,6 +51,7 @@ using System.Runtime.ConstrainedExecution;
 using System.Runtime.InteropServices;
 using Mono.Globalization.Unicode;
 
+using System.Diagnostics.Contracts;
 
 namespace System
 {
@@ -3222,5 +3223,51 @@ namespace System
 
                [MethodImplAttribute (MethodImplOptions.InternalCall)]
                private extern static int GetLOSLimit ();
+
+#region "from referencesource" // and actually we replaced some parts.
+
+        // Helper for encodings so they can talk to our buffer directly
+        // stringLength must be the exact size we'll expect
+        [System.Security.SecurityCritical]  // auto-generated
+        unsafe static internal String CreateStringFromEncoding(
+            byte* bytes, int byteLength, Encoding encoding)
+        {
+            Contract.Requires(bytes != null);
+            Contract.Requires(byteLength >= 0);
+
+            // Get our string length
+            int stringLength = encoding.GetCharCount(bytes, byteLength, null);
+            Contract.Assert(stringLength >= 0, "stringLength >= 0");
+            
+            // They gave us an empty string if they needed one
+            // 0 bytelength might be possible if there's something in an encoder
+            if (stringLength == 0)
+                return String.Empty;
+            
+            String s = FastAllocateString(stringLength);
+            fixed(char* pTempChars = &s.start_char)
+            {
+                int doubleCheck = encoding.GetChars(bytes, byteLength, pTempChars, stringLength, null);
+                Contract.Assert(stringLength == doubleCheck, 
+                    "Expected encoding.GetChars to return same length as encoding.GetCharCount");
+            }
+
+            return s;
+        }
+
+               // our own implementation for CLR icall.
+               unsafe internal static int nativeCompareOrdinalIgnoreCaseWC (string name, sbyte *strBBytes)
+               {
+                       for (int i = 0; i < name.Length; i++) {
+                               sbyte b = *(strBBytes + i);
+                               if (b < 0)
+                                       throw new ArgumentException ();
+                               int ret = char.ToUpper ((char) b) - char.ToUpper (name [i]);
+                               if (ret != 0)
+                                       return ret;
+                       }
+                       return 0;
+               }
+#endregion
        }
 }
diff --git a/mcs/class/corlib/System/TimeSpan.cs b/mcs/class/corlib/System/TimeSpan.cs
deleted file mode 100644 (file)
index 007599e..0000000
+++ /dev/null
@@ -1,1464 +0,0 @@
-//
-// System.TimeSpan.cs
-//
-// Authors:
-//   Duco Fijma (duco@lorentz.xs4all.nl)
-//   Andreas Nahr (ClassDevelopment@A-SoftTech.com)
-//   Sebastien Pouliot  <sebastien@ximian.com>
-//   Marek Safar (marek.safar@gmail.com)
-//
-// (C) 2001 Duco Fijma
-// (C) 2004 Andreas Nahr
-// Copyright (C) 2004 Novell (http://www.novell.com)
-// Copyright (C) 2014 Xamarin Inc (http://www.xamarin.com)
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System.Text;
-using System.Threading;
-using System.Globalization;
-
-namespace System
-{
-       [Serializable]
-       [System.Runtime.InteropServices.ComVisible (true)]
-       public struct TimeSpan : IComparable, IComparable<TimeSpan>, IEquatable <TimeSpan>
-                                , IFormattable
-       {
-#if MONOTOUCH
-               static TimeSpan () {
-                       if (MonoTouchAOTHelper.FalseFlag) {
-                               var comparer = new System.Collections.Generic.GenericComparer <TimeSpan> ();
-                               var eqcomparer = new System.Collections.Generic.GenericEqualityComparer <TimeSpan> ();
-                       }
-               }
-#endif
-               public static readonly TimeSpan MaxValue = new TimeSpan (long.MaxValue);
-               public static readonly TimeSpan MinValue = new TimeSpan (long.MinValue);
-               public static readonly TimeSpan Zero = new TimeSpan (0L);
-
-               public const long TicksPerDay = 864000000000L;
-               public const long TicksPerHour = 36000000000L;
-               public const long TicksPerMillisecond = 10000L;
-               public const long TicksPerMinute = 600000000L;
-               public const long TicksPerSecond = 10000000L;
-
-               private long _ticks;
-
-               public TimeSpan (long ticks)
-               {
-                       _ticks = ticks;
-               }
-
-               public TimeSpan (int hours, int minutes, int seconds)
-               {
-                       CalculateTicks (0, hours, minutes, seconds, 0, true, out _ticks);
-               }
-
-               public TimeSpan (int days, int hours, int minutes, int seconds)
-               {
-                       CalculateTicks (days, hours, minutes, seconds, 0, true, out _ticks);
-               }
-
-               public TimeSpan (int days, int hours, int minutes, int seconds, int milliseconds)
-               {
-                       CalculateTicks (days, hours, minutes, seconds, milliseconds, true, out _ticks);
-               }
-
-               internal static bool CalculateTicks (int days, int hours, int minutes, int seconds, int milliseconds, bool throwExc, out long result)
-               {
-                       // there's no overflow checks for hours, minutes, ...
-                       // so big hours/minutes values can overflow at some point and change expected values
-                       int hrssec = (hours * 3600); // break point at (Int32.MaxValue - 596523)
-                       int minsec = (minutes * 60);
-                       long t = ((long)(hrssec + minsec + seconds) * 1000L + (long)milliseconds);
-                       t *= 10000;
-
-                       result = 0;
-
-                       bool overflow = false;
-                       // days is problematic because it can overflow but that overflow can be 
-                       // "legal" (i.e. temporary) (e.g. if other parameters are negative) or 
-                       // illegal (e.g. sign change).
-                       if (days > 0) {
-                               long td = TicksPerDay * days;
-                               if (t < 0) {
-                                       long ticks = t;
-                                       t += td;
-                                       // positive days -> total ticks should be lower
-                                       overflow = (ticks > t);
-                               }
-                               else {
-                                       t += td;
-                                       // positive + positive != negative result
-                                       overflow = (t < 0);
-                               }
-                       }
-                       else if (days < 0) {
-                               long td = TicksPerDay * days;
-                               if (t <= 0) {
-                                       t += td;
-                                       // negative + negative != positive result
-                                       overflow = (t > 0);
-                               }
-                               else {
-                                       long ticks = t;
-                                       t += td;
-                                       // negative days -> total ticks should be lower
-                                       overflow = (t > ticks);
-                               }
-                       }
-
-                       if (overflow) {
-                               if (throwExc)
-                                       throw new ArgumentOutOfRangeException (Locale.GetText ("The timespan is too big or too small."));
-                               return false;
-                       }
-
-                       result = t;
-                       return true;
-               }
-
-               public int Days {
-                       get {
-                               return (int) (_ticks / TicksPerDay);
-                       }
-               }
-
-               public int Hours {
-                       get {
-                               return (int) (_ticks % TicksPerDay / TicksPerHour);
-                       }
-               }
-
-               public int Milliseconds {
-                       get {
-                               return (int) (_ticks % TicksPerSecond / TicksPerMillisecond);
-                       }
-               }
-
-               public int Minutes {
-                       get {
-                               return (int) (_ticks % TicksPerHour / TicksPerMinute);
-                       }
-               }
-
-               public int Seconds {
-                       get {
-                               return (int) (_ticks % TicksPerMinute / TicksPerSecond);
-                       }
-               }
-
-               public long Ticks {
-                       get {
-                               return _ticks;
-                       }
-               }
-
-               public double TotalDays {
-                       get {
-                               return (double) _ticks / TicksPerDay;
-                       }
-               }
-
-               public double TotalHours {
-                       get {
-                               return (double) _ticks / TicksPerHour;
-                       }
-               }
-
-               public double TotalMilliseconds {
-                       get {
-                               return (double) _ticks  / TicksPerMillisecond;
-                       }
-               }
-
-               public double TotalMinutes {
-                       get {
-                               return (double) _ticks / TicksPerMinute;
-                       }
-               }
-
-               public double TotalSeconds {
-                       get {
-                               return (double) _ticks / TicksPerSecond;
-                       }
-               }
-
-               public TimeSpan Add (TimeSpan ts)
-               {
-                       try {
-                               checked {
-                                       return new TimeSpan (_ticks + ts.Ticks);
-                               }
-                       }
-                       catch (OverflowException) {
-                               throw new OverflowException (Locale.GetText ("Resulting timespan is too big."));
-                       }
-               }
-
-               public static int Compare (TimeSpan t1, TimeSpan t2)
-               {
-                       if (t1._ticks < t2._ticks)
-                               return -1;
-                       if (t1._ticks > t2._ticks)
-                               return 1;
-                       return 0;
-               }
-
-               public int CompareTo (object value)
-               {
-                       if (value == null)
-                               return 1;
-
-                       if (!(value is TimeSpan)) {
-                               throw new ArgumentException (Locale.GetText ("Argument has to be a TimeSpan."), "value");
-                       }
-
-                       return Compare (this, (TimeSpan) value);
-               }
-
-               public int CompareTo (TimeSpan value)
-               {
-                       return Compare (this, value);
-               }
-
-               public bool Equals (TimeSpan obj)
-               {
-                       return obj._ticks == _ticks;
-               }
-
-               public TimeSpan Duration ()
-               {
-                       try {
-                               checked {
-                                       return new TimeSpan (Math.Abs (_ticks));
-                               }
-                       }
-                       catch (OverflowException) {
-                               throw new OverflowException (Locale.GetText (
-                                       "This TimeSpan value is MinValue so you cannot get the duration."));
-                       }
-               }
-
-               public override bool Equals (object value)
-               {
-                       if (!(value is TimeSpan))
-                               return false;
-
-                       return _ticks == ((TimeSpan) value)._ticks;
-               }
-
-               public static bool Equals (TimeSpan t1, TimeSpan t2)
-               {
-                       return t1._ticks == t2._ticks;
-               }
-
-               public static TimeSpan FromDays (double value)
-               {
-                       return From (value, TicksPerDay);
-               }
-
-               public static TimeSpan FromHours (double value)
-               {
-                       return From (value, TicksPerHour);
-               }
-
-               public static TimeSpan FromMinutes (double value)
-               {
-                       return From (value, TicksPerMinute);
-               }
-
-               public static TimeSpan FromSeconds (double value)
-               {
-                       return From (value, TicksPerSecond);
-               }
-
-               public static TimeSpan FromMilliseconds (double value)
-               {
-                       return From (value, TicksPerMillisecond);
-               }
-
-               private static TimeSpan From (double value, long tickMultiplicator) 
-               {
-                       if (Double.IsNaN (value))
-                               throw new ArgumentException (Locale.GetText ("Value cannot be NaN."), "value");
-                       if (Double.IsNegativeInfinity (value) || Double.IsPositiveInfinity (value) ||
-                               (value < MinValue.Ticks) || (value > MaxValue.Ticks))
-                               throw new OverflowException (Locale.GetText ("Outside range [MinValue,MaxValue]"));
-
-                       try {
-                               value = (value * (tickMultiplicator / TicksPerMillisecond));
-
-                               checked {
-                                       long val = (long) Math.Round(value, MidpointRounding.AwayFromZero);
-                                       return new TimeSpan (val * TicksPerMillisecond);
-                               }
-                       }
-                       catch (OverflowException) {
-                               throw new OverflowException (Locale.GetText ("Resulting timespan is too big."));
-                       }
-               }
-
-               public static TimeSpan FromTicks (long value)
-               {
-                       return new TimeSpan (value);
-               }
-
-               public override int GetHashCode ()
-               {
-                       return _ticks.GetHashCode ();
-               }
-
-               public TimeSpan Negate ()
-               {
-                       if (_ticks == MinValue._ticks)
-                               throw new OverflowException (Locale.GetText (
-                                       "This TimeSpan value is MinValue and cannot be negated."));
-                       return new TimeSpan (-_ticks);
-               }
-
-               public static TimeSpan Parse (string s)
-               {
-                       if (s == null) {
-                               throw new ArgumentNullException ("s");
-                       }
-
-                       TimeSpan result;
-                       Parser p = new Parser (s);
-                       p.Execute (false, out result);
-                       return result;
-               }
-
-               public static bool TryParse (string s, out TimeSpan result)
-               {
-                       if (s == null) {
-                               result = TimeSpan.Zero;
-                               return false;
-                       }
-
-                       Parser p = new Parser (s);
-                       return p.Execute (true, out result);
-               }
-
-               public static TimeSpan Parse (string input, IFormatProvider formatProvider)
-               {
-                       if (input == null)
-                               throw new ArgumentNullException ("input");
-
-                       TimeSpan result;
-                       Parser p = new Parser (input, formatProvider);
-                       p.Execute (false, out result);
-                       return result;
-               }
-
-               public static bool TryParse (string input, IFormatProvider formatProvider, out TimeSpan result)
-               {
-                       if (string.IsNullOrEmpty (input)) {
-                               result = TimeSpan.Zero;
-                               return false;
-                       }
-
-                       Parser p = new Parser (input, formatProvider);
-                       return p.Execute (true, out result);
-               }
-
-               public static TimeSpan ParseExact (string input, string format, IFormatProvider formatProvider)
-               {
-                       if (format == null)
-                               throw new ArgumentNullException ("format");
-
-                       return ParseExact (input, new string [] { format }, formatProvider, TimeSpanStyles.None);
-               }
-
-               public static TimeSpan ParseExact (string input, string format, IFormatProvider formatProvider, TimeSpanStyles styles)
-               {
-                       if (format == null)
-                               throw new ArgumentNullException ("format");
-
-                       return ParseExact (input, new string [] { format }, formatProvider, styles);
-               }
-
-               public static TimeSpan ParseExact (string input, string [] formats, IFormatProvider formatProvider)
-               {
-                       return ParseExact (input, formats, formatProvider, TimeSpanStyles.None);
-               }
-
-               public static TimeSpan ParseExact (string input, string [] formats, IFormatProvider formatProvider, TimeSpanStyles styles)
-               {
-                       if (input == null)
-                               throw new ArgumentNullException ("input");
-                       if (formats == null)
-                               throw new ArgumentNullException ("formats");
-
-                       // All the errors found during the parsing process are reported as FormatException.
-                       TimeSpan result;
-                       if (!TryParseExact (input, formats, formatProvider, styles, out result))
-                               throw new FormatException ("Invalid format.");
-
-                       return result;
-               }
-
-               public static bool TryParseExact (string input, string format, IFormatProvider formatProvider, out TimeSpan result)
-               {
-                       return TryParseExact (input, new string [] { format }, formatProvider, TimeSpanStyles.None, out result);
-               }
-
-               public static bool TryParseExact (string input, string format, IFormatProvider formatProvider, TimeSpanStyles styles,
-                               out TimeSpan result)
-               {
-                       return TryParseExact (input, new string [] { format }, formatProvider, styles, out result);
-               }
-
-               public static bool TryParseExact (string input, string [] formats, IFormatProvider formatProvider, out TimeSpan result)
-               {
-                       return TryParseExact (input, formats, formatProvider, TimeSpanStyles.None, out result);
-               }
-
-               public static bool TryParseExact (string input, string [] formats, IFormatProvider formatProvider, TimeSpanStyles styles,
-                       out TimeSpan result)
-               {
-                       result = TimeSpan.Zero;
-
-                       if (input == null || formats == null || formats.Length == 0)
-                               return false;
-
-                       Parser p = new Parser (input, formatProvider);
-                       p.Exact = true;
-
-                       foreach (string format in formats) {
-                               if (format == null || format.Length == 0)
-                                       return false; // wrong format, return immediately.
-
-                               switch (format) {
-                                       case "g":
-                                               p.AllMembersRequired = false;
-                                               p.CultureSensitive = true;
-                                               p.UseColonAsDaySeparator = true;
-                                               break;
-                                       case "G":
-                                               p.AllMembersRequired = true;
-                                               p.CultureSensitive = true;
-                                               p.UseColonAsDaySeparator = true;
-                                               break;
-                                       case "c":
-                                               p.AllMembersRequired = false;
-                                               p.CultureSensitive = false;
-                                               p.UseColonAsDaySeparator = false;
-                                               break;
-                                       default:
-                                               // Single letter formats other than the defined ones are not accepted.
-                                               if (format.Length == 1)
-                                                       return false;
-                                               // custom format
-                                               if (p.ExecuteWithFormat (format, styles, true, out result))
-                                                       return true;
-                                               continue;
-                               }
-
-                               if (p.Execute (true, out result))
-                                       return true;
-                       }
-
-                       return false;
-               }
-
-               public TimeSpan Subtract (TimeSpan ts)
-               {
-                       try {
-                               checked {
-                                       return new TimeSpan (_ticks - ts.Ticks);
-                               }
-                       }
-                       catch (OverflowException) {
-                               throw new OverflowException (Locale.GetText ("Resulting timespan is too big."));
-                       }
-               }
-
-               public override string ToString ()
-               {
-                       StringBuilder sb = new StringBuilder (14);
-                       
-                       if (_ticks < 0)
-                               sb.Append ('-');
-
-                       // We need to take absolute values of all components.
-                       // Can't handle negative timespans by negating the TimeSpan
-                       // as a whole. This would lead to an overflow for the 
-                       // degenerate case "TimeSpan.MinValue.ToString()".
-                       if (Days != 0) {
-                               sb.Append (Math.Abs (Days));
-                               sb.Append ('.');
-                       }
-
-                       sb.Append (Math.Abs (Hours).ToString ("D2"));
-                       sb.Append (':');
-                       sb.Append (Math.Abs (Minutes).ToString ("D2"));
-                       sb.Append (':');
-                       sb.Append (Math.Abs (Seconds).ToString ("D2"));
-
-                       int fractional = (int) Math.Abs (_ticks % TicksPerSecond);
-                       if (fractional != 0) {
-                               sb.Append ('.');
-                               sb.Append (fractional.ToString ("D7"));
-                       }
-
-                       return sb.ToString ();
-               }
-
-               public string ToString (string format)
-               {
-                       return ToString (format, null);
-               }
-
-               public string ToString (string format, IFormatProvider formatProvider)
-               {
-                       if (format == null || format.Length == 0 || format == "c" ||
-                                       format == "t" || format == "T") // Default version
-                               return ToString ();
-
-                       if (format != "g" && format != "G")
-                               return ToStringCustom (format); // custom formats ignore culture/formatProvider
-
-                       NumberFormatInfo number_info = null;
-                       if (formatProvider != null)
-                               number_info = formatProvider.GetFormat (typeof (NumberFormatInfo)) as NumberFormatInfo;
-                       if (number_info == null)
-                               number_info = Thread.CurrentThread.CurrentCulture.NumberFormat;
-
-                       string decimal_separator = number_info.NumberDecimalSeparator;
-                       int days, hours, minutes, seconds, milliseconds, fractional;
-
-                       days = Math.Abs (Days);
-                       hours = Math.Abs (Hours);
-                       minutes = Math.Abs (Minutes);
-                       seconds = Math.Abs (Seconds);
-                       milliseconds = Math.Abs (Milliseconds);
-                       fractional = (int) Math.Abs (_ticks % TicksPerSecond);
-
-                       // Set Capacity depending on whether it's long or shot format
-                       StringBuilder sb = new StringBuilder (format == "g" ? 16 : 32);
-                       if (_ticks < 0)
-                               sb.Append ('-');
-
-                       switch (format) {
-                               case "g": // short version
-                                       if (days != 0) {
-                                               sb.Append (days.ToString ());
-                                               sb.Append (':');
-                                       }
-                                       sb.Append (hours.ToString ());
-                                       sb.Append (':');
-                                       sb.Append (minutes.ToString ("D2"));
-                                       sb.Append (':');
-                                       sb.Append (seconds.ToString ("D2"));
-                                       if (milliseconds != 0) {
-                                               sb.Append (decimal_separator);
-                                               sb.Append (milliseconds.ToString ("D3"));
-                                       }
-                                       break;
-                               case "G": // long version
-                                       sb.Append (days.ToString ("D1"));
-                                       sb.Append (':');
-                                       sb.Append (hours.ToString ("D2"));
-                                       sb.Append (':');
-                                       sb.Append (minutes.ToString ("D2"));
-                                       sb.Append (':');
-                                       sb.Append (seconds.ToString ("D2"));
-                                       sb.Append (decimal_separator);
-                                       sb.Append (fractional.ToString ("D7"));
-                                       break;
-                       }
-
-                       return sb.ToString ();
-               }
-
-               string ToStringCustom (string format)
-               {
-                       // Single char formats are not accepted.
-                       if (format.Length < 2)
-                               throw new FormatException ("The format is not recognized.");
-
-                       FormatParser parser = new FormatParser (format);
-                       FormatElement element;
-                       int value;
-
-                       StringBuilder sb = new StringBuilder (format.Length + 1);
-
-                       while (true) {
-                               if (parser.AtEnd)
-                                       break;
-
-                               element = parser.GetNextElement ();
-                               switch (element.Type) {
-                               case FormatElementType.Days:
-                                       value = Math.Abs (Days);
-                                       break;
-                               case FormatElementType.Hours:
-                                       value = Math.Abs (Hours);
-                                       break;
-                               case FormatElementType.Minutes:
-                                       value = Math.Abs (Minutes);
-                                       break;
-                               case FormatElementType.Seconds:
-                                       value = Math.Abs (Seconds);
-                                       break;
-                               case FormatElementType.Ticks:
-                               case FormatElementType.TicksUppercase:
-                                       //
-                                       // TODO: Unify with datetime ticks formatting
-                                       //
-                                       value = (int)(_ticks % TicksPerSecond);
-                                       if (value == 0) {
-                                               if (element.Type == FormatElementType.Ticks)
-                                                       break;
-
-                                               continue;
-                                       }
-
-                                       int total_length = element.IntValue;
-                                       const int max_length = 7;
-                                       int digits = max_length;
-                                       for (var dv = (int)Math.Pow (10, max_length - 1); dv > value; dv /= 10, --digits)
-                                               ;
-
-                                       //
-                                       // Skip only leading zeros in F format
-                                       //
-                                       if (element.Type == FormatElementType.TicksUppercase && max_length - digits >= total_length)
-                                               continue;
-
-                                       //
-                                       // Add leading zeros
-                                       //
-                                       int leading = 0;
-                                       for (; leading < total_length && leading < max_length - digits; ++leading) {
-                                               sb.Append ("0");
-                                       }
-
-                                       if (total_length == leading)
-                                               continue;
-
-                                       //
-                                       // Remove trailing zeros
-                                       //
-                                       if (element.Type == FormatElementType.TicksUppercase) {
-                                               while (value % 10 == 0)
-                                                       value /= 10;
-                                       }
-
-                                       var max_value = (int)Math.Pow (10, total_length - leading);
-                                       while (value >= max_value)
-                                               value /= 10;
-
-                                       sb.Append (value.ToString (CultureInfo.InvariantCulture));
-                                       continue;
-                               case FormatElementType.EscapedChar:
-                                       sb.Append (element.CharValue);
-                                       continue;
-                               case FormatElementType.Literal:
-                                       sb.Append (element.StringValue);
-                                       continue;
-                               default:
-                                       throw new FormatException ("The format is not recognized.");
-                               }
-
-                               sb.Append (value.ToString ("D" + element.IntValue.ToString ()));
-                       }
-
-                       return sb.ToString ();
-               }
-
-               public static TimeSpan operator + (TimeSpan t1, TimeSpan t2)
-               {
-                       return t1.Add (t2);
-               }
-
-               public static bool operator == (TimeSpan t1, TimeSpan t2)
-               {
-                       return t1._ticks == t2._ticks;
-               }
-
-               public static bool operator > (TimeSpan t1, TimeSpan t2)
-               {
-                       return t1._ticks > t2._ticks;
-               }
-
-               public static bool operator >= (TimeSpan t1, TimeSpan t2)
-               {
-                       return t1._ticks >= t2._ticks;
-               }
-
-               public static bool operator != (TimeSpan t1, TimeSpan t2)
-               {
-                       return t1._ticks != t2._ticks;
-               }
-
-               public static bool operator < (TimeSpan t1, TimeSpan t2)
-               {
-                       return t1._ticks < t2._ticks;
-               }
-
-               public static bool operator <= (TimeSpan t1, TimeSpan t2)
-               {
-                       return t1._ticks <= t2._ticks;
-               }
-
-               public static TimeSpan operator - (TimeSpan t1, TimeSpan t2)
-               {
-                       return t1.Subtract (t2);
-               }
-
-               public static TimeSpan operator - (TimeSpan t)
-               {
-                       return t.Negate ();
-               }
-
-               public static TimeSpan operator + (TimeSpan t)
-               {
-                       return t;
-               }
-
-               internal const long MaxSeconds = Int64.MaxValue / TicksPerSecond;
-               internal const long MinSeconds = Int64.MinValue / TicksPerSecond;
-               
-        internal static long TimeToTicks(int hour, int minute, int second) {
-            // totalSeconds is bounded by 2^31 * 2^12 + 2^31 * 2^8 + 2^31,
-            // which is less than 2^44, meaning we won't overflow totalSeconds.
-            long totalSeconds = (long)hour * 3600 + (long)minute * 60 + (long)second;
-            if (totalSeconds > MaxSeconds || totalSeconds < MinSeconds)
-                throw new ArgumentOutOfRangeException(null, Environment.GetResourceString("Overflow_TimeSpanTooLong"));
-            return totalSeconds * TicksPerSecond;
-        }              
-
-               enum ParseError {
-                       None,
-                       Format,
-                       Overflow
-               }
-
-               // Class Parser implements parser for TimeSpan.Parse
-               private class Parser
-               {
-                       private string _src;
-                       private int _cur = 0;
-                       private int _length;
-                       ParseError parse_error;
-                       bool parsed_ticks;
-                       NumberFormatInfo number_format;
-                       int parsed_numbers_count;
-                       bool parsed_days_separator;
-
-                       public bool Exact; // no fallback, strict pattern.
-                       public bool AllMembersRequired;
-                       public bool CultureSensitive = true;
-                       public bool UseColonAsDaySeparator = true;
-
-                       public Parser (string src)
-                       {
-                               _src = src;
-                               _length = _src.Length;
-                               number_format = GetNumberFormatInfo (null);
-                       }
-
-                       // Reset state data, so we can execute another parse over the input.
-                       void Reset ()
-                       {
-                               _cur = 0;
-                               parse_error = ParseError.None;
-                               parsed_ticks = parsed_days_separator = false;
-                               parsed_numbers_count = 0;
-                       }
-
-                       public Parser (string src, IFormatProvider formatProvider) :
-                               this (src)
-                       {
-                               number_format = GetNumberFormatInfo (formatProvider);
-                       }
-
-                       static NumberFormatInfo GetNumberFormatInfo (IFormatProvider formatProvider)
-                       {
-                               NumberFormatInfo format = null;
-                               if (formatProvider != null)
-                                       format = formatProvider.GetFormat (typeof (NumberFormatInfo)) as NumberFormatInfo;
-                               if (format == null)
-                                       format = Thread.CurrentThread.CurrentCulture.NumberFormat;
-
-                               return format;
-                       }
-       
-                       public bool AtEnd {
-                               get {
-                                       return _cur >= _length;
-                               }
-                       }
-
-                       // All "Parse" functions throw a FormatException on syntax error.
-                       // Their return value is semantic value of the item parsed.
-
-                       // Range checking is spread over three different places:
-                       // 1) When parsing "int" values, an exception is thrown immediately
-                       //    when the value parsed exceeds the maximum value for an int.
-                       // 2) An explicit check is built in that checks for hours > 23 and
-                       //    for minutes and seconds > 59.
-                       // 3) Throwing an exceptions for a final TimeSpan value > MaxValue
-                       //    or < MinValue is left to the TimeSpan constructor called.
-
-                       // Parse zero or more whitespace chars.
-                       private void ParseWhiteSpace ()
-                       {
-                               while (!AtEnd && Char.IsWhiteSpace (_src, _cur)) {
-                                       _cur++;
-                               }
-                       }
-
-                       // Parse optional sign character.
-                       private bool ParseSign ()
-                       {
-                               bool res = false;
-
-                               if (!AtEnd && _src[_cur] == '-') {
-                                       res = true;
-                                       _cur++;
-                               }
-
-                               return res;
-                       }
-
-                       // Used for custom formats parsing, where we may need to declare how
-                       // many digits we expect, as well as the maximum allowed.
-                       private int ParseIntExact (int digit_count, int max_digit_count)
-                       {
-                               long res = 0;
-                               int count = 0;
-
-                               // We can have more than one preceding zero here.
-                               while (!AtEnd && Char.IsDigit (_src, _cur)) {
-                                       res = res * 10 + _src [_cur] - '0';
-                                       if (res > Int32.MaxValue) {
-                                               SetParseError (ParseError.Format);
-                                               break;
-                                       }
-                                       _cur++;
-                                       count++;
-                               }
-
-                               // digit_count = 1 means we can use up to maximum count,
-                               if (count == 0 || (digit_count > 1 && digit_count != count) ||
-                                               count > max_digit_count)
-                                       SetParseError (ParseError.Format);
-
-                               return (int)res;
-                       }
-
-                       // Parse simple int value
-                       private int ParseInt (bool optional)
-                       {
-                               if (optional && AtEnd)
-                                       return 0;
-
-                               long res = 0;
-                               int count = 0;
-
-                               while (!AtEnd && Char.IsDigit (_src, _cur)) {
-                                       res = res * 10 + _src[_cur] - '0';
-                                       if (res > Int32.MaxValue) {
-                                               SetParseError (ParseError.Overflow);
-                                               break;
-                                       }
-                                       _cur++;
-                                       count++;
-                               }
-
-                               if (!optional && (count == 0))
-                                       SetParseError (ParseError.Format);
-                               if (count > 0)
-                                       parsed_numbers_count++;
-
-                               return (int)res;
-                       }
-
-                       // This behaves pretty much like ParseOptDot, but we need to have it
-                       // as a separated routine for both days and decimal separators.
-                       private bool ParseOptDaysSeparator ()
-                       {
-                               if (AtEnd)
-                                       return false;
-
-                               if (_src[_cur] == '.') {
-                                       _cur++;
-                                       parsed_days_separator = true;
-                                       return true;
-                               }
-                               return false;
-                       }
-
-                       // Just as ParseOptDot, but for decimal separator
-                       private bool ParseOptDecimalSeparator ()
-                       {
-                               if (AtEnd)
-                                       return false;
-
-                               // we may need to provide compatibility with old versions using '.'
-                               // for culture insensitve and non exact formats.
-                               if (!Exact || !CultureSensitive)
-                                       if (_src [_cur] == '.') {
-                                               _cur++;
-                                               return true;
-                                       }
-
-                               string decimal_separator = number_format.NumberDecimalSeparator;
-                               if (CultureSensitive && String.Compare (_src, _cur, decimal_separator, 0, decimal_separator.Length) == 0) {
-                                       _cur += decimal_separator.Length;
-                                       return true;
-                               }
-
-                               return false;
-                       }
-
-                       private bool ParseLiteral (string value)
-                       {
-                               if (!AtEnd && String.Compare (_src, _cur, value, 0, value.Length) == 0) {
-                                       _cur += value.Length;
-                                       return true;
-                               }
-
-                               return false;
-                       }
-
-                       private bool ParseChar (char c)
-                       {
-                               if (!AtEnd && _src [_cur] == c) {
-                                       _cur++;
-                                       return true;
-                               }
-
-                               return false;
-                       }
-                       // Parse optional dot
-                       private bool ParseOptDot ()
-                       {
-                               if (AtEnd)
-                                       return false;
-
-                               if (_src[_cur] == '.') {
-                                       _cur++;
-                                       return true;
-                               }
-                               return false;
-                       }       
-
-                       private void ParseColon (bool optional)
-                       {
-                               if (!AtEnd) {
-                                       if (_src[_cur] == ':')
-                                               _cur++;
-                                       else if (!optional)
-                                               SetParseError (ParseError.Format);
-                               }
-                       }
-
-                       // Parse [1..7] digits, representing fractional seconds (ticks)
-                       // In 4.0 more than 7 digits will cause an OverflowException
-                       private long ParseTicks ()
-                       {
-                               long mag = 1000000;
-                               long res = 0;
-                               bool digitseen = false;
-                               
-                               while (mag > 0 && !AtEnd && Char.IsDigit (_src, _cur)) {
-                                       res = res + (_src[_cur] - '0') * mag;
-                                       _cur++;
-                                       mag = mag / 10;
-                                       digitseen = true;
-                               }
-
-                               if (!digitseen)
-                                       SetParseError (ParseError.Format);
-                               else if (!AtEnd && Char.IsDigit (_src, _cur))
-                                       SetParseError (ParseError.Overflow);
-
-                               parsed_ticks = true;
-
-                               return res;
-                       }
-
-                       // Used by custom formats parsing
-                       // digits_count = 0 for digits up to max_digits_count (optional), and other value to
-                       // force a precise number of digits.
-                       private long ParseTicksExact (int digits_count, int max_digits_count)
-                       {
-                               long mag = 1000000;
-                               long res = 0;
-                               int count = 0;
-
-                               while (mag > 0 && !AtEnd && Char.IsDigit (_src, _cur)) {
-                                       res = res + (_src [_cur] - '0') * mag;
-                                       _cur++;
-                                       count++;
-                                       mag = mag / 10;
-                               }
-
-                               if ((digits_count > 0 && count != digits_count) ||
-                                               count > max_digits_count)
-                                       SetParseError (ParseError.Format);
-
-                               return res;
-                       }
-
-                       void SetParseError (ParseError error)
-                       {
-                               // We preserve the very first error.
-                               if (parse_error != ParseError.None)
-                                       return;
-
-                               parse_error = error;
-                       }
-
-                       bool CheckParseSuccess (bool tryParse)
-                       {
-                               // We always report the first error, but for 2.0 we need to give a higher
-                               // precence to per-element overflow (as opposed to int32 overflow).
-                               if (parse_error == ParseError.Overflow) {
-                                       if (tryParse)
-                                               return false;
-                                       throw new OverflowException (
-                                               Locale.GetText ("Invalid time data."));
-                               }
-
-                               if (parse_error == ParseError.Format) {
-                                       if (tryParse)
-                                               return false;
-                                       throw new FormatException (
-                                               Locale.GetText ("Invalid format for TimeSpan.Parse."));
-                               }
-
-                               return true;
-                       }
-
-                       // We are using a different parse approach in 4.0, due to some changes in the behaviour
-                       // of the parse routines.
-                       // The input string is documented as:
-                       //      Parse [ws][-][dd.]hh:mm:ss[.ff][ws]
-                       //
-                       // There are some special cases as part of 4.0, however:
-                       // 1. ':' *can* be used as days separator, instead of '.', making valid the format 'dd:hh:mm:ss'
-                       // 2. A input in the format 'hh:mm:ss' will end up assigned as 'dd.hh:mm' if the first int has a value
-                       // exceeding the valid range for hours: 0-23.
-                       // 3. The decimal separator can be retrieved from the current culture, as well as keeping support
-                       // for the '.' value as part of keeping compatibility.
-                       //
-                       // So we take the approach to parse, if possible, 4 integers, and depending on both how many were
-                       // actually parsed and what separators were read, assign the values to days/hours/minutes/seconds.
-                       //
-                       public bool Execute (bool tryParse, out TimeSpan result)
-                       {
-                               bool sign;
-                               int value1, value2, value3, value4;
-                               int days, hours, minutes, seconds;
-                               long ticks = 0;
-
-                               result = TimeSpan.Zero;
-                               value1 = value2 = value3 = value4 = 0;
-                               days = hours = minutes = seconds = 0;
-
-                               Reset ();
-
-                               ParseWhiteSpace ();
-                               sign = ParseSign ();
-
-                               // Parse 4 integers, making only the first one non-optional.
-                               value1 = ParseInt (false);
-                               if (!ParseOptDaysSeparator ()) // Parse either day separator or colon
-                                       ParseColon (false);
-                               int p = _cur;
-                               value2 = ParseInt (true);
-                               value3 = value4 = 0;
-                               if (p < _cur) {
-                                       ParseColon (true);
-                                       value3 = ParseInt (true);
-                                       ParseColon (true);
-                                       value4 = ParseInt (true);
-                               }
-
-                               // We know the precise separator for ticks, so there's no need to guess.
-                               if (ParseOptDecimalSeparator ())
-                                       ticks = ParseTicks ();
-
-                               ParseWhiteSpace ();
-
-                               if (!AtEnd)
-                                       SetParseError (ParseError.Format);
-
-                               if (Exact)
-                                       // In Exact mode we cannot allow both ':' and '.' as day separator.
-                                       if (UseColonAsDaySeparator && parsed_days_separator ||
-                                               AllMembersRequired && (parsed_numbers_count < 4 || !parsed_ticks))
-                                               SetParseError (ParseError.Format);
-
-                               switch (parsed_numbers_count) {
-                                       case 1:
-                                               days = value1;
-                                               break;
-                                       case 2: // Two elements are valid only if they are *exactly* in the format: 'hh:mm'
-                                               if (parsed_days_separator)
-                                                       SetParseError (ParseError.Format);
-                                               else {
-                                                       hours = value1;
-                                                       minutes = value2;
-                                               }
-                                               break;
-                                       case 3: // Assign the first value to days if we parsed a day separator or the value
-                                               // is not in the valid range for hours.
-                                               if (parsed_days_separator || value1 > 23) {
-                                                       days = value1;
-                                                       hours = value2;
-                                                       minutes = value3;
-                                               } else {
-                                                       hours = value1;
-                                                       minutes = value2;
-                                                       seconds = value3;
-                                               }
-                                               break;
-                                       case 4: // We are either on 'dd.hh:mm:ss' or 'dd:hh:mm:ss'
-                                               if (!UseColonAsDaySeparator && !parsed_days_separator)
-                                                       SetParseError (ParseError.Format);
-                                               else {
-                                                       days = value1;
-                                                       hours = value2;
-                                                       minutes = value3;
-                                                       seconds = value4;
-                                               }
-                                               break;
-                               }
-
-                               if (hours > 23 || minutes > 59 || seconds > 59)
-                                       SetParseError (ParseError.Overflow);
-
-                               if (!CheckParseSuccess (tryParse))
-                                       return false;
-
-                               long t;
-                               if (!TimeSpan.CalculateTicks (days, hours, minutes, seconds, 0, false, out t))
-                                       return false;
-
-                               try {
-                                       t = checked ((sign) ? (-t - ticks) : (t + ticks));
-                               } catch (OverflowException) {
-                                       if (tryParse)
-                                               return false;
-                                       throw;
-                               }
-
-                               result = new TimeSpan (t);
-                               return true;
-                       }
-
-                       public bool ExecuteWithFormat (string format, TimeSpanStyles style, bool tryParse, out TimeSpan result)
-                       {
-                               int days, hours, minutes, seconds;
-                               long ticks;
-                               FormatElement format_element;
-
-                               days = hours = minutes = seconds = -1;
-                               ticks = -1;
-                               result = TimeSpan.Zero;
-                               Reset ();
-
-                               FormatParser format_parser = new FormatParser (format);
-
-                               for (;;) {
-                                       // We need to continue even if AtEnd == true, since we could have
-                                       // a optional second element.
-                                       if (parse_error != ParseError.None)
-                                               break;
-                                       if (format_parser.AtEnd)
-                                               break;
-
-                                       format_element = format_parser.GetNextElement ();
-                                       switch (format_element.Type) {
-                                               case FormatElementType.Days:
-                                                       if (days != -1)
-                                                               goto case FormatElementType.Error;
-                                                       days = ParseIntExact (format_element.IntValue, 8);
-                                                       break;
-                                               case FormatElementType.Hours:
-                                                       if (hours != -1)
-                                                               goto case FormatElementType.Error;
-                                                       hours = ParseIntExact (format_element.IntValue, 2);
-                                                       break;
-                                               case FormatElementType.Minutes:
-                                                       if (minutes != -1)
-                                                               goto case FormatElementType.Error;
-                                                       minutes = ParseIntExact (format_element.IntValue, 2);
-                                                       break;
-                                               case FormatElementType.Seconds:
-                                                       if (seconds != -1)
-                                                               goto case FormatElementType.Error;
-                                                       seconds = ParseIntExact (format_element.IntValue, 2);
-                                                       break;
-                                               case FormatElementType.Ticks:
-                                                       if (ticks != -1)
-                                                               goto case FormatElementType.Error;
-                                                       ticks = ParseTicksExact (format_element.IntValue,
-                                                                       format_element.IntValue);
-                                                       break;
-                                               case FormatElementType.TicksUppercase:
-                                                       // Similar to Milliseconds, but optional and the
-                                                       // number of F defines the max length, not the required one.
-                                                       if (ticks != -1)
-                                                               goto case FormatElementType.Error;
-                                                       ticks = ParseTicksExact (0, format_element.IntValue);
-                                                       break;
-                                               case FormatElementType.Literal:
-                                                       if (!ParseLiteral (format_element.StringValue))
-                                                               SetParseError (ParseError.Format);
-                                                       break;
-                                               case FormatElementType.EscapedChar:
-                                                       if (!ParseChar (format_element.CharValue))
-                                                               SetParseError (ParseError.Format);
-                                                       break;
-                                               case FormatElementType.Error:
-                                                       SetParseError (ParseError.Format);
-                                                       break;
-                                       }
-                               }
-
-                               if (days == -1)
-                                       days = 0;
-                               if (hours == -1)
-                                       hours = 0;
-                               if (minutes == -1)
-                                       minutes = 0;
-                               if (seconds == -1)
-                                       seconds = 0;
-                               if (ticks == -1)
-                                       ticks = 0;
-
-                               if (!AtEnd || !format_parser.AtEnd)
-                                       SetParseError (ParseError.Format);
-                               if (hours > 23 || minutes > 59 || seconds > 59)
-                                       SetParseError (ParseError.Format);
-
-                               if (!CheckParseSuccess (tryParse))
-                                       return false;
-
-                               long t;
-                               if (!TimeSpan.CalculateTicks (days, hours, minutes, seconds, 0, false, out t))
-                                       return false;
-
-                               try {
-                                       t = checked ((style == TimeSpanStyles.AssumeNegative) ? (-t - ticks) : (t + ticks));
-                               } catch (OverflowException) {
-                                       if (tryParse)
-                                               return false;
-                                       throw;
-                               }
-
-                               result = new TimeSpan (t);
-                               return true;
-                       }
-               }
-               enum FormatElementType 
-               {
-                       Days,
-                       Hours,
-                       Minutes,
-                       Seconds,
-                       Ticks, // 'f'
-                       TicksUppercase, // 'F'
-                       Literal,
-                       EscapedChar,
-                       Error,
-                       End
-               }
-
-               struct FormatElement
-               {
-                       public FormatElement (FormatElementType type)
-                       {
-                               Type = type;
-                               CharValue = (char)0;
-                               IntValue = 0;
-                               StringValue = null;
-                       }
-
-                       public FormatElementType Type;
-                       public char CharValue; // Used by EscapedChar
-                       public string StringValue; // Used by Literal
-                       public int IntValue; // Used by numerical elements.
-               }
-
-               class FormatParser 
-               {
-                       int cur;
-                       string format;
-
-                       public FormatParser (string format)
-                       {
-                               this.format = format;
-                       }
-
-                       public bool AtEnd {
-                               get {
-                                       return cur >= format.Length;
-                               }
-                       }
-
-                       public FormatElement GetNextElement ()
-                       {
-                               FormatElement element = new FormatElement ();
-
-                               if (AtEnd)
-                                       return new FormatElement (FormatElementType.End);
-
-                               int count = 0;
-                               switch (format [cur]) {
-                                       case 'd':
-                                               count = ParseChar ('d');
-                                               if (count > 8)
-                                                       return new FormatElement (FormatElementType.Error);
-                                               element.Type = FormatElementType.Days;
-                                               element.IntValue = count;
-                                               break;
-                                       case 'h':
-                                               count = ParseChar ('h');
-                                               if (count > 2)
-                                                       return new FormatElement (FormatElementType.Error);
-                                               element.Type = FormatElementType.Hours;
-                                               element.IntValue = count;
-                                               break;
-                                       case 'm':
-                                               count = ParseChar ('m');
-                                               if (count > 2)
-                                                       return new FormatElement (FormatElementType.Error);
-                                               element.Type = FormatElementType.Minutes;
-                                               element.IntValue = count;
-                                               break;
-                                       case 's':
-                                               count = ParseChar ('s');
-                                               if (count > 2)
-                                                       return new FormatElement (FormatElementType.Error);
-                                               element.Type = FormatElementType.Seconds;
-                                               element.IntValue = count;
-                                               break;
-                                       case 'f':
-                                               count = ParseChar ('f');
-                                               if (count > 7)
-                                                       return new FormatElement (FormatElementType.Error);
-                                               element.Type = FormatElementType.Ticks;
-                                               element.IntValue = count;
-                                               break;
-                                       case 'F':
-                                               count = ParseChar ('F');
-                                               if (count > 7)
-                                                       return new FormatElement (FormatElementType.Error);
-                                               element.Type = FormatElementType.TicksUppercase;
-                                               element.IntValue = count;
-                                               break;
-                                       case '%':
-                                               cur++;
-                                               if (AtEnd)
-                                                       return new FormatElement (FormatElementType.Error);
-                                               if (format [cur] == 'd')
-                                                       goto case 'd';
-                                               else if (format [cur] == 'h')
-                                                       goto case 'h';
-                                               else if (format [cur] == 'm')
-                                                       goto case 'm';
-                                               else if (format [cur] == 's')
-                                                       goto case 's';
-                                               else if (format [cur] == 'f')
-                                                       goto case 'f';
-                                               else if (format [cur] == 'F')
-                                                       goto case 'F';
-
-                                               return new FormatElement (FormatElementType.Error);
-                                       case '\'':
-                                               string literal = ParseLiteral ();
-                                               if (literal == null)
-                                                       return new FormatElement (FormatElementType.Error);
-                                               element.Type = FormatElementType.Literal;
-                                               element.StringValue = literal;
-                                               break;
-                                       case '\\':
-                                               char escaped_char = ParseEscapedChar ();
-                                               if ((int)escaped_char == 0)
-                                                       return new FormatElement (FormatElementType.Error);
-                                               element.Type = FormatElementType.EscapedChar;
-                                               element.CharValue = escaped_char;
-                                               break;
-                                       default:
-                                               return new FormatElement (FormatElementType.Error);
-                               }
-
-                               return element;
-                       }
-
-                       int ParseChar (char c)
-                       {
-                               int count = 0;
-
-                               while (!AtEnd && format [cur] == c) {
-                                       cur++;
-                                       count++;
-                               }
-
-                               return count;
-                       }
-
-                       char ParseEscapedChar ()
-                       {
-                               if (AtEnd || format [cur] != '\\')
-                                       return (char)0;
-
-                               cur++;
-                               if (AtEnd)
-                                       return (char)0;
-
-                               return format [cur++];
-                       }
-
-                       string ParseLiteral ()
-                       {
-                               int start;
-                               int count = 0;
-
-                               if (AtEnd || format [cur] != '\'')
-                                       return null;
-
-                               start = ++cur;
-                               while (!AtEnd && format [cur] != '\'') {
-                                       cur++;
-                                       count++;
-                               }
-
-                               if (!AtEnd && format [cur] == '\'') {
-                                       cur++;
-                                       return format.Substring (start, count);
-                               }
-
-                               return null;
-                       }
-               }
-
-       }
-}
index f4e01b03be322cc4f832f672002573eb025517f7..61d088a6593af1fcf408f27cc668e0cbfa384bd3 100644 (file)
@@ -68,7 +68,7 @@ namespace System
                // Properties
                public static TimeZone CurrentTimeZone {
                        get {
-                               long now = DateTime.GetNow ();
+                               long now = DateTime.UtcNow.Ticks;
                                TimeZone tz = currentTimeZone;
                                
                                lock (tz_lock) {
index 48c46979e885e64213c230e0552cb98c9c117349..830b0f8cf5eb3fadeaf0747f2d716d8c530ea94e 100644 (file)
@@ -680,6 +680,13 @@ namespace System {
                                        var isDst  = zone.IsDaylightSavingTime (time.Value);
                                        Console.WriteLine ("\tDate({0}): Offset({1}) IsDST({2})", time.Value, offset, isDst);
                                }
+
+                               if (zone.transitions != null) {
+                                       Console.WriteLine ("Transitions for: {0}", path);
+                                       foreach (var transition in zone.transitions) {
+                                               Console.WriteLine ("\t Date({0}): {1}", transition.Key, transition.Value);
+                                       }
+                               }
                        }
 #endif
                }
index a6a3c1a106ff111f699df14b2bc609b26202b32a..a6b4e5233a22c6e3cfefde7ccb461460056e5b6e 100644 (file)
@@ -34,6 +34,7 @@ using System.Collections.Generic;
 using System.Collections.ObjectModel;
 using System.Runtime.Serialization;
 using System.Text;
+using System.Globalization;
 
 #if LIBC || MONODROID
 using System.IO;
@@ -108,12 +109,14 @@ namespace System
                                return BuildFromStream ("Local", stream);
                        }
 #else
+#if !NET_2_1
                        if (IsWindows && LocalZoneKey != null) {
                                string name = (string)LocalZoneKey.GetValue ("TimeZoneKeyName");
                                name = TrimSpecial (name);
                                if (name != null)
                                        return TimeZoneInfo.FindSystemTimeZoneById (name);
                        }
+#endif
 
                        var tz = Environment.GetEnvironmentVariable ("TZ");
                        if (tz != null) {
@@ -339,32 +342,57 @@ namespace System
                        return ConvertTimeToUtc (dateTime, TimeZoneInfo.Local);
                }
 
+               static internal DateTime ConvertTimeToUtc(DateTime dateTime, TimeZoneInfoOptions flags)
+               {
+                       return ConvertTimeToUtc (dateTime, TimeZoneInfo.Local, flags);
+               }
+
                public static DateTime ConvertTimeToUtc (DateTime dateTime, TimeZoneInfo sourceTimeZone)
                {
-                       if (sourceTimeZone == null)
-                               throw new ArgumentNullException ("sourceTimeZone");
+                       return ConvertTimeToUtc (dateTime, sourceTimeZone, TimeZoneInfoOptions.None);
+               }
 
-                       if (dateTime.Kind == DateTimeKind.Utc && sourceTimeZone != TimeZoneInfo.Utc)
-                               throw new ArgumentException ("Kind property of dateTime is Utc but the sourceTimeZone does not equal TimeZoneInfo.Utc");
+               static DateTime ConvertTimeToUtc (DateTime dateTime, TimeZoneInfo sourceTimeZone, TimeZoneInfoOptions flags)
+               {
+                       if ((flags & TimeZoneInfoOptions.NoThrowOnInvalidTime) == 0) {
+                               if (sourceTimeZone == null)
+                                       throw new ArgumentNullException ("sourceTimeZone");
 
-                       if (dateTime.Kind == DateTimeKind.Local && sourceTimeZone != TimeZoneInfo.Local)
-                               throw new ArgumentException ("Kind property of dateTime is Local but the sourceTimeZone does not equal TimeZoneInfo.Local");
+                               if (dateTime.Kind == DateTimeKind.Utc && sourceTimeZone != TimeZoneInfo.Utc)
+                                       throw new ArgumentException ("Kind property of dateTime is Utc but the sourceTimeZone does not equal TimeZoneInfo.Utc");
 
-                       if (sourceTimeZone.IsInvalidTime (dateTime))
-                               throw new ArgumentException ("dateTime parameter is an invalid time");
+                               if (dateTime.Kind == DateTimeKind.Local && sourceTimeZone != TimeZoneInfo.Local)
+                                       throw new ArgumentException ("Kind property of dateTime is Local but the sourceTimeZone does not equal TimeZoneInfo.Local");
+
+                               if (sourceTimeZone.IsInvalidTime (dateTime))
+                                       throw new ArgumentException ("dateTime parameter is an invalid time");
+                       }
 
                        if (dateTime.Kind == DateTimeKind.Utc)
                                return dateTime;
 
-                       if (sourceTimeZone.IsAmbiguousTime (dateTime) || !sourceTimeZone.IsDaylightSavingTime (dateTime))
-                               return DateTime.SpecifyKind (dateTime - sourceTimeZone.BaseUtcOffset, DateTimeKind.Utc);
-                       else {
+                       if (sourceTimeZone.IsAmbiguousTime (dateTime) || !sourceTimeZone.IsDaylightSavingTime (dateTime)) {
+                               var ticks = dateTime.Ticks - sourceTimeZone.BaseUtcOffset.Ticks;
+                               if (ticks < DateTime.MinValue.Ticks)
+                                       ticks = DateTime.MinValue.Ticks;
+                               else if (ticks > DateTime.MaxValue.Ticks)
+                                       ticks = DateTime.MaxValue.Ticks;
+
+                               return new DateTime (ticks, DateTimeKind.Utc);
+                       }
+                       
                                AdjustmentRule rule = sourceTimeZone.GetApplicableRule (dateTime);
                                if (rule != null)
                                        return DateTime.SpecifyKind (dateTime - sourceTimeZone.BaseUtcOffset - rule.DaylightDelta, DateTimeKind.Utc);
                                else
                                        return DateTime.SpecifyKind (dateTime - sourceTimeZone.BaseUtcOffset, DateTimeKind.Utc);
-                       }
+                       
+               }
+
+               static internal TimeSpan GetDateTimeNowUtcOffsetFromUtc(DateTime time, out Boolean isAmbiguousLocalDst)
+               {
+                       bool isDaylightSavings;
+                       return GetUtcOffsetFromUtc(time, TimeZoneInfo.Local, out isDaylightSavings, out isAmbiguousLocalDst);
                }
 
                public static TimeZoneInfo CreateCustomTimeZone (string id, TimeSpan baseUtcOffset, string displayName, string standardDisplayName) 
@@ -851,26 +879,14 @@ namespace System
                        return isDst;
                }
 
-               public bool IsDaylightSavingTime (DateTimeOffset dateTimeOffset)
+               internal bool IsDaylightSavingTime (DateTime dateTime, TimeZoneInfoOptions flags)
                {
-                       throw new NotImplementedException ();
+                       return IsDaylightSavingTime (dateTime);
                }
 
-               public bool IsInvalidTime (DateTime dateTime)
+               public bool IsDaylightSavingTime (DateTimeOffset dateTimeOffset)
                {
-                       if (dateTime.Kind == DateTimeKind.Utc)
-                               return false;
-                       if (dateTime.Kind == DateTimeKind.Local && this != Local)
-                               return false;
-
-                       AdjustmentRule rule = GetApplicableRule (dateTime);
-                       if (rule != null) {
-                               DateTime tpoint = TransitionPoint (rule.DaylightTransitionStart, dateTime.Year);
-                               if (dateTime >= tpoint && dateTime < tpoint + rule.DaylightDelta)
-                                       return true;
-                       }
-                               
-                       return false;
+                       throw new NotImplementedException ();
                }
 
                void IDeserializationCallback.OnDeserialization (object sender)
@@ -1000,7 +1016,7 @@ namespace System
 
                private AdjustmentRule GetApplicableRule (DateTime dateTime)
                {
-                       //Transitions are always in standard time
+                       //Applicable rules are in standard time
                        DateTime date = dateTime;
 
                        if (dateTime.Kind == DateTimeKind.Local && this != TimeZoneInfo.Local)
@@ -1031,14 +1047,17 @@ namespace System
                        if (transitions == null)
                                return false;
 
-                       //Transitions are always in standard time
+                       //Transitions are in UTC
                        DateTime date = dateTime;
 
                        if (dateTime.Kind == DateTimeKind.Local && this != TimeZoneInfo.Local)
                                date = date.ToUniversalTime () + BaseUtcOffset;
 
-                       if (dateTime.Kind == DateTimeKind.Utc && this != TimeZoneInfo.Utc)
-                               date = date + BaseUtcOffset;
+                       if (dateTime.Kind != DateTimeKind.Utc) {
+                               if (date.Ticks < BaseUtcOffset.Ticks)
+                                       return false;
+                               date = date - BaseUtcOffset;
+                       }
 
                        for (var i =  transitions.Count - 1; i >= 0; i--) {
                                var pair = transitions [i];
@@ -1270,6 +1289,336 @@ namespace System
                        DateTime date_time = new DateTime (1970, 1, 1);
                        return date_time.AddSeconds (unix_time);
                }
+
+#region reference sources
+        // Shortcut for TimeZoneInfo.Local.GetUtcOffset
+        internal static TimeSpan GetLocalUtcOffset(DateTime dateTime, TimeZoneInfoOptions flags)
+        {
+            bool dst;
+            return Local.GetUtcOffset (dateTime, out dst);
+        }
+
+        internal TimeSpan GetUtcOffset(DateTime dateTime, TimeZoneInfoOptions flags)
+        {
+            bool dst;
+            return GetUtcOffset (dateTime, out dst);
+        }
+
+        // used by GetUtcOffsetFromUtc (DateTime.Now, DateTime.ToLocalTime) for max/min whole-day range checks
+        private static DateTime s_maxDateOnly = new DateTime(9999, 12, 31);
+        private static DateTime s_minDateOnly = new DateTime(1, 1, 2);
+
+        static internal TimeSpan GetUtcOffsetFromUtc (DateTime time, TimeZoneInfo zone, out Boolean isDaylightSavings, out Boolean isAmbiguousLocalDst)
+        {
+            isDaylightSavings = false;
+            isAmbiguousLocalDst = false;
+            TimeSpan baseOffset = zone.BaseUtcOffset;
+            Int32 year;
+            AdjustmentRule rule;
+
+            if (time > s_maxDateOnly) {
+                rule = zone.GetAdjustmentRuleForTime(DateTime.MaxValue);
+                year = 9999;
+            }
+            else if (time < s_minDateOnly) {
+                rule = zone.GetAdjustmentRuleForTime(DateTime.MinValue);
+                year = 1;
+            }
+            else {
+                DateTime targetTime = time + baseOffset;
+                year = time.Year;
+                rule = zone.GetAdjustmentRuleForTime(targetTime);
+            }
+
+            if (rule != null) {
+                isDaylightSavings = GetIsDaylightSavingsFromUtc(time, year, zone.baseUtcOffset, rule, out isAmbiguousLocalDst);
+                baseOffset += (isDaylightSavings ? rule.DaylightDelta : TimeSpan.Zero /* */);
+            }
+
+            return baseOffset;
+        }
+
+        // assumes dateTime is in the current time zone's time
+        private AdjustmentRule GetAdjustmentRuleForTime(DateTime dateTime) {
+            if (adjustmentRules == null || adjustmentRules.Length == 0) {
+                return null;
+            }
+
+#if WINXP_AND_WIN2K3_SUPPORT
+            // On pre-Vista versions of Windows if you run "cmd /c date" or "cmd /c time" to update the system time
+            // the operating system doesn't pick up the correct time zone adjustment rule (it stays on the currently loaded rule).
+            // We need to use the OS API data in this scenario instead of the loaded adjustment rules from the registry for
+            // consistency.  Otherwise DateTime.Now might not match the time displayed in the system tray.              
+            if (!Environment.IsWindowsVistaOrAbove && s_cachedData.GetCorrespondingKind(this) == DateTimeKind.Local) {
+                return s_cachedData.GetOneYearLocalFromLocal(dateTime.Year).rule;
+            }
+#endif
+            // Only check the whole-date portion of the dateTime -
+            // This is because the AdjustmentRule DateStart & DateEnd are stored as
+            // Date-only values {4/2/2006 - 10/28/2006} but actually represent the
+            // time span {4/2/2006@00:00:00.00000 - 10/28/2006@23:59:59.99999}
+            DateTime date = dateTime.Date;
+
+            for (int i = 0; i < adjustmentRules.Length; i++) {
+                if (adjustmentRules[i].DateStart <= date && adjustmentRules[i].DateEnd >= date) {
+                    return adjustmentRules[i];
+                }
+            }
+
+            return null;
+        }
+
+        //
+        // GetIsDaylightSavingsFromUtc -
+        //
+        // Helper function that checks if a given dateTime is in Daylight Saving Time (DST)
+        // This function assumes the dateTime is in UTC and AdjustmentRule is in a different time zone
+        //
+        static private Boolean GetIsDaylightSavingsFromUtc(DateTime time, Int32 Year, TimeSpan utc, AdjustmentRule rule, out Boolean isAmbiguousLocalDst) {
+            isAmbiguousLocalDst = false;
+
+            if (rule == null) {
+                return false;
+            }
+
+            // Get the daylight changes for the year of the specified time.
+            TimeSpan offset = utc; /* */
+            DaylightTime daylightTime = GetDaylightTime(Year, rule);
+
+            // The start and end times represent the range of universal times that are in DST for that year.                
+            // Within that there is an ambiguous hour, usually right at the end, but at the beginning in
+            // the unusual case of a negative daylight savings delta.
+            DateTime startTime = daylightTime.Start - offset;
+            DateTime endTime = daylightTime.End - offset - rule.DaylightDelta; /* */
+            DateTime ambiguousStart;
+            DateTime ambiguousEnd;
+            if (daylightTime.Delta.Ticks > 0) {
+                ambiguousStart = endTime - daylightTime.Delta;
+                ambiguousEnd = endTime;
+            } else {
+                ambiguousStart = startTime;
+                ambiguousEnd = startTime - daylightTime.Delta;
+            }
+
+            Boolean isDst = CheckIsDst(startTime, time, endTime);
+
+            // See if the resulting local time becomes ambiguous. This must be captured here or the
+            // DateTime will not be able to round-trip back to UTC accurately.
+            if (isDst) {
+                isAmbiguousLocalDst = (time >= ambiguousStart && time < ambiguousEnd);
+
+                if (!isAmbiguousLocalDst && ambiguousStart.Year != ambiguousEnd.Year) {
+                    // there exists an extreme corner case where the start or end period is on a year boundary and
+                    // because of this the comparison above might have been performed for a year-early or a year-later
+                    // than it should have been.
+                    DateTime ambiguousStartModified;
+                    DateTime ambiguousEndModified;
+                    try {
+                        ambiguousStartModified = ambiguousStart.AddYears(1);
+                        ambiguousEndModified   = ambiguousEnd.AddYears(1);
+                        isAmbiguousLocalDst = (time >= ambiguousStart && time < ambiguousEnd); 
+                    }
+                    catch (ArgumentOutOfRangeException) {}
+
+                    if (!isAmbiguousLocalDst) {
+                        try {
+                            ambiguousStartModified = ambiguousStart.AddYears(-1);
+                            ambiguousEndModified   = ambiguousEnd.AddYears(-1);
+                            isAmbiguousLocalDst = (time >= ambiguousStart && time < ambiguousEnd);
+                        }
+                        catch (ArgumentOutOfRangeException) {}
+                    }
+
+                }
+            }
+
+            return isDst;
+        }
+
+
+        static private Boolean CheckIsDst(DateTime startTime, DateTime time, DateTime endTime) {
+            Boolean isDst;
+
+            int startTimeYear = startTime.Year;
+            int endTimeYear = endTime.Year;
+
+            if (startTimeYear != endTimeYear) {
+                endTime = endTime.AddYears(startTimeYear - endTimeYear);
+            }
+
+            int timeYear = time.Year;
+
+            if (startTimeYear != timeYear) {
+                time = time.AddYears(startTimeYear - timeYear);
+            }
+
+            if (startTime > endTime) {
+                // In southern hemisphere, the daylight saving time starts later in the year, and ends in the beginning of next year.
+                // Note, the summer in the southern hemisphere begins late in the year.
+                isDst = (time < endTime || time >= startTime);
+            }
+            else {
+                // In northern hemisphere, the daylight saving time starts in the middle of the year.
+                isDst = (time >= startTime && time < endTime);
+            }
+            return isDst;
+        }
+
+        //
+        // GetDaylightTime -
+        //
+        // Helper function that returns a DaylightTime from a year and AdjustmentRule
+        //
+        static private DaylightTime GetDaylightTime(Int32 year, AdjustmentRule rule) {
+            TimeSpan delta = rule.DaylightDelta;
+            DateTime startTime = TransitionTimeToDateTime(year, rule.DaylightTransitionStart);
+            DateTime endTime = TransitionTimeToDateTime(year, rule.DaylightTransitionEnd);
+            return new DaylightTime(startTime, endTime, delta);
+        }
+
+        //
+        // TransitionTimeToDateTime -
+        //
+        // Helper function that converts a year and TransitionTime into a DateTime
+        //
+        static private DateTime TransitionTimeToDateTime(Int32 year, TransitionTime transitionTime) {
+            DateTime value;
+            DateTime timeOfDay = transitionTime.TimeOfDay;
+
+            if (transitionTime.IsFixedDateRule) {
+                // create a DateTime from the passed in year and the properties on the transitionTime
+
+                // if the day is out of range for the month then use the last day of the month
+                Int32 day = DateTime.DaysInMonth(year, transitionTime.Month);
+
+                value = new DateTime(year, transitionTime.Month, (day < transitionTime.Day) ? day : transitionTime.Day, 
+                            timeOfDay.Hour, timeOfDay.Minute, timeOfDay.Second, timeOfDay.Millisecond);
+            }
+            else {
+                if (transitionTime.Week <= 4) {
+                    //
+                    // Get the (transitionTime.Week)th Sunday.
+                    //
+                    value = new DateTime(year, transitionTime.Month, 1,
+                            timeOfDay.Hour, timeOfDay.Minute, timeOfDay.Second, timeOfDay.Millisecond);
+
+                    int dayOfWeek = (int)value.DayOfWeek;
+                    int delta = (int)transitionTime.DayOfWeek - dayOfWeek;
+                    if (delta < 0) {
+                        delta += 7;
+                    }
+                    delta += 7 * (transitionTime.Week - 1);
+
+                    if (delta > 0) {
+                        value = value.AddDays(delta);
+                    }
+                }
+                else {
+                    //
+                    // If TransitionWeek is greater than 4, we will get the last week.
+                    //
+                    Int32 daysInMonth = DateTime.DaysInMonth(year, transitionTime.Month);
+                    value = new DateTime(year, transitionTime.Month, daysInMonth,
+                            timeOfDay.Hour, timeOfDay.Minute, timeOfDay.Second, timeOfDay.Millisecond);
+
+                    // This is the day of week for the last day of the month.
+                    int dayOfWeek = (int)value.DayOfWeek;
+                    int delta = dayOfWeek - (int)transitionTime.DayOfWeek;
+                    if (delta < 0) {
+                        delta += 7;
+                    }
+
+                    if (delta > 0) {
+                        value = value.AddDays(-delta);
+                    }
+                }
+            }
+            return value;
+        }
+
+        //
+        // IsInvalidTime -
+        //
+        // returns true when dateTime falls into a "hole in time".
+        //
+        public Boolean IsInvalidTime(DateTime dateTime) {
+            Boolean isInvalid = false;
+          
+            if ( (dateTime.Kind == DateTimeKind.Unspecified)
+            ||   (dateTime.Kind == DateTimeKind.Local && this == Local) ) {
+
+                // only check Unspecified and (Local when this TimeZoneInfo instance is Local)
+                AdjustmentRule rule = GetAdjustmentRuleForTime(dateTime);
+
+
+                if (rule != null) {
+                    DaylightTime daylightTime = GetDaylightTime(dateTime.Year, rule);
+                    isInvalid = GetIsInvalidTime(dateTime, rule, daylightTime);
+                }
+                else {
+                    isInvalid = false;
+                }
+            }
+
+            return isInvalid;
+        }
+
+        //
+        // GetIsInvalidTime -
+        //
+        // Helper function that checks if a given DateTime is in an invalid time ("time hole")
+        // A "time hole" occurs at a DST transition point when time jumps forward;
+        // For example, in Pacific Standard Time on Sunday, April 2, 2006 time jumps from
+        // 1:59:59.9999999 to 3AM.  The time range 2AM to 2:59:59.9999999AM is the "time hole".
+        // A "time hole" is not limited to only occurring at the start of DST, and may occur at
+        // the end of DST as well.
+        //
+        static private Boolean GetIsInvalidTime(DateTime time, AdjustmentRule rule, DaylightTime daylightTime) {
+            Boolean isInvalid = false;
+            if (rule == null || rule.DaylightDelta == TimeSpan.Zero) {
+                return isInvalid;
+            }
+
+            DateTime startInvalidTime;
+            DateTime endInvalidTime;
+
+            // if at DST start we transition forward in time then there is an ambiguous time range at the DST end
+            if (rule.DaylightDelta < TimeSpan.Zero) {
+                startInvalidTime = daylightTime.End;
+                endInvalidTime = daylightTime.End - rule.DaylightDelta; /* */
+            }
+            else {
+                startInvalidTime = daylightTime.Start;
+                endInvalidTime = daylightTime.Start + rule.DaylightDelta; /* */
+            }
+
+            isInvalid = (time >= startInvalidTime && time < endInvalidTime);
+
+            if (!isInvalid && startInvalidTime.Year != endInvalidTime.Year) {
+                // there exists an extreme corner case where the start or end period is on a year boundary and
+                // because of this the comparison above might have been performed for a year-early or a year-later
+                // than it should have been.
+                DateTime startModifiedInvalidTime;
+                DateTime endModifiedInvalidTime;
+                try {
+                    startModifiedInvalidTime = startInvalidTime.AddYears(1);
+                    endModifiedInvalidTime   = endInvalidTime.AddYears(1);
+                    isInvalid = (time >= startModifiedInvalidTime && time < endModifiedInvalidTime);
+                }
+                catch (ArgumentOutOfRangeException) {}
+
+                if (!isInvalid) {
+                    try {
+                        startModifiedInvalidTime = startInvalidTime.AddYears(-1);
+                        endModifiedInvalidTime  = endInvalidTime.AddYears(-1);
+                        isInvalid = (time >= startModifiedInvalidTime && time < endModifiedInvalidTime);
+                    }
+                    catch (ArgumentOutOfRangeException) {}
+                }
+            }
+            return isInvalid;
+        } 
+#endregion
        }
 
        struct TimeType {
index bbd5bbbc7492ef11b359d090b8b437f07302f59d..1475736d7d5de3aa29a3fc59fbddcb25e8b3e0bc 100644 (file)
@@ -1618,6 +1618,16 @@ namespace System {
                        }
                }
 
+               internal Type GetRootElementType()
+               {
+                       Type rootElementType = this;
+
+                       while (rootElementType.HasElementType)
+                               rootElementType = rootElementType.GetElementType();
+
+                       return rootElementType;
+               }
+
 #if !MOBILE
                void _Type.GetIDsOfNames ([In] ref Guid riid, IntPtr rgszNames, uint cNames, uint lcid, IntPtr rgDispId)
                {
diff --git a/mcs/class/corlib/System/UnitySerializationHolder.cs b/mcs/class/corlib/System/UnitySerializationHolder.cs
deleted file mode 100644 (file)
index 33b323c..0000000
+++ /dev/null
@@ -1,122 +0,0 @@
-//
-// System.UnitySerializationHolder.cs
-//
-// Author:
-//   Lluis Sanchez Gual (lsg@ctv.es)
-//
-// (C) 2003 Lluis Sanchez Gual
-
-//
-// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System;
-using System.Reflection;
-using System.Runtime.Serialization;
-
-namespace System
-{
-       [Serializable]
-       internal class UnitySerializationHolder : IObjectReference, ISerializable
-       {
-               string _data;
-               UnityType _unityType;
-               string _assemblyName;
-
-               // FIXME: there must be other types that use UnitySerializationHolder for
-               // serialization, but I don't know yet which ones.
-
-               enum UnityType: byte
-               {
-                       DBNull = 2,
-                       Type = 4,
-                       Module = 5,
-                       Assembly = 6
-               }
-
-               UnitySerializationHolder (SerializationInfo info, StreamingContext ctx)
-               {
-                       _data = info.GetString ("Data");
-                       _unityType = (UnityType) info.GetInt32 ("UnityType");
-                       _assemblyName = info.GetString ("AssemblyName");
-               }
-
-               public static void GetTypeData (Type instance, SerializationInfo info, StreamingContext ctx)
-               {
-                       info.AddValue ("Data", instance.FullName);
-                       info.AddValue ("UnityType", (int) UnityType.Type);
-                       info.AddValue ("AssemblyName", instance.Assembly.FullName);
-                       info.SetType (typeof (UnitySerializationHolder));
-               }
-
-               public static void GetDBNullData (DBNull instance, SerializationInfo info, StreamingContext ctx)
-               {
-                       info.AddValue ("Data", null);
-                       info.AddValue ("UnityType", (int) UnityType.DBNull);
-                       info.AddValue ("AssemblyName", instance.GetType().Assembly.FullName);
-                       info.SetType (typeof (UnitySerializationHolder));
-               }
-
-               public static void GetAssemblyData (Assembly instance, SerializationInfo info, StreamingContext ctx)
-               {
-                       info.AddValue ("Data", instance.FullName);
-                       info.AddValue ("UnityType", (int) UnityType.Assembly);
-                       info.AddValue ("AssemblyName", instance.FullName);
-                       info.SetType (typeof (UnitySerializationHolder));
-               }
-
-               public static void GetModuleData (Module instance, SerializationInfo info, StreamingContext ctx)
-               {
-                       info.AddValue ("Data", instance.ScopeName);
-                       info.AddValue ("UnityType", (int) UnityType.Module);
-                       info.AddValue ("AssemblyName", instance.Assembly.FullName);
-                       info.SetType (typeof (UnitySerializationHolder));
-               }
-
-               public virtual void GetObjectData (SerializationInfo info, StreamingContext context)
-               {
-                       // Not needed.
-                       throw new NotSupportedException();
-               }
-
-               public virtual object GetRealObject (StreamingContext context)
-               {
-                       switch (_unityType) {
-                       case UnityType.Type: {
-                               Assembly assembly = Assembly.Load (_assemblyName);
-                               return assembly.GetType (_data);
-                       }
-                       case UnityType.DBNull:
-                               return DBNull.Value;
-                       case UnityType.Module: {
-                               Assembly assembly = Assembly.Load (_assemblyName);
-                               return assembly.GetModule (_data);
-                       }
-                       case UnityType.Assembly:
-                               return Assembly.Load (_data);
-                       default:
-                               throw new NotSupportedException (Locale.GetText
-                                       ("UnitySerializationHolder does not support this type."));
-                       }
-               }
-       }
-}
index 90a06f2a373a096883d47cf87ede143b9a6ec881..da61f089ef8d223a2efc91f362b5556d3b681d3e 100644 (file)
@@ -121,7 +121,7 @@ namespace MonoTests.System.Globalization
                public void UnassignedCharacter ()
                {
                        IdnMapping m = new IdnMapping ();
-                       GetAsciiInvalid (m, "\u18b0.com", 1);
+                       //GetAsciiInvalid (m, "\u18b0.com", 1);
                        m.AllowUnassigned = true;
                        GetAscii (m, "\u18b0.com", "xn--6bf.com", 2);
                }
index 5be5a00eabab63ef6031f5b922279b396142f6c9..d0bbd5918d1c366a13953e4275032b43d345f665 100644 (file)
@@ -48,9 +48,6 @@ namespace MonoTests.System.IO.IsolatedStorageTest {
                        Assert.AreEqual (0, isfs.Length, prefix + ".Length");
                        Assert.AreEqual ("[Unknown]", isfs.Name, prefix + ".Name");
                        Assert.AreEqual (0, isfs.Position, prefix + ".Position");
-#if NET_2_0_NOTYET
-                       Assert.IsFalse (isfs.CanTimeout, prefix + ".CanTimeout");
-#endif
                }
 
                [Test]
@@ -118,31 +115,6 @@ namespace MonoTests.System.IO.IsolatedStorageTest {
                {
                        new IsolatedStorageFileStream ("/rootpath", FileMode.Create);
                }
-#if NET_2_0_NOTYET
-               [Test]
-               [ExpectedException (typeof (IsolatedStorageException))]
-               public void SafeFileHandle_ ()
-               {
-                       IsolatedStorageFileStream isfs = new IsolatedStorageFileStream ("safeFileHandle", FileMode.Create);
-                       SafeFileHandle sfh = isfs.SafeFileHandle;
-               }
-
-               [Test]
-               [ExpectedException (typeof (InvalidOperationException))]
-               public void ReadTimeOut ()
-               {
-                       IsolatedStorageFileStream isfs = new IsolatedStorageFileStream ("readTimeout", FileMode.Create);
-                       int t = isfs.ReadTimeout;
-               }
-
-               [Test]
-               [ExpectedException (typeof (InvalidOperationException))]
-               public void WriteTimeOut ()
-               {
-                       IsolatedStorageFileStream isfs = new IsolatedStorageFileStream ("writeTimeout", FileMode.Create);
-                       int t = isfs.WriteTimeout;
-               }
-#endif
 
 #if NET_4_0
                [Test]
index 2ee9e4328f2fe73df5559ef9a06cc2e0986a0453..bd114bb5fb49b2ab7ba6c7c5cbbe4a20a9792f58 100644 (file)
@@ -17,6 +17,7 @@ namespace MonoTests.System.IO
        [TestFixture]
        public class FileStreamWithClosedSafeHandleTests
        {
+#if !NET_2_1
                private FileStream GetFileStreamWithClosedHandle ()
                {
                        var fs1 = new FileStream ("test2", FileMode.OpenOrCreate);
@@ -178,5 +179,6 @@ namespace MonoTests.System.IO
 
                        fs.FlushAsync (new CancellationToken ());
                }
+#endif
        }
 }
index 783f0937f666865389c20e99b0ed659c76d84311..11c8e314d004c797021acd6dd5eb8133a7896f9d 100644 (file)
@@ -360,6 +360,32 @@ namespace MonoTests.System.Reflection.Emit
                        Assert.AreEqual ("Frub", mi.Name);
                }
 
+               [Test]
+               public void GetMethodTokenCrossMethodBuilders ()
+               {
+                       AssemblyBuilder ab = genAssembly ();
+                       ModuleBuilder moduleb = ab.DefineDynamicModule ("foo.dll", "foo.dll");
+
+                       TypeBuilder tb = moduleb.DefineType ("foo");
+                       MethodBuilder mb = tb.DefineMethod("Frub", MethodAttributes.Static, null, new Type[] { typeof(IntPtr) });
+                       int tok = mb.GetToken().Token;
+                       mb.SetImplementationFlags(MethodImplAttributes.NoInlining);
+                       ILGenerator ilgen = mb.GetILGenerator();
+                       ilgen.Emit(OpCodes.Ret);
+
+                       tb.CreateType ();
+
+                       var mi = (MethodInfo) moduleb.ResolveMember (tok);
+                       Assert.IsNotNull (mi);
+
+                       ModuleBuilder moduleb2 = ab.DefineDynamicModule ("foo2.dll", "foo2.dll");
+                       var tok2 = moduleb2.GetMethodToken (mi).Token;
+
+                       MethodBase mi2 = moduleb.ResolveMethod (tok2);
+                       Assert.IsNotNull (mi2);
+                       Assert.AreEqual ("Frub", mi.Name);
+               }
+
                [Test]
                public void ResolveMemberField ()
                {
index 2a6165aff571894f6abd8bdb28d76605833de88c..d6216f73dbed3d1a26ce7cf339341c0c40f73f3d 100644 (file)
@@ -26,8 +26,6 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
-#if NET_4_5
-
 using System;
 using System.Threading;
 using System.Threading.Tasks;
@@ -40,12 +38,15 @@ namespace MonoTests.System.Runtime.CompilerServices
        [TestFixture]
        public class AsyncTaskMethodBuilderTest
        {
+#if !MONOTOUCH
+               // For some reason MT excludes CallContext handling
+
                [Test]
                public void CallContextFlow ()
                {
                        CallContext.LogicalSetData ("name0", "0");
 
-                       Task.WhenAll (Work ("A"), Work ("B")).Wait ();
+                       Assert.IsTrue (Task.WhenAll (Work ("A"), Work ("B")).Wait (4000), "#0");
                        Assert.IsNull (CallContext.LogicalGetData ("A"), "#A");
                        Assert.IsNull (CallContext.LogicalGetData ("B"), "#B");
                }
@@ -60,7 +61,6 @@ namespace MonoTests.System.Runtime.CompilerServices
                        var found = CallContext.LogicalGetData ("name");
                        Assert.AreEqual (name, found, "#2" + name);
                }
+#endif
        }
 }
-
-#endif
\ No newline at end of file
index ecb745aab2f56edcb5bf280b49569312fdef887d..89d08fbf39aee92cec6b64a149a3409ae51b31dc 100644 (file)
@@ -416,12 +416,14 @@ namespace MonoTests.System.Security.Cryptography {
                [Test]
                public void Invariants ()
                {
+                       var hmac = new HMACRIPEMD160 ();
                        Assert.IsTrue (hmac.CanReuseTransform, "HMACRIPEMD160.CanReuseTransform");
                        Assert.IsTrue (hmac.CanTransformMultipleBlocks, "HMACRIPEMD160.CanTransformMultipleBlocks");
                        Assert.AreEqual ("RIPEMD160", hmac.HashName, "HMACRIPEMD160.HashName");
                        Assert.AreEqual (160, hmac.HashSize, "HMACRIPEMD160.HashSize");
                        Assert.AreEqual (1, hmac.InputBlockSize, "HMACRIPEMD160.InputBlockSize");
                        Assert.AreEqual (1, hmac.OutputBlockSize, "HMACRIPEMD160.OutputBlockSize");
+                       Assert.AreEqual (64, hmac.Key.Length, "HMACRIPEMD160.Key.Length");
                        Assert.AreEqual ("System.Security.Cryptography.HMACRIPEMD160", hmac.ToString (), "HMACRIPEMD160.ToString()");
                }
 
index 0227a7b70fcd1e8d197399e54b2a93db18a06551..7245db5136896e6d430ab9db576651fe061ac6ca 100644 (file)
@@ -88,6 +88,7 @@ public class HMACSHA1Test : KeyedHashAlgorithmTest {
                Assert.AreEqual (160, algo.HashSize, "HMACSHA1.HashSize");
                Assert.AreEqual (1, algo.InputBlockSize, "HMACSHA1.InputBlockSize");
                Assert.AreEqual (1, algo.OutputBlockSize, "HMACSHA1.OutputBlockSize");
+               Assert.AreEqual (64, algo.Key.Length, "HMACSHA1.Key.Length");
                Assert.AreEqual ("System.Security.Cryptography.HMACSHA1", algo.ToString (), "HMACSHA1.ToString()"); 
        }
 
index abcf01f70c81a2767ae3fbe2d4603036cb7e429e..4dc50668ab9d391b8f1678d9154cc0f63354e940 100644 (file)
@@ -68,12 +68,14 @@ namespace MonoTests.System.Security.Cryptography {
                [Test]
                public void Invariants () 
                {
+                       var algo = new HMACSHA256 ();
                        Assert.IsTrue (algo.CanReuseTransform, "HMACSHA256.CanReuseTransform");
                        Assert.IsTrue (algo.CanTransformMultipleBlocks, "HMACSHA256.CanTransformMultipleBlocks");
                        Assert.AreEqual ("SHA256", algo.HashName, "HMACSHA256.HashName");
                        Assert.AreEqual (256, algo.HashSize, "HMACSHA256.HashSize");
                        Assert.AreEqual (1, algo.InputBlockSize, "HMACSHA256.InputBlockSize");
                        Assert.AreEqual (1, algo.OutputBlockSize, "HMACSHA256.OutputBlockSize");
+                       Assert.AreEqual (64, algo.Key.Length, "HMACSHA256.Key.Length");
                        Assert.AreEqual ("System.Security.Cryptography.HMACSHA256", algo.ToString (), "HMACSHA256.ToString()"); 
                }
 
index 6877448cad9e6aac7ba66728ca4fc18040311d45..3701c21ddc6785fd70564ef16f3fa74b38763e03 100644 (file)
@@ -89,6 +89,7 @@ namespace MonoTests.System.Security.Cryptography {
                        Assert.AreEqual (384, algo.HashSize, "HMACSHA384.HashSize");
                        Assert.AreEqual (1, algo.InputBlockSize, "HMACSHA384.InputBlockSize");
                        Assert.AreEqual (1, algo.OutputBlockSize, "HMACSHA384.OutputBlockSize");
+                       Assert.AreEqual (128, algo.Key.Length, "HMACSHA384.Key.Length");
                        Assert.AreEqual ("System.Security.Cryptography.HMACSHA384", algo.ToString (), "HMACSHA384.ToString()"); 
                }
 
index 55a7b87589c0a0ac859ef512bd4c46ea4a66fac6..4eb4f4446dcf48e68db6a2ef3920e6eaa6c847cf 100644 (file)
@@ -88,6 +88,7 @@ namespace MonoTests.System.Security.Cryptography {
                        Assert.AreEqual (512, algo.HashSize, "HMACSHA512.HashSize");
                        Assert.AreEqual (1, algo.InputBlockSize, "HMACSHA512.InputBlockSize");
                        Assert.AreEqual (1, algo.OutputBlockSize, "HMACSHA512.OutputBlockSize");
+                       Assert.AreEqual (128, algo.Key.Length, "HMACSHA512.Key.Length");
                        Assert.AreEqual ("System.Security.Cryptography.HMACSHA512", algo.ToString (), "HMACSHA512.ToString()");
                }
 
index 4745e09b1e8378125f555dd80219447f50767194..16fca588d1e4a395222bdd3c7e335fba2b898143 100644 (file)
@@ -253,7 +253,7 @@ namespace MonoTests.System.Text
                        var chars = new char[] { '9', '8', '7', '6', '5' };
                        var ret = enc.GetChars (bytes, 0, bytes.Length, chars, 0);
                        
-                       Assert.That (ret, Is.EqualTo (4), "ret"); // FIXME: Wrong it should be 2
+                       Assert.That (ret, Is.EqualTo (2), "ret");
                        Assert.That (chars [0], Is.EqualTo ('0'), "chars[0]");
                        Assert.That (chars [1], Is.EqualTo ('1'), "chars[1]");
                        Assert.That (chars [2], Is.EqualTo ('7'), "chars[2]");
index 87e6c80fa8040898c0cb0dfbadd652e3f9daa0d9..6fa8643985af4311ea4a649c4de0b465deba45be 100644 (file)
@@ -57,7 +57,7 @@ namespace MonoTests.System.Text
                public void GetEncodingForAllInfo ()
                {
                        foreach (EncodingInfo i in Encoding.GetEncodings ())
-                               Assert.IsNotNull (i.GetEncoding (), "codepage " + i);
+                               Assert.IsNotNull (i.GetEncoding (), "codepage " + i.CodePage);
                }
 
                void GetEncoding (int id, List<int> list) {
index 6cb02f57f1e6f0bc9ad4a8eb3b6309d3b28f0e04..d5a310ee5638bd2ac1c54d939f8eac7ecbe63d1f 100644 (file)
@@ -9,18 +9,17 @@ namespace MonoTests.System.Text
        public class UTF32EncodingTest
        {
                [Test] // GetByteCount (Char [])
-               [Category ("NotDotNet")] // A1/B1 return 24 on MS
                public void GetByteCount1 ()
                {
                        char [] chars = new char[] { 'z', 'a', '\u0306',
                                '\u01FD', '\u03B2', '\uD8FF', '\uDCFF' };
 
                        UTF32Encoding le = new UTF32Encoding (false, true);
-                       Assert.AreEqual (28, le.GetByteCount (chars), "#A1");
+                       Assert.AreEqual (24, le.GetByteCount (chars), "#A1");
                        Assert.AreEqual (0, le.GetByteCount (new char [0]), "#A2");
 
                        UTF32Encoding be = new UTF32Encoding (true, true);
-                       Assert.AreEqual (28, be.GetByteCount (chars), "#B1");
+                       Assert.AreEqual (24, be.GetByteCount (chars), "#B1");
                        Assert.AreEqual (0, be.GetByteCount (new char [0]), "#B2");
                }
 
@@ -40,17 +39,16 @@ namespace MonoTests.System.Text
                }
 
                [Test] // GetByteCount (String)
-               [Category ("NotDotNet")] // A1/B1 return 24 on MS
                public void GetByteCount2 ()
                {
                        string s = "za\u0306\u01FD\u03B2\uD8FF\uDCFF";
 
                        UTF32Encoding le = new UTF32Encoding (false, true);
-                       Assert.AreEqual (28, le.GetByteCount (s), "#A1");
+                       Assert.AreEqual (24, le.GetByteCount (s), "#A1");
                        Assert.AreEqual (0, le.GetByteCount (string.Empty), "#A2");
 
                        UTF32Encoding be = new UTF32Encoding (true, true);
-                       Assert.AreEqual (28, be.GetByteCount (s), "#B1");
+                       Assert.AreEqual (24, be.GetByteCount (s), "#B1");
                        Assert.AreEqual (0, be.GetByteCount (string.Empty), "#B2");
                }
 
index 3b112fc57dbd7932f696a171520b8aa1a07f4e3a..2dbe7fb39fee3bd46979b67f4d3ef260cb83e39f 100644 (file)
@@ -269,7 +269,7 @@ namespace MonoTests.System.Text
 
                [Test]
                [ExpectedException (typeof (ArgumentException))]
-               [Category ("NotDotNet")] // MS bug
+               [Ignore ("referencesource bug")]
                public void Bug77315 ()
                {
                        string s = new UTF7Encoding ().GetString (
index 54460afd4e3b835e58c8794a4bb358f41414c54d..82aab2be0613795941937c7499286cc7e067d308 100644 (file)
@@ -1156,5 +1156,46 @@ namespace MonoTests.System.Text
                        data = new byte [] { 0xF4, 0x8F, 0xB0, 0xC0 };
                        t.TestDecoderFallback (data, "??", new byte [] { 0xF4, 0x8F, 0xB0 }, new byte [] { 0xC0 });
                }
+
+               [Test]
+               public void DecoderBug23771 ()
+               {
+                       var input = "\u733F"; // 'mono' on Japanese, 3bytes in UTF-8.
+                       var encoded = Encoding.UTF8.GetBytes (input);
+                       var decoder = Encoding.UTF8.GetDecoder ();
+                       var chars = new char [10]; // Just enough space to decode.
+                       var result = new StringBuilder ();
+                       var bytes = new byte [1]; // Simulates chunked input bytes.
+                       // Specify encoded bytes separetely.
+                       foreach (var b in encoded) {
+                               bytes [0] = b;
+                               int bytesUsed, charsUsed;
+                               bool completed;
+                               decoder.Convert (bytes, 0, bytes.Length, chars, 0, chars.Length, false, out bytesUsed, out charsUsed, out completed);
+                               result.Append (chars, 0, charsUsed);
+                               // Expected outputs are written in bottom.
+                               //Debug.Print ("bytesUsed:{0}, charsUsed:{1}, completed:{2}, result:'{3}'", bytesUsed, charsUsed, completed, result);
+                       }
+
+                       // Expected: NO assertion error.
+                       Assert.AreEqual (input, result.ToString (), "#1");
+
+                       /*
+                        * Expected Debug outputs are:
+                        * bytesUsed:1, charsUsed:0, completed:True, result:''
+                        * bytesUsed:1, charsUsed:0, completed:True, result:''
+                        * bytesUsed:1, charsUsed:1, completed:True, result:'猿'
+                        * 
+                        * -- Note: '猿' is U+733F (1char in UTF-16)
+                        * 
+                        * Actual Debug output are:
+                        * bytesUsed:3, charsUsed:1, completed:False, result:'�'
+                        * bytesUsed:3, charsUsed:1, completed:False, result:'��'
+                        * bytesUsed:3, charsUsed:1, completed:False, result:'���'
+                        * 
+                        * All output parameters are not match.
+                        * -- Note: '�' is decoder fallback char (U+FFFD)
+                        */
+               }
        }
 }
index e42ae6ac9461f4aca246890a9e7fec7cf8be3839..108bd16953a447444a6a43496ddb1a25d3e04561 100644 (file)
@@ -114,235 +114,15 @@ namespace MonoTests.System
                + "85 86 87 88 89 8a 8b 8c 8d 8e 8f 90 91 92 93 94 95 96 97 "
                + "98 99 9a 9b 9c 9d 9e 9f found 65 chars.";
 
-               string digits = "30 31 32 33 34 35 36 37 38 39 660 661 662 "
-               + "663 664 665 666 667 668 669 6f0 6f1 6f2 6f3 6f4 6f5 6f6 "
-               + "6f7 6f8 6f9 7c0 7c1 7c2 7c3 7c4 7c5 7c6 7c7 7c8 7c9 966 "
-               + "967 968 969 96a 96b 96c 96d 96e 96f 9e6 9e7 9e8 9e9 9ea "
-               + "9eb 9ec 9ed 9ee 9ef a66 a67 a68 a69 a6a a6b a6c a6d a6e "
-               + "a6f ae6 ae7 ae8 ae9 aea aeb aec aed aee aef b66 b67 b68 "
-               + "b69 b6a b6b b6c b6d b6e b6f be6 be7 be8 be9 bea beb bec "
-               + "bed bee bef c66 c67 c68 c69 c6a c6b c6c c6d c6e c6f ce6 "
-               + "ce7 ce8 ce9 cea ceb cec ced cee cef d66 d67 d68 d69 d6a "
-               + "d6b d6c d6d d6e d6f e50 e51 e52 e53 e54 e55 e56 e57 e58 "
-               + "e59 ed0 ed1 ed2 ed3 ed4 ed5 ed6 ed7 ed8 ed9 f20 f21 f22 "
-               + "f23 f24 f25 f26 f27 f28 f29 1040 1041 1042 1043 1044 1045 "
-               + "1046 1047 1048 1049 1090 1091 1092 1093 1094 1095 1096 "
-               + "1097 1098 1099 17e0 17e1 17e2 17e3 17e4 17e5 17e6 17e7 "
-               + "17e8 17e9 1810 1811 1812 1813 1814 1815 1816 1817 1818 "
-               + "1819 1946 1947 1948 1949 194a 194b 194c 194d 194e 194f "
-               + "19d0 19d1 19d2 19d3 19d4 19d5 19d6 19d7 19d8 19d9 1b50 "
-               + "1b51 1b52 1b53 1b54 1b55 1b56 1b57 1b58 1b59 1bb0 1bb1 "
-               + "1bb2 1bb3 1bb4 1bb5 1bb6 1bb7 1bb8 1bb9 1c40 1c41 1c42 "
-               + "1c43 1c44 1c45 1c46 1c47 1c48 1c49 1c50 1c51 1c52 1c53 "
-               + "1c54 1c55 1c56 1c57 1c58 1c59 a620 a621 a622 a623 a624 "
-               + "a625 a626 a627 a628 a629 a8d0 a8d1 a8d2 a8d3 a8d4 a8d5 "
-               + "a8d6 a8d7 a8d8 a8d9 a900 a901 a902 a903 a904 a905 a906 "
-               + "a907 a908 a909 aa50 aa51 aa52 aa53 aa54 aa55 aa56 aa57 "
-               + "aa58 aa59 ff10 ff11 ff12 ff13 ff14 ff15 ff16 ff17 ff18 "
-               + "ff19 found 310 chars.";
+               string digits = "30 31 32 33 34 35 36 37 38 39 660 661 662 663 664 665 666 667 668 669 6f0 6f1 6f2 6f3 6f4 6f5 6f6 6f7 6f8 6f9 7c0 7c1 7c2 7c3 7c4 7c5 7c6 7c7 7c8 7c9 966 967 968 969 96a 96b 96c 96d 96e 96f 9e6 9e7 9e8 9e9 9ea 9eb 9ec 9ed 9ee 9ef a66 a67 a68 a69 a6a a6b a6c a6d a6e a6f ae6 ae7 ae8 ae9 aea aeb aec aed aee aef b66 b67 b68 b69 b6a b6b b6c b6d b6e b6f be6 be7 be8 be9 bea beb bec bed bee bef c66 c67 c68 c69 c6a c6b c6c c6d c6e c6f ce6 ce7 ce8 ce9 cea ceb cec ced cee cef d66 d67 d68 d69 d6a d6b d6c d6d d6e d6f e50 e51 e52 e53 e54 e55 e56 e57 e58 e59 ed0 ed1 ed2 ed3 ed4 ed5 ed6 ed7 ed8 ed9 f20 f21 f22 f23 f24 f25 f26 f27 f28 f29 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 17e0 17e1 17e2 17e3 17e4 17e5 17e6 17e7 17e8 17e9 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1946 1947 1948 1949 194a 194b 194c 194d 194e 194f 19d0 19d1 19d2 19d3 19d4 19d5 19d6 19d7 19d8 19d9 1a80 1a81 1a82 1a83 1a84 1a85 1a86 1a87 1a88 1a89 1a90 1a91 1a92 1a93 1a94 1a95 1a96 1a97 1a98 1a99 1b50 1b51 1b52 1b53 1b54 1b55 1b56 1b57 1b58 1b59 1bb0 1bb1 1bb2 1bb3 1bb4 1bb5 1bb6 1bb7 1bb8 1bb9 1c40 1c41 1c42 1c43 1c44 1c45 1c46 1c47 1c48 1c49 1c50 1c51 1c52 1c53 1c54 1c55 1c56 1c57 1c58 1c59 a620 a621 a622 a623 a624 a625 a626 a627 a628 a629 a8d0 a8d1 a8d2 a8d3 a8d4 a8d5 a8d6 a8d7 a8d8 a8d9 a900 a901 a902 a903 a904 a905 a906 a907 a908 a909 a9d0 a9d1 a9d2 a9d3 a9d4 a9d5 a9d6 a9d7 a9d8 a9d9 aa50 aa51 aa52 aa53 aa54 aa55 aa56 aa57 aa58 aa59 abf0 abf1 abf2 abf3 abf4 abf5 abf6 abf7 abf8 abf9 ff10 ff11 ff12 ff13 ff14 ff15 ff16 ff17 ff18 ff19 found 350 chars.";
 
-               string lowerChars = "61 62 63 64 65 66 67 68 69 6a 6b 6c 6d "
-               + "6e 6f 70 71 72 73 74 75 76 77 78 79 7a aa b5 ba df e0 e1 "
-               + "e2 e3 e4 e5 e6 e7 e8 e9 ea eb ec ed ee ef f0 f1 f2 f3 f4 "
-               + "f5 f6 f8 f9 fa fb fc fd fe ff 101 103 105 107 109 10b 10d "
-               + "10f 111 113 115 117 119 11b 11d 11f 121 123 125 127 129 "
-               + "12b 12d 12f 131 133 135 137 138 13a 13c 13e 140 142 144 "
-               + "146 148 149 14b 14d 14f 151 153 155 157 159 15b 15d 15f "
-               + "161 163 165 167 169 16b 16d 16f 171 173 175 177 17a 17c "
-               + "17e 17f 180 183 185 188 18c 18d 192 195 199 19a 19b 19e "
-               + "1a1 1a3 1a5 1a8 1aa 1ab 1ad 1b0 1b4 1b6 1b9 1ba 1bd 1be "
-               + "1bf 1c6 1c9 1cc 1ce 1d0 1d2 1d4 1d6 1d8 1da 1dc 1dd 1df "
-               + "1e1 1e3 1e5 1e7 1e9 1eb 1ed 1ef 1f0 1f3 1f5 1f9 1fb 1fd "
-               + "1ff 201 203 205 207 209 20b 20d 20f 211 213 215 217 219 "
-               + "21b 21d 21f 221 223 225 227 229 22b 22d 22f 231 233 234 "
-               + "235 236 237 238 239 23c 23f 240 242 247 249 24b 24d 24f "
-               + "250 251 252 253 254 255 256 257 258 259 25a 25b 25c 25d "
-               + "25e 25f 260 261 262 263 264 265 266 267 268 269 26a 26b "
-               + "26c 26d 26e 26f 270 271 272 273 274 275 276 277 278 279 "
-               + "27a 27b 27c 27d 27e 27f 280 281 282 283 284 285 286 287 "
-               + "288 289 28a 28b 28c 28d 28e 28f 290 291 292 293 295 296 "
-               + "297 298 299 29a 29b 29c 29d 29e 29f 2a0 2a1 2a2 2a3 2a4 "
-               + "2a5 2a6 2a7 2a8 2a9 2aa 2ab 2ac 2ad 2ae 2af 371 373 377 "
-               + "37b 37c 37d 390 3ac 3ad 3ae 3af 3b0 3b1 3b2 3b3 3b4 3b5 "
-               + "3b6 3b7 3b8 3b9 3ba 3bb 3bc 3bd 3be 3bf 3c0 3c1 3c2 3c3 "
-               + "3c4 3c5 3c6 3c7 3c8 3c9 3ca 3cb 3cc 3cd 3ce 3d0 3d1 3d5 "
-               + "3d6 3d7 3d9 3db 3dd 3df 3e1 3e3 3e5 3e7 3e9 3eb 3ed 3ef "
-               + "3f0 3f1 3f2 3f3 3f5 3f8 3fb 3fc 430 431 432 433 434 435 "
-               + "436 437 438 439 43a 43b 43c 43d 43e 43f 440 441 442 443 "
-               + "444 445 446 447 448 449 44a 44b 44c 44d 44e 44f 450 451 "
-               + "452 453 454 455 456 457 458 459 45a 45b 45c 45d 45e 45f "
-               + "461 463 465 467 469 46b 46d 46f 471 473 475 477 479 47b "
-               + "47d 47f 481 48b 48d 48f 491 493 495 497 499 49b 49d 49f "
-               + "4a1 4a3 4a5 4a7 4a9 4ab 4ad 4af 4b1 4b3 4b5 4b7 4b9 4bb "
-               + "4bd 4bf 4c2 4c4 4c6 4c8 4ca 4cc 4ce 4cf 4d1 4d3 4d5 4d7 "
-               + "4d9 4db 4dd 4df 4e1 4e3 4e5 4e7 4e9 4eb 4ed 4ef 4f1 4f3 "
-               + "4f5 4f7 4f9 4fb 4fd 4ff 501 503 505 507 509 50b 50d 50f "
-               + "511 513 515 517 519 51b 51d 51f 521 523 561 562 563 564 "
-               + "565 566 567 568 569 56a 56b 56c 56d 56e 56f 570 571 572 "
-               + "573 574 575 576 577 578 579 57a 57b 57c 57d 57e 57f 580 "
-               + "581 582 583 584 585 586 587 1d00 1d01 1d02 1d03 1d04 1d05 "
-               + "1d06 1d07 1d08 1d09 1d0a 1d0b 1d0c 1d0d 1d0e 1d0f 1d10 "
-               + "1d11 1d12 1d13 1d14 1d15 1d16 1d17 1d18 1d19 1d1a 1d1b "
-               + "1d1c 1d1d 1d1e 1d1f 1d20 1d21 1d22 1d23 1d24 1d25 1d26 "
-               + "1d27 1d28 1d29 1d2a 1d2b 1d62 1d63 1d64 1d65 1d66 1d67 "
-               + "1d68 1d69 1d6a 1d6b 1d6c 1d6d 1d6e 1d6f 1d70 1d71 1d72 "
-               + "1d73 1d74 1d75 1d76 1d77 1d79 1d7a 1d7b 1d7c 1d7d 1d7e "
-               + "1d7f 1d80 1d81 1d82 1d83 1d84 1d85 1d86 1d87 1d88 1d89 "
-               + "1d8a 1d8b 1d8c 1d8d 1d8e 1d8f 1d90 1d91 1d92 1d93 1d94 "
-               + "1d95 1d96 1d97 1d98 1d99 1d9a 1e01 1e03 1e05 1e07 1e09 "
-               + "1e0b 1e0d 1e0f 1e11 1e13 1e15 1e17 1e19 1e1b 1e1d 1e1f "
-               + "1e21 1e23 1e25 1e27 1e29 1e2b 1e2d 1e2f 1e31 1e33 1e35 "
-               + "1e37 1e39 1e3b 1e3d 1e3f 1e41 1e43 1e45 1e47 1e49 1e4b "
-               + "1e4d 1e4f 1e51 1e53 1e55 1e57 1e59 1e5b 1e5d 1e5f 1e61 "
-               + "1e63 1e65 1e67 1e69 1e6b 1e6d 1e6f 1e71 1e73 1e75 1e77 "
-               + "1e79 1e7b 1e7d 1e7f 1e81 1e83 1e85 1e87 1e89 1e8b 1e8d "
-               + "1e8f 1e91 1e93 1e95 1e96 1e97 1e98 1e99 1e9a 1e9b 1e9c "
-               + "1e9d 1e9f 1ea1 1ea3 1ea5 1ea7 1ea9 1eab 1ead 1eaf 1eb1 "
-               + "1eb3 1eb5 1eb7 1eb9 1ebb 1ebd 1ebf 1ec1 1ec3 1ec5 1ec7 "
-               + "1ec9 1ecb 1ecd 1ecf 1ed1 1ed3 1ed5 1ed7 1ed9 1edb 1edd "
-               + "1edf 1ee1 1ee3 1ee5 1ee7 1ee9 1eeb 1eed 1eef 1ef1 1ef3 "
-               + "1ef5 1ef7 1ef9 1efb 1efd 1eff 1f00 1f01 1f02 1f03 1f04 "
-               + "1f05 1f06 1f07 1f10 1f11 1f12 1f13 1f14 1f15 1f20 1f21 "
-               + "1f22 1f23 1f24 1f25 1f26 1f27 1f30 1f31 1f32 1f33 1f34 "
-               + "1f35 1f36 1f37 1f40 1f41 1f42 1f43 1f44 1f45 1f50 1f51 "
-               + "1f52 1f53 1f54 1f55 1f56 1f57 1f60 1f61 1f62 1f63 1f64 "
-               + "1f65 1f66 1f67 1f70 1f71 1f72 1f73 1f74 1f75 1f76 1f77 "
-               + "1f78 1f79 1f7a 1f7b 1f7c 1f7d 1f80 1f81 1f82 1f83 1f84 "
-               + "1f85 1f86 1f87 1f90 1f91 1f92 1f93 1f94 1f95 1f96 1f97 "
-               + "1fa0 1fa1 1fa2 1fa3 1fa4 1fa5 1fa6 1fa7 1fb0 1fb1 1fb2 "
-               + "1fb3 1fb4 1fb6 1fb7 1fbe 1fc2 1fc3 1fc4 1fc6 1fc7 1fd0 "
-               + "1fd1 1fd2 1fd3 1fd6 1fd7 1fe0 1fe1 1fe2 1fe3 1fe4 1fe5 "
-               + "1fe6 1fe7 1ff2 1ff3 1ff4 1ff6 1ff7 2071 207f 210a 210e "
-               + "210f 2113 212f 2134 2139 213c 213d 2146 2147 2148 2149 "
-               + "214e 2184 2c30 2c31 2c32 2c33 2c34 2c35 2c36 2c37 2c38 "
-               + "2c39 2c3a 2c3b 2c3c 2c3d 2c3e 2c3f 2c40 2c41 2c42 2c43 "
-               + "2c44 2c45 2c46 2c47 2c48 2c49 2c4a 2c4b 2c4c 2c4d 2c4e "
-               + "2c4f 2c50 2c51 2c52 2c53 2c54 2c55 2c56 2c57 2c58 2c59 "
-               + "2c5a 2c5b 2c5c 2c5d 2c5e 2c61 2c65 2c66 2c68 2c6a 2c6c "
-               + "2c71 2c73 2c74 2c76 2c77 2c78 2c79 2c7a 2c7b 2c7c 2c81 "
-               + "2c83 2c85 2c87 2c89 2c8b 2c8d 2c8f 2c91 2c93 2c95 2c97 "
-               + "2c99 2c9b 2c9d 2c9f 2ca1 2ca3 2ca5 2ca7 2ca9 2cab 2cad "
-               + "2caf 2cb1 2cb3 2cb5 2cb7 2cb9 2cbb 2cbd 2cbf 2cc1 2cc3 "
-               + "2cc5 2cc7 2cc9 2ccb 2ccd 2ccf 2cd1 2cd3 2cd5 2cd7 2cd9 "
-               + "2cdb 2cdd 2cdf 2ce1 2ce3 2ce4 2d00 2d01 2d02 2d03 2d04 "
-               + "2d05 2d06 2d07 2d08 2d09 2d0a 2d0b 2d0c 2d0d 2d0e 2d0f "
-               + "2d10 2d11 2d12 2d13 2d14 2d15 2d16 2d17 2d18 2d19 2d1a "
-               + "2d1b 2d1c 2d1d 2d1e 2d1f 2d20 2d21 2d22 2d23 2d24 2d25 "
-               + "a641 a643 a645 a647 a649 a64b a64d a64f a651 a653 a655 "
-               + "a657 a659 a65b a65d a65f a663 a665 a667 a669 a66b a66d "
-               + "a681 a683 a685 a687 a689 a68b a68d a68f a691 a693 a695 "
-               + "a697 a723 a725 a727 a729 a72b a72d a72f a730 a731 a733 "
-               + "a735 a737 a739 a73b a73d a73f a741 a743 a745 a747 a749 "
-               + "a74b a74d a74f a751 a753 a755 a757 a759 a75b a75d a75f "
-               + "a761 a763 a765 a767 a769 a76b a76d a76f a771 a772 a773 "
-               + "a774 a775 a776 a777 a778 a77a a77c a77f a781 a783 a785 "
-               + "a787 a78c fb00 fb01 fb02 fb03 fb04 fb05 fb06 fb13 fb14 "
-               + "fb15 fb16 fb17 ff41 ff42 ff43 ff44 ff45 ff46 ff47 ff48 "
-               + "ff49 ff4a ff4b ff4c ff4d ff4e ff4f ff50 ff51 ff52 ff53 "
-               + "ff54 ff55 ff56 ff57 ff58 ff59 ff5a found 1216 chars.";
+               string lowerChars = "61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 77 78 79 7a aa b5 ba df e0 e1 e2 e3 e4 e5 e6 e7 e8 e9 ea eb ec ed ee ef f0 f1 f2 f3 f4 f5 f6 f8 f9 fa fb fc fd fe ff 101 103 105 107 109 10b 10d 10f 111 113 115 117 119 11b 11d 11f 121 123 125 127 129 12b 12d 12f 131 133 135 137 138 13a 13c 13e 140 142 144 146 148 149 14b 14d 14f 151 153 155 157 159 15b 15d 15f 161 163 165 167 169 16b 16d 16f 171 173 175 177 17a 17c 17e 17f 180 183 185 188 18c 18d 192 195 199 19a 19b 19e 1a1 1a3 1a5 1a8 1aa 1ab 1ad 1b0 1b4 1b6 1b9 1ba 1bd 1be 1bf 1c6 1c9 1cc 1ce 1d0 1d2 1d4 1d6 1d8 1da 1dc 1dd 1df 1e1 1e3 1e5 1e7 1e9 1eb 1ed 1ef 1f0 1f3 1f5 1f9 1fb 1fd 1ff 201 203 205 207 209 20b 20d 20f 211 213 215 217 219 21b 21d 21f 221 223 225 227 229 22b 22d 22f 231 233 234 235 236 237 238 239 23c 23f 240 242 247 249 24b 24d 24f 250 251 252 253 254 255 256 257 258 259 25a 25b 25c 25d 25e 25f 260 261 262 263 264 265 266 267 268 269 26a 26b 26c 26d 26e 26f 270 271 272 273 274 275 276 277 278 279 27a 27b 27c 27d 27e 27f 280 281 282 283 284 285 286 287 288 289 28a 28b 28c 28d 28e 28f 290 291 292 293 295 296 297 298 299 29a 29b 29c 29d 29e 29f 2a0 2a1 2a2 2a3 2a4 2a5 2a6 2a7 2a8 2a9 2aa 2ab 2ac 2ad 2ae 2af 371 373 377 37b 37c 37d 390 3ac 3ad 3ae 3af 3b0 3b1 3b2 3b3 3b4 3b5 3b6 3b7 3b8 3b9 3ba 3bb 3bc 3bd 3be 3bf 3c0 3c1 3c2 3c3 3c4 3c5 3c6 3c7 3c8 3c9 3ca 3cb 3cc 3cd 3ce 3d0 3d1 3d5 3d6 3d7 3d9 3db 3dd 3df 3e1 3e3 3e5 3e7 3e9 3eb 3ed 3ef 3f0 3f1 3f2 3f3 3f5 3f8 3fb 3fc 430 431 432 433 434 435 436 437 438 439 43a 43b 43c 43d 43e 43f 440 441 442 443 444 445 446 447 448 449 44a 44b 44c 44d 44e 44f 450 451 452 453 454 455 456 457 458 459 45a 45b 45c 45d 45e 45f 461 463 465 467 469 46b 46d 46f 471 473 475 477 479 47b 47d 47f 481 48b 48d 48f 491 493 495 497 499 49b 49d 49f 4a1 4a3 4a5 4a7 4a9 4ab 4ad 4af 4b1 4b3 4b5 4b7 4b9 4bb 4bd 4bf 4c2 4c4 4c6 4c8 4ca 4cc 4ce 4cf 4d1 4d3 4d5 4d7 4d9 4db 4dd 4df 4e1 4e3 4e5 4e7 4e9 4eb 4ed 4ef 4f1 4f3 4f5 4f7 4f9 4fb 4fd 4ff 501 503 505 507 509 50b 50d 50f 511 513 515 517 519 51b 51d 51f 521 523 525 527 561 562 563 564 565 566 567 568 569 56a 56b 56c 56d 56e 56f 570 571 572 573 574 575 576 577 578 579 57a 57b 57c 57d 57e 57f 580 581 582 583 584 585 586 587 1d00 1d01 1d02 1d03 1d04 1d05 1d06 1d07 1d08 1d09 1d0a 1d0b 1d0c 1d0d 1d0e 1d0f 1d10 1d11 1d12 1d13 1d14 1d15 1d16 1d17 1d18 1d19 1d1a 1d1b 1d1c 1d1d 1d1e 1d1f 1d20 1d21 1d22 1d23 1d24 1d25 1d26 1d27 1d28 1d29 1d2a 1d2b 1d6b 1d6c 1d6d 1d6e 1d6f 1d70 1d71 1d72 1d73 1d74 1d75 1d76 1d77 1d79 1d7a 1d7b 1d7c 1d7d 1d7e 1d7f 1d80 1d81 1d82 1d83 1d84 1d85 1d86 1d87 1d88 1d89 1d8a 1d8b 1d8c 1d8d 1d8e 1d8f 1d90 1d91 1d92 1d93 1d94 1d95 1d96 1d97 1d98 1d99 1d9a 1e01 1e03 1e05 1e07 1e09 1e0b 1e0d 1e0f 1e11 1e13 1e15 1e17 1e19 1e1b 1e1d 1e1f 1e21 1e23 1e25 1e27 1e29 1e2b 1e2d 1e2f 1e31 1e33 1e35 1e37 1e39 1e3b 1e3d 1e3f 1e41 1e43 1e45 1e47 1e49 1e4b 1e4d 1e4f 1e51 1e53 1e55 1e57 1e59 1e5b 1e5d 1e5f 1e61 1e63 1e65 1e67 1e69 1e6b 1e6d 1e6f 1e71 1e73 1e75 1e77 1e79 1e7b 1e7d 1e7f 1e81 1e83 1e85 1e87 1e89 1e8b 1e8d 1e8f 1e91 1e93 1e95 1e96 1e97 1e98 1e99 1e9a 1e9b 1e9c 1e9d 1e9f 1ea1 1ea3 1ea5 1ea7 1ea9 1eab 1ead 1eaf 1eb1 1eb3 1eb5 1eb7 1eb9 1ebb 1ebd 1ebf 1ec1 1ec3 1ec5 1ec7 1ec9 1ecb 1ecd 1ecf 1ed1 1ed3 1ed5 1ed7 1ed9 1edb 1edd 1edf 1ee1 1ee3 1ee5 1ee7 1ee9 1eeb 1eed 1eef 1ef1 1ef3 1ef5 1ef7 1ef9 1efb 1efd 1eff 1f00 1f01 1f02 1f03 1f04 1f05 1f06 1f07 1f10 1f11 1f12 1f13 1f14 1f15 1f20 1f21 1f22 1f23 1f24 1f25 1f26 1f27 1f30 1f31 1f32 1f33 1f34 1f35 1f36 1f37 1f40 1f41 1f42 1f43 1f44 1f45 1f50 1f51 1f52 1f53 1f54 1f55 1f56 1f57 1f60 1f61 1f62 1f63 1f64 1f65 1f66 1f67 1f70 1f71 1f72 1f73 1f74 1f75 1f76 1f77 1f78 1f79 1f7a 1f7b 1f7c 1f7d 1f80 1f81 1f82 1f83 1f84 1f85 1f86 1f87 1f90 1f91 1f92 1f93 1f94 1f95 1f96 1f97 1fa0 1fa1 1fa2 1fa3 1fa4 1fa5 1fa6 1fa7 1fb0 1fb1 1fb2 1fb3 1fb4 1fb6 1fb7 1fbe 1fc2 1fc3 1fc4 1fc6 1fc7 1fd0 1fd1 1fd2 1fd3 1fd6 1fd7 1fe0 1fe1 1fe2 1fe3 1fe4 1fe5 1fe6 1fe7 1ff2 1ff3 1ff4 1ff6 1ff7 210a 210e 210f 2113 212f 2134 2139 213c 213d 2146 2147 2148 2149 214e 2184 2c30 2c31 2c32 2c33 2c34 2c35 2c36 2c37 2c38 2c39 2c3a 2c3b 2c3c 2c3d 2c3e 2c3f 2c40 2c41 2c42 2c43 2c44 2c45 2c46 2c47 2c48 2c49 2c4a 2c4b 2c4c 2c4d 2c4e 2c4f 2c50 2c51 2c52 2c53 2c54 2c55 2c56 2c57 2c58 2c59 2c5a 2c5b 2c5c 2c5d 2c5e 2c61 2c65 2c66 2c68 2c6a 2c6c 2c71 2c73 2c74 2c76 2c77 2c78 2c79 2c7a 2c7b 2c81 2c83 2c85 2c87 2c89 2c8b 2c8d 2c8f 2c91 2c93 2c95 2c97 2c99 2c9b 2c9d 2c9f 2ca1 2ca3 2ca5 2ca7 2ca9 2cab 2cad 2caf 2cb1 2cb3 2cb5 2cb7 2cb9 2cbb 2cbd 2cbf 2cc1 2cc3 2cc5 2cc7 2cc9 2ccb 2ccd 2ccf 2cd1 2cd3 2cd5 2cd7 2cd9 2cdb 2cdd 2cdf 2ce1 2ce3 2ce4 2cec 2cee 2cf3 2d00 2d01 2d02 2d03 2d04 2d05 2d06 2d07 2d08 2d09 2d0a 2d0b 2d0c 2d0d 2d0e 2d0f 2d10 2d11 2d12 2d13 2d14 2d15 2d16 2d17 2d18 2d19 2d1a 2d1b 2d1c 2d1d 2d1e 2d1f 2d20 2d21 2d22 2d23 2d24 2d25 2d27 2d2d a641 a643 a645 a647 a649 a64b a64d a64f a651 a653 a655 a657 a659 a65b a65d a65f a661 a663 a665 a667 a669 a66b a66d a681 a683 a685 a687 a689 a68b a68d a68f a691 a693 a695 a697 a723 a725 a727 a729 a72b a72d a72f a730 a731 a733 a735 a737 a739 a73b a73d a73f a741 a743 a745 a747 a749 a74b a74d a74f a751 a753 a755 a757 a759 a75b a75d a75f a761 a763 a765 a767 a769 a76b a76d a76f a771 a772 a773 a774 a775 a776 a777 a778 a77a a77c a77f a781 a783 a785 a787 a78c a78e a791 a793 a7a1 a7a3 a7a5 a7a7 a7a9 a7fa fb00 fb01 fb02 fb03 fb04 fb05 fb06 fb13 fb14 fb15 fb16 fb17 ff41 ff42 ff43 ff44 ff45 ff46 ff47 ff48 ff49 ff4a ff4b ff4c ff4d ff4e ff4f ff50 ff51 ff52 ff53 ff54 ff55 ff56 ff57 ff58 ff59 ff5a found 1221 chars.";
 
-               string numbers = "30 31 32 33 34 35 36 37 38 39 b2 b3 b9 bc "
-               + "bd be 660 661 662 663 664 665 666 667 668 669 6f0 6f1 6f2 "
-               + "6f3 6f4 6f5 6f6 6f7 6f8 6f9 7c0 7c1 7c2 7c3 7c4 7c5 7c6 "
-               + "7c7 7c8 7c9 966 967 968 969 96a 96b 96c 96d 96e 96f 9e6 "
-               + "9e7 9e8 9e9 9ea 9eb 9ec 9ed 9ee 9ef 9f4 9f5 9f6 9f7 9f8 "
-               + "9f9 a66 a67 a68 a69 a6a a6b a6c a6d a6e a6f ae6 ae7 ae8 "
-               + "ae9 aea aeb aec aed aee aef b66 b67 b68 b69 b6a b6b b6c "
-               + "b6d b6e b6f be6 be7 be8 be9 bea beb bec bed bee bef bf0 "
-               + "bf1 bf2 c66 c67 c68 c69 c6a c6b c6c c6d c6e c6f c78 c79 "
-               + "c7a c7b c7c c7d c7e ce6 ce7 ce8 ce9 cea ceb cec ced cee "
-               + "cef d66 d67 d68 d69 d6a d6b d6c d6d d6e d6f d70 d71 d72 "
-               + "d73 d74 d75 e50 e51 e52 e53 e54 e55 e56 e57 e58 e59 ed0 "
-               + "ed1 ed2 ed3 ed4 ed5 ed6 ed7 ed8 ed9 f20 f21 f22 f23 f24 "
-               + "f25 f26 f27 f28 f29 f2a f2b f2c f2d f2e f2f f30 f31 f32 "
-               + "f33 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1090 "
-               + "1091 1092 1093 1094 1095 1096 1097 1098 1099 1369 136a "
-               + "136b 136c 136d 136e 136f 1370 1371 1372 1373 1374 1375 "
-               + "1376 1377 1378 1379 137a 137b 137c 16ee 16ef 16f0 17e0 "
-               + "17e1 17e2 17e3 17e4 17e5 17e6 17e7 17e8 17e9 17f0 17f1 "
-               + "17f2 17f3 17f4 17f5 17f6 17f7 17f8 17f9 1810 1811 1812 "
-               + "1813 1814 1815 1816 1817 1818 1819 1946 1947 1948 1949 "
-               + "194a 194b 194c 194d 194e 194f 19d0 19d1 19d2 19d3 19d4 "
-               + "19d5 19d6 19d7 19d8 19d9 1b50 1b51 1b52 1b53 1b54 1b55 "
-               + "1b56 1b57 1b58 1b59 1bb0 1bb1 1bb2 1bb3 1bb4 1bb5 1bb6 "
-               + "1bb7 1bb8 1bb9 1c40 1c41 1c42 1c43 1c44 1c45 1c46 1c47 "
-               + "1c48 1c49 1c50 1c51 1c52 1c53 1c54 1c55 1c56 1c57 1c58 "
-               + "1c59 2070 2074 2075 2076 2077 2078 2079 2080 2081 2082 "
-               + "2083 2084 2085 2086 2087 2088 2089 2153 2154 2155 2156 "
-               + "2157 2158 2159 215a 215b 215c 215d 215e 215f 2160 2161 "
-               + "2162 2163 2164 2165 2166 2167 2168 2169 216a 216b 216c "
-               + "216d 216e 216f 2170 2171 2172 2173 2174 2175 2176 2177 "
-               + "2178 2179 217a 217b 217c 217d 217e 217f 2180 2181 2182 "
-               + "2185 2186 2187 2188 2460 2461 2462 2463 2464 2465 2466 "
-               + "2467 2468 2469 246a 246b 246c 246d 246e 246f 2470 2471 "
-               + "2472 2473 2474 2475 2476 2477 2478 2479 247a 247b 247c "
-               + "247d 247e 247f 2480 2481 2482 2483 2484 2485 2486 2487 "
-               + "2488 2489 248a 248b 248c 248d 248e 248f 2490 2491 2492 "
-               + "2493 2494 2495 2496 2497 2498 2499 249a 249b 24ea 24eb "
-               + "24ec 24ed 24ee 24ef 24f0 24f1 24f2 24f3 24f4 24f5 24f6 "
-               + "24f7 24f8 24f9 24fa 24fb 24fc 24fd 24fe 24ff 2776 2777 "
-               + "2778 2779 277a 277b 277c 277d 277e 277f 2780 2781 2782 "
-               + "2783 2784 2785 2786 2787 2788 2789 278a 278b 278c 278d "
-               + "278e 278f 2790 2791 2792 2793 2cfd 3007 3021 3022 3023 "
-               + "3024 3025 3026 3027 3028 3029 3038 3039 303a 3192 3193 "
-               + "3194 3195 3220 3221 3222 3223 3224 3225 3226 3227 3228 "
-               + "3229 3251 3252 3253 3254 3255 3256 3257 3258 3259 325a "
-               + "325b 325c 325d 325e 325f 3280 3281 3282 3283 3284 3285 "
-               + "3286 3287 3288 3289 32b1 32b2 32b3 32b4 32b5 32b6 32b7 "
-               + "32b8 32b9 32ba 32bb 32bc 32bd 32be 32bf a620 a621 a622 "
-               + "a623 a624 a625 a626 a627 a628 a629 a8d0 a8d1 a8d2 a8d3 "
-               + "a8d4 a8d5 a8d6 a8d7 a8d8 a8d9 a900 a901 a902 a903 a904 "
-               + "a905 a906 a907 a908 a909 aa50 aa51 aa52 aa53 aa54 aa55 "
-               + "aa56 aa57 aa58 aa59 ff10 ff11 ff12 ff13 ff14 ff15 ff16 "
-               + "ff17 ff18 ff19 found 630 chars.";
+               string numbers = "30 31 32 33 34 35 36 37 38 39 b2 b3 b9 bc bd be 660 661 662 663 664 665 666 667 668 669 6f0 6f1 6f2 6f3 6f4 6f5 6f6 6f7 6f8 6f9 7c0 7c1 7c2 7c3 7c4 7c5 7c6 7c7 7c8 7c9 966 967 968 969 96a 96b 96c 96d 96e 96f 9e6 9e7 9e8 9e9 9ea 9eb 9ec 9ed 9ee 9ef 9f4 9f5 9f6 9f7 9f8 9f9 a66 a67 a68 a69 a6a a6b a6c a6d a6e a6f ae6 ae7 ae8 ae9 aea aeb aec aed aee aef b66 b67 b68 b69 b6a b6b b6c b6d b6e b6f b72 b73 b74 b75 b76 b77 be6 be7 be8 be9 bea beb bec bed bee bef bf0 bf1 bf2 c66 c67 c68 c69 c6a c6b c6c c6d c6e c6f c78 c79 c7a c7b c7c c7d c7e ce6 ce7 ce8 ce9 cea ceb cec ced cee cef d66 d67 d68 d69 d6a d6b d6c d6d d6e d6f d70 d71 d72 d73 d74 d75 e50 e51 e52 e53 e54 e55 e56 e57 e58 e59 ed0 ed1 ed2 ed3 ed4 ed5 ed6 ed7 ed8 ed9 f20 f21 f22 f23 f24 f25 f26 f27 f28 f29 f2a f2b f2c f2d f2e f2f f30 f31 f32 f33 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1369 136a 136b 136c 136d 136e 136f 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 137a 137b 137c 16ee 16ef 16f0 17e0 17e1 17e2 17e3 17e4 17e5 17e6 17e7 17e8 17e9 17f0 17f1 17f2 17f3 17f4 17f5 17f6 17f7 17f8 17f9 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1946 1947 1948 1949 194a 194b 194c 194d 194e 194f 19d0 19d1 19d2 19d3 19d4 19d5 19d6 19d7 19d8 19d9 19da 1a80 1a81 1a82 1a83 1a84 1a85 1a86 1a87 1a88 1a89 1a90 1a91 1a92 1a93 1a94 1a95 1a96 1a97 1a98 1a99 1b50 1b51 1b52 1b53 1b54 1b55 1b56 1b57 1b58 1b59 1bb0 1bb1 1bb2 1bb3 1bb4 1bb5 1bb6 1bb7 1bb8 1bb9 1c40 1c41 1c42 1c43 1c44 1c45 1c46 1c47 1c48 1c49 1c50 1c51 1c52 1c53 1c54 1c55 1c56 1c57 1c58 1c59 2070 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 215a 215b 215c 215d 215e 215f 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 216a 216b 216c 216d 216e 216f 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 217a 217b 217c 217d 217e 217f 2180 2181 2182 2185 2186 2187 2188 2189 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 246a 246b 246c 246d 246e 246f 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 247a 247b 247c 247d 247e 247f 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 248a 248b 248c 248d 248e 248f 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 249a 249b 24ea 24eb 24ec 24ed 24ee 24ef 24f0 24f1 24f2 24f3 24f4 24f5 24f6 24f7 24f8 24f9 24fa 24fb 24fc 24fd 24fe 24ff 2776 2777 2778 2779 277a 277b 277c 277d 277e 277f 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 278a 278b 278c 278d 278e 278f 2790 2791 2792 2793 2cfd 3007 3021 3022 3023 3024 3025 3026 3027 3028 3029 3038 3039 303a 3192 3193 3194 3195 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3248 3249 324a 324b 324c 324d 324e 324f 3251 3252 3253 3254 3255 3256 3257 3258 3259 325a 325b 325c 325d 325e 325f 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 32b1 32b2 32b3 32b4 32b5 32b6 32b7 32b8 32b9 32ba 32bb 32bc 32bd 32be 32bf a620 a621 a622 a623 a624 a625 a626 a627 a628 a629 a6e6 a6e7 a6e8 a6e9 a6ea a6eb a6ec a6ed a6ee a6ef a830 a831 a832 a833 a834 a835 a8d0 a8d1 a8d2 a8d3 a8d4 a8d5 a8d6 a8d7 a8d8 a8d9 a900 a901 a902 a903 a904 a905 a906 a907 a908 a909 a9d0 a9d1 a9d2 a9d3 a9d4 a9d5 a9d6 a9d7 a9d8 a9d9 aa50 aa51 aa52 aa53 aa54 aa55 aa56 aa57 aa58 aa59 abf0 abf1 abf2 abf3 abf4 abf5 abf6 abf7 abf8 abf9 ff10 ff11 ff12 ff13 ff14 ff15 ff16 ff17 ff18 ff19 found 705 chars.";
 
-               string puncts = "21 22 23 25 26 27 28 29 2a 2c 2d 2e 2f 3a 3b "
-               + "3f 40 5b 5c 5d 5f 7b 7d a1 ab ad b7 bb bf 37e 387 55a 55b "
-               + "55c 55d 55e 55f 589 58a 5be 5c0 5c3 5c6 5f3 5f4 609 60a "
-               + "60c 60d 61b 61e 61f 66a 66b 66c 66d 6d4 700 701 702 703 "
-               + "704 705 706 707 708 709 70a 70b 70c 70d 7f7 7f8 7f9 964 "
-               + "965 970 df4 e4f e5a e5b f04 f05 f06 f07 f08 f09 f0a f0b "
-               + "f0c f0d f0e f0f f10 f11 f12 f3a f3b f3c f3d f85 fd0 fd1 "
-               + "fd2 fd3 fd4 104a 104b 104c 104d 104e 104f 10fb 1361 1362 "
-               + "1363 1364 1365 1366 1367 1368 166d 166e 169b 169c 16eb "
-               + "16ec 16ed 1735 1736 17d4 17d5 17d6 17d8 17d9 17da 1800 "
-               + "1801 1802 1803 1804 1805 1806 1807 1808 1809 180a 1944 "
-               + "1945 19de 19df 1a1e 1a1f 1b5a 1b5b 1b5c 1b5d 1b5e 1b5f "
-               + "1b60 1c3b 1c3c 1c3d 1c3e 1c3f 1c7e 1c7f 2010 2011 2012 "
-               + "2013 2014 2015 2016 2017 2018 2019 201a 201b 201c 201d "
-               + "201e 201f 2020 2021 2022 2023 2024 2025 2026 2027 2030 "
-               + "2031 2032 2033 2034 2035 2036 2037 2038 2039 203a 203b "
-               + "203c 203d 203e 203f 2040 2041 2042 2043 2045 2046 2047 "
-               + "2048 2049 204a 204b 204c 204d 204e 204f 2050 2051 2053 "
-               + "2054 2055 2056 2057 2058 2059 205a 205b 205c 205d 205e "
-               + "207d 207e 208d 208e 2329 232a 2768 2769 276a 276b 276c "
-               + "276d 276e 276f 2770 2771 2772 2773 2774 2775 27c5 27c6 "
-               + "27e6 27e7 27e8 27e9 27ea 27eb 27ec 27ed 27ee 27ef 2983 "
-               + "2984 2985 2986 2987 2988 2989 298a 298b 298c 298d 298e "
-               + "298f 2990 2991 2992 2993 2994 2995 2996 2997 2998 29d8 "
-               + "29d9 29da 29db 29fc 29fd 2cf9 2cfa 2cfb 2cfc 2cfe 2cff "
-               + "2e00 2e01 2e02 2e03 2e04 2e05 2e06 2e07 2e08 2e09 2e0a "
-               + "2e0b 2e0c 2e0d 2e0e 2e0f 2e10 2e11 2e12 2e13 2e14 2e15 "
-               + "2e16 2e17 2e18 2e19 2e1a 2e1b 2e1c 2e1d 2e1e 2e1f 2e20 "
-               + "2e21 2e22 2e23 2e24 2e25 2e26 2e27 2e28 2e29 2e2a 2e2b "
-               + "2e2c 2e2d 2e2e 2e30 3001 3002 3003 3008 3009 300a 300b "
-               + "300c 300d 300e 300f 3010 3011 3014 3015 3016 3017 3018 "
-               + "3019 301a 301b 301c 301d 301e 301f 3030 303d 30a0 30fb "
-               + "a60d a60e a60f a673 a67e a874 a875 a876 a877 a8ce a8cf "
-               + "a92e a92f a95f aa5c aa5d aa5e aa5f fd3e fd3f fe10 fe11 "
-               + "fe12 fe13 fe14 fe15 fe16 fe17 fe18 fe19 fe30 fe31 fe32 "
-               + "fe33 fe34 fe35 fe36 fe37 fe38 fe39 fe3a fe3b fe3c fe3d "
-               + "fe3e fe3f fe40 fe41 fe42 fe43 fe44 fe45 fe46 fe47 fe48 "
-               + "fe49 fe4a fe4b fe4c fe4d fe4e fe4f fe50 fe51 fe52 fe54 "
-               + "fe55 fe56 fe57 fe58 fe59 fe5a fe5b fe5c fe5d fe5e fe5f "
-               + "fe60 fe61 fe63 fe68 fe6a fe6b ff01 ff02 ff03 ff05 ff06 "
-               + "ff07 ff08 ff09 ff0a ff0c ff0d ff0e ff0f ff1a ff1b ff1f "
-               + "ff20 ff3b ff3c ff3d ff3f ff5b ff5d ff5f ff60 ff61 ff62 "
-               + "ff63 ff64 ff65 found 492 chars.";
+               string puncts = "21 22 23 25 26 27 28 29 2a 2c 2d 2e 2f 3a 3b 3f 40 5b 5c 5d 5f 7b 7d a1 ab ad b7 bb bf 37e 387 55a 55b 55c 55d 55e 55f 589 58a 5be 5c0 5c3 5c6 5f3 5f4 609 60a 60c 60d 61b 61e 61f 66a 66b 66c 66d 6d4 700 701 702 703 704 705 706 707 708 709 70a 70b 70c 70d 7f7 7f8 7f9 830 831 832 833 834 835 836 837 838 839 83a 83b 83c 83d 83e 85e 964 965 970 af0 df4 e4f e5a e5b f04 f05 f06 f07 f08 f09 f0a f0b f0c f0d f0e f0f f10 f11 f12 f14 f3a f3b f3c f3d f85 fd0 fd1 fd2 fd3 fd4 fd9 fda 104a 104b 104c 104d 104e 104f 10fb 1360 1361 1362 1363 1364 1365 1366 1367 1368 1400 166d 166e 169b 169c 16eb 16ec 16ed 1735 1736 17d4 17d5 17d6 17d8 17d9 17da 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 180a 1944 1945 1a1e 1a1f 1aa0 1aa1 1aa2 1aa3 1aa4 1aa5 1aa6 1aa8 1aa9 1aaa 1aab 1aac 1aad 1b5a 1b5b 1b5c 1b5d 1b5e 1b5f 1b60 1bfc 1bfd 1bfe 1bff 1c3b 1c3c 1c3d 1c3e 1c3f 1c7e 1c7f 1cc0 1cc1 1cc2 1cc3 1cc4 1cc5 1cc6 1cc7 1cd3 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 201a 201b 201c 201d 201e 201f 2020 2021 2022 2023 2024 2025 2026 2027 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 203a 203b 203c 203d 203e 203f 2040 2041 2042 2043 2045 2046 2047 2048 2049 204a 204b 204c 204d 204e 204f 2050 2051 2053 2054 2055 2056 2057 2058 2059 205a 205b 205c 205d 205e 207d 207e 208d 208e 2308 2309 230a 230b 2329 232a 2768 2769 276a 276b 276c 276d 276e 276f 2770 2771 2772 2773 2774 2775 27c5 27c6 27e6 27e7 27e8 27e9 27ea 27eb 27ec 27ed 27ee 27ef 2983 2984 2985 2986 2987 2988 2989 298a 298b 298c 298d 298e 298f 2990 2991 2992 2993 2994 2995 2996 2997 2998 29d8 29d9 29da 29db 29fc 29fd 2cf9 2cfa 2cfb 2cfc 2cfe 2cff 2d70 2e00 2e01 2e02 2e03 2e04 2e05 2e06 2e07 2e08 2e09 2e0a 2e0b 2e0c 2e0d 2e0e 2e0f 2e10 2e11 2e12 2e13 2e14 2e15 2e16 2e17 2e18 2e19 2e1a 2e1b 2e1c 2e1d 2e1e 2e1f 2e20 2e21 2e22 2e23 2e24 2e25 2e26 2e27 2e28 2e29 2e2a 2e2b 2e2c 2e2d 2e2e 2e30 2e31 2e32 2e33 2e34 2e35 2e36 2e37 2e38 2e39 2e3a 2e3b 3001 3002 3003 3008 3009 300a 300b 300c 300d 300e 300f 3010 3011 3014 3015 3016 3017 3018 3019 301a 301b 301c 301d 301e 301f 3030 303d 30a0 30fb a4fe a4ff a60d a60e a60f a673 a67e a6f2 a6f3 a6f4 a6f5 a6f6 a6f7 a874 a875 a876 a877 a8ce a8cf a8f8 a8f9 a8fa a92e a92f a95f a9c1 a9c2 a9c3 a9c4 a9c5 a9c6 a9c7 a9c8 a9c9 a9ca a9cb a9cc a9cd a9de a9df aa5c aa5d aa5e aa5f aade aadf aaf0 aaf1 abeb fd3e fd3f fe10 fe11 fe12 fe13 fe14 fe15 fe16 fe17 fe18 fe19 fe30 fe31 fe32 fe33 fe34 fe35 fe36 fe37 fe38 fe39 fe3a fe3b fe3c fe3d fe3e fe3f fe40 fe41 fe42 fe43 fe44 fe45 fe46 fe47 fe48 fe49 fe4a fe4b fe4c fe4d fe4e fe4f fe50 fe51 fe52 fe54 fe55 fe56 fe57 fe58 fe59 fe5a fe5b fe5c fe5d fe5e fe5f fe60 fe61 fe63 fe68 fe6a fe6b ff01 ff02 ff03 ff05 ff06 ff07 ff08 ff09 ff0a ff0c ff0d ff0e ff0f ff1a ff1b ff1f ff20 ff3b ff3c ff3d ff3f ff5b ff5d ff5f ff60 ff61 ff62 ff63 ff64 ff65 found 585 chars.";
 
-               string separators = "20 a0 1680 180e 2000 2001 2002 2003 2004 "
-               + "2005 2006 2007 2008 2009 200a 2028 2029 202f 205f 3000 "
-               + "found 20 chars.";
+               string separators = "20 a0 1680 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 200a 2028 2029 202f 205f 3000 found 19 chars.";
 
                string surrogateChars = "d800 d801 d802 d803 d804 d805 d806 "
                + "d807 d808 d809 d80a d80b d80c d80d d80e d80f d810 d811 "
@@ -532,402 +312,11 @@ namespace MonoTests.System
                + "dfef dff0 dff1 dff2 dff3 dff4 dff5 dff6 dff7 dff8 dff9 "
                + "dffa dffb dffc dffd dffe dfff found 2048 chars.";
 
-               string symbolChars = "24 2b 3c 3d 3e 5e 60 7c 7e a2 a3 a4 a5 "
-               + "a6 a7 a8 a9 ac ae af b0 b1 b4 b6 b8 d7 f7 2c2 2c3 2c4 2c5 "
-               + "2d2 2d3 2d4 2d5 2d6 2d7 2d8 2d9 2da 2db 2dc 2dd 2de 2df "
-               + "2e5 2e6 2e7 2e8 2e9 2ea 2eb 2ed 2ef 2f0 2f1 2f2 2f3 2f4 "
-               + "2f5 2f6 2f7 2f8 2f9 2fa 2fb 2fc 2fd 2fe 2ff 375 384 385 "
-               + "3f6 482 606 607 608 60b 60e 60f 6e9 6fd 6fe 7f6 9f2 9f3 "
-               + "9fa af1 b70 bf3 bf4 bf5 bf6 bf7 bf8 bf9 bfa c7f cf1 cf2 "
-               + "d79 e3f f01 f02 f03 f13 f14 f15 f16 f17 f1a f1b f1c f1d "
-               + "f1e f1f f34 f36 f38 fbe fbf fc0 fc1 fc2 fc3 fc4 fc5 fc7 "
-               + "fc8 fc9 fca fcb fcc fce fcf 109e 109f 1360 1390 1391 1392 "
-               + "1393 1394 1395 1396 1397 1398 1399 17db 1940 19e0 19e1 "
-               + "19e2 19e3 19e4 19e5 19e6 19e7 19e8 19e9 19ea 19eb 19ec "
-               + "19ed 19ee 19ef 19f0 19f1 19f2 19f3 19f4 19f5 19f6 19f7 "
-               + "19f8 19f9 19fa 19fb 19fc 19fd 19fe 19ff 1b61 1b62 1b63 "
-               + "1b64 1b65 1b66 1b67 1b68 1b69 1b6a 1b74 1b75 1b76 1b77 "
-               + "1b78 1b79 1b7a 1b7b 1b7c 1fbd 1fbf 1fc0 1fc1 1fcd 1fce "
-               + "1fcf 1fdd 1fde 1fdf 1fed 1fee 1fef 1ffd 1ffe 2044 2052 "
-               + "207a 207b 207c 208a 208b 208c 20a0 20a1 20a2 20a3 20a4 "
-               + "20a5 20a6 20a7 20a8 20a9 20aa 20ab 20ac 20ad 20ae 20af "
-               + "20b0 20b1 20b2 20b3 20b4 20b5 2100 2101 2103 2104 2105 "
-               + "2106 2108 2109 2114 2116 2117 2118 211e 211f 2120 2121 "
-               + "2122 2123 2125 2127 2129 212e 213a 213b 2140 2141 2142 "
-               + "2143 2144 214a 214b 214c 214d 214f 2190 2191 2192 2193 "
-               + "2194 2195 2196 2197 2198 2199 219a 219b 219c 219d 219e "
-               + "219f 21a0 21a1 21a2 21a3 21a4 21a5 21a6 21a7 21a8 21a9 "
-               + "21aa 21ab 21ac 21ad 21ae 21af 21b0 21b1 21b2 21b3 21b4 "
-               + "21b5 21b6 21b7 21b8 21b9 21ba 21bb 21bc 21bd 21be 21bf "
-               + "21c0 21c1 21c2 21c3 21c4 21c5 21c6 21c7 21c8 21c9 21ca "
-               + "21cb 21cc 21cd 21ce 21cf 21d0 21d1 21d2 21d3 21d4 21d5 "
-               + "21d6 21d7 21d8 21d9 21da 21db 21dc 21dd 21de 21df 21e0 "
-               + "21e1 21e2 21e3 21e4 21e5 21e6 21e7 21e8 21e9 21ea 21eb "
-               + "21ec 21ed 21ee 21ef 21f0 21f1 21f2 21f3 21f4 21f5 21f6 "
-               + "21f7 21f8 21f9 21fa 21fb 21fc 21fd 21fe 21ff 2200 2201 "
-               + "2202 2203 2204 2205 2206 2207 2208 2209 220a 220b 220c "
-               + "220d 220e 220f 2210 2211 2212 2213 2214 2215 2216 2217 "
-               + "2218 2219 221a 221b 221c 221d 221e 221f 2220 2221 2222 "
-               + "2223 2224 2225 2226 2227 2228 2229 222a 222b 222c 222d "
-               + "222e 222f 2230 2231 2232 2233 2234 2235 2236 2237 2238 "
-               + "2239 223a 223b 223c 223d 223e 223f 2240 2241 2242 2243 "
-               + "2244 2245 2246 2247 2248 2249 224a 224b 224c 224d 224e "
-               + "224f 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 "
-               + "225a 225b 225c 225d 225e 225f 2260 2261 2262 2263 2264 "
-               + "2265 2266 2267 2268 2269 226a 226b 226c 226d 226e 226f "
-               + "2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 227a "
-               + "227b 227c 227d 227e 227f 2280 2281 2282 2283 2284 2285 "
-               + "2286 2287 2288 2289 228a 228b 228c 228d 228e 228f 2290 "
-               + "2291 2292 2293 2294 2295 2296 2297 2298 2299 229a 229b "
-               + "229c 229d 229e 229f 22a0 22a1 22a2 22a3 22a4 22a5 22a6 "
-               + "22a7 22a8 22a9 22aa 22ab 22ac 22ad 22ae 22af 22b0 22b1 "
-               + "22b2 22b3 22b4 22b5 22b6 22b7 22b8 22b9 22ba 22bb 22bc "
-               + "22bd 22be 22bf 22c0 22c1 22c2 22c3 22c4 22c5 22c6 22c7 "
-               + "22c8 22c9 22ca 22cb 22cc 22cd 22ce 22cf 22d0 22d1 22d2 "
-               + "22d3 22d4 22d5 22d6 22d7 22d8 22d9 22da 22db 22dc 22dd "
-               + "22de 22df 22e0 22e1 22e2 22e3 22e4 22e5 22e6 22e7 22e8 "
-               + "22e9 22ea 22eb 22ec 22ed 22ee 22ef 22f0 22f1 22f2 22f3 "
-               + "22f4 22f5 22f6 22f7 22f8 22f9 22fa 22fb 22fc 22fd 22fe "
-               + "22ff 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 "
-               + "230a 230b 230c 230d 230e 230f 2310 2311 2312 2313 2314 "
-               + "2315 2316 2317 2318 2319 231a 231b 231c 231d 231e 231f "
-               + "2320 2321 2322 2323 2324 2325 2326 2327 2328 232b 232c "
-               + "232d 232e 232f 2330 2331 2332 2333 2334 2335 2336 2337 "
-               + "2338 2339 233a 233b 233c 233d 233e 233f 2340 2341 2342 "
-               + "2343 2344 2345 2346 2347 2348 2349 234a 234b 234c 234d "
-               + "234e 234f 2350 2351 2352 2353 2354 2355 2356 2357 2358 "
-               + "2359 235a 235b 235c 235d 235e 235f 2360 2361 2362 2363 "
-               + "2364 2365 2366 2367 2368 2369 236a 236b 236c 236d 236e "
-               + "236f 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 "
-               + "237a 237b 237c 237d 237e 237f 2380 2381 2382 2383 2384 "
-               + "2385 2386 2387 2388 2389 238a 238b 238c 238d 238e 238f "
-               + "2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 239a "
-               + "239b 239c 239d 239e 239f 23a0 23a1 23a2 23a3 23a4 23a5 "
-               + "23a6 23a7 23a8 23a9 23aa 23ab 23ac 23ad 23ae 23af 23b0 "
-               + "23b1 23b2 23b3 23b4 23b5 23b6 23b7 23b8 23b9 23ba 23bb "
-               + "23bc 23bd 23be 23bf 23c0 23c1 23c2 23c3 23c4 23c5 23c6 "
-               + "23c7 23c8 23c9 23ca 23cb 23cc 23cd 23ce 23cf 23d0 23d1 "
-               + "23d2 23d3 23d4 23d5 23d6 23d7 23d8 23d9 23da 23db 23dc "
-               + "23dd 23de 23df 23e0 23e1 23e2 23e3 23e4 23e5 23e6 23e7 "
-               + "2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 240a "
-               + "240b 240c 240d 240e 240f 2410 2411 2412 2413 2414 2415 "
-               + "2416 2417 2418 2419 241a 241b 241c 241d 241e 241f 2420 "
-               + "2421 2422 2423 2424 2425 2426 2440 2441 2442 2443 2444 "
-               + "2445 2446 2447 2448 2449 244a 249c 249d 249e 249f 24a0 "
-               + "24a1 24a2 24a3 24a4 24a5 24a6 24a7 24a8 24a9 24aa 24ab "
-               + "24ac 24ad 24ae 24af 24b0 24b1 24b2 24b3 24b4 24b5 24b6 "
-               + "24b7 24b8 24b9 24ba 24bb 24bc 24bd 24be 24bf 24c0 24c1 "
-               + "24c2 24c3 24c4 24c5 24c6 24c7 24c8 24c9 24ca 24cb 24cc "
-               + "24cd 24ce 24cf 24d0 24d1 24d2 24d3 24d4 24d5 24d6 24d7 "
-               + "24d8 24d9 24da 24db 24dc 24dd 24de 24df 24e0 24e1 24e2 "
-               + "24e3 24e4 24e5 24e6 24e7 24e8 24e9 2500 2501 2502 2503 "
-               + "2504 2505 2506 2507 2508 2509 250a 250b 250c 250d 250e "
-               + "250f 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 "
-               + "251a 251b 251c 251d 251e 251f 2520 2521 2522 2523 2524 "
-               + "2525 2526 2527 2528 2529 252a 252b 252c 252d 252e 252f "
-               + "2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 253a "
-               + "253b 253c 253d 253e 253f 2540 2541 2542 2543 2544 2545 "
-               + "2546 2547 2548 2549 254a 254b 254c 254d 254e 254f 2550 "
-               + "2551 2552 2553 2554 2555 2556 2557 2558 2559 255a 255b "
-               + "255c 255d 255e 255f 2560 2561 2562 2563 2564 2565 2566 "
-               + "2567 2568 2569 256a 256b 256c 256d 256e 256f 2570 2571 "
-               + "2572 2573 2574 2575 2576 2577 2578 2579 257a 257b 257c "
-               + "257d 257e 257f 2580 2581 2582 2583 2584 2585 2586 2587 "
-               + "2588 2589 258a 258b 258c 258d 258e 258f 2590 2591 2592 "
-               + "2593 2594 2595 2596 2597 2598 2599 259a 259b 259c 259d "
-               + "259e 259f 25a0 25a1 25a2 25a3 25a4 25a5 25a6 25a7 25a8 "
-               + "25a9 25aa 25ab 25ac 25ad 25ae 25af 25b0 25b1 25b2 25b3 "
-               + "25b4 25b5 25b6 25b7 25b8 25b9 25ba 25bb 25bc 25bd 25be "
-               + "25bf 25c0 25c1 25c2 25c3 25c4 25c5 25c6 25c7 25c8 25c9 "
-               + "25ca 25cb 25cc 25cd 25ce 25cf 25d0 25d1 25d2 25d3 25d4 "
-               + "25d5 25d6 25d7 25d8 25d9 25da 25db 25dc 25dd 25de 25df "
-               + "25e0 25e1 25e2 25e3 25e4 25e5 25e6 25e7 25e8 25e9 25ea "
-               + "25eb 25ec 25ed 25ee 25ef 25f0 25f1 25f2 25f3 25f4 25f5 "
-               + "25f6 25f7 25f8 25f9 25fa 25fb 25fc 25fd 25fe 25ff 2600 "
-               + "2601 2602 2603 2604 2605 2606 2607 2608 2609 260a 260b "
-               + "260c 260d 260e 260f 2610 2611 2612 2613 2614 2615 2616 "
-               + "2617 2618 2619 261a 261b 261c 261d 261e 261f 2620 2621 "
-               + "2622 2623 2624 2625 2626 2627 2628 2629 262a 262b 262c "
-               + "262d 262e 262f 2630 2631 2632 2633 2634 2635 2636 2637 "
-               + "2638 2639 263a 263b 263c 263d 263e 263f 2640 2641 2642 "
-               + "2643 2644 2645 2646 2647 2648 2649 264a 264b 264c 264d "
-               + "264e 264f 2650 2651 2652 2653 2654 2655 2656 2657 2658 "
-               + "2659 265a 265b 265c 265d 265e 265f 2660 2661 2662 2663 "
-               + "2664 2665 2666 2667 2668 2669 266a 266b 266c 266d 266e "
-               + "266f 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 "
-               + "267a 267b 267c 267d 267e 267f 2680 2681 2682 2683 2684 "
-               + "2685 2686 2687 2688 2689 268a 268b 268c 268d 268e 268f "
-               + "2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 269a "
-               + "269b 269c 269d 26a0 26a1 26a2 26a3 26a4 26a5 26a6 26a7 "
-               + "26a8 26a9 26aa 26ab 26ac 26ad 26ae 26af 26b0 26b1 26b2 "
-               + "26b3 26b4 26b5 26b6 26b7 26b8 26b9 26ba 26bb 26bc 26c0 "
-               + "26c1 26c2 26c3 2701 2702 2703 2704 2706 2707 2708 2709 "
-               + "270c 270d 270e 270f 2710 2711 2712 2713 2714 2715 2716 "
-               + "2717 2718 2719 271a 271b 271c 271d 271e 271f 2720 2721 "
-               + "2722 2723 2724 2725 2726 2727 2729 272a 272b 272c 272d "
-               + "272e 272f 2730 2731 2732 2733 2734 2735 2736 2737 2738 "
-               + "2739 273a 273b 273c 273d 273e 273f 2740 2741 2742 2743 "
-               + "2744 2745 2746 2747 2748 2749 274a 274b 274d 274f 2750 "
-               + "2751 2752 2756 2758 2759 275a 275b 275c 275d 275e 2761 "
-               + "2762 2763 2764 2765 2766 2767 2794 2798 2799 279a 279b "
-               + "279c 279d 279e 279f 27a0 27a1 27a2 27a3 27a4 27a5 27a6 "
-               + "27a7 27a8 27a9 27aa 27ab 27ac 27ad 27ae 27af 27b1 27b2 "
-               + "27b3 27b4 27b5 27b6 27b7 27b8 27b9 27ba 27bb 27bc 27bd "
-               + "27be 27c0 27c1 27c2 27c3 27c4 27c7 27c8 27c9 27ca 27cc "
-               + "27d0 27d1 27d2 27d3 27d4 27d5 27d6 27d7 27d8 27d9 27da "
-               + "27db 27dc 27dd 27de 27df 27e0 27e1 27e2 27e3 27e4 27e5 "
-               + "27f0 27f1 27f2 27f3 27f4 27f5 27f6 27f7 27f8 27f9 27fa "
-               + "27fb 27fc 27fd 27fe 27ff 2800 2801 2802 2803 2804 2805 "
-               + "2806 2807 2808 2809 280a 280b 280c 280d 280e 280f 2810 "
-               + "2811 2812 2813 2814 2815 2816 2817 2818 2819 281a 281b "
-               + "281c 281d 281e 281f 2820 2821 2822 2823 2824 2825 2826 "
-               + "2827 2828 2829 282a 282b 282c 282d 282e 282f 2830 2831 "
-               + "2832 2833 2834 2835 2836 2837 2838 2839 283a 283b 283c "
-               + "283d 283e 283f 2840 2841 2842 2843 2844 2845 2846 2847 "
-               + "2848 2849 284a 284b 284c 284d 284e 284f 2850 2851 2852 "
-               + "2853 2854 2855 2856 2857 2858 2859 285a 285b 285c 285d "
-               + "285e 285f 2860 2861 2862 2863 2864 2865 2866 2867 2868 "
-               + "2869 286a 286b 286c 286d 286e 286f 2870 2871 2872 2873 "
-               + "2874 2875 2876 2877 2878 2879 287a 287b 287c 287d 287e "
-               + "287f 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 "
-               + "288a 288b 288c 288d 288e 288f 2890 2891 2892 2893 2894 "
-               + "2895 2896 2897 2898 2899 289a 289b 289c 289d 289e 289f "
-               + "28a0 28a1 28a2 28a3 28a4 28a5 28a6 28a7 28a8 28a9 28aa "
-               + "28ab 28ac 28ad 28ae 28af 28b0 28b1 28b2 28b3 28b4 28b5 "
-               + "28b6 28b7 28b8 28b9 28ba 28bb 28bc 28bd 28be 28bf 28c0 "
-               + "28c1 28c2 28c3 28c4 28c5 28c6 28c7 28c8 28c9 28ca 28cb "
-               + "28cc 28cd 28ce 28cf 28d0 28d1 28d2 28d3 28d4 28d5 28d6 "
-               + "28d7 28d8 28d9 28da 28db 28dc 28dd 28de 28df 28e0 28e1 "
-               + "28e2 28e3 28e4 28e5 28e6 28e7 28e8 28e9 28ea 28eb 28ec "
-               + "28ed 28ee 28ef 28f0 28f1 28f2 28f3 28f4 28f5 28f6 28f7 "
-               + "28f8 28f9 28fa 28fb 28fc 28fd 28fe 28ff 2900 2901 2902 "
-               + "2903 2904 2905 2906 2907 2908 2909 290a 290b 290c 290d "
-               + "290e 290f 2910 2911 2912 2913 2914 2915 2916 2917 2918 "
-               + "2919 291a 291b 291c 291d 291e 291f 2920 2921 2922 2923 "
-               + "2924 2925 2926 2927 2928 2929 292a 292b 292c 292d 292e "
-               + "292f 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 "
-               + "293a 293b 293c 293d 293e 293f 2940 2941 2942 2943 2944 "
-               + "2945 2946 2947 2948 2949 294a 294b 294c 294d 294e 294f "
-               + "2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 295a "
-               + "295b 295c 295d 295e 295f 2960 2961 2962 2963 2964 2965 "
-               + "2966 2967 2968 2969 296a 296b 296c 296d 296e 296f 2970 "
-               + "2971 2972 2973 2974 2975 2976 2977 2978 2979 297a 297b "
-               + "297c 297d 297e 297f 2980 2981 2982 2999 299a 299b 299c "
-               + "299d 299e 299f 29a0 29a1 29a2 29a3 29a4 29a5 29a6 29a7 "
-               + "29a8 29a9 29aa 29ab 29ac 29ad 29ae 29af 29b0 29b1 29b2 "
-               + "29b3 29b4 29b5 29b6 29b7 29b8 29b9 29ba 29bb 29bc 29bd "
-               + "29be 29bf 29c0 29c1 29c2 29c3 29c4 29c5 29c6 29c7 29c8 "
-               + "29c9 29ca 29cb 29cc 29cd 29ce 29cf 29d0 29d1 29d2 29d3 "
-               + "29d4 29d5 29d6 29d7 29dc 29dd 29de 29df 29e0 29e1 29e2 "
-               + "29e3 29e4 29e5 29e6 29e7 29e8 29e9 29ea 29eb 29ec 29ed "
-               + "29ee 29ef 29f0 29f1 29f2 29f3 29f4 29f5 29f6 29f7 29f8 "
-               + "29f9 29fa 29fb 29fe 29ff 2a00 2a01 2a02 2a03 2a04 2a05 "
-               + "2a06 2a07 2a08 2a09 2a0a 2a0b 2a0c 2a0d 2a0e 2a0f 2a10 "
-               + "2a11 2a12 2a13 2a14 2a15 2a16 2a17 2a18 2a19 2a1a 2a1b "
-               + "2a1c 2a1d 2a1e 2a1f 2a20 2a21 2a22 2a23 2a24 2a25 2a26 "
-               + "2a27 2a28 2a29 2a2a 2a2b 2a2c 2a2d 2a2e 2a2f 2a30 2a31 "
-               + "2a32 2a33 2a34 2a35 2a36 2a37 2a38 2a39 2a3a 2a3b 2a3c "
-               + "2a3d 2a3e 2a3f 2a40 2a41 2a42 2a43 2a44 2a45 2a46 2a47 "
-               + "2a48 2a49 2a4a 2a4b 2a4c 2a4d 2a4e 2a4f 2a50 2a51 2a52 "
-               + "2a53 2a54 2a55 2a56 2a57 2a58 2a59 2a5a 2a5b 2a5c 2a5d "
-               + "2a5e 2a5f 2a60 2a61 2a62 2a63 2a64 2a65 2a66 2a67 2a68 "
-               + "2a69 2a6a 2a6b 2a6c 2a6d 2a6e 2a6f 2a70 2a71 2a72 2a73 "
-               + "2a74 2a75 2a76 2a77 2a78 2a79 2a7a 2a7b 2a7c 2a7d 2a7e "
-               + "2a7f 2a80 2a81 2a82 2a83 2a84 2a85 2a86 2a87 2a88 2a89 "
-               + "2a8a 2a8b 2a8c 2a8d 2a8e 2a8f 2a90 2a91 2a92 2a93 2a94 "
-               + "2a95 2a96 2a97 2a98 2a99 2a9a 2a9b 2a9c 2a9d 2a9e 2a9f "
-               + "2aa0 2aa1 2aa2 2aa3 2aa4 2aa5 2aa6 2aa7 2aa8 2aa9 2aaa "
-               + "2aab 2aac 2aad 2aae 2aaf 2ab0 2ab1 2ab2 2ab3 2ab4 2ab5 "
-               + "2ab6 2ab7 2ab8 2ab9 2aba 2abb 2abc 2abd 2abe 2abf 2ac0 "
-               + "2ac1 2ac2 2ac3 2ac4 2ac5 2ac6 2ac7 2ac8 2ac9 2aca 2acb "
-               + "2acc 2acd 2ace 2acf 2ad0 2ad1 2ad2 2ad3 2ad4 2ad5 2ad6 "
-               + "2ad7 2ad8 2ad9 2ada 2adb 2adc 2add 2ade 2adf 2ae0 2ae1 "
-               + "2ae2 2ae3 2ae4 2ae5 2ae6 2ae7 2ae8 2ae9 2aea 2aeb 2aec "
-               + "2aed 2aee 2aef 2af0 2af1 2af2 2af3 2af4 2af5 2af6 2af7 "
-               + "2af8 2af9 2afa 2afb 2afc 2afd 2afe 2aff 2b00 2b01 2b02 "
-               + "2b03 2b04 2b05 2b06 2b07 2b08 2b09 2b0a 2b0b 2b0c 2b0d "
-               + "2b0e 2b0f 2b10 2b11 2b12 2b13 2b14 2b15 2b16 2b17 2b18 "
-               + "2b19 2b1a 2b1b 2b1c 2b1d 2b1e 2b1f 2b20 2b21 2b22 2b23 "
-               + "2b24 2b25 2b26 2b27 2b28 2b29 2b2a 2b2b 2b2c 2b2d 2b2e "
-               + "2b2f 2b30 2b31 2b32 2b33 2b34 2b35 2b36 2b37 2b38 2b39 "
-               + "2b3a 2b3b 2b3c 2b3d 2b3e 2b3f 2b40 2b41 2b42 2b43 2b44 "
-               + "2b45 2b46 2b47 2b48 2b49 2b4a 2b4b 2b4c 2b50 2b51 2b52 "
-               + "2b53 2b54 2ce5 2ce6 2ce7 2ce8 2ce9 2cea 2e80 2e81 2e82 "
-               + "2e83 2e84 2e85 2e86 2e87 2e88 2e89 2e8a 2e8b 2e8c 2e8d "
-               + "2e8e 2e8f 2e90 2e91 2e92 2e93 2e94 2e95 2e96 2e97 2e98 "
-               + "2e99 2e9b 2e9c 2e9d 2e9e 2e9f 2ea0 2ea1 2ea2 2ea3 2ea4 "
-               + "2ea5 2ea6 2ea7 2ea8 2ea9 2eaa 2eab 2eac 2ead 2eae 2eaf "
-               + "2eb0 2eb1 2eb2 2eb3 2eb4 2eb5 2eb6 2eb7 2eb8 2eb9 2eba "
-               + "2ebb 2ebc 2ebd 2ebe 2ebf 2ec0 2ec1 2ec2 2ec3 2ec4 2ec5 "
-               + "2ec6 2ec7 2ec8 2ec9 2eca 2ecb 2ecc 2ecd 2ece 2ecf 2ed0 "
-               + "2ed1 2ed2 2ed3 2ed4 2ed5 2ed6 2ed7 2ed8 2ed9 2eda 2edb "
-               + "2edc 2edd 2ede 2edf 2ee0 2ee1 2ee2 2ee3 2ee4 2ee5 2ee6 "
-               + "2ee7 2ee8 2ee9 2eea 2eeb 2eec 2eed 2eee 2eef 2ef0 2ef1 "
-               + "2ef2 2ef3 2f00 2f01 2f02 2f03 2f04 2f05 2f06 2f07 2f08 "
-               + "2f09 2f0a 2f0b 2f0c 2f0d 2f0e 2f0f 2f10 2f11 2f12 2f13 "
-               + "2f14 2f15 2f16 2f17 2f18 2f19 2f1a 2f1b 2f1c 2f1d 2f1e "
-               + "2f1f 2f20 2f21 2f22 2f23 2f24 2f25 2f26 2f27 2f28 2f29 "
-               + "2f2a 2f2b 2f2c 2f2d 2f2e 2f2f 2f30 2f31 2f32 2f33 2f34 "
-               + "2f35 2f36 2f37 2f38 2f39 2f3a 2f3b 2f3c 2f3d 2f3e 2f3f "
-               + "2f40 2f41 2f42 2f43 2f44 2f45 2f46 2f47 2f48 2f49 2f4a "
-               + "2f4b 2f4c 2f4d 2f4e 2f4f 2f50 2f51 2f52 2f53 2f54 2f55 "
-               + "2f56 2f57 2f58 2f59 2f5a 2f5b 2f5c 2f5d 2f5e 2f5f 2f60 "
-               + "2f61 2f62 2f63 2f64 2f65 2f66 2f67 2f68 2f69 2f6a 2f6b "
-               + "2f6c 2f6d 2f6e 2f6f 2f70 2f71 2f72 2f73 2f74 2f75 2f76 "
-               + "2f77 2f78 2f79 2f7a 2f7b 2f7c 2f7d 2f7e 2f7f 2f80 2f81 "
-               + "2f82 2f83 2f84 2f85 2f86 2f87 2f88 2f89 2f8a 2f8b 2f8c "
-               + "2f8d 2f8e 2f8f 2f90 2f91 2f92 2f93 2f94 2f95 2f96 2f97 "
-               + "2f98 2f99 2f9a 2f9b 2f9c 2f9d 2f9e 2f9f 2fa0 2fa1 2fa2 "
-               + "2fa3 2fa4 2fa5 2fa6 2fa7 2fa8 2fa9 2faa 2fab 2fac 2fad "
-               + "2fae 2faf 2fb0 2fb1 2fb2 2fb3 2fb4 2fb5 2fb6 2fb7 2fb8 "
-               + "2fb9 2fba 2fbb 2fbc 2fbd 2fbe 2fbf 2fc0 2fc1 2fc2 2fc3 "
-               + "2fc4 2fc5 2fc6 2fc7 2fc8 2fc9 2fca 2fcb 2fcc 2fcd 2fce "
-               + "2fcf 2fd0 2fd1 2fd2 2fd3 2fd4 2fd5 2ff0 2ff1 2ff2 2ff3 "
-               + "2ff4 2ff5 2ff6 2ff7 2ff8 2ff9 2ffa 2ffb 3004 3012 3013 "
-               + "3020 3036 3037 303e 303f 309b 309c 3190 3191 3196 3197 "
-               + "3198 3199 319a 319b 319c 319d 319e 319f 31c0 31c1 31c2 "
-               + "31c3 31c4 31c5 31c6 31c7 31c8 31c9 31ca 31cb 31cc 31cd "
-               + "31ce 31cf 31d0 31d1 31d2 31d3 31d4 31d5 31d6 31d7 31d8 "
-               + "31d9 31da 31db 31dc 31dd 31de 31df 31e0 31e1 31e2 31e3 "
-               + "3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 320a "
-               + "320b 320c 320d 320e 320f 3210 3211 3212 3213 3214 3215 "
-               + "3216 3217 3218 3219 321a 321b 321c 321d 321e 322a 322b "
-               + "322c 322d 322e 322f 3230 3231 3232 3233 3234 3235 3236 "
-               + "3237 3238 3239 323a 323b 323c 323d 323e 323f 3240 3241 "
-               + "3242 3243 3250 3260 3261 3262 3263 3264 3265 3266 3267 "
-               + "3268 3269 326a 326b 326c 326d 326e 326f 3270 3271 3272 "
-               + "3273 3274 3275 3276 3277 3278 3279 327a 327b 327c 327d "
-               + "327e 327f 328a 328b 328c 328d 328e 328f 3290 3291 3292 "
-               + "3293 3294 3295 3296 3297 3298 3299 329a 329b 329c 329d "
-               + "329e 329f 32a0 32a1 32a2 32a3 32a4 32a5 32a6 32a7 32a8 "
-               + "32a9 32aa 32ab 32ac 32ad 32ae 32af 32b0 32c0 32c1 32c2 "
-               + "32c3 32c4 32c5 32c6 32c7 32c8 32c9 32ca 32cb 32cc 32cd "
-               + "32ce 32cf 32d0 32d1 32d2 32d3 32d4 32d5 32d6 32d7 32d8 "
-               + "32d9 32da 32db 32dc 32dd 32de 32df 32e0 32e1 32e2 32e3 "
-               + "32e4 32e5 32e6 32e7 32e8 32e9 32ea 32eb 32ec 32ed 32ee "
-               + "32ef 32f0 32f1 32f2 32f3 32f4 32f5 32f6 32f7 32f8 32f9 "
-               + "32fa 32fb 32fc 32fd 32fe 3300 3301 3302 3303 3304 3305 "
-               + "3306 3307 3308 3309 330a 330b 330c 330d 330e 330f 3310 "
-               + "3311 3312 3313 3314 3315 3316 3317 3318 3319 331a 331b "
-               + "331c 331d 331e 331f 3320 3321 3322 3323 3324 3325 3326 "
-               + "3327 3328 3329 332a 332b 332c 332d 332e 332f 3330 3331 "
-               + "3332 3333 3334 3335 3336 3337 3338 3339 333a 333b 333c "
-               + "333d 333e 333f 3340 3341 3342 3343 3344 3345 3346 3347 "
-               + "3348 3349 334a 334b 334c 334d 334e 334f 3350 3351 3352 "
-               + "3353 3354 3355 3356 3357 3358 3359 335a 335b 335c 335d "
-               + "335e 335f 3360 3361 3362 3363 3364 3365 3366 3367 3368 "
-               + "3369 336a 336b 336c 336d 336e 336f 3370 3371 3372 3373 "
-               + "3374 3375 3376 3377 3378 3379 337a 337b 337c 337d 337e "
-               + "337f 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 "
-               + "338a 338b 338c 338d 338e 338f 3390 3391 3392 3393 3394 "
-               + "3395 3396 3397 3398 3399 339a 339b 339c 339d 339e 339f "
-               + "33a0 33a1 33a2 33a3 33a4 33a5 33a6 33a7 33a8 33a9 33aa "
-               + "33ab 33ac 33ad 33ae 33af 33b0 33b1 33b2 33b3 33b4 33b5 "
-               + "33b6 33b7 33b8 33b9 33ba 33bb 33bc 33bd 33be 33bf 33c0 "
-               + "33c1 33c2 33c3 33c4 33c5 33c6 33c7 33c8 33c9 33ca 33cb "
-               + "33cc 33cd 33ce 33cf 33d0 33d1 33d2 33d3 33d4 33d5 33d6 "
-               + "33d7 33d8 33d9 33da 33db 33dc 33dd 33de 33df 33e0 33e1 "
-               + "33e2 33e3 33e4 33e5 33e6 33e7 33e8 33e9 33ea 33eb 33ec "
-               + "33ed 33ee 33ef 33f0 33f1 33f2 33f3 33f4 33f5 33f6 33f7 "
-               + "33f8 33f9 33fa 33fb 33fc 33fd 33fe 33ff 4dc0 4dc1 4dc2 "
-               + "4dc3 4dc4 4dc5 4dc6 4dc7 4dc8 4dc9 4dca 4dcb 4dcc 4dcd "
-               + "4dce 4dcf 4dd0 4dd1 4dd2 4dd3 4dd4 4dd5 4dd6 4dd7 4dd8 "
-               + "4dd9 4dda 4ddb 4ddc 4ddd 4dde 4ddf 4de0 4de1 4de2 4de3 "
-               + "4de4 4de5 4de6 4de7 4de8 4de9 4dea 4deb 4dec 4ded 4dee "
-               + "4def 4df0 4df1 4df2 4df3 4df4 4df5 4df6 4df7 4df8 4df9 "
-               + "4dfa 4dfb 4dfc 4dfd 4dfe 4dff a490 a491 a492 a493 a494 "
-               + "a495 a496 a497 a498 a499 a49a a49b a49c a49d a49e a49f "
-               + "a4a0 a4a1 a4a2 a4a3 a4a4 a4a5 a4a6 a4a7 a4a8 a4a9 a4aa "
-               + "a4ab a4ac a4ad a4ae a4af a4b0 a4b1 a4b2 a4b3 a4b4 a4b5 "
-               + "a4b6 a4b7 a4b8 a4b9 a4ba a4bb a4bc a4bd a4be a4bf a4c0 "
-               + "a4c1 a4c2 a4c3 a4c4 a4c5 a4c6 a700 a701 a702 a703 a704 "
-               + "a705 a706 a707 a708 a709 a70a a70b a70c a70d a70e a70f "
-               + "a710 a711 a712 a713 a714 a715 a716 a720 a721 a789 a78a "
-               + "a828 a829 a82a a82b fb29 fdfc fdfd fe62 fe64 fe65 fe66 "
-               + "fe69 ff04 ff0b ff1c ff1d ff1e ff3e ff40 ff5c ff5e ffe0 "
-               + "ffe1 ffe2 ffe3 ffe4 ffe5 ffe6 ffe8 ffe9 ffea ffeb ffec "
-               + "ffed ffee fffc fffd found 3490 chars.";
+               string symbolChars = "24 2b 3c 3d 3e 5e 60 7c 7e a2 a3 a4 a5 a6 a7 a8 a9 ac ae af b0 b1 b4 b6 b8 d7 f7 2c2 2c3 2c4 2c5 2d2 2d3 2d4 2d5 2d6 2d7 2d8 2d9 2da 2db 2dc 2dd 2de 2df 2e5 2e6 2e7 2e8 2e9 2ea 2eb 2ed 2ef 2f0 2f1 2f2 2f3 2f4 2f5 2f6 2f7 2f8 2f9 2fa 2fb 2fc 2fd 2fe 2ff 375 384 385 3f6 482 58f 606 607 608 60b 60e 60f 6de 6e9 6fd 6fe 7f6 9f2 9f3 9fa 9fb af1 b70 bf3 bf4 bf5 bf6 bf7 bf8 bf9 bfa c7f d79 e3f f01 f02 f03 f13 f15 f16 f17 f1a f1b f1c f1d f1e f1f f34 f36 f38 fbe fbf fc0 fc1 fc2 fc3 fc4 fc5 fc7 fc8 fc9 fca fcb fcc fce fcf fd5 fd6 fd7 fd8 109e 109f 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 17db 1940 19de 19df 19e0 19e1 19e2 19e3 19e4 19e5 19e6 19e7 19e8 19e9 19ea 19eb 19ec 19ed 19ee 19ef 19f0 19f1 19f2 19f3 19f4 19f5 19f6 19f7 19f8 19f9 19fa 19fb 19fc 19fd 19fe 19ff 1b61 1b62 1b63 1b64 1b65 1b66 1b67 1b68 1b69 1b6a 1b74 1b75 1b76 1b77 1b78 1b79 1b7a 1b7b 1b7c 1fbd 1fbf 1fc0 1fc1 1fcd 1fce 1fcf 1fdd 1fde 1fdf 1fed 1fee 1fef 1ffd 1ffe 2044 2052 207a 207b 207c 208a 208b 208c 20a0 20a1 20a2 20a3 20a4 20a5 20a6 20a7 20a8 20a9 20aa 20ab 20ac 20ad 20ae 20af 20b0 20b1 20b2 20b3 20b4 20b5 20b6 20b7 20b8 20b9 20ba 2100 2101 2103 2104 2105 2106 2108 2109 2114 2116 2117 2118 211e 211f 2120 2121 2122 2123 2125 2127 2129 212e 213a 213b 2140 2141 2142 2143 2144 214a 214b 214c 214d 214f 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 219a 219b 219c 219d 219e 219f 21a0 21a1 21a2 21a3 21a4 21a5 21a6 21a7 21a8 21a9 21aa 21ab 21ac 21ad 21ae 21af 21b0 21b1 21b2 21b3 21b4 21b5 21b6 21b7 21b8 21b9 21ba 21bb 21bc 21bd 21be 21bf 21c0 21c1 21c2 21c3 21c4 21c5 21c6 21c7 21c8 21c9 21ca 21cb 21cc 21cd 21ce 21cf 21d0 21d1 21d2 21d3 21d4 21d5 21d6 21d7 21d8 21d9 21da 21db 21dc 21dd 21de 21df 21e0 21e1 21e2 21e3 21e4 21e5 21e6 21e7 21e8 21e9 21ea 21eb 21ec 21ed 21ee 21ef 21f0 21f1 21f2 21f3 21f4 21f5 21f6 21f7 21f8 21f9 21fa 21fb 21fc 21fd 21fe 21ff 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 220a 220b 220c 220d 220e 220f 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 221a 221b 221c 221d 221e 221f 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 222a 222b 222c 222d 222e 222f 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 223a 223b 223c 223d 223e 223f 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 224a 224b 224c 224d 224e 224f 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 225a 225b 225c 225d 225e 225f 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 226a 226b 226c 226d 226e 226f 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 227a 227b 227c 227d 227e 227f 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 228a 228b 228c 228d 228e 228f 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 229a 229b 229c 229d 229e 229f 22a0 22a1 22a2 22a3 22a4 22a5 22a6 22a7 22a8 22a9 22aa 22ab 22ac 22ad 22ae 22af 22b0 22b1 22b2 22b3 22b4 22b5 22b6 22b7 22b8 22b9 22ba 22bb 22bc 22bd 22be 22bf 22c0 22c1 22c2 22c3 22c4 22c5 22c6 22c7 22c8 22c9 22ca 22cb 22cc 22cd 22ce 22cf 22d0 22d1 22d2 22d3 22d4 22d5 22d6 22d7 22d8 22d9 22da 22db 22dc 22dd 22de 22df 22e0 22e1 22e2 22e3 22e4 22e5 22e6 22e7 22e8 22e9 22ea 22eb 22ec 22ed 22ee 22ef 22f0 22f1 22f2 22f3 22f4 22f5 22f6 22f7 22f8 22f9 22fa 22fb 22fc 22fd 22fe 22ff 2300 2301 2302 2303 2304 2305 2306 2307 230c 230d 230e 230f 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 231a 231b 231c 231d 231e 231f 2320 2321 2322 2323 2324 2325 2326 2327 2328 232b 232c 232d 232e 232f 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 233a 233b 233c 233d 233e 233f 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 234a 234b 234c 234d 234e 234f 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 235a 235b 235c 235d 235e 235f 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 236a 236b 236c 236d 236e 236f 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 237a 237b 237c 237d 237e 237f 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 238a 238b 238c 238d 238e 238f 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 239a 239b 239c 239d 239e 239f 23a0 23a1 23a2 23a3 23a4 23a5 23a6 23a7 23a8 23a9 23aa 23ab 23ac 23ad 23ae 23af 23b0 23b1 23b2 23b3 23b4 23b5 23b6 23b7 23b8 23b9 23ba 23bb 23bc 23bd 23be 23bf 23c0 23c1 23c2 23c3 23c4 23c5 23c6 23c7 23c8 23c9 23ca 23cb 23cc 23cd 23ce 23cf 23d0 23d1 23d2 23d3 23d4 23d5 23d6 23d7 23d8 23d9 23da 23db 23dc 23dd 23de 23df 23e0 23e1 23e2 23e3 23e4 23e5 23e6 23e7 23e8 23e9 23ea 23eb 23ec 23ed 23ee 23ef 23f0 23f1 23f2 23f3 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 240a 240b 240c 240d 240e 240f 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 241a 241b 241c 241d 241e 241f 2420 2421 2422 2423 2424 2425 2426 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 244a 249c 249d 249e 249f 24a0 24a1 24a2 24a3 24a4 24a5 24a6 24a7 24a8 24a9 24aa 24ab 24ac 24ad 24ae 24af 24b0 24b1 24b2 24b3 24b4 24b5 24b6 24b7 24b8 24b9 24ba 24bb 24bc 24bd 24be 24bf 24c0 24c1 24c2 24c3 24c4 24c5 24c6 24c7 24c8 24c9 24ca 24cb 24cc 24cd 24ce 24cf 24d0 24d1 24d2 24d3 24d4 24d5 24d6 24d7 24d8 24d9 24da 24db 24dc 24dd 24de 24df 24e0 24e1 24e2 24e3 24e4 24e5 24e6 24e7 24e8 24e9 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 250a 250b 250c 250d 250e 250f 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 251a 251b 251c 251d 251e 251f 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 252a 252b 252c 252d 252e 252f 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 253a 253b 253c 253d 253e 253f 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 254a 254b 254c 254d 254e 254f 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 255a 255b 255c 255d 255e 255f 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 256a 256b 256c 256d 256e 256f 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 257a 257b 257c 257d 257e 257f 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 258a 258b 258c 258d 258e 258f 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 259a 259b 259c 259d 259e 259f 25a0 25a1 25a2 25a3 25a4 25a5 25a6 25a7 25a8 25a9 25aa 25ab 25ac 25ad 25ae 25af 25b0 25b1 25b2 25b3 25b4 25b5 25b6 25b7 25b8 25b9 25ba 25bb 25bc 25bd 25be 25bf 25c0 25c1 25c2 25c3 25c4 25c5 25c6 25c7 25c8 25c9 25ca 25cb 25cc 25cd 25ce 25cf 25d0 25d1 25d2 25d3 25d4 25d5 25d6 25d7 25d8 25d9 25da 25db 25dc 25dd 25de 25df 25e0 25e1 25e2 25e3 25e4 25e5 25e6 25e7 25e8 25e9 25ea 25eb 25ec 25ed 25ee 25ef 25f0 25f1 25f2 25f3 25f4 25f5 25f6 25f7 25f8 25f9 25fa 25fb 25fc 25fd 25fe 25ff 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 260a 260b 260c 260d 260e 260f 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 261a 261b 261c 261d 261e 261f 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 262a 262b 262c 262d 262e 262f 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 263a 263b 263c 263d 263e 263f 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 264a 264b 264c 264d 264e 264f 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 265a 265b 265c 265d 265e 265f 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 266a 266b 266c 266d 266e 266f 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 267a 267b 267c 267d 267e 267f 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 268a 268b 268c 268d 268e 268f 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 269a 269b 269c 269d 269e 269f 26a0 26a1 26a2 26a3 26a4 26a5 26a6 26a7 26a8 26a9 26aa 26ab 26ac 26ad 26ae 26af 26b0 26b1 26b2 26b3 26b4 26b5 26b6 26b7 26b8 26b9 26ba 26bb 26bc 26bd 26be 26bf 26c0 26c1 26c2 26c3 26c4 26c5 26c6 26c7 26c8 26c9 26ca 26cb 26cc 26cd 26ce 26cf 26d0 26d1 26d2 26d3 26d4 26d5 26d6 26d7 26d8 26d9 26da 26db 26dc 26dd 26de 26df 26e0 26e1 26e2 26e3 26e4 26e5 26e6 26e7 26e8 26e9 26ea 26eb 26ec 26ed 26ee 26ef 26f0 26f1 26f2 26f3 26f4 26f5 26f6 26f7 26f8 26f9 26fa 26fb 26fc 26fd 26fe 26ff 2701 2702 2703 2704 2705 2706 2707 2708 2709 270a 270b 270c 270d 270e 270f 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 271a 271b 271c 271d 271e 271f 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 272a 272b 272c 272d 272e 272f 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 273a 273b 273c 273d 273e 273f 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 274a 274b 274c 274d 274e 274f 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 275a 275b 275c 275d 275e 275f 2760 2761 2762 2763 2764 2765 2766 2767 2794 2795 2796 2797 2798 2799 279a 279b 279c 279d 279e 279f 27a0 27a1 27a2 27a3 27a4 27a5 27a6 27a7 27a8 27a9 27aa 27ab 27ac 27ad 27ae 27af 27b0 27b1 27b2 27b3 27b4 27b5 27b6 27b7 27b8 27b9 27ba 27bb 27bc 27bd 27be 27bf 27c0 27c1 27c2 27c3 27c4 27c7 27c8 27c9 27ca 27cb 27cc 27cd 27ce 27cf 27d0 27d1 27d2 27d3 27d4 27d5 27d6 27d7 27d8 27d9 27da 27db 27dc 27dd 27de 27df 27e0 27e1 27e2 27e3 27e4 27e5 27f0 27f1 27f2 27f3 27f4 27f5 27f6 27f7 27f8 27f9 27fa 27fb 27fc 27fd 27fe 27ff 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 280a 280b 280c 280d 280e 280f 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 281a 281b 281c 281d 281e 281f 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 282a 282b 282c 282d 282e 282f 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 283a 283b 283c 283d 283e 283f 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 284a 284b 284c 284d 284e 284f 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 285a 285b 285c 285d 285e 285f 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 286a 286b 286c 286d 286e 286f 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 287a 287b 287c 287d 287e 287f 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 288a 288b 288c 288d 288e 288f 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 289a 289b 289c 289d 289e 289f 28a0 28a1 28a2 28a3 28a4 28a5 28a6 28a7 28a8 28a9 28aa 28ab 28ac 28ad 28ae 28af 28b0 28b1 28b2 28b3 28b4 28b5 28b6 28b7 28b8 28b9 28ba 28bb 28bc 28bd 28be 28bf 28c0 28c1 28c2 28c3 28c4 28c5 28c6 28c7 28c8 28c9 28ca 28cb 28cc 28cd 28ce 28cf 28d0 28d1 28d2 28d3 28d4 28d5 28d6 28d7 28d8 28d9 28da 28db 28dc 28dd 28de 28df 28e0 28e1 28e2 28e3 28e4 28e5 28e6 28e7 28e8 28e9 28ea 28eb 28ec 28ed 28ee 28ef 28f0 28f1 28f2 28f3 28f4 28f5 28f6 28f7 28f8 28f9 28fa 28fb 28fc 28fd 28fe 28ff 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 290a 290b 290c 290d 290e 290f 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 291a 291b 291c 291d 291e 291f 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 292a 292b 292c 292d 292e 292f 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 293a 293b 293c 293d 293e 293f 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 294a 294b 294c 294d 294e 294f 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 295a 295b 295c 295d 295e 295f 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 296a 296b 296c 296d 296e 296f 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 297a 297b 297c 297d 297e 297f 2980 2981 2982 2999 299a 299b 299c 299d 299e 299f 29a0 29a1 29a2 29a3 29a4 29a5 29a6 29a7 29a8 29a9 29aa 29ab 29ac 29ad 29ae 29af 29b0 29b1 29b2 29b3 29b4 29b5 29b6 29b7 29b8 29b9 29ba 29bb 29bc 29bd 29be 29bf 29c0 29c1 29c2 29c3 29c4 29c5 29c6 29c7 29c8 29c9 29ca 29cb 29cc 29cd 29ce 29cf 29d0 29d1 29d2 29d3 29d4 29d5 29d6 29d7 29dc 29dd 29de 29df 29e0 29e1 29e2 29e3 29e4 29e5 29e6 29e7 29e8 29e9 29ea 29eb 29ec 29ed 29ee 29ef 29f0 29f1 29f2 29f3 29f4 29f5 29f6 29f7 29f8 29f9 29fa 29fb 29fe 29ff 2a00 2a01 2a02 2a03 2a04 2a05 2a06 2a07 2a08 2a09 2a0a 2a0b 2a0c 2a0d 2a0e 2a0f 2a10 2a11 2a12 2a13 2a14 2a15 2a16 2a17 2a18 2a19 2a1a 2a1b 2a1c 2a1d 2a1e 2a1f 2a20 2a21 2a22 2a23 2a24 2a25 2a26 2a27 2a28 2a29 2a2a 2a2b 2a2c 2a2d 2a2e 2a2f 2a30 2a31 2a32 2a33 2a34 2a35 2a36 2a37 2a38 2a39 2a3a 2a3b 2a3c 2a3d 2a3e 2a3f 2a40 2a41 2a42 2a43 2a44 2a45 2a46 2a47 2a48 2a49 2a4a 2a4b 2a4c 2a4d 2a4e 2a4f 2a50 2a51 2a52 2a53 2a54 2a55 2a56 2a57 2a58 2a59 2a5a 2a5b 2a5c 2a5d 2a5e 2a5f 2a60 2a61 2a62 2a63 2a64 2a65 2a66 2a67 2a68 2a69 2a6a 2a6b 2a6c 2a6d 2a6e 2a6f 2a70 2a71 2a72 2a73 2a74 2a75 2a76 2a77 2a78 2a79 2a7a 2a7b 2a7c 2a7d 2a7e 2a7f 2a80 2a81 2a82 2a83 2a84 2a85 2a86 2a87 2a88 2a89 2a8a 2a8b 2a8c 2a8d 2a8e 2a8f 2a90 2a91 2a92 2a93 2a94 2a95 2a96 2a97 2a98 2a99 2a9a 2a9b 2a9c 2a9d 2a9e 2a9f 2aa0 2aa1 2aa2 2aa3 2aa4 2aa5 2aa6 2aa7 2aa8 2aa9 2aaa 2aab 2aac 2aad 2aae 2aaf 2ab0 2ab1 2ab2 2ab3 2ab4 2ab5 2ab6 2ab7 2ab8 2ab9 2aba 2abb 2abc 2abd 2abe 2abf 2ac0 2ac1 2ac2 2ac3 2ac4 2ac5 2ac6 2ac7 2ac8 2ac9 2aca 2acb 2acc 2acd 2ace 2acf 2ad0 2ad1 2ad2 2ad3 2ad4 2ad5 2ad6 2ad7 2ad8 2ad9 2ada 2adb 2adc 2add 2ade 2adf 2ae0 2ae1 2ae2 2ae3 2ae4 2ae5 2ae6 2ae7 2ae8 2ae9 2aea 2aeb 2aec 2aed 2aee 2aef 2af0 2af1 2af2 2af3 2af4 2af5 2af6 2af7 2af8 2af9 2afa 2afb 2afc 2afd 2afe 2aff 2b00 2b01 2b02 2b03 2b04 2b05 2b06 2b07 2b08 2b09 2b0a 2b0b 2b0c 2b0d 2b0e 2b0f 2b10 2b11 2b12 2b13 2b14 2b15 2b16 2b17 2b18 2b19 2b1a 2b1b 2b1c 2b1d 2b1e 2b1f 2b20 2b21 2b22 2b23 2b24 2b25 2b26 2b27 2b28 2b29 2b2a 2b2b 2b2c 2b2d 2b2e 2b2f 2b30 2b31 2b32 2b33 2b34 2b35 2b36 2b37 2b38 2b39 2b3a 2b3b 2b3c 2b3d 2b3e 2b3f 2b40 2b41 2b42 2b43 2b44 2b45 2b46 2b47 2b48 2b49 2b4a 2b4b 2b4c 2b50 2b51 2b52 2b53 2b54 2b55 2b56 2b57 2b58 2b59 2ce5 2ce6 2ce7 2ce8 2ce9 2cea 2e80 2e81 2e82 2e83 2e84 2e85 2e86 2e87 2e88 2e89 2e8a 2e8b 2e8c 2e8d 2e8e 2e8f 2e90 2e91 2e92 2e93 2e94 2e95 2e96 2e97 2e98 2e99 2e9b 2e9c 2e9d 2e9e 2e9f 2ea0 2ea1 2ea2 2ea3 2ea4 2ea5 2ea6 2ea7 2ea8 2ea9 2eaa 2eab 2eac 2ead 2eae 2eaf 2eb0 2eb1 2eb2 2eb3 2eb4 2eb5 2eb6 2eb7 2eb8 2eb9 2eba 2ebb 2ebc 2ebd 2ebe 2ebf 2ec0 2ec1 2ec2 2ec3 2ec4 2ec5 2ec6 2ec7 2ec8 2ec9 2eca 2ecb 2ecc 2ecd 2ece 2ecf 2ed0 2ed1 2ed2 2ed3 2ed4 2ed5 2ed6 2ed7 2ed8 2ed9 2eda 2edb 2edc 2edd 2ede 2edf 2ee0 2ee1 2ee2 2ee3 2ee4 2ee5 2ee6 2ee7 2ee8 2ee9 2eea 2eeb 2eec 2eed 2eee 2eef 2ef0 2ef1 2ef2 2ef3 2f00 2f01 2f02 2f03 2f04 2f05 2f06 2f07 2f08 2f09 2f0a 2f0b 2f0c 2f0d 2f0e 2f0f 2f10 2f11 2f12 2f13 2f14 2f15 2f16 2f17 2f18 2f19 2f1a 2f1b 2f1c 2f1d 2f1e 2f1f 2f20 2f21 2f22 2f23 2f24 2f25 2f26 2f27 2f28 2f29 2f2a 2f2b 2f2c 2f2d 2f2e 2f2f 2f30 2f31 2f32 2f33 2f34 2f35 2f36 2f37 2f38 2f39 2f3a 2f3b 2f3c 2f3d 2f3e 2f3f 2f40 2f41 2f42 2f43 2f44 2f45 2f46 2f47 2f48 2f49 2f4a 2f4b 2f4c 2f4d 2f4e 2f4f 2f50 2f51 2f52 2f53 2f54 2f55 2f56 2f57 2f58 2f59 2f5a 2f5b 2f5c 2f5d 2f5e 2f5f 2f60 2f61 2f62 2f63 2f64 2f65 2f66 2f67 2f68 2f69 2f6a 2f6b 2f6c 2f6d 2f6e 2f6f 2f70 2f71 2f72 2f73 2f74 2f75 2f76 2f77 2f78 2f79 2f7a 2f7b 2f7c 2f7d 2f7e 2f7f 2f80 2f81 2f82 2f83 2f84 2f85 2f86 2f87 2f88 2f89 2f8a 2f8b 2f8c 2f8d 2f8e 2f8f 2f90 2f91 2f92 2f93 2f94 2f95 2f96 2f97 2f98 2f99 2f9a 2f9b 2f9c 2f9d 2f9e 2f9f 2fa0 2fa1 2fa2 2fa3 2fa4 2fa5 2fa6 2fa7 2fa8 2fa9 2faa 2fab 2fac 2fad 2fae 2faf 2fb0 2fb1 2fb2 2fb3 2fb4 2fb5 2fb6 2fb7 2fb8 2fb9 2fba 2fbb 2fbc 2fbd 2fbe 2fbf 2fc0 2fc1 2fc2 2fc3 2fc4 2fc5 2fc6 2fc7 2fc8 2fc9 2fca 2fcb 2fcc 2fcd 2fce 2fcf 2fd0 2fd1 2fd2 2fd3 2fd4 2fd5 2ff0 2ff1 2ff2 2ff3 2ff4 2ff5 2ff6 2ff7 2ff8 2ff9 2ffa 2ffb 3004 3012 3013 3020 3036 3037 303e 303f 309b 309c 3190 3191 3196 3197 3198 3199 319a 319b 319c 319d 319e 319f 31c0 31c1 31c2 31c3 31c4 31c5 31c6 31c7 31c8 31c9 31ca 31cb 31cc 31cd 31ce 31cf 31d0 31d1 31d2 31d3 31d4 31d5 31d6 31d7 31d8 31d9 31da 31db 31dc 31dd 31de 31df 31e0 31e1 31e2 31e3 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 320a 320b 320c 320d 320e 320f 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 321a 321b 321c 321d 321e 322a 322b 322c 322d 322e 322f 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 323a 323b 323c 323d 323e 323f 3240 3241 3242 3243 3244 3245 3246 3247 3250 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 326a 326b 326c 326d 326e 326f 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 327a 327b 327c 327d 327e 327f 328a 328b 328c 328d 328e 328f 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 329a 329b 329c 329d 329e 329f 32a0 32a1 32a2 32a3 32a4 32a5 32a6 32a7 32a8 32a9 32aa 32ab 32ac 32ad 32ae 32af 32b0 32c0 32c1 32c2 32c3 32c4 32c5 32c6 32c7 32c8 32c9 32ca 32cb 32cc 32cd 32ce 32cf 32d0 32d1 32d2 32d3 32d4 32d5 32d6 32d7 32d8 32d9 32da 32db 32dc 32dd 32de 32df 32e0 32e1 32e2 32e3 32e4 32e5 32e6 32e7 32e8 32e9 32ea 32eb 32ec 32ed 32ee 32ef 32f0 32f1 32f2 32f3 32f4 32f5 32f6 32f7 32f8 32f9 32fa 32fb 32fc 32fd 32fe 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 330a 330b 330c 330d 330e 330f 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 331a 331b 331c 331d 331e 331f 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 332a 332b 332c 332d 332e 332f 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 333a 333b 333c 333d 333e 333f 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 334a 334b 334c 334d 334e 334f 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 335a 335b 335c 335d 335e 335f 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 336a 336b 336c 336d 336e 336f 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 337a 337b 337c 337d 337e 337f 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 338a 338b 338c 338d 338e 338f 3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 339a 339b 339c 339d 339e 339f 33a0 33a1 33a2 33a3 33a4 33a5 33a6 33a7 33a8 33a9 33aa 33ab 33ac 33ad 33ae 33af 33b0 33b1 33b2 33b3 33b4 33b5 33b6 33b7 33b8 33b9 33ba 33bb 33bc 33bd 33be 33bf 33c0 33c1 33c2 33c3 33c4 33c5 33c6 33c7 33c8 33c9 33ca 33cb 33cc 33cd 33ce 33cf 33d0 33d1 33d2 33d3 33d4 33d5 33d6 33d7 33d8 33d9 33da 33db 33dc 33dd 33de 33df 33e0 33e1 33e2 33e3 33e4 33e5 33e6 33e7 33e8 33e9 33ea 33eb 33ec 33ed 33ee 33ef 33f0 33f1 33f2 33f3 33f4 33f5 33f6 33f7 33f8 33f9 33fa 33fb 33fc 33fd 33fe 33ff 4dc0 4dc1 4dc2 4dc3 4dc4 4dc5 4dc6 4dc7 4dc8 4dc9 4dca 4dcb 4dcc 4dcd 4dce 4dcf 4dd0 4dd1 4dd2 4dd3 4dd4 4dd5 4dd6 4dd7 4dd8 4dd9 4dda 4ddb 4ddc 4ddd 4dde 4ddf 4de0 4de1 4de2 4de3 4de4 4de5 4de6 4de7 4de8 4de9 4dea 4deb 4dec 4ded 4dee 4def 4df0 4df1 4df2 4df3 4df4 4df5 4df6 4df7 4df8 4df9 4dfa 4dfb 4dfc 4dfd 4dfe 4dff a490 a491 a492 a493 a494 a495 a496 a497 a498 a499 a49a a49b a49c a49d a49e a49f a4a0 a4a1 a4a2 a4a3 a4a4 a4a5 a4a6 a4a7 a4a8 a4a9 a4aa a4ab a4ac a4ad a4ae a4af a4b0 a4b1 a4b2 a4b3 a4b4 a4b5 a4b6 a4b7 a4b8 a4b9 a4ba a4bb a4bc a4bd a4be a4bf a4c0 a4c1 a4c2 a4c3 a4c4 a4c5 a4c6 a700 a701 a702 a703 a704 a705 a706 a707 a708 a709 a70a a70b a70c a70d a70e a70f a710 a711 a712 a713 a714 a715 a716 a720 a721 a789 a78a a828 a829 a82a a82b a836 a837 a838 a839 aa77 aa78 aa79 fb29 fbb2 fbb3 fbb4 fbb5 fbb6 fbb7 fbb8 fbb9 fbba fbbb fbbc fbbd fbbe fbbf fbc0 fbc1 fdfc fdfd fe62 fe64 fe65 fe66 fe69 ff04 ff0b ff1c ff1d ff1e ff3e ff40 ff5c ff5e ffe0 ffe1 ffe2 ffe3 ffe4 ffe5 ffe6 ffe8 ffe9 ffea ffeb ffec ffed ffee fffc fffd found 3626 chars.";
 
-               string upperChars = "41 42 43 44 45 46 47 48 49 4a 4b 4c 4d "
-               + "4e 4f 50 51 52 53 54 55 56 57 58 59 5a c0 c1 c2 c3 c4 c5 "
-               + "c6 c7 c8 c9 ca cb cc cd ce cf d0 d1 d2 d3 d4 d5 d6 d8 d9 "
-               + "da db dc dd de 100 102 104 106 108 10a 10c 10e 110 112 114 "
-               + "116 118 11a 11c 11e 120 122 124 126 128 12a 12c 12e 130 "
-               + "132 134 136 139 13b 13d 13f 141 143 145 147 14a 14c 14e "
-               + "150 152 154 156 158 15a 15c 15e 160 162 164 166 168 16a "
-               + "16c 16e 170 172 174 176 178 179 17b 17d 181 182 184 186 "
-               + "187 189 18a 18b 18e 18f 190 191 193 194 196 197 198 19c "
-               + "19d 19f 1a0 1a2 1a4 1a6 1a7 1a9 1ac 1ae 1af 1b1 1b2 1b3 "
-               + "1b5 1b7 1b8 1bc 1c4 1c7 1ca 1cd 1cf 1d1 1d3 1d5 1d7 1d9 "
-               + "1db 1de 1e0 1e2 1e4 1e6 1e8 1ea 1ec 1ee 1f1 1f4 1f6 1f7 "
-               + "1f8 1fa 1fc 1fe 200 202 204 206 208 20a 20c 20e 210 212 "
-               + "214 216 218 21a 21c 21e 220 222 224 226 228 22a 22c 22e "
-               + "230 232 23a 23b 23d 23e 241 243 244 245 246 248 24a 24c "
-               + "24e 370 372 376 386 388 389 38a 38c 38e 38f 391 392 393 "
-               + "394 395 396 397 398 399 39a 39b 39c 39d 39e 39f 3a0 3a1 "
-               + "3a3 3a4 3a5 3a6 3a7 3a8 3a9 3aa 3ab 3cf 3d2 3d3 3d4 3d8 "
-               + "3da 3dc 3de 3e0 3e2 3e4 3e6 3e8 3ea 3ec 3ee 3f4 3f7 3f9 "
-               + "3fa 3fd 3fe 3ff 400 401 402 403 404 405 406 407 408 409 "
-               + "40a 40b 40c 40d 40e 40f 410 411 412 413 414 415 416 417 "
-               + "418 419 41a 41b 41c 41d 41e 41f 420 421 422 423 424 425 "
-               + "426 427 428 429 42a 42b 42c 42d 42e 42f 460 462 464 466 "
-               + "468 46a 46c 46e 470 472 474 476 478 47a 47c 47e 480 48a "
-               + "48c 48e 490 492 494 496 498 49a 49c 49e 4a0 4a2 4a4 4a6 "
-               + "4a8 4aa 4ac 4ae 4b0 4b2 4b4 4b6 4b8 4ba 4bc 4be 4c0 4c1 "
-               + "4c3 4c5 4c7 4c9 4cb 4cd 4d0 4d2 4d4 4d6 4d8 4da 4dc 4de "
-               + "4e0 4e2 4e4 4e6 4e8 4ea 4ec 4ee 4f0 4f2 4f4 4f6 4f8 4fa "
-               + "4fc 4fe 500 502 504 506 508 50a 50c 50e 510 512 514 516 "
-               + "518 51a 51c 51e 520 522 531 532 533 534 535 536 537 538 "
-               + "539 53a 53b 53c 53d 53e 53f 540 541 542 543 544 545 546 "
-               + "547 548 549 54a 54b 54c 54d 54e 54f 550 551 552 553 554 "
-               + "555 556 10a0 10a1 10a2 10a3 10a4 10a5 10a6 10a7 10a8 10a9 "
-               + "10aa 10ab 10ac 10ad 10ae 10af 10b0 10b1 10b2 10b3 10b4 "
-               + "10b5 10b6 10b7 10b8 10b9 10ba 10bb 10bc 10bd 10be 10bf "
-               + "10c0 10c1 10c2 10c3 10c4 10c5 1e00 1e02 1e04 1e06 1e08 "
-               + "1e0a 1e0c 1e0e 1e10 1e12 1e14 1e16 1e18 1e1a 1e1c 1e1e "
-               + "1e20 1e22 1e24 1e26 1e28 1e2a 1e2c 1e2e 1e30 1e32 1e34 "
-               + "1e36 1e38 1e3a 1e3c 1e3e 1e40 1e42 1e44 1e46 1e48 1e4a "
-               + "1e4c 1e4e 1e50 1e52 1e54 1e56 1e58 1e5a 1e5c 1e5e 1e60 "
-               + "1e62 1e64 1e66 1e68 1e6a 1e6c 1e6e 1e70 1e72 1e74 1e76 "
-               + "1e78 1e7a 1e7c 1e7e 1e80 1e82 1e84 1e86 1e88 1e8a 1e8c "
-               + "1e8e 1e90 1e92 1e94 1e9e 1ea0 1ea2 1ea4 1ea6 1ea8 1eaa "
-               + "1eac 1eae 1eb0 1eb2 1eb4 1eb6 1eb8 1eba 1ebc 1ebe 1ec0 "
-               + "1ec2 1ec4 1ec6 1ec8 1eca 1ecc 1ece 1ed0 1ed2 1ed4 1ed6 "
-               + "1ed8 1eda 1edc 1ede 1ee0 1ee2 1ee4 1ee6 1ee8 1eea 1eec "
-               + "1eee 1ef0 1ef2 1ef4 1ef6 1ef8 1efa 1efc 1efe 1f08 1f09 "
-               + "1f0a 1f0b 1f0c 1f0d 1f0e 1f0f 1f18 1f19 1f1a 1f1b 1f1c "
-               + "1f1d 1f28 1f29 1f2a 1f2b 1f2c 1f2d 1f2e 1f2f 1f38 1f39 "
-               + "1f3a 1f3b 1f3c 1f3d 1f3e 1f3f 1f48 1f49 1f4a 1f4b 1f4c "
-               + "1f4d 1f59 1f5b 1f5d 1f5f 1f68 1f69 1f6a 1f6b 1f6c 1f6d "
-               + "1f6e 1f6f 1fb8 1fb9 1fba 1fbb 1fc8 1fc9 1fca 1fcb 1fd8 "
-               + "1fd9 1fda 1fdb 1fe8 1fe9 1fea 1feb 1fec 1ff8 1ff9 1ffa "
-               + "1ffb 2102 2107 210b 210c 210d 2110 2111 2112 2115 2119 "
-               + "211a 211b 211c 211d 2124 2126 2128 212a 212b 212c 212d "
-               + "2130 2131 2132 2133 213e 213f 2145 2183 2c00 2c01 2c02 "
-               + "2c03 2c04 2c05 2c06 2c07 2c08 2c09 2c0a 2c0b 2c0c 2c0d "
-               + "2c0e 2c0f 2c10 2c11 2c12 2c13 2c14 2c15 2c16 2c17 2c18 "
-               + "2c19 2c1a 2c1b 2c1c 2c1d 2c1e 2c1f 2c20 2c21 2c22 2c23 "
-               + "2c24 2c25 2c26 2c27 2c28 2c29 2c2a 2c2b 2c2c 2c2d 2c2e "
-               + "2c60 2c62 2c63 2c64 2c67 2c69 2c6b 2c6d 2c6e 2c6f 2c72 "
-               + "2c75 2c80 2c82 2c84 2c86 2c88 2c8a 2c8c 2c8e 2c90 2c92 "
-               + "2c94 2c96 2c98 2c9a 2c9c 2c9e 2ca0 2ca2 2ca4 2ca6 2ca8 "
-               + "2caa 2cac 2cae 2cb0 2cb2 2cb4 2cb6 2cb8 2cba 2cbc 2cbe "
-               + "2cc0 2cc2 2cc4 2cc6 2cc8 2cca 2ccc 2cce 2cd0 2cd2 2cd4 "
-               + "2cd6 2cd8 2cda 2cdc 2cde 2ce0 2ce2 a640 a642 a644 a646 "
-               + "a648 a64a a64c a64e a650 a652 a654 a656 a658 a65a a65c "
-               + "a65e a662 a664 a666 a668 a66a a66c a680 a682 a684 a686 "
-               + "a688 a68a a68c a68e a690 a692 a694 a696 a722 a724 a726 "
-               + "a728 a72a a72c a72e a732 a734 a736 a738 a73a a73c a73e "
-               + "a740 a742 a744 a746 a748 a74a a74c a74e a750 a752 a754 "
-               + "a756 a758 a75a a75c a75e a760 a762 a764 a766 a768 a76a "
-               + "a76c a76e a779 a77b a77d a77e a780 a782 a784 a786 a78b "
-               + "ff21 ff22 ff23 ff24 ff25 ff26 ff27 ff28 ff29 ff2a ff2b "
-               + "ff2c ff2d ff2e ff2f ff30 ff31 ff32 ff33 ff34 ff35 ff36 "
-               + "ff37 ff38 ff39 ff3a found 937 chars.";
+               string upperChars = "41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f 50 51 52 53 54 55 56 57 58 59 5a c0 c1 c2 c3 c4 c5 c6 c7 c8 c9 ca cb cc cd ce cf d0 d1 d2 d3 d4 d5 d6 d8 d9 da db dc dd de 100 102 104 106 108 10a 10c 10e 110 112 114 116 118 11a 11c 11e 120 122 124 126 128 12a 12c 12e 130 132 134 136 139 13b 13d 13f 141 143 145 147 14a 14c 14e 150 152 154 156 158 15a 15c 15e 160 162 164 166 168 16a 16c 16e 170 172 174 176 178 179 17b 17d 181 182 184 186 187 189 18a 18b 18e 18f 190 191 193 194 196 197 198 19c 19d 19f 1a0 1a2 1a4 1a6 1a7 1a9 1ac 1ae 1af 1b1 1b2 1b3 1b5 1b7 1b8 1bc 1c4 1c7 1ca 1cd 1cf 1d1 1d3 1d5 1d7 1d9 1db 1de 1e0 1e2 1e4 1e6 1e8 1ea 1ec 1ee 1f1 1f4 1f6 1f7 1f8 1fa 1fc 1fe 200 202 204 206 208 20a 20c 20e 210 212 214 216 218 21a 21c 21e 220 222 224 226 228 22a 22c 22e 230 232 23a 23b 23d 23e 241 243 244 245 246 248 24a 24c 24e 370 372 376 386 388 389 38a 38c 38e 38f 391 392 393 394 395 396 397 398 399 39a 39b 39c 39d 39e 39f 3a0 3a1 3a3 3a4 3a5 3a6 3a7 3a8 3a9 3aa 3ab 3cf 3d2 3d3 3d4 3d8 3da 3dc 3de 3e0 3e2 3e4 3e6 3e8 3ea 3ec 3ee 3f4 3f7 3f9 3fa 3fd 3fe 3ff 400 401 402 403 404 405 406 407 408 409 40a 40b 40c 40d 40e 40f 410 411 412 413 414 415 416 417 418 419 41a 41b 41c 41d 41e 41f 420 421 422 423 424 425 426 427 428 429 42a 42b 42c 42d 42e 42f 460 462 464 466 468 46a 46c 46e 470 472 474 476 478 47a 47c 47e 480 48a 48c 48e 490 492 494 496 498 49a 49c 49e 4a0 4a2 4a4 4a6 4a8 4aa 4ac 4ae 4b0 4b2 4b4 4b6 4b8 4ba 4bc 4be 4c0 4c1 4c3 4c5 4c7 4c9 4cb 4cd 4d0 4d2 4d4 4d6 4d8 4da 4dc 4de 4e0 4e2 4e4 4e6 4e8 4ea 4ec 4ee 4f0 4f2 4f4 4f6 4f8 4fa 4fc 4fe 500 502 504 506 508 50a 50c 50e 510 512 514 516 518 51a 51c 51e 520 522 524 526 531 532 533 534 535 536 537 538 539 53a 53b 53c 53d 53e 53f 540 541 542 543 544 545 546 547 548 549 54a 54b 54c 54d 54e 54f 550 551 552 553 554 555 556 10a0 10a1 10a2 10a3 10a4 10a5 10a6 10a7 10a8 10a9 10aa 10ab 10ac 10ad 10ae 10af 10b0 10b1 10b2 10b3 10b4 10b5 10b6 10b7 10b8 10b9 10ba 10bb 10bc 10bd 10be 10bf 10c0 10c1 10c2 10c3 10c4 10c5 10c7 10cd 1e00 1e02 1e04 1e06 1e08 1e0a 1e0c 1e0e 1e10 1e12 1e14 1e16 1e18 1e1a 1e1c 1e1e 1e20 1e22 1e24 1e26 1e28 1e2a 1e2c 1e2e 1e30 1e32 1e34 1e36 1e38 1e3a 1e3c 1e3e 1e40 1e42 1e44 1e46 1e48 1e4a 1e4c 1e4e 1e50 1e52 1e54 1e56 1e58 1e5a 1e5c 1e5e 1e60 1e62 1e64 1e66 1e68 1e6a 1e6c 1e6e 1e70 1e72 1e74 1e76 1e78 1e7a 1e7c 1e7e 1e80 1e82 1e84 1e86 1e88 1e8a 1e8c 1e8e 1e90 1e92 1e94 1e9e 1ea0 1ea2 1ea4 1ea6 1ea8 1eaa 1eac 1eae 1eb0 1eb2 1eb4 1eb6 1eb8 1eba 1ebc 1ebe 1ec0 1ec2 1ec4 1ec6 1ec8 1eca 1ecc 1ece 1ed0 1ed2 1ed4 1ed6 1ed8 1eda 1edc 1ede 1ee0 1ee2 1ee4 1ee6 1ee8 1eea 1eec 1eee 1ef0 1ef2 1ef4 1ef6 1ef8 1efa 1efc 1efe 1f08 1f09 1f0a 1f0b 1f0c 1f0d 1f0e 1f0f 1f18 1f19 1f1a 1f1b 1f1c 1f1d 1f28 1f29 1f2a 1f2b 1f2c 1f2d 1f2e 1f2f 1f38 1f39 1f3a 1f3b 1f3c 1f3d 1f3e 1f3f 1f48 1f49 1f4a 1f4b 1f4c 1f4d 1f59 1f5b 1f5d 1f5f 1f68 1f69 1f6a 1f6b 1f6c 1f6d 1f6e 1f6f 1fb8 1fb9 1fba 1fbb 1fc8 1fc9 1fca 1fcb 1fd8 1fd9 1fda 1fdb 1fe8 1fe9 1fea 1feb 1fec 1ff8 1ff9 1ffa 1ffb 2102 2107 210b 210c 210d 2110 2111 2112 2115 2119 211a 211b 211c 211d 2124 2126 2128 212a 212b 212c 212d 2130 2131 2132 2133 213e 213f 2145 2183 2c00 2c01 2c02 2c03 2c04 2c05 2c06 2c07 2c08 2c09 2c0a 2c0b 2c0c 2c0d 2c0e 2c0f 2c10 2c11 2c12 2c13 2c14 2c15 2c16 2c17 2c18 2c19 2c1a 2c1b 2c1c 2c1d 2c1e 2c1f 2c20 2c21 2c22 2c23 2c24 2c25 2c26 2c27 2c28 2c29 2c2a 2c2b 2c2c 2c2d 2c2e 2c60 2c62 2c63 2c64 2c67 2c69 2c6b 2c6d 2c6e 2c6f 2c70 2c72 2c75 2c7e 2c7f 2c80 2c82 2c84 2c86 2c88 2c8a 2c8c 2c8e 2c90 2c92 2c94 2c96 2c98 2c9a 2c9c 2c9e 2ca0 2ca2 2ca4 2ca6 2ca8 2caa 2cac 2cae 2cb0 2cb2 2cb4 2cb6 2cb8 2cba 2cbc 2cbe 2cc0 2cc2 2cc4 2cc6 2cc8 2cca 2ccc 2cce 2cd0 2cd2 2cd4 2cd6 2cd8 2cda 2cdc 2cde 2ce0 2ce2 2ceb 2ced 2cf2 a640 a642 a644 a646 a648 a64a a64c a64e a650 a652 a654 a656 a658 a65a a65c a65e a660 a662 a664 a666 a668 a66a a66c a680 a682 a684 a686 a688 a68a a68c a68e a690 a692 a694 a696 a722 a724 a726 a728 a72a a72c a72e a732 a734 a736 a738 a73a a73c a73e a740 a742 a744 a746 a748 a74a a74c a74e a750 a752 a754 a756 a758 a75a a75c a75e a760 a762 a764 a766 a768 a76a a76c a76e a779 a77b a77d a77e a780 a782 a784 a786 a78b a78d a790 a792 a7a0 a7a2 a7a4 a7a6 a7a8 a7aa ff21 ff22 ff23 ff24 ff25 ff26 ff27 ff28 ff29 ff2a ff2b ff2c ff2d ff2e ff2f ff30 ff31 ff32 ff33 ff34 ff35 ff36 ff37 ff38 ff39 ff3a found 957 chars.";
 
-               string whitespaceChars = "9 a b c d 20 85 a0 1680 180e 2000 "
-               + "2001 2002 2003 2004 2005 2006 2007 2008 2009 200a 2028 "
-               + "2029 202f 205f 3000 found 26 chars.";
+               string whitespaceChars = "9 a b c d 20 85 a0 1680 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 200a 2028 2029 202f 205f 3000 found 25 chars.";
 
 #elif !NET_4_0
 
@@ -956,107 +345,7 @@ namespace MonoTests.System
                + "ff11 ff12 ff13 ff14 ff15 ff16 ff17 ff18 ff19 found 230 "
                + "chars.";
 
-               string lowerChars = "61 62 63 64 65 66 67 68 69 6a 6b 6c 6d "
-               + "6e 6f 70 71 72 73 74 75 76 77 78 79 7a aa b5 ba df e0 e1 "
-               + "e2 e3 e4 e5 e6 e7 e8 e9 ea eb ec ed ee ef f0 f1 f2 f3 f4 "
-               + "f5 f6 f8 f9 fa fb fc fd fe ff 101 103 105 107 109 10b 10d "
-               + "10f 111 113 115 117 119 11b 11d 11f 121 123 125 127 129 "
-               + "12b 12d 12f 131 133 135 137 138 13a 13c 13e 140 142 144 "
-               + "146 148 149 14b 14d 14f 151 153 155 157 159 15b 15d 15f "
-               + "161 163 165 167 169 16b 16d 16f 171 173 175 177 17a 17c "
-               + "17e 17f 180 183 185 188 18c 18d 192 195 199 19a 19b 19e "
-               + "1a1 1a3 1a5 1a8 1aa 1ab 1ad 1b0 1b4 1b6 1b9 1ba 1bd 1be "
-               + "1bf 1c6 1c9 1cc 1ce 1d0 1d2 1d4 1d6 1d8 1da 1dc 1dd 1df "
-               + "1e1 1e3 1e5 1e7 1e9 1eb 1ed 1ef 1f0 1f3 1f5 1f9 1fb 1fd "
-               + "1ff 201 203 205 207 209 20b 20d 20f 211 213 215 217 219 "
-               + "21b 21d 21f 221 223 225 227 229 22b 22d 22f 231 233 234 "
-               + "235 236 237 238 239 23c 23f 240 242 247 249 24b 24d 24f "
-               + "250 251 252 253 254 255 256 257 258 259 25a 25b 25c 25d "
-               + "25e 25f 260 261 262 263 264 265 266 267 268 269 26a 26b "
-               + "26c 26d 26e 26f 270 271 272 273 274 275 276 277 278 279 "
-               + "27a 27b 27c 27d 27e 27f 280 281 282 283 284 285 286 287 "
-               + "288 289 28a 28b 28c 28d 28e 28f 290 291 292 293 295 296 "
-               + "297 298 299 29a 29b 29c 29d 29e 29f 2a0 2a1 2a2 2a3 2a4 "
-               + "2a5 2a6 2a7 2a8 2a9 2aa 2ab 2ac 2ad 2ae 2af 37b 37c 37d "
-               + "390 3ac 3ad 3ae 3af 3b0 3b1 3b2 3b3 3b4 3b5 3b6 3b7 3b8 "
-               + "3b9 3ba 3bb 3bc 3bd 3be 3bf 3c0 3c1 3c2 3c3 3c4 3c5 3c6 "
-               + "3c7 3c8 3c9 3ca 3cb 3cc 3cd 3ce 3d0 3d1 3d5 3d6 3d7 3d9 "
-               + "3db 3dd 3df 3e1 3e3 3e5 3e7 3e9 3eb 3ed 3ef 3f0 3f1 3f2 "
-               + "3f3 3f5 3f8 3fb 3fc 430 431 432 433 434 435 436 437 438 "
-               + "439 43a 43b 43c 43d 43e 43f 440 441 442 443 444 445 446 "
-               + "447 448 449 44a 44b 44c 44d 44e 44f 450 451 452 453 454 "
-               + "455 456 457 458 459 45a 45b 45c 45d 45e 45f 461 463 465 "
-               + "467 469 46b 46d 46f 471 473 475 477 479 47b 47d 47f 481 "
-               + "48b 48d 48f 491 493 495 497 499 49b 49d 49f 4a1 4a3 4a5 "
-               + "4a7 4a9 4ab 4ad 4af 4b1 4b3 4b5 4b7 4b9 4bb 4bd 4bf 4c2 "
-               + "4c4 4c6 4c8 4ca 4cc 4ce 4cf 4d1 4d3 4d5 4d7 4d9 4db 4dd "
-               + "4df 4e1 4e3 4e5 4e7 4e9 4eb 4ed 4ef 4f1 4f3 4f5 4f7 4f9 "
-               + "4fb 4fd 4ff 501 503 505 507 509 50b 50d 50f 511 513 561 "
-               + "562 563 564 565 566 567 568 569 56a 56b 56c 56d 56e 56f "
-               + "570 571 572 573 574 575 576 577 578 579 57a 57b 57c 57d "
-               + "57e 57f 580 581 582 583 584 585 586 587 1d00 1d01 1d02 "
-               + "1d03 1d04 1d05 1d06 1d07 1d08 1d09 1d0a 1d0b 1d0c 1d0d "
-               + "1d0e 1d0f 1d10 1d11 1d12 1d13 1d14 1d15 1d16 1d17 1d18 "
-               + "1d19 1d1a 1d1b 1d1c 1d1d 1d1e 1d1f 1d20 1d21 1d22 1d23 "
-               + "1d24 1d25 1d26 1d27 1d28 1d29 1d2a 1d2b 1d62 1d63 1d64 "
-               + "1d65 1d66 1d67 1d68 1d69 1d6a 1d6b 1d6c 1d6d 1d6e 1d6f "
-               + "1d70 1d71 1d72 1d73 1d74 1d75 1d76 1d77 1d79 1d7a 1d7b "
-               + "1d7c 1d7d 1d7e 1d7f 1d80 1d81 1d82 1d83 1d84 1d85 1d86 "
-               + "1d87 1d88 1d89 1d8a 1d8b 1d8c 1d8d 1d8e 1d8f 1d90 1d91 "
-               + "1d92 1d93 1d94 1d95 1d96 1d97 1d98 1d99 1d9a 1e01 1e03 "
-               + "1e05 1e07 1e09 1e0b 1e0d 1e0f 1e11 1e13 1e15 1e17 1e19 "
-               + "1e1b 1e1d 1e1f 1e21 1e23 1e25 1e27 1e29 1e2b 1e2d 1e2f "
-               + "1e31 1e33 1e35 1e37 1e39 1e3b 1e3d 1e3f 1e41 1e43 1e45 "
-               + "1e47 1e49 1e4b 1e4d 1e4f 1e51 1e53 1e55 1e57 1e59 1e5b "
-               + "1e5d 1e5f 1e61 1e63 1e65 1e67 1e69 1e6b 1e6d 1e6f 1e71 "
-               + "1e73 1e75 1e77 1e79 1e7b 1e7d 1e7f 1e81 1e83 1e85 1e87 "
-               + "1e89 1e8b 1e8d 1e8f 1e91 1e93 1e95 1e96 1e97 1e98 1e99 "
-               + "1e9a 1e9b 1ea1 1ea3 1ea5 1ea7 1ea9 1eab 1ead 1eaf 1eb1 "
-               + "1eb3 1eb5 1eb7 1eb9 1ebb 1ebd 1ebf 1ec1 1ec3 1ec5 1ec7 "
-               + "1ec9 1ecb 1ecd 1ecf 1ed1 1ed3 1ed5 1ed7 1ed9 1edb 1edd "
-               + "1edf 1ee1 1ee3 1ee5 1ee7 1ee9 1eeb 1eed 1eef 1ef1 1ef3 "
-               + "1ef5 1ef7 1ef9 1f00 1f01 1f02 1f03 1f04 1f05 1f06 1f07 "
-               + "1f10 1f11 1f12 1f13 1f14 1f15 1f20 1f21 1f22 1f23 1f24 "
-               + "1f25 1f26 1f27 1f30 1f31 1f32 1f33 1f34 1f35 1f36 1f37 "
-               + "1f40 1f41 1f42 1f43 1f44 1f45 1f50 1f51 1f52 1f53 1f54 "
-               + "1f55 1f56 1f57 1f60 1f61 1f62 1f63 1f64 1f65 1f66 1f67 "
-               + "1f70 1f71 1f72 1f73 1f74 1f75 1f76 1f77 1f78 1f79 1f7a "
-               + "1f7b 1f7c 1f7d 1f80 1f81 1f82 1f83 1f84 1f85 1f86 1f87 "
-               + "1f90 1f91 1f92 1f93 1f94 1f95 1f96 1f97 1fa0 1fa1 1fa2 "
-               + "1fa3 1fa4 1fa5 1fa6 1fa7 1fb0 1fb1 1fb2 1fb3 1fb4 1fb6 "
-               + "1fb7 1fbe 1fc2 1fc3 1fc4 1fc6 1fc7 1fd0 1fd1 1fd2 1fd3 "
-               + "1fd6 1fd7 1fe0 1fe1 1fe2 1fe3 1fe4 1fe5 1fe6 1fe7 1ff2 "
-               + "1ff3 1ff4 1ff6 1ff7 2071 207f 210a 210e 210f 2113 212f "
-               + "2134 2139 213c 213d 2146 2147 2148 2149 214e 2184 2c30 "
-               + "2c31 2c32 2c33 2c34 2c35 2c36 2c37 2c38 2c39 2c3a 2c3b "
-               + "2c3c 2c3d 2c3e 2c3f 2c40 2c41 2c42 2c43 2c44 2c45 2c46 "
-               + "2c47 2c48 2c49 2c4a 2c4b 2c4c 2c4d 2c4e 2c4f 2c50 2c51 "
-               + "2c52 2c53 2c54 2c55 2c56 2c57 2c58 2c59 2c5a 2c5b 2c5c "
-               + "2c5d 2c5e 2c61 2c65 2c66 2c68 2c6a 2c6c 2c74 2c76 2c77 "
-               + "2c81 2c83 2c85 2c87 2c89 2c8b 2c8d 2c8f 2c91 2c93 2c95 "
-               + "2c97 2c99 2c9b 2c9d 2c9f 2ca1 2ca3 2ca5 2ca7 2ca9 2cab "
-               + "2cad 2caf 2cb1 2cb3 2cb5 2cb7 2cb9 2cbb 2cbd 2cbf 2cc1 "
-               + "2cc3 2cc5 2cc7 2cc9 2ccb 2ccd 2ccf 2cd1 2cd3 2cd5 2cd7 "
-               + "2cd9 2cdb 2cdd 2cdf 2ce1 2ce3 2ce4 2d00 2d01 2d02 2d03 "
-               + "2d04 2d05 2d06 2d07 2d08 2d09 2d0a 2d0b 2d0c 2d0d 2d0e "
-               + "2d0f 2d10 2d11 2d12 2d13 2d14 2d15 2d16 2d17 2d18 2d19 "
-               + "2d1a 2d1b 2d1c 2d1d 2d1e 2d1f 2d20 2d21 2d22 2d23 2d24 "
-               + "2d25 fb00 fb01 fb02 fb03 fb04 fb05 fb06 fb13 fb14 fb15 "
-               + "fb16 fb17 ff41 ff42 ff43 ff44 ff45 ff46 ff47 ff48 ff49 "
-               + "ff4a ff4b ff4c ff4d ff4e ff4f ff50 ff51 ff52 ff53 ff54 "
-               + "ff55 ff56 ff57 ff58 ff59 ff5a found 1102 chars.";
-
-               string numbers = "30 31 32 33 34 35 36 37 38 39 b2 b3 b9 bc "
-               + "bd be 660 661 662 663 664 665 666 667 668 669 6f0 6f1 6f2 "
-               + "6f3 6f4 6f5 6f6 6f7 6f8 6f9 7c0 7c1 7c2 7c3 7c4 7c5 7c6 "
-               + "7c7 7c8 7c9 966 967 968 969 96a 96b 96c 96d 96e 96f 9e6 "
-               + "9e7 9e8 9e9 9ea 9eb 9ec 9ed 9ee 9ef 9f4 9f5 9f6 9f7 9f8 "
-               + "9f9 a66 a67 a68 a69 a6a a6b a6c a6d a6e a6f ae6 ae7 ae8 "
-               + "ae9 aea aeb aec aed aee aef b66 b67 b68 b69 b6a b6b b6c "
-               + "b6d b6e b6f be6 be7 be8 be9 bea beb bec bed bee bef bf0 "
-               + "bf1 bf2 c66 c67 c68 c69 c6a c6b c6c c6d c6e c6f ce6 ce7 "
-               + "ce8 ce9 cea ceb cec ced cee cef d66 d67 d68 d69 d6a d6b "
-               + "d6c d6d d6e d6f e50 e51 e52 e53 e54 e55 e56 e57 e58 e59 "
+               string lowerChars = "80 e51 e52 e53 e54 e55 e56 e57 e58 e59 "
                + "ed0 ed1 ed2 ed3 ed4 ed5 ed6 ed7 ed8 ed9 f20 f21 f22 f23 "
                + "f24 f25 f26 f27 f28 f29 f2a f2b f2c f2d f2e f2f f30 f31 "
                + "f32 f33 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 "
index 9cb832a87609c5ae8f04abbabf5c21eb55a41644..3005231aee2f28d303685292d4f7b71b650c2fe1 100644 (file)
@@ -470,7 +470,6 @@ public class CharTest
                        case '\x85':
                        case '\xa0':
                        case '\x1680':
-                       case '\x180e':
                        case '\x2000':
                        case '\x2001':
                        case '\x2002':
@@ -487,10 +486,10 @@ public class CharTest
                        case '\x202f':
                        case '\x205f':
                        case '\x3000':
-                               Assert.IsTrue (char.IsWhiteSpace ((char)i), i.ToString ());
+                               Assert.IsTrue (char.IsWhiteSpace ((char)i), "\\x" + i.ToString ("x"));
                                break;
                        default:
-                               Assert.IsFalse (char.IsWhiteSpace ((char)i), i.ToString ());
+                               Assert.IsFalse (char.IsWhiteSpace ((char)i), "\\x" + i.ToString ("x"));
                                break;
                        }
                }
index 13564426aedd1f1d97233268301b6a3c4217ae98..76157a2df308bada807e364da65c309a04af0af1 100644 (file)
@@ -672,7 +672,7 @@ namespace MonoTests.System {
                [Test]
                public void TestPartialDateTimeParsing ()
                {
-                       var now = DateTime.Now;
+                       var now = DateTime.UtcNow;
                        const DateTimeStyles style = DateTimeStyles.AssumeUniversal;
 
                        //year
index c3bb2a500d5ccf75d7ffad5478900baef39a7426..ebcf1df35a4db7ce1050f4fead09829fad695047 100644 (file)
@@ -1514,7 +1514,7 @@ namespace MonoTests.System
                        d = new DateTime (599264352000000000);
                        Assert.AreEqual (0.0d, d.ToOADate (), "#2");
                        d = new DateTime (31242239136000000);
-                       Assert.AreEqual (-657434.999d, d.ToOADate (), "#3");
+                       Assert.AreEqual ("-657434.999", d.ToOADate ().ToString (), "#3");
                        d = new DateTime (3155378975136000000);
                        Assert.AreEqual (2958465.999d, d.ToOADate (), "#4");
                }
@@ -1526,13 +1526,6 @@ namespace MonoTests.System
                        Assert.AreEqual (2958465.999d, d.ToOADate ());
                }
 
-               [Test]
-               [Ignore ("This test is probably geo location dependent, at least fails on .NET 4.0 in Japan")]
-               public void ToOADate_MaxValue ()
-               {
-                       Assert.AreEqual (2958465.99999999d, DateTime.MaxValue.ToOADate ());
-               }
-
                [Test]
                public void ToOADate_UnderMin ()
                {
@@ -2622,5 +2615,13 @@ namespace MonoTests.System
                        string date = "2014-08-25T01:20:23.601911612343423423465789789365674575676746756747467%Z";
                        DateTime.Parse (date, CultureInfo.InvariantCulture, DateTimeStyles.RoundtripKind);
                }
+
+               [Test]
+               public void Year_2 ()
+               {
+                       var res = DateTime.Parse ("12-002", CultureInfo.InvariantCulture, DateTimeStyles.AllowWhiteSpaces | DateTimeStyles.RoundtripKind);                      
+                       Assert.AreEqual (2, res.Year, "#1");
+                       Assert.AreEqual (12, res.Month, "#2");                  
+               }
        }
 }
diff --git a/mcs/class/corlib/Test/System/DecimalTest-Microsoft.cs b/mcs/class/corlib/Test/System/DecimalTest-Microsoft.cs
new file mode 100644 (file)
index 0000000..7cb3ab5
--- /dev/null
@@ -0,0 +1,875 @@
+// DecimalTest-Microsoft.cs - NUnit Test Cases for System.Decimal, ported
+// from corefx src/System.Runtime/tests/System/Decimal.cs to NUnit
+//
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+// Copyright 2015 Xamarin Inc
+// 
+
+using NUnit.Framework;
+using System;
+using MonoTests.Common;
+using System.Globalization;
+using System.Runtime.CompilerServices;
+using System.Threading;
+using System.Collections.Generic;
+
+namespace MonoTests.System
+{
+       [TestFixture]
+       public class DecimalTestMicrosoft
+       {
+               [Test]
+               public void TestEquals()
+               {
+                   // Boolean Decimal.Equals(Decimal)
+                   Assert.IsTrue(Decimal.Zero.Equals(Decimal.Zero));
+                   Assert.IsFalse(Decimal.Zero.Equals(Decimal.One));
+                   Assert.IsTrue(Decimal.MaxValue.Equals(Decimal.MaxValue));
+                   Assert.IsTrue(Decimal.MinValue.Equals(Decimal.MinValue));
+                   Assert.IsFalse(Decimal.MaxValue.Equals(Decimal.MinValue));
+                   Assert.IsFalse(Decimal.MinValue.Equals(Decimal.MaxValue));
+               }
+               
+               [Test]
+               public void TestEqualsDecDec()
+               {
+                   // Boolean Decimal.Equals(Decimal, Decimal)
+                   Assert.IsTrue(Decimal.Equals(Decimal.Zero, Decimal.Zero));
+                   Assert.IsFalse(Decimal.Equals(Decimal.Zero, Decimal.One));
+                   Assert.IsTrue(Decimal.Equals(Decimal.MaxValue, Decimal.MaxValue));
+                   Assert.IsTrue(Decimal.Equals(Decimal.MinValue, Decimal.MinValue));
+                   Assert.IsFalse(Decimal.Equals(Decimal.MinValue, Decimal.MaxValue));
+                   Assert.IsFalse(Decimal.Equals(Decimal.MaxValue, Decimal.MinValue));
+               }
+               
+               [Test]
+               public void TestEqualsObj()
+               {
+                   // Boolean Decimal.Equals(Object)
+                   Assert.IsTrue(Decimal.Zero.Equals((object)Decimal.Zero));
+                   Assert.IsFalse(Decimal.Zero.Equals((object)Decimal.One));
+                   Assert.IsTrue(Decimal.MaxValue.Equals((object)Decimal.MaxValue));
+                   Assert.IsTrue(Decimal.MinValue.Equals((object)Decimal.MinValue));
+                   Assert.IsFalse(Decimal.MinValue.Equals((object)Decimal.MaxValue));
+                   Assert.IsFalse(Decimal.MaxValue.Equals((object)Decimal.MinValue));
+                   Assert.IsFalse(Decimal.One.Equals(null));
+                   Assert.IsFalse(Decimal.One.Equals("one"));
+                   Assert.IsFalse(Decimal.One.Equals((object)1));
+               }
+               
+               [Test]
+               public void Testop_Equality()
+               {
+                   // Boolean Decimal.op_Equality(Decimal, Decimal)
+                   Assert.IsTrue(Decimal.Zero == Decimal.Zero);
+                   Assert.IsFalse(Decimal.Zero == Decimal.One);
+                   Assert.IsTrue(Decimal.MaxValue == Decimal.MaxValue);
+                   Assert.IsTrue(Decimal.MinValue == Decimal.MinValue);
+                   Assert.IsFalse(Decimal.MinValue == Decimal.MaxValue);
+                   Assert.IsFalse(Decimal.MaxValue == Decimal.MinValue);
+               }
+               
+               [Test]
+               public void Testop_GreaterThan()
+               {
+                   // Boolean Decimal.op_GreaterThan(Decimal, Decimal)
+                   Assert.IsFalse(Decimal.Zero > Decimal.Zero);
+                   Assert.IsFalse(Decimal.Zero > Decimal.One);
+                   Assert.IsTrue(Decimal.One > Decimal.Zero);
+                   Assert.IsFalse(Decimal.MaxValue > Decimal.MaxValue);
+                   Assert.IsFalse(Decimal.MinValue > Decimal.MinValue);
+                   Assert.IsFalse(Decimal.MinValue > Decimal.MaxValue);
+                   Assert.IsTrue(Decimal.MaxValue > Decimal.MinValue);
+               }
+               
+               [Test]
+               public void Testop_GreaterThanOrEqual()
+               {
+                   // Boolean Decimal.op_GreaterThanOrEqual(Decimal, Decimal)
+                   Assert.IsTrue(Decimal.Zero >= Decimal.Zero);
+                   Assert.IsFalse(Decimal.Zero >= Decimal.One);
+                   Assert.IsTrue(Decimal.One >= Decimal.Zero);
+                   Assert.IsTrue(Decimal.MaxValue >= Decimal.MaxValue);
+                   Assert.IsTrue(Decimal.MinValue >= Decimal.MinValue);
+                   Assert.IsFalse(Decimal.MinValue >= Decimal.MaxValue);
+                   Assert.IsTrue(Decimal.MaxValue >= Decimal.MinValue);
+               }
+               
+               [Test]
+               public void Testop_Inequality()
+               {
+                   // Boolean Decimal.op_Inequality(Decimal, Decimal)
+                   Assert.IsFalse(Decimal.Zero != Decimal.Zero);
+                   Assert.IsTrue(Decimal.Zero != Decimal.One);
+                   Assert.IsTrue(Decimal.One != Decimal.Zero);
+                   Assert.IsFalse(Decimal.MaxValue != Decimal.MaxValue);
+                   Assert.IsFalse(Decimal.MinValue != Decimal.MinValue);
+                   Assert.IsTrue(Decimal.MinValue != Decimal.MaxValue);
+                   Assert.IsTrue(Decimal.MaxValue != Decimal.MinValue);
+               }
+               
+               [Test]
+               public void Testop_LessThan()
+               {
+                   // Boolean Decimal.op_LessThan(Decimal, Decimal)
+                   Assert.IsFalse(Decimal.Zero < Decimal.Zero);
+                   Assert.IsTrue(Decimal.Zero < Decimal.One);
+                   Assert.IsFalse(Decimal.One < Decimal.Zero);
+                   Assert.IsTrue(5m < 15m);
+                   decimal d5 = 5;
+                   decimal d3 = 3;
+                   Assert.IsFalse(d5 < d3);
+                   Assert.IsFalse(Decimal.MaxValue < Decimal.MaxValue);
+                   Assert.IsFalse(Decimal.MinValue < Decimal.MinValue);
+                   Assert.IsTrue(Decimal.MinValue < Decimal.MaxValue);
+                   Assert.IsFalse(Decimal.MaxValue < Decimal.MinValue);
+               }
+               
+               [Test]
+               public void Testop_LessThanOrEqual()
+               {
+                   // Boolean Decimal.op_LessThanOrEqual(Decimal, Decimal)
+                   Assert.IsTrue(Decimal.Zero <= Decimal.Zero);
+                   Assert.IsTrue(Decimal.Zero <= Decimal.One);
+                   Assert.IsFalse(Decimal.One <= Decimal.Zero);
+                   Assert.IsTrue(Decimal.MaxValue <= Decimal.MaxValue);
+                   Assert.IsTrue(Decimal.MinValue <= Decimal.MinValue);
+                   Assert.IsTrue(Decimal.MinValue <= Decimal.MaxValue);
+                   Assert.IsFalse(Decimal.MaxValue <= Decimal.MinValue);
+               }
+               
+               [Test]
+               public void TestToByte()
+               {
+                   // Byte Decimal.ToByte(Decimal)
+                   Assert.AreEqual(0, Decimal.ToByte(0));
+                   Assert.AreEqual(1, Decimal.ToByte(1));
+                   Assert.AreEqual(255, Decimal.ToByte(255));
+               
+                   AssertExtensions.Throws<OverflowException>(() => Decimal.ToByte(256), "Expected an overflow");
+               }
+               
+               private void VerifyAdd<T>(Decimal d1, Decimal d2, Decimal expected = Decimal.Zero) where T : Exception
+               {
+                   bool expectFailure = typeof(T) != typeof(Exception);
+               
+                   try
+                   {
+                       Decimal result1 = Decimal.Add(d1, d2);
+                       Decimal result2 = d1 + d2;
+               
+                       Assert.IsFalse(expectFailure, "Expected an exception to be thrown");
+                       Assert.AreEqual(result1, result2);
+                       Assert.AreEqual(expected, result1);
+                   }
+                   catch (T)
+                   {
+                       Assert.IsTrue(expectFailure, "Didn't expect an exception to be thrown");
+                   }
+               }
+               [Test]
+               public void TestAdd()
+               {
+                   // Decimal Decimal.Add(Decimal, Decimal)
+                   // Decimal Decimal.op_Addition(Decimal, Decimal)
+                   VerifyAdd<Exception>(1, 1, 2);
+                   VerifyAdd<Exception>(-1, 1, 0);
+                   VerifyAdd<Exception>(1, -1, 0);
+                   VerifyAdd<Exception>(Decimal.MaxValue, Decimal.Zero, Decimal.MaxValue);
+                   VerifyAdd<Exception>(Decimal.MinValue, Decimal.Zero, Decimal.MinValue);
+                   VerifyAdd<Exception>(79228162514264337593543950330m, 5, Decimal.MaxValue);
+                   VerifyAdd<Exception>(79228162514264337593543950330m, -5, 79228162514264337593543950325m);
+                   VerifyAdd<Exception>(-79228162514264337593543950330m, -5, Decimal.MinValue);
+                   VerifyAdd<Exception>(-79228162514264337593543950330m, 5, -79228162514264337593543950325m);
+                   VerifyAdd<Exception>(1234.5678m, 0.00009m, 1234.56789m);
+                   VerifyAdd<Exception>(-1234.5678m, 0.00009m, -1234.56771m);
+                   VerifyAdd<Exception>(0.1111111111111111111111111111m,
+                                        0.1111111111111111111111111111m,
+                                        0.2222222222222222222222222222m);
+                   VerifyAdd<Exception>(0.5555555555555555555555555555m,
+                                        0.5555555555555555555555555555m,
+                                        1.1111111111111111111111111110m);
+               
+                   // Exceptions
+                   VerifyAdd<OverflowException>(Decimal.MaxValue, Decimal.MaxValue);
+                   VerifyAdd<OverflowException>(79228162514264337593543950330m, 6);
+                   VerifyAdd<OverflowException>(-79228162514264337593543950330m, -6, Decimal.MinValue);
+               }
+
+               [Test]
+               public void TestCeiling()
+               {
+                   // Decimal Decimal.Ceiling(Decimal)
+                   Assert.AreEqual(123, Decimal.Ceiling((Decimal)123));
+                   Assert.AreEqual(124, Decimal.Ceiling((Decimal)123.123));
+                   Assert.AreEqual(-123, Decimal.Ceiling((Decimal)(-123.123)));
+                   Assert.AreEqual(124, Decimal.Ceiling((Decimal)123.567));
+                   Assert.AreEqual(-123, Decimal.Ceiling((Decimal)(-123.567)));
+               }
+               
+               private void VerifyDivide<T>(Decimal d1, Decimal d2, Decimal expected = Decimal.Zero) where T : Exception
+               {
+                   bool expectFailure = typeof(T) != typeof(Exception);
+               
+                   try
+                   {
+                       Decimal result1 = Decimal.Divide(d1, d2);
+                       Decimal result2 = d1 / d2;
+               
+                       Assert.IsFalse(expectFailure, "Expected an exception to be thrown");
+                       Assert.AreEqual(result1, result2);
+                       Assert.AreEqual(expected, result1);
+                   }
+                   catch (T)
+                   {
+                       Assert.IsTrue(expectFailure, "Didn't expect an exception to be thrown");
+                   }
+               }
+               [Test]
+               public void TestDivide()
+               {
+                   // Decimal Decimal.Divide(Decimal, Decimal)
+                   // Decimal Decimal.op_Division(Decimal, Decimal)
+               
+                   // Vanilla cases
+                   VerifyDivide<Exception>(Decimal.One, Decimal.One, Decimal.One);
+                   VerifyDivide<Exception>(Decimal.MaxValue, Decimal.MinValue, Decimal.MinusOne);
+                   VerifyDivide<Exception>(0.9214206543486529434634231456m, Decimal.MaxValue, Decimal.Zero);
+                   VerifyDivide<Exception>(38214206543486529434634231456m, 0.49214206543486529434634231456m, 77648730371625094566866001277m);
+                   VerifyDivide<Exception>(-78228162514264337593543950335m, Decimal.MaxValue, -0.987378225516463811113412343m);
+                   VerifyDivide<Exception>(5m + 10m, 2m, 7.5m);
+                   VerifyDivide<Exception>(10m, 2m, 5m);
+               
+                   // Tests near MaxValue (VSWhidbey #389382)
+                   VerifyDivide<Exception>(792281625142643375935439503.4m, 0.1m, 7922816251426433759354395034m);
+                   VerifyDivide<Exception>(79228162514264337593543950.34m, 0.1m, 792281625142643375935439503.4m);
+                   VerifyDivide<Exception>(7922816251426433759354395.034m, 0.1m, 79228162514264337593543950.34m);
+                   VerifyDivide<Exception>(792281625142643375935439.5034m, 0.1m, 7922816251426433759354395.034m);
+                   VerifyDivide<Exception>(79228162514264337593543950335m, 10m, 7922816251426433759354395033.5m);
+                   VerifyDivide<Exception>(79228162514264337567774146561m, 10m, 7922816251426433756777414656.1m);
+                   VerifyDivide<Exception>(79228162514264337567774146560m, 10m, 7922816251426433756777414656m);
+                   VerifyDivide<Exception>(79228162514264337567774146559m, 10m, 7922816251426433756777414655.9m);
+                   VerifyDivide<Exception>(79228162514264337593543950335m, 1.1m, 72025602285694852357767227577m);
+                   VerifyDivide<Exception>(79228162514264337593543950335m, 1.01m, 78443725261647859003508861718m);
+                   VerifyDivide<Exception>(79228162514264337593543950335m, 1.001m, 79149013500763574019524425909.091m);
+                   VerifyDivide<Exception>(79228162514264337593543950335m, 1.0001m, 79220240490215316061937756559.344m);
+                   VerifyDivide<Exception>(79228162514264337593543950335m, 1.00001m, 79227370240561931974224208092.919m);
+                   VerifyDivide<Exception>(79228162514264337593543950335m, 1.000001m, 79228083286181051412492537842.462m);
+                   VerifyDivide<Exception>(79228162514264337593543950335m, 1.0000001m, 79228154591448878448656105469.389m);
+                   VerifyDivide<Exception>(79228162514264337593543950335m, 1.00000001m, 79228161721982720373716746597.833m);
+                   VerifyDivide<Exception>(79228162514264337593543950335m, 1.000000001m, 79228162435036175158507775176.492m);
+                   VerifyDivide<Exception>(79228162514264337593543950335m, 1.0000000001m, 79228162506341521342909798200.709m);
+                   VerifyDivide<Exception>(79228162514264337593543950335m, 1.00000000001m, 79228162513472055968409229775.316m);
+                   VerifyDivide<Exception>(79228162514264337593543950335m, 1.000000000001m, 79228162514185109431029765225.569m);
+                   VerifyDivide<Exception>(79228162514264337593543950335m, 1.0000000000001m, 79228162514256414777292524693.522m);
+                   VerifyDivide<Exception>(79228162514264337593543950335m, 1.00000000000001m, 79228162514263545311918807699.547m);
+                   VerifyDivide<Exception>(79228162514264337593543950335m, 1.000000000000001m, 79228162514264258365381436070.742m);
+                   VerifyDivide<Exception>(79228162514264337593543950335m, 1.0000000000000001m, 79228162514264329670727698908.567m);
+                   VerifyDivide<Exception>(79228162514264337593543950335m, 1.00000000000000001m, 79228162514264336801262325192.357m);
+                   VerifyDivide<Exception>(79228162514264337593543950335m, 1.000000000000000001m, 79228162514264337514315787820.736m);
+                   VerifyDivide<Exception>(79228162514264337593543950335m, 1.0000000000000000001m, 79228162514264337585621134083.574m);
+                   VerifyDivide<Exception>(79228162514264337593543950335m, 1.00000000000000000001m, 79228162514264337592751668709.857m);
+                   VerifyDivide<Exception>(79228162514264337593543950335m, 1.000000000000000000001m, 79228162514264337593464722172.486m);
+                   VerifyDivide<Exception>(79228162514264337593543950335m, 1.0000000000000000000001m, 79228162514264337593536027518.749m);
+                   VerifyDivide<Exception>(79228162514264337593543950335m, 1.00000000000000000000001m, 79228162514264337593543158053.375m);
+                   VerifyDivide<Exception>(79228162514264337593543950335m, 1.000000000000000000000001m, 79228162514264337593543871106.837m);
+                   VerifyDivide<Exception>(79228162514264337593543950335m, 1.0000000000000000000000001m, 79228162514264337593543942412.184m);
+                   VerifyDivide<Exception>(79228162514264337593543950335m, 1.00000000000000000000000001m, 79228162514264337593543949542.718m);
+                   VerifyDivide<Exception>(79228162514264337593543950335m, 1.000000000000000000000000001m, 79228162514264337593543950255.772m);
+                   VerifyDivide<Exception>(7922816251426433759354395033.5m, 0.9999999999999999999999999999m, 7922816251426433759354395034m);
+                   VerifyDivide<Exception>(79228162514264337593543950335m, 10000000m, 7922816251426433759354.3950335m);
+                   VerifyDivide<Exception>(7922816251426433759354395033.5m, 1.000001m, 7922808328618105141249253784.2m);
+                   VerifyDivide<Exception>(7922816251426433759354395033.5m, 1.0000000000000000000000000001m, 7922816251426433759354395032.7m);
+                   VerifyDivide<Exception>(7922816251426433759354395033.5m, 1.0000000000000000000000000002m, 7922816251426433759354395031.9m);
+                   VerifyDivide<Exception>(7922816251426433759354395033.5m, 0.9999999999999999999999999999m, 7922816251426433759354395034m);
+                   VerifyDivide<Exception>(79228162514264337593543950335m, 1.0000000000000000000000000001m, 79228162514264337593543950327m);
+                   Decimal boundary7 = new Decimal((int)429u, (int)2133437386u, 0, false, 0);
+                   Decimal boundary71 = new Decimal((int)429u, (int)2133437387u, 0, false, 0);
+                   Decimal maxValueBy7 = Decimal.MaxValue * 0.0000001m;
+                   VerifyDivide<Exception>(maxValueBy7, 1m, maxValueBy7);
+                   VerifyDivide<Exception>(maxValueBy7, 1m, maxValueBy7);
+                   VerifyDivide<Exception>(maxValueBy7, 0.0000001m, Decimal.MaxValue);
+                   VerifyDivide<Exception>(boundary7, 1m, boundary7);
+                   VerifyDivide<Exception>(boundary7, 0.000000100000000000000000001m, 91630438009337286849083695.62m);
+                   VerifyDivide<Exception>(boundary71, 0.000000100000000000000000001m, 91630438052286959809083695.62m);
+                   VerifyDivide<Exception>(7922816251426433759354.3950335m, 1m, 7922816251426433759354.3950335m);
+                   VerifyDivide<Exception>(7922816251426433759354.3950335m, 0.0000001m, 79228162514264337593543950335m);
+               
+                   //[] DivideByZero exceptions
+                   VerifyDivide<DivideByZeroException>(Decimal.One, Decimal.Zero);
+                   VerifyDivide<DivideByZeroException>(Decimal.Zero, Decimal.Zero);
+                   VerifyDivide<DivideByZeroException>(-5.00m, (-1m) * Decimal.Zero);
+                   VerifyDivide<DivideByZeroException>(0.0m, -0.00m);
+               
+                   //[] Overflow exceptions
+                   VerifyDivide<OverflowException>(79228162514264337593543950335m, -0.9999999999999999999999999m);
+                   VerifyDivide<OverflowException>(792281625142643.37593543950335m, 0.0000000000000079228162514264337593543950335m);
+                   VerifyDivide<OverflowException>(79228162514264337593543950335m, 0.1m);
+                   VerifyDivide<OverflowException>(7922816251426433759354395034m, 0.1m);
+                   VerifyDivide<OverflowException>(79228162514264337593543950335m, 0.9m);
+                   VerifyDivide<OverflowException>(79228162514264337593543950335m, 0.99m);
+                   VerifyDivide<OverflowException>(79228162514264337593543950335m, 0.999m);
+                   VerifyDivide<OverflowException>(79228162514264337593543950335m, 0.9999m);
+                   VerifyDivide<OverflowException>(79228162514264337593543950335m, 0.99999m);
+                   VerifyDivide<OverflowException>(79228162514264337593543950335m, 0.999999m);
+                   VerifyDivide<OverflowException>(79228162514264337593543950335m, 0.9999999m);
+                   VerifyDivide<OverflowException>(79228162514264337593543950335m, 0.99999999m);
+                   VerifyDivide<OverflowException>(79228162514264337593543950335m, 0.999999999m);
+                   VerifyDivide<OverflowException>(79228162514264337593543950335m, 0.9999999999m);
+                   VerifyDivide<OverflowException>(79228162514264337593543950335m, 0.99999999999m);
+                   VerifyDivide<OverflowException>(79228162514264337593543950335m, 0.999999999999m);
+                   VerifyDivide<OverflowException>(79228162514264337593543950335m, 0.9999999999999m);
+                   VerifyDivide<OverflowException>(79228162514264337593543950335m, 0.99999999999999m);
+                   VerifyDivide<OverflowException>(79228162514264337593543950335m, 0.999999999999999m);
+                   VerifyDivide<OverflowException>(79228162514264337593543950335m, 0.9999999999999999m);
+                   VerifyDivide<OverflowException>(79228162514264337593543950335m, 0.99999999999999999m);
+                   VerifyDivide<OverflowException>(79228162514264337593543950335m, 0.999999999999999999m);
+                   VerifyDivide<OverflowException>(79228162514264337593543950335m, 0.9999999999999999999m);
+                   VerifyDivide<OverflowException>(79228162514264337593543950335m, 0.99999999999999999999m);
+                   VerifyDivide<OverflowException>(79228162514264337593543950335m, 0.999999999999999999999m);
+                   VerifyDivide<OverflowException>(79228162514264337593543950335m, 0.9999999999999999999999m);
+                   VerifyDivide<OverflowException>(79228162514264337593543950335m, 0.99999999999999999999999m);
+                   VerifyDivide<OverflowException>(79228162514264337593543950335m, 0.999999999999999999999999m);
+                   VerifyDivide<OverflowException>(79228162514264337593543950335m, 0.9999999999999999999999999m);
+                   VerifyDivide<OverflowException>(79228162514264337593543950335m, 0.99999999999999999999999999m);
+                   VerifyDivide<OverflowException>(79228162514264337593543950335m, 0.999999999999999999999999999m);
+                   VerifyDivide<OverflowException>(79228162514264337593543950335m, 0.9999999999999999999999999999m);
+                   VerifyDivide<OverflowException>(79228162514264337593543950335m, -0.1m);
+                   VerifyDivide<OverflowException>(79228162514264337593543950335m, -0.9999999999999999999999999m);
+                   VerifyDivide<OverflowException>(Decimal.MaxValue / 2, 0.5m);
+               }
+               
+               [Test]
+               public void TestFloor()
+               {
+                   // Decimal Decimal.Floor(Decimal)
+                   Assert.AreEqual(123, Decimal.Floor((Decimal)123));
+                   Assert.AreEqual(123, Decimal.Floor((Decimal)123.123));
+                   Assert.AreEqual(-124, Decimal.Floor((Decimal)(-123.123)));
+                   Assert.AreEqual(123, Decimal.Floor((Decimal)123.567));
+                   Assert.AreEqual(-124, Decimal.Floor((Decimal)(-123.567)));
+               }
+               
+               [Test]
+               public void TestMaxValue()
+               {
+                   // Decimal Decimal.MaxValue
+                   Assert.AreEqual(Decimal.MaxValue, 79228162514264337593543950335m);
+               }
+               
+               [Test]
+               public void TestMinusOne()
+               {
+                   // Decimal Decimal.MinusOne
+                   Assert.AreEqual(Decimal.MinusOne, -1);
+               }
+               
+               [Test]
+               public void TestZero()
+               {
+                   // Decimal Decimal.Zero
+                   Assert.AreEqual(Decimal.Zero, 0);
+               }
+               
+               [Test]
+               public void TestOne()
+               {
+                   // Decimal Decimal.One
+                   Assert.AreEqual(Decimal.One, 1);
+               }
+               
+               [Test]
+               public void TestMinValue()
+               {
+                   // Decimal Decimal.MinValue
+                   Assert.AreEqual(Decimal.MinValue, -79228162514264337593543950335m);
+               }
+               
+               private void VerifyMultiply<T>(Decimal d1, Decimal d2, Decimal expected = Decimal.Zero) where T : Exception
+               {
+                   bool expectFailure = typeof(T) != typeof(Exception);
+               
+                   try
+                   {
+                       Decimal result1 = Decimal.Multiply(d1, d2);
+                       Decimal result2 = d1 * d2;
+               
+                       Assert.IsFalse(expectFailure, "Expected an exception to be thrown");
+                       Assert.AreEqual(result1, result2);
+                       Assert.AreEqual(expected, result1);
+                   }
+                   catch (T)
+                   {
+                       Assert.IsTrue(expectFailure, "Didn't expect an exception to be thrown");
+                   }
+               }
+               
+               [Test]
+               public void TestMultiply()
+               {
+                   // Decimal Decimal.Multiply(Decimal, Decimal)
+                   // Decimal Decimal.op_Multiply(Decimal, Decimal)
+               
+                   VerifyMultiply<Exception>(Decimal.One, Decimal.One, Decimal.One);
+                   VerifyMultiply<Exception>(7922816251426433759354395033.5m, new Decimal(10), Decimal.MaxValue);
+                   VerifyMultiply<Exception>(0.2352523523423422342354395033m, 56033525474612414574574757495m, 13182018677937129120135020796m);
+                   VerifyMultiply<Exception>(46161363632634613634.093453337m, 461613636.32634613634083453337m, 21308714924243214928823669051m);
+                   VerifyMultiply<Exception>(0.0000000000000345435353453563m, .0000000000000023525235234234m, 0.0000000000000000000000000001m);
+               
+                   // Near MaxValue
+                   VerifyMultiply<Exception>(79228162514264337593543950335m, 0.9m, 71305346262837903834189555302m);
+                   VerifyMultiply<Exception>(79228162514264337593543950335m, 0.99m, 78435880889121694217608510832m);
+                   VerifyMultiply<Exception>(79228162514264337593543950335m, 0.9999999999999999999999999999m, 79228162514264337593543950327m);
+                   VerifyMultiply<Exception>(-79228162514264337593543950335m, 0.9m, -71305346262837903834189555302m);
+                   VerifyMultiply<Exception>(-79228162514264337593543950335m, 0.99m, -78435880889121694217608510832m);
+                   VerifyMultiply<Exception>(-79228162514264337593543950335m, 0.9999999999999999999999999999m, -79228162514264337593543950327m);
+               
+                   // Exceptions
+                   VerifyMultiply<OverflowException>(Decimal.MaxValue, Decimal.MinValue);
+                   VerifyMultiply<OverflowException>(Decimal.MinValue, 1.1m);
+                   VerifyMultiply<OverflowException>(79228162514264337593543950335m, 1.1m);
+                   VerifyMultiply<OverflowException>(79228162514264337593543950335m, 1.01m);
+                   VerifyMultiply<OverflowException>(79228162514264337593543950335m, 1.001m);
+                   VerifyMultiply<OverflowException>(79228162514264337593543950335m, 1.0001m);
+                   VerifyMultiply<OverflowException>(79228162514264337593543950335m, 1.00001m);
+                   VerifyMultiply<OverflowException>(79228162514264337593543950335m, 1.000001m);
+                   VerifyMultiply<OverflowException>(79228162514264337593543950335m, 1.0000001m);
+                   VerifyMultiply<OverflowException>(79228162514264337593543950335m, 1.00000001m);
+                   VerifyMultiply<OverflowException>(79228162514264337593543950335m, 1.000000001m);
+                   VerifyMultiply<OverflowException>(79228162514264337593543950335m, 1.0000000001m);
+                   VerifyMultiply<OverflowException>(79228162514264337593543950335m, 1.00000000001m);
+                   VerifyMultiply<OverflowException>(79228162514264337593543950335m, 1.000000000001m);
+                   VerifyMultiply<OverflowException>(79228162514264337593543950335m, 1.0000000000001m);
+                   VerifyMultiply<OverflowException>(79228162514264337593543950335m, 1.00000000000001m);
+                   VerifyMultiply<OverflowException>(79228162514264337593543950335m, 1.000000000000001m);
+                   VerifyMultiply<OverflowException>(79228162514264337593543950335m, 1.0000000000000001m);
+                   VerifyMultiply<OverflowException>(79228162514264337593543950335m, 1.00000000000000001m);
+                   VerifyMultiply<OverflowException>(79228162514264337593543950335m, 1.000000000000000001m);
+                   VerifyMultiply<OverflowException>(79228162514264337593543950335m, 1.0000000000000000001m);
+                   VerifyMultiply<OverflowException>(79228162514264337593543950335m, 1.00000000000000000001m);
+                   VerifyMultiply<OverflowException>(79228162514264337593543950335m, 1.000000000000000000001m);
+                   VerifyMultiply<OverflowException>(79228162514264337593543950335m, 1.0000000000000000000001m);
+                   VerifyMultiply<OverflowException>(79228162514264337593543950335m, 1.00000000000000000000001m);
+                   VerifyMultiply<OverflowException>(79228162514264337593543950335m, 1.000000000000000000000001m);
+                   VerifyMultiply<OverflowException>(79228162514264337593543950335m, 1.0000000000000000000000001m);
+                   VerifyMultiply<OverflowException>(79228162514264337593543950335m, 1.00000000000000000000000001m);
+                   VerifyMultiply<OverflowException>(79228162514264337593543950335m, 1.000000000000000000000000001m);
+                   VerifyMultiply<OverflowException>(Decimal.MaxValue / 2, 2m);
+               }
+               
+               [Test]
+               public void TestNegate()
+               {
+                   // Decimal Decimal.Negate(Decimal)
+                   Assert.AreEqual(0, Decimal.Negate(0));
+                   Assert.AreEqual(1, Decimal.Negate(-1));
+                   Assert.AreEqual(-1, Decimal.Negate(1));
+               }
+               
+               [Test]
+               public void Testop_Decrement()
+               {
+                   // Decimal Decimal.op_Decrement(Decimal)
+                   Decimal d = 12345;
+                   Assert.AreEqual(12344, --d);
+                   d = 12345.678m;
+                   Assert.AreEqual(12344.678m, --d);
+                   d = -12345;
+                   Assert.AreEqual(-12346, --d);
+                   d = -12345.678m;
+                   Assert.AreEqual(-12346.678m, --d);
+               }
+               
+               [Test]
+               public void Testop_Increment()
+               {
+                   // Decimal Decimal.op_Increment(Decimal)
+                   Decimal d = 12345;
+                   Assert.AreEqual(12346, ++d);
+                   d = 12345.678m;
+                   Assert.AreEqual(12346.678m, ++d);
+                   d = -12345;
+                   Assert.AreEqual(-12344m, ++d);
+                   d = -12345.678m;
+                   Assert.AreEqual(-12344.678m, ++d);
+               }
+               
+               [Test]
+               public void TestParse()
+               {
+                   // Boolean Decimal.TryParse(String, NumberStyles, IFormatProvider, Decimal)
+                   Assert.AreEqual(123, Decimal.Parse("123"));
+                   Assert.AreEqual(-123, Decimal.Parse("-123"));
+                   Assert.AreEqual(123.123m, Decimal.Parse("123.123"));
+                   Assert.AreEqual(-123.123m, Decimal.Parse("-123.123"));
+               
+                   Decimal d;
+                   Assert.IsTrue(Decimal.TryParse("79228162514264337593543950335", out d));
+                   Assert.AreEqual(Decimal.MaxValue, d);
+               
+                   Assert.IsTrue(Decimal.TryParse("-79228162514264337593543950335", out d));
+                   Assert.AreEqual(Decimal.MinValue, d);
+               
+                   Assert.IsTrue(Decimal.TryParse("79,228,162,514,264,337,593,543,950,335", NumberStyles.AllowThousands, NumberFormatInfo.CurrentInfo, out d));
+                   Assert.AreEqual(Decimal.MaxValue, d);
+               
+                   Assert.IsFalse(Decimal.TryParse("ysaidufljasdf", out d));
+                   Assert.IsFalse(Decimal.TryParse("79228162514264337593543950336", out d));
+               }
+               
+               private void VerifyRemainder(Decimal d1, Decimal d2, Decimal expectedResult)
+               {
+                   Decimal result1 = Decimal.Remainder(d1, d2);
+                   Decimal result2 = d1 % d2;
+               
+                   Assert.AreEqual(result1, result2);
+                   Assert.AreEqual(expectedResult, result1);
+               }
+               
+               [Test]
+               public void TestRemainder()
+               {
+                   // Decimal Decimal.Remainder(Decimal, Decimal)
+                   // Decimal Decimal.op_Modulus(Decimal, Decimal)
+                   Decimal NegativeZero = new Decimal(0, 0, 0, true, 0);
+                   VerifyRemainder(5m, 3m, 2m);
+                   VerifyRemainder(5m, -3m, 2m);
+                   VerifyRemainder(-5m, 3m, -2m);
+                   VerifyRemainder(-5m, -3m, -2m);
+                   VerifyRemainder(3m, 5m, 3m);
+                   VerifyRemainder(3m, -5m, 3m);
+                   VerifyRemainder(-3m, 5m, -3m);
+                   VerifyRemainder(-3m, -5m, -3m);
+                   VerifyRemainder(10m, -3m, 1m);
+                   VerifyRemainder(-10m, 3m, -1m);
+                   VerifyRemainder(-2.0m, 0.5m, -0.0m);
+                   VerifyRemainder(2.3m, 0.531m, 0.176m);
+                   VerifyRemainder(0.00123m, 3242m, 0.00123m);
+                   VerifyRemainder(3242m, 0.00123m, 0.00044m);
+                   VerifyRemainder(17.3m, 3m, 2.3m);
+                   VerifyRemainder(8.55m, 2.25m, 1.80m);
+                   VerifyRemainder(0.00m, 3m, 0.00m);
+                   VerifyRemainder(NegativeZero, 2.2m, NegativeZero);
+               
+                   // [] Max/Min
+                   VerifyRemainder(Decimal.MaxValue, Decimal.MaxValue, 0m);
+                   VerifyRemainder(Decimal.MaxValue, Decimal.MinValue, 0m);
+                   VerifyRemainder(Decimal.MaxValue, 1, 0m);
+                   VerifyRemainder(Decimal.MaxValue, 2394713m, 1494647m);
+                   VerifyRemainder(Decimal.MaxValue, -32768m, 32767m);
+                   VerifyRemainder(-0.00m, Decimal.MaxValue, -0.00m);
+                   VerifyRemainder(1.23984m, Decimal.MaxValue, 1.23984m);
+                   VerifyRemainder(2398412.12983m, Decimal.MaxValue, 2398412.12983m);
+                   VerifyRemainder(-0.12938m, Decimal.MaxValue, -0.12938m);
+               
+                   VerifyRemainder(Decimal.MinValue, Decimal.MinValue, NegativeZero);
+                   VerifyRemainder(Decimal.MinValue, Decimal.MaxValue, NegativeZero);
+                   VerifyRemainder(Decimal.MinValue, 1, NegativeZero);
+                   VerifyRemainder(Decimal.MinValue, 2394713m, -1494647m);
+                   VerifyRemainder(Decimal.MinValue, -32768m, -32767m); // ASURT #90921
+                   VerifyRemainder(0.0m, Decimal.MinValue, 0.0m);
+                   VerifyRemainder(1.23984m, Decimal.MinValue, 1.23984m);
+                   VerifyRemainder(2398412.12983m, Decimal.MinValue, 2398412.12983m);
+                   VerifyRemainder(-0.12938m, Decimal.MinValue, -0.12938m);
+               
+                   VerifyRemainder(57675350989891243676868034225m, 7m, 5m); // VSWhidbey #325142
+                   VerifyRemainder(-57675350989891243676868034225m, 7m, -5m);
+                   VerifyRemainder(57675350989891243676868034225m, -7m, 5m);
+                   VerifyRemainder(-57675350989891243676868034225m, -7m, -5m);
+               
+                   // VSWhidbey #389382
+                   VerifyRemainder(792281625142643375935439503.4m, 0.1m, 0.0m);
+                   VerifyRemainder(79228162514264337593543950.34m, 0.1m, 0.04m);
+                   VerifyRemainder(7922816251426433759354395.034m, 0.1m, 0.034m);
+                   VerifyRemainder(792281625142643375935439.5034m, 0.1m, 0.0034m);
+                   VerifyRemainder(79228162514264337593543950335m, 10m, 5m);
+                   VerifyRemainder(79228162514264337567774146561m, 10m, 1m);
+                   VerifyRemainder(79228162514264337567774146560m, 10m, 0m);
+                   VerifyRemainder(79228162514264337567774146559m, 10m, 9m);
+               }
+               
+               private void VerifySubtract<T>(Decimal d1, Decimal d2, Decimal expected = Decimal.Zero) where T : Exception
+               {
+                   bool expectFailure = typeof(T) != typeof(Exception);
+               
+                   try
+                   {
+                       Decimal result1 = Decimal.Subtract(d1, d2);
+                       Decimal result2 = d1 - d2;
+               
+                       Assert.IsFalse(expectFailure, "Expected an exception to be thrown");
+                       Assert.AreEqual(result1, result2);
+                       Assert.AreEqual(expected, result1);
+                   }
+                   catch (T)
+                   {
+                       Assert.IsTrue(expectFailure, "Didn't expect an exception to be thrown");
+                   }
+               }
+               
+               [Test]
+               public void TestSubtract()
+               {
+                   // Decimal Decimal.Subtract(Decimal, Decimal)
+                   // Decimal Decimal.op_Subtraction(Decimal, Decimal)
+               
+                   VerifySubtract<Exception>(1, 1, 0);
+                   VerifySubtract<Exception>(-1, 1, -2);
+                   VerifySubtract<Exception>(1, -1, 2);
+                   VerifySubtract<Exception>(Decimal.MaxValue, Decimal.Zero, Decimal.MaxValue);
+                   VerifySubtract<Exception>(Decimal.MinValue, Decimal.Zero, Decimal.MinValue);
+                   VerifySubtract<Exception>(79228162514264337593543950330m, -5, Decimal.MaxValue);
+                   VerifySubtract<Exception>(79228162514264337593543950330m, 5, 79228162514264337593543950325m);
+                   VerifySubtract<Exception>(-79228162514264337593543950330m, 5, Decimal.MinValue);
+                   VerifySubtract<Exception>(-79228162514264337593543950330m, -5, -79228162514264337593543950325m);
+                   VerifySubtract<Exception>(1234.5678m, 0.00009m, 1234.56771m);
+                   VerifySubtract<Exception>(-1234.5678m, 0.00009m, -1234.56789m);
+                   VerifySubtract<Exception>(0.1111111111111111111111111111m, 0.1111111111111111111111111111m, 0);
+                   VerifySubtract<Exception>(0.2222222222222222222222222222m,
+                                        0.1111111111111111111111111111m,
+                                        0.1111111111111111111111111111m);
+                   VerifySubtract<Exception>(1.1111111111111111111111111110m,
+                                        0.5555555555555555555555555555m,
+                                        0.5555555555555555555555555555m);
+               }
+               
+               [Test]
+               public void TestTruncate()
+               {
+                   // Decimal Decimal.Truncate(Decimal)
+                   Assert.AreEqual(123, Decimal.Truncate((Decimal)123));
+                   Assert.AreEqual(123, Decimal.Truncate((Decimal)123.123));
+                   Assert.AreEqual(-123, Decimal.Truncate((Decimal)(-123.123)));
+                   Assert.AreEqual(123, Decimal.Truncate((Decimal)123.567));
+                   Assert.AreEqual(-123, Decimal.Truncate((Decimal)(-123.567)));
+               }
+               
+               [Test]
+               public void TestRound()
+               {
+                   // Decimal Decimal.Truncate(Decimal)
+                   // Assert.AreEqual<Decimal>(123, Decimal.Round((Decimal)123, 2));
+                   // Assert.AreEqual<Decimal>((Decimal)123.123, Decimal.Round((Decimal)123.123, 3));
+                   // Assert.AreEqual<Decimal>((Decimal)(-123.1), Decimal.Round((Decimal)(-123.123), 1));
+                   // Assert.AreEqual<Decimal>(124, Decimal.Round((Decimal)123.567, 0));
+                   // Assert.AreEqual<Decimal>((Decimal)(-123.567), Decimal.Round((Decimal)(-123.567), 4));
+               }
+               
+               [Test]
+               public void TestCompare()
+               {
+                   // Int32 Decimal.Compare(Decimal, Decimal)
+                   Assert.IsTrue(Decimal.Compare(Decimal.Zero, Decimal.Zero) == 0);
+                   Assert.IsTrue(Decimal.Compare(Decimal.Zero, Decimal.One) < 0);
+                   Assert.IsTrue(Decimal.Compare(Decimal.One, Decimal.Zero) > 0);
+                   Assert.IsTrue(Decimal.Compare(Decimal.MinusOne, Decimal.Zero) < 0);
+                   Assert.IsTrue(Decimal.Compare(Decimal.Zero, Decimal.MinusOne) > 0);
+                   Assert.IsTrue(Decimal.Compare(5, 3) > 0);
+                   Assert.IsTrue(Decimal.Compare(5, 5) == 0);
+                   Assert.IsTrue(Decimal.Compare(5, 9) < 0);
+                   Assert.IsTrue(Decimal.Compare(-123.123m, 123.123m) < 0);
+                   Assert.IsTrue(Decimal.Compare(Decimal.MaxValue, Decimal.MaxValue) == 0);
+                   Assert.IsTrue(Decimal.Compare(Decimal.MinValue, Decimal.MinValue) == 0);
+                   Assert.IsTrue(Decimal.Compare(Decimal.MinValue, Decimal.MaxValue) < 0);
+                   Assert.IsTrue(Decimal.Compare(Decimal.MaxValue, Decimal.MinValue) > 0);
+               }
+               
+               [Test]
+               public void TestCompareTo()
+               {
+                   // Int32 Decimal.CompareTo(Decimal)
+                   Decimal d = 456;
+                   Assert.IsTrue(d.CompareTo(456m) == 0);
+                   Assert.IsTrue(d.CompareTo(457m) < 0);
+                   Assert.IsTrue(d.CompareTo(455m) > 0);
+               }
+               
+               [Test]
+               public void TestSystemIComparableCompareTo()
+               {
+                   // Int32 Decimal.System.IComparable.CompareTo(Object)
+                   IComparable d = (Decimal)248;
+                   Assert.IsTrue(d.CompareTo(248m) == 0);
+                   Assert.IsTrue(d.CompareTo(249m) < 0);
+                   Assert.IsTrue(d.CompareTo(247m) > 0);
+                   Assert.IsTrue(d.CompareTo(null) > 0);
+               
+                   AssertExtensions.Throws<ArgumentException>(() => d.CompareTo("248"), "Expected an argument exception");
+               }
+               
+               [Test]
+               public void TestGetHashCode()
+               {
+                   // Int32 Decimal.GetHashCode()
+                   Assert.AreNotEqual(Decimal.MinusOne.GetHashCode(), Decimal.One.GetHashCode());
+               }
+               
+               [Test]
+               public void TestToSingle()
+               {
+                   // Single Decimal.ToSingle(Decimal)
+                   Single s = 12345.12f;
+                   Assert.AreEqual(s, Decimal.ToSingle((Decimal)s));
+                   Assert.AreEqual(-s, Decimal.ToSingle((Decimal)(-s)));
+               
+                   s = 1e20f;
+                   Assert.AreEqual(s, Decimal.ToSingle((Decimal)s));
+                   Assert.AreEqual(-s, Decimal.ToSingle((Decimal)(-s)));
+               
+                   s = 1e27f;
+                   Assert.AreEqual(s, Decimal.ToSingle((Decimal)s));
+                   Assert.AreEqual(-s, Decimal.ToSingle((Decimal)(-s)));
+               }
+               
+               [Test]
+               public void TestToDouble()
+               {
+                   Double d = Decimal.ToDouble(new Decimal(0, 0, 1, false, 0));
+               
+                   // Double Decimal.ToDouble(Decimal)
+                   Double dbl = 123456789.123456;
+                   Assert.AreEqual(dbl, Decimal.ToDouble((Decimal)dbl));
+                   Assert.AreEqual(-dbl, Decimal.ToDouble((Decimal)(-dbl)));
+               
+                   dbl = 1e20;
+                   Assert.AreEqual(dbl, Decimal.ToDouble((Decimal)dbl));
+                   Assert.AreEqual(-dbl, Decimal.ToDouble((Decimal)(-dbl)));
+               
+                   dbl = 1e27;
+                   Assert.AreEqual(dbl, Decimal.ToDouble((Decimal)dbl));
+                   Assert.AreEqual(-dbl, Decimal.ToDouble((Decimal)(-dbl)));
+               
+                   dbl = Int64.MaxValue;
+                   // Need to pass in the Int64.MaxValue to ToDouble and not dbl because the conversion to double is a little lossy and we want precision
+                   Assert.AreEqual(dbl, Decimal.ToDouble((Decimal)Int64.MaxValue));
+                   Assert.AreEqual(-dbl, Decimal.ToDouble((Decimal)(-Int64.MaxValue)));
+               }
+               
+               [Test]
+               public void TestToInt16()
+               {
+                   // Int16 Decimal.ToInt16(Decimal)
+                   Assert.AreEqual(Int16.MaxValue, Decimal.ToInt16((Decimal)Int16.MaxValue));
+                   Assert.AreEqual(Int16.MinValue, Decimal.ToInt16((Decimal)Int16.MinValue));
+               }
+               
+               [Test]
+               public void TestToInt32()
+               {
+                   // Int32 Decimal.ToInt32(Decimal)
+                   Assert.AreEqual(Int32.MaxValue, Decimal.ToInt32((Decimal)Int32.MaxValue));
+                   Assert.AreEqual(Int32.MinValue, Decimal.ToInt32((Decimal)Int32.MinValue));
+               }
+               
+               [Test]
+               public void TestGetBits()
+               {
+                   // Int32[] Decimal.GetBits(Decimal)
+               }
+               
+               [Test]
+               public void TestToInt64()
+               {
+                   // Int64 Decimal.ToInt64(Decimal)
+                   Assert.AreEqual(Int64.MaxValue, Decimal.ToInt64((Decimal)Int64.MaxValue));
+                   Assert.AreEqual(Int64.MinValue, Decimal.ToInt64((Decimal)Int64.MinValue));
+               }
+               
+               [Test]
+               public void TestToSByte()
+               {
+                   // SByte Decimal.ToSByte(Decimal)
+                   Assert.AreEqual(SByte.MaxValue, Decimal.ToSByte((Decimal)SByte.MaxValue));
+                   Assert.AreEqual(SByte.MinValue, Decimal.ToSByte((Decimal)SByte.MinValue));
+               }
+               
+               [Test]
+               public void TestToUInt16()
+               {
+                   // UInt16 Decimal.ToUInt16(Decimal)
+                   Assert.AreEqual(UInt16.MaxValue, Decimal.ToUInt16((Decimal)UInt16.MaxValue));
+                   Assert.AreEqual(UInt16.MinValue, Decimal.ToUInt16((Decimal)UInt16.MinValue));
+               }
+               
+               [Test]
+               public void TestToUInt32()
+               {
+                   // UInt32 Decimal.ToUInt32(Decimal)
+                   Assert.AreEqual(UInt32.MaxValue, Decimal.ToUInt32((Decimal)UInt32.MaxValue));
+                   Assert.AreEqual(UInt32.MinValue, Decimal.ToUInt32((Decimal)UInt32.MinValue));
+               }
+               
+               [Test]
+               public void TestToUInt64()
+               {
+                   // UInt64 Decimal.ToUInt64(Decimal)
+                   Assert.AreEqual(UInt64.MaxValue, Decimal.ToUInt64((Decimal)UInt64.MaxValue));
+                   Assert.AreEqual(UInt64.MinValue, Decimal.ToUInt64((Decimal)UInt64.MinValue));
+               }
+               
+               [Test]
+               public void TestToString()
+               {
+                   // String Decimal.ToString()
+                   Decimal d1 = 6310.23m;
+                   Assert.AreEqual("6310.23", d1.ToString());
+               
+                   Decimal d2 = -8249.000003m;
+                   Assert.AreEqual("-8249.000003", d2.ToString());
+               
+                   Assert.AreEqual("79228162514264337593543950335", Decimal.MaxValue.ToString());
+                   Assert.AreEqual("-79228162514264337593543950335", Decimal.MinValue.ToString());
+               }
+               
+               [Test]
+               public void Testctor()
+               {
+                   Decimal d;
+                   // Void Decimal..ctor(Double)
+                   d = new Decimal((Double)123456789.123456);
+                   Assert.AreEqual(d, (Decimal)123456789.123456);
+               
+                   // Void Decimal..ctor(Int32)
+                   d = new Decimal((Int32)Int32.MaxValue);
+                   Assert.AreEqual(d, Int32.MaxValue);
+               
+                   // Void Decimal..ctor(Int64)
+                   d = new Decimal((Int64)Int64.MaxValue);
+                   Assert.AreEqual(d, Int64.MaxValue);
+               
+                   // Void Decimal..ctor(Single)
+                   d = new Decimal((Single)123.123);
+                   Assert.AreEqual(d, (Decimal)123.123);
+               
+                   // Void Decimal..ctor(UInt32)
+                   d = new Decimal((UInt32)UInt32.MaxValue);
+                   Assert.AreEqual(d, UInt32.MaxValue);
+               
+                   // Void Decimal..ctor(UInt64)
+                   d = new Decimal((UInt64)UInt64.MaxValue);
+                   Assert.AreEqual(d, UInt64.MaxValue);
+               
+                   // Void Decimal..ctor(Int32, Int32, Int32, Boolean, Byte)
+                   d = new Decimal(1, 1, 1, false, 0);
+                   Decimal d2 = 3;
+                   d2 += UInt32.MaxValue;
+                   d2 += UInt64.MaxValue;
+                   Assert.AreEqual(d, d2);
+               
+                   // Void Decimal..ctor(Int32[])
+                   d = new Decimal(new Int32[] { 1, 1, 1, 0 });
+                   Assert.AreEqual(d, d2);
+               }
+               
+               [Test]
+               public void TestNumberBufferLimit()
+               {
+                   Decimal dE = 1234567890123456789012345.6785m;
+                   string s1 = "1234567890123456789012345.678456";
+                   Decimal d1 = Decimal.Parse(s1);
+                   Assert.AreEqual(d1, dE);
+                   return;
+               }
+       }
+}
index 2758c3333960543af6b8943aab27744ee8e1635b..29bbc632dd2e8799b159d0763065af8a813b120d 100644 (file)
@@ -1565,5 +1565,51 @@ namespace MonoTests.System
                        Assert.AreEqual ("-3.01", Math.Round (-3.01M, 5).ToString (CultureInfo.InvariantCulture), "#3");
                        Assert.AreEqual ("128", Math.Round (127.5M, 0).ToString (CultureInfo.InvariantCulture), "#4");
                }
+
+               [Test] // Bug Xamarin#14822
+               public void RoundToString_Bug14822 ()
+               {
+                       decimal value = 1.600000m;
+                       var roundedValue = Math.Round (value, 3);
+                       Assert.AreEqual ("1.600", roundedValue.ToString (), "#1");
+               }
+
+               [Test] // Bug Xamarin#17538
+               public void BankerRounding ()
+               {
+                       decimal dcm3 = 987654321098765432109876543.2m;
+                       decimal dcm4 = 0.05m;
+                       decimal dcm5 = dcm3 + dcm4;
+
+                       Assert.AreEqual (987654321098765432109876543.2m, dcm5);
+               }
+
+               [Test] // Bug Xamarin #24411
+               public void DecimalDivision_24411  ()
+               {
+                       decimal dd = 45m;
+                       var x = dd / 100;
+                       var bits = decimal.GetBits (x);
+                       var flags = (uint) bits[3];
+                       byte scale2 = (byte)(flags >> 16);
+                       
+                       Assert.AreEqual (2, scale2);
+
+                       // The side effect is that 45m/100 should render as 0.45, not 0.4500000000000000000000000000
+                       // Just for completeness:
+
+                       Assert.AreEqual ("0.45", (45m/100).ToString ());
+               }
+
+               [Test] // Bug SUSE #655780
+               public void TrailingZerosBug ()
+               {
+                       decimal d;
+                       Assert.AreEqual ("0", (0m/5).ToString ());
+                       Assert.AreEqual ("0.2", (1m/5).ToString ());
+                       Assert.AreEqual ("0.4", (2m/5).ToString ());
+                       Assert.AreEqual ("0.6", (3m/5).ToString ());
+                       Assert.AreEqual ("0.8", (4m/5).ToString ());
+               }
        }
 }
index 6fb77f4d0fe0105c6296ee86666a626a7ff01598..0b3e042e3097b6021ea395e5e2c7987f5c07f222 100644 (file)
@@ -26,8 +26,6 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
-#if NET_4_0
-
 using System;
 using System.Reflection;
 using System.Threading;
@@ -113,26 +111,37 @@ namespace MonoTests.System
                static int counter;
 
                [Test]
-               public void EnsureSingleThreadSafeExecution () {
+               public void EnsureSingleThreadSafeExecution ()
+               {
                        counter = 42;
+                       bool started = false;
 
                        var l = new Lazy<int> (delegate () { return counter ++; }, true);
-
+                       bool failed = false;
                        object monitor = new object ();
-                       var threads = new Thread [10];
-                       for (int i = 0; i < 10; ++i) {
+                       var threads = new Thread [4];
+                       for (int i = 0; i < threads.Length; ++i) {
                                threads [i] = new Thread (delegate () {
                                                lock (monitor) {
-                                                       Monitor.Wait (monitor);
+                                                       if (!started) {
+                                                               if (!Monitor.Wait (monitor, 2000))
+                                                                       failed = true;
+                                                       }
                                                }
                                                int val = l.Value;
                                        });
                        }
-                       for (int i = 0; i < 10; ++i)
+                       for (int i = 0; i < threads.Length; ++i)
                                threads [i].Start ();
-                       lock (monitor)
+                       lock (monitor) {
+                               started = true;
                                Monitor.PulseAll (monitor);
-                       
+                       }
+
+                       for (int i = 0; i < threads.Length; ++i)
+                               threads [i].Join ();
+
+                       Assert.IsFalse (failed);
                        Assert.AreEqual (42, l.Value);
                }
                
@@ -315,5 +324,3 @@ namespace MonoTests.System
 
        }
 }
-
-#endif
index f5026e12fd88d5f6b888dd50f594f06a4b233c72..76643d858f9403b33d309fb960ee61314fb64fd7 100644 (file)
@@ -3763,7 +3763,7 @@ public class StringTest
                Assert.AreEqual ("original", "\u0085original\u1680".Trim (), "net_2_0 additional char#2");
 
 #if NET_4_0
-               Assert.AreEqual ("", "\x9\xa\xb\xc\xd\x20\x85\xa0\x1680\x180e\x2000\x2001\x2002\x2003\x2004\x2005\x2006\x2007\x2008\x2009\x200a\x2028\x2029\x202f\x205f\x3000".Trim (), "net_4_0 changes #1");
+               Assert.AreEqual ("", "\x9\xa\xb\xc\xd\x20\x85\xa0\x1680\x2000\x2001\x2002\x2003\x2004\x2005\x2006\x2007\x2008\x2009\x200a\x2028\x2029\x202f\x205f\x3000".Trim (), "net_4_0 changes #1");
 #endif
        }
 
@@ -3938,7 +3938,7 @@ public class StringTest
                Assert.AreEqual (0, chunks.Length, "Zero split");
 
 #if NET_4_0
-               Assert.AreEqual (0, "\x9\xa\xb\xc\xd\x20\x85\xa0\x1680\x180e\x2000\x2001\x2002\x2003\x2004\x2005\x2006\x2007\x2008\x2009\x200a\x2028\x2029\x202f\x205f\x3000".Split ((char[]) null, StringSplitOptions.RemoveEmptyEntries).Length, "net_4_0 changes");
+               Assert.AreEqual (0, "\x9\xa\xb\xc\xd\x20\x85\xa0\x1680\x2000\x2001\x2002\x2003\x2004\x2005\x2006\x2007\x2008\x2009\x200a\x2028\x2029\x202f\x205f\x3000".Split ((char[]) null, StringSplitOptions.RemoveEmptyEntries).Length, "net_4_0 changes");
 #endif
        }
 
index 8b5705081d164c12e84fffed2d2d243ef6815045..bab1c5f36e988207cebe4eaf9702dd28f9155ceb 100644 (file)
@@ -30,6 +30,7 @@ public class TimeSpanTest {
                Console.Out.WriteLine ("Ticks {0}", ts.Ticks);
        }
 
+       [Test]
        public void TestCtors ()
        {
                TimeSpan t1 = new TimeSpan (1234567890);
@@ -45,7 +46,7 @@ public class TimeSpanTest {
                Assert.AreEqual ("-22:02:56.0050000", t1.ToString (), "A5");
                t1 = new TimeSpan (0,25,0,0,0);
                Assert.AreEqual ("1.01:00:00", t1.ToString (), "A6");
-        }
+    }
 
        [Test]
        [ExpectedException (typeof (ArgumentOutOfRangeException))]
@@ -57,7 +58,6 @@ public class TimeSpanTest {
 
        [Test]
        [ExpectedException (typeof (ArgumentOutOfRangeException))]
-       [Category ("NotWorking")]
        public void TemporaryOverflow () 
        {
                // calculating part of this results in overflow (days)
@@ -74,7 +74,6 @@ public class TimeSpanTest {
 
        [Test]
        [ExpectedException (typeof (ArgumentOutOfRangeException))]
-       [Category ("NotWorking")]
        public void NoOverflowInHoursMinsSecondsMS () 
        {
                TimeSpan ts = new TimeSpan (0, Int32.MaxValue, Int32.MaxValue, Int32.MaxValue, Int32.MaxValue);
@@ -100,27 +99,8 @@ public class TimeSpanTest {
                new TimeSpan (Int32.MinValue, 0, 0, 0, 0);
        }
 
-       [Test]
-       [Ignore ("too long")]
-       public void MaxHours_TooLong () 
-       {
-               // LAMESPEC: the highest hours are "special"
-               for (int i=0; i < 596523; i++) {
-                       TimeSpan ts = new TimeSpan (0, Int32.MaxValue - i, 0, 0, 0);
-                       int h = i + 1;
-                       string prefix = i.ToString () + '-';
-                       Assert.AreEqual (-(h / 24), ts.Days, prefix + "Days");
-                       Assert.AreEqual (-(h % 24), ts.Hours, prefix + "Hours");
-                       Assert.AreEqual (0, ts.Minutes, prefix + "Minutes");
-                       Assert.AreEqual (0, ts.Seconds, prefix + "Seconds");
-                       Assert.AreEqual (0, ts.Milliseconds, prefix + "Milliseconds");
-                       Assert.AreEqual (-36000000000 * h, ts.Ticks, prefix + "Ticks");
-               }
-       }
-
        [Test]
        [ExpectedException (typeof (ArgumentOutOfRangeException))]
-       [Category ("NotWorking")]
        public void MaxHours () 
        {
                // LAMESPEC: the highest hours are "special"
@@ -143,7 +123,6 @@ public class TimeSpanTest {
 
        [Test]
        [ExpectedException (typeof (ArgumentOutOfRangeException))]
-       [Category ("NotWorking")]
        public void MaxHours_BreakPoint () 
        {
                TimeSpan ts = new TimeSpan (0, Int32.MaxValue - 596523, 0, 0, 0);
@@ -156,25 +135,6 @@ public class TimeSpanTest {
        }
 
        [Test]
-       [Ignore ("too long")]
-       public void MinHours_TooLong () 
-       {
-               // LAMESPEC: the lowest hours are "special"
-               for (int i=Int32.MinValue; i < -2146887124; i++) {
-                       TimeSpan ts = new TimeSpan (0, i, 0, 0, 0);
-                       int h = i + Int32.MaxValue + 1;
-                       string prefix = i.ToString () + '-';
-                       Assert.AreEqual ((h / 24), ts.Days, prefix + "Days");
-                       Assert.AreEqual ((h % 24), ts.Hours, prefix + "Hours");
-                       Assert.AreEqual (0, ts.Minutes, prefix + "Minutes");
-                       Assert.AreEqual (0, ts.Seconds, prefix + "Seconds");
-                       Assert.AreEqual (0, ts.Milliseconds, prefix + "Milliseconds");
-                       Assert.AreEqual (36000000000 * h, ts.Ticks, prefix + "Ticks");
-               }
-       }
-
-       [Test]
-       [Category ("NotWorking")]
        public void MinHours () 
        {
                TimeSpan ts = new TimeSpan (0, -256204778, 0, 0, 0);
@@ -188,7 +148,6 @@ public class TimeSpanTest {
 
        [Test]
        [ExpectedException (typeof (ArgumentOutOfRangeException))]
-       [Category ("NotWorking")]
        public void MinHours_BreakPoint () 
        {
                TimeSpan ts = new TimeSpan (0, -2146887124, 0, 0, 0);
@@ -201,25 +160,6 @@ public class TimeSpanTest {
        }
 
        [Test]
-       [Ignore ("too long")]
-       public void MaxMinutes_TooLong () 
-       {
-               // LAMESPEC: the highest minutes are "special"
-               for (int i=0; i < 35791394; i++) {
-                       TimeSpan ts = new TimeSpan (0, 0, Int32.MaxValue - i, 0, 0);
-                       long h = -(i + 1);
-                       string prefix = i.ToString () + '-';
-                       Assert.AreEqual ((h / 1440), ts.Days, prefix + "Days");
-                       Assert.AreEqual (((h / 60) % 24), ts.Hours, prefix + "Hours");
-                       Assert.AreEqual ((h % 60), ts.Minutes, prefix + "Minutes");
-                       Assert.AreEqual (0, ts.Seconds, prefix + "Seconds");
-                       Assert.AreEqual (0, ts.Milliseconds, prefix + "Milliseconds");
-                       Assert.AreEqual ((600000000L * h), ts.Ticks, prefix + "Ticks");
-               }
-       }
-
-       [Test]
-       [Category ("NotWorking")]
        public void MaxMinutes () 
        {
                TimeSpan ts;
@@ -234,7 +174,6 @@ public class TimeSpanTest {
 
        [Test]
        [ExpectedException (typeof (ArgumentOutOfRangeException))]
-       [Category ("NotWorking")]
        public void MaxMinutes_BreakPoint () 
        {
                TimeSpan ts = new TimeSpan (0, Int32.MaxValue - 35791394, 0, 0, 0);
@@ -247,25 +186,6 @@ public class TimeSpanTest {
        }
 
        [Test]
-       [Ignore ("too long")]
-       public void MinMinutes_TooLong () 
-       {
-               // LAMESPEC: the highest minutes are "special"
-               for (int i=Int32.MinValue; i < -2111692253; i++) {
-                       TimeSpan ts = new TimeSpan (0, 0, i, 0, 0);
-                       long h = i + Int32.MaxValue + 1;
-                       string prefix = i.ToString () + '-';
-                       Assert.AreEqual ((h / 1440), ts.Days, prefix + "Days");
-                       Assert.AreEqual (((h / 60) % 24), ts.Hours, prefix + "Hours");
-                       Assert.AreEqual ((h % 60), ts.Minutes, prefix + "Minutes");
-                       Assert.AreEqual (0, ts.Seconds, prefix + "Seconds");
-                       Assert.AreEqual (0, ts.Milliseconds, prefix + "Milliseconds");
-                       Assert.AreEqual ((600000000L * h), ts.Ticks, prefix + "Ticks");
-               }
-       }
-
-       [Test]
-       [Category ("NotWorking")]
        public void MinMinutes () 
        {
                TimeSpan ts;
@@ -279,7 +199,6 @@ public class TimeSpanTest {
        }
 
        [Test]
-       [Category ("NotWorking")]
        public void MinMinutes_BreakPoint () 
        {
                TimeSpan ts = new TimeSpan (0, 0, -2111692253, 0, 0);
@@ -351,6 +270,7 @@ public class TimeSpanTest {
                Assert.AreEqual (-863990000000, ts.Ticks, "Ticks");
        }
 
+       [Test]
        public void TestProperties ()
        {
                TimeSpan t1 = new TimeSpan (1,2,3,4,5);
@@ -368,6 +288,7 @@ public class TimeSpanTest {
                Assert.AreEqual (-5, t2.Milliseconds, "A10");
        }
 
+       [Test]
        public void TestAdd ()
        {
                TimeSpan t1 = new TimeSpan (2,3,4,5,6);
@@ -395,6 +316,7 @@ public class TimeSpanTest {
                Assert.IsTrue (exception, "A7");
        }
 
+       [Test]
        public void TestCompare ()
        {
                TimeSpan t1 = new TimeSpan (-1);
@@ -438,6 +360,7 @@ public class TimeSpanTest {
                TimeSpan t1 = TimeSpan.MinValue.Negate ();
        }
 
+       [Test]
        public void TestNegateAndDuration ()
        {
                TimeSpan t1;
@@ -460,6 +383,7 @@ public class TimeSpanTest {
                Assert.AreEqual ("00:00:00.0000077", (+(new TimeSpan(77))).ToString(), "A6");
        }
 
+       [Test]
        public void TestEquals ()
        {
                TimeSpan t1 = new TimeSpan (1);
@@ -679,6 +603,7 @@ public class TimeSpanTest {
                Assert.AreEqual (TimeSpan.MinValue, TimeSpan.FromSeconds (Double.NegativeInfinity));
        }
 
+       [Test]
        public void TestGetHashCode ()
        {
                Assert.AreEqual (77, new TimeSpan (77).GetHashCode (), "A1");
@@ -768,6 +693,7 @@ public class TimeSpanTest {
                Assert.AreEqual (1, ts.Days, "Days");
        }
 
+       [Test]
        public void TestSubstract ()
        {
                TimeSpan t1 = new TimeSpan (2,3,4,5,6);
@@ -789,6 +715,7 @@ public class TimeSpanTest {
                Assert.IsTrue (exception, "A3");
        }
 
+       [Test]
        public void TestToString () 
        {
                TimeSpan t1 = new TimeSpan (1,2,3,4,5);
diff --git a/mcs/class/corlib/Test/System/TimeZoneInfo.AdjustmentRuleTest.cs b/mcs/class/corlib/Test/System/TimeZoneInfo.AdjustmentRuleTest.cs
new file mode 100644 (file)
index 0000000..940b129
--- /dev/null
@@ -0,0 +1,116 @@
+using System;
+using System.IO;
+using System.Runtime.Serialization.Formatters.Binary;
+using NUnit.Framework;
+
+namespace MonoTests.System
+{
+       public class TimeZoneInfo_AdjustmentRuleTest
+       {       
+               [TestFixture]
+               public class CreateAdjustmentRuleException
+               {
+                       [Test]
+                       [ExpectedException (typeof (ArgumentException))]
+                       public void DateTimeKindNotUnspecified ()
+                       {
+                               DateTime dateStart = new DateTime (2007,01,01, 0,0,0,DateTimeKind.Utc);
+                               DateTime dateEnd = new DateTime (2008,01,01);
+                               TimeZoneInfo.TransitionTime daylightTransitionStart = TimeZoneInfo.TransitionTime.CreateFixedDateRule (new DateTime (1,1,1,2,0,0), 03, 11);
+                               TimeZoneInfo.TransitionTime daylightTransitionEnd = TimeZoneInfo.TransitionTime.CreateFixedDateRule (new DateTime (1,1,1,2,0,0), 10, 11);
+                               TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule (dateStart, dateEnd, new TimeSpan (1,0,0), daylightTransitionStart, daylightTransitionEnd);
+                       }
+               
+                       [Test]
+                       [ExpectedException (typeof (ArgumentException))]
+                       public void TransitionEndEqualStart ()
+                       {
+                               DateTime dateStart = new DateTime (2007,01,01);
+                               DateTime dateEnd = new DateTime (2008,01,01);
+                               TimeZoneInfo.TransitionTime daylightTransition = TimeZoneInfo.TransitionTime.CreateFixedDateRule (new DateTime (1,1,1,2,0,0), 03, 11);
+                               TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule (dateStart, dateEnd, new TimeSpan (1,0,0), daylightTransition, daylightTransition);
+                       }
+               
+                       [Test]
+                       [ExpectedException (typeof (ArgumentException))]
+                       public void DateIncludesTimeOfDay ()
+                       {
+                               DateTime dateStart = new DateTime (2007,01,01, 0,1,0);
+                               DateTime dateEnd = new DateTime (2008,01,01);
+                               TimeZoneInfo.TransitionTime daylightTransitionStart = TimeZoneInfo.TransitionTime.CreateFixedDateRule (new DateTime (1,1,1,2,0,0), 03, 11);
+                               TimeZoneInfo.TransitionTime daylightTransitionEnd = TimeZoneInfo.TransitionTime.CreateFixedDateRule (new DateTime (1,1,1,2,0,0), 10, 11);
+                               TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule (dateStart, dateEnd, new TimeSpan (1,0,0), daylightTransitionStart, daylightTransitionEnd);
+                       }
+               
+                       [Test]
+                       public void DatesMaxMinValid ()
+                       {
+                               try {
+                                       TimeZoneInfo.TransitionTime daylightTransitionStart = TimeZoneInfo.TransitionTime.CreateFixedDateRule (new DateTime (1,1,1,2,0,0), 03, 11);
+                                       TimeZoneInfo.TransitionTime daylightTransitionEnd = TimeZoneInfo.TransitionTime.CreateFixedDateRule (new DateTime (1,1,1,2,0,0), 10, 11);
+                                       TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule (DateTime.MinValue.Date, DateTime.MaxValue.Date, new TimeSpan (1,0,0), daylightTransitionStart, daylightTransitionEnd);
+                               } catch {
+                                       Assert.Fail ("DateTime.MinValue and MaxValue are not valid...");
+                               }
+                       }
+               
+                       [Test]
+                       [ExpectedException (typeof (ArgumentOutOfRangeException))]
+                       public void EndBeforeStart ()
+                       {
+                               if (Environment.OSVersion.Platform != PlatformID.Unix)
+                                       throw new ArgumentOutOfRangeException ();;
+                               DateTime dateStart = new DateTime (2007,01,01);
+                               DateTime dateEnd = new DateTime (2006,01,01);
+                               TimeZoneInfo.TransitionTime daylightTransitionStart = TimeZoneInfo.TransitionTime.CreateFixedDateRule (new DateTime (1,1,1,2,0,0), 03, 11);
+                               TimeZoneInfo.TransitionTime daylightTransitionEnd = TimeZoneInfo.TransitionTime.CreateFixedDateRule (new DateTime (1,1,1,2,0,0), 10, 11);
+                               TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule (dateStart, dateEnd, new TimeSpan (1,0,0), daylightTransitionStart, daylightTransitionEnd);
+                       }
+               
+                       [Test]
+                       [ExpectedException (typeof (ArgumentOutOfRangeException))]
+                       public void DeltaOutOfRange ()
+                       {
+                               DateTime dateStart = new DateTime (2007,01,01);
+                               DateTime dateEnd = new DateTime (2008,01,01);
+                               TimeZoneInfo.TransitionTime daylightTransitionStart = TimeZoneInfo.TransitionTime.CreateFixedDateRule (new DateTime (1,1,1,2,0,0), 03, 11);
+                               TimeZoneInfo.TransitionTime daylightTransitionEnd = TimeZoneInfo.TransitionTime.CreateFixedDateRule (new DateTime (1,1,1,2,0,0), 10, 11);
+                               TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule (dateStart, dateEnd, new TimeSpan (14,1,0), daylightTransitionStart, daylightTransitionEnd);
+                       }
+               
+                       [Test]
+                       [ExpectedException (typeof (ArgumentOutOfRangeException))]
+                       public void DeltaNotInSeconds ()
+                       {
+                               if (Environment.OSVersion.Platform != PlatformID.Unix)
+                                       throw new ArgumentOutOfRangeException ();;
+                               DateTime dateStart = new DateTime (2007,01,01);
+                               DateTime dateEnd = new DateTime (2008,01,01);
+                               TimeZoneInfo.TransitionTime daylightTransitionStart = TimeZoneInfo.TransitionTime.CreateFixedDateRule (new DateTime (1,1,1,2,0,0), 03, 11);
+                               TimeZoneInfo.TransitionTime daylightTransitionEnd = TimeZoneInfo.TransitionTime.CreateFixedDateRule (new DateTime (1,1,1,2,0,0), 10, 11);
+                               TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule (dateStart, dateEnd, new TimeSpan (55), daylightTransitionStart, daylightTransitionEnd);
+                       }
+               }
+       
+               [TestFixture]
+               public class NonExceptional
+               {
+                       [Test]
+                       public void Serialization_Deserialization ()
+                       {
+                               TimeZoneInfo.TransitionTime start = TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1,1,1,1,0,0), 3, 5, DayOfWeek.Sunday);
+                               TimeZoneInfo.TransitionTime end = TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1,1,1,2,0,0), 10, 5, DayOfWeek.Sunday);
+                               TimeZoneInfo.AdjustmentRule rule = TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule (DateTime.MinValue.Date, DateTime.MaxValue.Date, new TimeSpan (1,0,0), start, end);
+                               MemoryStream stream = new MemoryStream ();
+                               BinaryFormatter formatter = new BinaryFormatter ();
+                               formatter.Serialize (stream, rule);
+                               stream.Position = 0;
+                               TimeZoneInfo.AdjustmentRule deserialized = (TimeZoneInfo.AdjustmentRule) formatter.Deserialize (stream);
+                               stream.Close ();
+                               stream.Dispose ();
+
+                               Assert.IsTrue (rule.Equals (deserialized));
+                       }
+               }
+       }       
+}
diff --git a/mcs/class/corlib/Test/System/TimeZoneInfo.SerializationTest.cs b/mcs/class/corlib/Test/System/TimeZoneInfo.SerializationTest.cs
new file mode 100644 (file)
index 0000000..f4d0cfa
--- /dev/null
@@ -0,0 +1,97 @@
+using System;
+using System.IO;
+using NUnit.Framework;
+
+namespace MonoTests.System
+{
+       [TestFixture]
+       public class SerializedStringTests
+       {
+               [Test]
+               public void SerializeUtc ()
+               {
+                       Assert.AreEqual ("UTC;0;UTC;UTC;UTC;;", TimeZoneInfo.Utc.ToSerializedString ());
+               }
+
+               [Test]
+               public void DeserializeUtc ()
+               {
+                       var utc = TimeZoneInfo.FromSerializedString ("UTC;0;UTC;UTC;UTC;;");
+                       Assert.AreEqual ("UTC", utc.Id);
+                       Assert.AreEqual ("UTC", utc.DisplayName);
+                       Assert.AreEqual ("UTC", utc.StandardName);
+                       Assert.IsFalse (utc.SupportsDaylightSavingTime);
+                       Assert.AreEqual (0, utc.GetAdjustmentRules ().Length);
+               }
+
+               [Test]
+               public void SerializeCustomUtcZoneWithOddNaming ()
+               {
+                       var tz1 = TimeZoneInfo.CreateCustomTimeZone (@"My\; Zone, @1!.", TimeSpan.FromMinutes (0), @"My\\; Zone 1 Name", "My; Zone 1 Standard Time");
+                       Assert.AreEqual (@"My\\\; Zone, @1!.;0;My\\\\\; Zone 1 Name;My\; Zone 1 Standard Time;My\; Zone 1 Standard Time;;", tz1.ToSerializedString ());
+               }
+
+               [Test]
+               public void SerializeCustomZoneWithOddOffset ()
+               {
+                       var tz2 = TimeZoneInfo.CreateCustomTimeZone ("My Zone 2", TimeSpan.FromHours (1.25), "My Zone 2 Name", "My Zone 2 Standard Time");
+                       Assert.AreEqual ("My Zone 2;75;My Zone 2 Name;My Zone 2 Standard Time;My Zone 2 Standard Time;;", tz2.ToSerializedString ());
+               }
+
+               [Test]
+               public void SerializeCustomZoneWithFloatingDaylightTransitions ()
+               {
+                       var tz3rules = new TimeZoneInfo.AdjustmentRule[] { TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule (new DateTime (1, 1, 1), new DateTime (9999, 12, 31), TimeSpan.FromMinutes (23), TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1, 1, 1, 2, 15, 58, 0), 3, 2, DayOfWeek.Tuesday), TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1, 1, 1, 2, 15, 59, 999), 6, 2, DayOfWeek.Tuesday)) };
+                       var tz3 = TimeZoneInfo.CreateCustomTimeZone ("My Zone 3", TimeSpan.FromHours (-4), "My Zone 3 Name", "My Zone 3 Standard Time", "My Zone 3 Daylight Time", tz3rules);
+                       Assert.AreEqual ("My Zone 3;-240;My Zone 3 Name;My Zone 3 Standard Time;My Zone 3 Daylight Time;[01:01:0001;12:31:9999;23;[0;02:15:58;3;2;2;];[0;02:15:59.999;6;2;2;];];", tz3.ToSerializedString ());
+               }
+
+               [Test]
+               public void SerializeCustomZoneWithFixedDaylightTransitions ()
+               {
+                       var tz4rules = new TimeZoneInfo.AdjustmentRule[] { TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule (new DateTime (1, 1, 1), new DateTime (9999, 12, 31), TimeSpan.FromMinutes (23), TimeZoneInfo.TransitionTime.CreateFixedDateRule (new DateTime (1, 1, 1, 2, 15, 59, 48), 3, 2), TimeZoneInfo.TransitionTime.CreateFixedDateRule (new DateTime (1, 1, 1, 2, 15, 59, 999), 6, 2)) };
+                       var tz4 = TimeZoneInfo.CreateCustomTimeZone ("My Zone 4", TimeSpan.FromHours (-4), "My Zone 4 Name", "My Zone 4 Standard Time", "My Zone 4 Daylight Time", tz4rules);
+                       Assert.AreEqual ("My Zone 4;-240;My Zone 4 Name;My Zone 4 Standard Time;My Zone 4 Daylight Time;[01:01:0001;12:31:9999;23;[1;02:15:59.048;3;2;];[1;02:15:59.999;6;2;];];", tz4.ToSerializedString ());
+               }
+
+               [Test]
+               public void SerializeCustomZoneWithMultipleDaylightRules ()
+               {
+                       var tz5rules = new TimeZoneInfo.AdjustmentRule[] {
+                               TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule (new DateTime (1, 1, 1), new DateTime (2012, 12, 31), TimeSpan.FromMinutes (23), TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1, 1, 1, 2, 15, 59, 999), 3, 2, DayOfWeek.Tuesday), TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1, 1, 1, 2, 15, 59, 999), 6, 2, DayOfWeek.Tuesday)),
+                               TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule (new DateTime (2013, 1, 1), new DateTime (9999, 12, 31), TimeSpan.FromMinutes (48), TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1, 1, 1, 2, 15, 59, 999), 3, 2, DayOfWeek.Tuesday), TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1, 1, 1, 2, 15, 59, 999), 6, 2, DayOfWeek.Tuesday))
+                       };
+                       var tz5 = TimeZoneInfo.CreateCustomTimeZone ("My Zone 5", TimeSpan.FromHours (-6.75), "My Zone 5 Name", "My Zone 5 Standard Time", "My Zone 5 Daylight Time", tz5rules);
+                       Assert.AreEqual ("My Zone 5;-405;My Zone 5 Name;My Zone 5 Standard Time;My Zone 5 Daylight Time;[01:01:0001;12:31:2012;23;[0;02:15:59.999;3;2;2;];[0;02:15:59.999;6;2;2;];][01:01:2013;12:31:9999;48;[0;02:15:59.999;3;2;2;];[0;02:15:59.999;6;2;2;];];", tz5.ToSerializedString ());
+               }
+
+               [Test]
+               public void DeserializeCustomZoneWithOddNamingAndMultipleDaylightRules ()
+               {
+                       var rule1 = TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule (new DateTime (1, 1, 1), new DateTime (2012, 12, 31), TimeSpan.FromMinutes (23), TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1, 1, 1, 2, 15, 59, 999), 3, 2, DayOfWeek.Tuesday), TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1, 1, 1, 2, 15, 59, 999), 6, 2, DayOfWeek.Tuesday));
+                       var rule2 = TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule (new DateTime (2013, 1, 1), new DateTime (9999, 12, 31), TimeSpan.FromMinutes (48), TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1, 1, 1, 2, 15, 59, 999), 3, 2, DayOfWeek.Tuesday), TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1, 1, 1, 2, 15, 59, 999), 6, 2, DayOfWeek.Tuesday));
+
+                       var tz1 = TimeZoneInfo.FromSerializedString ("My\\; Zone 5;-405;My Zone\\; 5 Name;My Zone 5\\; Standard Time;My Zone 5 Daylight\\; Time;[01:01:0001;12:31:2012;23;[0;02:15:59.999;3;2;2;];[0;02:15:59.999;6;2;2;];][01:01:2013;12:31:9999;48;[0;02:15:59.999;3;2;2;];[0;02:15:59.999;6;2;2;];];");
+                       Assert.AreEqual ("My; Zone 5", tz1.Id);
+                       Assert.AreEqual ("My Zone; 5 Name", tz1.DisplayName);
+                       Assert.AreEqual ("My Zone 5; Standard Time", tz1.StandardName);
+                       Assert.AreEqual ("My Zone 5 Daylight; Time", tz1.DaylightName);
+                       Assert.AreEqual (TimeSpan.FromMinutes (-405), tz1.BaseUtcOffset);
+                       Assert.IsTrue (tz1.SupportsDaylightSavingTime);
+
+                       var deserializedRules = tz1.GetAdjustmentRules ();
+                       Assert.AreEqual (2, deserializedRules.Length);
+                       Assert.IsFalse (deserializedRules [0].Equals (deserializedRules [1]));
+                       Assert.IsTrue (rule1.Equals (deserializedRules [0]));
+                       Assert.IsTrue (rule2.Equals (deserializedRules [1]));
+               }
+
+               [Test]
+               public void DeserializeAndUseEasternTimeZone ()
+               {
+                       var et = TimeZoneInfo.FromSerializedString (@"Eastern Standard Time;-300;(UTC-05:00) Eastern Time (US & Canada);Eastern Standard Time;Eastern Daylight Time;[01:01:0001;12:31:2006;60;[0;02:00:00;4;1;0;];[0;02:00:00;10;5;0;];][01:01:2007;12:31:9999;60;[0;02:00:00;3;2;0;];[0;02:00:00;11;1;0;];];");
+                       var testDate = new DateTime (2014, 8, 1, 6, 0, 0, DateTimeKind.Unspecified);
+                       Assert.AreEqual (TimeSpan.FromHours (-4), et.GetUtcOffset (testDate));
+               }
+       }
+}
diff --git a/mcs/class/corlib/Test/System/TimeZoneInfo.TransitionTimeTest.cs b/mcs/class/corlib/Test/System/TimeZoneInfo.TransitionTimeTest.cs
new file mode 100644 (file)
index 0000000..f9a006c
--- /dev/null
@@ -0,0 +1,140 @@
+
+using System;
+using System.IO;
+using System.Runtime.Serialization.Formatters.Binary;
+using NUnit.Framework;
+
+namespace MonoTests.System
+{
+       public class TimeZoneInfo_TransitionTimeTest
+       {       
+               [TestFixture]
+               public class CreateFixedDateRuleExceptions
+               {
+                       [Test]
+                       [ExpectedException (typeof (ArgumentException))]
+                       public void DateHasNonDefaultComponent ()
+                       {
+                               TimeZoneInfo.TransitionTime.CreateFixedDateRule (new DateTime (1, 1, 10, 2, 0, 0), 3, 15);
+                       }
+               
+                       [Test]
+                       [ExpectedException (typeof (ArgumentException))]
+                       public void KindNotUnspecified()
+                       {
+                               TimeZoneInfo.TransitionTime.CreateFixedDateRule (new DateTime (1, 1, 1, 2, 0, 0, DateTimeKind.Utc), 3, 15);
+                       }
+               
+                       [Test]
+                       [ExpectedException (typeof (ArgumentException))]
+                       public void DateNotInMilliSeconds ()
+                       {
+                               TimeZoneInfo.TransitionTime.CreateFixedDateRule (new DateTime (50), 3, 15);
+                       }
+               
+                       [Test]
+                       [ExpectedException (typeof (ArgumentOutOfRangeException))]
+                       public void MonthOutOfRange ()
+                       {
+                               TimeZoneInfo.TransitionTime.CreateFixedDateRule (new DateTime (1, 1, 1, 2, 0, 0), 13, 15);
+                       }
+               
+                       [Test]
+                       [ExpectedException (typeof (ArgumentOutOfRangeException))]
+                       public void DayOutOfRange ()
+                       {
+                               TimeZoneInfo.TransitionTime.CreateFixedDateRule (new DateTime (1, 1, 1, 2, 0, 0), 3, -2);
+                       }
+               }
+               
+               [TestFixture]
+               public class CreateFloatingDateRuleExceptions
+               {
+                       [Test]
+                       [ExpectedException (typeof (ArgumentException))]
+                       public void DateHasNonDefaultComponent ()
+                       {
+                               TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1, 1, 10, 2, 0, 0), 3, 4, DayOfWeek.Sunday);
+                       }
+               
+                       [Test]
+                       [ExpectedException (typeof (ArgumentException))]
+                       public void KindNotUnspecified()
+                       {
+                               TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1, 1, 1, 2, 0, 0, DateTimeKind.Utc), 3, 4, DayOfWeek.Sunday);
+                       }
+               
+                       [Test]
+                       [ExpectedException (typeof (ArgumentException))]
+                       public void DateNotInSeconds ()
+                       {
+                               TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (50), 3, 4, DayOfWeek.Sunday);
+                       }
+               
+                       [Test]
+                       [ExpectedException (typeof (ArgumentOutOfRangeException))]
+                       public void MonthOutOfRange ()
+                       {
+                               TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1, 1, 1, 2, 0, 0), 13, 4, DayOfWeek.Sunday);
+                       }
+               
+                       [Test]
+                       [ExpectedException (typeof (ArgumentOutOfRangeException))]
+                       public void WeekOutOfRange ()
+                       {
+                               TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1, 1, 1, 2, 0, 0), 3, -2, DayOfWeek.Sunday);
+                       }
+               
+                       [Test]
+                       [ExpectedException (typeof (ArgumentOutOfRangeException))]
+                       public void DayOfWeekOutOfRange ()
+                       {
+                               TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1, 1, 1, 2, 0, 0), 3, 4, (DayOfWeek)12);
+                       }
+               }
+
+               [TestFixture]
+               public class NonExceptional {
+
+                       [Test]
+                       public void EqualsObject ()
+                       {
+                               DateTime dt = new DateTime (1, 1, 1, 2, 0, 0, DateTimeKind.Unspecified);
+                               TimeZoneInfo.TransitionTime tt1 = TimeZoneInfo.TransitionTime.CreateFixedDateRule (dt, 1, 21);
+                               Assert.IsFalse (tt1.Equals (null), "null"); // found using Gendarme :)
+                               Assert.IsTrue (tt1.Equals (tt1), "self");
+                               TimeZoneInfo.TransitionTime tt2 = TimeZoneInfo.TransitionTime.CreateFixedDateRule (dt, 2, 12);
+                               Assert.IsFalse (tt2.Equals (tt1), "1!=2");
+                               Assert.IsFalse (tt1.Equals (tt2), "2!=1");
+                       }
+                       
+                       [Test]
+                       public void Serialize_Deserialize_FloatingDateRule ()
+                       {
+                               TimeZoneInfo.TransitionTime floatingDateRule = TimeZoneInfo.TransitionTime.CreateFloatingDateRule(new DateTime(1, 1, 1, 1, 0, 0), 3, 5, DayOfWeek.Sunday);
+                               MemoryStream stream = new MemoryStream ();
+                               BinaryFormatter formatter = new BinaryFormatter ();
+                               formatter.Serialize (stream, floatingDateRule);
+                               stream.Position = 0;
+                               TimeZoneInfo.TransitionTime deserialized = (TimeZoneInfo.TransitionTime) formatter.Deserialize (stream);
+                               stream.Close ();
+                               stream.Dispose ();
+                               Assert.AreEqual (floatingDateRule, deserialized);
+                       }
+
+                       [Test]
+                       public void Serialize_Deserialize_FixedDateRule ()
+                       {
+                               TimeZoneInfo.TransitionTime fixedDateRule = TimeZoneInfo.TransitionTime.CreateFixedDateRule(new DateTime(1, 1, 1, 1, 0, 0), 3, 12);
+                               MemoryStream stream = new MemoryStream ();
+                               BinaryFormatter formatter = new BinaryFormatter ();
+                               formatter.Serialize (stream, fixedDateRule);
+                               stream.Position = 0;
+                               TimeZoneInfo.TransitionTime deserialized = (TimeZoneInfo.TransitionTime) formatter.Deserialize (stream);
+                               stream.Close ();
+                               stream.Dispose ();
+                               Assert.AreEqual (fixedDateRule, deserialized);
+                       }
+               }
+       }
+}
diff --git a/mcs/class/corlib/Test/System/TimeZoneInfoTest.cs b/mcs/class/corlib/Test/System/TimeZoneInfoTest.cs
new file mode 100644 (file)
index 0000000..14c1246
--- /dev/null
@@ -0,0 +1,1004 @@
+/*
+ * TimeZoneInfo.Tests
+ *
+ * Author(s)
+ *     Stephane Delcroix <stephane@delcroix.org>
+ *
+ * Copyright 2011 Xamarin Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ * 
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+using System;
+using System.IO;
+using System.Runtime.Serialization.Formatters.Binary;
+using System.Collections;
+
+using NUnit.Framework;
+namespace MonoTests.System
+{
+       public class TimeZoneInfoTest
+       {
+               [TestFixture]
+               public class PropertiesTests
+               {
+                       [Test]
+                       public void GetLocal ()
+                       {
+                               if (Environment.OSVersion.Platform != PlatformID.Unix)
+                                       Assert.Ignore ("Not running on Unix.");
+                               TimeZoneInfo local = TimeZoneInfo.Local;
+                               Assert.IsNotNull (local);
+                               Assert.IsTrue (true);
+                       }
+               }
+
+               [TestFixture]
+               public class CreateCustomTimezoneTests
+               {
+                       [Test]
+                       [ExpectedException (typeof (ArgumentNullException))]
+                       public void IdIsNullException ()
+                       {
+                               TimeZoneInfo.CreateCustomTimeZone (null, new TimeSpan (0), null, null); 
+                       }
+               
+                       [Test]
+                       [ExpectedException (typeof (ArgumentException))]
+                       public void IdIsEmptyString ()
+                       {
+                               TimeZoneInfo.CreateCustomTimeZone ("", new TimeSpan (0), null, null);   
+                       }
+               
+                       [Test]
+                       [ExpectedException (typeof (ArgumentException))]
+                       public void OffsetIsNotMinutes ()
+                       {
+                               TimeZoneInfo.CreateCustomTimeZone ("mytimezone", new TimeSpan (0, 0, 55), null, null);  
+                       }
+               
+                       [Test]
+                       [ExpectedException (typeof (ArgumentOutOfRangeException))]
+                       public void OffsetTooBig ()
+                       {
+                               TimeZoneInfo.CreateCustomTimeZone ("mytimezone", new TimeSpan (14, 1, 0), null, null);
+                       }
+               
+                       [Test]
+                       [ExpectedException (typeof (ArgumentOutOfRangeException))]
+                       public void OffsetTooSmall ()
+                       {
+                               TimeZoneInfo.CreateCustomTimeZone ("mytimezone", - new TimeSpan (14, 1, 0), null, null);
+                       }
+               
+               #if STRICT
+                       [Test]
+                       [ExpectedException (typeof (ArgumentException))]
+                       public void IdLongerThan32 ()
+                       {
+                               TimeZoneInfo.CreateCustomTimeZone ("12345678901234567890123456789012345", new TimeSpan (0), null, null);        
+                       }       
+               #endif
+               
+                       [Test]
+                       [ExpectedException (typeof (InvalidTimeZoneException))]
+                       public void AdjustmentRulesOverlap ()
+                       {
+                               TimeZoneInfo.TransitionTime s1 = TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1,1,1,4,0,0), 3, 2, DayOfWeek.Sunday);
+                               TimeZoneInfo.TransitionTime e1 = TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1,1,1,4,0,0), 10, 2, DayOfWeek.Sunday);
+                               TimeZoneInfo.AdjustmentRule r1 = TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule (new DateTime (2000,1,1), new DateTime (2005,1,1), new TimeSpan (1,0,0), s1, e1);
+                               TimeZoneInfo.TransitionTime s2 = TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1,1,1,4,0,0), 2, 2, DayOfWeek.Sunday);
+                               TimeZoneInfo.TransitionTime e2 = TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1,1,1,4,0,0), 11, 2, DayOfWeek.Sunday);
+                               TimeZoneInfo.AdjustmentRule r2 = TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule (new DateTime (2004,1,1), new DateTime (2007,1,1), new TimeSpan (1,0,0), s2, e2);
+                               TimeZoneInfo.CreateCustomTimeZone ("mytimezone", new TimeSpan (6,0,0),null,null,null,new TimeZoneInfo.AdjustmentRule[] {r1, r2});
+                       }
+               
+                       [Test]
+                       [ExpectedException (typeof (InvalidTimeZoneException))]
+                       public void RulesNotOrdered ()
+                       {
+                               TimeZoneInfo.TransitionTime s1 = TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1,1,1,4,0,0), 3, 2, DayOfWeek.Sunday);
+                               TimeZoneInfo.TransitionTime e1 = TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1,1,1,4,0,0), 10, 2, DayOfWeek.Sunday);
+                               TimeZoneInfo.AdjustmentRule r1 = TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule (new DateTime (2000,1,1), new DateTime (2005,1,1), new TimeSpan (1,0,0), s1, e1);
+                               TimeZoneInfo.TransitionTime s2 = TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1,1,1,4,0,0), 2, 2, DayOfWeek.Sunday);
+                               TimeZoneInfo.TransitionTime e2 = TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1,1,1,4,0,0), 11, 2, DayOfWeek.Sunday);
+                               TimeZoneInfo.AdjustmentRule r2 = TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule (new DateTime (2006,1,1), new DateTime (2007,1,1), new TimeSpan (1,0,0), s2, e2);
+                               TimeZoneInfo.CreateCustomTimeZone ("mytimezone", new TimeSpan (6,0,0),null,null,null,new TimeZoneInfo.AdjustmentRule[] {r2, r1});
+                       }
+               
+                       [Test]
+                       [ExpectedException (typeof (InvalidTimeZoneException))]
+                       public void OffsetOutOfRange ()
+                       {
+                               TimeZoneInfo.TransitionTime startTransition = TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1,1,1,4,0,0), 3, 2, DayOfWeek.Sunday);
+                               TimeZoneInfo.TransitionTime endTransition = TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1,1,1,4,0,0), 10, 2, DayOfWeek.Sunday);
+                               TimeZoneInfo.AdjustmentRule rule = TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule (new DateTime (2000,1,1), new DateTime (2005,1,1), new TimeSpan (3,0,0), startTransition, endTransition);
+                               TimeZoneInfo.CreateCustomTimeZone ("mytimezone", new TimeSpan (12,0,0),null,null,null,new TimeZoneInfo.AdjustmentRule[] {rule});
+                       }
+               
+                       [Test]
+                       [ExpectedException (typeof (InvalidTimeZoneException))]
+                       public void NullRule ()
+                       {
+                               TimeZoneInfo.CreateCustomTimeZone ("mytimezone", new TimeSpan (12,0,0),null,null,null,new TimeZoneInfo.AdjustmentRule[] {null});
+                       }
+               
+                       [Test]
+                       [ExpectedException (typeof (InvalidTimeZoneException))]
+                       public void MultiplesRulesForDate ()
+                       {
+                               TimeZoneInfo.TransitionTime s1 = TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1,1,1,4,0,0), 3, 2, DayOfWeek.Sunday);
+                               TimeZoneInfo.TransitionTime e1 = TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1,1,1,4,0,0), 10, 2, DayOfWeek.Sunday);
+                               TimeZoneInfo.AdjustmentRule r1 = TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule (new DateTime (2000,1,1), new DateTime (2005,1,1), new TimeSpan (1,0,0), s1, e1);
+                               TimeZoneInfo.TransitionTime s2 = TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1,1,1,4,0,0), 2, 2, DayOfWeek.Sunday);
+                               TimeZoneInfo.TransitionTime e2 = TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1,1,1,4,0,0), 11, 2, DayOfWeek.Sunday);
+                               TimeZoneInfo.AdjustmentRule r2 = TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule (new DateTime (2005,1,1), new DateTime (2007,1,1), new TimeSpan (1,0,0), s2, e2);
+                               TimeZoneInfo.CreateCustomTimeZone ("mytimezone", new TimeSpan (6,0,0),null,null,null,new TimeZoneInfo.AdjustmentRule[] {r1, r2});
+                       }
+
+                       [Test]
+                       public void SupportsDaylightSavingTime_NonEmptyAdjustmentRule ()
+                       {
+                               TimeZoneInfo.TransitionTime s1 = TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1,1,1,4,0,0), 3, 2, DayOfWeek.Sunday);
+                               TimeZoneInfo.TransitionTime e1 = TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1,1,1,4,0,0), 10, 2, DayOfWeek.Sunday);
+                               TimeZoneInfo.AdjustmentRule r1 = TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule (new DateTime (2000,1,1), new DateTime (2005,1,1), new TimeSpan (1,0,0), s1, e1);
+                               TimeZoneInfo tz = TimeZoneInfo.CreateCustomTimeZone ("mytimezone", new TimeSpan (6,0,0),null,null,null,new TimeZoneInfo.AdjustmentRule[] {r1});
+                               Assert.IsTrue (tz.SupportsDaylightSavingTime);
+                       }
+
+                       [Test]
+                       public void SupportsDaylightSavingTime_EmptyAdjustmentRule ()
+                       {
+                               TimeZoneInfo tz = TimeZoneInfo.CreateCustomTimeZone ("mytimezone", new TimeSpan (6,0,0),null,null,null,null);
+                               Assert.IsFalse (tz.SupportsDaylightSavingTime);
+                       }
+
+                       [Test]
+                       public void SupportsDaylightSavingTime_NonEmptyAdjustmentRule_DisableDaylightSavingTime ()
+                       {
+                               TimeZoneInfo.TransitionTime s1 = TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1,1,1,4,0,0), 3, 2, DayOfWeek.Sunday);
+                               TimeZoneInfo.TransitionTime e1 = TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1,1,1,4,0,0), 10, 2, DayOfWeek.Sunday);
+                               TimeZoneInfo.AdjustmentRule r1 = TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule (new DateTime (2000,1,1), new DateTime (2005,1,1), new TimeSpan (1,0,0), s1, e1);
+                               TimeZoneInfo tz = TimeZoneInfo.CreateCustomTimeZone ("mytimezone", new TimeSpan (6,0,0),null,null,null,new TimeZoneInfo.AdjustmentRule[] {r1}, true);
+                               Assert.IsFalse (tz.SupportsDaylightSavingTime);
+                       }
+
+                       [Test]
+                       public void SupportsDaylightSavingTime_EmptyAdjustmentRule_DisableDaylightSavingTime ()
+                       {
+                               TimeZoneInfo tz = TimeZoneInfo.CreateCustomTimeZone ("mytimezone", new TimeSpan (6,0,0),null,null,null,null,true);
+                               Assert.IsFalse (tz.SupportsDaylightSavingTime);
+                       }
+               }
+               
+               [TestFixture]
+               public class IsDaylightSavingTimeTests
+               {
+                       TimeZoneInfo london;
+               
+                       [SetUp]
+                       public void CreateTimeZones ()
+                       {
+                               TimeZoneInfo.TransitionTime start = TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1,1,1,1,0,0), 3, 5, DayOfWeek.Sunday);
+                               TimeZoneInfo.TransitionTime end = TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1,1,1,2,0,0), 10, 5, DayOfWeek.Sunday);
+                               TimeZoneInfo.AdjustmentRule rule = TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule (DateTime.MinValue.Date, DateTime.MaxValue.Date, new TimeSpan (1,0,0), start, end);
+                               london = TimeZoneInfo.CreateCustomTimeZone ("Europe/London", new TimeSpan (0), "Europe/London", "British Standard Time", "British Summer Time", new TimeZoneInfo.AdjustmentRule [] {rule});
+                       }
+               
+                       [Test]
+                       public void NoDSTInUTC ()
+                       {
+                               DateTime june01 = new DateTime (2007, 06, 01);
+                               Assert.IsFalse (TimeZoneInfo.Utc.IsDaylightSavingTime (june01));
+                       }
+               
+                       [Test]
+                       public void DSTInLondon ()
+                       {
+                               if (Environment.OSVersion.Platform != PlatformID.Unix)
+                                       Assert.Ignore ("Not running on Unix.");
+                               DateTime june01 = new DateTime (2007, 06, 01);
+                               DateTime xmas = new DateTime (2007, 12, 25);
+                               Assert.IsTrue (london.IsDaylightSavingTime (june01), "June 01 is DST in London");
+                               Assert.IsFalse (london.IsDaylightSavingTime (xmas), "Xmas is not DST in London");
+                       }
+               
+                       [Test]
+                       public void DSTTransisions ()
+                       {
+                               if (Environment.OSVersion.Platform != PlatformID.Unix)
+                                       Assert.Ignore ("Not running on Unix.");
+                               DateTime beforeDST = new DateTime (2007, 03, 25, 0, 59, 59, DateTimeKind.Unspecified);
+                               DateTime startDST = new DateTime (2007, 03, 25, 2, 0, 0, DateTimeKind.Unspecified);
+                               DateTime endDST = new DateTime (2007, 10, 28, 1, 59, 59, DateTimeKind.Unspecified);
+                               DateTime afterDST = new DateTime (2007, 10, 28, 2, 0, 0, DateTimeKind.Unspecified);
+                               Assert.IsFalse (london.IsDaylightSavingTime (beforeDST), "Just before DST");
+                               Assert.IsTrue (london.IsDaylightSavingTime (startDST), "the first seconds of DST");
+                               Assert.IsFalse (london.IsDaylightSavingTime (endDST), "The last seconds of DST");
+                               Assert.IsFalse (london.IsDaylightSavingTime (afterDST), "Just after DST");
+                       }
+               
+                       [Test]
+                       public void DSTTransisionsUTC ()
+                       {
+                               DateTime beforeDST = new DateTime (2007, 03, 25, 0, 59, 59, DateTimeKind.Utc);
+                               DateTime startDST = new DateTime (2007, 03, 25, 1, 0, 0, DateTimeKind.Utc);
+                               DateTime endDST = new DateTime (2007, 10, 28, 0, 59, 59, DateTimeKind.Utc);
+                               DateTime afterDST = new DateTime (2007, 10, 28, 1, 0, 0, DateTimeKind.Utc);
+                               Assert.IsFalse (london.IsDaylightSavingTime (beforeDST), "Just before DST");
+                               Assert.IsTrue (london.IsDaylightSavingTime (startDST), "the first seconds of DST");
+                               Assert.IsTrue (london.IsDaylightSavingTime (endDST), "The last seconds of DST");
+                               Assert.IsFalse (london.IsDaylightSavingTime (afterDST), "Just after DST");
+                       }
+               
+               #if SLOW_TESTS
+                       [Test]
+                       public void MatchTimeZoneBehavior ()
+                       {
+                               TimeZone tzone = TimeZone.CurrentTimeZone;
+                               TimeZoneInfo local = TimeZoneInfo.Local;
+                               for (DateTime date = new DateTime (2007, 01, 01, 0, 0, 0, DateTimeKind.Local); date < new DateTime (2007, 12, 31, 23, 59, 59); date += new TimeSpan (0,1,0)) {
+                                       date = DateTime.SpecifyKind (date, DateTimeKind.Local);
+                                       if (local.IsInvalidTime (date))
+                                               continue;
+                                       Assert.IsTrue (tzone.IsDaylightSavingTime (date) == local.IsDaylightSavingTime (date));
+                               }
+                       }
+               #endif
+                       [Test (Description="Description xambug #17155")]
+                       public void AdjustmentRuleAfterNewYears ()
+                       {
+                               TimeZoneInfo tz;
+                               if (Environment.OSVersion.Platform == PlatformID.Unix)
+                                       tz = TimeZoneInfo.FindSystemTimeZoneById ("Pacific/Auckland"); // *nix
+                               else
+                                       tz = TimeZoneInfo.FindSystemTimeZoneById ("New Zealand Standard Time"); // Windows
+
+                               // DST start: 9/29/2013 2:00:00 AM
+                               // DST end: 4/6/2014 3:00:00 AM
+                               DateTime dt = new DateTime (2014, 1, 9, 23, 0, 0, DateTimeKind.Utc);
+                               Assert.IsTrue (tz.IsDaylightSavingTime (dt), "#1.1");
+
+                               // DST start: 9/29/2014 2:00:00 AM
+                               // DST end: 4/6/2015 3:00:00 AM
+                               dt = new DateTime (2014, 6, 9, 23, 0, 0, DateTimeKind.Utc);
+                               Assert.IsFalse (tz.IsDaylightSavingTime (dt), "#2.1");
+
+                               // DST start: 9/29/2014 2:00:00 AM
+                               // DST end: 4/6/2015 3:00:00 AM
+                               dt = new DateTime (2014, 10, 9, 23, 0, 0, DateTimeKind.Utc);
+                               Assert.IsTrue (tz.IsDaylightSavingTime (dt), "#3.1");
+                       }
+
+                       [Test] //Covers #26008
+                       public void DSTWithFloatingDateRule ()
+                       {
+                               // Construct a custom time zone where daylight saving time starts on the
+                               // 2nd Sunday in March.
+                               var transitionToDaylight = TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1, 1, 1, 2, 0, 0), 3, 2, DayOfWeek.Sunday);
+                               var transitionToStandard = TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1, 1, 1, 2, 0, 0), 11, 1, DayOfWeek.Sunday);
+                               var adjustment = TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule (DateTime.MinValue.Date, DateTime.MaxValue.Date, new TimeSpan (1, 0, 0), transitionToDaylight, transitionToStandard);
+                               var timeZone = TimeZoneInfo.CreateCustomTimeZone ("BugCheck", new TimeSpan (-8, 0, 0), "Testing", "Testing Standard", "Testing Daylight", new TimeZoneInfo.AdjustmentRule [] { adjustment });
+                               // See if March 7, 2014 is listed as being during daylight saving time.
+                               // If it is DST, then the runtime has the bug that we are looking for.
+                               Assert.IsFalse (timeZone.IsDaylightSavingTime (new DateTime (2014, 3, 7, 12, 0, 0, DateTimeKind.Unspecified)));
+                       }
+
+                       [Test] //Covers #25050
+                       public void TestAthensDST ()
+                       {
+                               TimeZoneInfo tzi = TimeZoneInfo.FindSystemTimeZoneById ("Europe/Athens");
+                               var date = new DateTime (2014, 3, 30 , 2, 0, 0);
+                               Assert.IsFalse (tzi.IsDaylightSavingTime (date));
+                               Assert.AreEqual (new TimeSpan (2,0,0), tzi.GetUtcOffset (date));
+                       }
+               }
+               
+               [TestFixture]
+               public class ConvertTimeTests
+               {
+                       TimeZoneInfo london;
+               
+                       [SetUp]
+                       public void CreateTimeZones ()
+                       {
+                               TimeZoneInfo.TransitionTime start = TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1,1,1,1,0,0), 3, 5, DayOfWeek.Sunday);
+                               TimeZoneInfo.TransitionTime end = TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1,1,1,2,0,0), 10, 5, DayOfWeek.Sunday);
+                               TimeZoneInfo.AdjustmentRule rule = TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule (DateTime.MinValue.Date, DateTime.MaxValue.Date, new TimeSpan (1,0,0), start, end);
+                               london = TimeZoneInfo.CreateCustomTimeZone ("Europe/London", new TimeSpan (0), "Europe/London", "British Standard Time", "British Summer Time", new TimeZoneInfo.AdjustmentRule [] {rule});
+                       }
+               
+                       [Test]
+                       [ExpectedException (typeof (ArgumentException))]
+                       public void ConvertFromUtc_KindIsLocalException ()
+                       {
+                               if (Environment.OSVersion.Platform != PlatformID.Unix)
+                                       throw new ArgumentException ();
+                               TimeZoneInfo.ConvertTimeFromUtc (new DateTime (2007, 5, 3, 11, 8, 0, DateTimeKind.Local), TimeZoneInfo.Local);  
+                       }
+               
+                       [Test]
+                       [ExpectedException (typeof (ArgumentNullException))]
+                       public void ConvertFromUtc_DestinationTimeZoneIsNullException ()
+                       {
+                               TimeZoneInfo.ConvertTimeFromUtc (new DateTime (2007, 5, 3, 11, 8, 0), null);            
+                       }
+               
+                       [Test]
+                       public void ConvertFromUtc_DestinationIsUTC ()
+                       {
+                               DateTime now = DateTime.UtcNow;
+                               DateTime converted = TimeZoneInfo.ConvertTimeFromUtc (now, TimeZoneInfo.Utc);
+                               Assert.AreEqual (now, converted);
+                       }
+                       
+                       [Test]
+                       public void ConvertFromUTC_ConvertInWinter ()
+                       {
+                               if (Environment.OSVersion.Platform != PlatformID.Unix)
+                                       Assert.Ignore ("Not running on Unix.");
+                               DateTime utc = new DateTime (2007, 12, 25, 12, 0, 0);
+                               DateTime converted = TimeZoneInfo.ConvertTimeFromUtc (utc, london);
+                               Assert.AreEqual (utc, converted);
+                       }
+               
+                       [Test]
+                       public void ConvertFromUtc_ConvertInSummer ()
+                       {
+                               if (Environment.OSVersion.Platform != PlatformID.Unix)
+                                       Assert.Ignore ("Not running on Unix.");
+                               DateTime utc = new DateTime (2007, 06, 01, 12, 0, 0);
+                               DateTime converted = TimeZoneInfo.ConvertTimeFromUtc (utc, london);
+                               Assert.AreEqual (utc + new TimeSpan (1,0,0), converted);
+                       }
+               
+                       [Test]
+                       public void ConvertToUTC_KindIsUtc ()
+                       {
+                               DateTime now = DateTime.UtcNow;
+                               Assert.AreEqual (now.Kind, DateTimeKind.Utc);
+                               DateTime converted = TimeZoneInfo.ConvertTimeToUtc (now);
+                               Assert.AreEqual (now, converted);
+                       }
+               
+                       [Test]
+                       [ExpectedException (typeof (ArgumentException))]
+                       public void ConvertToUTC_KindIsUTCButSourceIsNot ()
+                       {
+                               TimeZoneInfo.ConvertTimeToUtc (new DateTime (2007, 5, 3, 12, 8, 0, DateTimeKind.Utc), london);
+                       }
+               
+                       [Test]
+                       [ExpectedException (typeof (ArgumentException))]
+                       public void ConvertToUTC_KindIsLocalButSourceIsNot ()
+                       {
+                               if (Environment.OSVersion.Platform != PlatformID.Unix)
+                                       throw new ArgumentException ();
+                               TimeZoneInfo.ConvertTimeToUtc (new DateTime (2007, 5, 3, 12, 8, 0, DateTimeKind.Local), london);        
+                       }
+               
+                       [Test]
+                       [ExpectedException (typeof (ArgumentException))]
+                       public void ConvertToUTC_InvalidDate ()
+                       {
+                               TimeZoneInfo.ConvertTimeToUtc (new DateTime (2007, 3, 25, 1, 30, 0), london);
+                       }
+               
+                       [Test]
+                       [ExpectedException (typeof (ArgumentNullException))]
+                       public void ConvertToUTC_SourceIsNull ()
+                       {
+                               TimeZoneInfo.ConvertTimeToUtc (new DateTime (2007, 5, 3, 12, 16, 0), null);
+                       }
+               
+               #if SLOW_TESTS
+                       [Test]
+                       public void ConvertToUtc_MatchDateTimeBehavior ()
+                       {
+                               for (DateTime date = new DateTime (2007, 01, 01, 0, 0, 0); date < new DateTime (2007, 12, 31, 23, 59, 59); date += new TimeSpan (0,1,0)) {
+                                       Assert.AreEqual (TimeZoneInfo.ConvertTimeToUtc (date), date.ToUniversalTime ());
+                               }
+                       }
+               #endif
+               
+                       [Test]
+                       public void ConvertFromToUtc ()
+                       {
+                               if (Environment.OSVersion.Platform != PlatformID.Unix)
+                                       Assert.Ignore ("Not running on Unix.");
+                               DateTime utc = DateTime.UtcNow;
+                               Assert.AreEqual (utc.Kind, DateTimeKind.Utc);
+                               DateTime converted = TimeZoneInfo.ConvertTimeFromUtc (utc, london);
+                               Assert.AreEqual (converted.Kind, DateTimeKind.Unspecified);
+                               DateTime back = TimeZoneInfo.ConvertTimeToUtc (converted, london);
+                               Assert.AreEqual (back.Kind, DateTimeKind.Utc);
+                               Assert.AreEqual (utc, back);
+               
+                       }
+
+                       [Test]
+                       public void ConvertTimeToUtc_Overflow ()
+                       {
+                               var res = TimeZoneInfo.ConvertTimeToUtc (new DateTime (0));
+                               Assert.AreEqual (res.Kind, DateTimeKind.Utc, "#1");
+
+                               res = TimeZoneInfo.ConvertTimeToUtc (DateTime.MaxValue);
+                               Assert.AreEqual (res.Kind, DateTimeKind.Utc, "#2");
+                       }
+
+                       [Test]
+                       public void ConvertFromToLocal ()
+                       {
+                               DateTime utc = DateTime.UtcNow;
+                               Assert.AreEqual(utc.Kind, DateTimeKind.Utc);
+                               DateTime converted = TimeZoneInfo.ConvertTimeFromUtc(utc, TimeZoneInfo.Local);
+                       #if NET_4_0
+                               Assert.AreEqual(DateTimeKind.Local, converted.Kind);
+                       #else
+                               Assert.AreEqual(DateTimeKind.Unspecified, converted.Kind);
+                       #endif
+                               DateTime back = TimeZoneInfo.ConvertTimeToUtc(converted, TimeZoneInfo.Local);
+                               Assert.AreEqual(back.Kind, DateTimeKind.Utc);
+                               Assert.AreEqual(utc, back);
+                       }
+
+                       [Test]
+                       public void ConvertToTimeZone ()
+                       {
+                               if (Environment.OSVersion.Platform != PlatformID.Unix)
+                                       Assert.Ignore ("Not running on Unix.");
+
+                               TimeZoneInfo.ConvertTime (DateTime.Now, TimeZoneInfo.FindSystemTimeZoneById("Pacific/Auckland"));
+                       }
+
+                       [Test]
+                       [ExpectedException (typeof (ArgumentNullException))]
+                       public void ConvertTime_DateTime_TimeZoneInfo_DestinationTimeZoneIsNull ()
+                       {
+                               TimeZoneInfo.ConvertTime (DateTime.Now, null);
+                       }
+
+                       [Test]
+                       public void ConvertTime_DateTime_TimeZoneInfo_DateTimeKindMatch ()
+                       {
+                               var sdt = new DateTime (2014, 1, 9, 23, 0, 0, DateTimeKind.Utc);
+                               var ddt = TimeZoneInfo.ConvertTime (sdt, TimeZoneInfo.Utc);
+                               Assert.AreEqual (ddt.Kind, sdt.Kind, "#1.1");
+                               Assert.AreEqual (ddt.Kind, DateTimeKind.Utc, "#1.2");
+                               
+                               sdt = new DateTime (2014, 1, 9, 23, 0, 0, DateTimeKind.Local);
+                               ddt = TimeZoneInfo.ConvertTime (sdt, TimeZoneInfo.Local);
+                               Assert.AreEqual (ddt.Kind, sdt.Kind, "#2.1");
+                               Assert.AreEqual (ddt.Kind, DateTimeKind.Local, "#2.2");
+
+                               sdt = new DateTime (2014, 1, 9, 23, 0, 0);
+                               ddt = TimeZoneInfo.ConvertTime (sdt, TimeZoneInfo.Local);
+                               Assert.AreEqual (ddt.Kind, sdt.Kind, "#3.1");
+                               Assert.AreEqual (ddt.Kind, DateTimeKind.Unspecified, "#3.2");
+                       }
+
+                       [Test]
+                       [ExpectedException (typeof (ArgumentNullException))]
+                       public void ConverTime_DateTime_TimeZoneInfo_TimeZoneInfo_SourceTimeZoneIsNull ()
+                       {
+                               TimeZoneInfo.ConvertTime (DateTime.Now, null, TimeZoneInfo.Local);
+                       }
+
+                       [Test]
+                       [ExpectedException (typeof (ArgumentNullException))]
+                       public void ConverTime_DateTime_TimeZoneInfo_TimeZoneInfo_DestinationTimeZoneIsNull ()
+                       {
+                               TimeZoneInfo.ConvertTime (DateTime.Now, TimeZoneInfo.Utc, null);
+                       }
+
+                       [Test (Description="Fix for xambug https://bugzilla.xamarin.com/show_bug.cgi?id=17155")]
+                       public void ConvertTime_AdjustmentRuleAfterNewYears ()
+                       {
+                               TimeZoneInfo tz;
+                               if (Environment.OSVersion.Platform == PlatformID.Unix)
+                                       tz = TimeZoneInfo.FindSystemTimeZoneById ("Pacific/Auckland"); // *nix
+                               else
+                                       tz = TimeZoneInfo.FindSystemTimeZoneById ("New Zealand Standard Time"); // Windows
+
+                               // DST start: 9/29/2013 2:00:00 AM
+                               // DST end: 4/6/2014 3:00:00 AM
+                               DateTime sdt = new DateTime (2014, 1, 9, 23, 0, 0, DateTimeKind.Utc);
+                               DateTime ddt = TimeZoneInfo.ConvertTime (sdt, tz);
+                               Assert.AreEqual (10, ddt.Day, "#1.1");
+                               Assert.AreEqual (1, ddt.Month, "#1.2");
+                               Assert.AreEqual (2014, ddt.Year, "#1.3");
+                               Assert.AreEqual (12, ddt.Hour, "#1.4");
+                               Assert.AreEqual (0, ddt.Minute, "#1.5");
+                               Assert.AreEqual (0, ddt.Second, "#1.6");
+                               
+                               // DST start: 9/29/2014 2:00:00 AM
+                               // DST end: 4/6/2015 3:00:00 AM
+                               sdt = new DateTime (2014, 6, 9, 23, 0, 0, DateTimeKind.Utc);
+                               ddt = TimeZoneInfo.ConvertTime (sdt, tz);
+                               Assert.AreEqual (10, ddt.Day, "#2.1");
+                               Assert.AreEqual (6, ddt.Month, "#2.2");
+                               Assert.AreEqual (2014, ddt.Year, "#2.3");
+                               Assert.AreEqual (11, ddt.Hour, "#2.4");
+                               Assert.AreEqual (0, ddt.Minute, "#2.5");
+                               Assert.AreEqual (0, ddt.Second, "#2.6");
+                               
+                               // DST start: 9/29/2014 2:00:00 AM
+                               // DST end: 4/6/2015 3:00:00 AM
+                               sdt = new DateTime (2014, 10, 9, 23, 0, 0, DateTimeKind.Utc);
+                               ddt = TimeZoneInfo.ConvertTime (sdt, tz);
+                               Assert.AreEqual (10, ddt.Day, "#3.1");
+                               Assert.AreEqual (10, ddt.Month, "#3.2");
+                               Assert.AreEqual (2014, ddt.Year, "#3.3");
+                               Assert.AreEqual (12, ddt.Hour, "#3.4");
+                               Assert.AreEqual (0, ddt.Minute, "#3.5");
+                               Assert.AreEqual (0, ddt.Second, "#3.6");
+                       }
+
+                       [Test (Description="Fix the bug https://bugzilla.xamarin.com/show_bug.cgi?id=1849")]
+                       public void ConvertTime_AjustmentConvertTimeWithSourceTimeZone () {
+                               
+                               TimeZoneInfo easternTimeZone;
+                               TimeZoneInfo pacificTimeZone;
+
+                               if (Environment.OSVersion.Platform == PlatformID.Unix) {
+                                       // *nix
+                                       easternTimeZone = TimeZoneInfo.FindSystemTimeZoneById ("US/Eastern");
+                                       pacificTimeZone = TimeZoneInfo.FindSystemTimeZoneById ("US/Pacific");   
+                               }
+                               else {
+                                       // Windows
+                                       easternTimeZone = TimeZoneInfo.FindSystemTimeZoneById ("Eastern Standard Time");
+                                       pacificTimeZone = TimeZoneInfo.FindSystemTimeZoneById ("Pacific Standard Time");
+                               }
+
+                               DateTime lastMidnight = new DateTime (new DateTime (2012, 06, 13).Ticks, DateTimeKind.Unspecified);
+                               DateTime lastMidnightAsEST = TimeZoneInfo.ConvertTime (lastMidnight, pacificTimeZone, easternTimeZone);
+                               DateTime lastMidnightAsPST = TimeZoneInfo.ConvertTime (lastMidnightAsEST, easternTimeZone, pacificTimeZone);
+                       
+                               // Last midnight in PST as EST should be 3AM
+                               DateTime expectedDate = new DateTime (2012, 06, 13, 3, 0, 0);
+
+                               Assert.AreEqual (expectedDate, lastMidnightAsEST);
+                               Assert.AreEqual (lastMidnight, lastMidnightAsPST);
+                       }
+               }
+               
+               [TestFixture]
+               public class IsInvalidTimeTests
+               {
+                       TimeZoneInfo london;
+               
+                       [SetUp]
+                       public void CreateTimeZones ()
+                       {
+                               TimeZoneInfo.TransitionTime start = TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1,1,1,1,0,0), 3, 5, DayOfWeek.Sunday);
+                               TimeZoneInfo.TransitionTime end = TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1,1,1,2,0,0), 10, 5, DayOfWeek.Sunday);
+                               TimeZoneInfo.AdjustmentRule rule = TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule (DateTime.MinValue.Date, DateTime.MaxValue.Date, new TimeSpan (1,0,0), start, end);
+                               london = TimeZoneInfo.CreateCustomTimeZone ("Europe/London", new TimeSpan (0), "Europe/London", "British Standard Time", "British Summer Time", new TimeZoneInfo.AdjustmentRule [] {rule});
+                       }
+               
+               #if SLOW_TESTS
+                       [Test]
+                       public void UTCDate ()
+                       {
+                               for (DateTime date = new DateTime (2007, 01, 01, 0, 0, 0); date < new DateTime (2007, 12, 31, 23, 59, 59); date += new TimeSpan (0,1,0)) {
+                                       date = DateTime.SpecifyKind (date, DateTimeKind.Utc);
+                                       Assert.IsFalse (london.IsInvalidTime (date));
+                               }
+                       }
+               #endif
+                       [Test]
+                       public void InvalidDates ()
+                       {
+                               Assert.IsFalse (london.IsInvalidTime (new DateTime (2007, 03, 25, 0, 59, 59)));
+                               Assert.IsTrue (london.IsInvalidTime (new DateTime (2007, 03, 25, 1, 0, 0)));
+                               Assert.IsTrue (london.IsInvalidTime (new DateTime (2007, 03, 25, 1, 59, 59)));
+                               Assert.IsFalse (london.IsInvalidTime (new DateTime (2007, 03, 25, 2, 0, 0)));
+                       }
+               }
+               
+               [TestFixture]
+               public class IsAmbiguousTimeTests
+               {
+                       TimeZoneInfo london;
+               
+                       [SetUp]
+                       public void CreateTimeZones ()
+                       {
+                               TimeZoneInfo.TransitionTime start = TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1,1,1,1,0,0), 3, 5, DayOfWeek.Sunday);
+                               TimeZoneInfo.TransitionTime end = TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1,1,1,2,0,0), 10, 5, DayOfWeek.Sunday);
+                               TimeZoneInfo.AdjustmentRule rule = TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule (DateTime.MinValue.Date, DateTime.MaxValue.Date, new TimeSpan (1,0,0), start, end);
+                               london = TimeZoneInfo.CreateCustomTimeZone ("Europe/London", new TimeSpan (0), "Europe/London", "British Standard Time", "British Summer Time", new TimeZoneInfo.AdjustmentRule [] {rule});
+                       }
+               
+                       [Test]
+                       public void AmbiguousDates ()
+                       {
+                               if (Environment.OSVersion.Platform != PlatformID.Unix)
+                                       Assert.Ignore ("Not running on Unix.");
+                               Assert.IsFalse (london.IsAmbiguousTime (new DateTime (2007, 10, 28, 1, 0, 0)));
+                               Assert.IsTrue (london.IsAmbiguousTime (new DateTime (2007, 10, 28, 1, 0, 1)));
+                               Assert.IsTrue (london.IsAmbiguousTime (new DateTime (2007, 10, 28, 2, 0, 0)));
+                               Assert.IsFalse (london.IsAmbiguousTime (new DateTime (2007, 10, 28, 2, 0, 1)));
+                       }
+               
+                       [Test]
+                       public void AmbiguousUTCDates ()
+                       {
+                               if (Environment.OSVersion.Platform != PlatformID.Unix)
+                                       Assert.Ignore ("Not running on Unix.");
+                               Assert.IsFalse (london.IsAmbiguousTime (new DateTime (2007, 10, 28, 0, 0, 0, DateTimeKind.Utc)));
+                               Assert.IsTrue (london.IsAmbiguousTime (new DateTime (2007, 10, 28, 0, 0, 1, DateTimeKind.Utc)));
+                               Assert.IsTrue (london.IsAmbiguousTime (new DateTime (2007, 10, 28, 0, 59, 59, DateTimeKind.Utc)));
+                               Assert.IsFalse (london.IsAmbiguousTime (new DateTime (2007, 10, 28, 1, 0, 0, DateTimeKind.Utc)));
+                       }
+               
+               #if SLOW_TESTS
+                       [Test]
+                       public void AmbiguousInUTC ()
+                       {
+                               for (DateTime date = new DateTime (2007, 01, 01, 0, 0, 0); date < new DateTime (2007, 12, 31, 23, 59, 59); date += new TimeSpan (0,1,0)) {
+                                       Assert.IsFalse (TimeZoneInfo.Utc.IsAmbiguousTime (date));
+                               }
+                       }
+               #endif
+               }
+               
+               [TestFixture]
+               public class GetSystemTimeZonesTests
+               {
+                       [Test]
+                       public void NotEmpty ()
+                       {
+                               if (Environment.OSVersion.Platform != PlatformID.Unix)
+                                       Assert.Ignore ("Not running on Unix.");
+                               global::System.Collections.ObjectModel.ReadOnlyCollection<TimeZoneInfo> systemTZ = TimeZoneInfo.GetSystemTimeZones ();
+                               Assert.IsNotNull(systemTZ, "SystemTZ is null");
+                               Assert.IsFalse (systemTZ.Count == 0, "SystemTZ is empty");
+                       }
+               
+                       [Test]
+                       public void ContainsBrussels ()
+                       {
+                               if (Environment.OSVersion.Platform != PlatformID.Unix)
+                                       Assert.Ignore ("Not running on Unix.");
+                               global::System.Collections.ObjectModel.ReadOnlyCollection<TimeZoneInfo> systemTZ = TimeZoneInfo.GetSystemTimeZones ();
+                               foreach (TimeZoneInfo tz in systemTZ) {
+                                       if (tz.Id == "Europe/Brussels")
+                                               return;
+                               }
+                               Assert.Fail ("Europe/Brussels not found in SystemTZ");
+                       }
+               }
+               
+               [TestFixture]
+               public class FindSystemTimeZoneByIdTests
+               {
+                       [Test]
+                       [ExpectedException (typeof (ArgumentNullException))]
+                       public void NullId ()
+                       {
+                               TimeZoneInfo.FindSystemTimeZoneById (null);
+                       }
+               
+                       [Test]
+                       [ExpectedException (typeof (TimeZoneNotFoundException))]
+                       public void NonSystemTimezone ()
+                       {
+                               if (Environment.OSVersion.Platform != PlatformID.Unix)
+                                       throw new TimeZoneNotFoundException ();
+                               TimeZoneInfo.FindSystemTimeZoneById ("Neverland/The_Lagoon");
+                       }
+               
+                       [Test]
+                       public void FindBrusselsTZ ()
+                       {
+                               if (Environment.OSVersion.Platform != PlatformID.Unix)
+                                       Assert.Ignore ("Not running on Unix.");
+                               TimeZoneInfo brussels = TimeZoneInfo.FindSystemTimeZoneById ("Europe/Brussels");
+                               Assert.IsNotNull (brussels);
+                       }
+               
+                       [Test]
+                       public void OffsetIsCorrectInKinshasa ()
+                       {
+                               if (Environment.OSVersion.Platform != PlatformID.Unix)
+                                       Assert.Ignore ("Not running on Unix.");
+                               TimeZoneInfo kin = TimeZoneInfo.FindSystemTimeZoneById ("Africa/Kinshasa");
+                               Assert.AreEqual (new TimeSpan (1,0,0), kin.BaseUtcOffset, "BaseUtcOffset in Kinshasa is not +1h");
+                       }
+               
+                       [Test]
+                       public void OffsetIsCorrectInBrussels ()
+                       {
+                               if (Environment.OSVersion.Platform != PlatformID.Unix)
+                                       Assert.Ignore ("Not running on Unix.");
+                               TimeZoneInfo brussels = TimeZoneInfo.FindSystemTimeZoneById ("Europe/Brussels");
+                               Assert.AreEqual (new TimeSpan (1,0,0), brussels.BaseUtcOffset, "BaseUtcOffset for Brussels is not +1h");
+                       }
+               
+                       [Test]
+                       public void NoDSTInKinshasa ()
+                       {
+                               if (Environment.OSVersion.Platform != PlatformID.Unix)
+                                       Assert.Ignore ("Not running on Unix.");
+                               TimeZoneInfo kin = TimeZoneInfo.FindSystemTimeZoneById ("Africa/Kinshasa");
+                               Assert.IsFalse (kin.SupportsDaylightSavingTime);
+                       }
+               
+                       [Test]
+                       public void BrusselsSupportsDST ()
+                       {
+                               if (Environment.OSVersion.Platform != PlatformID.Unix)
+                                       Assert.Ignore ("Not running on Unix.");
+                               TimeZoneInfo brussels = TimeZoneInfo.FindSystemTimeZoneById ("Europe/Brussels");
+                               Assert.IsTrue (brussels.SupportsDaylightSavingTime);
+                       }
+               
+                       [Test]
+                       public void MelbourneSupportsDST ()
+                       {
+                               if (Environment.OSVersion.Platform != PlatformID.Unix)
+                                       Assert.Ignore ("Not running on Unix.");
+                               TimeZoneInfo melbourne = TimeZoneInfo.FindSystemTimeZoneById ("Australia/Melbourne");
+                               Assert.IsTrue (melbourne.SupportsDaylightSavingTime);
+                       }
+               
+                       [Test]
+                       public void RomeAndVaticanSharesTime ()
+                       {
+                               if (Environment.OSVersion.Platform != PlatformID.Unix)
+                                       Assert.Ignore ("Not running on Unix.");
+                               TimeZoneInfo rome = TimeZoneInfo.FindSystemTimeZoneById ("Europe/Rome");
+                               TimeZoneInfo vatican = TimeZoneInfo.FindSystemTimeZoneById ("Europe/Vatican");
+                               Assert.IsTrue (rome.HasSameRules (vatican));
+                       }
+
+                       [Test]
+                       public void FindSystemTimeZoneById_Local_Roundtrip ()
+                       {
+                               Assert.AreEqual (TimeZoneInfo.Local.Id, TimeZoneInfo.FindSystemTimeZoneById (TimeZoneInfo.Local.Id).Id);
+                       }
+
+                       [Test]
+                       public void Test326 ()
+                       {
+                               DateTime utc = DateTime.UtcNow;
+                               DateTime local = TimeZoneInfo.ConvertTime (utc, TimeZoneInfo.Utc, TimeZoneInfo.FindSystemTimeZoneById (TimeZoneInfo.Local.Id));
+                               Assert.AreEqual (local, utc + TimeZoneInfo.Local.GetUtcOffset (utc), "ConvertTime/Local");
+                       }
+               
+               #if SLOW_TESTS
+                       [Test]
+                       public void BrusselsAdjustments ()
+                       {
+                               TimeZoneInfo.TransitionTime start = TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1,1,1,2,0,0), 3, 5, DayOfWeek.Sunday);
+                               TimeZoneInfo.TransitionTime end = TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1,1,1,3,0,0), 10, 5, DayOfWeek.Sunday);
+                               TimeZoneInfo.AdjustmentRule rule = TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule (DateTime.MinValue.Date, DateTime.MaxValue.Date, new TimeSpan (1,0,0), start, end);
+                               TimeZoneInfo brussels = TimeZoneInfo.CreateCustomTimeZone ("Europe/Brussels", new TimeSpan (1, 0, 0), "Europe/Brussels", "", "", new TimeZoneInfo.AdjustmentRule [] {rule});
+               
+                               TimeZoneInfo brussels_sys = TimeZoneInfo.FindSystemTimeZoneById ("Europe/Brussels");
+               
+                               for (DateTime date = new DateTime (2006, 01, 01, 0, 0, 0, DateTimeKind.Local); date < new DateTime (2007, 12, 31, 23, 59, 59); date += new TimeSpan (0,30,0)) {
+                                       Assert.AreEqual (brussels.GetUtcOffset (date), brussels_sys.GetUtcOffset (date));
+                                       Assert.AreEqual (brussels.IsDaylightSavingTime (date), brussels_sys.IsDaylightSavingTime (date));
+                               }               
+                       }
+               #endif
+               }
+               
+               [TestFixture]
+               public class GetAmbiguousTimeOffsetsTests
+               {
+                       [Test]
+                       [ExpectedException (typeof(ArgumentException))]
+                       public void DateIsNotAmbiguous ()
+                       {
+                               if (Environment.OSVersion.Platform != PlatformID.Unix)
+                                       throw new ArgumentException ();
+                               TimeZoneInfo brussels = TimeZoneInfo.FindSystemTimeZoneById ("Europe/Brussels");
+                               DateTime date = new DateTime (2007, 05, 11, 11, 40, 00);
+                               brussels.GetAmbiguousTimeOffsets (date);
+                       }
+               
+                       [Test]
+                       public void AmbiguousOffsets ()
+                       {
+                               if (Environment.OSVersion.Platform != PlatformID.Unix)
+                                       Assert.Ignore ("Not running on Unix.");
+                               TimeZoneInfo brussels = TimeZoneInfo.FindSystemTimeZoneById ("Europe/Brussels");
+                               DateTime date = new DateTime (2007, 10, 28, 2, 30, 00);
+                               Assert.IsTrue (brussels.IsAmbiguousTime (date));
+                               Assert.AreEqual (2, brussels.GetAmbiguousTimeOffsets (date).Length);
+                               Assert.AreEqual (new TimeSpan[] {new TimeSpan (1, 0, 0), new TimeSpan (2, 0, 0)}, brussels.GetAmbiguousTimeOffsets (date));
+                       }
+               }
+
+               [TestFixture]
+               public class HasSameRulesTests
+               {
+                       [Test]
+                       public void NullAdjustments () //bnc #391011
+                       {
+                               TimeZoneInfo utc = TimeZoneInfo.Utc;
+                               TimeZoneInfo custom = TimeZoneInfo.CreateCustomTimeZone ("Custom", new TimeSpan (0), "Custom", "Custom");
+                               Assert.IsTrue (utc.HasSameRules (custom));
+                       }
+               }
+
+               [TestFixture]
+               public class SerializationTests
+               {
+                       [Test]
+                       public void Serialization_Deserialization ()
+                       {
+                               TimeZoneInfo.TransitionTime start = TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1,1,1,1,0,0), 3, 5, DayOfWeek.Sunday);
+                               TimeZoneInfo.TransitionTime end = TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1,1,1,2,0,0), 10, 5, DayOfWeek.Sunday);
+                               TimeZoneInfo.AdjustmentRule rule = TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule (DateTime.MinValue.Date, DateTime.MaxValue.Date, new TimeSpan (1,0,0), start, end);
+                               TimeZoneInfo london = TimeZoneInfo.CreateCustomTimeZone ("Europe/London", new TimeSpan (0), "Europe/London", "British Standard Time", "British Summer Time", new TimeZoneInfo.AdjustmentRule [] {rule});
+                               MemoryStream stream = new MemoryStream ();
+                               BinaryFormatter formatter = new BinaryFormatter ();
+                               formatter.Serialize (stream, london);
+                               stream.Position = 0;
+                               TimeZoneInfo deserialized = (TimeZoneInfo) formatter.Deserialize (stream);
+                               stream.Close ();
+                               stream.Dispose ();
+                               Assert.IsTrue (london.Equals (deserialized));
+                       }
+               }
+
+               [TestFixture]
+               public class MultipleDaylightSavingTimeTests {
+                       private TimeZoneInfo cairo;
+                       private DateTime dst1Start;
+                       private DateTime dst1End;
+                       private DateTime dst2Start;
+                       private DateTime dst2End;
+
+                       private TimeSpan baseUtcOffset;
+                       private TimeSpan dstUtcOffset;
+                       private TimeSpan dstOffset;
+
+                       [SetUp]
+                       public void CreateTimeZones ()
+                       {
+                               /*
+                               From 1/1/2014 12:00:00 AM to 6/30/2014 12:00:00 AM
+                                       Delta: 01:00:00
+                                       Begins at 12:00 AM on 16 May
+                                       Ends at 1:00 AM on 29 June
+                               From 7/1/2014 12:00:00 AM to 12/31/2014 12:00:00 AM
+                                       Delta: 01:00:00
+                                       Begins at 12:00 AM on 29 July
+                                       Ends at 12:00 AM on 26 September
+                               */
+                               dst1Start = new DateTime (2014, 5, 16);
+                               dst1End = new DateTime (2014, 6, 29);
+                               dst2Start = new DateTime (2014, 7, 29);
+                               dst2End = new DateTime (2014, 9, 26);
+
+                               baseUtcOffset = new TimeSpan (2, 0, 0);
+                               dstUtcOffset = new TimeSpan (3, 0, 0);
+                               dstOffset = dstUtcOffset - baseUtcOffset;
+
+                               var rule1 = TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule (
+                                       new DateTime (2014, 1, 1), new DateTime (2014, 6, 30), dstOffset,
+                                       CreateFixedDateRule (dst1Start), CreateFixedDateRule (dst1End));
+
+                               var rule2 = TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule (
+                                       new DateTime (2014, 7, 1), new DateTime (2014, 12, 31), dstOffset,
+                                       CreateFixedDateRule (dst2Start), CreateFixedDateRule (dst2End));
+
+                               cairo = TimeZoneInfo.CreateCustomTimeZone ("Africa/Cairo", baseUtcOffset, "Africa/Cairo", "EET", "EEST",
+                                       new [] {rule1, rule2});
+                       }
+
+                       private static TimeZoneInfo.TransitionTime CreateFixedDateRule (DateTime dateTime)
+                       {
+                               var time = new DateTime (dateTime.Ticks - dateTime.Date.Ticks);
+                               return TimeZoneInfo.TransitionTime.CreateFixedDateRule (time, dateTime.Month, dateTime.Day);
+                       }
+
+                       [Test]
+                       public void GetUtcOffset_FromUTC ()
+                       {
+                               var d = dst1Start.Add (-baseUtcOffset);
+                               d = DateTime.SpecifyKind (d, DateTimeKind.Utc);
+                               Assert.AreEqual(baseUtcOffset, cairo.GetUtcOffset (d.Add (new TimeSpan(0,0,0,-1))));
+                               Assert.AreEqual(dstUtcOffset, cairo.GetUtcOffset (d));
+                               Assert.AreEqual(dstUtcOffset, cairo.GetUtcOffset (d.Add (new TimeSpan(0,0,0, 1))));
+
+                               d = dst1End.Add (-baseUtcOffset-dstOffset);
+                               d = DateTime.SpecifyKind (d, DateTimeKind.Utc);
+                               Assert.AreEqual(dstUtcOffset, cairo.GetUtcOffset (d.Add (new TimeSpan(0,0,0,-1))));
+                               Assert.AreEqual(baseUtcOffset, cairo.GetUtcOffset (d));
+                               Assert.AreEqual(baseUtcOffset, cairo.GetUtcOffset (d.Add (new TimeSpan(0,0,0, 1))));
+
+                               d = dst2Start.Add (-baseUtcOffset);
+                               d = DateTime.SpecifyKind (d, DateTimeKind.Utc);
+                               Assert.AreEqual(baseUtcOffset, cairo.GetUtcOffset (d.Add (new TimeSpan(0,0,0,-1))));
+                               Assert.AreEqual(dstUtcOffset, cairo.GetUtcOffset (d));
+                               Assert.AreEqual(dstUtcOffset, cairo.GetUtcOffset (d.Add (new TimeSpan(0,0,0, 1))));
+
+                               d = dst2End.Add (-baseUtcOffset-dstOffset);
+                               d = DateTime.SpecifyKind (d, DateTimeKind.Utc);
+                               Assert.AreEqual(dstUtcOffset, cairo.GetUtcOffset (d.Add (new TimeSpan(0,0,0,-1))));
+                               Assert.AreEqual(baseUtcOffset, cairo.GetUtcOffset (d));
+                               Assert.AreEqual(baseUtcOffset, cairo.GetUtcOffset (d.Add (new TimeSpan(0,0,0, 1))));
+                       }
+
+                       [Test]
+                       public void GetUtcOffset_FromLocal ()
+                       {
+                               var d = dst1Start.Add (-baseUtcOffset);
+                               d = DateTime.SpecifyKind (d, DateTimeKind.Utc);
+                               d = d.ToLocalTime ();
+                               Assert.AreEqual(baseUtcOffset, cairo.GetUtcOffset (d.Add (new TimeSpan(0,0,0,-1))));
+                               Assert.AreEqual(dstUtcOffset, cairo.GetUtcOffset (d));
+                               Assert.AreEqual(dstUtcOffset, cairo.GetUtcOffset (d.Add (new TimeSpan(0,0,0, 1))));
+
+                               d = dst1End.Add (-baseUtcOffset-dstOffset);
+                               d = DateTime.SpecifyKind (d, DateTimeKind.Utc);
+                               d = d.ToLocalTime ();
+                               Assert.AreEqual(dstUtcOffset, cairo.GetUtcOffset (d.Add (new TimeSpan(0,0,0,-1))));
+                               Assert.AreEqual(baseUtcOffset, cairo.GetUtcOffset (d));
+                               Assert.AreEqual(baseUtcOffset, cairo.GetUtcOffset (d.Add (new TimeSpan(0,0,0, 1))));
+
+                               d = dst2Start.Add (-baseUtcOffset);
+                               d = DateTime.SpecifyKind (d, DateTimeKind.Utc);
+                               d = d.ToLocalTime ();
+                               Assert.AreEqual(baseUtcOffset, cairo.GetUtcOffset (d.Add (new TimeSpan(0,0,0,-1))));
+                               Assert.AreEqual(dstUtcOffset, cairo.GetUtcOffset (d));
+                               Assert.AreEqual(dstUtcOffset, cairo.GetUtcOffset (d.Add (new TimeSpan(0,0,0, 1))));
+
+                               d = dst2End.Add (-baseUtcOffset-dstOffset);
+                               d = DateTime.SpecifyKind (d, DateTimeKind.Utc);
+                               d = d.ToLocalTime ();
+                               Assert.AreEqual(dstUtcOffset, cairo.GetUtcOffset (d.Add (new TimeSpan(0,0,0,-1))));
+                               Assert.AreEqual(baseUtcOffset, cairo.GetUtcOffset (d));
+                               Assert.AreEqual(baseUtcOffset, cairo.GetUtcOffset (d.Add (new TimeSpan(0,0,0, 1))));
+                       }
+
+                       [Test]
+                       public void GetUtcOffset_FromUnspecified ()
+                       {
+                               var d = dst1Start.Add (dstOffset);
+                               Assert.AreEqual(baseUtcOffset, cairo.GetUtcOffset (d.Add (new TimeSpan(0,0,0,-1))));
+                               Assert.AreEqual(dstUtcOffset, cairo.GetUtcOffset (d));
+                               Assert.AreEqual(dstUtcOffset, cairo.GetUtcOffset (d.Add (new TimeSpan(0,0,0, 1))));
+
+                               d = dst1End.Add (-dstOffset);
+                               Assert.AreEqual(dstUtcOffset, cairo.GetUtcOffset (d.Add (new TimeSpan(0,0,0,-1))));
+                               Assert.AreEqual(baseUtcOffset, cairo.GetUtcOffset (d));
+                               Assert.AreEqual(baseUtcOffset, cairo.GetUtcOffset (d.Add (new TimeSpan(0,0,0, 1))));
+
+                               d = dst2Start.Add (dstOffset);
+                               Assert.AreEqual(baseUtcOffset, cairo.GetUtcOffset (d.Add (new TimeSpan(0,0,0,-1))));
+                               Assert.AreEqual(dstUtcOffset, cairo.GetUtcOffset (d));
+                               Assert.AreEqual(dstUtcOffset, cairo.GetUtcOffset (d.Add (new TimeSpan(0,0,0, 1))));
+
+                               d = dst2End.Add (-dstOffset);
+                               Assert.AreEqual(dstUtcOffset, cairo.GetUtcOffset (d.Add (new TimeSpan(0,0,0,-1))));
+                               Assert.AreEqual(baseUtcOffset, cairo.GetUtcOffset (d));
+                               Assert.AreEqual(baseUtcOffset, cairo.GetUtcOffset (d.Add (new TimeSpan(0,0,0, 1))));
+                       }
+               }
+       }
+}
index 11fffe3d6c0ec5c5ebd69bb34901ab62ccb5910b..985002965e2c36bfcd8686edef6404211a7fd320 100644 (file)
@@ -108,8 +108,6 @@ System/Attribute.cs
 System/AttributeTargets.cs
 System/AttributeUsageAttribute.cs
 System/BadImageFormatException.cs
-System/BitConverter.cs
-System/Boolean.cs
 System/Buffer.cs
 System/CannotUnloadAppDomainException.cs
 System/CharEnumerator.cs
@@ -132,13 +130,6 @@ System/ContextStaticAttribute.cs
 System/ControlCharacters.cs
 System/CrossAppDomainDelegate.cs
 System/DataMisalignedException.cs
-System/DateTime.cs
-System/DateTimeKind.cs
-System/DateTimeOffset.cs
-System/DateTimeUtils.cs
-System/DayOfWeek.cs
-System/DBNull.cs
-System/Decimal.cs
 System/Delegate.cs
 System/DelegateSerializationHolder.cs
 System/DivideByZeroException.cs
@@ -163,6 +154,7 @@ System/GC.cs
 System/GCCollectionMode.cs
 System/GCNotificationStatus.cs
 System/Guid.cs
+System/Guid.MonoTouch.cs
 System/IAppDomainSetup.cs
 System/IAsyncResult.cs
 System/IObservable.cs
@@ -192,12 +184,6 @@ System/LoaderOptimizationAttribute.cs
 System/LocalDataStoreSlot.cs
 System/MarshalByRefObject.cs
 System/Math.cs
-System/MemberAccessException.cs
-System/MethodAccessException.cs
-System/MidpointRounding.cs
-System/MissingFieldException.cs
-System/MissingMemberException.cs
-System/MissingMethodException.cs
 System/MonoAsyncCall.cs
 System/MonoCQItem.cs
 System/MonoCustomAttrs.cs
@@ -225,7 +211,6 @@ System/OverflowException.cs
 System/ParamArrayAttribute.cs
 System/PlatformID.cs
 System/PlatformNotSupportedException.cs
-System/Random.cs
 System/RankException.cs
 System/ResolveEventArgs.cs
 System/ResolveEventHandler.cs
@@ -248,7 +233,6 @@ System/TermInfoNumbers.cs
 System/TermInfoReader.cs
 System/TermInfoStrings.cs
 System/ThreadStaticAttribute.cs
-System/TimeSpan.cs
 System/TimeZone.cs
 System/TimeZoneInfo.cs
 System/TimeZoneInfo.AdjustmentRule.cs
@@ -271,7 +255,6 @@ System/UIntPtr.cs
 System/UnauthorizedAccessException.cs
 System/UnhandledExceptionEventArgs.cs
 System/UnhandledExceptionEventHandler.cs
-System/UnitySerializationHolder.cs
 System/ValueType.cs
 System/Variant.cs
 System/Void.cs
@@ -327,8 +310,9 @@ System.Diagnostics.SymbolStore/SymLanguageType.cs
 System.Diagnostics.SymbolStore/SymLanguageVendor.cs
 System.Globalization/CalendarAlgorithmType.cs
 System.Globalization/CalendarWeekRule.cs
-System.Globalization/CharUnicodeInfo.cs
-System.Globalization/CodePageDataItem.cs
+../../../external/referencesource/mscorlib/system/globalization/bidicategory.cs
+../../../external/referencesource/mscorlib/system/globalization/charunicodeinfo.cs
+../../../external/referencesource/mscorlib/system/globalization/globalizationassembly.cs
 System.Globalization/CompareInfo.cs
 System.Globalization/CompareOptions.cs
 System.Globalization/CultureInfo.cs
@@ -336,7 +320,6 @@ System.Globalization/CultureNotFoundException.cs
 System.Globalization/CultureTypes.cs
 System.Globalization/DateTimeFormatInfo.cs
 System.Globalization/DateTimeStyles.cs
-System.Globalization/DaylightTime.cs
 System.Globalization/DigitShapes.cs
 System.Globalization/GregorianCalendarTypes.cs
 System.Globalization/IdnMapping.cs
@@ -348,7 +331,6 @@ System.Globalization/SortVersion.cs
 System.Globalization/StringInfo.cs
 System.Globalization/TextElementEnumerator.cs
 System.Globalization/TextInfo.cs
-System.Globalization/TimeSpanStyles.cs
 System.Globalization/UnicodeCategory.cs
 System.IO/BinaryReader.cs
 System.IO/BinaryWriter.cs
@@ -1364,37 +1346,32 @@ System.Security.Principal/WindowsBuiltInRole.cs
 System.Security.Principal/WindowsIdentity.cs
 System.Security.Principal/WindowsImpersonationContext.cs
 System.Security.Principal/WindowsPrincipal.cs
-System.Text/ASCIIEncoding.cs
-System.Text/CodePageEncoding.cs
-System.Text/Decoder.cs
-System.Text/DecoderExceptionFallback.cs
-System.Text/DecoderExceptionFallbackBuffer.cs
-System.Text/DecoderFallback.cs
-System.Text/DecoderFallbackBuffer.cs
-System.Text/DecoderFallbackException.cs
-System.Text/DecoderReplacementFallback.cs
-System.Text/DecoderReplacementFallbackBuffer.cs
-System.Text/Encoder.cs
-System.Text/EncoderExceptionFallback.cs
-System.Text/EncoderExceptionFallbackBuffer.cs
-System.Text/EncoderFallback.cs
-System.Text/EncoderFallbackBuffer.cs
-System.Text/EncoderFallbackException.cs
-System.Text/EncoderReplacementFallback.cs
-System.Text/EncoderReplacementFallbackBuffer.cs
-System.Text/Encoding.cs
-System.Text/EncodingEncoder.cs
-System.Text/EncodingDecoder.cs
-System.Text/EncodingInfo.cs
-System.Text/Latin1Encoding.cs
-System.Text/MLangCodePageEncoding.cs
+System.Text/EncodingHelper.cs
 System.Text/NormalizationForm.cs
 System.Text/StringBuilder.cs
-System.Text/SurrogateEncoder.cs
-System.Text/UnicodeEncoding.cs
-System.Text/UTF7Encoding.cs
-System.Text/UTF8Encoding.cs
-System.Text/UTF32Encoding.cs
+System.Text/Latin1Encoding.cs
+../../../external/referencesource/mscorlib/system/text/asciiencoding.cs
+../../../external/referencesource/mscorlib/system/text/codepageencoding.cs
+../../../external/referencesource/mscorlib/system/text/decoderbestfitfallback.cs
+../../../external/referencesource/mscorlib/system/text/decoder.cs
+../../../external/referencesource/mscorlib/system/text/decodernls.cs
+../../../external/referencesource/mscorlib/system/text/decoderexceptionfallback.cs
+../../../external/referencesource/mscorlib/system/text/decoderfallback.cs
+../../../external/referencesource/mscorlib/system/text/decoderreplacementfallback.cs
+../../../external/referencesource/mscorlib/system/text/encoderbestfitfallback.cs
+../../../external/referencesource/mscorlib/system/text/encoder.cs
+../../../external/referencesource/mscorlib/system/text/encodernls.cs
+../../../external/referencesource/mscorlib/system/text/encoderexceptionfallback.cs
+../../../external/referencesource/mscorlib/system/text/encoderfallback.cs
+../../../external/referencesource/mscorlib/system/text/encoderreplacementfallback.cs
+../../../external/referencesource/mscorlib/system/text/encoding.cs
+../../../external/referencesource/mscorlib/system/text/encodinginfo.cs
+../../../external/referencesource/mscorlib/system/text/mlangcodepageencoding.cs
+../../../external/referencesource/mscorlib/system/text/surrogateencoder.cs
+../../../external/referencesource/mscorlib/system/text/unicodeencoding.cs
+../../../external/referencesource/mscorlib/system/text/utf32encoding.cs
+../../../external/referencesource/mscorlib/system/text/utf7encoding.cs
+../../../external/referencesource/mscorlib/system/text/utf8encoding.cs
 System.Threading/AsyncFlowControl.cs
 System.Threading/CompressedStack.cs
 System.Threading/ContextCallback.cs
@@ -1440,41 +1417,64 @@ System.Threading.Tasks/TaskConstants_T.cs
 System.Collections.Concurrent/ConcurrentOrderedList.cs
 ../Mono.Parallel/Mono.Threading/AtomicBoolean.cs
 System.Threading/ThreadLocal.cs
-System.Threading/Watch.cs
 
 ReferenceSources/Array.cs
 ReferenceSources/BCLDebug.cs
 ReferenceSources/CalendarData.cs
-ReferenceSources/Empty.cs
+ReferenceSources/CompatibilitySwitches.cs
+ReferenceSources/CultureData.cs
 ReferenceSources/Environment.cs
 ReferenceSources/ExecutionContext.cs
 ReferenceSources/HashHelpers.cs
+ReferenceSources/mscorlib.txt.cs
 ReferenceSources/ParseNumbers.cs
+ReferenceSources/TimeZoneInfoOptions.cs
 ReferenceSources/AppDomain.cs
 ReferenceSources/CLRConfig.cs
 ReferenceSources/JitHelpers.cs
+ReferenceSources/EncodingDataItem.cs
+ReferenceSources/EncodingTable.cs
 
 ../../../external/referencesource/mscorlib/system/__hresults.cs
 ../../../external/referencesource/mscorlib/system/AggregateException.cs
 ../../../external/referencesource/mscorlib/system/arraysegment.cs
+../../../external/referencesource/mscorlib/system/bitconverter.cs
+../../../external/referencesource/mscorlib/system/boolean.cs
 ../../../external/referencesource/mscorlib/system/byte.cs
 ../../../external/referencesource/mscorlib/system/char.cs
 ../../../external/referencesource/mscorlib/system/convert.cs
+../../../external/referencesource/mscorlib/system/datetime.cs
+../../../external/referencesource/mscorlib/system/datetimekind.cs
+../../../external/referencesource/mscorlib/system/datetimeoffset.cs
+../../../external/referencesource/mscorlib/system/dayofweek.cs
+../../../external/referencesource/mscorlib/system/decimal.cs
+../../../external/referencesource/mscorlib/system/dbnull.cs
+../../../external/referencesource/mscorlib/system/empty.cs
+../../../external/referencesource/mscorlib/system/guid.cs
 ../../../external/referencesource/mscorlib/system/int16.cs
 ../../../external/referencesource/mscorlib/system/int32.cs
 ../../../external/referencesource/mscorlib/system/int64.cs
 ../../../external/referencesource/mscorlib/system/Lazy.cs
+../../../external/referencesource/mscorlib/system/memberaccessexception.cs
+../../../external/referencesource/mscorlib/system/methodaccessexception.cs
+../../../external/referencesource/mscorlib/system/midpointrounding.cs
+../../../external/referencesource/mscorlib/system/missingfieldexception.cs
+../../../external/referencesource/mscorlib/system/missingmemberexception.cs
+../../../external/referencesource/mscorlib/system/missingmethodexception.cs
 ../../../external/referencesource/mscorlib/system/number.cs
 ../../../external/referencesource/mscorlib/system/progress.cs
+../../../external/referencesource/mscorlib/system/random.cs
 ../../../external/referencesource/mscorlib/system/resid.cs
 ../../../external/referencesource/mscorlib/system/sbyte.cs
 ../../../external/referencesource/mscorlib/system/stringcomparer.cs
 ../../../external/referencesource/mscorlib/system/stringfreezingattribute.cs
+../../../external/referencesource/mscorlib/system/timespan.cs
 ../../../external/referencesource/mscorlib/system/throwhelper.cs
 ../../../external/referencesource/mscorlib/system/tuple.cs
 ../../../external/referencesource/mscorlib/system/uint16.cs
 ../../../external/referencesource/mscorlib/system/uint32.cs
 ../../../external/referencesource/mscorlib/system/uint64.cs
+../../../external/referencesource/mscorlib/system/unityserializationholder.cs
 ../../../external/referencesource/mscorlib/system/version.cs
 
 ../../../external/referencesource/mscorlib/system/collections/arraylist.cs
@@ -1542,12 +1542,22 @@ ReferenceSources/JitHelpers.cs
 ../../../external/referencesource/mscorlib/system/diagnostics/contracts/contracts.cs
 ../../../external/referencesource/mscorlib/system/diagnostics/contracts/contractsbcl.cs
 
+../../../external/referencesource/mscorlib/system/globalization/bidicategory.cs
 ../../../external/referencesource/mscorlib/system/globalization/calendar.cs
+../../../external/referencesource/mscorlib/system/globalization/calendardata.cs
+../../../external/referencesource/mscorlib/system/globalization/charunicodeinfo.cs
 ../../../external/referencesource/mscorlib/system/globalization/chineselunisolarcalendar.cs
+../../../external/referencesource/mscorlib/system/globalization/daylighttime.cs
+../../../external/referencesource/mscorlib/system/globalization/datetimeformat.cs
+../../../external/referencesource/mscorlib/system/globalization/datetimeformatinfo.cs
+../../../external/referencesource/mscorlib/system/globalization/datetimeformatinfoscanner.cs
+../../../external/referencesource/mscorlib/system/globalization/datetimeparse.cs
 ../../../external/referencesource/mscorlib/system/globalization/eastasianlunisolarcalendar.cs
+../../../external/referencesource/mscorlib/system/globalization/globalizationassembly.cs
 ../../../external/referencesource/mscorlib/system/globalization/gregoriancalendar.cs
 ../../../external/referencesource/mscorlib/system/globalization/gregoriancalendarhelper.cs
 ../../../external/referencesource/mscorlib/system/globalization/hebrewcalendar.cs
+../../../external/referencesource/mscorlib/system/globalization/hebrewnumber.cs
 ../../../external/referencesource/mscorlib/system/globalization/hijricalendar.cs
 ../../../external/referencesource/mscorlib/system/globalization/japanesecalendar.cs
 ../../../external/referencesource/mscorlib/system/globalization/japaneselunisolarcalendar.cs
@@ -1557,6 +1567,8 @@ ReferenceSources/JitHelpers.cs
 ../../../external/referencesource/mscorlib/system/globalization/Persiancalendar.cs
 ../../../external/referencesource/mscorlib/system/globalization/taiwancalendar.cs
 ../../../external/referencesource/mscorlib/system/globalization/taiwanlunisolarcalendar.cs
+../../../external/referencesource/mscorlib/system/globalization/timespanformat.cs
+../../../external/referencesource/mscorlib/system/globalization/timespanparse.cs
 ../../../external/referencesource/mscorlib/system/globalization/thaibuddhistcalendar.cs
 ../../../external/referencesource/mscorlib/system/globalization/umalquracalendar.cs
 
index 46f87700c1c38a203a5dca1c8d9ad19cfd7ec53e..e03f139adb91307cbb7a2e5a9ca39a3695a19ba1 100644 (file)
@@ -1,6 +1,7 @@
 Microsoft.Win32/RegistryKeyTest.cs
 Mono/DataConvertTest.cs
 ../Mono/DataConverter.cs
+../../System.Runtime.Caching/Test/Common/AssertExtensions.cs
 System/ActivatorTest.cs
 System/AppDomainManagerTest.cs
 System/AppDomainSetupTest.cs
@@ -57,6 +58,7 @@ System/DateTimeTest.cs
 System/DecimalFormatterTest.cs
 System/DecimalTest2.cs
 System/DecimalTest.cs
+System/DecimalTest-Microsoft.cs
 System.Diagnostics/DebuggerDisplayAttributeTest.cs
 System.Diagnostics/DebuggerTypeProxyAttribute.cs
 System.Diagnostics/StackFrameTest.cs
@@ -421,6 +423,10 @@ System.Threading/VolatileTest.cs
 System.Threading/ThreadPoolTest.cs
 System/TimeSpanTest.cs
 System/TimeZoneTest.cs
+System/TimeZoneInfoTest.cs
+System/TimeZoneInfo.AdjustmentRuleTest.cs
+System/TimeZoneInfo.SerializationTest.cs
+System/TimeZoneInfo.TransitionTimeTest.cs
 System/TypeTest.cs
 System/UInt16Test.cs
 System/UInt32Test.cs
diff --git a/mcs/class/corlib/resources/charinfo.nlp b/mcs/class/corlib/resources/charinfo.nlp
new file mode 100644 (file)
index 0000000..41837ef
Binary files /dev/null and b/mcs/class/corlib/resources/charinfo.nlp differ
diff --git a/mcs/class/corlib/xammac_corlib.dll.sources b/mcs/class/corlib/xammac_corlib.dll.sources
new file mode 100644 (file)
index 0000000..9e173da
--- /dev/null
@@ -0,0 +1 @@
+#include corlib.dll.sources
\ No newline at end of file
index c3f5248d12654090059074825b545468231e83d9..a14f96f208a34c766d684648faa0b742fe5caa9b 100644 (file)
@@ -6,8 +6,8 @@ all-local:
 
 install-local:
        $(MKINSTALLDIRS) $(DESTDIR)$(LIBRARY_INSTALL_DIR)
-       $(INSTALL_LIB) ../../../external/reference-assemblies/v4.0/* $(DESTDIR)$(LIBRARY_INSTALL_DIR)
+       $(INSTALL_LIB) ../../../external/binary-reference-assemblies/v4.0/* $(DESTDIR)$(LIBRARY_INSTALL_DIR)
 
-DISTFILES = $(wildcard ../../../external/reference-assemblies/v4.0/*) Makefile
+DISTFILES = $(wildcard ../../../external/binary-reference-assemblies/v4.0/*) Makefile
 
 dist-local: dist-default
diff --git a/mcs/errors/CS1684-lib.il b/mcs/errors/CS1684-lib.il
deleted file mode 100644 (file)
index 535091d..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-.assembly extern mscorlib
-{
-}
-
-.assembly 'CS1684-lib'
-{
-  .hash algorithm 0x00008004
-  .ver 0:0:0:0
-}
-
-.module 'CS1684-lib.dll'
-
-.class public auto ansi beforefieldinit A
-       extends [mscorlib]TYWSF$
-{
-  .method public hidebysig specialname rtspecialname 
-          instance void  .ctor() cil managed
-  {
-    IL_0000:  ldarg.0
-    IL_0001:  call       instance void [mscorlib]System.Object::.ctor()
-    IL_0006:  ret
-  }
-
-}
diff --git a/mcs/errors/CS7069-lib.il b/mcs/errors/CS7069-lib.il
new file mode 100644 (file)
index 0000000..a7472ea
--- /dev/null
@@ -0,0 +1,24 @@
+.assembly extern mscorlib
+{
+}
+
+.assembly 'CS7069-lib'
+{
+  .hash algorithm 0x00008004
+  .ver 0:0:0:0
+}
+
+.module 'CS7069-lib.dll'
+
+.class public auto ansi beforefieldinit A
+       extends [mscorlib]TYWSF$
+{
+  .method public hidebysig specialname rtspecialname 
+          instance void  .ctor() cil managed
+  {
+    IL_0000:  ldarg.0
+    IL_0001:  call       instance void [mscorlib]System.Object::.ctor()
+    IL_0006:  ret
+  }
+
+}
index e809a14da445035d3509d1785fc9cedb36f0eb72..d19d3c469309d65daf71f9e4ab7bd9b3aa60f021 100644 (file)
@@ -32,9 +32,10 @@ TEST_SUPPORT_FILES = \
        CS0730-lib.dll CS0731-1-lib.dll CS0731-2-lib.dll \
        CS1070-lib.dll \
        CS1540-15-lib.dll CS1540-17-lib.dll CS1542-lib.dll CS1577-lib.dll \
-       CS1683-lib.dll CS1684-lib.dll CS1685-2-lib.dll \
+       CS1683-lib.dll CS1685-2-lib.dll \
        dlls/first/CS1701-lib.dll dlls/second/CS1701-lib.dll CS1701-lib.dll dlls/first/CS1702-lib.dll dlls/second/CS1702-lib.dll CS1702-lib.dll dlls/first/CS1705-lib.dll dlls/second/CS1705-lib.dll CS1705-lib.dll \
        CS2015-lib.dll CS3005-16-lib.dll CS3013-module.dll CSExternAlias-lib.dll \
+       CS7069-lib.dll \
        CS8009-lib.dll \
        CSFriendAssembly-lib.dll \
        dlls/first/CS1703-lib.dll dlls/first/CS1704-lib.dll \
index e87ca5dab4100f108ae9c919e3e0ddd922f6e370..d1ac5a63ad760cb36a4de35437d94f4fdbaa222d 100644 (file)
@@ -1,4 +1,4 @@
-// CS0419: Ambiguous reference in cref attribute `DateTime.ToString'. Assuming `System.DateTime.ToString()' but other overloads including `System.DateTime.ToString(System.IFormatProvider)' have also matched
+// CS0419: Ambiguous reference in cref attribute `DateTime.ToString'. Assuming `System.DateTime.ToString()' but other overloads including `System.DateTime.ToString(string)' have also matched
 // Line: 10
 // Compiler options: -doc:dummy.xml -warnaserror -warn:4
 // 
diff --git a/mcs/errors/cs1593-6.cs b/mcs/errors/cs1593-6.cs
new file mode 100644 (file)
index 0000000..7978b89
--- /dev/null
@@ -0,0 +1,24 @@
+// CS1593: Delegate `System.Action<System.Exception,object>' does not take `1' arguments
+// Line: 16
+
+using System;
+using System.Threading.Tasks;
+
+class MainClass
+{
+       public static void Run (Func<Task> func)
+       {
+       }
+
+       public static void Main (string[] args)
+       {
+               Run(async () => {
+                       Function(async (handle) => {
+                       });
+               });
+       }
+
+       public static void Function (Action<Exception, object> callback)
+       {
+       }
+}
diff --git a/mcs/errors/cs1684.cs b/mcs/errors/cs1684.cs
deleted file mode 100644 (file)
index a2d874a..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-// CS1684: Reference to type `TYWSF$' claims it is defined assembly `mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089', but it could not be found
-// Line: 5
-// Compiler options: -r:CS1684-lib.dll
-
-public class TestClass : A
-{
-}
diff --git a/mcs/errors/cs7069.cs b/mcs/errors/cs7069.cs
new file mode 100644 (file)
index 0000000..2c231f7
--- /dev/null
@@ -0,0 +1,7 @@
+// CS1684: Reference to type `TYWSF$' claims it is defined assembly `mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089', but it could not be found
+// Line: 5
+// Compiler options: -r:CS7069-lib.dll
+
+public class TestClass : A
+{
+}
index c318a0f71804b84549b521f63f24bf3a02356eed..71000e19e2e19511f9d5e2bc28e7d2d29d0050a8 100644 (file)
@@ -55,7 +55,6 @@ namespace Mono.ILASM {
                                 ps.AddPermission (iper);
                 }
 
-                //Not called by parser for profile != NET_2_0
                 public void AddPermissionSet (PEAPI.SecurityAction sec_action, MIPermissionSet perm_set)
                 {
                         PermissionSet ps = null;
index c6cdbfea21cecf187d0435cbc29c636337f5d661..2a6561756ff339d7201714af7cf18c9985fb6dee 100644 (file)
@@ -657,22 +657,14 @@ impl_class_refs           : K_IMPLEMENTS generic_class_ref
 formal_typars_clause           : /* EMPTY */\r
                         | OPEN_ANGLE_BRACKET formal_typars CLOSE_ANGLE_BRACKET\r
                           {\r
-#if NET_2_0 || BOOTSTRAP_NET_2_0\r
                                 $$ = $2;\r
-#else\r
-                               Report.Error ("Use ilasm2 for generics support.");\r
-#endif\r
                           }\r
                         ;\r
 \r
 typars_clause           : /* EMPTY */\r
                         | OPEN_ANGLE_BRACKET typars CLOSE_ANGLE_BRACKET\r
                           {\r
-#if NET_2_0 || BOOTSTRAP_NET_2_0\r
                                 $$ = $2;\r
-#else\r
-                               Report.Error ("Use ilasm2 for generics support.");\r
-#endif\r
                           }\r
                         ;\r
 \r
@@ -2850,11 +2842,7 @@ sec_decl         : D_PERMISSION sec_action type_spec OPEN_PARENS nameval_pairs CLOSE_PA
                          }\r
                        | D_PERMISSIONSET sec_action ASSIGN OPEN_BRACE permissions CLOSE_BRACE\r
                          {\r
-#if NET_2_0\r
                                $$ = new MIPermissionSet ((PEAPI.SecurityAction) $2, (ArrayList) $5);\r
-#else\r
-                               Report.Error ("Use ilasm2 for 2.0 style declarative security attributes.");\r
-#endif\r
                          }\r
                        ;\r
 \r
index deb2f3a7ba3aead60ad4e3f253d91ef52a707d35..628c9b443670a138ee99946132ff20c06047e1a7 100644 (file)
@@ -258,9 +258,7 @@ namespace Mono.ILASM {
                                 keywords ["modopt"] = new ILToken (Token.K_MODOPT, "modopt");\r
                                 keywords ["typedref"] = new ILToken (Token.K_TYPEDREF, "typedref");\r
                                 keywords ["property"] = new ILToken (Token.K_PROPERTY, "property");\r
-#if NET_2_0 || BOOTSTRAP_NET_2_0\r
                                 keywords ["type"] = new ILToken (Token.K_TYPE, "type");\r
-#endif\r
                                 keywords ["refany"] = new ILToken (Token.K_TYPEDREF, "typedref");\r
                                 keywords ["wchar"] = new ILToken (Token.K_WCHAR, "wchar");\r
                                 keywords ["char"] = new ILToken (Token.K_CHAR, "char");\r
index eafcb6d9d1bcfe3b9aef909cf35270e6a76d43b3..aeea78ec730329a7353c850120db1309e0bc6c21 100644 (file)
@@ -1730,21 +1730,14 @@ namespace Mono.CSharp
 
                        foreach (var member in members) {
                                var pbm = member as PropertyBasedMember;
-                               if (pbm != null)
+                               if (pbm != null) {
                                        pbm.PrepareEmit ();
+                                       continue;
+                               }
 
-                               var pm = member as IParametersMember;
-                               if (pm != null) {
-                                       var mc = member as MethodOrOperator;
-                                       if (mc != null) {
-                                               mc.PrepareEmit ();
-                                       }
-
-                                       var p = pm.Parameters;
-                                       if (p.IsEmpty)
-                                               continue;
-
-                                       ((ParametersCompiled) p).ResolveDefaultValues (member);
+                               var mc = member as MethodCore;
+                               if (mc != null) {
+                                       mc.PrepareEmit ();
                                        continue;
                                }
 
@@ -3030,7 +3023,7 @@ namespace Mono.CSharp
                                        if (ff == null)
                                                continue;
 
-                                       ff.CharSet = (CharSet) System.Enum.Parse (typeof (CharSet), value.GetValue ().ToString ());
+                                       ff.CharSetValue = (CharSet) System.Enum.Parse (typeof (CharSet), value.GetValue ().ToString ());
                                }
                        }
                }
index e8455f466b1077ddfaa70e419ac60ea94768b3ad..6f0097e4b2a6dddda69a3441083ce75a1c4dffb2 100644 (file)
@@ -2629,6 +2629,9 @@ namespace Mono.CSharp
                        }
 
                        Report.Warning (1633, 1, Location, "Unrecognized #pragma directive");
+
+                       // Eat any remaining characters on the line
+                       ReadToEndOfLine ();
                }
 
                bool eval_val (string s)
index 844c04e5771a7aeb4eb23dcbc5773abb5d076ca7..2073041afa252248e1f856efef43e9b91afaa1d4 100644 (file)
@@ -297,10 +297,6 @@ namespace Mono.CSharp {
                        if ((caching_flags & Flags.CloseTypeCreated) != 0)
                                return;
 
-                       if (!Parameters.IsEmpty) {
-                               parameters.ResolveDefaultValues (this);
-                       }
-
                        InvokeBuilder.PrepareEmit ();
                        if (BeginInvokeBuilder != null) {
                                BeginInvokeBuilder.PrepareEmit ();
index c1ea5aaa576529d7963787e2f9a7736cf9900871..031da5184551ab74f7987535f2ac436d29894366 100644 (file)
@@ -560,7 +560,7 @@ namespace Mono.CSharp
                                if (t == Token.EOF)
                                        return InputKind.EOF;
 
-                               if (t == Token.IDENTIFIER)
+                               if (t == Token.IDENTIFIER || t == Token.STATIC)
                                        return InputKind.CompilationUnit;
                                return InputKind.StatementOrExpression;
 
index 824b5c781cd35c1ae8594baccd1240de36f31eda..8222a01e53e577570fcc542a1b0303971b8607e5 100644 (file)
@@ -394,7 +394,7 @@ namespace Mono.CSharp
                //
                // Explicit struct layout set by parent
                //
-               public CharSet? CharSet {
+               public CharSet? CharSetValue {
                        get; set;
                }               
 
@@ -493,8 +493,32 @@ namespace Mono.CSharp
                        }
 
                        AttributeEncoder encoder;
+                       MethodSpec ctor;
 
-                       var ctor = Module.PredefinedMembers.StructLayoutAttributeCtor.Resolve (Location);
+                       var char_set = CharSetValue ?? Module.DefaultCharSet ?? 0;
+#if STATIC
+                       //
+                       // Set struct layout without resolving StructLayoutAttribute which is not always available
+                       //
+
+                       TypeAttributes attribs = TypeAttributes.SequentialLayout;
+                       switch (char_set) {
+                       case CharSet.None:
+                       case CharSet.Ansi:
+                               attribs |= TypeAttributes.AnsiClass;
+                               break;
+                       case CharSet.Auto:
+                               attribs |= TypeAttributes.AutoClass;
+                               break;
+                       case CharSet.Unicode:
+                               attribs |= TypeAttributes.UnicodeClass;
+                               break;
+                       }
+
+                       fixed_buffer_type.__SetAttributes (fixed_buffer_type.Attributes | attribs);
+                       fixed_buffer_type.__SetLayout (0, buffer_size * type_size);
+#else
+                       ctor = Module.PredefinedMembers.StructLayoutAttributeCtor.Resolve (Location);
                        if (ctor == null)
                                return;
 
@@ -503,8 +527,6 @@ namespace Mono.CSharp
                        if (field_size == null || field_charset == null)
                                return;
 
-                       var char_set = CharSet ?? Module.DefaultCharSet ?? 0;
-
                        encoder = new AttributeEncoder ();
                        encoder.Encode ((short)LayoutKind.Sequential);
                        encoder.EncodeNamedArguments (
@@ -516,7 +538,7 @@ namespace Mono.CSharp
                        );
 
                        fixed_buffer_type.SetCustomAttribute ((ConstructorInfo) ctor.GetMetaInfo (), encoder.ToArray ());
-
+#endif
                        //
                        // Don't emit FixedBufferAttribute attribute for private types
                        //
index 6dea50a33ae6a93b3e863123ff7ee3deacfb5cd0..98254207136904fa18e8867abc8b3fe401c1cf0e 100644 (file)
@@ -208,7 +208,7 @@ namespace Mono.CSharp
                        if ((fa & FieldAttributes.Literal) != 0) {
                                Constant c = field_type.Kind == MemberKind.MissingType ?
                                        new NullConstant (InternalType.ErrorType, Location.Null) :
-                                       Constant.CreateConstantFromValue (field_type, fi.GetRawConstantValue (), Location.Null);
+                                       CreateConstantFromValue (field_type, fi);
                                return new ConstSpec (declaringType, definition, field_type, fi, mod, c);
                        }
 
@@ -242,6 +242,25 @@ namespace Mono.CSharp
                        return new FieldSpec (declaringType, definition, field_type, fi, mod);
                }
 
+               Constant CreateConstantFromValue (TypeSpec fieldType, FieldInfo fi)
+               {
+                       var value = fi.GetRawConstantValue ();
+                       //
+                       // Metadata value can be encoded using different constant value type
+                       // than is actual field type
+                       //
+                       // e.g. unsigned int16 CONSTANT = int16 (0x0000ffff)
+                       //
+                       if (value != null && !fieldType.IsEnum) {
+                               var c = ImportConstant (value);
+                               if (c != null) {
+                                       return fieldType == c.Type ? c : c.ConvertExplicitly (false, fieldType);
+                               }
+                       }
+
+                       return Constant.CreateConstantFromValue (fieldType, value, Location.Null);
+               }
+
                public EventSpec CreateEvent (EventInfo ei, TypeSpec declaringType, MethodSpec add, MethodSpec remove)
                {
                        add.IsAccessor = true;
@@ -531,7 +550,7 @@ namespace Mono.CSharp
                                                        if (value == null) {
                                                                default_value = Constant.CreateConstantFromValue (ptype, null, Location.Null);
                                                        } else {
-                                                               default_value = ImportParameterConstant (value);
+                                                               default_value = ImportConstant (value);
 
                                                                if (ptype.IsEnum) {
                                                                        default_value = new EnumConstant ((Constant) default_value, ptype);
@@ -557,7 +576,7 @@ namespace Mono.CSharp
                                                } else if (value == null) {
                                                        default_value = new DefaultValueExpression (new TypeExpression (ptype, Location.Null), Location.Null);
                                                } else if (ptype.BuiltinType == BuiltinTypeSpec.Type.Decimal) {
-                                                       default_value = ImportParameterConstant (value);
+                                                       default_value = ImportConstant (value);
                                                }
                                        }
                                }
@@ -1109,7 +1128,7 @@ namespace Mono.CSharp
                                spec.TypeArguments = tparams.ToArray ();
                }
 
-               Constant ImportParameterConstant (object value)
+               Constant ImportConstant (object value)
                {
                        //
                        // Get type of underlying value as int constant can be used for object
@@ -1960,7 +1979,7 @@ namespace Mono.CSharp
                {
                        // 
                        // Report details about missing type and most likely cause of the problem.
-                       // csc reports 1683, 1684 as warnings but we report them only when used
+                       // csc used to reports 1683, 1684 (now 7069) as warnings but we report them only when used
                        // or referenced from the user core in which case compilation error has to
                        // be reported because compiler cannot continue anyway
                        //
@@ -2001,7 +2020,7 @@ namespace Mono.CSharp
                                        report.Error (731, loc, "The type forwarder for type `{0}' in assembly `{1}' has circular dependency",
                                                name, definition.DeclaringAssembly.FullName);
                                } else {
-                                       report.Error (1684, loc,
+                                       report.Error (7069, loc,
                                                "Reference to type `{0}' claims it is defined assembly `{1}', but it could not be found",
                                                name, t.MemberDefinition.DeclaringAssembly.FullName);
                                }
index 32755b36de183e1e984dafad2f764445a8e898d3..8df1be80a97852aef5909b2e0f42bf905035dd73 100644 (file)
@@ -165,6 +165,11 @@ namespace Mono.CSharp {
                        return s + parameters.GetSignatureForDocumentation ();
                }
 
+               public virtual void PrepareEmit ()
+               {
+                       parameters.ResolveDefaultValues (this);
+               }
+
                public MethodSpec Spec {
                        get { return spec; }
                }
@@ -816,8 +821,10 @@ namespace Mono.CSharp {
 
                #endregion
 
-               public virtual void PrepareEmit ()
+               public override void PrepareEmit ()
                {
+                       base.PrepareEmit ();
+
                        var mb = MethodData.DefineMethodBuilder (Parent);
 
                        if (CurrentTypeParameters != null) {
index f5ed5c1824325b6653c282568f024ced05766f6b..4549efbc3ff846832841a6010713570a2c8ecc27 100644 (file)
@@ -279,6 +279,9 @@ namespace Mono.CSharp {
                                                break;
                                        }
 
+                                       if (ts.Kind == MemberKind.MissingType)
+                                               continue;
+
                                        if (best.MemberDefinition.IsImported)
                                                best = ts;
 
@@ -1061,8 +1064,12 @@ namespace Mono.CSharp {
                                        continue;
 
                                UsingAliasNamespace uan;
-                               if (n.aliases.TryGetValue (name, out uan))
+                               if (n.aliases.TryGetValue (name, out uan)) {
+                                       if (uan.ResolvedExpression == null)
+                                               uan.Define (n);
+
                                        return uan.ResolvedExpression;
+                               }
                        }
 
                        return null;
@@ -1090,6 +1097,9 @@ namespace Mono.CSharp {
                                                        GetSignatureForError (), name);
                                        }
 
+                                       if (uan.ResolvedExpression == null)
+                                               uan.Define (this);
+
                                        return uan.ResolvedExpression;
                                }
                        }
@@ -1288,18 +1298,32 @@ namespace Mono.CSharp {
                                        for (int i = 0; i < clauses.Count; ++i) {
                                                var entry = clauses[i];
                                                if (entry.Alias != null) {
-                                                       entry.Define (this);
-                                                       if (entry.ResolvedExpression != null) {
-                                                               aliases.Add (entry.Alias.Value, (UsingAliasNamespace) entry);
-                                                       }
-
-                                                       clauses.RemoveAt (i--);
+                                                       aliases.Add (entry.Alias.Value, (UsingAliasNamespace) entry);
                                                }
                                        }
                                }
                        }
                }
 
+               protected override void DoDefineContainer ()
+               {
+                       base.DoDefineContainer ();
+
+                       if (clauses != null) {
+                               for (int i = 0; i < clauses.Count; ++i) {
+                                       var entry = clauses[i];
+
+                                       //
+                                       // Finish definition of using aliases not visited during container
+                                       // definition
+                                       //
+                                       if (entry.Alias != null && entry.ResolvedExpression == null) {
+                                               entry.Define (this);
+                                       }
+                               }
+                       }
+               }
+
                public void EnableRedefinition ()
                {
                        is_defined = false;
@@ -1612,7 +1636,8 @@ namespace Mono.CSharp {
                        // We achieve that by introducing alias-context which redirect any local
                        // namespace or type resolve calls to parent namespace
                        //
-                       resolved = NamespaceExpression.ResolveAsTypeOrNamespace (new AliasContext (ctx), false);
+                       resolved = NamespaceExpression.ResolveAsTypeOrNamespace (new AliasContext (ctx), false) ??
+                               new TypeExpression (InternalType.ErrorType, NamespaceExpression.Location);
                }
        }
 }
index 3b42095de9f9ec178b064b05272c1164345a3877..d52b1da393ea05e99971a02458a74f56cb66fbd9 100644 (file)
@@ -1756,6 +1756,13 @@ namespace Mono.CSharp
                        return base.GetSignatureForDocumentation () + parameters.GetSignatureForDocumentation ();
                }
 
+               public override void PrepareEmit ()
+               {
+                       parameters.ResolveDefaultValues (this);
+
+                       base.PrepareEmit ();
+               }
+
                protected override bool VerifyClsCompliance ()
                {
                        if (!base.VerifyClsCompliance ())
index ab0b49edfbf936ad17bd179a9669f7c0be745fb3..66b56bfe24eba36aa8d32d44f1ca66c8b22d67de 100644 (file)
@@ -2914,9 +2914,7 @@ namespace Mono.CSharp {
 
                                if (!s.Resolve (bc)) {
                                        ok = false;
-                                       if (!bc.IsInProbingMode)
-                                               statements [ix] = new EmptyStatement (s.loc);
-
+                                       statements [ix] = new EmptyStatement (s.loc);
                                        continue;
                                }
                        }
@@ -3736,13 +3734,13 @@ namespace Mono.CSharp {
                                                if (list != null) {
                                                        var list_clone = new List<LabeledStatement> ();
                                                        foreach (var lentry in list) {
-                                                               list_clone.Add (RemapLabeledStatement (lentry, lentry.Block, clonectx.RemapBlockCopy (lentry.Block)));
+                                                               list_clone.Add (RemapLabeledStatement (lentry, clonectx.RemapBlockCopy (lentry.Block)));
                                                        }
 
                                                        target.labels.Add (entry.Key, list_clone);
                                                } else {
                                                        var labeled = (LabeledStatement) entry.Value;
-                                                       target.labels.Add (entry.Key, RemapLabeledStatement (labeled, labeled.Block, clonectx.RemapBlockCopy (labeled.Block)));
+                                                       target.labels.Add (entry.Key, RemapLabeledStatement (labeled, clonectx.RemapBlockCopy (labeled.Block)));
                                                }
                                        }
 
@@ -3884,8 +3882,19 @@ namespace Mono.CSharp {
                        }
                }
 
-               static LabeledStatement RemapLabeledStatement (LabeledStatement stmt, Block src, Block dst)
+               LabeledStatement RemapLabeledStatement (LabeledStatement stmt, Block dst)
                {
+                       var src = stmt.Block;
+
+                       //
+                       // Cannot remap label block if the label was not yet cloned which
+                       // can happen in case of anonymous method inside anoynymous method
+                       // with a label. But in this case we don't care because goto cannot
+                       // jump of out anonymous method
+                       //
+                       if (src.ParametersBlock != this)
+                               return stmt;
+
                        var src_stmts = src.Statements;
                        for (int i = 0; i < src_stmts.Count; ++i) {
                                if (src_stmts[i] == stmt)
@@ -5922,7 +5931,7 @@ namespace Mono.CSharp {
                        if (expr == null)
                                return false;
 
-                       if (!TypeSpec.IsReferenceType (expr.Type)) {
+                       if (!TypeSpec.IsReferenceType (expr.Type) && expr.Type != InternalType.ErrorType) {
                                ec.Report.Error (185, loc,
                                        "`{0}' is not a reference type as required by the lock statement",
                                        expr.Type.GetSignatureForError ());
@@ -6309,32 +6318,15 @@ namespace Mono.CSharp {
                                        return null;
                                }
 
-                               //
-                               // The rules for the possible declarators are pretty wise,
-                               // but the production on the grammar is more concise.
-                               //
-                               // So we have to enforce these rules here.
-                               //
-                               // We do not resolve before doing the case 1 test,
-                               // because the grammar is explicit in that the token &
-                               // is present, so we need to test for this particular case.
-                               //
-
-                               if (initializer is Cast) {
-                                       bc.Report.Error (254, initializer.Location, "The right hand side of a fixed statement assignment may not be a cast expression");
-                                       return null;
-                               }
-
-                               initializer = initializer.Resolve (bc);
-
-                               if (initializer == null)
+                               var res = initializer.Resolve (bc);
+                               if (res == null)
                                        return null;
 
                                //
                                // Case 1: Array
                                //
-                               if (initializer.Type.IsArray) {
-                                       TypeSpec array_type = TypeManager.GetElementType (initializer.Type);
+                               if (res.Type.IsArray) {
+                                       TypeSpec array_type = TypeManager.GetElementType (res.Type);
 
                                        //
                                        // Provided that array_type is unmanaged,
@@ -6346,7 +6338,7 @@ namespace Mono.CSharp {
                                        // and T* is implicitly convertible to the
                                        // pointer type given in the fixed statement.
                                        //
-                                       ArrayPtr array_ptr = new ArrayPtr (initializer, array_type, loc);
+                                       ArrayPtr array_ptr = new ArrayPtr (res, array_type, loc);
 
                                        Expression converted = Convert.ImplicitConversionRequired (bc, array_ptr.Resolve (bc), li.Type, loc);
                                        if (converted == null)
@@ -6356,8 +6348,8 @@ namespace Mono.CSharp {
                                        // fixed (T* e_ptr = (e == null || e.Length == 0) ? null : converted [0])
                                        //
                                        converted = new Conditional (new BooleanExpression (new Binary (Binary.Operator.LogicalOr,
-                                               new Binary (Binary.Operator.Equality, initializer, new NullLiteral (loc)),
-                                               new Binary (Binary.Operator.Equality, new MemberAccess (initializer, "Length"), new IntConstant (bc.BuiltinTypes, 0, loc)))),
+                                               new Binary (Binary.Operator.Equality, res, new NullLiteral (loc)),
+                                               new Binary (Binary.Operator.Equality, new MemberAccess (res, "Length"), new IntConstant (bc.BuiltinTypes, 0, loc)))),
                                                        new NullLiteral (loc),
                                                        converted, loc);
 
@@ -6369,33 +6361,39 @@ namespace Mono.CSharp {
                                //
                                // Case 2: string
                                //
-                               if (initializer.Type.BuiltinType == BuiltinTypeSpec.Type.String) {
-                                       return new StringEmitter (initializer, li).Resolve (bc);
+                               if (res.Type.BuiltinType == BuiltinTypeSpec.Type.String) {
+                                       return new StringEmitter (res, li).Resolve (bc);
                                }
 
                                // Case 3: fixed buffer
-                               if (initializer is FixedBufferPtr) {
-                                       return new ExpressionEmitter (initializer, li);
+                               if (res is FixedBufferPtr) {
+                                       return new ExpressionEmitter (res, li);
                                }
 
+                               bool already_fixed = true;
+
                                //
                                // Case 4: & object.
                                //
-                               bool already_fixed = true;
-                               Unary u = initializer as Unary;
-                               if (u != null && u.Oper == Unary.Operator.AddressOf) {
-                                       IVariableReference vr = u.Expr as IVariableReference;
-                                       if (vr == null || !vr.IsFixed) {
-                                               already_fixed = false;
+                               Unary u = res as Unary;
+                               if (u != null) {
+                                       if (u.Oper == Unary.Operator.AddressOf) {
+                                               IVariableReference vr = u.Expr as IVariableReference;
+                                               if (vr == null || !vr.IsFixed) {
+                                                       already_fixed = false;
+                                               }
                                        }
+                               } else if (initializer is Cast) {
+                                       bc.Report.Error (254, initializer.Location, "The right hand side of a fixed statement assignment may not be a cast expression");
+                                       return null;
                                }
 
                                if (already_fixed) {
                                        bc.Report.Error (213, loc, "You cannot use the fixed statement to take the address of an already fixed expression");
                                }
 
-                               initializer = Convert.ImplicitConversionRequired (bc, initializer, li.Type, loc);
-                               return new ExpressionEmitter (initializer, li);
+                               res = Convert.ImplicitConversionRequired (bc, res, li.Type, loc);
+                               return new ExpressionEmitter (res, li);
                        }
                }
 
diff --git a/mcs/tests/gtest-629.cs b/mcs/tests/gtest-629.cs
new file mode 100644 (file)
index 0000000..7552227
--- /dev/null
@@ -0,0 +1,20 @@
+// Compiler options: -unsafe
+
+using System;
+using System.Collections.Generic;
+
+public class Program
+{
+        public unsafe static void Main ()
+        {
+               var list = new List<object> () { "" };
+               fixed (char *c = (string)list[0]) {
+                       
+               }
+
+               var list2 = new List<object> () { null };
+               fixed (byte* p = (byte[])list2[0]) {
+               }
+       
+        }
+}
\ No newline at end of file
diff --git a/mcs/tests/gtest-optional-35.cs b/mcs/tests/gtest-optional-35.cs
new file mode 100644 (file)
index 0000000..e354bd7
--- /dev/null
@@ -0,0 +1,11 @@
+using System;
+using System.Runtime.InteropServices;
+
+public static class MainClass
+{
+       public static void Main (string[] args)
+       {
+       }
+
+       public delegate Int32 FooDelegate ([In, Optional] int foo);
+}
\ No newline at end of file
index c19e0657245e5a1d3862f85b654e0489e918bdfa..0e3b29ffa48be8b6a755b11561b63b588e737e15 100644 (file)
@@ -54,17 +54,7 @@ class Test
                if ((typeof (X2).Attributes & TypeAttributes.BeforeFieldInit) == 0)
                        return 2;
                
-#if NET_2_0
-               ConstructorInfo mi = typeof(C).GetConstructors ()[0];
-        MethodBody mb = mi.GetMethodBody();
-               
-               if (mb.GetILAsByteArray ().Length != 7) {
-                       Console.WriteLine("Optimization failed");
-                       return 3;
-               }
-#endif
-                       
                Console.WriteLine ("OK");
                return 0;
        }
-}
\ No newline at end of file
+}
diff --git a/mcs/tests/test-911-lib.il b/mcs/tests/test-911-lib.il
new file mode 100644 (file)
index 0000000..b1c5e10
--- /dev/null
@@ -0,0 +1,21 @@
+.assembly extern mscorlib
+{
+}
+
+.assembly extern 'test-911-lib-missing'
+{
+}
+
+.assembly 'test-911-lib'
+{
+  .hash algorithm 0x00008004
+  .ver 0:0:0:0
+}
+
+.module 'test-911-lib'
+
+.class extern forwarder N
+{
+  .assembly extern 'test-911-lib-missing'
+}
+
diff --git a/mcs/tests/test-911.cs b/mcs/tests/test-911.cs
new file mode 100644 (file)
index 0000000..2dc4b17
--- /dev/null
@@ -0,0 +1,16 @@
+// Compiler options: -r:test-911-lib.dll
+
+class N
+{
+       public static void Foo ()
+       {
+       }
+}
+
+class X
+{
+       public static void Main ()
+       {
+               N.Foo ();
+       }
+}
\ No newline at end of file
diff --git a/mcs/tests/test-912-lib.il b/mcs/tests/test-912-lib.il
new file mode 100644 (file)
index 0000000..be90537
--- /dev/null
@@ -0,0 +1,17 @@
+.assembly extern mscorlib
+{
+}
+
+.assembly 'test-912-lib'
+{
+}
+
+.module 'test-912-lib.dll'
+
+.namespace TypeLib
+{
+  .class public auto ansi abstract Foo extends [mscorlib]System.Object
+  {
+    .field public static literal  unsigned int16 CONSTANT = int16(0x0000ffff)
+  }
+}
\ No newline at end of file
diff --git a/mcs/tests/test-912.cs b/mcs/tests/test-912.cs
new file mode 100644 (file)
index 0000000..3cda7a0
--- /dev/null
@@ -0,0 +1,18 @@
+// Compiler options: -r:test-912-lib.dll
+
+using System;
+using TypeLib;
+
+public class Bar
+{
+       public const ushort FIELD = Foo.CONSTANT;
+
+       public static int Main ()
+       {
+               Console.WriteLine (FIELD);
+               if (FIELD != 65535)
+                       return 1;
+
+               return 0;
+       }
+}
\ No newline at end of file
diff --git a/mcs/tests/test-913.cs b/mcs/tests/test-913.cs
new file mode 100644 (file)
index 0000000..e35eaff
--- /dev/null
@@ -0,0 +1,16 @@
+namespace N 
+{
+       using X = A.B;
+
+       class A
+       {
+               public class B {}
+
+               public class C : X {}
+
+               public static void Main ()
+               {
+                       new C ();
+               }
+       }
+}
\ No newline at end of file
diff --git a/mcs/tests/test-anon-173.cs b/mcs/tests/test-anon-173.cs
new file mode 100644 (file)
index 0000000..52d2b31
--- /dev/null
@@ -0,0 +1,17 @@
+using System;
+
+class MainClass
+{
+       public static void Main ()
+       {
+               SomeMethod (() => {
+                       Func<int,int> f = b => b;
+               retry:
+                       goto retry;
+               });
+       }
+
+       static void SomeMethod (Action a)
+       {
+       }
+}
diff --git a/mcs/tests/test-pragma-unrecognized.cs b/mcs/tests/test-pragma-unrecognized.cs
new file mode 100644 (file)
index 0000000..0bae6d4
--- /dev/null
@@ -0,0 +1,9 @@
+// Compiler options: -warn:4
+// This test should print only: warning CS1633: Unrecognized #pragma directive
+
+#pragma xxx some unrecognized text
+
+public class C
+{
+  public static void Main () {}
+}
index be487c73d38a79f8c49673ed417e277c3a561cab..c38d69a64dbc4b171ad4fcb2677e57b6ceffce18 100644 (file)
       </method>\r
     </type>\r
   </test>\r
+  <test name="gtest-629.cs">\r
+    <type name="Program">\r
+      <method name="Void Main()" attrs="150">\r
+        <size>135</size>\r
+      </method>\r
+      <method name="Void .ctor()" attrs="6278">\r
+        <size>7</size>\r
+      </method>\r
+    </type>\r
+  </test>\r
   <test name="gtest-anontype-01.cs">\r
     <type name="Test">\r
       <method name="Int32 Main()" attrs="150">\r
       </method>\r
     </type>\r
   </test>\r
+  <test name="gtest-optional-35.cs">\r
+    <type name="MainClass">\r
+      <method name="Void Main(System.String[])" attrs="150">\r
+        <size>2</size>\r
+      </method>\r
+    </type>\r
+    <type name="MainClass+FooDelegate">\r
+      <method name="Int32 Invoke(Int32)" attrs="454">\r
+        <size>0</size>\r
+      </method>\r
+      <method name="System.IAsyncResult BeginInvoke(Int32, System.AsyncCallback, System.Object)" attrs="454">\r
+        <size>0</size>\r
+      </method>\r
+      <method name="Int32 EndInvoke(System.IAsyncResult)" attrs="454">\r
+        <size>0</size>\r
+      </method>\r
+      <method name="Void .ctor(Object, IntPtr)" attrs="6278">\r
+        <size>0</size>\r
+      </method>\r
+    </type>\r
+  </test>\r
   <test name="gtest-partial-01.cs">\r
     <type name="B`1[U]">\r
       <method name="Void .ctor()" attrs="6278">\r
       </method>\r
     </type>\r
   </test>\r
+  <test name="test-911.cs">\r
+    <type name="N">\r
+      <method name="Void Foo()" attrs="150">\r
+        <size>2</size>\r
+      </method>\r
+      <method name="Void .ctor()" attrs="6278">\r
+        <size>7</size>\r
+      </method>\r
+    </type>\r
+    <type name="X">\r
+      <method name="Void Main()" attrs="150">\r
+        <size>7</size>\r
+      </method>\r
+      <method name="Void .ctor()" attrs="6278">\r
+        <size>7</size>\r
+      </method>\r
+    </type>\r
+  </test>\r
+  <test name="test-912.cs">\r
+    <type name="Bar">\r
+      <method name="Int32 Main()" attrs="150">\r
+        <size>20</size>\r
+      </method>\r
+      <method name="Void .ctor()" attrs="6278">\r
+        <size>7</size>\r
+      </method>\r
+    </type>\r
+  </test>\r
+  <test name="test-913.cs">\r
+    <type name="N.A">\r
+      <method name="Void Main()" attrs="150">\r
+        <size>8</size>\r
+      </method>\r
+      <method name="Void .ctor()" attrs="6278">\r
+        <size>7</size>\r
+      </method>\r
+    </type>\r
+    <type name="N.A+B">\r
+      <method name="Void .ctor()" attrs="6278">\r
+        <size>7</size>\r
+      </method>\r
+    </type>\r
+    <type name="N.A+C">\r
+      <method name="Void .ctor()" attrs="6278">\r
+        <size>7</size>\r
+      </method>\r
+    </type>\r
+  </test>\r
   <test name="test-92.cs">\r
     <type name="Outer">\r
       <method name="Void .ctor()" attrs="6278">\r
       </method>\r
     </type>\r
   </test>\r
+  <test name="test-anon-173.cs">\r
+    <type name="MainClass">\r
+      <method name="Void Main()" attrs="150">\r
+        <size>36</size>\r
+      </method>\r
+      <method name="Void SomeMethod(System.Action)" attrs="145">\r
+        <size>2</size>\r
+      </method>\r
+      <method name="Void &lt;Main&gt;m__0()" attrs="145">\r
+        <size>36</size>\r
+      </method>\r
+      <method name="Int32 &lt;Main&gt;m__1(Int32)" attrs="145">\r
+        <size>9</size>\r
+      </method>\r
+      <method name="Void .ctor()" attrs="6278">\r
+        <size>7</size>\r
+      </method>\r
+    </type>\r
+  </test>\r
   <test name="test-anon-18.cs">\r
     <type name="A">\r
       <method name="Void Invoke()" attrs="454">\r
       </method>\r
     </type>\r
   </test>\r
+  <test name="test-pragma-unrecognized.cs">\r
+    <type name="C">\r
+      <method name="Void Main()" attrs="150">\r
+        <size>2</size>\r
+      </method>\r
+      <method name="Void .ctor()" attrs="6278">\r
+        <size>7</size>\r
+      </method>\r
+    </type>\r
+  </test>\r
   <test name="test-primary-ctor-01.cs">\r
     <type name="Simple">\r
       <method name="Int32 get_Property()" attrs="2177">\r
index 006135d33b8f06ad1306cd86bb6943bdc7e1f93f..afb9ddc89bf6b5dac17d5952cd4728bae6c98aa2 100644 (file)
@@ -1,6 +1,6 @@
 thisdir = tools
 
-per_profile_dirs = \
+net_4_5_dirs := \
        al              \
        linker          \
        tuner           \
@@ -13,10 +13,7 @@ per_profile_dirs = \
        resgen          \
        gacutil         \
        wsdl            \
-       xbuild
-
-net_4_0_dirs := \
-       $(per_profile_dirs) \
+       xbuild          \
        csharp          \
        corcompare      \
        compiler-tester \
@@ -50,15 +47,10 @@ net_4_0_dirs := \
        ikdasm          \
        symbolicate
 
-net_2_0_dirs := \
-       $(per_profile_dirs)
-
 build_SUBDIRS = gacutil security culevel
-net_4_0_SUBDIRS := $(net_4_0_dirs) $(basic_SUBDIRS)
-net_4_5_SUBDIRS := $(net_4_0_SUBDIRS)
+net_4_5_SUBDIRS := $(net_4_5_dirs)
 
-SUBDIRS = $(basic_SUBDIRS) $(net_2_0_dirs)
-DIST_SUBDIRS = $(SUBDIRS) $(net_4_0_dirs)
+SUBDIRS = $(basic_SUBDIRS) $(net_4_5_dirs)
 
 include ../build/rules.make
 
index b7ff2b4265d24b9b8d2887063f3a53aab88c5719..caf1a67a5b2a322c1a2020f6dbcec1b674f9e242 100644 (file)
@@ -538,29 +538,11 @@ namespace Mono.AssemblyLinker
 
                private void SetKeyPair (AssemblyName aname)
                {
-#if ONLY_1_1
-                       switch (delaysign) {
-                       case DelaySign.Yes:
-                               AddCattr (typeof (AssemblyDelaySignAttribute),
-                                       typeof (bool), true);
-                               break;
-                       case DelaySign.No:
-                               AddCattr (typeof (AssemblyDelaySignAttribute),
-                                       typeof (bool), false);
-                               break;
-                       }
-#endif
-
                        if (keyfile != null) {
                                if (!File.Exists (keyfile)) {
                                        Report (1044, String.Format ("Couldn't open '{0}' key file.", keyfile));
                                }
 
-#if ONLY_1_1
-                               AddCattr (typeof (AssemblyKeyFileAttribute),
-                                       keyfile);
-#endif
-
                                using (FileStream fs = File.OpenRead (keyfile)) {
                                        byte[] data = new byte [fs.Length];
                                        try {
@@ -590,10 +572,6 @@ namespace Mono.AssemblyLinker
                                        fs.Close ();
                                }
                        } else if (keyname != null) {
-#if ONLY_1_1
-                               AddCattr (typeof (AssemblyKeyNameAttribute),
-                                       keyname);
-#endif
                                // delay-sign doesn't apply to key containers
                                aname.KeyPair = new StrongNameKeyPair (keyname);
                        }
index 430f2c2c8851e6cc7a0d08e6c6ea532e8bc87ae1..b6276ac2490d3fa84f7b6297386aa13378685406 100644 (file)
@@ -269,11 +269,32 @@ namespace Mono.Linker.Steps {
 
                void MarkIfType (CustomAttributeArgument argument)
                {
-                       if (argument.Type.FullName != "System.Type")
-                               return;
+                       var at = argument.Type;
+                       if (at.IsArray) {
+                               var et = at.GetElementType ();
+                               if (et.Namespace != "System" || et.Name != "Type")
+                                       return;
+
+                               MarkType (et);
+                               foreach (var cac in (CustomAttributeArgument[]) argument.Value)
+                                       MarkWithResolvedScope ((TypeReference) cac.Value);
+                       } else if (at.Namespace == "System" && at.Name == "Type") {
+                               MarkType (argument.Type);
+                               MarkWithResolvedScope ((TypeReference) argument.Value);
+                       }
+               }
 
-                       MarkType (argument.Type);
-                       MarkType ((TypeReference) argument.Value);
+               // custom attributes encoding means it's possible to have a scope that will point into a PCL facade
+               // even if we (just before saving) will resolve all type references (bug #26752)
+               void MarkWithResolvedScope (TypeReference type)
+               {
+                       // we cannot set the Scope of a TypeSpecification so there's no point in resolving it
+                       if ((type == null) || (type is TypeSpecification))
+                               return;
+                       var td = type.Resolve ();
+                       if (td != null)
+                               type.Scope = td.Scope;
+                       MarkType (type);
                }
 
                protected bool CheckProcessed (IMetadataTokenProvider provider)
index a9e79a8e9fa0aad2e0e72aa162deeb42fcc2102d..4be186fbcb7e90e09422b40d751f327fc385ef74 100644 (file)
@@ -3,6 +3,7 @@ SUBDIRS =
 include ../../build/rules.make
 
 PROGRAM = monop.exe
+LOCAL_MCS_FLAGS += -d:NO_AUTHENTICODE,STATIC,NO_SYMBOL_WRITER
 
 CLEAN_FILES = monop.exe monop2.exe *.mdb
 
index cd1f6967e76767b981b1c8d7cb9c4ff62ec64d18..b7fc35fb9218ad923399f7c319c9ece0af022d6b 100644 (file)
@@ -26,6 +26,9 @@
 
 using System;
 using System.Collections;
+#if STATIC
+using Type=IKVM.Reflection.Type;
+#endif
 
 class TypeSorter : IComparer
 {
index af9012a90444aefcb2c438dfa97ec38f2a5ecb15..9fe98ed6d19ffb59b9cb48b4569c19b4190bd86f 100644 (file)
@@ -1,6 +1,9 @@
 //
 // monop -- a semi-clone of javap
 //
+// TODO:
+//   Dump all attributes.
+//
 // Authors:
 //     Ben Maurer (bmaurer@users.sourceforge.net)
 //     John Luke  (john.luke@gmail.com)
@@ -36,11 +39,15 @@ using System.CodeDom.Compiler;
 using System.Collections;
 using System.Diagnostics;
 using System.IO;
-using System.Reflection;
+using IKVM.Reflection;
 using System.Text;
 using Mono.CSharp;
+using Type=IKVM.Reflection.Type;
 
 class MonoP {
+       static Universe universe = new Universe(UniverseOptions.EnableFunctionPointers | UniverseOptions.ResolveMissingMembers | UniverseOptions.DisablePseudoCustomAttributeRetrieval);
+       static Assembly mscorlib;
+       static Type obsolete_attribute;
        static string assembly;
        
        // very common namespaces, all in corlib
@@ -49,7 +56,7 @@ class MonoP {
                "System.Collections",
                "System.Reflection",
                "System.Text",
-               "System.IO"
+               "System.IO",
        };
        
        static readonly string [] common_assemblies = {
@@ -62,8 +69,12 @@ class MonoP {
        static readonly string [] common_ns = {
                "System.Xml",
                "System.Web",
+               "Foundation",
+               "CoreFoundation",
+               "CoreGraphics",
+               "UIKit",
                "Gtk",
-               "GLib"
+               "GLib",
        };
        
        static Type GetType (string tname, bool ignoreCase)
@@ -72,9 +83,9 @@ class MonoP {
                if (assembly != null) {
                        Assembly a = GetAssembly (assembly, true);
                        t = a.GetType (tname, false, ignoreCase);
-               } else 
-                       t = Type.GetType (tname, false, ignoreCase);
-
+               } else {
+                       t = mscorlib.GetType (tname, false, ignoreCase);
+               }
                return t;
        }
        
@@ -86,6 +97,7 @@ class MonoP {
 
                string [] assemblies = GetKnownAssemblyNames ();
                for (int i = 0; i < assemblies.Length; i++) {
+                       Console.WriteLine ("Loading {0}", assemblies[i]);
                        Assembly a = GetAssembly (assemblies [i], false);
                        if (a == null)
                                continue;
@@ -117,6 +129,11 @@ class MonoP {
 
        static string [] GetKnownAssemblyNames ()
        {
+               Console.WriteLine (options.PublicDir);
+               if (options.Style == "xios" || options.Style == "xand"){
+                       return Directory.GetFiles (options.PublicDir, "*.dll");
+               }
+               
                Process p = new Process ();
                p.StartInfo.UseShellExecute = false;
                p.StartInfo.RedirectStandardOutput = true;
@@ -157,22 +174,13 @@ class MonoP {
                try {
                        // if it exists try to use LoadFrom
                        if (File.Exists (assembly))
-                               a = Assembly.LoadFrom (assembly);
-                       // if it looks like a fullname try that
-                       else if (assembly.Split (',').Length == 4)
-                               a = Assembly.Load (assembly);
-                       // see if MONO_PATH has it
+                               a = universe.LoadFile (assembly);
                        else
                                a = LoadFromMonoPath (assembly);
                } catch {
                        // ignore exception it gets handled below
                }
 
-               // last try partial name
-               // this (apparently) is exception safe
-               if (a == null)
-                       a = Assembly.LoadWithPartialName (assembly);
-
                if (a == null && exit) {
                        Console.WriteLine ("Could not load {0}", MonoP.assembly);
                        Environment.Exit (1);
@@ -189,7 +197,7 @@ class MonoP {
                foreach (string path in paths) {        
                        string apath = Path.Combine (path, assembly);
                        if (File.Exists (apath))
-                               return Assembly.LoadFrom (apath);       
+                               return universe.LoadFile (apath);       
                }
                return null;
        }
@@ -213,13 +221,6 @@ class MonoP {
                Console.WriteLine ();
                Console.WriteLine ("Assembly Information:");
 
-               object[] cls = a.GetCustomAttributes (typeof (CLSCompliantAttribute), false);
-               if (cls.Length > 0) {
-                       CLSCompliantAttribute cca = cls[0] as CLSCompliantAttribute;
-                       if (cca.IsCompliant)
-                               Console.WriteLine ("[CLSCompliant]");
-               }
-
                foreach (string ai in a.ToString ().Split (','))
                        Console.WriteLine (ai.Trim ());
                        
@@ -229,9 +230,9 @@ class MonoP {
 
                int obsolete_count = 0;
                foreach (Type t in types) {
-                       if (filter_obsolete && t.IsDefined (typeof (ObsoleteAttribute), false))
-                               obsolete_count ++;
-                       else 
+                       if (filter_obsolete && t.IsDefined (obsolete_attribute, false))
+                               obsolete_count++;
+                       else
                                Console.WriteLine (t.FullName);
                }
 
@@ -240,7 +241,7 @@ class MonoP {
        
        internal static void Completion (string prefix)
        {
-               foreach (Type t in typeof (object).Assembly.GetExportedTypes ()) {
+               foreach (Type t in mscorlib.GetExportedTypes ()) {
                        if (t.Name.StartsWith (prefix)) {
                                if (Array.IndexOf (v_common_ns, t.Namespace) != -1) {
                                        Console.WriteLine (t.Name);
@@ -281,13 +282,6 @@ class MonoP {
        {
                Assembly a = GetAssembly (assembly, true);
 
-               object[] cls = a.GetCustomAttributes (typeof (CLSCompliantAttribute), false);
-               if (cls.Length > 0) {
-                       CLSCompliantAttribute cca = cls[0] as CLSCompliantAttribute;
-                       if (cca.IsCompliant)
-                               Console.WriteLine ("[CLSCompliant]");
-               }
-
                foreach (string ai in a.ToString ().Split (','))
                        Console.WriteLine (ai.Trim ());
                        
@@ -297,20 +291,28 @@ class MonoP {
                
                var sw = new StreamWriter (Console.OpenStandardOutput (), Console.Out.Encoding);                                
                foreach (Type t in types) {
-                       if (filter_obsolete && t.IsDefined (typeof (ObsoleteAttribute), false))
+                       if (filter_obsolete && t.IsDefined (obsolete_attribute, false))
                                continue;
 
-                       new Outline (t, sw, true, show_private, filter_obsolete).OutlineType ();
+                       new Outline (universe, mscorlib, t, sw, true, show_private, filter_obsolete).OutlineType ();
                }
                sw.Flush ();
        }
+
+       static Options options = new Options ();
        
        static void Main (string [] args)
        {
-               Options options = new Options ();
                if (!options.ProcessArgs (args))
                        return;
                
+               if (options.Style == null)
+                       mscorlib = universe.LoadFile (typeof (int).Assembly.Location);
+               else
+                       mscorlib = universe.LoadFile (Path.Combine (options.PublicDir, "mscorlib.dll"));
+                                                     
+               obsolete_attribute = mscorlib.GetType ("System.ObsoleteAttribute");
+               
                if (options.AssemblyReference != null) {
                        assembly = options.AssemblyReference;
 
@@ -327,12 +329,13 @@ class MonoP {
                                }
                        }
                }
-
+               
                string message = null;
                string tname = options.Type;
                Type t = null;
                int count;
 
+
                if (options.Search) {
                        string matches = SearchTypes (tname, ref t, out count);
 
@@ -364,6 +367,8 @@ class MonoP {
                        foreach (string assm in GetKnownAssemblyNames ()) {
                                try {
                                        Assembly a = GetAssembly (assm, false);
+                                       if (a == null)
+                                               continue;
                                        t = a.GetType (tname, false, true);
                                        if (t != null) {
                                                message = String.Format ("{0} is included in the {1} assembly.",
@@ -380,7 +385,8 @@ class MonoP {
                                                        goto found;
                                                }
                                        }
-                               } catch {
+                               } catch (Exception e){
+                                       Console.WriteLine ("Failure: " + e);
                                }
                        }
                }
@@ -395,7 +401,7 @@ class MonoP {
                // This gets us nice buffering
                //
                StreamWriter sw = new StreamWriter (Console.OpenStandardOutput (), Console.Out.Encoding);                               
-               new Outline (t, sw, options.DeclaredOnly, options.ShowPrivate, options.FilterObsolete).OutlineType ();
+               new Outline (universe, mscorlib, t, sw, options.DeclaredOnly, options.ShowPrivate, options.FilterObsolete).OutlineType ();
                sw.Flush ();
 
                if (message != null)
index f3ec5b1d560e7a76cfb1b00040acf865855fba11..4b9bc5adf7a3cc4cf91b4ef881e6b7f2ecbdcb0a 100644 (file)
@@ -2,3 +2,15 @@ monop.cs
 options.cs
 outline.cs
 TypeSorter.cs
+../../class/Mono.CompilerServices.SymbolWriter/MonoSymbolFile.cs
+../../class/Mono.CompilerServices.SymbolWriter/MonoSymbolTable.cs
+../../class/Mono.CompilerServices.SymbolWriter/SourceMethodBuilder.cs
+
+../../class/Mono.Security/Mono.Security.Cryptography/CryptoConvert.cs
+../../../external/ikvm/reflect/*.cs
+../../../external/ikvm/reflect/Emit/*.cs
+../../../external/ikvm/reflect/Metadata/*.cs
+../../../external/ikvm/reflect/Reader/*.cs
+../../../external/ikvm/reflect/Writer/*.cs
+../../../external/ikvm/reflect/Impl/ITypeOwner.cs
+../../../external/ikvm/reflect/Impl/SymbolSupport.cs
index fa1a10dda3460f0322c9ec13357830d3071f2076..92b6f7d2933e95b9723656b4b0f035fb373d4e87 100644 (file)
@@ -36,6 +36,8 @@ public class Options
        public bool ShowPrivate = false;
        public string AssemblyReference = null;
        public string Type = null;
+       public string PublicDir = null;
+       public string Style = null;
 
        public Options ()
        {
@@ -52,62 +54,70 @@ public class Options
 
                for (int i = 0; i < args.Length; i++) {
                        switch (args[i]) {
-                               case "-h":
-                               case "--help":
-                                       PrintHelp ();
-                                       return false;
-                               case "--runtime-version":
-                                       PrintRuntimeVersion ();
-                                       return false;
-                               case "-d":
-                               case "--declared-only":
-                                       DeclaredOnly = true;
-                                       break;
-                               case "--filter-obsolete":
-                               case "-f":
-                                       FilterObsolete = true;
-                                       break;
-                               case "-p":
-                               case "--private":
-                                       ShowPrivate = true;
-                                       break;
-                               case "--refs":
-                                       PrintRefs = true;
-                                       break;
-                               case "-s":
-                               case "-k":
-                               case "--search":
-                                       Search = true;
-                                       break;
-                               case "-c":
-                                       i++;
-                                       if (i < args.Length)
-                                               MonoP.Completion (args[i]);
-                                       return false;
-                               case "-r":
-                                       i++;
-                                       if (i < args.Length)
-                                               AssemblyReference = args[i];
-                                       break;
-                               case "-a":
-                                       ShowAll = true;
+                       case "-h":
+                       case "--help":
+                               PrintHelp ();
+                       return false;
+                       case "--runtime-version":
+                               PrintRuntimeVersion ();
+                               return false;
+                       case "-d":
+                       case "--declared-only":
+                               DeclaredOnly = true;
+                       break;
+                       case "--filter-obsolete":
+                       case "-f":
+                               FilterObsolete = true;
+                       break;
+                       case "-p":
+                       case "--private":
+                               ShowPrivate = true;
+                       break;
+                       case "--refs":
+                               PrintRefs = true;
+                               break;
+                       case "-xi":
+                               PublicDir = "/Library/Frameworks/Xamarin.iOS.framework/Versions/Current/lib/mono/Xamarin.iOS";
+                               Style = "xios";
+                               break;
+                       case "-xa":
+                               PublicDir = "/Library/Frameworks/Xamarin.iOS.framework/Versions/Current/lib/mono/2.1";
+                               Style = "xand";
+                               break;
+                       case "-s":
+                       case "-k":
+                       case "--search":
+                               Search = true;
+                       break;
+                       case "-c":
+                               i++;
+                               if (i < args.Length)
+                                       MonoP.Completion (args[i]);
+                               return false;
+                       case "-r":
+                               i++;
+                               if (i < args.Length)
+                                       AssemblyReference = args[i];
+                               break;
+                       case "-a":
+                               ShowAll = true;
+                               break;
+                       default:
+                               if (args[i].StartsWith ("-r:") || args[i].StartsWith ("/r:")) {
+                                       AssemblyReference = args [i].Substring (3);
                                        break;
-                               default:
-                                       if (args[i].StartsWith ("-r:") || args[i].StartsWith ("/r:")) {
-                                               AssemblyReference = args [i].Substring (3);
-                                               break;
-                                       }
-
-                                       // The first unrecognizable option becomes
-                                       // the type to look up
-                                       if (Type == null) {
-                                               Type = args[i];
-                                               break;
-                                       }
-
-                                       // others are ignored
-                                       Console.WriteLine ("ignored: {0}", args[i]);
+                               }
+                               
+                               // The first unrecognizable option becomes
+                               // the type to look up
+                               if (Type == null) {
+                                       Type = args[i];
                                        break;
+                               }
+                               
+                               // others are ignored
+                               Console.WriteLine ("ignored: {0}", args[i]);
+                               break;
                        }
                }
 
@@ -135,6 +145,8 @@ public class Options
                Console.WriteLine ("\t--refs\t\t\tPrint a list of the referenced assemblies for an assembly");
                Console.WriteLine ("\t--runtime-version\tPrint runtime version");
                Console.WriteLine ("\t--search,-s,-k\t\tSearch through all known namespaces");
+               Console.WriteLine ("\t--xi\t\tSet search style to Xamarin.iOS");
+               Console.WriteLine ("\t--xa\t\tSet search style to Xamarin.Android");
                Console.WriteLine ("\t--a\t\tShows all the types declare in the specified assembly");
        }
 }
index db055e726d5ac07873bf423a4c606c377ca9e684..63b2359b3dd2bf09dfd902604fa2e9b007a6b00b 100644 (file)
 //
 
 using System;
-using System.Reflection;
 using System.Collections;
 using System.CodeDom.Compiler;
 using System.IO;
 using System.Text;
+#if STATIC
+using IKVM.Reflection;
+using Type=IKVM.Reflection.Type;
+#else
+using System.Reflection;
+#endif
 
 namespace Mono.CSharp {
 public class Outline {
-
        bool declared_only;
        bool show_private;
        bool filter_obsolete;
        
        IndentedTextWriter o;
        Type t;
+       Type type_multicast_delegate, type_object, type_value_type, type_int, type_flags_attribute, type_obsolete_attribute, type_param_array_attribute;
+       
+#if STATIC
+       Universe universe;
+       Assembly mscorlib;
+
+       public Outline (System.Type t, TextWriter output, bool declared_only, bool show_private, bool filter_obsolete)
+       {
+               throw new NotImplementedException ();
+       }
        
+       public Outline (Universe universe, Assembly mscorlib, Type t, TextWriter output, bool declared_only, bool show_private, bool filter_obsolete)
+       {
+               if (universe == null)
+                       throw new ArgumentNullException ("universe");
+               if (mscorlib == null)
+                       throw new ArgumentNullException ("mscorlib");
+               this.universe = universe;
+               this.mscorlib = mscorlib;
+               this.t = t;
+               this.o = new IndentedTextWriter (output, "\t");
+               this.declared_only = declared_only;
+               this.show_private = show_private;
+               this.filter_obsolete = filter_obsolete;
+
+               type_multicast_delegate = mscorlib.GetType("System.MulticastDelegate");
+               type_object = mscorlib.GetType ("System.Object");
+               type_value_type = mscorlib.GetType ("System.ValueType");
+               type_int = mscorlib.GetType ("System.Int32");
+               type_flags_attribute = mscorlib.GetType ("System.FlagsAttribute");
+               type_obsolete_attribute = mscorlib.GetType ("System.ObsoleteAttribute");
+               type_param_array_attribute = mscorlib.GetType ("System.ParamArrayAttribute");
+       }
+#else
        public Outline (Type t, TextWriter output, bool declared_only, bool show_private, bool filter_obsolete)
        {
                this.t = t;
@@ -53,7 +90,16 @@ public class Outline {
                this.declared_only = declared_only;
                this.show_private = show_private;
                this.filter_obsolete = filter_obsolete;
+
+               type_multicast_delegate = typeof (System.MulticastDelegate);
+               type_object = typeof (object);
+               type_value_type = typeof (ValueType);
+               type_int = typeof (int);
+               type_flags_attribute = typeof (FlagsAttribute);
+               type_obsolete_attribute = typeof (ObsoleteAttribute);
+               type_param_array_attribute = typeof (ParamArrayAttribute);
        }
+#endif
 
        public void OutlineType ()
         {
@@ -62,7 +108,7 @@ public class Outline {
                OutlineAttributes ();
                o.Write (GetTypeVisibility (t));
                
-               if (t.IsClass && !t.IsSubclassOf (typeof (System.MulticastDelegate))) {
+               if (t.IsClass && !t.IsSubclassOf (type_multicast_delegate)) {
                        if (t.IsSealed)
                                o.Write (t.IsAbstract ? " static" : " sealed");
                        else if (t.IsAbstract)
@@ -76,7 +122,7 @@ public class Outline {
                Type [] interfaces = (Type []) Comparer.Sort (TypeGetInterfaces (t, declared_only));
                Type parent = t.BaseType;
 
-               if (t.IsSubclassOf (typeof (System.MulticastDelegate))) {
+               if (t.IsSubclassOf (type_multicast_delegate)) {
                        MethodInfo method;
 
                        method = t.GetMethod ("Invoke");
@@ -95,11 +141,11 @@ public class Outline {
                }
                
                o.Write (GetTypeName (t));
-               if (((parent != null && parent != typeof (object) && parent != typeof (ValueType)) || interfaces.Length != 0) && ! t.IsEnum) {
+               if (((parent != null && parent != type_object && parent != type_value_type) || interfaces.Length != 0) && ! t.IsEnum) {
                        first = true;
                        o.Write (" : ");
                        
-                       if (parent != null && parent != typeof (object) && parent != typeof (ValueType)) {
+                       if (parent != null && parent != type_object && parent != type_value_type) {
                                o.Write (FormatType (parent));
                                first = false;
                        }
@@ -113,8 +159,8 @@ public class Outline {
                }
 
                if (t.IsEnum) {
-                       Type underlyingType = System.Enum.GetUnderlyingType (t);
-                       if (underlyingType != typeof (int))
+                       Type underlyingType = t.GetEnumUnderlyingType ();
+                       if (underlyingType != type_int)
                                o.Write (" : {0}", FormatType (underlyingType));
                }
                WriteGenericConstraints (t.GetGenericArguments ());
@@ -256,8 +302,12 @@ public class Outline {
                        if (first)
                                o.WriteLine ();
                        first = false;
-                       
+
+#if STATIC
+                       new Outline (universe, mscorlib, ntype, o, declared_only, show_private, filter_obsolete).OutlineType ();
+#else
                        new Outline (ntype, o, declared_only, show_private, filter_obsolete).OutlineType ();
+#endif
                }
                
                o.Indent--; o.WriteLine ("}");
@@ -280,20 +330,21 @@ public class Outline {
                if (t.IsSerializable)
                        o.WriteLine ("[Serializable]");
 
-               if (t.IsDefined (typeof (System.FlagsAttribute), true))
+               if (t.IsDefined (type_flags_attribute, true))
                        o.WriteLine ("[Flags]");
 
-               if (t.IsDefined (typeof (System.ObsoleteAttribute), true))
+               if (t.IsDefined (type_obsolete_attribute, true))
                        o.WriteLine ("[Obsolete]");
        }
 
        void OutlineMemberAttribute (MemberInfo mi)
        {
-               if (!mi.IsDefined (typeof (System.ObsoleteAttribute), false))
-                       return;
-               var oa = mi.GetCustomAttributes (typeof (System.ObsoleteAttribute), false) [0] as ObsoleteAttribute;
-               var msg = oa.Message;
-               o.WriteLine ("[Obsolete{0}]", msg == null || msg == "" ? "" : string.Format ("(\"{0}\")", msg));
+               var attrs = mi.GetCustomAttributesData ();
+               if (attrs.Count > 0)
+                       o.WriteLine ("");
+               
+               foreach (var attr in attrs)
+                       o.WriteLine (attr);
        }
        
        void OutlineEvent (EventInfo ei)
@@ -425,7 +476,7 @@ public class Outline {
                        if (p.ParameterType.IsByRef) {
                                o.Write (p.IsOut ? "out " : "ref ");
                                o.Write (FormatType (p.ParameterType.GetElementType ()));
-                       } else if (p.IsDefined (typeof (ParamArrayAttribute), false)) {
+                       } else if (p.IsDefined (type_param_array_attribute, false)) {
                                o.Write ("params ");
                                o.Write (FormatType (p.ParameterType));
                        } else {
@@ -454,7 +505,7 @@ public class Outline {
                o.Write (" ");
                o.Write (fi.Name);
                if (fi.IsLiteral) { 
-                       object v = fi.GetValue (this);
+                       object v = fi.GetRawConstantValue ();
 
                        // TODO: Escape values here
                        o.Write (" = ");
@@ -463,7 +514,7 @@ public class Outline {
                        else if (v is string)
                                o.Write ("\"{0}\"", v);
                        else
-                               o.Write (fi.GetValue (this));
+                               o.Write (fi.GetRawConstantValue ());
                }
                o.Write (";");
        }
@@ -521,12 +572,12 @@ public class Outline {
                return null;
        }
 
-       static string GetTypeKind (Type t)
+       string GetTypeKind (Type t)
        {
                if (t.IsEnum)
                        return "enum";
                if (t.IsClass) {
-                       if (t.IsSubclassOf (typeof (System.MulticastDelegate)))
+                       if (t.IsSubclassOf (type_multicast_delegate))
                                return "delegate";
                        else
                                return "class";
@@ -583,6 +634,8 @@ public class Outline {
                        return t.ToString ();
                
                if (!type.StartsWith ("System.")) {
+                       if (type.IndexOf (".") == -1)
+                               return type;
                        if (t.Namespace == this.t.Namespace)
                                return t.Name;
                        return type;
@@ -716,13 +769,13 @@ public class Outline {
                                GenericParameterAttributes.DefaultConstructorConstraint
                        };
                        
-                       if (t.BaseType != typeof (object) || ifaces.Length != 0 || attrs != 0) {
+                       if (t.BaseType != type_object || ifaces.Length != 0 || attrs != 0) {
                                o.Write (" where ");
                                o.Write (FormatType (t));
                                o.Write (" : ");
                        }
 
-                       if (t.BaseType != typeof (object)) {
+                       if (t.BaseType != type_object) {
                                o.Write (FormatType (t.BaseType));
                                first = false;
                        }
@@ -817,7 +870,7 @@ public class Outline {
                if (show_private)
                        return true;
 
-               if (filter_obsolete && mi.IsDefined (typeof (ObsoleteAttribute), false))
+               if (filter_obsolete && mi.IsDefined (type_obsolete_attribute, false))
                        return false;
                
                switch (mi.MemberType) {
@@ -905,8 +958,6 @@ public class Comparer : IComparer  {
                Type type1 = (Type) a;
                Type type2 = (Type) b;
 
-               if (type1.IsSubclassOf (typeof (System.MulticastDelegate)) != type2.IsSubclassOf (typeof (System.MulticastDelegate)))
-                               return (type1.IsSubclassOf (typeof (System.MulticastDelegate)))? -1:1;
                return string.Compare (type1.Name, type2.Name);
                        
        }
index 03c07bed4e18dd559967eac8f888f763b34c61ac..b4680fb2de5a1077153aaa917dc986c6b793ef23 100644 (file)
@@ -141,6 +141,9 @@ namespace Mono.Tuner {
 
                        Annotations.Mark (type);
 
+                       if (!attribute.HasFields)
+                               return;
+
                        foreach (var named_argument in attribute.Fields)
                                if (named_argument.Name == "AllMembers" && (bool) named_argument.Argument.Value)
                                        Annotations.SetPreserve (type, TypePreserve.All);
index df6d4b31c6331e6c8a11ac91d40802747c1dee77..1bb6d6fb0e14801a6f750a69ab49737510b7e652 100644 (file)
@@ -35,6 +35,10 @@ namespace Mono.Tuner {
 
                protected virtual bool IsPreservedAttribute (CustomAttribute attribute)
                {
+                       // [assembly: Preserve (type)] does not preserve all the code in the assembly, in fact it might
+                       // not preserve anything in _this_ assembly, but something in a separate assembly (reference)
+                       if (attribute.HasConstructorArguments)
+                               return false;
                        return (attribute.AttributeType.Name == "PreserveAttribute");
                }
 
index 2642ba02696342bfcc17e4c5fe5beaa453041293..fdf43ccd488b2b7019eda123ea3625c93ae92179 100644 (file)
                        Text="OutDir property must end with a slash."/>
        </Target>
 
-       <Target Name="PrepareForBuild">
+       <PropertyGroup>
+               <PrepareForBuildDependsOn>AssignLinkMetadata</PrepareForBuildDependsOn>
+       </PropertyGroup>
+       <Target Name="PrepareForBuild" DependsOnTargets="$(PrepareForBuildDependsOn)">
                <Message Importance="High" Text="Configuration: $(Configuration) Platform: $(Platform)"/>
 
                <!-- Look for app.config, if $(AppConfig) is specified, then use that. Else look in
                />
        </Target>
 
+       <Target Name="AssignLinkMetadata">
+           <AssignLinkMetadata Items="@(EmbeddedResource)" Condition="'@(EmbeddedResource)' != '' and '%(EmbeddedResource.DefiningProjectFullPath)' != '$(MSBuildProjectFullPath)'">
+             <Output TaskParameter="OutputItems" ItemName="_EmbeddedResourceWithLinkAssigned" />
+           </AssignLinkMetadata>
+
+           <ItemGroup>
+               <EmbeddedResource Remove="@(_EmbeddedResourceWithLinkAssigned)" />
+               <EmbeddedResource Include="@(_EmbeddedResourceWithLinkAssigned)" />
+               <_EmbeddedResourceWithLinkAssigned Remove="@(_EmbeddedResourceWithLinkAssigned)" />
+           </ItemGroup>
+       </Target>
+
        <PropertyGroup>
                <GetFrameworkPathsDependsOn />
        </PropertyGroup>
index df28127ce429fedd920dae4e9cf0091c0280bb9b..14047e5e8584240940b7a2df446782c58a872c92 100644 (file)
@@ -1,6 +1,7 @@
 <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" >
        <UsingTask TaskName="Microsoft.Build.Tasks.AL"                  AssemblyName="Microsoft.Build.Tasks.v12.0, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
        <UsingTask TaskName="Microsoft.Build.Tasks.AssignTargetPath"    AssemblyName="Microsoft.Build.Tasks.v12.0, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+       <UsingTask TaskName="Microsoft.Build.Tasks.AssignLinkMetadata"  AssemblyName="Microsoft.Build.Tasks.v12.0, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
        <UsingTask TaskName="Microsoft.Build.Tasks.AssignCulture"       AssemblyName="Microsoft.Build.Tasks.v12.0, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
        <UsingTask TaskName="Microsoft.Build.Tasks.AssignProjectConfiguration"  AssemblyName="Microsoft.Build.Tasks.v12.0, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
        <UsingTask TaskName="Microsoft.Build.Tasks.CallTarget"          AssemblyName="Microsoft.Build.Tasks.v12.0, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
index 03935bdba31ec33ec419f65d0623537c3e7ae6da..5e5a5679ebaca17d4619e5b3cdd5546953be90ee 100644 (file)
                        Text="OutDir property must end with a slash."/>
        </Target>
 
-       <Target Name="PrepareForBuild">
+       <PropertyGroup>
+               <PrepareForBuildDependsOn>AssignLinkMetadata</PrepareForBuildDependsOn>
+       </PropertyGroup>
+       <Target Name="PrepareForBuild" DependsOnTargets="$(PrepareForBuildDependsOn)">
                <Message Importance="High" Text="Configuration: $(Configuration) Platform: $(Platform)"/>
 
                <!-- Look for app.config, if $(AppConfig) is specified, then use that. Else look in
                />
        </Target>
 
+       <Target Name="AssignLinkMetadata">
+           <AssignLinkMetadata Items="@(EmbeddedResource)" Condition="'@(EmbeddedResource)' != '' and '%(EmbeddedResource.DefiningProjectFullPath)' != '$(MSBuildProjectFullPath)'">
+             <Output TaskParameter="OutputItems" ItemName="_EmbeddedResourceWithLinkAssigned" />
+           </AssignLinkMetadata>
+
+           <ItemGroup>
+                       <EmbeddedResource Remove="@(_EmbeddedResourceWithLinkAssigned)" />
+                       <EmbeddedResource Include="@(_EmbeddedResourceWithLinkAssigned)" />
+                       <_EmbeddedResourceWithLinkAssigned Remove="@(_EmbeddedResourceWithLinkAssigned)" />
+           </ItemGroup>
+       </Target>
+
        <PropertyGroup>
                <GetFrameworkPathsDependsOn />
        </PropertyGroup>
index 9f373e5e7691de96f74161a891ec6f9b670945a3..68fcc7708fed1d172f3725ef6ea8041146aed5c3 100644 (file)
@@ -1,6 +1,7 @@
 <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" >
        <UsingTask TaskName="Microsoft.Build.Tasks.AL"                  AssemblyName="Microsoft.Build.Tasks.v3.5, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
        <UsingTask TaskName="Microsoft.Build.Tasks.AssignTargetPath"    AssemblyName="Microsoft.Build.Tasks.v3.5, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+       <UsingTask TaskName="Microsoft.Build.Tasks.AssignLinkMetadata"  AssemblyName="Microsoft.Build.Tasks.v3.5, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
        <UsingTask TaskName="Microsoft.Build.Tasks.AssignCulture"       AssemblyName="Microsoft.Build.Tasks.v3.5, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
        <UsingTask TaskName="Microsoft.Build.Tasks.AssignProjectConfiguration"  AssemblyName="Microsoft.Build.Tasks.v3.5, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
        <UsingTask TaskName="Microsoft.Build.Tasks.CallTarget"          AssemblyName="Microsoft.Build.Tasks.v3.5, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
index 0017f5c3c3bbeb51a0589b52c6dd9546db3bba2f..832b54fbefc1598284a5bffcc8fee189913787da 100644 (file)
                        Text="OutDir property must end with a slash."/>
        </Target>
 
-       <Target Name="PrepareForBuild">
+       <PropertyGroup>
+               <PrepareForBuildDependsOn>AssignLinkMetadata</PrepareForBuildDependsOn>
+       </PropertyGroup>
+       <Target Name="PrepareForBuild" DependsOnTargets="$(PrepareForBuildDependsOn)">
                <Message Importance="High" Text="Configuration: $(Configuration) Platform: $(Platform)"/>
 
                <!-- Look for app.config, if $(AppConfig) is specified, then use that. Else look in
                />
        </Target>
 
+       <Target Name="AssignLinkMetadata">
+           <AssignLinkMetadata Items="@(EmbeddedResource)" Condition="'@(EmbeddedResource)' != '' and '%(EmbeddedResource.DefiningProjectFullPath)' != '$(MSBuildProjectFullPath)'">
+             <Output TaskParameter="OutputItems" ItemName="_EmbeddedResourceWithLinkAssigned" />
+           </AssignLinkMetadata>
+
+           <ItemGroup>
+                       <EmbeddedResource Remove="@(_EmbeddedResourceWithLinkAssigned)" />
+                       <EmbeddedResource Include="@(_EmbeddedResourceWithLinkAssigned)" />
+                       <_EmbeddedResourceWithLinkAssigned Remove="@(_EmbeddedResourceWithLinkAssigned)" />
+           </ItemGroup>
+       </Target>
+
        <PropertyGroup>
                <GetFrameworkPathsDependsOn />
        </PropertyGroup>
index 9f143ef8526010abd2fa5ed70b3ccb88a63b786c..1063058785d6a70ada1fab267c698e829747addd 100644 (file)
@@ -1,6 +1,7 @@
 <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" >
        <UsingTask TaskName="Microsoft.Build.Tasks.AL"                  AssemblyName="Microsoft.Build.Tasks.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
        <UsingTask TaskName="Microsoft.Build.Tasks.AssignTargetPath"    AssemblyName="Microsoft.Build.Tasks.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+       <UsingTask TaskName="Microsoft.Build.Tasks.AssignLinkMetadata"  AssemblyName="Microsoft.Build.Tasks.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
        <UsingTask TaskName="Microsoft.Build.Tasks.AssignCulture"       AssemblyName="Microsoft.Build.Tasks.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
        <UsingTask TaskName="Microsoft.Build.Tasks.AssignProjectConfiguration"  AssemblyName="Microsoft.Build.Tasks.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
        <UsingTask TaskName="Microsoft.Build.Tasks.CallTarget"          AssemblyName="Microsoft.Build.Tasks.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
index 5f3bd3edca15082f559eb0f8e243c9e47c99f70c..d3c1b42993c0a735c2a253fc2773cfff48c50364 100644 (file)
@@ -1050,6 +1050,7 @@ typedef union {
 #define amd64_sse_cvtss2si_reg_reg(inst,dreg,reg) emit_sse_reg_reg_size ((inst), (dreg), (reg), 0xf3, 0x0f, 0x2d, 8)
 
 #define amd64_sse_cvttsd2si_reg_reg_size(inst,dreg,reg,size) emit_sse_reg_reg_size ((inst), (dreg), (reg), 0xf2, 0x0f, 0x2c, (size))
+#define amd64_sse_cvtss2si_reg_reg_size(inst,dreg,reg,size) emit_sse_reg_reg_size ((inst), (dreg), (reg), 0xf3, 0x0f, 0x2c, (size))
 
 #define amd64_sse_cvttsd2si_reg_reg(inst,dreg,reg) amd64_sse_cvttsd2si_reg_reg_size ((inst), (dreg), (reg), 8)
 
index 0a6e86d0c0cbda09e0dc599d65c87c5eaa2e0d16..fcf17c001b9ffb9b531f6cec7ce17fa087fb3d8e 100644 (file)
@@ -4,18 +4,19 @@ if HOST_WIN32
 export HOST_CC
 endif
 
-if !SHARED_MONO
-static_libs=   \
-       $(top_builddir)/mono/metadata/libmonoruntime-static.la  \
+if SUPPORT_SGEN
+metadata_lib=$(top_builddir)/mono/metadata/libmonoruntimesgen-static.la
+else
+metadata_lib=$(top_builddir)/mono/metadata/libmonoruntime-static.a
+gc_lib=$(LIBGC_STATIC_LIBS)
+endif
+
+runtime_lib=   \
+       ../mini/$(LIBMONO_LA) \
        $(top_builddir)/mono/io-layer/libwapi.la        \
        $(top_builddir)/mono/utils/libmonoutils.la \
        $(GLIB_LIBS) $(LIBICONV) \
-       $(LIBGC_STATIC_LIBS)
-
-runtime_lib=../mini/$(LIBMONO_LA) $(static_libs)
-else
-runtime_lib=../mini/$(LIBMONO_LA)
-endif
+       $(gc_lib)
 
 if DISABLE_EXECUTABLES
 bin_PROGRAMS =
@@ -23,11 +24,9 @@ else
 if DISABLE_LIBRARIES
 bin_PROGRAMS =
 else
-if SUPPORT_BOEHM
 bin_PROGRAMS = monodis
 endif
 endif
-endif
 
 noinst_LIBRARIES = libmonodis.a
 
@@ -55,7 +54,7 @@ monodis_LDADD =                       \
        $(LIBICONV)
 
 if PLATFORM_DARWIN
-monodis_LDFLAGS=-framework CoreFoundation
+monodis_LDFLAGS=-framework CoreFoundation -framework Foundation
 endif
 
 man_MANS = monodis.1
index c163f80ae4b2b86be8034cbbb50c8923e2fc61ad..bca6a11439994e29a73e8d85316ed73b1d308707 100644 (file)
@@ -5,7 +5,8 @@ AM_CPPFLAGS = \
        $(GLIB_CFLAGS)          \
        $(LIBGC_CPPFLAGS)       \
        -DMONO_BINDIR=\""$(bindir)"\"   \
-       -I$(top_srcdir) 
+       -I$(top_srcdir) \
+       $(SHARED_CFLAGS)
 
 libwapiincludedir = $(includedir)/mono-$(API_VER)/mono/io-layer
 
index e908d0bef346bfb19c13958948d9546b1559fa21..82e85744f84b5c97d0b17d7c0b4c143b1ef9ae2f 100644 (file)
 #include <sys/mkdev.h>
 #endif
 
+#ifdef HAVE_UTIME_H
+#include <utime.h>
+#endif
+
 /* sys/resource.h (for rusage) is required when using osx 10.3 (but not 10.4) */
 #ifdef __APPLE__
 #include <TargetConditionals.h>
index fb2ac51e09a124a7b60b0b80d7fd796e8600d22c..556ab52e08f2902f712f4ed5047837fe96f4c49f 100644 (file)
@@ -66,7 +66,7 @@ else
 noinst_LTLIBRARIES = $(boehm_libraries) $(sgen_libraries)
 endif
 
-AM_CPPFLAGS = -I$(top_srcdir) -I$(top_srcdir)/mono $(LIBGC_CPPFLAGS) $(GLIB_CFLAGS) -DMONO_BINDIR=\"$(bindir)/\" -DMONO_ASSEMBLIES=\"$(assembliesdir)\" -DMONO_CFG_DIR=\"$(confdir)\"
+AM_CPPFLAGS = -I$(top_srcdir) -I$(top_srcdir)/mono $(LIBGC_CPPFLAGS) $(GLIB_CFLAGS) -DMONO_BINDIR=\"$(bindir)/\" -DMONO_ASSEMBLIES=\"$(assembliesdir)\" -DMONO_CFG_DIR=\"$(confdir)\" $(SHARED_CFLAGS)
 
 #
 # Make sure any prefix changes are updated in the binaries too.
@@ -108,8 +108,8 @@ common_sources = \
        debug-helpers.c         \
        debug-mono-symfile.h    \
        debug-mono-symfile.c    \
-       decimal.c               \
-       decimal.h               \
+       decimal-ms.c            \
+       decimal-ms.h            \
        domain-internals.h      \
        environment.c           \
        environment.h           \
index 7df8e30ce2c9ec279344d48d7a552b789210776e..f138a0508fdeeb902faf285e87067473c5df1ce5 100644 (file)
@@ -78,7 +78,7 @@
  * Changes which are already detected at runtime, like the addition
  * of icalls, do not require an increment.
  */
-#define MONO_CORLIB_VERSION 116
+#define MONO_CORLIB_VERSION 117
 
 typedef struct
 {
@@ -462,8 +462,6 @@ mono_domain_create_appdomain_internal (char *friendly_name, MonoAppDomainSetup *
        MonoDomain *data;
        char *shadow_location;
        
-       MONO_ARCH_SAVE_REGS;
-
        adclass = mono_class_from_name (mono_defaults.corlib, "System", "AppDomain");
 
        /* FIXME: pin all those objects */
@@ -612,8 +610,6 @@ ves_icall_System_AppDomain_GetData (MonoAppDomain *ad, MonoString *name)
        MonoObject *o;
        char *str;
 
-       MONO_ARCH_SAVE_REGS;
-
        g_assert (ad != NULL);
        add = ad->data;
        g_assert (add != NULL);
@@ -660,8 +656,6 @@ ves_icall_System_AppDomain_SetData (MonoAppDomain *ad, MonoString *name, MonoObj
 {
        MonoDomain *add;
 
-       MONO_ARCH_SAVE_REGS;
-
        g_assert (ad != NULL);
        add = ad->data;
        g_assert (add != NULL);
@@ -679,8 +673,6 @@ ves_icall_System_AppDomain_SetData (MonoAppDomain *ad, MonoString *name, MonoObj
 MonoAppDomainSetup *
 ves_icall_System_AppDomain_getSetup (MonoAppDomain *ad)
 {
-       MONO_ARCH_SAVE_REGS;
-
        g_assert (ad != NULL);
        g_assert (ad->data != NULL);
 
@@ -690,8 +682,6 @@ ves_icall_System_AppDomain_getSetup (MonoAppDomain *ad)
 MonoString *
 ves_icall_System_AppDomain_getFriendlyName (MonoAppDomain *ad)
 {
-       MONO_ARCH_SAVE_REGS;
-
        g_assert (ad != NULL);
        g_assert (ad->data != NULL);
 
@@ -703,8 +693,6 @@ ves_icall_System_AppDomain_getCurDomain ()
 {
        MonoDomain *add = mono_domain_get ();
 
-       MONO_ARCH_SAVE_REGS;
-
        return add->domain;
 }
 
@@ -713,8 +701,6 @@ ves_icall_System_AppDomain_getRootDomain ()
 {
        MonoDomain *root = mono_get_root_domain ();
 
-       MONO_ARCH_SAVE_REGS;
-
        return root->domain;
 }
 
@@ -874,8 +860,6 @@ ves_icall_System_AppDomain_GetAssemblies (MonoAppDomain *ad, MonoBoolean refonly
        int i;
        GPtrArray *assemblies;
 
-       MONO_ARCH_SAVE_REGS;
-
        if (!System_Reflection_Assembly)
                System_Reflection_Assembly = mono_class_from_name (
                        mono_defaults.corlib, "System.Reflection", "Assembly");
@@ -1895,8 +1879,6 @@ ves_icall_System_Reflection_Assembly_LoadFrom (MonoString *fname, MonoBoolean re
        MonoImageOpenStatus status = MONO_IMAGE_OK;
        MonoAssembly *ass;
 
-       MONO_ARCH_SAVE_REGS;
-
        if (fname == NULL) {
                MonoException *exc = mono_get_exception_argument_null ("assemblyFile");
                mono_raise_exception (exc);
@@ -1968,8 +1950,6 @@ ves_icall_System_AppDomain_LoadAssembly (MonoAppDomain *ad,  MonoString *assRef,
        gchar *name;
        gboolean parsed;
 
-       MONO_ARCH_SAVE_REGS;
-
        g_assert (assRef != NULL);
 
        name = mono_string_to_utf8 (assRef);
@@ -2009,8 +1989,6 @@ ves_icall_System_AppDomain_InternalUnload (gint32 domain_id)
 {
        MonoDomain * domain = mono_domain_get_by_id (domain_id);
 
-       MONO_ARCH_SAVE_REGS;
-
        if (NULL == domain) {
                MonoException *exc = mono_get_exception_execution_engine ("Failed to unload domain, domain id not found");
                mono_raise_exception (exc);
@@ -2053,8 +2031,6 @@ ves_icall_System_AppDomain_ExecuteAssembly (MonoAppDomain *ad,
        MonoImage *image;
        MonoMethod *method;
 
-       MONO_ARCH_SAVE_REGS;
-
        g_assert (refass);
        image = refass->assembly->image;
        g_assert (image);
@@ -2073,8 +2049,6 @@ ves_icall_System_AppDomain_ExecuteAssembly (MonoAppDomain *ad,
 gint32 
 ves_icall_System_AppDomain_GetIDFromDomain (MonoAppDomain * ad) 
 {
-       MONO_ARCH_SAVE_REGS;
-
        return ad->data->domain_id;
 }
 
@@ -2083,8 +2057,6 @@ ves_icall_System_AppDomain_InternalSetDomain (MonoAppDomain *ad)
 {
        MonoDomain *old_domain = mono_domain_get();
 
-       MONO_ARCH_SAVE_REGS;
-
        if (!mono_domain_set (ad->data, FALSE))
                mono_raise_exception (mono_get_exception_appdomain_unloaded ());
 
@@ -2097,8 +2069,6 @@ ves_icall_System_AppDomain_InternalSetDomainByID (gint32 domainid)
        MonoDomain *current_domain = mono_domain_get ();
        MonoDomain *domain = mono_domain_get_by_id (domainid);
 
-       MONO_ARCH_SAVE_REGS;
-
        if (!domain || !mono_domain_set (domain, FALSE))        
                mono_raise_exception (mono_get_exception_appdomain_unloaded ());
 
@@ -2108,8 +2078,6 @@ ves_icall_System_AppDomain_InternalSetDomainByID (gint32 domainid)
 void
 ves_icall_System_AppDomain_InternalPushDomainRef (MonoAppDomain *ad)
 {
-       MONO_ARCH_SAVE_REGS;
-
        mono_thread_push_appdomain_ref (ad->data);
 }
 
@@ -2118,8 +2086,6 @@ ves_icall_System_AppDomain_InternalPushDomainRefByID (gint32 domain_id)
 {
        MonoDomain *domain = mono_domain_get_by_id (domain_id);
 
-       MONO_ARCH_SAVE_REGS;
-
        if (!domain)
                /* 
                 * Raise an exception to prevent the managed code from executing a pop
@@ -2133,24 +2099,18 @@ ves_icall_System_AppDomain_InternalPushDomainRefByID (gint32 domain_id)
 void
 ves_icall_System_AppDomain_InternalPopDomainRef (void)
 {
-       MONO_ARCH_SAVE_REGS;
-
        mono_thread_pop_appdomain_ref ();
 }
 
 MonoAppContext * 
 ves_icall_System_AppDomain_InternalGetContext ()
 {
-       MONO_ARCH_SAVE_REGS;
-
        return mono_context_get ();
 }
 
 MonoAppContext * 
 ves_icall_System_AppDomain_InternalGetDefaultContext ()
 {
-       MONO_ARCH_SAVE_REGS;
-
        return mono_domain_get ()->default_context;
 }
 
@@ -2159,8 +2119,6 @@ ves_icall_System_AppDomain_InternalSetContext (MonoAppContext *mc)
 {
        MonoAppContext *old_context = mono_context_get ();
 
-       MONO_ARCH_SAVE_REGS;
-
        mono_context_set (mc);
 
        return old_context;
index bbebb14a1d3b9a937e2e974717e44855d5b98ee0..5c847572e8d7f7a61a502567fe0f08bf62763450 100644 (file)
@@ -747,9 +747,10 @@ create_allocator (int atype, int tls_key)
                csig->params [0] = &mono_defaults.int_class->byval_arg;
                csig->params [1] = &mono_defaults.int32_class->byval_arg;
        } else {
-               csig = mono_metadata_signature_alloc (mono_defaults.corlib, 1);
+               csig = mono_metadata_signature_alloc (mono_defaults.corlib, 2);
                csig->ret = &mono_defaults.object_class->byval_arg;
                csig->params [0] = &mono_defaults.int_class->byval_arg;
+               csig->params [1] = &mono_defaults.int32_class->byval_arg;
        }
 
        mb = mono_mb_new (mono_defaults.object_class, "Alloc", MONO_WRAPPER_ALLOC);
@@ -767,15 +768,7 @@ create_allocator (int atype, int tls_key)
                mono_mb_emit_byte (mb, MONO_CEE_ADD);
                mono_mb_emit_stloc (mb, bytes_var);
        } else {
-               /* bytes = vtable->klass->instance_size */
-               mono_mb_emit_ldarg (mb, 0);
-               mono_mb_emit_icon (mb, G_STRUCT_OFFSET (MonoVTable, klass));
-               mono_mb_emit_byte (mb, MONO_CEE_ADD);
-               mono_mb_emit_byte (mb, MONO_CEE_LDIND_I);
-               mono_mb_emit_icon (mb, G_STRUCT_OFFSET (MonoClass, instance_size));
-               mono_mb_emit_byte (mb, MONO_CEE_ADD);
-               /* FIXME: assert instance_size stays a 4 byte integer */
-               mono_mb_emit_byte (mb, MONO_CEE_LDIND_U4);
+               mono_mb_emit_ldarg (mb, 1);
                mono_mb_emit_stloc (mb, bytes_var);
        }
 
@@ -961,7 +954,7 @@ mono_gc_is_critical_method (MonoMethod *method)
  */
 
 MonoMethod*
-mono_gc_get_managed_allocator (MonoClass *klass, gboolean for_box)
+mono_gc_get_managed_allocator (MonoClass *klass, gboolean for_box, gboolean known_instance_size)
 {
        int offset = -1;
        int atype;
@@ -1058,7 +1051,7 @@ mono_gc_is_critical_method (MonoMethod *method)
 }
 
 MonoMethod*
-mono_gc_get_managed_allocator (MonoClass *klass, gboolean for_box)
+mono_gc_get_managed_allocator (MonoClass *klass, gboolean for_box, gboolean known_instance_size)
 {
        return NULL;
 }
@@ -1090,6 +1083,12 @@ mono_gc_get_write_barrier (void)
 
 #endif
 
+int
+mono_gc_get_aligned_size_for_allocator (int size)
+{
+       return size;
+}
+
 const char *
 mono_gc_get_gc_name (void)
 {
index 5628ce7dd656dabd757ef054b67e8fb93bcc887c..8cc5ae763241c79feff73ac6edc1dca6f5d22dec 100644 (file)
 
 #include <glib.h>
 
-/*
- * The CategoryData_v2* tables below are automatically generated
- * by create-category-table(.cs), available in the mcs
- * sources.  DO NOT EDIT!
- */
-
-/*
- * Value bits: 8, Page size: 256
- * Packed table: 71168 bytes
- * Index astral_index: 8192 bytes
- * Total: 79360 bytes
- */
-static const guint8 CategoryData_v2 [71168] = 
-{
-       /* Page 0, 0 indirect uses */
-       14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,
-       14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,
-       11,24,24,24,26,24,24,24,20,21,24,25,24,19,24,24,
-       8,8,8,8,8,8,8,8,8,8,24,24,25,25,25,24,
-       24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-       0,0,0,0,0,0,0,0,0,0,0,20,24,21,27,18,
-       27,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-       1,1,1,1,1,1,1,1,1,1,1,20,25,21,25,14,
-       14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,
-       14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,
-       11,24,26,26,26,26,28,28,27,28,1,22,25,19,28,27,
-       28,25,10,10,27,1,28,24,27,10,1,23,10,10,10,24,
-       0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-       0,0,0,0,0,0,0,25,0,0,0,0,0,0,0,1,
-       1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-       1,1,1,1,1,1,1,25,1,1,1,1,1,1,1,1,
-       /* Page 1, 0 indirect uses */
-       0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-       0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-       0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-       0,1,0,1,0,1,0,1,1,0,1,0,1,0,1,0,
-       1,0,1,0,1,0,1,0,1,1,0,1,0,1,0,1,
-       0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-       0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-       0,1,0,1,0,1,0,1,0,0,1,0,1,0,1,1,
-       1,0,0,1,0,1,0,0,1,0,0,0,1,1,0,0,
-       0,0,1,0,0,1,0,0,0,1,1,1,0,0,1,0,
-       0,1,0,1,0,1,0,0,1,0,1,1,0,1,0,0,
-       1,0,0,0,1,0,1,0,0,1,1,4,0,1,1,1,
-       4,4,4,4,0,2,1,0,2,1,0,2,1,0,1,0,
-       1,0,1,0,1,0,1,0,1,0,1,0,1,1,0,1,
-       0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-       1,0,2,1,0,1,0,0,0,1,0,1,0,1,0,1,
-       /* Page 2, 0 indirect uses */
-       0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-       0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-       0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-       0,1,0,1,1,1,1,1,1,1,0,0,1,0,0,1,
-       1,0,1,0,0,0,0,1,0,1,0,1,0,1,0,1,
-       1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-       1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-       1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-       1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-       1,1,1,1,4,1,1,1,1,1,1,1,1,1,1,1,
-       1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-       3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
-       3,3,27,27,27,27,3,3,3,3,3,3,3,3,3,3,
-       3,3,27,27,27,27,27,27,27,27,27,27,27,27,27,27,
-       3,3,3,3,3,27,27,27,27,27,27,27,27,27,3,27,
-       27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,
-       /* Page 3, 0 indirect uses */
-       5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-       5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-       5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-       5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-       5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-       5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-       5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-       29,29,29,29,27,27,29,29,29,29,3,1,1,1,24,29,
-       29,29,29,29,27,27,0,24,0,0,0,29,0,29,0,0,
-       1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-       0,0,29,0,0,0,0,0,0,0,0,0,1,1,1,1,
-       1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-       1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,29,
-       1,1,0,0,0,1,1,1,0,1,0,1,0,1,0,1,
-       0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-       1,1,1,1,0,1,25,0,1,0,0,1,1,0,0,0,
-       /* Page 4, 0 indirect uses */
-       0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-       0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-       0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-       1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-       1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-       1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-       0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-       0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-       0,1,28,5,5,5,5,29,7,7,0,1,0,1,0,1,
-       0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-       0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-       0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-       0,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1,
-       0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-       0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-       0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-       /* Page 5, 0 indirect uses */
-       0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-       0,1,0,1,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-       0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-       0,0,0,0,0,0,0,29,29,3,24,24,24,24,24,24,
-       29,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-       1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-       1,1,1,1,1,1,1,1,29,24,19,29,29,29,29,29,
-       29,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-       5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-       5,5,5,5,5,5,5,5,5,5,5,5,5,5,24,5,
-       24,5,5,24,5,5,24,5,29,29,29,29,29,29,29,29,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,29,29,29,29,29,
-       4,4,4,24,24,29,29,29,29,29,29,29,29,29,29,29,
-       /* Page 6, 0 indirect uses */
-       15,15,15,15,29,29,29,29,29,29,29,26,24,24,28,28,
-       5,5,5,5,5,5,29,29,29,29,29,24,29,29,24,24,
-       29,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,29,29,29,29,29,
-       3,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,
-       5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,29,
-       8,8,8,8,8,8,8,8,8,8,24,24,24,24,4,4,
-       5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,24,4,5,5,5,5,5,5,5,15,7,5,
-       5,5,5,5,5,3,3,5,5,28,5,5,5,5,4,4,
-       8,8,8,8,8,8,8,8,8,8,4,4,4,28,28,4,
-       /* Page 7, 0 indirect uses */
-       24,24,24,24,24,24,24,24,24,24,24,24,24,24,29,15,
-       4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-       5,5,5,5,5,5,5,5,5,5,5,29,29,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,
-       5,4,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       8,8,8,8,8,8,8,8,8,8,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,
-       5,5,5,5,3,3,28,24,24,24,3,29,29,29,29,29,
-       /*
-        * Page 8, 3392 indirect uses:
-        *      10200-102FF (astral_index),
-        *      10500-107FF (astral_index),
-        *      10B00-11FFF (astral_index),
-        *      12500-1CFFF (astral_index),
-        *      1D800-1FFFF (astral_index),
-        *      2A700-2F7FF (astral_index),
-        *      2FB00-DFFFF (astral_index),
-        *      E0200-EFFFF (astral_index)
-        */
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       /* Page 9, 0 indirect uses */
-       29,5,5,6,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,29,29,5,4,6,6,
-       6,5,5,5,5,5,5,5,5,6,6,6,6,5,29,29,
-       4,5,5,5,5,29,29,29,4,4,4,4,4,4,4,4,
-       4,4,5,5,24,24,8,8,8,8,8,8,8,8,8,8,
-       24,29,29,29,29,29,29,29,29,29,29,4,4,4,4,4,
-       29,5,6,6,29,4,4,4,4,4,4,4,4,29,29,4,
-       4,29,29,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,29,4,4,4,4,4,4,
-       4,29,4,29,29,29,4,4,4,4,29,29,5,4,6,6,
-       6,5,5,5,5,29,29,6,6,29,29,6,6,5,4,29,
-       29,29,29,29,29,29,29,6,29,29,29,29,4,4,29,4,
-       4,4,5,5,29,29,8,8,8,8,8,8,8,8,8,8,
-       4,4,26,26,10,10,10,10,10,10,28,29,29,29,29,29,
-       /* Page 10, 0 indirect uses */
-       29,5,5,6,29,4,4,4,4,4,4,29,29,29,29,4,
-       4,29,29,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,29,4,4,4,4,4,4,
-       4,29,4,4,29,4,4,29,4,4,29,29,5,29,6,6,
-       6,5,5,29,29,29,29,5,5,29,29,5,5,5,29,29,
-       29,29,29,29,29,29,29,29,29,4,4,4,4,29,4,29,
-       29,29,29,29,29,29,8,8,8,8,8,8,8,8,8,8,
-       5,5,4,4,4,29,29,29,29,29,29,29,29,29,29,29,
-       29,5,5,6,29,4,4,4,4,4,4,4,4,4,29,4,
-       4,4,29,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,29,4,4,4,4,4,4,
-       4,29,4,4,29,4,4,4,4,4,29,29,5,4,6,6,
-       6,5,5,5,5,5,29,5,5,6,29,6,6,5,29,29,
-       4,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       4,4,5,5,29,29,8,8,8,8,8,8,8,8,8,8,
-       29,26,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       /* Page 11, 0 indirect uses */
-       29,5,6,6,29,4,4,4,4,4,4,4,4,29,29,4,
-       4,29,29,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,29,4,4,4,4,4,4,
-       4,29,4,4,29,4,4,4,4,4,29,29,5,4,6,5,
-       6,5,5,5,29,29,29,6,6,29,29,6,6,5,29,29,
-       29,29,29,29,29,29,5,6,29,29,29,29,4,4,29,4,
-       4,4,29,29,29,29,8,8,8,8,8,8,8,8,8,8,
-       28,4,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,5,4,29,4,4,4,4,4,4,29,29,29,4,4,
-       4,29,4,4,4,4,29,29,29,4,4,29,4,29,4,4,
-       29,29,29,4,4,29,29,29,4,4,4,29,29,29,4,4,
-       4,4,4,4,4,4,4,4,4,4,29,29,29,29,6,6,
-       5,6,6,29,29,29,6,6,6,29,6,6,6,5,29,29,
-       29,29,29,29,29,29,29,6,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,8,8,8,8,8,8,8,8,8,8,
-       10,10,10,28,28,28,28,28,28,26,28,29,29,29,29,29,
-       /* Page 12, 0 indirect uses */
-       29,6,6,6,29,4,4,4,4,4,4,4,4,29,4,4,
-       4,29,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,29,4,4,4,4,4,4,
-       4,4,4,4,29,4,4,4,4,4,29,29,29,29,5,5,
-       5,6,6,6,6,29,5,5,5,29,5,5,5,5,29,29,
-       29,29,29,29,29,5,5,29,29,29,29,29,29,29,29,29,
-       4,4,29,29,29,29,8,8,8,8,8,8,8,8,8,8,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,6,6,29,4,4,4,4,4,4,4,4,29,4,4,
-       4,29,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,29,4,4,4,4,4,4,
-       4,4,4,4,29,4,4,4,4,4,29,29,5,4,6,5,
-       6,6,6,6,6,29,5,6,6,29,6,6,5,5,29,29,
-       29,29,29,29,29,6,6,29,29,29,29,29,29,29,4,29,
-       4,4,5,5,29,29,8,8,8,8,8,8,8,8,8,8,
-       29,28,28,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       /* Page 13, 0 indirect uses */
-       29,29,6,6,29,4,4,4,4,4,4,4,4,29,4,4,
-       4,29,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,29,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,29,29,29,29,6,6,
-       6,5,5,5,29,29,6,6,6,29,6,6,6,5,29,29,
-       29,29,29,29,29,29,29,6,29,29,29,29,29,29,29,29,
-       4,4,29,29,29,29,8,8,8,8,8,8,8,8,8,8,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,6,6,29,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,29,29,29,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,29,4,4,4,4,4,4,4,4,4,29,4,29,29,
-       4,4,4,4,4,4,4,29,29,29,5,29,29,29,29,6,
-       6,6,5,5,5,29,5,29,6,6,6,6,6,6,6,6,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,6,6,24,29,29,29,29,29,29,29,29,29,29,29,
-       /* Page 14, 0 indirect uses */
-       29,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,5,4,4,5,5,5,5,5,5,5,29,29,29,29,26,
-       4,4,4,4,4,4,3,5,5,5,5,5,5,5,5,24,
-       8,8,8,8,8,8,8,8,8,8,24,24,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,4,4,29,4,29,29,4,4,29,4,29,29,4,29,29,
-       29,29,29,29,4,4,4,4,29,4,4,4,4,4,4,4,
-       29,4,4,4,29,4,29,4,29,29,4,4,29,4,4,4,
-       4,5,4,4,5,5,5,5,5,5,29,5,5,4,29,29,
-       4,4,4,4,4,29,3,29,5,5,5,5,5,5,29,29,
-       8,8,8,8,8,8,8,8,8,8,29,29,4,4,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       /* Page 15, 0 indirect uses */
-       4,28,28,28,24,24,24,24,24,24,24,24,24,24,24,24,
-       24,24,24,28,28,28,28,28,5,5,28,28,28,28,28,28,
-       8,8,8,8,8,8,8,8,8,8,10,10,10,10,10,10,
-       10,10,10,10,28,5,28,5,28,5,20,21,20,21,6,6,
-       4,4,4,4,4,4,4,4,29,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,29,29,29,29,29,
-       29,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,
-       5,5,5,5,5,24,5,5,4,4,4,4,29,29,29,29,
-       5,5,5,5,5,5,5,5,29,5,5,5,5,5,5,5,
-       5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-       5,5,5,5,5,5,5,5,5,5,5,5,5,29,28,28,
-       28,28,28,28,28,28,5,28,28,28,28,28,28,29,29,28,
-       24,24,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       /* Page 16, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,29,4,4,4,4,4,29,4,4,29,6,5,5,5,
-       5,6,5,29,29,29,5,5,6,5,29,29,29,29,29,29,
-       8,8,8,8,8,8,8,8,8,8,24,24,24,24,24,24,
-       4,4,4,4,4,4,6,6,5,5,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-       0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-       0,0,0,0,0,0,29,29,29,29,29,29,29,29,29,29,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,24,3,29,29,29,
-       /* Page 17, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,29,29,29,29,29,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,29,29,29,29,29,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,29,29,29,29,29,29,
-       /* Page 18, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,29,4,4,4,4,29,29,
-       4,4,4,4,4,4,4,29,4,29,4,4,4,4,29,29,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,29,4,4,4,4,29,29,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,29,4,4,4,4,29,29,4,4,4,4,4,4,4,29,
-       4,29,4,4,4,4,29,29,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,29,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 19, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,29,4,4,4,4,29,29,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,29,29,29,29,5,
-       28,24,24,24,24,24,24,24,24,10,10,10,10,10,10,10,
-       10,10,10,10,10,10,10,10,10,10,10,10,10,29,29,29,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       28,28,28,28,28,28,28,28,28,28,29,29,29,29,29,29,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,29,29,29,29,29,29,29,29,29,29,29,
-       /* Page 20, 0 indirect uses */
-       29,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /*
-        * Page 21, 171 indirect uses:
-        *      12000-122FF (astral_index),
-        *      20000-2A5FF (astral_index),
-        *      2F800-2F9FF (astral_index)
-        */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 22, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,24,24,4,
-       4,4,4,4,4,4,4,29,29,29,29,29,29,29,29,29,
-       11,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,20,21,29,29,29,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,24,24,24,9,9,
-       9,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       /* Page 23, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,29,4,4,
-       4,4,5,5,5,29,29,29,29,29,29,29,29,29,29,29,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,5,5,5,24,24,29,29,29,29,29,29,29,29,29,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,5,5,29,29,29,29,29,29,29,29,29,29,29,29,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,29,4,4,
-       4,29,5,5,29,29,29,29,29,29,29,29,29,29,29,29,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,15,15,6,5,5,5,5,5,5,5,6,6,
-       6,6,6,6,6,6,5,6,6,5,5,5,5,5,5,5,
-       5,5,5,5,24,24,24,3,24,24,24,26,4,5,29,29,
-       8,8,8,8,8,8,8,8,8,8,29,29,29,29,29,29,
-       10,10,10,10,10,10,10,10,10,10,29,29,29,29,29,29,
-       /* Page 24, 0 indirect uses */
-       24,24,24,24,24,24,19,24,24,24,24,5,5,5,11,29,
-       8,8,8,8,8,8,8,8,8,8,29,29,29,29,29,29,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,29,29,29,29,29,29,29,29,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,5,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       /* Page 25, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,29,29,29,
-       5,5,5,6,6,6,6,5,5,6,6,6,29,29,29,29,
-       6,6,5,6,6,6,6,6,6,5,5,5,29,29,29,29,
-       28,29,29,29,24,24,8,8,8,8,8,8,8,8,8,8,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,29,29,
-       4,4,4,4,4,29,29,29,29,29,29,29,29,29,29,29,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,29,29,29,29,29,29,
-       6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
-       6,4,4,4,4,4,4,4,6,6,29,29,29,29,29,29,
-       8,8,8,8,8,8,8,8,8,8,29,29,29,29,24,24,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       /* Page 26, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,5,5,6,6,6,29,29,24,24,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       /* Page 27, 0 indirect uses */
-       5,5,5,5,6,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,5,6,5,5,5,5,5,6,5,6,6,6,
-       6,6,5,6,6,4,4,4,4,4,4,4,29,29,29,29,
-       8,8,8,8,8,8,8,8,8,8,24,24,24,24,24,24,
-       24,28,28,28,28,28,28,28,28,28,28,5,5,5,5,5,
-       5,5,5,5,28,28,28,28,28,28,28,28,28,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       /* Page 28, 0 indirect uses */
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       /* Page 29, 0 indirect uses */
-       1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-       1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-       1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,
-       3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
-       3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
-       3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
-       3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-       1,1,1,1,1,1,1,1,3,1,1,1,1,1,1,1,
-       1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-       1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,
-       3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
-       3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
-       5,5,5,5,5,5,5,5,5,5,5,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,5,5,
-       /* Page 30, 0 indirect uses */
-       0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-       0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-       0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-       0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-       0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-       0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-       0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-       0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-       0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-       0,1,0,1,0,1,1,1,1,1,1,1,29,29,29,29,
-       0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-       0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-       0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-       0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-       0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-       0,1,0,1,0,1,0,1,0,1,29,29,29,29,29,29,
-       /* Page 31, 0 indirect uses */
-       1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,
-       1,1,1,1,1,1,29,29,0,0,0,0,0,0,29,29,
-       1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,
-       1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,
-       1,1,1,1,1,1,29,29,0,0,0,0,0,0,29,29,
-       1,1,1,1,1,1,1,1,29,0,29,0,29,0,29,0,
-       1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,
-       1,1,1,1,1,1,1,1,1,1,1,1,1,1,29,29,
-       1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,
-       1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,
-       1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,
-       1,1,1,1,1,29,1,1,0,0,0,0,2,27,1,27,
-       27,27,1,1,1,29,1,1,0,0,0,0,2,27,27,27,
-       1,1,1,1,29,29,1,1,0,0,0,0,29,27,27,27,
-       1,1,1,1,1,1,1,1,0,0,0,0,0,27,27,27,
-       29,29,1,1,1,29,1,1,0,0,0,0,2,27,27,29,
-       /* Page 32, 0 indirect uses */
-       11,11,11,11,11,11,11,11,11,11,11,15,15,15,15,15,
-       19,19,19,19,19,19,24,24,22,23,20,22,22,23,20,22,
-       24,24,24,24,24,24,24,24,12,13,15,15,15,15,15,11,
-       24,24,24,24,24,24,24,24,24,22,23,24,24,24,24,18,
-       18,24,24,24,25,20,21,24,24,24,24,24,24,24,24,24,
-       24,24,25,24,18,24,24,24,24,24,24,24,24,24,24,11,
-       15,15,15,15,29,29,29,29,29,29,15,15,15,15,15,15,
-       10,1,29,29,10,10,10,10,10,10,25,25,25,20,21,1,
-       10,10,10,10,10,10,10,10,10,10,25,25,25,20,21,29,
-       3,3,3,3,3,29,29,29,29,29,29,29,29,29,29,29,
-       26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,
-       26,26,26,26,26,26,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       5,5,5,5,5,5,5,5,5,5,5,5,5,7,7,7,
-       7,5,7,7,7,5,5,5,5,5,5,5,5,5,5,5,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       /* Page 33, 0 indirect uses */
-       28,28,0,28,28,28,28,0,28,28,1,0,0,0,1,1,
-       0,0,0,1,28,0,28,28,28,0,0,0,0,0,28,28,
-       28,28,28,28,0,28,0,28,0,28,0,0,0,0,28,1,
-       0,0,0,0,1,4,4,4,4,1,28,28,1,1,0,0,
-       25,25,25,25,25,0,1,1,1,1,28,25,28,28,1,29,
-       29,29,29,10,10,10,10,10,10,10,10,10,10,10,10,10,
-       9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
-       9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
-       9,9,9,0,1,29,29,29,29,29,29,29,29,29,29,29,
-       25,25,25,25,25,28,28,28,28,28,25,25,28,28,28,28,
-       25,28,28,25,28,28,25,28,28,28,28,28,28,28,25,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,25,25,
-       28,28,25,28,25,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,25,25,25,25,25,25,25,25,25,25,25,25,
-       /* Page 34, 0 indirect uses */
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       /* Page 35, 0 indirect uses */
-       28,28,28,28,28,28,28,28,25,25,25,25,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       25,25,28,28,28,28,28,28,28,20,21,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,25,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,25,25,25,25,25,
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       25,25,25,25,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,25,25,25,25,
-       25,25,28,28,28,28,28,28,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       /* Page 36, 0 indirect uses */
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       28,28,28,28,28,28,28,28,28,28,28,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-       10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-       10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-       10,10,10,10,10,10,10,10,10,10,10,10,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,10,10,10,10,10,10,
-       10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-       /* Page 37, 0 indirect uses */
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,25,28,28,28,28,28,28,28,28,
-       28,25,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,25,25,25,25,25,25,25,25,
-       /* Page 38, 0 indirect uses */
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,25,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,29,29,29,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       /* Page 39, 0 indirect uses */
-       29,28,28,28,28,29,28,28,28,28,29,29,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,29,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,29,28,29,28,
-       28,28,28,29,29,29,28,29,28,28,28,28,28,28,28,29,
-       29,28,28,28,28,28,28,28,20,21,20,21,20,21,20,21,
-       20,21,20,21,20,21,10,10,10,10,10,10,10,10,10,10,
-       10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-       10,10,10,10,28,29,29,29,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       29,28,28,28,28,28,28,28,28,28,28,28,28,28,28,29,
-       25,25,25,25,25,20,21,25,25,25,25,29,29,29,29,29,
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       25,25,25,25,25,25,20,21,20,21,20,21,29,29,29,29,
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       /* Page 40, 0 indirect uses */
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       /* Page 41, 0 indirect uses */
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       25,25,25,20,21,20,21,20,21,20,21,20,21,20,21,20,
-       21,20,21,20,21,20,21,20,21,25,25,25,25,25,25,25,
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       25,25,25,25,25,25,25,25,20,21,20,21,25,25,25,25,
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       25,25,25,25,25,25,25,25,25,25,25,25,20,21,25,25,
-       /* Page 42, 0 indirect uses */
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       /* Page 43, 0 indirect uses */
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,29,29,29,29,29,
-       28,28,28,28,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       /* Page 44, 0 indirect uses */
-       0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-       0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-       0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29,
-       1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-       1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-       1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,29,
-       0,1,0,0,0,1,1,0,1,0,1,0,1,29,29,29,
-       29,29,29,29,1,0,1,1,29,29,29,29,29,29,29,29,
-       0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-       0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-       0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-       0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-       0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-       0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-       0,1,0,1,1,28,28,28,28,28,28,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,24,24,24,24,10,24,24,
-       /* Page 45, 0 indirect uses */
-       1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-       1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-       1,1,1,1,1,1,29,29,29,29,29,29,29,29,29,29,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,29,29,29,29,29,29,29,29,29,3,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,29,29,29,29,29,29,29,29,29,
-       4,4,4,4,4,4,4,29,4,4,4,4,4,4,4,29,
-       4,4,4,4,4,4,4,29,4,4,4,4,4,4,4,29,
-       4,4,4,4,4,4,4,29,4,4,4,4,4,4,4,29,
-       4,4,4,4,4,4,4,29,4,4,4,4,4,4,4,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       /* Page 46, 0 indirect uses */
-       24,24,22,23,22,23,24,24,24,22,23,24,22,23,24,24,
-       24,24,24,24,24,24,24,19,29,29,29,29,22,23,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,29,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,29,29,29,29,29,29,29,29,29,29,29,29,
-       /* Page 47, 0 indirect uses */
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       28,28,28,28,28,28,28,28,28,28,28,28,29,29,29,29,
-       /* Page 48, 0 indirect uses */
-       11,24,24,24,28,3,4,9,20,21,20,21,20,21,20,21,
-       20,21,28,28,20,21,20,21,20,21,20,21,19,20,21,21,
-       28,9,9,9,9,9,9,9,9,9,5,5,5,5,5,5,
-       19,3,3,3,3,3,28,28,9,9,9,3,4,24,28,28,
-       29,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,29,29,5,5,27,27,3,3,4,
-       19,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,24,3,3,3,4,
-       /* Page 49, 0 indirect uses */
-       29,29,29,29,29,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,29,29,29,
-       29,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,29,
-       28,28,10,10,10,10,28,28,28,28,28,28,28,28,28,28,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,29,29,29,29,29,29,29,29,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 50, 0 indirect uses */
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,29,
-       10,10,10,10,10,10,10,10,10,10,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,29,29,29,29,29,29,29,29,29,29,29,29,
-       28,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       10,10,10,10,10,10,10,10,10,10,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,29,
-       /* Page 51, 0 indirect uses */
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       /* Page 52, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 53, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 54, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 55, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 56, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 57, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 58, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 59, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 60, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 61, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 62, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 63, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 64, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 65, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 66, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 67, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 68, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 69, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 70, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 71, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 72, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 73, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 74, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 75, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 76, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 77, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,29,29,29,29,29,29,29,29,29,29,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       /* Page 78, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 79, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 80, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 81, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 82, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 83, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 84, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 85, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 86, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 87, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 88, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 89, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 90, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 91, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 92, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 93, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 94, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 95, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 96, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 97, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 98, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 99, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 100, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 101, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 102, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 103, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 104, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 105, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 106, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 107, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 108, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 109, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 110, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 111, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 112, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 113, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 114, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 115, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 116, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 117, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 118, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 119, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 120, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 121, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 122, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 123, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 124, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 125, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 126, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 127, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 128, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 129, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 130, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 131, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 132, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 133, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 134, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 135, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 136, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 137, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 138, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 139, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 140, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 141, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 142, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 143, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 144, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 145, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 146, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 147, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 148, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 149, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 150, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 151, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 152, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 153, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 154, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 155, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 156, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 157, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 158, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 159, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       /* Page 160, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,3,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 161, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 162, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 163, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 164, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,29,29,29,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       /* Page 165, 0 indirect uses */
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       /* Page 166, 0 indirect uses */
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       /* Page 167, 0 indirect uses */
-       27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,
-       27,27,27,27,27,27,27,3,3,3,3,29,29,29,29,29,
-       27,27,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       /* Page 168, 0 indirect uses */
-       4,4,6,4,4,4,5,4,4,4,4,5,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,6,6,5,5,6,28,28,28,28,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,24,24,24,24,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       /* Page 169, 0 indirect uses */
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       /* Page 170, 0 indirect uses */
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       /* Page 171, 0 indirect uses */
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       /* Page 172, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 173, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 174, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 175, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 176, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 177, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 178, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 179, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 180, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 181, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 182, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 183, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 184, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 185, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 186, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 187, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 188, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 189, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 190, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 191, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 192, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 193, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 194, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 195, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 196, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 197, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 198, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 199, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 200, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 201, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 202, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 203, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 204, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 205, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 206, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 207, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 208, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 209, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 210, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 211, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 212, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 213, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 214, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 215, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       /* Page 216, 0 indirect uses */
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       /* Page 217, 0 indirect uses */
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       /* Page 218, 0 indirect uses */
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       /* Page 219, 0 indirect uses */
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       /* Page 220, 0 indirect uses */
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       /* Page 221, 0 indirect uses */
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       /* Page 222, 0 indirect uses */
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       /* Page 223, 0 indirect uses */
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       /*
-        * Page 224, 510 indirect uses:
-        *      F0000-FFEFF (astral_index),
-        *      100000-10FEFF (astral_index)
-        */
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       /* Page 225, 0 indirect uses */
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       /* Page 226, 0 indirect uses */
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       /* Page 227, 0 indirect uses */
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       /* Page 228, 0 indirect uses */
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       /* Page 229, 0 indirect uses */
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       /* Page 230, 0 indirect uses */
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       /* Page 231, 0 indirect uses */
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       /* Page 232, 0 indirect uses */
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       /* Page 233, 0 indirect uses */
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       /* Page 234, 0 indirect uses */
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       /* Page 235, 0 indirect uses */
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       /* Page 236, 0 indirect uses */
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       /* Page 237, 0 indirect uses */
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       /* Page 238, 0 indirect uses */
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       /* Page 239, 0 indirect uses */
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       /* Page 240, 0 indirect uses */
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       /* Page 241, 0 indirect uses */
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       /* Page 242, 0 indirect uses */
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       /* Page 243, 0 indirect uses */
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       /* Page 244, 0 indirect uses */
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       /* Page 245, 0 indirect uses */
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       /* Page 246, 0 indirect uses */
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       /* Page 247, 0 indirect uses */
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       /* Page 248, 0 indirect uses */
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       /* Page 249, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 250, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,29,29,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,29,29,29,29,29,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       /* Page 251, 0 indirect uses */
-       1,1,1,1,1,1,1,29,29,29,29,29,29,29,29,29,
-       29,29,29,1,1,1,1,1,29,29,29,29,29,4,5,4,
-       4,4,4,4,4,4,4,4,4,25,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,29,4,4,4,4,4,29,4,29,
-       4,4,29,4,4,29,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 252, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 253, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,20,21,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       29,29,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       4,4,4,4,4,4,4,4,4,4,4,4,26,28,29,29,
-       /* Page 254, 0 indirect uses */
-       5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-       24,24,24,24,24,24,24,20,21,24,29,29,29,29,29,29,
-       5,5,5,5,29,29,29,29,29,29,29,29,29,29,29,29,
-       24,19,19,18,18,20,21,20,21,20,21,20,21,20,21,20,
-       21,20,21,20,21,24,24,20,21,24,24,24,24,18,18,18,
-       24,24,24,29,24,24,24,24,19,20,21,20,21,20,21,24,
-       24,24,25,19,25,25,25,29,24,26,24,24,29,29,29,29,
-       4,4,4,4,4,29,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,29,29,15,
-       /* Page 255, 0 indirect uses */
-       29,24,24,24,26,24,24,24,20,21,24,25,24,19,24,24,
-       8,8,8,8,8,8,8,8,8,8,24,24,25,25,25,24,
-       24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-       0,0,0,0,0,0,0,0,0,0,0,20,24,21,27,18,
-       27,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-       1,1,1,1,1,1,1,1,1,1,1,20,25,21,25,20,
-       21,24,20,21,24,24,4,4,4,4,4,4,4,4,4,4,
-       3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,29,
-       29,29,4,4,4,4,4,4,29,29,4,4,4,4,4,4,
-       29,29,4,4,4,4,4,4,29,29,4,4,4,29,29,29,
-       26,26,25,27,28,26,26,29,28,25,25,25,25,28,28,29,
-       29,29,29,29,29,29,29,29,29,15,15,15,28,28,29,29
-#ifndef DISABLE_ASTRAL
-       ,
-       /* Page 256, 1 indirect use: 10000-100FF (astral_index) */
-       4,4,4,4,4,4,4,4,4,4,4,4,29,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,29,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,29,4,4,29,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,29,29,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,29,29,29,29,29,
-       /* Page 257, 1 indirect use: 10100-101FF (astral_index) */
-       24,24,28,29,29,29,29,10,10,10,10,10,10,10,10,10,
-       10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-       10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-       10,10,10,10,29,29,29,28,28,28,28,28,28,28,28,28,
-       9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
-       9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
-       9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
-       9,9,9,9,9,10,10,10,10,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,10,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       /* Page 258, 1 indirect use: 10300-103FF (astral_index) */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,29,
-       10,10,10,10,29,29,29,29,29,29,29,29,29,29,29,29,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,9,4,4,4,4,4,4,4,4,9,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,29,24,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,29,29,29,29,4,4,4,4,4,4,4,4,
-       24,9,9,9,9,9,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       /* Page 259, 1 indirect use: 10400-104FF (astral_index) */
-       0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-       0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-       0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,
-       1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-       1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,29,29,
-       8,8,8,8,8,8,8,8,8,8,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       /* Page 260, 1 indirect use: 10800-108FF (astral_index) */
-       4,4,4,4,4,4,29,29,4,29,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,29,4,4,29,29,29,4,29,29,4,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       /* Page 261, 1 indirect use: 10900-109FF (astral_index) */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,10,10,10,10,29,29,29,29,29,24,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       /* Page 262, 1 indirect use: 10A00-10AFF (astral_index) */
-       4,5,5,5,29,5,5,29,29,29,29,29,5,5,5,5,
-       4,4,4,4,29,4,4,4,29,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,29,29,29,29,5,5,5,29,29,29,29,5,
-       10,10,10,10,10,10,10,10,29,29,29,29,29,29,29,29,
-       24,24,24,24,24,24,24,24,24,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       /* Page 263, 1 indirect use: 12300-123FF (astral_index) */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       /* Page 264, 1 indirect use: 12400-124FF (astral_index) */
-       9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
-       9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
-       9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
-       9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
-       9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
-       9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
-       9,9,9,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       24,24,24,24,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       /* Page 265, 1 indirect use: 1D000-1D0FF (astral_index) */
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,29,29,29,29,29,29,29,29,29,29,
-       /* Page 266, 1 indirect use: 1D100-1D1FF (astral_index) */
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,29,29,29,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,6,6,5,5,5,28,28,28,6,6,6,
-       6,6,6,15,15,15,15,15,15,15,15,5,5,5,5,5,
-       5,5,5,28,28,5,5,5,5,5,5,5,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,5,5,5,5,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       /* Page 267, 1 indirect use: 1D200-1D2FF (astral_index) */
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,5,5,5,28,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       /* Page 268, 1 indirect use: 1D300-1D3FF (astral_index) */
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,29,29,29,29,29,29,29,29,29,
-       10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-       10,10,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       /* Page 269, 1 indirect use: 1D400-1D4FF (astral_index) */
-       0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-       0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,
-       1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-       1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,
-       0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,
-       1,1,1,1,1,29,1,1,1,1,1,1,1,1,1,1,
-       1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,
-       0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-       0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-       1,1,1,1,1,1,1,1,1,1,1,1,0,29,0,0,
-       29,29,0,29,29,0,0,29,29,0,0,0,0,29,0,0,
-       0,0,0,0,0,0,1,1,1,1,29,1,29,1,1,1,
-       1,1,1,1,29,1,1,1,1,1,1,1,1,1,1,1,
-       0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-       0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,
-       1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-       /* Page 270, 1 indirect use: 1D500-1D5FF (astral_index) */
-       1,1,1,1,0,0,29,0,0,0,0,29,29,0,0,0,
-       0,0,0,0,0,29,0,0,0,0,0,0,0,29,1,1,
-       1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-       1,1,1,1,1,1,1,1,0,0,29,0,0,0,0,29,
-       0,0,0,0,0,29,0,29,29,29,0,0,0,0,0,0,
-       0,29,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-       1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,
-       0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-       0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,
-       1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-       0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-       0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,
-       1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-       1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,
-       0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,
-       1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-       /* Page 271, 1 indirect use: 1D600-1D6FF (astral_index) */
-       1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,
-       0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-       0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-       1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,
-       0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-       0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,
-       1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-       0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-       0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,
-       1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-       1,1,1,1,1,1,29,29,0,0,0,0,0,0,0,0,
-       0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-       0,25,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-       1,1,1,1,1,1,1,1,1,1,1,25,1,1,1,1,
-       1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-       0,0,0,0,0,0,0,0,0,0,0,25,1,1,1,1,
-       /* Page 272, 1 indirect use: 1D700-1D7FF (astral_index) */
-       1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-       1,1,1,1,1,25,1,1,1,1,1,1,0,0,0,0,
-       0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-       0,0,0,0,0,25,1,1,1,1,1,1,1,1,1,1,
-       1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,25,
-       1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,
-       0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25,
-       1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-       1,1,1,1,1,1,1,1,1,25,1,1,1,1,1,1,
-       0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-       0,0,0,0,0,0,0,0,0,25,1,1,1,1,1,1,
-       1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-       1,1,1,25,1,1,1,1,1,1,0,1,29,29,8,8,
-       8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
-       8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
-       8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
-       /* Page 273, 1 indirect use: 2A600-2A6FF (astral_index) */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       /* Page 274, 1 indirect use: 2FA00-2FAFF (astral_index) */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       /* Page 275, 1 indirect use: E0000-E00FF (astral_index) */
-       29,15,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,
-       15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,
-       15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,
-       15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,
-       15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,
-       15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       /* Page 276, 1 indirect use: E0100-E01FF (astral_index) */
-       5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-       5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-       5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-       5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-       5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-       5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-       5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-       5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-       5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-       5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-       5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-       5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-       5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-       5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-       5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       /*
-        * Page 277, 2 indirect uses:
-        *      FFF00-FFFFF (astral_index),
-        *      10FF00-10FFFF (astral_index)
-        */
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,29,29
-#endif
-};
-
-#ifndef DISABLE_ASTRAL
-static const guint16 CategoryData_v2_astral_index [4096] = 
-{
-       /* 10000-100FF: page 256 */
-       0x100,
-       /* 10100-101FF: page 257 */
-       0x101,
-       /* 10200-102FF: page 8 */
-       0x8,
-       /* 10300-103FF: page 258 */
-       0x102,
-       /* 10400-104FF: page 259 */
-       0x103,
-       /* 10500-105FF: page 8 */
-       0x8,
-       /* 10600-106FF: page 8 */
-       0x8,
-       /* 10700-107FF: page 8 */
-       0x8,
-       /* 10800-108FF: page 260 */
-       0x104,
-       /* 10900-109FF: page 261 */
-       0x105,
-       /* 10A00-10AFF: page 262 */
-       0x106,
-       /* 10B00-10BFF: page 8 */
-       0x8,
-       /* 10C00-10CFF: page 8 */
-       0x8,
-       /* 10D00-10DFF: page 8 */
-       0x8,
-       /* 10E00-10EFF: page 8 */
-       0x8,
-       /* 10F00-10FFF: page 8 */
-       0x8,
-       /* 11000-110FF: page 8 */
-       0x8,
-       /* 11100-111FF: page 8 */
-       0x8,
-       /* 11200-112FF: page 8 */
-       0x8,
-       /* 11300-113FF: page 8 */
-       0x8,
-       /* 11400-114FF: page 8 */
-       0x8,
-       /* 11500-115FF: page 8 */
-       0x8,
-       /* 11600-116FF: page 8 */
-       0x8,
-       /* 11700-117FF: page 8 */
-       0x8,
-       /* 11800-118FF: page 8 */
-       0x8,
-       /* 11900-119FF: page 8 */
-       0x8,
-       /* 11A00-11AFF: page 8 */
-       0x8,
-       /* 11B00-11BFF: page 8 */
-       0x8,
-       /* 11C00-11CFF: page 8 */
-       0x8,
-       /* 11D00-11DFF: page 8 */
-       0x8,
-       /* 11E00-11EFF: page 8 */
-       0x8,
-       /* 11F00-11FFF: page 8 */
-       0x8,
-       /* 12000-120FF: page 21 */
-       0x15,
-       /* 12100-121FF: page 21 */
-       0x15,
-       /* 12200-122FF: page 21 */
-       0x15,
-       /* 12300-123FF: page 263 */
-       0x107,
-       /* 12400-124FF: page 264 */
-       0x108,
-       /* 12500-125FF: page 8 */
-       0x8,
-       /* 12600-126FF: page 8 */
-       0x8,
-       /* 12700-127FF: page 8 */
-       0x8,
-       /* 12800-128FF: page 8 */
-       0x8,
-       /* 12900-129FF: page 8 */
-       0x8,
-       /* 12A00-12AFF: page 8 */
-       0x8,
-       /* 12B00-12BFF: page 8 */
-       0x8,
-       /* 12C00-12CFF: page 8 */
-       0x8,
-       /* 12D00-12DFF: page 8 */
-       0x8,
-       /* 12E00-12EFF: page 8 */
-       0x8,
-       /* 12F00-12FFF: page 8 */
-       0x8,
-       /* 13000-130FF: page 8 */
-       0x8,
-       /* 13100-131FF: page 8 */
-       0x8,
-       /* 13200-132FF: page 8 */
-       0x8,
-       /* 13300-133FF: page 8 */
-       0x8,
-       /* 13400-134FF: page 8 */
-       0x8,
-       /* 13500-135FF: page 8 */
-       0x8,
-       /* 13600-136FF: page 8 */
-       0x8,
-       /* 13700-137FF: page 8 */
-       0x8,
-       /* 13800-138FF: page 8 */
-       0x8,
-       /* 13900-139FF: page 8 */
-       0x8,
-       /* 13A00-13AFF: page 8 */
-       0x8,
-       /* 13B00-13BFF: page 8 */
-       0x8,
-       /* 13C00-13CFF: page 8 */
-       0x8,
-       /* 13D00-13DFF: page 8 */
-       0x8,
-       /* 13E00-13EFF: page 8 */
-       0x8,
-       /* 13F00-13FFF: page 8 */
-       0x8,
-       /* 14000-140FF: page 8 */
-       0x8,
-       /* 14100-141FF: page 8 */
-       0x8,
-       /* 14200-142FF: page 8 */
-       0x8,
-       /* 14300-143FF: page 8 */
-       0x8,
-       /* 14400-144FF: page 8 */
-       0x8,
-       /* 14500-145FF: page 8 */
-       0x8,
-       /* 14600-146FF: page 8 */
-       0x8,
-       /* 14700-147FF: page 8 */
-       0x8,
-       /* 14800-148FF: page 8 */
-       0x8,
-       /* 14900-149FF: page 8 */
-       0x8,
-       /* 14A00-14AFF: page 8 */
-       0x8,
-       /* 14B00-14BFF: page 8 */
-       0x8,
-       /* 14C00-14CFF: page 8 */
-       0x8,
-       /* 14D00-14DFF: page 8 */
-       0x8,
-       /* 14E00-14EFF: page 8 */
-       0x8,
-       /* 14F00-14FFF: page 8 */
-       0x8,
-       /* 15000-150FF: page 8 */
-       0x8,
-       /* 15100-151FF: page 8 */
-       0x8,
-       /* 15200-152FF: page 8 */
-       0x8,
-       /* 15300-153FF: page 8 */
-       0x8,
-       /* 15400-154FF: page 8 */
-       0x8,
-       /* 15500-155FF: page 8 */
-       0x8,
-       /* 15600-156FF: page 8 */
-       0x8,
-       /* 15700-157FF: page 8 */
-       0x8,
-       /* 15800-158FF: page 8 */
-       0x8,
-       /* 15900-159FF: page 8 */
-       0x8,
-       /* 15A00-15AFF: page 8 */
-       0x8,
-       /* 15B00-15BFF: page 8 */
-       0x8,
-       /* 15C00-15CFF: page 8 */
-       0x8,
-       /* 15D00-15DFF: page 8 */
-       0x8,
-       /* 15E00-15EFF: page 8 */
-       0x8,
-       /* 15F00-15FFF: page 8 */
-       0x8,
-       /* 16000-160FF: page 8 */
-       0x8,
-       /* 16100-161FF: page 8 */
-       0x8,
-       /* 16200-162FF: page 8 */
-       0x8,
-       /* 16300-163FF: page 8 */
-       0x8,
-       /* 16400-164FF: page 8 */
-       0x8,
-       /* 16500-165FF: page 8 */
-       0x8,
-       /* 16600-166FF: page 8 */
-       0x8,
-       /* 16700-167FF: page 8 */
-       0x8,
-       /* 16800-168FF: page 8 */
-       0x8,
-       /* 16900-169FF: page 8 */
-       0x8,
-       /* 16A00-16AFF: page 8 */
-       0x8,
-       /* 16B00-16BFF: page 8 */
-       0x8,
-       /* 16C00-16CFF: page 8 */
-       0x8,
-       /* 16D00-16DFF: page 8 */
-       0x8,
-       /* 16E00-16EFF: page 8 */
-       0x8,
-       /* 16F00-16FFF: page 8 */
-       0x8,
-       /* 17000-170FF: page 8 */
-       0x8,
-       /* 17100-171FF: page 8 */
-       0x8,
-       /* 17200-172FF: page 8 */
-       0x8,
-       /* 17300-173FF: page 8 */
-       0x8,
-       /* 17400-174FF: page 8 */
-       0x8,
-       /* 17500-175FF: page 8 */
-       0x8,
-       /* 17600-176FF: page 8 */
-       0x8,
-       /* 17700-177FF: page 8 */
-       0x8,
-       /* 17800-178FF: page 8 */
-       0x8,
-       /* 17900-179FF: page 8 */
-       0x8,
-       /* 17A00-17AFF: page 8 */
-       0x8,
-       /* 17B00-17BFF: page 8 */
-       0x8,
-       /* 17C00-17CFF: page 8 */
-       0x8,
-       /* 17D00-17DFF: page 8 */
-       0x8,
-       /* 17E00-17EFF: page 8 */
-       0x8,
-       /* 17F00-17FFF: page 8 */
-       0x8,
-       /* 18000-180FF: page 8 */
-       0x8,
-       /* 18100-181FF: page 8 */
-       0x8,
-       /* 18200-182FF: page 8 */
-       0x8,
-       /* 18300-183FF: page 8 */
-       0x8,
-       /* 18400-184FF: page 8 */
-       0x8,
-       /* 18500-185FF: page 8 */
-       0x8,
-       /* 18600-186FF: page 8 */
-       0x8,
-       /* 18700-187FF: page 8 */
-       0x8,
-       /* 18800-188FF: page 8 */
-       0x8,
-       /* 18900-189FF: page 8 */
-       0x8,
-       /* 18A00-18AFF: page 8 */
-       0x8,
-       /* 18B00-18BFF: page 8 */
-       0x8,
-       /* 18C00-18CFF: page 8 */
-       0x8,
-       /* 18D00-18DFF: page 8 */
-       0x8,
-       /* 18E00-18EFF: page 8 */
-       0x8,
-       /* 18F00-18FFF: page 8 */
-       0x8,
-       /* 19000-190FF: page 8 */
-       0x8,
-       /* 19100-191FF: page 8 */
-       0x8,
-       /* 19200-192FF: page 8 */
-       0x8,
-       /* 19300-193FF: page 8 */
-       0x8,
-       /* 19400-194FF: page 8 */
-       0x8,
-       /* 19500-195FF: page 8 */
-       0x8,
-       /* 19600-196FF: page 8 */
-       0x8,
-       /* 19700-197FF: page 8 */
-       0x8,
-       /* 19800-198FF: page 8 */
-       0x8,
-       /* 19900-199FF: page 8 */
-       0x8,
-       /* 19A00-19AFF: page 8 */
-       0x8,
-       /* 19B00-19BFF: page 8 */
-       0x8,
-       /* 19C00-19CFF: page 8 */
-       0x8,
-       /* 19D00-19DFF: page 8 */
-       0x8,
-       /* 19E00-19EFF: page 8 */
-       0x8,
-       /* 19F00-19FFF: page 8 */
-       0x8,
-       /* 1A000-1A0FF: page 8 */
-       0x8,
-       /* 1A100-1A1FF: page 8 */
-       0x8,
-       /* 1A200-1A2FF: page 8 */
-       0x8,
-       /* 1A300-1A3FF: page 8 */
-       0x8,
-       /* 1A400-1A4FF: page 8 */
-       0x8,
-       /* 1A500-1A5FF: page 8 */
-       0x8,
-       /* 1A600-1A6FF: page 8 */
-       0x8,
-       /* 1A700-1A7FF: page 8 */
-       0x8,
-       /* 1A800-1A8FF: page 8 */
-       0x8,
-       /* 1A900-1A9FF: page 8 */
-       0x8,
-       /* 1AA00-1AAFF: page 8 */
-       0x8,
-       /* 1AB00-1ABFF: page 8 */
-       0x8,
-       /* 1AC00-1ACFF: page 8 */
-       0x8,
-       /* 1AD00-1ADFF: page 8 */
-       0x8,
-       /* 1AE00-1AEFF: page 8 */
-       0x8,
-       /* 1AF00-1AFFF: page 8 */
-       0x8,
-       /* 1B000-1B0FF: page 8 */
-       0x8,
-       /* 1B100-1B1FF: page 8 */
-       0x8,
-       /* 1B200-1B2FF: page 8 */
-       0x8,
-       /* 1B300-1B3FF: page 8 */
-       0x8,
-       /* 1B400-1B4FF: page 8 */
-       0x8,
-       /* 1B500-1B5FF: page 8 */
-       0x8,
-       /* 1B600-1B6FF: page 8 */
-       0x8,
-       /* 1B700-1B7FF: page 8 */
-       0x8,
-       /* 1B800-1B8FF: page 8 */
-       0x8,
-       /* 1B900-1B9FF: page 8 */
-       0x8,
-       /* 1BA00-1BAFF: page 8 */
-       0x8,
-       /* 1BB00-1BBFF: page 8 */
-       0x8,
-       /* 1BC00-1BCFF: page 8 */
-       0x8,
-       /* 1BD00-1BDFF: page 8 */
-       0x8,
-       /* 1BE00-1BEFF: page 8 */
-       0x8,
-       /* 1BF00-1BFFF: page 8 */
-       0x8,
-       /* 1C000-1C0FF: page 8 */
-       0x8,
-       /* 1C100-1C1FF: page 8 */
-       0x8,
-       /* 1C200-1C2FF: page 8 */
-       0x8,
-       /* 1C300-1C3FF: page 8 */
-       0x8,
-       /* 1C400-1C4FF: page 8 */
-       0x8,
-       /* 1C500-1C5FF: page 8 */
-       0x8,
-       /* 1C600-1C6FF: page 8 */
-       0x8,
-       /* 1C700-1C7FF: page 8 */
-       0x8,
-       /* 1C800-1C8FF: page 8 */
-       0x8,
-       /* 1C900-1C9FF: page 8 */
-       0x8,
-       /* 1CA00-1CAFF: page 8 */
-       0x8,
-       /* 1CB00-1CBFF: page 8 */
-       0x8,
-       /* 1CC00-1CCFF: page 8 */
-       0x8,
-       /* 1CD00-1CDFF: page 8 */
-       0x8,
-       /* 1CE00-1CEFF: page 8 */
-       0x8,
-       /* 1CF00-1CFFF: page 8 */
-       0x8,
-       /* 1D000-1D0FF: page 265 */
-       0x109,
-       /* 1D100-1D1FF: page 266 */
-       0x10A,
-       /* 1D200-1D2FF: page 267 */
-       0x10B,
-       /* 1D300-1D3FF: page 268 */
-       0x10C,
-       /* 1D400-1D4FF: page 269 */
-       0x10D,
-       /* 1D500-1D5FF: page 270 */
-       0x10E,
-       /* 1D600-1D6FF: page 271 */
-       0x10F,
-       /* 1D700-1D7FF: page 272 */
-       0x110,
-       /* 1D800-1D8FF: page 8 */
-       0x8,
-       /* 1D900-1D9FF: page 8 */
-       0x8,
-       /* 1DA00-1DAFF: page 8 */
-       0x8,
-       /* 1DB00-1DBFF: page 8 */
-       0x8,
-       /* 1DC00-1DCFF: page 8 */
-       0x8,
-       /* 1DD00-1DDFF: page 8 */
-       0x8,
-       /* 1DE00-1DEFF: page 8 */
-       0x8,
-       /* 1DF00-1DFFF: page 8 */
-       0x8,
-       /* 1E000-1E0FF: page 8 */
-       0x8,
-       /* 1E100-1E1FF: page 8 */
-       0x8,
-       /* 1E200-1E2FF: page 8 */
-       0x8,
-       /* 1E300-1E3FF: page 8 */
-       0x8,
-       /* 1E400-1E4FF: page 8 */
-       0x8,
-       /* 1E500-1E5FF: page 8 */
-       0x8,
-       /* 1E600-1E6FF: page 8 */
-       0x8,
-       /* 1E700-1E7FF: page 8 */
-       0x8,
-       /* 1E800-1E8FF: page 8 */
-       0x8,
-       /* 1E900-1E9FF: page 8 */
-       0x8,
-       /* 1EA00-1EAFF: page 8 */
-       0x8,
-       /* 1EB00-1EBFF: page 8 */
-       0x8,
-       /* 1EC00-1ECFF: page 8 */
-       0x8,
-       /* 1ED00-1EDFF: page 8 */
-       0x8,
-       /* 1EE00-1EEFF: page 8 */
-       0x8,
-       /* 1EF00-1EFFF: page 8 */
-       0x8,
-       /* 1F000-1F0FF: page 8 */
-       0x8,
-       /* 1F100-1F1FF: page 8 */
-       0x8,
-       /* 1F200-1F2FF: page 8 */
-       0x8,
-       /* 1F300-1F3FF: page 8 */
-       0x8,
-       /* 1F400-1F4FF: page 8 */
-       0x8,
-       /* 1F500-1F5FF: page 8 */
-       0x8,
-       /* 1F600-1F6FF: page 8 */
-       0x8,
-       /* 1F700-1F7FF: page 8 */
-       0x8,
-       /* 1F800-1F8FF: page 8 */
-       0x8,
-       /* 1F900-1F9FF: page 8 */
-       0x8,
-       /* 1FA00-1FAFF: page 8 */
-       0x8,
-       /* 1FB00-1FBFF: page 8 */
-       0x8,
-       /* 1FC00-1FCFF: page 8 */
-       0x8,
-       /* 1FD00-1FDFF: page 8 */
-       0x8,
-       /* 1FE00-1FEFF: page 8 */
-       0x8,
-       /* 1FF00-1FFFF: page 8 */
-       0x8,
-       /* 20000-200FF: page 21 */
-       0x15,
-       /* 20100-201FF: page 21 */
-       0x15,
-       /* 20200-202FF: page 21 */
-       0x15,
-       /* 20300-203FF: page 21 */
-       0x15,
-       /* 20400-204FF: page 21 */
-       0x15,
-       /* 20500-205FF: page 21 */
-       0x15,
-       /* 20600-206FF: page 21 */
-       0x15,
-       /* 20700-207FF: page 21 */
-       0x15,
-       /* 20800-208FF: page 21 */
-       0x15,
-       /* 20900-209FF: page 21 */
-       0x15,
-       /* 20A00-20AFF: page 21 */
-       0x15,
-       /* 20B00-20BFF: page 21 */
-       0x15,
-       /* 20C00-20CFF: page 21 */
-       0x15,
-       /* 20D00-20DFF: page 21 */
-       0x15,
-       /* 20E00-20EFF: page 21 */
-       0x15,
-       /* 20F00-20FFF: page 21 */
-       0x15,
-       /* 21000-210FF: page 21 */
-       0x15,
-       /* 21100-211FF: page 21 */
-       0x15,
-       /* 21200-212FF: page 21 */
-       0x15,
-       /* 21300-213FF: page 21 */
-       0x15,
-       /* 21400-214FF: page 21 */
-       0x15,
-       /* 21500-215FF: page 21 */
-       0x15,
-       /* 21600-216FF: page 21 */
-       0x15,
-       /* 21700-217FF: page 21 */
-       0x15,
-       /* 21800-218FF: page 21 */
-       0x15,
-       /* 21900-219FF: page 21 */
-       0x15,
-       /* 21A00-21AFF: page 21 */
-       0x15,
-       /* 21B00-21BFF: page 21 */
-       0x15,
-       /* 21C00-21CFF: page 21 */
-       0x15,
-       /* 21D00-21DFF: page 21 */
-       0x15,
-       /* 21E00-21EFF: page 21 */
-       0x15,
-       /* 21F00-21FFF: page 21 */
-       0x15,
-       /* 22000-220FF: page 21 */
-       0x15,
-       /* 22100-221FF: page 21 */
-       0x15,
-       /* 22200-222FF: page 21 */
-       0x15,
-       /* 22300-223FF: page 21 */
-       0x15,
-       /* 22400-224FF: page 21 */
-       0x15,
-       /* 22500-225FF: page 21 */
-       0x15,
-       /* 22600-226FF: page 21 */
-       0x15,
-       /* 22700-227FF: page 21 */
-       0x15,
-       /* 22800-228FF: page 21 */
-       0x15,
-       /* 22900-229FF: page 21 */
-       0x15,
-       /* 22A00-22AFF: page 21 */
-       0x15,
-       /* 22B00-22BFF: page 21 */
-       0x15,
-       /* 22C00-22CFF: page 21 */
-       0x15,
-       /* 22D00-22DFF: page 21 */
-       0x15,
-       /* 22E00-22EFF: page 21 */
-       0x15,
-       /* 22F00-22FFF: page 21 */
-       0x15,
-       /* 23000-230FF: page 21 */
-       0x15,
-       /* 23100-231FF: page 21 */
-       0x15,
-       /* 23200-232FF: page 21 */
-       0x15,
-       /* 23300-233FF: page 21 */
-       0x15,
-       /* 23400-234FF: page 21 */
-       0x15,
-       /* 23500-235FF: page 21 */
-       0x15,
-       /* 23600-236FF: page 21 */
-       0x15,
-       /* 23700-237FF: page 21 */
-       0x15,
-       /* 23800-238FF: page 21 */
-       0x15,
-       /* 23900-239FF: page 21 */
-       0x15,
-       /* 23A00-23AFF: page 21 */
-       0x15,
-       /* 23B00-23BFF: page 21 */
-       0x15,
-       /* 23C00-23CFF: page 21 */
-       0x15,
-       /* 23D00-23DFF: page 21 */
-       0x15,
-       /* 23E00-23EFF: page 21 */
-       0x15,
-       /* 23F00-23FFF: page 21 */
-       0x15,
-       /* 24000-240FF: page 21 */
-       0x15,
-       /* 24100-241FF: page 21 */
-       0x15,
-       /* 24200-242FF: page 21 */
-       0x15,
-       /* 24300-243FF: page 21 */
-       0x15,
-       /* 24400-244FF: page 21 */
-       0x15,
-       /* 24500-245FF: page 21 */
-       0x15,
-       /* 24600-246FF: page 21 */
-       0x15,
-       /* 24700-247FF: page 21 */
-       0x15,
-       /* 24800-248FF: page 21 */
-       0x15,
-       /* 24900-249FF: page 21 */
-       0x15,
-       /* 24A00-24AFF: page 21 */
-       0x15,
-       /* 24B00-24BFF: page 21 */
-       0x15,
-       /* 24C00-24CFF: page 21 */
-       0x15,
-       /* 24D00-24DFF: page 21 */
-       0x15,
-       /* 24E00-24EFF: page 21 */
-       0x15,
-       /* 24F00-24FFF: page 21 */
-       0x15,
-       /* 25000-250FF: page 21 */
-       0x15,
-       /* 25100-251FF: page 21 */
-       0x15,
-       /* 25200-252FF: page 21 */
-       0x15,
-       /* 25300-253FF: page 21 */
-       0x15,
-       /* 25400-254FF: page 21 */
-       0x15,
-       /* 25500-255FF: page 21 */
-       0x15,
-       /* 25600-256FF: page 21 */
-       0x15,
-       /* 25700-257FF: page 21 */
-       0x15,
-       /* 25800-258FF: page 21 */
-       0x15,
-       /* 25900-259FF: page 21 */
-       0x15,
-       /* 25A00-25AFF: page 21 */
-       0x15,
-       /* 25B00-25BFF: page 21 */
-       0x15,
-       /* 25C00-25CFF: page 21 */
-       0x15,
-       /* 25D00-25DFF: page 21 */
-       0x15,
-       /* 25E00-25EFF: page 21 */
-       0x15,
-       /* 25F00-25FFF: page 21 */
-       0x15,
-       /* 26000-260FF: page 21 */
-       0x15,
-       /* 26100-261FF: page 21 */
-       0x15,
-       /* 26200-262FF: page 21 */
-       0x15,
-       /* 26300-263FF: page 21 */
-       0x15,
-       /* 26400-264FF: page 21 */
-       0x15,
-       /* 26500-265FF: page 21 */
-       0x15,
-       /* 26600-266FF: page 21 */
-       0x15,
-       /* 26700-267FF: page 21 */
-       0x15,
-       /* 26800-268FF: page 21 */
-       0x15,
-       /* 26900-269FF: page 21 */
-       0x15,
-       /* 26A00-26AFF: page 21 */
-       0x15,
-       /* 26B00-26BFF: page 21 */
-       0x15,
-       /* 26C00-26CFF: page 21 */
-       0x15,
-       /* 26D00-26DFF: page 21 */
-       0x15,
-       /* 26E00-26EFF: page 21 */
-       0x15,
-       /* 26F00-26FFF: page 21 */
-       0x15,
-       /* 27000-270FF: page 21 */
-       0x15,
-       /* 27100-271FF: page 21 */
-       0x15,
-       /* 27200-272FF: page 21 */
-       0x15,
-       /* 27300-273FF: page 21 */
-       0x15,
-       /* 27400-274FF: page 21 */
-       0x15,
-       /* 27500-275FF: page 21 */
-       0x15,
-       /* 27600-276FF: page 21 */
-       0x15,
-       /* 27700-277FF: page 21 */
-       0x15,
-       /* 27800-278FF: page 21 */
-       0x15,
-       /* 27900-279FF: page 21 */
-       0x15,
-       /* 27A00-27AFF: page 21 */
-       0x15,
-       /* 27B00-27BFF: page 21 */
-       0x15,
-       /* 27C00-27CFF: page 21 */
-       0x15,
-       /* 27D00-27DFF: page 21 */
-       0x15,
-       /* 27E00-27EFF: page 21 */
-       0x15,
-       /* 27F00-27FFF: page 21 */
-       0x15,
-       /* 28000-280FF: page 21 */
-       0x15,
-       /* 28100-281FF: page 21 */
-       0x15,
-       /* 28200-282FF: page 21 */
-       0x15,
-       /* 28300-283FF: page 21 */
-       0x15,
-       /* 28400-284FF: page 21 */
-       0x15,
-       /* 28500-285FF: page 21 */
-       0x15,
-       /* 28600-286FF: page 21 */
-       0x15,
-       /* 28700-287FF: page 21 */
-       0x15,
-       /* 28800-288FF: page 21 */
-       0x15,
-       /* 28900-289FF: page 21 */
-       0x15,
-       /* 28A00-28AFF: page 21 */
-       0x15,
-       /* 28B00-28BFF: page 21 */
-       0x15,
-       /* 28C00-28CFF: page 21 */
-       0x15,
-       /* 28D00-28DFF: page 21 */
-       0x15,
-       /* 28E00-28EFF: page 21 */
-       0x15,
-       /* 28F00-28FFF: page 21 */
-       0x15,
-       /* 29000-290FF: page 21 */
-       0x15,
-       /* 29100-291FF: page 21 */
-       0x15,
-       /* 29200-292FF: page 21 */
-       0x15,
-       /* 29300-293FF: page 21 */
-       0x15,
-       /* 29400-294FF: page 21 */
-       0x15,
-       /* 29500-295FF: page 21 */
-       0x15,
-       /* 29600-296FF: page 21 */
-       0x15,
-       /* 29700-297FF: page 21 */
-       0x15,
-       /* 29800-298FF: page 21 */
-       0x15,
-       /* 29900-299FF: page 21 */
-       0x15,
-       /* 29A00-29AFF: page 21 */
-       0x15,
-       /* 29B00-29BFF: page 21 */
-       0x15,
-       /* 29C00-29CFF: page 21 */
-       0x15,
-       /* 29D00-29DFF: page 21 */
-       0x15,
-       /* 29E00-29EFF: page 21 */
-       0x15,
-       /* 29F00-29FFF: page 21 */
-       0x15,
-       /* 2A000-2A0FF: page 21 */
-       0x15,
-       /* 2A100-2A1FF: page 21 */
-       0x15,
-       /* 2A200-2A2FF: page 21 */
-       0x15,
-       /* 2A300-2A3FF: page 21 */
-       0x15,
-       /* 2A400-2A4FF: page 21 */
-       0x15,
-       /* 2A500-2A5FF: page 21 */
-       0x15,
-       /* 2A600-2A6FF: page 273 */
-       0x111,
-       /* 2A700-2A7FF: page 8 */
-       0x8,
-       /* 2A800-2A8FF: page 8 */
-       0x8,
-       /* 2A900-2A9FF: page 8 */
-       0x8,
-       /* 2AA00-2AAFF: page 8 */
-       0x8,
-       /* 2AB00-2ABFF: page 8 */
-       0x8,
-       /* 2AC00-2ACFF: page 8 */
-       0x8,
-       /* 2AD00-2ADFF: page 8 */
-       0x8,
-       /* 2AE00-2AEFF: page 8 */
-       0x8,
-       /* 2AF00-2AFFF: page 8 */
-       0x8,
-       /* 2B000-2B0FF: page 8 */
-       0x8,
-       /* 2B100-2B1FF: page 8 */
-       0x8,
-       /* 2B200-2B2FF: page 8 */
-       0x8,
-       /* 2B300-2B3FF: page 8 */
-       0x8,
-       /* 2B400-2B4FF: page 8 */
-       0x8,
-       /* 2B500-2B5FF: page 8 */
-       0x8,
-       /* 2B600-2B6FF: page 8 */
-       0x8,
-       /* 2B700-2B7FF: page 8 */
-       0x8,
-       /* 2B800-2B8FF: page 8 */
-       0x8,
-       /* 2B900-2B9FF: page 8 */
-       0x8,
-       /* 2BA00-2BAFF: page 8 */
-       0x8,
-       /* 2BB00-2BBFF: page 8 */
-       0x8,
-       /* 2BC00-2BCFF: page 8 */
-       0x8,
-       /* 2BD00-2BDFF: page 8 */
-       0x8,
-       /* 2BE00-2BEFF: page 8 */
-       0x8,
-       /* 2BF00-2BFFF: page 8 */
-       0x8,
-       /* 2C000-2C0FF: page 8 */
-       0x8,
-       /* 2C100-2C1FF: page 8 */
-       0x8,
-       /* 2C200-2C2FF: page 8 */
-       0x8,
-       /* 2C300-2C3FF: page 8 */
-       0x8,
-       /* 2C400-2C4FF: page 8 */
-       0x8,
-       /* 2C500-2C5FF: page 8 */
-       0x8,
-       /* 2C600-2C6FF: page 8 */
-       0x8,
-       /* 2C700-2C7FF: page 8 */
-       0x8,
-       /* 2C800-2C8FF: page 8 */
-       0x8,
-       /* 2C900-2C9FF: page 8 */
-       0x8,
-       /* 2CA00-2CAFF: page 8 */
-       0x8,
-       /* 2CB00-2CBFF: page 8 */
-       0x8,
-       /* 2CC00-2CCFF: page 8 */
-       0x8,
-       /* 2CD00-2CDFF: page 8 */
-       0x8,
-       /* 2CE00-2CEFF: page 8 */
-       0x8,
-       /* 2CF00-2CFFF: page 8 */
-       0x8,
-       /* 2D000-2D0FF: page 8 */
-       0x8,
-       /* 2D100-2D1FF: page 8 */
-       0x8,
-       /* 2D200-2D2FF: page 8 */
-       0x8,
-       /* 2D300-2D3FF: page 8 */
-       0x8,
-       /* 2D400-2D4FF: page 8 */
-       0x8,
-       /* 2D500-2D5FF: page 8 */
-       0x8,
-       /* 2D600-2D6FF: page 8 */
-       0x8,
-       /* 2D700-2D7FF: page 8 */
-       0x8,
-       /* 2D800-2D8FF: page 8 */
-       0x8,
-       /* 2D900-2D9FF: page 8 */
-       0x8,
-       /* 2DA00-2DAFF: page 8 */
-       0x8,
-       /* 2DB00-2DBFF: page 8 */
-       0x8,
-       /* 2DC00-2DCFF: page 8 */
-       0x8,
-       /* 2DD00-2DDFF: page 8 */
-       0x8,
-       /* 2DE00-2DEFF: page 8 */
-       0x8,
-       /* 2DF00-2DFFF: page 8 */
-       0x8,
-       /* 2E000-2E0FF: page 8 */
-       0x8,
-       /* 2E100-2E1FF: page 8 */
-       0x8,
-       /* 2E200-2E2FF: page 8 */
-       0x8,
-       /* 2E300-2E3FF: page 8 */
-       0x8,
-       /* 2E400-2E4FF: page 8 */
-       0x8,
-       /* 2E500-2E5FF: page 8 */
-       0x8,
-       /* 2E600-2E6FF: page 8 */
-       0x8,
-       /* 2E700-2E7FF: page 8 */
-       0x8,
-       /* 2E800-2E8FF: page 8 */
-       0x8,
-       /* 2E900-2E9FF: page 8 */
-       0x8,
-       /* 2EA00-2EAFF: page 8 */
-       0x8,
-       /* 2EB00-2EBFF: page 8 */
-       0x8,
-       /* 2EC00-2ECFF: page 8 */
-       0x8,
-       /* 2ED00-2EDFF: page 8 */
-       0x8,
-       /* 2EE00-2EEFF: page 8 */
-       0x8,
-       /* 2EF00-2EFFF: page 8 */
-       0x8,
-       /* 2F000-2F0FF: page 8 */
-       0x8,
-       /* 2F100-2F1FF: page 8 */
-       0x8,
-       /* 2F200-2F2FF: page 8 */
-       0x8,
-       /* 2F300-2F3FF: page 8 */
-       0x8,
-       /* 2F400-2F4FF: page 8 */
-       0x8,
-       /* 2F500-2F5FF: page 8 */
-       0x8,
-       /* 2F600-2F6FF: page 8 */
-       0x8,
-       /* 2F700-2F7FF: page 8 */
-       0x8,
-       /* 2F800-2F8FF: page 21 */
-       0x15,
-       /* 2F900-2F9FF: page 21 */
-       0x15,
-       /* 2FA00-2FAFF: page 274 */
-       0x112,
-       /* 2FB00-2FBFF: page 8 */
-       0x8,
-       /* 2FC00-2FCFF: page 8 */
-       0x8,
-       /* 2FD00-2FDFF: page 8 */
-       0x8,
-       /* 2FE00-2FEFF: page 8 */
-       0x8,
-       /* 2FF00-2FFFF: page 8 */
-       0x8,
-       /* 30000-300FF: page 8 */
-       0x8,
-       /* 30100-301FF: page 8 */
-       0x8,
-       /* 30200-302FF: page 8 */
-       0x8,
-       /* 30300-303FF: page 8 */
-       0x8,
-       /* 30400-304FF: page 8 */
-       0x8,
-       /* 30500-305FF: page 8 */
-       0x8,
-       /* 30600-306FF: page 8 */
-       0x8,
-       /* 30700-307FF: page 8 */
-       0x8,
-       /* 30800-308FF: page 8 */
-       0x8,
-       /* 30900-309FF: page 8 */
-       0x8,
-       /* 30A00-30AFF: page 8 */
-       0x8,
-       /* 30B00-30BFF: page 8 */
-       0x8,
-       /* 30C00-30CFF: page 8 */
-       0x8,
-       /* 30D00-30DFF: page 8 */
-       0x8,
-       /* 30E00-30EFF: page 8 */
-       0x8,
-       /* 30F00-30FFF: page 8 */
-       0x8,
-       /* 31000-310FF: page 8 */
-       0x8,
-       /* 31100-311FF: page 8 */
-       0x8,
-       /* 31200-312FF: page 8 */
-       0x8,
-       /* 31300-313FF: page 8 */
-       0x8,
-       /* 31400-314FF: page 8 */
-       0x8,
-       /* 31500-315FF: page 8 */
-       0x8,
-       /* 31600-316FF: page 8 */
-       0x8,
-       /* 31700-317FF: page 8 */
-       0x8,
-       /* 31800-318FF: page 8 */
-       0x8,
-       /* 31900-319FF: page 8 */
-       0x8,
-       /* 31A00-31AFF: page 8 */
-       0x8,
-       /* 31B00-31BFF: page 8 */
-       0x8,
-       /* 31C00-31CFF: page 8 */
-       0x8,
-       /* 31D00-31DFF: page 8 */
-       0x8,
-       /* 31E00-31EFF: page 8 */
-       0x8,
-       /* 31F00-31FFF: page 8 */
-       0x8,
-       /* 32000-320FF: page 8 */
-       0x8,
-       /* 32100-321FF: page 8 */
-       0x8,
-       /* 32200-322FF: page 8 */
-       0x8,
-       /* 32300-323FF: page 8 */
-       0x8,
-       /* 32400-324FF: page 8 */
-       0x8,
-       /* 32500-325FF: page 8 */
-       0x8,
-       /* 32600-326FF: page 8 */
-       0x8,
-       /* 32700-327FF: page 8 */
-       0x8,
-       /* 32800-328FF: page 8 */
-       0x8,
-       /* 32900-329FF: page 8 */
-       0x8,
-       /* 32A00-32AFF: page 8 */
-       0x8,
-       /* 32B00-32BFF: page 8 */
-       0x8,
-       /* 32C00-32CFF: page 8 */
-       0x8,
-       /* 32D00-32DFF: page 8 */
-       0x8,
-       /* 32E00-32EFF: page 8 */
-       0x8,
-       /* 32F00-32FFF: page 8 */
-       0x8,
-       /* 33000-330FF: page 8 */
-       0x8,
-       /* 33100-331FF: page 8 */
-       0x8,
-       /* 33200-332FF: page 8 */
-       0x8,
-       /* 33300-333FF: page 8 */
-       0x8,
-       /* 33400-334FF: page 8 */
-       0x8,
-       /* 33500-335FF: page 8 */
-       0x8,
-       /* 33600-336FF: page 8 */
-       0x8,
-       /* 33700-337FF: page 8 */
-       0x8,
-       /* 33800-338FF: page 8 */
-       0x8,
-       /* 33900-339FF: page 8 */
-       0x8,
-       /* 33A00-33AFF: page 8 */
-       0x8,
-       /* 33B00-33BFF: page 8 */
-       0x8,
-       /* 33C00-33CFF: page 8 */
-       0x8,
-       /* 33D00-33DFF: page 8 */
-       0x8,
-       /* 33E00-33EFF: page 8 */
-       0x8,
-       /* 33F00-33FFF: page 8 */
-       0x8,
-       /* 34000-340FF: page 8 */
-       0x8,
-       /* 34100-341FF: page 8 */
-       0x8,
-       /* 34200-342FF: page 8 */
-       0x8,
-       /* 34300-343FF: page 8 */
-       0x8,
-       /* 34400-344FF: page 8 */
-       0x8,
-       /* 34500-345FF: page 8 */
-       0x8,
-       /* 34600-346FF: page 8 */
-       0x8,
-       /* 34700-347FF: page 8 */
-       0x8,
-       /* 34800-348FF: page 8 */
-       0x8,
-       /* 34900-349FF: page 8 */
-       0x8,
-       /* 34A00-34AFF: page 8 */
-       0x8,
-       /* 34B00-34BFF: page 8 */
-       0x8,
-       /* 34C00-34CFF: page 8 */
-       0x8,
-       /* 34D00-34DFF: page 8 */
-       0x8,
-       /* 34E00-34EFF: page 8 */
-       0x8,
-       /* 34F00-34FFF: page 8 */
-       0x8,
-       /* 35000-350FF: page 8 */
-       0x8,
-       /* 35100-351FF: page 8 */
-       0x8,
-       /* 35200-352FF: page 8 */
-       0x8,
-       /* 35300-353FF: page 8 */
-       0x8,
-       /* 35400-354FF: page 8 */
-       0x8,
-       /* 35500-355FF: page 8 */
-       0x8,
-       /* 35600-356FF: page 8 */
-       0x8,
-       /* 35700-357FF: page 8 */
-       0x8,
-       /* 35800-358FF: page 8 */
-       0x8,
-       /* 35900-359FF: page 8 */
-       0x8,
-       /* 35A00-35AFF: page 8 */
-       0x8,
-       /* 35B00-35BFF: page 8 */
-       0x8,
-       /* 35C00-35CFF: page 8 */
-       0x8,
-       /* 35D00-35DFF: page 8 */
-       0x8,
-       /* 35E00-35EFF: page 8 */
-       0x8,
-       /* 35F00-35FFF: page 8 */
-       0x8,
-       /* 36000-360FF: page 8 */
-       0x8,
-       /* 36100-361FF: page 8 */
-       0x8,
-       /* 36200-362FF: page 8 */
-       0x8,
-       /* 36300-363FF: page 8 */
-       0x8,
-       /* 36400-364FF: page 8 */
-       0x8,
-       /* 36500-365FF: page 8 */
-       0x8,
-       /* 36600-366FF: page 8 */
-       0x8,
-       /* 36700-367FF: page 8 */
-       0x8,
-       /* 36800-368FF: page 8 */
-       0x8,
-       /* 36900-369FF: page 8 */
-       0x8,
-       /* 36A00-36AFF: page 8 */
-       0x8,
-       /* 36B00-36BFF: page 8 */
-       0x8,
-       /* 36C00-36CFF: page 8 */
-       0x8,
-       /* 36D00-36DFF: page 8 */
-       0x8,
-       /* 36E00-36EFF: page 8 */
-       0x8,
-       /* 36F00-36FFF: page 8 */
-       0x8,
-       /* 37000-370FF: page 8 */
-       0x8,
-       /* 37100-371FF: page 8 */
-       0x8,
-       /* 37200-372FF: page 8 */
-       0x8,
-       /* 37300-373FF: page 8 */
-       0x8,
-       /* 37400-374FF: page 8 */
-       0x8,
-       /* 37500-375FF: page 8 */
-       0x8,
-       /* 37600-376FF: page 8 */
-       0x8,
-       /* 37700-377FF: page 8 */
-       0x8,
-       /* 37800-378FF: page 8 */
-       0x8,
-       /* 37900-379FF: page 8 */
-       0x8,
-       /* 37A00-37AFF: page 8 */
-       0x8,
-       /* 37B00-37BFF: page 8 */
-       0x8,
-       /* 37C00-37CFF: page 8 */
-       0x8,
-       /* 37D00-37DFF: page 8 */
-       0x8,
-       /* 37E00-37EFF: page 8 */
-       0x8,
-       /* 37F00-37FFF: page 8 */
-       0x8,
-       /* 38000-380FF: page 8 */
-       0x8,
-       /* 38100-381FF: page 8 */
-       0x8,
-       /* 38200-382FF: page 8 */
-       0x8,
-       /* 38300-383FF: page 8 */
-       0x8,
-       /* 38400-384FF: page 8 */
-       0x8,
-       /* 38500-385FF: page 8 */
-       0x8,
-       /* 38600-386FF: page 8 */
-       0x8,
-       /* 38700-387FF: page 8 */
-       0x8,
-       /* 38800-388FF: page 8 */
-       0x8,
-       /* 38900-389FF: page 8 */
-       0x8,
-       /* 38A00-38AFF: page 8 */
-       0x8,
-       /* 38B00-38BFF: page 8 */
-       0x8,
-       /* 38C00-38CFF: page 8 */
-       0x8,
-       /* 38D00-38DFF: page 8 */
-       0x8,
-       /* 38E00-38EFF: page 8 */
-       0x8,
-       /* 38F00-38FFF: page 8 */
-       0x8,
-       /* 39000-390FF: page 8 */
-       0x8,
-       /* 39100-391FF: page 8 */
-       0x8,
-       /* 39200-392FF: page 8 */
-       0x8,
-       /* 39300-393FF: page 8 */
-       0x8,
-       /* 39400-394FF: page 8 */
-       0x8,
-       /* 39500-395FF: page 8 */
-       0x8,
-       /* 39600-396FF: page 8 */
-       0x8,
-       /* 39700-397FF: page 8 */
-       0x8,
-       /* 39800-398FF: page 8 */
-       0x8,
-       /* 39900-399FF: page 8 */
-       0x8,
-       /* 39A00-39AFF: page 8 */
-       0x8,
-       /* 39B00-39BFF: page 8 */
-       0x8,
-       /* 39C00-39CFF: page 8 */
-       0x8,
-       /* 39D00-39DFF: page 8 */
-       0x8,
-       /* 39E00-39EFF: page 8 */
-       0x8,
-       /* 39F00-39FFF: page 8 */
-       0x8,
-       /* 3A000-3A0FF: page 8 */
-       0x8,
-       /* 3A100-3A1FF: page 8 */
-       0x8,
-       /* 3A200-3A2FF: page 8 */
-       0x8,
-       /* 3A300-3A3FF: page 8 */
-       0x8,
-       /* 3A400-3A4FF: page 8 */
-       0x8,
-       /* 3A500-3A5FF: page 8 */
-       0x8,
-       /* 3A600-3A6FF: page 8 */
-       0x8,
-       /* 3A700-3A7FF: page 8 */
-       0x8,
-       /* 3A800-3A8FF: page 8 */
-       0x8,
-       /* 3A900-3A9FF: page 8 */
-       0x8,
-       /* 3AA00-3AAFF: page 8 */
-       0x8,
-       /* 3AB00-3ABFF: page 8 */
-       0x8,
-       /* 3AC00-3ACFF: page 8 */
-       0x8,
-       /* 3AD00-3ADFF: page 8 */
-       0x8,
-       /* 3AE00-3AEFF: page 8 */
-       0x8,
-       /* 3AF00-3AFFF: page 8 */
-       0x8,
-       /* 3B000-3B0FF: page 8 */
-       0x8,
-       /* 3B100-3B1FF: page 8 */
-       0x8,
-       /* 3B200-3B2FF: page 8 */
-       0x8,
-       /* 3B300-3B3FF: page 8 */
-       0x8,
-       /* 3B400-3B4FF: page 8 */
-       0x8,
-       /* 3B500-3B5FF: page 8 */
-       0x8,
-       /* 3B600-3B6FF: page 8 */
-       0x8,
-       /* 3B700-3B7FF: page 8 */
-       0x8,
-       /* 3B800-3B8FF: page 8 */
-       0x8,
-       /* 3B900-3B9FF: page 8 */
-       0x8,
-       /* 3BA00-3BAFF: page 8 */
-       0x8,
-       /* 3BB00-3BBFF: page 8 */
-       0x8,
-       /* 3BC00-3BCFF: page 8 */
-       0x8,
-       /* 3BD00-3BDFF: page 8 */
-       0x8,
-       /* 3BE00-3BEFF: page 8 */
-       0x8,
-       /* 3BF00-3BFFF: page 8 */
-       0x8,
-       /* 3C000-3C0FF: page 8 */
-       0x8,
-       /* 3C100-3C1FF: page 8 */
-       0x8,
-       /* 3C200-3C2FF: page 8 */
-       0x8,
-       /* 3C300-3C3FF: page 8 */
-       0x8,
-       /* 3C400-3C4FF: page 8 */
-       0x8,
-       /* 3C500-3C5FF: page 8 */
-       0x8,
-       /* 3C600-3C6FF: page 8 */
-       0x8,
-       /* 3C700-3C7FF: page 8 */
-       0x8,
-       /* 3C800-3C8FF: page 8 */
-       0x8,
-       /* 3C900-3C9FF: page 8 */
-       0x8,
-       /* 3CA00-3CAFF: page 8 */
-       0x8,
-       /* 3CB00-3CBFF: page 8 */
-       0x8,
-       /* 3CC00-3CCFF: page 8 */
-       0x8,
-       /* 3CD00-3CDFF: page 8 */
-       0x8,
-       /* 3CE00-3CEFF: page 8 */
-       0x8,
-       /* 3CF00-3CFFF: page 8 */
-       0x8,
-       /* 3D000-3D0FF: page 8 */
-       0x8,
-       /* 3D100-3D1FF: page 8 */
-       0x8,
-       /* 3D200-3D2FF: page 8 */
-       0x8,
-       /* 3D300-3D3FF: page 8 */
-       0x8,
-       /* 3D400-3D4FF: page 8 */
-       0x8,
-       /* 3D500-3D5FF: page 8 */
-       0x8,
-       /* 3D600-3D6FF: page 8 */
-       0x8,
-       /* 3D700-3D7FF: page 8 */
-       0x8,
-       /* 3D800-3D8FF: page 8 */
-       0x8,
-       /* 3D900-3D9FF: page 8 */
-       0x8,
-       /* 3DA00-3DAFF: page 8 */
-       0x8,
-       /* 3DB00-3DBFF: page 8 */
-       0x8,
-       /* 3DC00-3DCFF: page 8 */
-       0x8,
-       /* 3DD00-3DDFF: page 8 */
-       0x8,
-       /* 3DE00-3DEFF: page 8 */
-       0x8,
-       /* 3DF00-3DFFF: page 8 */
-       0x8,
-       /* 3E000-3E0FF: page 8 */
-       0x8,
-       /* 3E100-3E1FF: page 8 */
-       0x8,
-       /* 3E200-3E2FF: page 8 */
-       0x8,
-       /* 3E300-3E3FF: page 8 */
-       0x8,
-       /* 3E400-3E4FF: page 8 */
-       0x8,
-       /* 3E500-3E5FF: page 8 */
-       0x8,
-       /* 3E600-3E6FF: page 8 */
-       0x8,
-       /* 3E700-3E7FF: page 8 */
-       0x8,
-       /* 3E800-3E8FF: page 8 */
-       0x8,
-       /* 3E900-3E9FF: page 8 */
-       0x8,
-       /* 3EA00-3EAFF: page 8 */
-       0x8,
-       /* 3EB00-3EBFF: page 8 */
-       0x8,
-       /* 3EC00-3ECFF: page 8 */
-       0x8,
-       /* 3ED00-3EDFF: page 8 */
-       0x8,
-       /* 3EE00-3EEFF: page 8 */
-       0x8,
-       /* 3EF00-3EFFF: page 8 */
-       0x8,
-       /* 3F000-3F0FF: page 8 */
-       0x8,
-       /* 3F100-3F1FF: page 8 */
-       0x8,
-       /* 3F200-3F2FF: page 8 */
-       0x8,
-       /* 3F300-3F3FF: page 8 */
-       0x8,
-       /* 3F400-3F4FF: page 8 */
-       0x8,
-       /* 3F500-3F5FF: page 8 */
-       0x8,
-       /* 3F600-3F6FF: page 8 */
-       0x8,
-       /* 3F700-3F7FF: page 8 */
-       0x8,
-       /* 3F800-3F8FF: page 8 */
-       0x8,
-       /* 3F900-3F9FF: page 8 */
-       0x8,
-       /* 3FA00-3FAFF: page 8 */
-       0x8,
-       /* 3FB00-3FBFF: page 8 */
-       0x8,
-       /* 3FC00-3FCFF: page 8 */
-       0x8,
-       /* 3FD00-3FDFF: page 8 */
-       0x8,
-       /* 3FE00-3FEFF: page 8 */
-       0x8,
-       /* 3FF00-3FFFF: page 8 */
-       0x8,
-       /* 40000-400FF: page 8 */
-       0x8,
-       /* 40100-401FF: page 8 */
-       0x8,
-       /* 40200-402FF: page 8 */
-       0x8,
-       /* 40300-403FF: page 8 */
-       0x8,
-       /* 40400-404FF: page 8 */
-       0x8,
-       /* 40500-405FF: page 8 */
-       0x8,
-       /* 40600-406FF: page 8 */
-       0x8,
-       /* 40700-407FF: page 8 */
-       0x8,
-       /* 40800-408FF: page 8 */
-       0x8,
-       /* 40900-409FF: page 8 */
-       0x8,
-       /* 40A00-40AFF: page 8 */
-       0x8,
-       /* 40B00-40BFF: page 8 */
-       0x8,
-       /* 40C00-40CFF: page 8 */
-       0x8,
-       /* 40D00-40DFF: page 8 */
-       0x8,
-       /* 40E00-40EFF: page 8 */
-       0x8,
-       /* 40F00-40FFF: page 8 */
-       0x8,
-       /* 41000-410FF: page 8 */
-       0x8,
-       /* 41100-411FF: page 8 */
-       0x8,
-       /* 41200-412FF: page 8 */
-       0x8,
-       /* 41300-413FF: page 8 */
-       0x8,
-       /* 41400-414FF: page 8 */
-       0x8,
-       /* 41500-415FF: page 8 */
-       0x8,
-       /* 41600-416FF: page 8 */
-       0x8,
-       /* 41700-417FF: page 8 */
-       0x8,
-       /* 41800-418FF: page 8 */
-       0x8,
-       /* 41900-419FF: page 8 */
-       0x8,
-       /* 41A00-41AFF: page 8 */
-       0x8,
-       /* 41B00-41BFF: page 8 */
-       0x8,
-       /* 41C00-41CFF: page 8 */
-       0x8,
-       /* 41D00-41DFF: page 8 */
-       0x8,
-       /* 41E00-41EFF: page 8 */
-       0x8,
-       /* 41F00-41FFF: page 8 */
-       0x8,
-       /* 42000-420FF: page 8 */
-       0x8,
-       /* 42100-421FF: page 8 */
-       0x8,
-       /* 42200-422FF: page 8 */
-       0x8,
-       /* 42300-423FF: page 8 */
-       0x8,
-       /* 42400-424FF: page 8 */
-       0x8,
-       /* 42500-425FF: page 8 */
-       0x8,
-       /* 42600-426FF: page 8 */
-       0x8,
-       /* 42700-427FF: page 8 */
-       0x8,
-       /* 42800-428FF: page 8 */
-       0x8,
-       /* 42900-429FF: page 8 */
-       0x8,
-       /* 42A00-42AFF: page 8 */
-       0x8,
-       /* 42B00-42BFF: page 8 */
-       0x8,
-       /* 42C00-42CFF: page 8 */
-       0x8,
-       /* 42D00-42DFF: page 8 */
-       0x8,
-       /* 42E00-42EFF: page 8 */
-       0x8,
-       /* 42F00-42FFF: page 8 */
-       0x8,
-       /* 43000-430FF: page 8 */
-       0x8,
-       /* 43100-431FF: page 8 */
-       0x8,
-       /* 43200-432FF: page 8 */
-       0x8,
-       /* 43300-433FF: page 8 */
-       0x8,
-       /* 43400-434FF: page 8 */
-       0x8,
-       /* 43500-435FF: page 8 */
-       0x8,
-       /* 43600-436FF: page 8 */
-       0x8,
-       /* 43700-437FF: page 8 */
-       0x8,
-       /* 43800-438FF: page 8 */
-       0x8,
-       /* 43900-439FF: page 8 */
-       0x8,
-       /* 43A00-43AFF: page 8 */
-       0x8,
-       /* 43B00-43BFF: page 8 */
-       0x8,
-       /* 43C00-43CFF: page 8 */
-       0x8,
-       /* 43D00-43DFF: page 8 */
-       0x8,
-       /* 43E00-43EFF: page 8 */
-       0x8,
-       /* 43F00-43FFF: page 8 */
-       0x8,
-       /* 44000-440FF: page 8 */
-       0x8,
-       /* 44100-441FF: page 8 */
-       0x8,
-       /* 44200-442FF: page 8 */
-       0x8,
-       /* 44300-443FF: page 8 */
-       0x8,
-       /* 44400-444FF: page 8 */
-       0x8,
-       /* 44500-445FF: page 8 */
-       0x8,
-       /* 44600-446FF: page 8 */
-       0x8,
-       /* 44700-447FF: page 8 */
-       0x8,
-       /* 44800-448FF: page 8 */
-       0x8,
-       /* 44900-449FF: page 8 */
-       0x8,
-       /* 44A00-44AFF: page 8 */
-       0x8,
-       /* 44B00-44BFF: page 8 */
-       0x8,
-       /* 44C00-44CFF: page 8 */
-       0x8,
-       /* 44D00-44DFF: page 8 */
-       0x8,
-       /* 44E00-44EFF: page 8 */
-       0x8,
-       /* 44F00-44FFF: page 8 */
-       0x8,
-       /* 45000-450FF: page 8 */
-       0x8,
-       /* 45100-451FF: page 8 */
-       0x8,
-       /* 45200-452FF: page 8 */
-       0x8,
-       /* 45300-453FF: page 8 */
-       0x8,
-       /* 45400-454FF: page 8 */
-       0x8,
-       /* 45500-455FF: page 8 */
-       0x8,
-       /* 45600-456FF: page 8 */
-       0x8,
-       /* 45700-457FF: page 8 */
-       0x8,
-       /* 45800-458FF: page 8 */
-       0x8,
-       /* 45900-459FF: page 8 */
-       0x8,
-       /* 45A00-45AFF: page 8 */
-       0x8,
-       /* 45B00-45BFF: page 8 */
-       0x8,
-       /* 45C00-45CFF: page 8 */
-       0x8,
-       /* 45D00-45DFF: page 8 */
-       0x8,
-       /* 45E00-45EFF: page 8 */
-       0x8,
-       /* 45F00-45FFF: page 8 */
-       0x8,
-       /* 46000-460FF: page 8 */
-       0x8,
-       /* 46100-461FF: page 8 */
-       0x8,
-       /* 46200-462FF: page 8 */
-       0x8,
-       /* 46300-463FF: page 8 */
-       0x8,
-       /* 46400-464FF: page 8 */
-       0x8,
-       /* 46500-465FF: page 8 */
-       0x8,
-       /* 46600-466FF: page 8 */
-       0x8,
-       /* 46700-467FF: page 8 */
-       0x8,
-       /* 46800-468FF: page 8 */
-       0x8,
-       /* 46900-469FF: page 8 */
-       0x8,
-       /* 46A00-46AFF: page 8 */
-       0x8,
-       /* 46B00-46BFF: page 8 */
-       0x8,
-       /* 46C00-46CFF: page 8 */
-       0x8,
-       /* 46D00-46DFF: page 8 */
-       0x8,
-       /* 46E00-46EFF: page 8 */
-       0x8,
-       /* 46F00-46FFF: page 8 */
-       0x8,
-       /* 47000-470FF: page 8 */
-       0x8,
-       /* 47100-471FF: page 8 */
-       0x8,
-       /* 47200-472FF: page 8 */
-       0x8,
-       /* 47300-473FF: page 8 */
-       0x8,
-       /* 47400-474FF: page 8 */
-       0x8,
-       /* 47500-475FF: page 8 */
-       0x8,
-       /* 47600-476FF: page 8 */
-       0x8,
-       /* 47700-477FF: page 8 */
-       0x8,
-       /* 47800-478FF: page 8 */
-       0x8,
-       /* 47900-479FF: page 8 */
-       0x8,
-       /* 47A00-47AFF: page 8 */
-       0x8,
-       /* 47B00-47BFF: page 8 */
-       0x8,
-       /* 47C00-47CFF: page 8 */
-       0x8,
-       /* 47D00-47DFF: page 8 */
-       0x8,
-       /* 47E00-47EFF: page 8 */
-       0x8,
-       /* 47F00-47FFF: page 8 */
-       0x8,
-       /* 48000-480FF: page 8 */
-       0x8,
-       /* 48100-481FF: page 8 */
-       0x8,
-       /* 48200-482FF: page 8 */
-       0x8,
-       /* 48300-483FF: page 8 */
-       0x8,
-       /* 48400-484FF: page 8 */
-       0x8,
-       /* 48500-485FF: page 8 */
-       0x8,
-       /* 48600-486FF: page 8 */
-       0x8,
-       /* 48700-487FF: page 8 */
-       0x8,
-       /* 48800-488FF: page 8 */
-       0x8,
-       /* 48900-489FF: page 8 */
-       0x8,
-       /* 48A00-48AFF: page 8 */
-       0x8,
-       /* 48B00-48BFF: page 8 */
-       0x8,
-       /* 48C00-48CFF: page 8 */
-       0x8,
-       /* 48D00-48DFF: page 8 */
-       0x8,
-       /* 48E00-48EFF: page 8 */
-       0x8,
-       /* 48F00-48FFF: page 8 */
-       0x8,
-       /* 49000-490FF: page 8 */
-       0x8,
-       /* 49100-491FF: page 8 */
-       0x8,
-       /* 49200-492FF: page 8 */
-       0x8,
-       /* 49300-493FF: page 8 */
-       0x8,
-       /* 49400-494FF: page 8 */
-       0x8,
-       /* 49500-495FF: page 8 */
-       0x8,
-       /* 49600-496FF: page 8 */
-       0x8,
-       /* 49700-497FF: page 8 */
-       0x8,
-       /* 49800-498FF: page 8 */
-       0x8,
-       /* 49900-499FF: page 8 */
-       0x8,
-       /* 49A00-49AFF: page 8 */
-       0x8,
-       /* 49B00-49BFF: page 8 */
-       0x8,
-       /* 49C00-49CFF: page 8 */
-       0x8,
-       /* 49D00-49DFF: page 8 */
-       0x8,
-       /* 49E00-49EFF: page 8 */
-       0x8,
-       /* 49F00-49FFF: page 8 */
-       0x8,
-       /* 4A000-4A0FF: page 8 */
-       0x8,
-       /* 4A100-4A1FF: page 8 */
-       0x8,
-       /* 4A200-4A2FF: page 8 */
-       0x8,
-       /* 4A300-4A3FF: page 8 */
-       0x8,
-       /* 4A400-4A4FF: page 8 */
-       0x8,
-       /* 4A500-4A5FF: page 8 */
-       0x8,
-       /* 4A600-4A6FF: page 8 */
-       0x8,
-       /* 4A700-4A7FF: page 8 */
-       0x8,
-       /* 4A800-4A8FF: page 8 */
-       0x8,
-       /* 4A900-4A9FF: page 8 */
-       0x8,
-       /* 4AA00-4AAFF: page 8 */
-       0x8,
-       /* 4AB00-4ABFF: page 8 */
-       0x8,
-       /* 4AC00-4ACFF: page 8 */
-       0x8,
-       /* 4AD00-4ADFF: page 8 */
-       0x8,
-       /* 4AE00-4AEFF: page 8 */
-       0x8,
-       /* 4AF00-4AFFF: page 8 */
-       0x8,
-       /* 4B000-4B0FF: page 8 */
-       0x8,
-       /* 4B100-4B1FF: page 8 */
-       0x8,
-       /* 4B200-4B2FF: page 8 */
-       0x8,
-       /* 4B300-4B3FF: page 8 */
-       0x8,
-       /* 4B400-4B4FF: page 8 */
-       0x8,
-       /* 4B500-4B5FF: page 8 */
-       0x8,
-       /* 4B600-4B6FF: page 8 */
-       0x8,
-       /* 4B700-4B7FF: page 8 */
-       0x8,
-       /* 4B800-4B8FF: page 8 */
-       0x8,
-       /* 4B900-4B9FF: page 8 */
-       0x8,
-       /* 4BA00-4BAFF: page 8 */
-       0x8,
-       /* 4BB00-4BBFF: page 8 */
-       0x8,
-       /* 4BC00-4BCFF: page 8 */
-       0x8,
-       /* 4BD00-4BDFF: page 8 */
-       0x8,
-       /* 4BE00-4BEFF: page 8 */
-       0x8,
-       /* 4BF00-4BFFF: page 8 */
-       0x8,
-       /* 4C000-4C0FF: page 8 */
-       0x8,
-       /* 4C100-4C1FF: page 8 */
-       0x8,
-       /* 4C200-4C2FF: page 8 */
-       0x8,
-       /* 4C300-4C3FF: page 8 */
-       0x8,
-       /* 4C400-4C4FF: page 8 */
-       0x8,
-       /* 4C500-4C5FF: page 8 */
-       0x8,
-       /* 4C600-4C6FF: page 8 */
-       0x8,
-       /* 4C700-4C7FF: page 8 */
-       0x8,
-       /* 4C800-4C8FF: page 8 */
-       0x8,
-       /* 4C900-4C9FF: page 8 */
-       0x8,
-       /* 4CA00-4CAFF: page 8 */
-       0x8,
-       /* 4CB00-4CBFF: page 8 */
-       0x8,
-       /* 4CC00-4CCFF: page 8 */
-       0x8,
-       /* 4CD00-4CDFF: page 8 */
-       0x8,
-       /* 4CE00-4CEFF: page 8 */
-       0x8,
-       /* 4CF00-4CFFF: page 8 */
-       0x8,
-       /* 4D000-4D0FF: page 8 */
-       0x8,
-       /* 4D100-4D1FF: page 8 */
-       0x8,
-       /* 4D200-4D2FF: page 8 */
-       0x8,
-       /* 4D300-4D3FF: page 8 */
-       0x8,
-       /* 4D400-4D4FF: page 8 */
-       0x8,
-       /* 4D500-4D5FF: page 8 */
-       0x8,
-       /* 4D600-4D6FF: page 8 */
-       0x8,
-       /* 4D700-4D7FF: page 8 */
-       0x8,
-       /* 4D800-4D8FF: page 8 */
-       0x8,
-       /* 4D900-4D9FF: page 8 */
-       0x8,
-       /* 4DA00-4DAFF: page 8 */
-       0x8,
-       /* 4DB00-4DBFF: page 8 */
-       0x8,
-       /* 4DC00-4DCFF: page 8 */
-       0x8,
-       /* 4DD00-4DDFF: page 8 */
-       0x8,
-       /* 4DE00-4DEFF: page 8 */
-       0x8,
-       /* 4DF00-4DFFF: page 8 */
-       0x8,
-       /* 4E000-4E0FF: page 8 */
-       0x8,
-       /* 4E100-4E1FF: page 8 */
-       0x8,
-       /* 4E200-4E2FF: page 8 */
-       0x8,
-       /* 4E300-4E3FF: page 8 */
-       0x8,
-       /* 4E400-4E4FF: page 8 */
-       0x8,
-       /* 4E500-4E5FF: page 8 */
-       0x8,
-       /* 4E600-4E6FF: page 8 */
-       0x8,
-       /* 4E700-4E7FF: page 8 */
-       0x8,
-       /* 4E800-4E8FF: page 8 */
-       0x8,
-       /* 4E900-4E9FF: page 8 */
-       0x8,
-       /* 4EA00-4EAFF: page 8 */
-       0x8,
-       /* 4EB00-4EBFF: page 8 */
-       0x8,
-       /* 4EC00-4ECFF: page 8 */
-       0x8,
-       /* 4ED00-4EDFF: page 8 */
-       0x8,
-       /* 4EE00-4EEFF: page 8 */
-       0x8,
-       /* 4EF00-4EFFF: page 8 */
-       0x8,
-       /* 4F000-4F0FF: page 8 */
-       0x8,
-       /* 4F100-4F1FF: page 8 */
-       0x8,
-       /* 4F200-4F2FF: page 8 */
-       0x8,
-       /* 4F300-4F3FF: page 8 */
-       0x8,
-       /* 4F400-4F4FF: page 8 */
-       0x8,
-       /* 4F500-4F5FF: page 8 */
-       0x8,
-       /* 4F600-4F6FF: page 8 */
-       0x8,
-       /* 4F700-4F7FF: page 8 */
-       0x8,
-       /* 4F800-4F8FF: page 8 */
-       0x8,
-       /* 4F900-4F9FF: page 8 */
-       0x8,
-       /* 4FA00-4FAFF: page 8 */
-       0x8,
-       /* 4FB00-4FBFF: page 8 */
-       0x8,
-       /* 4FC00-4FCFF: page 8 */
-       0x8,
-       /* 4FD00-4FDFF: page 8 */
-       0x8,
-       /* 4FE00-4FEFF: page 8 */
-       0x8,
-       /* 4FF00-4FFFF: page 8 */
-       0x8,
-       /* 50000-500FF: page 8 */
-       0x8,
-       /* 50100-501FF: page 8 */
-       0x8,
-       /* 50200-502FF: page 8 */
-       0x8,
-       /* 50300-503FF: page 8 */
-       0x8,
-       /* 50400-504FF: page 8 */
-       0x8,
-       /* 50500-505FF: page 8 */
-       0x8,
-       /* 50600-506FF: page 8 */
-       0x8,
-       /* 50700-507FF: page 8 */
-       0x8,
-       /* 50800-508FF: page 8 */
-       0x8,
-       /* 50900-509FF: page 8 */
-       0x8,
-       /* 50A00-50AFF: page 8 */
-       0x8,
-       /* 50B00-50BFF: page 8 */
-       0x8,
-       /* 50C00-50CFF: page 8 */
-       0x8,
-       /* 50D00-50DFF: page 8 */
-       0x8,
-       /* 50E00-50EFF: page 8 */
-       0x8,
-       /* 50F00-50FFF: page 8 */
-       0x8,
-       /* 51000-510FF: page 8 */
-       0x8,
-       /* 51100-511FF: page 8 */
-       0x8,
-       /* 51200-512FF: page 8 */
-       0x8,
-       /* 51300-513FF: page 8 */
-       0x8,
-       /* 51400-514FF: page 8 */
-       0x8,
-       /* 51500-515FF: page 8 */
-       0x8,
-       /* 51600-516FF: page 8 */
-       0x8,
-       /* 51700-517FF: page 8 */
-       0x8,
-       /* 51800-518FF: page 8 */
-       0x8,
-       /* 51900-519FF: page 8 */
-       0x8,
-       /* 51A00-51AFF: page 8 */
-       0x8,
-       /* 51B00-51BFF: page 8 */
-       0x8,
-       /* 51C00-51CFF: page 8 */
-       0x8,
-       /* 51D00-51DFF: page 8 */
-       0x8,
-       /* 51E00-51EFF: page 8 */
-       0x8,
-       /* 51F00-51FFF: page 8 */
-       0x8,
-       /* 52000-520FF: page 8 */
-       0x8,
-       /* 52100-521FF: page 8 */
-       0x8,
-       /* 52200-522FF: page 8 */
-       0x8,
-       /* 52300-523FF: page 8 */
-       0x8,
-       /* 52400-524FF: page 8 */
-       0x8,
-       /* 52500-525FF: page 8 */
-       0x8,
-       /* 52600-526FF: page 8 */
-       0x8,
-       /* 52700-527FF: page 8 */
-       0x8,
-       /* 52800-528FF: page 8 */
-       0x8,
-       /* 52900-529FF: page 8 */
-       0x8,
-       /* 52A00-52AFF: page 8 */
-       0x8,
-       /* 52B00-52BFF: page 8 */
-       0x8,
-       /* 52C00-52CFF: page 8 */
-       0x8,
-       /* 52D00-52DFF: page 8 */
-       0x8,
-       /* 52E00-52EFF: page 8 */
-       0x8,
-       /* 52F00-52FFF: page 8 */
-       0x8,
-       /* 53000-530FF: page 8 */
-       0x8,
-       /* 53100-531FF: page 8 */
-       0x8,
-       /* 53200-532FF: page 8 */
-       0x8,
-       /* 53300-533FF: page 8 */
-       0x8,
-       /* 53400-534FF: page 8 */
-       0x8,
-       /* 53500-535FF: page 8 */
-       0x8,
-       /* 53600-536FF: page 8 */
-       0x8,
-       /* 53700-537FF: page 8 */
-       0x8,
-       /* 53800-538FF: page 8 */
-       0x8,
-       /* 53900-539FF: page 8 */
-       0x8,
-       /* 53A00-53AFF: page 8 */
-       0x8,
-       /* 53B00-53BFF: page 8 */
-       0x8,
-       /* 53C00-53CFF: page 8 */
-       0x8,
-       /* 53D00-53DFF: page 8 */
-       0x8,
-       /* 53E00-53EFF: page 8 */
-       0x8,
-       /* 53F00-53FFF: page 8 */
-       0x8,
-       /* 54000-540FF: page 8 */
-       0x8,
-       /* 54100-541FF: page 8 */
-       0x8,
-       /* 54200-542FF: page 8 */
-       0x8,
-       /* 54300-543FF: page 8 */
-       0x8,
-       /* 54400-544FF: page 8 */
-       0x8,
-       /* 54500-545FF: page 8 */
-       0x8,
-       /* 54600-546FF: page 8 */
-       0x8,
-       /* 54700-547FF: page 8 */
-       0x8,
-       /* 54800-548FF: page 8 */
-       0x8,
-       /* 54900-549FF: page 8 */
-       0x8,
-       /* 54A00-54AFF: page 8 */
-       0x8,
-       /* 54B00-54BFF: page 8 */
-       0x8,
-       /* 54C00-54CFF: page 8 */
-       0x8,
-       /* 54D00-54DFF: page 8 */
-       0x8,
-       /* 54E00-54EFF: page 8 */
-       0x8,
-       /* 54F00-54FFF: page 8 */
-       0x8,
-       /* 55000-550FF: page 8 */
-       0x8,
-       /* 55100-551FF: page 8 */
-       0x8,
-       /* 55200-552FF: page 8 */
-       0x8,
-       /* 55300-553FF: page 8 */
-       0x8,
-       /* 55400-554FF: page 8 */
-       0x8,
-       /* 55500-555FF: page 8 */
-       0x8,
-       /* 55600-556FF: page 8 */
-       0x8,
-       /* 55700-557FF: page 8 */
-       0x8,
-       /* 55800-558FF: page 8 */
-       0x8,
-       /* 55900-559FF: page 8 */
-       0x8,
-       /* 55A00-55AFF: page 8 */
-       0x8,
-       /* 55B00-55BFF: page 8 */
-       0x8,
-       /* 55C00-55CFF: page 8 */
-       0x8,
-       /* 55D00-55DFF: page 8 */
-       0x8,
-       /* 55E00-55EFF: page 8 */
-       0x8,
-       /* 55F00-55FFF: page 8 */
-       0x8,
-       /* 56000-560FF: page 8 */
-       0x8,
-       /* 56100-561FF: page 8 */
-       0x8,
-       /* 56200-562FF: page 8 */
-       0x8,
-       /* 56300-563FF: page 8 */
-       0x8,
-       /* 56400-564FF: page 8 */
-       0x8,
-       /* 56500-565FF: page 8 */
-       0x8,
-       /* 56600-566FF: page 8 */
-       0x8,
-       /* 56700-567FF: page 8 */
-       0x8,
-       /* 56800-568FF: page 8 */
-       0x8,
-       /* 56900-569FF: page 8 */
-       0x8,
-       /* 56A00-56AFF: page 8 */
-       0x8,
-       /* 56B00-56BFF: page 8 */
-       0x8,
-       /* 56C00-56CFF: page 8 */
-       0x8,
-       /* 56D00-56DFF: page 8 */
-       0x8,
-       /* 56E00-56EFF: page 8 */
-       0x8,
-       /* 56F00-56FFF: page 8 */
-       0x8,
-       /* 57000-570FF: page 8 */
-       0x8,
-       /* 57100-571FF: page 8 */
-       0x8,
-       /* 57200-572FF: page 8 */
-       0x8,
-       /* 57300-573FF: page 8 */
-       0x8,
-       /* 57400-574FF: page 8 */
-       0x8,
-       /* 57500-575FF: page 8 */
-       0x8,
-       /* 57600-576FF: page 8 */
-       0x8,
-       /* 57700-577FF: page 8 */
-       0x8,
-       /* 57800-578FF: page 8 */
-       0x8,
-       /* 57900-579FF: page 8 */
-       0x8,
-       /* 57A00-57AFF: page 8 */
-       0x8,
-       /* 57B00-57BFF: page 8 */
-       0x8,
-       /* 57C00-57CFF: page 8 */
-       0x8,
-       /* 57D00-57DFF: page 8 */
-       0x8,
-       /* 57E00-57EFF: page 8 */
-       0x8,
-       /* 57F00-57FFF: page 8 */
-       0x8,
-       /* 58000-580FF: page 8 */
-       0x8,
-       /* 58100-581FF: page 8 */
-       0x8,
-       /* 58200-582FF: page 8 */
-       0x8,
-       /* 58300-583FF: page 8 */
-       0x8,
-       /* 58400-584FF: page 8 */
-       0x8,
-       /* 58500-585FF: page 8 */
-       0x8,
-       /* 58600-586FF: page 8 */
-       0x8,
-       /* 58700-587FF: page 8 */
-       0x8,
-       /* 58800-588FF: page 8 */
-       0x8,
-       /* 58900-589FF: page 8 */
-       0x8,
-       /* 58A00-58AFF: page 8 */
-       0x8,
-       /* 58B00-58BFF: page 8 */
-       0x8,
-       /* 58C00-58CFF: page 8 */
-       0x8,
-       /* 58D00-58DFF: page 8 */
-       0x8,
-       /* 58E00-58EFF: page 8 */
-       0x8,
-       /* 58F00-58FFF: page 8 */
-       0x8,
-       /* 59000-590FF: page 8 */
-       0x8,
-       /* 59100-591FF: page 8 */
-       0x8,
-       /* 59200-592FF: page 8 */
-       0x8,
-       /* 59300-593FF: page 8 */
-       0x8,
-       /* 59400-594FF: page 8 */
-       0x8,
-       /* 59500-595FF: page 8 */
-       0x8,
-       /* 59600-596FF: page 8 */
-       0x8,
-       /* 59700-597FF: page 8 */
-       0x8,
-       /* 59800-598FF: page 8 */
-       0x8,
-       /* 59900-599FF: page 8 */
-       0x8,
-       /* 59A00-59AFF: page 8 */
-       0x8,
-       /* 59B00-59BFF: page 8 */
-       0x8,
-       /* 59C00-59CFF: page 8 */
-       0x8,
-       /* 59D00-59DFF: page 8 */
-       0x8,
-       /* 59E00-59EFF: page 8 */
-       0x8,
-       /* 59F00-59FFF: page 8 */
-       0x8,
-       /* 5A000-5A0FF: page 8 */
-       0x8,
-       /* 5A100-5A1FF: page 8 */
-       0x8,
-       /* 5A200-5A2FF: page 8 */
-       0x8,
-       /* 5A300-5A3FF: page 8 */
-       0x8,
-       /* 5A400-5A4FF: page 8 */
-       0x8,
-       /* 5A500-5A5FF: page 8 */
-       0x8,
-       /* 5A600-5A6FF: page 8 */
-       0x8,
-       /* 5A700-5A7FF: page 8 */
-       0x8,
-       /* 5A800-5A8FF: page 8 */
-       0x8,
-       /* 5A900-5A9FF: page 8 */
-       0x8,
-       /* 5AA00-5AAFF: page 8 */
-       0x8,
-       /* 5AB00-5ABFF: page 8 */
-       0x8,
-       /* 5AC00-5ACFF: page 8 */
-       0x8,
-       /* 5AD00-5ADFF: page 8 */
-       0x8,
-       /* 5AE00-5AEFF: page 8 */
-       0x8,
-       /* 5AF00-5AFFF: page 8 */
-       0x8,
-       /* 5B000-5B0FF: page 8 */
-       0x8,
-       /* 5B100-5B1FF: page 8 */
-       0x8,
-       /* 5B200-5B2FF: page 8 */
-       0x8,
-       /* 5B300-5B3FF: page 8 */
-       0x8,
-       /* 5B400-5B4FF: page 8 */
-       0x8,
-       /* 5B500-5B5FF: page 8 */
-       0x8,
-       /* 5B600-5B6FF: page 8 */
-       0x8,
-       /* 5B700-5B7FF: page 8 */
-       0x8,
-       /* 5B800-5B8FF: page 8 */
-       0x8,
-       /* 5B900-5B9FF: page 8 */
-       0x8,
-       /* 5BA00-5BAFF: page 8 */
-       0x8,
-       /* 5BB00-5BBFF: page 8 */
-       0x8,
-       /* 5BC00-5BCFF: page 8 */
-       0x8,
-       /* 5BD00-5BDFF: page 8 */
-       0x8,
-       /* 5BE00-5BEFF: page 8 */
-       0x8,
-       /* 5BF00-5BFFF: page 8 */
-       0x8,
-       /* 5C000-5C0FF: page 8 */
-       0x8,
-       /* 5C100-5C1FF: page 8 */
-       0x8,
-       /* 5C200-5C2FF: page 8 */
-       0x8,
-       /* 5C300-5C3FF: page 8 */
-       0x8,
-       /* 5C400-5C4FF: page 8 */
-       0x8,
-       /* 5C500-5C5FF: page 8 */
-       0x8,
-       /* 5C600-5C6FF: page 8 */
-       0x8,
-       /* 5C700-5C7FF: page 8 */
-       0x8,
-       /* 5C800-5C8FF: page 8 */
-       0x8,
-       /* 5C900-5C9FF: page 8 */
-       0x8,
-       /* 5CA00-5CAFF: page 8 */
-       0x8,
-       /* 5CB00-5CBFF: page 8 */
-       0x8,
-       /* 5CC00-5CCFF: page 8 */
-       0x8,
-       /* 5CD00-5CDFF: page 8 */
-       0x8,
-       /* 5CE00-5CEFF: page 8 */
-       0x8,
-       /* 5CF00-5CFFF: page 8 */
-       0x8,
-       /* 5D000-5D0FF: page 8 */
-       0x8,
-       /* 5D100-5D1FF: page 8 */
-       0x8,
-       /* 5D200-5D2FF: page 8 */
-       0x8,
-       /* 5D300-5D3FF: page 8 */
-       0x8,
-       /* 5D400-5D4FF: page 8 */
-       0x8,
-       /* 5D500-5D5FF: page 8 */
-       0x8,
-       /* 5D600-5D6FF: page 8 */
-       0x8,
-       /* 5D700-5D7FF: page 8 */
-       0x8,
-       /* 5D800-5D8FF: page 8 */
-       0x8,
-       /* 5D900-5D9FF: page 8 */
-       0x8,
-       /* 5DA00-5DAFF: page 8 */
-       0x8,
-       /* 5DB00-5DBFF: page 8 */
-       0x8,
-       /* 5DC00-5DCFF: page 8 */
-       0x8,
-       /* 5DD00-5DDFF: page 8 */
-       0x8,
-       /* 5DE00-5DEFF: page 8 */
-       0x8,
-       /* 5DF00-5DFFF: page 8 */
-       0x8,
-       /* 5E000-5E0FF: page 8 */
-       0x8,
-       /* 5E100-5E1FF: page 8 */
-       0x8,
-       /* 5E200-5E2FF: page 8 */
-       0x8,
-       /* 5E300-5E3FF: page 8 */
-       0x8,
-       /* 5E400-5E4FF: page 8 */
-       0x8,
-       /* 5E500-5E5FF: page 8 */
-       0x8,
-       /* 5E600-5E6FF: page 8 */
-       0x8,
-       /* 5E700-5E7FF: page 8 */
-       0x8,
-       /* 5E800-5E8FF: page 8 */
-       0x8,
-       /* 5E900-5E9FF: page 8 */
-       0x8,
-       /* 5EA00-5EAFF: page 8 */
-       0x8,
-       /* 5EB00-5EBFF: page 8 */
-       0x8,
-       /* 5EC00-5ECFF: page 8 */
-       0x8,
-       /* 5ED00-5EDFF: page 8 */
-       0x8,
-       /* 5EE00-5EEFF: page 8 */
-       0x8,
-       /* 5EF00-5EFFF: page 8 */
-       0x8,
-       /* 5F000-5F0FF: page 8 */
-       0x8,
-       /* 5F100-5F1FF: page 8 */
-       0x8,
-       /* 5F200-5F2FF: page 8 */
-       0x8,
-       /* 5F300-5F3FF: page 8 */
-       0x8,
-       /* 5F400-5F4FF: page 8 */
-       0x8,
-       /* 5F500-5F5FF: page 8 */
-       0x8,
-       /* 5F600-5F6FF: page 8 */
-       0x8,
-       /* 5F700-5F7FF: page 8 */
-       0x8,
-       /* 5F800-5F8FF: page 8 */
-       0x8,
-       /* 5F900-5F9FF: page 8 */
-       0x8,
-       /* 5FA00-5FAFF: page 8 */
-       0x8,
-       /* 5FB00-5FBFF: page 8 */
-       0x8,
-       /* 5FC00-5FCFF: page 8 */
-       0x8,
-       /* 5FD00-5FDFF: page 8 */
-       0x8,
-       /* 5FE00-5FEFF: page 8 */
-       0x8,
-       /* 5FF00-5FFFF: page 8 */
-       0x8,
-       /* 60000-600FF: page 8 */
-       0x8,
-       /* 60100-601FF: page 8 */
-       0x8,
-       /* 60200-602FF: page 8 */
-       0x8,
-       /* 60300-603FF: page 8 */
-       0x8,
-       /* 60400-604FF: page 8 */
-       0x8,
-       /* 60500-605FF: page 8 */
-       0x8,
-       /* 60600-606FF: page 8 */
-       0x8,
-       /* 60700-607FF: page 8 */
-       0x8,
-       /* 60800-608FF: page 8 */
-       0x8,
-       /* 60900-609FF: page 8 */
-       0x8,
-       /* 60A00-60AFF: page 8 */
-       0x8,
-       /* 60B00-60BFF: page 8 */
-       0x8,
-       /* 60C00-60CFF: page 8 */
-       0x8,
-       /* 60D00-60DFF: page 8 */
-       0x8,
-       /* 60E00-60EFF: page 8 */
-       0x8,
-       /* 60F00-60FFF: page 8 */
-       0x8,
-       /* 61000-610FF: page 8 */
-       0x8,
-       /* 61100-611FF: page 8 */
-       0x8,
-       /* 61200-612FF: page 8 */
-       0x8,
-       /* 61300-613FF: page 8 */
-       0x8,
-       /* 61400-614FF: page 8 */
-       0x8,
-       /* 61500-615FF: page 8 */
-       0x8,
-       /* 61600-616FF: page 8 */
-       0x8,
-       /* 61700-617FF: page 8 */
-       0x8,
-       /* 61800-618FF: page 8 */
-       0x8,
-       /* 61900-619FF: page 8 */
-       0x8,
-       /* 61A00-61AFF: page 8 */
-       0x8,
-       /* 61B00-61BFF: page 8 */
-       0x8,
-       /* 61C00-61CFF: page 8 */
-       0x8,
-       /* 61D00-61DFF: page 8 */
-       0x8,
-       /* 61E00-61EFF: page 8 */
-       0x8,
-       /* 61F00-61FFF: page 8 */
-       0x8,
-       /* 62000-620FF: page 8 */
-       0x8,
-       /* 62100-621FF: page 8 */
-       0x8,
-       /* 62200-622FF: page 8 */
-       0x8,
-       /* 62300-623FF: page 8 */
-       0x8,
-       /* 62400-624FF: page 8 */
-       0x8,
-       /* 62500-625FF: page 8 */
-       0x8,
-       /* 62600-626FF: page 8 */
-       0x8,
-       /* 62700-627FF: page 8 */
-       0x8,
-       /* 62800-628FF: page 8 */
-       0x8,
-       /* 62900-629FF: page 8 */
-       0x8,
-       /* 62A00-62AFF: page 8 */
-       0x8,
-       /* 62B00-62BFF: page 8 */
-       0x8,
-       /* 62C00-62CFF: page 8 */
-       0x8,
-       /* 62D00-62DFF: page 8 */
-       0x8,
-       /* 62E00-62EFF: page 8 */
-       0x8,
-       /* 62F00-62FFF: page 8 */
-       0x8,
-       /* 63000-630FF: page 8 */
-       0x8,
-       /* 63100-631FF: page 8 */
-       0x8,
-       /* 63200-632FF: page 8 */
-       0x8,
-       /* 63300-633FF: page 8 */
-       0x8,
-       /* 63400-634FF: page 8 */
-       0x8,
-       /* 63500-635FF: page 8 */
-       0x8,
-       /* 63600-636FF: page 8 */
-       0x8,
-       /* 63700-637FF: page 8 */
-       0x8,
-       /* 63800-638FF: page 8 */
-       0x8,
-       /* 63900-639FF: page 8 */
-       0x8,
-       /* 63A00-63AFF: page 8 */
-       0x8,
-       /* 63B00-63BFF: page 8 */
-       0x8,
-       /* 63C00-63CFF: page 8 */
-       0x8,
-       /* 63D00-63DFF: page 8 */
-       0x8,
-       /* 63E00-63EFF: page 8 */
-       0x8,
-       /* 63F00-63FFF: page 8 */
-       0x8,
-       /* 64000-640FF: page 8 */
-       0x8,
-       /* 64100-641FF: page 8 */
-       0x8,
-       /* 64200-642FF: page 8 */
-       0x8,
-       /* 64300-643FF: page 8 */
-       0x8,
-       /* 64400-644FF: page 8 */
-       0x8,
-       /* 64500-645FF: page 8 */
-       0x8,
-       /* 64600-646FF: page 8 */
-       0x8,
-       /* 64700-647FF: page 8 */
-       0x8,
-       /* 64800-648FF: page 8 */
-       0x8,
-       /* 64900-649FF: page 8 */
-       0x8,
-       /* 64A00-64AFF: page 8 */
-       0x8,
-       /* 64B00-64BFF: page 8 */
-       0x8,
-       /* 64C00-64CFF: page 8 */
-       0x8,
-       /* 64D00-64DFF: page 8 */
-       0x8,
-       /* 64E00-64EFF: page 8 */
-       0x8,
-       /* 64F00-64FFF: page 8 */
-       0x8,
-       /* 65000-650FF: page 8 */
-       0x8,
-       /* 65100-651FF: page 8 */
-       0x8,
-       /* 65200-652FF: page 8 */
-       0x8,
-       /* 65300-653FF: page 8 */
-       0x8,
-       /* 65400-654FF: page 8 */
-       0x8,
-       /* 65500-655FF: page 8 */
-       0x8,
-       /* 65600-656FF: page 8 */
-       0x8,
-       /* 65700-657FF: page 8 */
-       0x8,
-       /* 65800-658FF: page 8 */
-       0x8,
-       /* 65900-659FF: page 8 */
-       0x8,
-       /* 65A00-65AFF: page 8 */
-       0x8,
-       /* 65B00-65BFF: page 8 */
-       0x8,
-       /* 65C00-65CFF: page 8 */
-       0x8,
-       /* 65D00-65DFF: page 8 */
-       0x8,
-       /* 65E00-65EFF: page 8 */
-       0x8,
-       /* 65F00-65FFF: page 8 */
-       0x8,
-       /* 66000-660FF: page 8 */
-       0x8,
-       /* 66100-661FF: page 8 */
-       0x8,
-       /* 66200-662FF: page 8 */
-       0x8,
-       /* 66300-663FF: page 8 */
-       0x8,
-       /* 66400-664FF: page 8 */
-       0x8,
-       /* 66500-665FF: page 8 */
-       0x8,
-       /* 66600-666FF: page 8 */
-       0x8,
-       /* 66700-667FF: page 8 */
-       0x8,
-       /* 66800-668FF: page 8 */
-       0x8,
-       /* 66900-669FF: page 8 */
-       0x8,
-       /* 66A00-66AFF: page 8 */
-       0x8,
-       /* 66B00-66BFF: page 8 */
-       0x8,
-       /* 66C00-66CFF: page 8 */
-       0x8,
-       /* 66D00-66DFF: page 8 */
-       0x8,
-       /* 66E00-66EFF: page 8 */
-       0x8,
-       /* 66F00-66FFF: page 8 */
-       0x8,
-       /* 67000-670FF: page 8 */
-       0x8,
-       /* 67100-671FF: page 8 */
-       0x8,
-       /* 67200-672FF: page 8 */
-       0x8,
-       /* 67300-673FF: page 8 */
-       0x8,
-       /* 67400-674FF: page 8 */
-       0x8,
-       /* 67500-675FF: page 8 */
-       0x8,
-       /* 67600-676FF: page 8 */
-       0x8,
-       /* 67700-677FF: page 8 */
-       0x8,
-       /* 67800-678FF: page 8 */
-       0x8,
-       /* 67900-679FF: page 8 */
-       0x8,
-       /* 67A00-67AFF: page 8 */
-       0x8,
-       /* 67B00-67BFF: page 8 */
-       0x8,
-       /* 67C00-67CFF: page 8 */
-       0x8,
-       /* 67D00-67DFF: page 8 */
-       0x8,
-       /* 67E00-67EFF: page 8 */
-       0x8,
-       /* 67F00-67FFF: page 8 */
-       0x8,
-       /* 68000-680FF: page 8 */
-       0x8,
-       /* 68100-681FF: page 8 */
-       0x8,
-       /* 68200-682FF: page 8 */
-       0x8,
-       /* 68300-683FF: page 8 */
-       0x8,
-       /* 68400-684FF: page 8 */
-       0x8,
-       /* 68500-685FF: page 8 */
-       0x8,
-       /* 68600-686FF: page 8 */
-       0x8,
-       /* 68700-687FF: page 8 */
-       0x8,
-       /* 68800-688FF: page 8 */
-       0x8,
-       /* 68900-689FF: page 8 */
-       0x8,
-       /* 68A00-68AFF: page 8 */
-       0x8,
-       /* 68B00-68BFF: page 8 */
-       0x8,
-       /* 68C00-68CFF: page 8 */
-       0x8,
-       /* 68D00-68DFF: page 8 */
-       0x8,
-       /* 68E00-68EFF: page 8 */
-       0x8,
-       /* 68F00-68FFF: page 8 */
-       0x8,
-       /* 69000-690FF: page 8 */
-       0x8,
-       /* 69100-691FF: page 8 */
-       0x8,
-       /* 69200-692FF: page 8 */
-       0x8,
-       /* 69300-693FF: page 8 */
-       0x8,
-       /* 69400-694FF: page 8 */
-       0x8,
-       /* 69500-695FF: page 8 */
-       0x8,
-       /* 69600-696FF: page 8 */
-       0x8,
-       /* 69700-697FF: page 8 */
-       0x8,
-       /* 69800-698FF: page 8 */
-       0x8,
-       /* 69900-699FF: page 8 */
-       0x8,
-       /* 69A00-69AFF: page 8 */
-       0x8,
-       /* 69B00-69BFF: page 8 */
-       0x8,
-       /* 69C00-69CFF: page 8 */
-       0x8,
-       /* 69D00-69DFF: page 8 */
-       0x8,
-       /* 69E00-69EFF: page 8 */
-       0x8,
-       /* 69F00-69FFF: page 8 */
-       0x8,
-       /* 6A000-6A0FF: page 8 */
-       0x8,
-       /* 6A100-6A1FF: page 8 */
-       0x8,
-       /* 6A200-6A2FF: page 8 */
-       0x8,
-       /* 6A300-6A3FF: page 8 */
-       0x8,
-       /* 6A400-6A4FF: page 8 */
-       0x8,
-       /* 6A500-6A5FF: page 8 */
-       0x8,
-       /* 6A600-6A6FF: page 8 */
-       0x8,
-       /* 6A700-6A7FF: page 8 */
-       0x8,
-       /* 6A800-6A8FF: page 8 */
-       0x8,
-       /* 6A900-6A9FF: page 8 */
-       0x8,
-       /* 6AA00-6AAFF: page 8 */
-       0x8,
-       /* 6AB00-6ABFF: page 8 */
-       0x8,
-       /* 6AC00-6ACFF: page 8 */
-       0x8,
-       /* 6AD00-6ADFF: page 8 */
-       0x8,
-       /* 6AE00-6AEFF: page 8 */
-       0x8,
-       /* 6AF00-6AFFF: page 8 */
-       0x8,
-       /* 6B000-6B0FF: page 8 */
-       0x8,
-       /* 6B100-6B1FF: page 8 */
-       0x8,
-       /* 6B200-6B2FF: page 8 */
-       0x8,
-       /* 6B300-6B3FF: page 8 */
-       0x8,
-       /* 6B400-6B4FF: page 8 */
-       0x8,
-       /* 6B500-6B5FF: page 8 */
-       0x8,
-       /* 6B600-6B6FF: page 8 */
-       0x8,
-       /* 6B700-6B7FF: page 8 */
-       0x8,
-       /* 6B800-6B8FF: page 8 */
-       0x8,
-       /* 6B900-6B9FF: page 8 */
-       0x8,
-       /* 6BA00-6BAFF: page 8 */
-       0x8,
-       /* 6BB00-6BBFF: page 8 */
-       0x8,
-       /* 6BC00-6BCFF: page 8 */
-       0x8,
-       /* 6BD00-6BDFF: page 8 */
-       0x8,
-       /* 6BE00-6BEFF: page 8 */
-       0x8,
-       /* 6BF00-6BFFF: page 8 */
-       0x8,
-       /* 6C000-6C0FF: page 8 */
-       0x8,
-       /* 6C100-6C1FF: page 8 */
-       0x8,
-       /* 6C200-6C2FF: page 8 */
-       0x8,
-       /* 6C300-6C3FF: page 8 */
-       0x8,
-       /* 6C400-6C4FF: page 8 */
-       0x8,
-       /* 6C500-6C5FF: page 8 */
-       0x8,
-       /* 6C600-6C6FF: page 8 */
-       0x8,
-       /* 6C700-6C7FF: page 8 */
-       0x8,
-       /* 6C800-6C8FF: page 8 */
-       0x8,
-       /* 6C900-6C9FF: page 8 */
-       0x8,
-       /* 6CA00-6CAFF: page 8 */
-       0x8,
-       /* 6CB00-6CBFF: page 8 */
-       0x8,
-       /* 6CC00-6CCFF: page 8 */
-       0x8,
-       /* 6CD00-6CDFF: page 8 */
-       0x8,
-       /* 6CE00-6CEFF: page 8 */
-       0x8,
-       /* 6CF00-6CFFF: page 8 */
-       0x8,
-       /* 6D000-6D0FF: page 8 */
-       0x8,
-       /* 6D100-6D1FF: page 8 */
-       0x8,
-       /* 6D200-6D2FF: page 8 */
-       0x8,
-       /* 6D300-6D3FF: page 8 */
-       0x8,
-       /* 6D400-6D4FF: page 8 */
-       0x8,
-       /* 6D500-6D5FF: page 8 */
-       0x8,
-       /* 6D600-6D6FF: page 8 */
-       0x8,
-       /* 6D700-6D7FF: page 8 */
-       0x8,
-       /* 6D800-6D8FF: page 8 */
-       0x8,
-       /* 6D900-6D9FF: page 8 */
-       0x8,
-       /* 6DA00-6DAFF: page 8 */
-       0x8,
-       /* 6DB00-6DBFF: page 8 */
-       0x8,
-       /* 6DC00-6DCFF: page 8 */
-       0x8,
-       /* 6DD00-6DDFF: page 8 */
-       0x8,
-       /* 6DE00-6DEFF: page 8 */
-       0x8,
-       /* 6DF00-6DFFF: page 8 */
-       0x8,
-       /* 6E000-6E0FF: page 8 */
-       0x8,
-       /* 6E100-6E1FF: page 8 */
-       0x8,
-       /* 6E200-6E2FF: page 8 */
-       0x8,
-       /* 6E300-6E3FF: page 8 */
-       0x8,
-       /* 6E400-6E4FF: page 8 */
-       0x8,
-       /* 6E500-6E5FF: page 8 */
-       0x8,
-       /* 6E600-6E6FF: page 8 */
-       0x8,
-       /* 6E700-6E7FF: page 8 */
-       0x8,
-       /* 6E800-6E8FF: page 8 */
-       0x8,
-       /* 6E900-6E9FF: page 8 */
-       0x8,
-       /* 6EA00-6EAFF: page 8 */
-       0x8,
-       /* 6EB00-6EBFF: page 8 */
-       0x8,
-       /* 6EC00-6ECFF: page 8 */
-       0x8,
-       /* 6ED00-6EDFF: page 8 */
-       0x8,
-       /* 6EE00-6EEFF: page 8 */
-       0x8,
-       /* 6EF00-6EFFF: page 8 */
-       0x8,
-       /* 6F000-6F0FF: page 8 */
-       0x8,
-       /* 6F100-6F1FF: page 8 */
-       0x8,
-       /* 6F200-6F2FF: page 8 */
-       0x8,
-       /* 6F300-6F3FF: page 8 */
-       0x8,
-       /* 6F400-6F4FF: page 8 */
-       0x8,
-       /* 6F500-6F5FF: page 8 */
-       0x8,
-       /* 6F600-6F6FF: page 8 */
-       0x8,
-       /* 6F700-6F7FF: page 8 */
-       0x8,
-       /* 6F800-6F8FF: page 8 */
-       0x8,
-       /* 6F900-6F9FF: page 8 */
-       0x8,
-       /* 6FA00-6FAFF: page 8 */
-       0x8,
-       /* 6FB00-6FBFF: page 8 */
-       0x8,
-       /* 6FC00-6FCFF: page 8 */
-       0x8,
-       /* 6FD00-6FDFF: page 8 */
-       0x8,
-       /* 6FE00-6FEFF: page 8 */
-       0x8,
-       /* 6FF00-6FFFF: page 8 */
-       0x8,
-       /* 70000-700FF: page 8 */
-       0x8,
-       /* 70100-701FF: page 8 */
-       0x8,
-       /* 70200-702FF: page 8 */
-       0x8,
-       /* 70300-703FF: page 8 */
-       0x8,
-       /* 70400-704FF: page 8 */
-       0x8,
-       /* 70500-705FF: page 8 */
-       0x8,
-       /* 70600-706FF: page 8 */
-       0x8,
-       /* 70700-707FF: page 8 */
-       0x8,
-       /* 70800-708FF: page 8 */
-       0x8,
-       /* 70900-709FF: page 8 */
-       0x8,
-       /* 70A00-70AFF: page 8 */
-       0x8,
-       /* 70B00-70BFF: page 8 */
-       0x8,
-       /* 70C00-70CFF: page 8 */
-       0x8,
-       /* 70D00-70DFF: page 8 */
-       0x8,
-       /* 70E00-70EFF: page 8 */
-       0x8,
-       /* 70F00-70FFF: page 8 */
-       0x8,
-       /* 71000-710FF: page 8 */
-       0x8,
-       /* 71100-711FF: page 8 */
-       0x8,
-       /* 71200-712FF: page 8 */
-       0x8,
-       /* 71300-713FF: page 8 */
-       0x8,
-       /* 71400-714FF: page 8 */
-       0x8,
-       /* 71500-715FF: page 8 */
-       0x8,
-       /* 71600-716FF: page 8 */
-       0x8,
-       /* 71700-717FF: page 8 */
-       0x8,
-       /* 71800-718FF: page 8 */
-       0x8,
-       /* 71900-719FF: page 8 */
-       0x8,
-       /* 71A00-71AFF: page 8 */
-       0x8,
-       /* 71B00-71BFF: page 8 */
-       0x8,
-       /* 71C00-71CFF: page 8 */
-       0x8,
-       /* 71D00-71DFF: page 8 */
-       0x8,
-       /* 71E00-71EFF: page 8 */
-       0x8,
-       /* 71F00-71FFF: page 8 */
-       0x8,
-       /* 72000-720FF: page 8 */
-       0x8,
-       /* 72100-721FF: page 8 */
-       0x8,
-       /* 72200-722FF: page 8 */
-       0x8,
-       /* 72300-723FF: page 8 */
-       0x8,
-       /* 72400-724FF: page 8 */
-       0x8,
-       /* 72500-725FF: page 8 */
-       0x8,
-       /* 72600-726FF: page 8 */
-       0x8,
-       /* 72700-727FF: page 8 */
-       0x8,
-       /* 72800-728FF: page 8 */
-       0x8,
-       /* 72900-729FF: page 8 */
-       0x8,
-       /* 72A00-72AFF: page 8 */
-       0x8,
-       /* 72B00-72BFF: page 8 */
-       0x8,
-       /* 72C00-72CFF: page 8 */
-       0x8,
-       /* 72D00-72DFF: page 8 */
-       0x8,
-       /* 72E00-72EFF: page 8 */
-       0x8,
-       /* 72F00-72FFF: page 8 */
-       0x8,
-       /* 73000-730FF: page 8 */
-       0x8,
-       /* 73100-731FF: page 8 */
-       0x8,
-       /* 73200-732FF: page 8 */
-       0x8,
-       /* 73300-733FF: page 8 */
-       0x8,
-       /* 73400-734FF: page 8 */
-       0x8,
-       /* 73500-735FF: page 8 */
-       0x8,
-       /* 73600-736FF: page 8 */
-       0x8,
-       /* 73700-737FF: page 8 */
-       0x8,
-       /* 73800-738FF: page 8 */
-       0x8,
-       /* 73900-739FF: page 8 */
-       0x8,
-       /* 73A00-73AFF: page 8 */
-       0x8,
-       /* 73B00-73BFF: page 8 */
-       0x8,
-       /* 73C00-73CFF: page 8 */
-       0x8,
-       /* 73D00-73DFF: page 8 */
-       0x8,
-       /* 73E00-73EFF: page 8 */
-       0x8,
-       /* 73F00-73FFF: page 8 */
-       0x8,
-       /* 74000-740FF: page 8 */
-       0x8,
-       /* 74100-741FF: page 8 */
-       0x8,
-       /* 74200-742FF: page 8 */
-       0x8,
-       /* 74300-743FF: page 8 */
-       0x8,
-       /* 74400-744FF: page 8 */
-       0x8,
-       /* 74500-745FF: page 8 */
-       0x8,
-       /* 74600-746FF: page 8 */
-       0x8,
-       /* 74700-747FF: page 8 */
-       0x8,
-       /* 74800-748FF: page 8 */
-       0x8,
-       /* 74900-749FF: page 8 */
-       0x8,
-       /* 74A00-74AFF: page 8 */
-       0x8,
-       /* 74B00-74BFF: page 8 */
-       0x8,
-       /* 74C00-74CFF: page 8 */
-       0x8,
-       /* 74D00-74DFF: page 8 */
-       0x8,
-       /* 74E00-74EFF: page 8 */
-       0x8,
-       /* 74F00-74FFF: page 8 */
-       0x8,
-       /* 75000-750FF: page 8 */
-       0x8,
-       /* 75100-751FF: page 8 */
-       0x8,
-       /* 75200-752FF: page 8 */
-       0x8,
-       /* 75300-753FF: page 8 */
-       0x8,
-       /* 75400-754FF: page 8 */
-       0x8,
-       /* 75500-755FF: page 8 */
-       0x8,
-       /* 75600-756FF: page 8 */
-       0x8,
-       /* 75700-757FF: page 8 */
-       0x8,
-       /* 75800-758FF: page 8 */
-       0x8,
-       /* 75900-759FF: page 8 */
-       0x8,
-       /* 75A00-75AFF: page 8 */
-       0x8,
-       /* 75B00-75BFF: page 8 */
-       0x8,
-       /* 75C00-75CFF: page 8 */
-       0x8,
-       /* 75D00-75DFF: page 8 */
-       0x8,
-       /* 75E00-75EFF: page 8 */
-       0x8,
-       /* 75F00-75FFF: page 8 */
-       0x8,
-       /* 76000-760FF: page 8 */
-       0x8,
-       /* 76100-761FF: page 8 */
-       0x8,
-       /* 76200-762FF: page 8 */
-       0x8,
-       /* 76300-763FF: page 8 */
-       0x8,
-       /* 76400-764FF: page 8 */
-       0x8,
-       /* 76500-765FF: page 8 */
-       0x8,
-       /* 76600-766FF: page 8 */
-       0x8,
-       /* 76700-767FF: page 8 */
-       0x8,
-       /* 76800-768FF: page 8 */
-       0x8,
-       /* 76900-769FF: page 8 */
-       0x8,
-       /* 76A00-76AFF: page 8 */
-       0x8,
-       /* 76B00-76BFF: page 8 */
-       0x8,
-       /* 76C00-76CFF: page 8 */
-       0x8,
-       /* 76D00-76DFF: page 8 */
-       0x8,
-       /* 76E00-76EFF: page 8 */
-       0x8,
-       /* 76F00-76FFF: page 8 */
-       0x8,
-       /* 77000-770FF: page 8 */
-       0x8,
-       /* 77100-771FF: page 8 */
-       0x8,
-       /* 77200-772FF: page 8 */
-       0x8,
-       /* 77300-773FF: page 8 */
-       0x8,
-       /* 77400-774FF: page 8 */
-       0x8,
-       /* 77500-775FF: page 8 */
-       0x8,
-       /* 77600-776FF: page 8 */
-       0x8,
-       /* 77700-777FF: page 8 */
-       0x8,
-       /* 77800-778FF: page 8 */
-       0x8,
-       /* 77900-779FF: page 8 */
-       0x8,
-       /* 77A00-77AFF: page 8 */
-       0x8,
-       /* 77B00-77BFF: page 8 */
-       0x8,
-       /* 77C00-77CFF: page 8 */
-       0x8,
-       /* 77D00-77DFF: page 8 */
-       0x8,
-       /* 77E00-77EFF: page 8 */
-       0x8,
-       /* 77F00-77FFF: page 8 */
-       0x8,
-       /* 78000-780FF: page 8 */
-       0x8,
-       /* 78100-781FF: page 8 */
-       0x8,
-       /* 78200-782FF: page 8 */
-       0x8,
-       /* 78300-783FF: page 8 */
-       0x8,
-       /* 78400-784FF: page 8 */
-       0x8,
-       /* 78500-785FF: page 8 */
-       0x8,
-       /* 78600-786FF: page 8 */
-       0x8,
-       /* 78700-787FF: page 8 */
-       0x8,
-       /* 78800-788FF: page 8 */
-       0x8,
-       /* 78900-789FF: page 8 */
-       0x8,
-       /* 78A00-78AFF: page 8 */
-       0x8,
-       /* 78B00-78BFF: page 8 */
-       0x8,
-       /* 78C00-78CFF: page 8 */
-       0x8,
-       /* 78D00-78DFF: page 8 */
-       0x8,
-       /* 78E00-78EFF: page 8 */
-       0x8,
-       /* 78F00-78FFF: page 8 */
-       0x8,
-       /* 79000-790FF: page 8 */
-       0x8,
-       /* 79100-791FF: page 8 */
-       0x8,
-       /* 79200-792FF: page 8 */
-       0x8,
-       /* 79300-793FF: page 8 */
-       0x8,
-       /* 79400-794FF: page 8 */
-       0x8,
-       /* 79500-795FF: page 8 */
-       0x8,
-       /* 79600-796FF: page 8 */
-       0x8,
-       /* 79700-797FF: page 8 */
-       0x8,
-       /* 79800-798FF: page 8 */
-       0x8,
-       /* 79900-799FF: page 8 */
-       0x8,
-       /* 79A00-79AFF: page 8 */
-       0x8,
-       /* 79B00-79BFF: page 8 */
-       0x8,
-       /* 79C00-79CFF: page 8 */
-       0x8,
-       /* 79D00-79DFF: page 8 */
-       0x8,
-       /* 79E00-79EFF: page 8 */
-       0x8,
-       /* 79F00-79FFF: page 8 */
-       0x8,
-       /* 7A000-7A0FF: page 8 */
-       0x8,
-       /* 7A100-7A1FF: page 8 */
-       0x8,
-       /* 7A200-7A2FF: page 8 */
-       0x8,
-       /* 7A300-7A3FF: page 8 */
-       0x8,
-       /* 7A400-7A4FF: page 8 */
-       0x8,
-       /* 7A500-7A5FF: page 8 */
-       0x8,
-       /* 7A600-7A6FF: page 8 */
-       0x8,
-       /* 7A700-7A7FF: page 8 */
-       0x8,
-       /* 7A800-7A8FF: page 8 */
-       0x8,
-       /* 7A900-7A9FF: page 8 */
-       0x8,
-       /* 7AA00-7AAFF: page 8 */
-       0x8,
-       /* 7AB00-7ABFF: page 8 */
-       0x8,
-       /* 7AC00-7ACFF: page 8 */
-       0x8,
-       /* 7AD00-7ADFF: page 8 */
-       0x8,
-       /* 7AE00-7AEFF: page 8 */
-       0x8,
-       /* 7AF00-7AFFF: page 8 */
-       0x8,
-       /* 7B000-7B0FF: page 8 */
-       0x8,
-       /* 7B100-7B1FF: page 8 */
-       0x8,
-       /* 7B200-7B2FF: page 8 */
-       0x8,
-       /* 7B300-7B3FF: page 8 */
-       0x8,
-       /* 7B400-7B4FF: page 8 */
-       0x8,
-       /* 7B500-7B5FF: page 8 */
-       0x8,
-       /* 7B600-7B6FF: page 8 */
-       0x8,
-       /* 7B700-7B7FF: page 8 */
-       0x8,
-       /* 7B800-7B8FF: page 8 */
-       0x8,
-       /* 7B900-7B9FF: page 8 */
-       0x8,
-       /* 7BA00-7BAFF: page 8 */
-       0x8,
-       /* 7BB00-7BBFF: page 8 */
-       0x8,
-       /* 7BC00-7BCFF: page 8 */
-       0x8,
-       /* 7BD00-7BDFF: page 8 */
-       0x8,
-       /* 7BE00-7BEFF: page 8 */
-       0x8,
-       /* 7BF00-7BFFF: page 8 */
-       0x8,
-       /* 7C000-7C0FF: page 8 */
-       0x8,
-       /* 7C100-7C1FF: page 8 */
-       0x8,
-       /* 7C200-7C2FF: page 8 */
-       0x8,
-       /* 7C300-7C3FF: page 8 */
-       0x8,
-       /* 7C400-7C4FF: page 8 */
-       0x8,
-       /* 7C500-7C5FF: page 8 */
-       0x8,
-       /* 7C600-7C6FF: page 8 */
-       0x8,
-       /* 7C700-7C7FF: page 8 */
-       0x8,
-       /* 7C800-7C8FF: page 8 */
-       0x8,
-       /* 7C900-7C9FF: page 8 */
-       0x8,
-       /* 7CA00-7CAFF: page 8 */
-       0x8,
-       /* 7CB00-7CBFF: page 8 */
-       0x8,
-       /* 7CC00-7CCFF: page 8 */
-       0x8,
-       /* 7CD00-7CDFF: page 8 */
-       0x8,
-       /* 7CE00-7CEFF: page 8 */
-       0x8,
-       /* 7CF00-7CFFF: page 8 */
-       0x8,
-       /* 7D000-7D0FF: page 8 */
-       0x8,
-       /* 7D100-7D1FF: page 8 */
-       0x8,
-       /* 7D200-7D2FF: page 8 */
-       0x8,
-       /* 7D300-7D3FF: page 8 */
-       0x8,
-       /* 7D400-7D4FF: page 8 */
-       0x8,
-       /* 7D500-7D5FF: page 8 */
-       0x8,
-       /* 7D600-7D6FF: page 8 */
-       0x8,
-       /* 7D700-7D7FF: page 8 */
-       0x8,
-       /* 7D800-7D8FF: page 8 */
-       0x8,
-       /* 7D900-7D9FF: page 8 */
-       0x8,
-       /* 7DA00-7DAFF: page 8 */
-       0x8,
-       /* 7DB00-7DBFF: page 8 */
-       0x8,
-       /* 7DC00-7DCFF: page 8 */
-       0x8,
-       /* 7DD00-7DDFF: page 8 */
-       0x8,
-       /* 7DE00-7DEFF: page 8 */
-       0x8,
-       /* 7DF00-7DFFF: page 8 */
-       0x8,
-       /* 7E000-7E0FF: page 8 */
-       0x8,
-       /* 7E100-7E1FF: page 8 */
-       0x8,
-       /* 7E200-7E2FF: page 8 */
-       0x8,
-       /* 7E300-7E3FF: page 8 */
-       0x8,
-       /* 7E400-7E4FF: page 8 */
-       0x8,
-       /* 7E500-7E5FF: page 8 */
-       0x8,
-       /* 7E600-7E6FF: page 8 */
-       0x8,
-       /* 7E700-7E7FF: page 8 */
-       0x8,
-       /* 7E800-7E8FF: page 8 */
-       0x8,
-       /* 7E900-7E9FF: page 8 */
-       0x8,
-       /* 7EA00-7EAFF: page 8 */
-       0x8,
-       /* 7EB00-7EBFF: page 8 */
-       0x8,
-       /* 7EC00-7ECFF: page 8 */
-       0x8,
-       /* 7ED00-7EDFF: page 8 */
-       0x8,
-       /* 7EE00-7EEFF: page 8 */
-       0x8,
-       /* 7EF00-7EFFF: page 8 */
-       0x8,
-       /* 7F000-7F0FF: page 8 */
-       0x8,
-       /* 7F100-7F1FF: page 8 */
-       0x8,
-       /* 7F200-7F2FF: page 8 */
-       0x8,
-       /* 7F300-7F3FF: page 8 */
-       0x8,
-       /* 7F400-7F4FF: page 8 */
-       0x8,
-       /* 7F500-7F5FF: page 8 */
-       0x8,
-       /* 7F600-7F6FF: page 8 */
-       0x8,
-       /* 7F700-7F7FF: page 8 */
-       0x8,
-       /* 7F800-7F8FF: page 8 */
-       0x8,
-       /* 7F900-7F9FF: page 8 */
-       0x8,
-       /* 7FA00-7FAFF: page 8 */
-       0x8,
-       /* 7FB00-7FBFF: page 8 */
-       0x8,
-       /* 7FC00-7FCFF: page 8 */
-       0x8,
-       /* 7FD00-7FDFF: page 8 */
-       0x8,
-       /* 7FE00-7FEFF: page 8 */
-       0x8,
-       /* 7FF00-7FFFF: page 8 */
-       0x8,
-       /* 80000-800FF: page 8 */
-       0x8,
-       /* 80100-801FF: page 8 */
-       0x8,
-       /* 80200-802FF: page 8 */
-       0x8,
-       /* 80300-803FF: page 8 */
-       0x8,
-       /* 80400-804FF: page 8 */
-       0x8,
-       /* 80500-805FF: page 8 */
-       0x8,
-       /* 80600-806FF: page 8 */
-       0x8,
-       /* 80700-807FF: page 8 */
-       0x8,
-       /* 80800-808FF: page 8 */
-       0x8,
-       /* 80900-809FF: page 8 */
-       0x8,
-       /* 80A00-80AFF: page 8 */
-       0x8,
-       /* 80B00-80BFF: page 8 */
-       0x8,
-       /* 80C00-80CFF: page 8 */
-       0x8,
-       /* 80D00-80DFF: page 8 */
-       0x8,
-       /* 80E00-80EFF: page 8 */
-       0x8,
-       /* 80F00-80FFF: page 8 */
-       0x8,
-       /* 81000-810FF: page 8 */
-       0x8,
-       /* 81100-811FF: page 8 */
-       0x8,
-       /* 81200-812FF: page 8 */
-       0x8,
-       /* 81300-813FF: page 8 */
-       0x8,
-       /* 81400-814FF: page 8 */
-       0x8,
-       /* 81500-815FF: page 8 */
-       0x8,
-       /* 81600-816FF: page 8 */
-       0x8,
-       /* 81700-817FF: page 8 */
-       0x8,
-       /* 81800-818FF: page 8 */
-       0x8,
-       /* 81900-819FF: page 8 */
-       0x8,
-       /* 81A00-81AFF: page 8 */
-       0x8,
-       /* 81B00-81BFF: page 8 */
-       0x8,
-       /* 81C00-81CFF: page 8 */
-       0x8,
-       /* 81D00-81DFF: page 8 */
-       0x8,
-       /* 81E00-81EFF: page 8 */
-       0x8,
-       /* 81F00-81FFF: page 8 */
-       0x8,
-       /* 82000-820FF: page 8 */
-       0x8,
-       /* 82100-821FF: page 8 */
-       0x8,
-       /* 82200-822FF: page 8 */
-       0x8,
-       /* 82300-823FF: page 8 */
-       0x8,
-       /* 82400-824FF: page 8 */
-       0x8,
-       /* 82500-825FF: page 8 */
-       0x8,
-       /* 82600-826FF: page 8 */
-       0x8,
-       /* 82700-827FF: page 8 */
-       0x8,
-       /* 82800-828FF: page 8 */
-       0x8,
-       /* 82900-829FF: page 8 */
-       0x8,
-       /* 82A00-82AFF: page 8 */
-       0x8,
-       /* 82B00-82BFF: page 8 */
-       0x8,
-       /* 82C00-82CFF: page 8 */
-       0x8,
-       /* 82D00-82DFF: page 8 */
-       0x8,
-       /* 82E00-82EFF: page 8 */
-       0x8,
-       /* 82F00-82FFF: page 8 */
-       0x8,
-       /* 83000-830FF: page 8 */
-       0x8,
-       /* 83100-831FF: page 8 */
-       0x8,
-       /* 83200-832FF: page 8 */
-       0x8,
-       /* 83300-833FF: page 8 */
-       0x8,
-       /* 83400-834FF: page 8 */
-       0x8,
-       /* 83500-835FF: page 8 */
-       0x8,
-       /* 83600-836FF: page 8 */
-       0x8,
-       /* 83700-837FF: page 8 */
-       0x8,
-       /* 83800-838FF: page 8 */
-       0x8,
-       /* 83900-839FF: page 8 */
-       0x8,
-       /* 83A00-83AFF: page 8 */
-       0x8,
-       /* 83B00-83BFF: page 8 */
-       0x8,
-       /* 83C00-83CFF: page 8 */
-       0x8,
-       /* 83D00-83DFF: page 8 */
-       0x8,
-       /* 83E00-83EFF: page 8 */
-       0x8,
-       /* 83F00-83FFF: page 8 */
-       0x8,
-       /* 84000-840FF: page 8 */
-       0x8,
-       /* 84100-841FF: page 8 */
-       0x8,
-       /* 84200-842FF: page 8 */
-       0x8,
-       /* 84300-843FF: page 8 */
-       0x8,
-       /* 84400-844FF: page 8 */
-       0x8,
-       /* 84500-845FF: page 8 */
-       0x8,
-       /* 84600-846FF: page 8 */
-       0x8,
-       /* 84700-847FF: page 8 */
-       0x8,
-       /* 84800-848FF: page 8 */
-       0x8,
-       /* 84900-849FF: page 8 */
-       0x8,
-       /* 84A00-84AFF: page 8 */
-       0x8,
-       /* 84B00-84BFF: page 8 */
-       0x8,
-       /* 84C00-84CFF: page 8 */
-       0x8,
-       /* 84D00-84DFF: page 8 */
-       0x8,
-       /* 84E00-84EFF: page 8 */
-       0x8,
-       /* 84F00-84FFF: page 8 */
-       0x8,
-       /* 85000-850FF: page 8 */
-       0x8,
-       /* 85100-851FF: page 8 */
-       0x8,
-       /* 85200-852FF: page 8 */
-       0x8,
-       /* 85300-853FF: page 8 */
-       0x8,
-       /* 85400-854FF: page 8 */
-       0x8,
-       /* 85500-855FF: page 8 */
-       0x8,
-       /* 85600-856FF: page 8 */
-       0x8,
-       /* 85700-857FF: page 8 */
-       0x8,
-       /* 85800-858FF: page 8 */
-       0x8,
-       /* 85900-859FF: page 8 */
-       0x8,
-       /* 85A00-85AFF: page 8 */
-       0x8,
-       /* 85B00-85BFF: page 8 */
-       0x8,
-       /* 85C00-85CFF: page 8 */
-       0x8,
-       /* 85D00-85DFF: page 8 */
-       0x8,
-       /* 85E00-85EFF: page 8 */
-       0x8,
-       /* 85F00-85FFF: page 8 */
-       0x8,
-       /* 86000-860FF: page 8 */
-       0x8,
-       /* 86100-861FF: page 8 */
-       0x8,
-       /* 86200-862FF: page 8 */
-       0x8,
-       /* 86300-863FF: page 8 */
-       0x8,
-       /* 86400-864FF: page 8 */
-       0x8,
-       /* 86500-865FF: page 8 */
-       0x8,
-       /* 86600-866FF: page 8 */
-       0x8,
-       /* 86700-867FF: page 8 */
-       0x8,
-       /* 86800-868FF: page 8 */
-       0x8,
-       /* 86900-869FF: page 8 */
-       0x8,
-       /* 86A00-86AFF: page 8 */
-       0x8,
-       /* 86B00-86BFF: page 8 */
-       0x8,
-       /* 86C00-86CFF: page 8 */
-       0x8,
-       /* 86D00-86DFF: page 8 */
-       0x8,
-       /* 86E00-86EFF: page 8 */
-       0x8,
-       /* 86F00-86FFF: page 8 */
-       0x8,
-       /* 87000-870FF: page 8 */
-       0x8,
-       /* 87100-871FF: page 8 */
-       0x8,
-       /* 87200-872FF: page 8 */
-       0x8,
-       /* 87300-873FF: page 8 */
-       0x8,
-       /* 87400-874FF: page 8 */
-       0x8,
-       /* 87500-875FF: page 8 */
-       0x8,
-       /* 87600-876FF: page 8 */
-       0x8,
-       /* 87700-877FF: page 8 */
-       0x8,
-       /* 87800-878FF: page 8 */
-       0x8,
-       /* 87900-879FF: page 8 */
-       0x8,
-       /* 87A00-87AFF: page 8 */
-       0x8,
-       /* 87B00-87BFF: page 8 */
-       0x8,
-       /* 87C00-87CFF: page 8 */
-       0x8,
-       /* 87D00-87DFF: page 8 */
-       0x8,
-       /* 87E00-87EFF: page 8 */
-       0x8,
-       /* 87F00-87FFF: page 8 */
-       0x8,
-       /* 88000-880FF: page 8 */
-       0x8,
-       /* 88100-881FF: page 8 */
-       0x8,
-       /* 88200-882FF: page 8 */
-       0x8,
-       /* 88300-883FF: page 8 */
-       0x8,
-       /* 88400-884FF: page 8 */
-       0x8,
-       /* 88500-885FF: page 8 */
-       0x8,
-       /* 88600-886FF: page 8 */
-       0x8,
-       /* 88700-887FF: page 8 */
-       0x8,
-       /* 88800-888FF: page 8 */
-       0x8,
-       /* 88900-889FF: page 8 */
-       0x8,
-       /* 88A00-88AFF: page 8 */
-       0x8,
-       /* 88B00-88BFF: page 8 */
-       0x8,
-       /* 88C00-88CFF: page 8 */
-       0x8,
-       /* 88D00-88DFF: page 8 */
-       0x8,
-       /* 88E00-88EFF: page 8 */
-       0x8,
-       /* 88F00-88FFF: page 8 */
-       0x8,
-       /* 89000-890FF: page 8 */
-       0x8,
-       /* 89100-891FF: page 8 */
-       0x8,
-       /* 89200-892FF: page 8 */
-       0x8,
-       /* 89300-893FF: page 8 */
-       0x8,
-       /* 89400-894FF: page 8 */
-       0x8,
-       /* 89500-895FF: page 8 */
-       0x8,
-       /* 89600-896FF: page 8 */
-       0x8,
-       /* 89700-897FF: page 8 */
-       0x8,
-       /* 89800-898FF: page 8 */
-       0x8,
-       /* 89900-899FF: page 8 */
-       0x8,
-       /* 89A00-89AFF: page 8 */
-       0x8,
-       /* 89B00-89BFF: page 8 */
-       0x8,
-       /* 89C00-89CFF: page 8 */
-       0x8,
-       /* 89D00-89DFF: page 8 */
-       0x8,
-       /* 89E00-89EFF: page 8 */
-       0x8,
-       /* 89F00-89FFF: page 8 */
-       0x8,
-       /* 8A000-8A0FF: page 8 */
-       0x8,
-       /* 8A100-8A1FF: page 8 */
-       0x8,
-       /* 8A200-8A2FF: page 8 */
-       0x8,
-       /* 8A300-8A3FF: page 8 */
-       0x8,
-       /* 8A400-8A4FF: page 8 */
-       0x8,
-       /* 8A500-8A5FF: page 8 */
-       0x8,
-       /* 8A600-8A6FF: page 8 */
-       0x8,
-       /* 8A700-8A7FF: page 8 */
-       0x8,
-       /* 8A800-8A8FF: page 8 */
-       0x8,
-       /* 8A900-8A9FF: page 8 */
-       0x8,
-       /* 8AA00-8AAFF: page 8 */
-       0x8,
-       /* 8AB00-8ABFF: page 8 */
-       0x8,
-       /* 8AC00-8ACFF: page 8 */
-       0x8,
-       /* 8AD00-8ADFF: page 8 */
-       0x8,
-       /* 8AE00-8AEFF: page 8 */
-       0x8,
-       /* 8AF00-8AFFF: page 8 */
-       0x8,
-       /* 8B000-8B0FF: page 8 */
-       0x8,
-       /* 8B100-8B1FF: page 8 */
-       0x8,
-       /* 8B200-8B2FF: page 8 */
-       0x8,
-       /* 8B300-8B3FF: page 8 */
-       0x8,
-       /* 8B400-8B4FF: page 8 */
-       0x8,
-       /* 8B500-8B5FF: page 8 */
-       0x8,
-       /* 8B600-8B6FF: page 8 */
-       0x8,
-       /* 8B700-8B7FF: page 8 */
-       0x8,
-       /* 8B800-8B8FF: page 8 */
-       0x8,
-       /* 8B900-8B9FF: page 8 */
-       0x8,
-       /* 8BA00-8BAFF: page 8 */
-       0x8,
-       /* 8BB00-8BBFF: page 8 */
-       0x8,
-       /* 8BC00-8BCFF: page 8 */
-       0x8,
-       /* 8BD00-8BDFF: page 8 */
-       0x8,
-       /* 8BE00-8BEFF: page 8 */
-       0x8,
-       /* 8BF00-8BFFF: page 8 */
-       0x8,
-       /* 8C000-8C0FF: page 8 */
-       0x8,
-       /* 8C100-8C1FF: page 8 */
-       0x8,
-       /* 8C200-8C2FF: page 8 */
-       0x8,
-       /* 8C300-8C3FF: page 8 */
-       0x8,
-       /* 8C400-8C4FF: page 8 */
-       0x8,
-       /* 8C500-8C5FF: page 8 */
-       0x8,
-       /* 8C600-8C6FF: page 8 */
-       0x8,
-       /* 8C700-8C7FF: page 8 */
-       0x8,
-       /* 8C800-8C8FF: page 8 */
-       0x8,
-       /* 8C900-8C9FF: page 8 */
-       0x8,
-       /* 8CA00-8CAFF: page 8 */
-       0x8,
-       /* 8CB00-8CBFF: page 8 */
-       0x8,
-       /* 8CC00-8CCFF: page 8 */
-       0x8,
-       /* 8CD00-8CDFF: page 8 */
-       0x8,
-       /* 8CE00-8CEFF: page 8 */
-       0x8,
-       /* 8CF00-8CFFF: page 8 */
-       0x8,
-       /* 8D000-8D0FF: page 8 */
-       0x8,
-       /* 8D100-8D1FF: page 8 */
-       0x8,
-       /* 8D200-8D2FF: page 8 */
-       0x8,
-       /* 8D300-8D3FF: page 8 */
-       0x8,
-       /* 8D400-8D4FF: page 8 */
-       0x8,
-       /* 8D500-8D5FF: page 8 */
-       0x8,
-       /* 8D600-8D6FF: page 8 */
-       0x8,
-       /* 8D700-8D7FF: page 8 */
-       0x8,
-       /* 8D800-8D8FF: page 8 */
-       0x8,
-       /* 8D900-8D9FF: page 8 */
-       0x8,
-       /* 8DA00-8DAFF: page 8 */
-       0x8,
-       /* 8DB00-8DBFF: page 8 */
-       0x8,
-       /* 8DC00-8DCFF: page 8 */
-       0x8,
-       /* 8DD00-8DDFF: page 8 */
-       0x8,
-       /* 8DE00-8DEFF: page 8 */
-       0x8,
-       /* 8DF00-8DFFF: page 8 */
-       0x8,
-       /* 8E000-8E0FF: page 8 */
-       0x8,
-       /* 8E100-8E1FF: page 8 */
-       0x8,
-       /* 8E200-8E2FF: page 8 */
-       0x8,
-       /* 8E300-8E3FF: page 8 */
-       0x8,
-       /* 8E400-8E4FF: page 8 */
-       0x8,
-       /* 8E500-8E5FF: page 8 */
-       0x8,
-       /* 8E600-8E6FF: page 8 */
-       0x8,
-       /* 8E700-8E7FF: page 8 */
-       0x8,
-       /* 8E800-8E8FF: page 8 */
-       0x8,
-       /* 8E900-8E9FF: page 8 */
-       0x8,
-       /* 8EA00-8EAFF: page 8 */
-       0x8,
-       /* 8EB00-8EBFF: page 8 */
-       0x8,
-       /* 8EC00-8ECFF: page 8 */
-       0x8,
-       /* 8ED00-8EDFF: page 8 */
-       0x8,
-       /* 8EE00-8EEFF: page 8 */
-       0x8,
-       /* 8EF00-8EFFF: page 8 */
-       0x8,
-       /* 8F000-8F0FF: page 8 */
-       0x8,
-       /* 8F100-8F1FF: page 8 */
-       0x8,
-       /* 8F200-8F2FF: page 8 */
-       0x8,
-       /* 8F300-8F3FF: page 8 */
-       0x8,
-       /* 8F400-8F4FF: page 8 */
-       0x8,
-       /* 8F500-8F5FF: page 8 */
-       0x8,
-       /* 8F600-8F6FF: page 8 */
-       0x8,
-       /* 8F700-8F7FF: page 8 */
-       0x8,
-       /* 8F800-8F8FF: page 8 */
-       0x8,
-       /* 8F900-8F9FF: page 8 */
-       0x8,
-       /* 8FA00-8FAFF: page 8 */
-       0x8,
-       /* 8FB00-8FBFF: page 8 */
-       0x8,
-       /* 8FC00-8FCFF: page 8 */
-       0x8,
-       /* 8FD00-8FDFF: page 8 */
-       0x8,
-       /* 8FE00-8FEFF: page 8 */
-       0x8,
-       /* 8FF00-8FFFF: page 8 */
-       0x8,
-       /* 90000-900FF: page 8 */
-       0x8,
-       /* 90100-901FF: page 8 */
-       0x8,
-       /* 90200-902FF: page 8 */
-       0x8,
-       /* 90300-903FF: page 8 */
-       0x8,
-       /* 90400-904FF: page 8 */
-       0x8,
-       /* 90500-905FF: page 8 */
-       0x8,
-       /* 90600-906FF: page 8 */
-       0x8,
-       /* 90700-907FF: page 8 */
-       0x8,
-       /* 90800-908FF: page 8 */
-       0x8,
-       /* 90900-909FF: page 8 */
-       0x8,
-       /* 90A00-90AFF: page 8 */
-       0x8,
-       /* 90B00-90BFF: page 8 */
-       0x8,
-       /* 90C00-90CFF: page 8 */
-       0x8,
-       /* 90D00-90DFF: page 8 */
-       0x8,
-       /* 90E00-90EFF: page 8 */
-       0x8,
-       /* 90F00-90FFF: page 8 */
-       0x8,
-       /* 91000-910FF: page 8 */
-       0x8,
-       /* 91100-911FF: page 8 */
-       0x8,
-       /* 91200-912FF: page 8 */
-       0x8,
-       /* 91300-913FF: page 8 */
-       0x8,
-       /* 91400-914FF: page 8 */
-       0x8,
-       /* 91500-915FF: page 8 */
-       0x8,
-       /* 91600-916FF: page 8 */
-       0x8,
-       /* 91700-917FF: page 8 */
-       0x8,
-       /* 91800-918FF: page 8 */
-       0x8,
-       /* 91900-919FF: page 8 */
-       0x8,
-       /* 91A00-91AFF: page 8 */
-       0x8,
-       /* 91B00-91BFF: page 8 */
-       0x8,
-       /* 91C00-91CFF: page 8 */
-       0x8,
-       /* 91D00-91DFF: page 8 */
-       0x8,
-       /* 91E00-91EFF: page 8 */
-       0x8,
-       /* 91F00-91FFF: page 8 */
-       0x8,
-       /* 92000-920FF: page 8 */
-       0x8,
-       /* 92100-921FF: page 8 */
-       0x8,
-       /* 92200-922FF: page 8 */
-       0x8,
-       /* 92300-923FF: page 8 */
-       0x8,
-       /* 92400-924FF: page 8 */
-       0x8,
-       /* 92500-925FF: page 8 */
-       0x8,
-       /* 92600-926FF: page 8 */
-       0x8,
-       /* 92700-927FF: page 8 */
-       0x8,
-       /* 92800-928FF: page 8 */
-       0x8,
-       /* 92900-929FF: page 8 */
-       0x8,
-       /* 92A00-92AFF: page 8 */
-       0x8,
-       /* 92B00-92BFF: page 8 */
-       0x8,
-       /* 92C00-92CFF: page 8 */
-       0x8,
-       /* 92D00-92DFF: page 8 */
-       0x8,
-       /* 92E00-92EFF: page 8 */
-       0x8,
-       /* 92F00-92FFF: page 8 */
-       0x8,
-       /* 93000-930FF: page 8 */
-       0x8,
-       /* 93100-931FF: page 8 */
-       0x8,
-       /* 93200-932FF: page 8 */
-       0x8,
-       /* 93300-933FF: page 8 */
-       0x8,
-       /* 93400-934FF: page 8 */
-       0x8,
-       /* 93500-935FF: page 8 */
-       0x8,
-       /* 93600-936FF: page 8 */
-       0x8,
-       /* 93700-937FF: page 8 */
-       0x8,
-       /* 93800-938FF: page 8 */
-       0x8,
-       /* 93900-939FF: page 8 */
-       0x8,
-       /* 93A00-93AFF: page 8 */
-       0x8,
-       /* 93B00-93BFF: page 8 */
-       0x8,
-       /* 93C00-93CFF: page 8 */
-       0x8,
-       /* 93D00-93DFF: page 8 */
-       0x8,
-       /* 93E00-93EFF: page 8 */
-       0x8,
-       /* 93F00-93FFF: page 8 */
-       0x8,
-       /* 94000-940FF: page 8 */
-       0x8,
-       /* 94100-941FF: page 8 */
-       0x8,
-       /* 94200-942FF: page 8 */
-       0x8,
-       /* 94300-943FF: page 8 */
-       0x8,
-       /* 94400-944FF: page 8 */
-       0x8,
-       /* 94500-945FF: page 8 */
-       0x8,
-       /* 94600-946FF: page 8 */
-       0x8,
-       /* 94700-947FF: page 8 */
-       0x8,
-       /* 94800-948FF: page 8 */
-       0x8,
-       /* 94900-949FF: page 8 */
-       0x8,
-       /* 94A00-94AFF: page 8 */
-       0x8,
-       /* 94B00-94BFF: page 8 */
-       0x8,
-       /* 94C00-94CFF: page 8 */
-       0x8,
-       /* 94D00-94DFF: page 8 */
-       0x8,
-       /* 94E00-94EFF: page 8 */
-       0x8,
-       /* 94F00-94FFF: page 8 */
-       0x8,
-       /* 95000-950FF: page 8 */
-       0x8,
-       /* 95100-951FF: page 8 */
-       0x8,
-       /* 95200-952FF: page 8 */
-       0x8,
-       /* 95300-953FF: page 8 */
-       0x8,
-       /* 95400-954FF: page 8 */
-       0x8,
-       /* 95500-955FF: page 8 */
-       0x8,
-       /* 95600-956FF: page 8 */
-       0x8,
-       /* 95700-957FF: page 8 */
-       0x8,
-       /* 95800-958FF: page 8 */
-       0x8,
-       /* 95900-959FF: page 8 */
-       0x8,
-       /* 95A00-95AFF: page 8 */
-       0x8,
-       /* 95B00-95BFF: page 8 */
-       0x8,
-       /* 95C00-95CFF: page 8 */
-       0x8,
-       /* 95D00-95DFF: page 8 */
-       0x8,
-       /* 95E00-95EFF: page 8 */
-       0x8,
-       /* 95F00-95FFF: page 8 */
-       0x8,
-       /* 96000-960FF: page 8 */
-       0x8,
-       /* 96100-961FF: page 8 */
-       0x8,
-       /* 96200-962FF: page 8 */
-       0x8,
-       /* 96300-963FF: page 8 */
-       0x8,
-       /* 96400-964FF: page 8 */
-       0x8,
-       /* 96500-965FF: page 8 */
-       0x8,
-       /* 96600-966FF: page 8 */
-       0x8,
-       /* 96700-967FF: page 8 */
-       0x8,
-       /* 96800-968FF: page 8 */
-       0x8,
-       /* 96900-969FF: page 8 */
-       0x8,
-       /* 96A00-96AFF: page 8 */
-       0x8,
-       /* 96B00-96BFF: page 8 */
-       0x8,
-       /* 96C00-96CFF: page 8 */
-       0x8,
-       /* 96D00-96DFF: page 8 */
-       0x8,
-       /* 96E00-96EFF: page 8 */
-       0x8,
-       /* 96F00-96FFF: page 8 */
-       0x8,
-       /* 97000-970FF: page 8 */
-       0x8,
-       /* 97100-971FF: page 8 */
-       0x8,
-       /* 97200-972FF: page 8 */
-       0x8,
-       /* 97300-973FF: page 8 */
-       0x8,
-       /* 97400-974FF: page 8 */
-       0x8,
-       /* 97500-975FF: page 8 */
-       0x8,
-       /* 97600-976FF: page 8 */
-       0x8,
-       /* 97700-977FF: page 8 */
-       0x8,
-       /* 97800-978FF: page 8 */
-       0x8,
-       /* 97900-979FF: page 8 */
-       0x8,
-       /* 97A00-97AFF: page 8 */
-       0x8,
-       /* 97B00-97BFF: page 8 */
-       0x8,
-       /* 97C00-97CFF: page 8 */
-       0x8,
-       /* 97D00-97DFF: page 8 */
-       0x8,
-       /* 97E00-97EFF: page 8 */
-       0x8,
-       /* 97F00-97FFF: page 8 */
-       0x8,
-       /* 98000-980FF: page 8 */
-       0x8,
-       /* 98100-981FF: page 8 */
-       0x8,
-       /* 98200-982FF: page 8 */
-       0x8,
-       /* 98300-983FF: page 8 */
-       0x8,
-       /* 98400-984FF: page 8 */
-       0x8,
-       /* 98500-985FF: page 8 */
-       0x8,
-       /* 98600-986FF: page 8 */
-       0x8,
-       /* 98700-987FF: page 8 */
-       0x8,
-       /* 98800-988FF: page 8 */
-       0x8,
-       /* 98900-989FF: page 8 */
-       0x8,
-       /* 98A00-98AFF: page 8 */
-       0x8,
-       /* 98B00-98BFF: page 8 */
-       0x8,
-       /* 98C00-98CFF: page 8 */
-       0x8,
-       /* 98D00-98DFF: page 8 */
-       0x8,
-       /* 98E00-98EFF: page 8 */
-       0x8,
-       /* 98F00-98FFF: page 8 */
-       0x8,
-       /* 99000-990FF: page 8 */
-       0x8,
-       /* 99100-991FF: page 8 */
-       0x8,
-       /* 99200-992FF: page 8 */
-       0x8,
-       /* 99300-993FF: page 8 */
-       0x8,
-       /* 99400-994FF: page 8 */
-       0x8,
-       /* 99500-995FF: page 8 */
-       0x8,
-       /* 99600-996FF: page 8 */
-       0x8,
-       /* 99700-997FF: page 8 */
-       0x8,
-       /* 99800-998FF: page 8 */
-       0x8,
-       /* 99900-999FF: page 8 */
-       0x8,
-       /* 99A00-99AFF: page 8 */
-       0x8,
-       /* 99B00-99BFF: page 8 */
-       0x8,
-       /* 99C00-99CFF: page 8 */
-       0x8,
-       /* 99D00-99DFF: page 8 */
-       0x8,
-       /* 99E00-99EFF: page 8 */
-       0x8,
-       /* 99F00-99FFF: page 8 */
-       0x8,
-       /* 9A000-9A0FF: page 8 */
-       0x8,
-       /* 9A100-9A1FF: page 8 */
-       0x8,
-       /* 9A200-9A2FF: page 8 */
-       0x8,
-       /* 9A300-9A3FF: page 8 */
-       0x8,
-       /* 9A400-9A4FF: page 8 */
-       0x8,
-       /* 9A500-9A5FF: page 8 */
-       0x8,
-       /* 9A600-9A6FF: page 8 */
-       0x8,
-       /* 9A700-9A7FF: page 8 */
-       0x8,
-       /* 9A800-9A8FF: page 8 */
-       0x8,
-       /* 9A900-9A9FF: page 8 */
-       0x8,
-       /* 9AA00-9AAFF: page 8 */
-       0x8,
-       /* 9AB00-9ABFF: page 8 */
-       0x8,
-       /* 9AC00-9ACFF: page 8 */
-       0x8,
-       /* 9AD00-9ADFF: page 8 */
-       0x8,
-       /* 9AE00-9AEFF: page 8 */
-       0x8,
-       /* 9AF00-9AFFF: page 8 */
-       0x8,
-       /* 9B000-9B0FF: page 8 */
-       0x8,
-       /* 9B100-9B1FF: page 8 */
-       0x8,
-       /* 9B200-9B2FF: page 8 */
-       0x8,
-       /* 9B300-9B3FF: page 8 */
-       0x8,
-       /* 9B400-9B4FF: page 8 */
-       0x8,
-       /* 9B500-9B5FF: page 8 */
-       0x8,
-       /* 9B600-9B6FF: page 8 */
-       0x8,
-       /* 9B700-9B7FF: page 8 */
-       0x8,
-       /* 9B800-9B8FF: page 8 */
-       0x8,
-       /* 9B900-9B9FF: page 8 */
-       0x8,
-       /* 9BA00-9BAFF: page 8 */
-       0x8,
-       /* 9BB00-9BBFF: page 8 */
-       0x8,
-       /* 9BC00-9BCFF: page 8 */
-       0x8,
-       /* 9BD00-9BDFF: page 8 */
-       0x8,
-       /* 9BE00-9BEFF: page 8 */
-       0x8,
-       /* 9BF00-9BFFF: page 8 */
-       0x8,
-       /* 9C000-9C0FF: page 8 */
-       0x8,
-       /* 9C100-9C1FF: page 8 */
-       0x8,
-       /* 9C200-9C2FF: page 8 */
-       0x8,
-       /* 9C300-9C3FF: page 8 */
-       0x8,
-       /* 9C400-9C4FF: page 8 */
-       0x8,
-       /* 9C500-9C5FF: page 8 */
-       0x8,
-       /* 9C600-9C6FF: page 8 */
-       0x8,
-       /* 9C700-9C7FF: page 8 */
-       0x8,
-       /* 9C800-9C8FF: page 8 */
-       0x8,
-       /* 9C900-9C9FF: page 8 */
-       0x8,
-       /* 9CA00-9CAFF: page 8 */
-       0x8,
-       /* 9CB00-9CBFF: page 8 */
-       0x8,
-       /* 9CC00-9CCFF: page 8 */
-       0x8,
-       /* 9CD00-9CDFF: page 8 */
-       0x8,
-       /* 9CE00-9CEFF: page 8 */
-       0x8,
-       /* 9CF00-9CFFF: page 8 */
-       0x8,
-       /* 9D000-9D0FF: page 8 */
-       0x8,
-       /* 9D100-9D1FF: page 8 */
-       0x8,
-       /* 9D200-9D2FF: page 8 */
-       0x8,
-       /* 9D300-9D3FF: page 8 */
-       0x8,
-       /* 9D400-9D4FF: page 8 */
-       0x8,
-       /* 9D500-9D5FF: page 8 */
-       0x8,
-       /* 9D600-9D6FF: page 8 */
-       0x8,
-       /* 9D700-9D7FF: page 8 */
-       0x8,
-       /* 9D800-9D8FF: page 8 */
-       0x8,
-       /* 9D900-9D9FF: page 8 */
-       0x8,
-       /* 9DA00-9DAFF: page 8 */
-       0x8,
-       /* 9DB00-9DBFF: page 8 */
-       0x8,
-       /* 9DC00-9DCFF: page 8 */
-       0x8,
-       /* 9DD00-9DDFF: page 8 */
-       0x8,
-       /* 9DE00-9DEFF: page 8 */
-       0x8,
-       /* 9DF00-9DFFF: page 8 */
-       0x8,
-       /* 9E000-9E0FF: page 8 */
-       0x8,
-       /* 9E100-9E1FF: page 8 */
-       0x8,
-       /* 9E200-9E2FF: page 8 */
-       0x8,
-       /* 9E300-9E3FF: page 8 */
-       0x8,
-       /* 9E400-9E4FF: page 8 */
-       0x8,
-       /* 9E500-9E5FF: page 8 */
-       0x8,
-       /* 9E600-9E6FF: page 8 */
-       0x8,
-       /* 9E700-9E7FF: page 8 */
-       0x8,
-       /* 9E800-9E8FF: page 8 */
-       0x8,
-       /* 9E900-9E9FF: page 8 */
-       0x8,
-       /* 9EA00-9EAFF: page 8 */
-       0x8,
-       /* 9EB00-9EBFF: page 8 */
-       0x8,
-       /* 9EC00-9ECFF: page 8 */
-       0x8,
-       /* 9ED00-9EDFF: page 8 */
-       0x8,
-       /* 9EE00-9EEFF: page 8 */
-       0x8,
-       /* 9EF00-9EFFF: page 8 */
-       0x8,
-       /* 9F000-9F0FF: page 8 */
-       0x8,
-       /* 9F100-9F1FF: page 8 */
-       0x8,
-       /* 9F200-9F2FF: page 8 */
-       0x8,
-       /* 9F300-9F3FF: page 8 */
-       0x8,
-       /* 9F400-9F4FF: page 8 */
-       0x8,
-       /* 9F500-9F5FF: page 8 */
-       0x8,
-       /* 9F600-9F6FF: page 8 */
-       0x8,
-       /* 9F700-9F7FF: page 8 */
-       0x8,
-       /* 9F800-9F8FF: page 8 */
-       0x8,
-       /* 9F900-9F9FF: page 8 */
-       0x8,
-       /* 9FA00-9FAFF: page 8 */
-       0x8,
-       /* 9FB00-9FBFF: page 8 */
-       0x8,
-       /* 9FC00-9FCFF: page 8 */
-       0x8,
-       /* 9FD00-9FDFF: page 8 */
-       0x8,
-       /* 9FE00-9FEFF: page 8 */
-       0x8,
-       /* 9FF00-9FFFF: page 8 */
-       0x8,
-       /* A0000-A00FF: page 8 */
-       0x8,
-       /* A0100-A01FF: page 8 */
-       0x8,
-       /* A0200-A02FF: page 8 */
-       0x8,
-       /* A0300-A03FF: page 8 */
-       0x8,
-       /* A0400-A04FF: page 8 */
-       0x8,
-       /* A0500-A05FF: page 8 */
-       0x8,
-       /* A0600-A06FF: page 8 */
-       0x8,
-       /* A0700-A07FF: page 8 */
-       0x8,
-       /* A0800-A08FF: page 8 */
-       0x8,
-       /* A0900-A09FF: page 8 */
-       0x8,
-       /* A0A00-A0AFF: page 8 */
-       0x8,
-       /* A0B00-A0BFF: page 8 */
-       0x8,
-       /* A0C00-A0CFF: page 8 */
-       0x8,
-       /* A0D00-A0DFF: page 8 */
-       0x8,
-       /* A0E00-A0EFF: page 8 */
-       0x8,
-       /* A0F00-A0FFF: page 8 */
-       0x8,
-       /* A1000-A10FF: page 8 */
-       0x8,
-       /* A1100-A11FF: page 8 */
-       0x8,
-       /* A1200-A12FF: page 8 */
-       0x8,
-       /* A1300-A13FF: page 8 */
-       0x8,
-       /* A1400-A14FF: page 8 */
-       0x8,
-       /* A1500-A15FF: page 8 */
-       0x8,
-       /* A1600-A16FF: page 8 */
-       0x8,
-       /* A1700-A17FF: page 8 */
-       0x8,
-       /* A1800-A18FF: page 8 */
-       0x8,
-       /* A1900-A19FF: page 8 */
-       0x8,
-       /* A1A00-A1AFF: page 8 */
-       0x8,
-       /* A1B00-A1BFF: page 8 */
-       0x8,
-       /* A1C00-A1CFF: page 8 */
-       0x8,
-       /* A1D00-A1DFF: page 8 */
-       0x8,
-       /* A1E00-A1EFF: page 8 */
-       0x8,
-       /* A1F00-A1FFF: page 8 */
-       0x8,
-       /* A2000-A20FF: page 8 */
-       0x8,
-       /* A2100-A21FF: page 8 */
-       0x8,
-       /* A2200-A22FF: page 8 */
-       0x8,
-       /* A2300-A23FF: page 8 */
-       0x8,
-       /* A2400-A24FF: page 8 */
-       0x8,
-       /* A2500-A25FF: page 8 */
-       0x8,
-       /* A2600-A26FF: page 8 */
-       0x8,
-       /* A2700-A27FF: page 8 */
-       0x8,
-       /* A2800-A28FF: page 8 */
-       0x8,
-       /* A2900-A29FF: page 8 */
-       0x8,
-       /* A2A00-A2AFF: page 8 */
-       0x8,
-       /* A2B00-A2BFF: page 8 */
-       0x8,
-       /* A2C00-A2CFF: page 8 */
-       0x8,
-       /* A2D00-A2DFF: page 8 */
-       0x8,
-       /* A2E00-A2EFF: page 8 */
-       0x8,
-       /* A2F00-A2FFF: page 8 */
-       0x8,
-       /* A3000-A30FF: page 8 */
-       0x8,
-       /* A3100-A31FF: page 8 */
-       0x8,
-       /* A3200-A32FF: page 8 */
-       0x8,
-       /* A3300-A33FF: page 8 */
-       0x8,
-       /* A3400-A34FF: page 8 */
-       0x8,
-       /* A3500-A35FF: page 8 */
-       0x8,
-       /* A3600-A36FF: page 8 */
-       0x8,
-       /* A3700-A37FF: page 8 */
-       0x8,
-       /* A3800-A38FF: page 8 */
-       0x8,
-       /* A3900-A39FF: page 8 */
-       0x8,
-       /* A3A00-A3AFF: page 8 */
-       0x8,
-       /* A3B00-A3BFF: page 8 */
-       0x8,
-       /* A3C00-A3CFF: page 8 */
-       0x8,
-       /* A3D00-A3DFF: page 8 */
-       0x8,
-       /* A3E00-A3EFF: page 8 */
-       0x8,
-       /* A3F00-A3FFF: page 8 */
-       0x8,
-       /* A4000-A40FF: page 8 */
-       0x8,
-       /* A4100-A41FF: page 8 */
-       0x8,
-       /* A4200-A42FF: page 8 */
-       0x8,
-       /* A4300-A43FF: page 8 */
-       0x8,
-       /* A4400-A44FF: page 8 */
-       0x8,
-       /* A4500-A45FF: page 8 */
-       0x8,
-       /* A4600-A46FF: page 8 */
-       0x8,
-       /* A4700-A47FF: page 8 */
-       0x8,
-       /* A4800-A48FF: page 8 */
-       0x8,
-       /* A4900-A49FF: page 8 */
-       0x8,
-       /* A4A00-A4AFF: page 8 */
-       0x8,
-       /* A4B00-A4BFF: page 8 */
-       0x8,
-       /* A4C00-A4CFF: page 8 */
-       0x8,
-       /* A4D00-A4DFF: page 8 */
-       0x8,
-       /* A4E00-A4EFF: page 8 */
-       0x8,
-       /* A4F00-A4FFF: page 8 */
-       0x8,
-       /* A5000-A50FF: page 8 */
-       0x8,
-       /* A5100-A51FF: page 8 */
-       0x8,
-       /* A5200-A52FF: page 8 */
-       0x8,
-       /* A5300-A53FF: page 8 */
-       0x8,
-       /* A5400-A54FF: page 8 */
-       0x8,
-       /* A5500-A55FF: page 8 */
-       0x8,
-       /* A5600-A56FF: page 8 */
-       0x8,
-       /* A5700-A57FF: page 8 */
-       0x8,
-       /* A5800-A58FF: page 8 */
-       0x8,
-       /* A5900-A59FF: page 8 */
-       0x8,
-       /* A5A00-A5AFF: page 8 */
-       0x8,
-       /* A5B00-A5BFF: page 8 */
-       0x8,
-       /* A5C00-A5CFF: page 8 */
-       0x8,
-       /* A5D00-A5DFF: page 8 */
-       0x8,
-       /* A5E00-A5EFF: page 8 */
-       0x8,
-       /* A5F00-A5FFF: page 8 */
-       0x8,
-       /* A6000-A60FF: page 8 */
-       0x8,
-       /* A6100-A61FF: page 8 */
-       0x8,
-       /* A6200-A62FF: page 8 */
-       0x8,
-       /* A6300-A63FF: page 8 */
-       0x8,
-       /* A6400-A64FF: page 8 */
-       0x8,
-       /* A6500-A65FF: page 8 */
-       0x8,
-       /* A6600-A66FF: page 8 */
-       0x8,
-       /* A6700-A67FF: page 8 */
-       0x8,
-       /* A6800-A68FF: page 8 */
-       0x8,
-       /* A6900-A69FF: page 8 */
-       0x8,
-       /* A6A00-A6AFF: page 8 */
-       0x8,
-       /* A6B00-A6BFF: page 8 */
-       0x8,
-       /* A6C00-A6CFF: page 8 */
-       0x8,
-       /* A6D00-A6DFF: page 8 */
-       0x8,
-       /* A6E00-A6EFF: page 8 */
-       0x8,
-       /* A6F00-A6FFF: page 8 */
-       0x8,
-       /* A7000-A70FF: page 8 */
-       0x8,
-       /* A7100-A71FF: page 8 */
-       0x8,
-       /* A7200-A72FF: page 8 */
-       0x8,
-       /* A7300-A73FF: page 8 */
-       0x8,
-       /* A7400-A74FF: page 8 */
-       0x8,
-       /* A7500-A75FF: page 8 */
-       0x8,
-       /* A7600-A76FF: page 8 */
-       0x8,
-       /* A7700-A77FF: page 8 */
-       0x8,
-       /* A7800-A78FF: page 8 */
-       0x8,
-       /* A7900-A79FF: page 8 */
-       0x8,
-       /* A7A00-A7AFF: page 8 */
-       0x8,
-       /* A7B00-A7BFF: page 8 */
-       0x8,
-       /* A7C00-A7CFF: page 8 */
-       0x8,
-       /* A7D00-A7DFF: page 8 */
-       0x8,
-       /* A7E00-A7EFF: page 8 */
-       0x8,
-       /* A7F00-A7FFF: page 8 */
-       0x8,
-       /* A8000-A80FF: page 8 */
-       0x8,
-       /* A8100-A81FF: page 8 */
-       0x8,
-       /* A8200-A82FF: page 8 */
-       0x8,
-       /* A8300-A83FF: page 8 */
-       0x8,
-       /* A8400-A84FF: page 8 */
-       0x8,
-       /* A8500-A85FF: page 8 */
-       0x8,
-       /* A8600-A86FF: page 8 */
-       0x8,
-       /* A8700-A87FF: page 8 */
-       0x8,
-       /* A8800-A88FF: page 8 */
-       0x8,
-       /* A8900-A89FF: page 8 */
-       0x8,
-       /* A8A00-A8AFF: page 8 */
-       0x8,
-       /* A8B00-A8BFF: page 8 */
-       0x8,
-       /* A8C00-A8CFF: page 8 */
-       0x8,
-       /* A8D00-A8DFF: page 8 */
-       0x8,
-       /* A8E00-A8EFF: page 8 */
-       0x8,
-       /* A8F00-A8FFF: page 8 */
-       0x8,
-       /* A9000-A90FF: page 8 */
-       0x8,
-       /* A9100-A91FF: page 8 */
-       0x8,
-       /* A9200-A92FF: page 8 */
-       0x8,
-       /* A9300-A93FF: page 8 */
-       0x8,
-       /* A9400-A94FF: page 8 */
-       0x8,
-       /* A9500-A95FF: page 8 */
-       0x8,
-       /* A9600-A96FF: page 8 */
-       0x8,
-       /* A9700-A97FF: page 8 */
-       0x8,
-       /* A9800-A98FF: page 8 */
-       0x8,
-       /* A9900-A99FF: page 8 */
-       0x8,
-       /* A9A00-A9AFF: page 8 */
-       0x8,
-       /* A9B00-A9BFF: page 8 */
-       0x8,
-       /* A9C00-A9CFF: page 8 */
-       0x8,
-       /* A9D00-A9DFF: page 8 */
-       0x8,
-       /* A9E00-A9EFF: page 8 */
-       0x8,
-       /* A9F00-A9FFF: page 8 */
-       0x8,
-       /* AA000-AA0FF: page 8 */
-       0x8,
-       /* AA100-AA1FF: page 8 */
-       0x8,
-       /* AA200-AA2FF: page 8 */
-       0x8,
-       /* AA300-AA3FF: page 8 */
-       0x8,
-       /* AA400-AA4FF: page 8 */
-       0x8,
-       /* AA500-AA5FF: page 8 */
-       0x8,
-       /* AA600-AA6FF: page 8 */
-       0x8,
-       /* AA700-AA7FF: page 8 */
-       0x8,
-       /* AA800-AA8FF: page 8 */
-       0x8,
-       /* AA900-AA9FF: page 8 */
-       0x8,
-       /* AAA00-AAAFF: page 8 */
-       0x8,
-       /* AAB00-AABFF: page 8 */
-       0x8,
-       /* AAC00-AACFF: page 8 */
-       0x8,
-       /* AAD00-AADFF: page 8 */
-       0x8,
-       /* AAE00-AAEFF: page 8 */
-       0x8,
-       /* AAF00-AAFFF: page 8 */
-       0x8,
-       /* AB000-AB0FF: page 8 */
-       0x8,
-       /* AB100-AB1FF: page 8 */
-       0x8,
-       /* AB200-AB2FF: page 8 */
-       0x8,
-       /* AB300-AB3FF: page 8 */
-       0x8,
-       /* AB400-AB4FF: page 8 */
-       0x8,
-       /* AB500-AB5FF: page 8 */
-       0x8,
-       /* AB600-AB6FF: page 8 */
-       0x8,
-       /* AB700-AB7FF: page 8 */
-       0x8,
-       /* AB800-AB8FF: page 8 */
-       0x8,
-       /* AB900-AB9FF: page 8 */
-       0x8,
-       /* ABA00-ABAFF: page 8 */
-       0x8,
-       /* ABB00-ABBFF: page 8 */
-       0x8,
-       /* ABC00-ABCFF: page 8 */
-       0x8,
-       /* ABD00-ABDFF: page 8 */
-       0x8,
-       /* ABE00-ABEFF: page 8 */
-       0x8,
-       /* ABF00-ABFFF: page 8 */
-       0x8,
-       /* AC000-AC0FF: page 8 */
-       0x8,
-       /* AC100-AC1FF: page 8 */
-       0x8,
-       /* AC200-AC2FF: page 8 */
-       0x8,
-       /* AC300-AC3FF: page 8 */
-       0x8,
-       /* AC400-AC4FF: page 8 */
-       0x8,
-       /* AC500-AC5FF: page 8 */
-       0x8,
-       /* AC600-AC6FF: page 8 */
-       0x8,
-       /* AC700-AC7FF: page 8 */
-       0x8,
-       /* AC800-AC8FF: page 8 */
-       0x8,
-       /* AC900-AC9FF: page 8 */
-       0x8,
-       /* ACA00-ACAFF: page 8 */
-       0x8,
-       /* ACB00-ACBFF: page 8 */
-       0x8,
-       /* ACC00-ACCFF: page 8 */
-       0x8,
-       /* ACD00-ACDFF: page 8 */
-       0x8,
-       /* ACE00-ACEFF: page 8 */
-       0x8,
-       /* ACF00-ACFFF: page 8 */
-       0x8,
-       /* AD000-AD0FF: page 8 */
-       0x8,
-       /* AD100-AD1FF: page 8 */
-       0x8,
-       /* AD200-AD2FF: page 8 */
-       0x8,
-       /* AD300-AD3FF: page 8 */
-       0x8,
-       /* AD400-AD4FF: page 8 */
-       0x8,
-       /* AD500-AD5FF: page 8 */
-       0x8,
-       /* AD600-AD6FF: page 8 */
-       0x8,
-       /* AD700-AD7FF: page 8 */
-       0x8,
-       /* AD800-AD8FF: page 8 */
-       0x8,
-       /* AD900-AD9FF: page 8 */
-       0x8,
-       /* ADA00-ADAFF: page 8 */
-       0x8,
-       /* ADB00-ADBFF: page 8 */
-       0x8,
-       /* ADC00-ADCFF: page 8 */
-       0x8,
-       /* ADD00-ADDFF: page 8 */
-       0x8,
-       /* ADE00-ADEFF: page 8 */
-       0x8,
-       /* ADF00-ADFFF: page 8 */
-       0x8,
-       /* AE000-AE0FF: page 8 */
-       0x8,
-       /* AE100-AE1FF: page 8 */
-       0x8,
-       /* AE200-AE2FF: page 8 */
-       0x8,
-       /* AE300-AE3FF: page 8 */
-       0x8,
-       /* AE400-AE4FF: page 8 */
-       0x8,
-       /* AE500-AE5FF: page 8 */
-       0x8,
-       /* AE600-AE6FF: page 8 */
-       0x8,
-       /* AE700-AE7FF: page 8 */
-       0x8,
-       /* AE800-AE8FF: page 8 */
-       0x8,
-       /* AE900-AE9FF: page 8 */
-       0x8,
-       /* AEA00-AEAFF: page 8 */
-       0x8,
-       /* AEB00-AEBFF: page 8 */
-       0x8,
-       /* AEC00-AECFF: page 8 */
-       0x8,
-       /* AED00-AEDFF: page 8 */
-       0x8,
-       /* AEE00-AEEFF: page 8 */
-       0x8,
-       /* AEF00-AEFFF: page 8 */
-       0x8,
-       /* AF000-AF0FF: page 8 */
-       0x8,
-       /* AF100-AF1FF: page 8 */
-       0x8,
-       /* AF200-AF2FF: page 8 */
-       0x8,
-       /* AF300-AF3FF: page 8 */
-       0x8,
-       /* AF400-AF4FF: page 8 */
-       0x8,
-       /* AF500-AF5FF: page 8 */
-       0x8,
-       /* AF600-AF6FF: page 8 */
-       0x8,
-       /* AF700-AF7FF: page 8 */
-       0x8,
-       /* AF800-AF8FF: page 8 */
-       0x8,
-       /* AF900-AF9FF: page 8 */
-       0x8,
-       /* AFA00-AFAFF: page 8 */
-       0x8,
-       /* AFB00-AFBFF: page 8 */
-       0x8,
-       /* AFC00-AFCFF: page 8 */
-       0x8,
-       /* AFD00-AFDFF: page 8 */
-       0x8,
-       /* AFE00-AFEFF: page 8 */
-       0x8,
-       /* AFF00-AFFFF: page 8 */
-       0x8,
-       /* B0000-B00FF: page 8 */
-       0x8,
-       /* B0100-B01FF: page 8 */
-       0x8,
-       /* B0200-B02FF: page 8 */
-       0x8,
-       /* B0300-B03FF: page 8 */
-       0x8,
-       /* B0400-B04FF: page 8 */
-       0x8,
-       /* B0500-B05FF: page 8 */
-       0x8,
-       /* B0600-B06FF: page 8 */
-       0x8,
-       /* B0700-B07FF: page 8 */
-       0x8,
-       /* B0800-B08FF: page 8 */
-       0x8,
-       /* B0900-B09FF: page 8 */
-       0x8,
-       /* B0A00-B0AFF: page 8 */
-       0x8,
-       /* B0B00-B0BFF: page 8 */
-       0x8,
-       /* B0C00-B0CFF: page 8 */
-       0x8,
-       /* B0D00-B0DFF: page 8 */
-       0x8,
-       /* B0E00-B0EFF: page 8 */
-       0x8,
-       /* B0F00-B0FFF: page 8 */
-       0x8,
-       /* B1000-B10FF: page 8 */
-       0x8,
-       /* B1100-B11FF: page 8 */
-       0x8,
-       /* B1200-B12FF: page 8 */
-       0x8,
-       /* B1300-B13FF: page 8 */
-       0x8,
-       /* B1400-B14FF: page 8 */
-       0x8,
-       /* B1500-B15FF: page 8 */
-       0x8,
-       /* B1600-B16FF: page 8 */
-       0x8,
-       /* B1700-B17FF: page 8 */
-       0x8,
-       /* B1800-B18FF: page 8 */
-       0x8,
-       /* B1900-B19FF: page 8 */
-       0x8,
-       /* B1A00-B1AFF: page 8 */
-       0x8,
-       /* B1B00-B1BFF: page 8 */
-       0x8,
-       /* B1C00-B1CFF: page 8 */
-       0x8,
-       /* B1D00-B1DFF: page 8 */
-       0x8,
-       /* B1E00-B1EFF: page 8 */
-       0x8,
-       /* B1F00-B1FFF: page 8 */
-       0x8,
-       /* B2000-B20FF: page 8 */
-       0x8,
-       /* B2100-B21FF: page 8 */
-       0x8,
-       /* B2200-B22FF: page 8 */
-       0x8,
-       /* B2300-B23FF: page 8 */
-       0x8,
-       /* B2400-B24FF: page 8 */
-       0x8,
-       /* B2500-B25FF: page 8 */
-       0x8,
-       /* B2600-B26FF: page 8 */
-       0x8,
-       /* B2700-B27FF: page 8 */
-       0x8,
-       /* B2800-B28FF: page 8 */
-       0x8,
-       /* B2900-B29FF: page 8 */
-       0x8,
-       /* B2A00-B2AFF: page 8 */
-       0x8,
-       /* B2B00-B2BFF: page 8 */
-       0x8,
-       /* B2C00-B2CFF: page 8 */
-       0x8,
-       /* B2D00-B2DFF: page 8 */
-       0x8,
-       /* B2E00-B2EFF: page 8 */
-       0x8,
-       /* B2F00-B2FFF: page 8 */
-       0x8,
-       /* B3000-B30FF: page 8 */
-       0x8,
-       /* B3100-B31FF: page 8 */
-       0x8,
-       /* B3200-B32FF: page 8 */
-       0x8,
-       /* B3300-B33FF: page 8 */
-       0x8,
-       /* B3400-B34FF: page 8 */
-       0x8,
-       /* B3500-B35FF: page 8 */
-       0x8,
-       /* B3600-B36FF: page 8 */
-       0x8,
-       /* B3700-B37FF: page 8 */
-       0x8,
-       /* B3800-B38FF: page 8 */
-       0x8,
-       /* B3900-B39FF: page 8 */
-       0x8,
-       /* B3A00-B3AFF: page 8 */
-       0x8,
-       /* B3B00-B3BFF: page 8 */
-       0x8,
-       /* B3C00-B3CFF: page 8 */
-       0x8,
-       /* B3D00-B3DFF: page 8 */
-       0x8,
-       /* B3E00-B3EFF: page 8 */
-       0x8,
-       /* B3F00-B3FFF: page 8 */
-       0x8,
-       /* B4000-B40FF: page 8 */
-       0x8,
-       /* B4100-B41FF: page 8 */
-       0x8,
-       /* B4200-B42FF: page 8 */
-       0x8,
-       /* B4300-B43FF: page 8 */
-       0x8,
-       /* B4400-B44FF: page 8 */
-       0x8,
-       /* B4500-B45FF: page 8 */
-       0x8,
-       /* B4600-B46FF: page 8 */
-       0x8,
-       /* B4700-B47FF: page 8 */
-       0x8,
-       /* B4800-B48FF: page 8 */
-       0x8,
-       /* B4900-B49FF: page 8 */
-       0x8,
-       /* B4A00-B4AFF: page 8 */
-       0x8,
-       /* B4B00-B4BFF: page 8 */
-       0x8,
-       /* B4C00-B4CFF: page 8 */
-       0x8,
-       /* B4D00-B4DFF: page 8 */
-       0x8,
-       /* B4E00-B4EFF: page 8 */
-       0x8,
-       /* B4F00-B4FFF: page 8 */
-       0x8,
-       /* B5000-B50FF: page 8 */
-       0x8,
-       /* B5100-B51FF: page 8 */
-       0x8,
-       /* B5200-B52FF: page 8 */
-       0x8,
-       /* B5300-B53FF: page 8 */
-       0x8,
-       /* B5400-B54FF: page 8 */
-       0x8,
-       /* B5500-B55FF: page 8 */
-       0x8,
-       /* B5600-B56FF: page 8 */
-       0x8,
-       /* B5700-B57FF: page 8 */
-       0x8,
-       /* B5800-B58FF: page 8 */
-       0x8,
-       /* B5900-B59FF: page 8 */
-       0x8,
-       /* B5A00-B5AFF: page 8 */
-       0x8,
-       /* B5B00-B5BFF: page 8 */
-       0x8,
-       /* B5C00-B5CFF: page 8 */
-       0x8,
-       /* B5D00-B5DFF: page 8 */
-       0x8,
-       /* B5E00-B5EFF: page 8 */
-       0x8,
-       /* B5F00-B5FFF: page 8 */
-       0x8,
-       /* B6000-B60FF: page 8 */
-       0x8,
-       /* B6100-B61FF: page 8 */
-       0x8,
-       /* B6200-B62FF: page 8 */
-       0x8,
-       /* B6300-B63FF: page 8 */
-       0x8,
-       /* B6400-B64FF: page 8 */
-       0x8,
-       /* B6500-B65FF: page 8 */
-       0x8,
-       /* B6600-B66FF: page 8 */
-       0x8,
-       /* B6700-B67FF: page 8 */
-       0x8,
-       /* B6800-B68FF: page 8 */
-       0x8,
-       /* B6900-B69FF: page 8 */
-       0x8,
-       /* B6A00-B6AFF: page 8 */
-       0x8,
-       /* B6B00-B6BFF: page 8 */
-       0x8,
-       /* B6C00-B6CFF: page 8 */
-       0x8,
-       /* B6D00-B6DFF: page 8 */
-       0x8,
-       /* B6E00-B6EFF: page 8 */
-       0x8,
-       /* B6F00-B6FFF: page 8 */
-       0x8,
-       /* B7000-B70FF: page 8 */
-       0x8,
-       /* B7100-B71FF: page 8 */
-       0x8,
-       /* B7200-B72FF: page 8 */
-       0x8,
-       /* B7300-B73FF: page 8 */
-       0x8,
-       /* B7400-B74FF: page 8 */
-       0x8,
-       /* B7500-B75FF: page 8 */
-       0x8,
-       /* B7600-B76FF: page 8 */
-       0x8,
-       /* B7700-B77FF: page 8 */
-       0x8,
-       /* B7800-B78FF: page 8 */
-       0x8,
-       /* B7900-B79FF: page 8 */
-       0x8,
-       /* B7A00-B7AFF: page 8 */
-       0x8,
-       /* B7B00-B7BFF: page 8 */
-       0x8,
-       /* B7C00-B7CFF: page 8 */
-       0x8,
-       /* B7D00-B7DFF: page 8 */
-       0x8,
-       /* B7E00-B7EFF: page 8 */
-       0x8,
-       /* B7F00-B7FFF: page 8 */
-       0x8,
-       /* B8000-B80FF: page 8 */
-       0x8,
-       /* B8100-B81FF: page 8 */
-       0x8,
-       /* B8200-B82FF: page 8 */
-       0x8,
-       /* B8300-B83FF: page 8 */
-       0x8,
-       /* B8400-B84FF: page 8 */
-       0x8,
-       /* B8500-B85FF: page 8 */
-       0x8,
-       /* B8600-B86FF: page 8 */
-       0x8,
-       /* B8700-B87FF: page 8 */
-       0x8,
-       /* B8800-B88FF: page 8 */
-       0x8,
-       /* B8900-B89FF: page 8 */
-       0x8,
-       /* B8A00-B8AFF: page 8 */
-       0x8,
-       /* B8B00-B8BFF: page 8 */
-       0x8,
-       /* B8C00-B8CFF: page 8 */
-       0x8,
-       /* B8D00-B8DFF: page 8 */
-       0x8,
-       /* B8E00-B8EFF: page 8 */
-       0x8,
-       /* B8F00-B8FFF: page 8 */
-       0x8,
-       /* B9000-B90FF: page 8 */
-       0x8,
-       /* B9100-B91FF: page 8 */
-       0x8,
-       /* B9200-B92FF: page 8 */
-       0x8,
-       /* B9300-B93FF: page 8 */
-       0x8,
-       /* B9400-B94FF: page 8 */
-       0x8,
-       /* B9500-B95FF: page 8 */
-       0x8,
-       /* B9600-B96FF: page 8 */
-       0x8,
-       /* B9700-B97FF: page 8 */
-       0x8,
-       /* B9800-B98FF: page 8 */
-       0x8,
-       /* B9900-B99FF: page 8 */
-       0x8,
-       /* B9A00-B9AFF: page 8 */
-       0x8,
-       /* B9B00-B9BFF: page 8 */
-       0x8,
-       /* B9C00-B9CFF: page 8 */
-       0x8,
-       /* B9D00-B9DFF: page 8 */
-       0x8,
-       /* B9E00-B9EFF: page 8 */
-       0x8,
-       /* B9F00-B9FFF: page 8 */
-       0x8,
-       /* BA000-BA0FF: page 8 */
-       0x8,
-       /* BA100-BA1FF: page 8 */
-       0x8,
-       /* BA200-BA2FF: page 8 */
-       0x8,
-       /* BA300-BA3FF: page 8 */
-       0x8,
-       /* BA400-BA4FF: page 8 */
-       0x8,
-       /* BA500-BA5FF: page 8 */
-       0x8,
-       /* BA600-BA6FF: page 8 */
-       0x8,
-       /* BA700-BA7FF: page 8 */
-       0x8,
-       /* BA800-BA8FF: page 8 */
-       0x8,
-       /* BA900-BA9FF: page 8 */
-       0x8,
-       /* BAA00-BAAFF: page 8 */
-       0x8,
-       /* BAB00-BABFF: page 8 */
-       0x8,
-       /* BAC00-BACFF: page 8 */
-       0x8,
-       /* BAD00-BADFF: page 8 */
-       0x8,
-       /* BAE00-BAEFF: page 8 */
-       0x8,
-       /* BAF00-BAFFF: page 8 */
-       0x8,
-       /* BB000-BB0FF: page 8 */
-       0x8,
-       /* BB100-BB1FF: page 8 */
-       0x8,
-       /* BB200-BB2FF: page 8 */
-       0x8,
-       /* BB300-BB3FF: page 8 */
-       0x8,
-       /* BB400-BB4FF: page 8 */
-       0x8,
-       /* BB500-BB5FF: page 8 */
-       0x8,
-       /* BB600-BB6FF: page 8 */
-       0x8,
-       /* BB700-BB7FF: page 8 */
-       0x8,
-       /* BB800-BB8FF: page 8 */
-       0x8,
-       /* BB900-BB9FF: page 8 */
-       0x8,
-       /* BBA00-BBAFF: page 8 */
-       0x8,
-       /* BBB00-BBBFF: page 8 */
-       0x8,
-       /* BBC00-BBCFF: page 8 */
-       0x8,
-       /* BBD00-BBDFF: page 8 */
-       0x8,
-       /* BBE00-BBEFF: page 8 */
-       0x8,
-       /* BBF00-BBFFF: page 8 */
-       0x8,
-       /* BC000-BC0FF: page 8 */
-       0x8,
-       /* BC100-BC1FF: page 8 */
-       0x8,
-       /* BC200-BC2FF: page 8 */
-       0x8,
-       /* BC300-BC3FF: page 8 */
-       0x8,
-       /* BC400-BC4FF: page 8 */
-       0x8,
-       /* BC500-BC5FF: page 8 */
-       0x8,
-       /* BC600-BC6FF: page 8 */
-       0x8,
-       /* BC700-BC7FF: page 8 */
-       0x8,
-       /* BC800-BC8FF: page 8 */
-       0x8,
-       /* BC900-BC9FF: page 8 */
-       0x8,
-       /* BCA00-BCAFF: page 8 */
-       0x8,
-       /* BCB00-BCBFF: page 8 */
-       0x8,
-       /* BCC00-BCCFF: page 8 */
-       0x8,
-       /* BCD00-BCDFF: page 8 */
-       0x8,
-       /* BCE00-BCEFF: page 8 */
-       0x8,
-       /* BCF00-BCFFF: page 8 */
-       0x8,
-       /* BD000-BD0FF: page 8 */
-       0x8,
-       /* BD100-BD1FF: page 8 */
-       0x8,
-       /* BD200-BD2FF: page 8 */
-       0x8,
-       /* BD300-BD3FF: page 8 */
-       0x8,
-       /* BD400-BD4FF: page 8 */
-       0x8,
-       /* BD500-BD5FF: page 8 */
-       0x8,
-       /* BD600-BD6FF: page 8 */
-       0x8,
-       /* BD700-BD7FF: page 8 */
-       0x8,
-       /* BD800-BD8FF: page 8 */
-       0x8,
-       /* BD900-BD9FF: page 8 */
-       0x8,
-       /* BDA00-BDAFF: page 8 */
-       0x8,
-       /* BDB00-BDBFF: page 8 */
-       0x8,
-       /* BDC00-BDCFF: page 8 */
-       0x8,
-       /* BDD00-BDDFF: page 8 */
-       0x8,
-       /* BDE00-BDEFF: page 8 */
-       0x8,
-       /* BDF00-BDFFF: page 8 */
-       0x8,
-       /* BE000-BE0FF: page 8 */
-       0x8,
-       /* BE100-BE1FF: page 8 */
-       0x8,
-       /* BE200-BE2FF: page 8 */
-       0x8,
-       /* BE300-BE3FF: page 8 */
-       0x8,
-       /* BE400-BE4FF: page 8 */
-       0x8,
-       /* BE500-BE5FF: page 8 */
-       0x8,
-       /* BE600-BE6FF: page 8 */
-       0x8,
-       /* BE700-BE7FF: page 8 */
-       0x8,
-       /* BE800-BE8FF: page 8 */
-       0x8,
-       /* BE900-BE9FF: page 8 */
-       0x8,
-       /* BEA00-BEAFF: page 8 */
-       0x8,
-       /* BEB00-BEBFF: page 8 */
-       0x8,
-       /* BEC00-BECFF: page 8 */
-       0x8,
-       /* BED00-BEDFF: page 8 */
-       0x8,
-       /* BEE00-BEEFF: page 8 */
-       0x8,
-       /* BEF00-BEFFF: page 8 */
-       0x8,
-       /* BF000-BF0FF: page 8 */
-       0x8,
-       /* BF100-BF1FF: page 8 */
-       0x8,
-       /* BF200-BF2FF: page 8 */
-       0x8,
-       /* BF300-BF3FF: page 8 */
-       0x8,
-       /* BF400-BF4FF: page 8 */
-       0x8,
-       /* BF500-BF5FF: page 8 */
-       0x8,
-       /* BF600-BF6FF: page 8 */
-       0x8,
-       /* BF700-BF7FF: page 8 */
-       0x8,
-       /* BF800-BF8FF: page 8 */
-       0x8,
-       /* BF900-BF9FF: page 8 */
-       0x8,
-       /* BFA00-BFAFF: page 8 */
-       0x8,
-       /* BFB00-BFBFF: page 8 */
-       0x8,
-       /* BFC00-BFCFF: page 8 */
-       0x8,
-       /* BFD00-BFDFF: page 8 */
-       0x8,
-       /* BFE00-BFEFF: page 8 */
-       0x8,
-       /* BFF00-BFFFF: page 8 */
-       0x8,
-       /* C0000-C00FF: page 8 */
-       0x8,
-       /* C0100-C01FF: page 8 */
-       0x8,
-       /* C0200-C02FF: page 8 */
-       0x8,
-       /* C0300-C03FF: page 8 */
-       0x8,
-       /* C0400-C04FF: page 8 */
-       0x8,
-       /* C0500-C05FF: page 8 */
-       0x8,
-       /* C0600-C06FF: page 8 */
-       0x8,
-       /* C0700-C07FF: page 8 */
-       0x8,
-       /* C0800-C08FF: page 8 */
-       0x8,
-       /* C0900-C09FF: page 8 */
-       0x8,
-       /* C0A00-C0AFF: page 8 */
-       0x8,
-       /* C0B00-C0BFF: page 8 */
-       0x8,
-       /* C0C00-C0CFF: page 8 */
-       0x8,
-       /* C0D00-C0DFF: page 8 */
-       0x8,
-       /* C0E00-C0EFF: page 8 */
-       0x8,
-       /* C0F00-C0FFF: page 8 */
-       0x8,
-       /* C1000-C10FF: page 8 */
-       0x8,
-       /* C1100-C11FF: page 8 */
-       0x8,
-       /* C1200-C12FF: page 8 */
-       0x8,
-       /* C1300-C13FF: page 8 */
-       0x8,
-       /* C1400-C14FF: page 8 */
-       0x8,
-       /* C1500-C15FF: page 8 */
-       0x8,
-       /* C1600-C16FF: page 8 */
-       0x8,
-       /* C1700-C17FF: page 8 */
-       0x8,
-       /* C1800-C18FF: page 8 */
-       0x8,
-       /* C1900-C19FF: page 8 */
-       0x8,
-       /* C1A00-C1AFF: page 8 */
-       0x8,
-       /* C1B00-C1BFF: page 8 */
-       0x8,
-       /* C1C00-C1CFF: page 8 */
-       0x8,
-       /* C1D00-C1DFF: page 8 */
-       0x8,
-       /* C1E00-C1EFF: page 8 */
-       0x8,
-       /* C1F00-C1FFF: page 8 */
-       0x8,
-       /* C2000-C20FF: page 8 */
-       0x8,
-       /* C2100-C21FF: page 8 */
-       0x8,
-       /* C2200-C22FF: page 8 */
-       0x8,
-       /* C2300-C23FF: page 8 */
-       0x8,
-       /* C2400-C24FF: page 8 */
-       0x8,
-       /* C2500-C25FF: page 8 */
-       0x8,
-       /* C2600-C26FF: page 8 */
-       0x8,
-       /* C2700-C27FF: page 8 */
-       0x8,
-       /* C2800-C28FF: page 8 */
-       0x8,
-       /* C2900-C29FF: page 8 */
-       0x8,
-       /* C2A00-C2AFF: page 8 */
-       0x8,
-       /* C2B00-C2BFF: page 8 */
-       0x8,
-       /* C2C00-C2CFF: page 8 */
-       0x8,
-       /* C2D00-C2DFF: page 8 */
-       0x8,
-       /* C2E00-C2EFF: page 8 */
-       0x8,
-       /* C2F00-C2FFF: page 8 */
-       0x8,
-       /* C3000-C30FF: page 8 */
-       0x8,
-       /* C3100-C31FF: page 8 */
-       0x8,
-       /* C3200-C32FF: page 8 */
-       0x8,
-       /* C3300-C33FF: page 8 */
-       0x8,
-       /* C3400-C34FF: page 8 */
-       0x8,
-       /* C3500-C35FF: page 8 */
-       0x8,
-       /* C3600-C36FF: page 8 */
-       0x8,
-       /* C3700-C37FF: page 8 */
-       0x8,
-       /* C3800-C38FF: page 8 */
-       0x8,
-       /* C3900-C39FF: page 8 */
-       0x8,
-       /* C3A00-C3AFF: page 8 */
-       0x8,
-       /* C3B00-C3BFF: page 8 */
-       0x8,
-       /* C3C00-C3CFF: page 8 */
-       0x8,
-       /* C3D00-C3DFF: page 8 */
-       0x8,
-       /* C3E00-C3EFF: page 8 */
-       0x8,
-       /* C3F00-C3FFF: page 8 */
-       0x8,
-       /* C4000-C40FF: page 8 */
-       0x8,
-       /* C4100-C41FF: page 8 */
-       0x8,
-       /* C4200-C42FF: page 8 */
-       0x8,
-       /* C4300-C43FF: page 8 */
-       0x8,
-       /* C4400-C44FF: page 8 */
-       0x8,
-       /* C4500-C45FF: page 8 */
-       0x8,
-       /* C4600-C46FF: page 8 */
-       0x8,
-       /* C4700-C47FF: page 8 */
-       0x8,
-       /* C4800-C48FF: page 8 */
-       0x8,
-       /* C4900-C49FF: page 8 */
-       0x8,
-       /* C4A00-C4AFF: page 8 */
-       0x8,
-       /* C4B00-C4BFF: page 8 */
-       0x8,
-       /* C4C00-C4CFF: page 8 */
-       0x8,
-       /* C4D00-C4DFF: page 8 */
-       0x8,
-       /* C4E00-C4EFF: page 8 */
-       0x8,
-       /* C4F00-C4FFF: page 8 */
-       0x8,
-       /* C5000-C50FF: page 8 */
-       0x8,
-       /* C5100-C51FF: page 8 */
-       0x8,
-       /* C5200-C52FF: page 8 */
-       0x8,
-       /* C5300-C53FF: page 8 */
-       0x8,
-       /* C5400-C54FF: page 8 */
-       0x8,
-       /* C5500-C55FF: page 8 */
-       0x8,
-       /* C5600-C56FF: page 8 */
-       0x8,
-       /* C5700-C57FF: page 8 */
-       0x8,
-       /* C5800-C58FF: page 8 */
-       0x8,
-       /* C5900-C59FF: page 8 */
-       0x8,
-       /* C5A00-C5AFF: page 8 */
-       0x8,
-       /* C5B00-C5BFF: page 8 */
-       0x8,
-       /* C5C00-C5CFF: page 8 */
-       0x8,
-       /* C5D00-C5DFF: page 8 */
-       0x8,
-       /* C5E00-C5EFF: page 8 */
-       0x8,
-       /* C5F00-C5FFF: page 8 */
-       0x8,
-       /* C6000-C60FF: page 8 */
-       0x8,
-       /* C6100-C61FF: page 8 */
-       0x8,
-       /* C6200-C62FF: page 8 */
-       0x8,
-       /* C6300-C63FF: page 8 */
-       0x8,
-       /* C6400-C64FF: page 8 */
-       0x8,
-       /* C6500-C65FF: page 8 */
-       0x8,
-       /* C6600-C66FF: page 8 */
-       0x8,
-       /* C6700-C67FF: page 8 */
-       0x8,
-       /* C6800-C68FF: page 8 */
-       0x8,
-       /* C6900-C69FF: page 8 */
-       0x8,
-       /* C6A00-C6AFF: page 8 */
-       0x8,
-       /* C6B00-C6BFF: page 8 */
-       0x8,
-       /* C6C00-C6CFF: page 8 */
-       0x8,
-       /* C6D00-C6DFF: page 8 */
-       0x8,
-       /* C6E00-C6EFF: page 8 */
-       0x8,
-       /* C6F00-C6FFF: page 8 */
-       0x8,
-       /* C7000-C70FF: page 8 */
-       0x8,
-       /* C7100-C71FF: page 8 */
-       0x8,
-       /* C7200-C72FF: page 8 */
-       0x8,
-       /* C7300-C73FF: page 8 */
-       0x8,
-       /* C7400-C74FF: page 8 */
-       0x8,
-       /* C7500-C75FF: page 8 */
-       0x8,
-       /* C7600-C76FF: page 8 */
-       0x8,
-       /* C7700-C77FF: page 8 */
-       0x8,
-       /* C7800-C78FF: page 8 */
-       0x8,
-       /* C7900-C79FF: page 8 */
-       0x8,
-       /* C7A00-C7AFF: page 8 */
-       0x8,
-       /* C7B00-C7BFF: page 8 */
-       0x8,
-       /* C7C00-C7CFF: page 8 */
-       0x8,
-       /* C7D00-C7DFF: page 8 */
-       0x8,
-       /* C7E00-C7EFF: page 8 */
-       0x8,
-       /* C7F00-C7FFF: page 8 */
-       0x8,
-       /* C8000-C80FF: page 8 */
-       0x8,
-       /* C8100-C81FF: page 8 */
-       0x8,
-       /* C8200-C82FF: page 8 */
-       0x8,
-       /* C8300-C83FF: page 8 */
-       0x8,
-       /* C8400-C84FF: page 8 */
-       0x8,
-       /* C8500-C85FF: page 8 */
-       0x8,
-       /* C8600-C86FF: page 8 */
-       0x8,
-       /* C8700-C87FF: page 8 */
-       0x8,
-       /* C8800-C88FF: page 8 */
-       0x8,
-       /* C8900-C89FF: page 8 */
-       0x8,
-       /* C8A00-C8AFF: page 8 */
-       0x8,
-       /* C8B00-C8BFF: page 8 */
-       0x8,
-       /* C8C00-C8CFF: page 8 */
-       0x8,
-       /* C8D00-C8DFF: page 8 */
-       0x8,
-       /* C8E00-C8EFF: page 8 */
-       0x8,
-       /* C8F00-C8FFF: page 8 */
-       0x8,
-       /* C9000-C90FF: page 8 */
-       0x8,
-       /* C9100-C91FF: page 8 */
-       0x8,
-       /* C9200-C92FF: page 8 */
-       0x8,
-       /* C9300-C93FF: page 8 */
-       0x8,
-       /* C9400-C94FF: page 8 */
-       0x8,
-       /* C9500-C95FF: page 8 */
-       0x8,
-       /* C9600-C96FF: page 8 */
-       0x8,
-       /* C9700-C97FF: page 8 */
-       0x8,
-       /* C9800-C98FF: page 8 */
-       0x8,
-       /* C9900-C99FF: page 8 */
-       0x8,
-       /* C9A00-C9AFF: page 8 */
-       0x8,
-       /* C9B00-C9BFF: page 8 */
-       0x8,
-       /* C9C00-C9CFF: page 8 */
-       0x8,
-       /* C9D00-C9DFF: page 8 */
-       0x8,
-       /* C9E00-C9EFF: page 8 */
-       0x8,
-       /* C9F00-C9FFF: page 8 */
-       0x8,
-       /* CA000-CA0FF: page 8 */
-       0x8,
-       /* CA100-CA1FF: page 8 */
-       0x8,
-       /* CA200-CA2FF: page 8 */
-       0x8,
-       /* CA300-CA3FF: page 8 */
-       0x8,
-       /* CA400-CA4FF: page 8 */
-       0x8,
-       /* CA500-CA5FF: page 8 */
-       0x8,
-       /* CA600-CA6FF: page 8 */
-       0x8,
-       /* CA700-CA7FF: page 8 */
-       0x8,
-       /* CA800-CA8FF: page 8 */
-       0x8,
-       /* CA900-CA9FF: page 8 */
-       0x8,
-       /* CAA00-CAAFF: page 8 */
-       0x8,
-       /* CAB00-CABFF: page 8 */
-       0x8,
-       /* CAC00-CACFF: page 8 */
-       0x8,
-       /* CAD00-CADFF: page 8 */
-       0x8,
-       /* CAE00-CAEFF: page 8 */
-       0x8,
-       /* CAF00-CAFFF: page 8 */
-       0x8,
-       /* CB000-CB0FF: page 8 */
-       0x8,
-       /* CB100-CB1FF: page 8 */
-       0x8,
-       /* CB200-CB2FF: page 8 */
-       0x8,
-       /* CB300-CB3FF: page 8 */
-       0x8,
-       /* CB400-CB4FF: page 8 */
-       0x8,
-       /* CB500-CB5FF: page 8 */
-       0x8,
-       /* CB600-CB6FF: page 8 */
-       0x8,
-       /* CB700-CB7FF: page 8 */
-       0x8,
-       /* CB800-CB8FF: page 8 */
-       0x8,
-       /* CB900-CB9FF: page 8 */
-       0x8,
-       /* CBA00-CBAFF: page 8 */
-       0x8,
-       /* CBB00-CBBFF: page 8 */
-       0x8,
-       /* CBC00-CBCFF: page 8 */
-       0x8,
-       /* CBD00-CBDFF: page 8 */
-       0x8,
-       /* CBE00-CBEFF: page 8 */
-       0x8,
-       /* CBF00-CBFFF: page 8 */
-       0x8,
-       /* CC000-CC0FF: page 8 */
-       0x8,
-       /* CC100-CC1FF: page 8 */
-       0x8,
-       /* CC200-CC2FF: page 8 */
-       0x8,
-       /* CC300-CC3FF: page 8 */
-       0x8,
-       /* CC400-CC4FF: page 8 */
-       0x8,
-       /* CC500-CC5FF: page 8 */
-       0x8,
-       /* CC600-CC6FF: page 8 */
-       0x8,
-       /* CC700-CC7FF: page 8 */
-       0x8,
-       /* CC800-CC8FF: page 8 */
-       0x8,
-       /* CC900-CC9FF: page 8 */
-       0x8,
-       /* CCA00-CCAFF: page 8 */
-       0x8,
-       /* CCB00-CCBFF: page 8 */
-       0x8,
-       /* CCC00-CCCFF: page 8 */
-       0x8,
-       /* CCD00-CCDFF: page 8 */
-       0x8,
-       /* CCE00-CCEFF: page 8 */
-       0x8,
-       /* CCF00-CCFFF: page 8 */
-       0x8,
-       /* CD000-CD0FF: page 8 */
-       0x8,
-       /* CD100-CD1FF: page 8 */
-       0x8,
-       /* CD200-CD2FF: page 8 */
-       0x8,
-       /* CD300-CD3FF: page 8 */
-       0x8,
-       /* CD400-CD4FF: page 8 */
-       0x8,
-       /* CD500-CD5FF: page 8 */
-       0x8,
-       /* CD600-CD6FF: page 8 */
-       0x8,
-       /* CD700-CD7FF: page 8 */
-       0x8,
-       /* CD800-CD8FF: page 8 */
-       0x8,
-       /* CD900-CD9FF: page 8 */
-       0x8,
-       /* CDA00-CDAFF: page 8 */
-       0x8,
-       /* CDB00-CDBFF: page 8 */
-       0x8,
-       /* CDC00-CDCFF: page 8 */
-       0x8,
-       /* CDD00-CDDFF: page 8 */
-       0x8,
-       /* CDE00-CDEFF: page 8 */
-       0x8,
-       /* CDF00-CDFFF: page 8 */
-       0x8,
-       /* CE000-CE0FF: page 8 */
-       0x8,
-       /* CE100-CE1FF: page 8 */
-       0x8,
-       /* CE200-CE2FF: page 8 */
-       0x8,
-       /* CE300-CE3FF: page 8 */
-       0x8,
-       /* CE400-CE4FF: page 8 */
-       0x8,
-       /* CE500-CE5FF: page 8 */
-       0x8,
-       /* CE600-CE6FF: page 8 */
-       0x8,
-       /* CE700-CE7FF: page 8 */
-       0x8,
-       /* CE800-CE8FF: page 8 */
-       0x8,
-       /* CE900-CE9FF: page 8 */
-       0x8,
-       /* CEA00-CEAFF: page 8 */
-       0x8,
-       /* CEB00-CEBFF: page 8 */
-       0x8,
-       /* CEC00-CECFF: page 8 */
-       0x8,
-       /* CED00-CEDFF: page 8 */
-       0x8,
-       /* CEE00-CEEFF: page 8 */
-       0x8,
-       /* CEF00-CEFFF: page 8 */
-       0x8,
-       /* CF000-CF0FF: page 8 */
-       0x8,
-       /* CF100-CF1FF: page 8 */
-       0x8,
-       /* CF200-CF2FF: page 8 */
-       0x8,
-       /* CF300-CF3FF: page 8 */
-       0x8,
-       /* CF400-CF4FF: page 8 */
-       0x8,
-       /* CF500-CF5FF: page 8 */
-       0x8,
-       /* CF600-CF6FF: page 8 */
-       0x8,
-       /* CF700-CF7FF: page 8 */
-       0x8,
-       /* CF800-CF8FF: page 8 */
-       0x8,
-       /* CF900-CF9FF: page 8 */
-       0x8,
-       /* CFA00-CFAFF: page 8 */
-       0x8,
-       /* CFB00-CFBFF: page 8 */
-       0x8,
-       /* CFC00-CFCFF: page 8 */
-       0x8,
-       /* CFD00-CFDFF: page 8 */
-       0x8,
-       /* CFE00-CFEFF: page 8 */
-       0x8,
-       /* CFF00-CFFFF: page 8 */
-       0x8,
-       /* D0000-D00FF: page 8 */
-       0x8,
-       /* D0100-D01FF: page 8 */
-       0x8,
-       /* D0200-D02FF: page 8 */
-       0x8,
-       /* D0300-D03FF: page 8 */
-       0x8,
-       /* D0400-D04FF: page 8 */
-       0x8,
-       /* D0500-D05FF: page 8 */
-       0x8,
-       /* D0600-D06FF: page 8 */
-       0x8,
-       /* D0700-D07FF: page 8 */
-       0x8,
-       /* D0800-D08FF: page 8 */
-       0x8,
-       /* D0900-D09FF: page 8 */
-       0x8,
-       /* D0A00-D0AFF: page 8 */
-       0x8,
-       /* D0B00-D0BFF: page 8 */
-       0x8,
-       /* D0C00-D0CFF: page 8 */
-       0x8,
-       /* D0D00-D0DFF: page 8 */
-       0x8,
-       /* D0E00-D0EFF: page 8 */
-       0x8,
-       /* D0F00-D0FFF: page 8 */
-       0x8,
-       /* D1000-D10FF: page 8 */
-       0x8,
-       /* D1100-D11FF: page 8 */
-       0x8,
-       /* D1200-D12FF: page 8 */
-       0x8,
-       /* D1300-D13FF: page 8 */
-       0x8,
-       /* D1400-D14FF: page 8 */
-       0x8,
-       /* D1500-D15FF: page 8 */
-       0x8,
-       /* D1600-D16FF: page 8 */
-       0x8,
-       /* D1700-D17FF: page 8 */
-       0x8,
-       /* D1800-D18FF: page 8 */
-       0x8,
-       /* D1900-D19FF: page 8 */
-       0x8,
-       /* D1A00-D1AFF: page 8 */
-       0x8,
-       /* D1B00-D1BFF: page 8 */
-       0x8,
-       /* D1C00-D1CFF: page 8 */
-       0x8,
-       /* D1D00-D1DFF: page 8 */
-       0x8,
-       /* D1E00-D1EFF: page 8 */
-       0x8,
-       /* D1F00-D1FFF: page 8 */
-       0x8,
-       /* D2000-D20FF: page 8 */
-       0x8,
-       /* D2100-D21FF: page 8 */
-       0x8,
-       /* D2200-D22FF: page 8 */
-       0x8,
-       /* D2300-D23FF: page 8 */
-       0x8,
-       /* D2400-D24FF: page 8 */
-       0x8,
-       /* D2500-D25FF: page 8 */
-       0x8,
-       /* D2600-D26FF: page 8 */
-       0x8,
-       /* D2700-D27FF: page 8 */
-       0x8,
-       /* D2800-D28FF: page 8 */
-       0x8,
-       /* D2900-D29FF: page 8 */
-       0x8,
-       /* D2A00-D2AFF: page 8 */
-       0x8,
-       /* D2B00-D2BFF: page 8 */
-       0x8,
-       /* D2C00-D2CFF: page 8 */
-       0x8,
-       /* D2D00-D2DFF: page 8 */
-       0x8,
-       /* D2E00-D2EFF: page 8 */
-       0x8,
-       /* D2F00-D2FFF: page 8 */
-       0x8,
-       /* D3000-D30FF: page 8 */
-       0x8,
-       /* D3100-D31FF: page 8 */
-       0x8,
-       /* D3200-D32FF: page 8 */
-       0x8,
-       /* D3300-D33FF: page 8 */
-       0x8,
-       /* D3400-D34FF: page 8 */
-       0x8,
-       /* D3500-D35FF: page 8 */
-       0x8,
-       /* D3600-D36FF: page 8 */
-       0x8,
-       /* D3700-D37FF: page 8 */
-       0x8,
-       /* D3800-D38FF: page 8 */
-       0x8,
-       /* D3900-D39FF: page 8 */
-       0x8,
-       /* D3A00-D3AFF: page 8 */
-       0x8,
-       /* D3B00-D3BFF: page 8 */
-       0x8,
-       /* D3C00-D3CFF: page 8 */
-       0x8,
-       /* D3D00-D3DFF: page 8 */
-       0x8,
-       /* D3E00-D3EFF: page 8 */
-       0x8,
-       /* D3F00-D3FFF: page 8 */
-       0x8,
-       /* D4000-D40FF: page 8 */
-       0x8,
-       /* D4100-D41FF: page 8 */
-       0x8,
-       /* D4200-D42FF: page 8 */
-       0x8,
-       /* D4300-D43FF: page 8 */
-       0x8,
-       /* D4400-D44FF: page 8 */
-       0x8,
-       /* D4500-D45FF: page 8 */
-       0x8,
-       /* D4600-D46FF: page 8 */
-       0x8,
-       /* D4700-D47FF: page 8 */
-       0x8,
-       /* D4800-D48FF: page 8 */
-       0x8,
-       /* D4900-D49FF: page 8 */
-       0x8,
-       /* D4A00-D4AFF: page 8 */
-       0x8,
-       /* D4B00-D4BFF: page 8 */
-       0x8,
-       /* D4C00-D4CFF: page 8 */
-       0x8,
-       /* D4D00-D4DFF: page 8 */
-       0x8,
-       /* D4E00-D4EFF: page 8 */
-       0x8,
-       /* D4F00-D4FFF: page 8 */
-       0x8,
-       /* D5000-D50FF: page 8 */
-       0x8,
-       /* D5100-D51FF: page 8 */
-       0x8,
-       /* D5200-D52FF: page 8 */
-       0x8,
-       /* D5300-D53FF: page 8 */
-       0x8,
-       /* D5400-D54FF: page 8 */
-       0x8,
-       /* D5500-D55FF: page 8 */
-       0x8,
-       /* D5600-D56FF: page 8 */
-       0x8,
-       /* D5700-D57FF: page 8 */
-       0x8,
-       /* D5800-D58FF: page 8 */
-       0x8,
-       /* D5900-D59FF: page 8 */
-       0x8,
-       /* D5A00-D5AFF: page 8 */
-       0x8,
-       /* D5B00-D5BFF: page 8 */
-       0x8,
-       /* D5C00-D5CFF: page 8 */
-       0x8,
-       /* D5D00-D5DFF: page 8 */
-       0x8,
-       /* D5E00-D5EFF: page 8 */
-       0x8,
-       /* D5F00-D5FFF: page 8 */
-       0x8,
-       /* D6000-D60FF: page 8 */
-       0x8,
-       /* D6100-D61FF: page 8 */
-       0x8,
-       /* D6200-D62FF: page 8 */
-       0x8,
-       /* D6300-D63FF: page 8 */
-       0x8,
-       /* D6400-D64FF: page 8 */
-       0x8,
-       /* D6500-D65FF: page 8 */
-       0x8,
-       /* D6600-D66FF: page 8 */
-       0x8,
-       /* D6700-D67FF: page 8 */
-       0x8,
-       /* D6800-D68FF: page 8 */
-       0x8,
-       /* D6900-D69FF: page 8 */
-       0x8,
-       /* D6A00-D6AFF: page 8 */
-       0x8,
-       /* D6B00-D6BFF: page 8 */
-       0x8,
-       /* D6C00-D6CFF: page 8 */
-       0x8,
-       /* D6D00-D6DFF: page 8 */
-       0x8,
-       /* D6E00-D6EFF: page 8 */
-       0x8,
-       /* D6F00-D6FFF: page 8 */
-       0x8,
-       /* D7000-D70FF: page 8 */
-       0x8,
-       /* D7100-D71FF: page 8 */
-       0x8,
-       /* D7200-D72FF: page 8 */
-       0x8,
-       /* D7300-D73FF: page 8 */
-       0x8,
-       /* D7400-D74FF: page 8 */
-       0x8,
-       /* D7500-D75FF: page 8 */
-       0x8,
-       /* D7600-D76FF: page 8 */
-       0x8,
-       /* D7700-D77FF: page 8 */
-       0x8,
-       /* D7800-D78FF: page 8 */
-       0x8,
-       /* D7900-D79FF: page 8 */
-       0x8,
-       /* D7A00-D7AFF: page 8 */
-       0x8,
-       /* D7B00-D7BFF: page 8 */
-       0x8,
-       /* D7C00-D7CFF: page 8 */
-       0x8,
-       /* D7D00-D7DFF: page 8 */
-       0x8,
-       /* D7E00-D7EFF: page 8 */
-       0x8,
-       /* D7F00-D7FFF: page 8 */
-       0x8,
-       /* D8000-D80FF: page 8 */
-       0x8,
-       /* D8100-D81FF: page 8 */
-       0x8,
-       /* D8200-D82FF: page 8 */
-       0x8,
-       /* D8300-D83FF: page 8 */
-       0x8,
-       /* D8400-D84FF: page 8 */
-       0x8,
-       /* D8500-D85FF: page 8 */
-       0x8,
-       /* D8600-D86FF: page 8 */
-       0x8,
-       /* D8700-D87FF: page 8 */
-       0x8,
-       /* D8800-D88FF: page 8 */
-       0x8,
-       /* D8900-D89FF: page 8 */
-       0x8,
-       /* D8A00-D8AFF: page 8 */
-       0x8,
-       /* D8B00-D8BFF: page 8 */
-       0x8,
-       /* D8C00-D8CFF: page 8 */
-       0x8,
-       /* D8D00-D8DFF: page 8 */
-       0x8,
-       /* D8E00-D8EFF: page 8 */
-       0x8,
-       /* D8F00-D8FFF: page 8 */
-       0x8,
-       /* D9000-D90FF: page 8 */
-       0x8,
-       /* D9100-D91FF: page 8 */
-       0x8,
-       /* D9200-D92FF: page 8 */
-       0x8,
-       /* D9300-D93FF: page 8 */
-       0x8,
-       /* D9400-D94FF: page 8 */
-       0x8,
-       /* D9500-D95FF: page 8 */
-       0x8,
-       /* D9600-D96FF: page 8 */
-       0x8,
-       /* D9700-D97FF: page 8 */
-       0x8,
-       /* D9800-D98FF: page 8 */
-       0x8,
-       /* D9900-D99FF: page 8 */
-       0x8,
-       /* D9A00-D9AFF: page 8 */
-       0x8,
-       /* D9B00-D9BFF: page 8 */
-       0x8,
-       /* D9C00-D9CFF: page 8 */
-       0x8,
-       /* D9D00-D9DFF: page 8 */
-       0x8,
-       /* D9E00-D9EFF: page 8 */
-       0x8,
-       /* D9F00-D9FFF: page 8 */
-       0x8,
-       /* DA000-DA0FF: page 8 */
-       0x8,
-       /* DA100-DA1FF: page 8 */
-       0x8,
-       /* DA200-DA2FF: page 8 */
-       0x8,
-       /* DA300-DA3FF: page 8 */
-       0x8,
-       /* DA400-DA4FF: page 8 */
-       0x8,
-       /* DA500-DA5FF: page 8 */
-       0x8,
-       /* DA600-DA6FF: page 8 */
-       0x8,
-       /* DA700-DA7FF: page 8 */
-       0x8,
-       /* DA800-DA8FF: page 8 */
-       0x8,
-       /* DA900-DA9FF: page 8 */
-       0x8,
-       /* DAA00-DAAFF: page 8 */
-       0x8,
-       /* DAB00-DABFF: page 8 */
-       0x8,
-       /* DAC00-DACFF: page 8 */
-       0x8,
-       /* DAD00-DADFF: page 8 */
-       0x8,
-       /* DAE00-DAEFF: page 8 */
-       0x8,
-       /* DAF00-DAFFF: page 8 */
-       0x8,
-       /* DB000-DB0FF: page 8 */
-       0x8,
-       /* DB100-DB1FF: page 8 */
-       0x8,
-       /* DB200-DB2FF: page 8 */
-       0x8,
-       /* DB300-DB3FF: page 8 */
-       0x8,
-       /* DB400-DB4FF: page 8 */
-       0x8,
-       /* DB500-DB5FF: page 8 */
-       0x8,
-       /* DB600-DB6FF: page 8 */
-       0x8,
-       /* DB700-DB7FF: page 8 */
-       0x8,
-       /* DB800-DB8FF: page 8 */
-       0x8,
-       /* DB900-DB9FF: page 8 */
-       0x8,
-       /* DBA00-DBAFF: page 8 */
-       0x8,
-       /* DBB00-DBBFF: page 8 */
-       0x8,
-       /* DBC00-DBCFF: page 8 */
-       0x8,
-       /* DBD00-DBDFF: page 8 */
-       0x8,
-       /* DBE00-DBEFF: page 8 */
-       0x8,
-       /* DBF00-DBFFF: page 8 */
-       0x8,
-       /* DC000-DC0FF: page 8 */
-       0x8,
-       /* DC100-DC1FF: page 8 */
-       0x8,
-       /* DC200-DC2FF: page 8 */
-       0x8,
-       /* DC300-DC3FF: page 8 */
-       0x8,
-       /* DC400-DC4FF: page 8 */
-       0x8,
-       /* DC500-DC5FF: page 8 */
-       0x8,
-       /* DC600-DC6FF: page 8 */
-       0x8,
-       /* DC700-DC7FF: page 8 */
-       0x8,
-       /* DC800-DC8FF: page 8 */
-       0x8,
-       /* DC900-DC9FF: page 8 */
-       0x8,
-       /* DCA00-DCAFF: page 8 */
-       0x8,
-       /* DCB00-DCBFF: page 8 */
-       0x8,
-       /* DCC00-DCCFF: page 8 */
-       0x8,
-       /* DCD00-DCDFF: page 8 */
-       0x8,
-       /* DCE00-DCEFF: page 8 */
-       0x8,
-       /* DCF00-DCFFF: page 8 */
-       0x8,
-       /* DD000-DD0FF: page 8 */
-       0x8,
-       /* DD100-DD1FF: page 8 */
-       0x8,
-       /* DD200-DD2FF: page 8 */
-       0x8,
-       /* DD300-DD3FF: page 8 */
-       0x8,
-       /* DD400-DD4FF: page 8 */
-       0x8,
-       /* DD500-DD5FF: page 8 */
-       0x8,
-       /* DD600-DD6FF: page 8 */
-       0x8,
-       /* DD700-DD7FF: page 8 */
-       0x8,
-       /* DD800-DD8FF: page 8 */
-       0x8,
-       /* DD900-DD9FF: page 8 */
-       0x8,
-       /* DDA00-DDAFF: page 8 */
-       0x8,
-       /* DDB00-DDBFF: page 8 */
-       0x8,
-       /* DDC00-DDCFF: page 8 */
-       0x8,
-       /* DDD00-DDDFF: page 8 */
-       0x8,
-       /* DDE00-DDEFF: page 8 */
-       0x8,
-       /* DDF00-DDFFF: page 8 */
-       0x8,
-       /* DE000-DE0FF: page 8 */
-       0x8,
-       /* DE100-DE1FF: page 8 */
-       0x8,
-       /* DE200-DE2FF: page 8 */
-       0x8,
-       /* DE300-DE3FF: page 8 */
-       0x8,
-       /* DE400-DE4FF: page 8 */
-       0x8,
-       /* DE500-DE5FF: page 8 */
-       0x8,
-       /* DE600-DE6FF: page 8 */
-       0x8,
-       /* DE700-DE7FF: page 8 */
-       0x8,
-       /* DE800-DE8FF: page 8 */
-       0x8,
-       /* DE900-DE9FF: page 8 */
-       0x8,
-       /* DEA00-DEAFF: page 8 */
-       0x8,
-       /* DEB00-DEBFF: page 8 */
-       0x8,
-       /* DEC00-DECFF: page 8 */
-       0x8,
-       /* DED00-DEDFF: page 8 */
-       0x8,
-       /* DEE00-DEEFF: page 8 */
-       0x8,
-       /* DEF00-DEFFF: page 8 */
-       0x8,
-       /* DF000-DF0FF: page 8 */
-       0x8,
-       /* DF100-DF1FF: page 8 */
-       0x8,
-       /* DF200-DF2FF: page 8 */
-       0x8,
-       /* DF300-DF3FF: page 8 */
-       0x8,
-       /* DF400-DF4FF: page 8 */
-       0x8,
-       /* DF500-DF5FF: page 8 */
-       0x8,
-       /* DF600-DF6FF: page 8 */
-       0x8,
-       /* DF700-DF7FF: page 8 */
-       0x8,
-       /* DF800-DF8FF: page 8 */
-       0x8,
-       /* DF900-DF9FF: page 8 */
-       0x8,
-       /* DFA00-DFAFF: page 8 */
-       0x8,
-       /* DFB00-DFBFF: page 8 */
-       0x8,
-       /* DFC00-DFCFF: page 8 */
-       0x8,
-       /* DFD00-DFDFF: page 8 */
-       0x8,
-       /* DFE00-DFEFF: page 8 */
-       0x8,
-       /* DFF00-DFFFF: page 8 */
-       0x8,
-       /* E0000-E00FF: page 275 */
-       0x113,
-       /* E0100-E01FF: page 276 */
-       0x114,
-       /* E0200-E02FF: page 8 */
-       0x8,
-       /* E0300-E03FF: page 8 */
-       0x8,
-       /* E0400-E04FF: page 8 */
-       0x8,
-       /* E0500-E05FF: page 8 */
-       0x8,
-       /* E0600-E06FF: page 8 */
-       0x8,
-       /* E0700-E07FF: page 8 */
-       0x8,
-       /* E0800-E08FF: page 8 */
-       0x8,
-       /* E0900-E09FF: page 8 */
-       0x8,
-       /* E0A00-E0AFF: page 8 */
-       0x8,
-       /* E0B00-E0BFF: page 8 */
-       0x8,
-       /* E0C00-E0CFF: page 8 */
-       0x8,
-       /* E0D00-E0DFF: page 8 */
-       0x8,
-       /* E0E00-E0EFF: page 8 */
-       0x8,
-       /* E0F00-E0FFF: page 8 */
-       0x8,
-       /* E1000-E10FF: page 8 */
-       0x8,
-       /* E1100-E11FF: page 8 */
-       0x8,
-       /* E1200-E12FF: page 8 */
-       0x8,
-       /* E1300-E13FF: page 8 */
-       0x8,
-       /* E1400-E14FF: page 8 */
-       0x8,
-       /* E1500-E15FF: page 8 */
-       0x8,
-       /* E1600-E16FF: page 8 */
-       0x8,
-       /* E1700-E17FF: page 8 */
-       0x8,
-       /* E1800-E18FF: page 8 */
-       0x8,
-       /* E1900-E19FF: page 8 */
-       0x8,
-       /* E1A00-E1AFF: page 8 */
-       0x8,
-       /* E1B00-E1BFF: page 8 */
-       0x8,
-       /* E1C00-E1CFF: page 8 */
-       0x8,
-       /* E1D00-E1DFF: page 8 */
-       0x8,
-       /* E1E00-E1EFF: page 8 */
-       0x8,
-       /* E1F00-E1FFF: page 8 */
-       0x8,
-       /* E2000-E20FF: page 8 */
-       0x8,
-       /* E2100-E21FF: page 8 */
-       0x8,
-       /* E2200-E22FF: page 8 */
-       0x8,
-       /* E2300-E23FF: page 8 */
-       0x8,
-       /* E2400-E24FF: page 8 */
-       0x8,
-       /* E2500-E25FF: page 8 */
-       0x8,
-       /* E2600-E26FF: page 8 */
-       0x8,
-       /* E2700-E27FF: page 8 */
-       0x8,
-       /* E2800-E28FF: page 8 */
-       0x8,
-       /* E2900-E29FF: page 8 */
-       0x8,
-       /* E2A00-E2AFF: page 8 */
-       0x8,
-       /* E2B00-E2BFF: page 8 */
-       0x8,
-       /* E2C00-E2CFF: page 8 */
-       0x8,
-       /* E2D00-E2DFF: page 8 */
-       0x8,
-       /* E2E00-E2EFF: page 8 */
-       0x8,
-       /* E2F00-E2FFF: page 8 */
-       0x8,
-       /* E3000-E30FF: page 8 */
-       0x8,
-       /* E3100-E31FF: page 8 */
-       0x8,
-       /* E3200-E32FF: page 8 */
-       0x8,
-       /* E3300-E33FF: page 8 */
-       0x8,
-       /* E3400-E34FF: page 8 */
-       0x8,
-       /* E3500-E35FF: page 8 */
-       0x8,
-       /* E3600-E36FF: page 8 */
-       0x8,
-       /* E3700-E37FF: page 8 */
-       0x8,
-       /* E3800-E38FF: page 8 */
-       0x8,
-       /* E3900-E39FF: page 8 */
-       0x8,
-       /* E3A00-E3AFF: page 8 */
-       0x8,
-       /* E3B00-E3BFF: page 8 */
-       0x8,
-       /* E3C00-E3CFF: page 8 */
-       0x8,
-       /* E3D00-E3DFF: page 8 */
-       0x8,
-       /* E3E00-E3EFF: page 8 */
-       0x8,
-       /* E3F00-E3FFF: page 8 */
-       0x8,
-       /* E4000-E40FF: page 8 */
-       0x8,
-       /* E4100-E41FF: page 8 */
-       0x8,
-       /* E4200-E42FF: page 8 */
-       0x8,
-       /* E4300-E43FF: page 8 */
-       0x8,
-       /* E4400-E44FF: page 8 */
-       0x8,
-       /* E4500-E45FF: page 8 */
-       0x8,
-       /* E4600-E46FF: page 8 */
-       0x8,
-       /* E4700-E47FF: page 8 */
-       0x8,
-       /* E4800-E48FF: page 8 */
-       0x8,
-       /* E4900-E49FF: page 8 */
-       0x8,
-       /* E4A00-E4AFF: page 8 */
-       0x8,
-       /* E4B00-E4BFF: page 8 */
-       0x8,
-       /* E4C00-E4CFF: page 8 */
-       0x8,
-       /* E4D00-E4DFF: page 8 */
-       0x8,
-       /* E4E00-E4EFF: page 8 */
-       0x8,
-       /* E4F00-E4FFF: page 8 */
-       0x8,
-       /* E5000-E50FF: page 8 */
-       0x8,
-       /* E5100-E51FF: page 8 */
-       0x8,
-       /* E5200-E52FF: page 8 */
-       0x8,
-       /* E5300-E53FF: page 8 */
-       0x8,
-       /* E5400-E54FF: page 8 */
-       0x8,
-       /* E5500-E55FF: page 8 */
-       0x8,
-       /* E5600-E56FF: page 8 */
-       0x8,
-       /* E5700-E57FF: page 8 */
-       0x8,
-       /* E5800-E58FF: page 8 */
-       0x8,
-       /* E5900-E59FF: page 8 */
-       0x8,
-       /* E5A00-E5AFF: page 8 */
-       0x8,
-       /* E5B00-E5BFF: page 8 */
-       0x8,
-       /* E5C00-E5CFF: page 8 */
-       0x8,
-       /* E5D00-E5DFF: page 8 */
-       0x8,
-       /* E5E00-E5EFF: page 8 */
-       0x8,
-       /* E5F00-E5FFF: page 8 */
-       0x8,
-       /* E6000-E60FF: page 8 */
-       0x8,
-       /* E6100-E61FF: page 8 */
-       0x8,
-       /* E6200-E62FF: page 8 */
-       0x8,
-       /* E6300-E63FF: page 8 */
-       0x8,
-       /* E6400-E64FF: page 8 */
-       0x8,
-       /* E6500-E65FF: page 8 */
-       0x8,
-       /* E6600-E66FF: page 8 */
-       0x8,
-       /* E6700-E67FF: page 8 */
-       0x8,
-       /* E6800-E68FF: page 8 */
-       0x8,
-       /* E6900-E69FF: page 8 */
-       0x8,
-       /* E6A00-E6AFF: page 8 */
-       0x8,
-       /* E6B00-E6BFF: page 8 */
-       0x8,
-       /* E6C00-E6CFF: page 8 */
-       0x8,
-       /* E6D00-E6DFF: page 8 */
-       0x8,
-       /* E6E00-E6EFF: page 8 */
-       0x8,
-       /* E6F00-E6FFF: page 8 */
-       0x8,
-       /* E7000-E70FF: page 8 */
-       0x8,
-       /* E7100-E71FF: page 8 */
-       0x8,
-       /* E7200-E72FF: page 8 */
-       0x8,
-       /* E7300-E73FF: page 8 */
-       0x8,
-       /* E7400-E74FF: page 8 */
-       0x8,
-       /* E7500-E75FF: page 8 */
-       0x8,
-       /* E7600-E76FF: page 8 */
-       0x8,
-       /* E7700-E77FF: page 8 */
-       0x8,
-       /* E7800-E78FF: page 8 */
-       0x8,
-       /* E7900-E79FF: page 8 */
-       0x8,
-       /* E7A00-E7AFF: page 8 */
-       0x8,
-       /* E7B00-E7BFF: page 8 */
-       0x8,
-       /* E7C00-E7CFF: page 8 */
-       0x8,
-       /* E7D00-E7DFF: page 8 */
-       0x8,
-       /* E7E00-E7EFF: page 8 */
-       0x8,
-       /* E7F00-E7FFF: page 8 */
-       0x8,
-       /* E8000-E80FF: page 8 */
-       0x8,
-       /* E8100-E81FF: page 8 */
-       0x8,
-       /* E8200-E82FF: page 8 */
-       0x8,
-       /* E8300-E83FF: page 8 */
-       0x8,
-       /* E8400-E84FF: page 8 */
-       0x8,
-       /* E8500-E85FF: page 8 */
-       0x8,
-       /* E8600-E86FF: page 8 */
-       0x8,
-       /* E8700-E87FF: page 8 */
-       0x8,
-       /* E8800-E88FF: page 8 */
-       0x8,
-       /* E8900-E89FF: page 8 */
-       0x8,
-       /* E8A00-E8AFF: page 8 */
-       0x8,
-       /* E8B00-E8BFF: page 8 */
-       0x8,
-       /* E8C00-E8CFF: page 8 */
-       0x8,
-       /* E8D00-E8DFF: page 8 */
-       0x8,
-       /* E8E00-E8EFF: page 8 */
-       0x8,
-       /* E8F00-E8FFF: page 8 */
-       0x8,
-       /* E9000-E90FF: page 8 */
-       0x8,
-       /* E9100-E91FF: page 8 */
-       0x8,
-       /* E9200-E92FF: page 8 */
-       0x8,
-       /* E9300-E93FF: page 8 */
-       0x8,
-       /* E9400-E94FF: page 8 */
-       0x8,
-       /* E9500-E95FF: page 8 */
-       0x8,
-       /* E9600-E96FF: page 8 */
-       0x8,
-       /* E9700-E97FF: page 8 */
-       0x8,
-       /* E9800-E98FF: page 8 */
-       0x8,
-       /* E9900-E99FF: page 8 */
-       0x8,
-       /* E9A00-E9AFF: page 8 */
-       0x8,
-       /* E9B00-E9BFF: page 8 */
-       0x8,
-       /* E9C00-E9CFF: page 8 */
-       0x8,
-       /* E9D00-E9DFF: page 8 */
-       0x8,
-       /* E9E00-E9EFF: page 8 */
-       0x8,
-       /* E9F00-E9FFF: page 8 */
-       0x8,
-       /* EA000-EA0FF: page 8 */
-       0x8,
-       /* EA100-EA1FF: page 8 */
-       0x8,
-       /* EA200-EA2FF: page 8 */
-       0x8,
-       /* EA300-EA3FF: page 8 */
-       0x8,
-       /* EA400-EA4FF: page 8 */
-       0x8,
-       /* EA500-EA5FF: page 8 */
-       0x8,
-       /* EA600-EA6FF: page 8 */
-       0x8,
-       /* EA700-EA7FF: page 8 */
-       0x8,
-       /* EA800-EA8FF: page 8 */
-       0x8,
-       /* EA900-EA9FF: page 8 */
-       0x8,
-       /* EAA00-EAAFF: page 8 */
-       0x8,
-       /* EAB00-EABFF: page 8 */
-       0x8,
-       /* EAC00-EACFF: page 8 */
-       0x8,
-       /* EAD00-EADFF: page 8 */
-       0x8,
-       /* EAE00-EAEFF: page 8 */
-       0x8,
-       /* EAF00-EAFFF: page 8 */
-       0x8,
-       /* EB000-EB0FF: page 8 */
-       0x8,
-       /* EB100-EB1FF: page 8 */
-       0x8,
-       /* EB200-EB2FF: page 8 */
-       0x8,
-       /* EB300-EB3FF: page 8 */
-       0x8,
-       /* EB400-EB4FF: page 8 */
-       0x8,
-       /* EB500-EB5FF: page 8 */
-       0x8,
-       /* EB600-EB6FF: page 8 */
-       0x8,
-       /* EB700-EB7FF: page 8 */
-       0x8,
-       /* EB800-EB8FF: page 8 */
-       0x8,
-       /* EB900-EB9FF: page 8 */
-       0x8,
-       /* EBA00-EBAFF: page 8 */
-       0x8,
-       /* EBB00-EBBFF: page 8 */
-       0x8,
-       /* EBC00-EBCFF: page 8 */
-       0x8,
-       /* EBD00-EBDFF: page 8 */
-       0x8,
-       /* EBE00-EBEFF: page 8 */
-       0x8,
-       /* EBF00-EBFFF: page 8 */
-       0x8,
-       /* EC000-EC0FF: page 8 */
-       0x8,
-       /* EC100-EC1FF: page 8 */
-       0x8,
-       /* EC200-EC2FF: page 8 */
-       0x8,
-       /* EC300-EC3FF: page 8 */
-       0x8,
-       /* EC400-EC4FF: page 8 */
-       0x8,
-       /* EC500-EC5FF: page 8 */
-       0x8,
-       /* EC600-EC6FF: page 8 */
-       0x8,
-       /* EC700-EC7FF: page 8 */
-       0x8,
-       /* EC800-EC8FF: page 8 */
-       0x8,
-       /* EC900-EC9FF: page 8 */
-       0x8,
-       /* ECA00-ECAFF: page 8 */
-       0x8,
-       /* ECB00-ECBFF: page 8 */
-       0x8,
-       /* ECC00-ECCFF: page 8 */
-       0x8,
-       /* ECD00-ECDFF: page 8 */
-       0x8,
-       /* ECE00-ECEFF: page 8 */
-       0x8,
-       /* ECF00-ECFFF: page 8 */
-       0x8,
-       /* ED000-ED0FF: page 8 */
-       0x8,
-       /* ED100-ED1FF: page 8 */
-       0x8,
-       /* ED200-ED2FF: page 8 */
-       0x8,
-       /* ED300-ED3FF: page 8 */
-       0x8,
-       /* ED400-ED4FF: page 8 */
-       0x8,
-       /* ED500-ED5FF: page 8 */
-       0x8,
-       /* ED600-ED6FF: page 8 */
-       0x8,
-       /* ED700-ED7FF: page 8 */
-       0x8,
-       /* ED800-ED8FF: page 8 */
-       0x8,
-       /* ED900-ED9FF: page 8 */
-       0x8,
-       /* EDA00-EDAFF: page 8 */
-       0x8,
-       /* EDB00-EDBFF: page 8 */
-       0x8,
-       /* EDC00-EDCFF: page 8 */
-       0x8,
-       /* EDD00-EDDFF: page 8 */
-       0x8,
-       /* EDE00-EDEFF: page 8 */
-       0x8,
-       /* EDF00-EDFFF: page 8 */
-       0x8,
-       /* EE000-EE0FF: page 8 */
-       0x8,
-       /* EE100-EE1FF: page 8 */
-       0x8,
-       /* EE200-EE2FF: page 8 */
-       0x8,
-       /* EE300-EE3FF: page 8 */
-       0x8,
-       /* EE400-EE4FF: page 8 */
-       0x8,
-       /* EE500-EE5FF: page 8 */
-       0x8,
-       /* EE600-EE6FF: page 8 */
-       0x8,
-       /* EE700-EE7FF: page 8 */
-       0x8,
-       /* EE800-EE8FF: page 8 */
-       0x8,
-       /* EE900-EE9FF: page 8 */
-       0x8,
-       /* EEA00-EEAFF: page 8 */
-       0x8,
-       /* EEB00-EEBFF: page 8 */
-       0x8,
-       /* EEC00-EECFF: page 8 */
-       0x8,
-       /* EED00-EEDFF: page 8 */
-       0x8,
-       /* EEE00-EEEFF: page 8 */
-       0x8,
-       /* EEF00-EEFFF: page 8 */
-       0x8,
-       /* EF000-EF0FF: page 8 */
-       0x8,
-       /* EF100-EF1FF: page 8 */
-       0x8,
-       /* EF200-EF2FF: page 8 */
-       0x8,
-       /* EF300-EF3FF: page 8 */
-       0x8,
-       /* EF400-EF4FF: page 8 */
-       0x8,
-       /* EF500-EF5FF: page 8 */
-       0x8,
-       /* EF600-EF6FF: page 8 */
-       0x8,
-       /* EF700-EF7FF: page 8 */
-       0x8,
-       /* EF800-EF8FF: page 8 */
-       0x8,
-       /* EF900-EF9FF: page 8 */
-       0x8,
-       /* EFA00-EFAFF: page 8 */
-       0x8,
-       /* EFB00-EFBFF: page 8 */
-       0x8,
-       /* EFC00-EFCFF: page 8 */
-       0x8,
-       /* EFD00-EFDFF: page 8 */
-       0x8,
-       /* EFE00-EFEFF: page 8 */
-       0x8,
-       /* EFF00-EFFFF: page 8 */
-       0x8,
-       /* F0000-F00FF: page 224 */
-       0xE0,
-       /* F0100-F01FF: page 224 */
-       0xE0,
-       /* F0200-F02FF: page 224 */
-       0xE0,
-       /* F0300-F03FF: page 224 */
-       0xE0,
-       /* F0400-F04FF: page 224 */
-       0xE0,
-       /* F0500-F05FF: page 224 */
-       0xE0,
-       /* F0600-F06FF: page 224 */
-       0xE0,
-       /* F0700-F07FF: page 224 */
-       0xE0,
-       /* F0800-F08FF: page 224 */
-       0xE0,
-       /* F0900-F09FF: page 224 */
-       0xE0,
-       /* F0A00-F0AFF: page 224 */
-       0xE0,
-       /* F0B00-F0BFF: page 224 */
-       0xE0,
-       /* F0C00-F0CFF: page 224 */
-       0xE0,
-       /* F0D00-F0DFF: page 224 */
-       0xE0,
-       /* F0E00-F0EFF: page 224 */
-       0xE0,
-       /* F0F00-F0FFF: page 224 */
-       0xE0,
-       /* F1000-F10FF: page 224 */
-       0xE0,
-       /* F1100-F11FF: page 224 */
-       0xE0,
-       /* F1200-F12FF: page 224 */
-       0xE0,
-       /* F1300-F13FF: page 224 */
-       0xE0,
-       /* F1400-F14FF: page 224 */
-       0xE0,
-       /* F1500-F15FF: page 224 */
-       0xE0,
-       /* F1600-F16FF: page 224 */
-       0xE0,
-       /* F1700-F17FF: page 224 */
-       0xE0,
-       /* F1800-F18FF: page 224 */
-       0xE0,
-       /* F1900-F19FF: page 224 */
-       0xE0,
-       /* F1A00-F1AFF: page 224 */
-       0xE0,
-       /* F1B00-F1BFF: page 224 */
-       0xE0,
-       /* F1C00-F1CFF: page 224 */
-       0xE0,
-       /* F1D00-F1DFF: page 224 */
-       0xE0,
-       /* F1E00-F1EFF: page 224 */
-       0xE0,
-       /* F1F00-F1FFF: page 224 */
-       0xE0,
-       /* F2000-F20FF: page 224 */
-       0xE0,
-       /* F2100-F21FF: page 224 */
-       0xE0,
-       /* F2200-F22FF: page 224 */
-       0xE0,
-       /* F2300-F23FF: page 224 */
-       0xE0,
-       /* F2400-F24FF: page 224 */
-       0xE0,
-       /* F2500-F25FF: page 224 */
-       0xE0,
-       /* F2600-F26FF: page 224 */
-       0xE0,
-       /* F2700-F27FF: page 224 */
-       0xE0,
-       /* F2800-F28FF: page 224 */
-       0xE0,
-       /* F2900-F29FF: page 224 */
-       0xE0,
-       /* F2A00-F2AFF: page 224 */
-       0xE0,
-       /* F2B00-F2BFF: page 224 */
-       0xE0,
-       /* F2C00-F2CFF: page 224 */
-       0xE0,
-       /* F2D00-F2DFF: page 224 */
-       0xE0,
-       /* F2E00-F2EFF: page 224 */
-       0xE0,
-       /* F2F00-F2FFF: page 224 */
-       0xE0,
-       /* F3000-F30FF: page 224 */
-       0xE0,
-       /* F3100-F31FF: page 224 */
-       0xE0,
-       /* F3200-F32FF: page 224 */
-       0xE0,
-       /* F3300-F33FF: page 224 */
-       0xE0,
-       /* F3400-F34FF: page 224 */
-       0xE0,
-       /* F3500-F35FF: page 224 */
-       0xE0,
-       /* F3600-F36FF: page 224 */
-       0xE0,
-       /* F3700-F37FF: page 224 */
-       0xE0,
-       /* F3800-F38FF: page 224 */
-       0xE0,
-       /* F3900-F39FF: page 224 */
-       0xE0,
-       /* F3A00-F3AFF: page 224 */
-       0xE0,
-       /* F3B00-F3BFF: page 224 */
-       0xE0,
-       /* F3C00-F3CFF: page 224 */
-       0xE0,
-       /* F3D00-F3DFF: page 224 */
-       0xE0,
-       /* F3E00-F3EFF: page 224 */
-       0xE0,
-       /* F3F00-F3FFF: page 224 */
-       0xE0,
-       /* F4000-F40FF: page 224 */
-       0xE0,
-       /* F4100-F41FF: page 224 */
-       0xE0,
-       /* F4200-F42FF: page 224 */
-       0xE0,
-       /* F4300-F43FF: page 224 */
-       0xE0,
-       /* F4400-F44FF: page 224 */
-       0xE0,
-       /* F4500-F45FF: page 224 */
-       0xE0,
-       /* F4600-F46FF: page 224 */
-       0xE0,
-       /* F4700-F47FF: page 224 */
-       0xE0,
-       /* F4800-F48FF: page 224 */
-       0xE0,
-       /* F4900-F49FF: page 224 */
-       0xE0,
-       /* F4A00-F4AFF: page 224 */
-       0xE0,
-       /* F4B00-F4BFF: page 224 */
-       0xE0,
-       /* F4C00-F4CFF: page 224 */
-       0xE0,
-       /* F4D00-F4DFF: page 224 */
-       0xE0,
-       /* F4E00-F4EFF: page 224 */
-       0xE0,
-       /* F4F00-F4FFF: page 224 */
-       0xE0,
-       /* F5000-F50FF: page 224 */
-       0xE0,
-       /* F5100-F51FF: page 224 */
-       0xE0,
-       /* F5200-F52FF: page 224 */
-       0xE0,
-       /* F5300-F53FF: page 224 */
-       0xE0,
-       /* F5400-F54FF: page 224 */
-       0xE0,
-       /* F5500-F55FF: page 224 */
-       0xE0,
-       /* F5600-F56FF: page 224 */
-       0xE0,
-       /* F5700-F57FF: page 224 */
-       0xE0,
-       /* F5800-F58FF: page 224 */
-       0xE0,
-       /* F5900-F59FF: page 224 */
-       0xE0,
-       /* F5A00-F5AFF: page 224 */
-       0xE0,
-       /* F5B00-F5BFF: page 224 */
-       0xE0,
-       /* F5C00-F5CFF: page 224 */
-       0xE0,
-       /* F5D00-F5DFF: page 224 */
-       0xE0,
-       /* F5E00-F5EFF: page 224 */
-       0xE0,
-       /* F5F00-F5FFF: page 224 */
-       0xE0,
-       /* F6000-F60FF: page 224 */
-       0xE0,
-       /* F6100-F61FF: page 224 */
-       0xE0,
-       /* F6200-F62FF: page 224 */
-       0xE0,
-       /* F6300-F63FF: page 224 */
-       0xE0,
-       /* F6400-F64FF: page 224 */
-       0xE0,
-       /* F6500-F65FF: page 224 */
-       0xE0,
-       /* F6600-F66FF: page 224 */
-       0xE0,
-       /* F6700-F67FF: page 224 */
-       0xE0,
-       /* F6800-F68FF: page 224 */
-       0xE0,
-       /* F6900-F69FF: page 224 */
-       0xE0,
-       /* F6A00-F6AFF: page 224 */
-       0xE0,
-       /* F6B00-F6BFF: page 224 */
-       0xE0,
-       /* F6C00-F6CFF: page 224 */
-       0xE0,
-       /* F6D00-F6DFF: page 224 */
-       0xE0,
-       /* F6E00-F6EFF: page 224 */
-       0xE0,
-       /* F6F00-F6FFF: page 224 */
-       0xE0,
-       /* F7000-F70FF: page 224 */
-       0xE0,
-       /* F7100-F71FF: page 224 */
-       0xE0,
-       /* F7200-F72FF: page 224 */
-       0xE0,
-       /* F7300-F73FF: page 224 */
-       0xE0,
-       /* F7400-F74FF: page 224 */
-       0xE0,
-       /* F7500-F75FF: page 224 */
-       0xE0,
-       /* F7600-F76FF: page 224 */
-       0xE0,
-       /* F7700-F77FF: page 224 */
-       0xE0,
-       /* F7800-F78FF: page 224 */
-       0xE0,
-       /* F7900-F79FF: page 224 */
-       0xE0,
-       /* F7A00-F7AFF: page 224 */
-       0xE0,
-       /* F7B00-F7BFF: page 224 */
-       0xE0,
-       /* F7C00-F7CFF: page 224 */
-       0xE0,
-       /* F7D00-F7DFF: page 224 */
-       0xE0,
-       /* F7E00-F7EFF: page 224 */
-       0xE0,
-       /* F7F00-F7FFF: page 224 */
-       0xE0,
-       /* F8000-F80FF: page 224 */
-       0xE0,
-       /* F8100-F81FF: page 224 */
-       0xE0,
-       /* F8200-F82FF: page 224 */
-       0xE0,
-       /* F8300-F83FF: page 224 */
-       0xE0,
-       /* F8400-F84FF: page 224 */
-       0xE0,
-       /* F8500-F85FF: page 224 */
-       0xE0,
-       /* F8600-F86FF: page 224 */
-       0xE0,
-       /* F8700-F87FF: page 224 */
-       0xE0,
-       /* F8800-F88FF: page 224 */
-       0xE0,
-       /* F8900-F89FF: page 224 */
-       0xE0,
-       /* F8A00-F8AFF: page 224 */
-       0xE0,
-       /* F8B00-F8BFF: page 224 */
-       0xE0,
-       /* F8C00-F8CFF: page 224 */
-       0xE0,
-       /* F8D00-F8DFF: page 224 */
-       0xE0,
-       /* F8E00-F8EFF: page 224 */
-       0xE0,
-       /* F8F00-F8FFF: page 224 */
-       0xE0,
-       /* F9000-F90FF: page 224 */
-       0xE0,
-       /* F9100-F91FF: page 224 */
-       0xE0,
-       /* F9200-F92FF: page 224 */
-       0xE0,
-       /* F9300-F93FF: page 224 */
-       0xE0,
-       /* F9400-F94FF: page 224 */
-       0xE0,
-       /* F9500-F95FF: page 224 */
-       0xE0,
-       /* F9600-F96FF: page 224 */
-       0xE0,
-       /* F9700-F97FF: page 224 */
-       0xE0,
-       /* F9800-F98FF: page 224 */
-       0xE0,
-       /* F9900-F99FF: page 224 */
-       0xE0,
-       /* F9A00-F9AFF: page 224 */
-       0xE0,
-       /* F9B00-F9BFF: page 224 */
-       0xE0,
-       /* F9C00-F9CFF: page 224 */
-       0xE0,
-       /* F9D00-F9DFF: page 224 */
-       0xE0,
-       /* F9E00-F9EFF: page 224 */
-       0xE0,
-       /* F9F00-F9FFF: page 224 */
-       0xE0,
-       /* FA000-FA0FF: page 224 */
-       0xE0,
-       /* FA100-FA1FF: page 224 */
-       0xE0,
-       /* FA200-FA2FF: page 224 */
-       0xE0,
-       /* FA300-FA3FF: page 224 */
-       0xE0,
-       /* FA400-FA4FF: page 224 */
-       0xE0,
-       /* FA500-FA5FF: page 224 */
-       0xE0,
-       /* FA600-FA6FF: page 224 */
-       0xE0,
-       /* FA700-FA7FF: page 224 */
-       0xE0,
-       /* FA800-FA8FF: page 224 */
-       0xE0,
-       /* FA900-FA9FF: page 224 */
-       0xE0,
-       /* FAA00-FAAFF: page 224 */
-       0xE0,
-       /* FAB00-FABFF: page 224 */
-       0xE0,
-       /* FAC00-FACFF: page 224 */
-       0xE0,
-       /* FAD00-FADFF: page 224 */
-       0xE0,
-       /* FAE00-FAEFF: page 224 */
-       0xE0,
-       /* FAF00-FAFFF: page 224 */
-       0xE0,
-       /* FB000-FB0FF: page 224 */
-       0xE0,
-       /* FB100-FB1FF: page 224 */
-       0xE0,
-       /* FB200-FB2FF: page 224 */
-       0xE0,
-       /* FB300-FB3FF: page 224 */
-       0xE0,
-       /* FB400-FB4FF: page 224 */
-       0xE0,
-       /* FB500-FB5FF: page 224 */
-       0xE0,
-       /* FB600-FB6FF: page 224 */
-       0xE0,
-       /* FB700-FB7FF: page 224 */
-       0xE0,
-       /* FB800-FB8FF: page 224 */
-       0xE0,
-       /* FB900-FB9FF: page 224 */
-       0xE0,
-       /* FBA00-FBAFF: page 224 */
-       0xE0,
-       /* FBB00-FBBFF: page 224 */
-       0xE0,
-       /* FBC00-FBCFF: page 224 */
-       0xE0,
-       /* FBD00-FBDFF: page 224 */
-       0xE0,
-       /* FBE00-FBEFF: page 224 */
-       0xE0,
-       /* FBF00-FBFFF: page 224 */
-       0xE0,
-       /* FC000-FC0FF: page 224 */
-       0xE0,
-       /* FC100-FC1FF: page 224 */
-       0xE0,
-       /* FC200-FC2FF: page 224 */
-       0xE0,
-       /* FC300-FC3FF: page 224 */
-       0xE0,
-       /* FC400-FC4FF: page 224 */
-       0xE0,
-       /* FC500-FC5FF: page 224 */
-       0xE0,
-       /* FC600-FC6FF: page 224 */
-       0xE0,
-       /* FC700-FC7FF: page 224 */
-       0xE0,
-       /* FC800-FC8FF: page 224 */
-       0xE0,
-       /* FC900-FC9FF: page 224 */
-       0xE0,
-       /* FCA00-FCAFF: page 224 */
-       0xE0,
-       /* FCB00-FCBFF: page 224 */
-       0xE0,
-       /* FCC00-FCCFF: page 224 */
-       0xE0,
-       /* FCD00-FCDFF: page 224 */
-       0xE0,
-       /* FCE00-FCEFF: page 224 */
-       0xE0,
-       /* FCF00-FCFFF: page 224 */
-       0xE0,
-       /* FD000-FD0FF: page 224 */
-       0xE0,
-       /* FD100-FD1FF: page 224 */
-       0xE0,
-       /* FD200-FD2FF: page 224 */
-       0xE0,
-       /* FD300-FD3FF: page 224 */
-       0xE0,
-       /* FD400-FD4FF: page 224 */
-       0xE0,
-       /* FD500-FD5FF: page 224 */
-       0xE0,
-       /* FD600-FD6FF: page 224 */
-       0xE0,
-       /* FD700-FD7FF: page 224 */
-       0xE0,
-       /* FD800-FD8FF: page 224 */
-       0xE0,
-       /* FD900-FD9FF: page 224 */
-       0xE0,
-       /* FDA00-FDAFF: page 224 */
-       0xE0,
-       /* FDB00-FDBFF: page 224 */
-       0xE0,
-       /* FDC00-FDCFF: page 224 */
-       0xE0,
-       /* FDD00-FDDFF: page 224 */
-       0xE0,
-       /* FDE00-FDEFF: page 224 */
-       0xE0,
-       /* FDF00-FDFFF: page 224 */
-       0xE0,
-       /* FE000-FE0FF: page 224 */
-       0xE0,
-       /* FE100-FE1FF: page 224 */
-       0xE0,
-       /* FE200-FE2FF: page 224 */
-       0xE0,
-       /* FE300-FE3FF: page 224 */
-       0xE0,
-       /* FE400-FE4FF: page 224 */
-       0xE0,
-       /* FE500-FE5FF: page 224 */
-       0xE0,
-       /* FE600-FE6FF: page 224 */
-       0xE0,
-       /* FE700-FE7FF: page 224 */
-       0xE0,
-       /* FE800-FE8FF: page 224 */
-       0xE0,
-       /* FE900-FE9FF: page 224 */
-       0xE0,
-       /* FEA00-FEAFF: page 224 */
-       0xE0,
-       /* FEB00-FEBFF: page 224 */
-       0xE0,
-       /* FEC00-FECFF: page 224 */
-       0xE0,
-       /* FED00-FEDFF: page 224 */
-       0xE0,
-       /* FEE00-FEEFF: page 224 */
-       0xE0,
-       /* FEF00-FEFFF: page 224 */
-       0xE0,
-       /* FF000-FF0FF: page 224 */
-       0xE0,
-       /* FF100-FF1FF: page 224 */
-       0xE0,
-       /* FF200-FF2FF: page 224 */
-       0xE0,
-       /* FF300-FF3FF: page 224 */
-       0xE0,
-       /* FF400-FF4FF: page 224 */
-       0xE0,
-       /* FF500-FF5FF: page 224 */
-       0xE0,
-       /* FF600-FF6FF: page 224 */
-       0xE0,
-       /* FF700-FF7FF: page 224 */
-       0xE0,
-       /* FF800-FF8FF: page 224 */
-       0xE0,
-       /* FF900-FF9FF: page 224 */
-       0xE0,
-       /* FFA00-FFAFF: page 224 */
-       0xE0,
-       /* FFB00-FFBFF: page 224 */
-       0xE0,
-       /* FFC00-FFCFF: page 224 */
-       0xE0,
-       /* FFD00-FFDFF: page 224 */
-       0xE0,
-       /* FFE00-FFEFF: page 224 */
-       0xE0,
-       /* FFF00-FFFFF: page 277 */
-       0x115,
-       /* 100000-1000FF: page 224 */
-       0xE0,
-       /* 100100-1001FF: page 224 */
-       0xE0,
-       /* 100200-1002FF: page 224 */
-       0xE0,
-       /* 100300-1003FF: page 224 */
-       0xE0,
-       /* 100400-1004FF: page 224 */
-       0xE0,
-       /* 100500-1005FF: page 224 */
-       0xE0,
-       /* 100600-1006FF: page 224 */
-       0xE0,
-       /* 100700-1007FF: page 224 */
-       0xE0,
-       /* 100800-1008FF: page 224 */
-       0xE0,
-       /* 100900-1009FF: page 224 */
-       0xE0,
-       /* 100A00-100AFF: page 224 */
-       0xE0,
-       /* 100B00-100BFF: page 224 */
-       0xE0,
-       /* 100C00-100CFF: page 224 */
-       0xE0,
-       /* 100D00-100DFF: page 224 */
-       0xE0,
-       /* 100E00-100EFF: page 224 */
-       0xE0,
-       /* 100F00-100FFF: page 224 */
-       0xE0,
-       /* 101000-1010FF: page 224 */
-       0xE0,
-       /* 101100-1011FF: page 224 */
-       0xE0,
-       /* 101200-1012FF: page 224 */
-       0xE0,
-       /* 101300-1013FF: page 224 */
-       0xE0,
-       /* 101400-1014FF: page 224 */
-       0xE0,
-       /* 101500-1015FF: page 224 */
-       0xE0,
-       /* 101600-1016FF: page 224 */
-       0xE0,
-       /* 101700-1017FF: page 224 */
-       0xE0,
-       /* 101800-1018FF: page 224 */
-       0xE0,
-       /* 101900-1019FF: page 224 */
-       0xE0,
-       /* 101A00-101AFF: page 224 */
-       0xE0,
-       /* 101B00-101BFF: page 224 */
-       0xE0,
-       /* 101C00-101CFF: page 224 */
-       0xE0,
-       /* 101D00-101DFF: page 224 */
-       0xE0,
-       /* 101E00-101EFF: page 224 */
-       0xE0,
-       /* 101F00-101FFF: page 224 */
-       0xE0,
-       /* 102000-1020FF: page 224 */
-       0xE0,
-       /* 102100-1021FF: page 224 */
-       0xE0,
-       /* 102200-1022FF: page 224 */
-       0xE0,
-       /* 102300-1023FF: page 224 */
-       0xE0,
-       /* 102400-1024FF: page 224 */
-       0xE0,
-       /* 102500-1025FF: page 224 */
-       0xE0,
-       /* 102600-1026FF: page 224 */
-       0xE0,
-       /* 102700-1027FF: page 224 */
-       0xE0,
-       /* 102800-1028FF: page 224 */
-       0xE0,
-       /* 102900-1029FF: page 224 */
-       0xE0,
-       /* 102A00-102AFF: page 224 */
-       0xE0,
-       /* 102B00-102BFF: page 224 */
-       0xE0,
-       /* 102C00-102CFF: page 224 */
-       0xE0,
-       /* 102D00-102DFF: page 224 */
-       0xE0,
-       /* 102E00-102EFF: page 224 */
-       0xE0,
-       /* 102F00-102FFF: page 224 */
-       0xE0,
-       /* 103000-1030FF: page 224 */
-       0xE0,
-       /* 103100-1031FF: page 224 */
-       0xE0,
-       /* 103200-1032FF: page 224 */
-       0xE0,
-       /* 103300-1033FF: page 224 */
-       0xE0,
-       /* 103400-1034FF: page 224 */
-       0xE0,
-       /* 103500-1035FF: page 224 */
-       0xE0,
-       /* 103600-1036FF: page 224 */
-       0xE0,
-       /* 103700-1037FF: page 224 */
-       0xE0,
-       /* 103800-1038FF: page 224 */
-       0xE0,
-       /* 103900-1039FF: page 224 */
-       0xE0,
-       /* 103A00-103AFF: page 224 */
-       0xE0,
-       /* 103B00-103BFF: page 224 */
-       0xE0,
-       /* 103C00-103CFF: page 224 */
-       0xE0,
-       /* 103D00-103DFF: page 224 */
-       0xE0,
-       /* 103E00-103EFF: page 224 */
-       0xE0,
-       /* 103F00-103FFF: page 224 */
-       0xE0,
-       /* 104000-1040FF: page 224 */
-       0xE0,
-       /* 104100-1041FF: page 224 */
-       0xE0,
-       /* 104200-1042FF: page 224 */
-       0xE0,
-       /* 104300-1043FF: page 224 */
-       0xE0,
-       /* 104400-1044FF: page 224 */
-       0xE0,
-       /* 104500-1045FF: page 224 */
-       0xE0,
-       /* 104600-1046FF: page 224 */
-       0xE0,
-       /* 104700-1047FF: page 224 */
-       0xE0,
-       /* 104800-1048FF: page 224 */
-       0xE0,
-       /* 104900-1049FF: page 224 */
-       0xE0,
-       /* 104A00-104AFF: page 224 */
-       0xE0,
-       /* 104B00-104BFF: page 224 */
-       0xE0,
-       /* 104C00-104CFF: page 224 */
-       0xE0,
-       /* 104D00-104DFF: page 224 */
-       0xE0,
-       /* 104E00-104EFF: page 224 */
-       0xE0,
-       /* 104F00-104FFF: page 224 */
-       0xE0,
-       /* 105000-1050FF: page 224 */
-       0xE0,
-       /* 105100-1051FF: page 224 */
-       0xE0,
-       /* 105200-1052FF: page 224 */
-       0xE0,
-       /* 105300-1053FF: page 224 */
-       0xE0,
-       /* 105400-1054FF: page 224 */
-       0xE0,
-       /* 105500-1055FF: page 224 */
-       0xE0,
-       /* 105600-1056FF: page 224 */
-       0xE0,
-       /* 105700-1057FF: page 224 */
-       0xE0,
-       /* 105800-1058FF: page 224 */
-       0xE0,
-       /* 105900-1059FF: page 224 */
-       0xE0,
-       /* 105A00-105AFF: page 224 */
-       0xE0,
-       /* 105B00-105BFF: page 224 */
-       0xE0,
-       /* 105C00-105CFF: page 224 */
-       0xE0,
-       /* 105D00-105DFF: page 224 */
-       0xE0,
-       /* 105E00-105EFF: page 224 */
-       0xE0,
-       /* 105F00-105FFF: page 224 */
-       0xE0,
-       /* 106000-1060FF: page 224 */
-       0xE0,
-       /* 106100-1061FF: page 224 */
-       0xE0,
-       /* 106200-1062FF: page 224 */
-       0xE0,
-       /* 106300-1063FF: page 224 */
-       0xE0,
-       /* 106400-1064FF: page 224 */
-       0xE0,
-       /* 106500-1065FF: page 224 */
-       0xE0,
-       /* 106600-1066FF: page 224 */
-       0xE0,
-       /* 106700-1067FF: page 224 */
-       0xE0,
-       /* 106800-1068FF: page 224 */
-       0xE0,
-       /* 106900-1069FF: page 224 */
-       0xE0,
-       /* 106A00-106AFF: page 224 */
-       0xE0,
-       /* 106B00-106BFF: page 224 */
-       0xE0,
-       /* 106C00-106CFF: page 224 */
-       0xE0,
-       /* 106D00-106DFF: page 224 */
-       0xE0,
-       /* 106E00-106EFF: page 224 */
-       0xE0,
-       /* 106F00-106FFF: page 224 */
-       0xE0,
-       /* 107000-1070FF: page 224 */
-       0xE0,
-       /* 107100-1071FF: page 224 */
-       0xE0,
-       /* 107200-1072FF: page 224 */
-       0xE0,
-       /* 107300-1073FF: page 224 */
-       0xE0,
-       /* 107400-1074FF: page 224 */
-       0xE0,
-       /* 107500-1075FF: page 224 */
-       0xE0,
-       /* 107600-1076FF: page 224 */
-       0xE0,
-       /* 107700-1077FF: page 224 */
-       0xE0,
-       /* 107800-1078FF: page 224 */
-       0xE0,
-       /* 107900-1079FF: page 224 */
-       0xE0,
-       /* 107A00-107AFF: page 224 */
-       0xE0,
-       /* 107B00-107BFF: page 224 */
-       0xE0,
-       /* 107C00-107CFF: page 224 */
-       0xE0,
-       /* 107D00-107DFF: page 224 */
-       0xE0,
-       /* 107E00-107EFF: page 224 */
-       0xE0,
-       /* 107F00-107FFF: page 224 */
-       0xE0,
-       /* 108000-1080FF: page 224 */
-       0xE0,
-       /* 108100-1081FF: page 224 */
-       0xE0,
-       /* 108200-1082FF: page 224 */
-       0xE0,
-       /* 108300-1083FF: page 224 */
-       0xE0,
-       /* 108400-1084FF: page 224 */
-       0xE0,
-       /* 108500-1085FF: page 224 */
-       0xE0,
-       /* 108600-1086FF: page 224 */
-       0xE0,
-       /* 108700-1087FF: page 224 */
-       0xE0,
-       /* 108800-1088FF: page 224 */
-       0xE0,
-       /* 108900-1089FF: page 224 */
-       0xE0,
-       /* 108A00-108AFF: page 224 */
-       0xE0,
-       /* 108B00-108BFF: page 224 */
-       0xE0,
-       /* 108C00-108CFF: page 224 */
-       0xE0,
-       /* 108D00-108DFF: page 224 */
-       0xE0,
-       /* 108E00-108EFF: page 224 */
-       0xE0,
-       /* 108F00-108FFF: page 224 */
-       0xE0,
-       /* 109000-1090FF: page 224 */
-       0xE0,
-       /* 109100-1091FF: page 224 */
-       0xE0,
-       /* 109200-1092FF: page 224 */
-       0xE0,
-       /* 109300-1093FF: page 224 */
-       0xE0,
-       /* 109400-1094FF: page 224 */
-       0xE0,
-       /* 109500-1095FF: page 224 */
-       0xE0,
-       /* 109600-1096FF: page 224 */
-       0xE0,
-       /* 109700-1097FF: page 224 */
-       0xE0,
-       /* 109800-1098FF: page 224 */
-       0xE0,
-       /* 109900-1099FF: page 224 */
-       0xE0,
-       /* 109A00-109AFF: page 224 */
-       0xE0,
-       /* 109B00-109BFF: page 224 */
-       0xE0,
-       /* 109C00-109CFF: page 224 */
-       0xE0,
-       /* 109D00-109DFF: page 224 */
-       0xE0,
-       /* 109E00-109EFF: page 224 */
-       0xE0,
-       /* 109F00-109FFF: page 224 */
-       0xE0,
-       /* 10A000-10A0FF: page 224 */
-       0xE0,
-       /* 10A100-10A1FF: page 224 */
-       0xE0,
-       /* 10A200-10A2FF: page 224 */
-       0xE0,
-       /* 10A300-10A3FF: page 224 */
-       0xE0,
-       /* 10A400-10A4FF: page 224 */
-       0xE0,
-       /* 10A500-10A5FF: page 224 */
-       0xE0,
-       /* 10A600-10A6FF: page 224 */
-       0xE0,
-       /* 10A700-10A7FF: page 224 */
-       0xE0,
-       /* 10A800-10A8FF: page 224 */
-       0xE0,
-       /* 10A900-10A9FF: page 224 */
-       0xE0,
-       /* 10AA00-10AAFF: page 224 */
-       0xE0,
-       /* 10AB00-10ABFF: page 224 */
-       0xE0,
-       /* 10AC00-10ACFF: page 224 */
-       0xE0,
-       /* 10AD00-10ADFF: page 224 */
-       0xE0,
-       /* 10AE00-10AEFF: page 224 */
-       0xE0,
-       /* 10AF00-10AFFF: page 224 */
-       0xE0,
-       /* 10B000-10B0FF: page 224 */
-       0xE0,
-       /* 10B100-10B1FF: page 224 */
-       0xE0,
-       /* 10B200-10B2FF: page 224 */
-       0xE0,
-       /* 10B300-10B3FF: page 224 */
-       0xE0,
-       /* 10B400-10B4FF: page 224 */
-       0xE0,
-       /* 10B500-10B5FF: page 224 */
-       0xE0,
-       /* 10B600-10B6FF: page 224 */
-       0xE0,
-       /* 10B700-10B7FF: page 224 */
-       0xE0,
-       /* 10B800-10B8FF: page 224 */
-       0xE0,
-       /* 10B900-10B9FF: page 224 */
-       0xE0,
-       /* 10BA00-10BAFF: page 224 */
-       0xE0,
-       /* 10BB00-10BBFF: page 224 */
-       0xE0,
-       /* 10BC00-10BCFF: page 224 */
-       0xE0,
-       /* 10BD00-10BDFF: page 224 */
-       0xE0,
-       /* 10BE00-10BEFF: page 224 */
-       0xE0,
-       /* 10BF00-10BFFF: page 224 */
-       0xE0,
-       /* 10C000-10C0FF: page 224 */
-       0xE0,
-       /* 10C100-10C1FF: page 224 */
-       0xE0,
-       /* 10C200-10C2FF: page 224 */
-       0xE0,
-       /* 10C300-10C3FF: page 224 */
-       0xE0,
-       /* 10C400-10C4FF: page 224 */
-       0xE0,
-       /* 10C500-10C5FF: page 224 */
-       0xE0,
-       /* 10C600-10C6FF: page 224 */
-       0xE0,
-       /* 10C700-10C7FF: page 224 */
-       0xE0,
-       /* 10C800-10C8FF: page 224 */
-       0xE0,
-       /* 10C900-10C9FF: page 224 */
-       0xE0,
-       /* 10CA00-10CAFF: page 224 */
-       0xE0,
-       /* 10CB00-10CBFF: page 224 */
-       0xE0,
-       /* 10CC00-10CCFF: page 224 */
-       0xE0,
-       /* 10CD00-10CDFF: page 224 */
-       0xE0,
-       /* 10CE00-10CEFF: page 224 */
-       0xE0,
-       /* 10CF00-10CFFF: page 224 */
-       0xE0,
-       /* 10D000-10D0FF: page 224 */
-       0xE0,
-       /* 10D100-10D1FF: page 224 */
-       0xE0,
-       /* 10D200-10D2FF: page 224 */
-       0xE0,
-       /* 10D300-10D3FF: page 224 */
-       0xE0,
-       /* 10D400-10D4FF: page 224 */
-       0xE0,
-       /* 10D500-10D5FF: page 224 */
-       0xE0,
-       /* 10D600-10D6FF: page 224 */
-       0xE0,
-       /* 10D700-10D7FF: page 224 */
-       0xE0,
-       /* 10D800-10D8FF: page 224 */
-       0xE0,
-       /* 10D900-10D9FF: page 224 */
-       0xE0,
-       /* 10DA00-10DAFF: page 224 */
-       0xE0,
-       /* 10DB00-10DBFF: page 224 */
-       0xE0,
-       /* 10DC00-10DCFF: page 224 */
-       0xE0,
-       /* 10DD00-10DDFF: page 224 */
-       0xE0,
-       /* 10DE00-10DEFF: page 224 */
-       0xE0,
-       /* 10DF00-10DFFF: page 224 */
-       0xE0,
-       /* 10E000-10E0FF: page 224 */
-       0xE0,
-       /* 10E100-10E1FF: page 224 */
-       0xE0,
-       /* 10E200-10E2FF: page 224 */
-       0xE0,
-       /* 10E300-10E3FF: page 224 */
-       0xE0,
-       /* 10E400-10E4FF: page 224 */
-       0xE0,
-       /* 10E500-10E5FF: page 224 */
-       0xE0,
-       /* 10E600-10E6FF: page 224 */
-       0xE0,
-       /* 10E700-10E7FF: page 224 */
-       0xE0,
-       /* 10E800-10E8FF: page 224 */
-       0xE0,
-       /* 10E900-10E9FF: page 224 */
-       0xE0,
-       /* 10EA00-10EAFF: page 224 */
-       0xE0,
-       /* 10EB00-10EBFF: page 224 */
-       0xE0,
-       /* 10EC00-10ECFF: page 224 */
-       0xE0,
-       /* 10ED00-10EDFF: page 224 */
-       0xE0,
-       /* 10EE00-10EEFF: page 224 */
-       0xE0,
-       /* 10EF00-10EFFF: page 224 */
-       0xE0,
-       /* 10F000-10F0FF: page 224 */
-       0xE0,
-       /* 10F100-10F1FF: page 224 */
-       0xE0,
-       /* 10F200-10F2FF: page 224 */
-       0xE0,
-       /* 10F300-10F3FF: page 224 */
-       0xE0,
-       /* 10F400-10F4FF: page 224 */
-       0xE0,
-       /* 10F500-10F5FF: page 224 */
-       0xE0,
-       /* 10F600-10F6FF: page 224 */
-       0xE0,
-       /* 10F700-10F7FF: page 224 */
-       0xE0,
-       /* 10F800-10F8FF: page 224 */
-       0xE0,
-       /* 10F900-10F9FF: page 224 */
-       0xE0,
-       /* 10FA00-10FAFF: page 224 */
-       0xE0,
-       /* 10FB00-10FBFF: page 224 */
-       0xE0,
-       /* 10FC00-10FCFF: page 224 */
-       0xE0,
-       /* 10FD00-10FDFF: page 224 */
-       0xE0,
-       /* 10FE00-10FEFF: page 224 */
-       0xE0,
-       /* 10FF00-10FFFF: page 277 */
-       0x115
-};
-#endif
-
-#ifndef DISABLE_NET_4_0
-/*
- * The CategoryData_v4* tables below are automatically generated
- * by create-category-table(.cs), available in the mcs
- * sources.  DO NOT EDIT!
- */
-
-/*
- * Value bits: 8, Page size: 256
- * Packed table: 71680 bytes
- * Index astral_index: 8192 bytes
- * Total: 79872 bytes
- */
-static const guint8 CategoryData_v4 [71680] = 
-{
-       /* Page 0, 0 indirect uses */
-       14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,
-       14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,
-       11,24,24,24,26,24,24,24,20,21,24,25,24,19,24,24,
-       8,8,8,8,8,8,8,8,8,8,24,24,25,25,25,24,
-       24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-       0,0,0,0,0,0,0,0,0,0,0,20,24,21,27,18,
-       27,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-       1,1,1,1,1,1,1,1,1,1,1,20,25,21,25,14,
-       14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,
-       14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,
-       11,24,26,26,26,26,28,28,27,28,1,22,25,19,28,27,
-       28,25,10,10,27,1,28,24,27,10,1,23,10,10,10,24,
-       0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-       0,0,0,0,0,0,0,25,0,0,0,0,0,0,0,1,
-       1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-       1,1,1,1,1,1,1,25,1,1,1,1,1,1,1,1,
-       /* Page 1, 0 indirect uses */
-       0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-       0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-       0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-       0,1,0,1,0,1,0,1,1,0,1,0,1,0,1,0,
-       1,0,1,0,1,0,1,0,1,1,0,1,0,1,0,1,
-       0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-       0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-       0,1,0,1,0,1,0,1,0,0,1,0,1,0,1,1,
-       1,0,0,1,0,1,0,0,1,0,0,0,1,1,0,0,
-       0,0,1,0,0,1,0,0,0,1,1,1,0,0,1,0,
-       0,1,0,1,0,1,0,0,1,0,1,1,0,1,0,0,
-       1,0,0,0,1,0,1,0,0,1,1,4,0,1,1,1,
-       4,4,4,4,0,2,1,0,2,1,0,2,1,0,1,0,
-       1,0,1,0,1,0,1,0,1,0,1,0,1,1,0,1,
-       0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-       1,0,2,1,0,1,0,0,0,1,0,1,0,1,0,1,
-       /* Page 2, 0 indirect uses */
-       0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-       0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-       0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-       0,1,0,1,1,1,1,1,1,1,0,0,1,0,0,1,
-       1,0,1,0,0,0,0,1,0,1,0,1,0,1,0,1,
-       1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-       1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-       1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-       1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-       1,1,1,1,4,1,1,1,1,1,1,1,1,1,1,1,
-       1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-       3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
-       3,3,27,27,27,27,3,3,3,3,3,3,3,3,3,3,
-       3,3,27,27,27,27,27,27,27,27,27,27,27,27,27,27,
-       3,3,3,3,3,27,27,27,27,27,27,27,3,27,3,27,
-       27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,
-       /* Page 3, 0 indirect uses */
-       5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-       5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-       5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-       5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-       5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-       5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-       5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-       0,1,0,1,3,27,0,1,29,29,3,1,1,1,24,29,
-       29,29,29,29,27,27,0,24,0,0,0,29,0,29,0,0,
-       1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-       0,0,29,0,0,0,0,0,0,0,0,0,1,1,1,1,
-       1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-       1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,
-       1,1,0,0,0,1,1,1,0,1,0,1,0,1,0,1,
-       0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-       1,1,1,1,0,1,25,0,1,0,0,1,1,0,0,0,
-       /* Page 4, 0 indirect uses */
-       0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-       0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-       0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-       1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-       1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-       1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-       0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-       0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-       0,1,28,5,5,5,5,5,7,7,0,1,0,1,0,1,
-       0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-       0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-       0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-       0,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1,
-       0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-       0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-       0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-       /* Page 5, 0 indirect uses */
-       0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-       0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-       0,1,0,1,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-       0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-       0,0,0,0,0,0,0,29,29,3,24,24,24,24,24,24,
-       29,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-       1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-       1,1,1,1,1,1,1,1,29,24,19,29,29,29,29,29,
-       29,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-       5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-       5,5,5,5,5,5,5,5,5,5,5,5,5,5,19,5,
-       24,5,5,24,5,5,24,5,29,29,29,29,29,29,29,29,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,29,29,29,29,29,
-       4,4,4,24,24,29,29,29,29,29,29,29,29,29,29,29,
-       /* Page 6, 0 indirect uses */
-       15,15,15,15,29,29,25,25,25,24,24,26,24,24,28,28,
-       5,5,5,5,5,5,5,5,5,5,5,24,29,29,24,24,
-       29,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       3,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,
-       5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,29,
-       8,8,8,8,8,8,8,8,8,8,24,24,24,24,4,4,
-       5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,24,4,5,5,5,5,5,5,5,15,7,5,
-       5,5,5,5,5,3,3,5,5,28,5,5,5,5,4,4,
-       8,8,8,8,8,8,8,8,8,8,4,4,4,28,28,4,
-       /* Page 7, 0 indirect uses */
-       24,24,24,24,24,24,24,24,24,24,24,24,24,24,29,15,
-       4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-       5,5,5,5,5,5,5,5,5,5,5,29,29,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,
-       5,4,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       8,8,8,8,8,8,8,8,8,8,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,
-       5,5,5,5,3,3,28,24,24,24,3,29,29,29,29,29,
-       /*
-        * Page 8, 3390 indirect uses:
-        *      10500-107FF (astral_index),
-        *      10B00-11FFF (astral_index),
-        *      12500-1CFFF (astral_index),
-        *      1D800-1EFFF (astral_index),
-        *      1F100-1FFFF (astral_index),
-        *      2A700-2F7FF (astral_index),
-        *      2FB00-DFFFF (astral_index),
-        *      E0200-EFFFF (astral_index)
-        */
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       /* Page 9, 0 indirect uses */
-       29,5,5,6,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,29,29,5,4,6,6,
-       6,5,5,5,5,5,5,5,5,6,6,6,6,5,29,29,
-       4,5,5,5,5,29,29,29,4,4,4,4,4,4,4,4,
-       4,4,5,5,24,24,8,8,8,8,8,8,8,8,8,8,
-       24,3,4,29,29,29,29,29,29,29,29,4,4,4,4,4,
-       29,5,6,6,29,4,4,4,4,4,4,4,4,29,29,4,
-       4,29,29,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,29,4,4,4,4,4,4,
-       4,29,4,29,29,29,4,4,4,4,29,29,5,4,6,6,
-       6,5,5,5,5,29,29,6,6,29,29,6,6,5,4,29,
-       29,29,29,29,29,29,29,6,29,29,29,29,4,4,29,4,
-       4,4,5,5,29,29,8,8,8,8,8,8,8,8,8,8,
-       4,4,26,26,10,10,10,10,10,10,28,29,29,29,29,29,
-       /* Page 10, 0 indirect uses */
-       29,5,5,6,29,4,4,4,4,4,4,29,29,29,29,4,
-       4,29,29,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,29,4,4,4,4,4,4,
-       4,29,4,4,29,4,4,29,4,4,29,29,5,29,6,6,
-       6,5,5,29,29,29,29,5,5,29,29,5,5,5,29,29,
-       29,5,29,29,29,29,29,29,29,4,4,4,4,29,4,29,
-       29,29,29,29,29,29,8,8,8,8,8,8,8,8,8,8,
-       5,5,4,4,4,5,29,29,29,29,29,29,29,29,29,29,
-       29,5,5,6,29,4,4,4,4,4,4,4,4,4,29,4,
-       4,4,29,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,29,4,4,4,4,4,4,
-       4,29,4,4,29,4,4,4,4,4,29,29,5,4,6,6,
-       6,5,5,5,5,5,29,5,5,6,29,6,6,5,29,29,
-       4,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       4,4,5,5,29,29,8,8,8,8,8,8,8,8,8,8,
-       29,26,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       /* Page 11, 0 indirect uses */
-       29,5,6,6,29,4,4,4,4,4,4,4,4,29,29,4,
-       4,29,29,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,29,4,4,4,4,4,4,
-       4,29,4,4,29,4,4,4,4,4,29,29,5,4,6,5,
-       6,5,5,5,5,29,29,6,6,29,29,6,6,5,29,29,
-       29,29,29,29,29,29,5,6,29,29,29,29,4,4,29,4,
-       4,4,5,5,29,29,8,8,8,8,8,8,8,8,8,8,
-       28,4,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,5,4,29,4,4,4,4,4,4,29,29,29,4,4,
-       4,29,4,4,4,4,29,29,29,4,4,29,4,29,4,4,
-       29,29,29,4,4,29,29,29,4,4,4,29,29,29,4,4,
-       4,4,4,4,4,4,4,4,4,4,29,29,29,29,6,6,
-       5,6,6,29,29,29,6,6,6,29,6,6,6,5,29,29,
-       4,29,29,29,29,29,29,6,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,8,8,8,8,8,8,8,8,8,8,
-       10,10,10,28,28,28,28,28,28,26,28,29,29,29,29,29,
-       /* Page 12, 0 indirect uses */
-       29,6,6,6,29,4,4,4,4,4,4,4,4,29,4,4,
-       4,29,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,29,4,4,4,4,4,4,
-       4,4,4,4,29,4,4,4,4,4,29,29,29,4,5,5,
-       5,6,6,6,6,29,5,5,5,29,5,5,5,5,29,29,
-       29,29,29,29,29,5,5,29,4,4,29,29,29,29,29,29,
-       4,4,5,5,29,29,8,8,8,8,8,8,8,8,8,8,
-       29,29,29,29,29,29,29,29,10,10,10,10,10,10,10,28,
-       29,29,6,6,29,4,4,4,4,4,4,4,4,29,4,4,
-       4,29,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,29,4,4,4,4,4,4,
-       4,4,4,4,29,4,4,4,4,4,29,29,5,4,6,5,
-       6,6,6,6,6,29,5,6,6,29,6,6,5,5,29,29,
-       29,29,29,29,29,6,6,29,29,29,29,29,29,29,4,29,
-       4,4,5,5,29,29,8,8,8,8,8,8,8,8,8,8,
-       29,28,28,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       /* Page 13, 0 indirect uses */
-       29,29,6,6,29,4,4,4,4,4,4,4,4,29,4,4,
-       4,29,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,29,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,29,29,29,4,6,6,
-       6,5,5,5,5,29,6,6,6,29,6,6,6,5,29,29,
-       29,29,29,29,29,29,29,6,29,29,29,29,29,29,29,29,
-       4,4,5,5,29,29,8,8,8,8,8,8,8,8,8,8,
-       10,10,10,10,10,10,29,29,29,28,4,4,4,4,4,4,
-       29,29,6,6,29,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,29,29,29,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,29,4,4,4,4,4,4,4,4,4,29,4,29,29,
-       4,4,4,4,4,4,4,29,29,29,5,29,29,29,29,6,
-       6,6,5,5,5,29,5,29,6,6,6,6,6,6,6,6,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,6,6,24,29,29,29,29,29,29,29,29,29,29,29,
-       /* Page 14, 0 indirect uses */
-       29,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,5,4,4,5,5,5,5,5,5,5,29,29,29,29,26,
-       4,4,4,4,4,4,3,5,5,5,5,5,5,5,5,24,
-       8,8,8,8,8,8,8,8,8,8,24,24,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,4,4,29,4,29,29,4,4,29,4,29,29,4,29,29,
-       29,29,29,29,4,4,4,4,29,4,4,4,4,4,4,4,
-       29,4,4,4,29,4,29,4,29,29,4,4,29,4,4,4,
-       4,5,4,4,5,5,5,5,5,5,29,5,5,4,29,29,
-       4,4,4,4,4,29,3,29,5,5,5,5,5,5,29,29,
-       8,8,8,8,8,8,8,8,8,8,29,29,4,4,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       /* Page 15, 0 indirect uses */
-       4,28,28,28,24,24,24,24,24,24,24,24,24,24,24,24,
-       24,24,24,28,28,28,28,28,5,5,28,28,28,28,28,28,
-       8,8,8,8,8,8,8,8,8,8,10,10,10,10,10,10,
-       10,10,10,10,28,5,28,5,28,5,20,21,20,21,6,6,
-       4,4,4,4,4,4,4,4,29,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,29,29,29,
-       29,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,
-       5,5,5,5,5,24,5,5,4,4,4,4,29,29,29,29,
-       5,5,5,5,5,5,5,5,29,5,5,5,5,5,5,5,
-       5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-       5,5,5,5,5,5,5,5,5,5,5,5,5,29,28,28,
-       28,28,28,28,28,28,5,28,28,28,28,28,28,29,28,28,
-       24,24,24,24,24,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       /* Page 16, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,6,6,5,5,5,
-       5,6,5,5,5,5,5,5,6,5,5,6,6,5,5,4,
-       8,8,8,8,8,8,8,8,8,8,24,24,24,24,24,24,
-       4,4,4,4,4,4,6,6,5,5,4,4,4,4,5,5,
-       5,4,6,6,6,4,4,6,6,6,6,6,6,6,4,4,
-       4,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,5,6,6,5,5,6,6,6,6,6,6,5,4,6,
-       8,8,8,8,8,8,8,8,8,8,29,29,29,29,28,28,
-       0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-       0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-       0,0,0,0,0,0,29,29,29,29,29,29,29,29,29,29,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,24,3,29,29,29,
-       /* Page 17, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,29,29,29,29,29,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,29,29,29,29,29,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,29,29,29,29,29,29,
-       /* Page 18, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,29,4,4,4,4,29,29,
-       4,4,4,4,4,4,4,29,4,29,4,4,4,4,29,29,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,29,4,4,4,4,29,29,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,29,4,4,4,4,29,29,4,4,4,4,4,4,4,29,
-       4,29,4,4,4,4,29,29,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,29,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 19, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,29,4,4,4,4,29,29,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,29,29,29,29,5,
-       28,24,24,24,24,24,24,24,24,10,10,10,10,10,10,10,
-       10,10,10,10,10,10,10,10,10,10,10,10,10,29,29,29,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       28,28,28,28,28,28,28,28,28,28,29,29,29,29,29,29,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,29,29,29,29,29,29,29,29,29,29,29,
-       /* Page 20, 0 indirect uses */
-       29,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /*
-        * Page 21, 171 indirect uses:
-        *      12000-122FF (astral_index),
-        *      20000-2A5FF (astral_index),
-        *      2F800-2F9FF (astral_index)
-        */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 22, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,24,24,4,
-       4,4,4,4,4,4,4,29,29,29,29,29,29,29,29,29,
-       11,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,20,21,29,29,29,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,24,24,24,9,9,
-       9,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       /* Page 23, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,29,4,4,
-       4,4,5,5,5,29,29,29,29,29,29,29,29,29,29,29,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,5,5,5,24,24,29,29,29,29,29,29,29,29,29,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,5,5,29,29,29,29,29,29,29,29,29,29,29,29,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,29,4,4,
-       4,29,5,5,29,29,29,29,29,29,29,29,29,29,29,29,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,15,15,6,5,5,5,5,5,5,5,6,6,
-       6,6,6,6,6,6,5,6,6,5,5,5,5,5,5,5,
-       5,5,5,5,24,24,24,3,24,24,24,26,4,5,29,29,
-       8,8,8,8,8,8,8,8,8,8,29,29,29,29,29,29,
-       10,10,10,10,10,10,10,10,10,10,29,29,29,29,29,29,
-       /* Page 24, 0 indirect uses */
-       24,24,24,24,24,24,19,24,24,24,24,5,5,5,11,29,
-       8,8,8,8,8,8,8,8,8,8,29,29,29,29,29,29,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,29,29,29,29,29,29,29,29,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,5,4,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       /* Page 25, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,29,29,29,
-       5,5,5,6,6,6,6,5,5,6,6,6,29,29,29,29,
-       6,6,5,6,6,6,6,6,6,5,5,5,29,29,29,29,
-       28,29,29,29,24,24,8,8,8,8,8,8,8,8,8,8,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,29,29,
-       4,4,4,4,4,29,29,29,29,29,29,29,29,29,29,29,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,29,29,29,29,29,29,
-       6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
-       6,4,4,4,4,4,4,4,6,6,29,29,29,29,29,29,
-       8,8,8,8,8,8,8,8,8,8,29,29,29,29,24,24,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       /* Page 26, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,5,5,6,6,6,29,29,24,24,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       /* Page 27, 0 indirect uses */
-       5,5,5,5,6,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,5,6,5,5,5,5,5,6,5,6,6,6,
-       6,6,5,6,6,4,4,4,4,4,4,4,29,29,29,29,
-       8,8,8,8,8,8,8,8,8,8,24,24,24,24,24,24,
-       24,28,28,28,28,28,28,28,28,28,28,5,5,5,5,5,
-       5,5,5,5,28,28,28,28,28,28,28,28,28,29,29,29,
-       5,5,6,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,6,5,5,5,5,6,6,5,5,6,29,29,29,4,4,
-       8,8,8,8,8,8,8,8,8,8,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       /* Page 28, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,6,6,6,6,6,6,6,6,5,5,5,5,
-       5,5,5,5,6,6,5,5,29,29,29,24,24,24,24,24,
-       8,8,8,8,8,8,8,8,8,8,29,29,29,4,4,4,
-       8,8,8,8,8,8,8,8,8,8,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,3,3,3,3,3,3,24,24,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       /* Page 29, 0 indirect uses */
-       1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-       1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-       1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,
-       3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
-       3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
-       3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
-       3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-       1,1,1,1,1,1,1,1,3,1,1,1,1,1,1,1,
-       1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-       1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,
-       3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
-       3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
-       5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-       5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-       5,5,5,5,5,5,5,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,5,5,
-       /* Page 30, 0 indirect uses */
-       0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-       0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-       0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-       0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-       0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-       0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-       0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-       0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-       0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-       0,1,0,1,0,1,1,1,1,1,1,1,1,1,0,1,
-       0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-       0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-       0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-       0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-       0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-       0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-       /* Page 31, 0 indirect uses */
-       1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,
-       1,1,1,1,1,1,29,29,0,0,0,0,0,0,29,29,
-       1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,
-       1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,
-       1,1,1,1,1,1,29,29,0,0,0,0,0,0,29,29,
-       1,1,1,1,1,1,1,1,29,0,29,0,29,0,29,0,
-       1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,
-       1,1,1,1,1,1,1,1,1,1,1,1,1,1,29,29,
-       1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,
-       1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,
-       1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,
-       1,1,1,1,1,29,1,1,0,0,0,0,2,27,1,27,
-       27,27,1,1,1,29,1,1,0,0,0,0,2,27,27,27,
-       1,1,1,1,29,29,1,1,0,0,0,0,29,27,27,27,
-       1,1,1,1,1,1,1,1,0,0,0,0,0,27,27,27,
-       29,29,1,1,1,29,1,1,0,0,0,0,2,27,27,29,
-       /* Page 32, 0 indirect uses */
-       11,11,11,11,11,11,11,11,11,11,11,15,15,15,15,15,
-       19,19,19,19,19,19,24,24,22,23,20,22,22,23,20,22,
-       24,24,24,24,24,24,24,24,12,13,15,15,15,15,15,11,
-       24,24,24,24,24,24,24,24,24,22,23,24,24,24,24,18,
-       18,24,24,24,25,20,21,24,24,24,24,24,24,24,24,24,
-       24,24,25,24,18,24,24,24,24,24,24,24,24,24,24,11,
-       15,15,15,15,15,29,29,29,29,29,15,15,15,15,15,15,
-       10,1,29,29,10,10,10,10,10,10,25,25,25,20,21,1,
-       10,10,10,10,10,10,10,10,10,10,25,25,25,20,21,29,
-       3,3,3,3,3,29,29,29,29,29,29,29,29,29,29,29,
-       26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,
-       26,26,26,26,26,26,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       5,5,5,5,5,5,5,5,5,5,5,5,5,7,7,7,
-       7,5,7,7,7,5,5,5,5,5,5,5,5,5,5,5,
-       5,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       /* Page 33, 0 indirect uses */
-       28,28,0,28,28,28,28,0,28,28,1,0,0,0,1,1,
-       0,0,0,1,28,0,28,28,28,0,0,0,0,0,28,28,
-       28,28,28,28,0,28,0,28,0,28,0,0,0,0,28,1,
-       0,0,0,0,1,4,4,4,4,1,28,28,1,1,0,0,
-       25,25,25,25,25,0,1,1,1,1,28,25,28,28,1,28,
-       29,29,29,10,10,10,10,10,10,10,10,10,10,10,10,10,
-       9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
-       9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
-       9,9,9,0,1,9,9,9,9,29,29,29,29,29,29,29,
-       25,25,25,25,25,28,28,28,28,28,25,25,28,28,28,28,
-       25,28,28,25,28,28,25,28,28,28,28,28,28,28,25,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,25,25,
-       28,28,25,28,25,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,25,25,25,25,25,25,25,25,25,25,25,25,
-       /* Page 34, 0 indirect uses */
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       /* Page 35, 0 indirect uses */
-       28,28,28,28,28,28,28,28,25,25,25,25,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       25,25,28,28,28,28,28,28,28,20,21,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,25,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,25,25,25,25,25,
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       25,25,25,25,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,25,25,25,25,
-       25,25,28,28,28,28,28,28,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       /* Page 36, 0 indirect uses */
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       28,28,28,28,28,28,28,28,28,28,28,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-       10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-       10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-       10,10,10,10,10,10,10,10,10,10,10,10,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,10,10,10,10,10,10,
-       10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-       /* Page 37, 0 indirect uses */
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,25,28,28,28,28,28,28,28,28,
-       28,25,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,25,25,25,25,25,25,25,25,
-       /* Page 38, 0 indirect uses */
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,25,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,29,29,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,29,29,29,
-       28,28,28,28,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       /* Page 39, 0 indirect uses */
-       29,28,28,28,28,29,28,28,28,28,29,29,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,29,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,29,28,29,28,
-       28,28,28,29,29,29,28,29,28,28,28,28,28,28,28,29,
-       29,28,28,28,28,28,28,28,20,21,20,21,20,21,20,21,
-       20,21,20,21,20,21,10,10,10,10,10,10,10,10,10,10,
-       10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-       10,10,10,10,28,29,29,29,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       29,28,28,28,28,28,28,28,28,28,28,28,28,28,28,29,
-       25,25,25,25,25,20,21,25,25,25,25,29,25,29,29,29,
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       25,25,25,25,25,25,20,21,20,21,20,21,20,21,20,21,
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       /* Page 40, 0 indirect uses */
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       /* Page 41, 0 indirect uses */
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       25,25,25,20,21,20,21,20,21,20,21,20,21,20,21,20,
-       21,20,21,20,21,20,21,20,21,25,25,25,25,25,25,25,
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       25,25,25,25,25,25,25,25,20,21,20,21,25,25,25,25,
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       25,25,25,25,25,25,25,25,25,25,25,25,20,21,25,25,
-       /* Page 42, 0 indirect uses */
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       /* Page 43, 0 indirect uses */
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
-       25,25,25,25,25,28,28,25,25,25,25,25,25,29,29,29,
-       28,28,28,28,28,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       /* Page 44, 0 indirect uses */
-       0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-       0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-       0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29,
-       1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-       1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-       1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,29,
-       0,1,0,0,0,1,1,0,1,0,1,0,1,0,0,0,
-       29,1,0,1,1,0,1,1,1,1,1,1,1,3,29,29,
-       0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-       0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-       0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-       0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-       0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-       0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-       0,1,0,1,1,28,28,28,28,28,28,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,24,24,24,24,10,24,24,
-       /* Page 45, 0 indirect uses */
-       1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-       1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-       1,1,1,1,1,1,29,29,29,29,29,29,29,29,29,29,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,29,29,29,29,29,29,29,29,29,3,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,29,29,29,29,29,29,29,29,29,
-       4,4,4,4,4,4,4,29,4,4,4,4,4,4,4,29,
-       4,4,4,4,4,4,4,29,4,4,4,4,4,4,4,29,
-       4,4,4,4,4,4,4,29,4,4,4,4,4,4,4,29,
-       4,4,4,4,4,4,4,29,4,4,4,4,4,4,4,29,
-       5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-       5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-       /* Page 46, 0 indirect uses */
-       24,24,22,23,22,23,24,24,24,22,23,24,22,23,24,24,
-       24,24,24,24,24,24,24,19,24,24,19,24,22,23,24,24,
-       22,23,20,21,20,21,20,21,20,21,24,24,24,24,24,3,
-       24,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,29,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,29,29,29,29,29,29,29,29,29,29,29,29,
-       /* Page 47, 0 indirect uses */
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       28,28,28,28,28,28,28,28,28,28,28,28,29,29,29,29,
-       /* Page 48, 0 indirect uses */
-       11,24,24,24,28,3,4,9,20,21,20,21,20,21,20,21,
-       20,21,28,28,20,21,20,21,20,21,20,21,19,20,21,21,
-       28,9,9,9,9,9,9,9,9,9,5,5,5,5,5,5,
-       19,3,3,3,3,3,28,28,9,9,9,3,4,24,28,28,
-       29,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,29,29,5,5,27,27,3,3,4,
-       19,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,24,3,3,3,4,
-       /* Page 49, 0 indirect uses */
-       29,29,29,29,29,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,29,29,
-       29,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,29,
-       28,28,10,10,10,10,28,28,28,28,28,28,28,28,28,28,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,29,29,29,29,29,29,29,29,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,29,29,29,29,29,29,29,29,29,29,29,29,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 50, 0 indirect uses */
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,29,
-       10,10,10,10,10,10,10,10,10,10,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,29,29,29,29,29,29,29,29,29,29,29,29,
-       28,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       10,10,10,10,10,10,10,10,10,10,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,29,
-       /* Page 51, 0 indirect uses */
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       /* Page 52, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 53, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 54, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 55, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 56, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 57, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 58, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 59, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 60, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 61, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 62, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 63, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 64, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 65, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 66, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 67, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 68, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 69, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 70, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 71, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 72, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 73, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 74, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 75, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 76, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 77, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,29,29,29,29,29,29,29,29,29,29,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       /* Page 78, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 79, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 80, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 81, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 82, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 83, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 84, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 85, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 86, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 87, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 88, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 89, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 90, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 91, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 92, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 93, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 94, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 95, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 96, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 97, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 98, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 99, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 100, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 101, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 102, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 103, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 104, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 105, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 106, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 107, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 108, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 109, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 110, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 111, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 112, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 113, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 114, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 115, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 116, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 117, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 118, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 119, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 120, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 121, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 122, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 123, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 124, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 125, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 126, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 127, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 128, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 129, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 130, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 131, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 132, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 133, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 134, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 135, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 136, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 137, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 138, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 139, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 140, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 141, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 142, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 143, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 144, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 145, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 146, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 147, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 148, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 149, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 150, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 151, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 152, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 153, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 154, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 155, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 156, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 157, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 158, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 159, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       /* Page 160, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,3,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 161, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 162, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 163, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 164, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,29,29,29,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       /* Page 165, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 166, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,3,24,24,24,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       8,8,8,8,8,8,8,8,8,8,4,4,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-       0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-       29,29,0,1,0,1,0,1,0,1,0,1,0,1,4,5,
-       7,7,7,24,29,29,29,29,29,29,29,29,5,5,24,3,
-       0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-       0,1,0,1,0,1,0,1,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       /* Page 167, 0 indirect uses */
-       27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,
-       27,27,27,27,27,27,27,3,3,3,3,3,3,3,3,3,
-       27,27,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-       1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-       0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-       0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-       0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,
-       3,1,1,1,1,1,1,1,1,0,1,0,1,0,0,1,
-       0,1,0,1,0,1,0,1,3,27,27,0,1,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,4,4,4,4,4,
-       /* Page 168, 0 indirect uses */
-       4,4,5,4,4,4,5,4,4,4,4,5,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,6,6,5,5,6,28,28,28,28,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,24,24,24,24,29,29,29,29,29,29,29,29,
-       6,6,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,6,6,6,6,6,6,6,6,6,6,6,6,
-       6,6,6,6,5,29,29,29,29,29,29,29,29,29,24,24,
-       8,8,8,8,8,8,8,8,8,8,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       /* Page 169, 0 indirect uses */
-       8,8,8,8,8,8,8,8,8,8,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,5,5,5,5,5,5,5,5,24,24,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,
-       5,5,6,6,29,29,29,29,29,29,29,29,29,29,29,24,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       /* Page 170, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,6,
-       6,5,5,6,6,5,5,29,29,29,29,29,29,29,29,29,
-       4,4,4,5,4,4,4,4,4,4,4,4,5,6,29,29,
-       8,8,8,8,8,8,8,8,8,8,29,29,24,24,24,24,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       /* Page 171, 0 indirect uses */
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       /* Page 172, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 173, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 174, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 175, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 176, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 177, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 178, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 179, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 180, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 181, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 182, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 183, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 184, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 185, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 186, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 187, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 188, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 189, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 190, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 191, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 192, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 193, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 194, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 195, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 196, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 197, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 198, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 199, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 200, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 201, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 202, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 203, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 204, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 205, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 206, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 207, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 208, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 209, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 210, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 211, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 212, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 213, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 214, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 215, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       /* Page 216, 0 indirect uses */
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       /* Page 217, 0 indirect uses */
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       /* Page 218, 0 indirect uses */
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       /* Page 219, 0 indirect uses */
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       /* Page 220, 0 indirect uses */
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       /* Page 221, 0 indirect uses */
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       /* Page 222, 0 indirect uses */
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       /* Page 223, 0 indirect uses */
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-       /*
-        * Page 224, 510 indirect uses:
-        *      F0000-FFEFF (astral_index),
-        *      100000-10FEFF (astral_index)
-        */
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       /* Page 225, 0 indirect uses */
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       /* Page 226, 0 indirect uses */
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       /* Page 227, 0 indirect uses */
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       /* Page 228, 0 indirect uses */
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       /* Page 229, 0 indirect uses */
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       /* Page 230, 0 indirect uses */
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       /* Page 231, 0 indirect uses */
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       /* Page 232, 0 indirect uses */
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       /* Page 233, 0 indirect uses */
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       /* Page 234, 0 indirect uses */
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       /* Page 235, 0 indirect uses */
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       /* Page 236, 0 indirect uses */
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       /* Page 237, 0 indirect uses */
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       /* Page 238, 0 indirect uses */
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       /* Page 239, 0 indirect uses */
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       /* Page 240, 0 indirect uses */
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       /* Page 241, 0 indirect uses */
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       /* Page 242, 0 indirect uses */
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       /* Page 243, 0 indirect uses */
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       /* Page 244, 0 indirect uses */
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       /* Page 245, 0 indirect uses */
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       /* Page 246, 0 indirect uses */
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       /* Page 247, 0 indirect uses */
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       /* Page 248, 0 indirect uses */
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       /* Page 249, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 250, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,29,29,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,29,29,29,29,29,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       /* Page 251, 0 indirect uses */
-       1,1,1,1,1,1,1,29,29,29,29,29,29,29,29,29,
-       29,29,29,1,1,1,1,1,29,29,29,29,29,4,5,4,
-       4,4,4,4,4,4,4,4,4,25,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,29,4,4,4,4,4,29,4,29,
-       4,4,29,4,4,29,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 252, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       /* Page 253, 0 indirect uses */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,20,21,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       29,29,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       4,4,4,4,4,4,4,4,4,4,4,4,26,28,29,29,
-       /* Page 254, 0 indirect uses */
-       5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-       24,24,24,24,24,24,24,20,21,24,29,29,29,29,29,29,
-       5,5,5,5,5,5,5,29,29,29,29,29,29,29,29,29,
-       24,19,19,18,18,20,21,20,21,20,21,20,21,20,21,20,
-       21,20,21,20,21,24,24,20,21,24,24,24,24,18,18,18,
-       24,24,24,29,24,24,24,24,19,20,21,20,21,20,21,24,
-       24,24,25,19,25,25,25,29,24,26,24,24,29,29,29,29,
-       4,4,4,4,4,29,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,29,29,15,
-       /* Page 255, 0 indirect uses */
-       29,24,24,24,26,24,24,24,20,21,24,25,24,19,24,24,
-       8,8,8,8,8,8,8,8,8,8,24,24,25,25,25,24,
-       24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-       0,0,0,0,0,0,0,0,0,0,0,20,24,21,27,18,
-       27,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-       1,1,1,1,1,1,1,1,1,1,1,20,25,21,25,20,
-       21,24,20,21,24,24,4,4,4,4,4,4,4,4,4,4,
-       3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,29,
-       29,29,4,4,4,4,4,4,29,29,4,4,4,4,4,4,
-       29,29,4,4,4,4,4,4,29,29,4,4,4,29,29,29,
-       26,26,25,27,28,26,26,29,28,25,25,25,25,28,28,29,
-       29,29,29,29,29,29,29,29,29,15,15,15,28,28,29,29
-#ifndef DISABLE_ASTRAL
-       ,
-       /* Page 256, 1 indirect use: 10000-100FF (astral_index) */
-       4,4,4,4,4,4,4,4,4,4,4,4,29,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,29,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,29,4,4,29,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,29,29,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,29,29,29,29,29,
-       /* Page 257, 1 indirect use: 10100-101FF (astral_index) */
-       24,24,28,29,29,29,29,10,10,10,10,10,10,10,10,10,
-       10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-       10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-       10,10,10,10,29,29,29,28,28,28,28,28,28,28,28,28,
-       9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
-       9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
-       9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
-       9,9,9,9,9,10,10,10,10,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,10,29,29,29,29,29,
-       28,28,28,28,28,28,28,28,28,28,28,28,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,5,29,29,
-       /* Page 258, 1 indirect use: 10200-102FF (astral_index) */
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,29,29,29,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       /* Page 259, 1 indirect use: 10300-103FF (astral_index) */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,29,
-       10,10,10,10,29,29,29,29,29,29,29,29,29,29,29,29,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,9,4,4,4,4,4,4,4,4,9,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,29,24,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,29,29,29,29,4,4,4,4,4,4,4,4,
-       24,9,9,9,9,9,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       /* Page 260, 1 indirect use: 10400-104FF (astral_index) */
-       0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-       0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-       0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,
-       1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-       1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,29,29,
-       8,8,8,8,8,8,8,8,8,8,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       /* Page 261, 1 indirect use: 10800-108FF (astral_index) */
-       4,4,4,4,4,4,29,29,4,29,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,29,4,4,29,29,29,4,29,29,4,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       /* Page 262, 1 indirect use: 10900-109FF (astral_index) */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,10,10,10,10,29,29,29,29,29,24,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,29,29,29,29,29,24,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       /* Page 263, 1 indirect use: 10A00-10AFF (astral_index) */
-       4,5,5,5,29,5,5,29,29,29,29,29,5,5,5,5,
-       4,4,4,4,29,4,4,4,29,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,29,29,29,29,5,5,5,29,29,29,29,5,
-       10,10,10,10,10,10,10,10,29,29,29,29,29,29,29,29,
-       24,24,24,24,24,24,24,24,24,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       /* Page 264, 1 indirect use: 12300-123FF (astral_index) */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       /* Page 265, 1 indirect use: 12400-124FF (astral_index) */
-       9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
-       9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
-       9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
-       9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
-       9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
-       9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
-       9,9,9,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       24,24,24,24,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       /* Page 266, 1 indirect use: 1D000-1D0FF (astral_index) */
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,29,29,29,29,29,29,29,29,29,29,
-       /* Page 267, 1 indirect use: 1D100-1D1FF (astral_index) */
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,29,29,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,6,6,5,5,5,28,28,28,6,6,6,
-       6,6,6,15,15,15,15,15,15,15,15,5,5,5,5,5,
-       5,5,5,28,28,5,5,5,5,5,5,5,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,5,5,5,5,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       /* Page 268, 1 indirect use: 1D200-1D2FF (astral_index) */
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,5,5,5,28,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       /* Page 269, 1 indirect use: 1D300-1D3FF (astral_index) */
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,29,29,29,29,29,29,29,29,29,
-       10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-       10,10,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       /* Page 270, 1 indirect use: 1D400-1D4FF (astral_index) */
-       0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-       0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,
-       1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-       1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,
-       0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,
-       1,1,1,1,1,29,1,1,1,1,1,1,1,1,1,1,
-       1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,
-       0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-       0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-       1,1,1,1,1,1,1,1,1,1,1,1,0,29,0,0,
-       29,29,0,29,29,0,0,29,29,0,0,0,0,29,0,0,
-       0,0,0,0,0,0,1,1,1,1,29,1,29,1,1,1,
-       1,1,1,1,29,1,1,1,1,1,1,1,1,1,1,1,
-       0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-       0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,
-       1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-       /* Page 271, 1 indirect use: 1D500-1D5FF (astral_index) */
-       1,1,1,1,0,0,29,0,0,0,0,29,29,0,0,0,
-       0,0,0,0,0,29,0,0,0,0,0,0,0,29,1,1,
-       1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-       1,1,1,1,1,1,1,1,0,0,29,0,0,0,0,29,
-       0,0,0,0,0,29,0,29,29,29,0,0,0,0,0,0,
-       0,29,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-       1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,
-       0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-       0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,
-       1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-       0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-       0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,
-       1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-       1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,
-       0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,
-       1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-       /* Page 272, 1 indirect use: 1D600-1D6FF (astral_index) */
-       1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,
-       0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-       0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-       1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,
-       0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-       0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,
-       1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-       0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-       0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,
-       1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-       1,1,1,1,1,1,29,29,0,0,0,0,0,0,0,0,
-       0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-       0,25,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-       1,1,1,1,1,1,1,1,1,1,1,25,1,1,1,1,
-       1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-       0,0,0,0,0,0,0,0,0,0,0,25,1,1,1,1,
-       /* Page 273, 1 indirect use: 1D700-1D7FF (astral_index) */
-       1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-       1,1,1,1,1,25,1,1,1,1,1,1,0,0,0,0,
-       0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-       0,0,0,0,0,25,1,1,1,1,1,1,1,1,1,1,
-       1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,25,
-       1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,
-       0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25,
-       1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-       1,1,1,1,1,1,1,1,1,25,1,1,1,1,1,1,
-       0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-       0,0,0,0,0,0,0,0,0,25,1,1,1,1,1,1,
-       1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-       1,1,1,25,1,1,1,1,1,1,0,1,29,29,8,8,
-       8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
-       8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
-       8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
-       /* Page 274, 1 indirect use: 1F000-1F0FF (astral_index) */
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,29,29,29,29,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
-       28,28,28,28,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       /* Page 275, 1 indirect use: 2A600-2A6FF (astral_index) */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       /* Page 276, 1 indirect use: 2FA00-2FAFF (astral_index) */
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-       4,4,4,4,4,4,4,4,4,4,4,4,4,4,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       /* Page 277, 1 indirect use: E0000-E00FF (astral_index) */
-       29,15,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,
-       15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,
-       15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,
-       15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,
-       15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,
-       15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       /* Page 278, 1 indirect use: E0100-E01FF (astral_index) */
-       5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-       5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-       5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-       5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-       5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-       5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-       5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-       5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-       5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-       5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-       5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-       5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-       5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-       5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-       5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-       29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
-       /*
-        * Page 279, 2 indirect uses:
-        *      FFF00-FFFFF (astral_index),
-        *      10FF00-10FFFF (astral_index)
-        */
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-       17,17,17,17,17,17,17,17,17,17,17,17,17,17,29,29
-#endif
-};
-
-#ifndef DISABLE_ASTRAL
-static const guint16 CategoryData_v4_astral_index [4096] = 
-{
-       /* 10000-100FF: page 256 */
-       0x100,
-       /* 10100-101FF: page 257 */
-       0x101,
-       /* 10200-102FF: page 258 */
-       0x102,
-       /* 10300-103FF: page 259 */
-       0x103,
-       /* 10400-104FF: page 260 */
-       0x104,
-       /* 10500-105FF: page 8 */
-       0x8,
-       /* 10600-106FF: page 8 */
-       0x8,
-       /* 10700-107FF: page 8 */
-       0x8,
-       /* 10800-108FF: page 261 */
-       0x105,
-       /* 10900-109FF: page 262 */
-       0x106,
-       /* 10A00-10AFF: page 263 */
-       0x107,
-       /* 10B00-10BFF: page 8 */
-       0x8,
-       /* 10C00-10CFF: page 8 */
-       0x8,
-       /* 10D00-10DFF: page 8 */
-       0x8,
-       /* 10E00-10EFF: page 8 */
-       0x8,
-       /* 10F00-10FFF: page 8 */
-       0x8,
-       /* 11000-110FF: page 8 */
-       0x8,
-       /* 11100-111FF: page 8 */
-       0x8,
-       /* 11200-112FF: page 8 */
-       0x8,
-       /* 11300-113FF: page 8 */
-       0x8,
-       /* 11400-114FF: page 8 */
-       0x8,
-       /* 11500-115FF: page 8 */
-       0x8,
-       /* 11600-116FF: page 8 */
-       0x8,
-       /* 11700-117FF: page 8 */
-       0x8,
-       /* 11800-118FF: page 8 */
-       0x8,
-       /* 11900-119FF: page 8 */
-       0x8,
-       /* 11A00-11AFF: page 8 */
-       0x8,
-       /* 11B00-11BFF: page 8 */
-       0x8,
-       /* 11C00-11CFF: page 8 */
-       0x8,
-       /* 11D00-11DFF: page 8 */
-       0x8,
-       /* 11E00-11EFF: page 8 */
-       0x8,
-       /* 11F00-11FFF: page 8 */
-       0x8,
-       /* 12000-120FF: page 21 */
-       0x15,
-       /* 12100-121FF: page 21 */
-       0x15,
-       /* 12200-122FF: page 21 */
-       0x15,
-       /* 12300-123FF: page 264 */
-       0x108,
-       /* 12400-124FF: page 265 */
-       0x109,
-       /* 12500-125FF: page 8 */
-       0x8,
-       /* 12600-126FF: page 8 */
-       0x8,
-       /* 12700-127FF: page 8 */
-       0x8,
-       /* 12800-128FF: page 8 */
-       0x8,
-       /* 12900-129FF: page 8 */
-       0x8,
-       /* 12A00-12AFF: page 8 */
-       0x8,
-       /* 12B00-12BFF: page 8 */
-       0x8,
-       /* 12C00-12CFF: page 8 */
-       0x8,
-       /* 12D00-12DFF: page 8 */
-       0x8,
-       /* 12E00-12EFF: page 8 */
-       0x8,
-       /* 12F00-12FFF: page 8 */
-       0x8,
-       /* 13000-130FF: page 8 */
-       0x8,
-       /* 13100-131FF: page 8 */
-       0x8,
-       /* 13200-132FF: page 8 */
-       0x8,
-       /* 13300-133FF: page 8 */
-       0x8,
-       /* 13400-134FF: page 8 */
-       0x8,
-       /* 13500-135FF: page 8 */
-       0x8,
-       /* 13600-136FF: page 8 */
-       0x8,
-       /* 13700-137FF: page 8 */
-       0x8,
-       /* 13800-138FF: page 8 */
-       0x8,
-       /* 13900-139FF: page 8 */
-       0x8,
-       /* 13A00-13AFF: page 8 */
-       0x8,
-       /* 13B00-13BFF: page 8 */
-       0x8,
-       /* 13C00-13CFF: page 8 */
-       0x8,
-       /* 13D00-13DFF: page 8 */
-       0x8,
-       /* 13E00-13EFF: page 8 */
-       0x8,
-       /* 13F00-13FFF: page 8 */
-       0x8,
-       /* 14000-140FF: page 8 */
-       0x8,
-       /* 14100-141FF: page 8 */
-       0x8,
-       /* 14200-142FF: page 8 */
-       0x8,
-       /* 14300-143FF: page 8 */
-       0x8,
-       /* 14400-144FF: page 8 */
-       0x8,
-       /* 14500-145FF: page 8 */
-       0x8,
-       /* 14600-146FF: page 8 */
-       0x8,
-       /* 14700-147FF: page 8 */
-       0x8,
-       /* 14800-148FF: page 8 */
-       0x8,
-       /* 14900-149FF: page 8 */
-       0x8,
-       /* 14A00-14AFF: page 8 */
-       0x8,
-       /* 14B00-14BFF: page 8 */
-       0x8,
-       /* 14C00-14CFF: page 8 */
-       0x8,
-       /* 14D00-14DFF: page 8 */
-       0x8,
-       /* 14E00-14EFF: page 8 */
-       0x8,
-       /* 14F00-14FFF: page 8 */
-       0x8,
-       /* 15000-150FF: page 8 */
-       0x8,
-       /* 15100-151FF: page 8 */
-       0x8,
-       /* 15200-152FF: page 8 */
-       0x8,
-       /* 15300-153FF: page 8 */
-       0x8,
-       /* 15400-154FF: page 8 */
-       0x8,
-       /* 15500-155FF: page 8 */
-       0x8,
-       /* 15600-156FF: page 8 */
-       0x8,
-       /* 15700-157FF: page 8 */
-       0x8,
-       /* 15800-158FF: page 8 */
-       0x8,
-       /* 15900-159FF: page 8 */
-       0x8,
-       /* 15A00-15AFF: page 8 */
-       0x8,
-       /* 15B00-15BFF: page 8 */
-       0x8,
-       /* 15C00-15CFF: page 8 */
-       0x8,
-       /* 15D00-15DFF: page 8 */
-       0x8,
-       /* 15E00-15EFF: page 8 */
-       0x8,
-       /* 15F00-15FFF: page 8 */
-       0x8,
-       /* 16000-160FF: page 8 */
-       0x8,
-       /* 16100-161FF: page 8 */
-       0x8,
-       /* 16200-162FF: page 8 */
-       0x8,
-       /* 16300-163FF: page 8 */
-       0x8,
-       /* 16400-164FF: page 8 */
-       0x8,
-       /* 16500-165FF: page 8 */
-       0x8,
-       /* 16600-166FF: page 8 */
-       0x8,
-       /* 16700-167FF: page 8 */
-       0x8,
-       /* 16800-168FF: page 8 */
-       0x8,
-       /* 16900-169FF: page 8 */
-       0x8,
-       /* 16A00-16AFF: page 8 */
-       0x8,
-       /* 16B00-16BFF: page 8 */
-       0x8,
-       /* 16C00-16CFF: page 8 */
-       0x8,
-       /* 16D00-16DFF: page 8 */
-       0x8,
-       /* 16E00-16EFF: page 8 */
-       0x8,
-       /* 16F00-16FFF: page 8 */
-       0x8,
-       /* 17000-170FF: page 8 */
-       0x8,
-       /* 17100-171FF: page 8 */
-       0x8,
-       /* 17200-172FF: page 8 */
-       0x8,
-       /* 17300-173FF: page 8 */
-       0x8,
-       /* 17400-174FF: page 8 */
-       0x8,
-       /* 17500-175FF: page 8 */
-       0x8,
-       /* 17600-176FF: page 8 */
-       0x8,
-       /* 17700-177FF: page 8 */
-       0x8,
-       /* 17800-178FF: page 8 */
-       0x8,
-       /* 17900-179FF: page 8 */
-       0x8,
-       /* 17A00-17AFF: page 8 */
-       0x8,
-       /* 17B00-17BFF: page 8 */
-       0x8,
-       /* 17C00-17CFF: page 8 */
-       0x8,
-       /* 17D00-17DFF: page 8 */
-       0x8,
-       /* 17E00-17EFF: page 8 */
-       0x8,
-       /* 17F00-17FFF: page 8 */
-       0x8,
-       /* 18000-180FF: page 8 */
-       0x8,
-       /* 18100-181FF: page 8 */
-       0x8,
-       /* 18200-182FF: page 8 */
-       0x8,
-       /* 18300-183FF: page 8 */
-       0x8,
-       /* 18400-184FF: page 8 */
-       0x8,
-       /* 18500-185FF: page 8 */
-       0x8,
-       /* 18600-186FF: page 8 */
-       0x8,
-       /* 18700-187FF: page 8 */
-       0x8,
-       /* 18800-188FF: page 8 */
-       0x8,
-       /* 18900-189FF: page 8 */
-       0x8,
-       /* 18A00-18AFF: page 8 */
-       0x8,
-       /* 18B00-18BFF: page 8 */
-       0x8,
-       /* 18C00-18CFF: page 8 */
-       0x8,
-       /* 18D00-18DFF: page 8 */
-       0x8,
-       /* 18E00-18EFF: page 8 */
-       0x8,
-       /* 18F00-18FFF: page 8 */
-       0x8,
-       /* 19000-190FF: page 8 */
-       0x8,
-       /* 19100-191FF: page 8 */
-       0x8,
-       /* 19200-192FF: page 8 */
-       0x8,
-       /* 19300-193FF: page 8 */
-       0x8,
-       /* 19400-194FF: page 8 */
-       0x8,
-       /* 19500-195FF: page 8 */
-       0x8,
-       /* 19600-196FF: page 8 */
-       0x8,
-       /* 19700-197FF: page 8 */
-       0x8,
-       /* 19800-198FF: page 8 */
-       0x8,
-       /* 19900-199FF: page 8 */
-       0x8,
-       /* 19A00-19AFF: page 8 */
-       0x8,
-       /* 19B00-19BFF: page 8 */
-       0x8,
-       /* 19C00-19CFF: page 8 */
-       0x8,
-       /* 19D00-19DFF: page 8 */
-       0x8,
-       /* 19E00-19EFF: page 8 */
-       0x8,
-       /* 19F00-19FFF: page 8 */
-       0x8,
-       /* 1A000-1A0FF: page 8 */
-       0x8,
-       /* 1A100-1A1FF: page 8 */
-       0x8,
-       /* 1A200-1A2FF: page 8 */
-       0x8,
-       /* 1A300-1A3FF: page 8 */
-       0x8,
-       /* 1A400-1A4FF: page 8 */
-       0x8,
-       /* 1A500-1A5FF: page 8 */
-       0x8,
-       /* 1A600-1A6FF: page 8 */
-       0x8,
-       /* 1A700-1A7FF: page 8 */
-       0x8,
-       /* 1A800-1A8FF: page 8 */
-       0x8,
-       /* 1A900-1A9FF: page 8 */
-       0x8,
-       /* 1AA00-1AAFF: page 8 */
-       0x8,
-       /* 1AB00-1ABFF: page 8 */
-       0x8,
-       /* 1AC00-1ACFF: page 8 */
-       0x8,
-       /* 1AD00-1ADFF: page 8 */
-       0x8,
-       /* 1AE00-1AEFF: page 8 */
-       0x8,
-       /* 1AF00-1AFFF: page 8 */
-       0x8,
-       /* 1B000-1B0FF: page 8 */
-       0x8,
-       /* 1B100-1B1FF: page 8 */
-       0x8,
-       /* 1B200-1B2FF: page 8 */
-       0x8,
-       /* 1B300-1B3FF: page 8 */
-       0x8,
-       /* 1B400-1B4FF: page 8 */
-       0x8,
-       /* 1B500-1B5FF: page 8 */
-       0x8,
-       /* 1B600-1B6FF: page 8 */
-       0x8,
-       /* 1B700-1B7FF: page 8 */
-       0x8,
-       /* 1B800-1B8FF: page 8 */
-       0x8,
-       /* 1B900-1B9FF: page 8 */
-       0x8,
-       /* 1BA00-1BAFF: page 8 */
-       0x8,
-       /* 1BB00-1BBFF: page 8 */
-       0x8,
-       /* 1BC00-1BCFF: page 8 */
-       0x8,
-       /* 1BD00-1BDFF: page 8 */
-       0x8,
-       /* 1BE00-1BEFF: page 8 */
-       0x8,
-       /* 1BF00-1BFFF: page 8 */
-       0x8,
-       /* 1C000-1C0FF: page 8 */
-       0x8,
-       /* 1C100-1C1FF: page 8 */
-       0x8,
-       /* 1C200-1C2FF: page 8 */
-       0x8,
-       /* 1C300-1C3FF: page 8 */
-       0x8,
-       /* 1C400-1C4FF: page 8 */
-       0x8,
-       /* 1C500-1C5FF: page 8 */
-       0x8,
-       /* 1C600-1C6FF: page 8 */
-       0x8,
-       /* 1C700-1C7FF: page 8 */
-       0x8,
-       /* 1C800-1C8FF: page 8 */
-       0x8,
-       /* 1C900-1C9FF: page 8 */
-       0x8,
-       /* 1CA00-1CAFF: page 8 */
-       0x8,
-       /* 1CB00-1CBFF: page 8 */
-       0x8,
-       /* 1CC00-1CCFF: page 8 */
-       0x8,
-       /* 1CD00-1CDFF: page 8 */
-       0x8,
-       /* 1CE00-1CEFF: page 8 */
-       0x8,
-       /* 1CF00-1CFFF: page 8 */
-       0x8,
-       /* 1D000-1D0FF: page 266 */
-       0x10A,
-       /* 1D100-1D1FF: page 267 */
-       0x10B,
-       /* 1D200-1D2FF: page 268 */
-       0x10C,
-       /* 1D300-1D3FF: page 269 */
-       0x10D,
-       /* 1D400-1D4FF: page 270 */
-       0x10E,
-       /* 1D500-1D5FF: page 271 */
-       0x10F,
-       /* 1D600-1D6FF: page 272 */
-       0x110,
-       /* 1D700-1D7FF: page 273 */
-       0x111,
-       /* 1D800-1D8FF: page 8 */
-       0x8,
-       /* 1D900-1D9FF: page 8 */
-       0x8,
-       /* 1DA00-1DAFF: page 8 */
-       0x8,
-       /* 1DB00-1DBFF: page 8 */
-       0x8,
-       /* 1DC00-1DCFF: page 8 */
-       0x8,
-       /* 1DD00-1DDFF: page 8 */
-       0x8,
-       /* 1DE00-1DEFF: page 8 */
-       0x8,
-       /* 1DF00-1DFFF: page 8 */
-       0x8,
-       /* 1E000-1E0FF: page 8 */
-       0x8,
-       /* 1E100-1E1FF: page 8 */
-       0x8,
-       /* 1E200-1E2FF: page 8 */
-       0x8,
-       /* 1E300-1E3FF: page 8 */
-       0x8,
-       /* 1E400-1E4FF: page 8 */
-       0x8,
-       /* 1E500-1E5FF: page 8 */
-       0x8,
-       /* 1E600-1E6FF: page 8 */
-       0x8,
-       /* 1E700-1E7FF: page 8 */
-       0x8,
-       /* 1E800-1E8FF: page 8 */
-       0x8,
-       /* 1E900-1E9FF: page 8 */
-       0x8,
-       /* 1EA00-1EAFF: page 8 */
-       0x8,
-       /* 1EB00-1EBFF: page 8 */
-       0x8,
-       /* 1EC00-1ECFF: page 8 */
-       0x8,
-       /* 1ED00-1EDFF: page 8 */
-       0x8,
-       /* 1EE00-1EEFF: page 8 */
-       0x8,
-       /* 1EF00-1EFFF: page 8 */
-       0x8,
-       /* 1F000-1F0FF: page 274 */
-       0x112,
-       /* 1F100-1F1FF: page 8 */
-       0x8,
-       /* 1F200-1F2FF: page 8 */
-       0x8,
-       /* 1F300-1F3FF: page 8 */
-       0x8,
-       /* 1F400-1F4FF: page 8 */
-       0x8,
-       /* 1F500-1F5FF: page 8 */
-       0x8,
-       /* 1F600-1F6FF: page 8 */
-       0x8,
-       /* 1F700-1F7FF: page 8 */
-       0x8,
-       /* 1F800-1F8FF: page 8 */
-       0x8,
-       /* 1F900-1F9FF: page 8 */
-       0x8,
-       /* 1FA00-1FAFF: page 8 */
-       0x8,
-       /* 1FB00-1FBFF: page 8 */
-       0x8,
-       /* 1FC00-1FCFF: page 8 */
-       0x8,
-       /* 1FD00-1FDFF: page 8 */
-       0x8,
-       /* 1FE00-1FEFF: page 8 */
-       0x8,
-       /* 1FF00-1FFFF: page 8 */
-       0x8,
-       /* 20000-200FF: page 21 */
-       0x15,
-       /* 20100-201FF: page 21 */
-       0x15,
-       /* 20200-202FF: page 21 */
-       0x15,
-       /* 20300-203FF: page 21 */
-       0x15,
-       /* 20400-204FF: page 21 */
-       0x15,
-       /* 20500-205FF: page 21 */
-       0x15,
-       /* 20600-206FF: page 21 */
-       0x15,
-       /* 20700-207FF: page 21 */
-       0x15,
-       /* 20800-208FF: page 21 */
-       0x15,
-       /* 20900-209FF: page 21 */
-       0x15,
-       /* 20A00-20AFF: page 21 */
-       0x15,
-       /* 20B00-20BFF: page 21 */
-       0x15,
-       /* 20C00-20CFF: page 21 */
-       0x15,
-       /* 20D00-20DFF: page 21 */
-       0x15,
-       /* 20E00-20EFF: page 21 */
-       0x15,
-       /* 20F00-20FFF: page 21 */
-       0x15,
-       /* 21000-210FF: page 21 */
-       0x15,
-       /* 21100-211FF: page 21 */
-       0x15,
-       /* 21200-212FF: page 21 */
-       0x15,
-       /* 21300-213FF: page 21 */
-       0x15,
-       /* 21400-214FF: page 21 */
-       0x15,
-       /* 21500-215FF: page 21 */
-       0x15,
-       /* 21600-216FF: page 21 */
-       0x15,
-       /* 21700-217FF: page 21 */
-       0x15,
-       /* 21800-218FF: page 21 */
-       0x15,
-       /* 21900-219FF: page 21 */
-       0x15,
-       /* 21A00-21AFF: page 21 */
-       0x15,
-       /* 21B00-21BFF: page 21 */
-       0x15,
-       /* 21C00-21CFF: page 21 */
-       0x15,
-       /* 21D00-21DFF: page 21 */
-       0x15,
-       /* 21E00-21EFF: page 21 */
-       0x15,
-       /* 21F00-21FFF: page 21 */
-       0x15,
-       /* 22000-220FF: page 21 */
-       0x15,
-       /* 22100-221FF: page 21 */
-       0x15,
-       /* 22200-222FF: page 21 */
-       0x15,
-       /* 22300-223FF: page 21 */
-       0x15,
-       /* 22400-224FF: page 21 */
-       0x15,
-       /* 22500-225FF: page 21 */
-       0x15,
-       /* 22600-226FF: page 21 */
-       0x15,
-       /* 22700-227FF: page 21 */
-       0x15,
-       /* 22800-228FF: page 21 */
-       0x15,
-       /* 22900-229FF: page 21 */
-       0x15,
-       /* 22A00-22AFF: page 21 */
-       0x15,
-       /* 22B00-22BFF: page 21 */
-       0x15,
-       /* 22C00-22CFF: page 21 */
-       0x15,
-       /* 22D00-22DFF: page 21 */
-       0x15,
-       /* 22E00-22EFF: page 21 */
-       0x15,
-       /* 22F00-22FFF: page 21 */
-       0x15,
-       /* 23000-230FF: page 21 */
-       0x15,
-       /* 23100-231FF: page 21 */
-       0x15,
-       /* 23200-232FF: page 21 */
-       0x15,
-       /* 23300-233FF: page 21 */
-       0x15,
-       /* 23400-234FF: page 21 */
-       0x15,
-       /* 23500-235FF: page 21 */
-       0x15,
-       /* 23600-236FF: page 21 */
-       0x15,
-       /* 23700-237FF: page 21 */
-       0x15,
-       /* 23800-238FF: page 21 */
-       0x15,
-       /* 23900-239FF: page 21 */
-       0x15,
-       /* 23A00-23AFF: page 21 */
-       0x15,
-       /* 23B00-23BFF: page 21 */
-       0x15,
-       /* 23C00-23CFF: page 21 */
-       0x15,
-       /* 23D00-23DFF: page 21 */
-       0x15,
-       /* 23E00-23EFF: page 21 */
-       0x15,
-       /* 23F00-23FFF: page 21 */
-       0x15,
-       /* 24000-240FF: page 21 */
-       0x15,
-       /* 24100-241FF: page 21 */
-       0x15,
-       /* 24200-242FF: page 21 */
-       0x15,
-       /* 24300-243FF: page 21 */
-       0x15,
-       /* 24400-244FF: page 21 */
-       0x15,
-       /* 24500-245FF: page 21 */
-       0x15,
-       /* 24600-246FF: page 21 */
-       0x15,
-       /* 24700-247FF: page 21 */
-       0x15,
-       /* 24800-248FF: page 21 */
-       0x15,
-       /* 24900-249FF: page 21 */
-       0x15,
-       /* 24A00-24AFF: page 21 */
-       0x15,
-       /* 24B00-24BFF: page 21 */
-       0x15,
-       /* 24C00-24CFF: page 21 */
-       0x15,
-       /* 24D00-24DFF: page 21 */
-       0x15,
-       /* 24E00-24EFF: page 21 */
-       0x15,
-       /* 24F00-24FFF: page 21 */
-       0x15,
-       /* 25000-250FF: page 21 */
-       0x15,
-       /* 25100-251FF: page 21 */
-       0x15,
-       /* 25200-252FF: page 21 */
-       0x15,
-       /* 25300-253FF: page 21 */
-       0x15,
-       /* 25400-254FF: page 21 */
-       0x15,
-       /* 25500-255FF: page 21 */
-       0x15,
-       /* 25600-256FF: page 21 */
-       0x15,
-       /* 25700-257FF: page 21 */
-       0x15,
-       /* 25800-258FF: page 21 */
-       0x15,
-       /* 25900-259FF: page 21 */
-       0x15,
-       /* 25A00-25AFF: page 21 */
-       0x15,
-       /* 25B00-25BFF: page 21 */
-       0x15,
-       /* 25C00-25CFF: page 21 */
-       0x15,
-       /* 25D00-25DFF: page 21 */
-       0x15,
-       /* 25E00-25EFF: page 21 */
-       0x15,
-       /* 25F00-25FFF: page 21 */
-       0x15,
-       /* 26000-260FF: page 21 */
-       0x15,
-       /* 26100-261FF: page 21 */
-       0x15,
-       /* 26200-262FF: page 21 */
-       0x15,
-       /* 26300-263FF: page 21 */
-       0x15,
-       /* 26400-264FF: page 21 */
-       0x15,
-       /* 26500-265FF: page 21 */
-       0x15,
-       /* 26600-266FF: page 21 */
-       0x15,
-       /* 26700-267FF: page 21 */
-       0x15,
-       /* 26800-268FF: page 21 */
-       0x15,
-       /* 26900-269FF: page 21 */
-       0x15,
-       /* 26A00-26AFF: page 21 */
-       0x15,
-       /* 26B00-26BFF: page 21 */
-       0x15,
-       /* 26C00-26CFF: page 21 */
-       0x15,
-       /* 26D00-26DFF: page 21 */
-       0x15,
-       /* 26E00-26EFF: page 21 */
-       0x15,
-       /* 26F00-26FFF: page 21 */
-       0x15,
-       /* 27000-270FF: page 21 */
-       0x15,
-       /* 27100-271FF: page 21 */
-       0x15,
-       /* 27200-272FF: page 21 */
-       0x15,
-       /* 27300-273FF: page 21 */
-       0x15,
-       /* 27400-274FF: page 21 */
-       0x15,
-       /* 27500-275FF: page 21 */
-       0x15,
-       /* 27600-276FF: page 21 */
-       0x15,
-       /* 27700-277FF: page 21 */
-       0x15,
-       /* 27800-278FF: page 21 */
-       0x15,
-       /* 27900-279FF: page 21 */
-       0x15,
-       /* 27A00-27AFF: page 21 */
-       0x15,
-       /* 27B00-27BFF: page 21 */
-       0x15,
-       /* 27C00-27CFF: page 21 */
-       0x15,
-       /* 27D00-27DFF: page 21 */
-       0x15,
-       /* 27E00-27EFF: page 21 */
-       0x15,
-       /* 27F00-27FFF: page 21 */
-       0x15,
-       /* 28000-280FF: page 21 */
-       0x15,
-       /* 28100-281FF: page 21 */
-       0x15,
-       /* 28200-282FF: page 21 */
-       0x15,
-       /* 28300-283FF: page 21 */
-       0x15,
-       /* 28400-284FF: page 21 */
-       0x15,
-       /* 28500-285FF: page 21 */
-       0x15,
-       /* 28600-286FF: page 21 */
-       0x15,
-       /* 28700-287FF: page 21 */
-       0x15,
-       /* 28800-288FF: page 21 */
-       0x15,
-       /* 28900-289FF: page 21 */
-       0x15,
-       /* 28A00-28AFF: page 21 */
-       0x15,
-       /* 28B00-28BFF: page 21 */
-       0x15,
-       /* 28C00-28CFF: page 21 */
-       0x15,
-       /* 28D00-28DFF: page 21 */
-       0x15,
-       /* 28E00-28EFF: page 21 */
-       0x15,
-       /* 28F00-28FFF: page 21 */
-       0x15,
-       /* 29000-290FF: page 21 */
-       0x15,
-       /* 29100-291FF: page 21 */
-       0x15,
-       /* 29200-292FF: page 21 */
-       0x15,
-       /* 29300-293FF: page 21 */
-       0x15,
-       /* 29400-294FF: page 21 */
-       0x15,
-       /* 29500-295FF: page 21 */
-       0x15,
-       /* 29600-296FF: page 21 */
-       0x15,
-       /* 29700-297FF: page 21 */
-       0x15,
-       /* 29800-298FF: page 21 */
-       0x15,
-       /* 29900-299FF: page 21 */
-       0x15,
-       /* 29A00-29AFF: page 21 */
-       0x15,
-       /* 29B00-29BFF: page 21 */
-       0x15,
-       /* 29C00-29CFF: page 21 */
-       0x15,
-       /* 29D00-29DFF: page 21 */
-       0x15,
-       /* 29E00-29EFF: page 21 */
-       0x15,
-       /* 29F00-29FFF: page 21 */
-       0x15,
-       /* 2A000-2A0FF: page 21 */
-       0x15,
-       /* 2A100-2A1FF: page 21 */
-       0x15,
-       /* 2A200-2A2FF: page 21 */
-       0x15,
-       /* 2A300-2A3FF: page 21 */
-       0x15,
-       /* 2A400-2A4FF: page 21 */
-       0x15,
-       /* 2A500-2A5FF: page 21 */
-       0x15,
-       /* 2A600-2A6FF: page 275 */
-       0x113,
-       /* 2A700-2A7FF: page 8 */
-       0x8,
-       /* 2A800-2A8FF: page 8 */
-       0x8,
-       /* 2A900-2A9FF: page 8 */
-       0x8,
-       /* 2AA00-2AAFF: page 8 */
-       0x8,
-       /* 2AB00-2ABFF: page 8 */
-       0x8,
-       /* 2AC00-2ACFF: page 8 */
-       0x8,
-       /* 2AD00-2ADFF: page 8 */
-       0x8,
-       /* 2AE00-2AEFF: page 8 */
-       0x8,
-       /* 2AF00-2AFFF: page 8 */
-       0x8,
-       /* 2B000-2B0FF: page 8 */
-       0x8,
-       /* 2B100-2B1FF: page 8 */
-       0x8,
-       /* 2B200-2B2FF: page 8 */
-       0x8,
-       /* 2B300-2B3FF: page 8 */
-       0x8,
-       /* 2B400-2B4FF: page 8 */
-       0x8,
-       /* 2B500-2B5FF: page 8 */
-       0x8,
-       /* 2B600-2B6FF: page 8 */
-       0x8,
-       /* 2B700-2B7FF: page 8 */
-       0x8,
-       /* 2B800-2B8FF: page 8 */
-       0x8,
-       /* 2B900-2B9FF: page 8 */
-       0x8,
-       /* 2BA00-2BAFF: page 8 */
-       0x8,
-       /* 2BB00-2BBFF: page 8 */
-       0x8,
-       /* 2BC00-2BCFF: page 8 */
-       0x8,
-       /* 2BD00-2BDFF: page 8 */
-       0x8,
-       /* 2BE00-2BEFF: page 8 */
-       0x8,
-       /* 2BF00-2BFFF: page 8 */
-       0x8,
-       /* 2C000-2C0FF: page 8 */
-       0x8,
-       /* 2C100-2C1FF: page 8 */
-       0x8,
-       /* 2C200-2C2FF: page 8 */
-       0x8,
-       /* 2C300-2C3FF: page 8 */
-       0x8,
-       /* 2C400-2C4FF: page 8 */
-       0x8,
-       /* 2C500-2C5FF: page 8 */
-       0x8,
-       /* 2C600-2C6FF: page 8 */
-       0x8,
-       /* 2C700-2C7FF: page 8 */
-       0x8,
-       /* 2C800-2C8FF: page 8 */
-       0x8,
-       /* 2C900-2C9FF: page 8 */
-       0x8,
-       /* 2CA00-2CAFF: page 8 */
-       0x8,
-       /* 2CB00-2CBFF: page 8 */
-       0x8,
-       /* 2CC00-2CCFF: page 8 */
-       0x8,
-       /* 2CD00-2CDFF: page 8 */
-       0x8,
-       /* 2CE00-2CEFF: page 8 */
-       0x8,
-       /* 2CF00-2CFFF: page 8 */
-       0x8,
-       /* 2D000-2D0FF: page 8 */
-       0x8,
-       /* 2D100-2D1FF: page 8 */
-       0x8,
-       /* 2D200-2D2FF: page 8 */
-       0x8,
-       /* 2D300-2D3FF: page 8 */
-       0x8,
-       /* 2D400-2D4FF: page 8 */
-       0x8,
-       /* 2D500-2D5FF: page 8 */
-       0x8,
-       /* 2D600-2D6FF: page 8 */
-       0x8,
-       /* 2D700-2D7FF: page 8 */
-       0x8,
-       /* 2D800-2D8FF: page 8 */
-       0x8,
-       /* 2D900-2D9FF: page 8 */
-       0x8,
-       /* 2DA00-2DAFF: page 8 */
-       0x8,
-       /* 2DB00-2DBFF: page 8 */
-       0x8,
-       /* 2DC00-2DCFF: page 8 */
-       0x8,
-       /* 2DD00-2DDFF: page 8 */
-       0x8,
-       /* 2DE00-2DEFF: page 8 */
-       0x8,
-       /* 2DF00-2DFFF: page 8 */
-       0x8,
-       /* 2E000-2E0FF: page 8 */
-       0x8,
-       /* 2E100-2E1FF: page 8 */
-       0x8,
-       /* 2E200-2E2FF: page 8 */
-       0x8,
-       /* 2E300-2E3FF: page 8 */
-       0x8,
-       /* 2E400-2E4FF: page 8 */
-       0x8,
-       /* 2E500-2E5FF: page 8 */
-       0x8,
-       /* 2E600-2E6FF: page 8 */
-       0x8,
-       /* 2E700-2E7FF: page 8 */
-       0x8,
-       /* 2E800-2E8FF: page 8 */
-       0x8,
-       /* 2E900-2E9FF: page 8 */
-       0x8,
-       /* 2EA00-2EAFF: page 8 */
-       0x8,
-       /* 2EB00-2EBFF: page 8 */
-       0x8,
-       /* 2EC00-2ECFF: page 8 */
-       0x8,
-       /* 2ED00-2EDFF: page 8 */
-       0x8,
-       /* 2EE00-2EEFF: page 8 */
-       0x8,
-       /* 2EF00-2EFFF: page 8 */
-       0x8,
-       /* 2F000-2F0FF: page 8 */
-       0x8,
-       /* 2F100-2F1FF: page 8 */
-       0x8,
-       /* 2F200-2F2FF: page 8 */
-       0x8,
-       /* 2F300-2F3FF: page 8 */
-       0x8,
-       /* 2F400-2F4FF: page 8 */
-       0x8,
-       /* 2F500-2F5FF: page 8 */
-       0x8,
-       /* 2F600-2F6FF: page 8 */
-       0x8,
-       /* 2F700-2F7FF: page 8 */
-       0x8,
-       /* 2F800-2F8FF: page 21 */
-       0x15,
-       /* 2F900-2F9FF: page 21 */
-       0x15,
-       /* 2FA00-2FAFF: page 276 */
-       0x114,
-       /* 2FB00-2FBFF: page 8 */
-       0x8,
-       /* 2FC00-2FCFF: page 8 */
-       0x8,
-       /* 2FD00-2FDFF: page 8 */
-       0x8,
-       /* 2FE00-2FEFF: page 8 */
-       0x8,
-       /* 2FF00-2FFFF: page 8 */
-       0x8,
-       /* 30000-300FF: page 8 */
-       0x8,
-       /* 30100-301FF: page 8 */
-       0x8,
-       /* 30200-302FF: page 8 */
-       0x8,
-       /* 30300-303FF: page 8 */
-       0x8,
-       /* 30400-304FF: page 8 */
-       0x8,
-       /* 30500-305FF: page 8 */
-       0x8,
-       /* 30600-306FF: page 8 */
-       0x8,
-       /* 30700-307FF: page 8 */
-       0x8,
-       /* 30800-308FF: page 8 */
-       0x8,
-       /* 30900-309FF: page 8 */
-       0x8,
-       /* 30A00-30AFF: page 8 */
-       0x8,
-       /* 30B00-30BFF: page 8 */
-       0x8,
-       /* 30C00-30CFF: page 8 */
-       0x8,
-       /* 30D00-30DFF: page 8 */
-       0x8,
-       /* 30E00-30EFF: page 8 */
-       0x8,
-       /* 30F00-30FFF: page 8 */
-       0x8,
-       /* 31000-310FF: page 8 */
-       0x8,
-       /* 31100-311FF: page 8 */
-       0x8,
-       /* 31200-312FF: page 8 */
-       0x8,
-       /* 31300-313FF: page 8 */
-       0x8,
-       /* 31400-314FF: page 8 */
-       0x8,
-       /* 31500-315FF: page 8 */
-       0x8,
-       /* 31600-316FF: page 8 */
-       0x8,
-       /* 31700-317FF: page 8 */
-       0x8,
-       /* 31800-318FF: page 8 */
-       0x8,
-       /* 31900-319FF: page 8 */
-       0x8,
-       /* 31A00-31AFF: page 8 */
-       0x8,
-       /* 31B00-31BFF: page 8 */
-       0x8,
-       /* 31C00-31CFF: page 8 */
-       0x8,
-       /* 31D00-31DFF: page 8 */
-       0x8,
-       /* 31E00-31EFF: page 8 */
-       0x8,
-       /* 31F00-31FFF: page 8 */
-       0x8,
-       /* 32000-320FF: page 8 */
-       0x8,
-       /* 32100-321FF: page 8 */
-       0x8,
-       /* 32200-322FF: page 8 */
-       0x8,
-       /* 32300-323FF: page 8 */
-       0x8,
-       /* 32400-324FF: page 8 */
-       0x8,
-       /* 32500-325FF: page 8 */
-       0x8,
-       /* 32600-326FF: page 8 */
-       0x8,
-       /* 32700-327FF: page 8 */
-       0x8,
-       /* 32800-328FF: page 8 */
-       0x8,
-       /* 32900-329FF: page 8 */
-       0x8,
-       /* 32A00-32AFF: page 8 */
-       0x8,
-       /* 32B00-32BFF: page 8 */
-       0x8,
-       /* 32C00-32CFF: page 8 */
-       0x8,
-       /* 32D00-32DFF: page 8 */
-       0x8,
-       /* 32E00-32EFF: page 8 */
-       0x8,
-       /* 32F00-32FFF: page 8 */
-       0x8,
-       /* 33000-330FF: page 8 */
-       0x8,
-       /* 33100-331FF: page 8 */
-       0x8,
-       /* 33200-332FF: page 8 */
-       0x8,
-       /* 33300-333FF: page 8 */
-       0x8,
-       /* 33400-334FF: page 8 */
-       0x8,
-       /* 33500-335FF: page 8 */
-       0x8,
-       /* 33600-336FF: page 8 */
-       0x8,
-       /* 33700-337FF: page 8 */
-       0x8,
-       /* 33800-338FF: page 8 */
-       0x8,
-       /* 33900-339FF: page 8 */
-       0x8,
-       /* 33A00-33AFF: page 8 */
-       0x8,
-       /* 33B00-33BFF: page 8 */
-       0x8,
-       /* 33C00-33CFF: page 8 */
-       0x8,
-       /* 33D00-33DFF: page 8 */
-       0x8,
-       /* 33E00-33EFF: page 8 */
-       0x8,
-       /* 33F00-33FFF: page 8 */
-       0x8,
-       /* 34000-340FF: page 8 */
-       0x8,
-       /* 34100-341FF: page 8 */
-       0x8,
-       /* 34200-342FF: page 8 */
-       0x8,
-       /* 34300-343FF: page 8 */
-       0x8,
-       /* 34400-344FF: page 8 */
-       0x8,
-       /* 34500-345FF: page 8 */
-       0x8,
-       /* 34600-346FF: page 8 */
-       0x8,
-       /* 34700-347FF: page 8 */
-       0x8,
-       /* 34800-348FF: page 8 */
-       0x8,
-       /* 34900-349FF: page 8 */
-       0x8,
-       /* 34A00-34AFF: page 8 */
-       0x8,
-       /* 34B00-34BFF: page 8 */
-       0x8,
-       /* 34C00-34CFF: page 8 */
-       0x8,
-       /* 34D00-34DFF: page 8 */
-       0x8,
-       /* 34E00-34EFF: page 8 */
-       0x8,
-       /* 34F00-34FFF: page 8 */
-       0x8,
-       /* 35000-350FF: page 8 */
-       0x8,
-       /* 35100-351FF: page 8 */
-       0x8,
-       /* 35200-352FF: page 8 */
-       0x8,
-       /* 35300-353FF: page 8 */
-       0x8,
-       /* 35400-354FF: page 8 */
-       0x8,
-       /* 35500-355FF: page 8 */
-       0x8,
-       /* 35600-356FF: page 8 */
-       0x8,
-       /* 35700-357FF: page 8 */
-       0x8,
-       /* 35800-358FF: page 8 */
-       0x8,
-       /* 35900-359FF: page 8 */
-       0x8,
-       /* 35A00-35AFF: page 8 */
-       0x8,
-       /* 35B00-35BFF: page 8 */
-       0x8,
-       /* 35C00-35CFF: page 8 */
-       0x8,
-       /* 35D00-35DFF: page 8 */
-       0x8,
-       /* 35E00-35EFF: page 8 */
-       0x8,
-       /* 35F00-35FFF: page 8 */
-       0x8,
-       /* 36000-360FF: page 8 */
-       0x8,
-       /* 36100-361FF: page 8 */
-       0x8,
-       /* 36200-362FF: page 8 */
-       0x8,
-       /* 36300-363FF: page 8 */
-       0x8,
-       /* 36400-364FF: page 8 */
-       0x8,
-       /* 36500-365FF: page 8 */
-       0x8,
-       /* 36600-366FF: page 8 */
-       0x8,
-       /* 36700-367FF: page 8 */
-       0x8,
-       /* 36800-368FF: page 8 */
-       0x8,
-       /* 36900-369FF: page 8 */
-       0x8,
-       /* 36A00-36AFF: page 8 */
-       0x8,
-       /* 36B00-36BFF: page 8 */
-       0x8,
-       /* 36C00-36CFF: page 8 */
-       0x8,
-       /* 36D00-36DFF: page 8 */
-       0x8,
-       /* 36E00-36EFF: page 8 */
-       0x8,
-       /* 36F00-36FFF: page 8 */
-       0x8,
-       /* 37000-370FF: page 8 */
-       0x8,
-       /* 37100-371FF: page 8 */
-       0x8,
-       /* 37200-372FF: page 8 */
-       0x8,
-       /* 37300-373FF: page 8 */
-       0x8,
-       /* 37400-374FF: page 8 */
-       0x8,
-       /* 37500-375FF: page 8 */
-       0x8,
-       /* 37600-376FF: page 8 */
-       0x8,
-       /* 37700-377FF: page 8 */
-       0x8,
-       /* 37800-378FF: page 8 */
-       0x8,
-       /* 37900-379FF: page 8 */
-       0x8,
-       /* 37A00-37AFF: page 8 */
-       0x8,
-       /* 37B00-37BFF: page 8 */
-       0x8,
-       /* 37C00-37CFF: page 8 */
-       0x8,
-       /* 37D00-37DFF: page 8 */
-       0x8,
-       /* 37E00-37EFF: page 8 */
-       0x8,
-       /* 37F00-37FFF: page 8 */
-       0x8,
-       /* 38000-380FF: page 8 */
-       0x8,
-       /* 38100-381FF: page 8 */
-       0x8,
-       /* 38200-382FF: page 8 */
-       0x8,
-       /* 38300-383FF: page 8 */
-       0x8,
-       /* 38400-384FF: page 8 */
-       0x8,
-       /* 38500-385FF: page 8 */
-       0x8,
-       /* 38600-386FF: page 8 */
-       0x8,
-       /* 38700-387FF: page 8 */
-       0x8,
-       /* 38800-388FF: page 8 */
-       0x8,
-       /* 38900-389FF: page 8 */
-       0x8,
-       /* 38A00-38AFF: page 8 */
-       0x8,
-       /* 38B00-38BFF: page 8 */
-       0x8,
-       /* 38C00-38CFF: page 8 */
-       0x8,
-       /* 38D00-38DFF: page 8 */
-       0x8,
-       /* 38E00-38EFF: page 8 */
-       0x8,
-       /* 38F00-38FFF: page 8 */
-       0x8,
-       /* 39000-390FF: page 8 */
-       0x8,
-       /* 39100-391FF: page 8 */
-       0x8,
-       /* 39200-392FF: page 8 */
-       0x8,
-       /* 39300-393FF: page 8 */
-       0x8,
-       /* 39400-394FF: page 8 */
-       0x8,
-       /* 39500-395FF: page 8 */
-       0x8,
-       /* 39600-396FF: page 8 */
-       0x8,
-       /* 39700-397FF: page 8 */
-       0x8,
-       /* 39800-398FF: page 8 */
-       0x8,
-       /* 39900-399FF: page 8 */
-       0x8,
-       /* 39A00-39AFF: page 8 */
-       0x8,
-       /* 39B00-39BFF: page 8 */
-       0x8,
-       /* 39C00-39CFF: page 8 */
-       0x8,
-       /* 39D00-39DFF: page 8 */
-       0x8,
-       /* 39E00-39EFF: page 8 */
-       0x8,
-       /* 39F00-39FFF: page 8 */
-       0x8,
-       /* 3A000-3A0FF: page 8 */
-       0x8,
-       /* 3A100-3A1FF: page 8 */
-       0x8,
-       /* 3A200-3A2FF: page 8 */
-       0x8,
-       /* 3A300-3A3FF: page 8 */
-       0x8,
-       /* 3A400-3A4FF: page 8 */
-       0x8,
-       /* 3A500-3A5FF: page 8 */
-       0x8,
-       /* 3A600-3A6FF: page 8 */
-       0x8,
-       /* 3A700-3A7FF: page 8 */
-       0x8,
-       /* 3A800-3A8FF: page 8 */
-       0x8,
-       /* 3A900-3A9FF: page 8 */
-       0x8,
-       /* 3AA00-3AAFF: page 8 */
-       0x8,
-       /* 3AB00-3ABFF: page 8 */
-       0x8,
-       /* 3AC00-3ACFF: page 8 */
-       0x8,
-       /* 3AD00-3ADFF: page 8 */
-       0x8,
-       /* 3AE00-3AEFF: page 8 */
-       0x8,
-       /* 3AF00-3AFFF: page 8 */
-       0x8,
-       /* 3B000-3B0FF: page 8 */
-       0x8,
-       /* 3B100-3B1FF: page 8 */
-       0x8,
-       /* 3B200-3B2FF: page 8 */
-       0x8,
-       /* 3B300-3B3FF: page 8 */
-       0x8,
-       /* 3B400-3B4FF: page 8 */
-       0x8,
-       /* 3B500-3B5FF: page 8 */
-       0x8,
-       /* 3B600-3B6FF: page 8 */
-       0x8,
-       /* 3B700-3B7FF: page 8 */
-       0x8,
-       /* 3B800-3B8FF: page 8 */
-       0x8,
-       /* 3B900-3B9FF: page 8 */
-       0x8,
-       /* 3BA00-3BAFF: page 8 */
-       0x8,
-       /* 3BB00-3BBFF: page 8 */
-       0x8,
-       /* 3BC00-3BCFF: page 8 */
-       0x8,
-       /* 3BD00-3BDFF: page 8 */
-       0x8,
-       /* 3BE00-3BEFF: page 8 */
-       0x8,
-       /* 3BF00-3BFFF: page 8 */
-       0x8,
-       /* 3C000-3C0FF: page 8 */
-       0x8,
-       /* 3C100-3C1FF: page 8 */
-       0x8,
-       /* 3C200-3C2FF: page 8 */
-       0x8,
-       /* 3C300-3C3FF: page 8 */
-       0x8,
-       /* 3C400-3C4FF: page 8 */
-       0x8,
-       /* 3C500-3C5FF: page 8 */
-       0x8,
-       /* 3C600-3C6FF: page 8 */
-       0x8,
-       /* 3C700-3C7FF: page 8 */
-       0x8,
-       /* 3C800-3C8FF: page 8 */
-       0x8,
-       /* 3C900-3C9FF: page 8 */
-       0x8,
-       /* 3CA00-3CAFF: page 8 */
-       0x8,
-       /* 3CB00-3CBFF: page 8 */
-       0x8,
-       /* 3CC00-3CCFF: page 8 */
-       0x8,
-       /* 3CD00-3CDFF: page 8 */
-       0x8,
-       /* 3CE00-3CEFF: page 8 */
-       0x8,
-       /* 3CF00-3CFFF: page 8 */
-       0x8,
-       /* 3D000-3D0FF: page 8 */
-       0x8,
-       /* 3D100-3D1FF: page 8 */
-       0x8,
-       /* 3D200-3D2FF: page 8 */
-       0x8,
-       /* 3D300-3D3FF: page 8 */
-       0x8,
-       /* 3D400-3D4FF: page 8 */
-       0x8,
-       /* 3D500-3D5FF: page 8 */
-       0x8,
-       /* 3D600-3D6FF: page 8 */
-       0x8,
-       /* 3D700-3D7FF: page 8 */
-       0x8,
-       /* 3D800-3D8FF: page 8 */
-       0x8,
-       /* 3D900-3D9FF: page 8 */
-       0x8,
-       /* 3DA00-3DAFF: page 8 */
-       0x8,
-       /* 3DB00-3DBFF: page 8 */
-       0x8,
-       /* 3DC00-3DCFF: page 8 */
-       0x8,
-       /* 3DD00-3DDFF: page 8 */
-       0x8,
-       /* 3DE00-3DEFF: page 8 */
-       0x8,
-       /* 3DF00-3DFFF: page 8 */
-       0x8,
-       /* 3E000-3E0FF: page 8 */
-       0x8,
-       /* 3E100-3E1FF: page 8 */
-       0x8,
-       /* 3E200-3E2FF: page 8 */
-       0x8,
-       /* 3E300-3E3FF: page 8 */
-       0x8,
-       /* 3E400-3E4FF: page 8 */
-       0x8,
-       /* 3E500-3E5FF: page 8 */
-       0x8,
-       /* 3E600-3E6FF: page 8 */
-       0x8,
-       /* 3E700-3E7FF: page 8 */
-       0x8,
-       /* 3E800-3E8FF: page 8 */
-       0x8,
-       /* 3E900-3E9FF: page 8 */
-       0x8,
-       /* 3EA00-3EAFF: page 8 */
-       0x8,
-       /* 3EB00-3EBFF: page 8 */
-       0x8,
-       /* 3EC00-3ECFF: page 8 */
-       0x8,
-       /* 3ED00-3EDFF: page 8 */
-       0x8,
-       /* 3EE00-3EEFF: page 8 */
-       0x8,
-       /* 3EF00-3EFFF: page 8 */
-       0x8,
-       /* 3F000-3F0FF: page 8 */
-       0x8,
-       /* 3F100-3F1FF: page 8 */
-       0x8,
-       /* 3F200-3F2FF: page 8 */
-       0x8,
-       /* 3F300-3F3FF: page 8 */
-       0x8,
-       /* 3F400-3F4FF: page 8 */
-       0x8,
-       /* 3F500-3F5FF: page 8 */
-       0x8,
-       /* 3F600-3F6FF: page 8 */
-       0x8,
-       /* 3F700-3F7FF: page 8 */
-       0x8,
-       /* 3F800-3F8FF: page 8 */
-       0x8,
-       /* 3F900-3F9FF: page 8 */
-       0x8,
-       /* 3FA00-3FAFF: page 8 */
-       0x8,
-       /* 3FB00-3FBFF: page 8 */
-       0x8,
-       /* 3FC00-3FCFF: page 8 */
-       0x8,
-       /* 3FD00-3FDFF: page 8 */
-       0x8,
-       /* 3FE00-3FEFF: page 8 */
-       0x8,
-       /* 3FF00-3FFFF: page 8 */
-       0x8,
-       /* 40000-400FF: page 8 */
-       0x8,
-       /* 40100-401FF: page 8 */
-       0x8,
-       /* 40200-402FF: page 8 */
-       0x8,
-       /* 40300-403FF: page 8 */
-       0x8,
-       /* 40400-404FF: page 8 */
-       0x8,
-       /* 40500-405FF: page 8 */
-       0x8,
-       /* 40600-406FF: page 8 */
-       0x8,
-       /* 40700-407FF: page 8 */
-       0x8,
-       /* 40800-408FF: page 8 */
-       0x8,
-       /* 40900-409FF: page 8 */
-       0x8,
-       /* 40A00-40AFF: page 8 */
-       0x8,
-       /* 40B00-40BFF: page 8 */
-       0x8,
-       /* 40C00-40CFF: page 8 */
-       0x8,
-       /* 40D00-40DFF: page 8 */
-       0x8,
-       /* 40E00-40EFF: page 8 */
-       0x8,
-       /* 40F00-40FFF: page 8 */
-       0x8,
-       /* 41000-410FF: page 8 */
-       0x8,
-       /* 41100-411FF: page 8 */
-       0x8,
-       /* 41200-412FF: page 8 */
-       0x8,
-       /* 41300-413FF: page 8 */
-       0x8,
-       /* 41400-414FF: page 8 */
-       0x8,
-       /* 41500-415FF: page 8 */
-       0x8,
-       /* 41600-416FF: page 8 */
-       0x8,
-       /* 41700-417FF: page 8 */
-       0x8,
-       /* 41800-418FF: page 8 */
-       0x8,
-       /* 41900-419FF: page 8 */
-       0x8,
-       /* 41A00-41AFF: page 8 */
-       0x8,
-       /* 41B00-41BFF: page 8 */
-       0x8,
-       /* 41C00-41CFF: page 8 */
-       0x8,
-       /* 41D00-41DFF: page 8 */
-       0x8,
-       /* 41E00-41EFF: page 8 */
-       0x8,
-       /* 41F00-41FFF: page 8 */
-       0x8,
-       /* 42000-420FF: page 8 */
-       0x8,
-       /* 42100-421FF: page 8 */
-       0x8,
-       /* 42200-422FF: page 8 */
-       0x8,
-       /* 42300-423FF: page 8 */
-       0x8,
-       /* 42400-424FF: page 8 */
-       0x8,
-       /* 42500-425FF: page 8 */
-       0x8,
-       /* 42600-426FF: page 8 */
-       0x8,
-       /* 42700-427FF: page 8 */
-       0x8,
-       /* 42800-428FF: page 8 */
-       0x8,
-       /* 42900-429FF: page 8 */
-       0x8,
-       /* 42A00-42AFF: page 8 */
-       0x8,
-       /* 42B00-42BFF: page 8 */
-       0x8,
-       /* 42C00-42CFF: page 8 */
-       0x8,
-       /* 42D00-42DFF: page 8 */
-       0x8,
-       /* 42E00-42EFF: page 8 */
-       0x8,
-       /* 42F00-42FFF: page 8 */
-       0x8,
-       /* 43000-430FF: page 8 */
-       0x8,
-       /* 43100-431FF: page 8 */
-       0x8,
-       /* 43200-432FF: page 8 */
-       0x8,
-       /* 43300-433FF: page 8 */
-       0x8,
-       /* 43400-434FF: page 8 */
-       0x8,
-       /* 43500-435FF: page 8 */
-       0x8,
-       /* 43600-436FF: page 8 */
-       0x8,
-       /* 43700-437FF: page 8 */
-       0x8,
-       /* 43800-438FF: page 8 */
-       0x8,
-       /* 43900-439FF: page 8 */
-       0x8,
-       /* 43A00-43AFF: page 8 */
-       0x8,
-       /* 43B00-43BFF: page 8 */
-       0x8,
-       /* 43C00-43CFF: page 8 */
-       0x8,
-       /* 43D00-43DFF: page 8 */
-       0x8,
-       /* 43E00-43EFF: page 8 */
-       0x8,
-       /* 43F00-43FFF: page 8 */
-       0x8,
-       /* 44000-440FF: page 8 */
-       0x8,
-       /* 44100-441FF: page 8 */
-       0x8,
-       /* 44200-442FF: page 8 */
-       0x8,
-       /* 44300-443FF: page 8 */
-       0x8,
-       /* 44400-444FF: page 8 */
-       0x8,
-       /* 44500-445FF: page 8 */
-       0x8,
-       /* 44600-446FF: page 8 */
-       0x8,
-       /* 44700-447FF: page 8 */
-       0x8,
-       /* 44800-448FF: page 8 */
-       0x8,
-       /* 44900-449FF: page 8 */
-       0x8,
-       /* 44A00-44AFF: page 8 */
-       0x8,
-       /* 44B00-44BFF: page 8 */
-       0x8,
-       /* 44C00-44CFF: page 8 */
-       0x8,
-       /* 44D00-44DFF: page 8 */
-       0x8,
-       /* 44E00-44EFF: page 8 */
-       0x8,
-       /* 44F00-44FFF: page 8 */
-       0x8,
-       /* 45000-450FF: page 8 */
-       0x8,
-       /* 45100-451FF: page 8 */
-       0x8,
-       /* 45200-452FF: page 8 */
-       0x8,
-       /* 45300-453FF: page 8 */
-       0x8,
-       /* 45400-454FF: page 8 */
-       0x8,
-       /* 45500-455FF: page 8 */
-       0x8,
-       /* 45600-456FF: page 8 */
-       0x8,
-       /* 45700-457FF: page 8 */
-       0x8,
-       /* 45800-458FF: page 8 */
-       0x8,
-       /* 45900-459FF: page 8 */
-       0x8,
-       /* 45A00-45AFF: page 8 */
-       0x8,
-       /* 45B00-45BFF: page 8 */
-       0x8,
-       /* 45C00-45CFF: page 8 */
-       0x8,
-       /* 45D00-45DFF: page 8 */
-       0x8,
-       /* 45E00-45EFF: page 8 */
-       0x8,
-       /* 45F00-45FFF: page 8 */
-       0x8,
-       /* 46000-460FF: page 8 */
-       0x8,
-       /* 46100-461FF: page 8 */
-       0x8,
-       /* 46200-462FF: page 8 */
-       0x8,
-       /* 46300-463FF: page 8 */
-       0x8,
-       /* 46400-464FF: page 8 */
-       0x8,
-       /* 46500-465FF: page 8 */
-       0x8,
-       /* 46600-466FF: page 8 */
-       0x8,
-       /* 46700-467FF: page 8 */
-       0x8,
-       /* 46800-468FF: page 8 */
-       0x8,
-       /* 46900-469FF: page 8 */
-       0x8,
-       /* 46A00-46AFF: page 8 */
-       0x8,
-       /* 46B00-46BFF: page 8 */
-       0x8,
-       /* 46C00-46CFF: page 8 */
-       0x8,
-       /* 46D00-46DFF: page 8 */
-       0x8,
-       /* 46E00-46EFF: page 8 */
-       0x8,
-       /* 46F00-46FFF: page 8 */
-       0x8,
-       /* 47000-470FF: page 8 */
-       0x8,
-       /* 47100-471FF: page 8 */
-       0x8,
-       /* 47200-472FF: page 8 */
-       0x8,
-       /* 47300-473FF: page 8 */
-       0x8,
-       /* 47400-474FF: page 8 */
-       0x8,
-       /* 47500-475FF: page 8 */
-       0x8,
-       /* 47600-476FF: page 8 */
-       0x8,
-       /* 47700-477FF: page 8 */
-       0x8,
-       /* 47800-478FF: page 8 */
-       0x8,
-       /* 47900-479FF: page 8 */
-       0x8,
-       /* 47A00-47AFF: page 8 */
-       0x8,
-       /* 47B00-47BFF: page 8 */
-       0x8,
-       /* 47C00-47CFF: page 8 */
-       0x8,
-       /* 47D00-47DFF: page 8 */
-       0x8,
-       /* 47E00-47EFF: page 8 */
-       0x8,
-       /* 47F00-47FFF: page 8 */
-       0x8,
-       /* 48000-480FF: page 8 */
-       0x8,
-       /* 48100-481FF: page 8 */
-       0x8,
-       /* 48200-482FF: page 8 */
-       0x8,
-       /* 48300-483FF: page 8 */
-       0x8,
-       /* 48400-484FF: page 8 */
-       0x8,
-       /* 48500-485FF: page 8 */
-       0x8,
-       /* 48600-486FF: page 8 */
-       0x8,
-       /* 48700-487FF: page 8 */
-       0x8,
-       /* 48800-488FF: page 8 */
-       0x8,
-       /* 48900-489FF: page 8 */
-       0x8,
-       /* 48A00-48AFF: page 8 */
-       0x8,
-       /* 48B00-48BFF: page 8 */
-       0x8,
-       /* 48C00-48CFF: page 8 */
-       0x8,
-       /* 48D00-48DFF: page 8 */
-       0x8,
-       /* 48E00-48EFF: page 8 */
-       0x8,
-       /* 48F00-48FFF: page 8 */
-       0x8,
-       /* 49000-490FF: page 8 */
-       0x8,
-       /* 49100-491FF: page 8 */
-       0x8,
-       /* 49200-492FF: page 8 */
-       0x8,
-       /* 49300-493FF: page 8 */
-       0x8,
-       /* 49400-494FF: page 8 */
-       0x8,
-       /* 49500-495FF: page 8 */
-       0x8,
-       /* 49600-496FF: page 8 */
-       0x8,
-       /* 49700-497FF: page 8 */
-       0x8,
-       /* 49800-498FF: page 8 */
-       0x8,
-       /* 49900-499FF: page 8 */
-       0x8,
-       /* 49A00-49AFF: page 8 */
-       0x8,
-       /* 49B00-49BFF: page 8 */
-       0x8,
-       /* 49C00-49CFF: page 8 */
-       0x8,
-       /* 49D00-49DFF: page 8 */
-       0x8,
-       /* 49E00-49EFF: page 8 */
-       0x8,
-       /* 49F00-49FFF: page 8 */
-       0x8,
-       /* 4A000-4A0FF: page 8 */
-       0x8,
-       /* 4A100-4A1FF: page 8 */
-       0x8,
-       /* 4A200-4A2FF: page 8 */
-       0x8,
-       /* 4A300-4A3FF: page 8 */
-       0x8,
-       /* 4A400-4A4FF: page 8 */
-       0x8,
-       /* 4A500-4A5FF: page 8 */
-       0x8,
-       /* 4A600-4A6FF: page 8 */
-       0x8,
-       /* 4A700-4A7FF: page 8 */
-       0x8,
-       /* 4A800-4A8FF: page 8 */
-       0x8,
-       /* 4A900-4A9FF: page 8 */
-       0x8,
-       /* 4AA00-4AAFF: page 8 */
-       0x8,
-       /* 4AB00-4ABFF: page 8 */
-       0x8,
-       /* 4AC00-4ACFF: page 8 */
-       0x8,
-       /* 4AD00-4ADFF: page 8 */
-       0x8,
-       /* 4AE00-4AEFF: page 8 */
-       0x8,
-       /* 4AF00-4AFFF: page 8 */
-       0x8,
-       /* 4B000-4B0FF: page 8 */
-       0x8,
-       /* 4B100-4B1FF: page 8 */
-       0x8,
-       /* 4B200-4B2FF: page 8 */
-       0x8,
-       /* 4B300-4B3FF: page 8 */
-       0x8,
-       /* 4B400-4B4FF: page 8 */
-       0x8,
-       /* 4B500-4B5FF: page 8 */
-       0x8,
-       /* 4B600-4B6FF: page 8 */
-       0x8,
-       /* 4B700-4B7FF: page 8 */
-       0x8,
-       /* 4B800-4B8FF: page 8 */
-       0x8,
-       /* 4B900-4B9FF: page 8 */
-       0x8,
-       /* 4BA00-4BAFF: page 8 */
-       0x8,
-       /* 4BB00-4BBFF: page 8 */
-       0x8,
-       /* 4BC00-4BCFF: page 8 */
-       0x8,
-       /* 4BD00-4BDFF: page 8 */
-       0x8,
-       /* 4BE00-4BEFF: page 8 */
-       0x8,
-       /* 4BF00-4BFFF: page 8 */
-       0x8,
-       /* 4C000-4C0FF: page 8 */
-       0x8,
-       /* 4C100-4C1FF: page 8 */
-       0x8,
-       /* 4C200-4C2FF: page 8 */
-       0x8,
-       /* 4C300-4C3FF: page 8 */
-       0x8,
-       /* 4C400-4C4FF: page 8 */
-       0x8,
-       /* 4C500-4C5FF: page 8 */
-       0x8,
-       /* 4C600-4C6FF: page 8 */
-       0x8,
-       /* 4C700-4C7FF: page 8 */
-       0x8,
-       /* 4C800-4C8FF: page 8 */
-       0x8,
-       /* 4C900-4C9FF: page 8 */
-       0x8,
-       /* 4CA00-4CAFF: page 8 */
-       0x8,
-       /* 4CB00-4CBFF: page 8 */
-       0x8,
-       /* 4CC00-4CCFF: page 8 */
-       0x8,
-       /* 4CD00-4CDFF: page 8 */
-       0x8,
-       /* 4CE00-4CEFF: page 8 */
-       0x8,
-       /* 4CF00-4CFFF: page 8 */
-       0x8,
-       /* 4D000-4D0FF: page 8 */
-       0x8,
-       /* 4D100-4D1FF: page 8 */
-       0x8,
-       /* 4D200-4D2FF: page 8 */
-       0x8,
-       /* 4D300-4D3FF: page 8 */
-       0x8,
-       /* 4D400-4D4FF: page 8 */
-       0x8,
-       /* 4D500-4D5FF: page 8 */
-       0x8,
-       /* 4D600-4D6FF: page 8 */
-       0x8,
-       /* 4D700-4D7FF: page 8 */
-       0x8,
-       /* 4D800-4D8FF: page 8 */
-       0x8,
-       /* 4D900-4D9FF: page 8 */
-       0x8,
-       /* 4DA00-4DAFF: page 8 */
-       0x8,
-       /* 4DB00-4DBFF: page 8 */
-       0x8,
-       /* 4DC00-4DCFF: page 8 */
-       0x8,
-       /* 4DD00-4DDFF: page 8 */
-       0x8,
-       /* 4DE00-4DEFF: page 8 */
-       0x8,
-       /* 4DF00-4DFFF: page 8 */
-       0x8,
-       /* 4E000-4E0FF: page 8 */
-       0x8,
-       /* 4E100-4E1FF: page 8 */
-       0x8,
-       /* 4E200-4E2FF: page 8 */
-       0x8,
-       /* 4E300-4E3FF: page 8 */
-       0x8,
-       /* 4E400-4E4FF: page 8 */
-       0x8,
-       /* 4E500-4E5FF: page 8 */
-       0x8,
-       /* 4E600-4E6FF: page 8 */
-       0x8,
-       /* 4E700-4E7FF: page 8 */
-       0x8,
-       /* 4E800-4E8FF: page 8 */
-       0x8,
-       /* 4E900-4E9FF: page 8 */
-       0x8,
-       /* 4EA00-4EAFF: page 8 */
-       0x8,
-       /* 4EB00-4EBFF: page 8 */
-       0x8,
-       /* 4EC00-4ECFF: page 8 */
-       0x8,
-       /* 4ED00-4EDFF: page 8 */
-       0x8,
-       /* 4EE00-4EEFF: page 8 */
-       0x8,
-       /* 4EF00-4EFFF: page 8 */
-       0x8,
-       /* 4F000-4F0FF: page 8 */
-       0x8,
-       /* 4F100-4F1FF: page 8 */
-       0x8,
-       /* 4F200-4F2FF: page 8 */
-       0x8,
-       /* 4F300-4F3FF: page 8 */
-       0x8,
-       /* 4F400-4F4FF: page 8 */
-       0x8,
-       /* 4F500-4F5FF: page 8 */
-       0x8,
-       /* 4F600-4F6FF: page 8 */
-       0x8,
-       /* 4F700-4F7FF: page 8 */
-       0x8,
-       /* 4F800-4F8FF: page 8 */
-       0x8,
-       /* 4F900-4F9FF: page 8 */
-       0x8,
-       /* 4FA00-4FAFF: page 8 */
-       0x8,
-       /* 4FB00-4FBFF: page 8 */
-       0x8,
-       /* 4FC00-4FCFF: page 8 */
-       0x8,
-       /* 4FD00-4FDFF: page 8 */
-       0x8,
-       /* 4FE00-4FEFF: page 8 */
-       0x8,
-       /* 4FF00-4FFFF: page 8 */
-       0x8,
-       /* 50000-500FF: page 8 */
-       0x8,
-       /* 50100-501FF: page 8 */
-       0x8,
-       /* 50200-502FF: page 8 */
-       0x8,
-       /* 50300-503FF: page 8 */
-       0x8,
-       /* 50400-504FF: page 8 */
-       0x8,
-       /* 50500-505FF: page 8 */
-       0x8,
-       /* 50600-506FF: page 8 */
-       0x8,
-       /* 50700-507FF: page 8 */
-       0x8,
-       /* 50800-508FF: page 8 */
-       0x8,
-       /* 50900-509FF: page 8 */
-       0x8,
-       /* 50A00-50AFF: page 8 */
-       0x8,
-       /* 50B00-50BFF: page 8 */
-       0x8,
-       /* 50C00-50CFF: page 8 */
-       0x8,
-       /* 50D00-50DFF: page 8 */
-       0x8,
-       /* 50E00-50EFF: page 8 */
-       0x8,
-       /* 50F00-50FFF: page 8 */
-       0x8,
-       /* 51000-510FF: page 8 */
-       0x8,
-       /* 51100-511FF: page 8 */
-       0x8,
-       /* 51200-512FF: page 8 */
-       0x8,
-       /* 51300-513FF: page 8 */
-       0x8,
-       /* 51400-514FF: page 8 */
-       0x8,
-       /* 51500-515FF: page 8 */
-       0x8,
-       /* 51600-516FF: page 8 */
-       0x8,
-       /* 51700-517FF: page 8 */
-       0x8,
-       /* 51800-518FF: page 8 */
-       0x8,
-       /* 51900-519FF: page 8 */
-       0x8,
-       /* 51A00-51AFF: page 8 */
-       0x8,
-       /* 51B00-51BFF: page 8 */
-       0x8,
-       /* 51C00-51CFF: page 8 */
-       0x8,
-       /* 51D00-51DFF: page 8 */
-       0x8,
-       /* 51E00-51EFF: page 8 */
-       0x8,
-       /* 51F00-51FFF: page 8 */
-       0x8,
-       /* 52000-520FF: page 8 */
-       0x8,
-       /* 52100-521FF: page 8 */
-       0x8,
-       /* 52200-522FF: page 8 */
-       0x8,
-       /* 52300-523FF: page 8 */
-       0x8,
-       /* 52400-524FF: page 8 */
-       0x8,
-       /* 52500-525FF: page 8 */
-       0x8,
-       /* 52600-526FF: page 8 */
-       0x8,
-       /* 52700-527FF: page 8 */
-       0x8,
-       /* 52800-528FF: page 8 */
-       0x8,
-       /* 52900-529FF: page 8 */
-       0x8,
-       /* 52A00-52AFF: page 8 */
-       0x8,
-       /* 52B00-52BFF: page 8 */
-       0x8,
-       /* 52C00-52CFF: page 8 */
-       0x8,
-       /* 52D00-52DFF: page 8 */
-       0x8,
-       /* 52E00-52EFF: page 8 */
-       0x8,
-       /* 52F00-52FFF: page 8 */
-       0x8,
-       /* 53000-530FF: page 8 */
-       0x8,
-       /* 53100-531FF: page 8 */
-       0x8,
-       /* 53200-532FF: page 8 */
-       0x8,
-       /* 53300-533FF: page 8 */
-       0x8,
-       /* 53400-534FF: page 8 */
-       0x8,
-       /* 53500-535FF: page 8 */
-       0x8,
-       /* 53600-536FF: page 8 */
-       0x8,
-       /* 53700-537FF: page 8 */
-       0x8,
-       /* 53800-538FF: page 8 */
-       0x8,
-       /* 53900-539FF: page 8 */
-       0x8,
-       /* 53A00-53AFF: page 8 */
-       0x8,
-       /* 53B00-53BFF: page 8 */
-       0x8,
-       /* 53C00-53CFF: page 8 */
-       0x8,
-       /* 53D00-53DFF: page 8 */
-       0x8,
-       /* 53E00-53EFF: page 8 */
-       0x8,
-       /* 53F00-53FFF: page 8 */
-       0x8,
-       /* 54000-540FF: page 8 */
-       0x8,
-       /* 54100-541FF: page 8 */
-       0x8,
-       /* 54200-542FF: page 8 */
-       0x8,
-       /* 54300-543FF: page 8 */
-       0x8,
-       /* 54400-544FF: page 8 */
-       0x8,
-       /* 54500-545FF: page 8 */
-       0x8,
-       /* 54600-546FF: page 8 */
-       0x8,
-       /* 54700-547FF: page 8 */
-       0x8,
-       /* 54800-548FF: page 8 */
-       0x8,
-       /* 54900-549FF: page 8 */
-       0x8,
-       /* 54A00-54AFF: page 8 */
-       0x8,
-       /* 54B00-54BFF: page 8 */
-       0x8,
-       /* 54C00-54CFF: page 8 */
-       0x8,
-       /* 54D00-54DFF: page 8 */
-       0x8,
-       /* 54E00-54EFF: page 8 */
-       0x8,
-       /* 54F00-54FFF: page 8 */
-       0x8,
-       /* 55000-550FF: page 8 */
-       0x8,
-       /* 55100-551FF: page 8 */
-       0x8,
-       /* 55200-552FF: page 8 */
-       0x8,
-       /* 55300-553FF: page 8 */
-       0x8,
-       /* 55400-554FF: page 8 */
-       0x8,
-       /* 55500-555FF: page 8 */
-       0x8,
-       /* 55600-556FF: page 8 */
-       0x8,
-       /* 55700-557FF: page 8 */
-       0x8,
-       /* 55800-558FF: page 8 */
-       0x8,
-       /* 55900-559FF: page 8 */
-       0x8,
-       /* 55A00-55AFF: page 8 */
-       0x8,
-       /* 55B00-55BFF: page 8 */
-       0x8,
-       /* 55C00-55CFF: page 8 */
-       0x8,
-       /* 55D00-55DFF: page 8 */
-       0x8,
-       /* 55E00-55EFF: page 8 */
-       0x8,
-       /* 55F00-55FFF: page 8 */
-       0x8,
-       /* 56000-560FF: page 8 */
-       0x8,
-       /* 56100-561FF: page 8 */
-       0x8,
-       /* 56200-562FF: page 8 */
-       0x8,
-       /* 56300-563FF: page 8 */
-       0x8,
-       /* 56400-564FF: page 8 */
-       0x8,
-       /* 56500-565FF: page 8 */
-       0x8,
-       /* 56600-566FF: page 8 */
-       0x8,
-       /* 56700-567FF: page 8 */
-       0x8,
-       /* 56800-568FF: page 8 */
-       0x8,
-       /* 56900-569FF: page 8 */
-       0x8,
-       /* 56A00-56AFF: page 8 */
-       0x8,
-       /* 56B00-56BFF: page 8 */
-       0x8,
-       /* 56C00-56CFF: page 8 */
-       0x8,
-       /* 56D00-56DFF: page 8 */
-       0x8,
-       /* 56E00-56EFF: page 8 */
-       0x8,
-       /* 56F00-56FFF: page 8 */
-       0x8,
-       /* 57000-570FF: page 8 */
-       0x8,
-       /* 57100-571FF: page 8 */
-       0x8,
-       /* 57200-572FF: page 8 */
-       0x8,
-       /* 57300-573FF: page 8 */
-       0x8,
-       /* 57400-574FF: page 8 */
-       0x8,
-       /* 57500-575FF: page 8 */
-       0x8,
-       /* 57600-576FF: page 8 */
-       0x8,
-       /* 57700-577FF: page 8 */
-       0x8,
-       /* 57800-578FF: page 8 */
-       0x8,
-       /* 57900-579FF: page 8 */
-       0x8,
-       /* 57A00-57AFF: page 8 */
-       0x8,
-       /* 57B00-57BFF: page 8 */
-       0x8,
-       /* 57C00-57CFF: page 8 */
-       0x8,
-       /* 57D00-57DFF: page 8 */
-       0x8,
-       /* 57E00-57EFF: page 8 */
-       0x8,
-       /* 57F00-57FFF: page 8 */
-       0x8,
-       /* 58000-580FF: page 8 */
-       0x8,
-       /* 58100-581FF: page 8 */
-       0x8,
-       /* 58200-582FF: page 8 */
-       0x8,
-       /* 58300-583FF: page 8 */
-       0x8,
-       /* 58400-584FF: page 8 */
-       0x8,
-       /* 58500-585FF: page 8 */
-       0x8,
-       /* 58600-586FF: page 8 */
-       0x8,
-       /* 58700-587FF: page 8 */
-       0x8,
-       /* 58800-588FF: page 8 */
-       0x8,
-       /* 58900-589FF: page 8 */
-       0x8,
-       /* 58A00-58AFF: page 8 */
-       0x8,
-       /* 58B00-58BFF: page 8 */
-       0x8,
-       /* 58C00-58CFF: page 8 */
-       0x8,
-       /* 58D00-58DFF: page 8 */
-       0x8,
-       /* 58E00-58EFF: page 8 */
-       0x8,
-       /* 58F00-58FFF: page 8 */
-       0x8,
-       /* 59000-590FF: page 8 */
-       0x8,
-       /* 59100-591FF: page 8 */
-       0x8,
-       /* 59200-592FF: page 8 */
-       0x8,
-       /* 59300-593FF: page 8 */
-       0x8,
-       /* 59400-594FF: page 8 */
-       0x8,
-       /* 59500-595FF: page 8 */
-       0x8,
-       /* 59600-596FF: page 8 */
-       0x8,
-       /* 59700-597FF: page 8 */
-       0x8,
-       /* 59800-598FF: page 8 */
-       0x8,
-       /* 59900-599FF: page 8 */
-       0x8,
-       /* 59A00-59AFF: page 8 */
-       0x8,
-       /* 59B00-59BFF: page 8 */
-       0x8,
-       /* 59C00-59CFF: page 8 */
-       0x8,
-       /* 59D00-59DFF: page 8 */
-       0x8,
-       /* 59E00-59EFF: page 8 */
-       0x8,
-       /* 59F00-59FFF: page 8 */
-       0x8,
-       /* 5A000-5A0FF: page 8 */
-       0x8,
-       /* 5A100-5A1FF: page 8 */
-       0x8,
-       /* 5A200-5A2FF: page 8 */
-       0x8,
-       /* 5A300-5A3FF: page 8 */
-       0x8,
-       /* 5A400-5A4FF: page 8 */
-       0x8,
-       /* 5A500-5A5FF: page 8 */
-       0x8,
-       /* 5A600-5A6FF: page 8 */
-       0x8,
-       /* 5A700-5A7FF: page 8 */
-       0x8,
-       /* 5A800-5A8FF: page 8 */
-       0x8,
-       /* 5A900-5A9FF: page 8 */
-       0x8,
-       /* 5AA00-5AAFF: page 8 */
-       0x8,
-       /* 5AB00-5ABFF: page 8 */
-       0x8,
-       /* 5AC00-5ACFF: page 8 */
-       0x8,
-       /* 5AD00-5ADFF: page 8 */
-       0x8,
-       /* 5AE00-5AEFF: page 8 */
-       0x8,
-       /* 5AF00-5AFFF: page 8 */
-       0x8,
-       /* 5B000-5B0FF: page 8 */
-       0x8,
-       /* 5B100-5B1FF: page 8 */
-       0x8,
-       /* 5B200-5B2FF: page 8 */
-       0x8,
-       /* 5B300-5B3FF: page 8 */
-       0x8,
-       /* 5B400-5B4FF: page 8 */
-       0x8,
-       /* 5B500-5B5FF: page 8 */
-       0x8,
-       /* 5B600-5B6FF: page 8 */
-       0x8,
-       /* 5B700-5B7FF: page 8 */
-       0x8,
-       /* 5B800-5B8FF: page 8 */
-       0x8,
-       /* 5B900-5B9FF: page 8 */
-       0x8,
-       /* 5BA00-5BAFF: page 8 */
-       0x8,
-       /* 5BB00-5BBFF: page 8 */
-       0x8,
-       /* 5BC00-5BCFF: page 8 */
-       0x8,
-       /* 5BD00-5BDFF: page 8 */
-       0x8,
-       /* 5BE00-5BEFF: page 8 */
-       0x8,
-       /* 5BF00-5BFFF: page 8 */
-       0x8,
-       /* 5C000-5C0FF: page 8 */
-       0x8,
-       /* 5C100-5C1FF: page 8 */
-       0x8,
-       /* 5C200-5C2FF: page 8 */
-       0x8,
-       /* 5C300-5C3FF: page 8 */
-       0x8,
-       /* 5C400-5C4FF: page 8 */
-       0x8,
-       /* 5C500-5C5FF: page 8 */
-       0x8,
-       /* 5C600-5C6FF: page 8 */
-       0x8,
-       /* 5C700-5C7FF: page 8 */
-       0x8,
-       /* 5C800-5C8FF: page 8 */
-       0x8,
-       /* 5C900-5C9FF: page 8 */
-       0x8,
-       /* 5CA00-5CAFF: page 8 */
-       0x8,
-       /* 5CB00-5CBFF: page 8 */
-       0x8,
-       /* 5CC00-5CCFF: page 8 */
-       0x8,
-       /* 5CD00-5CDFF: page 8 */
-       0x8,
-       /* 5CE00-5CEFF: page 8 */
-       0x8,
-       /* 5CF00-5CFFF: page 8 */
-       0x8,
-       /* 5D000-5D0FF: page 8 */
-       0x8,
-       /* 5D100-5D1FF: page 8 */
-       0x8,
-       /* 5D200-5D2FF: page 8 */
-       0x8,
-       /* 5D300-5D3FF: page 8 */
-       0x8,
-       /* 5D400-5D4FF: page 8 */
-       0x8,
-       /* 5D500-5D5FF: page 8 */
-       0x8,
-       /* 5D600-5D6FF: page 8 */
-       0x8,
-       /* 5D700-5D7FF: page 8 */
-       0x8,
-       /* 5D800-5D8FF: page 8 */
-       0x8,
-       /* 5D900-5D9FF: page 8 */
-       0x8,
-       /* 5DA00-5DAFF: page 8 */
-       0x8,
-       /* 5DB00-5DBFF: page 8 */
-       0x8,
-       /* 5DC00-5DCFF: page 8 */
-       0x8,
-       /* 5DD00-5DDFF: page 8 */
-       0x8,
-       /* 5DE00-5DEFF: page 8 */
-       0x8,
-       /* 5DF00-5DFFF: page 8 */
-       0x8,
-       /* 5E000-5E0FF: page 8 */
-       0x8,
-       /* 5E100-5E1FF: page 8 */
-       0x8,
-       /* 5E200-5E2FF: page 8 */
-       0x8,
-       /* 5E300-5E3FF: page 8 */
-       0x8,
-       /* 5E400-5E4FF: page 8 */
-       0x8,
-       /* 5E500-5E5FF: page 8 */
-       0x8,
-       /* 5E600-5E6FF: page 8 */
-       0x8,
-       /* 5E700-5E7FF: page 8 */
-       0x8,
-       /* 5E800-5E8FF: page 8 */
-       0x8,
-       /* 5E900-5E9FF: page 8 */
-       0x8,
-       /* 5EA00-5EAFF: page 8 */
-       0x8,
-       /* 5EB00-5EBFF: page 8 */
-       0x8,
-       /* 5EC00-5ECFF: page 8 */
-       0x8,
-       /* 5ED00-5EDFF: page 8 */
-       0x8,
-       /* 5EE00-5EEFF: page 8 */
-       0x8,
-       /* 5EF00-5EFFF: page 8 */
-       0x8,
-       /* 5F000-5F0FF: page 8 */
-       0x8,
-       /* 5F100-5F1FF: page 8 */
-       0x8,
-       /* 5F200-5F2FF: page 8 */
-       0x8,
-       /* 5F300-5F3FF: page 8 */
-       0x8,
-       /* 5F400-5F4FF: page 8 */
-       0x8,
-       /* 5F500-5F5FF: page 8 */
-       0x8,
-       /* 5F600-5F6FF: page 8 */
-       0x8,
-       /* 5F700-5F7FF: page 8 */
-       0x8,
-       /* 5F800-5F8FF: page 8 */
-       0x8,
-       /* 5F900-5F9FF: page 8 */
-       0x8,
-       /* 5FA00-5FAFF: page 8 */
-       0x8,
-       /* 5FB00-5FBFF: page 8 */
-       0x8,
-       /* 5FC00-5FCFF: page 8 */
-       0x8,
-       /* 5FD00-5FDFF: page 8 */
-       0x8,
-       /* 5FE00-5FEFF: page 8 */
-       0x8,
-       /* 5FF00-5FFFF: page 8 */
-       0x8,
-       /* 60000-600FF: page 8 */
-       0x8,
-       /* 60100-601FF: page 8 */
-       0x8,
-       /* 60200-602FF: page 8 */
-       0x8,
-       /* 60300-603FF: page 8 */
-       0x8,
-       /* 60400-604FF: page 8 */
-       0x8,
-       /* 60500-605FF: page 8 */
-       0x8,
-       /* 60600-606FF: page 8 */
-       0x8,
-       /* 60700-607FF: page 8 */
-       0x8,
-       /* 60800-608FF: page 8 */
-       0x8,
-       /* 60900-609FF: page 8 */
-       0x8,
-       /* 60A00-60AFF: page 8 */
-       0x8,
-       /* 60B00-60BFF: page 8 */
-       0x8,
-       /* 60C00-60CFF: page 8 */
-       0x8,
-       /* 60D00-60DFF: page 8 */
-       0x8,
-       /* 60E00-60EFF: page 8 */
-       0x8,
-       /* 60F00-60FFF: page 8 */
-       0x8,
-       /* 61000-610FF: page 8 */
-       0x8,
-       /* 61100-611FF: page 8 */
-       0x8,
-       /* 61200-612FF: page 8 */
-       0x8,
-       /* 61300-613FF: page 8 */
-       0x8,
-       /* 61400-614FF: page 8 */
-       0x8,
-       /* 61500-615FF: page 8 */
-       0x8,
-       /* 61600-616FF: page 8 */
-       0x8,
-       /* 61700-617FF: page 8 */
-       0x8,
-       /* 61800-618FF: page 8 */
-       0x8,
-       /* 61900-619FF: page 8 */
-       0x8,
-       /* 61A00-61AFF: page 8 */
-       0x8,
-       /* 61B00-61BFF: page 8 */
-       0x8,
-       /* 61C00-61CFF: page 8 */
-       0x8,
-       /* 61D00-61DFF: page 8 */
-       0x8,
-       /* 61E00-61EFF: page 8 */
-       0x8,
-       /* 61F00-61FFF: page 8 */
-       0x8,
-       /* 62000-620FF: page 8 */
-       0x8,
-       /* 62100-621FF: page 8 */
-       0x8,
-       /* 62200-622FF: page 8 */
-       0x8,
-       /* 62300-623FF: page 8 */
-       0x8,
-       /* 62400-624FF: page 8 */
-       0x8,
-       /* 62500-625FF: page 8 */
-       0x8,
-       /* 62600-626FF: page 8 */
-       0x8,
-       /* 62700-627FF: page 8 */
-       0x8,
-       /* 62800-628FF: page 8 */
-       0x8,
-       /* 62900-629FF: page 8 */
-       0x8,
-       /* 62A00-62AFF: page 8 */
-       0x8,
-       /* 62B00-62BFF: page 8 */
-       0x8,
-       /* 62C00-62CFF: page 8 */
-       0x8,
-       /* 62D00-62DFF: page 8 */
-       0x8,
-       /* 62E00-62EFF: page 8 */
-       0x8,
-       /* 62F00-62FFF: page 8 */
-       0x8,
-       /* 63000-630FF: page 8 */
-       0x8,
-       /* 63100-631FF: page 8 */
-       0x8,
-       /* 63200-632FF: page 8 */
-       0x8,
-       /* 63300-633FF: page 8 */
-       0x8,
-       /* 63400-634FF: page 8 */
-       0x8,
-       /* 63500-635FF: page 8 */
-       0x8,
-       /* 63600-636FF: page 8 */
-       0x8,
-       /* 63700-637FF: page 8 */
-       0x8,
-       /* 63800-638FF: page 8 */
-       0x8,
-       /* 63900-639FF: page 8 */
-       0x8,
-       /* 63A00-63AFF: page 8 */
-       0x8,
-       /* 63B00-63BFF: page 8 */
-       0x8,
-       /* 63C00-63CFF: page 8 */
-       0x8,
-       /* 63D00-63DFF: page 8 */
-       0x8,
-       /* 63E00-63EFF: page 8 */
-       0x8,
-       /* 63F00-63FFF: page 8 */
-       0x8,
-       /* 64000-640FF: page 8 */
-       0x8,
-       /* 64100-641FF: page 8 */
-       0x8,
-       /* 64200-642FF: page 8 */
-       0x8,
-       /* 64300-643FF: page 8 */
-       0x8,
-       /* 64400-644FF: page 8 */
-       0x8,
-       /* 64500-645FF: page 8 */
-       0x8,
-       /* 64600-646FF: page 8 */
-       0x8,
-       /* 64700-647FF: page 8 */
-       0x8,
-       /* 64800-648FF: page 8 */
-       0x8,
-       /* 64900-649FF: page 8 */
-       0x8,
-       /* 64A00-64AFF: page 8 */
-       0x8,
-       /* 64B00-64BFF: page 8 */
-       0x8,
-       /* 64C00-64CFF: page 8 */
-       0x8,
-       /* 64D00-64DFF: page 8 */
-       0x8,
-       /* 64E00-64EFF: page 8 */
-       0x8,
-       /* 64F00-64FFF: page 8 */
-       0x8,
-       /* 65000-650FF: page 8 */
-       0x8,
-       /* 65100-651FF: page 8 */
-       0x8,
-       /* 65200-652FF: page 8 */
-       0x8,
-       /* 65300-653FF: page 8 */
-       0x8,
-       /* 65400-654FF: page 8 */
-       0x8,
-       /* 65500-655FF: page 8 */
-       0x8,
-       /* 65600-656FF: page 8 */
-       0x8,
-       /* 65700-657FF: page 8 */
-       0x8,
-       /* 65800-658FF: page 8 */
-       0x8,
-       /* 65900-659FF: page 8 */
-       0x8,
-       /* 65A00-65AFF: page 8 */
-       0x8,
-       /* 65B00-65BFF: page 8 */
-       0x8,
-       /* 65C00-65CFF: page 8 */
-       0x8,
-       /* 65D00-65DFF: page 8 */
-       0x8,
-       /* 65E00-65EFF: page 8 */
-       0x8,
-       /* 65F00-65FFF: page 8 */
-       0x8,
-       /* 66000-660FF: page 8 */
-       0x8,
-       /* 66100-661FF: page 8 */
-       0x8,
-       /* 66200-662FF: page 8 */
-       0x8,
-       /* 66300-663FF: page 8 */
-       0x8,
-       /* 66400-664FF: page 8 */
-       0x8,
-       /* 66500-665FF: page 8 */
-       0x8,
-       /* 66600-666FF: page 8 */
-       0x8,
-       /* 66700-667FF: page 8 */
-       0x8,
-       /* 66800-668FF: page 8 */
-       0x8,
-       /* 66900-669FF: page 8 */
-       0x8,
-       /* 66A00-66AFF: page 8 */
-       0x8,
-       /* 66B00-66BFF: page 8 */
-       0x8,
-       /* 66C00-66CFF: page 8 */
-       0x8,
-       /* 66D00-66DFF: page 8 */
-       0x8,
-       /* 66E00-66EFF: page 8 */
-       0x8,
-       /* 66F00-66FFF: page 8 */
-       0x8,
-       /* 67000-670FF: page 8 */
-       0x8,
-       /* 67100-671FF: page 8 */
-       0x8,
-       /* 67200-672FF: page 8 */
-       0x8,
-       /* 67300-673FF: page 8 */
-       0x8,
-       /* 67400-674FF: page 8 */
-       0x8,
-       /* 67500-675FF: page 8 */
-       0x8,
-       /* 67600-676FF: page 8 */
-       0x8,
-       /* 67700-677FF: page 8 */
-       0x8,
-       /* 67800-678FF: page 8 */
-       0x8,
-       /* 67900-679FF: page 8 */
-       0x8,
-       /* 67A00-67AFF: page 8 */
-       0x8,
-       /* 67B00-67BFF: page 8 */
-       0x8,
-       /* 67C00-67CFF: page 8 */
-       0x8,
-       /* 67D00-67DFF: page 8 */
-       0x8,
-       /* 67E00-67EFF: page 8 */
-       0x8,
-       /* 67F00-67FFF: page 8 */
-       0x8,
-       /* 68000-680FF: page 8 */
-       0x8,
-       /* 68100-681FF: page 8 */
-       0x8,
-       /* 68200-682FF: page 8 */
-       0x8,
-       /* 68300-683FF: page 8 */
-       0x8,
-       /* 68400-684FF: page 8 */
-       0x8,
-       /* 68500-685FF: page 8 */
-       0x8,
-       /* 68600-686FF: page 8 */
-       0x8,
-       /* 68700-687FF: page 8 */
-       0x8,
-       /* 68800-688FF: page 8 */
-       0x8,
-       /* 68900-689FF: page 8 */
-       0x8,
-       /* 68A00-68AFF: page 8 */
-       0x8,
-       /* 68B00-68BFF: page 8 */
-       0x8,
-       /* 68C00-68CFF: page 8 */
-       0x8,
-       /* 68D00-68DFF: page 8 */
-       0x8,
-       /* 68E00-68EFF: page 8 */
-       0x8,
-       /* 68F00-68FFF: page 8 */
-       0x8,
-       /* 69000-690FF: page 8 */
-       0x8,
-       /* 69100-691FF: page 8 */
-       0x8,
-       /* 69200-692FF: page 8 */
-       0x8,
-       /* 69300-693FF: page 8 */
-       0x8,
-       /* 69400-694FF: page 8 */
-       0x8,
-       /* 69500-695FF: page 8 */
-       0x8,
-       /* 69600-696FF: page 8 */
-       0x8,
-       /* 69700-697FF: page 8 */
-       0x8,
-       /* 69800-698FF: page 8 */
-       0x8,
-       /* 69900-699FF: page 8 */
-       0x8,
-       /* 69A00-69AFF: page 8 */
-       0x8,
-       /* 69B00-69BFF: page 8 */
-       0x8,
-       /* 69C00-69CFF: page 8 */
-       0x8,
-       /* 69D00-69DFF: page 8 */
-       0x8,
-       /* 69E00-69EFF: page 8 */
-       0x8,
-       /* 69F00-69FFF: page 8 */
-       0x8,
-       /* 6A000-6A0FF: page 8 */
-       0x8,
-       /* 6A100-6A1FF: page 8 */
-       0x8,
-       /* 6A200-6A2FF: page 8 */
-       0x8,
-       /* 6A300-6A3FF: page 8 */
-       0x8,
-       /* 6A400-6A4FF: page 8 */
-       0x8,
-       /* 6A500-6A5FF: page 8 */
-       0x8,
-       /* 6A600-6A6FF: page 8 */
-       0x8,
-       /* 6A700-6A7FF: page 8 */
-       0x8,
-       /* 6A800-6A8FF: page 8 */
-       0x8,
-       /* 6A900-6A9FF: page 8 */
-       0x8,
-       /* 6AA00-6AAFF: page 8 */
-       0x8,
-       /* 6AB00-6ABFF: page 8 */
-       0x8,
-       /* 6AC00-6ACFF: page 8 */
-       0x8,
-       /* 6AD00-6ADFF: page 8 */
-       0x8,
-       /* 6AE00-6AEFF: page 8 */
-       0x8,
-       /* 6AF00-6AFFF: page 8 */
-       0x8,
-       /* 6B000-6B0FF: page 8 */
-       0x8,
-       /* 6B100-6B1FF: page 8 */
-       0x8,
-       /* 6B200-6B2FF: page 8 */
-       0x8,
-       /* 6B300-6B3FF: page 8 */
-       0x8,
-       /* 6B400-6B4FF: page 8 */
-       0x8,
-       /* 6B500-6B5FF: page 8 */
-       0x8,
-       /* 6B600-6B6FF: page 8 */
-       0x8,
-       /* 6B700-6B7FF: page 8 */
-       0x8,
-       /* 6B800-6B8FF: page 8 */
-       0x8,
-       /* 6B900-6B9FF: page 8 */
-       0x8,
-       /* 6BA00-6BAFF: page 8 */
-       0x8,
-       /* 6BB00-6BBFF: page 8 */
-       0x8,
-       /* 6BC00-6BCFF: page 8 */
-       0x8,
-       /* 6BD00-6BDFF: page 8 */
-       0x8,
-       /* 6BE00-6BEFF: page 8 */
-       0x8,
-       /* 6BF00-6BFFF: page 8 */
-       0x8,
-       /* 6C000-6C0FF: page 8 */
-       0x8,
-       /* 6C100-6C1FF: page 8 */
-       0x8,
-       /* 6C200-6C2FF: page 8 */
-       0x8,
-       /* 6C300-6C3FF: page 8 */
-       0x8,
-       /* 6C400-6C4FF: page 8 */
-       0x8,
-       /* 6C500-6C5FF: page 8 */
-       0x8,
-       /* 6C600-6C6FF: page 8 */
-       0x8,
-       /* 6C700-6C7FF: page 8 */
-       0x8,
-       /* 6C800-6C8FF: page 8 */
-       0x8,
-       /* 6C900-6C9FF: page 8 */
-       0x8,
-       /* 6CA00-6CAFF: page 8 */
-       0x8,
-       /* 6CB00-6CBFF: page 8 */
-       0x8,
-       /* 6CC00-6CCFF: page 8 */
-       0x8,
-       /* 6CD00-6CDFF: page 8 */
-       0x8,
-       /* 6CE00-6CEFF: page 8 */
-       0x8,
-       /* 6CF00-6CFFF: page 8 */
-       0x8,
-       /* 6D000-6D0FF: page 8 */
-       0x8,
-       /* 6D100-6D1FF: page 8 */
-       0x8,
-       /* 6D200-6D2FF: page 8 */
-       0x8,
-       /* 6D300-6D3FF: page 8 */
-       0x8,
-       /* 6D400-6D4FF: page 8 */
-       0x8,
-       /* 6D500-6D5FF: page 8 */
-       0x8,
-       /* 6D600-6D6FF: page 8 */
-       0x8,
-       /* 6D700-6D7FF: page 8 */
-       0x8,
-       /* 6D800-6D8FF: page 8 */
-       0x8,
-       /* 6D900-6D9FF: page 8 */
-       0x8,
-       /* 6DA00-6DAFF: page 8 */
-       0x8,
-       /* 6DB00-6DBFF: page 8 */
-       0x8,
-       /* 6DC00-6DCFF: page 8 */
-       0x8,
-       /* 6DD00-6DDFF: page 8 */
-       0x8,
-       /* 6DE00-6DEFF: page 8 */
-       0x8,
-       /* 6DF00-6DFFF: page 8 */
-       0x8,
-       /* 6E000-6E0FF: page 8 */
-       0x8,
-       /* 6E100-6E1FF: page 8 */
-       0x8,
-       /* 6E200-6E2FF: page 8 */
-       0x8,
-       /* 6E300-6E3FF: page 8 */
-       0x8,
-       /* 6E400-6E4FF: page 8 */
-       0x8,
-       /* 6E500-6E5FF: page 8 */
-       0x8,
-       /* 6E600-6E6FF: page 8 */
-       0x8,
-       /* 6E700-6E7FF: page 8 */
-       0x8,
-       /* 6E800-6E8FF: page 8 */
-       0x8,
-       /* 6E900-6E9FF: page 8 */
-       0x8,
-       /* 6EA00-6EAFF: page 8 */
-       0x8,
-       /* 6EB00-6EBFF: page 8 */
-       0x8,
-       /* 6EC00-6ECFF: page 8 */
-       0x8,
-       /* 6ED00-6EDFF: page 8 */
-       0x8,
-       /* 6EE00-6EEFF: page 8 */
-       0x8,
-       /* 6EF00-6EFFF: page 8 */
-       0x8,
-       /* 6F000-6F0FF: page 8 */
-       0x8,
-       /* 6F100-6F1FF: page 8 */
-       0x8,
-       /* 6F200-6F2FF: page 8 */
-       0x8,
-       /* 6F300-6F3FF: page 8 */
-       0x8,
-       /* 6F400-6F4FF: page 8 */
-       0x8,
-       /* 6F500-6F5FF: page 8 */
-       0x8,
-       /* 6F600-6F6FF: page 8 */
-       0x8,
-       /* 6F700-6F7FF: page 8 */
-       0x8,
-       /* 6F800-6F8FF: page 8 */
-       0x8,
-       /* 6F900-6F9FF: page 8 */
-       0x8,
-       /* 6FA00-6FAFF: page 8 */
-       0x8,
-       /* 6FB00-6FBFF: page 8 */
-       0x8,
-       /* 6FC00-6FCFF: page 8 */
-       0x8,
-       /* 6FD00-6FDFF: page 8 */
-       0x8,
-       /* 6FE00-6FEFF: page 8 */
-       0x8,
-       /* 6FF00-6FFFF: page 8 */
-       0x8,
-       /* 70000-700FF: page 8 */
-       0x8,
-       /* 70100-701FF: page 8 */
-       0x8,
-       /* 70200-702FF: page 8 */
-       0x8,
-       /* 70300-703FF: page 8 */
-       0x8,
-       /* 70400-704FF: page 8 */
-       0x8,
-       /* 70500-705FF: page 8 */
-       0x8,
-       /* 70600-706FF: page 8 */
-       0x8,
-       /* 70700-707FF: page 8 */
-       0x8,
-       /* 70800-708FF: page 8 */
-       0x8,
-       /* 70900-709FF: page 8 */
-       0x8,
-       /* 70A00-70AFF: page 8 */
-       0x8,
-       /* 70B00-70BFF: page 8 */
-       0x8,
-       /* 70C00-70CFF: page 8 */
-       0x8,
-       /* 70D00-70DFF: page 8 */
-       0x8,
-       /* 70E00-70EFF: page 8 */
-       0x8,
-       /* 70F00-70FFF: page 8 */
-       0x8,
-       /* 71000-710FF: page 8 */
-       0x8,
-       /* 71100-711FF: page 8 */
-       0x8,
-       /* 71200-712FF: page 8 */
-       0x8,
-       /* 71300-713FF: page 8 */
-       0x8,
-       /* 71400-714FF: page 8 */
-       0x8,
-       /* 71500-715FF: page 8 */
-       0x8,
-       /* 71600-716FF: page 8 */
-       0x8,
-       /* 71700-717FF: page 8 */
-       0x8,
-       /* 71800-718FF: page 8 */
-       0x8,
-       /* 71900-719FF: page 8 */
-       0x8,
-       /* 71A00-71AFF: page 8 */
-       0x8,
-       /* 71B00-71BFF: page 8 */
-       0x8,
-       /* 71C00-71CFF: page 8 */
-       0x8,
-       /* 71D00-71DFF: page 8 */
-       0x8,
-       /* 71E00-71EFF: page 8 */
-       0x8,
-       /* 71F00-71FFF: page 8 */
-       0x8,
-       /* 72000-720FF: page 8 */
-       0x8,
-       /* 72100-721FF: page 8 */
-       0x8,
-       /* 72200-722FF: page 8 */
-       0x8,
-       /* 72300-723FF: page 8 */
-       0x8,
-       /* 72400-724FF: page 8 */
-       0x8,
-       /* 72500-725FF: page 8 */
-       0x8,
-       /* 72600-726FF: page 8 */
-       0x8,
-       /* 72700-727FF: page 8 */
-       0x8,
-       /* 72800-728FF: page 8 */
-       0x8,
-       /* 72900-729FF: page 8 */
-       0x8,
-       /* 72A00-72AFF: page 8 */
-       0x8,
-       /* 72B00-72BFF: page 8 */
-       0x8,
-       /* 72C00-72CFF: page 8 */
-       0x8,
-       /* 72D00-72DFF: page 8 */
-       0x8,
-       /* 72E00-72EFF: page 8 */
-       0x8,
-       /* 72F00-72FFF: page 8 */
-       0x8,
-       /* 73000-730FF: page 8 */
-       0x8,
-       /* 73100-731FF: page 8 */
-       0x8,
-       /* 73200-732FF: page 8 */
-       0x8,
-       /* 73300-733FF: page 8 */
-       0x8,
-       /* 73400-734FF: page 8 */
-       0x8,
-       /* 73500-735FF: page 8 */
-       0x8,
-       /* 73600-736FF: page 8 */
-       0x8,
-       /* 73700-737FF: page 8 */
-       0x8,
-       /* 73800-738FF: page 8 */
-       0x8,
-       /* 73900-739FF: page 8 */
-       0x8,
-       /* 73A00-73AFF: page 8 */
-       0x8,
-       /* 73B00-73BFF: page 8 */
-       0x8,
-       /* 73C00-73CFF: page 8 */
-       0x8,
-       /* 73D00-73DFF: page 8 */
-       0x8,
-       /* 73E00-73EFF: page 8 */
-       0x8,
-       /* 73F00-73FFF: page 8 */
-       0x8,
-       /* 74000-740FF: page 8 */
-       0x8,
-       /* 74100-741FF: page 8 */
-       0x8,
-       /* 74200-742FF: page 8 */
-       0x8,
-       /* 74300-743FF: page 8 */
-       0x8,
-       /* 74400-744FF: page 8 */
-       0x8,
-       /* 74500-745FF: page 8 */
-       0x8,
-       /* 74600-746FF: page 8 */
-       0x8,
-       /* 74700-747FF: page 8 */
-       0x8,
-       /* 74800-748FF: page 8 */
-       0x8,
-       /* 74900-749FF: page 8 */
-       0x8,
-       /* 74A00-74AFF: page 8 */
-       0x8,
-       /* 74B00-74BFF: page 8 */
-       0x8,
-       /* 74C00-74CFF: page 8 */
-       0x8,
-       /* 74D00-74DFF: page 8 */
-       0x8,
-       /* 74E00-74EFF: page 8 */
-       0x8,
-       /* 74F00-74FFF: page 8 */
-       0x8,
-       /* 75000-750FF: page 8 */
-       0x8,
-       /* 75100-751FF: page 8 */
-       0x8,
-       /* 75200-752FF: page 8 */
-       0x8,
-       /* 75300-753FF: page 8 */
-       0x8,
-       /* 75400-754FF: page 8 */
-       0x8,
-       /* 75500-755FF: page 8 */
-       0x8,
-       /* 75600-756FF: page 8 */
-       0x8,
-       /* 75700-757FF: page 8 */
-       0x8,
-       /* 75800-758FF: page 8 */
-       0x8,
-       /* 75900-759FF: page 8 */
-       0x8,
-       /* 75A00-75AFF: page 8 */
-       0x8,
-       /* 75B00-75BFF: page 8 */
-       0x8,
-       /* 75C00-75CFF: page 8 */
-       0x8,
-       /* 75D00-75DFF: page 8 */
-       0x8,
-       /* 75E00-75EFF: page 8 */
-       0x8,
-       /* 75F00-75FFF: page 8 */
-       0x8,
-       /* 76000-760FF: page 8 */
-       0x8,
-       /* 76100-761FF: page 8 */
-       0x8,
-       /* 76200-762FF: page 8 */
-       0x8,
-       /* 76300-763FF: page 8 */
-       0x8,
-       /* 76400-764FF: page 8 */
-       0x8,
-       /* 76500-765FF: page 8 */
-       0x8,
-       /* 76600-766FF: page 8 */
-       0x8,
-       /* 76700-767FF: page 8 */
-       0x8,
-       /* 76800-768FF: page 8 */
-       0x8,
-       /* 76900-769FF: page 8 */
-       0x8,
-       /* 76A00-76AFF: page 8 */
-       0x8,
-       /* 76B00-76BFF: page 8 */
-       0x8,
-       /* 76C00-76CFF: page 8 */
-       0x8,
-       /* 76D00-76DFF: page 8 */
-       0x8,
-       /* 76E00-76EFF: page 8 */
-       0x8,
-       /* 76F00-76FFF: page 8 */
-       0x8,
-       /* 77000-770FF: page 8 */
-       0x8,
-       /* 77100-771FF: page 8 */
-       0x8,
-       /* 77200-772FF: page 8 */
-       0x8,
-       /* 77300-773FF: page 8 */
-       0x8,
-       /* 77400-774FF: page 8 */
-       0x8,
-       /* 77500-775FF: page 8 */
-       0x8,
-       /* 77600-776FF: page 8 */
-       0x8,
-       /* 77700-777FF: page 8 */
-       0x8,
-       /* 77800-778FF: page 8 */
-       0x8,
-       /* 77900-779FF: page 8 */
-       0x8,
-       /* 77A00-77AFF: page 8 */
-       0x8,
-       /* 77B00-77BFF: page 8 */
-       0x8,
-       /* 77C00-77CFF: page 8 */
-       0x8,
-       /* 77D00-77DFF: page 8 */
-       0x8,
-       /* 77E00-77EFF: page 8 */
-       0x8,
-       /* 77F00-77FFF: page 8 */
-       0x8,
-       /* 78000-780FF: page 8 */
-       0x8,
-       /* 78100-781FF: page 8 */
-       0x8,
-       /* 78200-782FF: page 8 */
-       0x8,
-       /* 78300-783FF: page 8 */
-       0x8,
-       /* 78400-784FF: page 8 */
-       0x8,
-       /* 78500-785FF: page 8 */
-       0x8,
-       /* 78600-786FF: page 8 */
-       0x8,
-       /* 78700-787FF: page 8 */
-       0x8,
-       /* 78800-788FF: page 8 */
-       0x8,
-       /* 78900-789FF: page 8 */
-       0x8,
-       /* 78A00-78AFF: page 8 */
-       0x8,
-       /* 78B00-78BFF: page 8 */
-       0x8,
-       /* 78C00-78CFF: page 8 */
-       0x8,
-       /* 78D00-78DFF: page 8 */
-       0x8,
-       /* 78E00-78EFF: page 8 */
-       0x8,
-       /* 78F00-78FFF: page 8 */
-       0x8,
-       /* 79000-790FF: page 8 */
-       0x8,
-       /* 79100-791FF: page 8 */
-       0x8,
-       /* 79200-792FF: page 8 */
-       0x8,
-       /* 79300-793FF: page 8 */
-       0x8,
-       /* 79400-794FF: page 8 */
-       0x8,
-       /* 79500-795FF: page 8 */
-       0x8,
-       /* 79600-796FF: page 8 */
-       0x8,
-       /* 79700-797FF: page 8 */
-       0x8,
-       /* 79800-798FF: page 8 */
-       0x8,
-       /* 79900-799FF: page 8 */
-       0x8,
-       /* 79A00-79AFF: page 8 */
-       0x8,
-       /* 79B00-79BFF: page 8 */
-       0x8,
-       /* 79C00-79CFF: page 8 */
-       0x8,
-       /* 79D00-79DFF: page 8 */
-       0x8,
-       /* 79E00-79EFF: page 8 */
-       0x8,
-       /* 79F00-79FFF: page 8 */
-       0x8,
-       /* 7A000-7A0FF: page 8 */
-       0x8,
-       /* 7A100-7A1FF: page 8 */
-       0x8,
-       /* 7A200-7A2FF: page 8 */
-       0x8,
-       /* 7A300-7A3FF: page 8 */
-       0x8,
-       /* 7A400-7A4FF: page 8 */
-       0x8,
-       /* 7A500-7A5FF: page 8 */
-       0x8,
-       /* 7A600-7A6FF: page 8 */
-       0x8,
-       /* 7A700-7A7FF: page 8 */
-       0x8,
-       /* 7A800-7A8FF: page 8 */
-       0x8,
-       /* 7A900-7A9FF: page 8 */
-       0x8,
-       /* 7AA00-7AAFF: page 8 */
-       0x8,
-       /* 7AB00-7ABFF: page 8 */
-       0x8,
-       /* 7AC00-7ACFF: page 8 */
-       0x8,
-       /* 7AD00-7ADFF: page 8 */
-       0x8,
-       /* 7AE00-7AEFF: page 8 */
-       0x8,
-       /* 7AF00-7AFFF: page 8 */
-       0x8,
-       /* 7B000-7B0FF: page 8 */
-       0x8,
-       /* 7B100-7B1FF: page 8 */
-       0x8,
-       /* 7B200-7B2FF: page 8 */
-       0x8,
-       /* 7B300-7B3FF: page 8 */
-       0x8,
-       /* 7B400-7B4FF: page 8 */
-       0x8,
-       /* 7B500-7B5FF: page 8 */
-       0x8,
-       /* 7B600-7B6FF: page 8 */
-       0x8,
-       /* 7B700-7B7FF: page 8 */
-       0x8,
-       /* 7B800-7B8FF: page 8 */
-       0x8,
-       /* 7B900-7B9FF: page 8 */
-       0x8,
-       /* 7BA00-7BAFF: page 8 */
-       0x8,
-       /* 7BB00-7BBFF: page 8 */
-       0x8,
-       /* 7BC00-7BCFF: page 8 */
-       0x8,
-       /* 7BD00-7BDFF: page 8 */
-       0x8,
-       /* 7BE00-7BEFF: page 8 */
-       0x8,
-       /* 7BF00-7BFFF: page 8 */
-       0x8,
-       /* 7C000-7C0FF: page 8 */
-       0x8,
-       /* 7C100-7C1FF: page 8 */
-       0x8,
-       /* 7C200-7C2FF: page 8 */
-       0x8,
-       /* 7C300-7C3FF: page 8 */
-       0x8,
-       /* 7C400-7C4FF: page 8 */
-       0x8,
-       /* 7C500-7C5FF: page 8 */
-       0x8,
-       /* 7C600-7C6FF: page 8 */
-       0x8,
-       /* 7C700-7C7FF: page 8 */
-       0x8,
-       /* 7C800-7C8FF: page 8 */
-       0x8,
-       /* 7C900-7C9FF: page 8 */
-       0x8,
-       /* 7CA00-7CAFF: page 8 */
-       0x8,
-       /* 7CB00-7CBFF: page 8 */
-       0x8,
-       /* 7CC00-7CCFF: page 8 */
-       0x8,
-       /* 7CD00-7CDFF: page 8 */
-       0x8,
-       /* 7CE00-7CEFF: page 8 */
-       0x8,
-       /* 7CF00-7CFFF: page 8 */
-       0x8,
-       /* 7D000-7D0FF: page 8 */
-       0x8,
-       /* 7D100-7D1FF: page 8 */
-       0x8,
-       /* 7D200-7D2FF: page 8 */
-       0x8,
-       /* 7D300-7D3FF: page 8 */
-       0x8,
-       /* 7D400-7D4FF: page 8 */
-       0x8,
-       /* 7D500-7D5FF: page 8 */
-       0x8,
-       /* 7D600-7D6FF: page 8 */
-       0x8,
-       /* 7D700-7D7FF: page 8 */
-       0x8,
-       /* 7D800-7D8FF: page 8 */
-       0x8,
-       /* 7D900-7D9FF: page 8 */
-       0x8,
-       /* 7DA00-7DAFF: page 8 */
-       0x8,
-       /* 7DB00-7DBFF: page 8 */
-       0x8,
-       /* 7DC00-7DCFF: page 8 */
-       0x8,
-       /* 7DD00-7DDFF: page 8 */
-       0x8,
-       /* 7DE00-7DEFF: page 8 */
-       0x8,
-       /* 7DF00-7DFFF: page 8 */
-       0x8,
-       /* 7E000-7E0FF: page 8 */
-       0x8,
-       /* 7E100-7E1FF: page 8 */
-       0x8,
-       /* 7E200-7E2FF: page 8 */
-       0x8,
-       /* 7E300-7E3FF: page 8 */
-       0x8,
-       /* 7E400-7E4FF: page 8 */
-       0x8,
-       /* 7E500-7E5FF: page 8 */
-       0x8,
-       /* 7E600-7E6FF: page 8 */
-       0x8,
-       /* 7E700-7E7FF: page 8 */
-       0x8,
-       /* 7E800-7E8FF: page 8 */
-       0x8,
-       /* 7E900-7E9FF: page 8 */
-       0x8,
-       /* 7EA00-7EAFF: page 8 */
-       0x8,
-       /* 7EB00-7EBFF: page 8 */
-       0x8,
-       /* 7EC00-7ECFF: page 8 */
-       0x8,
-       /* 7ED00-7EDFF: page 8 */
-       0x8,
-       /* 7EE00-7EEFF: page 8 */
-       0x8,
-       /* 7EF00-7EFFF: page 8 */
-       0x8,
-       /* 7F000-7F0FF: page 8 */
-       0x8,
-       /* 7F100-7F1FF: page 8 */
-       0x8,
-       /* 7F200-7F2FF: page 8 */
-       0x8,
-       /* 7F300-7F3FF: page 8 */
-       0x8,
-       /* 7F400-7F4FF: page 8 */
-       0x8,
-       /* 7F500-7F5FF: page 8 */
-       0x8,
-       /* 7F600-7F6FF: page 8 */
-       0x8,
-       /* 7F700-7F7FF: page 8 */
-       0x8,
-       /* 7F800-7F8FF: page 8 */
-       0x8,
-       /* 7F900-7F9FF: page 8 */
-       0x8,
-       /* 7FA00-7FAFF: page 8 */
-       0x8,
-       /* 7FB00-7FBFF: page 8 */
-       0x8,
-       /* 7FC00-7FCFF: page 8 */
-       0x8,
-       /* 7FD00-7FDFF: page 8 */
-       0x8,
-       /* 7FE00-7FEFF: page 8 */
-       0x8,
-       /* 7FF00-7FFFF: page 8 */
-       0x8,
-       /* 80000-800FF: page 8 */
-       0x8,
-       /* 80100-801FF: page 8 */
-       0x8,
-       /* 80200-802FF: page 8 */
-       0x8,
-       /* 80300-803FF: page 8 */
-       0x8,
-       /* 80400-804FF: page 8 */
-       0x8,
-       /* 80500-805FF: page 8 */
-       0x8,
-       /* 80600-806FF: page 8 */
-       0x8,
-       /* 80700-807FF: page 8 */
-       0x8,
-       /* 80800-808FF: page 8 */
-       0x8,
-       /* 80900-809FF: page 8 */
-       0x8,
-       /* 80A00-80AFF: page 8 */
-       0x8,
-       /* 80B00-80BFF: page 8 */
-       0x8,
-       /* 80C00-80CFF: page 8 */
-       0x8,
-       /* 80D00-80DFF: page 8 */
-       0x8,
-       /* 80E00-80EFF: page 8 */
-       0x8,
-       /* 80F00-80FFF: page 8 */
-       0x8,
-       /* 81000-810FF: page 8 */
-       0x8,
-       /* 81100-811FF: page 8 */
-       0x8,
-       /* 81200-812FF: page 8 */
-       0x8,
-       /* 81300-813FF: page 8 */
-       0x8,
-       /* 81400-814FF: page 8 */
-       0x8,
-       /* 81500-815FF: page 8 */
-       0x8,
-       /* 81600-816FF: page 8 */
-       0x8,
-       /* 81700-817FF: page 8 */
-       0x8,
-       /* 81800-818FF: page 8 */
-       0x8,
-       /* 81900-819FF: page 8 */
-       0x8,
-       /* 81A00-81AFF: page 8 */
-       0x8,
-       /* 81B00-81BFF: page 8 */
-       0x8,
-       /* 81C00-81CFF: page 8 */
-       0x8,
-       /* 81D00-81DFF: page 8 */
-       0x8,
-       /* 81E00-81EFF: page 8 */
-       0x8,
-       /* 81F00-81FFF: page 8 */
-       0x8,
-       /* 82000-820FF: page 8 */
-       0x8,
-       /* 82100-821FF: page 8 */
-       0x8,
-       /* 82200-822FF: page 8 */
-       0x8,
-       /* 82300-823FF: page 8 */
-       0x8,
-       /* 82400-824FF: page 8 */
-       0x8,
-       /* 82500-825FF: page 8 */
-       0x8,
-       /* 82600-826FF: page 8 */
-       0x8,
-       /* 82700-827FF: page 8 */
-       0x8,
-       /* 82800-828FF: page 8 */
-       0x8,
-       /* 82900-829FF: page 8 */
-       0x8,
-       /* 82A00-82AFF: page 8 */
-       0x8,
-       /* 82B00-82BFF: page 8 */
-       0x8,
-       /* 82C00-82CFF: page 8 */
-       0x8,
-       /* 82D00-82DFF: page 8 */
-       0x8,
-       /* 82E00-82EFF: page 8 */
-       0x8,
-       /* 82F00-82FFF: page 8 */
-       0x8,
-       /* 83000-830FF: page 8 */
-       0x8,
-       /* 83100-831FF: page 8 */
-       0x8,
-       /* 83200-832FF: page 8 */
-       0x8,
-       /* 83300-833FF: page 8 */
-       0x8,
-       /* 83400-834FF: page 8 */
-       0x8,
-       /* 83500-835FF: page 8 */
-       0x8,
-       /* 83600-836FF: page 8 */
-       0x8,
-       /* 83700-837FF: page 8 */
-       0x8,
-       /* 83800-838FF: page 8 */
-       0x8,
-       /* 83900-839FF: page 8 */
-       0x8,
-       /* 83A00-83AFF: page 8 */
-       0x8,
-       /* 83B00-83BFF: page 8 */
-       0x8,
-       /* 83C00-83CFF: page 8 */
-       0x8,
-       /* 83D00-83DFF: page 8 */
-       0x8,
-       /* 83E00-83EFF: page 8 */
-       0x8,
-       /* 83F00-83FFF: page 8 */
-       0x8,
-       /* 84000-840FF: page 8 */
-       0x8,
-       /* 84100-841FF: page 8 */
-       0x8,
-       /* 84200-842FF: page 8 */
-       0x8,
-       /* 84300-843FF: page 8 */
-       0x8,
-       /* 84400-844FF: page 8 */
-       0x8,
-       /* 84500-845FF: page 8 */
-       0x8,
-       /* 84600-846FF: page 8 */
-       0x8,
-       /* 84700-847FF: page 8 */
-       0x8,
-       /* 84800-848FF: page 8 */
-       0x8,
-       /* 84900-849FF: page 8 */
-       0x8,
-       /* 84A00-84AFF: page 8 */
-       0x8,
-       /* 84B00-84BFF: page 8 */
-       0x8,
-       /* 84C00-84CFF: page 8 */
-       0x8,
-       /* 84D00-84DFF: page 8 */
-       0x8,
-       /* 84E00-84EFF: page 8 */
-       0x8,
-       /* 84F00-84FFF: page 8 */
-       0x8,
-       /* 85000-850FF: page 8 */
-       0x8,
-       /* 85100-851FF: page 8 */
-       0x8,
-       /* 85200-852FF: page 8 */
-       0x8,
-       /* 85300-853FF: page 8 */
-       0x8,
-       /* 85400-854FF: page 8 */
-       0x8,
-       /* 85500-855FF: page 8 */
-       0x8,
-       /* 85600-856FF: page 8 */
-       0x8,
-       /* 85700-857FF: page 8 */
-       0x8,
-       /* 85800-858FF: page 8 */
-       0x8,
-       /* 85900-859FF: page 8 */
-       0x8,
-       /* 85A00-85AFF: page 8 */
-       0x8,
-       /* 85B00-85BFF: page 8 */
-       0x8,
-       /* 85C00-85CFF: page 8 */
-       0x8,
-       /* 85D00-85DFF: page 8 */
-       0x8,
-       /* 85E00-85EFF: page 8 */
-       0x8,
-       /* 85F00-85FFF: page 8 */
-       0x8,
-       /* 86000-860FF: page 8 */
-       0x8,
-       /* 86100-861FF: page 8 */
-       0x8,
-       /* 86200-862FF: page 8 */
-       0x8,
-       /* 86300-863FF: page 8 */
-       0x8,
-       /* 86400-864FF: page 8 */
-       0x8,
-       /* 86500-865FF: page 8 */
-       0x8,
-       /* 86600-866FF: page 8 */
-       0x8,
-       /* 86700-867FF: page 8 */
-       0x8,
-       /* 86800-868FF: page 8 */
-       0x8,
-       /* 86900-869FF: page 8 */
-       0x8,
-       /* 86A00-86AFF: page 8 */
-       0x8,
-       /* 86B00-86BFF: page 8 */
-       0x8,
-       /* 86C00-86CFF: page 8 */
-       0x8,
-       /* 86D00-86DFF: page 8 */
-       0x8,
-       /* 86E00-86EFF: page 8 */
-       0x8,
-       /* 86F00-86FFF: page 8 */
-       0x8,
-       /* 87000-870FF: page 8 */
-       0x8,
-       /* 87100-871FF: page 8 */
-       0x8,
-       /* 87200-872FF: page 8 */
-       0x8,
-       /* 87300-873FF: page 8 */
-       0x8,
-       /* 87400-874FF: page 8 */
-       0x8,
-       /* 87500-875FF: page 8 */
-       0x8,
-       /* 87600-876FF: page 8 */
-       0x8,
-       /* 87700-877FF: page 8 */
-       0x8,
-       /* 87800-878FF: page 8 */
-       0x8,
-       /* 87900-879FF: page 8 */
-       0x8,
-       /* 87A00-87AFF: page 8 */
-       0x8,
-       /* 87B00-87BFF: page 8 */
-       0x8,
-       /* 87C00-87CFF: page 8 */
-       0x8,
-       /* 87D00-87DFF: page 8 */
-       0x8,
-       /* 87E00-87EFF: page 8 */
-       0x8,
-       /* 87F00-87FFF: page 8 */
-       0x8,
-       /* 88000-880FF: page 8 */
-       0x8,
-       /* 88100-881FF: page 8 */
-       0x8,
-       /* 88200-882FF: page 8 */
-       0x8,
-       /* 88300-883FF: page 8 */
-       0x8,
-       /* 88400-884FF: page 8 */
-       0x8,
-       /* 88500-885FF: page 8 */
-       0x8,
-       /* 88600-886FF: page 8 */
-       0x8,
-       /* 88700-887FF: page 8 */
-       0x8,
-       /* 88800-888FF: page 8 */
-       0x8,
-       /* 88900-889FF: page 8 */
-       0x8,
-       /* 88A00-88AFF: page 8 */
-       0x8,
-       /* 88B00-88BFF: page 8 */
-       0x8,
-       /* 88C00-88CFF: page 8 */
-       0x8,
-       /* 88D00-88DFF: page 8 */
-       0x8,
-       /* 88E00-88EFF: page 8 */
-       0x8,
-       /* 88F00-88FFF: page 8 */
-       0x8,
-       /* 89000-890FF: page 8 */
-       0x8,
-       /* 89100-891FF: page 8 */
-       0x8,
-       /* 89200-892FF: page 8 */
-       0x8,
-       /* 89300-893FF: page 8 */
-       0x8,
-       /* 89400-894FF: page 8 */
-       0x8,
-       /* 89500-895FF: page 8 */
-       0x8,
-       /* 89600-896FF: page 8 */
-       0x8,
-       /* 89700-897FF: page 8 */
-       0x8,
-       /* 89800-898FF: page 8 */
-       0x8,
-       /* 89900-899FF: page 8 */
-       0x8,
-       /* 89A00-89AFF: page 8 */
-       0x8,
-       /* 89B00-89BFF: page 8 */
-       0x8,
-       /* 89C00-89CFF: page 8 */
-       0x8,
-       /* 89D00-89DFF: page 8 */
-       0x8,
-       /* 89E00-89EFF: page 8 */
-       0x8,
-       /* 89F00-89FFF: page 8 */
-       0x8,
-       /* 8A000-8A0FF: page 8 */
-       0x8,
-       /* 8A100-8A1FF: page 8 */
-       0x8,
-       /* 8A200-8A2FF: page 8 */
-       0x8,
-       /* 8A300-8A3FF: page 8 */
-       0x8,
-       /* 8A400-8A4FF: page 8 */
-       0x8,
-       /* 8A500-8A5FF: page 8 */
-       0x8,
-       /* 8A600-8A6FF: page 8 */
-       0x8,
-       /* 8A700-8A7FF: page 8 */
-       0x8,
-       /* 8A800-8A8FF: page 8 */
-       0x8,
-       /* 8A900-8A9FF: page 8 */
-       0x8,
-       /* 8AA00-8AAFF: page 8 */
-       0x8,
-       /* 8AB00-8ABFF: page 8 */
-       0x8,
-       /* 8AC00-8ACFF: page 8 */
-       0x8,
-       /* 8AD00-8ADFF: page 8 */
-       0x8,
-       /* 8AE00-8AEFF: page 8 */
-       0x8,
-       /* 8AF00-8AFFF: page 8 */
-       0x8,
-       /* 8B000-8B0FF: page 8 */
-       0x8,
-       /* 8B100-8B1FF: page 8 */
-       0x8,
-       /* 8B200-8B2FF: page 8 */
-       0x8,
-       /* 8B300-8B3FF: page 8 */
-       0x8,
-       /* 8B400-8B4FF: page 8 */
-       0x8,
-       /* 8B500-8B5FF: page 8 */
-       0x8,
-       /* 8B600-8B6FF: page 8 */
-       0x8,
-       /* 8B700-8B7FF: page 8 */
-       0x8,
-       /* 8B800-8B8FF: page 8 */
-       0x8,
-       /* 8B900-8B9FF: page 8 */
-       0x8,
-       /* 8BA00-8BAFF: page 8 */
-       0x8,
-       /* 8BB00-8BBFF: page 8 */
-       0x8,
-       /* 8BC00-8BCFF: page 8 */
-       0x8,
-       /* 8BD00-8BDFF: page 8 */
-       0x8,
-       /* 8BE00-8BEFF: page 8 */
-       0x8,
-       /* 8BF00-8BFFF: page 8 */
-       0x8,
-       /* 8C000-8C0FF: page 8 */
-       0x8,
-       /* 8C100-8C1FF: page 8 */
-       0x8,
-       /* 8C200-8C2FF: page 8 */
-       0x8,
-       /* 8C300-8C3FF: page 8 */
-       0x8,
-       /* 8C400-8C4FF: page 8 */
-       0x8,
-       /* 8C500-8C5FF: page 8 */
-       0x8,
-       /* 8C600-8C6FF: page 8 */
-       0x8,
-       /* 8C700-8C7FF: page 8 */
-       0x8,
-       /* 8C800-8C8FF: page 8 */
-       0x8,
-       /* 8C900-8C9FF: page 8 */
-       0x8,
-       /* 8CA00-8CAFF: page 8 */
-       0x8,
-       /* 8CB00-8CBFF: page 8 */
-       0x8,
-       /* 8CC00-8CCFF: page 8 */
-       0x8,
-       /* 8CD00-8CDFF: page 8 */
-       0x8,
-       /* 8CE00-8CEFF: page 8 */
-       0x8,
-       /* 8CF00-8CFFF: page 8 */
-       0x8,
-       /* 8D000-8D0FF: page 8 */
-       0x8,
-       /* 8D100-8D1FF: page 8 */
-       0x8,
-       /* 8D200-8D2FF: page 8 */
-       0x8,
-       /* 8D300-8D3FF: page 8 */
-       0x8,
-       /* 8D400-8D4FF: page 8 */
-       0x8,
-       /* 8D500-8D5FF: page 8 */
-       0x8,
-       /* 8D600-8D6FF: page 8 */
-       0x8,
-       /* 8D700-8D7FF: page 8 */
-       0x8,
-       /* 8D800-8D8FF: page 8 */
-       0x8,
-       /* 8D900-8D9FF: page 8 */
-       0x8,
-       /* 8DA00-8DAFF: page 8 */
-       0x8,
-       /* 8DB00-8DBFF: page 8 */
-       0x8,
-       /* 8DC00-8DCFF: page 8 */
-       0x8,
-       /* 8DD00-8DDFF: page 8 */
-       0x8,
-       /* 8DE00-8DEFF: page 8 */
-       0x8,
-       /* 8DF00-8DFFF: page 8 */
-       0x8,
-       /* 8E000-8E0FF: page 8 */
-       0x8,
-       /* 8E100-8E1FF: page 8 */
-       0x8,
-       /* 8E200-8E2FF: page 8 */
-       0x8,
-       /* 8E300-8E3FF: page 8 */
-       0x8,
-       /* 8E400-8E4FF: page 8 */
-       0x8,
-       /* 8E500-8E5FF: page 8 */
-       0x8,
-       /* 8E600-8E6FF: page 8 */
-       0x8,
-       /* 8E700-8E7FF: page 8 */
-       0x8,
-       /* 8E800-8E8FF: page 8 */
-       0x8,
-       /* 8E900-8E9FF: page 8 */
-       0x8,
-       /* 8EA00-8EAFF: page 8 */
-       0x8,
-       /* 8EB00-8EBFF: page 8 */
-       0x8,
-       /* 8EC00-8ECFF: page 8 */
-       0x8,
-       /* 8ED00-8EDFF: page 8 */
-       0x8,
-       /* 8EE00-8EEFF: page 8 */
-       0x8,
-       /* 8EF00-8EFFF: page 8 */
-       0x8,
-       /* 8F000-8F0FF: page 8 */
-       0x8,
-       /* 8F100-8F1FF: page 8 */
-       0x8,
-       /* 8F200-8F2FF: page 8 */
-       0x8,
-       /* 8F300-8F3FF: page 8 */
-       0x8,
-       /* 8F400-8F4FF: page 8 */
-       0x8,
-       /* 8F500-8F5FF: page 8 */
-       0x8,
-       /* 8F600-8F6FF: page 8 */
-       0x8,
-       /* 8F700-8F7FF: page 8 */
-       0x8,
-       /* 8F800-8F8FF: page 8 */
-       0x8,
-       /* 8F900-8F9FF: page 8 */
-       0x8,
-       /* 8FA00-8FAFF: page 8 */
-       0x8,
-       /* 8FB00-8FBFF: page 8 */
-       0x8,
-       /* 8FC00-8FCFF: page 8 */
-       0x8,
-       /* 8FD00-8FDFF: page 8 */
-       0x8,
-       /* 8FE00-8FEFF: page 8 */
-       0x8,
-       /* 8FF00-8FFFF: page 8 */
-       0x8,
-       /* 90000-900FF: page 8 */
-       0x8,
-       /* 90100-901FF: page 8 */
-       0x8,
-       /* 90200-902FF: page 8 */
-       0x8,
-       /* 90300-903FF: page 8 */
-       0x8,
-       /* 90400-904FF: page 8 */
-       0x8,
-       /* 90500-905FF: page 8 */
-       0x8,
-       /* 90600-906FF: page 8 */
-       0x8,
-       /* 90700-907FF: page 8 */
-       0x8,
-       /* 90800-908FF: page 8 */
-       0x8,
-       /* 90900-909FF: page 8 */
-       0x8,
-       /* 90A00-90AFF: page 8 */
-       0x8,
-       /* 90B00-90BFF: page 8 */
-       0x8,
-       /* 90C00-90CFF: page 8 */
-       0x8,
-       /* 90D00-90DFF: page 8 */
-       0x8,
-       /* 90E00-90EFF: page 8 */
-       0x8,
-       /* 90F00-90FFF: page 8 */
-       0x8,
-       /* 91000-910FF: page 8 */
-       0x8,
-       /* 91100-911FF: page 8 */
-       0x8,
-       /* 91200-912FF: page 8 */
-       0x8,
-       /* 91300-913FF: page 8 */
-       0x8,
-       /* 91400-914FF: page 8 */
-       0x8,
-       /* 91500-915FF: page 8 */
-       0x8,
-       /* 91600-916FF: page 8 */
-       0x8,
-       /* 91700-917FF: page 8 */
-       0x8,
-       /* 91800-918FF: page 8 */
-       0x8,
-       /* 91900-919FF: page 8 */
-       0x8,
-       /* 91A00-91AFF: page 8 */
-       0x8,
-       /* 91B00-91BFF: page 8 */
-       0x8,
-       /* 91C00-91CFF: page 8 */
-       0x8,
-       /* 91D00-91DFF: page 8 */
-       0x8,
-       /* 91E00-91EFF: page 8 */
-       0x8,
-       /* 91F00-91FFF: page 8 */
-       0x8,
-       /* 92000-920FF: page 8 */
-       0x8,
-       /* 92100-921FF: page 8 */
-       0x8,
-       /* 92200-922FF: page 8 */
-       0x8,
-       /* 92300-923FF: page 8 */
-       0x8,
-       /* 92400-924FF: page 8 */
-       0x8,
-       /* 92500-925FF: page 8 */
-       0x8,
-       /* 92600-926FF: page 8 */
-       0x8,
-       /* 92700-927FF: page 8 */
-       0x8,
-       /* 92800-928FF: page 8 */
-       0x8,
-       /* 92900-929FF: page 8 */
-       0x8,
-       /* 92A00-92AFF: page 8 */
-       0x8,
-       /* 92B00-92BFF: page 8 */
-       0x8,
-       /* 92C00-92CFF: page 8 */
-       0x8,
-       /* 92D00-92DFF: page 8 */
-       0x8,
-       /* 92E00-92EFF: page 8 */
-       0x8,
-       /* 92F00-92FFF: page 8 */
-       0x8,
-       /* 93000-930FF: page 8 */
-       0x8,
-       /* 93100-931FF: page 8 */
-       0x8,
-       /* 93200-932FF: page 8 */
-       0x8,
-       /* 93300-933FF: page 8 */
-       0x8,
-       /* 93400-934FF: page 8 */
-       0x8,
-       /* 93500-935FF: page 8 */
-       0x8,
-       /* 93600-936FF: page 8 */
-       0x8,
-       /* 93700-937FF: page 8 */
-       0x8,
-       /* 93800-938FF: page 8 */
-       0x8,
-       /* 93900-939FF: page 8 */
-       0x8,
-       /* 93A00-93AFF: page 8 */
-       0x8,
-       /* 93B00-93BFF: page 8 */
-       0x8,
-       /* 93C00-93CFF: page 8 */
-       0x8,
-       /* 93D00-93DFF: page 8 */
-       0x8,
-       /* 93E00-93EFF: page 8 */
-       0x8,
-       /* 93F00-93FFF: page 8 */
-       0x8,
-       /* 94000-940FF: page 8 */
-       0x8,
-       /* 94100-941FF: page 8 */
-       0x8,
-       /* 94200-942FF: page 8 */
-       0x8,
-       /* 94300-943FF: page 8 */
-       0x8,
-       /* 94400-944FF: page 8 */
-       0x8,
-       /* 94500-945FF: page 8 */
-       0x8,
-       /* 94600-946FF: page 8 */
-       0x8,
-       /* 94700-947FF: page 8 */
-       0x8,
-       /* 94800-948FF: page 8 */
-       0x8,
-       /* 94900-949FF: page 8 */
-       0x8,
-       /* 94A00-94AFF: page 8 */
-       0x8,
-       /* 94B00-94BFF: page 8 */
-       0x8,
-       /* 94C00-94CFF: page 8 */
-       0x8,
-       /* 94D00-94DFF: page 8 */
-       0x8,
-       /* 94E00-94EFF: page 8 */
-       0x8,
-       /* 94F00-94FFF: page 8 */
-       0x8,
-       /* 95000-950FF: page 8 */
-       0x8,
-       /* 95100-951FF: page 8 */
-       0x8,
-       /* 95200-952FF: page 8 */
-       0x8,
-       /* 95300-953FF: page 8 */
-       0x8,
-       /* 95400-954FF: page 8 */
-       0x8,
-       /* 95500-955FF: page 8 */
-       0x8,
-       /* 95600-956FF: page 8 */
-       0x8,
-       /* 95700-957FF: page 8 */
-       0x8,
-       /* 95800-958FF: page 8 */
-       0x8,
-       /* 95900-959FF: page 8 */
-       0x8,
-       /* 95A00-95AFF: page 8 */
-       0x8,
-       /* 95B00-95BFF: page 8 */
-       0x8,
-       /* 95C00-95CFF: page 8 */
-       0x8,
-       /* 95D00-95DFF: page 8 */
-       0x8,
-       /* 95E00-95EFF: page 8 */
-       0x8,
-       /* 95F00-95FFF: page 8 */
-       0x8,
-       /* 96000-960FF: page 8 */
-       0x8,
-       /* 96100-961FF: page 8 */
-       0x8,
-       /* 96200-962FF: page 8 */
-       0x8,
-       /* 96300-963FF: page 8 */
-       0x8,
-       /* 96400-964FF: page 8 */
-       0x8,
-       /* 96500-965FF: page 8 */
-       0x8,
-       /* 96600-966FF: page 8 */
-       0x8,
-       /* 96700-967FF: page 8 */
-       0x8,
-       /* 96800-968FF: page 8 */
-       0x8,
-       /* 96900-969FF: page 8 */
-       0x8,
-       /* 96A00-96AFF: page 8 */
-       0x8,
-       /* 96B00-96BFF: page 8 */
-       0x8,
-       /* 96C00-96CFF: page 8 */
-       0x8,
-       /* 96D00-96DFF: page 8 */
-       0x8,
-       /* 96E00-96EFF: page 8 */
-       0x8,
-       /* 96F00-96FFF: page 8 */
-       0x8,
-       /* 97000-970FF: page 8 */
-       0x8,
-       /* 97100-971FF: page 8 */
-       0x8,
-       /* 97200-972FF: page 8 */
-       0x8,
-       /* 97300-973FF: page 8 */
-       0x8,
-       /* 97400-974FF: page 8 */
-       0x8,
-       /* 97500-975FF: page 8 */
-       0x8,
-       /* 97600-976FF: page 8 */
-       0x8,
-       /* 97700-977FF: page 8 */
-       0x8,
-       /* 97800-978FF: page 8 */
-       0x8,
-       /* 97900-979FF: page 8 */
-       0x8,
-       /* 97A00-97AFF: page 8 */
-       0x8,
-       /* 97B00-97BFF: page 8 */
-       0x8,
-       /* 97C00-97CFF: page 8 */
-       0x8,
-       /* 97D00-97DFF: page 8 */
-       0x8,
-       /* 97E00-97EFF: page 8 */
-       0x8,
-       /* 97F00-97FFF: page 8 */
-       0x8,
-       /* 98000-980FF: page 8 */
-       0x8,
-       /* 98100-981FF: page 8 */
-       0x8,
-       /* 98200-982FF: page 8 */
-       0x8,
-       /* 98300-983FF: page 8 */
-       0x8,
-       /* 98400-984FF: page 8 */
-       0x8,
-       /* 98500-985FF: page 8 */
-       0x8,
-       /* 98600-986FF: page 8 */
-       0x8,
-       /* 98700-987FF: page 8 */
-       0x8,
-       /* 98800-988FF: page 8 */
-       0x8,
-       /* 98900-989FF: page 8 */
-       0x8,
-       /* 98A00-98AFF: page 8 */
-       0x8,
-       /* 98B00-98BFF: page 8 */
-       0x8,
-       /* 98C00-98CFF: page 8 */
-       0x8,
-       /* 98D00-98DFF: page 8 */
-       0x8,
-       /* 98E00-98EFF: page 8 */
-       0x8,
-       /* 98F00-98FFF: page 8 */
-       0x8,
-       /* 99000-990FF: page 8 */
-       0x8,
-       /* 99100-991FF: page 8 */
-       0x8,
-       /* 99200-992FF: page 8 */
-       0x8,
-       /* 99300-993FF: page 8 */
-       0x8,
-       /* 99400-994FF: page 8 */
-       0x8,
-       /* 99500-995FF: page 8 */
-       0x8,
-       /* 99600-996FF: page 8 */
-       0x8,
-       /* 99700-997FF: page 8 */
-       0x8,
-       /* 99800-998FF: page 8 */
-       0x8,
-       /* 99900-999FF: page 8 */
-       0x8,
-       /* 99A00-99AFF: page 8 */
-       0x8,
-       /* 99B00-99BFF: page 8 */
-       0x8,
-       /* 99C00-99CFF: page 8 */
-       0x8,
-       /* 99D00-99DFF: page 8 */
-       0x8,
-       /* 99E00-99EFF: page 8 */
-       0x8,
-       /* 99F00-99FFF: page 8 */
-       0x8,
-       /* 9A000-9A0FF: page 8 */
-       0x8,
-       /* 9A100-9A1FF: page 8 */
-       0x8,
-       /* 9A200-9A2FF: page 8 */
-       0x8,
-       /* 9A300-9A3FF: page 8 */
-       0x8,
-       /* 9A400-9A4FF: page 8 */
-       0x8,
-       /* 9A500-9A5FF: page 8 */
-       0x8,
-       /* 9A600-9A6FF: page 8 */
-       0x8,
-       /* 9A700-9A7FF: page 8 */
-       0x8,
-       /* 9A800-9A8FF: page 8 */
-       0x8,
-       /* 9A900-9A9FF: page 8 */
-       0x8,
-       /* 9AA00-9AAFF: page 8 */
-       0x8,
-       /* 9AB00-9ABFF: page 8 */
-       0x8,
-       /* 9AC00-9ACFF: page 8 */
-       0x8,
-       /* 9AD00-9ADFF: page 8 */
-       0x8,
-       /* 9AE00-9AEFF: page 8 */
-       0x8,
-       /* 9AF00-9AFFF: page 8 */
-       0x8,
-       /* 9B000-9B0FF: page 8 */
-       0x8,
-       /* 9B100-9B1FF: page 8 */
-       0x8,
-       /* 9B200-9B2FF: page 8 */
-       0x8,
-       /* 9B300-9B3FF: page 8 */
-       0x8,
-       /* 9B400-9B4FF: page 8 */
-       0x8,
-       /* 9B500-9B5FF: page 8 */
-       0x8,
-       /* 9B600-9B6FF: page 8 */
-       0x8,
-       /* 9B700-9B7FF: page 8 */
-       0x8,
-       /* 9B800-9B8FF: page 8 */
-       0x8,
-       /* 9B900-9B9FF: page 8 */
-       0x8,
-       /* 9BA00-9BAFF: page 8 */
-       0x8,
-       /* 9BB00-9BBFF: page 8 */
-       0x8,
-       /* 9BC00-9BCFF: page 8 */
-       0x8,
-       /* 9BD00-9BDFF: page 8 */
-       0x8,
-       /* 9BE00-9BEFF: page 8 */
-       0x8,
-       /* 9BF00-9BFFF: page 8 */
-       0x8,
-       /* 9C000-9C0FF: page 8 */
-       0x8,
-       /* 9C100-9C1FF: page 8 */
-       0x8,
-       /* 9C200-9C2FF: page 8 */
-       0x8,
-       /* 9C300-9C3FF: page 8 */
-       0x8,
-       /* 9C400-9C4FF: page 8 */
-       0x8,
-       /* 9C500-9C5FF: page 8 */
-       0x8,
-       /* 9C600-9C6FF: page 8 */
-       0x8,
-       /* 9C700-9C7FF: page 8 */
-       0x8,
-       /* 9C800-9C8FF: page 8 */
-       0x8,
-       /* 9C900-9C9FF: page 8 */
-       0x8,
-       /* 9CA00-9CAFF: page 8 */
-       0x8,
-       /* 9CB00-9CBFF: page 8 */
-       0x8,
-       /* 9CC00-9CCFF: page 8 */
-       0x8,
-       /* 9CD00-9CDFF: page 8 */
-       0x8,
-       /* 9CE00-9CEFF: page 8 */
-       0x8,
-       /* 9CF00-9CFFF: page 8 */
-       0x8,
-       /* 9D000-9D0FF: page 8 */
-       0x8,
-       /* 9D100-9D1FF: page 8 */
-       0x8,
-       /* 9D200-9D2FF: page 8 */
-       0x8,
-       /* 9D300-9D3FF: page 8 */
-       0x8,
-       /* 9D400-9D4FF: page 8 */
-       0x8,
-       /* 9D500-9D5FF: page 8 */
-       0x8,
-       /* 9D600-9D6FF: page 8 */
-       0x8,
-       /* 9D700-9D7FF: page 8 */
-       0x8,
-       /* 9D800-9D8FF: page 8 */
-       0x8,
-       /* 9D900-9D9FF: page 8 */
-       0x8,
-       /* 9DA00-9DAFF: page 8 */
-       0x8,
-       /* 9DB00-9DBFF: page 8 */
-       0x8,
-       /* 9DC00-9DCFF: page 8 */
-       0x8,
-       /* 9DD00-9DDFF: page 8 */
-       0x8,
-       /* 9DE00-9DEFF: page 8 */
-       0x8,
-       /* 9DF00-9DFFF: page 8 */
-       0x8,
-       /* 9E000-9E0FF: page 8 */
-       0x8,
-       /* 9E100-9E1FF: page 8 */
-       0x8,
-       /* 9E200-9E2FF: page 8 */
-       0x8,
-       /* 9E300-9E3FF: page 8 */
-       0x8,
-       /* 9E400-9E4FF: page 8 */
-       0x8,
-       /* 9E500-9E5FF: page 8 */
-       0x8,
-       /* 9E600-9E6FF: page 8 */
-       0x8,
-       /* 9E700-9E7FF: page 8 */
-       0x8,
-       /* 9E800-9E8FF: page 8 */
-       0x8,
-       /* 9E900-9E9FF: page 8 */
-       0x8,
-       /* 9EA00-9EAFF: page 8 */
-       0x8,
-       /* 9EB00-9EBFF: page 8 */
-       0x8,
-       /* 9EC00-9ECFF: page 8 */
-       0x8,
-       /* 9ED00-9EDFF: page 8 */
-       0x8,
-       /* 9EE00-9EEFF: page 8 */
-       0x8,
-       /* 9EF00-9EFFF: page 8 */
-       0x8,
-       /* 9F000-9F0FF: page 8 */
-       0x8,
-       /* 9F100-9F1FF: page 8 */
-       0x8,
-       /* 9F200-9F2FF: page 8 */
-       0x8,
-       /* 9F300-9F3FF: page 8 */
-       0x8,
-       /* 9F400-9F4FF: page 8 */
-       0x8,
-       /* 9F500-9F5FF: page 8 */
-       0x8,
-       /* 9F600-9F6FF: page 8 */
-       0x8,
-       /* 9F700-9F7FF: page 8 */
-       0x8,
-       /* 9F800-9F8FF: page 8 */
-       0x8,
-       /* 9F900-9F9FF: page 8 */
-       0x8,
-       /* 9FA00-9FAFF: page 8 */
-       0x8,
-       /* 9FB00-9FBFF: page 8 */
-       0x8,
-       /* 9FC00-9FCFF: page 8 */
-       0x8,
-       /* 9FD00-9FDFF: page 8 */
-       0x8,
-       /* 9FE00-9FEFF: page 8 */
-       0x8,
-       /* 9FF00-9FFFF: page 8 */
-       0x8,
-       /* A0000-A00FF: page 8 */
-       0x8,
-       /* A0100-A01FF: page 8 */
-       0x8,
-       /* A0200-A02FF: page 8 */
-       0x8,
-       /* A0300-A03FF: page 8 */
-       0x8,
-       /* A0400-A04FF: page 8 */
-       0x8,
-       /* A0500-A05FF: page 8 */
-       0x8,
-       /* A0600-A06FF: page 8 */
-       0x8,
-       /* A0700-A07FF: page 8 */
-       0x8,
-       /* A0800-A08FF: page 8 */
-       0x8,
-       /* A0900-A09FF: page 8 */
-       0x8,
-       /* A0A00-A0AFF: page 8 */
-       0x8,
-       /* A0B00-A0BFF: page 8 */
-       0x8,
-       /* A0C00-A0CFF: page 8 */
-       0x8,
-       /* A0D00-A0DFF: page 8 */
-       0x8,
-       /* A0E00-A0EFF: page 8 */
-       0x8,
-       /* A0F00-A0FFF: page 8 */
-       0x8,
-       /* A1000-A10FF: page 8 */
-       0x8,
-       /* A1100-A11FF: page 8 */
-       0x8,
-       /* A1200-A12FF: page 8 */
-       0x8,
-       /* A1300-A13FF: page 8 */
-       0x8,
-       /* A1400-A14FF: page 8 */
-       0x8,
-       /* A1500-A15FF: page 8 */
-       0x8,
-       /* A1600-A16FF: page 8 */
-       0x8,
-       /* A1700-A17FF: page 8 */
-       0x8,
-       /* A1800-A18FF: page 8 */
-       0x8,
-       /* A1900-A19FF: page 8 */
-       0x8,
-       /* A1A00-A1AFF: page 8 */
-       0x8,
-       /* A1B00-A1BFF: page 8 */
-       0x8,
-       /* A1C00-A1CFF: page 8 */
-       0x8,
-       /* A1D00-A1DFF: page 8 */
-       0x8,
-       /* A1E00-A1EFF: page 8 */
-       0x8,
-       /* A1F00-A1FFF: page 8 */
-       0x8,
-       /* A2000-A20FF: page 8 */
-       0x8,
-       /* A2100-A21FF: page 8 */
-       0x8,
-       /* A2200-A22FF: page 8 */
-       0x8,
-       /* A2300-A23FF: page 8 */
-       0x8,
-       /* A2400-A24FF: page 8 */
-       0x8,
-       /* A2500-A25FF: page 8 */
-       0x8,
-       /* A2600-A26FF: page 8 */
-       0x8,
-       /* A2700-A27FF: page 8 */
-       0x8,
-       /* A2800-A28FF: page 8 */
-       0x8,
-       /* A2900-A29FF: page 8 */
-       0x8,
-       /* A2A00-A2AFF: page 8 */
-       0x8,
-       /* A2B00-A2BFF: page 8 */
-       0x8,
-       /* A2C00-A2CFF: page 8 */
-       0x8,
-       /* A2D00-A2DFF: page 8 */
-       0x8,
-       /* A2E00-A2EFF: page 8 */
-       0x8,
-       /* A2F00-A2FFF: page 8 */
-       0x8,
-       /* A3000-A30FF: page 8 */
-       0x8,
-       /* A3100-A31FF: page 8 */
-       0x8,
-       /* A3200-A32FF: page 8 */
-       0x8,
-       /* A3300-A33FF: page 8 */
-       0x8,
-       /* A3400-A34FF: page 8 */
-       0x8,
-       /* A3500-A35FF: page 8 */
-       0x8,
-       /* A3600-A36FF: page 8 */
-       0x8,
-       /* A3700-A37FF: page 8 */
-       0x8,
-       /* A3800-A38FF: page 8 */
-       0x8,
-       /* A3900-A39FF: page 8 */
-       0x8,
-       /* A3A00-A3AFF: page 8 */
-       0x8,
-       /* A3B00-A3BFF: page 8 */
-       0x8,
-       /* A3C00-A3CFF: page 8 */
-       0x8,
-       /* A3D00-A3DFF: page 8 */
-       0x8,
-       /* A3E00-A3EFF: page 8 */
-       0x8,
-       /* A3F00-A3FFF: page 8 */
-       0x8,
-       /* A4000-A40FF: page 8 */
-       0x8,
-       /* A4100-A41FF: page 8 */
-       0x8,
-       /* A4200-A42FF: page 8 */
-       0x8,
-       /* A4300-A43FF: page 8 */
-       0x8,
-       /* A4400-A44FF: page 8 */
-       0x8,
-       /* A4500-A45FF: page 8 */
-       0x8,
-       /* A4600-A46FF: page 8 */
-       0x8,
-       /* A4700-A47FF: page 8 */
-       0x8,
-       /* A4800-A48FF: page 8 */
-       0x8,
-       /* A4900-A49FF: page 8 */
-       0x8,
-       /* A4A00-A4AFF: page 8 */
-       0x8,
-       /* A4B00-A4BFF: page 8 */
-       0x8,
-       /* A4C00-A4CFF: page 8 */
-       0x8,
-       /* A4D00-A4DFF: page 8 */
-       0x8,
-       /* A4E00-A4EFF: page 8 */
-       0x8,
-       /* A4F00-A4FFF: page 8 */
-       0x8,
-       /* A5000-A50FF: page 8 */
-       0x8,
-       /* A5100-A51FF: page 8 */
-       0x8,
-       /* A5200-A52FF: page 8 */
-       0x8,
-       /* A5300-A53FF: page 8 */
-       0x8,
-       /* A5400-A54FF: page 8 */
-       0x8,
-       /* A5500-A55FF: page 8 */
-       0x8,
-       /* A5600-A56FF: page 8 */
-       0x8,
-       /* A5700-A57FF: page 8 */
-       0x8,
-       /* A5800-A58FF: page 8 */
-       0x8,
-       /* A5900-A59FF: page 8 */
-       0x8,
-       /* A5A00-A5AFF: page 8 */
-       0x8,
-       /* A5B00-A5BFF: page 8 */
-       0x8,
-       /* A5C00-A5CFF: page 8 */
-       0x8,
-       /* A5D00-A5DFF: page 8 */
-       0x8,
-       /* A5E00-A5EFF: page 8 */
-       0x8,
-       /* A5F00-A5FFF: page 8 */
-       0x8,
-       /* A6000-A60FF: page 8 */
-       0x8,
-       /* A6100-A61FF: page 8 */
-       0x8,
-       /* A6200-A62FF: page 8 */
-       0x8,
-       /* A6300-A63FF: page 8 */
-       0x8,
-       /* A6400-A64FF: page 8 */
-       0x8,
-       /* A6500-A65FF: page 8 */
-       0x8,
-       /* A6600-A66FF: page 8 */
-       0x8,
-       /* A6700-A67FF: page 8 */
-       0x8,
-       /* A6800-A68FF: page 8 */
-       0x8,
-       /* A6900-A69FF: page 8 */
-       0x8,
-       /* A6A00-A6AFF: page 8 */
-       0x8,
-       /* A6B00-A6BFF: page 8 */
-       0x8,
-       /* A6C00-A6CFF: page 8 */
-       0x8,
-       /* A6D00-A6DFF: page 8 */
-       0x8,
-       /* A6E00-A6EFF: page 8 */
-       0x8,
-       /* A6F00-A6FFF: page 8 */
-       0x8,
-       /* A7000-A70FF: page 8 */
-       0x8,
-       /* A7100-A71FF: page 8 */
-       0x8,
-       /* A7200-A72FF: page 8 */
-       0x8,
-       /* A7300-A73FF: page 8 */
-       0x8,
-       /* A7400-A74FF: page 8 */
-       0x8,
-       /* A7500-A75FF: page 8 */
-       0x8,
-       /* A7600-A76FF: page 8 */
-       0x8,
-       /* A7700-A77FF: page 8 */
-       0x8,
-       /* A7800-A78FF: page 8 */
-       0x8,
-       /* A7900-A79FF: page 8 */
-       0x8,
-       /* A7A00-A7AFF: page 8 */
-       0x8,
-       /* A7B00-A7BFF: page 8 */
-       0x8,
-       /* A7C00-A7CFF: page 8 */
-       0x8,
-       /* A7D00-A7DFF: page 8 */
-       0x8,
-       /* A7E00-A7EFF: page 8 */
-       0x8,
-       /* A7F00-A7FFF: page 8 */
-       0x8,
-       /* A8000-A80FF: page 8 */
-       0x8,
-       /* A8100-A81FF: page 8 */
-       0x8,
-       /* A8200-A82FF: page 8 */
-       0x8,
-       /* A8300-A83FF: page 8 */
-       0x8,
-       /* A8400-A84FF: page 8 */
-       0x8,
-       /* A8500-A85FF: page 8 */
-       0x8,
-       /* A8600-A86FF: page 8 */
-       0x8,
-       /* A8700-A87FF: page 8 */
-       0x8,
-       /* A8800-A88FF: page 8 */
-       0x8,
-       /* A8900-A89FF: page 8 */
-       0x8,
-       /* A8A00-A8AFF: page 8 */
-       0x8,
-       /* A8B00-A8BFF: page 8 */
-       0x8,
-       /* A8C00-A8CFF: page 8 */
-       0x8,
-       /* A8D00-A8DFF: page 8 */
-       0x8,
-       /* A8E00-A8EFF: page 8 */
-       0x8,
-       /* A8F00-A8FFF: page 8 */
-       0x8,
-       /* A9000-A90FF: page 8 */
-       0x8,
-       /* A9100-A91FF: page 8 */
-       0x8,
-       /* A9200-A92FF: page 8 */
-       0x8,
-       /* A9300-A93FF: page 8 */
-       0x8,
-       /* A9400-A94FF: page 8 */
-       0x8,
-       /* A9500-A95FF: page 8 */
-       0x8,
-       /* A9600-A96FF: page 8 */
-       0x8,
-       /* A9700-A97FF: page 8 */
-       0x8,
-       /* A9800-A98FF: page 8 */
-       0x8,
-       /* A9900-A99FF: page 8 */
-       0x8,
-       /* A9A00-A9AFF: page 8 */
-       0x8,
-       /* A9B00-A9BFF: page 8 */
-       0x8,
-       /* A9C00-A9CFF: page 8 */
-       0x8,
-       /* A9D00-A9DFF: page 8 */
-       0x8,
-       /* A9E00-A9EFF: page 8 */
-       0x8,
-       /* A9F00-A9FFF: page 8 */
-       0x8,
-       /* AA000-AA0FF: page 8 */
-       0x8,
-       /* AA100-AA1FF: page 8 */
-       0x8,
-       /* AA200-AA2FF: page 8 */
-       0x8,
-       /* AA300-AA3FF: page 8 */
-       0x8,
-       /* AA400-AA4FF: page 8 */
-       0x8,
-       /* AA500-AA5FF: page 8 */
-       0x8,
-       /* AA600-AA6FF: page 8 */
-       0x8,
-       /* AA700-AA7FF: page 8 */
-       0x8,
-       /* AA800-AA8FF: page 8 */
-       0x8,
-       /* AA900-AA9FF: page 8 */
-       0x8,
-       /* AAA00-AAAFF: page 8 */
-       0x8,
-       /* AAB00-AABFF: page 8 */
-       0x8,
-       /* AAC00-AACFF: page 8 */
-       0x8,
-       /* AAD00-AADFF: page 8 */
-       0x8,
-       /* AAE00-AAEFF: page 8 */
-       0x8,
-       /* AAF00-AAFFF: page 8 */
-       0x8,
-       /* AB000-AB0FF: page 8 */
-       0x8,
-       /* AB100-AB1FF: page 8 */
-       0x8,
-       /* AB200-AB2FF: page 8 */
-       0x8,
-       /* AB300-AB3FF: page 8 */
-       0x8,
-       /* AB400-AB4FF: page 8 */
-       0x8,
-       /* AB500-AB5FF: page 8 */
-       0x8,
-       /* AB600-AB6FF: page 8 */
-       0x8,
-       /* AB700-AB7FF: page 8 */
-       0x8,
-       /* AB800-AB8FF: page 8 */
-       0x8,
-       /* AB900-AB9FF: page 8 */
-       0x8,
-       /* ABA00-ABAFF: page 8 */
-       0x8,
-       /* ABB00-ABBFF: page 8 */
-       0x8,
-       /* ABC00-ABCFF: page 8 */
-       0x8,
-       /* ABD00-ABDFF: page 8 */
-       0x8,
-       /* ABE00-ABEFF: page 8 */
-       0x8,
-       /* ABF00-ABFFF: page 8 */
-       0x8,
-       /* AC000-AC0FF: page 8 */
-       0x8,
-       /* AC100-AC1FF: page 8 */
-       0x8,
-       /* AC200-AC2FF: page 8 */
-       0x8,
-       /* AC300-AC3FF: page 8 */
-       0x8,
-       /* AC400-AC4FF: page 8 */
-       0x8,
-       /* AC500-AC5FF: page 8 */
-       0x8,
-       /* AC600-AC6FF: page 8 */
-       0x8,
-       /* AC700-AC7FF: page 8 */
-       0x8,
-       /* AC800-AC8FF: page 8 */
-       0x8,
-       /* AC900-AC9FF: page 8 */
-       0x8,
-       /* ACA00-ACAFF: page 8 */
-       0x8,
-       /* ACB00-ACBFF: page 8 */
-       0x8,
-       /* ACC00-ACCFF: page 8 */
-       0x8,
-       /* ACD00-ACDFF: page 8 */
-       0x8,
-       /* ACE00-ACEFF: page 8 */
-       0x8,
-       /* ACF00-ACFFF: page 8 */
-       0x8,
-       /* AD000-AD0FF: page 8 */
-       0x8,
-       /* AD100-AD1FF: page 8 */
-       0x8,
-       /* AD200-AD2FF: page 8 */
-       0x8,
-       /* AD300-AD3FF: page 8 */
-       0x8,
-       /* AD400-AD4FF: page 8 */
-       0x8,
-       /* AD500-AD5FF: page 8 */
-       0x8,
-       /* AD600-AD6FF: page 8 */
-       0x8,
-       /* AD700-AD7FF: page 8 */
-       0x8,
-       /* AD800-AD8FF: page 8 */
-       0x8,
-       /* AD900-AD9FF: page 8 */
-       0x8,
-       /* ADA00-ADAFF: page 8 */
-       0x8,
-       /* ADB00-ADBFF: page 8 */
-       0x8,
-       /* ADC00-ADCFF: page 8 */
-       0x8,
-       /* ADD00-ADDFF: page 8 */
-       0x8,
-       /* ADE00-ADEFF: page 8 */
-       0x8,
-       /* ADF00-ADFFF: page 8 */
-       0x8,
-       /* AE000-AE0FF: page 8 */
-       0x8,
-       /* AE100-AE1FF: page 8 */
-       0x8,
-       /* AE200-AE2FF: page 8 */
-       0x8,
-       /* AE300-AE3FF: page 8 */
-       0x8,
-       /* AE400-AE4FF: page 8 */
-       0x8,
-       /* AE500-AE5FF: page 8 */
-       0x8,
-       /* AE600-AE6FF: page 8 */
-       0x8,
-       /* AE700-AE7FF: page 8 */
-       0x8,
-       /* AE800-AE8FF: page 8 */
-       0x8,
-       /* AE900-AE9FF: page 8 */
-       0x8,
-       /* AEA00-AEAFF: page 8 */
-       0x8,
-       /* AEB00-AEBFF: page 8 */
-       0x8,
-       /* AEC00-AECFF: page 8 */
-       0x8,
-       /* AED00-AEDFF: page 8 */
-       0x8,
-       /* AEE00-AEEFF: page 8 */
-       0x8,
-       /* AEF00-AEFFF: page 8 */
-       0x8,
-       /* AF000-AF0FF: page 8 */
-       0x8,
-       /* AF100-AF1FF: page 8 */
-       0x8,
-       /* AF200-AF2FF: page 8 */
-       0x8,
-       /* AF300-AF3FF: page 8 */
-       0x8,
-       /* AF400-AF4FF: page 8 */
-       0x8,
-       /* AF500-AF5FF: page 8 */
-       0x8,
-       /* AF600-AF6FF: page 8 */
-       0x8,
-       /* AF700-AF7FF: page 8 */
-       0x8,
-       /* AF800-AF8FF: page 8 */
-       0x8,
-       /* AF900-AF9FF: page 8 */
-       0x8,
-       /* AFA00-AFAFF: page 8 */
-       0x8,
-       /* AFB00-AFBFF: page 8 */
-       0x8,
-       /* AFC00-AFCFF: page 8 */
-       0x8,
-       /* AFD00-AFDFF: page 8 */
-       0x8,
-       /* AFE00-AFEFF: page 8 */
-       0x8,
-       /* AFF00-AFFFF: page 8 */
-       0x8,
-       /* B0000-B00FF: page 8 */
-       0x8,
-       /* B0100-B01FF: page 8 */
-       0x8,
-       /* B0200-B02FF: page 8 */
-       0x8,
-       /* B0300-B03FF: page 8 */
-       0x8,
-       /* B0400-B04FF: page 8 */
-       0x8,
-       /* B0500-B05FF: page 8 */
-       0x8,
-       /* B0600-B06FF: page 8 */
-       0x8,
-       /* B0700-B07FF: page 8 */
-       0x8,
-       /* B0800-B08FF: page 8 */
-       0x8,
-       /* B0900-B09FF: page 8 */
-       0x8,
-       /* B0A00-B0AFF: page 8 */
-       0x8,
-       /* B0B00-B0BFF: page 8 */
-       0x8,
-       /* B0C00-B0CFF: page 8 */
-       0x8,
-       /* B0D00-B0DFF: page 8 */
-       0x8,
-       /* B0E00-B0EFF: page 8 */
-       0x8,
-       /* B0F00-B0FFF: page 8 */
-       0x8,
-       /* B1000-B10FF: page 8 */
-       0x8,
-       /* B1100-B11FF: page 8 */
-       0x8,
-       /* B1200-B12FF: page 8 */
-       0x8,
-       /* B1300-B13FF: page 8 */
-       0x8,
-       /* B1400-B14FF: page 8 */
-       0x8,
-       /* B1500-B15FF: page 8 */
-       0x8,
-       /* B1600-B16FF: page 8 */
-       0x8,
-       /* B1700-B17FF: page 8 */
-       0x8,
-       /* B1800-B18FF: page 8 */
-       0x8,
-       /* B1900-B19FF: page 8 */
-       0x8,
-       /* B1A00-B1AFF: page 8 */
-       0x8,
-       /* B1B00-B1BFF: page 8 */
-       0x8,
-       /* B1C00-B1CFF: page 8 */
-       0x8,
-       /* B1D00-B1DFF: page 8 */
-       0x8,
-       /* B1E00-B1EFF: page 8 */
-       0x8,
-       /* B1F00-B1FFF: page 8 */
-       0x8,
-       /* B2000-B20FF: page 8 */
-       0x8,
-       /* B2100-B21FF: page 8 */
-       0x8,
-       /* B2200-B22FF: page 8 */
-       0x8,
-       /* B2300-B23FF: page 8 */
-       0x8,
-       /* B2400-B24FF: page 8 */
-       0x8,
-       /* B2500-B25FF: page 8 */
-       0x8,
-       /* B2600-B26FF: page 8 */
-       0x8,
-       /* B2700-B27FF: page 8 */
-       0x8,
-       /* B2800-B28FF: page 8 */
-       0x8,
-       /* B2900-B29FF: page 8 */
-       0x8,
-       /* B2A00-B2AFF: page 8 */
-       0x8,
-       /* B2B00-B2BFF: page 8 */
-       0x8,
-       /* B2C00-B2CFF: page 8 */
-       0x8,
-       /* B2D00-B2DFF: page 8 */
-       0x8,
-       /* B2E00-B2EFF: page 8 */
-       0x8,
-       /* B2F00-B2FFF: page 8 */
-       0x8,
-       /* B3000-B30FF: page 8 */
-       0x8,
-       /* B3100-B31FF: page 8 */
-       0x8,
-       /* B3200-B32FF: page 8 */
-       0x8,
-       /* B3300-B33FF: page 8 */
-       0x8,
-       /* B3400-B34FF: page 8 */
-       0x8,
-       /* B3500-B35FF: page 8 */
-       0x8,
-       /* B3600-B36FF: page 8 */
-       0x8,
-       /* B3700-B37FF: page 8 */
-       0x8,
-       /* B3800-B38FF: page 8 */
-       0x8,
-       /* B3900-B39FF: page 8 */
-       0x8,
-       /* B3A00-B3AFF: page 8 */
-       0x8,
-       /* B3B00-B3BFF: page 8 */
-       0x8,
-       /* B3C00-B3CFF: page 8 */
-       0x8,
-       /* B3D00-B3DFF: page 8 */
-       0x8,
-       /* B3E00-B3EFF: page 8 */
-       0x8,
-       /* B3F00-B3FFF: page 8 */
-       0x8,
-       /* B4000-B40FF: page 8 */
-       0x8,
-       /* B4100-B41FF: page 8 */
-       0x8,
-       /* B4200-B42FF: page 8 */
-       0x8,
-       /* B4300-B43FF: page 8 */
-       0x8,
-       /* B4400-B44FF: page 8 */
-       0x8,
-       /* B4500-B45FF: page 8 */
-       0x8,
-       /* B4600-B46FF: page 8 */
-       0x8,
-       /* B4700-B47FF: page 8 */
-       0x8,
-       /* B4800-B48FF: page 8 */
-       0x8,
-       /* B4900-B49FF: page 8 */
-       0x8,
-       /* B4A00-B4AFF: page 8 */
-       0x8,
-       /* B4B00-B4BFF: page 8 */
-       0x8,
-       /* B4C00-B4CFF: page 8 */
-       0x8,
-       /* B4D00-B4DFF: page 8 */
-       0x8,
-       /* B4E00-B4EFF: page 8 */
-       0x8,
-       /* B4F00-B4FFF: page 8 */
-       0x8,
-       /* B5000-B50FF: page 8 */
-       0x8,
-       /* B5100-B51FF: page 8 */
-       0x8,
-       /* B5200-B52FF: page 8 */
-       0x8,
-       /* B5300-B53FF: page 8 */
-       0x8,
-       /* B5400-B54FF: page 8 */
-       0x8,
-       /* B5500-B55FF: page 8 */
-       0x8,
-       /* B5600-B56FF: page 8 */
-       0x8,
-       /* B5700-B57FF: page 8 */
-       0x8,
-       /* B5800-B58FF: page 8 */
-       0x8,
-       /* B5900-B59FF: page 8 */
-       0x8,
-       /* B5A00-B5AFF: page 8 */
-       0x8,
-       /* B5B00-B5BFF: page 8 */
-       0x8,
-       /* B5C00-B5CFF: page 8 */
-       0x8,
-       /* B5D00-B5DFF: page 8 */
-       0x8,
-       /* B5E00-B5EFF: page 8 */
-       0x8,
-       /* B5F00-B5FFF: page 8 */
-       0x8,
-       /* B6000-B60FF: page 8 */
-       0x8,
-       /* B6100-B61FF: page 8 */
-       0x8,
-       /* B6200-B62FF: page 8 */
-       0x8,
-       /* B6300-B63FF: page 8 */
-       0x8,
-       /* B6400-B64FF: page 8 */
-       0x8,
-       /* B6500-B65FF: page 8 */
-       0x8,
-       /* B6600-B66FF: page 8 */
-       0x8,
-       /* B6700-B67FF: page 8 */
-       0x8,
-       /* B6800-B68FF: page 8 */
-       0x8,
-       /* B6900-B69FF: page 8 */
-       0x8,
-       /* B6A00-B6AFF: page 8 */
-       0x8,
-       /* B6B00-B6BFF: page 8 */
-       0x8,
-       /* B6C00-B6CFF: page 8 */
-       0x8,
-       /* B6D00-B6DFF: page 8 */
-       0x8,
-       /* B6E00-B6EFF: page 8 */
-       0x8,
-       /* B6F00-B6FFF: page 8 */
-       0x8,
-       /* B7000-B70FF: page 8 */
-       0x8,
-       /* B7100-B71FF: page 8 */
-       0x8,
-       /* B7200-B72FF: page 8 */
-       0x8,
-       /* B7300-B73FF: page 8 */
-       0x8,
-       /* B7400-B74FF: page 8 */
-       0x8,
-       /* B7500-B75FF: page 8 */
-       0x8,
-       /* B7600-B76FF: page 8 */
-       0x8,
-       /* B7700-B77FF: page 8 */
-       0x8,
-       /* B7800-B78FF: page 8 */
-       0x8,
-       /* B7900-B79FF: page 8 */
-       0x8,
-       /* B7A00-B7AFF: page 8 */
-       0x8,
-       /* B7B00-B7BFF: page 8 */
-       0x8,
-       /* B7C00-B7CFF: page 8 */
-       0x8,
-       /* B7D00-B7DFF: page 8 */
-       0x8,
-       /* B7E00-B7EFF: page 8 */
-       0x8,
-       /* B7F00-B7FFF: page 8 */
-       0x8,
-       /* B8000-B80FF: page 8 */
-       0x8,
-       /* B8100-B81FF: page 8 */
-       0x8,
-       /* B8200-B82FF: page 8 */
-       0x8,
-       /* B8300-B83FF: page 8 */
-       0x8,
-       /* B8400-B84FF: page 8 */
-       0x8,
-       /* B8500-B85FF: page 8 */
-       0x8,
-       /* B8600-B86FF: page 8 */
-       0x8,
-       /* B8700-B87FF: page 8 */
-       0x8,
-       /* B8800-B88FF: page 8 */
-       0x8,
-       /* B8900-B89FF: page 8 */
-       0x8,
-       /* B8A00-B8AFF: page 8 */
-       0x8,
-       /* B8B00-B8BFF: page 8 */
-       0x8,
-       /* B8C00-B8CFF: page 8 */
-       0x8,
-       /* B8D00-B8DFF: page 8 */
-       0x8,
-       /* B8E00-B8EFF: page 8 */
-       0x8,
-       /* B8F00-B8FFF: page 8 */
-       0x8,
-       /* B9000-B90FF: page 8 */
-       0x8,
-       /* B9100-B91FF: page 8 */
-       0x8,
-       /* B9200-B92FF: page 8 */
-       0x8,
-       /* B9300-B93FF: page 8 */
-       0x8,
-       /* B9400-B94FF: page 8 */
-       0x8,
-       /* B9500-B95FF: page 8 */
-       0x8,
-       /* B9600-B96FF: page 8 */
-       0x8,
-       /* B9700-B97FF: page 8 */
-       0x8,
-       /* B9800-B98FF: page 8 */
-       0x8,
-       /* B9900-B99FF: page 8 */
-       0x8,
-       /* B9A00-B9AFF: page 8 */
-       0x8,
-       /* B9B00-B9BFF: page 8 */
-       0x8,
-       /* B9C00-B9CFF: page 8 */
-       0x8,
-       /* B9D00-B9DFF: page 8 */
-       0x8,
-       /* B9E00-B9EFF: page 8 */
-       0x8,
-       /* B9F00-B9FFF: page 8 */
-       0x8,
-       /* BA000-BA0FF: page 8 */
-       0x8,
-       /* BA100-BA1FF: page 8 */
-       0x8,
-       /* BA200-BA2FF: page 8 */
-       0x8,
-       /* BA300-BA3FF: page 8 */
-       0x8,
-       /* BA400-BA4FF: page 8 */
-       0x8,
-       /* BA500-BA5FF: page 8 */
-       0x8,
-       /* BA600-BA6FF: page 8 */
-       0x8,
-       /* BA700-BA7FF: page 8 */
-       0x8,
-       /* BA800-BA8FF: page 8 */
-       0x8,
-       /* BA900-BA9FF: page 8 */
-       0x8,
-       /* BAA00-BAAFF: page 8 */
-       0x8,
-       /* BAB00-BABFF: page 8 */
-       0x8,
-       /* BAC00-BACFF: page 8 */
-       0x8,
-       /* BAD00-BADFF: page 8 */
-       0x8,
-       /* BAE00-BAEFF: page 8 */
-       0x8,
-       /* BAF00-BAFFF: page 8 */
-       0x8,
-       /* BB000-BB0FF: page 8 */
-       0x8,
-       /* BB100-BB1FF: page 8 */
-       0x8,
-       /* BB200-BB2FF: page 8 */
-       0x8,
-       /* BB300-BB3FF: page 8 */
-       0x8,
-       /* BB400-BB4FF: page 8 */
-       0x8,
-       /* BB500-BB5FF: page 8 */
-       0x8,
-       /* BB600-BB6FF: page 8 */
-       0x8,
-       /* BB700-BB7FF: page 8 */
-       0x8,
-       /* BB800-BB8FF: page 8 */
-       0x8,
-       /* BB900-BB9FF: page 8 */
-       0x8,
-       /* BBA00-BBAFF: page 8 */
-       0x8,
-       /* BBB00-BBBFF: page 8 */
-       0x8,
-       /* BBC00-BBCFF: page 8 */
-       0x8,
-       /* BBD00-BBDFF: page 8 */
-       0x8,
-       /* BBE00-BBEFF: page 8 */
-       0x8,
-       /* BBF00-BBFFF: page 8 */
-       0x8,
-       /* BC000-BC0FF: page 8 */
-       0x8,
-       /* BC100-BC1FF: page 8 */
-       0x8,
-       /* BC200-BC2FF: page 8 */
-       0x8,
-       /* BC300-BC3FF: page 8 */
-       0x8,
-       /* BC400-BC4FF: page 8 */
-       0x8,
-       /* BC500-BC5FF: page 8 */
-       0x8,
-       /* BC600-BC6FF: page 8 */
-       0x8,
-       /* BC700-BC7FF: page 8 */
-       0x8,
-       /* BC800-BC8FF: page 8 */
-       0x8,
-       /* BC900-BC9FF: page 8 */
-       0x8,
-       /* BCA00-BCAFF: page 8 */
-       0x8,
-       /* BCB00-BCBFF: page 8 */
-       0x8,
-       /* BCC00-BCCFF: page 8 */
-       0x8,
-       /* BCD00-BCDFF: page 8 */
-       0x8,
-       /* BCE00-BCEFF: page 8 */
-       0x8,
-       /* BCF00-BCFFF: page 8 */
-       0x8,
-       /* BD000-BD0FF: page 8 */
-       0x8,
-       /* BD100-BD1FF: page 8 */
-       0x8,
-       /* BD200-BD2FF: page 8 */
-       0x8,
-       /* BD300-BD3FF: page 8 */
-       0x8,
-       /* BD400-BD4FF: page 8 */
-       0x8,
-       /* BD500-BD5FF: page 8 */
-       0x8,
-       /* BD600-BD6FF: page 8 */
-       0x8,
-       /* BD700-BD7FF: page 8 */
-       0x8,
-       /* BD800-BD8FF: page 8 */
-       0x8,
-       /* BD900-BD9FF: page 8 */
-       0x8,
-       /* BDA00-BDAFF: page 8 */
-       0x8,
-       /* BDB00-BDBFF: page 8 */
-       0x8,
-       /* BDC00-BDCFF: page 8 */
-       0x8,
-       /* BDD00-BDDFF: page 8 */
-       0x8,
-       /* BDE00-BDEFF: page 8 */
-       0x8,
-       /* BDF00-BDFFF: page 8 */
-       0x8,
-       /* BE000-BE0FF: page 8 */
-       0x8,
-       /* BE100-BE1FF: page 8 */
-       0x8,
-       /* BE200-BE2FF: page 8 */
-       0x8,
-       /* BE300-BE3FF: page 8 */
-       0x8,
-       /* BE400-BE4FF: page 8 */
-       0x8,
-       /* BE500-BE5FF: page 8 */
-       0x8,
-       /* BE600-BE6FF: page 8 */
-       0x8,
-       /* BE700-BE7FF: page 8 */
-       0x8,
-       /* BE800-BE8FF: page 8 */
-       0x8,
-       /* BE900-BE9FF: page 8 */
-       0x8,
-       /* BEA00-BEAFF: page 8 */
-       0x8,
-       /* BEB00-BEBFF: page 8 */
-       0x8,
-       /* BEC00-BECFF: page 8 */
-       0x8,
-       /* BED00-BEDFF: page 8 */
-       0x8,
-       /* BEE00-BEEFF: page 8 */
-       0x8,
-       /* BEF00-BEFFF: page 8 */
-       0x8,
-       /* BF000-BF0FF: page 8 */
-       0x8,
-       /* BF100-BF1FF: page 8 */
-       0x8,
-       /* BF200-BF2FF: page 8 */
-       0x8,
-       /* BF300-BF3FF: page 8 */
-       0x8,
-       /* BF400-BF4FF: page 8 */
-       0x8,
-       /* BF500-BF5FF: page 8 */
-       0x8,
-       /* BF600-BF6FF: page 8 */
-       0x8,
-       /* BF700-BF7FF: page 8 */
-       0x8,
-       /* BF800-BF8FF: page 8 */
-       0x8,
-       /* BF900-BF9FF: page 8 */
-       0x8,
-       /* BFA00-BFAFF: page 8 */
-       0x8,
-       /* BFB00-BFBFF: page 8 */
-       0x8,
-       /* BFC00-BFCFF: page 8 */
-       0x8,
-       /* BFD00-BFDFF: page 8 */
-       0x8,
-       /* BFE00-BFEFF: page 8 */
-       0x8,
-       /* BFF00-BFFFF: page 8 */
-       0x8,
-       /* C0000-C00FF: page 8 */
-       0x8,
-       /* C0100-C01FF: page 8 */
-       0x8,
-       /* C0200-C02FF: page 8 */
-       0x8,
-       /* C0300-C03FF: page 8 */
-       0x8,
-       /* C0400-C04FF: page 8 */
-       0x8,
-       /* C0500-C05FF: page 8 */
-       0x8,
-       /* C0600-C06FF: page 8 */
-       0x8,
-       /* C0700-C07FF: page 8 */
-       0x8,
-       /* C0800-C08FF: page 8 */
-       0x8,
-       /* C0900-C09FF: page 8 */
-       0x8,
-       /* C0A00-C0AFF: page 8 */
-       0x8,
-       /* C0B00-C0BFF: page 8 */
-       0x8,
-       /* C0C00-C0CFF: page 8 */
-       0x8,
-       /* C0D00-C0DFF: page 8 */
-       0x8,
-       /* C0E00-C0EFF: page 8 */
-       0x8,
-       /* C0F00-C0FFF: page 8 */
-       0x8,
-       /* C1000-C10FF: page 8 */
-       0x8,
-       /* C1100-C11FF: page 8 */
-       0x8,
-       /* C1200-C12FF: page 8 */
-       0x8,
-       /* C1300-C13FF: page 8 */
-       0x8,
-       /* C1400-C14FF: page 8 */
-       0x8,
-       /* C1500-C15FF: page 8 */
-       0x8,
-       /* C1600-C16FF: page 8 */
-       0x8,
-       /* C1700-C17FF: page 8 */
-       0x8,
-       /* C1800-C18FF: page 8 */
-       0x8,
-       /* C1900-C19FF: page 8 */
-       0x8,
-       /* C1A00-C1AFF: page 8 */
-       0x8,
-       /* C1B00-C1BFF: page 8 */
-       0x8,
-       /* C1C00-C1CFF: page 8 */
-       0x8,
-       /* C1D00-C1DFF: page 8 */
-       0x8,
-       /* C1E00-C1EFF: page 8 */
-       0x8,
-       /* C1F00-C1FFF: page 8 */
-       0x8,
-       /* C2000-C20FF: page 8 */
-       0x8,
-       /* C2100-C21FF: page 8 */
-       0x8,
-       /* C2200-C22FF: page 8 */
-       0x8,
-       /* C2300-C23FF: page 8 */
-       0x8,
-       /* C2400-C24FF: page 8 */
-       0x8,
-       /* C2500-C25FF: page 8 */
-       0x8,
-       /* C2600-C26FF: page 8 */
-       0x8,
-       /* C2700-C27FF: page 8 */
-       0x8,
-       /* C2800-C28FF: page 8 */
-       0x8,
-       /* C2900-C29FF: page 8 */
-       0x8,
-       /* C2A00-C2AFF: page 8 */
-       0x8,
-       /* C2B00-C2BFF: page 8 */
-       0x8,
-       /* C2C00-C2CFF: page 8 */
-       0x8,
-       /* C2D00-C2DFF: page 8 */
-       0x8,
-       /* C2E00-C2EFF: page 8 */
-       0x8,
-       /* C2F00-C2FFF: page 8 */
-       0x8,
-       /* C3000-C30FF: page 8 */
-       0x8,
-       /* C3100-C31FF: page 8 */
-       0x8,
-       /* C3200-C32FF: page 8 */
-       0x8,
-       /* C3300-C33FF: page 8 */
-       0x8,
-       /* C3400-C34FF: page 8 */
-       0x8,
-       /* C3500-C35FF: page 8 */
-       0x8,
-       /* C3600-C36FF: page 8 */
-       0x8,
-       /* C3700-C37FF: page 8 */
-       0x8,
-       /* C3800-C38FF: page 8 */
-       0x8,
-       /* C3900-C39FF: page 8 */
-       0x8,
-       /* C3A00-C3AFF: page 8 */
-       0x8,
-       /* C3B00-C3BFF: page 8 */
-       0x8,
-       /* C3C00-C3CFF: page 8 */
-       0x8,
-       /* C3D00-C3DFF: page 8 */
-       0x8,
-       /* C3E00-C3EFF: page 8 */
-       0x8,
-       /* C3F00-C3FFF: page 8 */
-       0x8,
-       /* C4000-C40FF: page 8 */
-       0x8,
-       /* C4100-C41FF: page 8 */
-       0x8,
-       /* C4200-C42FF: page 8 */
-       0x8,
-       /* C4300-C43FF: page 8 */
-       0x8,
-       /* C4400-C44FF: page 8 */
-       0x8,
-       /* C4500-C45FF: page 8 */
-       0x8,
-       /* C4600-C46FF: page 8 */
-       0x8,
-       /* C4700-C47FF: page 8 */
-       0x8,
-       /* C4800-C48FF: page 8 */
-       0x8,
-       /* C4900-C49FF: page 8 */
-       0x8,
-       /* C4A00-C4AFF: page 8 */
-       0x8,
-       /* C4B00-C4BFF: page 8 */
-       0x8,
-       /* C4C00-C4CFF: page 8 */
-       0x8,
-       /* C4D00-C4DFF: page 8 */
-       0x8,
-       /* C4E00-C4EFF: page 8 */
-       0x8,
-       /* C4F00-C4FFF: page 8 */
-       0x8,
-       /* C5000-C50FF: page 8 */
-       0x8,
-       /* C5100-C51FF: page 8 */
-       0x8,
-       /* C5200-C52FF: page 8 */
-       0x8,
-       /* C5300-C53FF: page 8 */
-       0x8,
-       /* C5400-C54FF: page 8 */
-       0x8,
-       /* C5500-C55FF: page 8 */
-       0x8,
-       /* C5600-C56FF: page 8 */
-       0x8,
-       /* C5700-C57FF: page 8 */
-       0x8,
-       /* C5800-C58FF: page 8 */
-       0x8,
-       /* C5900-C59FF: page 8 */
-       0x8,
-       /* C5A00-C5AFF: page 8 */
-       0x8,
-       /* C5B00-C5BFF: page 8 */
-       0x8,
-       /* C5C00-C5CFF: page 8 */
-       0x8,
-       /* C5D00-C5DFF: page 8 */
-       0x8,
-       /* C5E00-C5EFF: page 8 */
-       0x8,
-       /* C5F00-C5FFF: page 8 */
-       0x8,
-       /* C6000-C60FF: page 8 */
-       0x8,
-       /* C6100-C61FF: page 8 */
-       0x8,
-       /* C6200-C62FF: page 8 */
-       0x8,
-       /* C6300-C63FF: page 8 */
-       0x8,
-       /* C6400-C64FF: page 8 */
-       0x8,
-       /* C6500-C65FF: page 8 */
-       0x8,
-       /* C6600-C66FF: page 8 */
-       0x8,
-       /* C6700-C67FF: page 8 */
-       0x8,
-       /* C6800-C68FF: page 8 */
-       0x8,
-       /* C6900-C69FF: page 8 */
-       0x8,
-       /* C6A00-C6AFF: page 8 */
-       0x8,
-       /* C6B00-C6BFF: page 8 */
-       0x8,
-       /* C6C00-C6CFF: page 8 */
-       0x8,
-       /* C6D00-C6DFF: page 8 */
-       0x8,
-       /* C6E00-C6EFF: page 8 */
-       0x8,
-       /* C6F00-C6FFF: page 8 */
-       0x8,
-       /* C7000-C70FF: page 8 */
-       0x8,
-       /* C7100-C71FF: page 8 */
-       0x8,
-       /* C7200-C72FF: page 8 */
-       0x8,
-       /* C7300-C73FF: page 8 */
-       0x8,
-       /* C7400-C74FF: page 8 */
-       0x8,
-       /* C7500-C75FF: page 8 */
-       0x8,
-       /* C7600-C76FF: page 8 */
-       0x8,
-       /* C7700-C77FF: page 8 */
-       0x8,
-       /* C7800-C78FF: page 8 */
-       0x8,
-       /* C7900-C79FF: page 8 */
-       0x8,
-       /* C7A00-C7AFF: page 8 */
-       0x8,
-       /* C7B00-C7BFF: page 8 */
-       0x8,
-       /* C7C00-C7CFF: page 8 */
-       0x8,
-       /* C7D00-C7DFF: page 8 */
-       0x8,
-       /* C7E00-C7EFF: page 8 */
-       0x8,
-       /* C7F00-C7FFF: page 8 */
-       0x8,
-       /* C8000-C80FF: page 8 */
-       0x8,
-       /* C8100-C81FF: page 8 */
-       0x8,
-       /* C8200-C82FF: page 8 */
-       0x8,
-       /* C8300-C83FF: page 8 */
-       0x8,
-       /* C8400-C84FF: page 8 */
-       0x8,
-       /* C8500-C85FF: page 8 */
-       0x8,
-       /* C8600-C86FF: page 8 */
-       0x8,
-       /* C8700-C87FF: page 8 */
-       0x8,
-       /* C8800-C88FF: page 8 */
-       0x8,
-       /* C8900-C89FF: page 8 */
-       0x8,
-       /* C8A00-C8AFF: page 8 */
-       0x8,
-       /* C8B00-C8BFF: page 8 */
-       0x8,
-       /* C8C00-C8CFF: page 8 */
-       0x8,
-       /* C8D00-C8DFF: page 8 */
-       0x8,
-       /* C8E00-C8EFF: page 8 */
-       0x8,
-       /* C8F00-C8FFF: page 8 */
-       0x8,
-       /* C9000-C90FF: page 8 */
-       0x8,
-       /* C9100-C91FF: page 8 */
-       0x8,
-       /* C9200-C92FF: page 8 */
-       0x8,
-       /* C9300-C93FF: page 8 */
-       0x8,
-       /* C9400-C94FF: page 8 */
-       0x8,
-       /* C9500-C95FF: page 8 */
-       0x8,
-       /* C9600-C96FF: page 8 */
-       0x8,
-       /* C9700-C97FF: page 8 */
-       0x8,
-       /* C9800-C98FF: page 8 */
-       0x8,
-       /* C9900-C99FF: page 8 */
-       0x8,
-       /* C9A00-C9AFF: page 8 */
-       0x8,
-       /* C9B00-C9BFF: page 8 */
-       0x8,
-       /* C9C00-C9CFF: page 8 */
-       0x8,
-       /* C9D00-C9DFF: page 8 */
-       0x8,
-       /* C9E00-C9EFF: page 8 */
-       0x8,
-       /* C9F00-C9FFF: page 8 */
-       0x8,
-       /* CA000-CA0FF: page 8 */
-       0x8,
-       /* CA100-CA1FF: page 8 */
-       0x8,
-       /* CA200-CA2FF: page 8 */
-       0x8,
-       /* CA300-CA3FF: page 8 */
-       0x8,
-       /* CA400-CA4FF: page 8 */
-       0x8,
-       /* CA500-CA5FF: page 8 */
-       0x8,
-       /* CA600-CA6FF: page 8 */
-       0x8,
-       /* CA700-CA7FF: page 8 */
-       0x8,
-       /* CA800-CA8FF: page 8 */
-       0x8,
-       /* CA900-CA9FF: page 8 */
-       0x8,
-       /* CAA00-CAAFF: page 8 */
-       0x8,
-       /* CAB00-CABFF: page 8 */
-       0x8,
-       /* CAC00-CACFF: page 8 */
-       0x8,
-       /* CAD00-CADFF: page 8 */
-       0x8,
-       /* CAE00-CAEFF: page 8 */
-       0x8,
-       /* CAF00-CAFFF: page 8 */
-       0x8,
-       /* CB000-CB0FF: page 8 */
-       0x8,
-       /* CB100-CB1FF: page 8 */
-       0x8,
-       /* CB200-CB2FF: page 8 */
-       0x8,
-       /* CB300-CB3FF: page 8 */
-       0x8,
-       /* CB400-CB4FF: page 8 */
-       0x8,
-       /* CB500-CB5FF: page 8 */
-       0x8,
-       /* CB600-CB6FF: page 8 */
-       0x8,
-       /* CB700-CB7FF: page 8 */
-       0x8,
-       /* CB800-CB8FF: page 8 */
-       0x8,
-       /* CB900-CB9FF: page 8 */
-       0x8,
-       /* CBA00-CBAFF: page 8 */
-       0x8,
-       /* CBB00-CBBFF: page 8 */
-       0x8,
-       /* CBC00-CBCFF: page 8 */
-       0x8,
-       /* CBD00-CBDFF: page 8 */
-       0x8,
-       /* CBE00-CBEFF: page 8 */
-       0x8,
-       /* CBF00-CBFFF: page 8 */
-       0x8,
-       /* CC000-CC0FF: page 8 */
-       0x8,
-       /* CC100-CC1FF: page 8 */
-       0x8,
-       /* CC200-CC2FF: page 8 */
-       0x8,
-       /* CC300-CC3FF: page 8 */
-       0x8,
-       /* CC400-CC4FF: page 8 */
-       0x8,
-       /* CC500-CC5FF: page 8 */
-       0x8,
-       /* CC600-CC6FF: page 8 */
-       0x8,
-       /* CC700-CC7FF: page 8 */
-       0x8,
-       /* CC800-CC8FF: page 8 */
-       0x8,
-       /* CC900-CC9FF: page 8 */
-       0x8,
-       /* CCA00-CCAFF: page 8 */
-       0x8,
-       /* CCB00-CCBFF: page 8 */
-       0x8,
-       /* CCC00-CCCFF: page 8 */
-       0x8,
-       /* CCD00-CCDFF: page 8 */
-       0x8,
-       /* CCE00-CCEFF: page 8 */
-       0x8,
-       /* CCF00-CCFFF: page 8 */
-       0x8,
-       /* CD000-CD0FF: page 8 */
-       0x8,
-       /* CD100-CD1FF: page 8 */
-       0x8,
-       /* CD200-CD2FF: page 8 */
-       0x8,
-       /* CD300-CD3FF: page 8 */
-       0x8,
-       /* CD400-CD4FF: page 8 */
-       0x8,
-       /* CD500-CD5FF: page 8 */
-       0x8,
-       /* CD600-CD6FF: page 8 */
-       0x8,
-       /* CD700-CD7FF: page 8 */
-       0x8,
-       /* CD800-CD8FF: page 8 */
-       0x8,
-       /* CD900-CD9FF: page 8 */
-       0x8,
-       /* CDA00-CDAFF: page 8 */
-       0x8,
-       /* CDB00-CDBFF: page 8 */
-       0x8,
-       /* CDC00-CDCFF: page 8 */
-       0x8,
-       /* CDD00-CDDFF: page 8 */
-       0x8,
-       /* CDE00-CDEFF: page 8 */
-       0x8,
-       /* CDF00-CDFFF: page 8 */
-       0x8,
-       /* CE000-CE0FF: page 8 */
-       0x8,
-       /* CE100-CE1FF: page 8 */
-       0x8,
-       /* CE200-CE2FF: page 8 */
-       0x8,
-       /* CE300-CE3FF: page 8 */
-       0x8,
-       /* CE400-CE4FF: page 8 */
-       0x8,
-       /* CE500-CE5FF: page 8 */
-       0x8,
-       /* CE600-CE6FF: page 8 */
-       0x8,
-       /* CE700-CE7FF: page 8 */
-       0x8,
-       /* CE800-CE8FF: page 8 */
-       0x8,
-       /* CE900-CE9FF: page 8 */
-       0x8,
-       /* CEA00-CEAFF: page 8 */
-       0x8,
-       /* CEB00-CEBFF: page 8 */
-       0x8,
-       /* CEC00-CECFF: page 8 */
-       0x8,
-       /* CED00-CEDFF: page 8 */
-       0x8,
-       /* CEE00-CEEFF: page 8 */
-       0x8,
-       /* CEF00-CEFFF: page 8 */
-       0x8,
-       /* CF000-CF0FF: page 8 */
-       0x8,
-       /* CF100-CF1FF: page 8 */
-       0x8,
-       /* CF200-CF2FF: page 8 */
-       0x8,
-       /* CF300-CF3FF: page 8 */
-       0x8,
-       /* CF400-CF4FF: page 8 */
-       0x8,
-       /* CF500-CF5FF: page 8 */
-       0x8,
-       /* CF600-CF6FF: page 8 */
-       0x8,
-       /* CF700-CF7FF: page 8 */
-       0x8,
-       /* CF800-CF8FF: page 8 */
-       0x8,
-       /* CF900-CF9FF: page 8 */
-       0x8,
-       /* CFA00-CFAFF: page 8 */
-       0x8,
-       /* CFB00-CFBFF: page 8 */
-       0x8,
-       /* CFC00-CFCFF: page 8 */
-       0x8,
-       /* CFD00-CFDFF: page 8 */
-       0x8,
-       /* CFE00-CFEFF: page 8 */
-       0x8,
-       /* CFF00-CFFFF: page 8 */
-       0x8,
-       /* D0000-D00FF: page 8 */
-       0x8,
-       /* D0100-D01FF: page 8 */
-       0x8,
-       /* D0200-D02FF: page 8 */
-       0x8,
-       /* D0300-D03FF: page 8 */
-       0x8,
-       /* D0400-D04FF: page 8 */
-       0x8,
-       /* D0500-D05FF: page 8 */
-       0x8,
-       /* D0600-D06FF: page 8 */
-       0x8,
-       /* D0700-D07FF: page 8 */
-       0x8,
-       /* D0800-D08FF: page 8 */
-       0x8,
-       /* D0900-D09FF: page 8 */
-       0x8,
-       /* D0A00-D0AFF: page 8 */
-       0x8,
-       /* D0B00-D0BFF: page 8 */
-       0x8,
-       /* D0C00-D0CFF: page 8 */
-       0x8,
-       /* D0D00-D0DFF: page 8 */
-       0x8,
-       /* D0E00-D0EFF: page 8 */
-       0x8,
-       /* D0F00-D0FFF: page 8 */
-       0x8,
-       /* D1000-D10FF: page 8 */
-       0x8,
-       /* D1100-D11FF: page 8 */
-       0x8,
-       /* D1200-D12FF: page 8 */
-       0x8,
-       /* D1300-D13FF: page 8 */
-       0x8,
-       /* D1400-D14FF: page 8 */
-       0x8,
-       /* D1500-D15FF: page 8 */
-       0x8,
-       /* D1600-D16FF: page 8 */
-       0x8,
-       /* D1700-D17FF: page 8 */
-       0x8,
-       /* D1800-D18FF: page 8 */
-       0x8,
-       /* D1900-D19FF: page 8 */
-       0x8,
-       /* D1A00-D1AFF: page 8 */
-       0x8,
-       /* D1B00-D1BFF: page 8 */
-       0x8,
-       /* D1C00-D1CFF: page 8 */
-       0x8,
-       /* D1D00-D1DFF: page 8 */
-       0x8,
-       /* D1E00-D1EFF: page 8 */
-       0x8,
-       /* D1F00-D1FFF: page 8 */
-       0x8,
-       /* D2000-D20FF: page 8 */
-       0x8,
-       /* D2100-D21FF: page 8 */
-       0x8,
-       /* D2200-D22FF: page 8 */
-       0x8,
-       /* D2300-D23FF: page 8 */
-       0x8,
-       /* D2400-D24FF: page 8 */
-       0x8,
-       /* D2500-D25FF: page 8 */
-       0x8,
-       /* D2600-D26FF: page 8 */
-       0x8,
-       /* D2700-D27FF: page 8 */
-       0x8,
-       /* D2800-D28FF: page 8 */
-       0x8,
-       /* D2900-D29FF: page 8 */
-       0x8,
-       /* D2A00-D2AFF: page 8 */
-       0x8,
-       /* D2B00-D2BFF: page 8 */
-       0x8,
-       /* D2C00-D2CFF: page 8 */
-       0x8,
-       /* D2D00-D2DFF: page 8 */
-       0x8,
-       /* D2E00-D2EFF: page 8 */
-       0x8,
-       /* D2F00-D2FFF: page 8 */
-       0x8,
-       /* D3000-D30FF: page 8 */
-       0x8,
-       /* D3100-D31FF: page 8 */
-       0x8,
-       /* D3200-D32FF: page 8 */
-       0x8,
-       /* D3300-D33FF: page 8 */
-       0x8,
-       /* D3400-D34FF: page 8 */
-       0x8,
-       /* D3500-D35FF: page 8 */
-       0x8,
-       /* D3600-D36FF: page 8 */
-       0x8,
-       /* D3700-D37FF: page 8 */
-       0x8,
-       /* D3800-D38FF: page 8 */
-       0x8,
-       /* D3900-D39FF: page 8 */
-       0x8,
-       /* D3A00-D3AFF: page 8 */
-       0x8,
-       /* D3B00-D3BFF: page 8 */
-       0x8,
-       /* D3C00-D3CFF: page 8 */
-       0x8,
-       /* D3D00-D3DFF: page 8 */
-       0x8,
-       /* D3E00-D3EFF: page 8 */
-       0x8,
-       /* D3F00-D3FFF: page 8 */
-       0x8,
-       /* D4000-D40FF: page 8 */
-       0x8,
-       /* D4100-D41FF: page 8 */
-       0x8,
-       /* D4200-D42FF: page 8 */
-       0x8,
-       /* D4300-D43FF: page 8 */
-       0x8,
-       /* D4400-D44FF: page 8 */
-       0x8,
-       /* D4500-D45FF: page 8 */
-       0x8,
-       /* D4600-D46FF: page 8 */
-       0x8,
-       /* D4700-D47FF: page 8 */
-       0x8,
-       /* D4800-D48FF: page 8 */
-       0x8,
-       /* D4900-D49FF: page 8 */
-       0x8,
-       /* D4A00-D4AFF: page 8 */
-       0x8,
-       /* D4B00-D4BFF: page 8 */
-       0x8,
-       /* D4C00-D4CFF: page 8 */
-       0x8,
-       /* D4D00-D4DFF: page 8 */
-       0x8,
-       /* D4E00-D4EFF: page 8 */
-       0x8,
-       /* D4F00-D4FFF: page 8 */
-       0x8,
-       /* D5000-D50FF: page 8 */
-       0x8,
-       /* D5100-D51FF: page 8 */
-       0x8,
-       /* D5200-D52FF: page 8 */
-       0x8,
-       /* D5300-D53FF: page 8 */
-       0x8,
-       /* D5400-D54FF: page 8 */
-       0x8,
-       /* D5500-D55FF: page 8 */
-       0x8,
-       /* D5600-D56FF: page 8 */
-       0x8,
-       /* D5700-D57FF: page 8 */
-       0x8,
-       /* D5800-D58FF: page 8 */
-       0x8,
-       /* D5900-D59FF: page 8 */
-       0x8,
-       /* D5A00-D5AFF: page 8 */
-       0x8,
-       /* D5B00-D5BFF: page 8 */
-       0x8,
-       /* D5C00-D5CFF: page 8 */
-       0x8,
-       /* D5D00-D5DFF: page 8 */
-       0x8,
-       /* D5E00-D5EFF: page 8 */
-       0x8,
-       /* D5F00-D5FFF: page 8 */
-       0x8,
-       /* D6000-D60FF: page 8 */
-       0x8,
-       /* D6100-D61FF: page 8 */
-       0x8,
-       /* D6200-D62FF: page 8 */
-       0x8,
-       /* D6300-D63FF: page 8 */
-       0x8,
-       /* D6400-D64FF: page 8 */
-       0x8,
-       /* D6500-D65FF: page 8 */
-       0x8,
-       /* D6600-D66FF: page 8 */
-       0x8,
-       /* D6700-D67FF: page 8 */
-       0x8,
-       /* D6800-D68FF: page 8 */
-       0x8,
-       /* D6900-D69FF: page 8 */
-       0x8,
-       /* D6A00-D6AFF: page 8 */
-       0x8,
-       /* D6B00-D6BFF: page 8 */
-       0x8,
-       /* D6C00-D6CFF: page 8 */
-       0x8,
-       /* D6D00-D6DFF: page 8 */
-       0x8,
-       /* D6E00-D6EFF: page 8 */
-       0x8,
-       /* D6F00-D6FFF: page 8 */
-       0x8,
-       /* D7000-D70FF: page 8 */
-       0x8,
-       /* D7100-D71FF: page 8 */
-       0x8,
-       /* D7200-D72FF: page 8 */
-       0x8,
-       /* D7300-D73FF: page 8 */
-       0x8,
-       /* D7400-D74FF: page 8 */
-       0x8,
-       /* D7500-D75FF: page 8 */
-       0x8,
-       /* D7600-D76FF: page 8 */
-       0x8,
-       /* D7700-D77FF: page 8 */
-       0x8,
-       /* D7800-D78FF: page 8 */
-       0x8,
-       /* D7900-D79FF: page 8 */
-       0x8,
-       /* D7A00-D7AFF: page 8 */
-       0x8,
-       /* D7B00-D7BFF: page 8 */
-       0x8,
-       /* D7C00-D7CFF: page 8 */
-       0x8,
-       /* D7D00-D7DFF: page 8 */
-       0x8,
-       /* D7E00-D7EFF: page 8 */
-       0x8,
-       /* D7F00-D7FFF: page 8 */
-       0x8,
-       /* D8000-D80FF: page 8 */
-       0x8,
-       /* D8100-D81FF: page 8 */
-       0x8,
-       /* D8200-D82FF: page 8 */
-       0x8,
-       /* D8300-D83FF: page 8 */
-       0x8,
-       /* D8400-D84FF: page 8 */
-       0x8,
-       /* D8500-D85FF: page 8 */
-       0x8,
-       /* D8600-D86FF: page 8 */
-       0x8,
-       /* D8700-D87FF: page 8 */
-       0x8,
-       /* D8800-D88FF: page 8 */
-       0x8,
-       /* D8900-D89FF: page 8 */
-       0x8,
-       /* D8A00-D8AFF: page 8 */
-       0x8,
-       /* D8B00-D8BFF: page 8 */
-       0x8,
-       /* D8C00-D8CFF: page 8 */
-       0x8,
-       /* D8D00-D8DFF: page 8 */
-       0x8,
-       /* D8E00-D8EFF: page 8 */
-       0x8,
-       /* D8F00-D8FFF: page 8 */
-       0x8,
-       /* D9000-D90FF: page 8 */
-       0x8,
-       /* D9100-D91FF: page 8 */
-       0x8,
-       /* D9200-D92FF: page 8 */
-       0x8,
-       /* D9300-D93FF: page 8 */
-       0x8,
-       /* D9400-D94FF: page 8 */
-       0x8,
-       /* D9500-D95FF: page 8 */
-       0x8,
-       /* D9600-D96FF: page 8 */
-       0x8,
-       /* D9700-D97FF: page 8 */
-       0x8,
-       /* D9800-D98FF: page 8 */
-       0x8,
-       /* D9900-D99FF: page 8 */
-       0x8,
-       /* D9A00-D9AFF: page 8 */
-       0x8,
-       /* D9B00-D9BFF: page 8 */
-       0x8,
-       /* D9C00-D9CFF: page 8 */
-       0x8,
-       /* D9D00-D9DFF: page 8 */
-       0x8,
-       /* D9E00-D9EFF: page 8 */
-       0x8,
-       /* D9F00-D9FFF: page 8 */
-       0x8,
-       /* DA000-DA0FF: page 8 */
-       0x8,
-       /* DA100-DA1FF: page 8 */
-       0x8,
-       /* DA200-DA2FF: page 8 */
-       0x8,
-       /* DA300-DA3FF: page 8 */
-       0x8,
-       /* DA400-DA4FF: page 8 */
-       0x8,
-       /* DA500-DA5FF: page 8 */
-       0x8,
-       /* DA600-DA6FF: page 8 */
-       0x8,
-       /* DA700-DA7FF: page 8 */
-       0x8,
-       /* DA800-DA8FF: page 8 */
-       0x8,
-       /* DA900-DA9FF: page 8 */
-       0x8,
-       /* DAA00-DAAFF: page 8 */
-       0x8,
-       /* DAB00-DABFF: page 8 */
-       0x8,
-       /* DAC00-DACFF: page 8 */
-       0x8,
-       /* DAD00-DADFF: page 8 */
-       0x8,
-       /* DAE00-DAEFF: page 8 */
-       0x8,
-       /* DAF00-DAFFF: page 8 */
-       0x8,
-       /* DB000-DB0FF: page 8 */
-       0x8,
-       /* DB100-DB1FF: page 8 */
-       0x8,
-       /* DB200-DB2FF: page 8 */
-       0x8,
-       /* DB300-DB3FF: page 8 */
-       0x8,
-       /* DB400-DB4FF: page 8 */
-       0x8,
-       /* DB500-DB5FF: page 8 */
-       0x8,
-       /* DB600-DB6FF: page 8 */
-       0x8,
-       /* DB700-DB7FF: page 8 */
-       0x8,
-       /* DB800-DB8FF: page 8 */
-       0x8,
-       /* DB900-DB9FF: page 8 */
-       0x8,
-       /* DBA00-DBAFF: page 8 */
-       0x8,
-       /* DBB00-DBBFF: page 8 */
-       0x8,
-       /* DBC00-DBCFF: page 8 */
-       0x8,
-       /* DBD00-DBDFF: page 8 */
-       0x8,
-       /* DBE00-DBEFF: page 8 */
-       0x8,
-       /* DBF00-DBFFF: page 8 */
-       0x8,
-       /* DC000-DC0FF: page 8 */
-       0x8,
-       /* DC100-DC1FF: page 8 */
-       0x8,
-       /* DC200-DC2FF: page 8 */
-       0x8,
-       /* DC300-DC3FF: page 8 */
-       0x8,
-       /* DC400-DC4FF: page 8 */
-       0x8,
-       /* DC500-DC5FF: page 8 */
-       0x8,
-       /* DC600-DC6FF: page 8 */
-       0x8,
-       /* DC700-DC7FF: page 8 */
-       0x8,
-       /* DC800-DC8FF: page 8 */
-       0x8,
-       /* DC900-DC9FF: page 8 */
-       0x8,
-       /* DCA00-DCAFF: page 8 */
-       0x8,
-       /* DCB00-DCBFF: page 8 */
-       0x8,
-       /* DCC00-DCCFF: page 8 */
-       0x8,
-       /* DCD00-DCDFF: page 8 */
-       0x8,
-       /* DCE00-DCEFF: page 8 */
-       0x8,
-       /* DCF00-DCFFF: page 8 */
-       0x8,
-       /* DD000-DD0FF: page 8 */
-       0x8,
-       /* DD100-DD1FF: page 8 */
-       0x8,
-       /* DD200-DD2FF: page 8 */
-       0x8,
-       /* DD300-DD3FF: page 8 */
-       0x8,
-       /* DD400-DD4FF: page 8 */
-       0x8,
-       /* DD500-DD5FF: page 8 */
-       0x8,
-       /* DD600-DD6FF: page 8 */
-       0x8,
-       /* DD700-DD7FF: page 8 */
-       0x8,
-       /* DD800-DD8FF: page 8 */
-       0x8,
-       /* DD900-DD9FF: page 8 */
-       0x8,
-       /* DDA00-DDAFF: page 8 */
-       0x8,
-       /* DDB00-DDBFF: page 8 */
-       0x8,
-       /* DDC00-DDCFF: page 8 */
-       0x8,
-       /* DDD00-DDDFF: page 8 */
-       0x8,
-       /* DDE00-DDEFF: page 8 */
-       0x8,
-       /* DDF00-DDFFF: page 8 */
-       0x8,
-       /* DE000-DE0FF: page 8 */
-       0x8,
-       /* DE100-DE1FF: page 8 */
-       0x8,
-       /* DE200-DE2FF: page 8 */
-       0x8,
-       /* DE300-DE3FF: page 8 */
-       0x8,
-       /* DE400-DE4FF: page 8 */
-       0x8,
-       /* DE500-DE5FF: page 8 */
-       0x8,
-       /* DE600-DE6FF: page 8 */
-       0x8,
-       /* DE700-DE7FF: page 8 */
-       0x8,
-       /* DE800-DE8FF: page 8 */
-       0x8,
-       /* DE900-DE9FF: page 8 */
-       0x8,
-       /* DEA00-DEAFF: page 8 */
-       0x8,
-       /* DEB00-DEBFF: page 8 */
-       0x8,
-       /* DEC00-DECFF: page 8 */
-       0x8,
-       /* DED00-DEDFF: page 8 */
-       0x8,
-       /* DEE00-DEEFF: page 8 */
-       0x8,
-       /* DEF00-DEFFF: page 8 */
-       0x8,
-       /* DF000-DF0FF: page 8 */
-       0x8,
-       /* DF100-DF1FF: page 8 */
-       0x8,
-       /* DF200-DF2FF: page 8 */
-       0x8,
-       /* DF300-DF3FF: page 8 */
-       0x8,
-       /* DF400-DF4FF: page 8 */
-       0x8,
-       /* DF500-DF5FF: page 8 */
-       0x8,
-       /* DF600-DF6FF: page 8 */
-       0x8,
-       /* DF700-DF7FF: page 8 */
-       0x8,
-       /* DF800-DF8FF: page 8 */
-       0x8,
-       /* DF900-DF9FF: page 8 */
-       0x8,
-       /* DFA00-DFAFF: page 8 */
-       0x8,
-       /* DFB00-DFBFF: page 8 */
-       0x8,
-       /* DFC00-DFCFF: page 8 */
-       0x8,
-       /* DFD00-DFDFF: page 8 */
-       0x8,
-       /* DFE00-DFEFF: page 8 */
-       0x8,
-       /* DFF00-DFFFF: page 8 */
-       0x8,
-       /* E0000-E00FF: page 277 */
-       0x115,
-       /* E0100-E01FF: page 278 */
-       0x116,
-       /* E0200-E02FF: page 8 */
-       0x8,
-       /* E0300-E03FF: page 8 */
-       0x8,
-       /* E0400-E04FF: page 8 */
-       0x8,
-       /* E0500-E05FF: page 8 */
-       0x8,
-       /* E0600-E06FF: page 8 */
-       0x8,
-       /* E0700-E07FF: page 8 */
-       0x8,
-       /* E0800-E08FF: page 8 */
-       0x8,
-       /* E0900-E09FF: page 8 */
-       0x8,
-       /* E0A00-E0AFF: page 8 */
-       0x8,
-       /* E0B00-E0BFF: page 8 */
-       0x8,
-       /* E0C00-E0CFF: page 8 */
-       0x8,
-       /* E0D00-E0DFF: page 8 */
-       0x8,
-       /* E0E00-E0EFF: page 8 */
-       0x8,
-       /* E0F00-E0FFF: page 8 */
-       0x8,
-       /* E1000-E10FF: page 8 */
-       0x8,
-       /* E1100-E11FF: page 8 */
-       0x8,
-       /* E1200-E12FF: page 8 */
-       0x8,
-       /* E1300-E13FF: page 8 */
-       0x8,
-       /* E1400-E14FF: page 8 */
-       0x8,
-       /* E1500-E15FF: page 8 */
-       0x8,
-       /* E1600-E16FF: page 8 */
-       0x8,
-       /* E1700-E17FF: page 8 */
-       0x8,
-       /* E1800-E18FF: page 8 */
-       0x8,
-       /* E1900-E19FF: page 8 */
-       0x8,
-       /* E1A00-E1AFF: page 8 */
-       0x8,
-       /* E1B00-E1BFF: page 8 */
-       0x8,
-       /* E1C00-E1CFF: page 8 */
-       0x8,
-       /* E1D00-E1DFF: page 8 */
-       0x8,
-       /* E1E00-E1EFF: page 8 */
-       0x8,
-       /* E1F00-E1FFF: page 8 */
-       0x8,
-       /* E2000-E20FF: page 8 */
-       0x8,
-       /* E2100-E21FF: page 8 */
-       0x8,
-       /* E2200-E22FF: page 8 */
-       0x8,
-       /* E2300-E23FF: page 8 */
-       0x8,
-       /* E2400-E24FF: page 8 */
-       0x8,
-       /* E2500-E25FF: page 8 */
-       0x8,
-       /* E2600-E26FF: page 8 */
-       0x8,
-       /* E2700-E27FF: page 8 */
-       0x8,
-       /* E2800-E28FF: page 8 */
-       0x8,
-       /* E2900-E29FF: page 8 */
-       0x8,
-       /* E2A00-E2AFF: page 8 */
-       0x8,
-       /* E2B00-E2BFF: page 8 */
-       0x8,
-       /* E2C00-E2CFF: page 8 */
-       0x8,
-       /* E2D00-E2DFF: page 8 */
-       0x8,
-       /* E2E00-E2EFF: page 8 */
-       0x8,
-       /* E2F00-E2FFF: page 8 */
-       0x8,
-       /* E3000-E30FF: page 8 */
-       0x8,
-       /* E3100-E31FF: page 8 */
-       0x8,
-       /* E3200-E32FF: page 8 */
-       0x8,
-       /* E3300-E33FF: page 8 */
-       0x8,
-       /* E3400-E34FF: page 8 */
-       0x8,
-       /* E3500-E35FF: page 8 */
-       0x8,
-       /* E3600-E36FF: page 8 */
-       0x8,
-       /* E3700-E37FF: page 8 */
-       0x8,
-       /* E3800-E38FF: page 8 */
-       0x8,
-       /* E3900-E39FF: page 8 */
-       0x8,
-       /* E3A00-E3AFF: page 8 */
-       0x8,
-       /* E3B00-E3BFF: page 8 */
-       0x8,
-       /* E3C00-E3CFF: page 8 */
-       0x8,
-       /* E3D00-E3DFF: page 8 */
-       0x8,
-       /* E3E00-E3EFF: page 8 */
-       0x8,
-       /* E3F00-E3FFF: page 8 */
-       0x8,
-       /* E4000-E40FF: page 8 */
-       0x8,
-       /* E4100-E41FF: page 8 */
-       0x8,
-       /* E4200-E42FF: page 8 */
-       0x8,
-       /* E4300-E43FF: page 8 */
-       0x8,
-       /* E4400-E44FF: page 8 */
-       0x8,
-       /* E4500-E45FF: page 8 */
-       0x8,
-       /* E4600-E46FF: page 8 */
-       0x8,
-       /* E4700-E47FF: page 8 */
-       0x8,
-       /* E4800-E48FF: page 8 */
-       0x8,
-       /* E4900-E49FF: page 8 */
-       0x8,
-       /* E4A00-E4AFF: page 8 */
-       0x8,
-       /* E4B00-E4BFF: page 8 */
-       0x8,
-       /* E4C00-E4CFF: page 8 */
-       0x8,
-       /* E4D00-E4DFF: page 8 */
-       0x8,
-       /* E4E00-E4EFF: page 8 */
-       0x8,
-       /* E4F00-E4FFF: page 8 */
-       0x8,
-       /* E5000-E50FF: page 8 */
-       0x8,
-       /* E5100-E51FF: page 8 */
-       0x8,
-       /* E5200-E52FF: page 8 */
-       0x8,
-       /* E5300-E53FF: page 8 */
-       0x8,
-       /* E5400-E54FF: page 8 */
-       0x8,
-       /* E5500-E55FF: page 8 */
-       0x8,
-       /* E5600-E56FF: page 8 */
-       0x8,
-       /* E5700-E57FF: page 8 */
-       0x8,
-       /* E5800-E58FF: page 8 */
-       0x8,
-       /* E5900-E59FF: page 8 */
-       0x8,
-       /* E5A00-E5AFF: page 8 */
-       0x8,
-       /* E5B00-E5BFF: page 8 */
-       0x8,
-       /* E5C00-E5CFF: page 8 */
-       0x8,
-       /* E5D00-E5DFF: page 8 */
-       0x8,
-       /* E5E00-E5EFF: page 8 */
-       0x8,
-       /* E5F00-E5FFF: page 8 */
-       0x8,
-       /* E6000-E60FF: page 8 */
-       0x8,
-       /* E6100-E61FF: page 8 */
-       0x8,
-       /* E6200-E62FF: page 8 */
-       0x8,
-       /* E6300-E63FF: page 8 */
-       0x8,
-       /* E6400-E64FF: page 8 */
-       0x8,
-       /* E6500-E65FF: page 8 */
-       0x8,
-       /* E6600-E66FF: page 8 */
-       0x8,
-       /* E6700-E67FF: page 8 */
-       0x8,
-       /* E6800-E68FF: page 8 */
-       0x8,
-       /* E6900-E69FF: page 8 */
-       0x8,
-       /* E6A00-E6AFF: page 8 */
-       0x8,
-       /* E6B00-E6BFF: page 8 */
-       0x8,
-       /* E6C00-E6CFF: page 8 */
-       0x8,
-       /* E6D00-E6DFF: page 8 */
-       0x8,
-       /* E6E00-E6EFF: page 8 */
-       0x8,
-       /* E6F00-E6FFF: page 8 */
-       0x8,
-       /* E7000-E70FF: page 8 */
-       0x8,
-       /* E7100-E71FF: page 8 */
-       0x8,
-       /* E7200-E72FF: page 8 */
-       0x8,
-       /* E7300-E73FF: page 8 */
-       0x8,
-       /* E7400-E74FF: page 8 */
-       0x8,
-       /* E7500-E75FF: page 8 */
-       0x8,
-       /* E7600-E76FF: page 8 */
-       0x8,
-       /* E7700-E77FF: page 8 */
-       0x8,
-       /* E7800-E78FF: page 8 */
-       0x8,
-       /* E7900-E79FF: page 8 */
-       0x8,
-       /* E7A00-E7AFF: page 8 */
-       0x8,
-       /* E7B00-E7BFF: page 8 */
-       0x8,
-       /* E7C00-E7CFF: page 8 */
-       0x8,
-       /* E7D00-E7DFF: page 8 */
-       0x8,
-       /* E7E00-E7EFF: page 8 */
-       0x8,
-       /* E7F00-E7FFF: page 8 */
-       0x8,
-       /* E8000-E80FF: page 8 */
-       0x8,
-       /* E8100-E81FF: page 8 */
-       0x8,
-       /* E8200-E82FF: page 8 */
-       0x8,
-       /* E8300-E83FF: page 8 */
-       0x8,
-       /* E8400-E84FF: page 8 */
-       0x8,
-       /* E8500-E85FF: page 8 */
-       0x8,
-       /* E8600-E86FF: page 8 */
-       0x8,
-       /* E8700-E87FF: page 8 */
-       0x8,
-       /* E8800-E88FF: page 8 */
-       0x8,
-       /* E8900-E89FF: page 8 */
-       0x8,
-       /* E8A00-E8AFF: page 8 */
-       0x8,
-       /* E8B00-E8BFF: page 8 */
-       0x8,
-       /* E8C00-E8CFF: page 8 */
-       0x8,
-       /* E8D00-E8DFF: page 8 */
-       0x8,
-       /* E8E00-E8EFF: page 8 */
-       0x8,
-       /* E8F00-E8FFF: page 8 */
-       0x8,
-       /* E9000-E90FF: page 8 */
-       0x8,
-       /* E9100-E91FF: page 8 */
-       0x8,
-       /* E9200-E92FF: page 8 */
-       0x8,
-       /* E9300-E93FF: page 8 */
-       0x8,
-       /* E9400-E94FF: page 8 */
-       0x8,
-       /* E9500-E95FF: page 8 */
-       0x8,
-       /* E9600-E96FF: page 8 */
-       0x8,
-       /* E9700-E97FF: page 8 */
-       0x8,
-       /* E9800-E98FF: page 8 */
-       0x8,
-       /* E9900-E99FF: page 8 */
-       0x8,
-       /* E9A00-E9AFF: page 8 */
-       0x8,
-       /* E9B00-E9BFF: page 8 */
-       0x8,
-       /* E9C00-E9CFF: page 8 */
-       0x8,
-       /* E9D00-E9DFF: page 8 */
-       0x8,
-       /* E9E00-E9EFF: page 8 */
-       0x8,
-       /* E9F00-E9FFF: page 8 */
-       0x8,
-       /* EA000-EA0FF: page 8 */
-       0x8,
-       /* EA100-EA1FF: page 8 */
-       0x8,
-       /* EA200-EA2FF: page 8 */
-       0x8,
-       /* EA300-EA3FF: page 8 */
-       0x8,
-       /* EA400-EA4FF: page 8 */
-       0x8,
-       /* EA500-EA5FF: page 8 */
-       0x8,
-       /* EA600-EA6FF: page 8 */
-       0x8,
-       /* EA700-EA7FF: page 8 */
-       0x8,
-       /* EA800-EA8FF: page 8 */
-       0x8,
-       /* EA900-EA9FF: page 8 */
-       0x8,
-       /* EAA00-EAAFF: page 8 */
-       0x8,
-       /* EAB00-EABFF: page 8 */
-       0x8,
-       /* EAC00-EACFF: page 8 */
-       0x8,
-       /* EAD00-EADFF: page 8 */
-       0x8,
-       /* EAE00-EAEFF: page 8 */
-       0x8,
-       /* EAF00-EAFFF: page 8 */
-       0x8,
-       /* EB000-EB0FF: page 8 */
-       0x8,
-       /* EB100-EB1FF: page 8 */
-       0x8,
-       /* EB200-EB2FF: page 8 */
-       0x8,
-       /* EB300-EB3FF: page 8 */
-       0x8,
-       /* EB400-EB4FF: page 8 */
-       0x8,
-       /* EB500-EB5FF: page 8 */
-       0x8,
-       /* EB600-EB6FF: page 8 */
-       0x8,
-       /* EB700-EB7FF: page 8 */
-       0x8,
-       /* EB800-EB8FF: page 8 */
-       0x8,
-       /* EB900-EB9FF: page 8 */
-       0x8,
-       /* EBA00-EBAFF: page 8 */
-       0x8,
-       /* EBB00-EBBFF: page 8 */
-       0x8,
-       /* EBC00-EBCFF: page 8 */
-       0x8,
-       /* EBD00-EBDFF: page 8 */
-       0x8,
-       /* EBE00-EBEFF: page 8 */
-       0x8,
-       /* EBF00-EBFFF: page 8 */
-       0x8,
-       /* EC000-EC0FF: page 8 */
-       0x8,
-       /* EC100-EC1FF: page 8 */
-       0x8,
-       /* EC200-EC2FF: page 8 */
-       0x8,
-       /* EC300-EC3FF: page 8 */
-       0x8,
-       /* EC400-EC4FF: page 8 */
-       0x8,
-       /* EC500-EC5FF: page 8 */
-       0x8,
-       /* EC600-EC6FF: page 8 */
-       0x8,
-       /* EC700-EC7FF: page 8 */
-       0x8,
-       /* EC800-EC8FF: page 8 */
-       0x8,
-       /* EC900-EC9FF: page 8 */
-       0x8,
-       /* ECA00-ECAFF: page 8 */
-       0x8,
-       /* ECB00-ECBFF: page 8 */
-       0x8,
-       /* ECC00-ECCFF: page 8 */
-       0x8,
-       /* ECD00-ECDFF: page 8 */
-       0x8,
-       /* ECE00-ECEFF: page 8 */
-       0x8,
-       /* ECF00-ECFFF: page 8 */
-       0x8,
-       /* ED000-ED0FF: page 8 */
-       0x8,
-       /* ED100-ED1FF: page 8 */
-       0x8,
-       /* ED200-ED2FF: page 8 */
-       0x8,
-       /* ED300-ED3FF: page 8 */
-       0x8,
-       /* ED400-ED4FF: page 8 */
-       0x8,
-       /* ED500-ED5FF: page 8 */
-       0x8,
-       /* ED600-ED6FF: page 8 */
-       0x8,
-       /* ED700-ED7FF: page 8 */
-       0x8,
-       /* ED800-ED8FF: page 8 */
-       0x8,
-       /* ED900-ED9FF: page 8 */
-       0x8,
-       /* EDA00-EDAFF: page 8 */
-       0x8,
-       /* EDB00-EDBFF: page 8 */
-       0x8,
-       /* EDC00-EDCFF: page 8 */
-       0x8,
-       /* EDD00-EDDFF: page 8 */
-       0x8,
-       /* EDE00-EDEFF: page 8 */
-       0x8,
-       /* EDF00-EDFFF: page 8 */
-       0x8,
-       /* EE000-EE0FF: page 8 */
-       0x8,
-       /* EE100-EE1FF: page 8 */
-       0x8,
-       /* EE200-EE2FF: page 8 */
-       0x8,
-       /* EE300-EE3FF: page 8 */
-       0x8,
-       /* EE400-EE4FF: page 8 */
-       0x8,
-       /* EE500-EE5FF: page 8 */
-       0x8,
-       /* EE600-EE6FF: page 8 */
-       0x8,
-       /* EE700-EE7FF: page 8 */
-       0x8,
-       /* EE800-EE8FF: page 8 */
-       0x8,
-       /* EE900-EE9FF: page 8 */
-       0x8,
-       /* EEA00-EEAFF: page 8 */
-       0x8,
-       /* EEB00-EEBFF: page 8 */
-       0x8,
-       /* EEC00-EECFF: page 8 */
-       0x8,
-       /* EED00-EEDFF: page 8 */
-       0x8,
-       /* EEE00-EEEFF: page 8 */
-       0x8,
-       /* EEF00-EEFFF: page 8 */
-       0x8,
-       /* EF000-EF0FF: page 8 */
-       0x8,
-       /* EF100-EF1FF: page 8 */
-       0x8,
-       /* EF200-EF2FF: page 8 */
-       0x8,
-       /* EF300-EF3FF: page 8 */
-       0x8,
-       /* EF400-EF4FF: page 8 */
-       0x8,
-       /* EF500-EF5FF: page 8 */
-       0x8,
-       /* EF600-EF6FF: page 8 */
-       0x8,
-       /* EF700-EF7FF: page 8 */
-       0x8,
-       /* EF800-EF8FF: page 8 */
-       0x8,
-       /* EF900-EF9FF: page 8 */
-       0x8,
-       /* EFA00-EFAFF: page 8 */
-       0x8,
-       /* EFB00-EFBFF: page 8 */
-       0x8,
-       /* EFC00-EFCFF: page 8 */
-       0x8,
-       /* EFD00-EFDFF: page 8 */
-       0x8,
-       /* EFE00-EFEFF: page 8 */
-       0x8,
-       /* EFF00-EFFFF: page 8 */
-       0x8,
-       /* F0000-F00FF: page 224 */
-       0xE0,
-       /* F0100-F01FF: page 224 */
-       0xE0,
-       /* F0200-F02FF: page 224 */
-       0xE0,
-       /* F0300-F03FF: page 224 */
-       0xE0,
-       /* F0400-F04FF: page 224 */
-       0xE0,
-       /* F0500-F05FF: page 224 */
-       0xE0,
-       /* F0600-F06FF: page 224 */
-       0xE0,
-       /* F0700-F07FF: page 224 */
-       0xE0,
-       /* F0800-F08FF: page 224 */
-       0xE0,
-       /* F0900-F09FF: page 224 */
-       0xE0,
-       /* F0A00-F0AFF: page 224 */
-       0xE0,
-       /* F0B00-F0BFF: page 224 */
-       0xE0,
-       /* F0C00-F0CFF: page 224 */
-       0xE0,
-       /* F0D00-F0DFF: page 224 */
-       0xE0,
-       /* F0E00-F0EFF: page 224 */
-       0xE0,
-       /* F0F00-F0FFF: page 224 */
-       0xE0,
-       /* F1000-F10FF: page 224 */
-       0xE0,
-       /* F1100-F11FF: page 224 */
-       0xE0,
-       /* F1200-F12FF: page 224 */
-       0xE0,
-       /* F1300-F13FF: page 224 */
-       0xE0,
-       /* F1400-F14FF: page 224 */
-       0xE0,
-       /* F1500-F15FF: page 224 */
-       0xE0,
-       /* F1600-F16FF: page 224 */
-       0xE0,
-       /* F1700-F17FF: page 224 */
-       0xE0,
-       /* F1800-F18FF: page 224 */
-       0xE0,
-       /* F1900-F19FF: page 224 */
-       0xE0,
-       /* F1A00-F1AFF: page 224 */
-       0xE0,
-       /* F1B00-F1BFF: page 224 */
-       0xE0,
-       /* F1C00-F1CFF: page 224 */
-       0xE0,
-       /* F1D00-F1DFF: page 224 */
-       0xE0,
-       /* F1E00-F1EFF: page 224 */
-       0xE0,
-       /* F1F00-F1FFF: page 224 */
-       0xE0,
-       /* F2000-F20FF: page 224 */
-       0xE0,
-       /* F2100-F21FF: page 224 */
-       0xE0,
-       /* F2200-F22FF: page 224 */
-       0xE0,
-       /* F2300-F23FF: page 224 */
-       0xE0,
-       /* F2400-F24FF: page 224 */
-       0xE0,
-       /* F2500-F25FF: page 224 */
-       0xE0,
-       /* F2600-F26FF: page 224 */
-       0xE0,
-       /* F2700-F27FF: page 224 */
-       0xE0,
-       /* F2800-F28FF: page 224 */
-       0xE0,
-       /* F2900-F29FF: page 224 */
-       0xE0,
-       /* F2A00-F2AFF: page 224 */
-       0xE0,
-       /* F2B00-F2BFF: page 224 */
-       0xE0,
-       /* F2C00-F2CFF: page 224 */
-       0xE0,
-       /* F2D00-F2DFF: page 224 */
-       0xE0,
-       /* F2E00-F2EFF: page 224 */
-       0xE0,
-       /* F2F00-F2FFF: page 224 */
-       0xE0,
-       /* F3000-F30FF: page 224 */
-       0xE0,
-       /* F3100-F31FF: page 224 */
-       0xE0,
-       /* F3200-F32FF: page 224 */
-       0xE0,
-       /* F3300-F33FF: page 224 */
-       0xE0,
-       /* F3400-F34FF: page 224 */
-       0xE0,
-       /* F3500-F35FF: page 224 */
-       0xE0,
-       /* F3600-F36FF: page 224 */
-       0xE0,
-       /* F3700-F37FF: page 224 */
-       0xE0,
-       /* F3800-F38FF: page 224 */
-       0xE0,
-       /* F3900-F39FF: page 224 */
-       0xE0,
-       /* F3A00-F3AFF: page 224 */
-       0xE0,
-       /* F3B00-F3BFF: page 224 */
-       0xE0,
-       /* F3C00-F3CFF: page 224 */
-       0xE0,
-       /* F3D00-F3DFF: page 224 */
-       0xE0,
-       /* F3E00-F3EFF: page 224 */
-       0xE0,
-       /* F3F00-F3FFF: page 224 */
-       0xE0,
-       /* F4000-F40FF: page 224 */
-       0xE0,
-       /* F4100-F41FF: page 224 */
-       0xE0,
-       /* F4200-F42FF: page 224 */
-       0xE0,
-       /* F4300-F43FF: page 224 */
-       0xE0,
-       /* F4400-F44FF: page 224 */
-       0xE0,
-       /* F4500-F45FF: page 224 */
-       0xE0,
-       /* F4600-F46FF: page 224 */
-       0xE0,
-       /* F4700-F47FF: page 224 */
-       0xE0,
-       /* F4800-F48FF: page 224 */
-       0xE0,
-       /* F4900-F49FF: page 224 */
-       0xE0,
-       /* F4A00-F4AFF: page 224 */
-       0xE0,
-       /* F4B00-F4BFF: page 224 */
-       0xE0,
-       /* F4C00-F4CFF: page 224 */
-       0xE0,
-       /* F4D00-F4DFF: page 224 */
-       0xE0,
-       /* F4E00-F4EFF: page 224 */
-       0xE0,
-       /* F4F00-F4FFF: page 224 */
-       0xE0,
-       /* F5000-F50FF: page 224 */
-       0xE0,
-       /* F5100-F51FF: page 224 */
-       0xE0,
-       /* F5200-F52FF: page 224 */
-       0xE0,
-       /* F5300-F53FF: page 224 */
-       0xE0,
-       /* F5400-F54FF: page 224 */
-       0xE0,
-       /* F5500-F55FF: page 224 */
-       0xE0,
-       /* F5600-F56FF: page 224 */
-       0xE0,
-       /* F5700-F57FF: page 224 */
-       0xE0,
-       /* F5800-F58FF: page 224 */
-       0xE0,
-       /* F5900-F59FF: page 224 */
-       0xE0,
-       /* F5A00-F5AFF: page 224 */
-       0xE0,
-       /* F5B00-F5BFF: page 224 */
-       0xE0,
-       /* F5C00-F5CFF: page 224 */
-       0xE0,
-       /* F5D00-F5DFF: page 224 */
-       0xE0,
-       /* F5E00-F5EFF: page 224 */
-       0xE0,
-       /* F5F00-F5FFF: page 224 */
-       0xE0,
-       /* F6000-F60FF: page 224 */
-       0xE0,
-       /* F6100-F61FF: page 224 */
-       0xE0,
-       /* F6200-F62FF: page 224 */
-       0xE0,
-       /* F6300-F63FF: page 224 */
-       0xE0,
-       /* F6400-F64FF: page 224 */
-       0xE0,
-       /* F6500-F65FF: page 224 */
-       0xE0,
-       /* F6600-F66FF: page 224 */
-       0xE0,
-       /* F6700-F67FF: page 224 */
-       0xE0,
-       /* F6800-F68FF: page 224 */
-       0xE0,
-       /* F6900-F69FF: page 224 */
-       0xE0,
-       /* F6A00-F6AFF: page 224 */
-       0xE0,
-       /* F6B00-F6BFF: page 224 */
-       0xE0,
-       /* F6C00-F6CFF: page 224 */
-       0xE0,
-       /* F6D00-F6DFF: page 224 */
-       0xE0,
-       /* F6E00-F6EFF: page 224 */
-       0xE0,
-       /* F6F00-F6FFF: page 224 */
-       0xE0,
-       /* F7000-F70FF: page 224 */
-       0xE0,
-       /* F7100-F71FF: page 224 */
-       0xE0,
-       /* F7200-F72FF: page 224 */
-       0xE0,
-       /* F7300-F73FF: page 224 */
-       0xE0,
-       /* F7400-F74FF: page 224 */
-       0xE0,
-       /* F7500-F75FF: page 224 */
-       0xE0,
-       /* F7600-F76FF: page 224 */
-       0xE0,
-       /* F7700-F77FF: page 224 */
-       0xE0,
-       /* F7800-F78FF: page 224 */
-       0xE0,
-       /* F7900-F79FF: page 224 */
-       0xE0,
-       /* F7A00-F7AFF: page 224 */
-       0xE0,
-       /* F7B00-F7BFF: page 224 */
-       0xE0,
-       /* F7C00-F7CFF: page 224 */
-       0xE0,
-       /* F7D00-F7DFF: page 224 */
-       0xE0,
-       /* F7E00-F7EFF: page 224 */
-       0xE0,
-       /* F7F00-F7FFF: page 224 */
-       0xE0,
-       /* F8000-F80FF: page 224 */
-       0xE0,
-       /* F8100-F81FF: page 224 */
-       0xE0,
-       /* F8200-F82FF: page 224 */
-       0xE0,
-       /* F8300-F83FF: page 224 */
-       0xE0,
-       /* F8400-F84FF: page 224 */
-       0xE0,
-       /* F8500-F85FF: page 224 */
-       0xE0,
-       /* F8600-F86FF: page 224 */
-       0xE0,
-       /* F8700-F87FF: page 224 */
-       0xE0,
-       /* F8800-F88FF: page 224 */
-       0xE0,
-       /* F8900-F89FF: page 224 */
-       0xE0,
-       /* F8A00-F8AFF: page 224 */
-       0xE0,
-       /* F8B00-F8BFF: page 224 */
-       0xE0,
-       /* F8C00-F8CFF: page 224 */
-       0xE0,
-       /* F8D00-F8DFF: page 224 */
-       0xE0,
-       /* F8E00-F8EFF: page 224 */
-       0xE0,
-       /* F8F00-F8FFF: page 224 */
-       0xE0,
-       /* F9000-F90FF: page 224 */
-       0xE0,
-       /* F9100-F91FF: page 224 */
-       0xE0,
-       /* F9200-F92FF: page 224 */
-       0xE0,
-       /* F9300-F93FF: page 224 */
-       0xE0,
-       /* F9400-F94FF: page 224 */
-       0xE0,
-       /* F9500-F95FF: page 224 */
-       0xE0,
-       /* F9600-F96FF: page 224 */
-       0xE0,
-       /* F9700-F97FF: page 224 */
-       0xE0,
-       /* F9800-F98FF: page 224 */
-       0xE0,
-       /* F9900-F99FF: page 224 */
-       0xE0,
-       /* F9A00-F9AFF: page 224 */
-       0xE0,
-       /* F9B00-F9BFF: page 224 */
-       0xE0,
-       /* F9C00-F9CFF: page 224 */
-       0xE0,
-       /* F9D00-F9DFF: page 224 */
-       0xE0,
-       /* F9E00-F9EFF: page 224 */
-       0xE0,
-       /* F9F00-F9FFF: page 224 */
-       0xE0,
-       /* FA000-FA0FF: page 224 */
-       0xE0,
-       /* FA100-FA1FF: page 224 */
-       0xE0,
-       /* FA200-FA2FF: page 224 */
-       0xE0,
-       /* FA300-FA3FF: page 224 */
-       0xE0,
-       /* FA400-FA4FF: page 224 */
-       0xE0,
-       /* FA500-FA5FF: page 224 */
-       0xE0,
-       /* FA600-FA6FF: page 224 */
-       0xE0,
-       /* FA700-FA7FF: page 224 */
-       0xE0,
-       /* FA800-FA8FF: page 224 */
-       0xE0,
-       /* FA900-FA9FF: page 224 */
-       0xE0,
-       /* FAA00-FAAFF: page 224 */
-       0xE0,
-       /* FAB00-FABFF: page 224 */
-       0xE0,
-       /* FAC00-FACFF: page 224 */
-       0xE0,
-       /* FAD00-FADFF: page 224 */
-       0xE0,
-       /* FAE00-FAEFF: page 224 */
-       0xE0,
-       /* FAF00-FAFFF: page 224 */
-       0xE0,
-       /* FB000-FB0FF: page 224 */
-       0xE0,
-       /* FB100-FB1FF: page 224 */
-       0xE0,
-       /* FB200-FB2FF: page 224 */
-       0xE0,
-       /* FB300-FB3FF: page 224 */
-       0xE0,
-       /* FB400-FB4FF: page 224 */
-       0xE0,
-       /* FB500-FB5FF: page 224 */
-       0xE0,
-       /* FB600-FB6FF: page 224 */
-       0xE0,
-       /* FB700-FB7FF: page 224 */
-       0xE0,
-       /* FB800-FB8FF: page 224 */
-       0xE0,
-       /* FB900-FB9FF: page 224 */
-       0xE0,
-       /* FBA00-FBAFF: page 224 */
-       0xE0,
-       /* FBB00-FBBFF: page 224 */
-       0xE0,
-       /* FBC00-FBCFF: page 224 */
-       0xE0,
-       /* FBD00-FBDFF: page 224 */
-       0xE0,
-       /* FBE00-FBEFF: page 224 */
-       0xE0,
-       /* FBF00-FBFFF: page 224 */
-       0xE0,
-       /* FC000-FC0FF: page 224 */
-       0xE0,
-       /* FC100-FC1FF: page 224 */
-       0xE0,
-       /* FC200-FC2FF: page 224 */
-       0xE0,
-       /* FC300-FC3FF: page 224 */
-       0xE0,
-       /* FC400-FC4FF: page 224 */
-       0xE0,
-       /* FC500-FC5FF: page 224 */
-       0xE0,
-       /* FC600-FC6FF: page 224 */
-       0xE0,
-       /* FC700-FC7FF: page 224 */
-       0xE0,
-       /* FC800-FC8FF: page 224 */
-       0xE0,
-       /* FC900-FC9FF: page 224 */
-       0xE0,
-       /* FCA00-FCAFF: page 224 */
-       0xE0,
-       /* FCB00-FCBFF: page 224 */
-       0xE0,
-       /* FCC00-FCCFF: page 224 */
-       0xE0,
-       /* FCD00-FCDFF: page 224 */
-       0xE0,
-       /* FCE00-FCEFF: page 224 */
-       0xE0,
-       /* FCF00-FCFFF: page 224 */
-       0xE0,
-       /* FD000-FD0FF: page 224 */
-       0xE0,
-       /* FD100-FD1FF: page 224 */
-       0xE0,
-       /* FD200-FD2FF: page 224 */
-       0xE0,
-       /* FD300-FD3FF: page 224 */
-       0xE0,
-       /* FD400-FD4FF: page 224 */
-       0xE0,
-       /* FD500-FD5FF: page 224 */
-       0xE0,
-       /* FD600-FD6FF: page 224 */
-       0xE0,
-       /* FD700-FD7FF: page 224 */
-       0xE0,
-       /* FD800-FD8FF: page 224 */
-       0xE0,
-       /* FD900-FD9FF: page 224 */
-       0xE0,
-       /* FDA00-FDAFF: page 224 */
-       0xE0,
-       /* FDB00-FDBFF: page 224 */
-       0xE0,
-       /* FDC00-FDCFF: page 224 */
-       0xE0,
-       /* FDD00-FDDFF: page 224 */
-       0xE0,
-       /* FDE00-FDEFF: page 224 */
-       0xE0,
-       /* FDF00-FDFFF: page 224 */
-       0xE0,
-       /* FE000-FE0FF: page 224 */
-       0xE0,
-       /* FE100-FE1FF: page 224 */
-       0xE0,
-       /* FE200-FE2FF: page 224 */
-       0xE0,
-       /* FE300-FE3FF: page 224 */
-       0xE0,
-       /* FE400-FE4FF: page 224 */
-       0xE0,
-       /* FE500-FE5FF: page 224 */
-       0xE0,
-       /* FE600-FE6FF: page 224 */
-       0xE0,
-       /* FE700-FE7FF: page 224 */
-       0xE0,
-       /* FE800-FE8FF: page 224 */
-       0xE0,
-       /* FE900-FE9FF: page 224 */
-       0xE0,
-       /* FEA00-FEAFF: page 224 */
-       0xE0,
-       /* FEB00-FEBFF: page 224 */
-       0xE0,
-       /* FEC00-FECFF: page 224 */
-       0xE0,
-       /* FED00-FEDFF: page 224 */
-       0xE0,
-       /* FEE00-FEEFF: page 224 */
-       0xE0,
-       /* FEF00-FEFFF: page 224 */
-       0xE0,
-       /* FF000-FF0FF: page 224 */
-       0xE0,
-       /* FF100-FF1FF: page 224 */
-       0xE0,
-       /* FF200-FF2FF: page 224 */
-       0xE0,
-       /* FF300-FF3FF: page 224 */
-       0xE0,
-       /* FF400-FF4FF: page 224 */
-       0xE0,
-       /* FF500-FF5FF: page 224 */
-       0xE0,
-       /* FF600-FF6FF: page 224 */
-       0xE0,
-       /* FF700-FF7FF: page 224 */
-       0xE0,
-       /* FF800-FF8FF: page 224 */
-       0xE0,
-       /* FF900-FF9FF: page 224 */
-       0xE0,
-       /* FFA00-FFAFF: page 224 */
-       0xE0,
-       /* FFB00-FFBFF: page 224 */
-       0xE0,
-       /* FFC00-FFCFF: page 224 */
-       0xE0,
-       /* FFD00-FFDFF: page 224 */
-       0xE0,
-       /* FFE00-FFEFF: page 224 */
-       0xE0,
-       /* FFF00-FFFFF: page 279 */
-       0x117,
-       /* 100000-1000FF: page 224 */
-       0xE0,
-       /* 100100-1001FF: page 224 */
-       0xE0,
-       /* 100200-1002FF: page 224 */
-       0xE0,
-       /* 100300-1003FF: page 224 */
-       0xE0,
-       /* 100400-1004FF: page 224 */
-       0xE0,
-       /* 100500-1005FF: page 224 */
-       0xE0,
-       /* 100600-1006FF: page 224 */
-       0xE0,
-       /* 100700-1007FF: page 224 */
-       0xE0,
-       /* 100800-1008FF: page 224 */
-       0xE0,
-       /* 100900-1009FF: page 224 */
-       0xE0,
-       /* 100A00-100AFF: page 224 */
-       0xE0,
-       /* 100B00-100BFF: page 224 */
-       0xE0,
-       /* 100C00-100CFF: page 224 */
-       0xE0,
-       /* 100D00-100DFF: page 224 */
-       0xE0,
-       /* 100E00-100EFF: page 224 */
-       0xE0,
-       /* 100F00-100FFF: page 224 */
-       0xE0,
-       /* 101000-1010FF: page 224 */
-       0xE0,
-       /* 101100-1011FF: page 224 */
-       0xE0,
-       /* 101200-1012FF: page 224 */
-       0xE0,
-       /* 101300-1013FF: page 224 */
-       0xE0,
-       /* 101400-1014FF: page 224 */
-       0xE0,
-       /* 101500-1015FF: page 224 */
-       0xE0,
-       /* 101600-1016FF: page 224 */
-       0xE0,
-       /* 101700-1017FF: page 224 */
-       0xE0,
-       /* 101800-1018FF: page 224 */
-       0xE0,
-       /* 101900-1019FF: page 224 */
-       0xE0,
-       /* 101A00-101AFF: page 224 */
-       0xE0,
-       /* 101B00-101BFF: page 224 */
-       0xE0,
-       /* 101C00-101CFF: page 224 */
-       0xE0,
-       /* 101D00-101DFF: page 224 */
-       0xE0,
-       /* 101E00-101EFF: page 224 */
-       0xE0,
-       /* 101F00-101FFF: page 224 */
-       0xE0,
-       /* 102000-1020FF: page 224 */
-       0xE0,
-       /* 102100-1021FF: page 224 */
-       0xE0,
-       /* 102200-1022FF: page 224 */
-       0xE0,
-       /* 102300-1023FF: page 224 */
-       0xE0,
-       /* 102400-1024FF: page 224 */
-       0xE0,
-       /* 102500-1025FF: page 224 */
-       0xE0,
-       /* 102600-1026FF: page 224 */
-       0xE0,
-       /* 102700-1027FF: page 224 */
-       0xE0,
-       /* 102800-1028FF: page 224 */
-       0xE0,
-       /* 102900-1029FF: page 224 */
-       0xE0,
-       /* 102A00-102AFF: page 224 */
-       0xE0,
-       /* 102B00-102BFF: page 224 */
-       0xE0,
-       /* 102C00-102CFF: page 224 */
-       0xE0,
-       /* 102D00-102DFF: page 224 */
-       0xE0,
-       /* 102E00-102EFF: page 224 */
-       0xE0,
-       /* 102F00-102FFF: page 224 */
-       0xE0,
-       /* 103000-1030FF: page 224 */
-       0xE0,
-       /* 103100-1031FF: page 224 */
-       0xE0,
-       /* 103200-1032FF: page 224 */
-       0xE0,
-       /* 103300-1033FF: page 224 */
-       0xE0,
-       /* 103400-1034FF: page 224 */
-       0xE0,
-       /* 103500-1035FF: page 224 */
-       0xE0,
-       /* 103600-1036FF: page 224 */
-       0xE0,
-       /* 103700-1037FF: page 224 */
-       0xE0,
-       /* 103800-1038FF: page 224 */
-       0xE0,
-       /* 103900-1039FF: page 224 */
-       0xE0,
-       /* 103A00-103AFF: page 224 */
-       0xE0,
-       /* 103B00-103BFF: page 224 */
-       0xE0,
-       /* 103C00-103CFF: page 224 */
-       0xE0,
-       /* 103D00-103DFF: page 224 */
-       0xE0,
-       /* 103E00-103EFF: page 224 */
-       0xE0,
-       /* 103F00-103FFF: page 224 */
-       0xE0,
-       /* 104000-1040FF: page 224 */
-       0xE0,
-       /* 104100-1041FF: page 224 */
-       0xE0,
-       /* 104200-1042FF: page 224 */
-       0xE0,
-       /* 104300-1043FF: page 224 */
-       0xE0,
-       /* 104400-1044FF: page 224 */
-       0xE0,
-       /* 104500-1045FF: page 224 */
-       0xE0,
-       /* 104600-1046FF: page 224 */
-       0xE0,
-       /* 104700-1047FF: page 224 */
-       0xE0,
-       /* 104800-1048FF: page 224 */
-       0xE0,
-       /* 104900-1049FF: page 224 */
-       0xE0,
-       /* 104A00-104AFF: page 224 */
-       0xE0,
-       /* 104B00-104BFF: page 224 */
-       0xE0,
-       /* 104C00-104CFF: page 224 */
-       0xE0,
-       /* 104D00-104DFF: page 224 */
-       0xE0,
-       /* 104E00-104EFF: page 224 */
-       0xE0,
-       /* 104F00-104FFF: page 224 */
-       0xE0,
-       /* 105000-1050FF: page 224 */
-       0xE0,
-       /* 105100-1051FF: page 224 */
-       0xE0,
-       /* 105200-1052FF: page 224 */
-       0xE0,
-       /* 105300-1053FF: page 224 */
-       0xE0,
-       /* 105400-1054FF: page 224 */
-       0xE0,
-       /* 105500-1055FF: page 224 */
-       0xE0,
-       /* 105600-1056FF: page 224 */
-       0xE0,
-       /* 105700-1057FF: page 224 */
-       0xE0,
-       /* 105800-1058FF: page 224 */
-       0xE0,
-       /* 105900-1059FF: page 224 */
-       0xE0,
-       /* 105A00-105AFF: page 224 */
-       0xE0,
-       /* 105B00-105BFF: page 224 */
-       0xE0,
-       /* 105C00-105CFF: page 224 */
-       0xE0,
-       /* 105D00-105DFF: page 224 */
-       0xE0,
-       /* 105E00-105EFF: page 224 */
-       0xE0,
-       /* 105F00-105FFF: page 224 */
-       0xE0,
-       /* 106000-1060FF: page 224 */
-       0xE0,
-       /* 106100-1061FF: page 224 */
-       0xE0,
-       /* 106200-1062FF: page 224 */
-       0xE0,
-       /* 106300-1063FF: page 224 */
-       0xE0,
-       /* 106400-1064FF: page 224 */
-       0xE0,
-       /* 106500-1065FF: page 224 */
-       0xE0,
-       /* 106600-1066FF: page 224 */
-       0xE0,
-       /* 106700-1067FF: page 224 */
-       0xE0,
-       /* 106800-1068FF: page 224 */
-       0xE0,
-       /* 106900-1069FF: page 224 */
-       0xE0,
-       /* 106A00-106AFF: page 224 */
-       0xE0,
-       /* 106B00-106BFF: page 224 */
-       0xE0,
-       /* 106C00-106CFF: page 224 */
-       0xE0,
-       /* 106D00-106DFF: page 224 */
-       0xE0,
-       /* 106E00-106EFF: page 224 */
-       0xE0,
-       /* 106F00-106FFF: page 224 */
-       0xE0,
-       /* 107000-1070FF: page 224 */
-       0xE0,
-       /* 107100-1071FF: page 224 */
-       0xE0,
-       /* 107200-1072FF: page 224 */
-       0xE0,
-       /* 107300-1073FF: page 224 */
-       0xE0,
-       /* 107400-1074FF: page 224 */
-       0xE0,
-       /* 107500-1075FF: page 224 */
-       0xE0,
-       /* 107600-1076FF: page 224 */
-       0xE0,
-       /* 107700-1077FF: page 224 */
-       0xE0,
-       /* 107800-1078FF: page 224 */
-       0xE0,
-       /* 107900-1079FF: page 224 */
-       0xE0,
-       /* 107A00-107AFF: page 224 */
-       0xE0,
-       /* 107B00-107BFF: page 224 */
-       0xE0,
-       /* 107C00-107CFF: page 224 */
-       0xE0,
-       /* 107D00-107DFF: page 224 */
-       0xE0,
-       /* 107E00-107EFF: page 224 */
-       0xE0,
-       /* 107F00-107FFF: page 224 */
-       0xE0,
-       /* 108000-1080FF: page 224 */
-       0xE0,
-       /* 108100-1081FF: page 224 */
-       0xE0,
-       /* 108200-1082FF: page 224 */
-       0xE0,
-       /* 108300-1083FF: page 224 */
-       0xE0,
-       /* 108400-1084FF: page 224 */
-       0xE0,
-       /* 108500-1085FF: page 224 */
-       0xE0,
-       /* 108600-1086FF: page 224 */
-       0xE0,
-       /* 108700-1087FF: page 224 */
-       0xE0,
-       /* 108800-1088FF: page 224 */
-       0xE0,
-       /* 108900-1089FF: page 224 */
-       0xE0,
-       /* 108A00-108AFF: page 224 */
-       0xE0,
-       /* 108B00-108BFF: page 224 */
-       0xE0,
-       /* 108C00-108CFF: page 224 */
-       0xE0,
-       /* 108D00-108DFF: page 224 */
-       0xE0,
-       /* 108E00-108EFF: page 224 */
-       0xE0,
-       /* 108F00-108FFF: page 224 */
-       0xE0,
-       /* 109000-1090FF: page 224 */
-       0xE0,
-       /* 109100-1091FF: page 224 */
-       0xE0,
-       /* 109200-1092FF: page 224 */
-       0xE0,
-       /* 109300-1093FF: page 224 */
-       0xE0,
-       /* 109400-1094FF: page 224 */
-       0xE0,
-       /* 109500-1095FF: page 224 */
-       0xE0,
-       /* 109600-1096FF: page 224 */
-       0xE0,
-       /* 109700-1097FF: page 224 */
-       0xE0,
-       /* 109800-1098FF: page 224 */
-       0xE0,
-       /* 109900-1099FF: page 224 */
-       0xE0,
-       /* 109A00-109AFF: page 224 */
-       0xE0,
-       /* 109B00-109BFF: page 224 */
-       0xE0,
-       /* 109C00-109CFF: page 224 */
-       0xE0,
-       /* 109D00-109DFF: page 224 */
-       0xE0,
-       /* 109E00-109EFF: page 224 */
-       0xE0,
-       /* 109F00-109FFF: page 224 */
-       0xE0,
-       /* 10A000-10A0FF: page 224 */
-       0xE0,
-       /* 10A100-10A1FF: page 224 */
-       0xE0,
-       /* 10A200-10A2FF: page 224 */
-       0xE0,
-       /* 10A300-10A3FF: page 224 */
-       0xE0,
-       /* 10A400-10A4FF: page 224 */
-       0xE0,
-       /* 10A500-10A5FF: page 224 */
-       0xE0,
-       /* 10A600-10A6FF: page 224 */
-       0xE0,
-       /* 10A700-10A7FF: page 224 */
-       0xE0,
-       /* 10A800-10A8FF: page 224 */
-       0xE0,
-       /* 10A900-10A9FF: page 224 */
-       0xE0,
-       /* 10AA00-10AAFF: page 224 */
-       0xE0,
-       /* 10AB00-10ABFF: page 224 */
-       0xE0,
-       /* 10AC00-10ACFF: page 224 */
-       0xE0,
-       /* 10AD00-10ADFF: page 224 */
-       0xE0,
-       /* 10AE00-10AEFF: page 224 */
-       0xE0,
-       /* 10AF00-10AFFF: page 224 */
-       0xE0,
-       /* 10B000-10B0FF: page 224 */
-       0xE0,
-       /* 10B100-10B1FF: page 224 */
-       0xE0,
-       /* 10B200-10B2FF: page 224 */
-       0xE0,
-       /* 10B300-10B3FF: page 224 */
-       0xE0,
-       /* 10B400-10B4FF: page 224 */
-       0xE0,
-       /* 10B500-10B5FF: page 224 */
-       0xE0,
-       /* 10B600-10B6FF: page 224 */
-       0xE0,
-       /* 10B700-10B7FF: page 224 */
-       0xE0,
-       /* 10B800-10B8FF: page 224 */
-       0xE0,
-       /* 10B900-10B9FF: page 224 */
-       0xE0,
-       /* 10BA00-10BAFF: page 224 */
-       0xE0,
-       /* 10BB00-10BBFF: page 224 */
-       0xE0,
-       /* 10BC00-10BCFF: page 224 */
-       0xE0,
-       /* 10BD00-10BDFF: page 224 */
-       0xE0,
-       /* 10BE00-10BEFF: page 224 */
-       0xE0,
-       /* 10BF00-10BFFF: page 224 */
-       0xE0,
-       /* 10C000-10C0FF: page 224 */
-       0xE0,
-       /* 10C100-10C1FF: page 224 */
-       0xE0,
-       /* 10C200-10C2FF: page 224 */
-       0xE0,
-       /* 10C300-10C3FF: page 224 */
-       0xE0,
-       /* 10C400-10C4FF: page 224 */
-       0xE0,
-       /* 10C500-10C5FF: page 224 */
-       0xE0,
-       /* 10C600-10C6FF: page 224 */
-       0xE0,
-       /* 10C700-10C7FF: page 224 */
-       0xE0,
-       /* 10C800-10C8FF: page 224 */
-       0xE0,
-       /* 10C900-10C9FF: page 224 */
-       0xE0,
-       /* 10CA00-10CAFF: page 224 */
-       0xE0,
-       /* 10CB00-10CBFF: page 224 */
-       0xE0,
-       /* 10CC00-10CCFF: page 224 */
-       0xE0,
-       /* 10CD00-10CDFF: page 224 */
-       0xE0,
-       /* 10CE00-10CEFF: page 224 */
-       0xE0,
-       /* 10CF00-10CFFF: page 224 */
-       0xE0,
-       /* 10D000-10D0FF: page 224 */
-       0xE0,
-       /* 10D100-10D1FF: page 224 */
-       0xE0,
-       /* 10D200-10D2FF: page 224 */
-       0xE0,
-       /* 10D300-10D3FF: page 224 */
-       0xE0,
-       /* 10D400-10D4FF: page 224 */
-       0xE0,
-       /* 10D500-10D5FF: page 224 */
-       0xE0,
-       /* 10D600-10D6FF: page 224 */
-       0xE0,
-       /* 10D700-10D7FF: page 224 */
-       0xE0,
-       /* 10D800-10D8FF: page 224 */
-       0xE0,
-       /* 10D900-10D9FF: page 224 */
-       0xE0,
-       /* 10DA00-10DAFF: page 224 */
-       0xE0,
-       /* 10DB00-10DBFF: page 224 */
-       0xE0,
-       /* 10DC00-10DCFF: page 224 */
-       0xE0,
-       /* 10DD00-10DDFF: page 224 */
-       0xE0,
-       /* 10DE00-10DEFF: page 224 */
-       0xE0,
-       /* 10DF00-10DFFF: page 224 */
-       0xE0,
-       /* 10E000-10E0FF: page 224 */
-       0xE0,
-       /* 10E100-10E1FF: page 224 */
-       0xE0,
-       /* 10E200-10E2FF: page 224 */
-       0xE0,
-       /* 10E300-10E3FF: page 224 */
-       0xE0,
-       /* 10E400-10E4FF: page 224 */
-       0xE0,
-       /* 10E500-10E5FF: page 224 */
-       0xE0,
-       /* 10E600-10E6FF: page 224 */
-       0xE0,
-       /* 10E700-10E7FF: page 224 */
-       0xE0,
-       /* 10E800-10E8FF: page 224 */
-       0xE0,
-       /* 10E900-10E9FF: page 224 */
-       0xE0,
-       /* 10EA00-10EAFF: page 224 */
-       0xE0,
-       /* 10EB00-10EBFF: page 224 */
-       0xE0,
-       /* 10EC00-10ECFF: page 224 */
-       0xE0,
-       /* 10ED00-10EDFF: page 224 */
-       0xE0,
-       /* 10EE00-10EEFF: page 224 */
-       0xE0,
-       /* 10EF00-10EFFF: page 224 */
-       0xE0,
-       /* 10F000-10F0FF: page 224 */
-       0xE0,
-       /* 10F100-10F1FF: page 224 */
-       0xE0,
-       /* 10F200-10F2FF: page 224 */
-       0xE0,
-       /* 10F300-10F3FF: page 224 */
-       0xE0,
-       /* 10F400-10F4FF: page 224 */
-       0xE0,
-       /* 10F500-10F5FF: page 224 */
-       0xE0,
-       /* 10F600-10F6FF: page 224 */
-       0xE0,
-       /* 10F700-10F7FF: page 224 */
-       0xE0,
-       /* 10F800-10F8FF: page 224 */
-       0xE0,
-       /* 10F900-10F9FF: page 224 */
-       0xE0,
-       /* 10FA00-10FAFF: page 224 */
-       0xE0,
-       /* 10FB00-10FBFF: page 224 */
-       0xE0,
-       /* 10FC00-10FCFF: page 224 */
-       0xE0,
-       /* 10FD00-10FDFF: page 224 */
-       0xE0,
-       /* 10FE00-10FEFF: page 224 */
-       0xE0,
-       /* 10FF00-10FFFF: page 279 */
-       0x117
-};
-#endif
-
-#endif /* DISABLE_NET_4_0 */
-
-static const guint8 NumericData [] = {
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,0,1,
-        2,3,4,5,6,7,8,9,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,2,3,57,57,57,57,57,1,57,57,44,33,45,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,0,1,2,3,4,5,6,7,8,9,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,0,1,2,3,4,5,6,7,8,9,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,0,1,2,3,4,5,6,7,8,9,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,0,1,2,3,4,5,6,7,8,9,57,57,57,57,1,2,
-        3,4,57,16,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,0,1,2,3,4,5,6,7,8,9,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,0,1,2,3,4,5,6,7,8,9,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,0,1,2,3,4,5,6,7,8,9,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,1,2,3,
-        4,5,6,7,8,9,10,28,30,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,0,1,2,3,4,5,6,7,8,9,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,0,1,2,3,4,5,6,7,8,9,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,0,1,2,3,4,5,6,7,8,9,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,0,1,2,3,4,5,6,7,8,9,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,0,1,2,3,4,5,6,7,
-        8,9,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,0,1,2,3,4,5,6,7,8,9,33,34,35,36,37,38,39,40,41,56,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,0,1,2,3,4,5,6,7,8,9,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,1,2,3,4,5,6,7,8,9,10,20,21,22,23,24,25,26,27,28,32,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,17,18,19,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,0,1,2,3,4,5,6,7,8,9,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,0,1,2,3,4,5,6,7,8,9,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,0,57,57,57,4,5,6,7,8,9,57,57,57,57,57,57,0,1,2,3,4,5,6,7,8,9,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,42,43,46,47,48,49,50,51,52,53,54,55,1,1,2,3,4,5,6,
-        7,8,9,10,11,12,23,28,29,30,1,2,3,4,5,6,7,8,9,10,11,12,23,28,29,30,30,31,32,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,
-        19,20,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        0,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,1,2,3,4,5,6,7,8,9,10,1,2,3,4,5,6,7,8,9,10,1,2,3,4,5,6,7,8,9,10,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,0,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,1,2,3,4,5,6,7,8,9,57,57,57,57,57,57,57,57,57,57,57,57,57,57,10,20,21,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,1,2,3,4,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,1,2,3,4,5,6,7,8,9,10,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
-        57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,1,2,3,4,5,6,7,8,9,10
-};
-
-static const gdouble NumericDataValues [] = {
-        0,  1,  2,  3,  4,  5,  6,  7,  8,  9,
-        10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
-        20, 30, 40, 50, 60, 70, 80, 90,100,500,
-        1000, 5000, 10000, 1/2, 3/2, 5/2, 7/2, 9/2, 11/2, 13/2,
-        15/2, 17/2, 1/3, 2/3, 1/4, 3/4, 1/5, 2/5, 3/5, 4/5,
-        1/6, 5/6, 1/8, 3/8, 5/8, 7/8, -1/2, -1
-};
-
 static const guint16 ToLowerDataLow [] = {
         0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,
         50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,91,92,93,94,95,96,97,98,99,
index 4fa47c798707605d8548e65337561c794d6f60c5..b70897dccb00767160a66906636e4a11d355eba9 100644 (file)
@@ -266,15 +266,21 @@ mono_class_from_typeref_checked (MonoImage *image, guint32 type_token, MonoError
                return NULL;
        }
 
+       /* FIXME this leaks loader errors */
        res = mono_class_from_name (image->references [idx - 1]->image, nspace, name);
 
 done:
        /* Generic case, should be avoided for when a better error is possible. */
        if (!res && mono_error_ok (error)) {
-               char *name = mono_class_name_from_token (image, type_token);
-               char *assembly = mono_assembly_name_from_token (image, type_token);
-               mono_error_set_type_load_name (error, name, assembly, "Could not resolve type with token %08x", type_token);
+               if (mono_loader_get_last_error ()) { /*FIXME plug the above to not leak errors*/
+                       mono_error_set_from_loader_error (error);
+               } else {
+                       char *name = mono_class_name_from_token (image, type_token);
+                       char *assembly = mono_assembly_name_from_token (image, type_token);
+                       mono_error_set_type_load_name (error, name, assembly, "Could not resolve type with token %08x", type_token);
+               }
        }
+       g_assert (!mono_loader_get_last_error ());
        return res;
 }
 
index a733a1bee61780edace981cde09c65d0f1189a90..05038fa4766bc2a142353580c3382a7b8723d49f 100644 (file)
@@ -524,8 +524,6 @@ cominterop_type_from_handle (MonoType *handle)
        MonoDomain *domain = mono_domain_get (); 
        MonoClass *klass = mono_class_from_mono_type (handle);
 
-       MONO_ARCH_SAVE_REGS;
-
        mono_class_init (klass);
        return mono_type_get_object (domain, handle);
 }
@@ -1588,8 +1586,6 @@ ves_icall_System_Runtime_InteropServices_Marshal_ReleaseComObjectInternal (MonoO
 guint32
 ves_icall_System_Runtime_InteropServices_Marshal_GetComSlotForMethodInfoInternal (MonoReflectionMethod *m)
 {
-       MONO_ARCH_SAVE_REGS;
-
 #ifndef DISABLE_COM
        return cominterop_get_com_slot_for_method (m->method);
 #else
@@ -1605,8 +1601,6 @@ ves_icall_System_ComObject_CreateRCW (MonoReflectionType *type)
        MonoDomain *domain;
        MonoObject *obj;
        
-       MONO_ARCH_SAVE_REGS;
-
        domain = mono_object_domain (type);
        klass = mono_class_from_mono_type (type->type);
 
@@ -3309,23 +3303,17 @@ ves_icall_System_Runtime_InteropServices_Marshal_QueryInterfaceInternal (gpointe
 MonoString *
 ves_icall_System_Runtime_InteropServices_Marshal_PtrToStringBSTR (gpointer ptr)
 {
-       MONO_ARCH_SAVE_REGS;
-
        return mono_string_from_bstr(ptr);
 }
 
 gpointer
 ves_icall_System_Runtime_InteropServices_Marshal_StringToBSTR (MonoString* ptr)
 {
-       MONO_ARCH_SAVE_REGS;
-
        return mono_string_to_bstr(ptr);
 }
 
 void
 ves_icall_System_Runtime_InteropServices_Marshal_FreeBSTR (gpointer ptr)
 {
-       MONO_ARCH_SAVE_REGS;
-
        mono_free_bstr (ptr);
 }
index a2e1486c084d07f774d19dbcc8873cb4dfbfc7bf..46554d214abaadce47008ef1d68aa61f794bf319 100644 (file)
@@ -29,8 +29,6 @@ mono_console_handle_async_ops (void)
 MonoBoolean
 ves_icall_System_ConsoleDriver_Isatty (HANDLE handle)
 {
-       MONO_ARCH_SAVE_REGS;
-
        return (GetFileType (handle) == FILE_TYPE_CHAR);
 }
 
index 1de9a002e0a9f9a76717d5e013b48248bd5b6ec6..6803eaf82e7454acb906a3bea308cdb3d7f685c4 100644 (file)
@@ -94,8 +94,6 @@ static struct termios initial_attr;
 MonoBoolean
 ves_icall_System_ConsoleDriver_Isatty (HANDLE handle)
 {
-       MONO_ARCH_SAVE_REGS;
-
        return isatty (GPOINTER_TO_INT (handle));
 }
 
@@ -106,8 +104,6 @@ set_property (gint property, gboolean value)
        gboolean callset = FALSE;
        gboolean check;
        
-       MONO_ARCH_SAVE_REGS;
-
        if (tcgetattr (STDIN_FILENO, &attr) == -1)
                return FALSE;
 
@@ -152,8 +148,6 @@ ves_icall_System_ConsoleDriver_InternalKeyAvailable (gint32 timeout)
        div_t divvy;
        int ret, nbytes;
 
-       MONO_ARCH_SAVE_REGS;
-
        do {
                FD_ZERO (&rfds);
                FD_SET (STDIN_FILENO, &rfds);
@@ -208,8 +202,6 @@ tty_teardown (void)
 {
        int unused;
 
-       MONO_ARCH_SAVE_REGS;
-
        if (!setup_finished)
                return;
 
@@ -281,7 +273,6 @@ static gboolean in_sigint;
 MONO_SIG_HANDLER_FUNC (static, sigint_handler)
 {
        int save_errno;
-       MONO_ARCH_SAVE_REGS;
 
        if (in_sigint)
                return;
@@ -449,8 +440,6 @@ ves_icall_System_ConsoleDriver_TtySetup (MonoString *keypad, MonoString *teardow
 {
        int dims;
 
-       MONO_ARCH_SAVE_REGS;
-
        dims = terminal_get_dimensions ();
        if (dims == -1){
                int cols = 0, rows = 0;
index 15efa5a30507b51b903a5a20d60c16cbb1aea864..2e751e1f57bd127378376f5fa5b15b7bc9d44fc0 100644 (file)
@@ -46,8 +46,6 @@ ves_icall_System_ConsoleDriver_Isatty (HANDLE handle)
 {
        DWORD mode;
 
-       MONO_ARCH_SAVE_REGS;
-
        return GetConsoleMode (handle, &mode) != 0;
 }
 
index bdbeb1daf6b9fcfd947ee467885762fa09a739b8..9bcbade5762b554a239ea5c6738b18c8dfe7b7f7 100644 (file)
 
 
 static const DateTimeFormatEntry datetime_format_entries [] = {
-       {1, 14, 23, 35, 44, 55, 0, 0, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {63, 72, 79, 99, 119, 143, 167, 174, 185, 196, 205, 223, 0}, {63, 72, 79, 99, 119, 143, 167, 174, 185, 196, 205, 223, 0}, {63, 72, 79, 99, 119, 143, 167, 174, 185, 196, 205, 223, 0}, {63, 72, 79, 99, 119, 143, 167, 174, 185, 196, 205, 223, 0}, 0, 6, 239, 241, {14,243,0,0,0,0,0,0,0,0,0,0,0,0},{1,254,0,0,0,0,0,0},{35,274,0,0,0,0,0,0,0,0,0,0},{23,280,0,0,0,0,0,0,0}},
-       {289, 308, 323, 331, 336, 352, 359, 370, {381, 394, 415, 430, 441, 460, 471}, {484, 489, 494, 499, 504, 509, 514}, {519, 522, 525, 528, 531, 522, 528}, {534, 547, 564, 573, 584, 591, 598, 605, 618, 637, 654, 669, 0}, {534, 547, 564, 573, 584, 591, 598, 605, 618, 637, 654, 669, 0}, {686, 692, 564, 702, 584, 591, 598, 710, 718, 728, 736, 746, 0}, {686, 692, 564, 702, 584, 591, 598, 710, 718, 728, 736, 746, 0}, 2, 1, 754, 241, {308,756,772,788,0,0,0,0,0,0,0,0,0,0},{289,805,823,848,0,0,0,0},{872,884,0,0,0,0,0,0,0,0,0,0},{895,910,0,0,0,0,0,0,0}},
-       {924, 243, 323, 331, 947, 352, 962, 968, {974, 983, 991, 999, 1008, 1015, 1025}, {1034, 1038, 1042, 1046, 1050, 1054, 1058}, {1062, 1065, 1068, 1071, 1074, 1077, 1080}, {1083, 1089, 1096, 1102, 1108, 1113, 1118, 1125, 1131, 1140, 1148, 1157, 0}, {1083, 1089, 1096, 1102, 1108, 1113, 1118, 1125, 1131, 1140, 1148, 1157, 0}, {1166, 1171, 1096, 1176, 1108, 1113, 1181, 1186, 1190, 1195, 1200, 1205, 0}, {1166, 1171, 1096, 1176, 1108, 1113, 1181, 1186, 1190, 1195, 1200, 1205, 0}, 2, 1, 239, 241, {243,14,1210,1221,1229,1236,1245,0,0,0,0,0,0,0},{1254,1280,1296,0,0,0,0,0},{274,331,1312,0,0,0,0,0,0,0,0,0},{280,323,1324,0,0,0,0,0,0}},
-       {1344, 1366, 323, 331, 1375, 1391, 1404, 1411, {1418, 1428, 1438, 1448, 1458, 1468, 1478}, {1488, 1495, 1502, 1509, 1516, 1523, 1530}, {1537, 1541, 1545, 1549, 1553, 1557, 1561}, {1565, 1572, 1579, 1586, 1593, 1600, 1607, 1614, 1621, 1628, 1635, 1645, 0}, {1565, 1572, 1579, 1586, 1593, 1600, 1607, 1614, 1621, 1628, 1635, 1645, 0}, {1655, 1660, 1665, 1670, 1675, 1680, 1685, 1690, 1695, 1700, 1706, 1712, 0}, {1655, 1660, 1665, 1670, 1675, 1680, 1685, 1690, 1695, 1700, 1706, 1712, 0}, 0, 0, 239, 241, {1366,1718,1727,1210,1736,1747,1758,1765,1772,1779,0,0,0,0},{1344,1788,1815,0,0,0,0,0},{331,274,1842,1850,0,0,0,0,0,0,0,0},{323,280,1859,1870,0,0,0,0,0}},
-       {1344, 1366, 323, 331, 1375, 1391, 1404, 1411, {1418, 1428, 1438, 1448, 1458, 1468, 1478}, {1488, 1495, 1502, 1509, 1516, 1523, 1530}, {1537, 1541, 1545, 1549, 1553, 1557, 1561}, {1565, 1572, 1579, 1586, 1593, 1600, 1607, 1614, 1621, 1628, 1635, 1645, 0}, {1565, 1572, 1579, 1586, 1593, 1600, 1607, 1614, 1621, 1628, 1635, 1645, 0}, {1655, 1660, 1665, 1670, 1675, 1680, 1685, 1690, 1695, 1700, 1706, 1712, 0}, {1655, 1660, 1665, 1670, 1675, 1680, 1685, 1690, 1695, 1700, 1706, 1712, 0}, 0, 0, 239, 241, {1366,1718,1727,1210,1736,1747,1758,1765,1772,1779,0,0,0,0},{1344,1788,1815,0,0,0,0,0},{331,274,1842,1850,0,0,0,0,0,0,0,0},{323,280,1859,1870,0,0,0,0,0}},
-       {1882, 1895, 323, 331, 1906, 1916, 1924, 1927, {1930, 1938, 1948, 1956, 1964, 1973, 1980}, {1987, 1990, 1993, 1997, 2000, 2004, 2008}, {2011, 2013, 2015, 2018, 2020, 2013, 2018}, {2023, 2029, 2035, 2043, 2049, 2057, 2065, 2075, 2081, 2089, 2097, 2106, 0}, {2115, 2121, 2128, 2136, 2142, 2150, 2158, 2168, 2081, 2174, 2182, 2192, 0}, {2201, 2205, 2210, 2215, 2219, 2224, 2229, 2234, 2238, 2244, 2250, 2254, 0}, {2201, 2205, 2210, 2215, 2219, 2224, 2229, 2234, 2238, 2244, 2250, 2254, 0}, 2, 1, 2258, 241, {2261,2270,1210,1718,1758,0,0,0,0,0,0,0,0,0},{1882,0,0,0,0,0,0,0},{331,274,2277,2285,0,0,0,0,0,0,0,0},{323,280,2290,2301,0,0,0,0,0}},
-       {1882, 2309, 280, 274, 1906, 1916, 1924, 1927, {2320, 2328, 2335, 2343, 2350, 2358, 2365}, {2373, 2378, 2382, 2386, 2390, 2394, 2398}, {2018, 2403, 2405, 2407, 2405, 2409, 2411}, {2413, 2420, 2428, 2434, 2440, 2444, 2449, 2454, 2461, 2471, 2479, 2488, 0}, {2413, 2420, 2428, 2434, 2440, 2444, 2449, 2454, 2461, 2471, 2479, 2488, 0}, {2497, 2501, 2505, 2509, 2440, 2513, 2517, 2521, 2525, 2529, 2533, 2537, 0}, {2497, 2501, 2505, 2509, 2440, 2513, 2517, 2521, 2525, 2529, 2533, 2537, 0}, 2, 1, 2541, 241, {2309,1236,1210,2543,0,0,0,0,0,0,0,0,0,0},{1882,2554,0,0,0,0,0,0},{274,331,0,0,0,0,0,0,0,0,0,0},{280,323,0,0,0,0,0,0,0}},
-       {2568, 2587, 280, 274, 1906, 1916, 2598, 2604, {2611, 2619, 2626, 2635, 2644, 2655, 2663}, {2671, 2674, 2677, 2680, 2683, 2686, 2689}, {2018, 2403, 2692, 2403, 2692, 2409, 2018}, {2694, 2701, 2709, 2715, 2721, 2725, 2730, 2735, 2742, 2752, 2760, 2769, 0}, {2694, 2701, 2709, 2715, 2721, 2725, 2730, 2735, 2742, 2752, 2760, 2769, 0}, {2778, 2782, 2786, 2791, 2721, 2795, 2799, 2803, 2807, 2811, 2815, 2819, 0}, {2778, 2782, 2786, 2791, 2721, 2795, 2799, 2803, 2807, 2811, 2815, 2819, 0}, 2, 1, 754, 241, {2587,2823,1245,2835,2843,2261,1210,0,0,0,0,0,0,0},{2568,1882,2850,0,0,0,0,0},{274,331,2285,2862,0,0,0,0,0,0,0,0},{280,2873,2887,2902,0,0,0,0,0}},
-       {2909, 2927, 2936, 2947, 1906, 352, 2955, 2962, {2969, 2984, 2999, 3010, 3025, 3038, 3057}, {3072, 3079, 3086, 3093, 3100, 3107, 3114}, {3121, 3124, 3127, 3127, 3130, 3130, 3133}, {3136, 3157, 3180, 3195, 3212, 3223, 3238, 3253, 3272, 3295, 3314, 3333, 0}, {3354, 3375, 3398, 3413, 3430, 3441, 3456, 3471, 3490, 3513, 3532, 3551, 0}, {3572, 3579, 3586, 3593, 3600, 3607, 3616, 3625, 3632, 3639, 3646, 3653, 0}, {3572, 3579, 3586, 3593, 3600, 3607, 3616, 3625, 3632, 3639, 3646, 3653, 0}, 2, 1, 239, 241, {2927,243,1229,14,3660,1210,0,0,0,0,0,0,0,0},{2909,3672,0,0,0,0,0,0},{2947,35,331,274,0,0,0,0,0,0,0,0},{2936,23,323,280,0,0,0,0,0}},
-       {3684, 3703, 2936, 2947, 1906, 3712, 1924, 1927, {3719, 3726, 3733, 3741, 3751, 3760, 3767}, {3776, 3780, 3784, 3788, 3792, 3796, 3800}, {2018, 2403, 2405, 3804, 2405, 2409, 2018}, {3806, 3814, 3823, 2715, 3829, 3833, 3838, 2735, 2742, 3843, 2760, 3851, 0}, {3806, 3814, 3823, 2715, 3829, 3833, 3838, 2735, 2742, 3843, 2760, 3851, 0}, {2778, 2782, 3860, 2791, 3829, 2795, 2799, 2803, 2807, 3864, 2815, 3868, 0}, {2778, 2782, 3860, 2791, 3829, 2795, 2799, 2803, 2807, 3864, 2815, 3868, 0}, 0, 0, 239, 241, {3703,3872,3879,3888,1779,1210,3899,0,0,0,0,0,0,0},{3909,3929,254,3943,0,0,0,0},{2947,35,331,274,0,0,0,0,0,0,0,0},{2936,23,323,280,0,0,0,0,0}},
-       {3957, 243, 323, 331, 947, 3985, 962, 968, {3997, 4005, 4011, 4018, 4029, 4036, 4044}, {4052, 4057, 4062, 4067, 4073, 4078, 4083}, {2692, 2411, 2403, 2403, 4089, 4091, 2018}, {4093, 4099, 4107, 4113, 4119, 4124, 4130, 4136, 4143, 4154, 4162, 4172, 0}, {4182, 4188, 4196, 1102, 4202, 4207, 4213, 4219, 4226, 1140, 4237, 4247, 0}, {4257, 4262, 4062, 4267, 4272, 4277, 4282, 4287, 4292, 4298, 4303, 4308, 0}, {4257, 4262, 4062, 4267, 4272, 4277, 4282, 4287, 4292, 4298, 4303, 4308, 0}, 0, 1, 239, 241, {243,14,1221,1229,1236,1245,1210,2823,0,0,0,0,0,0},{4313,4342,4369,0,0,0,0,0},{331,274,1312,0,0,0,0,0,0,0,0,0},{323,280,1324,0,0,0,0,0,0}},
-       {1882, 2261, 323, 331, 1906, 4391, 4401, 4405, {4409, 4421, 4433, 4443, 4457, 4467, 4479}, {4490, 4493, 4496, 4499, 4502, 4505, 4508}, {2018, 2403, 2405, 4511, 2405, 2013, 2411}, {4513, 4522, 4531, 4541, 4550, 4559, 4568, 4578, 4585, 4593, 4601, 4611, 0}, {4620, 4631, 4642, 4654, 4665, 4676, 4687, 4699, 4708, 4718, 4728, 4740, 0}, {4751, 4757, 4763, 4770, 4776, 4782, 4788, 4795, 4799, 4804, 4809, 4816, 0}, {4751, 4757, 4763, 4770, 4776, 4782, 4788, 4795, 4799, 4804, 4809, 4816, 0}, 2, 1, 754, 241, {2261,2587,2843,1210,0,0,0,0,0,0,0,0,0,0},{4822,4839,0,0,0,0,0,0},{331,274,0,0,0,0,0,0,0,0,0,0},{323,280,0,0,0,0,0,0,0}},
-       {4857, 243, 280, 274, 1906, 352, 1924, 1927, {4874, 4883, 4889, 4895, 4904, 4910, 4919}, {4926, 4931, 4936, 4941, 4946, 4951, 4956}, {2692, 2411, 2403, 2403, 4089, 4091, 2018}, {4961, 4969, 4978, 4983, 4989, 4993, 4998, 5006, 5012, 5022, 1148, 5030, 0}, {4961, 4969, 4978, 4983, 4989, 4993, 4998, 5006, 5012, 5022, 1148, 5030, 0}, {5040, 5046, 4978, 5053, 4989, 4993, 5058, 5006, 5064, 1195, 1200, 5070, 0}, {5040, 5046, 4978, 5053, 4989, 4993, 5058, 5006, 5064, 1195, 1200, 5070, 0}, 0, 1, 239, 241, {243,14,1245,1236,1210,0,0,0,0,0,0,0,0,0},{4857,5076,3672,0,0,0,0,0},{274,331,5085,5091,5101,0,0,0,0,0,0,0},{280,323,0,0,0,0,0,0,0}},
-       {5109, 243, 280, 274, 1906, 55, 5127, 5140, {5151, 5169, 5183, 5201, 5219, 5237, 5253}, {5267, 5279, 5291, 5303, 5315, 5327, 5339}, {5346, 5351, 5356, 5361, 5366, 5371, 5376}, {5381, 5392, 5405, 5412, 5423, 5430, 5439, 5448, 5461, 5474, 5489, 5502, 0}, {5381, 5392, 5405, 5412, 5423, 5430, 5439, 5448, 5461, 5474, 5489, 5502, 0}, {5513, 5522, 5405, 5531, 5423, 5540, 5549, 5558, 5567, 5576, 5585, 5594, 0}, {5513, 5522, 5405, 5531, 5423, 5540, 5549, 5558, 5567, 5576, 5585, 5594, 0}, 0, 0, 239, 241, {243,5603,14,1,1236,2309,5616,1210,5629,5646,0,0,0,0},{5109,5603,5656,5678,5629,0,0,0},{274,35,0,0,0,0,0,0,0,0,0,0},{280,23,0,0,0,0,0,0,0}},
-       {5699, 5713, 323, 331, 5725, 5736, 5744, 5748, {5752, 5762, 5770, 5775, 5782, 5795, 5803}, {4091, 5811, 4511, 5813, 5817, 2013, 5820}, {4091, 5811, 4511, 5824, 5817, 2013, 5824}, {5827, 5835, 5844, 5853, 5862, 5869, 5877, 5885, 5895, 5906, 2479, 2488, 0}, {5827, 5835, 5844, 5853, 5862, 5869, 5877, 5885, 5895, 5906, 2479, 2488, 0}, {5915, 5920, 5926, 5933, 5939, 5945, 5951, 5957, 5962, 5969, 1200, 5974, 0}, {5915, 5920, 5926, 5933, 5939, 5945, 5951, 5957, 5962, 5969, 1200, 5974, 0}, 2, 1, 754, 241, {5713,5979,1210,5993,0,0,0,0,0,0,0,0,0,0},{5699,0,0,0,0,0,0,0},{331,274,2947,0,0,0,0,0,0,0,0,0},{323,280,2936,0,0,0,0,0,0}},
-       {1882, 2261, 280, 274, 1906, 1916, 6002, 6007, {6012, 6023, 6034, 6048, 6062, 6074, 6086}, {6098, 6103, 6109, 6115, 6121, 6126, 6132}, {2018, 2403, 6137, 2403, 2409, 2409, 2411}, {6140, 6148, 4978, 6157, 6164, 6169, 6176, 6183, 2461, 5906, 6191, 6201, 0}, {6140, 6148, 4978, 6157, 6164, 6169, 6176, 6183, 2461, 5906, 6191, 6201, 0}, {5915, 1171, 4936, 6210, 6164, 5945, 5951, 6215, 6222, 5969, 6227, 1205, 0}, {5915, 1171, 4936, 6210, 6164, 5945, 5951, 6215, 6222, 5969, 6227, 1205, 0}, 2, 1, 754, 241, {2261,1245,6233,6245,1210,6259,0,0,0,0,0,0,0,0},{1882,2554,0,0,0,0,0,0},{274,331,0,0,0,0,0,0,0,0,0,0},{280,323,0,0,0,0,0,0,0}},
-       {4857, 243, 280, 274, 1906, 352, 1924, 1927, {6268, 6277, 6285, 6294, 6305, 6314, 6323}, {6330, 6334, 2505, 6338, 6342, 6346, 6350}, {2692, 2411, 2403, 2403, 6354, 4091, 2018}, {6356, 6364, 4107, 6373, 6380, 6387, 6394, 4136, 6401, 6411, 6419, 6428, 0}, {6437, 6445, 4196, 6454, 6461, 6468, 6475, 4219, 6482, 6492, 1148, 6500, 0}, {6509, 2501, 2505, 2509, 6513, 6517, 6521, 6525, 6529, 6533, 2533, 6537, 0}, {6509, 2501, 2505, 2509, 6513, 6517, 6521, 6525, 6529, 6533, 2533, 6537, 0}, 2, 1, 239, 241, {243,3660,14,6541,1229,1210,0,0,0,0,0,0,0,0},{4857,6549,3672,0,0,0,0,0},{274,331,2285,5085,0,0,0,0,0,0,0,0},{280,2301,6558,0,0,0,0,0,0}},
-       {1344, 1736, 323, 331, 1375, 1391, 6567, 6574, {6581, 6591, 6601, 6611, 6621, 6631, 6641}, {1537, 6651, 6655, 6659, 6663, 6667, 6671}, {1537, 6651, 6655, 6659, 6663, 6667, 6671}, {1655, 1660, 1665, 1670, 1675, 1680, 1685, 1690, 1695, 1700, 1706, 1712, 0}, {1655, 1660, 1665, 1670, 1675, 1680, 1685, 1690, 1695, 1700, 1706, 1712, 0}, {6675, 6677, 6679, 6681, 6683, 6685, 6687, 6689, 6691, 6693, 6696, 6699, 0}, {6675, 6677, 6679, 6681, 6683, 6685, 6687, 6689, 6691, 6693, 6696, 6699, 0}, 0, 0, 239, 241, {1736,1779,1765,1366,6702,6721,6738,1210,0,0,0,0,0,0},{1344,6759,6783,6810,0,0,0,0},{331,274,1842,1850,0,0,0,0,0,0,0,0},{323,280,1859,1870,0,0,0,0,0}},
-       {6839, 1210, 1859, 1842, 6868, 6885, 6899, 6906, {6913, 6923, 6933, 6943, 6953, 6963, 6973}, {6983, 6987, 6991, 6995, 6999, 7003, 7007}, {6983, 6987, 6991, 6995, 6999, 7003, 7007}, {7011, 7016, 7021, 7026, 7031, 7036, 7041, 7046, 7051, 7056, 7062, 7068, 0}, {7011, 7016, 7021, 7026, 7031, 7036, 7041, 7046, 7051, 7056, 7062, 7068, 0}, {7011, 7016, 7021, 7026, 7031, 7036, 7041, 7046, 7051, 7056, 7062, 7068, 0}, {7011, 7016, 7021, 7026, 7031, 7036, 7041, 7046, 7051, 7056, 7062, 7068, 0}, 0, 0, 2541, 241, {1210,5993,1758,1718,0,0,0,0,0,0,0,0,0,0},{6839,7074,7098,7125,7147,7178,0,0},{1842,1850,331,274,0,0,0,0,0,0,0,0},{1859,1870,323,280,0,0,0,0,0}},
-       {4857, 7204, 280, 274, 1906, 352, 7213, 7218, {7223, 7230, 7238, 7246, 7255, 7265, 7273}, {7282, 4493, 7285, 7288, 7291, 7294, 7297}, {7300, 2403, 2692, 3804, 2692, 4091, 7300}, {7302, 7310, 7319, 2434, 7325, 2444, 2449, 7329, 2461, 2471, 2479, 2488, 0}, {7302, 7310, 7319, 2434, 7325, 2444, 2449, 7329, 2461, 2471, 2479, 2488, 0}, {2497, 2501, 7338, 2509, 7325, 2513, 2517, 2521, 2525, 2529, 2533, 2537, 0}, {2497, 2501, 7338, 2509, 7325, 2513, 2517, 2521, 2525, 2529, 2533, 2537, 0}, 2, 1, 2541, 241, {7204,2270,1236,14,1245,2823,1210,0,0,0,0,0,0,0},{4857,6549,3672,5076,0,0,0,0},{331,274,2285,7342,7354,0,0,0,0,0,0,0},{323,280,7366,7381,0,0,0,0,0}},
-       {1882, 2587, 280, 274, 1906, 1916, 7213, 7218, {2320, 2328, 2335, 2343, 2350, 2358, 2365}, {7396, 7401, 7405, 7409, 7413, 7417, 7421}, {2018, 2403, 2405, 2407, 2405, 2409, 2411}, {2413, 2420, 4978, 2434, 4989, 2444, 2449, 2454, 2461, 2471, 2479, 6201, 0}, {2413, 2420, 4978, 2434, 4989, 2444, 2449, 2454, 2461, 2471, 2479, 6201, 0}, {2497, 2501, 2505, 2509, 4989, 2513, 2517, 2521, 2525, 2529, 2533, 7426, 0}, {2497, 2501, 2505, 2509, 4989, 2513, 2517, 2521, 2525, 2529, 2533, 7426, 0}, 0, 0, 754, 241, {2587,1245,2843,1210,2823,0,0,0,0,0,0,0,0,0},{1882,2554,0,0,0,0,0,0},{274,331,7430,5085,0,0,0,0,0,0,0,0},{280,323,7441,6558,0,0,0,0,0}},
-       {3672, 1210, 280, 274, 1906, 352, 1924, 1927, {7455, 7465, 7479, 7486, 7493, 7502, 1980}, {7510, 7517, 7522, 7526, 7531, 7536, 7540}, {2011, 2013, 3804, 7545, 7548, 2013, 2018}, {7550, 7559, 7564, 7571, 2440, 7581, 7590, 7597, 7607, 7617, 2097, 7630, 0}, {7640, 7649, 7656, 7662, 7671, 7676, 7684, 7690, 7699, 7709, 7723, 7733, 0}, {7741, 7745, 2505, 7749, 2440, 7753, 7757, 7761, 7765, 7769, 2250, 7774, 0}, {7741, 7745, 2505, 7749, 2440, 7753, 7757, 7761, 7765, 7769, 2250, 7774, 0}, 2, 1, 2541, 241, {1210,5993,0,0,0,0,0,0,0,0,0,0,0,0},{3672,5603,0,0,0,0,0,0},{274,331,0,0,0,0,0,0,0,0,0,0},{280,323,0,0,0,0,0,0,0}},
-       {3957, 243, 280, 274, 947, 3985, 1924, 1927, {3997, 7778, 7792, 7805, 7818, 7831, 4044}, {6330, 7843, 7847, 7851, 7855, 7859, 7863}, {2692, 2018, 2405, 7868, 7868, 2018, 2018}, {7870, 7878, 7888, 1102, 7895, 7900, 7906, 4219, 7912, 7921, 7929, 7938, 0}, {7870, 7878, 7888, 1102, 7895, 7900, 7906, 4219, 7912, 7921, 7929, 7938, 0}, {2497, 7947, 2505, 7951, 4989, 2513, 2517, 6525, 6529, 7955, 2533, 7959, 0}, {2497, 7947, 2505, 7951, 4989, 2513, 2517, 6525, 6529, 7955, 2533, 7959, 0}, 0, 0, 239, 241, {243,14,2927,1229,1236,2309,2270,7204,1245,2587,2823,2843,2261,1210},{3957,4369,0,0,0,0,0,0},{274,0,0,0,0,0,0,0,0,0,0,0},{280,0,0,0,0,0,0,0,0}},
-       {7963, 2309, 280, 274, 1906, 352, 7992, 7995, {7998, 8007, 4889, 8017, 8025, 8033, 8042}, {8048, 8051, 4493, 8055, 8058, 8062, 2008}, {2692, 6354, 2403, 2403, 6354, 4091, 2018}, {8065, 8073, 4978, 8080, 8087, 8092, 8102, 8110, 8116, 8126, 2479, 2488, 0}, {8065, 8073, 4978, 8080, 8087, 8092, 8102, 8110, 8116, 8126, 2479, 2488, 0}, {8134, 8141, 4978, 5053, 8087, 8147, 8154, 8110, 8159, 1195, 1200, 5974, 0}, {8134, 8141, 4978, 5053, 8087, 8147, 8154, 8110, 8159, 1195, 1200, 5974, 0}, 2, 1, 2541, 241, {243,14,1221,8165,1229,243,1210,0,0,0,0,0,0,0},{2909,3672,5076,0,0,0,0,0},{274,331,8173,8185,8196,8204,8214,8223,2862,8229,8237,8242},{280,323,8245,8260,2887,2873,8274,8287,2902}},
-       {3672, 2587, 323, 331, 1906, 352, 7213, 7218, {8299, 8309, 8314, 8321, 8330, 8334, 8341}, {8352, 8356, 3860, 8360, 8364, 8368, 8372}, {2692, 2411, 2403, 2403, 4089, 4091, 2018}, {8377, 8386, 8396, 8403, 4989, 8411, 8417, 2454, 8423, 8434, 8444, 8454, 0}, {8377, 8386, 8396, 8403, 4989, 8411, 8417, 2454, 8423, 8434, 8444, 8454, 0}, {8464, 1171, 4936, 6210, 4989, 8469, 8474, 5957, 5064, 1195, 1200, 5974, 0}, {8464, 1171, 4936, 6210, 4989, 8469, 8474, 5957, 5064, 1195, 1200, 5974, 0}, 0, 1, 754, 241, {2587,2261,1210,0,0,0,0,0,0,0,0,0,0,0},{3672,0,0,0,0,0,0,0},{274,331,0,0,0,0,0,0,0,0,0,0},{280,323,0,0,0,0,0,0,0}},
-       {805, 2587, 323, 331, 1906, 352, 8479, 8499, {8525, 8548, 415, 8571, 8582, 8597, 8612}, {8627, 8632, 8637, 8642, 8647, 8652, 8657}, {8662, 8665, 8662, 8668, 8671, 8665, 8668}, {8674, 8687, 8702, 8711, 8724, 8731, 8740, 8749, 8762, 8779, 8794, 8807, 0}, {8822, 8835, 8850, 8861, 8874, 8881, 8890, 8899, 8914, 8931, 8946, 8959, 0}, {8974, 8982, 8702, 8992, 8724, 8731, 8740, 9000, 9008, 9018, 9026, 9036, 0}, {8974, 8982, 8702, 8992, 8724, 8731, 8740, 9000, 9008, 9018, 9026, 9036, 0}, 0, 1, 754, 241, {2587,1245,2843,14,1210,0,0,0,0,0,0,0,0,0},{805,289,0,0,0,0,0,0},{331,274,0,0,0,0,0,0,0,0,0,0},{323,280,0,0,0,0,0,0,0}},
-       {9044, 9058, 323, 331, 44, 1916, 1924, 1927, {9068, 9077, 9089, 9096, 9104, 9114, 9120}, {9127, 9131, 9135, 9139, 9143, 9148, 9152}, {9156, 9158, 9160, 9162, 9164, 9158, 9162}, {9167, 9177, 9186, 9194, 9202, 9210, 9217, 9224, 9232, 2097, 9238, 9246, 0}, {9255, 9265, 9274, 9282, 9290, 9298, 9305, 9312, 9321, 7723, 9327, 9337, 0}, {9346, 9350, 9355, 9360, 9364, 7757, 2234, 9368, 9372, 2250, 9376, 2254, 0}, {9346, 9350, 9355, 9360, 9364, 7757, 2234, 9368, 9372, 2250, 9376, 2254, 0}, 0, 1, 754, 241, {9058,9380,6233,9388,9400,9410,9420,1210,0,0,0,0,0,0},{9044,9432,9447,0,0,0,0,0},{331,274,0,0,0,0,0,0,0,0,0,0},{323,280,0,0,0,0,0,0,0}},
-       {1882, 2261, 323, 331, 1906, 1916, 1924, 1927, {9467, 9475, 9484, 9491, 9498, 9507, 1980}, {1987, 1990, 9514, 1997, 9517, 9521, 2008}, {2011, 2013, 9524, 2018, 9526, 2013, 2018}, {5827, 5835, 9529, 6157, 9535, 9540, 9545, 2454, 2461, 5906, 2479, 2488, 0}, {9550, 9559, 7656, 9569, 9577, 9583, 9589, 9595, 9603, 9613, 9622, 9631, 0}, {2497, 2501, 2505, 2509, 9535, 9540, 9545, 2521, 2525, 2529, 2533, 2537, 0}, {2497, 2501, 2505, 2509, 9535, 9540, 9545, 2521, 2525, 2529, 2533, 2537, 0}, 2, 1, 754, 241, {1895,2261,9640,2843,2587,1245,1210,0,0,0,0,0,0,0},{1882,2554,0,0,0,0,0,0},{331,274,2285,0,0,0,0,0,0,0,0,0},{323,280,2301,0,0,0,0,0,0}},
-       {2909, 2261, 280, 274, 1906, 352, 9649, 9658, {9666, 9673, 9682, 9691, 9703, 9711, 9720}, {9730, 9734, 3860, 9739, 9744, 9748, 9752}, {2692, 5811, 2403, 2403, 9756, 2013, 2018}, {9758, 9764, 4978, 9771, 2440, 9777, 9785, 9792, 9798, 9806, 9812, 9820, 0}, {9758, 9764, 4978, 9771, 2440, 9777, 9785, 9792, 9798, 9806, 9812, 9820, 0}, {2778, 9828, 3860, 9832, 9836, 9840, 9844, 9848, 9752, 9852, 9856, 9861, 0}, {2778, 9828, 3860, 9832, 9836, 9840, 9844, 9848, 9752, 9852, 9856, 9861, 0}, 0, 1, 754, 241, {1210,5993,0,0,0,0,0,0,0,0,0,0,0,0},{1210,0,0,0,0,0,0,0},{9865,274,0,0,0,0,0,0,0,0,0,0},{9873,280,0,0,0,0,0,0,0}},
-       {9884, 1210, 280, 274, 1906, 9902, 9915, 9918, {9921, 9929, 9937, 2343, 2350, 2358, 9944}, {9952, 9957, 9962, 9966, 9970, 9974, 9978}, {2018, 2403, 2405, 2407, 2405, 2409, 2411}, {9983, 9991, 10000, 2715, 9836, 2725, 2730, 10005, 2742, 2752, 2760, 3851, 0}, {7302, 7310, 4978, 2434, 2440, 2444, 2449, 10013, 2461, 2471, 2479, 2488, 0}, {2778, 2782, 3860, 2791, 9836, 2795, 2799, 2803, 2807, 2811, 2815, 3868, 0}, {2778, 2782, 3860, 2791, 9836, 2795, 2799, 2803, 2807, 2811, 2815, 3868, 0}, 2, 1, 2541, 241, {1210,5993,0,0,0,0,0,0,0,0,0,0,0,0},{9884,10021,0,0,0,0,0,0},{274,331,10044,0,0,0,0,0,0,0,0,0},{280,323,10054,0,0,0,0,0,0}},
-       {3672, 2927, 323, 331, 1906, 352, 0, 0, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {6675, 6677, 6679, 6681, 6683, 6685, 6687, 6689, 6691, 6693, 6696, 6699, 0}, {6675, 6677, 6679, 6681, 6683, 6685, 6687, 6689, 6691, 6693, 6696, 6699, 0}, 0, 0, 239, 241, {2927,1229,14,243,10067,10078,1210,0,0,0,0,0,0,0},{3672,10090,10106,0,0,0,0,0},{331,274,2947,35,0,0,0,0,0,0,0,0},{323,280,2936,23,0,0,0,0,0}},
-       {10148, 2261, 280, 274, 1906, 352, 10165, 10170, {10174, 10180, 10190, 10196, 10207, 10217, 10222}, {10232, 10236, 10240, 10244, 10249, 10253, 10257}, {2013, 2013, 2018, 10261, 2013, 7548, 7548}, {10264, 10269, 10276, 10281, 10287, 10294, 10302, 10309, 10318, 10325, 10330, 10337, 0}, {10264, 10269, 10276, 10281, 10287, 10294, 10302, 10309, 10318, 10325, 10330, 10337, 0}, {10345, 10349, 3860, 10354, 3829, 10358, 10362, 10366, 10371, 10375, 10379, 10383, 0}, {10345, 10349, 3860, 10354, 3829, 10358, 10362, 10366, 10371, 10375, 10379, 10383, 0}, 0, 1, 754, 241, {2587,1245,1210,0,0,0,0,0,0,0,0,0,0,0},{10387,5603,0,0,0,0,0,0},{274,0,0,0,0,0,0,0,0,0,0,0},{280,0,0,0,0,0,0,0,0}},
-       {3943, 243, 2936, 2947, 44, 55, 10405, 10423, {10441, 10452, 10465, 10474, 10481, 10494, 10503}, {10441, 10452, 10465, 10474, 10481, 10494, 10503}, {2018, 2403, 2405, 3804, 2405, 2409, 2018}, {10512, 10523, 10534, 10543, 10554, 10561, 10568, 10581, 10590, 10601, 10614, 10625, 0}, {10512, 10523, 10534, 10543, 10554, 10561, 10568, 10581, 10590, 10601, 10614, 10625, 0}, {10512, 10523, 10534, 10543, 10554, 10561, 10568, 10581, 10590, 10601, 10614, 10625, 0}, {10512, 10523, 10534, 10543, 10554, 10561, 10568, 10581, 10590, 10601, 10614, 10625, 0}, 0, 0, 239, 241, {243,14,1210,0,0,0,0,0,0,0,0,0,0,0},{3943,254,0,0,0,0,0,0},{2947,35,331,274,0,0,0,0,0,0,0,0},{2936,23,323,280,0,0,0,0,0}},
-       {5603, 243, 323, 331, 1906, 55, 1924, 1927, {10636, 10643, 10649, 10656, 10661, 10667, 10673}, {10679, 10683, 10687, 10691, 10695, 10699, 10703}, {2403, 2018, 2018, 10707, 4511, 4089, 2018}, {9983, 9991, 10709, 2715, 10715, 2725, 2730, 10719, 2742, 2752, 2760, 10727, 0}, {9983, 9991, 10709, 2715, 10715, 2725, 2730, 10719, 2742, 2752, 2760, 10727, 0}, {2778, 2782, 3860, 2791, 10715, 2795, 2799, 10736, 2807, 2811, 2815, 10740, 0}, {2778, 2782, 3860, 2791, 10715, 2795, 2799, 10736, 2807, 2811, 2815, 10740, 0}, 0, 0, 239, 241, {243,14,1210,0,0,0,0,0,0,0,0,0,0,0},{5603,0,0,0,0,0,0,0},{331,274,0,0,0,0,0,0,0,0,0,0},{323,280,0,0,0,0,0,0,0}},
-       {10744, 2587, 323, 331, 10762, 352, 10778, 10783, {10788, 10801, 10820, 10837, 10850, 10863, 10880}, {10893, 8632, 8637, 8642, 8647, 8652, 8657}, {10898, 8665, 8662, 8668, 8671, 8665, 8668}, {10901, 10914, 10925, 10942, 10957, 10972, 10987, 11000, 11015, 11032, 11047, 11064, 0}, {11079, 11090, 11103, 11118, 11131, 11144, 11157, 11168, 11181, 11196, 11209, 11228, 0}, {11241, 11248, 11255, 11262, 11269, 11276, 11283, 11290, 11297, 11304, 11311, 11318, 0}, {11241, 11248, 11255, 11262, 11269, 11276, 11283, 11290, 11297, 11304, 11311, 11318, 0}, 0, 1, 754, 241, {2587,1245,1210,0,0,0,0,0,0,0,0,0,0,0},{10744,0,0,0,0,0,0,0},{331,274,0,0,0,0,0,0,0,0,0,0},{323,280,0,0,0,0,0,0,0}},
-       {3672, 1245, 280, 274, 1906, 352, 11325, 11338, {11351, 11366, 11387, 11402, 11415, 11428, 10880}, {484, 489, 11443, 499, 11448, 509, 514}, {519, 522, 11453, 528, 531, 522, 528}, {11456, 11473, 11482, 11497, 584, 11514, 11529, 11542, 11557, 11574, 11595, 11612, 0}, {11627, 11644, 11657, 11674, 8874, 11693, 11708, 11721, 11734, 11749, 11772, 11791, 0}, {11804, 11811, 11818, 11825, 584, 11832, 11839, 11846, 11853, 11860, 11867, 11874, 0}, {11804, 11811, 11818, 11825, 584, 11832, 11839, 11846, 11853, 11860, 11867, 11874, 0}, 0, 0, 754, 241, {2587,1245,1210,0,0,0,0,0,0,0,0,0,0,0},{3672,0,0,0,0,0,0,0},{331,274,0,0,0,0,0,0,0,0,0,0},{323,280,0,0,0,0,0,0,0}},
-       {1882, 2261, 323, 331, 1906, 1916, 11881, 11886, {11891, 11899, 11910, 11916, 11922, 11931, 1980}, {9127, 9131, 2390, 11937, 9143, 9148, 11941}, {9156, 9158, 11945, 9162, 9164, 9158, 9162}, {2413, 2420, 9529, 2434, 2440, 11947, 11953, 11959, 2461, 2471, 2479, 2488, 0}, {2413, 2420, 9529, 2434, 2440, 11947, 11953, 11959, 2461, 2471, 2479, 2488, 0}, {2497, 2501, 2505, 2509, 2440, 2513, 2517, 11966, 2525, 2529, 2533, 2537, 0}, {2497, 2501, 2505, 2509, 2440, 2513, 2517, 11966, 2525, 2529, 2533, 2537, 0}, 0, 1, 754, 241, {2261,2843,1895,2587,9640,1245,11970,1210,0,0,0,0,0,0},{1882,2554,2568,0,0,0,0,0},{331,274,0,0,0,0,0,0,0,0,0,0},{323,280,0,0,0,0,0,0,0}},
-       {1882, 11981, 323, 331, 1906, 11991, 12000, 12005, {12010, 12021, 12032, 12043, 12054, 12065, 12071}, {2013, 9756, 2405, 4511, 2011, 10707, 2411}, {2013, 9756, 2405, 4511, 2011, 10707, 2411}, {12080, 12088, 12097, 12104, 4989, 12111, 12117, 2454, 2461, 12123, 2479, 12132, 0}, {12080, 12088, 12097, 12104, 4989, 12111, 12117, 2454, 2461, 12123, 2479, 12132, 0}, {12142, 12147, 12097, 2509, 4989, 12111, 12117, 2521, 12153, 2529, 2533, 12158, 0}, {12142, 12147, 12097, 2509, 4989, 12111, 12117, 2521, 12153, 2529, 2533, 12158, 0}, 2, 1, 754, 241, {11981,2587,1245,1210,0,0,0,0,0,0,0,0,0,0},{12163,12182,2568,0,0,0,0,0},{331,274,0,0,0,0,0,0,0,0,0,0},{323,280,0,0,0,0,0,0,0}},
-       {12202, 9388, 323, 331, 12229, 1916, 12247, 12264, {12278, 12289, 12299, 12308, 12319, 12331, 12342}, {12352, 12355, 12358, 12361, 12364, 12367, 12370}, {2018, 2013, 2407, 2405, 7548, 2013, 2018}, {12373, 12383, 12394, 12400, 12409, 12415, 12423, 12431, 12439, 12450, 12459, 12469, 0}, {12479, 12489, 2428, 12500, 12509, 12515, 12523, 12531, 12539, 12550, 12559, 12569, 0}, {12579, 12585, 12394, 12591, 12409, 12596, 12602, 12608, 4292, 12613, 4303, 12618, 0}, {12579, 12585, 12394, 12591, 12409, 12596, 12602, 12608, 4292, 12613, 4303, 12618, 0}, 0, 1, 754, 241, {5713,12623,1210,0,0,0,0,0,0,0,0,0,0,0},{12202,0,0,0,0,0,0,0},{331,274,0,0,0,0,0,0,0,0,0,0},{323,280,0,0,0,0,0,0,0}},
-       {12633, 1210, 280, 274, 12655, 12670, 12682, 11886, {12688, 12700, 12712, 12724, 12738, 12753, 12766}, {12780, 12783, 12786, 12789, 12792, 12795, 9517}, {2018, 2013, 12798, 2405, 4511, 2013, 9526}, {12800, 12807, 12815, 12821, 12830, 12839, 12849, 12855, 12866, 12876, 12883, 12893, 0}, {12800, 12807, 12815, 12821, 12830, 12839, 12849, 12855, 12866, 12876, 12883, 12893, 0}, {12901, 12907, 12912, 12917, 12922, 12927, 12934, 12940, 12946, 12952, 12958, 12965, 0}, {12901, 12907, 12912, 12917, 12922, 12927, 12934, 12940, 12946, 12952, 12958, 12965, 0}, 2, 1, 2541, 241, {1747,1210,0,0,0,0,0,0,0,0,0,0,0,0},{12633,0,0,0,0,0,0,0},{274,0,0,0,0,0,0,0,0,0,0,0},{280,0,0,0,0,0,0,0,0}},
-       {12972, 2587, 280, 274, 1906, 55, 12990, 13002, {13014, 13029, 13044, 13059, 13076, 13095, 13106}, {13117, 13124, 13131, 13138, 13145, 13152, 13159}, {0, 0, 0, 0, 0, 0, 0}, {13166, 13177, 8702, 13190, 8724, 13201, 13208, 8749, 13215, 13230, 13243, 13254, 0}, {13166, 13177, 8702, 13190, 8724, 13201, 13208, 8749, 13215, 13230, 13243, 13254, 0}, {13267, 13274, 13281, 13288, 8724, 13201, 13208, 13295, 13302, 13309, 13316, 13323, 0}, {13267, 13274, 13281, 13288, 8724, 13201, 13208, 13295, 13302, 13309, 13316, 13323, 0}, 0, 0, 754, 241, {1245,1210,0,0,0,0,0,0,0,0,0,0,0,0},{3672,0,0,0,0,0,0,0},{331,274,0,0,0,0,0,0,0,0,0,0},{323,0,0,0,0,0,0,0,0}},
-       {13330, 243, 23, 35, 44, 352, 13349, 13369, {13386, 13399, 13412, 13428, 13445, 13460, 13469}, {13386, 13399, 13412, 13428, 13445, 13460, 13469}, {13478, 13481, 13484, 13487, 13490, 13493, 13496}, {13499, 13512, 13523, 13532, 13543, 13548, 13557, 13568, 13575, 13590, 13601, 13614, 0}, {13627, 13642, 13523, 13532, 13655, 13548, 13662, 13568, 13575, 13590, 13601, 13614, 0}, {13499, 13512, 13523, 13532, 13543, 13548, 13557, 13568, 13575, 13590, 13601, 13614, 0}, {13499, 13512, 13523, 13532, 13543, 13548, 13557, 13568, 13575, 13590, 13601, 13614, 0}, 0, 6, 239, 241, {3888,3879,0,0,0,0,0,0,0,0,0,0,0,0},{3909,3929,0,0,0,0,0,0},{35,274,0,0,0,0,0,0,0,0,0,0},{23,280,0,0,0,0,0,0,0}},
-       {5603, 243, 2936, 2947, 1906, 55, 13675, 13678, {13681, 13694, 13704, 13713, 13723, 13734, 13745}, {13757, 13760, 13765, 13770, 13775, 13780, 13785}, {13757, 13790, 13793, 13796, 13799, 13802, 13805}, {13808, 13817, 13826, 13835, 13844, 13853, 13862, 13871, 13880, 13889, 13899, 13909, 0}, {13919, 13928, 13937, 13946, 13955, 13964, 13973, 13982, 13991, 14000, 14010, 14020, 0}, {14030, 14036, 14042, 14048, 14054, 14060, 14066, 14072, 14078, 14084, 14091, 14098, 0}, {14030, 14036, 14042, 14048, 14054, 14060, 14066, 14072, 14078, 14084, 14091, 14098, 0}, 0, 1, 239, 241, {243,14,1236,2309,1210,0,0,0,0,0,0,0,0,0},{5603,0,0,0,0,0,0,0},{2947,35,331,274,0,0,0,0,0,0,0,0},{2936,23,323,280,0,0,0,0,0}},
-       {14105, 2587, 280, 274, 44, 352, 14118, 14142, {14166, 14179, 14200, 14219, 14240, 14259, 14272}, {14283, 14290, 14297, 14304, 14311, 14318, 14325}, {14332, 14335, 14335, 14338, 14341, 14344, 14349}, {14352, 14367, 14382, 14391, 14402, 14413, 14426, 14439, 14454, 14473, 14492, 14509, 0}, {14528, 14545, 14562, 14573, 14586, 14599, 14614, 14629, 14646, 14667, 14688, 14707, 0}, {14728, 14735, 14742, 14749, 14756, 14763, 14770, 14777, 14784, 14791, 14798, 14805, 0}, {14728, 14735, 14742, 14749, 14756, 14763, 14770, 14777, 14784, 14791, 14798, 14805, 0}, 0, 1, 754, 241, {2587,1245,14812,243,14822,3660,1210,0,0,0,0,0,0,0},{14105,2909,13330,5603,14833,14844,14856,14873},{331,274,0,0,0,0,0,0,0,0,0,0},{323,280,0,0,0,0,0,0,0}},
-       {14891, 2587, 280, 274, 1906, 352, 1924, 1927, {14913, 14919, 14933, 14956, 14970, 14986, 14993}, {15002, 15005, 15010, 15016, 15020, 7548, 15025}, {6687, 6675, 6677, 6679, 6681, 6683, 6685}, {15029, 15036, 10276, 15043, 3829, 15049, 15055, 15061, 15068, 15077, 15085, 15092, 0}, {15099, 15106, 15113, 15118, 15124, 15128, 15133, 15138, 15145, 15154, 15162, 15169, 0}, {15176, 7947, 2505, 2509, 15124, 15180, 15184, 15188, 15192, 2529, 15196, 15200, 0}, {15176, 7947, 2505, 2509, 15124, 15180, 15184, 15188, 15192, 2529, 15196, 15200, 0}, 0, 0, 754, 241, {2587,1245,2843,14,1210,0,0,0,0,0,0,0,0,0},{3672,5603,0,0,0,0,0,0},{331,274,0,0,0,0,0,0,0,0,0,0},{323,280,0,0,0,0,0,0,0}},
-       {15204, 1736, 323, 331, 15237, 15254, 1924, 1927, {15269, 15277, 15288, 15298, 15309, 15318, 15327}, {15337, 15341, 15345, 15349, 15353, 15357, 15361}, {15365, 12798, 12798, 12798, 2407, 2407, 2411}, {15367, 15377, 15385, 15393, 15401, 15409, 15416, 15424, 15432, 15439, 15445, 15452, 0}, {15460, 15471, 15480, 15489, 15498, 15507, 15515, 15524, 15533, 15541, 15548, 15556, 0}, {15565, 15570, 4936, 15575, 15580, 15585, 15590, 15595, 15600, 15605, 15610, 15615, 0}, {15565, 15570, 4936, 15575, 15580, 15585, 15590, 15595, 15600, 15605, 15610, 15615, 0}, 2, 1, 239, 241, {1736,1210,0,0,0,0,0,0,0,0,0,0,0,0},{15620,0,0,0,0,0,0,0},{274,0,0,0,0,0,0,0,0,0,0,0},{323,280,1324,0,0,0,0,0,0}},
-       {13330, 2587, 280, 274, 1906, 352, 15647, 15668, {15685, 394, 415, 8571, 15698, 15715, 15726}, {15739, 15747, 15755, 15761, 15769, 15777, 15785}, {519, 522, 525, 528, 531, 522, 528}, {15793, 547, 564, 573, 15808, 15815, 15824, 605, 618, 637, 654, 669, 0}, {15793, 547, 564, 573, 15808, 15815, 15824, 605, 618, 637, 654, 669, 0}, {15833, 15841, 15849, 702, 15808, 15857, 15865, 710, 718, 728, 736, 746, 0}, {15833, 15841, 15849, 702, 15808, 15857, 15865, 710, 718, 728, 736, 746, 0}, 0, 1, 754, 241, {2587,1245,1210,0,0,0,0,0,0,0,0,0,0,0},{13330,0,0,0,0,0,0,0},{274,0,0,0,0,0,0,0,0,0,0,0},{280,0,0,0,0,0,0,0,0}},
-       {5603, 14, 23, 35, 1906, 352, 0, 0, {15873, 15880, 15891, 15900, 15909, 15916, 15927}, {15937, 15941, 15945, 15949, 15953, 15956, 15960}, {0, 0, 0, 0, 0, 0, 0}, {15964, 15974, 15983, 15991, 16000, 16013, 16025, 16032, 16039, 16046, 16056, 16068, 0}, {15964, 15974, 15983, 15991, 16000, 16013, 16025, 16032, 16039, 16046, 16056, 16068, 0}, {16081, 16085, 16089, 16093, 16097, 16101, 16105, 16109, 16113, 16117, 16121, 16125, 0}, {16081, 16085, 16089, 16093, 16097, 16101, 16105, 16109, 16113, 16117, 16121, 16125, 0}, 0, 0, 239, 241, {1736,1779,1210,0,0,0,0,0,0,0,0,0,0,0},{5603,0,0,0,0,0,0,0},{35,2947,274,0,0,0,0,0,0,0,0,0},{23,2936,280,0,0,0,0,0,0}},
-       {5603, 1736, 23, 35, 1906, 352, 0, 0, {16129, 16134, 16140, 16150, 16162, 16170, 16181}, {16190, 16194, 16198, 16202, 16206, 16210, 16214}, {0, 0, 0, 0, 0, 0, 0}, {16218, 16228, 16238, 16245, 16252, 2725, 16257, 16264, 16271, 16280, 16288, 16296, 0}, {16218, 16228, 16238, 16245, 16252, 2725, 16257, 16264, 16271, 16280, 16288, 16296, 0}, {2778, 2782, 15960, 16304, 16308, 2795, 2799, 16312, 2807, 2811, 2815, 16316, 0}, {2778, 2782, 15960, 16304, 16308, 2795, 2799, 16312, 2807, 2811, 2815, 16316, 0}, 0, 0, 239, 241, {1736,1779,1210,0,0,0,0,0,0,0,0,0,0,0},{5603,0,0,0,0,0,0,0},{35,2947,274,0,0,0,0,0,0,0,0,0},{23,2936,280,0,0,0,0,0,0}},
-       {5603, 2309, 23, 35, 1906, 352, 1924, 1927, {16320, 16326, 16337, 16150, 16162, 16170, 16181}, {16347, 16351, 16355, 16202, 16206, 16210, 16214}, {2018, 2403, 16359, 2405, 2018, 5811, 2403}, {16361, 16371, 16382, 16389, 16398, 16404, 16410, 16418, 16426, 16437, 16447, 16456, 0}, {16465, 16228, 16474, 16480, 16252, 2725, 16257, 16264, 16487, 16280, 16288, 16296, 0}, {2778, 2782, 16497, 2791, 16308, 2795, 2799, 16312, 2807, 2811, 2815, 16316, 0}, {2778, 2782, 16497, 2791, 16308, 2795, 2799, 16312, 2807, 2811, 2815, 16316, 0}, 0, 0, 2541, 241, {1736,1779,1210,0,0,0,0,0,0,0,0,0,0,0},{5603,0,0,0,0,0,0,0},{35,2947,274,0,0,0,0,0,0,0,0,0},{23,2936,280,0,0,0,0,0,0}},
-       {5603, 1736, 23, 35, 1906, 352, 16501, 16505, {16509, 16516, 16524, 16532, 16541, 16551, 16558}, {2671, 16567, 2677, 16570, 2683, 16573, 2689}, {2018, 2403, 2692, 3804, 2692, 4091, 2018}, {16576, 16585, 16595, 2715, 10715, 16601, 16607, 16613, 2742, 2752, 2760, 10727, 0}, {16576, 16585, 16595, 2715, 10715, 16601, 16607, 16613, 2742, 2752, 2760, 10727, 0}, {2778, 2782, 3860, 2791, 10715, 2795, 2799, 2803, 2807, 2811, 2815, 10740, 0}, {2778, 2782, 3860, 2791, 10715, 2795, 2799, 2803, 2807, 2811, 2815, 10740, 0}, 0, 0, 239, 241, {1736,1779,1210,16622,0,0,0,0,0,0,0,0,0,0},{5603,0,0,0,0,0,0,0},{35,2947,274,0,0,0,0,0,0,0,0,0},{23,2936,280,0,0,0,0,0,0}},
-       {16634, 2587, 323, 331, 1906, 352, 1924, 1927, {16668, 16684, 16709, 16737, 16765, 16793, 16821}, {16840, 16850, 16860, 16870, 16880, 16890, 16900}, {16910, 16914, 16918, 16914, 16922, 16926, 16930}, {16934, 16956, 16984, 17000, 17019, 17035, 17054, 17073, 17095, 17126, 17154, 17179, 0}, {16934, 16956, 16984, 17000, 17019, 17035, 17054, 17073, 17095, 17126, 17154, 17179, 0}, {17207, 17217, 17227, 17237, 17247, 17257, 17267, 17277, 17287, 17297, 17307, 17317, 0}, {17207, 17217, 17227, 17237, 17247, 17257, 17267, 17277, 17287, 17297, 17307, 17317, 0}, 0, 1, 754, 241, {2587,1245,2843,14,1210,0,0,0,0,0,0,0,0,0},{17327,0,0,0,0,0,0,0},{331,274,0,0,0,0,0,0,0,0,0,0},{323,280,0,0,0,0,0,0,0}},
-       {1882, 2309, 280, 274, 1906, 352, 17359, 17364, {6012, 17369, 17380, 17390, 17400, 17410, 17424}, {17436, 17440, 17445, 17450, 17454, 17459, 17464}, {2018, 2403, 2405, 2403, 5811, 2409, 2411}, {2413, 2420, 4978, 6157, 4989, 2444, 2449, 2454, 2461, 2471, 2479, 6201, 0}, {2413, 2420, 4978, 6157, 4989, 2444, 2449, 2454, 2461, 2471, 2479, 6201, 0}, {2497, 2501, 2505, 2509, 4989, 2513, 2517, 2521, 2525, 2529, 2533, 7426, 0}, {2497, 2501, 2505, 2509, 4989, 2513, 2517, 2521, 2525, 2529, 2533, 7426, 0}, 2, 1, 2541, 241, {2309,1236,1210,0,0,0,0,0,0,0,0,0,0,0},{1882,0,0,0,0,0,0,0},{274,5085,0,0,0,0,0,0,0,0,0,0},{280,6558,0,0,0,0,0,0,0}},
-       {5603, 2309, 280, 274, 44, 55, 17468, 17484, {17494, 17513, 17532, 17554, 17573, 17595, 17620}, {17639, 17649, 17659, 17672, 17682, 17695, 17711}, {17721, 17725, 17732, 17739, 17746, 17753, 17760}, {17764, 17780, 17799, 17815, 17834, 17841, 17851, 17867, 17883, 17902, 17924, 17940, 0}, {17764, 17780, 17799, 17815, 17834, 17841, 17851, 17867, 17883, 17902, 17924, 17940, 0}, {17959, 17966, 17799, 17976, 17834, 17841, 17992, 18005, 18012, 18025, 18041, 18051, 0}, {17959, 17966, 17799, 17976, 17834, 17841, 17992, 18005, 18012, 18025, 18041, 18051, 0}, 0, 0, 2541, 241, {2309,1236,2270,2843,1210,0,0,0,0,0,0,0,0,0},{5603,3672,0,0,0,0,0,0},{274,331,1850,1842,0,0,0,0,0,0,0,0},{280,323,1870,1859,0,0,0,0,0}},
-       {18064, 243, 280, 274, 1906, 18089, 18103, 18106, {18109, 18118, 18127, 18137, 18147, 18157, 18169}, {18177, 18182, 18186, 18190, 18194, 18199, 18204}, {18208, 2405, 2405, 9756, 18208, 18211, 2018}, {18214, 18221, 18226, 2715, 18232, 18238, 18245, 18251, 18259, 18269, 18277, 18286, 0}, {18214, 18221, 18226, 2715, 18232, 18238, 18245, 18251, 18259, 18269, 18277, 18286, 0}, {2778, 18296, 3860, 2791, 18300, 18304, 18309, 18313, 18317, 18321, 2815, 18325, 0}, {2778, 18296, 3860, 2791, 18300, 18304, 18309, 18313, 18317, 18321, 2815, 18325, 0}, 0, 0, 239, 241, {243,1210,18330,7204,2927,0,0,0,0,0,0,0,0,0},{18064,18339,10078,0,0,0,0,0},{274,2947,331,35,0,0,0,0,0,0,0,0},{280,2936,323,23,0,0,0,0,0}},
-       {18358, 2587, 280, 274, 1906, 18382, 18395, 18400, {18405, 18417, 18428, 18442, 18454, 18464, 18474}, {18485, 18490, 18495, 18500, 18505, 18510, 18515}, {2018, 4091, 2403, 6354, 2692, 16359, 2411}, {18520, 18537, 18550, 18564, 18577, 18590, 18603, 18617, 18629, 18643, 18657, 18671, 0}, {18520, 18537, 18550, 18564, 18577, 18590, 18603, 18617, 18629, 18643, 18657, 18671, 0}, {18684, 18691, 18696, 18701, 18705, 18710, 18715, 18720, 18725, 18732, 18737, 18743, 0}, {18684, 18691, 18696, 18701, 18705, 18710, 18715, 18720, 18725, 18732, 18737, 18743, 0}, 2, 1, 754, 241, {2587,1245,2843,1210,0,0,0,0,0,0,0,0,0,0},{18748,0,0,0,0,0,0,0},{274,331,5085,0,0,0,0,0,0,0,0,0},{280,323,6558,0,0,0,0,0,0}},
-       {3672, 243, 280, 274, 1906, 352, 7213, 7218, {18766, 18780, 18790, 18801, 18815, 18826, 18837}, {18850, 18855, 18860, 18867, 18873, 18879, 18885}, {2692, 2411, 2403, 7548, 2692, 12798, 2018}, {18890, 18898, 18906, 18913, 18922, 18932, 18942, 18948, 18956, 18971, 18989, 18997, 0}, {18890, 18898, 18906, 18913, 18922, 18932, 18942, 18948, 18956, 18971, 18989, 18997, 0}, {19005, 19009, 18906, 19015, 19019, 19024, 18942, 19030, 19035, 19042, 19049, 19054, 0}, {19005, 19009, 18906, 19015, 19019, 19024, 18942, 19030, 19035, 19042, 19049, 19054, 0}, 2, 0, 239, 241, {243,14,1229,2843,1210,0,0,0,0,0,0,0,0,0},{3672,5603,10078,10067,0,0,0,0},{274,331,0,0,0,0,0,0,0,0,0,0},{280,323,0,0,0,0,0,0,0}},
-       {5603, 243, 323, 331, 1906, 55, 19059, 19062, {19066, 19071, 10649, 10656, 19077, 19084, 10673}, {19091, 19095, 10687, 10691, 19099, 10699, 10703}, {12798, 15365, 2018, 10707, 4511, 4089, 2018}, {9983, 9991, 19103, 2715, 10715, 2795, 19107, 19113, 2742, 2752, 2760, 19118, 0}, {9983, 9991, 19103, 2715, 10715, 2795, 19107, 19113, 2742, 2752, 2760, 19118, 0}, {2778, 2782, 19103, 2791, 10715, 2795, 2799, 19127, 2807, 2811, 2815, 16316, 0}, {2778, 2782, 19103, 2791, 10715, 2795, 2799, 19127, 2807, 2811, 2815, 16316, 0}, 0, 0, 239, 241, {243,14,1210,0,0,0,0,0,0,0,0,0,0,0},{5603,0,0,0,0,0,0,0},{331,274,0,0,0,0,0,0,0,0,0,0},{323,280,0,0,0,0,0,0,0}},
-       {19131, 6549, 280, 274, 1906, 352, 19149, 19171, {19195, 19210, 19227, 19244, 19261, 19278, 19287}, {19298, 19304, 19310, 19316, 19322, 19328, 19334}, {19340, 19343, 8668, 8668, 19346, 19340, 8668}, {19349, 19362, 19373, 19386, 19397, 19408, 19421, 19432, 19443, 19460, 19471, 19484, 0}, {19349, 19362, 19373, 19386, 19397, 19408, 19421, 19432, 19443, 19460, 19471, 19484, 0}, {19503, 19511, 19519, 19527, 19535, 19543, 19551, 19559, 19567, 19575, 19583, 19591, 0}, {19503, 19511, 19519, 19527, 19535, 19543, 19551, 19559, 19567, 19575, 19583, 19591, 0}, 0, 0, 2541, 241, {2587,1245,2843,14,1210,0,0,0,0,0,0,0,0,0},{19131,19601,0,0,0,0,0,0},{331,274,0,0,0,0,0,0,0,0,0,0},{323,280,0,0,0,0,0,0,0}},
-       {19620, 19641, 280, 274, 19650, 19666, 19675, 19701, {19729, 19736, 19743, 19750, 19757, 19764, 19771}, {19729, 19736, 19743, 19750, 19757, 19764, 19771}, {19340, 19343, 19778, 19778, 19346, 19340, 19781}, {19784, 19797, 564, 19812, 584, 19825, 19834, 605, 19843, 19860, 19875, 19888, 0}, {19784, 19797, 564, 19812, 584, 19825, 19834, 605, 19843, 19860, 19875, 19888, 0}, {19903, 15841, 15849, 702, 584, 19911, 19919, 710, 19927, 728, 19935, 746, 0}, {19903, 15841, 15849, 702, 584, 19911, 19919, 710, 19927, 728, 19935, 746, 0}, 0, 0, 2541, 241, {1245,1210,0,0,0,0,0,0,0,0,0,0,0,0},{19943,0,0,0,0,0,0,0},{331,0,0,0,0,0,0,0,0,0,0,0},{323,0,0,0,0,0,0,0,0}},
-       {3909, 3703, 2936, 2947, 44, 19963, 1924, 1927, {19971, 19980, 19989, 19997, 20006, 20015, 20022}, {20031, 20034, 20037, 20040, 20043, 20047, 20050}, {6677, 6679, 6681, 6683, 12798, 15365, 6675}, {9983, 9991, 20053, 20059, 10715, 2725, 19107, 20066, 16271, 20073, 16288, 20080, 0}, {9983, 9991, 20053, 20059, 10715, 2725, 19107, 20066, 16271, 20073, 16288, 20080, 0}, {2778, 2782, 19103, 2791, 10715, 2795, 2799, 20088, 2807, 2811, 2815, 10740, 0}, {2778, 2782, 19103, 2791, 10715, 2795, 2799, 20088, 2807, 2811, 2815, 10740, 0}, 0, 0, 239, 241, {3703,3872,3879,3888,1779,1210,3899,0,0,0,0,0,0,0},{3909,3929,254,3943,0,0,0,0},{2947,35,331,274,0,0,0,0,0,0,0,0},{2936,23,323,280,0,0,0,0,0}},
-       {20092, 2587, 280, 274, 1906, 20110, 1924, 1927, {20117, 20127, 20136, 20145, 20156, 20166, 20171}, {20178, 20184, 20189, 20194, 20199, 10699, 20203}, {20208, 2692, 2018, 7548, 2013, 4089, 2018}, {15029, 15036, 10276, 15043, 3829, 20210, 20215, 20220, 15068, 15077, 15085, 15092, 0}, {15029, 15036, 10276, 15043, 3829, 20210, 20215, 20220, 15068, 15077, 15085, 15092, 0}, {20227, 20232, 3860, 2791, 3829, 20210, 20215, 20236, 10683, 2811, 20240, 20245, 0}, {20227, 20232, 3860, 2791, 3829, 20210, 20215, 20236, 10683, 2811, 20240, 20245, 0}, 0, 0, 754, 241, {20249,1245,2843,14,1210,0,0,0,0,0,0,0,0,0},{20092,3672,5603,0,0,0,0,0},{274,331,0,0,0,0,0,0,0,0,0,0},{280,323,0,0,0,0,0,0,0}},
-       {5603, 1236, 6558, 5085, 44, 352, 20260, 20288, {20310, 20329, 20348, 20373, 20392, 20426, 20451}, {20470, 20480, 20490, 20506, 20516, 20541, 20557}, {20567, 20571, 20578, 20582, 20589, 20596, 20603}, {20607, 20635, 20669, 20685, 20704, 20711, 20721, 20737, 20753, 20784, 20806, 20828, 0}, {20607, 20635, 20669, 20685, 20704, 20711, 20721, 20737, 20753, 20784, 20806, 20828, 0}, {20607, 20635, 20669, 20685, 20704, 20711, 20721, 20737, 20753, 20784, 20806, 20828, 0}, {20607, 20635, 20669, 20685, 20704, 20711, 20721, 20737, 20753, 20784, 20806, 20828, 0}, 0, 1, 2541, 241, {1236,2270,2843,2309,1210,0,0,0,0,0,0,0,0,0},{5603,3672,0,0,0,0,0,0},{5085,2285,20853,20862,0,0,0,0,0,0,0,0},{6558,2301,20870,20882,0,0,0,0,0}},
-       {10387, 1236, 1870, 1850, 44, 55, 1924, 1927, {20893, 20909, 20928, 20950, 20969, 20988, 21016}, {21038, 21046, 21057, 21071, 21082, 21093, 21113}, {21127, 21131, 21138, 21145, 21155, 21162, 21175}, {21182, 21198, 21217, 21230, 21249, 21256, 21266, 21282, 21295, 21311, 21330, 21346, 0}, {21182, 21198, 21217, 21230, 21249, 21256, 21266, 21282, 21295, 21311, 21330, 21346, 0}, {21182, 21198, 21217, 21230, 21249, 21256, 21266, 21282, 21295, 21311, 21330, 21346, 0}, {21182, 21198, 21217, 21230, 21249, 21256, 21266, 21282, 21295, 21311, 21330, 21346, 0}, 0, 0, 2541, 241, {1236,2270,2843,2309,1210,0,0,0,0,0,0,0,0,0},{10387,3672,0,0,0,0,0,0},{1850,1842,331,274,0,0,0,0,0,0,0,0},{1870,1859,323,280,0,0,0,0,0}},
-       {5603, 1236, 280, 274, 44, 55, 1924, 1927, {21362, 21381, 21400, 21422, 21441, 21463, 21488}, {21507, 21517, 21527, 21540, 21550, 21563, 21579}, {21589, 21593, 21600, 21607, 21614, 21621, 21628}, {21632, 21660, 21688, 21704, 21723, 21730, 21740, 21756, 21772, 21800, 21822, 21844, 0}, {21632, 21660, 21688, 21704, 21723, 21730, 21740, 21756, 21772, 21800, 21822, 21844, 0}, {21869, 21888, 21688, 21704, 21723, 21730, 21740, 21907, 21914, 21930, 21946, 21956, 0}, {21869, 21888, 21688, 21704, 21723, 21730, 21740, 21907, 21914, 21930, 21946, 21956, 0}, 0, 0, 2541, 241, {1236,2270,2843,2309,1210,0,0,0,0,0,0,0,0,0},{5603,3672,0,0,0,0,0,0},{274,331,1850,1842,0,0,0,0,0,0,0,0},{280,323,1870,1859,0,0,0,0,0}},
-       {5603, 1236, 280, 274, 44, 55, 7992, 21969, {21972, 21991, 22010, 22035, 22054, 22076, 22101}, {22120, 22130, 22140, 22156, 22166, 22179, 22195}, {22205, 22209, 22216, 22220, 22227, 22234, 22241}, {22245, 22267, 22298, 22320, 22339, 22346, 22356, 22372, 22388, 22419, 22441, 22463, 0}, {22245, 22267, 22298, 22320, 22339, 22346, 22356, 22372, 22388, 22419, 22441, 22463, 0}, {6675, 6677, 6679, 6681, 6683, 6685, 6687, 6689, 6691, 6693, 6696, 6699, 0}, {6675, 6677, 6679, 6681, 6683, 6685, 6687, 6689, 6691, 6693, 6696, 6699, 0}, 0, 0, 2541, 241, {1236,2270,2843,2309,1210,0,0,0,0,0,0,0,0,0},{5603,3672,0,0,0,0,0,0},{274,331,1850,1842,0,0,0,0,0,0,0,0},{280,323,1870,1859,0,0,0,0,0}},
-       {5603, 2309, 280, 274, 1906, 352, 22488, 22513, {22538, 22557, 22579, 22604, 22620, 22642, 22661}, {22671, 22678, 22685, 22692, 22699, 22706, 22713}, {22671, 22678, 22685, 22692, 22699, 22706, 22713}, {22717, 22733, 22758, 22777, 22796, 22803, 22816, 22829, 22848, 22879, 22904, 22926, 0}, {22717, 22733, 22758, 22777, 22796, 22803, 22816, 22951, 22848, 22879, 22904, 22926, 0}, {22970, 22978, 22992, 23006, 22796, 22803, 22816, 23017, 23025, 23039, 23050, 23058, 0}, {22970, 22978, 22992, 23006, 22796, 22803, 22816, 23017, 23025, 23039, 23050, 23058, 0}, 0, 0, 2541, 241, {2309,1236,2270,2843,1210,0,0,0,0,0,0,0,0,0},{5603,3672,0,0,0,0,0,0},{274,331,1850,1842,0,0,0,0,0,0,0,0},{280,323,1870,1859,0,0,0,0,0}},
-       {5603, 1236, 280, 274, 44, 3712, 1924, 1927, {23069, 23091, 23113, 23138, 23160, 23185, 23213}, {23235, 23245, 23255, 23268, 23278, 23291, 23307}, {23317, 23321, 23328, 23332, 23339, 23346, 23353}, {23357, 23373, 23398, 23417, 23439, 23446, 23459, 23472, 23491, 23522, 23547, 23566, 0}, {23357, 23373, 23398, 23417, 23439, 23446, 23591, 23472, 23491, 23522, 23547, 23566, 0}, {23604, 23611, 23398, 23627, 23439, 23446, 23591, 23472, 23643, 23665, 23681, 23691, 0}, {23604, 23611, 23398, 23627, 23439, 23446, 23591, 23472, 23643, 23665, 23681, 23691, 0}, 0, 0, 2541, 241, {1236,2270,2843,2309,1210,0,0,0,0,0,0,0,0,0},{5603,3672,0,0,0,0,0,0},{274,331,1850,1842,0,0,0,0,0,0,0,0},{280,323,1870,1859,0,0,0,0,0}},
-       {5603, 1236, 280, 274, 44, 3712, 1924, 1927, {23707, 23726, 23745, 23767, 23786, 23808, 23833}, {23852, 23862, 23872, 23885, 23895, 23908, 23924}, {23934, 23938, 23945, 23952, 23959, 23966, 23973}, {23977, 23993, 24018, 24037, 24059, 24066, 24079, 24092, 24111, 24139, 24164, 24186, 0}, {23977, 23993, 24018, 24037, 24059, 24066, 24079, 24092, 24111, 24139, 24164, 24186, 0}, {24211, 24219, 24239, 24246, 24059, 24263, 24270, 24278, 24286, 24309, 24326, 24340, 0}, {24211, 24219, 24239, 24246, 24059, 24263, 24270, 24278, 24286, 24309, 24326, 24340, 0}, 0, 0, 2541, 241, {1236,2270,2843,2309,1210,0,0,0,0,0,0,0,0,0},{5603,3672,0,0,0,0,0,0},{274,331,1850,1842,0,0,0,0,0,0,0,0},{280,323,1870,1859,0,0,0,0,0}},
-       {5603, 1236, 6558, 5085, 44, 19963, 1924, 1927, {24357, 24385, 24419, 24447, 24475, 24506, 24543}, {24571, 24584, 24603, 24619, 24632, 24651, 24670}, {24680, 24687, 24694, 24701, 24708, 24721, 24728}, {24732, 24751, 24779, 24801, 24820, 24833, 24843, 24856, 24881, 24912, 24937, 24953, 0}, {24732, 24751, 24779, 24801, 24820, 24833, 24843, 24856, 24881, 24912, 24937, 24953, 0}, {24972, 24982, 25001, 25011, 24820, 24833, 24843, 25027, 25034, 25059, 25075, 25085, 0}, {24972, 24982, 25001, 25011, 24820, 24833, 24843, 25027, 25034, 25059, 25075, 25085, 0}, 0, 0, 2541, 241, {1236,2270,2843,2309,1210,0,0,0,0,0,0,0,0,0},{5603,3672,0,0,0,0,0,0},{5085,2285,20853,20862,0,0,0,0,0,0,0,0},{6558,2301,20870,20882,0,0,0,0,0}},
-       {25098, 2309, 1859, 1842, 25117, 352, 25125, 25153, {25175, 25194, 25213, 25238, 25257, 25291, 25316}, {25335, 20480, 20490, 20506, 25345, 25370, 20557}, {0, 0, 0, 0, 0, 0, 0}, {25386, 25411, 25442, 25458, 20704, 20711, 20721, 25477, 25493, 25524, 25546, 25568, 0}, {25386, 25411, 25442, 25458, 20704, 20711, 20721, 25477, 25493, 25524, 25546, 25568, 0}, {25593, 25606, 25442, 25458, 20704, 20711, 20721, 25625, 25632, 25648, 25664, 25674, 0}, {25593, 25606, 25442, 25458, 20704, 20711, 20721, 25625, 25632, 25648, 25664, 25674, 0}, 0, 0, 2541, 241, {2309,0,0,0,0,0,0,0,0,0,0,0,0,0},{25098,0,0,0,0,0,0,0},{1842,1850,0,0,0,0,0,0,0,0,0,0},{1859,1870,0,0,0,0,0,0,0}},
-       {5603, 2309, 280, 274, 44, 55, 1924, 1927, {17494, 17513, 25687, 17554, 17573, 17595, 17620}, {17639, 17649, 25709, 17672, 17682, 17695, 17711}, {17721, 17725, 17732, 17739, 17746, 17753, 17760}, {25722, 25747, 17799, 25778, 25797, 17841, 25804, 25817, 25833, 25858, 25880, 25908, 0}, {25722, 25747, 17799, 25778, 25797, 17841, 25804, 25817, 25833, 25858, 25880, 25908, 0}, {25930, 25943, 17799, 25962, 25797, 17841, 25804, 25978, 25985, 26004, 26020, 26042, 0}, {25930, 25943, 17799, 25962, 25797, 17841, 25804, 25978, 25985, 26004, 26020, 26042, 0}, 0, 0, 2541, 241, {2309,1236,2270,2843,1210,0,0,0,0,0,0,0,0,0},{5603,3672,0,0,0,0,0,0},{274,331,1850,1842,0,0,0,0,0,0,0,0},{280,323,1870,1859,0,0,0,0,0}},
-       {26058, 1210, 280, 274, 26112, 5736, 26131, 26136, {26141, 26148, 26159, 26172, 26185, 26196, 26209}, {26220, 26225, 26230, 26235, 26240, 26245, 26250}, {6675, 6677, 6679, 6681, 6683, 6685, 6687}, {26255, 26281, 26309, 26339, 26369, 26395, 26425, 26451, 26479, 26503, 26531, 26568, 0}, {26255, 26281, 26309, 26339, 26369, 26395, 26425, 26451, 26479, 26503, 26531, 26568, 0}, {26607, 26619, 26631, 26643, 26655, 26667, 26679, 26691, 26703, 26715, 26728, 26741, 0}, {26607, 26619, 26631, 26643, 26655, 26667, 26679, 26691, 26703, 26715, 26728, 26741, 0}, 0, 0, 2541, 241, {26754,1210,0,0,0,0,0,0,0,0,0,0,0,0},{26763,0,0,0,0,0,0,0},{331,0,0,0,0,0,0,0,0,0,0,0},{323,0,0,0,0,0,0,0,0}},
-       {26784, 1366, 280, 274, 26827, 26860, 26884, 26906, {26931, 26959, 26987, 27024, 27055, 27089, 27114}, {27148, 27164, 27180, 27205, 27224, 27246, 27259}, {27281, 27288, 27295, 27302, 27309, 27316, 27320}, {27330, 27364, 27401, 27435, 27469, 27500, 27537, 27574, 27614, 27648, 27682, 27731, 0}, {27330, 27364, 27401, 27435, 27469, 27500, 27537, 27574, 27614, 27648, 27682, 27731, 0}, {27780, 27793, 27806, 27819, 27832, 27845, 27858, 27871, 27884, 27897, 27913, 27929, 0}, {27780, 27793, 27806, 27819, 27832, 27845, 27858, 27871, 27884, 27897, 27913, 27929, 0}, 0, 0, 239, 241, {1366,1718,1727,1747,1210,1736,1758,1765,1772,0,0,0,0,0},{26784,27945,0,0,0,0,0,0},{274,0,0,0,0,0,0,0,0,0,0,0},{280,0,0,0,0,0,0,0,0}},
-       {3672, 14, 280, 274, 1906, 352, 1924, 1927, {27993, 28002, 28012, 28024, 28037, 28046, 28058}, {28070, 28074, 28079, 28083, 28087, 28091, 28095}, {2018, 28099, 2403, 2403, 15365, 6354, 2018}, {28102, 28109, 28118, 28125, 2721, 28132, 28140, 28151, 28156, 28161, 28168, 28177, 0}, {28102, 28109, 28118, 28125, 2721, 28132, 28140, 28151, 28156, 28161, 28168, 28177, 0}, {28185, 28189, 28079, 28193, 2721, 28197, 28201, 28151, 28156, 28205, 28209, 28214, 0}, {28185, 28189, 28079, 28193, 2721, 28197, 28201, 28151, 28156, 28205, 28209, 28214, 0}, 2, 1, 239, 241, {243,14,1229,2843,1210,0,0,0,0,0,0,0,0,0},{5603,3672,0,0,0,0,0,0},{274,331,35,2947,0,0,0,0,0,0,0,0},{280,323,23,2936,0,0,0,0,0}},
-       {3672, 14, 280, 331, 28219, 352, 28254, 28270, {28286, 28308, 28321, 28340, 28350, 28381, 28397}, {28286, 28308, 28321, 28340, 28350, 28381, 28397}, {6675, 6677, 6679, 6681, 6683, 6685, 6687}, {28410, 28423, 28442, 28455, 28468, 28481, 28500, 28519, 28532, 28548, 28561, 28586, 0}, {28410, 28423, 28442, 28455, 28468, 28481, 28500, 28519, 28532, 28548, 28561, 28586, 0}, {28410, 28423, 28442, 28455, 28468, 28481, 28500, 28519, 28532, 28548, 28561, 28586, 0}, {28410, 28423, 28442, 28455, 28468, 28481, 28500, 28519, 28532, 28548, 28561, 28586, 0}, 0, 0, 239, 241, {1210,0,0,0,0,0,0,0,0,0,0,0,0,0},{3672,10090,0,0,0,0,0,0},{28599,0,0,0,0,0,0,0,0,0,0,0},{280,0,0,0,0,0,0,0,0}},
-       {5603, 243, 280, 274, 1906, 352, 28607, 28632, {28657, 28682, 28701, 28729, 28748, 28773, 28792}, {28657, 28682, 28701, 28729, 28748, 28773, 28792}, {28814, 28818, 28822, 28826, 28836, 28840, 28850}, {28854, 28873, 28889, 28902, 28915, 28937, 28956, 28978, 28994, 29010, 29023, 29039, 0}, {28854, 28873, 28889, 28902, 28915, 28937, 28956, 28978, 28994, 29010, 29023, 29039, 0}, {29055, 29064, 29073, 29082, 29091, 29100, 29112, 29121, 29130, 29139, 29148, 29157, 0}, {29055, 29064, 29073, 29082, 29091, 29100, 29112, 29121, 29130, 29139, 29148, 29157, 0}, 0, 0, 239, 241, {243,1210,0,0,0,0,0,0,0,0,0,0,0,0},{5603,0,0,0,0,0,0,0},{28599,0,0,0,0,0,0,0,0,0,0,0},{280,0,0,0,0,0,0,0,0}},
-       {4313, 243, 323, 331, 947, 3985, 7213, 7218, {3997, 29166, 4011, 29171, 29181, 29187, 4044}, {29194, 8356, 3860, 29198, 29203, 29207, 29211}, {2692, 2411, 2403, 2403, 29216, 4091, 2018}, {29218, 29226, 4107, 4113, 29235, 29240, 29246, 4136, 29252, 29261, 29269, 29278, 0}, {29287, 29295, 4196, 1102, 7895, 29304, 29310, 4219, 7912, 7921, 7929, 29316, 0}, {29325, 2782, 3860, 29329, 2721, 29333, 29338, 20088, 18317, 29342, 2815, 3868, 0}, {29325, 2782, 3860, 29329, 2721, 29333, 29338, 20088, 18317, 29342, 2815, 3868, 0}, 2, 1, 239, 241, {243,14,1221,1229,1236,1245,1210,0,0,0,0,0,0,0},{4313,4342,4369,0,0,0,0,0},{331,274,35,1312,0,0,0,0,0,0,0,0},{323,280,23,1324,0,0,0,0,0}},
-       {5603, 2309, 280, 274, 44, 55, 29346, 29358, {29370, 17513, 29398, 17554, 17573, 17595, 17620}, {17639, 17649, 25709, 17672, 17682, 17695, 17711}, {0, 0, 0, 0, 0, 0, 0}, {25722, 25747, 17799, 25778, 25797, 17841, 25804, 29417, 29433, 29461, 25880, 25908, 0}, {25722, 25747, 17799, 25778, 25797, 17841, 25804, 29417, 29433, 29461, 25880, 25908, 0}, {6675, 6677, 6679, 6681, 6683, 6685, 6687, 6689, 6691, 6693, 6696, 6699, 0}, {6675, 6677, 6679, 6681, 6683, 6685, 6687, 6689, 6691, 6693, 6696, 6699, 0}, 0, 0, 2541, 241, {2309,1236,2270,2843,1210,0,0,0,0,0,0,0,0,0},{5603,3672,0,0,0,0,0,0},{274,331,1850,1842,0,0,0,0,0,0,0,0},{280,323,1870,1859,0,0,0,0,0}},
-       {29483, 1210, 1859, 1842, 29531, 19963, 29541, 29553, {29562, 29578, 29594, 29622, 29638, 29681, 29706}, {29562, 29578, 29734, 29622, 29744, 29766, 29779}, {29789, 29793, 29797, 29801, 29805, 29818, 29825}, {29832, 29851, 29876, 29895, 29920, 29933, 29946, 29959, 29981, 30015, 30040, 30068, 0}, {29832, 29851, 29876, 29895, 29920, 29933, 29946, 29959, 29981, 30015, 30040, 30068, 0}, {30096, 30103, 30113, 29895, 29920, 29933, 29946, 30126, 30136, 30149, 30159, 30172, 0}, {30096, 30103, 30113, 29895, 29920, 29933, 29946, 30126, 30136, 30149, 30159, 30172, 0}, 0, 1, 2541, 241, {1210,1736,1779,243,14,0,0,0,0,0,0,0,0,0},{29483,0,0,0,0,0,0,0},{2947,35,331,274,0,0,0,0,0,0,0,0},{2936,23,323,280,0,0,0,0,0}},
-       {30185, 2927, 2936, 2947, 1906, 30217, 30233, 30243, {30256, 30266, 30273, 30286, 30296, 30306, 30316}, {30256, 30266, 30326, 30286, 30296, 30306, 30316}, {30336, 30340, 30344, 30348, 30352, 30356, 30360}, {30364, 30380, 30396, 30406, 30419, 30426, 30433, 30443, 30456, 30475, 30491, 30507, 0}, {30364, 30380, 30396, 30406, 30419, 30426, 30433, 30443, 30456, 30523, 30491, 30507, 0}, {30542, 30552, 30396, 30562, 30419, 30426, 30433, 30572, 30582, 30592, 30602, 30612, 0}, {30542, 30552, 30396, 30562, 30419, 30426, 30433, 30572, 30582, 30592, 30602, 30612, 0}, 0, 0, 239, 241, {2927,1210,0,0,0,0,0,0,0,0,0,0,0,0},{30185,0,0,0,0,0,0,0},{2947,0,0,0,0,0,0,0,0,0,0,0},{2936,0,0,0,0,0,0,0,0}},
-       {3943, 2309, 323, 331, 44, 352, 30622, 30632, {30645, 30652, 30658, 30665, 30671, 30677, 30685}, {30695, 30699, 30703, 30707, 30711, 30715, 30719}, {12798, 12798, 12798, 12798, 12798, 12798, 12798}, {30725, 30734, 10000, 30743, 30749, 30755, 30761, 30768, 30774, 30783, 30792, 30800, 0}, {30725, 30734, 10000, 30743, 30749, 30755, 30761, 30768, 30774, 30783, 30792, 30800, 0}, {30809, 30813, 3860, 30817, 3829, 30821, 30825, 30829, 30834, 30838, 30844, 30848, 0}, {30809, 30813, 3860, 30817, 3829, 30821, 30825, 30829, 30834, 30838, 30844, 30848, 0}, 0, 0, 2541, 241, {2309,1236,1210,0,0,0,0,0,0,0,0,0,0,0},{3943,254,0,0,0,0,0,0},{331,274,30852,0,0,0,0,0,0,0,0,0},{323,280,0,0,0,0,0,0,0}},
-       {3909, 3703, 2936, 2947, 30858, 55, 30868, 30909, {30950, 30969, 30988, 31013, 31032, 31054, 31079}, {31098, 17649, 31108, 17672, 31124, 17695, 17711}, {31137, 17725, 31141, 17739, 31145, 17753, 17760}, {17764, 31152, 17799, 31180, 25797, 31199, 17851, 31209, 31225, 31256, 31278, 31303, 0}, {17764, 31152, 17799, 31180, 25797, 31199, 17851, 31209, 31225, 31256, 31278, 31303, 0}, {17764, 31152, 17799, 31180, 25797, 31199, 17851, 31209, 31225, 31256, 31278, 31303, 0}, {17764, 31152, 17799, 31180, 25797, 31199, 17851, 31209, 31225, 31256, 31278, 31303, 0}, 0, 0, 239, 241, {3703,3872,3879,3888,1779,1210,3899,0,0,0,0,0,0,0},{3909,3929,254,3943,0,0,0,0},{2947,35,331,274,0,0,0,0,0,0,0,0},{2936,23,323,280,0,0,0,0,0}},
-       {31328, 1366, 2936, 2947, 1906, 352, 0, 0, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {31349, 31356, 31365, 31380, 31391, 31400, 31407, 31414, 31421, 31432, 31445, 31458, 0}, {31349, 31356, 31365, 31380, 31391, 31400, 31407, 31414, 31421, 31432, 31445, 31458, 0}, {6675, 6677, 6679, 6681, 6683, 6685, 6687, 6689, 6691, 6693, 6696, 6699, 0}, {6675, 6677, 6679, 6681, 6683, 6685, 6687, 6689, 6691, 6693, 6696, 6699, 0}, 0, 6, 239, 241, {14,243,0,0,0,0,0,0,0,0,0,0,0,0},{243,1,254,31463,0,0,0,0},{2947,331,0,0,0,0,0,0,0,0,0,0},{2936,323,0,0,0,0,0,0,0}},
-       {3909, 3703, 2936, 2947, 44, 31481, 1924, 1927, {31487, 31494, 31500, 31507, 31518, 31526, 31535}, {31542, 8356, 3860, 31546, 31550, 31554, 10703}, {2411, 2411, 2403, 2403, 5811, 16359, 2018}, {4093, 31558, 31566, 4113, 4119, 31572, 31578, 4136, 31584, 31594, 31602, 31612, 0}, {4093, 31558, 31566, 4113, 4119, 31572, 31578, 4136, 31584, 31594, 31602, 31612, 0}, {31622, 31626, 3860, 29329, 3829, 31630, 31634, 20088, 18317, 2811, 31638, 16316, 0}, {31622, 31626, 3860, 29329, 3829, 31630, 31634, 20088, 18317, 2811, 31638, 16316, 0}, 0, 0, 239, 241, {3703,3872,3879,3888,1779,1210,3899,0,0,0,0,0,0,0},{3909,3929,254,3943,0,0,0,0},{2947,35,331,274,0,0,0,0,0,0,0,0},{2936,23,323,280,0,0,0,0,0}},
-       {3909, 2927, 2936, 2947, 44, 352, 0, 0, {31642, 31649, 31657, 31664, 31671, 31679, 31687}, {31694, 31697, 31700, 31703, 31706, 31709, 31712}, {2411, 2411, 2405, 2411, 12798, 4089, 12798}, {31715, 31723, 31733, 31739, 31747, 31752, 31757, 31762, 31769, 20073, 31777, 31785, 0}, {31715, 31723, 31733, 31739, 31747, 31752, 31757, 31762, 31769, 20073, 31777, 31785, 0}, {2778, 31793, 3860, 31797, 3829, 30821, 30825, 31801, 3800, 2811, 31805, 16316, 0}, {2778, 31793, 3860, 31797, 3829, 30821, 30825, 31801, 3800, 2811, 31805, 16316, 0}, 0, 0, 239, 241, {2927,1229,14,243,1779,1210,3899,0,0,0,0,0,0,0},{3909,3929,254,3943,0,0,0,0},{2947,35,331,274,0,0,0,0,0,0,0,0},{2936,23,323,280,0,0,0,0,0}},
-       {254, 2927, 2936, 2947, 30858, 55, 31809, 31820, {31830, 31848, 31863, 31885, 31898, 31912, 31929}, {31953, 31961, 31966, 31885, 31898, 31978, 31985}, {0, 0, 0, 0, 0, 0, 0}, {31999, 32021, 32037, 32057, 32071, 32088, 32103, 32120, 32134, 32147, 32166, 32180, 0}, {31999, 32021, 32037, 32057, 32071, 32088, 32103, 32120, 32134, 32147, 32166, 32180, 0}, {32199, 32214, 32223, 32236, 32243, 32253, 32261, 32271, 32278, 32284, 32296, 32303, 0}, {32199, 32214, 32223, 32236, 32243, 32253, 32261, 32271, 32278, 32284, 32296, 32303, 0}, 0, 0, 239, 241, {2927,1229,14,243,1779,1210,3899,0,0,0,0,0,0,0},{3909,3929,254,3943,0,0,0,0},{2947,35,331,274,0,0,0,0,0,0,0,0},{2936,23,323,280,0,0,0,0,0}},
-       {5603, 14, 23, 35, 1906, 3712, 0, 0, {32315, 32323, 15891, 15900, 15909, 32334, 32344}, {16347, 15941, 15945, 15949, 15953, 16210, 32353}, {0, 0, 0, 0, 0, 0, 0}, {32357, 32366, 32376, 32384, 10715, 3833, 32392, 32398, 32407, 32416, 32425, 32434, 0}, {32357, 32366, 32376, 32384, 10715, 3833, 32392, 32398, 32407, 32416, 32425, 32434, 0}, {2778, 2782, 15960, 32443, 10715, 2795, 2799, 20088, 18317, 2811, 32447, 16316, 0}, {2778, 2782, 15960, 32443, 10715, 2795, 2799, 20088, 18317, 2811, 32447, 16316, 0}, 0, 0, 239, 241, {1736,1779,1210,0,0,0,0,0,0,0,0,0,0,0},{5603,0,0,0,0,0,0,0},{35,2947,274,0,0,0,0,0,0,0,0,0},{23,2936,280,0,0,0,0,0,0}},
-       {32451, 2309, 280, 274, 1906, 32470, 32483, 32488, {32493, 32500, 32515, 32529, 32545, 32560, 32576}, {6350, 32591, 2505, 32595, 32599, 32603, 32607}, {2018, 12798, 2403, 2013, 2018, 2405, 12798}, {7302, 7310, 32611, 32618, 32625, 2444, 2449, 32630, 32640, 32651, 32660, 32670, 0}, {7302, 7310, 32611, 32618, 32625, 2444, 2449, 32630, 32640, 32651, 32660, 32670, 0}, {2497, 2501, 2505, 2509, 2440, 2513, 2517, 2521, 2525, 2529, 2533, 2537, 0}, {2497, 2501, 2505, 2509, 2440, 2513, 2517, 2521, 2525, 2529, 2533, 2537, 0}, 0, 0, 2541, 241, {2309,1236,1210,2543,0,0,0,0,0,0,0,0,0,0},{1882,2554,0,0,0,0,0,0},{274,331,0,0,0,0,0,0,0,0,0,0},{280,323,0,0,0,0,0,0,0}},
-       {3909, 2927, 2290, 2277, 44, 352, 32680, 32685, {32690, 32706, 32714, 32722, 32731, 32743, 32753}, {32763, 32769, 32775, 32779, 32783, 32791, 3800}, {0, 0, 0, 0, 0, 0, 0}, {32798, 32811, 32825, 32834, 32840, 32844, 32849, 32857, 16271, 32870, 16288, 16296, 0}, {32798, 32811, 32825, 32834, 32840, 32844, 32849, 32857, 16271, 32870, 16288, 16296, 0}, {32879, 2782, 32883, 16304, 32840, 32887, 2799, 32891, 2807, 32899, 2815, 16316, 0}, {32879, 2782, 32883, 16304, 32840, 32887, 2799, 32891, 2807, 32899, 2815, 16316, 0}, 0, 0, 239, 241, {2927,1229,14,243,1779,1210,3899,0,0,0,0,0,0,0},{3909,3929,254,3943,0,0,0,0},{2947,35,331,274,0,0,0,0,0,0,0,0},{2936,23,323,280,0,0,0,0,0}},
-       {32905, 1366, 1859, 1842, 32929, 32946, 32973, 32980, {32987, 32997, 33007, 33017, 33027, 33037, 33047}, {33057, 33064, 33071, 33078, 33085, 33092, 33099}, {33106, 33110, 33114, 33118, 33122, 33126, 33130}, {33134, 33141, 33148, 33155, 33162, 33169, 33176, 33183, 33190, 33197, 33204, 33214, 0}, {33134, 33141, 33148, 33155, 33162, 33169, 33176, 33183, 33190, 33197, 33204, 33214, 0}, {6675, 6677, 6679, 6681, 6683, 6685, 6687, 6689, 6691, 6693, 6696, 6699, 0}, {6675, 6677, 6679, 6681, 6683, 6685, 6687, 6689, 6691, 6693, 6696, 6699, 0}, 0, 0, 239, 241, {1366,1718,1727,1747,1210,1736,0,0,0,0,0,0,0,0},{32905,33224,33254,0,0,0,0,0},{1842,331,0,0,0,0,0,0,0,0,0,0},{323,280,0,0,0,0,0,0,0}},
-       {4857, 243, 280, 274, 1906, 352, 0, 0, {28070, 8356, 33284, 33291, 33301, 33306, 33313}, {33320, 6334, 33324, 4941, 33329, 33334, 33339}, {4490, 33344, 33347, 33350, 33353, 33356, 33359}, {33362, 33369, 33284, 33380, 33386, 33390, 33399, 33406, 33411, 33420, 33425, 33428, 0}, {33362, 33369, 33284, 33380, 33386, 33390, 33399, 33406, 33411, 33420, 33425, 33428, 0}, {33434, 33438, 33445, 28193, 33386, 33450, 33455, 33406, 33460, 33420, 33425, 33465, 0}, {33434, 33438, 33445, 28193, 33386, 33450, 33455, 33406, 33460, 33420, 33425, 33465, 0}, 2, 1, 239, 241, {243,14,1245,1236,1210,0,0,0,0,0,0,0,0,0},{4857,5076,3672,0,0,0,0,0},{274,331,5085,5091,5101,0,0,0,0,0,0,0},{280,323,0,0,0,0,0,0,0}},
-       {4857, 243, 280, 274, 1906, 1916, 33469, 33474, {33479, 33487, 33497, 33507, 33516, 33526, 33534}, {33544, 33548, 33553, 33557, 33561, 33565, 33569}, {2018, 2403, 2692, 2403, 2692, 2409, 2018}, {2694, 2701, 2709, 2715, 2721, 2725, 2730, 33573, 33582, 33593, 33602, 33612, 0}, {2694, 2701, 2709, 2715, 2721, 2725, 2730, 33573, 33582, 33593, 33602, 33612, 0}, {2778, 2782, 2786, 2791, 2721, 2795, 2799, 2803, 2807, 2811, 2815, 2819, 0}, {2778, 2782, 2786, 2791, 2721, 2795, 2799, 2803, 2807, 2811, 2815, 2819, 0}, 0, 0, 239, 241, {243,14,1245,1236,1210,0,0,0,0,0,0,0,0,0},{4857,5076,3672,0,0,0,0,0},{274,331,5085,5091,5101,0,0,0,0,0,0,0},{280,323,0,0,0,0,0,0,0}},
-       {33622, 2587, 323, 331, 33657, 33673, 33691, 33696, {33701, 33726, 33755, 33780, 33793, 33808, 33825}, {33840, 33845, 33850, 33855, 33860, 33865, 8657}, {19346, 19346, 33870, 8668, 8671, 19346, 8668}, {33873, 33892, 33907, 33929, 33949, 33965, 33981, 33995, 34021, 34045, 34062, 34079, 0}, {33873, 33892, 33907, 33929, 33949, 33965, 33981, 33995, 34021, 34045, 34062, 34079, 0}, {34096, 34105, 34114, 34128, 34142, 34154, 34166, 34176, 34192, 34206, 34213, 34220, 0}, {34096, 34105, 34114, 34128, 34142, 34154, 34166, 34176, 34192, 34206, 34213, 34220, 0}, 0, 1, 754, 241, {34227,34238,2843,3879,34247,0,0,0,0,0,0,0,0,0},{34258,34276,0,0,0,0,0,0},{331,274,0,0,0,0,0,0,0,0,0,0},{323,280,0,0,0,0,0,0,0}},
-       {34295, 14812, 323, 331, 1906, 19963, 0, 0, {34315, 34327, 34338, 34350, 34362, 34372, 34384}, {34399, 34404, 34409, 34414, 34419, 34424, 34429}, {0, 0, 0, 0, 0, 0, 0}, {34434, 34443, 34455, 34463, 34468, 34478, 34485, 34494, 34501, 34507, 34516, 34527, 0}, {34434, 34443, 34455, 34463, 34468, 34478, 34485, 34494, 34501, 34507, 34516, 34527, 0}, {34535, 34540, 34545, 34550, 34555, 34560, 34565, 34419, 34570, 34575, 34580, 34585, 0}, {34535, 34540, 34545, 34550, 34555, 34560, 34565, 34419, 34570, 34575, 34580, 34585, 0}, 0, 0, 239, 241, {3703,3872,3879,3888,1779,1210,3899,0,0,0,0,0,0,0},{3909,3929,254,3943,0,0,0,0},{2947,35,331,274,0,0,0,0,0,0,0,0},{2936,23,323,280,0,0,0,0,0}},
-       {5603, 243, 280, 274, 1906, 352, 34590, 34592, {34594, 34607, 34615, 34624, 34634, 34644, 34653}, {34665, 34669, 34673, 34677, 34681, 34685, 34689}, {2692, 2411, 2403, 7548, 12798, 5811, 2018}, {34693, 34707, 34718, 34727, 34738, 34750, 34764, 34776, 34789, 34802, 34814, 34827, 0}, {34693, 34707, 34718, 34727, 34738, 34750, 34764, 34776, 34789, 34802, 34814, 34827, 0}, {34841, 34846, 34852, 34858, 34863, 34869, 34875, 34880, 34886, 34891, 19049, 34897, 0}, {34841, 34846, 34852, 34858, 34863, 34869, 34875, 34880, 34886, 34891, 19049, 34897, 0}, 2, 1, 239, 241, {243,14,1229,2843,1210,0,0,0,0,0,0,0,0,0},{5603,3672,0,0,0,0,0,0},{274,331,35,2947,0,0,0,0,0,0,0,0},{280,323,23,2936,0,0,0,0,0}},
-       {1, 14, 23, 35, 44, 55, 0, 0, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {63, 72, 79, 99, 119, 143, 167, 174, 185, 196, 205, 223, 0}, {63, 72, 79, 99, 119, 143, 167, 174, 185, 196, 205, 223, 0}, {63, 72, 79, 99, 119, 143, 167, 174, 185, 196, 205, 223, 0}, {63, 72, 79, 99, 119, 143, 167, 174, 185, 196, 205, 223, 0}, 0, 0, 239, 241, {14,243,0,0,0,0,0,0,0,0,0,0,0,0},{1,254,0,0,0,0,0,0},{35,274,0,0,0,0,0,0,0,0,0,0},{23,280,0,0,0,0,0,0,0}},
-       {289, 308, 323, 331, 336, 352, 359, 370, {381, 394, 415, 430, 441, 460, 471}, {484, 489, 494, 499, 504, 509, 514}, {519, 522, 525, 528, 531, 522, 528}, {534, 547, 564, 573, 584, 591, 598, 605, 618, 637, 654, 669, 0}, {534, 547, 564, 573, 584, 591, 598, 605, 618, 637, 654, 669, 0}, {686, 692, 564, 702, 584, 591, 598, 710, 718, 728, 736, 746, 0}, {686, 692, 564, 702, 584, 591, 598, 710, 718, 728, 736, 746, 0}, 2, 1, 754, 241, {308,756,772,788,0,0,0,0,0,0,0,0,0,0},{289,805,823,848,0,0,0,0},{872,884,0,0,0,0,0,0,0,0,0,0},{895,910,0,0,0,0,0,0,0}},
-       {924, 243, 323, 331, 947, 352, 962, 968, {974, 983, 991, 999, 1008, 1015, 1025}, {1034, 1038, 1042, 1046, 1050, 1054, 1058}, {1062, 1065, 1068, 1071, 1074, 1077, 1080}, {1083, 1089, 1096, 1102, 1108, 1113, 1118, 1125, 1131, 1140, 1148, 1157, 0}, {1083, 1089, 1096, 1102, 1108, 1113, 1118, 1125, 1131, 1140, 1148, 1157, 0}, {1166, 1171, 1096, 1176, 1108, 1113, 1181, 1186, 1190, 1195, 1200, 1205, 0}, {1166, 1171, 1096, 1176, 1108, 1113, 1181, 1186, 1190, 1195, 1200, 1205, 0}, 2, 1, 239, 241, {243,14,1210,1221,1229,1236,1245,0,0,0,0,0,0,0},{1254,1280,1296,0,0,0,0,0},{274,331,1312,0,0,0,0,0,0,0,0,0},{280,323,1324,0,0,0,0,0,0}},
-       {1344, 1366, 1870, 1850, 1375, 1391, 1404, 1411, {1418, 1428, 1438, 1448, 1458, 1468, 1478}, {34903, 34910, 34917, 34924, 34931, 34938, 34945}, {1537, 1541, 1545, 1549, 1553, 1557, 1561}, {1655, 1660, 1665, 1670, 1675, 1680, 1685, 1690, 1695, 1700, 1706, 1712, 0}, {1655, 1660, 1665, 1670, 1675, 1680, 1685, 1690, 1695, 1700, 1706, 1712, 0}, {1655, 1660, 1665, 1670, 1675, 1680, 1685, 1690, 1695, 1700, 1706, 1712, 0}, {1655, 1660, 1665, 1670, 1675, 1680, 1685, 1690, 1695, 1700, 1706, 1712, 0}, 0, 0, 239, 241, {1366,1736,1210,0,0,0,0,0,0,0,0,0,0,0},{1344,6759,0,0,0,0,0,0},{1850,1842,274,331,0,0,0,0,0,0,0,0},{1870,1859,280,323,0,0,0,0,0}},
-       {1882, 1895, 323, 331, 1906, 1916, 1924, 1927, {1930, 1938, 1948, 1956, 1964, 1973, 1980}, {1987, 1990, 1993, 1997, 2000, 2004, 2008}, {2011, 2013, 2015, 2018, 2020, 2013, 2018}, {2023, 2029, 2035, 2043, 2049, 2057, 2065, 2075, 2081, 2089, 2097, 2106, 0}, {2115, 2121, 2128, 2136, 2142, 2150, 2158, 2168, 2081, 2174, 2182, 2192, 0}, {2201, 2205, 2210, 2215, 2219, 2224, 2229, 2234, 2238, 2244, 2250, 2254, 0}, {2201, 2205, 2210, 2215, 2219, 2224, 2229, 2234, 2238, 2244, 2250, 2254, 0}, 2, 1, 2258, 241, {2261,2270,1210,1718,1758,0,0,0,0,0,0,0,0,0},{1882,0,0,0,0,0,0,0},{331,274,2277,2285,0,0,0,0,0,0,0,0},{323,280,2290,2301,0,0,0,0,0}},
-       {1882, 2309, 280, 274, 1906, 1916, 1924, 1927, {2320, 2328, 2335, 2343, 2350, 2358, 2365}, {2373, 2378, 2382, 2386, 2390, 2394, 2398}, {2018, 2403, 2405, 2407, 2405, 2409, 2411}, {2413, 2420, 2428, 2434, 2440, 2444, 2449, 2454, 2461, 2471, 2479, 2488, 0}, {2413, 2420, 2428, 2434, 2440, 2444, 2449, 2454, 2461, 2471, 2479, 2488, 0}, {2497, 2501, 2505, 2509, 2440, 2513, 2517, 2521, 2525, 2529, 2533, 2537, 0}, {2497, 2501, 2505, 2509, 2440, 2513, 2517, 2521, 2525, 2529, 2533, 2537, 0}, 2, 1, 2541, 241, {2309,1236,1210,2543,0,0,0,0,0,0,0,0,0,0},{1882,2554,0,0,0,0,0,0},{274,331,0,0,0,0,0,0,0,0,0,0},{280,323,0,0,0,0,0,0,0}},
-       {2568, 2587, 280, 274, 1906, 1916, 2598, 2604, {2611, 2619, 2626, 2635, 2644, 2655, 2663}, {2671, 2674, 2677, 2680, 2683, 2686, 2689}, {2018, 2403, 2692, 2403, 2692, 2409, 2018}, {2694, 2701, 2709, 2715, 2721, 2725, 2730, 2735, 2742, 2752, 2760, 2769, 0}, {2694, 2701, 2709, 2715, 2721, 2725, 2730, 2735, 2742, 2752, 2760, 2769, 0}, {2778, 2782, 2786, 2791, 2721, 2795, 2799, 2803, 2807, 2811, 2815, 2819, 0}, {2778, 2782, 2786, 2791, 2721, 2795, 2799, 2803, 2807, 2811, 2815, 2819, 0}, 2, 1, 754, 241, {2587,2823,1245,2835,2843,2261,1210,0,0,0,0,0,0,0},{2568,1882,2850,0,0,0,0,0},{274,331,2285,2862,0,0,0,0,0,0,0,0},{280,2873,2887,2902,0,0,0,0,0}},
-       {2909, 2927, 2936, 2947, 1906, 352, 2955, 2962, {2969, 2984, 2999, 3010, 3025, 3038, 3057}, {3072, 3079, 3086, 3093, 3100, 3107, 3114}, {3121, 3124, 3127, 3127, 3130, 3130, 3133}, {3136, 3157, 3180, 3195, 3212, 3223, 3238, 3253, 3272, 3295, 3314, 3333, 0}, {3354, 3375, 3398, 3413, 3430, 3441, 3456, 3471, 3490, 3513, 3532, 3551, 0}, {3572, 3579, 3586, 3593, 3600, 3607, 3616, 3625, 3632, 3639, 3646, 3653, 0}, {3572, 3579, 3586, 3593, 3600, 3607, 3616, 3625, 3632, 3639, 3646, 3653, 0}, 2, 1, 239, 241, {2927,243,1229,14,3660,1210,0,0,0,0,0,0,0,0},{2909,3672,0,0,0,0,0,0},{2947,35,331,274,0,0,0,0,0,0,0,0},{2936,23,323,280,0,0,0,0,0}},
-       {3684, 3703, 2936, 2947, 1906, 3712, 1924, 1927, {3719, 3726, 3733, 3741, 3751, 3760, 3767}, {3776, 3780, 3784, 3788, 3792, 3796, 3800}, {2018, 2403, 2405, 3804, 2405, 2409, 2018}, {3806, 3814, 3823, 2715, 3829, 3833, 3838, 2735, 2742, 3843, 2760, 3851, 0}, {3806, 3814, 3823, 2715, 3829, 3833, 3838, 2735, 2742, 3843, 2760, 3851, 0}, {2778, 2782, 3860, 2791, 3829, 2795, 2799, 2803, 2807, 3864, 2815, 3868, 0}, {2778, 2782, 3860, 2791, 3829, 2795, 2799, 2803, 2807, 3864, 2815, 3868, 0}, 0, 0, 239, 241, {3703,3872,3879,3888,1779,1210,3899,0,0,0,0,0,0,0},{3909,3929,254,3943,0,0,0,0},{2947,35,331,274,0,0,0,0,0,0,0,0},{2936,23,323,280,0,0,0,0,0}},
-       {1882, 2261, 323, 331, 1906, 4391, 4401, 4405, {4409, 4421, 4433, 4443, 4457, 4467, 4479}, {4490, 4493, 4496, 4499, 4502, 4505, 4508}, {2018, 2403, 2405, 4511, 2405, 2013, 2411}, {4513, 4522, 4531, 4541, 4550, 4559, 4568, 4578, 4585, 4593, 4601, 4611, 0}, {4620, 4631, 4642, 4654, 4665, 4676, 4687, 4699, 4708, 4718, 4728, 4740, 0}, {4751, 4757, 4763, 4770, 4776, 4782, 4788, 4795, 4799, 4804, 4809, 4816, 0}, {4751, 4757, 4763, 4770, 4776, 4782, 4788, 4795, 4799, 4804, 4809, 4816, 0}, 2, 1, 754, 241, {2261,2587,2843,1210,0,0,0,0,0,0,0,0,0,0},{4822,4839,0,0,0,0,0,0},{331,274,0,0,0,0,0,0,0,0,0,0},{323,280,0,0,0,0,0,0,0}},
-       {4857, 243, 280, 274, 1906, 352, 1924, 1927, {4874, 4883, 4889, 4895, 4904, 4910, 4919}, {4926, 4931, 4936, 4941, 4946, 4951, 4956}, {2692, 2411, 2403, 2403, 4089, 4091, 2018}, {4961, 4969, 4978, 4983, 4989, 4993, 4998, 5006, 5012, 5022, 1148, 5030, 0}, {4961, 4969, 4978, 4983, 4989, 4993, 4998, 5006, 5012, 5022, 1148, 5030, 0}, {5040, 5046, 4978, 5053, 4989, 4993, 5058, 5006, 5064, 1195, 1200, 5070, 0}, {5040, 5046, 4978, 5053, 4989, 4993, 5058, 5006, 5064, 1195, 1200, 5070, 0}, 2, 1, 239, 241, {243,14,1245,1236,1210,0,0,0,0,0,0,0,0,0},{4857,5076,3672,0,0,0,0,0},{274,331,5085,5091,5101,0,0,0,0,0,0,0},{280,323,0,0,0,0,0,0,0}},
-       {5109, 243, 280, 274, 1906, 55, 5127, 5140, {5151, 5169, 5183, 5201, 5219, 5237, 5253}, {5267, 5279, 5291, 5303, 5315, 5327, 5339}, {5346, 5351, 5356, 5361, 5366, 5371, 5376}, {5381, 5392, 5405, 5412, 5423, 5430, 5439, 5448, 5461, 5474, 5489, 5502, 0}, {5381, 5392, 5405, 5412, 5423, 5430, 5439, 5448, 5461, 5474, 5489, 5502, 0}, {5513, 5522, 5405, 5531, 5423, 5540, 5549, 5558, 5567, 5576, 5585, 5594, 0}, {5513, 5522, 5405, 5531, 5423, 5540, 5549, 5558, 5567, 5576, 5585, 5594, 0}, 0, 0, 239, 241, {243,5603,14,1,1236,2309,5616,1210,5629,5646,0,0,0,0},{5109,5603,5656,5678,5629,0,0,0},{274,35,0,0,0,0,0,0,0,0,0,0},{280,23,0,0,0,0,0,0,0}},
-       {5699, 5713, 323, 331, 5725, 5736, 5744, 5748, {5752, 5762, 5770, 5775, 5782, 5795, 5803}, {4091, 5811, 4511, 5813, 5817, 2013, 5820}, {4091, 5811, 4511, 5824, 5817, 2013, 5824}, {5827, 5835, 5844, 5853, 5862, 5869, 5877, 5885, 5895, 5906, 2479, 2488, 0}, {5827, 5835, 5844, 5853, 5862, 5869, 5877, 5885, 5895, 5906, 2479, 2488, 0}, {5915, 5920, 5926, 5933, 5939, 5945, 5951, 5957, 5962, 5969, 1200, 5974, 0}, {5915, 5920, 5926, 5933, 5939, 5945, 5951, 5957, 5962, 5969, 1200, 5974, 0}, 2, 1, 754, 241, {5713,5979,1210,5993,0,0,0,0,0,0,0,0,0,0},{5699,0,0,0,0,0,0,0},{331,274,2947,0,0,0,0,0,0,0,0,0},{323,280,2936,0,0,0,0,0,0}},
-       {1882, 2261, 280, 274, 1906, 1916, 6002, 6007, {6012, 6023, 6034, 6048, 6062, 6074, 6086}, {6098, 6103, 6109, 6115, 6121, 6126, 6132}, {2018, 2403, 6137, 2403, 2409, 2409, 2411}, {6140, 6148, 4978, 6157, 6164, 6169, 6176, 6183, 2461, 5906, 6191, 6201, 0}, {6140, 6148, 4978, 6157, 6164, 6169, 6176, 6183, 2461, 5906, 6191, 6201, 0}, {5915, 1171, 4936, 6210, 6164, 5945, 5951, 6215, 6222, 5969, 6227, 1205, 0}, {5915, 1171, 4936, 6210, 6164, 5945, 5951, 6215, 6222, 5969, 6227, 1205, 0}, 2, 1, 754, 241, {2261,1245,6233,6245,1210,6259,0,0,0,0,0,0,0,0},{1882,2554,0,0,0,0,0,0},{274,331,0,0,0,0,0,0,0,0,0,0},{280,323,0,0,0,0,0,0,0}},
-       {4857, 243, 280, 274, 1906, 352, 1924, 1927, {6268, 6277, 6285, 6294, 6305, 6314, 6323}, {6330, 6334, 2505, 6338, 6342, 6346, 6350}, {2692, 2411, 2403, 2403, 6354, 4091, 2018}, {6356, 6364, 4107, 6373, 6380, 6387, 6394, 4136, 6401, 6411, 6419, 6428, 0}, {6437, 6445, 4196, 6454, 6461, 6468, 6475, 4219, 6482, 6492, 1148, 6500, 0}, {6509, 2501, 2505, 2509, 6513, 6517, 6521, 6525, 6529, 6533, 2533, 6537, 0}, {6509, 2501, 2505, 2509, 6513, 6517, 6521, 6525, 6529, 6533, 2533, 6537, 0}, 2, 1, 239, 241, {243,3660,14,6541,1229,1210,0,0,0,0,0,0,0,0},{4857,6549,3672,0,0,0,0,0},{274,331,2285,5085,0,0,0,0,0,0,0,0},{280,2301,6558,0,0,0,0,0,0}},
-       {1344, 1736, 323, 331, 1375, 1391, 6567, 6574, {6581, 6591, 6601, 6611, 6621, 6631, 6641}, {1537, 6651, 6655, 6659, 6663, 6667, 6671}, {1537, 6651, 6655, 6659, 6663, 6667, 6671}, {1655, 1660, 1665, 1670, 1675, 1680, 1685, 1690, 1695, 1700, 1706, 1712, 0}, {1655, 1660, 1665, 1670, 1675, 1680, 1685, 1690, 1695, 1700, 1706, 1712, 0}, {6675, 6677, 6679, 6681, 6683, 6685, 6687, 6689, 6691, 6693, 6696, 6699, 0}, {6675, 6677, 6679, 6681, 6683, 6685, 6687, 6689, 6691, 6693, 6696, 6699, 0}, 0, 0, 239, 241, {1736,1779,1765,1366,6702,6721,6738,1210,0,0,0,0,0,0},{1344,6759,6783,6810,0,0,0,0},{331,274,1842,1850,0,0,0,0,0,0,0,0},{323,280,1859,1870,0,0,0,0,0}},
-       {6839, 1210, 1859, 1842, 6868, 6885, 6899, 6906, {6913, 6923, 6933, 6943, 6953, 6963, 6973}, {6983, 6987, 6991, 6995, 6999, 7003, 7007}, {6983, 6987, 6991, 6995, 6999, 7003, 7007}, {7011, 7016, 7021, 7026, 7031, 7036, 7041, 7046, 7051, 7056, 7062, 7068, 0}, {7011, 7016, 7021, 7026, 7031, 7036, 7041, 7046, 7051, 7056, 7062, 7068, 0}, {7011, 7016, 7021, 7026, 7031, 7036, 7041, 7046, 7051, 7056, 7062, 7068, 0}, {7011, 7016, 7021, 7026, 7031, 7036, 7041, 7046, 7051, 7056, 7062, 7068, 0}, 0, 0, 2541, 241, {1210,5993,1758,1718,0,0,0,0,0,0,0,0,0,0},{6839,7074,7098,7125,7147,7178,0,0},{1842,1850,331,274,0,0,0,0,0,0,0,0},{1859,1870,323,280,0,0,0,0,0}},
-       {4857, 7204, 280, 274, 1906, 352, 7213, 7218, {7223, 7230, 7238, 7246, 7255, 7265, 7273}, {7282, 4493, 7285, 7288, 7291, 7294, 7297}, {7300, 2403, 2692, 3804, 2692, 4091, 7300}, {7302, 7310, 7319, 2434, 7325, 2444, 2449, 7329, 2461, 2471, 2479, 2488, 0}, {7302, 7310, 7319, 2434, 7325, 2444, 2449, 7329, 2461, 2471, 2479, 2488, 0}, {2497, 2501, 7338, 2509, 7325, 2513, 2517, 2521, 2525, 2529, 2533, 2537, 0}, {2497, 2501, 7338, 2509, 7325, 2513, 2517, 2521, 2525, 2529, 2533, 2537, 0}, 2, 1, 2541, 241, {7204,2270,1236,14,1245,2823,1210,0,0,0,0,0,0,0},{4857,6549,3672,5076,0,0,0,0},{331,274,2285,7342,7354,0,0,0,0,0,0,0},{323,280,7366,7381,0,0,0,0,0}},
-       {1882, 2587, 280, 274, 1906, 1916, 7213, 7218, {2320, 2328, 2335, 2343, 2350, 2358, 2365}, {7396, 7401, 7405, 7409, 7413, 7417, 7421}, {2018, 2403, 2405, 2407, 2405, 2409, 2411}, {2413, 2420, 4978, 2434, 4989, 2444, 2449, 2454, 2461, 2471, 2479, 6201, 0}, {2413, 2420, 4978, 2434, 4989, 2444, 2449, 2454, 2461, 2471, 2479, 6201, 0}, {2497, 2501, 2505, 2509, 4989, 2513, 2517, 2521, 2525, 2529, 2533, 7426, 0}, {2497, 2501, 2505, 2509, 4989, 2513, 2517, 2521, 2525, 2529, 2533, 7426, 0}, 2, 1, 754, 241, {2587,1245,2843,1210,2823,0,0,0,0,0,0,0,0,0},{1882,2554,0,0,0,0,0,0},{274,331,7430,5085,0,0,0,0,0,0,0,0},{280,323,7441,6558,0,0,0,0,0}},
-       {3672, 1210, 280, 274, 1906, 352, 1924, 1927, {7455, 7465, 7479, 7486, 7493, 7502, 1980}, {7510, 7517, 7522, 7526, 7531, 7536, 7540}, {2011, 2013, 3804, 7545, 7548, 2013, 2018}, {7550, 7559, 7564, 7571, 2440, 7581, 7590, 7597, 7607, 7617, 2097, 7630, 0}, {7640, 7649, 7656, 7662, 7671, 7676, 7684, 7690, 7699, 7709, 7723, 7733, 0}, {7741, 7745, 2505, 7749, 2440, 7753, 7757, 7761, 7765, 7769, 2250, 7774, 0}, {7741, 7745, 2505, 7749, 2440, 7753, 7757, 7761, 7765, 7769, 2250, 7774, 0}, 2, 1, 2541, 241, {1210,5993,0,0,0,0,0,0,0,0,0,0,0,0},{3672,5603,0,0,0,0,0,0},{274,331,0,0,0,0,0,0,0,0,0,0},{280,323,0,0,0,0,0,0,0}},
-       {3957, 243, 280, 274, 947, 3985, 1924, 1927, {3997, 7778, 7792, 7805, 7818, 7831, 4044}, {6330, 7843, 7847, 7851, 7855, 7859, 7863}, {2692, 2018, 2405, 7868, 7868, 2018, 2018}, {7870, 7878, 7888, 1102, 7895, 7900, 7906, 4219, 7912, 7921, 7929, 7938, 0}, {7870, 7878, 7888, 1102, 7895, 7900, 7906, 4219, 7912, 7921, 7929, 7938, 0}, {2497, 7947, 2505, 7951, 4989, 2513, 2517, 6525, 6529, 7955, 2533, 7959, 0}, {2497, 7947, 2505, 7951, 4989, 2513, 2517, 6525, 6529, 7955, 2533, 7959, 0}, 0, 0, 239, 241, {243,14,2927,1229,1236,2309,2270,7204,1245,2587,2823,2843,2261,1210},{3957,4369,0,0,0,0,0,0},{274,0,0,0,0,0,0,0,0,0,0,0},{280,0,0,0,0,0,0,0,0}},
-       {7963, 2309, 280, 274, 1906, 352, 7992, 7995, {7998, 8007, 4889, 8017, 8025, 8033, 8042}, {8048, 8051, 4493, 8055, 8058, 8062, 2008}, {2692, 6354, 2403, 2403, 6354, 4091, 2018}, {8065, 8073, 4978, 8080, 8087, 8092, 8102, 8110, 8116, 8126, 2479, 2488, 0}, {8065, 8073, 4978, 8080, 8087, 8092, 8102, 8110, 8116, 8126, 2479, 2488, 0}, {8134, 8141, 4978, 5053, 8087, 8147, 8154, 8110, 8159, 1195, 1200, 5974, 0}, {8134, 8141, 4978, 5053, 8087, 8147, 8154, 8110, 8159, 1195, 1200, 5974, 0}, 2, 1, 2541, 241, {243,14,1221,8165,1229,243,1210,0,0,0,0,0,0,0},{2909,3672,5076,0,0,0,0,0},{274,331,8173,8185,8196,8204,8214,8223,2862,8229,8237,8242},{280,323,8245,8260,2887,2873,8274,8287,2902}},
-       {3672, 2587, 323, 331, 1906, 352, 7213, 7218, {8299, 8309, 8314, 8321, 8330, 8334, 8341}, {8352, 8356, 3860, 8360, 8364, 8368, 8372}, {2692, 2411, 2403, 2403, 4089, 4091, 2018}, {8377, 8386, 8396, 8403, 4989, 8411, 8417, 2454, 8423, 8434, 8444, 8454, 0}, {8377, 8386, 8396, 8403, 4989, 8411, 8417, 2454, 8423, 8434, 8444, 8454, 0}, {8464, 1171, 4936, 6210, 4989, 8469, 8474, 5957, 5064, 1195, 1200, 5974, 0}, {8464, 1171, 4936, 6210, 4989, 8469, 8474, 5957, 5064, 1195, 1200, 5974, 0}, 0, 1, 754, 241, {2587,2261,1210,0,0,0,0,0,0,0,0,0,0,0},{3672,0,0,0,0,0,0,0},{274,331,0,0,0,0,0,0,0,0,0,0},{280,323,0,0,0,0,0,0,0}},
-       {805, 2587, 323, 331, 1906, 352, 8479, 8499, {8525, 8548, 415, 8571, 8582, 8597, 8612}, {8627, 8632, 8637, 8642, 8647, 8652, 8657}, {8662, 8665, 8662, 8668, 8671, 8665, 8668}, {8674, 8687, 8702, 8711, 8724, 8731, 8740, 8749, 8762, 8779, 8794, 8807, 0}, {8822, 8835, 8850, 8861, 8874, 8881, 8890, 8899, 8914, 8931, 8946, 8959, 0}, {8974, 8982, 8702, 8992, 8724, 8731, 8740, 9000, 9008, 9018, 9026, 9036, 0}, {8974, 8982, 8702, 8992, 8724, 8731, 8740, 9000, 9008, 9018, 9026, 9036, 0}, 0, 1, 754, 241, {2587,1245,2843,14,1210,0,0,0,0,0,0,0,0,0},{805,289,0,0,0,0,0,0},{331,274,0,0,0,0,0,0,0,0,0,0},{323,280,0,0,0,0,0,0,0}},
-       {9044, 9058, 323, 331, 44, 1916, 1924, 1927, {9068, 9077, 9089, 9096, 9104, 9114, 9120}, {9127, 9131, 9135, 9139, 9143, 9148, 9152}, {9156, 9158, 9160, 9162, 9164, 9158, 9162}, {9167, 9177, 9186, 9194, 9202, 9210, 9217, 9224, 9232, 2097, 9238, 9246, 0}, {9255, 9265, 9274, 9282, 9290, 9298, 9305, 9312, 9321, 7723, 9327, 9337, 0}, {9346, 9350, 9355, 9360, 9364, 7757, 2234, 9368, 9372, 2250, 9376, 2254, 0}, {9346, 9350, 9355, 9360, 9364, 7757, 2234, 9368, 9372, 2250, 9376, 2254, 0}, 0, 1, 754, 241, {9058,9380,6233,9388,9400,9410,9420,1210,0,0,0,0,0,0},{9044,9432,9447,0,0,0,0,0},{331,274,0,0,0,0,0,0,0,0,0,0},{323,280,0,0,0,0,0,0,0}},
-       {1882, 2261, 323, 331, 1906, 1916, 1924, 1927, {9467, 9475, 9484, 9491, 9498, 9507, 1980}, {1987, 1990, 9514, 1997, 9517, 9521, 2008}, {2011, 2013, 9524, 2018, 9526, 2013, 2018}, {5827, 5835, 9529, 6157, 9535, 9540, 9545, 2454, 2461, 5906, 2479, 2488, 0}, {9550, 9559, 7656, 9569, 9577, 9583, 9589, 9595, 9603, 9613, 9622, 9631, 0}, {2497, 2501, 2505, 2509, 9535, 9540, 9545, 2521, 2525, 2529, 2533, 2537, 0}, {2497, 2501, 2505, 2509, 9535, 9540, 9545, 2521, 2525, 2529, 2533, 2537, 0}, 2, 1, 754, 241, {1895,2261,9640,2843,2587,1245,1210,0,0,0,0,0,0,0},{1882,2554,0,0,0,0,0,0},{331,274,2285,0,0,0,0,0,0,0,0,0},{323,280,2301,0,0,0,0,0,0}},
-       {2909, 2261, 280, 274, 1906, 352, 9649, 9658, {9666, 9673, 9682, 9691, 9703, 9711, 9720}, {9730, 9734, 3860, 9739, 9744, 9748, 9752}, {2692, 5811, 2403, 2403, 9756, 2013, 2018}, {9758, 9764, 4978, 9771, 2440, 9777, 9785, 9792, 9798, 9806, 9812, 9820, 0}, {9758, 9764, 4978, 9771, 2440, 9777, 9785, 9792, 9798, 9806, 9812, 9820, 0}, {2778, 9828, 3860, 9832, 9836, 9840, 9844, 9848, 9752, 9852, 9856, 9861, 0}, {2778, 9828, 3860, 9832, 9836, 9840, 9844, 9848, 9752, 9852, 9856, 9861, 0}, 0, 1, 754, 241, {1210,5993,0,0,0,0,0,0,0,0,0,0,0,0},{1210,0,0,0,0,0,0,0},{9865,274,0,0,0,0,0,0,0,0,0,0},{9873,280,0,0,0,0,0,0,0}},
-       {9884, 1210, 280, 274, 1906, 9902, 9915, 9918, {9921, 9929, 9937, 2343, 2350, 2358, 9944}, {9952, 9957, 9962, 9966, 9970, 9974, 9978}, {2018, 2403, 2405, 2407, 2405, 2409, 2411}, {9983, 9991, 10000, 2715, 9836, 2725, 2730, 10005, 2742, 2752, 2760, 3851, 0}, {7302, 7310, 4978, 2434, 2440, 2444, 2449, 10013, 2461, 2471, 2479, 2488, 0}, {2778, 2782, 3860, 2791, 9836, 2795, 2799, 2803, 2807, 2811, 2815, 3868, 0}, {2778, 2782, 3860, 2791, 9836, 2795, 2799, 2803, 2807, 2811, 2815, 3868, 0}, 2, 1, 2541, 241, {1210,5993,0,0,0,0,0,0,0,0,0,0,0,0},{9884,10021,0,0,0,0,0,0},{274,331,10044,0,0,0,0,0,0,0,0,0},{280,323,10054,0,0,0,0,0,0}},
-       {3672, 2927, 323, 331, 1906, 352, 0, 0, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {6675, 6677, 6679, 6681, 6683, 6685, 6687, 6689, 6691, 6693, 6696, 6699, 0}, {6675, 6677, 6679, 6681, 6683, 6685, 6687, 6689, 6691, 6693, 6696, 6699, 0}, 0, 0, 239, 241, {2927,1229,14,243,10067,10078,1210,0,0,0,0,0,0,0},{3672,10090,10106,0,0,0,0,0},{331,274,2947,35,0,0,0,0,0,0,0,0},{323,280,2936,23,0,0,0,0,0}},
-       {10148, 2261, 280, 274, 1906, 352, 10165, 10170, {10174, 10180, 10190, 10196, 10207, 10217, 10222}, {10232, 10236, 10240, 10244, 10249, 10253, 10257}, {2013, 2013, 2018, 10261, 2013, 7548, 7548}, {10264, 10269, 10276, 10281, 10287, 10294, 10302, 10309, 10318, 10325, 10330, 10337, 0}, {10264, 10269, 10276, 10281, 10287, 10294, 10302, 10309, 10318, 10325, 10330, 10337, 0}, {10345, 10349, 3860, 10354, 3829, 10358, 10362, 10366, 10371, 10375, 10379, 10383, 0}, {10345, 10349, 3860, 10354, 3829, 10358, 10362, 10366, 10371, 10375, 10379, 10383, 0}, 0, 1, 754, 241, {2587,1245,1210,0,0,0,0,0,0,0,0,0,0,0},{10387,5603,0,0,0,0,0,0},{274,0,0,0,0,0,0,0,0,0,0,0},{280,0,0,0,0,0,0,0,0}},
-       {3943, 243, 2936, 2947, 44, 55, 10405, 10423, {10441, 10452, 10465, 10474, 10481, 10494, 10503}, {10441, 10452, 10465, 10474, 10481, 10494, 10503}, {2018, 2403, 2405, 3804, 2405, 2409, 2018}, {10512, 10523, 10534, 10543, 10554, 10561, 10568, 10581, 10590, 10601, 10614, 10625, 0}, {10512, 10523, 10534, 10543, 10554, 10561, 10568, 10581, 10590, 10601, 10614, 10625, 0}, {10512, 10523, 10534, 10543, 10554, 10561, 10568, 10581, 10590, 10601, 10614, 10625, 0}, {10512, 10523, 10534, 10543, 10554, 10561, 10568, 10581, 10590, 10601, 10614, 10625, 0}, 0, 0, 239, 241, {243,14,1210,0,0,0,0,0,0,0,0,0,0,0},{3943,254,0,0,0,0,0,0},{2947,35,331,274,0,0,0,0,0,0,0,0},{2936,23,323,280,0,0,0,0,0}},
-       {5603, 243, 323, 331, 1906, 55, 1924, 1927, {10636, 10643, 10649, 10656, 10661, 10667, 10673}, {10679, 10683, 10687, 10691, 10695, 10699, 10703}, {2403, 2018, 2018, 10707, 4511, 4089, 2018}, {9983, 9991, 10709, 2715, 10715, 2725, 2730, 10719, 2742, 2752, 2760, 10727, 0}, {9983, 9991, 10709, 2715, 10715, 2725, 2730, 10719, 2742, 2752, 2760, 10727, 0}, {2778, 2782, 3860, 2791, 10715, 2795, 2799, 10736, 2807, 2811, 2815, 10740, 0}, {2778, 2782, 3860, 2791, 10715, 2795, 2799, 10736, 2807, 2811, 2815, 10740, 0}, 0, 0, 239, 241, {243,14,1210,0,0,0,0,0,0,0,0,0,0,0},{5603,0,0,0,0,0,0,0},{331,274,0,0,0,0,0,0,0,0,0,0},{323,280,0,0,0,0,0,0,0}},
-       {10744, 2587, 323, 331, 10762, 352, 10778, 10783, {10788, 10801, 10820, 10837, 10850, 10863, 10880}, {10893, 8632, 8637, 8642, 8647, 8652, 8657}, {10898, 8665, 8662, 8668, 8671, 8665, 8668}, {10901, 10914, 10925, 10942, 10957, 10972, 10987, 11000, 11015, 11032, 11047, 11064, 0}, {11079, 11090, 11103, 11118, 11131, 11144, 11157, 11168, 11181, 11196, 11209, 11228, 0}, {11241, 11248, 11255, 11262, 11269, 11276, 11283, 11290, 11297, 11304, 11311, 11318, 0}, {11241, 11248, 11255, 11262, 11269, 11276, 11283, 11290, 11297, 11304, 11311, 11318, 0}, 0, 1, 754, 241, {2587,1245,1210,0,0,0,0,0,0,0,0,0,0,0},{10744,0,0,0,0,0,0,0},{331,274,0,0,0,0,0,0,0,0,0,0},{323,280,0,0,0,0,0,0,0}},
-       {3672, 1245, 280, 274, 1906, 352, 11325, 11338, {11351, 11366, 11387, 11402, 11415, 11428, 10880}, {484, 489, 11443, 499, 11448, 509, 514}, {519, 522, 11453, 528, 531, 522, 528}, {11456, 11473, 11482, 11497, 584, 11514, 11529, 11542, 11557, 11574, 11595, 11612, 0}, {11627, 11644, 11657, 11674, 8874, 11693, 11708, 11721, 11734, 11749, 11772, 11791, 0}, {11804, 11811, 11818, 11825, 584, 11832, 11839, 11846, 11853, 11860, 11867, 11874, 0}, {11804, 11811, 11818, 11825, 584, 11832, 11839, 11846, 11853, 11860, 11867, 11874, 0}, 0, 0, 754, 241, {2587,1245,1210,0,0,0,0,0,0,0,0,0,0,0},{3672,0,0,0,0,0,0,0},{331,274,0,0,0,0,0,0,0,0,0,0},{323,280,0,0,0,0,0,0,0}},
-       {1882, 2261, 323, 331, 1906, 1916, 11881, 11886, {11891, 11899, 11910, 11916, 11922, 11931, 1980}, {9127, 9131, 2390, 11937, 9143, 9148, 11941}, {9156, 9158, 11945, 9162, 9164, 9158, 9162}, {2413, 2420, 9529, 2434, 2440, 11947, 11953, 11959, 2461, 2471, 2479, 2488, 0}, {2413, 2420, 9529, 2434, 2440, 11947, 11953, 11959, 2461, 2471, 2479, 2488, 0}, {2497, 2501, 2505, 2509, 2440, 2513, 2517, 11966, 2525, 2529, 2533, 2537, 0}, {2497, 2501, 2505, 2509, 2440, 2513, 2517, 11966, 2525, 2529, 2533, 2537, 0}, 0, 1, 754, 241, {2261,2843,1895,2587,9640,1245,11970,1210,0,0,0,0,0,0},{1882,2554,2568,0,0,0,0,0},{331,274,0,0,0,0,0,0,0,0,0,0},{323,280,0,0,0,0,0,0,0}},
-       {1882, 11981, 323, 331, 1906, 11991, 12000, 12005, {12010, 12021, 12032, 12043, 12054, 12065, 12071}, {2013, 9756, 2405, 4511, 2011, 10707, 2411}, {2013, 9756, 2405, 4511, 2011, 10707, 2411}, {12080, 12088, 12097, 12104, 4989, 12111, 12117, 2454, 2461, 12123, 2479, 12132, 0}, {12080, 12088, 12097, 12104, 4989, 12111, 12117, 2454, 2461, 12123, 2479, 12132, 0}, {12142, 12147, 12097, 2509, 4989, 12111, 12117, 2521, 12153, 2529, 2533, 12158, 0}, {12142, 12147, 12097, 2509, 4989, 12111, 12117, 2521, 12153, 2529, 2533, 12158, 0}, 2, 1, 754, 241, {11981,2587,1245,1210,0,0,0,0,0,0,0,0,0,0},{12163,12182,2568,0,0,0,0,0},{331,274,0,0,0,0,0,0,0,0,0,0},{323,280,0,0,0,0,0,0,0}},
-       {12202, 9388, 323, 331, 12229, 1916, 12247, 12264, {12278, 12289, 12299, 12308, 12319, 12331, 12342}, {12352, 12355, 12358, 12361, 12364, 12367, 12370}, {2018, 2013, 2407, 2405, 7548, 2013, 2018}, {12373, 12383, 12394, 12400, 12409, 12415, 12423, 12431, 12439, 12450, 12459, 12469, 0}, {12479, 12489, 2428, 12500, 12509, 12515, 12523, 12531, 12539, 12550, 12559, 12569, 0}, {12579, 12585, 12394, 12591, 12409, 12596, 12602, 12608, 4292, 12613, 4303, 12618, 0}, {12579, 12585, 12394, 12591, 12409, 12596, 12602, 12608, 4292, 12613, 4303, 12618, 0}, 0, 1, 754, 241, {5713,12623,1210,0,0,0,0,0,0,0,0,0,0,0},{12202,0,0,0,0,0,0,0},{331,274,0,0,0,0,0,0,0,0,0,0},{323,280,0,0,0,0,0,0,0}},
-       {12633, 1210, 280, 274, 12655, 12670, 12682, 11886, {12688, 12700, 12712, 12724, 12738, 12753, 12766}, {12780, 12783, 12786, 12789, 12792, 12795, 9517}, {2018, 2013, 12798, 2405, 4511, 2013, 9526}, {12800, 12807, 12815, 12821, 12830, 12839, 12849, 12855, 12866, 12876, 12883, 12893, 0}, {12800, 12807, 12815, 12821, 12830, 12839, 12849, 12855, 12866, 12876, 12883, 12893, 0}, {12901, 12907, 12912, 12917, 12922, 12927, 12934, 12940, 12946, 12952, 12958, 12965, 0}, {12901, 12907, 12912, 12917, 12922, 12927, 12934, 12940, 12946, 12952, 12958, 12965, 0}, 2, 1, 2541, 241, {1747,1210,0,0,0,0,0,0,0,0,0,0,0,0},{12633,0,0,0,0,0,0,0},{274,0,0,0,0,0,0,0,0,0,0,0},{280,0,0,0,0,0,0,0,0}},
-       {12972, 2587, 280, 274, 1906, 55, 12990, 13002, {13014, 13029, 13044, 13059, 13076, 13095, 13106}, {13117, 13124, 13131, 13138, 13145, 13152, 13159}, {0, 0, 0, 0, 0, 0, 0}, {13166, 13177, 8702, 13190, 8724, 13201, 13208, 8749, 13215, 13230, 13243, 13254, 0}, {13166, 13177, 8702, 13190, 8724, 13201, 13208, 8749, 13215, 13230, 13243, 13254, 0}, {13267, 13274, 13281, 13288, 8724, 13201, 13208, 13295, 13302, 13309, 13316, 13323, 0}, {13267, 13274, 13281, 13288, 8724, 13201, 13208, 13295, 13302, 13309, 13316, 13323, 0}, 0, 1, 754, 241, {1245,1210,0,0,0,0,0,0,0,0,0,0,0,0},{3672,0,0,0,0,0,0,0},{331,274,0,0,0,0,0,0,0,0,0,0},{323,0,0,0,0,0,0,0,0}},
-       {13330, 243, 23, 35, 44, 352, 13349, 13369, {13386, 13399, 13412, 13428, 13445, 13460, 13469}, {13386, 13399, 13412, 13428, 13445, 13460, 13469}, {13478, 13481, 13484, 13487, 13490, 13493, 13496}, {13499, 13512, 13523, 13532, 13543, 13548, 13557, 13568, 13575, 13590, 13601, 13614, 0}, {13627, 13642, 13523, 13532, 13655, 13548, 13662, 13568, 13575, 13590, 13601, 13614, 0}, {13499, 13512, 13523, 13532, 13543, 13548, 13557, 13568, 13575, 13590, 13601, 13614, 0}, {13499, 13512, 13523, 13532, 13543, 13548, 13557, 13568, 13575, 13590, 13601, 13614, 0}, 0, 6, 239, 241, {3888,3879,0,0,0,0,0,0,0,0,0,0,0,0},{3909,3929,0,0,0,0,0,0},{35,274,0,0,0,0,0,0,0,0,0,0},{23,280,0,0,0,0,0,0,0}},
-       {5603, 243, 2936, 2947, 1906, 55, 13675, 13678, {13681, 13694, 13704, 13713, 13723, 13734, 13745}, {13757, 13760, 13765, 13770, 13775, 13780, 13785}, {13757, 13790, 13793, 13796, 13799, 13802, 13805}, {13808, 13817, 13826, 13835, 13844, 13853, 13862, 13871, 13880, 13889, 13899, 13909, 0}, {13919, 13928, 13937, 13946, 13955, 13964, 13973, 13982, 13991, 14000, 14010, 14020, 0}, {14030, 14036, 14042, 14048, 14054, 14060, 14066, 14072, 14078, 14084, 14091, 14098, 0}, {14030, 14036, 14042, 14048, 14054, 14060, 14066, 14072, 14078, 14084, 14091, 14098, 0}, 0, 1, 239, 241, {243,14,1236,2309,1210,0,0,0,0,0,0,0,0,0},{5603,0,0,0,0,0,0,0},{2947,35,331,274,0,0,0,0,0,0,0,0},{2936,23,323,280,0,0,0,0,0}},
-       {14105, 2587, 280, 274, 44, 352, 14118, 14142, {14166, 14179, 14200, 14219, 14240, 14259, 14272}, {14283, 14290, 14297, 14304, 14311, 14318, 14325}, {14332, 14335, 14335, 14338, 14341, 14344, 14349}, {14352, 14367, 14382, 14391, 14402, 14413, 14426, 14439, 14454, 14473, 14492, 14509, 0}, {14528, 14545, 14562, 14573, 14586, 14599, 14614, 14629, 14646, 14667, 14688, 14707, 0}, {14728, 14735, 14742, 14749, 14756, 14763, 14770, 14777, 14784, 14791, 14798, 14805, 0}, {14728, 14735, 14742, 14749, 14756, 14763, 14770, 14777, 14784, 14791, 14798, 14805, 0}, 0, 1, 754, 241, {2587,1245,14812,243,14822,3660,1210,0,0,0,0,0,0,0},{14105,2909,13330,5603,14833,14844,14856,14873},{331,274,0,0,0,0,0,0,0,0,0,0},{323,280,0,0,0,0,0,0,0}},
-       {14891, 2587, 280, 274, 1906, 352, 1924, 1927, {14913, 14919, 14933, 14956, 14970, 14986, 14993}, {15002, 15005, 15010, 15016, 15020, 7548, 15025}, {6687, 6675, 6677, 6679, 6681, 6683, 6685}, {15029, 15036, 10276, 15043, 3829, 15049, 15055, 15061, 15068, 15077, 15085, 15092, 0}, {15099, 15106, 15113, 15118, 15124, 15128, 15133, 15138, 15145, 15154, 15162, 15169, 0}, {15176, 7947, 2505, 2509, 15124, 15180, 15184, 15188, 15192, 2529, 15196, 15200, 0}, {15176, 7947, 2505, 2509, 15124, 15180, 15184, 15188, 15192, 2529, 15196, 15200, 0}, 0, 1, 754, 241, {2587,1245,2843,14,1210,0,0,0,0,0,0,0,0,0},{3672,5603,0,0,0,0,0,0},{331,274,0,0,0,0,0,0,0,0,0,0},{323,280,0,0,0,0,0,0,0}},
-       {15204, 1736, 323, 331, 15237, 15254, 1924, 1927, {15269, 15277, 15288, 15298, 15309, 15318, 15327}, {15337, 15341, 15345, 15349, 15353, 15357, 15361}, {15365, 12798, 12798, 12798, 2407, 2407, 2411}, {15367, 15377, 15385, 15393, 15401, 15409, 15416, 15424, 15432, 15439, 15445, 15452, 0}, {15460, 15471, 15480, 15489, 15498, 15507, 15515, 15524, 15533, 15541, 15548, 15556, 0}, {15565, 15570, 4936, 15575, 15580, 15585, 15590, 15595, 15600, 15605, 15610, 15615, 0}, {15565, 15570, 4936, 15575, 15580, 15585, 15590, 15595, 15600, 15605, 15610, 15615, 0}, 2, 1, 239, 241, {1736,1210,0,0,0,0,0,0,0,0,0,0,0,0},{15620,0,0,0,0,0,0,0},{274,0,0,0,0,0,0,0,0,0,0,0},{323,280,1324,0,0,0,0,0,0}},
-       {13330, 2587, 280, 274, 1906, 352, 15647, 15668, {15685, 394, 415, 8571, 15698, 15715, 15726}, {15739, 15747, 15755, 15761, 15769, 15777, 15785}, {519, 522, 525, 528, 531, 522, 528}, {15793, 547, 564, 573, 15808, 15815, 15824, 605, 618, 637, 654, 669, 0}, {15793, 547, 564, 573, 15808, 15815, 15824, 605, 618, 637, 654, 669, 0}, {15833, 15841, 15849, 702, 15808, 15857, 15865, 710, 718, 728, 736, 746, 0}, {15833, 15841, 15849, 702, 15808, 15857, 15865, 710, 718, 728, 736, 746, 0}, 0, 1, 754, 241, {2587,1245,1210,0,0,0,0,0,0,0,0,0,0,0},{13330,0,0,0,0,0,0,0},{274,0,0,0,0,0,0,0,0,0,0,0},{280,0,0,0,0,0,0,0,0}},
-       {5603, 14, 23, 35, 1906, 352, 0, 0, {15873, 15880, 15891, 15900, 15909, 15916, 15927}, {15937, 15941, 15945, 15949, 15953, 15956, 15960}, {0, 0, 0, 0, 0, 0, 0}, {15964, 15974, 15983, 15991, 16000, 16013, 16025, 16032, 16039, 16046, 16056, 16068, 0}, {15964, 15974, 15983, 15991, 16000, 16013, 16025, 16032, 16039, 16046, 16056, 16068, 0}, {16081, 16085, 16089, 16093, 16097, 16101, 16105, 16109, 16113, 16117, 16121, 16125, 0}, {16081, 16085, 16089, 16093, 16097, 16101, 16105, 16109, 16113, 16117, 16121, 16125, 0}, 0, 0, 239, 241, {1736,1779,1210,0,0,0,0,0,0,0,0,0,0,0},{5603,0,0,0,0,0,0,0},{35,2947,274,0,0,0,0,0,0,0,0,0},{23,2936,280,0,0,0,0,0,0}},
-       {5603, 1736, 23, 35, 1906, 352, 0, 0, {16129, 16134, 16140, 16150, 16162, 16170, 16181}, {16190, 16194, 16198, 16202, 16206, 16210, 16214}, {0, 0, 0, 0, 0, 0, 0}, {16218, 16228, 16238, 16245, 16252, 2725, 16257, 16264, 16271, 16280, 16288, 16296, 0}, {16218, 16228, 16238, 16245, 16252, 2725, 16257, 16264, 16271, 16280, 16288, 16296, 0}, {2778, 2782, 15960, 16304, 16308, 2795, 2799, 16312, 2807, 2811, 2815, 16316, 0}, {2778, 2782, 15960, 16304, 16308, 2795, 2799, 16312, 2807, 2811, 2815, 16316, 0}, 0, 0, 239, 241, {1736,1779,1210,0,0,0,0,0,0,0,0,0,0,0},{5603,0,0,0,0,0,0,0},{35,2947,274,0,0,0,0,0,0,0,0,0},{23,2936,280,0,0,0,0,0,0}},
-       {5603, 2309, 23, 35, 1906, 352, 1924, 1927, {16320, 16326, 16337, 16150, 16162, 16170, 16181}, {16347, 16351, 16355, 16202, 16206, 16210, 16214}, {2018, 2403, 16359, 2405, 2018, 5811, 2403}, {16361, 16371, 16382, 16389, 16398, 16404, 16410, 16418, 16426, 16437, 16447, 16456, 0}, {16465, 16228, 16474, 16480, 16252, 2725, 16257, 16264, 16487, 16280, 16288, 16296, 0}, {2778, 2782, 16497, 2791, 16308, 2795, 2799, 16312, 2807, 2811, 2815, 16316, 0}, {2778, 2782, 16497, 2791, 16308, 2795, 2799, 16312, 2807, 2811, 2815, 16316, 0}, 0, 0, 2541, 241, {1736,1779,1210,0,0,0,0,0,0,0,0,0,0,0},{5603,0,0,0,0,0,0,0},{35,2947,274,0,0,0,0,0,0,0,0,0},{23,2936,280,0,0,0,0,0,0}},
-       {5603, 1736, 23, 35, 1906, 352, 16501, 16505, {16509, 16516, 16524, 16532, 16541, 16551, 16558}, {2671, 16567, 2677, 16570, 2683, 16573, 2689}, {2018, 2403, 2692, 3804, 2692, 4091, 2018}, {16576, 16585, 16595, 2715, 10715, 16601, 16607, 16613, 2742, 2752, 2760, 10727, 0}, {16576, 16585, 16595, 2715, 10715, 16601, 16607, 16613, 2742, 2752, 2760, 10727, 0}, {2778, 2782, 3860, 2791, 10715, 2795, 2799, 2803, 2807, 2811, 2815, 10740, 0}, {2778, 2782, 3860, 2791, 10715, 2795, 2799, 2803, 2807, 2811, 2815, 10740, 0}, 0, 0, 239, 241, {1736,1779,1210,16622,0,0,0,0,0,0,0,0,0,0},{5603,0,0,0,0,0,0,0},{35,2947,274,0,0,0,0,0,0,0,0,0},{23,2936,280,0,0,0,0,0,0}},
-       {16634, 2587, 323, 331, 1906, 352, 1924, 1927, {16668, 16684, 16709, 16737, 16765, 16793, 16821}, {16840, 16850, 16860, 16870, 16880, 16890, 16900}, {16910, 16914, 16918, 16914, 16922, 16926, 16930}, {16934, 16956, 16984, 17000, 17019, 17035, 17054, 17073, 17095, 17126, 17154, 17179, 0}, {16934, 16956, 16984, 17000, 17019, 17035, 17054, 17073, 17095, 17126, 17154, 17179, 0}, {17207, 17217, 17227, 17237, 17247, 17257, 17267, 17277, 17287, 17297, 17307, 17317, 0}, {17207, 17217, 17227, 17237, 17247, 17257, 17267, 17277, 17287, 17297, 17307, 17317, 0}, 0, 1, 754, 241, {2587,1245,2843,14,1210,0,0,0,0,0,0,0,0,0},{17327,0,0,0,0,0,0,0},{331,274,0,0,0,0,0,0,0,0,0,0},{323,280,0,0,0,0,0,0,0}},
-       {1882, 2309, 280, 274, 1906, 352, 17359, 17364, {6012, 17369, 17380, 17390, 17400, 17410, 17424}, {17436, 17440, 17445, 17450, 17454, 17459, 17464}, {2018, 2403, 2405, 2403, 5811, 2409, 2411}, {2413, 2420, 4978, 6157, 4989, 2444, 2449, 2454, 2461, 2471, 2479, 6201, 0}, {2413, 2420, 4978, 6157, 4989, 2444, 2449, 2454, 2461, 2471, 2479, 6201, 0}, {2497, 2501, 2505, 2509, 4989, 2513, 2517, 2521, 2525, 2529, 2533, 7426, 0}, {2497, 2501, 2505, 2509, 4989, 2513, 2517, 2521, 2525, 2529, 2533, 7426, 0}, 2, 1, 2541, 241, {2309,1236,1210,0,0,0,0,0,0,0,0,0,0,0},{1882,0,0,0,0,0,0,0},{274,5085,0,0,0,0,0,0,0,0,0,0},{280,6558,0,0,0,0,0,0,0}},
-       {5603, 2309, 280, 274, 44, 55, 17468, 17484, {17494, 17513, 17532, 17554, 17573, 17595, 17620}, {17639, 17649, 17659, 17672, 17682, 17695, 17711}, {17721, 17725, 17732, 17739, 17746, 17753, 17760}, {17764, 17780, 17799, 17815, 17834, 17841, 17851, 17867, 17883, 17902, 17924, 17940, 0}, {17764, 17780, 17799, 17815, 17834, 17841, 17851, 17867, 17883, 17902, 17924, 17940, 0}, {17959, 17966, 17799, 17976, 17834, 17841, 17992, 18005, 18012, 18025, 18041, 18051, 0}, {17959, 17966, 17799, 17976, 17834, 17841, 17992, 18005, 18012, 18025, 18041, 18051, 0}, 0, 0, 2541, 241, {2309,1236,2270,2843,1210,0,0,0,0,0,0,0,0,0},{5603,3672,0,0,0,0,0,0},{274,331,1850,1842,0,0,0,0,0,0,0,0},{280,323,1870,1859,0,0,0,0,0}},
-       {18064, 243, 280, 274, 1906, 18089, 18103, 18106, {18109, 18118, 18127, 18137, 18147, 18157, 18169}, {18177, 18182, 18186, 18190, 18194, 18199, 18204}, {18208, 2405, 2405, 9756, 18208, 18211, 2018}, {18214, 18221, 18226, 2715, 18232, 18238, 18245, 18251, 18259, 18269, 18277, 18286, 0}, {18214, 18221, 18226, 2715, 18232, 18238, 18245, 18251, 18259, 18269, 18277, 18286, 0}, {2778, 18296, 3860, 2791, 18300, 18304, 18309, 18313, 18317, 18321, 2815, 18325, 0}, {2778, 18296, 3860, 2791, 18300, 18304, 18309, 18313, 18317, 18321, 2815, 18325, 0}, 0, 0, 239, 241, {243,1210,18330,7204,2927,0,0,0,0,0,0,0,0,0},{18064,18339,10078,0,0,0,0,0},{274,2947,331,35,0,0,0,0,0,0,0,0},{280,2936,323,23,0,0,0,0,0}},
-       {18358, 2587, 280, 274, 1906, 18382, 18395, 18400, {18405, 18417, 18428, 18442, 18454, 18464, 18474}, {18485, 18490, 18495, 18500, 18505, 18510, 18515}, {2018, 4091, 2403, 6354, 2692, 16359, 2411}, {18520, 18537, 18550, 18564, 18577, 18590, 18603, 18617, 18629, 18643, 18657, 18671, 0}, {18520, 18537, 18550, 18564, 18577, 18590, 18603, 18617, 18629, 18643, 18657, 18671, 0}, {18684, 18691, 18696, 18701, 18705, 18710, 18715, 18720, 18725, 18732, 18737, 18743, 0}, {18684, 18691, 18696, 18701, 18705, 18710, 18715, 18720, 18725, 18732, 18737, 18743, 0}, 2, 1, 754, 241, {2587,1245,2843,1210,0,0,0,0,0,0,0,0,0,0},{18748,0,0,0,0,0,0,0},{274,331,5085,0,0,0,0,0,0,0,0,0},{280,323,6558,0,0,0,0,0,0}},
-       {3909, 3703, 2936, 2947, 44, 19963, 1924, 1927, {19971, 19980, 19989, 19997, 20006, 20015, 20022}, {20031, 20034, 20037, 20040, 20043, 20047, 20050}, {6677, 6679, 6681, 6683, 12798, 15365, 6675}, {9983, 9991, 20053, 20059, 10715, 2725, 19107, 20066, 16271, 20073, 16288, 20080, 0}, {9983, 9991, 20053, 20059, 10715, 2725, 19107, 20066, 16271, 20073, 16288, 20080, 0}, {2778, 2782, 19103, 2791, 10715, 2795, 2799, 20088, 2807, 2811, 2815, 10740, 0}, {2778, 2782, 19103, 2791, 10715, 2795, 2799, 20088, 2807, 2811, 2815, 10740, 0}, 0, 0, 239, 241, {3703,3872,3879,3888,1779,1210,3899,0,0,0,0,0,0,0},{3909,3929,254,3943,0,0,0,0},{2947,35,331,274,0,0,0,0,0,0,0,0},{2936,23,323,280,0,0,0,0,0}},
-       {20092, 2587, 280, 274, 1906, 20110, 1924, 1927, {20117, 20127, 20136, 20145, 20156, 20166, 20171}, {20178, 20184, 20189, 20194, 20199, 10699, 20203}, {20208, 2692, 2018, 7548, 2013, 4089, 2018}, {15029, 15036, 10276, 15043, 3829, 20210, 20215, 20220, 15068, 15077, 15085, 15092, 0}, {15029, 15036, 10276, 15043, 3829, 20210, 20215, 20220, 15068, 15077, 15085, 15092, 0}, {20227, 20232, 3860, 2791, 3829, 20210, 20215, 20236, 10683, 2811, 20240, 20245, 0}, {20227, 20232, 3860, 2791, 3829, 20210, 20215, 20236, 10683, 2811, 20240, 20245, 0}, 0, 1, 754, 241, {20249,1245,2843,14,1210,0,0,0,0,0,0,0,0,0},{20092,3672,5603,0,0,0,0,0},{274,331,0,0,0,0,0,0,0,0,0,0},{280,323,0,0,0,0,0,0,0}},
-       {5603, 1236, 6558, 5085, 44, 352, 20260, 20288, {20310, 20329, 20348, 20373, 20392, 20426, 20451}, {20470, 20480, 20490, 20506, 20516, 20541, 20557}, {20567, 20571, 20578, 20582, 20589, 20596, 20603}, {20607, 20635, 20669, 20685, 20704, 20711, 20721, 20737, 20753, 20784, 20806, 20828, 0}, {20607, 20635, 20669, 20685, 20704, 20711, 20721, 20737, 20753, 20784, 20806, 20828, 0}, {20607, 20635, 20669, 20685, 20704, 20711, 20721, 20737, 20753, 20784, 20806, 20828, 0}, {20607, 20635, 20669, 20685, 20704, 20711, 20721, 20737, 20753, 20784, 20806, 20828, 0}, 0, 0, 2541, 241, {1236,2270,2843,2309,1210,0,0,0,0,0,0,0,0,0},{5603,3672,0,0,0,0,0,0},{5085,2285,20853,20862,0,0,0,0,0,0,0,0},{6558,2301,20870,20882,0,0,0,0,0}},
-       {5603, 1236, 280, 274, 44, 55, 1924, 1927, {21362, 21381, 21400, 21422, 21441, 21463, 21488}, {21507, 21517, 21527, 21540, 21550, 21563, 21579}, {21589, 21593, 21600, 21607, 21614, 21621, 21628}, {21632, 21660, 21688, 21704, 21723, 21730, 21740, 21756, 21772, 21800, 21822, 21844, 0}, {21632, 21660, 21688, 21704, 21723, 21730, 21740, 21756, 21772, 21800, 21822, 21844, 0}, {21869, 21888, 21688, 21704, 21723, 21730, 21740, 21907, 21914, 21930, 21946, 21956, 0}, {21869, 21888, 21688, 21704, 21723, 21730, 21740, 21907, 21914, 21930, 21946, 21956, 0}, 0, 0, 2541, 241, {1236,2270,2843,2309,1210,0,0,0,0,0,0,0,0,0},{5603,3672,0,0,0,0,0,0},{274,331,1850,1842,0,0,0,0,0,0,0,0},{280,323,1870,1859,0,0,0,0,0}},
-       {5603, 1236, 280, 274, 44, 55, 7992, 21969, {21972, 21991, 22010, 22035, 22054, 22076, 22101}, {22120, 22130, 22140, 22156, 22166, 22179, 22195}, {22205, 22209, 22216, 22220, 22227, 22234, 22241}, {22245, 22267, 22298, 22320, 22339, 22346, 22356, 22372, 22388, 22419, 22441, 22463, 0}, {22245, 22267, 22298, 22320, 22339, 22346, 22356, 22372, 22388, 22419, 22441, 22463, 0}, {6675, 6677, 6679, 6681, 6683, 6685, 6687, 6689, 6691, 6693, 6696, 6699, 0}, {6675, 6677, 6679, 6681, 6683, 6685, 6687, 6689, 6691, 6693, 6696, 6699, 0}, 0, 0, 2541, 241, {1236,2270,2843,2309,1210,0,0,0,0,0,0,0,0,0},{5603,3672,0,0,0,0,0,0},{274,331,1850,1842,0,0,0,0,0,0,0,0},{280,323,1870,1859,0,0,0,0,0}},
-       {5603, 2309, 280, 274, 1906, 352, 22488, 22513, {22538, 22557, 22579, 22604, 22620, 22642, 22661}, {22671, 22678, 22685, 22692, 22699, 22706, 22713}, {22671, 22678, 22685, 22692, 22699, 22706, 22713}, {22717, 22733, 22758, 22777, 22796, 22803, 22816, 22829, 22848, 22879, 22904, 22926, 0}, {22717, 22733, 22758, 22777, 22796, 22803, 22816, 22951, 22848, 22879, 22904, 22926, 0}, {22970, 22978, 22992, 23006, 22796, 22803, 22816, 23017, 23025, 23039, 23050, 23058, 0}, {22970, 22978, 22992, 23006, 22796, 22803, 22816, 23017, 23025, 23039, 23050, 23058, 0}, 0, 0, 2541, 241, {2309,1236,2270,2843,1210,0,0,0,0,0,0,0,0,0},{5603,3672,0,0,0,0,0,0},{274,331,1850,1842,0,0,0,0,0,0,0,0},{280,323,1870,1859,0,0,0,0,0}},
-       {5603, 1236, 280, 274, 44, 3712, 1924, 1927, {23069, 23091, 23113, 23138, 23160, 23185, 23213}, {23235, 23245, 23255, 23268, 23278, 23291, 23307}, {23317, 23321, 23328, 23332, 23339, 23346, 23353}, {23357, 23373, 23398, 23417, 23439, 23446, 23459, 23472, 23491, 23522, 23547, 23566, 0}, {23357, 23373, 23398, 23417, 23439, 23446, 23591, 23472, 23491, 23522, 23547, 23566, 0}, {23604, 23611, 23398, 23627, 23439, 23446, 23591, 23472, 23643, 23665, 23681, 23691, 0}, {23604, 23611, 23398, 23627, 23439, 23446, 23591, 23472, 23643, 23665, 23681, 23691, 0}, 0, 0, 2541, 241, {1236,2270,2843,2309,1210,0,0,0,0,0,0,0,0,0},{5603,3672,0,0,0,0,0,0},{274,331,1850,1842,0,0,0,0,0,0,0,0},{280,323,1870,1859,0,0,0,0,0}},
-       {5603, 1236, 280, 274, 44, 3712, 1924, 1927, {23707, 23726, 23745, 23767, 23786, 23808, 23833}, {23852, 23862, 23872, 23885, 23895, 23908, 23924}, {23934, 23938, 23945, 23952, 23959, 23966, 23973}, {23977, 23993, 24018, 24037, 24059, 24066, 24079, 24092, 24111, 24139, 24164, 24186, 0}, {23977, 23993, 24018, 24037, 24059, 24066, 24079, 24092, 24111, 24139, 24164, 24186, 0}, {24211, 24219, 24239, 24246, 24059, 24263, 24270, 24278, 24286, 24309, 24326, 24340, 0}, {24211, 24219, 24239, 24246, 24059, 24263, 24270, 24278, 24286, 24309, 24326, 24340, 0}, 0, 0, 2541, 241, {1236,2270,2843,2309,1210,0,0,0,0,0,0,0,0,0},{5603,3672,0,0,0,0,0,0},{274,331,1850,1842,0,0,0,0,0,0,0,0},{280,323,1870,1859,0,0,0,0,0}},
-       {5603, 1236, 6558, 5085, 44, 19963, 1924, 1927, {24357, 24385, 24419, 24447, 24475, 24506, 24543}, {24571, 24584, 24603, 24619, 24632, 24651, 24670}, {24680, 24687, 24694, 24701, 24708, 24721, 24728}, {24732, 24751, 24779, 24801, 24820, 24833, 24843, 24856, 24881, 24912, 24937, 24953, 0}, {24732, 24751, 24779, 24801, 24820, 24833, 24843, 24856, 24881, 24912, 24937, 24953, 0}, {24972, 24982, 25001, 25011, 24820, 24833, 24843, 25027, 25034, 25059, 25075, 25085, 0}, {24972, 24982, 25001, 25011, 24820, 24833, 24843, 25027, 25034, 25059, 25075, 25085, 0}, 0, 0, 2541, 241, {1236,2270,2843,2309,1210,0,0,0,0,0,0,0,0,0},{5603,3672,0,0,0,0,0,0},{5085,2285,20853,20862,0,0,0,0,0,0,0,0},{6558,2301,20870,20882,0,0,0,0,0}},
-       {25098, 2309, 1859, 1842, 25117, 352, 25125, 25153, {25175, 25194, 25213, 25238, 25257, 25291, 25316}, {25335, 20480, 20490, 20506, 25345, 25370, 20557}, {0, 0, 0, 0, 0, 0, 0}, {25386, 25411, 25442, 25458, 20704, 20711, 20721, 25477, 25493, 25524, 25546, 25568, 0}, {25386, 25411, 25442, 25458, 20704, 20711, 20721, 25477, 25493, 25524, 25546, 25568, 0}, {25593, 25606, 25442, 25458, 20704, 20711, 20721, 25625, 25632, 25648, 25664, 25674, 0}, {25593, 25606, 25442, 25458, 20704, 20711, 20721, 25625, 25632, 25648, 25664, 25674, 0}, 0, 0, 2541, 241, {2309,0,0,0,0,0,0,0,0,0,0,0,0,0},{25098,0,0,0,0,0,0,0},{1842,1850,0,0,0,0,0,0,0,0,0,0},{1859,1870,0,0,0,0,0,0,0}},
-       {5603, 2309, 280, 274, 44, 55, 1924, 1927, {17494, 17513, 25687, 17554, 17573, 17595, 17620}, {17639, 17649, 25709, 17672, 17682, 17695, 17711}, {17721, 17725, 17732, 17739, 17746, 17753, 17760}, {25722, 25747, 17799, 25778, 25797, 17841, 25804, 25817, 25833, 25858, 25880, 25908, 0}, {25722, 25747, 17799, 25778, 25797, 17841, 25804, 25817, 25833, 25858, 25880, 25908, 0}, {25930, 25943, 17799, 25962, 25797, 17841, 25804, 25978, 25985, 26004, 26020, 26042, 0}, {25930, 25943, 17799, 25962, 25797, 17841, 25804, 25978, 25985, 26004, 26020, 26042, 0}, 0, 0, 2541, 241, {2309,1236,2270,2843,1210,0,0,0,0,0,0,0,0,0},{5603,3672,0,0,0,0,0,0},{274,331,1850,1842,0,0,0,0,0,0,0,0},{280,323,1870,1859,0,0,0,0,0}},
-       {26784, 1366, 280, 274, 26827, 26860, 26884, 26906, {26931, 26959, 26987, 27024, 27055, 27089, 27114}, {27148, 27164, 27180, 27205, 27224, 27246, 27259}, {27281, 27288, 27295, 27302, 27309, 27316, 27320}, {27330, 27364, 27401, 27435, 27469, 27500, 27537, 27574, 27614, 27648, 27682, 27731, 0}, {27330, 27364, 27401, 27435, 27469, 27500, 27537, 27574, 27614, 27648, 27682, 27731, 0}, {27780, 27793, 27806, 27819, 27832, 27845, 27858, 27871, 27884, 27897, 27913, 27929, 0}, {27780, 27793, 27806, 27819, 27832, 27845, 27858, 27871, 27884, 27897, 27913, 27929, 0}, 0, 0, 239, 241, {1366,1718,1727,1747,1210,1736,1758,1765,1772,0,0,0,0,0},{26784,27945,0,0,0,0,0,0},{274,0,0,0,0,0,0,0,0,0,0,0},{280,0,0,0,0,0,0,0,0}},
-       {3672, 14, 280, 274, 1906, 352, 1924, 1927, {27993, 28002, 28012, 28024, 28037, 28046, 28058}, {28070, 28074, 28079, 28083, 28087, 28091, 28095}, {2018, 28099, 2403, 2403, 15365, 6354, 2018}, {28102, 28109, 28118, 28125, 2721, 28132, 28140, 28151, 28156, 28161, 28168, 28177, 0}, {28102, 28109, 28118, 28125, 2721, 28132, 28140, 28151, 28156, 28161, 28168, 28177, 0}, {28185, 28189, 28079, 28193, 2721, 28197, 28201, 28151, 28156, 28205, 28209, 28214, 0}, {28185, 28189, 28079, 28193, 2721, 28197, 28201, 28151, 28156, 28205, 28209, 28214, 0}, 2, 1, 239, 241, {243,14,1229,2843,1210,0,0,0,0,0,0,0,0,0},{5603,3672,0,0,0,0,0,0},{274,331,35,2947,0,0,0,0,0,0,0,0},{280,323,23,2936,0,0,0,0,0}},
-       {3672, 14, 280, 331, 28219, 352, 28254, 28270, {28286, 28308, 28321, 28340, 28350, 28381, 28397}, {28286, 28308, 28321, 28340, 28350, 28381, 28397}, {6675, 6677, 6679, 6681, 6683, 6685, 6687}, {28410, 28423, 28442, 28455, 28468, 28481, 28500, 28519, 28532, 28548, 28561, 28586, 0}, {28410, 28423, 28442, 28455, 28468, 28481, 28500, 28519, 28532, 28548, 28561, 28586, 0}, {28410, 28423, 28442, 28455, 28468, 28481, 28500, 28519, 28532, 28548, 28561, 28586, 0}, {28410, 28423, 28442, 28455, 28468, 28481, 28500, 28519, 28532, 28548, 28561, 28586, 0}, 0, 0, 239, 241, {1210,0,0,0,0,0,0,0,0,0,0,0,0,0},{3672,10090,0,0,0,0,0,0},{28599,0,0,0,0,0,0,0,0,0,0,0},{280,0,0,0,0,0,0,0,0}},
-       {5603, 243, 280, 274, 1906, 352, 28607, 28632, {28657, 28682, 28701, 28729, 28748, 28773, 28792}, {28657, 28682, 28701, 28729, 28748, 28773, 28792}, {28814, 28818, 28822, 28826, 28836, 28840, 28850}, {28854, 28873, 28889, 28902, 28915, 28937, 28956, 28978, 28994, 29010, 29023, 29039, 0}, {28854, 28873, 28889, 28902, 28915, 28937, 28956, 28978, 28994, 29010, 29023, 29039, 0}, {29055, 29064, 29073, 29082, 29091, 29100, 29112, 29121, 29130, 29139, 29148, 29157, 0}, {29055, 29064, 29073, 29082, 29091, 29100, 29112, 29121, 29130, 29139, 29148, 29157, 0}, 0, 0, 239, 241, {243,1210,0,0,0,0,0,0,0,0,0,0,0,0},{5603,0,0,0,0,0,0,0},{28599,0,0,0,0,0,0,0,0,0,0,0},{280,0,0,0,0,0,0,0,0}},
-       {4313, 243, 323, 331, 947, 3985, 7213, 7218, {3997, 29166, 4011, 29171, 29181, 29187, 4044}, {29194, 8356, 3860, 29198, 29203, 29207, 29211}, {2692, 2411, 2403, 2403, 29216, 4091, 2018}, {29218, 29226, 4107, 4113, 29235, 29240, 29246, 4136, 29252, 29261, 29269, 29278, 0}, {29287, 29295, 4196, 1102, 7895, 29304, 29310, 4219, 7912, 7921, 7929, 29316, 0}, {29325, 2782, 3860, 29329, 2721, 29333, 29338, 20088, 18317, 29342, 2815, 3868, 0}, {29325, 2782, 3860, 29329, 2721, 29333, 29338, 20088, 18317, 29342, 2815, 3868, 0}, 2, 1, 239, 241, {243,14,1221,1229,1236,1245,1210,0,0,0,0,0,0,0},{4313,4342,4369,0,0,0,0,0},{331,274,35,1312,0,0,0,0,0,0,0,0},{323,280,23,1324,0,0,0,0,0}},
-       {5603, 2309, 280, 274, 44, 55, 29346, 29358, {29370, 17513, 29398, 17554, 17573, 17595, 17620}, {17639, 17649, 25709, 17672, 17682, 17695, 17711}, {0, 0, 0, 0, 0, 0, 0}, {25722, 25747, 17799, 25778, 25797, 17841, 25804, 29417, 29433, 29461, 25880, 25908, 0}, {25722, 25747, 17799, 25778, 25797, 17841, 25804, 29417, 29433, 29461, 25880, 25908, 0}, {6675, 6677, 6679, 6681, 6683, 6685, 6687, 6689, 6691, 6693, 6696, 6699, 0}, {6675, 6677, 6679, 6681, 6683, 6685, 6687, 6689, 6691, 6693, 6696, 6699, 0}, 0, 0, 2541, 241, {2309,1236,2270,2843,1210,0,0,0,0,0,0,0,0,0},{5603,3672,0,0,0,0,0,0},{274,331,1850,1842,0,0,0,0,0,0,0,0},{280,323,1870,1859,0,0,0,0,0}},
-       {29483, 1210, 1859, 1842, 29531, 19963, 29541, 29553, {29562, 29578, 29594, 29622, 29638, 29681, 29706}, {29562, 29578, 29734, 29622, 29744, 29766, 29779}, {29789, 29793, 29797, 29801, 29805, 29818, 29825}, {29832, 29851, 29876, 29895, 29920, 29933, 29946, 29959, 29981, 30015, 30040, 30068, 0}, {29832, 29851, 29876, 29895, 29920, 29933, 29946, 29959, 29981, 30015, 30040, 30068, 0}, {30096, 30103, 30113, 29895, 29920, 29933, 29946, 30126, 30136, 30149, 30159, 30172, 0}, {30096, 30103, 30113, 29895, 29920, 29933, 29946, 30126, 30136, 30149, 30159, 30172, 0}, 0, 1, 2541, 241, {1210,1736,1779,243,14,0,0,0,0,0,0,0,0,0},{29483,0,0,0,0,0,0,0},{2947,35,331,274,0,0,0,0,0,0,0,0},{2936,23,323,280,0,0,0,0,0}},
-       {30185, 2927, 2936, 2947, 1906, 30217, 30233, 30243, {30256, 30266, 30273, 30286, 30296, 30306, 30316}, {30256, 30266, 30326, 30286, 30296, 30306, 30316}, {30336, 30340, 30344, 30348, 30352, 30356, 30360}, {30364, 30380, 30396, 30406, 30419, 30426, 30433, 30443, 30456, 30475, 30491, 30507, 0}, {30364, 30380, 30396, 30406, 30419, 30426, 30433, 30443, 30456, 30523, 30491, 30507, 0}, {30542, 30552, 30396, 30562, 30419, 30426, 30433, 30572, 30582, 30592, 30602, 30612, 0}, {30542, 30552, 30396, 30562, 30419, 30426, 30433, 30572, 30582, 30592, 30602, 30612, 0}, 0, 0, 239, 241, {2927,1210,0,0,0,0,0,0,0,0,0,0,0,0},{30185,0,0,0,0,0,0,0},{2947,0,0,0,0,0,0,0,0,0,0,0},{2936,0,0,0,0,0,0,0,0}},
-       {3909, 3703, 2936, 2947, 30858, 55, 30868, 30909, {30950, 30969, 30988, 31013, 31032, 31054, 31079}, {31098, 17649, 31108, 17672, 31124, 17695, 17711}, {31137, 17725, 31141, 17739, 31145, 17753, 17760}, {17764, 31152, 17799, 31180, 25797, 31199, 17851, 31209, 31225, 31256, 31278, 31303, 0}, {17764, 31152, 17799, 31180, 25797, 31199, 17851, 31209, 31225, 31256, 31278, 31303, 0}, {17764, 31152, 17799, 31180, 25797, 31199, 17851, 31209, 31225, 31256, 31278, 31303, 0}, {17764, 31152, 17799, 31180, 25797, 31199, 17851, 31209, 31225, 31256, 31278, 31303, 0}, 0, 0, 239, 241, {3703,3872,3879,3888,1779,1210,3899,0,0,0,0,0,0,0},{3909,3929,254,3943,0,0,0,0},{2947,35,331,274,0,0,0,0,0,0,0,0},{2936,23,323,280,0,0,0,0,0}},
-       {31328, 1366, 2936, 2947, 1906, 352, 0, 0, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {31349, 31356, 31365, 31380, 31391, 31400, 31407, 31414, 31421, 31432, 31445, 31458, 0}, {31349, 31356, 31365, 31380, 31391, 31400, 31407, 31414, 31421, 31432, 31445, 31458, 0}, {6675, 6677, 6679, 6681, 6683, 6685, 6687, 6689, 6691, 6693, 6696, 6699, 0}, {6675, 6677, 6679, 6681, 6683, 6685, 6687, 6689, 6691, 6693, 6696, 6699, 0}, 0, 6, 239, 241, {14,243,0,0,0,0,0,0,0,0,0,0,0,0},{243,1,254,31463,0,0,0,0},{2947,331,0,0,0,0,0,0,0,0,0,0},{2936,323,0,0,0,0,0,0,0}},
-       {3909, 3703, 2936, 2947, 44, 31481, 1924, 1927, {31487, 31494, 31500, 31507, 31518, 31526, 31535}, {31542, 8356, 3860, 31546, 31550, 31554, 10703}, {2411, 2411, 2403, 2403, 5811, 16359, 2018}, {4093, 31558, 31566, 4113, 4119, 31572, 31578, 4136, 31584, 31594, 31602, 31612, 0}, {4093, 31558, 31566, 4113, 4119, 31572, 31578, 4136, 31584, 31594, 31602, 31612, 0}, {31622, 31626, 3860, 29329, 3829, 31630, 31634, 20088, 18317, 2811, 31638, 16316, 0}, {31622, 31626, 3860, 29329, 3829, 31630, 31634, 20088, 18317, 2811, 31638, 16316, 0}, 0, 0, 239, 241, {3703,3872,3879,3888,1779,1210,3899,0,0,0,0,0,0,0},{3909,3929,254,3943,0,0,0,0},{2947,35,331,274,0,0,0,0,0,0,0,0},{2936,23,323,280,0,0,0,0,0}},
-       {3909, 2927, 2936, 2947, 44, 352, 0, 0, {31642, 31649, 31657, 31664, 31671, 31679, 31687}, {31694, 31697, 31700, 31703, 31706, 31709, 31712}, {2411, 2411, 2405, 2411, 12798, 4089, 12798}, {31715, 31723, 31733, 31739, 31747, 31752, 31757, 31762, 31769, 20073, 31777, 31785, 0}, {31715, 31723, 31733, 31739, 31747, 31752, 31757, 31762, 31769, 20073, 31777, 31785, 0}, {2778, 31793, 3860, 31797, 3829, 30821, 30825, 31801, 3800, 2811, 31805, 16316, 0}, {2778, 31793, 3860, 31797, 3829, 30821, 30825, 31801, 3800, 2811, 31805, 16316, 0}, 0, 0, 239, 241, {2927,1229,14,243,1779,1210,3899,0,0,0,0,0,0,0},{3909,3929,254,3943,0,0,0,0},{2947,35,331,274,0,0,0,0,0,0,0,0},{2936,23,323,280,0,0,0,0,0}},
-       {254, 2927, 2936, 2947, 30858, 55, 31809, 31820, {31830, 31848, 31863, 31885, 31898, 31912, 31929}, {31953, 31961, 31966, 31885, 31898, 31978, 31985}, {0, 0, 0, 0, 0, 0, 0}, {31999, 32021, 32037, 32057, 32071, 32088, 32103, 32120, 32134, 32147, 32166, 32180, 0}, {31999, 32021, 32037, 32057, 32071, 32088, 32103, 32120, 32134, 32147, 32166, 32180, 0}, {32199, 32214, 32223, 32236, 32243, 32253, 32261, 32271, 32278, 32284, 32296, 32303, 0}, {32199, 32214, 32223, 32236, 32243, 32253, 32261, 32271, 32278, 32284, 32296, 32303, 0}, 0, 0, 239, 241, {2927,1229,14,243,1779,1210,3899,0,0,0,0,0,0,0},{3909,3929,254,3943,0,0,0,0},{2947,35,331,274,0,0,0,0,0,0,0,0},{2936,23,323,280,0,0,0,0,0}},
-       {5603, 14, 23, 35, 1906, 3712, 0, 0, {32315, 32323, 15891, 15900, 15909, 32334, 32344}, {16347, 15941, 15945, 15949, 15953, 16210, 32353}, {0, 0, 0, 0, 0, 0, 0}, {32357, 32366, 32376, 32384, 10715, 3833, 32392, 32398, 32407, 32416, 32425, 32434, 0}, {32357, 32366, 32376, 32384, 10715, 3833, 32392, 32398, 32407, 32416, 32425, 32434, 0}, {2778, 2782, 15960, 32443, 10715, 2795, 2799, 20088, 18317, 2811, 32447, 16316, 0}, {2778, 2782, 15960, 32443, 10715, 2795, 2799, 20088, 18317, 2811, 32447, 16316, 0}, 0, 0, 239, 241, {1736,1779,1210,0,0,0,0,0,0,0,0,0,0,0},{5603,0,0,0,0,0,0,0},{35,2947,274,0,0,0,0,0,0,0,0,0},{23,2936,280,0,0,0,0,0,0}},
-       {32451, 2309, 280, 274, 1906, 32470, 32483, 32488, {32493, 32500, 32515, 32529, 32545, 32560, 32576}, {6350, 32591, 2505, 32595, 32599, 32603, 32607}, {2018, 12798, 2403, 2013, 2018, 2405, 12798}, {7302, 7310, 32611, 32618, 32625, 2444, 2449, 32630, 32640, 32651, 32660, 32670, 0}, {7302, 7310, 32611, 32618, 32625, 2444, 2449, 32630, 32640, 32651, 32660, 32670, 0}, {2497, 2501, 2505, 2509, 2440, 2513, 2517, 2521, 2525, 2529, 2533, 2537, 0}, {2497, 2501, 2505, 2509, 2440, 2513, 2517, 2521, 2525, 2529, 2533, 2537, 0}, 0, 0, 2541, 241, {2309,1236,1210,2543,0,0,0,0,0,0,0,0,0,0},{1882,2554,0,0,0,0,0,0},{274,331,0,0,0,0,0,0,0,0,0,0},{280,323,0,0,0,0,0,0,0}},
-       {3909, 2927, 2290, 2277, 44, 352, 32680, 32685, {32690, 32706, 32714, 32722, 32731, 32743, 32753}, {32763, 32769, 32775, 32779, 32783, 32791, 3800}, {0, 0, 0, 0, 0, 0, 0}, {32798, 32811, 32825, 32834, 32840, 32844, 32849, 32857, 16271, 32870, 16288, 16296, 0}, {32798, 32811, 32825, 32834, 32840, 32844, 32849, 32857, 16271, 32870, 16288, 16296, 0}, {32879, 2782, 32883, 16304, 32840, 32887, 2799, 32891, 2807, 32899, 2815, 16316, 0}, {32879, 2782, 32883, 16304, 32840, 32887, 2799, 32891, 2807, 32899, 2815, 16316, 0}, 0, 0, 239, 241, {2927,1229,14,243,1779,1210,3899,0,0,0,0,0,0,0},{3909,3929,254,3943,0,0,0,0},{2947,35,331,274,0,0,0,0,0,0,0,0},{2936,23,323,280,0,0,0,0,0}},
-       {32905, 1366, 1859, 1842, 32929, 32946, 32973, 32980, {32987, 32997, 33007, 33017, 33027, 33037, 33047}, {33057, 33064, 33071, 33078, 33085, 33092, 33099}, {33106, 33110, 33114, 33118, 33122, 33126, 33130}, {33134, 33141, 33148, 33155, 33162, 33169, 33176, 33183, 33190, 33197, 33204, 33214, 0}, {33134, 33141, 33148, 33155, 33162, 33169, 33176, 33183, 33190, 33197, 33204, 33214, 0}, {6675, 6677, 6679, 6681, 6683, 6685, 6687, 6689, 6691, 6693, 6696, 6699, 0}, {6675, 6677, 6679, 6681, 6683, 6685, 6687, 6689, 6691, 6693, 6696, 6699, 0}, 0, 0, 239, 241, {1366,1718,1727,1747,1210,1736,0,0,0,0,0,0,0,0},{32905,33224,33254,0,0,0,0,0},{1842,331,0,0,0,0,0,0,0,0,0,0},{323,280,0,0,0,0,0,0,0}},
-       {4857, 243, 280, 274, 1906, 352, 0, 0, {28070, 8356, 33284, 33291, 33301, 33306, 33313}, {33320, 6334, 33324, 4941, 33329, 33334, 33339}, {4490, 33344, 33347, 33350, 33353, 33356, 33359}, {33362, 33369, 33284, 33380, 33386, 33390, 33399, 33406, 33411, 33420, 33425, 33428, 0}, {33362, 33369, 33284, 33380, 33386, 33390, 33399, 33406, 33411, 33420, 33425, 33428, 0}, {33434, 33438, 33445, 28193, 33386, 33450, 33455, 33406, 33460, 33420, 33425, 33465, 0}, {33434, 33438, 33445, 28193, 33386, 33450, 33455, 33406, 33460, 33420, 33425, 33465, 0}, 2, 1, 239, 241, {243,14,1245,1236,1210,0,0,0,0,0,0,0,0,0},{4857,5076,3672,0,0,0,0,0},{274,331,5085,5091,5101,0,0,0,0,0,0,0},{280,323,0,0,0,0,0,0,0}},
-       {33622, 2587, 323, 331, 33657, 33673, 33691, 33696, {33701, 33726, 33755, 33780, 33793, 33808, 33825}, {33840, 33845, 33850, 33855, 33860, 33865, 8657}, {19346, 19346, 33870, 8668, 8671, 19346, 8668}, {33873, 33892, 33907, 33929, 33949, 33965, 33981, 33995, 34021, 34045, 34062, 34079, 0}, {33873, 33892, 33907, 33929, 33949, 33965, 33981, 33995, 34021, 34045, 34062, 34079, 0}, {34096, 34105, 34114, 34128, 34142, 34154, 34166, 34176, 34192, 34206, 34213, 34220, 0}, {34096, 34105, 34114, 34128, 34142, 34154, 34166, 34176, 34192, 34206, 34213, 34220, 0}, 0, 1, 754, 241, {34227,34238,2843,3879,34247,0,0,0,0,0,0,0,0,0},{34258,34276,0,0,0,0,0,0},{331,274,0,0,0,0,0,0,0,0,0,0},{323,280,0,0,0,0,0,0,0}},
-       {34295, 14812, 323, 331, 1906, 19963, 0, 0, {34315, 34327, 34338, 34350, 34362, 34372, 34384}, {34399, 34404, 34409, 34414, 34419, 34424, 34429}, {0, 0, 0, 0, 0, 0, 0}, {34434, 34443, 34455, 34463, 34468, 34478, 34485, 34494, 34501, 34507, 34516, 34527, 0}, {34434, 34443, 34455, 34463, 34468, 34478, 34485, 34494, 34501, 34507, 34516, 34527, 0}, {34535, 34540, 34545, 34550, 34555, 34560, 34565, 34419, 34570, 34575, 34580, 34585, 0}, {34535, 34540, 34545, 34550, 34555, 34560, 34565, 34419, 34570, 34575, 34580, 34585, 0}, 0, 0, 239, 241, {3703,3872,3879,3888,1779,1210,3899,0,0,0,0,0,0,0},{3909,3929,254,3943,0,0,0,0},{2947,35,331,274,0,0,0,0,0,0,0,0},{2936,23,323,280,0,0,0,0,0}},
-       {5603, 243, 280, 274, 1906, 352, 34590, 34592, {34594, 34607, 34615, 34624, 34634, 34644, 34653}, {34665, 34669, 34673, 34677, 34681, 34685, 34689}, {2692, 2411, 2403, 7548, 12798, 5811, 2018}, {34693, 34707, 34718, 34727, 34738, 34750, 34764, 34776, 34789, 34802, 34814, 34827, 0}, {34693, 34707, 34718, 34727, 34738, 34750, 34764, 34776, 34789, 34802, 34814, 34827, 0}, {34841, 34846, 34852, 34858, 34863, 34869, 34875, 34880, 34886, 34891, 19049, 34897, 0}, {34841, 34846, 34852, 34858, 34863, 34869, 34875, 34880, 34886, 34891, 19049, 34897, 0}, 2, 1, 239, 241, {243,14,1229,2843,1210,0,0,0,0,0,0,0,0,0},{5603,3672,0,0,0,0,0,0},{274,331,35,2947,0,0,0,0,0,0,0,0},{280,323,23,2936,0,0,0,0,0}},
-       {3943, 243, 23, 35, 44, 55, 0, 0, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {34952, 34976, 34985, 34994, 35005, 35014, 35027, 35036, 35041, 35052, 35074, 35098, 0}, {34952, 34976, 34985, 34994, 35005, 35014, 35027, 35036, 35041, 35052, 35074, 35098, 0}, {34952, 34976, 34985, 34994, 35005, 35014, 35027, 35036, 35041, 35052, 35074, 35098, 0}, {34952, 34976, 34985, 34994, 35005, 35014, 35027, 35036, 35041, 35052, 35074, 35098, 0}, 0, 6, 239, 241, {243,14,1210,0,0,0,0,0,0,0,0,0,0,0},{3943,254,0,0,0,0,0,0},{35,274,0,0,0,0,0,0,0,0,0,0},{23,280,0,0,0,0,0,0,0}},
-       {1344, 1366, 323, 331, 1375, 1391, 1404, 1411, {1418, 1428, 1438, 1448, 1458, 1468, 1478}, {1488, 1495, 1502, 1509, 1516, 1523, 1530}, {1537, 1541, 1545, 1549, 1553, 1557, 1561}, {1565, 1572, 1579, 1586, 1593, 1600, 1607, 1614, 1621, 1628, 1635, 1645, 0}, {1565, 1572, 1579, 1586, 1593, 1600, 1607, 1614, 1621, 1628, 1635, 1645, 0}, {1655, 1660, 1665, 1670, 1675, 1680, 1685, 1690, 1695, 1700, 1706, 1712, 0}, {1655, 1660, 1665, 1670, 1675, 1680, 1685, 1690, 1695, 1700, 1706, 1712, 0}, 0, 0, 239, 241, {1366,1718,1727,1210,1736,1747,1758,1765,1772,1779,0,0,0,0},{1344,1788,1815,0,0,0,0,0},{331,274,1842,1850,0,0,0,0,0,0,0,0},{323,280,1859,1870,0,0,0,0,0}},
-       {2568, 2587, 280, 274, 1906, 1916, 2598, 2604, {2611, 2619, 2626, 2635, 2644, 2655, 2663}, {2671, 2674, 2677, 2680, 2683, 2686, 2689}, {2018, 2403, 2692, 2403, 2692, 2409, 2018}, {2694, 2701, 2709, 2715, 2721, 2725, 2730, 2735, 2742, 2752, 2760, 2769, 0}, {2694, 2701, 2709, 2715, 2721, 2725, 2730, 2735, 2742, 2752, 2760, 2769, 0}, {2778, 2782, 2786, 2791, 2721, 2795, 2799, 2803, 2807, 2811, 2815, 2819, 0}, {2778, 2782, 2786, 2791, 2721, 2795, 2799, 2803, 2807, 2811, 2815, 2819, 0}, 2, 1, 754, 241, {2587,1245,2835,35120,2843,1210,0,0,0,0,0,0,0,0},{2568,1882,35130,0,0,0,0,0},{274,331,8214,8204,2862,8237,8242,8223,8229,0,0,0},{280,323,8274,8287,2887,2873,2902,0,0}},
-       {5603, 243, 280, 274, 1906, 352, 7992, 21969, {3719, 3726, 3733, 3741, 3751, 3760, 3767}, {3776, 3780, 3784, 3788, 3792, 3796, 3800}, {2018, 2403, 2405, 3804, 2405, 2409, 2018}, {3806, 3814, 3823, 2715, 3829, 3833, 3838, 2735, 2742, 3843, 2760, 3851, 0}, {3806, 3814, 3823, 2715, 3829, 3833, 3838, 2735, 2742, 3843, 2760, 3851, 0}, {2778, 2782, 3860, 2791, 3829, 2795, 2799, 2803, 2807, 3864, 2815, 3868, 0}, {2778, 2782, 3860, 2791, 3829, 2795, 2799, 2803, 2807, 3864, 2815, 3868, 0}, 2, 1, 239, 241, {243,14,1229,2843,1210,0,0,0,0,0,0,0,0,0},{5603,3672,0,0,0,0,0,0},{274,331,35,2947,0,0,0,0,0,0,0,0},{280,323,23,2936,0,0,0,0,0}},
-       {3957, 243, 23, 35, 947, 3985, 7213, 7218, {3997, 4005, 4011, 4018, 4029, 4036, 4044}, {35140, 6334, 4936, 35145, 35151, 35156, 35160}, {2692, 2411, 2403, 29216, 4089, 4091, 2018}, {4182, 4188, 4196, 1102, 4202, 4207, 4213, 4219, 4226, 1140, 4237, 4247, 0}, {4182, 4188, 4196, 1102, 4202, 4207, 4213, 4219, 4226, 1140, 4237, 4247, 0}, {35166, 5920, 35170, 1176, 35175, 2513, 2517, 1186, 1190, 1195, 1200, 35179, 0}, {35166, 5920, 35170, 1176, 35175, 2513, 2517, 1186, 1190, 1195, 1200, 35179, 0}, 0, 0, 239, 241, {243,3660,14,1221,1229,1236,1210,0,0,0,0,0,0,0},{4313,4342,4369,0,0,0,0,0},{35,2947,331,274,0,0,0,0,0,0,0,0},{23,2936,323,280,0,0,0,0,0}},
-       {4857, 1236, 280, 274, 1906, 352, 1924, 1927, {4874, 4883, 4889, 4895, 4904, 4910, 4919}, {4926, 4931, 4936, 4941, 4946, 4951, 4956}, {2692, 2411, 2403, 2403, 4089, 4091, 2018}, {4961, 4969, 4978, 4983, 4989, 4993, 4998, 5006, 5012, 5022, 1148, 5030, 0}, {4961, 4969, 4978, 4983, 4989, 4993, 4998, 5006, 5012, 5022, 1148, 5030, 0}, {5040, 5046, 4978, 5053, 4989, 4993, 5058, 5006, 5064, 1195, 1200, 5070, 0}, {5040, 5046, 4978, 5053, 4989, 4993, 5058, 5006, 5064, 1195, 1200, 5070, 0}, 2, 1, 2541, 241, {14812,1221,1245,1779,1236,243,1210,0,0,0,0,0,0,0},{4857,3672,3899,0,0,0,0,0},{274,331,5085,5091,5101,0,0,0,0,0,0,0},{280,323,0,0,0,0,0,0,0}},
-       {2568, 2587, 280, 274, 1906, 352, 1924, 1927, {6268, 6277, 6285, 6294, 6305, 6314, 6323}, {6330, 6334, 2505, 6338, 6342, 6346, 6350}, {2692, 2411, 2403, 2403, 6354, 4091, 2018}, {6356, 6364, 4107, 6373, 6380, 6387, 6394, 4136, 6401, 6411, 6419, 6428, 0}, {6437, 6445, 4196, 6454, 6461, 6468, 6475, 4219, 6482, 6492, 1148, 6500, 0}, {6509, 2501, 2505, 2509, 6513, 6517, 6521, 6525, 6529, 6533, 2533, 6537, 0}, {6509, 2501, 2505, 2509, 6513, 6517, 6521, 6525, 6529, 6533, 2533, 6537, 0}, 2, 1, 754, 241, {2587,1245,11970,1229,6541,1210,0,0,0,0,0,0,0,0},{2568,6549,3672,0,0,0,0,0},{274,331,8214,0,0,0,0,0,0,0,0,0},{280,323,0,0,0,0,0,0,0}},
-       {4857, 14812, 323, 331, 1906, 352, 7213, 7218, {7223, 7230, 7238, 7246, 7255, 7265, 7273}, {7282, 4493, 7285, 7288, 7291, 7294, 7297}, {7300, 2403, 2692, 3804, 2692, 4091, 7300}, {7302, 7310, 7319, 2434, 7325, 2444, 2449, 7329, 2461, 2471, 2479, 2488, 0}, {7302, 7310, 7319, 2434, 7325, 2444, 2449, 7329, 2461, 2471, 2479, 2488, 0}, {2497, 2501, 7338, 2509, 7325, 2513, 2517, 2521, 2525, 2529, 2533, 2537, 0}, {2497, 2501, 7338, 2509, 7325, 2513, 2517, 2521, 2525, 2529, 2533, 2537, 0}, 2, 1, 239, 241, {14812,1221,1236,1245,2823,1210,0,0,0,0,0,0,0,0},{4857,3899,3672,5646,0,0,0,0},{331,274,35184,0,0,0,0,0,0,0,0,0},{323,280,0,0,0,0,0,0,0}},
-       {1882, 2587, 280, 274, 1906, 1916, 35194, 35199, {2320, 9929, 35204, 2343, 2350, 2358, 35211}, {2373, 35219, 35224, 2386, 2390, 2394, 35228}, {2018, 2403, 2405, 2407, 2405, 2409, 2411}, {2413, 2420, 4978, 2434, 4989, 2444, 2449, 2454, 2461, 2471, 2479, 6201, 0}, {2413, 2420, 4978, 2434, 4989, 2444, 2449, 2454, 2461, 2471, 2479, 6201, 0}, {2497, 2501, 2505, 2509, 4989, 2513, 2517, 2521, 2525, 2529, 2533, 7426, 0}, {2497, 2501, 2505, 2509, 4989, 2513, 2517, 2521, 2525, 2529, 2533, 7426, 0}, 2, 1, 754, 241, {2587,1245,2843,1210,2823,0,0,0,0,0,0,0,0,0},{1882,2554,0,0,0,0,0,0},{274,331,7430,5085,0,0,0,0,0,0,0,0},{280,323,7441,6558,0,0,0,0,0}},
-       {4369, 243, 280, 274, 947, 3985, 7213, 7218, {3997, 7778, 7792, 7805, 7818, 7831, 4044}, {6330, 7843, 7847, 7851, 7855, 7859, 7863}, {2692, 2018, 2405, 7868, 7868, 2018, 2018}, {35232, 35240, 35250, 4113, 29235, 35257, 35263, 4136, 29252, 29261, 29269, 35269, 0}, {35232, 35240, 35250, 4113, 29235, 35257, 35263, 4136, 29252, 29261, 29269, 35269, 0}, {2778, 20232, 3860, 29329, 2721, 2795, 2799, 20088, 18317, 29342, 2815, 2819, 0}, {2778, 20232, 3860, 29329, 2721, 2795, 2799, 20088, 18317, 29342, 2815, 2819, 0}, 2, 1, 239, 241, {2309,14844,26754,2843,14,1210,0,0,0,0,0,0,0,0},{3957,4369,35278,35287,0,0,0,0},{274,35296,0,0,0,0,0,0,0,0,0,0},{280,0,0,0,0,0,0,0,0}},
-       {9884, 2261, 280, 274, 1906, 9902, 9915, 9918, {9921, 9929, 9937, 2343, 2350, 2358, 9944}, {9952, 9957, 9962, 9966, 9970, 9974, 9978}, {2018, 2403, 2405, 2407, 2405, 2409, 2411}, {9983, 9991, 10000, 2715, 9836, 2725, 2730, 10005, 2742, 2752, 2760, 3851, 0}, {7302, 7310, 4978, 2434, 2440, 2444, 2449, 10013, 2461, 2471, 2479, 2488, 0}, {2778, 2782, 3860, 2791, 9836, 2795, 2799, 2803, 2807, 2811, 2815, 3868, 0}, {2778, 2782, 3860, 2791, 9836, 2795, 2799, 2803, 2807, 2811, 2815, 3868, 0}, 2, 1, 754, 241, {2261,2587,2843,1210,0,0,0,0,0,0,0,0,0,0},{9884,10021,0,0,0,0,0,0},{274,331,10044,0,0,0,0,0,0,0,0,0},{280,323,10054,0,0,0,0,0,0}},
-       {3672, 2587, 280, 331, 1906, 352, 1924, 1927, {35307, 35318, 35342, 35372, 35389, 35411, 35420}, {15002, 15005, 15010, 15016, 15020, 7548, 15025}, {6687, 6675, 6677, 6679, 6681, 6683, 6685}, {35431, 35444, 564, 35457, 584, 35468, 35477, 605, 35486, 35503, 35518, 35531, 0}, {35431, 35444, 564, 35457, 584, 35468, 35477, 605, 35486, 35503, 35518, 35531, 0}, {15176, 7947, 2505, 2509, 15124, 15180, 15184, 15188, 15192, 2529, 15196, 15200, 0}, {15176, 7947, 2505, 2509, 15124, 15180, 15184, 15188, 15192, 2529, 15196, 15200, 0}, 0, 1, 754, 241, {2587,1245,2843,14,1210,0,0,0,0,0,0,0,0,0},{3672,5603,0,0,0,0,0,0},{331,274,0,0,0,0,0,0,0,0,0,0},{323,280,0,0,0,0,0,0,0}},
-       {3672, 243, 280, 274, 1906, 352, 7213, 7218, {18766, 18780, 18790, 18801, 18815, 18826, 18837}, {18850, 18855, 18860, 18867, 18873, 18879, 18885}, {2692, 2411, 2403, 7548, 2692, 12798, 2018}, {18890, 18898, 18906, 18913, 18922, 18932, 18942, 18948, 18956, 18971, 18989, 18997, 0}, {18890, 18898, 18906, 18913, 18922, 18932, 18942, 18948, 18956, 18971, 18989, 18997, 0}, {19005, 19009, 18906, 19015, 19019, 19024, 18942, 19030, 19035, 19042, 19049, 19054, 0}, {19005, 19009, 18906, 19015, 19019, 19024, 18942, 19030, 19035, 19042, 19049, 19054, 0}, 2, 0, 239, 241, {243,14,1229,2843,1210,0,0,0,0,0,0,0,0,0},{3672,5603,10078,10067,0,0,0,0},{274,331,0,0,0,0,0,0,0,0,0,0},{280,323,0,0,0,0,0,0,0}},
-       {35544, 2587, 280, 274, 1906, 352, 1924, 1927, {35565, 35580, 35595, 35610, 35627, 35644, 35653}, {35664, 35671, 35678, 35685, 35692, 19764, 35699}, {35706, 19343, 8668, 8671, 8665, 19340, 19778}, {13166, 13177, 8702, 13190, 8724, 13201, 13208, 8749, 13215, 13230, 13243, 13254, 0}, {13166, 13177, 8702, 13190, 8724, 13201, 13208, 8749, 13215, 13230, 13243, 13254, 0}, {13267, 13274, 13281, 13288, 8724, 13201, 13208, 13295, 13302, 13309, 13316, 13323, 0}, {13267, 13274, 13281, 13288, 8724, 13201, 13208, 13295, 13302, 13309, 13316, 13323, 0}, 0, 1, 754, 241, {2587,1245,20249,2843,14,1210,0,0,0,0,0,0,0,0},{35544,3672,5603,0,0,0,0,0},{274,331,0,0,0,0,0,0,0,0,0,0},{280,323,0,0,0,0,0,0,0}},
-       {5603, 1236, 6558, 5085, 44, 55, 20260, 20288, {20310, 20329, 20348, 20373, 20392, 20426, 20451}, {20470, 20480, 20490, 20506, 20516, 20541, 20557}, {20567, 20571, 20578, 20582, 20589, 20596, 20603}, {20607, 20635, 20669, 20685, 20704, 20711, 20721, 20737, 20753, 20784, 20806, 20828, 0}, {20607, 20635, 20669, 20685, 20704, 20711, 20721, 20737, 20753, 20784, 20806, 20828, 0}, {20607, 20635, 20669, 20685, 20704, 20711, 20721, 20737, 20753, 20784, 20806, 20828, 0}, {20607, 20635, 20669, 20685, 20704, 20711, 20721, 20737, 20753, 20784, 20806, 20828, 0}, 0, 5, 2541, 241, {1236,2270,2843,2309,1210,0,0,0,0,0,0,0,0,0},{5603,3672,0,0,0,0,0,0},{5085,2285,20853,20862,0,0,0,0,0,0,0,0},{6558,2301,20870,20882,0,0,0,0,0}},
-       {3943, 243, 23, 35, 44, 55, 0, 0, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {63, 72, 79, 99, 119, 143, 167, 174, 185, 196, 205, 223, 0}, {63, 72, 79, 99, 119, 143, 167, 174, 185, 196, 205, 223, 0}, {63, 72, 79, 99, 119, 143, 167, 174, 185, 196, 205, 223, 0}, {63, 72, 79, 99, 119, 143, 167, 174, 185, 196, 205, 223, 0}, 0, 6, 239, 241, {243,14,1210,0,0,0,0,0,0,0,0,0,0,0},{3943,254,0,0,0,0,0,0},{35,274,0,0,0,0,0,0,0,0,0,0},{23,280,0,0,0,0,0,0,0}},
-       {1344, 2927, 323, 331, 1375, 1391, 1404, 1411, {1418, 1428, 1438, 1448, 1458, 1468, 1478}, {34903, 34910, 34917, 34924, 34931, 34938, 34945}, {1537, 1541, 1545, 1549, 1553, 1557, 1561}, {1655, 1660, 1665, 1670, 1675, 1680, 1685, 1690, 1695, 1700, 1706, 1712, 0}, {1655, 1660, 1665, 1670, 1675, 1680, 1685, 1690, 1695, 1700, 1706, 1712, 0}, {1655, 1660, 1665, 1670, 1675, 1680, 1685, 1690, 1695, 1700, 1706, 1712, 0}, {1655, 1660, 1665, 1670, 1675, 1680, 1685, 1690, 1695, 1700, 1706, 1712, 0}, 0, 0, 239, 241, {2927,1229,14,1765,1779,1366,1736,1210,0,0,0,0,0,0},{1344,6759,0,0,0,0,0,0},{331,274,0,0,0,0,0,0,0,0,0,0},{323,280,0,0,0,0,0,0,0}},
-       {35709, 2587, 280, 274, 1906, 1916, 2598, 2604, {2611, 2619, 2626, 2635, 2644, 2655, 2663}, {2671, 2674, 2677, 2680, 2683, 2686, 2689}, {2018, 2403, 2692, 2403, 2692, 2409, 2018}, {35729, 2701, 2709, 2715, 2721, 2725, 2730, 2735, 2742, 2752, 2760, 2769, 0}, {35729, 2701, 2709, 2715, 2721, 2725, 2730, 2735, 2742, 2752, 2760, 2769, 0}, {35737, 2782, 2786, 2791, 2721, 2795, 2799, 2803, 2807, 2811, 2815, 2819, 0}, {35737, 2782, 2786, 2791, 2721, 2795, 2799, 2803, 2807, 2811, 2815, 2819, 0}, 2, 1, 754, 241, {2587,1245,35742,1210,0,0,0,0,0,0,0,0,0,0},{35709,35752,35764,10067,0,0,0,0},{274,331,35774,35786,8237,8242,8229,0,0,0,0,0},{280,323,2887,2873,2902,0,0,0,0}},
-       {2909, 14812, 2936, 2947, 1906, 3712, 1924, 1927, {3719, 3726, 3733, 3741, 3751, 3760, 3767}, {3776, 3780, 3784, 3788, 3792, 3796, 3800}, {2018, 2403, 2405, 3804, 2405, 2409, 2018}, {3806, 3814, 3823, 2715, 3829, 3833, 3838, 2735, 2742, 3843, 2760, 3851, 0}, {3806, 3814, 3823, 2715, 3829, 3833, 3838, 2735, 2742, 3843, 2760, 3851, 0}, {2778, 2782, 3860, 2791, 3829, 2795, 2799, 2803, 2807, 3864, 2815, 3868, 0}, {2778, 2782, 3860, 2791, 3829, 2795, 2799, 2803, 2807, 3864, 2815, 3868, 0}, 0, 0, 239, 241, {14812,1221,1229,2927,14,243,3899,5616,1210,1779,1736,0,0,0},{2909,3672,0,0,0,0,0,0},{2947,331,274,0,0,0,0,0,0,0,0,0},{2936,323,280,0,0,0,0,0,0}},
-       {3957, 243, 323, 331, 947, 3985, 962, 968, {3997, 4005, 4011, 4018, 4029, 4036, 4044}, {4052, 4057, 4062, 4067, 4073, 4078, 4083}, {2692, 2411, 2403, 2403, 4089, 4091, 2018}, {4093, 4099, 4107, 4113, 4119, 4124, 4130, 4136, 4143, 4154, 4162, 4172, 0}, {4182, 4188, 4196, 1102, 4202, 4207, 4213, 4219, 4226, 1140, 4237, 4247, 0}, {4257, 4262, 4062, 4267, 4272, 4277, 4282, 4287, 4292, 4298, 4303, 4308, 0}, {4257, 4262, 4062, 4267, 4272, 4277, 4282, 4287, 4292, 4298, 4303, 4308, 0}, 2, 1, 239, 241, {243,14,1221,1229,1236,1245,1210,2823,0,0,0,0,0,0},{4313,4342,4369,0,0,0,0,0},{331,274,1312,0,0,0,0,0,0,0,0,0},{323,280,1324,0,0,0,0,0,0}},
-       {3672, 1210, 280, 274, 44, 352, 1924, 1927, {4874, 4883, 4889, 4895, 4904, 4910, 4919}, {4926, 4931, 4936, 4941, 4946, 4951, 4956}, {2692, 2411, 2403, 2403, 4089, 4091, 2018}, {4961, 4969, 4978, 4983, 4989, 4993, 4998, 5006, 5012, 5022, 1148, 5030, 0}, {4961, 4969, 4978, 4983, 4989, 4993, 4998, 5006, 5012, 5022, 1148, 5030, 0}, {5040, 5046, 4978, 5053, 4989, 4993, 5058, 5006, 5064, 1195, 1200, 5070, 0}, {5040, 5046, 4978, 5053, 4989, 4993, 5058, 5006, 5064, 1195, 1200, 5070, 0}, 0, 0, 2541, 241, {1210,5993,1236,6259,14,3660,0,0,0,0,0,0,0,0},{3672,10067,0,0,0,0,0,0},{274,331,5085,5091,5101,0,0,0,0,0,0,0},{280,323,0,0,0,0,0,0,0}},
-       {35797, 2261, 323, 331, 1906, 18382, 18395, 18400, {35823, 35831, 35839, 35847, 35859, 35868, 35880}, {18485, 18490, 18495, 18500, 18505, 18510, 18515}, {2018, 2403, 2692, 6354, 2692, 16359, 2411}, {18520, 18537, 18550, 18564, 18577, 18590, 18603, 18617, 18629, 18643, 18657, 18671, 0}, {18520, 18537, 18550, 18564, 18577, 18590, 18603, 18617, 18629, 18643, 18657, 18671, 0}, {35891, 35902, 35909, 35917, 35924, 35931, 35938, 35946, 35952, 35960, 35968, 35976, 0}, {35891, 35902, 35909, 35917, 35924, 35931, 35938, 35946, 35952, 35960, 35968, 35976, 0}, 2, 1, 754, 241, {2261,2587,2843,1210,0,0,0,0,0,0,0,0,0,0},{18748,0,0,0,0,0,0,0},{331,274,0,0,0,0,0,0,0,0,0,0},{323,280,0,0,0,0,0,0,0}},
-       {3943, 243, 23, 35, 44, 55, 0, 0, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {63, 72, 79, 99, 119, 143, 167, 174, 185, 196, 205, 223, 0}, {63, 72, 79, 99, 119, 143, 167, 174, 185, 196, 205, 223, 0}, {63, 72, 79, 99, 119, 143, 167, 174, 185, 196, 205, 223, 0}, {63, 72, 79, 99, 119, 143, 167, 174, 185, 196, 205, 223, 0}, 0, 6, 239, 241, {243,14,1210,0,0,0,0,0,0,0,0,0,0,0},{3943,254,0,0,0,0,0,0},{35,274,0,0,0,0,0,0,0,0,0,0},{23,280,0,0,0,0,0,0,0}},
-       {1344, 2927, 1859, 1842, 1375, 1391, 1404, 1411, {1418, 1428, 1438, 1448, 1458, 1468, 1478}, {1488, 1495, 1502, 1509, 1516, 1523, 1530}, {1537, 1541, 1545, 1549, 1553, 1557, 1561}, {1565, 1572, 1579, 1586, 1593, 1600, 1607, 1614, 1621, 1628, 1635, 1645, 0}, {1565, 1572, 1579, 1586, 1593, 1600, 1607, 1614, 1621, 1628, 1635, 1645, 0}, {1655, 1660, 1665, 1670, 1675, 1680, 1685, 1690, 1695, 1700, 1706, 1712, 0}, {1655, 1660, 1665, 1670, 1675, 1680, 1685, 1690, 1695, 1700, 1706, 1712, 0}, 0, 0, 239, 241, {2927,1229,14,1765,1779,1366,1736,1210,0,0,0,0,0,0},{1344,6759,0,0,0,0,0,0},{1842,1850,331,274,0,0,0,0,0,0,0,0},{1859,1870,323,280,0,0,0,0,0}},
-       {35983, 2587, 280, 274, 1906, 1916, 2598, 2604, {2611, 2619, 2626, 2635, 2644, 2655, 2663}, {2671, 2674, 2677, 2680, 2683, 2686, 2689}, {2018, 2403, 2692, 2403, 2692, 2409, 2018}, {2694, 2701, 2709, 2715, 2721, 2725, 2730, 2735, 2742, 2752, 2760, 2769, 0}, {2694, 2701, 2709, 2715, 2721, 2725, 2730, 2735, 2742, 2752, 2760, 2769, 0}, {2778, 2782, 2786, 2791, 2721, 2795, 2799, 2803, 2807, 2811, 2815, 2819, 0}, {2778, 2782, 2786, 2791, 2721, 2795, 2799, 2803, 2807, 2811, 2815, 2819, 0}, 2, 1, 754, 241, {2587,1245,2835,2843,2261,1210,0,0,0,0,0,0,0,0},{2568,1882,2850,0,0,0,0,0},{274,331,2285,2862,0,0,0,0,0,0,0,0},{280,2873,2887,2902,0,0,0,0,0}},
-       {36009, 1210, 2936, 2947, 44, 352, 1924, 1927, {3719, 3726, 3733, 3741, 3751, 3760, 3767}, {3776, 3780, 3784, 3788, 3792, 3796, 3800}, {2018, 2403, 2405, 3804, 2405, 2409, 2018}, {3806, 3814, 3823, 2715, 3829, 3833, 3838, 2735, 2742, 3843, 2760, 3851, 0}, {3806, 3814, 3823, 2715, 3829, 3833, 3838, 2735, 2742, 3843, 2760, 3851, 0}, {2778, 2782, 3860, 2791, 3829, 2795, 2799, 2803, 2807, 3864, 2815, 3868, 0}, {2778, 2782, 3860, 2791, 3829, 2795, 2799, 2803, 2807, 3864, 2815, 3868, 0}, 0, 0, 2541, 241, {243,14,1229,1210,5993,36022,3899,14844,0,0,0,0,0,0},{36030,36009,6549,3909,0,0,0,0},{2947,35,274,331,0,0,0,0,0,0,0,0},{2936,23,280,323,0,0,0,0,0}},
-       {4313, 243, 2936, 2947, 947, 3985, 962, 968, {3997, 4005, 4011, 4018, 4029, 4036, 4044}, {4052, 4057, 4062, 4067, 4073, 4078, 4083}, {2692, 2411, 2403, 2403, 4089, 4091, 2018}, {4093, 4099, 4107, 4113, 4119, 4124, 4130, 4136, 4143, 4154, 4162, 4172, 0}, {4182, 4188, 4196, 1102, 4202, 4207, 4213, 4219, 4226, 1140, 4237, 4247, 0}, {4257, 4262, 4062, 4267, 4272, 4277, 4282, 4287, 4292, 4298, 4303, 4308, 0}, {4257, 4262, 4062, 4267, 4272, 4277, 4282, 4287, 4292, 4298, 4303, 4308, 0}, 0, 0, 239, 241, {243,14,14812,1229,1236,1210,0,0,0,0,0,0,0,0},{4313,4342,4369,0,0,0,0,0},{35,2947,331,274,0,0,0,0,0,0,0,0},{23,2936,323,280,0,0,0,0,0}},
-       {4857, 2587, 280, 274, 1906, 352, 1924, 1927, {4874, 4883, 4889, 4895, 4904, 4910, 4919}, {4926, 4931, 4936, 4941, 4946, 4951, 4956}, {2692, 2411, 2403, 2403, 4089, 4091, 2018}, {4961, 4969, 4978, 4983, 4989, 4993, 4998, 5006, 5012, 5022, 1148, 5030, 0}, {4961, 4969, 4978, 4983, 4989, 4993, 4998, 5006, 5012, 5022, 1148, 5030, 0}, {5040, 5046, 4978, 5053, 4989, 4993, 5058, 5006, 5064, 1195, 1200, 5070, 0}, {5040, 5046, 4978, 5053, 4989, 4993, 5058, 5006, 5064, 1195, 1200, 5070, 0}, 2, 1, 754, 241, {2587,1245,35120,2843,1210,0,0,0,0,0,0,0,0,0},{4857,3672,5076,0,0,0,0,0},{274,331,5085,5091,5101,0,0,0,0,0,0,0},{280,323,0,0,0,0,0,0,0}},
-       {9044, 9058, 323, 331, 44, 1916, 1924, 1927, {9068, 9077, 9089, 9096, 9104, 9114, 9120}, {9127, 9131, 9135, 9139, 9143, 9148, 9152}, {9156, 9158, 9160, 9162, 9164, 9158, 9162}, {9167, 9177, 9186, 9194, 9202, 9210, 9217, 9224, 9232, 2097, 9238, 9246, 0}, {9255, 9265, 9274, 9282, 9290, 9298, 9305, 9312, 9321, 7723, 9327, 9337, 0}, {9346, 9350, 9355, 9360, 9364, 7757, 2234, 9368, 9372, 2250, 9376, 2254, 0}, {9346, 9350, 9355, 9360, 9364, 7757, 2234, 9368, 9372, 2250, 9376, 2254, 0}, 0, 1, 754, 241, {9058,9380,6233,9388,9400,9410,9420,1210,0,0,0,0,0,0},{9044,9432,9447,0,0,0,0,0},{331,274,0,0,0,0,0,0,0,0,0,0},{323,280,0,0,0,0,0,0,0}},
-       {3943, 2309, 323, 331, 44, 55, 0, 0, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {36041, 36052, 13523, 36063, 36074, 36081, 36090, 36103, 36110, 36123, 36136, 36149, 0}, {36041, 36052, 13523, 36063, 36074, 36081, 36090, 36103, 36110, 36123, 36136, 36149, 0}, {36041, 36052, 13523, 36063, 36074, 36081, 36090, 36103, 36110, 36123, 36136, 36149, 0}, {36041, 36052, 13523, 36063, 36074, 36081, 36090, 36103, 36110, 36123, 36136, 36149, 0}, 0, 6, 2541, 241, {2309,1236,1210,0,0,0,0,0,0,0,0,0,0,0},{3943,254,0,0,0,0,0,0},{331,274,35,0,0,0,0,0,0,0,0,0},{323,280,23,0,0,0,0,0,0}},
-       {1344, 2927, 323, 331, 1375, 1391, 1404, 1411, {1418, 1428, 1438, 1448, 1458, 1468, 1478}, {34903, 34910, 34917, 34924, 34931, 34938, 34945}, {1537, 1541, 1545, 1549, 1553, 1557, 1561}, {1655, 1660, 1665, 1670, 1675, 1680, 1685, 1690, 1695, 1700, 1706, 1712, 0}, {1655, 1660, 1665, 1670, 1675, 1680, 1685, 1690, 1695, 1700, 1706, 1712, 0}, {1655, 1660, 1665, 1670, 1675, 1680, 1685, 1690, 1695, 1700, 1706, 1712, 0}, {1655, 1660, 1665, 1670, 1675, 1680, 1685, 1690, 1695, 1700, 1706, 1712, 0}, 0, 0, 239, 241, {2927,1229,14,1765,1779,1366,1736,1210,0,0,0,0,0,0},{1344,36162,36189,2543,0,0,0,0},{331,274,0,0,0,0,0,0,0,0,0,0},{323,280,0,0,0,0,0,0,0}},
-       {2568, 2587, 280, 274, 1906, 1916, 2598, 2604, {2611, 2619, 2626, 2635, 2644, 2655, 2663}, {2671, 2674, 2677, 2680, 2683, 2686, 2689}, {2018, 2403, 2692, 2403, 2692, 2409, 2018}, {2694, 2701, 2709, 2715, 2721, 2725, 2730, 2735, 2742, 2752, 2760, 2769, 0}, {2694, 2701, 2709, 2715, 2721, 2725, 2730, 2735, 2742, 2752, 2760, 2769, 0}, {2778, 2782, 2786, 2791, 2721, 2795, 2799, 2803, 2807, 2811, 2815, 2819, 0}, {2778, 2782, 2786, 2791, 2721, 2795, 2799, 2803, 2807, 2811, 2815, 2819, 0}, 2, 1, 754, 241, {2587,1245,2835,35120,2843,1210,0,0,0,0,0,0,0,0},{2568,1882,35130,0,0,0,0,0},{274,331,8214,8204,2862,8237,8242,8223,8229,0,0,0},{280,323,8274,8287,2887,2873,2902,0,0}},
-       {2909, 14812, 2936, 2947, 1906, 352, 7213, 7218, {3719, 3726, 3733, 3741, 3751, 3760, 3767}, {3776, 3780, 3784, 3788, 3792, 3796, 3800}, {2018, 2403, 2405, 3804, 2405, 2409, 2018}, {3806, 3814, 3823, 2715, 3829, 3833, 3838, 2735, 2742, 3843, 2760, 3851, 0}, {3806, 3814, 3823, 2715, 3829, 3833, 3838, 2735, 2742, 3843, 2760, 3851, 0}, {2778, 2782, 3860, 2791, 3829, 2795, 2799, 2803, 2807, 3864, 2815, 3868, 0}, {2778, 2782, 3860, 2791, 3829, 2795, 2799, 2803, 2807, 3864, 2815, 3868, 0}, 0, 0, 239, 241, {14812,1221,14,2835,1210,0,0,0,0,0,0,0,0,0},{2909,3672,0,0,0,0,0,0},{2947,35,274,331,0,0,0,0,0,0,0,0},{2936,23,280,323,0,0,0,0,0}},
-       {4342, 243, 23, 35, 947, 3985, 962, 968, {3997, 4005, 4011, 4018, 4029, 4036, 4044}, {4052, 4057, 4062, 4067, 4073, 4078, 4083}, {2692, 2411, 2403, 2403, 4089, 4091, 2018}, {4093, 4099, 4107, 4113, 4119, 4124, 4130, 4136, 4143, 4154, 4162, 4172, 0}, {4182, 4188, 4196, 1102, 4202, 4207, 4213, 4219, 4226, 1140, 4237, 4247, 0}, {4257, 4262, 4062, 4267, 4272, 4277, 4282, 4287, 4292, 4298, 4303, 4308, 0}, {4257, 4262, 4062, 4267, 4272, 4277, 4282, 4287, 4292, 4298, 4303, 4308, 0}, 0, 1, 239, 241, {243,14,1229,1236,1210,0,0,0,0,0,0,0,0,0},{4313,4342,4369,0,0,0,0,0},{35,2947,331,274,0,0,0,0,0,0,0,0},{23,2936,323,280,0,0,0,0,0}},
-       {36205, 243, 280, 274, 1906, 352, 1924, 1927, {4874, 4883, 4889, 4895, 4904, 4910, 4919}, {4926, 4931, 4936, 4941, 4946, 4951, 4956}, {2692, 2411, 2403, 2403, 4089, 4091, 2018}, {4961, 4969, 4978, 4983, 4989, 4993, 4998, 5006, 5012, 5022, 1148, 5030, 0}, {4961, 4969, 4978, 4983, 4989, 4993, 4998, 5006, 5012, 5022, 1148, 5030, 0}, {5040, 5046, 4978, 5053, 4989, 4993, 5058, 5006, 5064, 1195, 1200, 5070, 0}, {5040, 5046, 4978, 5053, 4989, 4993, 5058, 5006, 5064, 1195, 1200, 5070, 0}, 2, 1, 239, 241, {243,14,1245,1236,1210,0,0,0,0,0,0,0,0,0},{4857,5076,3672,0,0,0,0,0},{274,331,5085,5091,5101,0,0,0,0,0,0,0},{280,323,0,0,0,0,0,0,0}},
-       {1882, 2261, 323, 331, 1906, 11991, 36228, 36238, {9068, 9077, 9089, 9096, 9104, 9114, 9120}, {9127, 9131, 9135, 9139, 9143, 9148, 9152}, {0, 0, 0, 0, 0, 0, 0}, {2413, 2420, 15113, 2434, 2440, 2444, 2449, 11959, 36246, 36256, 36264, 36273, 0}, {2413, 2420, 15113, 2434, 2440, 2444, 2449, 11959, 36246, 36256, 36264, 36273, 0}, {2497, 2501, 2505, 2509, 2440, 2513, 2517, 11966, 2525, 2529, 2533, 2537, 0}, {2497, 2501, 2505, 2509, 2440, 2513, 2517, 11966, 2525, 2529, 2533, 2537, 0}, 0, 1, 754, 241, {2261,2843,1895,2587,9640,1245,11970,1210,0,0,0,0,0,0},{1882,2554,2568,0,0,0,0,0},{331,274,0,0,0,0,0,0,0,0,0,0},{323,280,0,0,0,0,0,0,0}},
-       {3943, 2309, 323, 331, 44, 55, 0, 0, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {36282, 36293, 13523, 36306, 36074, 36317, 36328, 36341, 36348, 36123, 36359, 36370, 0}, {36282, 36293, 13523, 36306, 36074, 36317, 36328, 36341, 36348, 36123, 36359, 36370, 0}, {36282, 36293, 13523, 36306, 36074, 36317, 36328, 36341, 36348, 36123, 36359, 36370, 0}, {36282, 36293, 13523, 36306, 36074, 36317, 36328, 36341, 36348, 36123, 36359, 36370, 0}, 0, 6, 2541, 241, {2309,1236,1210,0,0,0,0,0,0,0,0,0,0,0},{3943,254,0,0,0,0,0,0},{331,274,35,0,0,0,0,0,0,0,0,0},{323,280,23,0,0,0,0,0,0}},
-       {5603, 243, 280, 274, 1906, 352, 7213, 7218, {3719, 3726, 3733, 3741, 3751, 3760, 3767}, {3776, 3780, 3784, 3788, 3792, 3796, 3800}, {2018, 2403, 2405, 3804, 2405, 2409, 2018}, {3806, 3814, 3823, 2715, 3829, 3833, 3838, 2735, 2742, 3843, 2760, 3851, 0}, {3806, 3814, 3823, 2715, 3829, 3833, 3838, 2735, 2742, 3843, 2760, 3851, 0}, {2778, 2782, 3860, 2791, 3829, 2795, 2799, 2803, 2807, 3864, 2815, 3868, 0}, {2778, 2782, 3860, 2791, 3829, 2795, 2799, 2803, 2807, 3864, 2815, 3868, 0}, 2, 0, 239, 241, {243,14,1229,2843,1210,0,0,0,0,0,0,0,0,0},{5603,3672,0,0,0,0,0,0},{274,331,0,0,0,0,0,0,0,0,0,0},{280,323,0,0,0,0,0,0,0}},
-       {4313, 1229, 2936, 2947, 947, 3985, 962, 968, {3997, 4005, 4011, 4018, 4029, 4036, 4044}, {4052, 4057, 4062, 4067, 4073, 4078, 4083}, {2692, 2411, 2403, 2403, 4089, 4091, 2018}, {4093, 4099, 4107, 4113, 4119, 4124, 4130, 4136, 4143, 4154, 4162, 4172, 0}, {4182, 4188, 4196, 1102, 4202, 4207, 4213, 4219, 4226, 1140, 4237, 4247, 0}, {4257, 4262, 4062, 4267, 4272, 4277, 4282, 4287, 4292, 4298, 4303, 4308, 0}, {4257, 4262, 4062, 4267, 4272, 4277, 4282, 4287, 4292, 4298, 4303, 4308, 0}, 0, 0, 239, 241, {3888,3879,1229,14,1236,1210,0,0,0,0,0,0,0,0},{4313,4342,4369,0,0,0,0,0},{35,2947,331,274,0,0,0,0,0,0,0,0},{23,2936,323,280,0,0,0,0,0}},
-       {4857, 243, 280, 274, 1906, 352, 1924, 1927, {4874, 4883, 4889, 4895, 4904, 4910, 4919}, {4926, 4931, 4936, 4941, 4946, 4951, 4956}, {2692, 2411, 2403, 2403, 4089, 4091, 2018}, {4961, 4969, 4978, 4983, 4989, 4993, 4998, 5006, 5012, 5022, 1148, 5030, 0}, {4961, 4969, 4978, 4983, 4989, 4993, 4998, 5006, 5012, 5022, 1148, 5030, 0}, {5040, 5046, 4978, 5053, 4989, 4993, 5058, 5006, 5064, 1195, 1200, 5070, 0}, {5040, 5046, 4978, 5053, 4989, 4993, 5058, 5006, 5064, 1195, 1200, 5070, 0}, 2, 1, 239, 241, {243,14,1245,1236,1210,0,0,0,0,0,0,0,0,0},{4857,5076,3672,0,0,0,0,0},{274,331,5085,5091,5101,0,0,0,0,0,0,0},{280,323,0,0,0,0,0,0,0}},
-       {9044, 9058, 323, 331, 36381, 1916, 36228, 36238, {11891, 36392, 9089, 11916, 9104, 9114, 9120}, {9127, 9131, 9135, 11937, 9143, 9148, 9152}, {9156, 9158, 9160, 9162, 9164, 9158, 9162}, {2413, 2420, 15113, 2434, 2440, 2513, 2517, 11959, 36246, 36256, 36264, 36273, 0}, {2413, 2420, 15113, 2434, 2440, 2513, 2517, 11959, 36246, 36256, 36264, 36273, 0}, {2497, 2501, 2505, 2509, 2440, 2513, 2517, 11966, 2525, 2529, 2533, 2537, 0}, {2497, 2501, 2505, 2509, 2440, 2513, 2517, 11966, 2525, 2529, 2533, 2537, 0}, 0, 1, 754, 241, {2261,2843,1895,2587,9640,1245,11970,1210,0,0,0,0,0,0},{1882,2554,2568,0,0,0,0,0},{331,274,0,0,0,0,0,0,0,0,0,0},{323,280,0,0,0,0,0,0,0}},
-       {3943, 2309, 323, 331, 44, 55, 0, 0, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {36041, 36052, 13523, 36063, 36074, 36081, 36090, 36103, 36110, 36123, 36136, 36149, 0}, {36041, 36052, 13523, 36063, 36074, 36081, 36090, 36103, 36110, 36123, 36136, 36149, 0}, {36041, 36052, 13523, 36063, 36074, 36081, 36090, 36103, 36110, 36123, 36136, 36149, 0}, {36041, 36052, 13523, 36063, 36074, 36081, 36090, 36103, 36110, 36123, 36136, 36149, 0}, 0, 0, 2541, 241, {2309,1236,1210,0,0,0,0,0,0,0,0,0,0,0},{3943,254,0,0,0,0,0,0},{331,274,35,0,0,0,0,0,0,0,0,0},{323,280,23,0,0,0,0,0,0}},
-       {5603, 1210, 23, 35, 1906, 3712, 1924, 1927, {3719, 3726, 3733, 3741, 3751, 3760, 3767}, {3776, 3780, 3784, 3788, 3792, 3796, 3800}, {2018, 2403, 2405, 3804, 2405, 2409, 2018}, {3806, 3814, 3823, 2715, 3829, 3833, 3838, 2735, 2742, 3843, 2760, 3851, 0}, {3806, 3814, 3823, 2715, 3829, 3833, 3838, 2735, 2742, 3843, 2760, 3851, 0}, {2778, 2782, 3860, 2791, 3829, 2795, 2799, 2803, 2807, 3864, 2815, 3868, 0}, {2778, 2782, 3860, 2791, 3829, 2795, 2799, 2803, 2807, 3864, 2815, 3868, 0}, 0, 0, 2541, 241, {1736,1779,1210,0,0,0,0,0,0,0,0,0,0,0},{5603,0,0,0,0,0,0,0},{35,274,0,0,0,0,0,0,0,0,0,0},{23,280,0,0,0,0,0,0,0}},
-       {4313, 1229, 2936, 2947, 947, 3985, 962, 968, {3997, 4005, 4011, 4018, 4029, 4036, 4044}, {4052, 4057, 4062, 4067, 4073, 4078, 4083}, {2692, 2411, 2403, 2403, 4089, 4091, 2018}, {4093, 4099, 4107, 4113, 4119, 4124, 4130, 4136, 4143, 4154, 4162, 4172, 0}, {4182, 4188, 4196, 1102, 4202, 4207, 4213, 4219, 4226, 1140, 4237, 4247, 0}, {4257, 4262, 4062, 4267, 4272, 4277, 4282, 4287, 4292, 4298, 4303, 4308, 0}, {4257, 4262, 4062, 4267, 4272, 4277, 4282, 4287, 4292, 4298, 4303, 4308, 0}, 0, 0, 239, 241, {243,14,3888,1229,1236,1210,0,0,0,0,0,0,0,0},{4313,4342,4369,0,0,0,0,0},{35,2947,331,274,0,0,0,0,0,0,0,0},{23,2936,323,280,0,0,0,0,0}},
-       {1882, 9058, 323, 331, 44, 1916, 36403, 36421, {36436, 36449, 36468, 36481, 36496, 36513, 10880}, {36524, 36531, 36538, 36545, 36552, 36559, 36566}, {519, 522, 36573, 528, 531, 522, 528}, {36576, 36589, 564, 573, 15808, 15815, 15824, 605, 36604, 36623, 36638, 36655, 0}, {36576, 36589, 564, 573, 15808, 15815, 15824, 605, 36604, 36623, 36638, 36655, 0}, {36672, 36679, 36686, 36693, 15808, 36700, 36707, 36714, 36721, 36728, 36735, 36742, 0}, {36672, 36679, 36686, 36693, 15808, 36700, 36707, 36714, 36721, 36728, 36735, 36742, 0}, 0, 1, 754, 241, {2261,2843,1895,2587,9640,1245,11970,1210,0,0,0,0,0,0},{1882,2554,2568,0,0,0,0,0},{331,274,0,0,0,0,0,0,0,0,0,0},{323,280,0,0,0,0,0,0,0}},
-       {3943, 243, 23, 35, 44, 55, 0, 0, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {63, 72, 79, 99, 119, 143, 167, 174, 185, 196, 205, 223, 0}, {63, 72, 79, 99, 119, 143, 167, 174, 185, 196, 205, 223, 0}, {63, 72, 79, 99, 119, 143, 167, 174, 185, 196, 205, 223, 0}, {63, 72, 79, 99, 119, 143, 167, 174, 185, 196, 205, 223, 0}, 0, 6, 239, 241, {243,14,1210,0,0,0,0,0,0,0,0,0,0,0},{3943,254,0,0,0,0,0,0},{35,274,331,0,0,0,0,0,0,0,0,0},{23,280,323,0,0,0,0,0,0}},
-       {3943, 243, 280, 274, 44, 352, 1924, 1927, {3719, 3726, 3733, 3741, 3751, 3760, 3767}, {3776, 3780, 3784, 3788, 3792, 3796, 3800}, {2018, 2403, 2405, 3804, 2405, 2409, 2018}, {3806, 3814, 3823, 2715, 3829, 3833, 3838, 2735, 2742, 3843, 2760, 3851, 0}, {3806, 3814, 3823, 2715, 3829, 3833, 3838, 2735, 2742, 3843, 2760, 3851, 0}, {2778, 2782, 3860, 2791, 3829, 2795, 2799, 2803, 2807, 3864, 2815, 3868, 0}, {2778, 2782, 3860, 2791, 3829, 2795, 2799, 2803, 2807, 3864, 2815, 3868, 0}, 0, 0, 239, 241, {243,1210,0,0,0,0,0,0,0,0,0,0,0,0},{3909,3929,254,3943,0,0,0,0},{35,2947,331,274,0,0,0,0,0,0,0,0},{23,2936,323,280,0,0,0,0,0}},
-       {4313, 2309, 23, 35, 947, 3985, 962, 968, {3997, 4005, 4011, 4018, 4029, 4036, 4044}, {4052, 4057, 4062, 4067, 4073, 4078, 4083}, {2692, 2411, 2403, 2403, 4089, 4091, 2018}, {4093, 4099, 4107, 4113, 4119, 4124, 4130, 4136, 4143, 4154, 4162, 4172, 0}, {4182, 4188, 4196, 1102, 4202, 4207, 4213, 4219, 4226, 1140, 4237, 4247, 0}, {4257, 4262, 4062, 4267, 4272, 4277, 4282, 4287, 4292, 4298, 4303, 4308, 0}, {4257, 4262, 4062, 4267, 4272, 4277, 4282, 4287, 4292, 4298, 4303, 4308, 0}, 0, 0, 2541, 241, {243,14,1229,1236,1210,0,0,0,0,0,0,0,0,0},{4313,4342,4369,0,0,0,0,0},{35,2947,331,274,0,0,0,0,0,0,0,0},{23,2936,323,280,0,0,0,0,0}},
-       {1882, 2261, 323, 331, 44, 19963, 36403, 36421, {36436, 36449, 36468, 36481, 36496, 36513, 10880}, {36524, 36531, 36538, 36545, 36552, 36559, 36566}, {519, 522, 36573, 528, 531, 522, 528}, {36576, 36589, 564, 573, 15808, 15815, 15824, 605, 36604, 36623, 36638, 36655, 0}, {36576, 36589, 564, 573, 15808, 15815, 15824, 605, 36604, 36623, 36638, 36655, 0}, {36672, 36679, 36686, 36693, 15808, 36700, 36707, 36714, 36721, 36728, 36735, 36742, 0}, {36672, 36679, 36686, 36693, 15808, 36700, 36707, 36714, 36721, 36728, 36735, 36742, 0}, 0, 1, 754, 241, {2261,2843,1895,2587,9640,1245,11970,1210,0,0,0,0,0,0},{1882,2554,2568,0,0,0,0,0},{331,274,0,0,0,0,0,0,0,0,0,0},{323,280,0,0,0,0,0,0,0}},
-       {3943, 243, 23, 35, 44, 55, 0, 0, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {63, 72, 79, 99, 119, 143, 167, 174, 185, 196, 205, 223, 0}, {63, 72, 79, 99, 119, 143, 167, 174, 185, 196, 205, 223, 0}, {63, 72, 79, 99, 119, 143, 167, 174, 185, 196, 205, 223, 0}, {63, 72, 79, 99, 119, 143, 167, 174, 185, 196, 205, 223, 0}, 0, 0, 239, 241, {243,14,1210,0,0,0,0,0,0,0,0,0,0,0},{3943,254,0,0,0,0,0,0},{35,274,331,0,0,0,0,0,0,0,0,0},{23,280,323,0,0,0,0,0,0}},
-       {4313, 243, 2936, 2947, 947, 3985, 962, 968, {3997, 4005, 4011, 4018, 4029, 4036, 4044}, {4052, 4057, 4062, 4067, 4073, 4078, 4083}, {2692, 2411, 2403, 2403, 4089, 4091, 2018}, {4093, 4099, 4107, 4113, 4119, 4124, 4130, 4136, 4143, 4154, 4162, 4172, 0}, {4182, 4188, 4196, 1102, 4202, 4207, 4213, 4219, 4226, 1140, 4237, 4247, 0}, {4257, 4262, 4062, 4267, 4272, 4277, 4282, 4287, 4292, 4298, 4303, 4308, 0}, {4257, 4262, 4062, 4267, 4272, 4277, 4282, 4287, 4292, 4298, 4303, 4308, 0}, 0, 0, 239, 241, {243,14,14812,1229,1236,1210,0,0,0,0,0,0,0,0},{4313,4342,4369,0,0,0,0,0},{35,2947,331,274,0,0,0,0,0,0,0,0},{23,2936,323,280,0,0,0,0,0}},
-       {9044, 9058, 323, 331, 36381, 1916, 36228, 36238, {11891, 36392, 9089, 11916, 9104, 9114, 9120}, {9127, 9131, 9135, 11937, 9143, 9148, 9152}, {9156, 9158, 9160, 9162, 9164, 9158, 9162}, {2413, 2420, 15113, 2434, 2440, 2513, 2517, 11959, 36246, 36256, 36264, 36273, 0}, {2413, 2420, 15113, 2434, 2440, 2513, 2517, 11959, 36246, 36256, 36264, 36273, 0}, {2497, 2501, 2505, 2509, 2440, 2513, 2517, 11966, 2525, 2529, 2533, 2537, 0}, {2497, 2501, 2505, 2509, 2440, 2513, 2517, 11966, 2525, 2529, 2533, 2537, 0}, 0, 1, 754, 241, {2261,2843,1895,2587,9640,1245,11970,1210,0,0,0,0,0,0},{1882,2554,2568,0,0,0,0,0},{331,274,0,0,0,0,0,0,0,0,0,0},{323,280,0,0,0,0,0,0,0}},
-       {3943, 243, 23, 35, 44, 55, 0, 0, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {34952, 34976, 34985, 34994, 35005, 35014, 35027, 35036, 35041, 35052, 35074, 35098, 0}, {34952, 34976, 34985, 34994, 35005, 35014, 35027, 35036, 35041, 35052, 35074, 35098, 0}, {34952, 34976, 34985, 34994, 35005, 35014, 35027, 35036, 35041, 35052, 35074, 35098, 0}, {34952, 34976, 34985, 34994, 35005, 35014, 35027, 35036, 35041, 35052, 35074, 35098, 0}, 0, 6, 239, 241, {243,14,1210,0,0,0,0,0,0,0,0,0,0,0},{3943,254,0,0,0,0,0,0},{35,274,331,0,0,0,0,0,0,0,0,0},{23,280,323,0,0,0,0,0,0}},
-       {13330, 243, 23, 35, 1906, 352, 1924, 1927, {3719, 3726, 3733, 3741, 3751, 3760, 3767}, {3776, 3780, 3784, 3788, 3792, 3796, 3800}, {2018, 2403, 2405, 3804, 2405, 2409, 2018}, {3806, 3814, 3823, 2715, 3829, 3833, 3838, 2735, 2742, 3843, 2760, 3851, 0}, {3806, 3814, 3823, 2715, 3829, 3833, 3838, 2735, 2742, 3843, 2760, 3851, 0}, {2778, 2782, 3860, 2791, 3829, 2795, 2799, 2803, 2807, 3864, 2815, 3868, 0}, {2778, 2782, 3860, 2791, 3829, 2795, 2799, 2803, 2807, 3864, 2815, 3868, 0}, 0, 0, 239, 241, {243,1210,0,0,0,0,0,0,0,0,0,0,0,0},{13330,0,0,0,0,0,0,0},{35,274,0,0,0,0,0,0,0,0,0,0},{23,280,0,0,0,0,0,0,0}},
-       {4313, 243, 23, 35, 947, 3985, 962, 968, {3997, 4005, 4011, 4018, 4029, 4036, 4044}, {4052, 4057, 4062, 4067, 4073, 4078, 4083}, {2692, 2411, 2403, 2403, 4089, 4091, 2018}, {4093, 4099, 4107, 4113, 4119, 4124, 4130, 4136, 4143, 4154, 4162, 4172, 0}, {4182, 4188, 4196, 1102, 4202, 4207, 4213, 4219, 4226, 1140, 4237, 4247, 0}, {4257, 4262, 4062, 4267, 4272, 4277, 4282, 4287, 4292, 4298, 4303, 4308, 0}, {4257, 4262, 4062, 4267, 4272, 4277, 4282, 4287, 4292, 4298, 4303, 4308, 0}, 0, 0, 239, 241, {243,14,1229,1236,1210,0,0,0,0,0,0,0,0,0},{4313,4342,4369,0,0,0,0,0},{35,2947,331,274,0,0,0,0,0,0,0,0},{23,2936,323,280,0,0,0,0,0}},
-       {9044, 9058, 323, 331, 36381, 1916, 36403, 36421, {36436, 36449, 36468, 8571, 36496, 36513, 10880}, {36524, 36531, 36538, 36749, 36552, 36559, 36566}, {519, 522, 36573, 528, 531, 522, 528}, {36576, 36589, 564, 573, 15808, 36700, 36707, 605, 36604, 36623, 36638, 36655, 0}, {36576, 36589, 564, 573, 15808, 36700, 36707, 605, 36604, 36623, 36638, 36655, 0}, {36672, 36679, 36686, 36693, 15808, 36700, 36707, 36714, 36721, 36728, 36735, 36742, 0}, {36672, 36679, 36686, 36693, 15808, 36700, 36707, 36714, 36721, 36728, 36735, 36742, 0}, 0, 1, 754, 241, {2261,2843,1895,2587,9640,1245,11970,1210,0,0,0,0,0,0},{1882,2554,2568,0,0,0,0,0},{331,274,0,0,0,0,0,0,0,0,0,0},{323,280,0,0,0,0,0,0,0}},
-       {3943, 243, 23, 35, 44, 55, 0, 0, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {34952, 34976, 34985, 34994, 35005, 35014, 35027, 35036, 35041, 35052, 35074, 35098, 0}, {34952, 34976, 34985, 34994, 35005, 35014, 35027, 35036, 35041, 35052, 35074, 35098, 0}, {34952, 34976, 34985, 34994, 35005, 35014, 35027, 35036, 35041, 35052, 35074, 35098, 0}, {34952, 34976, 34985, 34994, 35005, 35014, 35027, 35036, 35041, 35052, 35074, 35098, 0}, 0, 6, 239, 241, {243,14,1210,0,0,0,0,0,0,0,0,0,0,0},{3943,254,0,0,0,0,0,0},{35,274,331,0,0,0,0,0,0,0,0,0},{23,280,323,0,0,0,0,0,0}},
-       {13330, 243, 23, 35, 1906, 352, 1924, 1927, {3719, 3726, 3733, 3741, 3751, 3760, 3767}, {3776, 3780, 3784, 3788, 3792, 3796, 3800}, {2018, 2403, 2405, 3804, 2405, 2409, 2018}, {3806, 3814, 3823, 2715, 3829, 3833, 3838, 2735, 2742, 3843, 2760, 3851, 0}, {3806, 3814, 3823, 2715, 3829, 3833, 3838, 2735, 2742, 3843, 2760, 3851, 0}, {2778, 2782, 3860, 2791, 3829, 2795, 2799, 2803, 2807, 3864, 2815, 3868, 0}, {2778, 2782, 3860, 2791, 3829, 2795, 2799, 2803, 2807, 3864, 2815, 3868, 0}, 0, 0, 239, 241, {243,1210,0,0,0,0,0,0,0,0,0,0,0,0},{13330,0,0,0,0,0,0,0},{35,274,0,0,0,0,0,0,0,0,0,0},{23,280,0,0,0,0,0,0,0}},
-       {4313, 243, 23, 35, 947, 36756, 962, 968, {3997, 4005, 4011, 4018, 4029, 4036, 4044}, {4052, 4057, 4062, 4067, 4073, 4078, 4083}, {2692, 2411, 2403, 2403, 4089, 4091, 2018}, {4093, 4099, 4107, 4113, 4119, 4124, 4130, 4136, 4143, 4154, 4162, 4172, 0}, {4182, 4188, 4196, 1102, 4202, 4207, 4213, 4219, 4226, 1140, 4237, 4247, 0}, {4257, 4262, 4062, 4267, 4272, 4277, 4282, 4287, 4292, 4298, 4303, 4308, 0}, {4257, 4262, 4062, 4267, 4272, 4277, 4282, 4287, 4292, 4298, 4303, 4308, 0}, 0, 0, 239, 241, {243,14,1229,1236,1210,0,0,0,0,0,0,0,0,0},{4313,4342,4369,0,0,0,0,0},{35,2947,274,331,0,0,0,0,0,0,0,0},{23,2936,280,323,0,0,0,0,0}},
-       {9044, 9058, 323, 331, 36381, 1916, 36228, 36238, {11891, 36392, 9089, 11916, 9104, 9114, 9120}, {9127, 9131, 9135, 11937, 9143, 9148, 9152}, {9156, 9158, 9160, 9162, 9164, 9158, 9162}, {2413, 2420, 15113, 2434, 2440, 2513, 2517, 11959, 36246, 36256, 36264, 36273, 0}, {2413, 2420, 15113, 2434, 2440, 2513, 2517, 11959, 36246, 36256, 36264, 36273, 0}, {2497, 2501, 2505, 2509, 2440, 2513, 2517, 11966, 2525, 2529, 2533, 2537, 0}, {2497, 2501, 2505, 2509, 2440, 2513, 2517, 11966, 2525, 2529, 2533, 2537, 0}, 0, 1, 754, 241, {2261,2843,1895,2587,9640,1245,11970,1210,0,0,0,0,0,0},{1882,2554,2568,0,0,0,0,0},{331,274,0,0,0,0,0,0,0,0,0,0},{323,280,0,0,0,0,0,0,0}},
-       {3943, 243, 23, 35, 44, 55, 0, 0, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {34952, 34976, 34985, 34994, 35005, 35014, 35027, 35036, 35041, 35052, 35074, 35098, 0}, {34952, 34976, 34985, 34994, 35005, 35014, 35027, 35036, 35041, 35052, 35074, 35098, 0}, {34952, 34976, 34985, 34994, 35005, 35014, 35027, 35036, 35041, 35052, 35074, 35098, 0}, {34952, 34976, 34985, 34994, 35005, 35014, 35027, 35036, 35041, 35052, 35074, 35098, 0}, 0, 1, 239, 241, {243,14,1210,0,0,0,0,0,0,0,0,0,0,0},{3943,254,0,0,0,0,0,0},{35,274,331,0,0,0,0,0,0,0,0,0},{23,280,323,0,0,0,0,0,0}},
-       {2909, 243, 2936, 2947, 36769, 352, 1924, 1927, {3719, 3726, 3733, 3741, 3751, 3760, 3767}, {3776, 3780, 3784, 3788, 3792, 3796, 3800}, {2018, 2403, 2405, 3804, 2405, 2409, 2018}, {3806, 3814, 3823, 2715, 3829, 3833, 3838, 2735, 2742, 3843, 2760, 3851, 0}, {3806, 3814, 3823, 2715, 3829, 3833, 3838, 2735, 2742, 3843, 2760, 3851, 0}, {2778, 2782, 3860, 2791, 3829, 2795, 2799, 2803, 2807, 3864, 2815, 3868, 0}, {2778, 2782, 3860, 2791, 3829, 2795, 2799, 2803, 2807, 3864, 2815, 3868, 0}, 0, 0, 239, 241, {3703,3872,3879,3888,1210,1779,3899,0,0,0,0,0,0,0},{3909,3929,254,3943,0,0,0,0},{2947,35,331,274,0,0,0,0,0,0,0,0},{2936,23,323,280,0,0,0,0,0}},
-       {4313, 243, 323, 331, 947, 3985, 962, 968, {3997, 4005, 4011, 4018, 4029, 4036, 4044}, {4052, 4057, 4062, 4067, 4073, 4078, 4083}, {2692, 2411, 2403, 2403, 4089, 4091, 2018}, {4093, 4099, 4107, 4113, 4119, 4124, 4130, 4136, 4143, 4154, 4162, 4172, 0}, {4182, 4188, 4196, 1102, 4202, 4207, 4213, 4219, 4226, 1140, 4237, 4247, 0}, {4257, 4262, 4062, 4267, 4272, 4277, 4282, 4287, 4292, 4298, 4303, 4308, 0}, {4257, 4262, 4062, 4267, 4272, 4277, 4282, 4287, 4292, 4298, 4303, 4308, 0}, 0, 1, 239, 241, {243,14,1229,1236,1210,0,0,0,0,0,0,0,0,0},{4313,4342,4369,0,0,0,0,0},{331,274,0,0,0,0,0,0,0,0,0,0},{323,280,0,0,0,0,0,0,0}},
-       {9044, 9058, 323, 331, 36381, 1916, 36403, 36421, {36436, 36449, 36468, 8571, 36496, 36513, 10880}, {36524, 36531, 36538, 36749, 36552, 36559, 36566}, {519, 522, 36573, 528, 531, 522, 528}, {36576, 36589, 564, 573, 15808, 36700, 36707, 605, 36604, 36623, 36638, 36655, 0}, {36576, 36589, 564, 573, 15808, 36700, 36707, 605, 36604, 36623, 36638, 36655, 0}, {36672, 36679, 36686, 36693, 15808, 36700, 36707, 36714, 36721, 36728, 36735, 36742, 0}, {36672, 36679, 36686, 36693, 15808, 36700, 36707, 36714, 36721, 36728, 36735, 36742, 0}, 0, 1, 754, 241, {2261,2843,1895,2587,9640,1245,11970,1210,0,0,0,0,0,0},{1882,2554,2568,0,0,0,0,0},{331,274,0,0,0,0,0,0,0,0,0,0},{323,280,0,0,0,0,0,0,0}},
-       {3943, 243, 23, 35, 44, 55, 0, 0, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {63, 72, 79, 99, 119, 143, 167, 174, 185, 196, 205, 223, 0}, {63, 72, 79, 99, 119, 143, 167, 174, 185, 196, 205, 223, 0}, {63, 72, 79, 99, 119, 143, 167, 174, 185, 196, 205, 223, 0}, {63, 72, 79, 99, 119, 143, 167, 174, 185, 196, 205, 223, 0}, 0, 6, 239, 241, {243,14,1210,0,0,0,0,0,0,0,0,0,0,0},{3943,254,0,0,0,0,0,0},{35,274,331,0,0,0,0,0,0,0,0,0},{23,280,323,0,0,0,0,0,0}},
-       {3909, 3703, 2936, 2947, 44, 3712, 1924, 1927, {3719, 3726, 3733, 3741, 3751, 3760, 3767}, {3776, 3780, 3784, 3788, 3792, 3796, 3800}, {2018, 2403, 2405, 3804, 2405, 2409, 2018}, {3806, 3814, 3823, 2715, 3829, 3833, 3838, 2735, 2742, 3843, 2760, 3851, 0}, {3806, 3814, 3823, 2715, 3829, 3833, 3838, 2735, 2742, 3843, 2760, 3851, 0}, {2778, 2782, 3860, 2791, 3829, 2795, 2799, 2803, 2807, 3864, 2815, 3868, 0}, {2778, 2782, 3860, 2791, 3829, 2795, 2799, 2803, 2807, 3864, 2815, 3868, 0}, 0, 0, 239, 241, {3703,3872,3879,3888,1210,1779,3899,0,0,0,0,0,0,0},{3909,3929,254,3943,0,0,0,0},{2947,35,331,274,0,0,0,0,0,0,0,0},{2936,23,323,280,0,0,0,0,0}},
-       {4313, 2309, 323, 331, 947, 36779, 962, 968, {3997, 4005, 4011, 4018, 4029, 4036, 4044}, {4052, 4057, 4062, 4067, 4073, 4078, 4083}, {2692, 2411, 2403, 2403, 4089, 4091, 2018}, {4093, 4099, 4107, 4113, 4119, 4124, 4130, 4136, 4143, 4154, 4162, 4172, 0}, {4182, 4188, 4196, 1102, 4202, 4207, 4213, 4219, 4226, 1140, 4237, 4247, 0}, {4257, 4262, 4062, 4267, 4272, 4277, 4282, 4287, 4292, 4298, 4303, 4308, 0}, {4257, 4262, 4062, 4267, 4272, 4277, 4282, 4287, 4292, 4298, 4303, 4308, 0}, 0, 1, 2541, 241, {2309,1236,14,1229,1210,0,0,0,0,0,0,0,0,0},{4313,4342,4369,0,0,0,0,0},{331,274,0,0,0,0,0,0,0,0,0,0},{323,280,0,0,0,0,0,0,0}},
-       {3943, 243, 23, 35, 44, 55, 0, 0, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {63, 72, 79, 99, 119, 143, 167, 174, 185, 196, 205, 223, 0}, {63, 72, 79, 99, 119, 143, 167, 174, 185, 196, 205, 223, 0}, {63, 72, 79, 99, 119, 143, 167, 174, 185, 196, 205, 223, 0}, {63, 72, 79, 99, 119, 143, 167, 174, 185, 196, 205, 223, 0}, 0, 6, 239, 241, {243,14,1210,0,0,0,0,0,0,0,0,0,0,0},{3943,254,0,0,0,0,0,0},{35,274,331,0,0,0,0,0,0,0,0,0},{23,280,323,0,0,0,0,0,0}},
-       {4313, 243, 323, 331, 947, 3985, 962, 968, {3997, 4005, 4011, 4018, 4029, 4036, 4044}, {4052, 4057, 4062, 4067, 4073, 4078, 4083}, {2692, 2411, 2403, 2403, 4089, 4091, 2018}, {4093, 4099, 4107, 4113, 4119, 4124, 4130, 4136, 4143, 4154, 4162, 4172, 0}, {4182, 4188, 4196, 1102, 4202, 4207, 4213, 4219, 4226, 1140, 4237, 4247, 0}, {4257, 4262, 4062, 4267, 4272, 4277, 4282, 4287, 4292, 4298, 4303, 4308, 0}, {4257, 4262, 4062, 4267, 4272, 4277, 4282, 4287, 4292, 4298, 4303, 4308, 0}, 0, 1, 239, 241, {243,14,1229,1236,1210,0,0,0,0,0,0,0,0,0},{4313,4342,4369,0,0,0,0,0},{35,2947,331,274,0,0,0,0,0,0,0,0},{23,2936,323,280,0,0,0,0,0}},
-       {3943, 243, 23, 35, 44, 55, 0, 0, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {63, 72, 79, 99, 119, 143, 167, 174, 185, 196, 205, 223, 0}, {63, 72, 79, 99, 119, 143, 167, 174, 185, 196, 205, 223, 0}, {63, 72, 79, 99, 119, 143, 167, 174, 185, 196, 205, 223, 0}, {63, 72, 79, 99, 119, 143, 167, 174, 185, 196, 205, 223, 0}, 0, 6, 239, 241, {243,14,1210,0,0,0,0,0,0,0,0,0,0,0},{3943,254,0,0,0,0,0,0},{35,274,331,0,0,0,0,0,0,0,0,0},{23,280,323,0,0,0,0,0,0}},
-       {4313, 243, 23, 35, 947, 3985, 962, 968, {3997, 4005, 4011, 4018, 4029, 4036, 4044}, {4052, 4057, 4062, 4067, 4073, 4078, 4083}, {2692, 2411, 2403, 2403, 4089, 4091, 2018}, {4093, 4099, 4107, 4113, 4119, 4124, 4130, 4136, 4143, 4154, 4162, 4172, 0}, {4182, 4188, 4196, 1102, 4202, 4207, 4213, 4219, 4226, 1140, 4237, 4247, 0}, {4257, 4262, 4062, 4267, 4272, 4277, 4282, 4287, 4292, 4298, 4303, 4308, 0}, {4257, 4262, 4062, 4267, 4272, 4277, 4282, 4287, 4292, 4298, 4303, 4308, 0}, 0, 0, 239, 241, {243,14,1229,1236,1210,0,0,0,0,0,0,0,0,0},{4313,4342,4369,0,0,0,0,0},{35,2947,331,274,0,0,0,0,0,0,0,0},{23,2936,323,280,0,0,0,0,0}},
-       {3943, 243, 23, 35, 44, 55, 0, 0, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {63, 72, 79, 99, 119, 143, 167, 174, 185, 196, 205, 223, 0}, {63, 72, 79, 99, 119, 143, 167, 174, 185, 196, 205, 223, 0}, {63, 72, 79, 99, 119, 143, 167, 174, 185, 196, 205, 223, 0}, {63, 72, 79, 99, 119, 143, 167, 174, 185, 196, 205, 223, 0}, 0, 6, 239, 241, {243,14,1210,0,0,0,0,0,0,0,0,0,0,0},{3943,254,0,0,0,0,0,0},{35,274,331,0,0,0,0,0,0,0,0,0},{23,280,323,0,0,0,0,0,0}},
-       {5603, 2309, 280, 274, 44, 352, 7992, 21969, {3719, 3726, 3733, 3741, 3751, 3760, 3767}, {3776, 3780, 3784, 3788, 3792, 3796, 3800}, {2018, 2403, 2405, 3804, 2405, 2409, 2018}, {3806, 3814, 3823, 2715, 3829, 3833, 3838, 2735, 2742, 3843, 2760, 3851, 0}, {3806, 3814, 3823, 2715, 3829, 3833, 3838, 2735, 2742, 3843, 2760, 3851, 0}, {2778, 2782, 3860, 2791, 3829, 2795, 2799, 2803, 2807, 3864, 2815, 3868, 0}, {2778, 2782, 3860, 2791, 3829, 2795, 2799, 2803, 2807, 3864, 2815, 3868, 0}, 0, 0, 2541, 241, {2309,1236,2270,2843,1210,0,0,0,0,0,0,0,0,0},{5603,3672,0,0,0,0,0,0},{274,331,1850,0,0,0,0,0,0,0,0,0},{280,323,1870,1859,0,0,0,0,0}},
-       {4313, 243, 23, 35, 947, 36779, 962, 968, {3997, 4005, 4011, 4018, 4029, 4036, 4044}, {4052, 4057, 4062, 4067, 4073, 4078, 4083}, {2692, 2411, 2403, 2403, 4089, 4091, 2018}, {4093, 4099, 4107, 4113, 4119, 4124, 4130, 4136, 4143, 4154, 4162, 4172, 0}, {4182, 4188, 4196, 1102, 4202, 4207, 4213, 4219, 4226, 1140, 4237, 4247, 0}, {4257, 4262, 4062, 4267, 4272, 4277, 4282, 4287, 4292, 4298, 4303, 4308, 0}, {4257, 4262, 4062, 4267, 4272, 4277, 4282, 4287, 4292, 4298, 4303, 4308, 0}, 0, 0, 239, 241, {243,14,1229,1236,1210,0,0,0,0,0,0,0,0,0},{4313,4342,4369,0,0,0,0,0},{35,2947,331,274,0,0,0,0,0,0,0,0},{23,2936,323,280,0,0,0,0,0}},
-       {4313, 243, 23, 35, 947, 3985, 962, 968, {3997, 4005, 4011, 4018, 4029, 4036, 4044}, {4052, 4057, 4062, 4067, 4073, 4078, 4083}, {2692, 2411, 2403, 2403, 4089, 4091, 2018}, {4093, 4099, 4107, 4113, 4119, 4124, 4130, 4136, 4143, 4154, 4162, 4172, 0}, {4182, 4188, 4196, 1102, 4202, 4207, 4213, 4219, 4226, 1140, 4237, 4247, 0}, {4257, 4262, 4062, 4267, 4272, 4277, 4282, 4287, 4292, 4298, 4303, 4308, 0}, {4257, 4262, 4062, 4267, 4272, 4277, 4282, 4287, 4292, 4298, 4303, 4308, 0}, 0, 0, 239, 241, {243,14,34247,1210,0,0,0,0,0,0,0,0,0,0},{4313,0,0,0,0,0,0,0},{35,274,0,0,0,0,0,0,0,0,0,0},{23,280,0,0,0,0,0,0,0}},
-       {2909, 2927, 2936, 2947, 1906, 352, 7992, 21969, {3719, 3726, 3733, 3741, 3751, 3760, 3767}, {3776, 3780, 3784, 3788, 3792, 3796, 3800}, {2018, 2403, 2405, 3804, 2405, 2409, 2018}, {3806, 3814, 3823, 2715, 3829, 3833, 3838, 2735, 2742, 3843, 2760, 3851, 0}, {3806, 3814, 3823, 2715, 3829, 3833, 3838, 2735, 2742, 3843, 2760, 3851, 0}, {2778, 2782, 3860, 2791, 3829, 2795, 2799, 2803, 2807, 3864, 2815, 3868, 0}, {2778, 2782, 3860, 2791, 3829, 2795, 2799, 2803, 2807, 3864, 2815, 3868, 0}, 0, 0, 239, 241, {2927,1229,243,14,1210,0,0,0,0,0,0,0,0,0},{36790,14105,0,0,0,0,0,0},{2947,35,331,274,0,0,0,0,0,0,0,0},{2936,23,323,280,0,0,0,0,0}},
-       {3957, 243, 23, 35, 947, 3985, 962, 968, {3997, 4005, 4011, 4018, 4029, 4036, 4044}, {4052, 4057, 4062, 4067, 4073, 4078, 4083}, {2692, 2411, 2403, 2403, 4089, 4091, 2018}, {4093, 4099, 4107, 4113, 4119, 4124, 4130, 4136, 4143, 4154, 4162, 4172, 0}, {4182, 4188, 4196, 1102, 4202, 4207, 4213, 4219, 4226, 1140, 4237, 4247, 0}, {4257, 4262, 4062, 4267, 4272, 4277, 4282, 4287, 4292, 4298, 4303, 4308, 0}, {4257, 4262, 4062, 4267, 4272, 4277, 4282, 4287, 4292, 4298, 4303, 4308, 0}, 0, 0, 239, 241, {243,14,34247,1210,0,0,0,0,0,0,0,0,0,0},{4313,0,0,0,0,0,0,0},{35,274,0,0,0,0,0,0,0,0,0,0},{23,280,0,0,0,0,0,0,0}},
-       {3957, 243, 23, 35, 36809, 3985, 962, 968, {3997, 4005, 4011, 4018, 4029, 4036, 4044}, {4052, 4057, 4062, 4067, 4073, 4078, 4083}, {2692, 2411, 2403, 2403, 4089, 4091, 2018}, {4093, 4099, 4107, 4113, 4119, 4124, 4130, 4136, 4143, 4154, 4162, 4172, 0}, {4182, 4188, 4196, 1102, 4202, 4207, 4213, 4219, 4226, 1140, 4237, 4247, 0}, {4257, 4262, 4062, 4267, 4272, 4277, 4282, 4287, 4292, 4298, 4303, 4308, 0}, {4257, 4262, 4062, 4267, 4272, 4277, 4282, 4287, 4292, 4298, 4303, 4308, 0}, 0, 0, 239, 241, {243,14,34247,1210,0,0,0,0,0,0,0,0,0,0},{4313,0,0,0,0,0,0,0},{35,274,0,0,0,0,0,0,0,0,0,0},{23,280,0,0,0,0,0,0,0}},
-       {4313, 243, 23, 35, 947, 3985, 962, 968, {3997, 4005, 4011, 4018, 4029, 4036, 4044}, {4052, 4057, 4062, 4067, 4073, 4078, 4083}, {2692, 2411, 2403, 2403, 4089, 4091, 2018}, {4093, 4099, 4107, 4113, 4119, 4124, 4130, 4136, 4143, 4154, 4162, 4172, 0}, {4182, 4188, 4196, 1102, 4202, 4207, 4213, 4219, 4226, 1140, 4237, 4247, 0}, {4257, 4262, 4062, 4267, 4272, 4277, 4282, 4287, 4292, 4298, 4303, 4308, 0}, {4257, 4262, 4062, 4267, 4272, 4277, 4282, 4287, 4292, 4298, 4303, 4308, 0}, 0, 0, 239, 241, {243,14,34247,1210,0,0,0,0,0,0,0,0,0,0},{4313,0,0,0,0,0,0,0},{35,274,0,0,0,0,0,0,0,0,0,0},{23,280,0,0,0,0,0,0,0}},
-       {3909, 3703, 2936, 2947, 947, 3712, 1924, 1927, {3997, 4005, 4011, 4018, 4029, 4036, 4044}, {4052, 4057, 4062, 4067, 4073, 4078, 4083}, {2692, 2411, 2403, 2403, 4089, 4091, 2018}, {4093, 4099, 4107, 4113, 4119, 4124, 4130, 4136, 4143, 4154, 4162, 4172, 0}, {4182, 4188, 4196, 1102, 4202, 4207, 4213, 4219, 4226, 1140, 4237, 4247, 0}, {4257, 4262, 4062, 4267, 4272, 4277, 4282, 4287, 4292, 4298, 4303, 4308, 0}, {4257, 4262, 4062, 4267, 4272, 4277, 4282, 4287, 4292, 4298, 4303, 4308, 0}, 0, 0, 239, 241, {3703,3872,3879,3888,1779,1210,3899,0,0,0,0,0,0,0},{3909,3929,254,3943,0,0,0,0},{2947,35,331,274,0,0,0,0,0,0,0,0},{2936,23,323,280,0,0,0,0,0}},
-       {1882, 2261, 323, 331, 44, 19963, 36403, 36421, {36436, 36449, 36468, 36481, 36496, 36513, 10880}, {36524, 36531, 36538, 36545, 36552, 36559, 36566}, {519, 522, 36573, 528, 531, 522, 528}, {36576, 36589, 564, 573, 15808, 15815, 15824, 605, 36604, 36623, 36638, 36655, 0}, {36576, 36589, 564, 573, 15808, 15815, 15824, 605, 36604, 36623, 36638, 36655, 0}, {36672, 36679, 36686, 36693, 15808, 36700, 36707, 36714, 36721, 36728, 36735, 36742, 0}, {36672, 36679, 36686, 36693, 15808, 36700, 36707, 36714, 36721, 36728, 36735, 36742, 0}, 0, 1, 754, 241, {2261,2843,1895,2587,9640,1245,11970,1210,0,0,0,0,0,0},{1882,2554,2568,0,0,0,0,0},{331,274,0,0,0,0,0,0,0,0,0,0},{323,280,0,0,0,0,0,0,0}},
-       {1882, 2261, 323, 331, 1906, 11991, 36228, 36238, {9068, 9077, 9089, 9096, 9104, 9114, 9120}, {9127, 9131, 9135, 9139, 9143, 9148, 9152}, {0, 0, 0, 0, 0, 0, 0}, {2413, 2420, 15113, 2434, 2440, 2444, 2449, 11959, 36246, 36256, 36264, 36273, 0}, {2413, 2420, 15113, 2434, 2440, 2444, 2449, 11959, 36246, 36256, 36264, 36273, 0}, {2497, 2501, 2505, 2509, 2440, 2513, 2517, 11966, 2525, 2529, 2533, 2537, 0}, {2497, 2501, 2505, 2509, 2440, 2513, 2517, 11966, 2525, 2529, 2533, 2537, 0}, 0, 1, 754, 241, {2261,2843,1895,2587,9640,1245,11970,1210,0,0,0,0,0,0},{1882,2554,2568,0,0,0,0,0},{331,274,0,0,0,0,0,0,0,0,0,0},{323,280,0,0,0,0,0,0,0}},
-       {9044, 9058, 323, 331, 36381, 1916, 36403, 36421, {36436, 36449, 36468, 8571, 36496, 36513, 10880}, {36524, 36531, 36538, 36749, 36552, 36559, 36566}, {519, 522, 36573, 528, 531, 522, 528}, {36576, 36589, 564, 573, 15808, 36700, 36707, 605, 36604, 36623, 36638, 36655, 0}, {36576, 36589, 564, 573, 15808, 36700, 36707, 605, 36604, 36623, 36638, 36655, 0}, {36672, 36679, 36686, 36693, 15808, 36700, 36707, 36714, 36721, 36728, 36735, 36742, 0}, {36672, 36679, 36686, 36693, 15808, 36700, 36707, 36714, 36721, 36728, 36735, 36742, 0}, 0, 1, 754, 241, {2261,2843,1895,2587,9640,1245,11970,1210,0,0,0,0,0,0},{1882,2554,2568,0,0,0,0,0},{331,274,0,0,0,0,0,0,0,0,0,0},{323,280,0,0,0,0,0,0,0}},
-       {9044, 9058, 323, 331, 36381, 1916, 36228, 36238, {11891, 36392, 9089, 11916, 9104, 9114, 9120}, {9127, 9131, 9135, 11937, 9143, 9148, 9152}, {9156, 9158, 9160, 9162, 9164, 9158, 9162}, {2413, 2420, 15113, 2434, 2440, 2513, 2517, 11959, 36246, 36256, 36264, 36273, 0}, {2413, 2420, 15113, 2434, 2440, 2513, 2517, 11959, 36246, 36256, 36264, 36273, 0}, {2497, 2501, 2505, 2509, 2440, 2513, 2517, 11966, 2525, 2529, 2533, 2537, 0}, {2497, 2501, 2505, 2509, 2440, 2513, 2517, 11966, 2525, 2529, 2533, 2537, 0}, 0, 1, 754, 241, {2261,2843,1895,2587,9640,1245,11970,1210,0,0,0,0,0,0},{1882,2554,2568,0,0,0,0,0},{331,274,0,0,0,0,0,0,0,0,0,0},{323,280,0,0,0,0,0,0,0}},
-       {3672, 2587, 280, 331, 1906, 352, 1924, 1927, {35307, 35318, 35342, 35372, 35389, 35411, 35420}, {15002, 15005, 15010, 15016, 15020, 7548, 15025}, {6687, 6675, 6677, 6679, 6681, 6683, 6685}, {35431, 35444, 564, 35457, 584, 35468, 35477, 605, 35486, 35503, 35518, 35531, 0}, {35431, 35444, 564, 35457, 584, 35468, 35477, 605, 35486, 35503, 35518, 35531, 0}, {15176, 7947, 2505, 2509, 15124, 15180, 15184, 15188, 15192, 2529, 15196, 15200, 0}, {15176, 7947, 2505, 2509, 15124, 15180, 15184, 15188, 15192, 2529, 15196, 15200, 0}, 0, 1, 754, 241, {2587,1245,2843,14,1210,0,0,0,0,0,0,0,0,0},{3672,5603,0,0,0,0,0,0},{331,274,0,0,0,0,0,0,0,0,0,0},{323,280,0,0,0,0,0,0,0}},
-       {1344, 1366, 323, 331, 1375, 1391, 1404, 1411, {1418, 1428, 1438, 1448, 1458, 1468, 1478}, {1488, 1495, 1502, 1509, 1516, 1523, 1530}, {1537, 1541, 1545, 1549, 1553, 1557, 1561}, {1565, 1572, 1579, 1586, 1593, 1600, 1607, 1614, 1621, 1628, 1635, 1645, 0}, {1565, 1572, 1579, 1586, 1593, 1600, 1607, 1614, 1621, 1628, 1635, 1645, 0}, {1655, 1660, 1665, 1670, 1675, 1680, 1685, 1690, 1695, 1700, 1706, 1712, 0}, {1655, 1660, 1665, 1670, 1675, 1680, 1685, 1690, 1695, 1700, 1706, 1712, 0}, 0, 0, 239, 241, {1366,1718,1727,1210,1736,1747,1758,1765,1772,1779,0,0,0,0},{1344,1788,1815,0,0,0,0,0},{331,274,1842,1850,0,0,0,0,0,0,0,0},{323,280,1859,1870,0,0,0,0,0}},
-       {1882, 2587, 280, 274, 1906, 1916, 35194, 35199, {2320, 9929, 35204, 2343, 2350, 2358, 35211}, {2373, 35219, 35224, 2386, 2390, 2394, 35228}, {2018, 2403, 2405, 2407, 2405, 2409, 2411}, {2413, 2420, 4978, 2434, 4989, 2444, 2449, 2454, 2461, 2471, 2479, 6201, 0}, {2413, 2420, 4978, 2434, 4989, 2444, 2449, 2454, 2461, 2471, 2479, 6201, 0}, {2497, 2501, 2505, 2509, 4989, 2513, 2517, 2521, 2525, 2529, 2533, 7426, 0}, {2497, 2501, 2505, 2509, 4989, 2513, 2517, 2521, 2525, 2529, 2533, 7426, 0}, 2, 1, 754, 241, {2587,1245,2843,1210,2823,0,0,0,0,0,0,0,0,0},{1882,2554,0,0,0,0,0,0},{274,331,7430,5085,0,0,0,0,0,0,0,0},{280,323,7441,6558,0,0,0,0,0}},
-       {1882, 2261, 323, 331, 1906, 11991, 36228, 36238, {9068, 9077, 9089, 9096, 9104, 9114, 9120}, {9127, 9131, 9135, 9139, 9143, 9148, 9152}, {0, 0, 0, 0, 0, 0, 0}, {2413, 2420, 15113, 2434, 2440, 2444, 2449, 11959, 36246, 36256, 36264, 36273, 0}, {2413, 2420, 15113, 2434, 2440, 2444, 2449, 11959, 36246, 36256, 36264, 36273, 0}, {2497, 2501, 2505, 2509, 2440, 2513, 2517, 11966, 2525, 2529, 2533, 2537, 0}, {2497, 2501, 2505, 2509, 2440, 2513, 2517, 11966, 2525, 2529, 2533, 2537, 0}, 0, 1, 754, 241, {2261,2843,1895,2587,9640,1245,11970,1210,0,0,0,0,0,0},{1882,2554,2568,0,0,0,0,0},{331,274,0,0,0,0,0,0,0,0,0,0},{323,280,0,0,0,0,0,0,0}},
-       {14891, 2587, 280, 274, 1906, 352, 1924, 1927, {14913, 14919, 14933, 14956, 14970, 14986, 14993}, {15002, 15005, 15010, 15016, 15020, 7548, 15025}, {6687, 6675, 6677, 6679, 6681, 6683, 6685}, {15029, 15036, 10276, 15043, 3829, 15049, 15055, 15061, 15068, 15077, 15085, 15092, 0}, {15099, 15106, 15113, 15118, 15124, 15128, 15133, 15138, 15145, 15154, 15162, 15169, 0}, {15176, 7947, 2505, 2509, 15124, 15180, 15184, 15188, 15192, 2529, 15196, 15200, 0}, {15176, 7947, 2505, 2509, 15124, 15180, 15184, 15188, 15192, 2529, 15196, 15200, 0}, 0, 1, 754, 241, {2587,1245,2843,14,1210,0,0,0,0,0,0,0,0,0},{3672,5603,0,0,0,0,0,0},{331,274,0,0,0,0,0,0,0,0,0,0},{323,280,0,0,0,0,0,0,0}},
-       {35544, 2587, 280, 274, 1906, 352, 1924, 1927, {35565, 35580, 35595, 35610, 35627, 35644, 35653}, {35664, 35671, 35678, 35685, 35692, 19764, 35699}, {35706, 19343, 8668, 8671, 8665, 19340, 19778}, {13166, 13177, 8702, 13190, 8724, 13201, 13208, 8749, 13215, 13230, 13243, 13254, 0}, {13166, 13177, 8702, 13190, 8724, 13201, 13208, 8749, 13215, 13230, 13243, 13254, 0}, {13267, 13274, 13281, 13288, 8724, 13201, 13208, 13295, 13302, 13309, 13316, 13323, 0}, {13267, 13274, 13281, 13288, 8724, 13201, 13208, 13295, 13302, 13309, 13316, 13323, 0}, 0, 1, 754, 241, {2587,1245,20249,2843,14,1210,0,0,0,0,0,0,0,0},{35544,3672,5603,0,0,0,0,0},{274,331,0,0,0,0,0,0,0,0,0,0},{280,323,0,0,0,0,0,0,0}},
-       {26058, 1210, 280, 274, 26112, 5736, 26131, 26136, {26141, 26148, 26159, 26172, 26185, 26196, 26209}, {26220, 26225, 26230, 26235, 26240, 26245, 26250}, {6675, 6677, 6679, 6681, 6683, 6685, 6687}, {26255, 26281, 26309, 26339, 26369, 26395, 26425, 26451, 26479, 26503, 26531, 26568, 0}, {26255, 26281, 26309, 26339, 26369, 26395, 26425, 26451, 26479, 26503, 26531, 26568, 0}, {26607, 26619, 26631, 26643, 26655, 26667, 26679, 26691, 26703, 26715, 26728, 26741, 0}, {26607, 26619, 26631, 26643, 26655, 26667, 26679, 26691, 26703, 26715, 26728, 26741, 0}, 0, 0, 2541, 241, {26754,1210,0,0,0,0,0,0,0,0,0,0,0,0},{26763,0,0,0,0,0,0,0},{331,0,0,0,0,0,0,0,0,0,0,0},{323,0,0,0,0,0,0,0,0}},
-       {1344, 2927, 323, 331, 1375, 1391, 1404, 1411, {1418, 1428, 1438, 1448, 1458, 1468, 1478}, {34903, 34910, 34917, 34924, 34931, 34938, 34945}, {1537, 1541, 1545, 1549, 1553, 1557, 1561}, {1655, 1660, 1665, 1670, 1675, 1680, 1685, 1690, 1695, 1700, 1706, 1712, 0}, {1655, 1660, 1665, 1670, 1675, 1680, 1685, 1690, 1695, 1700, 1706, 1712, 0}, {1655, 1660, 1665, 1670, 1675, 1680, 1685, 1690, 1695, 1700, 1706, 1712, 0}, {1655, 1660, 1665, 1670, 1675, 1680, 1685, 1690, 1695, 1700, 1706, 1712, 0}, 0, 0, 239, 241, {2927,1229,14,1765,1779,1366,1736,1210,0,0,0,0,0,0},{1344,6759,0,0,0,0,0,0},{331,274,0,0,0,0,0,0,0,0,0,0},{323,280,0,0,0,0,0,0,0}},
-       {1344, 2927, 323, 331, 1375, 1391, 1404, 1411, {1418, 1428, 1438, 1448, 1458, 1468, 1478}, {34903, 34910, 34917, 34924, 34931, 34938, 34945}, {1537, 1541, 1545, 1549, 1553, 1557, 1561}, {1655, 1660, 1665, 1670, 1675, 1680, 1685, 1690, 1695, 1700, 1706, 1712, 0}, {1655, 1660, 1665, 1670, 1675, 1680, 1685, 1690, 1695, 1700, 1706, 1712, 0}, {1655, 1660, 1665, 1670, 1675, 1680, 1685, 1690, 1695, 1700, 1706, 1712, 0}, {1655, 1660, 1665, 1670, 1675, 1680, 1685, 1690, 1695, 1700, 1706, 1712, 0}, 0, 0, 239, 241, {2927,1229,14,1765,1779,1366,1736,1210,0,0,0,0,0,0},{1344,6759,0,0,0,0,0,0},{331,274,0,0,0,0,0,0,0,0,0,0},{323,280,0,0,0,0,0,0,0}},
-       {1882, 2587, 280, 274, 1906, 1916, 7213, 7218, {2320, 2328, 2335, 2343, 2350, 2358, 2365}, {7396, 7401, 7405, 7409, 7413, 7417, 7421}, {2018, 2403, 2405, 2407, 2405, 2409, 2411}, {2413, 2420, 4978, 2434, 4989, 2444, 2449, 2454, 2461, 2471, 2479, 6201, 0}, {2413, 2420, 4978, 2434, 4989, 2444, 2449, 2454, 2461, 2471, 2479, 6201, 0}, {2497, 2501, 2505, 2509, 4989, 2513, 2517, 2521, 2525, 2529, 2533, 7426, 0}, {2497, 2501, 2505, 2509, 4989, 2513, 2517, 2521, 2525, 2529, 2533, 7426, 0}, 2, 1, 754, 241, {2587,1245,2843,1210,2823,0,0,0,0,0,0,0,0,0},{1882,2554,0,0,0,0,0,0},{274,331,7430,5085,0,0,0,0,0,0,0,0},{280,323,7441,6558,0,0,0,0,0}},
-       {9044, 9058, 323, 331, 36381, 1916, 36403, 36421, {36436, 36449, 36468, 8571, 36496, 36513, 10880}, {36524, 36531, 36538, 36749, 36552, 36559, 36566}, {519, 522, 36573, 528, 531, 522, 528}, {36576, 36589, 564, 573, 15808, 36700, 36707, 605, 36604, 36623, 36638, 36655, 0}, {36576, 36589, 564, 573, 15808, 36700, 36707, 605, 36604, 36623, 36638, 36655, 0}, {36672, 36679, 36686, 36693, 15808, 36700, 36707, 36714, 36721, 36728, 36735, 36742, 0}, {36672, 36679, 36686, 36693, 15808, 36700, 36707, 36714, 36721, 36728, 36735, 36742, 0}, 0, 1, 754, 241, {2261,2843,1895,2587,9640,1245,11970,1210,0,0,0,0,0,0},{1882,2554,2568,0,0,0,0,0},{331,274,0,0,0,0,0,0,0,0,0,0},{323,280,0,0,0,0,0,0,0}},
-       {12972, 2587, 280, 274, 1906, 55, 12990, 13002, {13014, 13029, 13044, 13059, 13076, 13095, 13106}, {13117, 13124, 13131, 13138, 13145, 13152, 13159}, {0, 0, 0, 0, 0, 0, 0}, {13166, 13177, 8702, 13190, 8724, 13201, 13208, 8749, 13215, 13230, 13243, 13254, 0}, {13166, 13177, 8702, 13190, 8724, 13201, 13208, 8749, 13215, 13230, 13243, 13254, 0}, {13267, 13274, 13281, 13288, 8724, 13201, 13208, 13295, 13302, 13309, 13316, 13323, 0}, {13267, 13274, 13281, 13288, 8724, 13201, 13208, 13295, 13302, 13309, 13316, 13323, 0}, 0, 1, 754, 241, {1245,1210,0,0,0,0,0,0,0,0,0,0,0,0},{3672,0,0,0,0,0,0,0},{331,274,0,0,0,0,0,0,0,0,0,0},{323,0,0,0,0,0,0,0,0}},
-       {20092, 2587, 280, 274, 1906, 20110, 1924, 1927, {20117, 20127, 20136, 20145, 20156, 20166, 20171}, {20178, 20184, 20189, 20194, 20199, 10699, 20203}, {20208, 2692, 2018, 7548, 2013, 4089, 2018}, {15029, 15036, 10276, 15043, 3829, 20210, 20215, 20220, 15068, 15077, 15085, 15092, 0}, {15029, 15036, 10276, 15043, 3829, 20210, 20215, 20220, 15068, 15077, 15085, 15092, 0}, {20227, 20232, 3860, 2791, 3829, 20210, 20215, 20236, 10683, 2811, 20240, 20245, 0}, {20227, 20232, 3860, 2791, 3829, 20210, 20215, 20236, 10683, 2811, 20240, 20245, 0}, 0, 1, 754, 241, {20249,1245,2843,14,1210,0,0,0,0,0,0,0,0,0},{20092,3672,5603,0,0,0,0,0},{274,331,0,0,0,0,0,0,0,0,0,0},{280,323,0,0,0,0,0,0,0}},
-       {3943, 2309, 323, 331, 44, 352, 30622, 30632, {30645, 30652, 30658, 30665, 30671, 30677, 30685}, {30695, 30699, 30703, 30707, 30711, 30715, 30719}, {12798, 12798, 12798, 12798, 12798, 12798, 12798}, {30725, 30734, 10000, 30743, 30749, 30755, 30761, 30768, 30774, 30783, 30792, 30800, 0}, {30725, 30734, 10000, 30743, 30749, 30755, 30761, 30768, 30774, 30783, 30792, 30800, 0}, {30809, 30813, 3860, 30817, 3829, 30821, 30825, 30829, 30834, 30838, 30844, 30848, 0}, {30809, 30813, 3860, 30817, 3829, 30821, 30825, 30829, 30834, 30838, 30844, 30848, 0}, 0, 0, 2541, 241, {2309,1236,1210,0,0,0,0,0,0,0,0,0,0,0},{3943,254,0,0,0,0,0,0},{331,274,30852,0,0,0,0,0,0,0,0,0},{323,280,0,0,0,0,0,0,0}},
-       {3909, 2927, 2936, 2947, 44, 352, 0, 0, {31642, 31649, 31657, 31664, 31671, 31679, 31687}, {31694, 31697, 31700, 31703, 31706, 31709, 31712}, {2411, 2411, 2405, 2411, 12798, 4089, 12798}, {31715, 31723, 31733, 31739, 31747, 31752, 31757, 31762, 31769, 20073, 31777, 31785, 0}, {31715, 31723, 31733, 31739, 31747, 31752, 31757, 31762, 31769, 20073, 31777, 31785, 0}, {2778, 31793, 3860, 31797, 3829, 30821, 30825, 31801, 3800, 2811, 31805, 16316, 0}, {2778, 31793, 3860, 31797, 3829, 30821, 30825, 31801, 3800, 2811, 31805, 16316, 0}, 0, 0, 239, 241, {2927,1229,14,243,1779,1210,3899,0,0,0,0,0,0,0},{3909,3929,254,3943,0,0,0,0},{2947,35,331,274,0,0,0,0,0,0,0,0},{2936,23,323,280,0,0,0,0,0}}
+       {1, 0, 0, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {9, 18, 25, 45, 65, 89, 113, 120, 131, 142, 151, 169, 0}, {9, 18, 25, 45, 65, 89, 113, 120, 131, 142, 151, 169, 0}, {9, 18, 25, 45, 65, 89, 113, 120, 131, 142, 151, 169, 0}, {9, 18, 25, 45, 65, 89, 113, 120, 131, 142, 151, 169, 0}, 0, 6, 185, 187, {189,198,0,0,0,0,0,0,0,0,0,0,0,0},{209,222,0,0,0,0,0,0,0,0},{242,251,0,0,0,0,0,0,0,0,0,0},{257,269,0,0,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {289, 296, 307, {318, 331, 352, 367, 378, 397, 408}, {421, 426, 431, 436, 441, 446, 451}, {456, 459, 462, 465, 468, 459, 465}, {471, 484, 501, 510, 521, 528, 535, 542, 555, 574, 591, 606, 0}, {471, 484, 501, 510, 521, 528, 535, 542, 555, 574, 591, 606, 0}, {623, 629, 501, 639, 521, 528, 535, 647, 655, 665, 673, 683, 0}, {623, 629, 501, 639, 521, 528, 535, 647, 655, 665, 673, 683, 0}, 2, 1, 691, 187, {693,708,724,740,0,0,0,0,0,0,0,0,0,0},{757,776,794,819,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{856,0,0,0,0,0,0,0}},
+       {289, 872, 878, {884, 893, 901, 909, 918, 925, 935}, {944, 948, 952, 956, 960, 964, 968}, {972, 975, 978, 981, 984, 987, 990}, {993, 999, 1006, 1012, 1018, 1023, 1028, 1035, 1041, 1050, 1058, 1067, 0}, {993, 999, 1006, 1012, 1018, 1023, 1028, 1035, 1041, 1050, 1058, 1067, 0}, {1076, 1081, 1006, 1086, 1018, 1023, 1091, 1096, 1100, 1105, 1110, 1115, 0}, {1076, 1081, 1006, 1086, 1018, 1023, 1091, 1096, 1100, 1105, 1110, 1115, 0}, 2, 1, 185, 187, {198,189,1120,1128,1139,1148,1156,1167,1176,0,0,0,0,0},{1184,1207,1225,1242,1254,1270,0,0,0,0},{843,0,0,0,0,0,0,0,0,0,0,0},{848,0,0,0,0,0,0,0,0},{1286,1301,1311,1320,0,0,0,0}},
+       {1327, 1340, 1347, {1354, 1364, 1374, 1384, 1394, 1404, 1414}, {1424, 1431, 1438, 1445, 1452, 1459, 1466}, {1473, 1477, 1481, 1485, 1489, 1493, 1497}, {1501, 1508, 1515, 1522, 1529, 1536, 1543, 1550, 1557, 1564, 1571, 1581, 0}, {1501, 1508, 1515, 1522, 1529, 1536, 1543, 1550, 1557, 1564, 1571, 1581, 0}, {1591, 1596, 1601, 1606, 1611, 1616, 1621, 1626, 1631, 1636, 1642, 1648, 0}, {1591, 1596, 1601, 1606, 1611, 1616, 1621, 1626, 1631, 1636, 1642, 1648, 0}, 0, 0, 185, 187, {1654,1663,1672,1681,1692,1703,1714,1721,1728,1735,0,0,0,0},{1744,1766,1794,1822,1837,0,0,0,0,0},{843,251,1858,1866,0,0,0,0,0,0,0,0},{848,269,1875,1886,0,0,0,0,0},{1898,1914,0,0,0,0,0,0}},
+       {1327, 1340, 1347, {1354, 1364, 1374, 1384, 1394, 1404, 1414}, {1424, 1431, 1438, 1445, 1452, 1459, 1466}, {1473, 1477, 1481, 1485, 1489, 1493, 1497}, {1501, 1508, 1515, 1522, 1529, 1536, 1543, 1550, 1557, 1564, 1571, 1581, 0}, {1501, 1508, 1515, 1522, 1529, 1536, 1543, 1550, 1557, 1564, 1571, 1581, 0}, {1591, 1596, 1601, 1606, 1611, 1616, 1621, 1626, 1631, 1636, 1642, 1648, 0}, {1591, 1596, 1601, 1606, 1611, 1616, 1621, 1626, 1631, 1636, 1642, 1648, 0}, 0, 0, 185, 187, {1654,1663,1672,1681,1692,1703,1714,1721,1728,1735,0,0,0,0},{1744,1766,1794,1822,1837,0,0,0,0,0},{843,251,1858,1866,0,0,0,0,0,0,0,0},{848,269,1875,1886,0,0,0,0,0},{1898,1914,0,0,0,0,0,0}},
+       {1921, 1929, 1932, {1935, 1943, 1953, 1961, 1969, 1978, 1985}, {1992, 1995, 1998, 2002, 2005, 2009, 2013}, {2016, 2018, 2020, 2023, 2025, 2018, 2023}, {2028, 2034, 2040, 2048, 2054, 2062, 2070, 2080, 2086, 2094, 2102, 2111, 0}, {2120, 2126, 2133, 2141, 2147, 2155, 2163, 2173, 2086, 2179, 2187, 2197, 0}, {2206, 2210, 2215, 2220, 2224, 2229, 2234, 2239, 2243, 2249, 2255, 2259, 0}, {2206, 2210, 2215, 2220, 2224, 2229, 2234, 2239, 2243, 2249, 2255, 2259, 0}, 2, 1, 2263, 187, {2266,2277,198,2286,189,2293,1692,1663,1721,0,0,0,0,0},{2300,0,0,0,0,0,0,0,0,0},{843,251,2313,2321,0,0,0,0,0,0,0,0},{848,269,2326,2337,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {1921, 1929, 1932, {2345, 2353, 2360, 2368, 2375, 2383, 2390}, {2398, 2403, 2407, 2411, 2415, 2419, 2423}, {2023, 2428, 2430, 2432, 2430, 2434, 2436}, {2438, 2445, 2453, 2459, 2465, 2469, 2474, 2479, 2486, 2496, 2504, 2513, 0}, {2438, 2445, 2453, 2459, 2465, 2469, 2474, 2479, 2486, 2496, 2504, 2513, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 2546, 2550, 2554, 2558, 2562, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 2546, 2550, 2554, 2558, 2562, 0}, 2, 1, 2566, 187, {1128,1139,1692,2568,0,0,0,0,0,0,0,0,0,0},{2300,0,0,0,0,0,0,0,0,0},{251,843,0,0,0,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {1921, 2579, 2585, {2592, 2600, 2607, 2616, 2625, 2636, 2644}, {2652, 2655, 2658, 2661, 2664, 2667, 2670}, {2023, 2428, 2673, 2428, 2673, 2434, 2023}, {2675, 2682, 2690, 2696, 2702, 2706, 2711, 2716, 2723, 2733, 2741, 2750, 0}, {2675, 2682, 2690, 2696, 2702, 2706, 2711, 2716, 2723, 2733, 2741, 2750, 0}, {2759, 2763, 2767, 2772, 2702, 2776, 2780, 2784, 2788, 2792, 2796, 2800, 0}, {2759, 2763, 2767, 2772, 2702, 2776, 2780, 2784, 2788, 2792, 2796, 2800, 0}, 2, 1, 691, 187, {1156,1167,1692,2804,0,0,0,0,0,0,0,0,0,0},{2818,2300,2837,0,0,0,0,0,0,0},{251,2850,0,0,0,0,0,0,0,0,0,0},{269,2862,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 2877, 2884, {2891, 2906, 2921, 2932, 2947, 2960, 2979}, {2994, 3001, 3008, 3015, 3022, 3029, 3036}, {3043, 3046, 3049, 3049, 3052, 3052, 3055}, {3058, 3079, 3102, 3117, 3134, 3145, 3160, 3175, 3194, 3217, 3236, 3255, 0}, {3276, 3297, 3320, 3335, 3352, 3363, 3378, 3393, 3412, 3435, 3454, 3473, 0}, {3494, 3501, 3508, 3515, 3522, 3529, 3538, 3547, 3554, 3561, 3568, 3575, 0}, {3494, 3501, 3508, 3515, 3522, 3529, 3538, 3547, 3554, 3561, 3568, 3575, 0}, 2, 1, 185, 187, {2277,198,2286,189,3582,1692,0,0,0,0,0,0,0,0},{1207,1242,0,0,0,0,0,0,0,0},{3594,242,843,251,0,0,0,0,0,0,0,0},{3602,257,848,269,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {3613, 1929, 1932, {3620, 3627, 3634, 3642, 3652, 3661, 3668}, {3677, 3681, 3685, 3689, 3693, 3697, 3701}, {2023, 2428, 2430, 3705, 2430, 2434, 2023}, {3707, 3715, 3724, 2696, 3730, 3734, 3739, 2716, 2723, 3744, 2741, 3752, 0}, {3707, 3715, 3724, 2696, 3730, 3734, 3739, 2716, 2723, 3744, 2741, 3752, 0}, {2759, 2763, 3761, 2772, 3730, 2776, 2780, 2784, 2788, 3765, 2796, 3769, 0}, {2759, 2763, 3761, 2772, 3730, 2776, 2780, 2784, 2788, 3765, 2796, 3769, 0}, 0, 0, 185, 187, {3773,3782,3789,3798,1735,1692,3809,0,0,0,0,0,0,0},{3819,3838,3851,3870,0,0,0,0,0,0},{3594,242,843,251,0,0,0,0,0,0,0,0},{3602,257,848,269,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {3883, 872, 878, {3895, 3903, 3909, 3916, 3927, 3934, 3942}, {3950, 3955, 3960, 3965, 3971, 3976, 3981}, {2673, 2436, 2428, 2428, 3987, 3989, 2023}, {3991, 3997, 4005, 4011, 4017, 4022, 4028, 4034, 4041, 4052, 4060, 4070, 0}, {4080, 4086, 4094, 1012, 4100, 4105, 4111, 4117, 4124, 1050, 4135, 4145, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, 0, 1, 185, 187, {198,189,1120,2286,2293,1139,1167,1692,0,0,0,0,0,0},{4211,4239,4266,0,0,0,0,0,0,0},{843,251,2321,4288,4294,0,0,0,0,0,0,0},{848,269,2337,4302,4311,0,0,0,0},{1286,0,0,0,0,0,0,0}},
+       {4322, 4332, 4336, {4340, 4352, 4364, 4374, 4388, 4398, 4410}, {4421, 4424, 4427, 4430, 4433, 4436, 4439}, {2023, 2428, 2430, 4442, 2430, 2018, 2436}, {4444, 4453, 4462, 4472, 4481, 4490, 4499, 4509, 4516, 4524, 4532, 4542, 0}, {4551, 4562, 4573, 4585, 4596, 4607, 4618, 4630, 4639, 4649, 4659, 4671, 0}, {4682, 4688, 4694, 4701, 4707, 4713, 4719, 4726, 4730, 4735, 4740, 4747, 0}, {4682, 4688, 4694, 4701, 4707, 4713, 4719, 4726, 4730, 4735, 4740, 4747, 0}, 2, 1, 691, 187, {4753,1156,4762,1692,0,0,0,0,0,0,0,0,0,0},{2300,4769,2818,0,0,0,0,0,0,0},{843,2321,0,0,0,0,0,0,0,0,0,0},{848,2337,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 1929, 1932, {4783, 4792, 4798, 4804, 4813, 4819, 4828}, {4835, 4840, 4845, 4850, 4855, 4860, 4865}, {2673, 2436, 2428, 2428, 3987, 3989, 2023}, {4870, 4878, 4887, 4892, 4898, 4902, 4907, 4915, 4921, 4931, 1058, 4939, 0}, {4870, 4878, 4887, 4892, 4898, 4902, 4907, 4915, 4921, 4931, 1058, 4939, 0}, {4949, 4955, 4887, 4962, 4898, 4902, 4967, 4915, 4973, 1105, 1110, 4979, 0}, {4949, 4955, 4887, 4962, 4898, 4902, 4967, 4915, 4973, 1105, 1110, 4979, 0}, 0, 1, 185, 187, {198,189,1167,1139,1692,0,0,0,0,0,0,0,0,0},{4985,1242,5002,0,0,0,0,0,0,0},{251,843,4288,5011,5021,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {1, 5029, 5042, {5053, 5071, 5085, 5103, 5121, 5139, 5155}, {5169, 5181, 5193, 5205, 5217, 5229, 5241}, {5248, 5253, 5258, 5263, 5268, 5273, 5278}, {5283, 5294, 5307, 5314, 5325, 5332, 5341, 5350, 5363, 5376, 5391, 5404, 0}, {5283, 5294, 5307, 5314, 5325, 5332, 5341, 5350, 5363, 5376, 5391, 5404, 0}, {5415, 5424, 5307, 5433, 5325, 5442, 5451, 5460, 5469, 5478, 5487, 5496, 0}, {5415, 5424, 5307, 5433, 5325, 5442, 5451, 5460, 5469, 5478, 5487, 5496, 0}, 0, 0, 185, 187, {198,5505,189,209,1139,1128,5518,1692,5531,5548,0,0,0,0},{5558,5505,5576,5598,5531,0,0,0,0,0},{251,242,0,0,0,0,0,0,0,0,0,0},{269,257,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {5619, 5627, 5631, {5635, 5645, 5653, 5658, 5665, 5678, 5686}, {3989, 5694, 4442, 5696, 5700, 2018, 5703}, {3989, 5694, 4442, 5707, 5700, 2018, 5707}, {5710, 5718, 5727, 5736, 5745, 5752, 5760, 5768, 5778, 5789, 2504, 2513, 0}, {5710, 5718, 5727, 5736, 5745, 5752, 5760, 5768, 5778, 5789, 2504, 2513, 0}, {5798, 5803, 5809, 5816, 5822, 5828, 5834, 5840, 5845, 5852, 1110, 5857, 0}, {5798, 5803, 5809, 5816, 5822, 5828, 5834, 5840, 5845, 5852, 1110, 5857, 0}, 2, 1, 691, 187, {5862,5874,1692,5888,0,0,0,0,0,0,0,0,0,0},{5897,0,0,0,0,0,0,0,0,0},{843,251,3594,0,0,0,0,0,0,0,0,0},{848,269,3602,0,0,0,0,0,0},{5911,0,0,0,0,0,0,0}},
+       {1921, 5922, 5927, {5932, 5943, 5954, 5968, 5982, 5994, 6006}, {6018, 6023, 6029, 6035, 6041, 6046, 6052}, {2023, 2428, 6057, 2428, 2434, 2434, 2436}, {6060, 6068, 4887, 6077, 6084, 6089, 6096, 6103, 2486, 5789, 6111, 6121, 0}, {6060, 6068, 4887, 6077, 6084, 6089, 6096, 6103, 2486, 5789, 6111, 6121, 0}, {5798, 1081, 4845, 6130, 6084, 5828, 5834, 6135, 6142, 5852, 6147, 1115, 0}, {5798, 1081, 4845, 6130, 6084, 5828, 5834, 6135, 6142, 5852, 6147, 1115, 0}, 2, 1, 691, 187, {4753,1167,6153,6165,1692,6179,189,0,0,0,0,0,0,0},{2300,4769,6188,0,0,0,0,0,0,0},{251,843,0,0,0,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 1929, 1932, {6207, 6216, 6224, 6233, 6244, 6253, 6262}, {6269, 6273, 2530, 6277, 6281, 6285, 6289}, {2673, 2436, 2428, 2428, 6293, 3989, 2023}, {6295, 6303, 4005, 6312, 6319, 6326, 6333, 4034, 6340, 6350, 6358, 6367, 0}, {6376, 6384, 4094, 6393, 6400, 6407, 6414, 4117, 6421, 6431, 1058, 6439, 0}, {6448, 2526, 2530, 2534, 6452, 6456, 6460, 6464, 6468, 6472, 2558, 6476, 0}, {6448, 2526, 2530, 2534, 6452, 6456, 6460, 6464, 6468, 6472, 2558, 6476, 0}, 2, 1, 185, 187, {198,3582,189,6480,2286,0,0,0,0,0,0,0,0,0},{4985,6488,1242,0,0,0,0,0,0,0},{251,0,0,0,0,0,0,0,0,0,0,0},{269,0,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {1327, 6497, 6504, {6511, 6521, 6531, 6541, 6551, 6561, 6571}, {1473, 6581, 6585, 6589, 6593, 6597, 6601}, {1473, 6581, 6585, 6589, 6593, 6597, 6601}, {1591, 1596, 1601, 1606, 1611, 1616, 1621, 1626, 1631, 1636, 1642, 1648, 0}, {1591, 1596, 1601, 1606, 1611, 1616, 1621, 1626, 1631, 1636, 1642, 1648, 0}, {6605, 6607, 6609, 6611, 6613, 6615, 6617, 6619, 6621, 6623, 6626, 6629, 0}, {6605, 6607, 6609, 6611, 6613, 6615, 6617, 6619, 6621, 6623, 6626, 6629, 0}, 0, 0, 185, 187, {1681,1735,1714,1654,1692,0,0,0,0,0,0,0,0,0},{1744,6632,6656,6683,6712,6736,6765,6785,0,0},{843,251,1858,1866,0,0,0,0,0,0,0,0},{848,269,1875,1886,0,0,0,0,0},{1898,0,0,0,0,0,0,0}},
+       {6810, 6824, 6831, {6838, 6848, 6858, 6868, 6878, 6888, 6898}, {6908, 6912, 6916, 6920, 6924, 6928, 6932}, {6908, 6912, 6916, 6920, 6924, 6928, 6932}, {6936, 6941, 6946, 6951, 6956, 6961, 6966, 6971, 6976, 6981, 6987, 6993, 0}, {6936, 6941, 6946, 6951, 6956, 6961, 6966, 6971, 6976, 6981, 6987, 6993, 0}, {6936, 6941, 6946, 6951, 6956, 6961, 6966, 6971, 6976, 6981, 6987, 6993, 0}, {6936, 6941, 6946, 6951, 6956, 6961, 6966, 6971, 6976, 6981, 6987, 6993, 0}, 0, 0, 2566, 187, {1692,5888,1721,1663,0,0,0,0,0,0,0,0,0,0},{6999,7028,7052,7079,7101,7132,7158,7189,7215,7242},{1858,1866,843,251,0,0,0,0,0,0,0,0},{1875,1886,848,269,0,0,0,0,0},{7264,0,0,0,0,0,0,0}},
+       {289, 7281, 7286, {7291, 7298, 7306, 7314, 7323, 7333, 7341}, {7350, 4424, 7353, 7356, 7359, 7362, 7365}, {7368, 2428, 2673, 3705, 2673, 3989, 7368}, {7370, 7378, 7387, 2459, 7393, 2469, 2474, 7397, 2486, 2496, 2504, 2513, 0}, {7370, 7378, 7387, 2459, 7393, 2469, 2474, 7397, 2486, 2496, 2504, 2513, 0}, {2522, 2526, 7406, 2534, 7393, 2538, 2542, 2546, 2550, 2554, 2558, 2562, 0}, {2522, 2526, 7406, 2534, 7393, 2538, 2542, 2546, 2550, 2554, 2558, 2562, 0}, 2, 1, 2566, 187, {7410,2293,1139,189,1167,7419,1692,0,0,0,0,0,0,0},{4985,6488,1242,5002,0,0,0,0,0,0},{251,843,2321,7431,7443,0,0,0,0,0,0,0},{269,848,7455,7470,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {1921, 7281, 7286, {2345, 2353, 2360, 2368, 2375, 2383, 2390}, {7485, 7490, 7494, 7498, 7502, 7506, 7510}, {2023, 2428, 2430, 2432, 2430, 2434, 2436}, {2438, 2445, 4887, 2459, 4898, 2469, 2474, 2479, 2486, 2496, 2504, 6121, 0}, {2438, 2445, 4887, 2459, 4898, 2469, 2474, 2479, 2486, 2496, 2504, 6121, 0}, {2522, 2526, 2530, 2534, 4898, 2538, 2542, 2546, 2550, 2554, 2558, 7515, 0}, {2522, 2526, 2530, 2534, 4898, 2538, 2542, 2546, 2550, 2554, 2558, 7515, 0}, 0, 0, 691, 187, {1156,7519,1167,4762,2804,1692,0,0,0,0,0,0,0,0},{2300,4769,0,0,0,0,0,0,0,0},{251,843,7529,7539,4288,2321,7550,7561,0,0,0,0},{269,848,7571,7585,4302,2337,7598,7612,0},{1301,7625,7635,0,0,0,0,0}},
+       {289, 1929, 1932, {7643, 7653, 7667, 7674, 7681, 7690, 1985}, {7698, 7705, 7710, 7714, 7719, 7724, 7728}, {2016, 2018, 3705, 7733, 7736, 2018, 2023}, {7738, 7747, 7752, 7759, 2465, 7769, 7778, 7785, 7795, 7805, 2102, 7818, 0}, {7828, 7837, 7844, 7850, 7859, 7864, 7872, 7878, 7887, 7897, 7911, 7921, 0}, {7929, 7933, 2530, 7937, 2465, 7941, 7945, 7949, 7953, 7957, 2255, 7962, 0}, {7929, 7933, 2530, 7937, 2465, 7941, 7945, 7949, 7953, 7957, 2255, 7962, 0}, 2, 1, 2566, 187, {1692,5888,0,0,0,0,0,0,0,0,0,0,0,0},{1242,5505,0,0,0,0,0,0,0,0},{251,843,0,0,0,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {3883, 1929, 1932, {3895, 7966, 7980, 7993, 8006, 8019, 3942}, {6269, 8031, 8035, 8039, 8043, 8047, 8051}, {2673, 2023, 2430, 8056, 8056, 2023, 2023}, {8058, 8066, 8076, 1012, 8083, 8088, 8094, 4117, 8100, 8109, 8117, 8126, 0}, {8058, 8066, 8076, 1012, 8083, 8088, 8094, 4117, 8100, 8109, 8117, 8126, 0}, {2522, 8135, 2530, 8139, 4898, 2538, 2542, 6464, 6468, 8143, 2558, 8147, 0}, {2522, 8135, 2530, 8139, 4898, 2538, 2542, 6464, 6468, 8143, 2558, 8147, 0}, 0, 0, 185, 187, {198,189,2277,2286,1139,1128,2293,7410,1167,1156,7419,4762,4753,1692},{4211,4266,0,0,0,0,0,0,0,0},{251,0,0,0,0,0,0,0,0,0,0,0},{269,0,0,0,0,0,0,0,0},{1286,0,0,0,0,0,0,0}},
+       {289, 8151, 8154, {8157, 8166, 4798, 8176, 8184, 8192, 8201}, {8207, 8210, 4424, 8214, 8217, 8221, 2013}, {2673, 6293, 2428, 2428, 6293, 3989, 2023}, {8224, 8232, 4887, 8239, 8246, 8251, 8261, 8269, 8275, 8285, 2504, 2513, 0}, {8224, 8232, 4887, 8239, 8246, 8251, 8261, 8269, 8275, 8285, 2504, 2513, 0}, {8293, 8300, 4887, 4962, 8246, 8306, 8313, 8269, 8318, 1105, 1110, 5857, 0}, {8293, 8300, 4887, 4962, 8246, 8306, 8313, 8269, 8318, 1105, 1110, 5857, 0}, 2, 1, 2566, 187, {1128,1139,0,0,0,0,0,0,0,0,0,0,0,0},{8324,0,0,0,0,0,0,0,0,0},{251,843,8353,0,0,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 7281, 7286, {8356, 8366, 8371, 8378, 8387, 8391, 8398}, {8409, 8413, 3761, 8417, 8421, 8425, 8429}, {2673, 2436, 2428, 2428, 3987, 3989, 2023}, {8434, 8443, 8453, 8460, 4898, 8468, 8474, 2479, 8480, 8491, 8501, 8511, 0}, {8434, 8443, 8453, 8460, 4898, 8468, 8474, 2479, 8480, 8491, 8501, 8511, 0}, {8521, 1081, 4845, 6130, 4898, 8526, 8531, 5840, 4973, 1105, 1110, 5857, 0}, {8521, 1081, 4845, 6130, 4898, 8526, 8531, 5840, 4973, 1105, 1110, 5857, 0}, 0, 1, 691, 187, {1156,4753,1176,1128,1139,8536,8551,1692,8564,0,0,0,0,0},{1242,1207,4985,8579,0,0,0,0,0,0},{843,251,3594,242,0,0,0,0,0,0,0,0},{848,269,3602,257,0,0,0,0,0},{1301,1311,8590,1320,7635,8598,8604,8614}},
+       {289, 8622, 8642, {8668, 8691, 352, 8714, 8725, 8740, 8755}, {8770, 8775, 8780, 8785, 8790, 8795, 8800}, {8805, 8808, 8805, 8811, 8814, 8808, 8811}, {8817, 8830, 8845, 8854, 8867, 8874, 8883, 8892, 8905, 8922, 8937, 8950, 0}, {8965, 8978, 8993, 9004, 9017, 9024, 9033, 9042, 9057, 9074, 9089, 9102, 0}, {9117, 9125, 8845, 9135, 8867, 8874, 8883, 9143, 9151, 9161, 9169, 9179, 0}, {9117, 9125, 8845, 9135, 8867, 8874, 8883, 9143, 9151, 9161, 9169, 9179, 0}, 0, 1, 691, 187, {1156,1167,4762,1128,189,0,0,0,0,0,0,0,0,0},{776,757,0,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {1921, 1929, 1932, {9187, 9196, 9208, 9215, 9223, 9233, 9239}, {9246, 9250, 9254, 9258, 9262, 9267, 9271}, {9275, 9277, 9279, 9281, 9283, 9277, 9281}, {9286, 9296, 9305, 9313, 9321, 9329, 9336, 9343, 9351, 2102, 9357, 9365, 0}, {9374, 9384, 9393, 9401, 9409, 9417, 9424, 9431, 9440, 7911, 9446, 9456, 0}, {9465, 9469, 9474, 9479, 9483, 7945, 2239, 9487, 9491, 2255, 9495, 2259, 0}, {9465, 9469, 9474, 9479, 9483, 7945, 2239, 9487, 9491, 2255, 9495, 2259, 0}, 0, 1, 691, 187, {9499,9509,6153,9517,9529,9539,9549,1692,0,0,0,0,0,0},{9561,9575,9590,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {1921, 1929, 1932, {9610, 9618, 9627, 9634, 9641, 9650, 1985}, {1992, 1995, 9657, 2002, 9660, 9664, 2013}, {2016, 2018, 9667, 2023, 9669, 2018, 2023}, {5710, 5718, 9672, 6077, 9678, 9683, 9688, 2479, 2486, 5789, 2504, 2513, 0}, {9693, 9702, 7844, 9712, 9720, 9726, 9732, 9738, 9746, 9756, 9765, 9774, 0}, {2522, 2526, 2530, 2534, 9678, 9683, 9688, 2546, 2550, 2554, 2558, 2562, 0}, {2522, 2526, 2530, 2534, 9678, 9683, 9688, 2546, 2550, 2554, 2558, 2562, 0}, 2, 1, 691, 187, {4753,1156,1167,1692,5888,9783,9796,9806,0,0,0,0,0,0},{2300,0,0,0,0,0,0,0,0,0},{843,251,2321,0,0,0,0,0,0,0,0,0},{848,269,2337,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 9817, 9826, {9834, 9841, 9850, 9859, 9871, 9879, 9888}, {9898, 9902, 3761, 9907, 9912, 9916, 9920}, {2673, 5694, 2428, 2428, 9924, 2018, 2023}, {9926, 9932, 4887, 9939, 2465, 9945, 9953, 9960, 9966, 9974, 9980, 9988, 0}, {9926, 9932, 4887, 9939, 2465, 9945, 9953, 9960, 9966, 9974, 9980, 9988, 0}, {2759, 9996, 3761, 10000, 10004, 10008, 10012, 10016, 9920, 10020, 10024, 10029, 0}, {2759, 9996, 3761, 10000, 10004, 10008, 10012, 10016, 9920, 10020, 10024, 10029, 0}, 0, 1, 691, 187, {4753,4762,0,0,0,0,0,0,0,0,0,0,0,0},{1207,0,0,0,0,0,0,0,0,0},{251,0,0,0,0,0,0,0,0,0,0,0},{269,0,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {10033, 10046, 10049, {10052, 10060, 10068, 2368, 2375, 2383, 10075}, {10083, 10088, 10093, 10097, 10101, 10105, 10109}, {2023, 2428, 2430, 2432, 2430, 2434, 2436}, {10114, 10122, 10131, 2696, 10004, 2706, 2711, 10136, 2723, 2733, 2741, 3752, 0}, {7370, 7378, 4887, 2459, 2465, 2469, 2474, 10144, 2486, 2496, 2504, 2513, 0}, {2759, 2763, 3761, 2772, 10004, 2776, 2780, 2784, 2788, 2792, 2796, 3769, 0}, {2759, 2763, 3761, 2772, 10004, 2776, 2780, 2784, 2788, 2792, 2796, 3769, 0}, 2, 1, 2566, 187, {1692,5888,0,0,0,0,0,0,0,0,0,0,0,0},{10152,10170,0,0,0,0,0,0,0,0},{251,843,7529,0,0,0,0,0,0,0,0,0},{269,848,7585,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 0, 0, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {6605, 6607, 6609, 6611, 6613, 6615, 6617, 6619, 6621, 6623, 6626, 6629, 0}, {6605, 6607, 6609, 6611, 6613, 6615, 6617, 6619, 6621, 6623, 6626, 6629, 0}, 0, 0, 185, 187, {2277,2286,189,198,8579,10193,1692,0,0,0,0,0,0,0},{1242,10205,10221,0,0,0,0,0,0,0},{843,251,3594,242,0,0,0,0,0,0,0,0},{848,269,3602,257,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 10263, 10268, {10272, 10278, 10288, 10294, 10305, 10315, 10320}, {10330, 10334, 10338, 10342, 10347, 10351, 10355}, {2018, 2018, 2023, 10359, 2018, 7736, 7736}, {10362, 10367, 10374, 10379, 10385, 10392, 10400, 10407, 10416, 10423, 10428, 10435, 0}, {10362, 10367, 10374, 10379, 10385, 10392, 10400, 10407, 10416, 10423, 10428, 10435, 0}, {10443, 10447, 3761, 10452, 3730, 10456, 10460, 10464, 10469, 10473, 10477, 10481, 0}, {10443, 10447, 3761, 10452, 3730, 10456, 10460, 10464, 10469, 10473, 10477, 10481, 0}, 0, 1, 691, 187, {4753,4762,1156,1167,0,0,0,0,0,0,0,0,0,0},{10485,1242,10502,5505,0,0,0,0,0,0},{251,0,0,0,0,0,0,0,0,0,0,0},{269,0,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {1, 10520, 10538, {10556, 10567, 10580, 10589, 10596, 10609, 10618}, {10556, 10567, 10580, 10589, 10596, 10609, 10618}, {2023, 2428, 2430, 3705, 2430, 2434, 2023}, {10627, 10638, 10649, 10658, 10669, 10676, 10683, 10696, 10705, 10716, 10729, 10740, 0}, {10627, 10638, 10649, 10658, 10669, 10676, 10683, 10696, 10705, 10716, 10729, 10740, 0}, {10627, 10638, 10649, 10658, 10669, 10676, 10683, 10696, 10705, 10716, 10729, 10740, 0}, {10627, 10638, 10649, 10658, 10669, 10676, 10683, 10696, 10705, 10716, 10729, 10740, 0}, 0, 0, 185, 187, {198,189,1692,0,0,0,0,0,0,0,0,0,0,0},{10751,222,0,0,0,0,0,0,0,0},{3594,242,843,251,0,0,0,0,0,0,0,0},{3602,257,848,269,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {1, 1929, 1932, {10765, 10772, 10778, 10785, 10790, 10796, 10802}, {10808, 10812, 10816, 10820, 10824, 10828, 10832}, {2428, 2023, 2023, 10836, 4442, 3987, 2023}, {10114, 10122, 10838, 2696, 10844, 2706, 2711, 10848, 2723, 2733, 2741, 10856, 0}, {10114, 10122, 10838, 2696, 10844, 2706, 2711, 10848, 2723, 2733, 2741, 10856, 0}, {2759, 2763, 3761, 2772, 10844, 2776, 2780, 10865, 2788, 2792, 2796, 10869, 0}, {2759, 2763, 3761, 2772, 10844, 2776, 2780, 10865, 2788, 2792, 2796, 10869, 0}, 0, 0, 185, 187, {198,189,1128,0,0,0,0,0,0,0,0,0,0,0},{5505,0,0,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 10873, 10878, {10883, 10896, 10915, 10932, 10945, 10958, 10975}, {10988, 8775, 8780, 8785, 8790, 8795, 8800}, {10993, 8808, 8805, 8811, 8814, 8808, 8811}, {10996, 11009, 11020, 11037, 11052, 11067, 11082, 11095, 11110, 11127, 11142, 11159, 0}, {11174, 11185, 11198, 11213, 11226, 11239, 11252, 11263, 11276, 11291, 11304, 11323, 0}, {11336, 11343, 11350, 11357, 11364, 11371, 11378, 11385, 11392, 11399, 11406, 11413, 0}, {11336, 11343, 11350, 11357, 11364, 11371, 11378, 11385, 11392, 11399, 11406, 11413, 0}, 0, 1, 691, 187, {1156,1167,1692,0,0,0,0,0,0,0,0,0,0,0},{11420,0,0,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{11438,0,0,0,0,0,0,0}},
+       {289, 11454, 11467, {11480, 11495, 11516, 11531, 11544, 11557, 10975}, {421, 426, 11572, 436, 11577, 446, 451}, {456, 459, 11582, 465, 468, 459, 465}, {11585, 11602, 11611, 11626, 521, 11643, 11658, 11671, 11686, 11703, 11724, 11741, 0}, {11756, 11773, 11786, 11803, 9017, 11822, 11837, 11850, 11863, 11878, 11901, 11920, 0}, {11933, 11940, 11947, 11954, 521, 11961, 11968, 11975, 11982, 11989, 11996, 12003, 0}, {11933, 11940, 11947, 11954, 521, 11961, 11968, 11975, 11982, 11989, 11996, 12003, 0}, 0, 0, 691, 187, {1167,0,0,0,0,0,0,0,0,0,0,0,0,0},{1242,0,0,0,0,0,0,0,0,0},{251,843,0,0,0,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {1921, 12010, 12015, {12020, 12028, 12039, 12045, 12051, 12060, 1985}, {9246, 9250, 2415, 12066, 9262, 9267, 12070}, {9275, 9277, 12074, 9281, 9283, 9277, 9281}, {2438, 2445, 9672, 2459, 2465, 12076, 12082, 12088, 2486, 2496, 2504, 2513, 0}, {2438, 2445, 9672, 2459, 2465, 12076, 12082, 12088, 2486, 2496, 2504, 2513, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 12095, 2550, 2554, 2558, 2562, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 12095, 2550, 2554, 2558, 2562, 0}, 0, 1, 691, 187, {4753,4762,2266,1156,12099,1167,9806,0,0,0,0,0,0,0},{2300,4769,2818,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {12109, 12118, 12123, {12128, 12139, 12150, 12161, 12172, 12183, 12189}, {2018, 9924, 2430, 4442, 2016, 10836, 2436}, {2018, 9924, 2430, 4442, 2016, 10836, 2436}, {12198, 12206, 12215, 12222, 4898, 12229, 12235, 2479, 2486, 12241, 2504, 12250, 0}, {12198, 12206, 12215, 12222, 4898, 12229, 12235, 2479, 2486, 12241, 2504, 12250, 0}, {12260, 12265, 12215, 2534, 4898, 12229, 12235, 2546, 12271, 2554, 2558, 12276, 0}, {12260, 12265, 12215, 2534, 4898, 12229, 12235, 2546, 12271, 2554, 2558, 12276, 0}, 2, 1, 691, 187, {7519,1156,1167,1692,0,0,0,0,0,0,0,0,0,0},{2300,4769,2818,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {1921, 12281, 12298, {12312, 12323, 12333, 12342, 12353, 12365, 12376}, {12386, 12389, 12392, 12395, 12398, 12401, 12404}, {2023, 2018, 2432, 2430, 7736, 2018, 2023}, {12407, 12417, 12428, 12434, 12443, 12449, 12457, 12465, 12473, 12484, 12493, 12503, 0}, {12513, 12523, 2453, 12534, 12543, 12549, 12557, 12565, 12573, 12584, 12593, 12603, 0}, {12613, 12619, 12428, 12625, 12443, 12630, 12636, 12642, 4190, 12647, 4201, 12652, 0}, {12613, 12619, 12428, 12625, 12443, 12630, 12636, 12642, 4190, 12647, 4201, 12652, 0}, 0, 1, 691, 187, {9517,9539,12657,0,0,0,0,0,0,0,0,0,0,0},{12669,0,0,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{12696,0,0,0,0,0,0,0}},
+       {12714, 12726, 12015, {12732, 12744, 12756, 12768, 12782, 12797, 12810}, {12824, 12827, 12830, 12833, 12836, 12839, 9660}, {2023, 2018, 12842, 2430, 4442, 2018, 9669}, {12844, 12851, 12859, 12865, 12874, 12883, 12893, 12899, 12910, 12920, 12927, 12937, 0}, {12844, 12851, 12859, 12865, 12874, 12883, 12893, 12899, 12910, 12920, 12927, 12937, 0}, {12945, 12951, 12956, 12961, 12966, 12971, 12978, 12984, 12990, 12996, 13002, 13009, 0}, {12945, 12951, 12956, 12961, 12966, 12971, 12978, 12984, 12990, 12996, 13002, 13009, 0}, 2, 1, 2566, 187, {1692,2568,0,0,0,0,0,0,0,0,0,0,0,0},{13016,0,0,0,0,0,0,0,0,0},{251,0,0,0,0,0,0,0,0,0,0,0},{269,0,0,0,0,0,0,0,0},{13038,0,0,0,0,0,0,0}},
+       {1, 13053, 13065, {13077, 13092, 13107, 13122, 13139, 13158, 13169}, {13180, 13187, 13194, 13201, 13208, 13215, 13222}, {0, 0, 0, 0, 0, 0, 0}, {13229, 13240, 8845, 13253, 8867, 13264, 13271, 8892, 13278, 13293, 13306, 13317, 0}, {13229, 13240, 8845, 13253, 8867, 13264, 13271, 8892, 13278, 13293, 13306, 13317, 0}, {13330, 13337, 13344, 13351, 8867, 13264, 13271, 13358, 13365, 13372, 13379, 13386, 0}, {13330, 13337, 13344, 13351, 8867, 13264, 13271, 13358, 13365, 13372, 13379, 13386, 0}, 0, 0, 691, 187, {1156,1167,4762,1128,189,0,0,0,0,0,0,0,0,0},{13393,13411,0,0,0,0,0,0,0,0},{251,843,0,0,0,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 13430, 13450, {13467, 13480, 13493, 13509, 13526, 13541, 13550}, {13467, 13480, 13493, 13509, 13526, 13541, 13550}, {13559, 13562, 13565, 13568, 13571, 13574, 13577}, {13580, 13593, 13604, 13613, 13624, 13629, 13638, 13649, 13656, 13671, 13682, 13695, 0}, {13708, 13723, 13604, 13613, 13736, 13629, 13743, 13649, 13656, 13671, 13682, 13695, 0}, {13580, 13593, 13604, 13613, 13624, 13629, 13638, 13649, 13656, 13671, 13682, 13695, 0}, {13580, 13593, 13604, 13613, 13624, 13629, 13638, 13649, 13656, 13671, 13682, 13695, 0}, 0, 6, 185, 187, {198,189,0,0,0,0,0,0,0,0,0,0,0,0},{13756,5505,0,0,0,0,0,0,0,0},{242,251,0,0,0,0,0,0,0,0,0,0},{257,269,0,0,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {1, 13775, 13778, {13781, 13794, 13804, 13813, 13823, 13834, 13845}, {13857, 13860, 13865, 13870, 13875, 13880, 13885}, {13857, 13890, 13893, 13896, 13899, 13902, 13905}, {13908, 13917, 13926, 13935, 13944, 13953, 13962, 13971, 13980, 13989, 13999, 14009, 0}, {14019, 14028, 14037, 14046, 14055, 14064, 14073, 14082, 14091, 14100, 14110, 14120, 0}, {14130, 14136, 14142, 14148, 14154, 14160, 14166, 14172, 14178, 14184, 14191, 14198, 0}, {14130, 14136, 14142, 14148, 14154, 14160, 14166, 14172, 14178, 14184, 14191, 14198, 0}, 0, 1, 185, 187, {198,189,1139,1128,1692,0,0,0,0,0,0,0,0,0},{5505,0,0,0,0,0,0,0,0,0},{3594,242,843,251,0,0,0,0,0,0,0,0},{3602,257,848,269,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 14205, 14229, {14253, 14266, 14287, 14306, 14327, 14346, 14359}, {14370, 14377, 14384, 14391, 14398, 14405, 14412}, {14419, 14422, 14422, 14425, 14428, 14431, 14436}, {14439, 14454, 14469, 14478, 14489, 14500, 14513, 14526, 14541, 14560, 14579, 14596, 0}, {14615, 14632, 14649, 14660, 14673, 14686, 14701, 14716, 14733, 14754, 14775, 14794, 0}, {14815, 14822, 14829, 14836, 14843, 14850, 14857, 14864, 14871, 14878, 14885, 14892, 0}, {14815, 14822, 14829, 14836, 14843, 14850, 14857, 14864, 14871, 14878, 14885, 14892, 0}, 0, 1, 691, 187, {1156,1167,9796,198,14899,3582,1692,0,0,0,0,0,0,0},{3870,1207,13756,5505,14910,14921,14933,14950,0,0},{251,843,0,0,0,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {289, 1929, 1932, {14968, 14974, 14988, 15011, 15025, 15041, 15048}, {15057, 15060, 15065, 15071, 15075, 7736, 15080}, {6617, 6605, 6607, 6609, 6611, 6613, 6615}, {15084, 15091, 10374, 15098, 3730, 15104, 15110, 15116, 15123, 15132, 15140, 15147, 0}, {15154, 15161, 15168, 15173, 15179, 15183, 15188, 15193, 15200, 15209, 15217, 15224, 0}, {15231, 8135, 2530, 2534, 15179, 15235, 15239, 15243, 15247, 2554, 15251, 15255, 0}, {15231, 8135, 2530, 2534, 15179, 15235, 15239, 15243, 15247, 2554, 15251, 15255, 0}, 0, 0, 691, 187, {1156,1167,4762,189,1692,0,0,0,0,0,0,0,0,0},{15259,0,0,0,0,0,0,0,0,0},{251,843,0,0,0,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {15281, 1929, 1932, {15296, 15304, 15315, 15325, 15336, 15345, 15354}, {15364, 15368, 15372, 15376, 15380, 15384, 15388}, {15392, 12842, 12842, 12842, 2432, 2432, 2436}, {15394, 15404, 15412, 15420, 15428, 15436, 15443, 15451, 15459, 15466, 15472, 15479, 0}, {15487, 15498, 15507, 15516, 15525, 15534, 15542, 15551, 15560, 15568, 15575, 15583, 0}, {15592, 15597, 4845, 15602, 15607, 15612, 15617, 15622, 15627, 15632, 15637, 15642, 0}, {15592, 15597, 4845, 15602, 15607, 15612, 15617, 15622, 15627, 15632, 15637, 15642, 0}, 2, 1, 185, 187, {1681,1692,0,0,0,0,0,0,0,0,0,0,0,0},{15647,0,0,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{15680,0,0,0,0,0,0,0}},
+       {289, 15697, 15718, {15735, 331, 352, 8714, 15748, 15765, 15776}, {15789, 15797, 15805, 15811, 15819, 15827, 15835}, {456, 459, 462, 465, 468, 459, 465}, {15843, 484, 501, 510, 15858, 15865, 15874, 542, 555, 574, 591, 606, 0}, {15843, 484, 501, 510, 15858, 15865, 15874, 542, 555, 574, 591, 606, 0}, {15883, 15891, 15899, 639, 15858, 15907, 15915, 647, 655, 665, 673, 683, 0}, {15883, 15891, 15899, 639, 15858, 15907, 15915, 647, 655, 665, 673, 683, 0}, 0, 1, 691, 187, {1156,1167,15923,0,0,0,0,0,0,0,0,0,0,0},{13756,0,0,0,0,0,0,0,0,0},{251,0,0,0,0,0,0,0,0,0,0,0},{269,0,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 0, 0, {15940, 15947, 15958, 15967, 15976, 15983, 15994}, {16004, 16008, 16012, 16016, 16020, 16023, 16027}, {0, 0, 0, 0, 0, 0, 0}, {16031, 16041, 16050, 16058, 16067, 16080, 16092, 16099, 16106, 16113, 16123, 16135, 0}, {16031, 16041, 16050, 16058, 16067, 16080, 16092, 16099, 16106, 16113, 16123, 16135, 0}, {16148, 16152, 16156, 16160, 16164, 16168, 16172, 16176, 16180, 16184, 16188, 16192, 0}, {16148, 16152, 16156, 16160, 16164, 16168, 16172, 16176, 16180, 16184, 16188, 16192, 0}, 0, 0, 185, 187, {189,1681,1735,1692,0,0,0,0,0,0,0,0,0,0},{5505,0,0,0,0,0,0,0,0,0},{242,3594,251,0,0,0,0,0,0,0,0,0},{257,3602,269,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 0, 0, {16196, 16201, 16207, 16217, 16229, 16237, 16248}, {16257, 16261, 16265, 16269, 16273, 16277, 16281}, {0, 0, 0, 0, 0, 0, 0}, {16285, 16295, 16305, 16312, 16319, 2706, 16324, 16331, 16338, 16347, 16355, 16363, 0}, {16285, 16295, 16305, 16312, 16319, 2706, 16324, 16331, 16338, 16347, 16355, 16363, 0}, {2759, 2763, 16027, 16371, 16375, 2776, 2780, 16379, 2788, 2792, 2796, 16383, 0}, {2759, 2763, 16027, 16371, 16375, 2776, 2780, 16379, 2788, 2792, 2796, 16383, 0}, 0, 0, 185, 187, {1681,1735,1692,0,0,0,0,0,0,0,0,0,0,0},{5505,0,0,0,0,0,0,0,0,0},{242,3594,251,0,0,0,0,0,0,0,0,0},{257,3602,269,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 1929, 1932, {16387, 16393, 16404, 16217, 16229, 16237, 16248}, {16414, 16418, 16422, 16269, 16273, 16277, 16281}, {2023, 2428, 16426, 2430, 2023, 5694, 2428}, {16428, 16438, 16449, 16456, 16465, 16471, 16477, 16485, 16493, 16504, 16514, 16523, 0}, {16532, 16295, 16541, 16547, 16319, 2706, 16324, 16331, 16554, 16347, 16355, 16363, 0}, {2759, 2763, 16564, 2772, 16375, 2776, 2780, 16379, 2788, 2792, 2796, 16383, 0}, {2759, 2763, 16564, 2772, 16375, 2776, 2780, 16379, 2788, 2792, 2796, 16383, 0}, 0, 0, 2566, 187, {1128,1139,189,1681,1735,1692,0,0,0,0,0,0,0,0},{5505,0,0,0,0,0,0,0,0,0},{242,3594,251,0,0,0,0,0,0,0,0,0},{257,3602,269,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 16568, 16572, {16576, 16583, 16591, 16599, 16608, 16618, 16625}, {2652, 16634, 2658, 16637, 2664, 16640, 2670}, {2023, 2428, 2673, 3705, 2673, 3989, 2023}, {16643, 16652, 16662, 2696, 10844, 16668, 16674, 16680, 2723, 2733, 2741, 10856, 0}, {16643, 16652, 16662, 2696, 10844, 16668, 16674, 16680, 2723, 2733, 2741, 10856, 0}, {2759, 2763, 3761, 2772, 10844, 2776, 2780, 2784, 2788, 2792, 2796, 10869, 0}, {2759, 2763, 3761, 2772, 10844, 2776, 2780, 2784, 2788, 2792, 2796, 10869, 0}, 0, 0, 185, 187, {1681,1735,1692,16689,0,0,0,0,0,0,0,0,0,0},{5505,0,0,0,0,0,0,0,0,0},{242,3594,251,0,0,0,0,0,0,0,0,0},{257,3602,269,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 1929, 1932, {16701, 16717, 16742, 16770, 16798, 16826, 16854}, {16873, 16883, 16893, 16903, 16913, 16923, 16933}, {16943, 16947, 16951, 16947, 16955, 16959, 16963}, {16967, 16989, 17017, 17033, 17052, 17068, 17087, 17106, 17128, 17159, 17187, 17212, 0}, {16967, 16989, 17017, 17033, 17052, 17068, 17087, 17106, 17128, 17159, 17187, 17212, 0}, {17240, 17250, 17260, 17270, 17280, 17290, 17300, 17310, 17320, 17330, 17340, 17350, 0}, {17240, 17250, 17260, 17270, 17280, 17290, 17300, 17310, 17320, 17330, 17340, 17350, 0}, 0, 1, 691, 187, {1156,1167,7419,1176,4762,4753,1692,0,0,0,0,0,0,0},{17360,17394,17427,3870,17461,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 17473, 17478, {5932, 17483, 17494, 17504, 17514, 17524, 17538}, {17550, 17554, 17559, 17564, 17568, 17573, 17578}, {2023, 2428, 2430, 2428, 5694, 2434, 2436}, {2438, 2445, 4887, 6077, 4898, 2469, 2474, 2479, 2486, 2496, 2504, 6121, 0}, {2438, 2445, 4887, 6077, 4898, 2469, 2474, 2479, 2486, 2496, 2504, 6121, 0}, {2522, 2526, 2530, 2534, 4898, 2538, 2542, 2546, 2550, 2554, 2558, 7515, 0}, {2522, 2526, 2530, 2534, 4898, 2538, 2542, 2546, 2550, 2554, 2558, 7515, 0}, 2, 1, 2566, 187, {1128,1139,1692,0,0,0,0,0,0,0,0,0,0,0},{2300,0,0,0,0,0,0,0,0,0},{251,4288,0,0,0,0,0,0,0,0,0,0},{269,4302,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {1, 17582, 17598, {17608, 17627, 17646, 17668, 17687, 17709, 17734}, {17753, 17763, 17773, 17786, 17796, 17809, 17825}, {17835, 17839, 17846, 17853, 17860, 17867, 17874}, {17878, 17894, 17913, 17929, 17948, 17955, 17965, 17981, 17997, 18016, 18038, 18054, 0}, {17878, 17894, 17913, 17929, 17948, 17955, 17965, 17981, 17997, 18016, 18038, 18054, 0}, {18073, 18080, 17913, 18090, 17948, 17955, 18106, 18119, 18126, 18139, 18155, 18165, 0}, {18073, 18080, 17913, 18090, 17948, 17955, 18106, 18119, 18126, 18139, 18155, 18165, 0}, 0, 0, 2566, 187, {1128,1139,2293,4762,1692,0,0,0,0,0,0,0,0,0},{5505,1242,0,0,0,0,0,0,0,0},{251,843,1866,1858,0,0,0,0,0,0,0,0},{269,848,1886,1875,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {18178, 18192, 18195, {18198, 18207, 18216, 18226, 18236, 18246, 18258}, {18266, 18271, 18275, 18279, 18283, 18288, 18293}, {18297, 2430, 2430, 9924, 18297, 18300, 2023}, {18303, 18310, 18315, 2696, 18321, 18327, 18334, 18340, 18348, 18358, 18366, 18375, 0}, {18303, 18310, 18315, 2696, 18321, 18327, 18334, 18340, 18348, 18358, 18366, 18375, 0}, {2759, 18385, 3761, 2772, 18389, 18393, 18398, 18402, 18406, 18410, 2796, 18414, 0}, {2759, 18385, 3761, 2772, 18389, 18393, 18398, 18402, 18406, 18410, 2796, 18414, 0}, 0, 0, 185, 187, {198,1692,18419,7410,2277,0,0,0,0,0,0,0,0,0},{18428,18453,10193,0,0,0,0,0,0,0},{251,3594,843,0,0,0,0,0,0,0,0,0},{269,3602,848,3594,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {18472, 18485, 18490, {18495, 18507, 18518, 18532, 18544, 18554, 18564}, {18575, 18580, 18585, 18590, 18595, 18600, 18605}, {2023, 3989, 2428, 6293, 2673, 16426, 2436}, {18610, 18627, 18640, 18654, 18667, 18680, 18693, 18707, 18719, 18733, 18747, 18761, 0}, {18610, 18627, 18640, 18654, 18667, 18680, 18693, 18707, 18719, 18733, 18747, 18761, 0}, {18774, 18781, 18786, 18791, 18795, 18800, 18805, 18810, 18815, 18822, 18827, 18833, 0}, {18774, 18781, 18786, 18791, 18795, 18800, 18805, 18810, 18815, 18822, 18827, 18833, 0}, 2, 1, 691, 187, {1156,1167,4762,1692,0,0,0,0,0,0,0,0,0,0},{18838,18862,0,0,0,0,0,0,0,0},{251,843,4288,0,0,0,0,0,0,0,0,0},{269,848,4302,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 7281, 7286, {18880, 18894, 18904, 18915, 18929, 18940, 18951}, {18964, 18969, 18974, 18981, 18987, 18993, 18999}, {2673, 2436, 2428, 7736, 2673, 12842, 2023}, {19004, 19012, 19020, 19027, 19036, 19046, 19056, 19062, 19070, 19085, 19103, 19111, 0}, {19004, 19012, 19020, 19027, 19036, 19046, 19056, 19062, 19070, 19085, 19103, 19111, 0}, {19119, 19123, 19020, 19129, 19133, 19138, 19056, 19144, 19149, 19156, 19163, 19168, 0}, {19119, 19123, 19020, 19129, 19133, 19138, 19056, 19144, 19149, 19156, 19163, 19168, 0}, 2, 0, 185, 187, {198,189,2286,4762,1692,0,0,0,0,0,0,0,0,0},{1242,5505,10193,8579,0,0,0,0,0,0},{251,843,0,0,0,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {1, 19173, 19176, {19180, 19185, 10778, 10785, 19191, 19198, 10802}, {19205, 19209, 10816, 10820, 19213, 10828, 10832}, {12842, 15392, 2023, 10836, 4442, 3987, 2023}, {10114, 10122, 19217, 2696, 10844, 2776, 19221, 19227, 2723, 2733, 2741, 19232, 0}, {10114, 10122, 19217, 2696, 10844, 2776, 19221, 19227, 2723, 2733, 2741, 19232, 0}, {2759, 2763, 19217, 2772, 10844, 2776, 2780, 19241, 2788, 2792, 2796, 16383, 0}, {2759, 2763, 19217, 2772, 10844, 2776, 2780, 19241, 2788, 2792, 2796, 16383, 0}, 0, 0, 185, 187, {198,189,1692,0,0,0,0,0,0,0,0,0,0,0},{5505,0,0,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 19245, 19267, {19291, 19306, 19323, 19340, 19357, 19374, 19383}, {19394, 19400, 19406, 19412, 19418, 19424, 19430}, {19436, 19439, 8811, 8811, 19442, 19436, 8811}, {19445, 19458, 19469, 19482, 19493, 19504, 19517, 19528, 19539, 19556, 19567, 19580, 0}, {19445, 19458, 19469, 19482, 19493, 19504, 19517, 19528, 19539, 19556, 19567, 19580, 0}, {19599, 19607, 19615, 19623, 19631, 19639, 19647, 19655, 19663, 19671, 19679, 19687, 0}, {19599, 19607, 19615, 19623, 19631, 19639, 19647, 19655, 19663, 19671, 19679, 19687, 0}, 0, 0, 2566, 187, {6488,0,0,0,0,0,0,0,0,0,0,0,0,0},{19697,19715,0,0,0,0,0,0,0,0},{251,843,0,0,0,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {19734, 19743, 19769, {19797, 19804, 19811, 19818, 19825, 19832, 19839}, {19797, 19804, 19811, 19818, 19825, 19832, 19839}, {19436, 19439, 19846, 19846, 19442, 19436, 19849}, {19852, 19865, 501, 19880, 521, 19893, 19902, 542, 19911, 19928, 19943, 19956, 0}, {19852, 19865, 501, 19880, 521, 19893, 19902, 542, 19911, 19928, 19943, 19956, 0}, {19971, 15891, 15899, 639, 521, 19979, 19987, 647, 19995, 665, 20003, 683, 0}, {19971, 15891, 15899, 639, 521, 19979, 19987, 647, 19995, 665, 20003, 683, 0}, 0, 0, 2566, 187, {20011,0,0,0,0,0,0,0,0,0,0,0,0,0},{20020,0,0,0,0,0,0,0,0,0},{251,843,0,0,0,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{20041,0,0,0,0,0,0,0}},
+       {20057, 1929, 1932, {20065, 20074, 20083, 20091, 20100, 20109, 20116}, {20125, 20128, 20131, 20134, 20137, 20141, 20144}, {6607, 6609, 6611, 6613, 12842, 15392, 6605}, {10114, 10122, 20147, 20153, 10844, 2706, 19221, 20160, 16338, 20167, 16355, 20174, 0}, {10114, 10122, 20147, 20153, 10844, 2706, 19221, 20160, 16338, 20167, 16355, 20174, 0}, {2759, 2763, 19217, 2772, 10844, 2776, 2780, 20182, 2788, 2792, 2796, 10869, 0}, {2759, 2763, 19217, 2772, 10844, 2776, 2780, 20182, 2788, 2792, 2796, 10869, 0}, 0, 0, 185, 187, {3773,3782,3789,3798,1735,1692,3809,0,0,0,0,0,0,0},{20186,20206,222,10751,0,0,0,0,0,0},{3594,242,843,251,0,0,0,0,0,0,0,0},{3602,257,848,269,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {20220, 1929, 1932, {20227, 20237, 20246, 20255, 20266, 20276, 20281}, {20288, 20294, 20299, 20304, 20309, 10828, 20313}, {20318, 2673, 2023, 7736, 2018, 3987, 2023}, {15084, 15091, 10374, 15098, 3730, 20320, 20325, 20330, 15123, 15132, 15140, 15147, 0}, {15084, 15091, 10374, 15098, 3730, 20320, 20325, 20330, 15123, 15132, 15140, 15147, 0}, {20337, 20342, 3761, 2772, 3730, 20320, 20325, 20346, 10812, 2792, 20350, 20355, 0}, {20337, 20342, 3761, 2772, 3730, 20320, 20325, 20346, 10812, 2792, 20350, 20355, 0}, 0, 0, 691, 187, {1156,0,0,0,0,0,0,0,0,0,0,0,0,0},{20359,1242,5505,0,0,0,0,0,0,0},{251,843,0,0,0,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 20377, 20405, {20427, 20446, 20465, 20490, 20509, 20543, 20568}, {20587, 20597, 20607, 20623, 20633, 20658, 20674}, {20684, 20688, 20695, 20699, 20706, 20713, 20720}, {20724, 20752, 20786, 20802, 20821, 20828, 20838, 20854, 20870, 20901, 20923, 20945, 0}, {20724, 20752, 20786, 20802, 20821, 20828, 20838, 20854, 20870, 20901, 20923, 20945, 0}, {20724, 20752, 20786, 20802, 20821, 20828, 20838, 20854, 20870, 20901, 20923, 20945, 0}, {20724, 20752, 20786, 20802, 20821, 20828, 20838, 20854, 20870, 20901, 20923, 20945, 0}, 0, 1, 2566, 187, {1139,2293,1128,20970,20983,0,0,0,0,0,0,0,0,0},{5505,1242,0,0,0,0,0,0,0,0},{4288,2321,20998,21007,0,0,0,0,0,0,0,0},{4302,2337,21015,21027,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {1, 1929, 1932, {21038, 21054, 21073, 21095, 21114, 21133, 21161}, {21183, 21191, 21202, 21216, 21227, 21238, 21258}, {21272, 21276, 21283, 21290, 21300, 21307, 21320}, {21327, 21343, 21362, 21375, 21394, 21401, 21411, 21427, 21440, 21456, 21475, 21491, 0}, {21327, 21343, 21362, 21375, 21394, 21401, 21411, 21427, 21440, 21456, 21475, 21491, 0}, {21327, 21343, 21362, 21375, 21394, 21401, 21411, 21427, 21440, 21456, 21475, 21491, 0}, {21327, 21343, 21362, 21375, 21394, 21401, 21411, 21427, 21440, 21456, 21475, 21491, 0}, 0, 0, 2566, 187, {1139,2293,4762,1128,1692,0,0,0,0,0,0,0,0,0},{10502,1242,0,0,0,0,0,0,0,0},{1866,1858,843,251,0,0,0,0,0,0,0,0},{1886,1875,848,269,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {1, 1929, 1932, {21507, 21526, 21545, 21567, 21586, 21608, 21633}, {21652, 21662, 21672, 21685, 21695, 21708, 21724}, {21734, 21738, 21745, 21752, 21759, 21766, 21773}, {21777, 21805, 21833, 21849, 21868, 21875, 21885, 21901, 21917, 21945, 21967, 21989, 0}, {21777, 21805, 21833, 21849, 21868, 21875, 21885, 21901, 21917, 21945, 21967, 21989, 0}, {22014, 22033, 21833, 21849, 21868, 21875, 21885, 22052, 22059, 22075, 22091, 22101, 0}, {22014, 22033, 21833, 21849, 21868, 21875, 21885, 22052, 22059, 22075, 22091, 22101, 0}, 0, 0, 2566, 187, {1139,2293,4762,1128,1692,0,0,0,0,0,0,0,0,0},{5505,1242,0,0,0,0,0,0,0,0},{251,843,1866,1858,0,0,0,0,0,0,0,0},{269,848,1886,1875,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {1, 8151, 22114, {22117, 22136, 22155, 22180, 22199, 22221, 22246}, {22265, 22275, 22285, 22301, 22311, 22324, 22340}, {22350, 22354, 22361, 22365, 22372, 22379, 22386}, {22390, 22412, 22443, 22465, 22484, 22491, 22501, 22517, 22533, 22564, 22586, 22608, 0}, {22390, 22412, 22443, 22465, 22484, 22491, 22501, 22517, 22533, 22564, 22586, 22608, 0}, {6605, 6607, 6609, 6611, 6613, 6615, 6617, 6619, 6621, 6623, 6626, 6629, 0}, {6605, 6607, 6609, 6611, 6613, 6615, 6617, 6619, 6621, 6623, 6626, 6629, 0}, 0, 0, 2566, 187, {1139,2293,4762,1128,1692,0,0,0,0,0,0,0,0,0},{5505,1242,0,0,0,0,0,0,0,0},{251,843,1866,1858,0,0,0,0,0,0,0,0},{269,848,1886,1875,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {289, 22633, 22658, {22683, 22702, 22724, 22749, 22765, 22787, 22806}, {22816, 22823, 22830, 22837, 22844, 22851, 22858}, {22816, 22823, 22830, 22837, 22844, 22851, 22858}, {22862, 22878, 22903, 22922, 22941, 22948, 22961, 22974, 22993, 23024, 23049, 23071, 0}, {22862, 22878, 22903, 22922, 22941, 22948, 22961, 23096, 22993, 23024, 23049, 23071, 0}, {23115, 23123, 23137, 23151, 22941, 22948, 22961, 23162, 23170, 23184, 23195, 23203, 0}, {23115, 23123, 23137, 23151, 22941, 22948, 22961, 23162, 23170, 23184, 23195, 23203, 0}, 0, 0, 2566, 187, {1128,1139,2293,4762,1692,0,0,0,0,0,0,0,0,0},{5505,1242,0,0,0,0,0,0,0,0},{251,843,1866,1858,0,0,0,0,0,0,0,0},{269,848,1886,1875,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {3613, 1929, 1932, {23214, 23236, 23258, 23283, 23305, 23330, 23358}, {23380, 23390, 23400, 23413, 23423, 23436, 23452}, {23462, 23466, 23473, 23477, 23484, 23491, 23498}, {23502, 23518, 23543, 23562, 23584, 23591, 23604, 23617, 23636, 23667, 23692, 23711, 0}, {23502, 23518, 23543, 23562, 23584, 23591, 23736, 23617, 23636, 23667, 23692, 23711, 0}, {23749, 23756, 23543, 23772, 23584, 23591, 23736, 23617, 23788, 23810, 23826, 23836, 0}, {23749, 23756, 23543, 23772, 23584, 23591, 23736, 23617, 23788, 23810, 23826, 23836, 0}, 0, 0, 2566, 187, {1139,2293,4762,1128,1692,0,0,0,0,0,0,0,0,0},{5505,1242,0,0,0,0,0,0,0,0},{251,843,1866,1858,0,0,0,0,0,0,0,0},{269,848,1886,1875,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {3613, 1929, 1932, {23852, 23871, 23890, 23912, 23931, 23953, 23978}, {23997, 24007, 24017, 24030, 24040, 24053, 24069}, {24079, 24083, 24090, 24097, 24104, 24111, 24118}, {24122, 24138, 24163, 24182, 24204, 24211, 24224, 24237, 24256, 24284, 24309, 24331, 0}, {24122, 24138, 24163, 24182, 24204, 24211, 24224, 24237, 24256, 24284, 24309, 24331, 0}, {24356, 24364, 24384, 24391, 24204, 24408, 24415, 24423, 24431, 24454, 24471, 24485, 0}, {24356, 24364, 24384, 24391, 24204, 24408, 24415, 24423, 24431, 24454, 24471, 24485, 0}, 0, 0, 2566, 187, {1139,2293,4762,1128,1692,0,0,0,0,0,0,0,0,0},{5505,1242,0,0,0,0,0,0,0,0},{251,843,1866,1858,0,0,0,0,0,0,0,0},{269,848,1886,1875,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {20057, 1929, 1932, {24502, 24530, 24564, 24592, 24620, 24651, 24688}, {24716, 24729, 24748, 24764, 24777, 24796, 24815}, {24825, 24832, 24839, 24846, 24853, 24866, 24873}, {24877, 24896, 24924, 24946, 24965, 24978, 24988, 25001, 25026, 25057, 25082, 25098, 0}, {24877, 24896, 24924, 24946, 24965, 24978, 24988, 25001, 25026, 25057, 25082, 25098, 0}, {25117, 25127, 25146, 25156, 24965, 24978, 24988, 25172, 25179, 25204, 25220, 25230, 0}, {25117, 25127, 25146, 25156, 24965, 24978, 24988, 25172, 25179, 25204, 25220, 25230, 0}, 0, 0, 2566, 187, {1139,2293,1167,4762,0,0,0,0,0,0,0,0,0,0},{5505,1242,0,0,0,0,0,0,0,0},{4288,2321,20998,21007,0,0,0,0,0,0,0,0},{4302,2337,21015,21027,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {289, 25243, 25271, {25293, 25312, 25331, 25356, 25375, 25409, 25434}, {25453, 20597, 20607, 20623, 25463, 25488, 20674}, {0, 0, 0, 0, 0, 0, 0}, {25504, 25529, 25560, 25576, 20821, 20828, 20838, 25595, 25611, 25642, 25664, 25686, 0}, {25504, 25529, 25560, 25576, 20821, 20828, 20838, 25595, 25611, 25642, 25664, 25686, 0}, {25711, 25724, 25560, 25576, 20821, 20828, 20838, 25743, 25750, 25766, 25782, 25792, 0}, {25711, 25724, 25560, 25576, 20821, 20828, 20838, 25743, 25750, 25766, 25782, 25792, 0}, 0, 0, 2566, 187, {1128,0,0,0,0,0,0,0,0,0,0,0,0,0},{25805,0,0,0,0,0,0,0,0,0},{1858,1866,0,0,0,0,0,0,0,0,0,0},{1875,1886,0,0,0,0,0,0,0},{25824,25832,0,0,0,0,0,0}},
+       {1, 1929, 1932, {17608, 17627, 25842, 17668, 17687, 17709, 17734}, {17753, 17763, 25864, 17786, 17796, 17809, 17825}, {17835, 17839, 17846, 17853, 17860, 17867, 17874}, {25877, 25902, 17913, 25933, 25952, 17955, 25959, 25972, 25988, 26013, 26035, 26063, 0}, {25877, 25902, 17913, 25933, 25952, 17955, 25959, 25972, 25988, 26013, 26035, 26063, 0}, {26085, 26098, 17913, 26117, 25952, 17955, 25959, 26133, 26140, 26159, 26175, 26197, 0}, {26085, 26098, 17913, 26117, 25952, 17955, 25959, 26133, 26140, 26159, 26175, 26197, 0}, 0, 0, 2566, 187, {1128,1139,2293,4762,1692,0,0,0,0,0,0,0,0,0},{5505,1242,0,0,0,0,0,0,0,0},{251,843,1866,1858,0,0,0,0,0,0,0,0},{269,848,1886,1875,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {5619, 26213, 26218, {26223, 26230, 26241, 26254, 26267, 26278, 26291}, {26302, 26307, 26312, 26317, 26322, 26327, 26332}, {6605, 6607, 6609, 6611, 6613, 6615, 6617}, {26337, 26363, 26391, 26421, 26451, 26477, 26507, 26533, 26561, 26585, 26613, 26650, 0}, {26337, 26363, 26391, 26421, 26451, 26477, 26507, 26533, 26561, 26585, 26613, 26650, 0}, {26689, 26701, 26713, 26725, 26737, 26749, 26761, 26773, 26785, 26797, 26810, 26823, 0}, {26689, 26701, 26713, 26725, 26737, 26749, 26761, 26773, 26785, 26797, 26810, 26823, 0}, 0, 0, 2566, 187, {1692,0,0,0,0,0,0,0,0,0,0,0,0,0},{26836,26890,0,0,0,0,0,0,0,0},{251,843,0,0,0,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{26926,0,0,0,0,0,0,0}},
+       {26945, 26969, 26991, {27016, 27044, 27072, 27109, 27140, 27174, 27199}, {27233, 27249, 27265, 27290, 27309, 27331, 27344}, {27366, 27373, 27380, 27387, 27394, 27401, 27405}, {27415, 27449, 27486, 27520, 27554, 27585, 27622, 27659, 27699, 27733, 27767, 27816, 0}, {27415, 27449, 27486, 27520, 27554, 27585, 27622, 27659, 27699, 27733, 27767, 27816, 0}, {27865, 27878, 27891, 27904, 27917, 27930, 27943, 27956, 27969, 27982, 27998, 28014, 0}, {27865, 27878, 27891, 27904, 27917, 27930, 27943, 27956, 27969, 27982, 27998, 28014, 0}, 0, 0, 185, 187, {1654,1663,1672,1703,1692,1681,1721,1714,1728,0,0,0,0,0},{28030,28073,28121,28153,0,0,0,0,0,0},{251,0,0,0,0,0,0,0,0,0,0,0},{269,0,0,0,0,0,0,0,0},{28190,1914,0,0,0,0,0,0}},
+       {289, 1929, 1932, {28223, 28232, 28242, 28254, 28267, 28276, 28288}, {28300, 28304, 28309, 28313, 28317, 28321, 28325}, {2023, 28329, 2428, 2428, 15392, 6293, 2023}, {28332, 28339, 28348, 28355, 2702, 28362, 28370, 28381, 28386, 28391, 28398, 28407, 0}, {28332, 28339, 28348, 28355, 2702, 28362, 28370, 28381, 28386, 28391, 28398, 28407, 0}, {28415, 28419, 28309, 28423, 2702, 28427, 28431, 28381, 28386, 28435, 28439, 28444, 0}, {28415, 28419, 28309, 28423, 2702, 28427, 28431, 28381, 28386, 28435, 28439, 28444, 0}, 2, 1, 185, 187, {189,198,5002,8579,0,0,0,0,0,0,0,0,0,0},{1242,1207,0,0,0,0,0,0,0,0},{251,843,242,3594,0,0,0,0,0,0,0,0},{269,848,257,3602,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 28449, 28465, {28481, 28503, 28516, 28535, 28545, 28576, 28592}, {28481, 28503, 28516, 28535, 28545, 28576, 28592}, {6605, 6607, 6609, 6611, 6613, 6615, 6617}, {28605, 28618, 28637, 28650, 28663, 28676, 28695, 28714, 28727, 28743, 28756, 28781, 0}, {28605, 28618, 28637, 28650, 28663, 28676, 28695, 28714, 28727, 28743, 28756, 28781, 0}, {28605, 28618, 28637, 28650, 28663, 28676, 28695, 28714, 28727, 28743, 28756, 28781, 0}, {28605, 28618, 28637, 28650, 28663, 28676, 28695, 28714, 28727, 28743, 28756, 28781, 0}, 0, 0, 185, 187, {189,1692,0,0,0,0,0,0,0,0,0,0,0,0},{1242,10205,0,0,0,0,0,0,0,0},{843,0,0,0,0,0,0,0,0,0,0,0},{269,0,0,0,0,0,0,0,0},{28794,0,0,0,0,0,0,0}},
+       {289, 28829, 28854, {28879, 28904, 28923, 28951, 28970, 28995, 29014}, {28879, 28904, 28923, 28951, 28970, 28995, 29014}, {29036, 29040, 29044, 29048, 29058, 29062, 29072}, {29076, 29095, 29111, 29124, 29137, 29159, 29178, 29200, 29216, 29232, 29245, 29261, 0}, {29076, 29095, 29111, 29124, 29137, 29159, 29178, 29200, 29216, 29232, 29245, 29261, 0}, {29277, 29286, 29295, 29304, 29313, 29322, 29334, 29343, 29352, 29361, 29370, 29379, 0}, {29277, 29286, 29295, 29304, 29313, 29322, 29334, 29343, 29352, 29361, 29370, 29379, 0}, 0, 0, 185, 187, {198,29388,6480,0,0,0,0,0,0,0,0,0,0,0},{5505,0,0,0,0,0,0,0,0,0},{251,0,0,0,0,0,0,0,0,0,0,0},{269,0,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {3883, 7281, 7286, {3895, 29398, 3909, 29403, 29413, 29419, 3942}, {29426, 8413, 3761, 29430, 29435, 29439, 29443}, {2673, 2436, 2428, 2428, 29448, 3989, 2023}, {29450, 29458, 4005, 4011, 29467, 29472, 29478, 4034, 29484, 29493, 29501, 29510, 0}, {29519, 29527, 4094, 1012, 8083, 29536, 29542, 4117, 8100, 8109, 8117, 29548, 0}, {29557, 2763, 3761, 29561, 2702, 29565, 29570, 20182, 18406, 29574, 2796, 3769, 0}, {29557, 2763, 3761, 29561, 2702, 29565, 29570, 20182, 18406, 29574, 2796, 3769, 0}, 2, 1, 185, 187, {198,189,1120,2286,1139,1167,1692,0,0,0,0,0,0,0},{29578,4239,4266,1242,0,0,0,0,0,0},{843,251,242,29607,0,0,0,0,0,0,0,0},{848,269,257,29619,0,0,0,0,0},{1286,0,0,0,0,0,0,0}},
+       {1, 29639, 29651, {29663, 17627, 29691, 17668, 17687, 17709, 17734}, {17753, 17763, 25864, 17786, 17796, 17809, 17825}, {0, 0, 0, 0, 0, 0, 0}, {25877, 25902, 17913, 25933, 25952, 17955, 25959, 29710, 29726, 29754, 26035, 26063, 0}, {25877, 25902, 17913, 25933, 25952, 17955, 25959, 29710, 29726, 29754, 26035, 26063, 0}, {6605, 6607, 6609, 6611, 6613, 6615, 6617, 6619, 6621, 6623, 6626, 6629, 0}, {6605, 6607, 6609, 6611, 6613, 6615, 6617, 6619, 6621, 6623, 6626, 6629, 0}, 0, 0, 2566, 187, {1128,1139,2293,4762,1692,0,0,0,0,0,0,0,0,0},{5505,1242,0,0,0,0,0,0,0,0},{251,843,1866,1858,0,0,0,0,0,0,0,0},{269,848,1886,1875,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {20057, 29776, 29788, {29797, 29813, 29829, 29857, 29873, 29916, 29941}, {29797, 29813, 29969, 29857, 29979, 30001, 30014}, {30024, 30028, 30032, 30036, 30040, 30053, 30060}, {30067, 30086, 30111, 30130, 30155, 30168, 30181, 30194, 30216, 30250, 30275, 30303, 0}, {30067, 30086, 30111, 30130, 30155, 30168, 30181, 30194, 30216, 30250, 30275, 30303, 0}, {30331, 30338, 30348, 30130, 30155, 30168, 30181, 30361, 30371, 30384, 30394, 30407, 0}, {30331, 30338, 30348, 30130, 30155, 30168, 30181, 30361, 30371, 30384, 30394, 30407, 0}, 0, 1, 2566, 187, {1692,1681,1735,198,189,0,0,0,0,0,0,0,0,0},{30420,0,0,0,0,0,0,0,0,0},{1858,1866,843,251,0,0,0,0,0,0,0,0},{1875,1886,848,269,0,0,0,0,0},{30468,0,0,0,0,0,0,0}},
+       {30478, 30494, 30504, {30517, 30527, 30534, 30547, 30557, 30567, 30577}, {30517, 30527, 30587, 30547, 30557, 30567, 30577}, {30597, 30601, 30605, 30609, 30613, 30617, 30621}, {30625, 30641, 30657, 30667, 30680, 30687, 30694, 30704, 30717, 30736, 30752, 30768, 0}, {30625, 30641, 30657, 30667, 30680, 30687, 30694, 30704, 30717, 30784, 30752, 30768, 0}, {30803, 30813, 30657, 30823, 30680, 30687, 30694, 30833, 30843, 30853, 30863, 30873, 0}, {30803, 30813, 30657, 30823, 30680, 30687, 30694, 30833, 30843, 30853, 30863, 30873, 0}, 0, 0, 185, 187, {2277,1692,0,0,0,0,0,0,0,0,0,0,0,0},{30883,0,0,0,0,0,0,0,0,0},{3594,0,0,0,0,0,0,0,0,0,0,0},{3602,0,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 30915, 30925, {30938, 30945, 30951, 30958, 30964, 30970, 30978}, {30988, 30992, 30996, 31000, 31004, 31008, 31012}, {12842, 12842, 12842, 12842, 12842, 12842, 12842}, {31018, 31027, 10131, 31036, 31042, 31048, 31054, 31061, 31067, 31076, 31085, 31093, 0}, {31018, 31027, 10131, 31036, 31042, 31048, 31054, 31061, 31067, 31076, 31085, 31093, 0}, {31102, 31106, 3761, 31110, 3730, 31114, 31118, 31122, 31127, 31131, 31137, 31141, 0}, {31102, 31106, 3761, 31110, 3730, 31114, 31118, 31122, 31127, 31131, 31137, 31141, 0}, 0, 0, 2566, 187, {1128,1139,1692,0,0,0,0,0,0,0,0,0,0,0},{10751,222,0,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {1, 31145, 31186, {31227, 31246, 31265, 31290, 31309, 31331, 31356}, {31375, 17763, 31385, 17786, 31401, 17809, 17825}, {31414, 17839, 31418, 17853, 31422, 17867, 17874}, {17878, 31429, 17913, 31457, 25952, 31476, 17965, 31486, 31502, 31533, 31555, 31580, 0}, {17878, 31429, 17913, 31457, 25952, 31476, 17965, 31486, 31502, 31533, 31555, 31580, 0}, {17878, 31429, 17913, 31457, 25952, 31476, 17965, 31486, 31502, 31533, 31555, 31580, 0}, {17878, 31429, 17913, 31457, 25952, 31476, 17965, 31486, 31502, 31533, 31555, 31580, 0}, 0, 0, 185, 187, {3773,3782,3789,3798,1735,1692,3809,0,0,0,0,0,0,0},{20186,20206,222,10751,0,0,0,0,0,0},{3594,242,843,251,0,0,0,0,0,0,0,0},{3602,257,848,269,0,0,0,0,0},{25832,0,0,0,0,0,0,0}},
+       {289, 0, 0, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {31605, 31612, 31621, 31636, 31647, 31656, 31663, 31670, 31677, 31688, 31701, 31714, 0}, {31605, 31612, 31621, 31636, 31647, 31656, 31663, 31670, 31677, 31688, 31701, 31714, 0}, {6605, 6607, 6609, 6611, 6613, 6615, 6617, 6619, 6621, 6623, 6626, 6629, 0}, {6605, 6607, 6609, 6611, 6613, 6615, 6617, 6619, 6621, 6623, 6626, 6629, 0}, 0, 6, 185, 187, {1654,1692,0,0,0,0,0,0,0,0,0,0,0,0},{31719,31740,0,0,0,0,0,0,0,0},{3594,843,0,0,0,0,0,0,0,0,0,0},{3602,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {31755, 1929, 1932, {31761, 31768, 31774, 31781, 31792, 31800, 31809}, {31816, 8413, 3761, 31820, 31824, 31828, 10832}, {2436, 2436, 2428, 2428, 5694, 16426, 2023}, {3991, 31832, 31840, 4011, 4017, 31846, 31852, 4034, 31858, 31868, 31876, 31886, 0}, {3991, 31832, 31840, 4011, 4017, 31846, 31852, 4034, 31858, 31868, 31876, 31886, 0}, {31896, 31900, 3761, 29561, 3730, 31904, 31908, 20182, 18406, 2792, 31912, 16383, 0}, {31896, 31900, 3761, 29561, 3730, 31904, 31908, 20182, 18406, 2792, 31912, 16383, 0}, 0, 0, 185, 187, {3773,3782,3789,3798,1735,1692,3809,0,0,0,0,0,0,0},{20186,20206,222,10751,0,0,0,0,0,0},{3594,242,843,251,0,0,0,0,0,0,0,0},{3602,257,848,269,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {289, 0, 0, {31916, 31923, 31931, 31938, 31945, 31953, 31961}, {31968, 31971, 31974, 31977, 31980, 31983, 31986}, {2436, 2436, 2430, 2436, 12842, 3987, 12842}, {31989, 31997, 32007, 32013, 32021, 32026, 32031, 32036, 32043, 20167, 32051, 32059, 0}, {31989, 31997, 32007, 32013, 32021, 32026, 32031, 32036, 32043, 20167, 32051, 32059, 0}, {2759, 32067, 3761, 32071, 3730, 31114, 31118, 32075, 3701, 2792, 32079, 16383, 0}, {2759, 32067, 3761, 32071, 3730, 31114, 31118, 32075, 3701, 2792, 32079, 16383, 0}, 0, 0, 185, 187, {2277,2286,189,198,1735,1692,3809,0,0,0,0,0,0,0},{20186,20206,222,10751,0,0,0,0,0,0},{3594,242,843,251,0,0,0,0,0,0,0,0},{3602,257,848,269,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {1, 32083, 32094, {32104, 32122, 32137, 32159, 32172, 32186, 32203}, {32227, 32235, 32240, 32159, 32172, 32252, 32259}, {0, 0, 0, 0, 0, 0, 0}, {32273, 32295, 32311, 32331, 32345, 32362, 32377, 32394, 32408, 32421, 32440, 32454, 0}, {32273, 32295, 32311, 32331, 32345, 32362, 32377, 32394, 32408, 32421, 32440, 32454, 0}, {32473, 32488, 32497, 32510, 32517, 32527, 32535, 32545, 32552, 32558, 32570, 32577, 0}, {32473, 32488, 32497, 32510, 32517, 32527, 32535, 32545, 32552, 32558, 32570, 32577, 0}, 0, 0, 185, 187, {2277,2286,189,198,1735,1692,3809,0,0,0,0,0,0,0},{222,20186,20206,10751,0,0,0,0,0,0},{3594,242,843,251,0,0,0,0,0,0,0,0},{3602,257,848,269,0,0,0,0,0},{25832,0,0,0,0,0,0,0}},
+       {3613, 0, 0, {32589, 32597, 15958, 15967, 15976, 32608, 32618}, {16414, 16008, 16012, 16016, 16020, 16277, 32627}, {0, 0, 0, 0, 0, 0, 0}, {32631, 32640, 32650, 32658, 10844, 3734, 32666, 32672, 32681, 32690, 32699, 32708, 0}, {32631, 32640, 32650, 32658, 10844, 3734, 32666, 32672, 32681, 32690, 32699, 32708, 0}, {2759, 2763, 16027, 32717, 10844, 2776, 2780, 20182, 18406, 2792, 32721, 16383, 0}, {2759, 2763, 16027, 32717, 10844, 2776, 2780, 20182, 18406, 2792, 32721, 16383, 0}, 0, 0, 185, 187, {189,1681,1735,1692,0,0,0,0,0,0,0,0,0,0},{5505,0,0,0,0,0,0,0,0,0},{242,3594,251,0,0,0,0,0,0,0,0,0},{257,3602,269,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {32725, 32738, 32743, {32748, 32755, 32770, 32784, 32800, 32815, 32831}, {6289, 32846, 2530, 32850, 32854, 32858, 32862}, {2023, 12842, 2428, 2018, 2023, 2430, 12842}, {7370, 7378, 32866, 32873, 32880, 2469, 2474, 32885, 32895, 32906, 32915, 32925, 0}, {7370, 7378, 32866, 32873, 32880, 2469, 2474, 32885, 32895, 32906, 32915, 32925, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 2546, 2550, 2554, 2558, 2562, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 2546, 2550, 2554, 2558, 2562, 0}, 0, 0, 2566, 187, {1128,1139,1692,2568,0,0,0,0,0,0,0,0,0,0},{32935,2300,4769,0,0,0,0,0,0,0},{251,843,0,0,0,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 32954, 32959, {32964, 32980, 32988, 32996, 33005, 33017, 33027}, {33037, 33043, 33049, 33053, 33057, 33065, 3701}, {0, 0, 0, 0, 0, 0, 0}, {33072, 33085, 33099, 33108, 33114, 33118, 33123, 33131, 16338, 33144, 16355, 16363, 0}, {33072, 33085, 33099, 33108, 33114, 33118, 33123, 33131, 16338, 33144, 16355, 16363, 0}, {33153, 2763, 33157, 16371, 33114, 33161, 2780, 33165, 2788, 33173, 2796, 16383, 0}, {33153, 2763, 33157, 16371, 33114, 33161, 2780, 33165, 2788, 33173, 2796, 16383, 0}, 0, 0, 185, 187, {2277,2286,189,198,1735,1692,3809,0,0,0,0,0,0,0},{20186,20206,222,10751,0,0,0,0,0,0},{2313,0,0,0,0,0,0,0,0,0,0,0},{2326,0,0,0,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {33179, 33206, 33213, {33220, 33230, 33240, 33250, 33260, 33270, 33280}, {33290, 33297, 33304, 33311, 33318, 33325, 33332}, {33339, 33343, 33347, 33351, 33355, 33359, 33363}, {33367, 33374, 33381, 33388, 33395, 33402, 33409, 33416, 33423, 33430, 33437, 33447, 0}, {33367, 33374, 33381, 33388, 33395, 33402, 33409, 33416, 33423, 33430, 33437, 33447, 0}, {6605, 6607, 6609, 6611, 6613, 6615, 6617, 6619, 6621, 6623, 6626, 6629, 0}, {6605, 6607, 6609, 6611, 6613, 6615, 6617, 6619, 6621, 6623, 6626, 6629, 0}, 0, 0, 185, 187, {1654,1663,1672,1703,1692,1681,0,0,0,0,0,0,0,0},{33457,33481,33511,33541,33558,0,0,0,0,0},{1858,843,251,0,0,0,0,0,0,0,0,0},{1875,848,269,0,0,0,0,0,0},{33581,1914,0,0,0,0,0,0}},
+       {289, 0, 0, {28300, 8413, 33598, 33605, 33615, 33620, 33627}, {33634, 6273, 33638, 4850, 33643, 33648, 33653}, {4421, 33658, 33661, 33664, 33667, 33670, 33673}, {33676, 33683, 33598, 33694, 33700, 33704, 33713, 33720, 33725, 33734, 33739, 33742, 0}, {33676, 33683, 33598, 33694, 33700, 33704, 33713, 33720, 33725, 33734, 33739, 33742, 0}, {33748, 33752, 33759, 28423, 33700, 33764, 33769, 33720, 33774, 33734, 33739, 33779, 0}, {33748, 33752, 33759, 28423, 33700, 33764, 33769, 33720, 33774, 33734, 33739, 33779, 0}, 2, 1, 185, 187, {198,189,1167,1139,1692,0,0,0,0,0,0,0,0,0},{4985,5002,1242,0,0,0,0,0,0,0},{251,843,4288,5011,5021,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {1921, 33783, 33788, {33793, 33801, 33811, 33821, 33830, 33840, 33848}, {33858, 33862, 33867, 33871, 33875, 33879, 33883}, {2023, 2428, 2673, 2428, 2673, 2434, 2023}, {2675, 2682, 2690, 2696, 2702, 2706, 2711, 33887, 33896, 33907, 33916, 33926, 0}, {2675, 2682, 2690, 2696, 2702, 2706, 2711, 33887, 33896, 33907, 33916, 33926, 0}, {2759, 2763, 2767, 2772, 2702, 2776, 2780, 2784, 2788, 2792, 2796, 2800, 0}, {2759, 2763, 2767, 2772, 2702, 2776, 2780, 2784, 2788, 2792, 2796, 2800, 0}, 0, 0, 185, 187, {198,189,1167,1139,1692,0,0,0,0,0,0,0,0,0},{4985,5002,1242,0,0,0,0,0,0,0},{251,843,4288,5011,5021,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {33936, 33954, 33959, {33964, 33989, 34018, 34043, 34056, 34071, 34088}, {34103, 34108, 34113, 34118, 34123, 34128, 8800}, {19442, 19442, 34133, 8811, 8814, 19442, 8811}, {34136, 34155, 34170, 34192, 34212, 34228, 34244, 34258, 34284, 34308, 34325, 34342, 0}, {34136, 34155, 34170, 34192, 34212, 34228, 34244, 34258, 34284, 34308, 34325, 34342, 0}, {34359, 34368, 34377, 34391, 34405, 34417, 34429, 34439, 34455, 34469, 34476, 34483, 0}, {34359, 34368, 34377, 34391, 34405, 34417, 34429, 34439, 34455, 34469, 34476, 34483, 0}, 0, 1, 691, 187, {1156,4753,1692,34490,34500,0,0,0,0,0,0,0,0,0},{34513,34548,34577,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{34612,0,0,0,0,0,0,0}},
+       {20057, 0, 0, {34628, 34640, 34651, 34663, 34675, 34685, 34697}, {34712, 34717, 34722, 34727, 34732, 34737, 34742}, {0, 0, 0, 0, 0, 0, 0}, {34747, 34756, 34768, 34776, 34781, 34791, 34798, 34807, 34814, 34820, 34829, 34840, 0}, {34747, 34756, 34768, 34776, 34781, 34791, 34798, 34807, 34814, 34820, 34829, 34840, 0}, {34848, 34853, 34858, 34863, 34868, 34873, 34878, 34732, 34883, 34888, 34893, 34898, 0}, {34848, 34853, 34858, 34863, 34868, 34873, 34878, 34732, 34883, 34888, 34893, 34898, 0}, 0, 0, 185, 187, {9796,2286,0,0,0,0,0,0,0,0,0,0,0,0},{34903,1207,0,0,0,0,0,0,0,0},{843,0,0,0,0,0,0,0,0,0,0,0},{848,0,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 34923, 34925, {34927, 34940, 34948, 34957, 34967, 34977, 34986}, {34998, 35002, 35006, 35010, 35014, 35018, 35022}, {2673, 2436, 2428, 7736, 12842, 5694, 2023}, {35026, 35040, 35051, 35060, 35071, 35083, 35097, 35109, 35122, 35135, 35147, 35160, 0}, {35026, 35040, 35051, 35060, 35071, 35083, 35097, 35109, 35122, 35135, 35147, 35160, 0}, {35174, 35179, 35185, 35191, 35196, 35202, 35208, 35213, 35219, 35224, 19163, 35230, 0}, {35174, 35179, 35185, 35191, 35196, 35202, 35208, 35213, 35219, 35224, 19163, 35230, 0}, 2, 1, 185, 187, {198,189,2286,4762,1692,0,0,0,0,0,0,0,0,0},{5505,1242,0,0,0,0,0,0,0,0},{251,843,242,3594,0,0,0,0,0,0,0,0},{269,848,257,3602,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {1, 0, 0, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {9, 18, 25, 45, 65, 89, 113, 120, 131, 142, 151, 169, 0}, {9, 18, 25, 45, 65, 89, 113, 120, 131, 142, 151, 169, 0}, {9, 18, 25, 45, 65, 89, 113, 120, 131, 142, 151, 169, 0}, {9, 18, 25, 45, 65, 89, 113, 120, 131, 142, 151, 169, 0}, 0, 0, 185, 187, {189,198,0,0,0,0,0,0,0,0,0,0,0,0},{209,222,0,0,0,0,0,0,0,0},{242,251,0,0,0,0,0,0,0,0,0,0},{257,269,0,0,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {289, 296, 307, {318, 331, 352, 367, 378, 397, 408}, {421, 426, 431, 436, 441, 446, 451}, {456, 459, 462, 465, 468, 459, 465}, {471, 484, 501, 510, 521, 528, 535, 542, 555, 574, 591, 606, 0}, {471, 484, 501, 510, 521, 528, 535, 542, 555, 574, 591, 606, 0}, {623, 629, 501, 639, 521, 528, 535, 647, 655, 665, 673, 683, 0}, {623, 629, 501, 639, 521, 528, 535, 647, 655, 665, 673, 683, 0}, 2, 1, 691, 187, {693,708,724,740,0,0,0,0,0,0,0,0,0,0},{757,776,794,819,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{856,0,0,0,0,0,0,0}},
+       {289, 872, 878, {884, 893, 901, 909, 918, 925, 935}, {944, 948, 952, 956, 960, 964, 968}, {972, 975, 978, 981, 984, 987, 990}, {993, 999, 1006, 1012, 1018, 1023, 1028, 1035, 1041, 1050, 1058, 1067, 0}, {993, 999, 1006, 1012, 1018, 1023, 1028, 1035, 1041, 1050, 1058, 1067, 0}, {1076, 1081, 1006, 1086, 1018, 1023, 1091, 1096, 1100, 1105, 1110, 1115, 0}, {1076, 1081, 1006, 1086, 1018, 1023, 1091, 1096, 1100, 1105, 1110, 1115, 0}, 2, 1, 185, 187, {198,189,1120,1128,1139,1148,1156,1167,1176,0,0,0,0,0},{1184,1207,1225,1242,1254,1270,0,0,0,0},{843,0,0,0,0,0,0,0,0,0,0,0},{848,0,0,0,0,0,0,0,0},{1286,1301,1311,1320,0,0,0,0}},
+       {1327, 1340, 1347, {1354, 1364, 1374, 1384, 1394, 1404, 1414}, {35236, 35243, 35250, 35257, 35264, 35271, 35278}, {1473, 1477, 1481, 1485, 1489, 1493, 1497}, {1591, 1596, 1601, 1606, 1611, 1616, 1621, 1626, 1631, 1636, 1642, 1648, 0}, {1591, 1596, 1601, 1606, 1611, 1616, 1621, 1626, 1631, 1636, 1642, 1648, 0}, {1591, 1596, 1601, 1606, 1611, 1616, 1621, 1626, 1631, 1636, 1642, 1648, 0}, {1591, 1596, 1601, 1606, 1611, 1616, 1621, 1626, 1631, 1636, 1642, 1648, 0}, 0, 0, 185, 187, {1654,1681,1692,0,0,0,0,0,0,0,0,0,0,0},{1744,6632,1822,35285,0,0,0,0,0,0},{1866,1858,251,843,0,0,0,0,0,0,0,0},{1886,1875,269,848,0,0,0,0,0},{1898,0,0,0,0,0,0,0}},
+       {1921, 1929, 1932, {1935, 1943, 1953, 1961, 1969, 1978, 1985}, {1992, 1995, 1998, 2002, 2005, 2009, 2013}, {2016, 2018, 2020, 2023, 2025, 2018, 2023}, {2028, 2034, 2040, 2048, 2054, 2062, 2070, 2080, 2086, 2094, 2102, 2111, 0}, {2120, 2126, 2133, 2141, 2147, 2155, 2163, 2173, 2086, 2179, 2187, 2197, 0}, {2206, 2210, 2215, 2220, 2224, 2229, 2234, 2239, 2243, 2249, 2255, 2259, 0}, {2206, 2210, 2215, 2220, 2224, 2229, 2234, 2239, 2243, 2249, 2255, 2259, 0}, 2, 1, 2263, 187, {2266,2277,198,2286,189,2293,1692,1663,1721,0,0,0,0,0},{2300,0,0,0,0,0,0,0,0,0},{843,251,2313,2321,0,0,0,0,0,0,0,0},{848,269,2326,2337,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {1921, 1929, 1932, {2345, 2353, 2360, 2368, 2375, 2383, 2390}, {2398, 2403, 2407, 2411, 2415, 2419, 2423}, {2023, 2428, 2430, 2432, 2430, 2434, 2436}, {2438, 2445, 2453, 2459, 2465, 2469, 2474, 2479, 2486, 2496, 2504, 2513, 0}, {2438, 2445, 2453, 2459, 2465, 2469, 2474, 2479, 2486, 2496, 2504, 2513, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 2546, 2550, 2554, 2558, 2562, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 2546, 2550, 2554, 2558, 2562, 0}, 2, 1, 2566, 187, {1128,1139,1692,2568,0,0,0,0,0,0,0,0,0,0},{2300,0,0,0,0,0,0,0,0,0},{251,843,0,0,0,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {1921, 2579, 2585, {2592, 2600, 2607, 2616, 2625, 2636, 2644}, {2652, 2655, 2658, 2661, 2664, 2667, 2670}, {2023, 2428, 2673, 2428, 2673, 2434, 2023}, {2675, 2682, 2690, 2696, 2702, 2706, 2711, 2716, 2723, 2733, 2741, 2750, 0}, {2675, 2682, 2690, 2696, 2702, 2706, 2711, 2716, 2723, 2733, 2741, 2750, 0}, {2759, 2763, 2767, 2772, 2702, 2776, 2780, 2784, 2788, 2792, 2796, 2800, 0}, {2759, 2763, 2767, 2772, 2702, 2776, 2780, 2784, 2788, 2792, 2796, 2800, 0}, 2, 1, 691, 187, {1156,1167,1692,2804,0,0,0,0,0,0,0,0,0,0},{2818,2300,2837,0,0,0,0,0,0,0},{251,2850,0,0,0,0,0,0,0,0,0,0},{269,2862,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 2877, 2884, {2891, 2906, 2921, 2932, 2947, 2960, 2979}, {2994, 3001, 3008, 3015, 3022, 3029, 3036}, {3043, 3046, 3049, 3049, 3052, 3052, 3055}, {3058, 3079, 3102, 3117, 3134, 3145, 3160, 3175, 3194, 3217, 3236, 3255, 0}, {3276, 3297, 3320, 3335, 3352, 3363, 3378, 3393, 3412, 3435, 3454, 3473, 0}, {3494, 3501, 3508, 3515, 3522, 3529, 3538, 3547, 3554, 3561, 3568, 3575, 0}, {3494, 3501, 3508, 3515, 3522, 3529, 3538, 3547, 3554, 3561, 3568, 3575, 0}, 2, 1, 185, 187, {2277,198,2286,189,3582,1692,0,0,0,0,0,0,0,0},{1207,1242,0,0,0,0,0,0,0,0},{3594,242,843,251,0,0,0,0,0,0,0,0},{3602,257,848,269,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {3613, 1929, 1932, {3620, 3627, 3634, 3642, 3652, 3661, 3668}, {3677, 3681, 3685, 3689, 3693, 3697, 3701}, {2023, 2428, 2430, 3705, 2430, 2434, 2023}, {3707, 3715, 3724, 2696, 3730, 3734, 3739, 2716, 2723, 3744, 2741, 3752, 0}, {3707, 3715, 3724, 2696, 3730, 3734, 3739, 2716, 2723, 3744, 2741, 3752, 0}, {2759, 2763, 3761, 2772, 3730, 2776, 2780, 2784, 2788, 3765, 2796, 3769, 0}, {2759, 2763, 3761, 2772, 3730, 2776, 2780, 2784, 2788, 3765, 2796, 3769, 0}, 0, 0, 185, 187, {3773,3782,3789,3798,1735,1692,3809,0,0,0,0,0,0,0},{3819,3838,3851,3870,0,0,0,0,0,0},{3594,242,843,251,0,0,0,0,0,0,0,0},{3602,257,848,269,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {4322, 4332, 4336, {4340, 4352, 4364, 4374, 4388, 4398, 4410}, {4421, 4424, 4427, 4430, 4433, 4436, 4439}, {2023, 2428, 2430, 4442, 2430, 2018, 2436}, {4444, 4453, 4462, 4472, 4481, 4490, 4499, 4509, 4516, 4524, 4532, 4542, 0}, {4551, 4562, 4573, 4585, 4596, 4607, 4618, 4630, 4639, 4649, 4659, 4671, 0}, {4682, 4688, 4694, 4701, 4707, 4713, 4719, 4726, 4730, 4735, 4740, 4747, 0}, {4682, 4688, 4694, 4701, 4707, 4713, 4719, 4726, 4730, 4735, 4740, 4747, 0}, 2, 1, 691, 187, {4753,1156,4762,1692,0,0,0,0,0,0,0,0,0,0},{2300,4769,2818,0,0,0,0,0,0,0},{843,2321,0,0,0,0,0,0,0,0,0,0},{848,2337,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 1929, 1932, {4783, 4792, 4798, 4804, 4813, 4819, 4828}, {4835, 4840, 4845, 4850, 4855, 4860, 4865}, {2673, 2436, 2428, 2428, 3987, 3989, 2023}, {4870, 4878, 4887, 4892, 4898, 4902, 4907, 4915, 4921, 4931, 1058, 4939, 0}, {4870, 4878, 4887, 4892, 4898, 4902, 4907, 4915, 4921, 4931, 1058, 4939, 0}, {4949, 4955, 4887, 4962, 4898, 4902, 4967, 4915, 4973, 1105, 1110, 4979, 0}, {4949, 4955, 4887, 4962, 4898, 4902, 4967, 4915, 4973, 1105, 1110, 4979, 0}, 2, 1, 185, 187, {198,189,1167,1139,1692,0,0,0,0,0,0,0,0,0},{4985,1242,5002,0,0,0,0,0,0,0},{251,843,4288,5011,5021,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {1, 5029, 5042, {5053, 5071, 5085, 5103, 5121, 5139, 5155}, {5169, 5181, 5193, 5205, 5217, 5229, 5241}, {5248, 5253, 5258, 5263, 5268, 5273, 5278}, {5283, 5294, 5307, 5314, 5325, 5332, 5341, 5350, 5363, 5376, 5391, 5404, 0}, {5283, 5294, 5307, 5314, 5325, 5332, 5341, 5350, 5363, 5376, 5391, 5404, 0}, {5415, 5424, 5307, 5433, 5325, 5442, 5451, 5460, 5469, 5478, 5487, 5496, 0}, {5415, 5424, 5307, 5433, 5325, 5442, 5451, 5460, 5469, 5478, 5487, 5496, 0}, 0, 0, 185, 187, {198,5505,189,209,1139,1128,5518,1692,5531,5548,0,0,0,0},{5558,5505,5576,5598,5531,0,0,0,0,0},{251,242,0,0,0,0,0,0,0,0,0,0},{269,257,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {5619, 5627, 5631, {5635, 5645, 5653, 5658, 5665, 5678, 5686}, {3989, 5694, 4442, 5696, 5700, 2018, 5703}, {3989, 5694, 4442, 5707, 5700, 2018, 5707}, {5710, 5718, 5727, 5736, 5745, 5752, 5760, 5768, 5778, 5789, 2504, 2513, 0}, {5710, 5718, 5727, 5736, 5745, 5752, 5760, 5768, 5778, 5789, 2504, 2513, 0}, {5798, 5803, 5809, 5816, 5822, 5828, 5834, 5840, 5845, 5852, 1110, 5857, 0}, {5798, 5803, 5809, 5816, 5822, 5828, 5834, 5840, 5845, 5852, 1110, 5857, 0}, 2, 1, 691, 187, {5862,5874,1692,5888,0,0,0,0,0,0,0,0,0,0},{5897,0,0,0,0,0,0,0,0,0},{843,251,3594,0,0,0,0,0,0,0,0,0},{848,269,3602,0,0,0,0,0,0},{5911,0,0,0,0,0,0,0}},
+       {1921, 5922, 5927, {5932, 5943, 5954, 5968, 5982, 5994, 6006}, {6018, 6023, 6029, 6035, 6041, 6046, 6052}, {2023, 2428, 6057, 2428, 2434, 2434, 2436}, {6060, 6068, 4887, 6077, 6084, 6089, 6096, 6103, 2486, 5789, 6111, 6121, 0}, {6060, 6068, 4887, 6077, 6084, 6089, 6096, 6103, 2486, 5789, 6111, 6121, 0}, {5798, 1081, 4845, 6130, 6084, 5828, 5834, 6135, 6142, 5852, 6147, 1115, 0}, {5798, 1081, 4845, 6130, 6084, 5828, 5834, 6135, 6142, 5852, 6147, 1115, 0}, 2, 1, 691, 187, {4753,1167,6153,6165,1692,6179,189,0,0,0,0,0,0,0},{2300,4769,6188,0,0,0,0,0,0,0},{251,843,0,0,0,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 1929, 1932, {6207, 6216, 6224, 6233, 6244, 6253, 6262}, {6269, 6273, 2530, 6277, 6281, 6285, 6289}, {2673, 2436, 2428, 2428, 6293, 3989, 2023}, {6295, 6303, 4005, 6312, 6319, 6326, 6333, 4034, 6340, 6350, 6358, 6367, 0}, {6376, 6384, 4094, 6393, 6400, 6407, 6414, 4117, 6421, 6431, 1058, 6439, 0}, {6448, 2526, 2530, 2534, 6452, 6456, 6460, 6464, 6468, 6472, 2558, 6476, 0}, {6448, 2526, 2530, 2534, 6452, 6456, 6460, 6464, 6468, 6472, 2558, 6476, 0}, 2, 1, 185, 187, {198,3582,189,6480,2286,0,0,0,0,0,0,0,0,0},{4985,6488,1242,0,0,0,0,0,0,0},{251,0,0,0,0,0,0,0,0,0,0,0},{269,0,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {1327, 6497, 6504, {6511, 6521, 6531, 6541, 6551, 6561, 6571}, {1473, 6581, 6585, 6589, 6593, 6597, 6601}, {1473, 6581, 6585, 6589, 6593, 6597, 6601}, {1591, 1596, 1601, 1606, 1611, 1616, 1621, 1626, 1631, 1636, 1642, 1648, 0}, {1591, 1596, 1601, 1606, 1611, 1616, 1621, 1626, 1631, 1636, 1642, 1648, 0}, {6605, 6607, 6609, 6611, 6613, 6615, 6617, 6619, 6621, 6623, 6626, 6629, 0}, {6605, 6607, 6609, 6611, 6613, 6615, 6617, 6619, 6621, 6623, 6626, 6629, 0}, 0, 0, 185, 187, {1681,1735,1714,1654,1692,0,0,0,0,0,0,0,0,0},{1744,6632,6656,6683,6712,6736,6765,6785,0,0},{843,251,1858,1866,0,0,0,0,0,0,0,0},{848,269,1875,1886,0,0,0,0,0},{1898,0,0,0,0,0,0,0}},
+       {6810, 6824, 6831, {6838, 6848, 6858, 6868, 6878, 6888, 6898}, {6908, 6912, 6916, 6920, 6924, 6928, 6932}, {6908, 6912, 6916, 6920, 6924, 6928, 6932}, {6936, 6941, 6946, 6951, 6956, 6961, 6966, 6971, 6976, 6981, 6987, 6993, 0}, {6936, 6941, 6946, 6951, 6956, 6961, 6966, 6971, 6976, 6981, 6987, 6993, 0}, {6936, 6941, 6946, 6951, 6956, 6961, 6966, 6971, 6976, 6981, 6987, 6993, 0}, {6936, 6941, 6946, 6951, 6956, 6961, 6966, 6971, 6976, 6981, 6987, 6993, 0}, 0, 0, 2566, 187, {1692,5888,1721,1663,0,0,0,0,0,0,0,0,0,0},{6999,7028,7052,7079,7101,7132,7158,7189,7215,7242},{1858,1866,843,251,0,0,0,0,0,0,0,0},{1875,1886,848,269,0,0,0,0,0},{7264,0,0,0,0,0,0,0}},
+       {289, 7281, 7286, {7291, 7298, 7306, 7314, 7323, 7333, 7341}, {7350, 4424, 7353, 7356, 7359, 7362, 7365}, {7368, 2428, 2673, 3705, 2673, 3989, 7368}, {7370, 7378, 7387, 2459, 7393, 2469, 2474, 7397, 2486, 2496, 2504, 2513, 0}, {7370, 7378, 7387, 2459, 7393, 2469, 2474, 7397, 2486, 2496, 2504, 2513, 0}, {2522, 2526, 7406, 2534, 7393, 2538, 2542, 2546, 2550, 2554, 2558, 2562, 0}, {2522, 2526, 7406, 2534, 7393, 2538, 2542, 2546, 2550, 2554, 2558, 2562, 0}, 2, 1, 2566, 187, {7410,2293,1139,189,1167,7419,1692,0,0,0,0,0,0,0},{4985,6488,1242,5002,0,0,0,0,0,0},{251,843,2321,7431,7443,0,0,0,0,0,0,0},{269,848,7455,7470,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {1921, 7281, 7286, {2345, 2353, 2360, 2368, 2375, 2383, 2390}, {7485, 7490, 7494, 7498, 7502, 7506, 7510}, {2023, 2428, 2430, 2432, 2430, 2434, 2436}, {2438, 2445, 4887, 2459, 4898, 2469, 2474, 2479, 2486, 2496, 2504, 6121, 0}, {2438, 2445, 4887, 2459, 4898, 2469, 2474, 2479, 2486, 2496, 2504, 6121, 0}, {2522, 2526, 2530, 2534, 4898, 2538, 2542, 2546, 2550, 2554, 2558, 7515, 0}, {2522, 2526, 2530, 2534, 4898, 2538, 2542, 2546, 2550, 2554, 2558, 7515, 0}, 2, 1, 691, 187, {1156,7519,1167,4762,2804,1692,0,0,0,0,0,0,0,0},{2300,4769,0,0,0,0,0,0,0,0},{251,843,7529,7539,4288,2321,7550,7561,0,0,0,0},{269,848,7571,7585,4302,2337,7598,7612,0},{1301,7625,7635,0,0,0,0,0}},
+       {289, 1929, 1932, {7643, 7653, 7667, 7674, 7681, 7690, 1985}, {7698, 7705, 7710, 7714, 7719, 7724, 7728}, {2016, 2018, 3705, 7733, 7736, 2018, 2023}, {7738, 7747, 7752, 7759, 2465, 7769, 7778, 7785, 7795, 7805, 2102, 7818, 0}, {7828, 7837, 7844, 7850, 7859, 7864, 7872, 7878, 7887, 7897, 7911, 7921, 0}, {7929, 7933, 2530, 7937, 2465, 7941, 7945, 7949, 7953, 7957, 2255, 7962, 0}, {7929, 7933, 2530, 7937, 2465, 7941, 7945, 7949, 7953, 7957, 2255, 7962, 0}, 2, 1, 2566, 187, {1692,5888,0,0,0,0,0,0,0,0,0,0,0,0},{1242,5505,0,0,0,0,0,0,0,0},{251,843,0,0,0,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {3883, 1929, 1932, {3895, 7966, 7980, 7993, 8006, 8019, 3942}, {6269, 8031, 8035, 8039, 8043, 8047, 8051}, {2673, 2023, 2430, 8056, 8056, 2023, 2023}, {8058, 8066, 8076, 1012, 8083, 8088, 8094, 4117, 8100, 8109, 8117, 8126, 0}, {8058, 8066, 8076, 1012, 8083, 8088, 8094, 4117, 8100, 8109, 8117, 8126, 0}, {2522, 8135, 2530, 8139, 4898, 2538, 2542, 6464, 6468, 8143, 2558, 8147, 0}, {2522, 8135, 2530, 8139, 4898, 2538, 2542, 6464, 6468, 8143, 2558, 8147, 0}, 0, 0, 185, 187, {198,189,2277,2286,1139,1128,2293,7410,1167,1156,7419,4762,4753,1692},{4211,4266,0,0,0,0,0,0,0,0},{251,0,0,0,0,0,0,0,0,0,0,0},{269,0,0,0,0,0,0,0,0},{1286,0,0,0,0,0,0,0}},
+       {289, 8151, 8154, {8157, 8166, 4798, 8176, 8184, 8192, 8201}, {8207, 8210, 4424, 8214, 8217, 8221, 2013}, {2673, 6293, 2428, 2428, 6293, 3989, 2023}, {8224, 8232, 4887, 8239, 8246, 8251, 8261, 8269, 8275, 8285, 2504, 2513, 0}, {8224, 8232, 4887, 8239, 8246, 8251, 8261, 8269, 8275, 8285, 2504, 2513, 0}, {8293, 8300, 4887, 4962, 8246, 8306, 8313, 8269, 8318, 1105, 1110, 5857, 0}, {8293, 8300, 4887, 4962, 8246, 8306, 8313, 8269, 8318, 1105, 1110, 5857, 0}, 2, 1, 2566, 187, {1128,1139,0,0,0,0,0,0,0,0,0,0,0,0},{8324,0,0,0,0,0,0,0,0,0},{251,843,8353,0,0,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 7281, 7286, {8356, 8366, 8371, 8378, 8387, 8391, 8398}, {8409, 8413, 3761, 8417, 8421, 8425, 8429}, {2673, 2436, 2428, 2428, 3987, 3989, 2023}, {8434, 8443, 8453, 8460, 4898, 8468, 8474, 2479, 8480, 8491, 8501, 8511, 0}, {8434, 8443, 8453, 8460, 4898, 8468, 8474, 2479, 8480, 8491, 8501, 8511, 0}, {8521, 1081, 4845, 6130, 4898, 8526, 8531, 5840, 4973, 1105, 1110, 5857, 0}, {8521, 1081, 4845, 6130, 4898, 8526, 8531, 5840, 4973, 1105, 1110, 5857, 0}, 0, 1, 691, 187, {1156,4753,1176,1128,1139,8536,8551,1692,8564,0,0,0,0,0},{1242,1207,4985,8579,0,0,0,0,0,0},{843,251,3594,242,0,0,0,0,0,0,0,0},{848,269,3602,257,0,0,0,0,0},{1301,1311,8590,1320,7635,8598,8604,8614}},
+       {289, 8622, 8642, {8668, 8691, 352, 8714, 8725, 8740, 8755}, {8770, 8775, 8780, 8785, 8790, 8795, 8800}, {8805, 8808, 8805, 8811, 8814, 8808, 8811}, {8817, 8830, 8845, 8854, 8867, 8874, 8883, 8892, 8905, 8922, 8937, 8950, 0}, {8965, 8978, 8993, 9004, 9017, 9024, 9033, 9042, 9057, 9074, 9089, 9102, 0}, {9117, 9125, 8845, 9135, 8867, 8874, 8883, 9143, 9151, 9161, 9169, 9179, 0}, {9117, 9125, 8845, 9135, 8867, 8874, 8883, 9143, 9151, 9161, 9169, 9179, 0}, 0, 1, 691, 187, {1156,1167,4762,1128,189,0,0,0,0,0,0,0,0,0},{776,757,0,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {1921, 1929, 1932, {9187, 9196, 9208, 9215, 9223, 9233, 9239}, {9246, 9250, 9254, 9258, 9262, 9267, 9271}, {9275, 9277, 9279, 9281, 9283, 9277, 9281}, {9286, 9296, 9305, 9313, 9321, 9329, 9336, 9343, 9351, 2102, 9357, 9365, 0}, {9374, 9384, 9393, 9401, 9409, 9417, 9424, 9431, 9440, 7911, 9446, 9456, 0}, {9465, 9469, 9474, 9479, 9483, 7945, 2239, 9487, 9491, 2255, 9495, 2259, 0}, {9465, 9469, 9474, 9479, 9483, 7945, 2239, 9487, 9491, 2255, 9495, 2259, 0}, 0, 1, 691, 187, {9499,9509,6153,9517,9529,9539,9549,1692,0,0,0,0,0,0},{9561,9575,9590,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {1921, 1929, 1932, {9610, 9618, 9627, 9634, 9641, 9650, 1985}, {1992, 1995, 9657, 2002, 9660, 9664, 2013}, {2016, 2018, 9667, 2023, 9669, 2018, 2023}, {5710, 5718, 9672, 6077, 9678, 9683, 9688, 2479, 2486, 5789, 2504, 2513, 0}, {9693, 9702, 7844, 9712, 9720, 9726, 9732, 9738, 9746, 9756, 9765, 9774, 0}, {2522, 2526, 2530, 2534, 9678, 9683, 9688, 2546, 2550, 2554, 2558, 2562, 0}, {2522, 2526, 2530, 2534, 9678, 9683, 9688, 2546, 2550, 2554, 2558, 2562, 0}, 2, 1, 691, 187, {4753,1156,1167,1692,5888,9783,9796,9806,0,0,0,0,0,0},{2300,0,0,0,0,0,0,0,0,0},{843,251,2321,0,0,0,0,0,0,0,0,0},{848,269,2337,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 9817, 9826, {9834, 9841, 9850, 9859, 9871, 9879, 9888}, {9898, 9902, 3761, 9907, 9912, 9916, 9920}, {2673, 5694, 2428, 2428, 9924, 2018, 2023}, {9926, 9932, 4887, 9939, 2465, 9945, 9953, 9960, 9966, 9974, 9980, 9988, 0}, {9926, 9932, 4887, 9939, 2465, 9945, 9953, 9960, 9966, 9974, 9980, 9988, 0}, {2759, 9996, 3761, 10000, 10004, 10008, 10012, 10016, 9920, 10020, 10024, 10029, 0}, {2759, 9996, 3761, 10000, 10004, 10008, 10012, 10016, 9920, 10020, 10024, 10029, 0}, 0, 1, 691, 187, {4753,4762,0,0,0,0,0,0,0,0,0,0,0,0},{1207,0,0,0,0,0,0,0,0,0},{251,0,0,0,0,0,0,0,0,0,0,0},{269,0,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {10033, 10046, 10049, {10052, 10060, 10068, 2368, 2375, 2383, 10075}, {10083, 10088, 10093, 10097, 10101, 10105, 10109}, {2023, 2428, 2430, 2432, 2430, 2434, 2436}, {10114, 10122, 10131, 2696, 10004, 2706, 2711, 10136, 2723, 2733, 2741, 3752, 0}, {7370, 7378, 4887, 2459, 2465, 2469, 2474, 10144, 2486, 2496, 2504, 2513, 0}, {2759, 2763, 3761, 2772, 10004, 2776, 2780, 2784, 2788, 2792, 2796, 3769, 0}, {2759, 2763, 3761, 2772, 10004, 2776, 2780, 2784, 2788, 2792, 2796, 3769, 0}, 2, 1, 2566, 187, {1692,5888,0,0,0,0,0,0,0,0,0,0,0,0},{10152,10170,0,0,0,0,0,0,0,0},{251,843,7529,0,0,0,0,0,0,0,0,0},{269,848,7585,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 0, 0, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {6605, 6607, 6609, 6611, 6613, 6615, 6617, 6619, 6621, 6623, 6626, 6629, 0}, {6605, 6607, 6609, 6611, 6613, 6615, 6617, 6619, 6621, 6623, 6626, 6629, 0}, 0, 0, 185, 187, {2277,2286,189,198,8579,10193,1692,0,0,0,0,0,0,0},{1242,10205,10221,0,0,0,0,0,0,0},{843,251,3594,242,0,0,0,0,0,0,0,0},{848,269,3602,257,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 10263, 10268, {10272, 10278, 10288, 10294, 10305, 10315, 10320}, {10330, 10334, 10338, 10342, 10347, 10351, 10355}, {2018, 2018, 2023, 10359, 2018, 7736, 7736}, {10362, 10367, 10374, 10379, 10385, 10392, 10400, 10407, 10416, 10423, 10428, 10435, 0}, {10362, 10367, 10374, 10379, 10385, 10392, 10400, 10407, 10416, 10423, 10428, 10435, 0}, {10443, 10447, 3761, 10452, 3730, 10456, 10460, 10464, 10469, 10473, 10477, 10481, 0}, {10443, 10447, 3761, 10452, 3730, 10456, 10460, 10464, 10469, 10473, 10477, 10481, 0}, 0, 1, 691, 187, {4753,4762,1156,1167,0,0,0,0,0,0,0,0,0,0},{10485,1242,10502,5505,0,0,0,0,0,0},{251,0,0,0,0,0,0,0,0,0,0,0},{269,0,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {1, 10520, 10538, {10556, 10567, 10580, 10589, 10596, 10609, 10618}, {10556, 10567, 10580, 10589, 10596, 10609, 10618}, {2023, 2428, 2430, 3705, 2430, 2434, 2023}, {10627, 10638, 10649, 10658, 10669, 10676, 10683, 10696, 10705, 10716, 10729, 10740, 0}, {10627, 10638, 10649, 10658, 10669, 10676, 10683, 10696, 10705, 10716, 10729, 10740, 0}, {10627, 10638, 10649, 10658, 10669, 10676, 10683, 10696, 10705, 10716, 10729, 10740, 0}, {10627, 10638, 10649, 10658, 10669, 10676, 10683, 10696, 10705, 10716, 10729, 10740, 0}, 0, 0, 185, 187, {198,189,1692,0,0,0,0,0,0,0,0,0,0,0},{10751,222,0,0,0,0,0,0,0,0},{3594,242,843,251,0,0,0,0,0,0,0,0},{3602,257,848,269,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {1, 1929, 1932, {10765, 10772, 10778, 10785, 10790, 10796, 10802}, {10808, 10812, 10816, 10820, 10824, 10828, 10832}, {2428, 2023, 2023, 10836, 4442, 3987, 2023}, {10114, 10122, 10838, 2696, 10844, 2706, 2711, 10848, 2723, 2733, 2741, 10856, 0}, {10114, 10122, 10838, 2696, 10844, 2706, 2711, 10848, 2723, 2733, 2741, 10856, 0}, {2759, 2763, 3761, 2772, 10844, 2776, 2780, 10865, 2788, 2792, 2796, 10869, 0}, {2759, 2763, 3761, 2772, 10844, 2776, 2780, 10865, 2788, 2792, 2796, 10869, 0}, 0, 0, 185, 187, {198,189,1128,0,0,0,0,0,0,0,0,0,0,0},{5505,0,0,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 10873, 10878, {10883, 10896, 10915, 10932, 10945, 10958, 10975}, {10988, 8775, 8780, 8785, 8790, 8795, 8800}, {10993, 8808, 8805, 8811, 8814, 8808, 8811}, {10996, 11009, 11020, 11037, 11052, 11067, 11082, 11095, 11110, 11127, 11142, 11159, 0}, {11174, 11185, 11198, 11213, 11226, 11239, 11252, 11263, 11276, 11291, 11304, 11323, 0}, {11336, 11343, 11350, 11357, 11364, 11371, 11378, 11385, 11392, 11399, 11406, 11413, 0}, {11336, 11343, 11350, 11357, 11364, 11371, 11378, 11385, 11392, 11399, 11406, 11413, 0}, 0, 1, 691, 187, {1156,1167,1692,0,0,0,0,0,0,0,0,0,0,0},{11420,0,0,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{11438,0,0,0,0,0,0,0}},
+       {289, 11454, 11467, {11480, 11495, 11516, 11531, 11544, 11557, 10975}, {421, 426, 11572, 436, 11577, 446, 451}, {456, 459, 11582, 465, 468, 459, 465}, {11585, 11602, 11611, 11626, 521, 11643, 11658, 11671, 11686, 11703, 11724, 11741, 0}, {11756, 11773, 11786, 11803, 9017, 11822, 11837, 11850, 11863, 11878, 11901, 11920, 0}, {11933, 11940, 11947, 11954, 521, 11961, 11968, 11975, 11982, 11989, 11996, 12003, 0}, {11933, 11940, 11947, 11954, 521, 11961, 11968, 11975, 11982, 11989, 11996, 12003, 0}, 0, 0, 691, 187, {1167,0,0,0,0,0,0,0,0,0,0,0,0,0},{1242,0,0,0,0,0,0,0,0,0},{251,843,0,0,0,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {1921, 12010, 12015, {12020, 12028, 12039, 12045, 12051, 12060, 1985}, {9246, 9250, 2415, 12066, 9262, 9267, 12070}, {9275, 9277, 12074, 9281, 9283, 9277, 9281}, {2438, 2445, 9672, 2459, 2465, 12076, 12082, 12088, 2486, 2496, 2504, 2513, 0}, {2438, 2445, 9672, 2459, 2465, 12076, 12082, 12088, 2486, 2496, 2504, 2513, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 12095, 2550, 2554, 2558, 2562, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 12095, 2550, 2554, 2558, 2562, 0}, 0, 1, 691, 187, {4753,4762,2266,1156,12099,1167,9806,0,0,0,0,0,0,0},{2300,4769,2818,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {12109, 12118, 12123, {12128, 12139, 12150, 12161, 12172, 12183, 12189}, {2018, 9924, 2430, 4442, 2016, 10836, 2436}, {2018, 9924, 2430, 4442, 2016, 10836, 2436}, {12198, 12206, 12215, 12222, 4898, 12229, 12235, 2479, 2486, 12241, 2504, 12250, 0}, {12198, 12206, 12215, 12222, 4898, 12229, 12235, 2479, 2486, 12241, 2504, 12250, 0}, {12260, 12265, 12215, 2534, 4898, 12229, 12235, 2546, 12271, 2554, 2558, 12276, 0}, {12260, 12265, 12215, 2534, 4898, 12229, 12235, 2546, 12271, 2554, 2558, 12276, 0}, 2, 1, 691, 187, {7519,1156,1167,1692,0,0,0,0,0,0,0,0,0,0},{2300,4769,2818,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {1921, 12281, 12298, {12312, 12323, 12333, 12342, 12353, 12365, 12376}, {12386, 12389, 12392, 12395, 12398, 12401, 12404}, {2023, 2018, 2432, 2430, 7736, 2018, 2023}, {12407, 12417, 12428, 12434, 12443, 12449, 12457, 12465, 12473, 12484, 12493, 12503, 0}, {12513, 12523, 2453, 12534, 12543, 12549, 12557, 12565, 12573, 12584, 12593, 12603, 0}, {12613, 12619, 12428, 12625, 12443, 12630, 12636, 12642, 4190, 12647, 4201, 12652, 0}, {12613, 12619, 12428, 12625, 12443, 12630, 12636, 12642, 4190, 12647, 4201, 12652, 0}, 0, 1, 691, 187, {9517,9539,12657,0,0,0,0,0,0,0,0,0,0,0},{12669,0,0,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{12696,0,0,0,0,0,0,0}},
+       {12714, 12726, 12015, {12732, 12744, 12756, 12768, 12782, 12797, 12810}, {12824, 12827, 12830, 12833, 12836, 12839, 9660}, {2023, 2018, 12842, 2430, 4442, 2018, 9669}, {12844, 12851, 12859, 12865, 12874, 12883, 12893, 12899, 12910, 12920, 12927, 12937, 0}, {12844, 12851, 12859, 12865, 12874, 12883, 12893, 12899, 12910, 12920, 12927, 12937, 0}, {12945, 12951, 12956, 12961, 12966, 12971, 12978, 12984, 12990, 12996, 13002, 13009, 0}, {12945, 12951, 12956, 12961, 12966, 12971, 12978, 12984, 12990, 12996, 13002, 13009, 0}, 2, 1, 2566, 187, {1692,2568,0,0,0,0,0,0,0,0,0,0,0,0},{13016,0,0,0,0,0,0,0,0,0},{251,0,0,0,0,0,0,0,0,0,0,0},{269,0,0,0,0,0,0,0,0},{13038,0,0,0,0,0,0,0}},
+       {1, 13053, 13065, {13077, 13092, 13107, 13122, 13139, 13158, 13169}, {13180, 13187, 13194, 13201, 13208, 13215, 13222}, {0, 0, 0, 0, 0, 0, 0}, {13229, 13240, 8845, 13253, 8867, 13264, 13271, 8892, 13278, 13293, 13306, 13317, 0}, {13229, 13240, 8845, 13253, 8867, 13264, 13271, 8892, 13278, 13293, 13306, 13317, 0}, {13330, 13337, 13344, 13351, 8867, 13264, 13271, 13358, 13365, 13372, 13379, 13386, 0}, {13330, 13337, 13344, 13351, 8867, 13264, 13271, 13358, 13365, 13372, 13379, 13386, 0}, 0, 1, 691, 187, {1156,1167,4762,1128,189,0,0,0,0,0,0,0,0,0},{13393,13411,0,0,0,0,0,0,0,0},{251,843,0,0,0,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 13430, 13450, {13467, 13480, 13493, 13509, 13526, 13541, 13550}, {13467, 13480, 13493, 13509, 13526, 13541, 13550}, {13559, 13562, 13565, 13568, 13571, 13574, 13577}, {13580, 13593, 13604, 13613, 13624, 13629, 13638, 13649, 13656, 13671, 13682, 13695, 0}, {13708, 13723, 13604, 13613, 13736, 13629, 13743, 13649, 13656, 13671, 13682, 13695, 0}, {13580, 13593, 13604, 13613, 13624, 13629, 13638, 13649, 13656, 13671, 13682, 13695, 0}, {13580, 13593, 13604, 13613, 13624, 13629, 13638, 13649, 13656, 13671, 13682, 13695, 0}, 0, 6, 185, 187, {198,189,0,0,0,0,0,0,0,0,0,0,0,0},{13756,5505,0,0,0,0,0,0,0,0},{242,251,0,0,0,0,0,0,0,0,0,0},{257,269,0,0,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {1, 13775, 13778, {13781, 13794, 13804, 13813, 13823, 13834, 13845}, {13857, 13860, 13865, 13870, 13875, 13880, 13885}, {13857, 13890, 13893, 13896, 13899, 13902, 13905}, {13908, 13917, 13926, 13935, 13944, 13953, 13962, 13971, 13980, 13989, 13999, 14009, 0}, {14019, 14028, 14037, 14046, 14055, 14064, 14073, 14082, 14091, 14100, 14110, 14120, 0}, {14130, 14136, 14142, 14148, 14154, 14160, 14166, 14172, 14178, 14184, 14191, 14198, 0}, {14130, 14136, 14142, 14148, 14154, 14160, 14166, 14172, 14178, 14184, 14191, 14198, 0}, 0, 1, 185, 187, {198,189,1139,1128,1692,0,0,0,0,0,0,0,0,0},{5505,0,0,0,0,0,0,0,0,0},{3594,242,843,251,0,0,0,0,0,0,0,0},{3602,257,848,269,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 14205, 14229, {14253, 14266, 14287, 14306, 14327, 14346, 14359}, {14370, 14377, 14384, 14391, 14398, 14405, 14412}, {14419, 14422, 14422, 14425, 14428, 14431, 14436}, {14439, 14454, 14469, 14478, 14489, 14500, 14513, 14526, 14541, 14560, 14579, 14596, 0}, {14615, 14632, 14649, 14660, 14673, 14686, 14701, 14716, 14733, 14754, 14775, 14794, 0}, {14815, 14822, 14829, 14836, 14843, 14850, 14857, 14864, 14871, 14878, 14885, 14892, 0}, {14815, 14822, 14829, 14836, 14843, 14850, 14857, 14864, 14871, 14878, 14885, 14892, 0}, 0, 1, 691, 187, {1156,1167,9796,198,14899,3582,1692,0,0,0,0,0,0,0},{3870,1207,13756,5505,14910,14921,14933,14950,0,0},{251,843,0,0,0,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {289, 1929, 1932, {14968, 14974, 14988, 15011, 15025, 15041, 15048}, {15057, 15060, 15065, 15071, 15075, 7736, 15080}, {6617, 6605, 6607, 6609, 6611, 6613, 6615}, {15084, 15091, 10374, 15098, 3730, 15104, 15110, 15116, 15123, 15132, 15140, 15147, 0}, {15154, 15161, 15168, 15173, 15179, 15183, 15188, 15193, 15200, 15209, 15217, 15224, 0}, {15231, 8135, 2530, 2534, 15179, 15235, 15239, 15243, 15247, 2554, 15251, 15255, 0}, {15231, 8135, 2530, 2534, 15179, 15235, 15239, 15243, 15247, 2554, 15251, 15255, 0}, 0, 1, 691, 187, {1156,1167,4762,189,1692,0,0,0,0,0,0,0,0,0},{15259,0,0,0,0,0,0,0,0,0},{251,843,0,0,0,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {15281, 1929, 1932, {15296, 15304, 15315, 15325, 15336, 15345, 15354}, {15364, 15368, 15372, 15376, 15380, 15384, 15388}, {15392, 12842, 12842, 12842, 2432, 2432, 2436}, {15394, 15404, 15412, 15420, 15428, 15436, 15443, 15451, 15459, 15466, 15472, 15479, 0}, {15487, 15498, 15507, 15516, 15525, 15534, 15542, 15551, 15560, 15568, 15575, 15583, 0}, {15592, 15597, 4845, 15602, 15607, 15612, 15617, 15622, 15627, 15632, 15637, 15642, 0}, {15592, 15597, 4845, 15602, 15607, 15612, 15617, 15622, 15627, 15632, 15637, 15642, 0}, 2, 1, 185, 187, {1681,1692,0,0,0,0,0,0,0,0,0,0,0,0},{15647,0,0,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{15680,0,0,0,0,0,0,0}},
+       {289, 15697, 15718, {15735, 331, 352, 8714, 15748, 15765, 15776}, {15789, 15797, 15805, 15811, 15819, 15827, 15835}, {456, 459, 462, 465, 468, 459, 465}, {15843, 484, 501, 510, 15858, 15865, 15874, 542, 555, 574, 591, 606, 0}, {15843, 484, 501, 510, 15858, 15865, 15874, 542, 555, 574, 591, 606, 0}, {15883, 15891, 15899, 639, 15858, 15907, 15915, 647, 655, 665, 673, 683, 0}, {15883, 15891, 15899, 639, 15858, 15907, 15915, 647, 655, 665, 673, 683, 0}, 0, 1, 691, 187, {1156,1167,15923,0,0,0,0,0,0,0,0,0,0,0},{13756,0,0,0,0,0,0,0,0,0},{251,0,0,0,0,0,0,0,0,0,0,0},{269,0,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 0, 0, {15940, 15947, 15958, 15967, 15976, 15983, 15994}, {16004, 16008, 16012, 16016, 16020, 16023, 16027}, {0, 0, 0, 0, 0, 0, 0}, {16031, 16041, 16050, 16058, 16067, 16080, 16092, 16099, 16106, 16113, 16123, 16135, 0}, {16031, 16041, 16050, 16058, 16067, 16080, 16092, 16099, 16106, 16113, 16123, 16135, 0}, {16148, 16152, 16156, 16160, 16164, 16168, 16172, 16176, 16180, 16184, 16188, 16192, 0}, {16148, 16152, 16156, 16160, 16164, 16168, 16172, 16176, 16180, 16184, 16188, 16192, 0}, 0, 0, 185, 187, {189,1681,1735,1692,0,0,0,0,0,0,0,0,0,0},{5505,0,0,0,0,0,0,0,0,0},{242,3594,251,0,0,0,0,0,0,0,0,0},{257,3602,269,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 0, 0, {16196, 16201, 16207, 16217, 16229, 16237, 16248}, {16257, 16261, 16265, 16269, 16273, 16277, 16281}, {0, 0, 0, 0, 0, 0, 0}, {16285, 16295, 16305, 16312, 16319, 2706, 16324, 16331, 16338, 16347, 16355, 16363, 0}, {16285, 16295, 16305, 16312, 16319, 2706, 16324, 16331, 16338, 16347, 16355, 16363, 0}, {2759, 2763, 16027, 16371, 16375, 2776, 2780, 16379, 2788, 2792, 2796, 16383, 0}, {2759, 2763, 16027, 16371, 16375, 2776, 2780, 16379, 2788, 2792, 2796, 16383, 0}, 0, 0, 185, 187, {1681,1735,1692,0,0,0,0,0,0,0,0,0,0,0},{5505,0,0,0,0,0,0,0,0,0},{242,3594,251,0,0,0,0,0,0,0,0,0},{257,3602,269,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 1929, 1932, {16387, 16393, 16404, 16217, 16229, 16237, 16248}, {16414, 16418, 16422, 16269, 16273, 16277, 16281}, {2023, 2428, 16426, 2430, 2023, 5694, 2428}, {16428, 16438, 16449, 16456, 16465, 16471, 16477, 16485, 16493, 16504, 16514, 16523, 0}, {16532, 16295, 16541, 16547, 16319, 2706, 16324, 16331, 16554, 16347, 16355, 16363, 0}, {2759, 2763, 16564, 2772, 16375, 2776, 2780, 16379, 2788, 2792, 2796, 16383, 0}, {2759, 2763, 16564, 2772, 16375, 2776, 2780, 16379, 2788, 2792, 2796, 16383, 0}, 0, 0, 2566, 187, {1128,1139,189,1681,1735,1692,0,0,0,0,0,0,0,0},{5505,0,0,0,0,0,0,0,0,0},{242,3594,251,0,0,0,0,0,0,0,0,0},{257,3602,269,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 16568, 16572, {16576, 16583, 16591, 16599, 16608, 16618, 16625}, {2652, 16634, 2658, 16637, 2664, 16640, 2670}, {2023, 2428, 2673, 3705, 2673, 3989, 2023}, {16643, 16652, 16662, 2696, 10844, 16668, 16674, 16680, 2723, 2733, 2741, 10856, 0}, {16643, 16652, 16662, 2696, 10844, 16668, 16674, 16680, 2723, 2733, 2741, 10856, 0}, {2759, 2763, 3761, 2772, 10844, 2776, 2780, 2784, 2788, 2792, 2796, 10869, 0}, {2759, 2763, 3761, 2772, 10844, 2776, 2780, 2784, 2788, 2792, 2796, 10869, 0}, 0, 0, 185, 187, {1681,1735,1692,16689,0,0,0,0,0,0,0,0,0,0},{5505,0,0,0,0,0,0,0,0,0},{242,3594,251,0,0,0,0,0,0,0,0,0},{257,3602,269,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 1929, 1932, {16701, 16717, 16742, 16770, 16798, 16826, 16854}, {16873, 16883, 16893, 16903, 16913, 16923, 16933}, {16943, 16947, 16951, 16947, 16955, 16959, 16963}, {16967, 16989, 17017, 17033, 17052, 17068, 17087, 17106, 17128, 17159, 17187, 17212, 0}, {16967, 16989, 17017, 17033, 17052, 17068, 17087, 17106, 17128, 17159, 17187, 17212, 0}, {17240, 17250, 17260, 17270, 17280, 17290, 17300, 17310, 17320, 17330, 17340, 17350, 0}, {17240, 17250, 17260, 17270, 17280, 17290, 17300, 17310, 17320, 17330, 17340, 17350, 0}, 0, 1, 691, 187, {1156,1167,7419,1176,4762,4753,1692,0,0,0,0,0,0,0},{17360,17394,17427,3870,17461,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 17473, 17478, {5932, 17483, 17494, 17504, 17514, 17524, 17538}, {17550, 17554, 17559, 17564, 17568, 17573, 17578}, {2023, 2428, 2430, 2428, 5694, 2434, 2436}, {2438, 2445, 4887, 6077, 4898, 2469, 2474, 2479, 2486, 2496, 2504, 6121, 0}, {2438, 2445, 4887, 6077, 4898, 2469, 2474, 2479, 2486, 2496, 2504, 6121, 0}, {2522, 2526, 2530, 2534, 4898, 2538, 2542, 2546, 2550, 2554, 2558, 7515, 0}, {2522, 2526, 2530, 2534, 4898, 2538, 2542, 2546, 2550, 2554, 2558, 7515, 0}, 2, 1, 2566, 187, {1128,1139,1692,0,0,0,0,0,0,0,0,0,0,0},{2300,0,0,0,0,0,0,0,0,0},{251,4288,0,0,0,0,0,0,0,0,0,0},{269,4302,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {1, 17582, 17598, {17608, 17627, 17646, 17668, 17687, 17709, 17734}, {17753, 17763, 17773, 17786, 17796, 17809, 17825}, {17835, 17839, 17846, 17853, 17860, 17867, 17874}, {17878, 17894, 17913, 17929, 17948, 17955, 17965, 17981, 17997, 18016, 18038, 18054, 0}, {17878, 17894, 17913, 17929, 17948, 17955, 17965, 17981, 17997, 18016, 18038, 18054, 0}, {18073, 18080, 17913, 18090, 17948, 17955, 18106, 18119, 18126, 18139, 18155, 18165, 0}, {18073, 18080, 17913, 18090, 17948, 17955, 18106, 18119, 18126, 18139, 18155, 18165, 0}, 0, 0, 2566, 187, {1128,1139,2293,4762,1692,0,0,0,0,0,0,0,0,0},{5505,1242,0,0,0,0,0,0,0,0},{251,843,1866,1858,0,0,0,0,0,0,0,0},{269,848,1886,1875,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {18178, 18192, 18195, {18198, 18207, 18216, 18226, 18236, 18246, 18258}, {18266, 18271, 18275, 18279, 18283, 18288, 18293}, {18297, 2430, 2430, 9924, 18297, 18300, 2023}, {18303, 18310, 18315, 2696, 18321, 18327, 18334, 18340, 18348, 18358, 18366, 18375, 0}, {18303, 18310, 18315, 2696, 18321, 18327, 18334, 18340, 18348, 18358, 18366, 18375, 0}, {2759, 18385, 3761, 2772, 18389, 18393, 18398, 18402, 18406, 18410, 2796, 18414, 0}, {2759, 18385, 3761, 2772, 18389, 18393, 18398, 18402, 18406, 18410, 2796, 18414, 0}, 0, 0, 185, 187, {198,1692,18419,7410,2277,0,0,0,0,0,0,0,0,0},{18428,18453,10193,0,0,0,0,0,0,0},{251,3594,843,0,0,0,0,0,0,0,0,0},{269,3602,848,3594,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {18472, 18485, 18490, {18495, 18507, 18518, 18532, 18544, 18554, 18564}, {18575, 18580, 18585, 18590, 18595, 18600, 18605}, {2023, 3989, 2428, 6293, 2673, 16426, 2436}, {18610, 18627, 18640, 18654, 18667, 18680, 18693, 18707, 18719, 18733, 18747, 18761, 0}, {18610, 18627, 18640, 18654, 18667, 18680, 18693, 18707, 18719, 18733, 18747, 18761, 0}, {18774, 18781, 18786, 18791, 18795, 18800, 18805, 18810, 18815, 18822, 18827, 18833, 0}, {18774, 18781, 18786, 18791, 18795, 18800, 18805, 18810, 18815, 18822, 18827, 18833, 0}, 2, 1, 691, 187, {1156,1167,4762,1692,0,0,0,0,0,0,0,0,0,0},{18838,18862,0,0,0,0,0,0,0,0},{251,843,4288,0,0,0,0,0,0,0,0,0},{269,848,4302,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {20057, 1929, 1932, {20065, 20074, 20083, 20091, 20100, 20109, 20116}, {20125, 20128, 20131, 20134, 20137, 20141, 20144}, {6607, 6609, 6611, 6613, 12842, 15392, 6605}, {10114, 10122, 20147, 20153, 10844, 2706, 19221, 20160, 16338, 20167, 16355, 20174, 0}, {10114, 10122, 20147, 20153, 10844, 2706, 19221, 20160, 16338, 20167, 16355, 20174, 0}, {2759, 2763, 19217, 2772, 10844, 2776, 2780, 20182, 2788, 2792, 2796, 10869, 0}, {2759, 2763, 19217, 2772, 10844, 2776, 2780, 20182, 2788, 2792, 2796, 10869, 0}, 0, 0, 185, 187, {3773,3782,3789,3798,1735,1692,3809,0,0,0,0,0,0,0},{20186,20206,222,10751,0,0,0,0,0,0},{3594,242,843,251,0,0,0,0,0,0,0,0},{3602,257,848,269,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {20220, 1929, 1932, {20227, 20237, 20246, 20255, 20266, 20276, 20281}, {20288, 20294, 20299, 20304, 20309, 10828, 20313}, {20318, 2673, 2023, 7736, 2018, 3987, 2023}, {15084, 15091, 10374, 15098, 3730, 20320, 20325, 20330, 15123, 15132, 15140, 15147, 0}, {15084, 15091, 10374, 15098, 3730, 20320, 20325, 20330, 15123, 15132, 15140, 15147, 0}, {20337, 20342, 3761, 2772, 3730, 20320, 20325, 20346, 10812, 2792, 20350, 20355, 0}, {20337, 20342, 3761, 2772, 3730, 20320, 20325, 20346, 10812, 2792, 20350, 20355, 0}, 0, 1, 691, 187, {1156,0,0,0,0,0,0,0,0,0,0,0,0,0},{20359,1242,5505,0,0,0,0,0,0,0},{251,843,0,0,0,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 20377, 20405, {20427, 20446, 20465, 20490, 20509, 20543, 20568}, {20587, 20597, 20607, 20623, 20633, 20658, 20674}, {20684, 20688, 20695, 20699, 20706, 20713, 20720}, {20724, 20752, 20786, 20802, 20821, 20828, 20838, 20854, 20870, 20901, 20923, 20945, 0}, {20724, 20752, 20786, 20802, 20821, 20828, 20838, 20854, 20870, 20901, 20923, 20945, 0}, {20724, 20752, 20786, 20802, 20821, 20828, 20838, 20854, 20870, 20901, 20923, 20945, 0}, {20724, 20752, 20786, 20802, 20821, 20828, 20838, 20854, 20870, 20901, 20923, 20945, 0}, 0, 0, 2566, 187, {1139,2293,1128,20970,20983,0,0,0,0,0,0,0,0,0},{5505,1242,0,0,0,0,0,0,0,0},{4288,2321,20998,21007,0,0,0,0,0,0,0,0},{4302,2337,21015,21027,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {1, 1929, 1932, {21507, 21526, 21545, 21567, 21586, 21608, 21633}, {21652, 21662, 21672, 21685, 21695, 21708, 21724}, {21734, 21738, 21745, 21752, 21759, 21766, 21773}, {21777, 21805, 21833, 21849, 21868, 21875, 21885, 21901, 21917, 21945, 21967, 21989, 0}, {21777, 21805, 21833, 21849, 21868, 21875, 21885, 21901, 21917, 21945, 21967, 21989, 0}, {22014, 22033, 21833, 21849, 21868, 21875, 21885, 22052, 22059, 22075, 22091, 22101, 0}, {22014, 22033, 21833, 21849, 21868, 21875, 21885, 22052, 22059, 22075, 22091, 22101, 0}, 0, 0, 2566, 187, {1139,2293,4762,1128,1692,0,0,0,0,0,0,0,0,0},{5505,1242,0,0,0,0,0,0,0,0},{251,843,1866,1858,0,0,0,0,0,0,0,0},{269,848,1886,1875,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {1, 8151, 22114, {22117, 22136, 22155, 22180, 22199, 22221, 22246}, {22265, 22275, 22285, 22301, 22311, 22324, 22340}, {22350, 22354, 22361, 22365, 22372, 22379, 22386}, {22390, 22412, 22443, 22465, 22484, 22491, 22501, 22517, 22533, 22564, 22586, 22608, 0}, {22390, 22412, 22443, 22465, 22484, 22491, 22501, 22517, 22533, 22564, 22586, 22608, 0}, {6605, 6607, 6609, 6611, 6613, 6615, 6617, 6619, 6621, 6623, 6626, 6629, 0}, {6605, 6607, 6609, 6611, 6613, 6615, 6617, 6619, 6621, 6623, 6626, 6629, 0}, 0, 0, 2566, 187, {1139,2293,4762,1128,1692,0,0,0,0,0,0,0,0,0},{5505,1242,0,0,0,0,0,0,0,0},{251,843,1866,1858,0,0,0,0,0,0,0,0},{269,848,1886,1875,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {289, 22633, 22658, {22683, 22702, 22724, 22749, 22765, 22787, 22806}, {22816, 22823, 22830, 22837, 22844, 22851, 22858}, {22816, 22823, 22830, 22837, 22844, 22851, 22858}, {22862, 22878, 22903, 22922, 22941, 22948, 22961, 22974, 22993, 23024, 23049, 23071, 0}, {22862, 22878, 22903, 22922, 22941, 22948, 22961, 23096, 22993, 23024, 23049, 23071, 0}, {23115, 23123, 23137, 23151, 22941, 22948, 22961, 23162, 23170, 23184, 23195, 23203, 0}, {23115, 23123, 23137, 23151, 22941, 22948, 22961, 23162, 23170, 23184, 23195, 23203, 0}, 0, 0, 2566, 187, {1128,1139,2293,4762,1692,0,0,0,0,0,0,0,0,0},{5505,1242,0,0,0,0,0,0,0,0},{251,843,1866,1858,0,0,0,0,0,0,0,0},{269,848,1886,1875,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {3613, 1929, 1932, {23214, 23236, 23258, 23283, 23305, 23330, 23358}, {23380, 23390, 23400, 23413, 23423, 23436, 23452}, {23462, 23466, 23473, 23477, 23484, 23491, 23498}, {23502, 23518, 23543, 23562, 23584, 23591, 23604, 23617, 23636, 23667, 23692, 23711, 0}, {23502, 23518, 23543, 23562, 23584, 23591, 23736, 23617, 23636, 23667, 23692, 23711, 0}, {23749, 23756, 23543, 23772, 23584, 23591, 23736, 23617, 23788, 23810, 23826, 23836, 0}, {23749, 23756, 23543, 23772, 23584, 23591, 23736, 23617, 23788, 23810, 23826, 23836, 0}, 0, 0, 2566, 187, {1139,2293,4762,1128,1692,0,0,0,0,0,0,0,0,0},{5505,1242,0,0,0,0,0,0,0,0},{251,843,1866,1858,0,0,0,0,0,0,0,0},{269,848,1886,1875,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {3613, 1929, 1932, {23852, 23871, 23890, 23912, 23931, 23953, 23978}, {23997, 24007, 24017, 24030, 24040, 24053, 24069}, {24079, 24083, 24090, 24097, 24104, 24111, 24118}, {24122, 24138, 24163, 24182, 24204, 24211, 24224, 24237, 24256, 24284, 24309, 24331, 0}, {24122, 24138, 24163, 24182, 24204, 24211, 24224, 24237, 24256, 24284, 24309, 24331, 0}, {24356, 24364, 24384, 24391, 24204, 24408, 24415, 24423, 24431, 24454, 24471, 24485, 0}, {24356, 24364, 24384, 24391, 24204, 24408, 24415, 24423, 24431, 24454, 24471, 24485, 0}, 0, 0, 2566, 187, {1139,2293,4762,1128,1692,0,0,0,0,0,0,0,0,0},{5505,1242,0,0,0,0,0,0,0,0},{251,843,1866,1858,0,0,0,0,0,0,0,0},{269,848,1886,1875,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {20057, 1929, 1932, {24502, 24530, 24564, 24592, 24620, 24651, 24688}, {24716, 24729, 24748, 24764, 24777, 24796, 24815}, {24825, 24832, 24839, 24846, 24853, 24866, 24873}, {24877, 24896, 24924, 24946, 24965, 24978, 24988, 25001, 25026, 25057, 25082, 25098, 0}, {24877, 24896, 24924, 24946, 24965, 24978, 24988, 25001, 25026, 25057, 25082, 25098, 0}, {25117, 25127, 25146, 25156, 24965, 24978, 24988, 25172, 25179, 25204, 25220, 25230, 0}, {25117, 25127, 25146, 25156, 24965, 24978, 24988, 25172, 25179, 25204, 25220, 25230, 0}, 0, 0, 2566, 187, {1139,2293,1167,4762,0,0,0,0,0,0,0,0,0,0},{5505,1242,0,0,0,0,0,0,0,0},{4288,2321,20998,21007,0,0,0,0,0,0,0,0},{4302,2337,21015,21027,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {289, 25243, 25271, {25293, 25312, 25331, 25356, 25375, 25409, 25434}, {25453, 20597, 20607, 20623, 25463, 25488, 20674}, {0, 0, 0, 0, 0, 0, 0}, {25504, 25529, 25560, 25576, 20821, 20828, 20838, 25595, 25611, 25642, 25664, 25686, 0}, {25504, 25529, 25560, 25576, 20821, 20828, 20838, 25595, 25611, 25642, 25664, 25686, 0}, {25711, 25724, 25560, 25576, 20821, 20828, 20838, 25743, 25750, 25766, 25782, 25792, 0}, {25711, 25724, 25560, 25576, 20821, 20828, 20838, 25743, 25750, 25766, 25782, 25792, 0}, 0, 0, 2566, 187, {1128,0,0,0,0,0,0,0,0,0,0,0,0,0},{25805,0,0,0,0,0,0,0,0,0},{1858,1866,0,0,0,0,0,0,0,0,0,0},{1875,1886,0,0,0,0,0,0,0},{25824,25832,0,0,0,0,0,0}},
+       {1, 1929, 1932, {17608, 17627, 25842, 17668, 17687, 17709, 17734}, {17753, 17763, 25864, 17786, 17796, 17809, 17825}, {17835, 17839, 17846, 17853, 17860, 17867, 17874}, {25877, 25902, 17913, 25933, 25952, 17955, 25959, 25972, 25988, 26013, 26035, 26063, 0}, {25877, 25902, 17913, 25933, 25952, 17955, 25959, 25972, 25988, 26013, 26035, 26063, 0}, {26085, 26098, 17913, 26117, 25952, 17955, 25959, 26133, 26140, 26159, 26175, 26197, 0}, {26085, 26098, 17913, 26117, 25952, 17955, 25959, 26133, 26140, 26159, 26175, 26197, 0}, 0, 0, 2566, 187, {1128,1139,2293,4762,1692,0,0,0,0,0,0,0,0,0},{5505,1242,0,0,0,0,0,0,0,0},{251,843,1866,1858,0,0,0,0,0,0,0,0},{269,848,1886,1875,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {26945, 26969, 26991, {27016, 27044, 27072, 27109, 27140, 27174, 27199}, {27233, 27249, 27265, 27290, 27309, 27331, 27344}, {27366, 27373, 27380, 27387, 27394, 27401, 27405}, {27415, 27449, 27486, 27520, 27554, 27585, 27622, 27659, 27699, 27733, 27767, 27816, 0}, {27415, 27449, 27486, 27520, 27554, 27585, 27622, 27659, 27699, 27733, 27767, 27816, 0}, {27865, 27878, 27891, 27904, 27917, 27930, 27943, 27956, 27969, 27982, 27998, 28014, 0}, {27865, 27878, 27891, 27904, 27917, 27930, 27943, 27956, 27969, 27982, 27998, 28014, 0}, 0, 0, 185, 187, {1654,1663,1672,1703,1692,1681,1721,1714,1728,0,0,0,0,0},{28030,28073,28121,28153,0,0,0,0,0,0},{251,0,0,0,0,0,0,0,0,0,0,0},{269,0,0,0,0,0,0,0,0},{28190,1914,0,0,0,0,0,0}},
+       {289, 1929, 1932, {28223, 28232, 28242, 28254, 28267, 28276, 28288}, {28300, 28304, 28309, 28313, 28317, 28321, 28325}, {2023, 28329, 2428, 2428, 15392, 6293, 2023}, {28332, 28339, 28348, 28355, 2702, 28362, 28370, 28381, 28386, 28391, 28398, 28407, 0}, {28332, 28339, 28348, 28355, 2702, 28362, 28370, 28381, 28386, 28391, 28398, 28407, 0}, {28415, 28419, 28309, 28423, 2702, 28427, 28431, 28381, 28386, 28435, 28439, 28444, 0}, {28415, 28419, 28309, 28423, 2702, 28427, 28431, 28381, 28386, 28435, 28439, 28444, 0}, 2, 1, 185, 187, {189,198,5002,8579,0,0,0,0,0,0,0,0,0,0},{1242,1207,0,0,0,0,0,0,0,0},{251,843,242,3594,0,0,0,0,0,0,0,0},{269,848,257,3602,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 28449, 28465, {28481, 28503, 28516, 28535, 28545, 28576, 28592}, {28481, 28503, 28516, 28535, 28545, 28576, 28592}, {6605, 6607, 6609, 6611, 6613, 6615, 6617}, {28605, 28618, 28637, 28650, 28663, 28676, 28695, 28714, 28727, 28743, 28756, 28781, 0}, {28605, 28618, 28637, 28650, 28663, 28676, 28695, 28714, 28727, 28743, 28756, 28781, 0}, {28605, 28618, 28637, 28650, 28663, 28676, 28695, 28714, 28727, 28743, 28756, 28781, 0}, {28605, 28618, 28637, 28650, 28663, 28676, 28695, 28714, 28727, 28743, 28756, 28781, 0}, 0, 0, 185, 187, {189,1692,0,0,0,0,0,0,0,0,0,0,0,0},{1242,10205,0,0,0,0,0,0,0,0},{843,0,0,0,0,0,0,0,0,0,0,0},{269,0,0,0,0,0,0,0,0},{28794,0,0,0,0,0,0,0}},
+       {289, 28829, 28854, {28879, 28904, 28923, 28951, 28970, 28995, 29014}, {28879, 28904, 28923, 28951, 28970, 28995, 29014}, {29036, 29040, 29044, 29048, 29058, 29062, 29072}, {29076, 29095, 29111, 29124, 29137, 29159, 29178, 29200, 29216, 29232, 29245, 29261, 0}, {29076, 29095, 29111, 29124, 29137, 29159, 29178, 29200, 29216, 29232, 29245, 29261, 0}, {29277, 29286, 29295, 29304, 29313, 29322, 29334, 29343, 29352, 29361, 29370, 29379, 0}, {29277, 29286, 29295, 29304, 29313, 29322, 29334, 29343, 29352, 29361, 29370, 29379, 0}, 0, 0, 185, 187, {198,29388,6480,0,0,0,0,0,0,0,0,0,0,0},{5505,0,0,0,0,0,0,0,0,0},{251,0,0,0,0,0,0,0,0,0,0,0},{269,0,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {3883, 7281, 7286, {3895, 29398, 3909, 29403, 29413, 29419, 3942}, {29426, 8413, 3761, 29430, 29435, 29439, 29443}, {2673, 2436, 2428, 2428, 29448, 3989, 2023}, {29450, 29458, 4005, 4011, 29467, 29472, 29478, 4034, 29484, 29493, 29501, 29510, 0}, {29519, 29527, 4094, 1012, 8083, 29536, 29542, 4117, 8100, 8109, 8117, 29548, 0}, {29557, 2763, 3761, 29561, 2702, 29565, 29570, 20182, 18406, 29574, 2796, 3769, 0}, {29557, 2763, 3761, 29561, 2702, 29565, 29570, 20182, 18406, 29574, 2796, 3769, 0}, 2, 1, 185, 187, {198,189,1120,2286,1139,1167,1692,0,0,0,0,0,0,0},{29578,4239,4266,1242,0,0,0,0,0,0},{843,251,242,29607,0,0,0,0,0,0,0,0},{848,269,257,29619,0,0,0,0,0},{1286,0,0,0,0,0,0,0}},
+       {1, 29639, 29651, {29663, 17627, 29691, 17668, 17687, 17709, 17734}, {17753, 17763, 25864, 17786, 17796, 17809, 17825}, {0, 0, 0, 0, 0, 0, 0}, {25877, 25902, 17913, 25933, 25952, 17955, 25959, 29710, 29726, 29754, 26035, 26063, 0}, {25877, 25902, 17913, 25933, 25952, 17955, 25959, 29710, 29726, 29754, 26035, 26063, 0}, {6605, 6607, 6609, 6611, 6613, 6615, 6617, 6619, 6621, 6623, 6626, 6629, 0}, {6605, 6607, 6609, 6611, 6613, 6615, 6617, 6619, 6621, 6623, 6626, 6629, 0}, 0, 0, 2566, 187, {1128,1139,2293,4762,1692,0,0,0,0,0,0,0,0,0},{5505,1242,0,0,0,0,0,0,0,0},{251,843,1866,1858,0,0,0,0,0,0,0,0},{269,848,1886,1875,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {20057, 29776, 29788, {29797, 29813, 29829, 29857, 29873, 29916, 29941}, {29797, 29813, 29969, 29857, 29979, 30001, 30014}, {30024, 30028, 30032, 30036, 30040, 30053, 30060}, {30067, 30086, 30111, 30130, 30155, 30168, 30181, 30194, 30216, 30250, 30275, 30303, 0}, {30067, 30086, 30111, 30130, 30155, 30168, 30181, 30194, 30216, 30250, 30275, 30303, 0}, {30331, 30338, 30348, 30130, 30155, 30168, 30181, 30361, 30371, 30384, 30394, 30407, 0}, {30331, 30338, 30348, 30130, 30155, 30168, 30181, 30361, 30371, 30384, 30394, 30407, 0}, 0, 1, 2566, 187, {1692,1681,1735,198,189,0,0,0,0,0,0,0,0,0},{30420,0,0,0,0,0,0,0,0,0},{1858,1866,843,251,0,0,0,0,0,0,0,0},{1875,1886,848,269,0,0,0,0,0},{30468,0,0,0,0,0,0,0}},
+       {30478, 30494, 30504, {30517, 30527, 30534, 30547, 30557, 30567, 30577}, {30517, 30527, 30587, 30547, 30557, 30567, 30577}, {30597, 30601, 30605, 30609, 30613, 30617, 30621}, {30625, 30641, 30657, 30667, 30680, 30687, 30694, 30704, 30717, 30736, 30752, 30768, 0}, {30625, 30641, 30657, 30667, 30680, 30687, 30694, 30704, 30717, 30784, 30752, 30768, 0}, {30803, 30813, 30657, 30823, 30680, 30687, 30694, 30833, 30843, 30853, 30863, 30873, 0}, {30803, 30813, 30657, 30823, 30680, 30687, 30694, 30833, 30843, 30853, 30863, 30873, 0}, 0, 0, 185, 187, {2277,1692,0,0,0,0,0,0,0,0,0,0,0,0},{30883,0,0,0,0,0,0,0,0,0},{3594,0,0,0,0,0,0,0,0,0,0,0},{3602,0,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {1, 31145, 31186, {31227, 31246, 31265, 31290, 31309, 31331, 31356}, {31375, 17763, 31385, 17786, 31401, 17809, 17825}, {31414, 17839, 31418, 17853, 31422, 17867, 17874}, {17878, 31429, 17913, 31457, 25952, 31476, 17965, 31486, 31502, 31533, 31555, 31580, 0}, {17878, 31429, 17913, 31457, 25952, 31476, 17965, 31486, 31502, 31533, 31555, 31580, 0}, {17878, 31429, 17913, 31457, 25952, 31476, 17965, 31486, 31502, 31533, 31555, 31580, 0}, {17878, 31429, 17913, 31457, 25952, 31476, 17965, 31486, 31502, 31533, 31555, 31580, 0}, 0, 0, 185, 187, {3773,3782,3789,3798,1735,1692,3809,0,0,0,0,0,0,0},{20186,20206,222,10751,0,0,0,0,0,0},{3594,242,843,251,0,0,0,0,0,0,0,0},{3602,257,848,269,0,0,0,0,0},{25832,0,0,0,0,0,0,0}},
+       {289, 0, 0, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {31605, 31612, 31621, 31636, 31647, 31656, 31663, 31670, 31677, 31688, 31701, 31714, 0}, {31605, 31612, 31621, 31636, 31647, 31656, 31663, 31670, 31677, 31688, 31701, 31714, 0}, {6605, 6607, 6609, 6611, 6613, 6615, 6617, 6619, 6621, 6623, 6626, 6629, 0}, {6605, 6607, 6609, 6611, 6613, 6615, 6617, 6619, 6621, 6623, 6626, 6629, 0}, 0, 6, 185, 187, {1654,1692,0,0,0,0,0,0,0,0,0,0,0,0},{31719,31740,0,0,0,0,0,0,0,0},{3594,843,0,0,0,0,0,0,0,0,0,0},{3602,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {31755, 1929, 1932, {31761, 31768, 31774, 31781, 31792, 31800, 31809}, {31816, 8413, 3761, 31820, 31824, 31828, 10832}, {2436, 2436, 2428, 2428, 5694, 16426, 2023}, {3991, 31832, 31840, 4011, 4017, 31846, 31852, 4034, 31858, 31868, 31876, 31886, 0}, {3991, 31832, 31840, 4011, 4017, 31846, 31852, 4034, 31858, 31868, 31876, 31886, 0}, {31896, 31900, 3761, 29561, 3730, 31904, 31908, 20182, 18406, 2792, 31912, 16383, 0}, {31896, 31900, 3761, 29561, 3730, 31904, 31908, 20182, 18406, 2792, 31912, 16383, 0}, 0, 0, 185, 187, {3773,3782,3789,3798,1735,1692,3809,0,0,0,0,0,0,0},{20186,20206,222,10751,0,0,0,0,0,0},{3594,242,843,251,0,0,0,0,0,0,0,0},{3602,257,848,269,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {289, 0, 0, {31916, 31923, 31931, 31938, 31945, 31953, 31961}, {31968, 31971, 31974, 31977, 31980, 31983, 31986}, {2436, 2436, 2430, 2436, 12842, 3987, 12842}, {31989, 31997, 32007, 32013, 32021, 32026, 32031, 32036, 32043, 20167, 32051, 32059, 0}, {31989, 31997, 32007, 32013, 32021, 32026, 32031, 32036, 32043, 20167, 32051, 32059, 0}, {2759, 32067, 3761, 32071, 3730, 31114, 31118, 32075, 3701, 2792, 32079, 16383, 0}, {2759, 32067, 3761, 32071, 3730, 31114, 31118, 32075, 3701, 2792, 32079, 16383, 0}, 0, 0, 185, 187, {2277,2286,189,198,1735,1692,3809,0,0,0,0,0,0,0},{20186,20206,222,10751,0,0,0,0,0,0},{3594,242,843,251,0,0,0,0,0,0,0,0},{3602,257,848,269,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {1, 32083, 32094, {32104, 32122, 32137, 32159, 32172, 32186, 32203}, {32227, 32235, 32240, 32159, 32172, 32252, 32259}, {0, 0, 0, 0, 0, 0, 0}, {32273, 32295, 32311, 32331, 32345, 32362, 32377, 32394, 32408, 32421, 32440, 32454, 0}, {32273, 32295, 32311, 32331, 32345, 32362, 32377, 32394, 32408, 32421, 32440, 32454, 0}, {32473, 32488, 32497, 32510, 32517, 32527, 32535, 32545, 32552, 32558, 32570, 32577, 0}, {32473, 32488, 32497, 32510, 32517, 32527, 32535, 32545, 32552, 32558, 32570, 32577, 0}, 0, 0, 185, 187, {2277,2286,189,198,1735,1692,3809,0,0,0,0,0,0,0},{222,20186,20206,10751,0,0,0,0,0,0},{3594,242,843,251,0,0,0,0,0,0,0,0},{3602,257,848,269,0,0,0,0,0},{25832,0,0,0,0,0,0,0}},
+       {3613, 0, 0, {32589, 32597, 15958, 15967, 15976, 32608, 32618}, {16414, 16008, 16012, 16016, 16020, 16277, 32627}, {0, 0, 0, 0, 0, 0, 0}, {32631, 32640, 32650, 32658, 10844, 3734, 32666, 32672, 32681, 32690, 32699, 32708, 0}, {32631, 32640, 32650, 32658, 10844, 3734, 32666, 32672, 32681, 32690, 32699, 32708, 0}, {2759, 2763, 16027, 32717, 10844, 2776, 2780, 20182, 18406, 2792, 32721, 16383, 0}, {2759, 2763, 16027, 32717, 10844, 2776, 2780, 20182, 18406, 2792, 32721, 16383, 0}, 0, 0, 185, 187, {189,1681,1735,1692,0,0,0,0,0,0,0,0,0,0},{5505,0,0,0,0,0,0,0,0,0},{242,3594,251,0,0,0,0,0,0,0,0,0},{257,3602,269,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {32725, 32738, 32743, {32748, 32755, 32770, 32784, 32800, 32815, 32831}, {6289, 32846, 2530, 32850, 32854, 32858, 32862}, {2023, 12842, 2428, 2018, 2023, 2430, 12842}, {7370, 7378, 32866, 32873, 32880, 2469, 2474, 32885, 32895, 32906, 32915, 32925, 0}, {7370, 7378, 32866, 32873, 32880, 2469, 2474, 32885, 32895, 32906, 32915, 32925, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 2546, 2550, 2554, 2558, 2562, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 2546, 2550, 2554, 2558, 2562, 0}, 0, 0, 2566, 187, {1128,1139,1692,2568,0,0,0,0,0,0,0,0,0,0},{32935,2300,4769,0,0,0,0,0,0,0},{251,843,0,0,0,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 32954, 32959, {32964, 32980, 32988, 32996, 33005, 33017, 33027}, {33037, 33043, 33049, 33053, 33057, 33065, 3701}, {0, 0, 0, 0, 0, 0, 0}, {33072, 33085, 33099, 33108, 33114, 33118, 33123, 33131, 16338, 33144, 16355, 16363, 0}, {33072, 33085, 33099, 33108, 33114, 33118, 33123, 33131, 16338, 33144, 16355, 16363, 0}, {33153, 2763, 33157, 16371, 33114, 33161, 2780, 33165, 2788, 33173, 2796, 16383, 0}, {33153, 2763, 33157, 16371, 33114, 33161, 2780, 33165, 2788, 33173, 2796, 16383, 0}, 0, 0, 185, 187, {2277,2286,189,198,1735,1692,3809,0,0,0,0,0,0,0},{20186,20206,222,10751,0,0,0,0,0,0},{2313,0,0,0,0,0,0,0,0,0,0,0},{2326,0,0,0,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {33179, 33206, 33213, {33220, 33230, 33240, 33250, 33260, 33270, 33280}, {33290, 33297, 33304, 33311, 33318, 33325, 33332}, {33339, 33343, 33347, 33351, 33355, 33359, 33363}, {33367, 33374, 33381, 33388, 33395, 33402, 33409, 33416, 33423, 33430, 33437, 33447, 0}, {33367, 33374, 33381, 33388, 33395, 33402, 33409, 33416, 33423, 33430, 33437, 33447, 0}, {6605, 6607, 6609, 6611, 6613, 6615, 6617, 6619, 6621, 6623, 6626, 6629, 0}, {6605, 6607, 6609, 6611, 6613, 6615, 6617, 6619, 6621, 6623, 6626, 6629, 0}, 0, 0, 185, 187, {1654,1663,1672,1703,1692,1681,0,0,0,0,0,0,0,0},{33457,33481,33511,33541,33558,0,0,0,0,0},{1858,843,251,0,0,0,0,0,0,0,0,0},{1875,848,269,0,0,0,0,0,0},{33581,1914,0,0,0,0,0,0}},
+       {289, 0, 0, {28300, 8413, 33598, 33605, 33615, 33620, 33627}, {33634, 6273, 33638, 4850, 33643, 33648, 33653}, {4421, 33658, 33661, 33664, 33667, 33670, 33673}, {33676, 33683, 33598, 33694, 33700, 33704, 33713, 33720, 33725, 33734, 33739, 33742, 0}, {33676, 33683, 33598, 33694, 33700, 33704, 33713, 33720, 33725, 33734, 33739, 33742, 0}, {33748, 33752, 33759, 28423, 33700, 33764, 33769, 33720, 33774, 33734, 33739, 33779, 0}, {33748, 33752, 33759, 28423, 33700, 33764, 33769, 33720, 33774, 33734, 33739, 33779, 0}, 2, 1, 185, 187, {198,189,1167,1139,1692,0,0,0,0,0,0,0,0,0},{4985,5002,1242,0,0,0,0,0,0,0},{251,843,4288,5011,5021,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {33936, 33954, 33959, {33964, 33989, 34018, 34043, 34056, 34071, 34088}, {34103, 34108, 34113, 34118, 34123, 34128, 8800}, {19442, 19442, 34133, 8811, 8814, 19442, 8811}, {34136, 34155, 34170, 34192, 34212, 34228, 34244, 34258, 34284, 34308, 34325, 34342, 0}, {34136, 34155, 34170, 34192, 34212, 34228, 34244, 34258, 34284, 34308, 34325, 34342, 0}, {34359, 34368, 34377, 34391, 34405, 34417, 34429, 34439, 34455, 34469, 34476, 34483, 0}, {34359, 34368, 34377, 34391, 34405, 34417, 34429, 34439, 34455, 34469, 34476, 34483, 0}, 0, 1, 691, 187, {1156,4753,1692,34490,34500,0,0,0,0,0,0,0,0,0},{34513,34548,34577,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{34612,0,0,0,0,0,0,0}},
+       {20057, 0, 0, {34628, 34640, 34651, 34663, 34675, 34685, 34697}, {34712, 34717, 34722, 34727, 34732, 34737, 34742}, {0, 0, 0, 0, 0, 0, 0}, {34747, 34756, 34768, 34776, 34781, 34791, 34798, 34807, 34814, 34820, 34829, 34840, 0}, {34747, 34756, 34768, 34776, 34781, 34791, 34798, 34807, 34814, 34820, 34829, 34840, 0}, {34848, 34853, 34858, 34863, 34868, 34873, 34878, 34732, 34883, 34888, 34893, 34898, 0}, {34848, 34853, 34858, 34863, 34868, 34873, 34878, 34732, 34883, 34888, 34893, 34898, 0}, 0, 0, 185, 187, {9796,2286,0,0,0,0,0,0,0,0,0,0,0,0},{34903,1207,0,0,0,0,0,0,0,0},{843,0,0,0,0,0,0,0,0,0,0,0},{848,0,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 34923, 34925, {34927, 34940, 34948, 34957, 34967, 34977, 34986}, {34998, 35002, 35006, 35010, 35014, 35018, 35022}, {2673, 2436, 2428, 7736, 12842, 5694, 2023}, {35026, 35040, 35051, 35060, 35071, 35083, 35097, 35109, 35122, 35135, 35147, 35160, 0}, {35026, 35040, 35051, 35060, 35071, 35083, 35097, 35109, 35122, 35135, 35147, 35160, 0}, {35174, 35179, 35185, 35191, 35196, 35202, 35208, 35213, 35219, 35224, 19163, 35230, 0}, {35174, 35179, 35185, 35191, 35196, 35202, 35208, 35213, 35219, 35224, 19163, 35230, 0}, 2, 1, 185, 187, {198,189,2286,4762,1692,0,0,0,0,0,0,0,0,0},{5505,1242,0,0,0,0,0,0,0,0},{251,843,242,3594,0,0,0,0,0,0,0,0},{269,848,257,3602,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {1, 0, 0, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {35305, 35329, 35338, 35347, 35358, 35367, 35380, 35389, 35394, 35405, 35427, 35451, 0}, {35305, 35329, 35338, 35347, 35358, 35367, 35380, 35389, 35394, 35405, 35427, 35451, 0}, {35305, 35329, 35338, 35347, 35358, 35367, 35380, 35389, 35394, 35405, 35427, 35451, 0}, {35305, 35329, 35338, 35347, 35358, 35367, 35380, 35389, 35394, 35405, 35427, 35451, 0}, 0, 6, 185, 187, {198,189,1692,0,0,0,0,0,0,0,0,0,0,0},{10751,222,0,0,0,0,0,0,0,0},{242,251,0,0,0,0,0,0,0,0,0,0},{257,269,0,0,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {1327, 1340, 1347, {1354, 1364, 1374, 1384, 1394, 1404, 1414}, {1424, 1431, 1438, 1445, 1452, 1459, 1466}, {1473, 1477, 1481, 1485, 1489, 1493, 1497}, {1501, 1508, 1515, 1522, 1529, 1536, 1543, 1550, 1557, 1564, 1571, 1581, 0}, {1501, 1508, 1515, 1522, 1529, 1536, 1543, 1550, 1557, 1564, 1571, 1581, 0}, {1591, 1596, 1601, 1606, 1611, 1616, 1621, 1626, 1631, 1636, 1642, 1648, 0}, {1591, 1596, 1601, 1606, 1611, 1616, 1621, 1626, 1631, 1636, 1642, 1648, 0}, 0, 0, 185, 187, {1654,1663,1672,1681,1692,1703,1714,1721,1728,1735,0,0,0,0},{1744,1766,1794,1822,1837,0,0,0,0,0},{843,251,1858,1866,0,0,0,0,0,0,0,0},{848,269,1875,1886,0,0,0,0,0},{1898,1914,0,0,0,0,0,0}},
+       {1921, 2579, 2585, {2592, 2600, 2607, 2616, 2625, 2636, 2644}, {2652, 2655, 2658, 2661, 2664, 2667, 2670}, {2023, 2428, 2673, 2428, 2673, 2434, 2023}, {2675, 2682, 2690, 2696, 2702, 2706, 2711, 2716, 2723, 2733, 2741, 2750, 0}, {2675, 2682, 2690, 2696, 2702, 2706, 2711, 2716, 2723, 2733, 2741, 2750, 0}, {2759, 2763, 2767, 2772, 2702, 2776, 2780, 2784, 2788, 2792, 2796, 2800, 0}, {2759, 2763, 2767, 2772, 2702, 2776, 2780, 2784, 2788, 2792, 2796, 2800, 0}, 2, 1, 691, 187, {1156,1167,1176,35473,4762,1692,0,0,0,0,0,0,0,0},{2818,2300,35483,0,0,0,0,0,0,0},{251,843,35493,35502,35512,35523,8353,35528,35534,0,0,0},{269,848,35542,35555,2862,35567,35581,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 8151, 22114, {3620, 3627, 3634, 3642, 3652, 3661, 3668}, {3677, 3681, 3685, 3689, 3693, 3697, 3701}, {2023, 2428, 2430, 3705, 2430, 2434, 2023}, {3707, 3715, 3724, 2696, 3730, 3734, 3739, 2716, 2723, 3744, 2741, 3752, 0}, {3707, 3715, 3724, 2696, 3730, 3734, 3739, 2716, 2723, 3744, 2741, 3752, 0}, {2759, 2763, 3761, 2772, 3730, 2776, 2780, 2784, 2788, 3765, 2796, 3769, 0}, {2759, 2763, 3761, 2772, 3730, 2776, 2780, 2784, 2788, 3765, 2796, 3769, 0}, 2, 1, 185, 187, {198,189,2286,4762,1692,0,0,0,0,0,0,0,0,0},{5505,1242,1207,13756,0,0,0,0,0,0},{251,843,242,3594,0,0,0,0,0,0,0,0},{269,848,257,3602,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {3883, 7281, 7286, {3895, 3903, 3909, 3916, 3927, 3934, 3942}, {35588, 6273, 4845, 35593, 35599, 35604, 35608}, {2673, 2436, 2428, 29448, 3987, 3989, 2023}, {4080, 4086, 4094, 1012, 4100, 4105, 4111, 4117, 4124, 1050, 4135, 4145, 0}, {4080, 4086, 4094, 1012, 4100, 4105, 4111, 4117, 4124, 1050, 4135, 4145, 0}, {35614, 5803, 35618, 1086, 35623, 2538, 2542, 1096, 1100, 1105, 1110, 35627, 0}, {35614, 5803, 35618, 1086, 35623, 2538, 2542, 1096, 1100, 1105, 1110, 35627, 0}, 0, 0, 185, 187, {198,3582,189,1120,2286,1139,1692,0,0,0,0,0,0,0},{4211,4266,0,0,0,0,0,0,0,0},{242,3594,843,251,0,0,0,0,0,0,0,0},{257,3602,848,269,0,0,0,0,0},{1286,0,0,0,0,0,0,0}},
+       {289, 1929, 1932, {4783, 4792, 4798, 4804, 4813, 4819, 4828}, {4835, 4840, 4845, 4850, 4855, 4860, 4865}, {2673, 2436, 2428, 2428, 3987, 3989, 2023}, {4870, 4878, 4887, 4892, 4898, 4902, 4907, 4915, 4921, 4931, 1058, 4939, 0}, {4870, 4878, 4887, 4892, 4898, 4902, 4907, 4915, 4921, 4931, 1058, 4939, 0}, {4949, 4955, 4887, 4962, 4898, 4902, 4967, 4915, 4973, 1105, 1110, 4979, 0}, {4949, 4955, 4887, 4962, 4898, 4902, 4967, 4915, 4973, 1105, 1110, 4979, 0}, 2, 1, 2566, 187, {1139,198,189,1128,0,0,0,0,0,0,0,0,0,0},{4985,1242,0,0,0,0,0,0,0,0},{251,843,4288,5011,5021,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 1929, 1932, {6207, 6216, 6224, 6233, 6244, 6253, 6262}, {6269, 6273, 2530, 6277, 6281, 6285, 6289}, {2673, 2436, 2428, 2428, 6293, 3989, 2023}, {6295, 6303, 4005, 6312, 6319, 6326, 6333, 4034, 6340, 6350, 6358, 6367, 0}, {6376, 6384, 4094, 6393, 6400, 6407, 6414, 4117, 6421, 6431, 1058, 6439, 0}, {6448, 2526, 2530, 2534, 6452, 6456, 6460, 6464, 6468, 6472, 2558, 6476, 0}, {6448, 2526, 2530, 2534, 6452, 6456, 6460, 6464, 6468, 6472, 2558, 6476, 0}, 2, 1, 691, 187, {1156,1167,9806,2286,6480,0,0,0,0,0,0,0,0,0},{2818,1242,1207,0,0,0,0,0,0,0},{251,843,35493,0,0,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 7281, 7286, {7291, 7298, 7306, 7314, 7323, 7333, 7341}, {7350, 4424, 7353, 7356, 7359, 7362, 7365}, {7368, 2428, 2673, 3705, 2673, 3989, 7368}, {7370, 7378, 7387, 2459, 7393, 2469, 2474, 7397, 2486, 2496, 2504, 2513, 0}, {7370, 7378, 7387, 2459, 7393, 2469, 2474, 7397, 2486, 2496, 2504, 2513, 0}, {2522, 2526, 7406, 2534, 7393, 2538, 2542, 2546, 2550, 2554, 2558, 2562, 0}, {2522, 2526, 7406, 2534, 7393, 2538, 2542, 2546, 2550, 2554, 2558, 2562, 0}, 2, 1, 185, 187, {9796,1120,1139,1167,7419,1692,0,0,0,0,0,0,0,0},{4985,3809,1242,5548,0,0,0,0,0,0},{843,251,35632,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {1921, 35642, 35647, {2345, 10060, 35652, 2368, 2375, 2383, 35659}, {2398, 35667, 35672, 2411, 2415, 2419, 35676}, {2023, 2428, 2430, 2432, 2430, 2434, 2436}, {2438, 2445, 4887, 2459, 4898, 2469, 2474, 2479, 2486, 2496, 2504, 6121, 0}, {2438, 2445, 4887, 2459, 4898, 2469, 2474, 2479, 2486, 2496, 2504, 6121, 0}, {2522, 2526, 2530, 2534, 4898, 2538, 2542, 2546, 2550, 2554, 2558, 7515, 0}, {2522, 2526, 2530, 2534, 4898, 2538, 2542, 2546, 2550, 2554, 2558, 7515, 0}, 2, 1, 691, 187, {1156,7519,1167,4762,2804,1692,0,0,0,0,0,0,0,0},{2300,4769,0,0,0,0,0,0,0,0},{251,843,7529,7539,4288,2321,7550,7561,0,0,0,0},{269,848,7571,7585,4302,2337,7598,7612,0},{1301,7625,7635,0,0,0,0,0}},
+       {3883, 7281, 7286, {3895, 7966, 7980, 7993, 8006, 8019, 3942}, {6269, 8031, 8035, 8039, 8043, 8047, 8051}, {2673, 2023, 2430, 8056, 8056, 2023, 2023}, {35680, 35688, 35698, 4011, 29467, 35705, 35711, 4034, 29484, 29493, 29501, 35717, 0}, {35680, 35688, 35698, 4011, 29467, 35705, 35711, 4034, 29484, 29493, 29501, 35717, 0}, {2759, 20342, 3761, 29561, 2702, 2776, 2780, 20182, 18406, 29574, 2796, 2800, 0}, {2759, 20342, 3761, 29561, 2702, 2776, 2780, 20182, 18406, 29574, 2796, 2800, 0}, 2, 1, 185, 187, {198,1156,1128,189,1167,1139,1681,1703,1692,1735,35726,5888,0,0},{4266,4211,0,0,0,0,0,0,0,0},{251,0,0,0,0,0,0,0,0,0,0,0},{269,0,0,0,0,0,0,0,0},{1286,0,0,0,0,0,0,0}},
+       {10033, 10046, 10049, {10052, 10060, 10068, 2368, 2375, 2383, 10075}, {10083, 10088, 10093, 10097, 10101, 10105, 10109}, {2023, 2428, 2430, 2432, 2430, 2434, 2436}, {10114, 10122, 10131, 2696, 10004, 2706, 2711, 10136, 2723, 2733, 2741, 3752, 0}, {7370, 7378, 4887, 2459, 2465, 2469, 2474, 10144, 2486, 2496, 2504, 2513, 0}, {2759, 2763, 3761, 2772, 10004, 2776, 2780, 2784, 2788, 2792, 2796, 3769, 0}, {2759, 2763, 3761, 2772, 10004, 2776, 2780, 2784, 2788, 2792, 2796, 3769, 0}, 2, 1, 691, 187, {4753,1156,4762,1692,0,0,0,0,0,0,0,0,0,0},{10152,10170,0,0,0,0,0,0,0,0},{251,843,7529,0,0,0,0,0,0,0,0,0},{269,848,7585,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 1929, 1932, {35735, 35746, 35770, 35800, 35817, 35839, 35848}, {15057, 15060, 15065, 15071, 15075, 7736, 15080}, {6617, 6605, 6607, 6609, 6611, 6613, 6615}, {35859, 35872, 501, 35885, 521, 35896, 35905, 542, 35914, 35931, 35946, 35959, 0}, {35859, 35872, 501, 35885, 521, 35896, 35905, 542, 35914, 35931, 35946, 35959, 0}, {15231, 8135, 2530, 2534, 15179, 15235, 15239, 15243, 15247, 2554, 15251, 15255, 0}, {15231, 8135, 2530, 2534, 15179, 15235, 15239, 15243, 15247, 2554, 15251, 15255, 0}, 0, 1, 691, 187, {1156,1167,4762,189,1692,0,0,0,0,0,0,0,0,0},{1242,5505,0,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{269,0,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 7281, 7286, {18880, 18894, 18904, 18915, 18929, 18940, 18951}, {18964, 18969, 18974, 18981, 18987, 18993, 18999}, {2673, 2436, 2428, 7736, 2673, 12842, 2023}, {19004, 19012, 19020, 19027, 19036, 19046, 19056, 19062, 19070, 19085, 19103, 19111, 0}, {19004, 19012, 19020, 19027, 19036, 19046, 19056, 19062, 19070, 19085, 19103, 19111, 0}, {19119, 19123, 19020, 19129, 19133, 19138, 19056, 19144, 19149, 19156, 19163, 19168, 0}, {19119, 19123, 19020, 19129, 19133, 19138, 19056, 19144, 19149, 19156, 19163, 19168, 0}, 2, 0, 185, 187, {198,189,2286,4762,1692,0,0,0,0,0,0,0,0,0},{1242,5505,10193,8579,0,0,0,0,0,0},{251,843,0,0,0,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 1929, 1932, {35972, 35987, 36002, 36017, 36034, 36051, 36060}, {36071, 36078, 36085, 36092, 36099, 19832, 36106}, {36113, 19439, 8811, 8814, 8808, 19436, 19846}, {13229, 13240, 8845, 13253, 8867, 13264, 13271, 8892, 13278, 13293, 13306, 13317, 0}, {13229, 13240, 8845, 13253, 8867, 13264, 13271, 8892, 13278, 13293, 13306, 13317, 0}, {13330, 13337, 13344, 13351, 8867, 13264, 13271, 13358, 13365, 13372, 13379, 13386, 0}, {13330, 13337, 13344, 13351, 8867, 13264, 13271, 13358, 13365, 13372, 13379, 13386, 0}, 0, 1, 691, 187, {1156,1167,36116,4762,189,1692,0,0,0,0,0,0,0,0},{36127,1242,5505,0,0,0,0,0,0,0},{251,843,0,0,0,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {1, 20377, 20405, {20427, 20446, 20465, 20490, 20509, 20543, 20568}, {20587, 20597, 20607, 20623, 20633, 20658, 20674}, {20684, 20688, 20695, 20699, 20706, 20713, 20720}, {20724, 20752, 20786, 20802, 20821, 20828, 20838, 20854, 20870, 20901, 20923, 20945, 0}, {20724, 20752, 20786, 20802, 20821, 20828, 20838, 20854, 20870, 20901, 20923, 20945, 0}, {20724, 20752, 20786, 20802, 20821, 20828, 20838, 20854, 20870, 20901, 20923, 20945, 0}, {20724, 20752, 20786, 20802, 20821, 20828, 20838, 20854, 20870, 20901, 20923, 20945, 0}, 0, 5, 2566, 187, {1139,2293,4762,1128,1692,0,0,0,0,0,0,0,0,0},{5505,1242,0,0,0,0,0,0,0,0},{4288,2321,20998,21007,0,0,0,0,0,0,0,0},{4302,2337,21015,21027,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {1, 0, 0, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {9, 18, 25, 45, 65, 89, 113, 120, 131, 142, 151, 169, 0}, {9, 18, 25, 45, 65, 89, 113, 120, 131, 142, 151, 169, 0}, {9, 18, 25, 45, 65, 89, 113, 120, 131, 142, 151, 169, 0}, {9, 18, 25, 45, 65, 89, 113, 120, 131, 142, 151, 169, 0}, 0, 6, 185, 187, {198,189,1692,0,0,0,0,0,0,0,0,0,0,0},{10751,222,0,0,0,0,0,0,0,0},{242,251,0,0,0,0,0,0,0,0,0,0},{257,269,0,0,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {1327, 1340, 1347, {1354, 1364, 1374, 1384, 1394, 1404, 1414}, {35236, 35243, 35250, 35257, 35264, 35271, 35278}, {1473, 1477, 1481, 1485, 1489, 1493, 1497}, {1591, 1596, 1601, 1606, 1611, 1616, 1621, 1626, 1631, 1636, 1642, 1648, 0}, {1591, 1596, 1601, 1606, 1611, 1616, 1621, 1626, 1631, 1636, 1642, 1648, 0}, {1591, 1596, 1601, 1606, 1611, 1616, 1621, 1626, 1631, 1636, 1642, 1648, 0}, {1591, 1596, 1601, 1606, 1611, 1616, 1621, 1626, 1631, 1636, 1642, 1648, 0}, 0, 0, 185, 187, {2277,2286,189,1714,1735,1654,1681,1692,0,0,0,0,0,0},{1744,6632,1822,1837,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{1898,1914,0,0,0,0,0,0}},
+       {1921, 2579, 2585, {2592, 2600, 2607, 2616, 2625, 2636, 2644}, {2652, 2655, 2658, 2661, 2664, 2667, 2670}, {2023, 2428, 2673, 2428, 2673, 2434, 2023}, {36148, 2682, 2690, 2696, 2702, 2706, 2711, 2716, 2723, 2733, 2741, 2750, 0}, {36148, 2682, 2690, 2696, 2702, 2706, 2711, 2716, 2723, 2733, 2741, 2750, 0}, {36156, 2763, 2767, 2772, 2702, 2776, 2780, 2784, 2788, 2792, 2796, 2800, 0}, {36156, 2763, 2767, 2772, 2702, 2776, 2780, 2784, 2788, 2792, 2796, 2800, 0}, 2, 1, 691, 187, {1156,1167,1692,36161,7419,0,0,0,0,0,0,0,0,0},{36171,36191,0,0,0,0,0,0,0,0},{251,843,2850,36203,35523,8353,35534,0,0,0,0,0},{269,848,2862,35567,35581,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {3613, 1929, 1932, {3620, 3627, 3634, 3642, 3652, 3661, 3668}, {3677, 3681, 3685, 3689, 3693, 3697, 3701}, {2023, 2428, 2430, 3705, 2430, 2434, 2023}, {3707, 3715, 3724, 2696, 3730, 3734, 3739, 2716, 2723, 3744, 2741, 3752, 0}, {3707, 3715, 3724, 2696, 3730, 3734, 3739, 2716, 2723, 3744, 2741, 3752, 0}, {2759, 2763, 3761, 2772, 3730, 2776, 2780, 2784, 2788, 3765, 2796, 3769, 0}, {2759, 2763, 3761, 2772, 3730, 2776, 2780, 2784, 2788, 3765, 2796, 3769, 0}, 0, 0, 185, 187, {9796,1120,2286,2277,189,198,3809,5518,1692,1735,1681,0,0,0},{1207,1242,0,0,0,0,0,0,0,0},{3594,843,251,0,0,0,0,0,0,0,0,0},{3602,848,269,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {3883, 872, 878, {3895, 3903, 3909, 3916, 3927, 3934, 3942}, {3950, 3955, 3960, 3965, 3971, 3976, 3981}, {2673, 2436, 2428, 2428, 3987, 3989, 2023}, {3991, 3997, 4005, 4011, 4017, 4022, 4028, 4034, 4041, 4052, 4060, 4070, 0}, {4080, 4086, 4094, 1012, 4100, 4105, 4111, 4117, 4124, 1050, 4135, 4145, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, 2, 1, 185, 187, {198,189,1120,2286,2293,1139,1167,1692,0,0,0,0,0,0},{4211,4239,4266,0,0,0,0,0,0,0},{843,251,2321,4288,4294,0,0,0,0,0,0,0},{848,269,2337,4302,4311,0,0,0,0},{1286,0,0,0,0,0,0,0}},
+       {289, 1929, 1932, {4783, 4792, 4798, 4804, 4813, 4819, 4828}, {4835, 4840, 4845, 4850, 4855, 4860, 4865}, {2673, 2436, 2428, 2428, 3987, 3989, 2023}, {4870, 4878, 4887, 4892, 4898, 4902, 4907, 4915, 4921, 4931, 1058, 4939, 0}, {4870, 4878, 4887, 4892, 4898, 4902, 4907, 4915, 4921, 4931, 1058, 4939, 0}, {4949, 4955, 4887, 4962, 4898, 4902, 4967, 4915, 4973, 1105, 1110, 4979, 0}, {4949, 4955, 4887, 4962, 4898, 4902, 4967, 4915, 4973, 1105, 1110, 4979, 0}, 0, 0, 2566, 187, {1692,5888,1139,6179,189,3582,0,0,0,0,0,0,0,0},{1242,8579,0,0,0,0,0,0,0,0},{251,843,4288,5011,5021,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {18472, 18485, 18490, {36214, 36222, 36230, 36238, 36250, 36259, 36271}, {18575, 18580, 18585, 18590, 18595, 18600, 18605}, {2023, 2428, 2673, 6293, 2673, 16426, 2436}, {18610, 18627, 18640, 18654, 18667, 18680, 18693, 18707, 18719, 18733, 18747, 18761, 0}, {18610, 18627, 18640, 18654, 18667, 18680, 18693, 18707, 18719, 18733, 18747, 18761, 0}, {36282, 36293, 36300, 36308, 36315, 36322, 36329, 36337, 36343, 36351, 36359, 36367, 0}, {36282, 36293, 36300, 36308, 36315, 36322, 36329, 36337, 36343, 36351, 36359, 36367, 0}, 2, 1, 691, 187, {4753,1156,4762,1692,0,0,0,0,0,0,0,0,0,0},{36374,18862,0,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {1, 0, 0, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {9, 18, 25, 45, 65, 89, 113, 120, 131, 142, 151, 169, 0}, {9, 18, 25, 45, 65, 89, 113, 120, 131, 142, 151, 169, 0}, {9, 18, 25, 45, 65, 89, 113, 120, 131, 142, 151, 169, 0}, {9, 18, 25, 45, 65, 89, 113, 120, 131, 142, 151, 169, 0}, 0, 6, 185, 187, {198,189,1692,0,0,0,0,0,0,0,0,0,0,0},{10751,222,0,0,0,0,0,0,0,0},{242,251,0,0,0,0,0,0,0,0,0,0},{257,269,0,0,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {1327, 1340, 1347, {1354, 1364, 1374, 1384, 1394, 1404, 1414}, {1424, 1431, 1438, 1445, 1452, 1459, 1466}, {1473, 1477, 1481, 1485, 1489, 1493, 1497}, {1501, 1508, 1515, 1522, 1529, 1536, 1543, 1550, 1557, 1564, 1571, 1581, 0}, {1501, 1508, 1515, 1522, 1529, 1536, 1543, 1550, 1557, 1564, 1571, 1581, 0}, {1591, 1596, 1601, 1606, 1611, 1616, 1621, 1626, 1631, 1636, 1642, 1648, 0}, {1591, 1596, 1601, 1606, 1611, 1616, 1621, 1626, 1631, 1636, 1642, 1648, 0}, 0, 0, 185, 187, {2277,2286,189,1714,1735,1654,1681,1692,0,0,0,0,0,0},{1744,6632,1822,35285,0,0,0,0,0,0},{1858,1866,843,251,0,0,0,0,0,0,0,0},{1875,1886,848,269,0,0,0,0,0},{1898,0,0,0,0,0,0,0}},
+       {1921, 2579, 2585, {2592, 2600, 2607, 2616, 2625, 2636, 2644}, {2652, 2655, 2658, 2661, 2664, 2667, 2670}, {2023, 2428, 2673, 2428, 2673, 2434, 2023}, {2675, 2682, 2690, 2696, 2702, 2706, 2711, 2716, 2723, 2733, 2741, 2750, 0}, {2675, 2682, 2690, 2696, 2702, 2706, 2711, 2716, 2723, 2733, 2741, 2750, 0}, {2759, 2763, 2767, 2772, 2702, 2776, 2780, 2784, 2788, 2792, 2796, 2800, 0}, {2759, 2763, 2767, 2772, 2702, 2776, 2780, 2784, 2788, 2792, 2796, 2800, 0}, 2, 1, 691, 187, {1156,1167,1176,4762,4753,1692,0,0,0,0,0,0,0,0},{36400,2818,36426,36441,0,0,0,0,0,0},{251,843,2321,35512,0,0,0,0,0,0,0,0},{269,35567,2862,35581,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 1929, 1932, {3620, 3627, 3634, 3642, 3652, 3661, 3668}, {3677, 3681, 3685, 3689, 3693, 3697, 3701}, {2023, 2428, 2430, 3705, 2430, 2434, 2023}, {3707, 3715, 3724, 2696, 3730, 3734, 3739, 2716, 2723, 3744, 2741, 3752, 0}, {3707, 3715, 3724, 2696, 3730, 3734, 3739, 2716, 2723, 3744, 2741, 3752, 0}, {2759, 2763, 3761, 2772, 3730, 2776, 2780, 2784, 2788, 3765, 2796, 3769, 0}, {2759, 2763, 3761, 2772, 3730, 2776, 2780, 2784, 2788, 3765, 2796, 3769, 0}, 0, 0, 2566, 187, {1692,198,189,2286,5888,36455,3809,14921,1692,0,0,0,0,0},{3838,20186,36463,6488,0,0,0,0,0,0},{3594,242,251,843,0,0,0,0,0,0,0,0},{3602,257,269,848,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {3883, 872, 878, {3895, 3903, 3909, 3916, 3927, 3934, 3942}, {3950, 3955, 3960, 3965, 3971, 3976, 3981}, {2673, 2436, 2428, 2428, 3987, 3989, 2023}, {3991, 3997, 4005, 4011, 4017, 4022, 4028, 4034, 4041, 4052, 4060, 4070, 0}, {4080, 4086, 4094, 1012, 4100, 4105, 4111, 4117, 4124, 1050, 4135, 4145, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, 0, 0, 185, 187, {198,189,9796,2286,1139,1692,0,0,0,0,0,0,0,0},{29578,4239,4266,0,0,0,0,0,0,0},{3594,843,0,0,0,0,0,0,0,0,0,0},{3602,848,0,0,0,0,0,0,0},{1286,0,0,0,0,0,0,0}},
+       {289, 1929, 1932, {4783, 4792, 4798, 4804, 4813, 4819, 4828}, {4835, 4840, 4845, 4850, 4855, 4860, 4865}, {2673, 2436, 2428, 2428, 3987, 3989, 2023}, {4870, 4878, 4887, 4892, 4898, 4902, 4907, 4915, 4921, 4931, 1058, 4939, 0}, {4870, 4878, 4887, 4892, 4898, 4902, 4907, 4915, 4921, 4931, 1058, 4939, 0}, {4949, 4955, 4887, 4962, 4898, 4902, 4967, 4915, 4973, 1105, 1110, 4979, 0}, {4949, 4955, 4887, 4962, 4898, 4902, 4967, 4915, 4973, 1105, 1110, 4979, 0}, 2, 1, 691, 187, {1156,1167,4762,1692,0,0,0,0,0,0,0,0,0,0},{4985,1242,5002,0,0,0,0,0,0,0},{251,843,4288,5011,5021,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {1921, 1929, 1932, {9187, 9196, 9208, 9215, 9223, 9233, 9239}, {9246, 9250, 9254, 9258, 9262, 9267, 9271}, {9275, 9277, 9279, 9281, 9283, 9277, 9281}, {9286, 9296, 9305, 9313, 9321, 9329, 9336, 9343, 9351, 2102, 9357, 9365, 0}, {9374, 9384, 9393, 9401, 9409, 9417, 9424, 9431, 9440, 7911, 9446, 9456, 0}, {9465, 9469, 9474, 9479, 9483, 7945, 2239, 9487, 9491, 2255, 9495, 2259, 0}, {9465, 9469, 9474, 9479, 9483, 7945, 2239, 9487, 9491, 2255, 9495, 2259, 0}, 0, 1, 691, 187, {9499,9509,6153,9517,9529,9539,9549,1692,0,0,0,0,0,0},{9561,9575,9590,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {1, 0, 0, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {36474, 36485, 13604, 36496, 36507, 36514, 36523, 36536, 36543, 36556, 36569, 36582, 0}, {36474, 36485, 13604, 36496, 36507, 36514, 36523, 36536, 36543, 36556, 36569, 36582, 0}, {36474, 36485, 13604, 36496, 36507, 36514, 36523, 36536, 36543, 36556, 36569, 36582, 0}, {36474, 36485, 13604, 36496, 36507, 36514, 36523, 36536, 36543, 36556, 36569, 36582, 0}, 0, 6, 2566, 187, {1128,1139,1692,0,0,0,0,0,0,0,0,0,0,0},{10751,222,0,0,0,0,0,0,0,0},{843,251,242,0,0,0,0,0,0,0,0,0},{848,269,257,0,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {1327, 1340, 1347, {1354, 1364, 1374, 1384, 1394, 1404, 1414}, {35236, 35243, 35250, 35257, 35264, 35271, 35278}, {1473, 1477, 1481, 1485, 1489, 1493, 1497}, {1591, 1596, 1601, 1606, 1611, 1616, 1621, 1626, 1631, 1636, 1642, 1648, 0}, {1591, 1596, 1601, 1606, 1611, 1616, 1621, 1626, 1631, 1636, 1642, 1648, 0}, {1591, 1596, 1601, 1606, 1611, 1616, 1621, 1626, 1631, 1636, 1642, 1648, 0}, {1591, 1596, 1601, 1606, 1611, 1616, 1621, 1626, 1631, 1636, 1642, 1648, 0}, 0, 0, 185, 187, {2277,2286,189,1714,1735,1654,1681,1692,0,0,0,0,0,0},{1744,36595,36622,2568,1822,35285,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{1898,1914,0,0,0,0,0,0}},
+       {1921, 2579, 2585, {2592, 2600, 2607, 2616, 2625, 2636, 2644}, {2652, 2655, 2658, 2661, 2664, 2667, 2670}, {2023, 2428, 2673, 2428, 2673, 2434, 2023}, {2675, 2682, 2690, 2696, 2702, 2706, 2711, 2716, 2723, 2733, 2741, 2750, 0}, {2675, 2682, 2690, 2696, 2702, 2706, 2711, 2716, 2723, 2733, 2741, 2750, 0}, {2759, 2763, 2767, 2772, 2702, 2776, 2780, 2784, 2788, 2792, 2796, 2800, 0}, {2759, 2763, 2767, 2772, 2702, 2776, 2780, 2784, 2788, 2792, 2796, 2800, 0}, 2, 1, 691, 187, {1156,1167,1176,35473,4762,1692,7419,4753,0,0,0,0,0,0},{2818,2300,36638,0,0,0,0,0,0,0},{251,843,35512,35523,2321,0,0,0,0,0,0,0},{269,848,2862,35567,35581,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 7281, 7286, {3620, 3627, 3634, 3642, 3652, 3661, 3668}, {3677, 3681, 3685, 3689, 3693, 3697, 3701}, {2023, 2428, 2430, 3705, 2430, 2434, 2023}, {3707, 3715, 3724, 2696, 3730, 3734, 3739, 2716, 2723, 3744, 2741, 3752, 0}, {3707, 3715, 3724, 2696, 3730, 3734, 3739, 2716, 2723, 3744, 2741, 3752, 0}, {2759, 2763, 3761, 2772, 3730, 2776, 2780, 2784, 2788, 3765, 2796, 3769, 0}, {2759, 2763, 3761, 2772, 3730, 2776, 2780, 2784, 2788, 3765, 2796, 3769, 0}, 0, 0, 185, 187, {9796,1120,189,1176,1692,0,0,0,0,0,0,0,0,0},{1207,1242,0,0,0,0,0,0,0,0},{3594,242,251,843,0,0,0,0,0,0,0,0},{3602,257,269,848,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {3883, 872, 878, {3895, 3903, 3909, 3916, 3927, 3934, 3942}, {3950, 3955, 3960, 3965, 3971, 3976, 3981}, {2673, 2436, 2428, 2428, 3987, 3989, 2023}, {3991, 3997, 4005, 4011, 4017, 4022, 4028, 4034, 4041, 4052, 4060, 4070, 0}, {4080, 4086, 4094, 1012, 4100, 4105, 4111, 4117, 4124, 1050, 4135, 4145, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, 0, 1, 185, 187, {198,189,2286,1139,0,0,0,0,0,0,0,0,0,0},{4239,4266,3809,36650,14910,0,0,0,0,0},{242,3594,843,251,0,0,0,0,0,0,0,0},{257,3602,848,269,0,0,0,0,0},{1286,0,0,0,0,0,0,0}},
+       {289, 1929, 1932, {4783, 4792, 4798, 4804, 4813, 4819, 4828}, {4835, 4840, 4845, 4850, 4855, 4860, 4865}, {2673, 2436, 2428, 2428, 3987, 3989, 2023}, {4870, 4878, 4887, 4892, 4898, 4902, 4907, 4915, 4921, 4931, 1058, 4939, 0}, {4870, 4878, 4887, 4892, 4898, 4902, 4907, 4915, 4921, 4931, 1058, 4939, 0}, {4949, 4955, 4887, 4962, 4898, 4902, 4967, 4915, 4973, 1105, 1110, 4979, 0}, {4949, 4955, 4887, 4962, 4898, 4902, 4967, 4915, 4973, 1105, 1110, 4979, 0}, 2, 1, 185, 187, {198,189,1167,1139,1692,0,0,0,0,0,0,0,0,0},{36659,4985,5002,1242,0,0,0,0,0,0},{251,843,4288,5011,5021,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {12109, 36682, 36692, {9187, 9196, 9208, 9215, 9223, 9233, 9239}, {9246, 9250, 9254, 9258, 9262, 9267, 9271}, {0, 0, 0, 0, 0, 0, 0}, {2438, 2445, 15168, 2459, 2465, 2469, 2474, 12088, 36700, 36710, 36718, 36727, 0}, {2438, 2445, 15168, 2459, 2465, 2469, 2474, 12088, 36700, 36710, 36718, 36727, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 12095, 2550, 2554, 2558, 2562, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 12095, 2550, 2554, 2558, 2562, 0}, 0, 1, 691, 187, {4753,4762,2266,1156,36736,1167,9806,1692,0,0,0,0,0,0},{2300,4769,2818,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {1, 0, 0, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {36745, 36756, 13604, 36769, 36507, 36780, 36791, 36804, 36811, 36556, 36822, 36833, 0}, {36745, 36756, 13604, 36769, 36507, 36780, 36791, 36804, 36811, 36556, 36822, 36833, 0}, {36745, 36756, 13604, 36769, 36507, 36780, 36791, 36804, 36811, 36556, 36822, 36833, 0}, {36745, 36756, 13604, 36769, 36507, 36780, 36791, 36804, 36811, 36556, 36822, 36833, 0}, 0, 6, 2566, 187, {1128,1139,1692,0,0,0,0,0,0,0,0,0,0,0},{10751,222,0,0,0,0,0,0,0,0},{843,251,242,0,0,0,0,0,0,0,0,0},{848,269,257,0,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {289, 7281, 7286, {3620, 3627, 3634, 3642, 3652, 3661, 3668}, {3677, 3681, 3685, 3689, 3693, 3697, 3701}, {2023, 2428, 2430, 3705, 2430, 2434, 2023}, {3707, 3715, 3724, 2696, 3730, 3734, 3739, 2716, 2723, 3744, 2741, 3752, 0}, {3707, 3715, 3724, 2696, 3730, 3734, 3739, 2716, 2723, 3744, 2741, 3752, 0}, {2759, 2763, 3761, 2772, 3730, 2776, 2780, 2784, 2788, 3765, 2796, 3769, 0}, {2759, 2763, 3761, 2772, 3730, 2776, 2780, 2784, 2788, 3765, 2796, 3769, 0}, 2, 0, 185, 187, {198,1128,1692,0,0,0,0,0,0,0,0,0,0,0},{5505,1242,0,0,0,0,0,0,0,0},{251,843,0,0,0,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {3883, 872, 878, {3895, 3903, 3909, 3916, 3927, 3934, 3942}, {3950, 3955, 3960, 3965, 3971, 3976, 3981}, {2673, 2436, 2428, 2428, 3987, 3989, 2023}, {3991, 3997, 4005, 4011, 4017, 4022, 4028, 4034, 4041, 4052, 4060, 4070, 0}, {4080, 4086, 4094, 1012, 4100, 4105, 4111, 4117, 4124, 1050, 4135, 4145, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, 0, 0, 185, 187, {2286,189,1139,1692,0,0,0,0,0,0,0,0,0,0},{29578,4239,4266,0,0,0,0,0,0,0},{3594,843,0,0,0,0,0,0,0,0,0,0},{3602,848,0,0,0,0,0,0,0},{1286,0,0,0,0,0,0,0}},
+       {289, 1929, 1932, {4783, 4792, 4798, 4804, 4813, 4819, 4828}, {4835, 4840, 4845, 4850, 4855, 4860, 4865}, {2673, 2436, 2428, 2428, 3987, 3989, 2023}, {4870, 4878, 4887, 4892, 4898, 4902, 4907, 4915, 4921, 4931, 1058, 4939, 0}, {4870, 4878, 4887, 4892, 4898, 4902, 4907, 4915, 4921, 4931, 1058, 4939, 0}, {4949, 4955, 4887, 4962, 4898, 4902, 4967, 4915, 4973, 1105, 1110, 4979, 0}, {4949, 4955, 4887, 4962, 4898, 4902, 4967, 4915, 4973, 1105, 1110, 4979, 0}, 2, 1, 185, 187, {198,189,1167,1139,1692,0,0,0,0,0,0,0,0,0},{4985,1242,5002,0,0,0,0,0,0,0},{251,843,4288,5011,5021,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {1921, 36682, 36692, {12020, 36844, 9208, 12045, 9223, 9233, 9239}, {9246, 9250, 9254, 12066, 9262, 9267, 9271}, {9275, 9277, 9279, 9281, 9283, 9277, 9281}, {2438, 2445, 15168, 2459, 2465, 2538, 2542, 12088, 36700, 36710, 36718, 36727, 0}, {2438, 2445, 15168, 2459, 2465, 2538, 2542, 12088, 36700, 36710, 36718, 36727, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 12095, 2550, 2554, 2558, 2562, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 12095, 2550, 2554, 2558, 2562, 0}, 0, 1, 691, 187, {9499,9517,0,0,0,0,0,0,0,0,0,0,0,0},{9561,9575,9590,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{36855,0,0,0,0,0,0,0}},
+       {1, 0, 0, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {36474, 36485, 13604, 36496, 36507, 36514, 36523, 36536, 36543, 36556, 36569, 36582, 0}, {36474, 36485, 13604, 36496, 36507, 36514, 36523, 36536, 36543, 36556, 36569, 36582, 0}, {36474, 36485, 13604, 36496, 36507, 36514, 36523, 36536, 36543, 36556, 36569, 36582, 0}, {36474, 36485, 13604, 36496, 36507, 36514, 36523, 36536, 36543, 36556, 36569, 36582, 0}, 0, 0, 2566, 187, {1128,1139,1692,0,0,0,0,0,0,0,0,0,0,0},{10751,222,0,0,0,0,0,0,0,0},{843,251,242,0,0,0,0,0,0,0,0,0},{848,269,257,0,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {3613, 1929, 1932, {3620, 3627, 3634, 3642, 3652, 3661, 3668}, {3677, 3681, 3685, 3689, 3693, 3697, 3701}, {2023, 2428, 2430, 3705, 2430, 2434, 2023}, {3707, 3715, 3724, 2696, 3730, 3734, 3739, 2716, 2723, 3744, 2741, 3752, 0}, {3707, 3715, 3724, 2696, 3730, 3734, 3739, 2716, 2723, 3744, 2741, 3752, 0}, {2759, 2763, 3761, 2772, 3730, 2776, 2780, 2784, 2788, 3765, 2796, 3769, 0}, {2759, 2763, 3761, 2772, 3730, 2776, 2780, 2784, 2788, 3765, 2796, 3769, 0}, 0, 0, 2566, 187, {1692,0,0,0,0,0,0,0,0,0,0,0,0,0},{5505,0,0,0,0,0,0,0,0,0},{242,251,0,0,0,0,0,0,0,0,0,0},{257,269,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {3883, 872, 878, {3895, 3903, 3909, 3916, 3927, 3934, 3942}, {3950, 3955, 3960, 3965, 3971, 3976, 3981}, {2673, 2436, 2428, 2428, 3987, 3989, 2023}, {3991, 3997, 4005, 4011, 4017, 4022, 4028, 4034, 4041, 4052, 4060, 4070, 0}, {4080, 4086, 4094, 1012, 4100, 4105, 4111, 4117, 4124, 1050, 4135, 4145, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, 0, 0, 185, 187, {2286,2277,2293,7410,4762,4753,0,0,0,0,0,0,0,0},{29578,4266,0,0,0,0,0,0,0,0},{3594,843,0,0,0,0,0,0,0,0,0,0},{3602,848,0,0,0,0,0,0,0},{1286,0,0,0,0,0,0,0}},
+       {1921, 36866, 36884, {36899, 36912, 36931, 36944, 36959, 36976, 10975}, {36987, 36994, 37001, 37008, 37015, 37022, 37029}, {456, 459, 37036, 465, 468, 459, 465}, {37039, 37052, 501, 510, 15858, 15865, 15874, 542, 37067, 37086, 37101, 37118, 0}, {37039, 37052, 501, 510, 15858, 15865, 15874, 542, 37067, 37086, 37101, 37118, 0}, {37135, 37142, 37149, 37156, 15858, 37163, 37170, 37177, 37184, 37191, 37198, 37205, 0}, {37135, 37142, 37149, 37156, 15858, 37163, 37170, 37177, 37184, 37191, 37198, 37205, 0}, 0, 1, 691, 187, {9499,9517,0,0,0,0,0,0,0,0,0,0,0,0},{2300,4769,2818,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {1, 0, 0, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {9, 18, 25, 45, 65, 89, 113, 120, 131, 142, 151, 169, 0}, {9, 18, 25, 45, 65, 89, 113, 120, 131, 142, 151, 169, 0}, {9, 18, 25, 45, 65, 89, 113, 120, 131, 142, 151, 169, 0}, {9, 18, 25, 45, 65, 89, 113, 120, 131, 142, 151, 169, 0}, 0, 6, 185, 187, {198,189,1692,0,0,0,0,0,0,0,0,0,0,0},{10751,222,0,0,0,0,0,0,0,0},{242,251,843,0,0,0,0,0,0,0,0,0},{257,269,848,0,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {289, 1929, 1932, {3620, 3627, 3634, 3642, 3652, 3661, 3668}, {3677, 3681, 3685, 3689, 3693, 3697, 3701}, {2023, 2428, 2430, 3705, 2430, 2434, 2023}, {3707, 3715, 3724, 2696, 3730, 3734, 3739, 2716, 2723, 3744, 2741, 3752, 0}, {3707, 3715, 3724, 2696, 3730, 3734, 3739, 2716, 2723, 3744, 2741, 3752, 0}, {2759, 2763, 3761, 2772, 3730, 2776, 2780, 2784, 2788, 3765, 2796, 3769, 0}, {2759, 2763, 3761, 2772, 3730, 2776, 2780, 2784, 2788, 3765, 2796, 3769, 0}, 0, 0, 185, 187, {198,1692,0,0,0,0,0,0,0,0,0,0,0,0},{10751,14921,1128,20186,20206,222,0,0,0,0},{251,242,3594,843,0,0,0,0,0,0,0,0},{269,257,3602,848,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {3883, 872, 878, {3895, 3903, 3909, 3916, 3927, 3934, 3942}, {3950, 3955, 3960, 3965, 3971, 3976, 3981}, {2673, 2436, 2428, 2428, 3987, 3989, 2023}, {3991, 3997, 4005, 4011, 4017, 4022, 4028, 4034, 4041, 4052, 4060, 4070, 0}, {4080, 4086, 4094, 1012, 4100, 4105, 4111, 4117, 4124, 1050, 4135, 4145, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, 0, 0, 2566, 187, {1128,198,189,2286,1139,1692,0,0,0,0,0,0,0,0},{29578,4239,4266,0,0,0,0,0,0,0},{242,3594,843,251,0,0,0,0,0,0,0,0},{257,3602,848,269,0,0,0,0,0},{1286,0,0,0,0,0,0,0}},
+       {20057, 36866, 36884, {36899, 36912, 36931, 36944, 36959, 36976, 10975}, {36987, 36994, 37001, 37008, 37015, 37022, 37029}, {456, 459, 37036, 465, 468, 459, 465}, {37039, 37052, 501, 510, 15858, 15865, 15874, 542, 37067, 37086, 37101, 37118, 0}, {37039, 37052, 501, 510, 15858, 15865, 15874, 542, 37067, 37086, 37101, 37118, 0}, {37135, 37142, 37149, 37156, 15858, 37163, 37170, 37177, 37184, 37191, 37198, 37205, 0}, {37135, 37142, 37149, 37156, 15858, 37163, 37170, 37177, 37184, 37191, 37198, 37205, 0}, 0, 1, 691, 187, {4753,4762,2266,1156,36736,1167,9806,1692,0,0,0,0,0,0},{2300,4769,2818,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {1, 0, 0, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {9, 18, 25, 45, 65, 89, 113, 120, 131, 142, 151, 169, 0}, {9, 18, 25, 45, 65, 89, 113, 120, 131, 142, 151, 169, 0}, {9, 18, 25, 45, 65, 89, 113, 120, 131, 142, 151, 169, 0}, {9, 18, 25, 45, 65, 89, 113, 120, 131, 142, 151, 169, 0}, 0, 0, 185, 187, {198,189,1692,0,0,0,0,0,0,0,0,0,0,0},{10751,222,0,0,0,0,0,0,0,0},{242,251,843,0,0,0,0,0,0,0,0,0},{257,269,848,0,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {3883, 872, 878, {3895, 3903, 3909, 3916, 3927, 3934, 3942}, {3950, 3955, 3960, 3965, 3971, 3976, 3981}, {2673, 2436, 2428, 2428, 3987, 3989, 2023}, {3991, 3997, 4005, 4011, 4017, 4022, 4028, 4034, 4041, 4052, 4060, 4070, 0}, {4080, 4086, 4094, 1012, 4100, 4105, 4111, 4117, 4124, 1050, 4135, 4145, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, 0, 0, 185, 187, {198,189,9796,2286,1139,1692,0,0,0,0,0,0,0,0},{29578,4239,4266,0,0,0,0,0,0,0},{3594,843,0,0,0,0,0,0,0,0,0,0},{3602,848,0,0,0,0,0,0,0},{1286,0,0,0,0,0,0,0}},
+       {1921, 36682, 36692, {12020, 36844, 9208, 12045, 9223, 9233, 9239}, {9246, 9250, 9254, 12066, 9262, 9267, 9271}, {9275, 9277, 9279, 9281, 9283, 9277, 9281}, {2438, 2445, 15168, 2459, 2465, 2538, 2542, 12088, 36700, 36710, 36718, 36727, 0}, {2438, 2445, 15168, 2459, 2465, 2538, 2542, 12088, 36700, 36710, 36718, 36727, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 12095, 2550, 2554, 2558, 2562, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 12095, 2550, 2554, 2558, 2562, 0}, 0, 1, 691, 187, {9499,9517,0,0,0,0,0,0,0,0,0,0,0,0},{9561,9575,9590,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{36855,0,0,0,0,0,0,0}},
+       {1, 0, 0, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {35305, 35329, 35338, 35347, 35358, 35367, 35380, 35389, 35394, 35405, 35427, 35451, 0}, {35305, 35329, 35338, 35347, 35358, 35367, 35380, 35389, 35394, 35405, 35427, 35451, 0}, {35305, 35329, 35338, 35347, 35358, 35367, 35380, 35389, 35394, 35405, 35427, 35451, 0}, {35305, 35329, 35338, 35347, 35358, 35367, 35380, 35389, 35394, 35405, 35427, 35451, 0}, 0, 6, 185, 187, {198,189,1692,0,0,0,0,0,0,0,0,0,0,0},{10751,222,0,0,0,0,0,0,0,0},{242,251,843,0,0,0,0,0,0,0,0,0},{257,269,848,0,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {289, 1929, 1932, {3620, 3627, 3634, 3642, 3652, 3661, 3668}, {3677, 3681, 3685, 3689, 3693, 3697, 3701}, {2023, 2428, 2430, 3705, 2430, 2434, 2023}, {3707, 3715, 3724, 2696, 3730, 3734, 3739, 2716, 2723, 3744, 2741, 3752, 0}, {3707, 3715, 3724, 2696, 3730, 3734, 3739, 2716, 2723, 3744, 2741, 3752, 0}, {2759, 2763, 3761, 2772, 3730, 2776, 2780, 2784, 2788, 3765, 2796, 3769, 0}, {2759, 2763, 3761, 2772, 3730, 2776, 2780, 2784, 2788, 3765, 2796, 3769, 0}, 0, 0, 185, 187, {198,1692,0,0,0,0,0,0,0,0,0,0,0,0},{13756,0,0,0,0,0,0,0,0,0},{242,251,0,0,0,0,0,0,0,0,0,0},{257,269,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {3883, 872, 878, {3895, 3903, 3909, 3916, 3927, 3934, 3942}, {3950, 3955, 3960, 3965, 3971, 3976, 3981}, {2673, 2436, 2428, 2428, 3987, 3989, 2023}, {3991, 3997, 4005, 4011, 4017, 4022, 4028, 4034, 4041, 4052, 4060, 4070, 0}, {4080, 4086, 4094, 1012, 4100, 4105, 4111, 4117, 4124, 1050, 4135, 4145, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, 0, 0, 185, 187, {198,189,2286,1139,1692,0,0,0,0,0,0,0,0,0},{29578,4239,4266,0,0,0,0,0,0,0},{242,3594,843,251,0,0,0,0,0,0,0,0},{257,3602,848,269,0,0,0,0,0},{1286,0,0,0,0,0,0,0}},
+       {1921, 36866, 36884, {36899, 36912, 36931, 8714, 36959, 36976, 10975}, {36987, 36994, 37001, 37212, 37015, 37022, 37029}, {456, 459, 37036, 465, 468, 459, 465}, {37039, 37052, 501, 510, 15858, 37163, 37170, 542, 37067, 37086, 37101, 37118, 0}, {37039, 37052, 501, 510, 15858, 37163, 37170, 542, 37067, 37086, 37101, 37118, 0}, {37135, 37142, 37149, 37156, 15858, 37163, 37170, 37177, 37184, 37191, 37198, 37205, 0}, {37135, 37142, 37149, 37156, 15858, 37163, 37170, 37177, 37184, 37191, 37198, 37205, 0}, 0, 1, 691, 187, {9499,9517,0,0,0,0,0,0,0,0,0,0,0,0},{9561,9575,9590,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{36855,0,0,0,0,0,0,0}},
+       {1, 0, 0, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {35305, 35329, 35338, 35347, 35358, 35367, 35380, 35389, 35394, 35405, 35427, 35451, 0}, {35305, 35329, 35338, 35347, 35358, 35367, 35380, 35389, 35394, 35405, 35427, 35451, 0}, {35305, 35329, 35338, 35347, 35358, 35367, 35380, 35389, 35394, 35405, 35427, 35451, 0}, {35305, 35329, 35338, 35347, 35358, 35367, 35380, 35389, 35394, 35405, 35427, 35451, 0}, 0, 6, 185, 187, {198,189,1692,0,0,0,0,0,0,0,0,0,0,0},{10751,222,0,0,0,0,0,0,0,0},{242,251,843,0,0,0,0,0,0,0,0,0},{257,269,848,0,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {289, 1929, 1932, {3620, 3627, 3634, 3642, 3652, 3661, 3668}, {3677, 3681, 3685, 3689, 3693, 3697, 3701}, {2023, 2428, 2430, 3705, 2430, 2434, 2023}, {3707, 3715, 3724, 2696, 3730, 3734, 3739, 2716, 2723, 3744, 2741, 3752, 0}, {3707, 3715, 3724, 2696, 3730, 3734, 3739, 2716, 2723, 3744, 2741, 3752, 0}, {2759, 2763, 3761, 2772, 3730, 2776, 2780, 2784, 2788, 3765, 2796, 3769, 0}, {2759, 2763, 3761, 2772, 3730, 2776, 2780, 2784, 2788, 3765, 2796, 3769, 0}, 0, 0, 185, 187, {198,1692,0,0,0,0,0,0,0,0,0,0,0,0},{13756,0,0,0,0,0,0,0,0,0},{242,251,0,0,0,0,0,0,0,0,0,0},{257,269,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {37219, 872, 878, {3895, 3903, 3909, 3916, 3927, 3934, 3942}, {3950, 3955, 3960, 3965, 3971, 3976, 3981}, {2673, 2436, 2428, 2428, 3987, 3989, 2023}, {3991, 3997, 4005, 4011, 4017, 4022, 4028, 4034, 4041, 4052, 4060, 4070, 0}, {4080, 4086, 4094, 1012, 4100, 4105, 4111, 4117, 4124, 1050, 4135, 4145, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, 0, 0, 185, 187, {198,189,2286,1139,1692,0,0,0,0,0,0,0,0,0},{29578,4239,4266,0,0,0,0,0,0,0},{242,3594,251,843,0,0,0,0,0,0,0,0},{257,3602,269,848,0,0,0,0,0},{1286,0,0,0,0,0,0,0}},
+       {1921, 36682, 36692, {12020, 36844, 9208, 12045, 9223, 9233, 9239}, {9246, 9250, 9254, 12066, 9262, 9267, 9271}, {9275, 9277, 9279, 9281, 9283, 9277, 9281}, {2438, 2445, 15168, 2459, 2465, 2538, 2542, 12088, 36700, 36710, 36718, 36727, 0}, {2438, 2445, 15168, 2459, 2465, 2538, 2542, 12088, 36700, 36710, 36718, 36727, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 12095, 2550, 2554, 2558, 2562, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 12095, 2550, 2554, 2558, 2562, 0}, 0, 1, 691, 187, {9499,9509,6153,9517,9529,9539,9549,1692,0,0,0,0,0,0},{9561,9575,9590,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{36855,0,0,0,0,0,0,0}},
+       {1, 0, 0, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {35305, 35329, 35338, 35347, 35358, 35367, 35380, 35389, 35394, 35405, 35427, 35451, 0}, {35305, 35329, 35338, 35347, 35358, 35367, 35380, 35389, 35394, 35405, 35427, 35451, 0}, {35305, 35329, 35338, 35347, 35358, 35367, 35380, 35389, 35394, 35405, 35427, 35451, 0}, {35305, 35329, 35338, 35347, 35358, 35367, 35380, 35389, 35394, 35405, 35427, 35451, 0}, 0, 1, 185, 187, {198,189,1692,0,0,0,0,0,0,0,0,0,0,0},{10751,222,0,0,0,0,0,0,0,0},{242,251,843,0,0,0,0,0,0,0,0,0},{257,269,848,0,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {289, 1929, 1932, {3620, 3627, 3634, 3642, 3652, 3661, 3668}, {3677, 3681, 3685, 3689, 3693, 3697, 3701}, {2023, 2428, 2430, 3705, 2430, 2434, 2023}, {3707, 3715, 3724, 2696, 3730, 3734, 3739, 2716, 2723, 3744, 2741, 3752, 0}, {3707, 3715, 3724, 2696, 3730, 3734, 3739, 2716, 2723, 3744, 2741, 3752, 0}, {2759, 2763, 3761, 2772, 3730, 2776, 2780, 2784, 2788, 3765, 2796, 3769, 0}, {2759, 2763, 3761, 2772, 3730, 2776, 2780, 2784, 2788, 3765, 2796, 3769, 0}, 0, 0, 185, 187, {198,2277,0,0,0,0,0,0,0,0,0,0,0,0},{1207,1242,5002,10205,0,0,0,0,0,0},{3594,242,843,251,0,0,0,0,0,0,0,0},{3602,257,848,269,0,0,0,0,0},{37232,0,0,0,0,0,0,0}},
+       {3883, 872, 878, {3895, 3903, 3909, 3916, 3927, 3934, 3942}, {3950, 3955, 3960, 3965, 3971, 3976, 3981}, {2673, 2436, 2428, 2428, 3987, 3989, 2023}, {3991, 3997, 4005, 4011, 4017, 4022, 4028, 4034, 4041, 4052, 4060, 4070, 0}, {4080, 4086, 4094, 1012, 4100, 4105, 4111, 4117, 4124, 1050, 4135, 4145, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, 0, 1, 185, 187, {198,189,2286,1139,1692,0,0,0,0,0,0,0,0,0},{29578,4239,4266,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{1286,0,0,0,0,0,0,0}},
+       {1921, 36866, 36884, {36899, 36912, 36931, 8714, 36959, 36976, 10975}, {36987, 36994, 37001, 37212, 37015, 37022, 37029}, {456, 459, 37036, 465, 468, 459, 465}, {37039, 37052, 501, 510, 15858, 37163, 37170, 542, 37067, 37086, 37101, 37118, 0}, {37039, 37052, 501, 510, 15858, 37163, 37170, 542, 37067, 37086, 37101, 37118, 0}, {37135, 37142, 37149, 37156, 15858, 37163, 37170, 37177, 37184, 37191, 37198, 37205, 0}, {37135, 37142, 37149, 37156, 15858, 37163, 37170, 37177, 37184, 37191, 37198, 37205, 0}, 0, 1, 691, 187, {9499,9509,6153,9517,9529,9539,9549,37242,0,0,0,0,0,0},{9561,9575,9590,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{36855,0,0,0,0,0,0,0}},
+       {1, 0, 0, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {9, 18, 25, 45, 65, 89, 113, 120, 131, 142, 151, 169, 0}, {9, 18, 25, 45, 65, 89, 113, 120, 131, 142, 151, 169, 0}, {9, 18, 25, 45, 65, 89, 113, 120, 131, 142, 151, 169, 0}, {9, 18, 25, 45, 65, 89, 113, 120, 131, 142, 151, 169, 0}, 0, 6, 185, 187, {198,189,1692,0,0,0,0,0,0,0,0,0,0,0},{10751,222,0,0,0,0,0,0,0,0},{242,251,843,0,0,0,0,0,0,0,0,0},{257,269,848,0,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {3613, 1929, 1932, {3620, 3627, 3634, 3642, 3652, 3661, 3668}, {3677, 3681, 3685, 3689, 3693, 3697, 3701}, {2023, 2428, 2430, 3705, 2430, 2434, 2023}, {3707, 3715, 3724, 2696, 3730, 3734, 3739, 2716, 2723, 3744, 2741, 3752, 0}, {3707, 3715, 3724, 2696, 3730, 3734, 3739, 2716, 2723, 3744, 2741, 3752, 0}, {2759, 2763, 3761, 2772, 3730, 2776, 2780, 2784, 2788, 3765, 2796, 3769, 0}, {2759, 2763, 3761, 2772, 3730, 2776, 2780, 2784, 2788, 3765, 2796, 3769, 0}, 0, 0, 185, 187, {3773,3782,3789,3798,1692,1735,3809,0,0,0,0,0,0,0},{20186,20206,222,10751,0,0,0,0,0,0},{3594,242,843,251,0,0,0,0,0,0,0,0},{3602,257,848,269,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {37254, 872, 878, {3895, 3903, 3909, 3916, 3927, 3934, 3942}, {3950, 3955, 3960, 3965, 3971, 3976, 3981}, {2673, 2436, 2428, 2428, 3987, 3989, 2023}, {3991, 3997, 4005, 4011, 4017, 4022, 4028, 4034, 4041, 4052, 4060, 4070, 0}, {4080, 4086, 4094, 1012, 4100, 4105, 4111, 4117, 4124, 1050, 4135, 4145, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, 0, 1, 2566, 187, {1128,1139,189,2286,0,0,0,0,0,0,0,0,0,0},{29578,4239,4266,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{1286,0,0,0,0,0,0,0}},
+       {1, 0, 0, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {9, 18, 25, 45, 65, 89, 113, 120, 131, 142, 151, 169, 0}, {9, 18, 25, 45, 65, 89, 113, 120, 131, 142, 151, 169, 0}, {9, 18, 25, 45, 65, 89, 113, 120, 131, 142, 151, 169, 0}, {9, 18, 25, 45, 65, 89, 113, 120, 131, 142, 151, 169, 0}, 0, 6, 185, 187, {198,189,1692,0,0,0,0,0,0,0,0,0,0,0},{10751,222,0,0,0,0,0,0,0,0},{242,251,843,0,0,0,0,0,0,0,0,0},{257,269,848,0,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {3883, 872, 878, {3895, 3903, 3909, 3916, 3927, 3934, 3942}, {3950, 3955, 3960, 3965, 3971, 3976, 3981}, {2673, 2436, 2428, 2428, 3987, 3989, 2023}, {3991, 3997, 4005, 4011, 4017, 4022, 4028, 4034, 4041, 4052, 4060, 4070, 0}, {4080, 4086, 4094, 1012, 4100, 4105, 4111, 4117, 4124, 1050, 4135, 4145, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, 0, 1, 185, 187, {198,189,2286,1139,1692,0,0,0,0,0,0,0,0,0},{29578,4239,4266,0,0,0,0,0,0,0},{843,251,242,3594,0,0,0,0,0,0,0,0},{848,269,257,3602,0,0,0,0,0},{1286,0,0,0,0,0,0,0}},
+       {1, 0, 0, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {9, 18, 25, 45, 65, 89, 113, 120, 131, 142, 151, 169, 0}, {9, 18, 25, 45, 65, 89, 113, 120, 131, 142, 151, 169, 0}, {9, 18, 25, 45, 65, 89, 113, 120, 131, 142, 151, 169, 0}, {9, 18, 25, 45, 65, 89, 113, 120, 131, 142, 151, 169, 0}, 0, 6, 185, 187, {198,189,1692,0,0,0,0,0,0,0,0,0,0,0},{10751,222,0,0,0,0,0,0,0,0},{242,251,843,0,0,0,0,0,0,0,0,0},{257,269,848,0,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {3883, 872, 878, {3895, 3903, 3909, 3916, 3927, 3934, 3942}, {3950, 3955, 3960, 3965, 3971, 3976, 3981}, {2673, 2436, 2428, 2428, 3987, 3989, 2023}, {3991, 3997, 4005, 4011, 4017, 4022, 4028, 4034, 4041, 4052, 4060, 4070, 0}, {4080, 4086, 4094, 1012, 4100, 4105, 4111, 4117, 4124, 1050, 4135, 4145, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, 0, 0, 185, 187, {198,189,2286,1139,1692,0,0,0,0,0,0,0,0,0},{29578,4239,4266,0,0,0,0,0,0,0},{242,3594,843,251,0,0,0,0,0,0,0,0},{257,3602,848,269,0,0,0,0,0},{1286,278,0,0,0,0,0,0}},
+       {1, 0, 0, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {9, 18, 25, 45, 65, 89, 113, 120, 131, 142, 151, 169, 0}, {9, 18, 25, 45, 65, 89, 113, 120, 131, 142, 151, 169, 0}, {9, 18, 25, 45, 65, 89, 113, 120, 131, 142, 151, 169, 0}, {9, 18, 25, 45, 65, 89, 113, 120, 131, 142, 151, 169, 0}, 0, 6, 185, 187, {198,189,1692,0,0,0,0,0,0,0,0,0,0,0},{10751,222,0,0,0,0,0,0,0,0},{242,251,843,0,0,0,0,0,0,0,0,0},{257,269,848,0,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {289, 8151, 22114, {3620, 3627, 3634, 3642, 3652, 3661, 3668}, {3677, 3681, 3685, 3689, 3693, 3697, 3701}, {2023, 2428, 2430, 3705, 2430, 2434, 2023}, {3707, 3715, 3724, 2696, 3730, 3734, 3739, 2716, 2723, 3744, 2741, 3752, 0}, {3707, 3715, 3724, 2696, 3730, 3734, 3739, 2716, 2723, 3744, 2741, 3752, 0}, {2759, 2763, 3761, 2772, 3730, 2776, 2780, 2784, 2788, 3765, 2796, 3769, 0}, {2759, 2763, 3761, 2772, 3730, 2776, 2780, 2784, 2788, 3765, 2796, 3769, 0}, 0, 0, 2566, 187, {1128,1139,2293,4762,1692,0,0,0,0,0,0,0,0,0},{5505,1242,0,0,0,0,0,0,0,0},{251,843,242,0,0,0,0,0,0,0,0,0},{269,848,2326,257,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {37254, 872, 878, {3895, 3903, 3909, 3916, 3927, 3934, 3942}, {3950, 3955, 3960, 3965, 3971, 3976, 3981}, {2673, 2436, 2428, 2428, 3987, 3989, 2023}, {3991, 3997, 4005, 4011, 4017, 4022, 4028, 4034, 4041, 4052, 4060, 4070, 0}, {4080, 4086, 4094, 1012, 4100, 4105, 4111, 4117, 4124, 1050, 4135, 4145, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, 0, 0, 185, 187, {198,189,2286,1139,0,0,0,0,0,0,0,0,0,0},{29578,4266,0,0,0,0,0,0,0,0},{242,3594,843,251,0,0,0,0,0,0,0,0},{257,3602,848,269,0,0,0,0,0},{1286,0,0,0,0,0,0,0}},
+       {3883, 872, 878, {3895, 3903, 3909, 3916, 3927, 3934, 3942}, {3950, 3955, 3960, 3965, 3971, 3976, 3981}, {2673, 2436, 2428, 2428, 3987, 3989, 2023}, {3991, 3997, 4005, 4011, 4017, 4022, 4028, 4034, 4041, 4052, 4060, 4070, 0}, {4080, 4086, 4094, 1012, 4100, 4105, 4111, 4117, 4124, 1050, 4135, 4145, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, 0, 0, 185, 187, {198,189,37265,1692,0,0,0,0,0,0,0,0,0,0},{29578,0,0,0,0,0,0,0,0,0},{242,251,0,0,0,0,0,0,0,0,0,0},{257,269,0,0,0,0,0,0,0},{1286,0,0,0,0,0,0,0}},
+       {289, 8151, 22114, {3620, 3627, 3634, 3642, 3652, 3661, 3668}, {3677, 3681, 3685, 3689, 3693, 3697, 3701}, {2023, 2428, 2430, 3705, 2430, 2434, 2023}, {3707, 3715, 3724, 2696, 3730, 3734, 3739, 2716, 2723, 3744, 2741, 3752, 0}, {3707, 3715, 3724, 2696, 3730, 3734, 3739, 2716, 2723, 3744, 2741, 3752, 0}, {2759, 2763, 3761, 2772, 3730, 2776, 2780, 2784, 2788, 3765, 2796, 3769, 0}, {2759, 2763, 3761, 2772, 3730, 2776, 2780, 2784, 2788, 3765, 2796, 3769, 0}, 0, 0, 185, 187, {2277,2286,198,189,1692,0,0,0,0,0,0,0,0,0},{1207,1242,0,0,0,0,0,0,0,0},{3594,242,843,251,0,0,0,0,0,0,0,0},{3602,257,848,269,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {3883, 872, 878, {3895, 3903, 3909, 3916, 3927, 3934, 3942}, {3950, 3955, 3960, 3965, 3971, 3976, 3981}, {2673, 2436, 2428, 2428, 3987, 3989, 2023}, {3991, 3997, 4005, 4011, 4017, 4022, 4028, 4034, 4041, 4052, 4060, 4070, 0}, {4080, 4086, 4094, 1012, 4100, 4105, 4111, 4117, 4124, 1050, 4135, 4145, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, 0, 0, 185, 187, {198,189,37265,1692,0,0,0,0,0,0,0,0,0,0},{4211,0,0,0,0,0,0,0,0,0},{242,251,0,0,0,0,0,0,0,0,0,0},{257,269,0,0,0,0,0,0,0},{1286,0,0,0,0,0,0,0}},
+       {3883, 872, 878, {3895, 3903, 3909, 3916, 3927, 3934, 3942}, {3950, 3955, 3960, 3965, 3971, 3976, 3981}, {2673, 2436, 2428, 2428, 3987, 3989, 2023}, {3991, 3997, 4005, 4011, 4017, 4022, 4028, 4034, 4041, 4052, 4060, 4070, 0}, {4080, 4086, 4094, 1012, 4100, 4105, 4111, 4117, 4124, 1050, 4135, 4145, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, 0, 0, 185, 187, {198,189,37265,1692,0,0,0,0,0,0,0,0,0,0},{4211,0,0,0,0,0,0,0,0,0},{242,251,0,0,0,0,0,0,0,0,0,0},{257,269,0,0,0,0,0,0,0},{37276,0,0,0,0,0,0,0}},
+       {3883, 872, 878, {3895, 3903, 3909, 3916, 3927, 3934, 3942}, {3950, 3955, 3960, 3965, 3971, 3976, 3981}, {2673, 2436, 2428, 2428, 3987, 3989, 2023}, {3991, 3997, 4005, 4011, 4017, 4022, 4028, 4034, 4041, 4052, 4060, 4070, 0}, {4080, 4086, 4094, 1012, 4100, 4105, 4111, 4117, 4124, 1050, 4135, 4145, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, 0, 0, 185, 187, {198,189,37265,1692,0,0,0,0,0,0,0,0,0,0},{29578,0,0,0,0,0,0,0,0,0},{242,251,0,0,0,0,0,0,0,0,0,0},{257,269,0,0,0,0,0,0,0},{1286,0,0,0,0,0,0,0}},
+       {3613, 1929, 1932, {3895, 3903, 3909, 3916, 3927, 3934, 3942}, {3950, 3955, 3960, 3965, 3971, 3976, 3981}, {2673, 2436, 2428, 2428, 3987, 3989, 2023}, {3991, 3997, 4005, 4011, 4017, 4022, 4028, 4034, 4041, 4052, 4060, 4070, 0}, {4080, 4086, 4094, 1012, 4100, 4105, 4111, 4117, 4124, 1050, 4135, 4145, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, 0, 0, 185, 187, {3773,3782,3789,3798,1735,1692,3809,0,0,0,0,0,0,0},{20186,20206,222,10751,0,0,0,0,0,0},{3594,242,843,251,0,0,0,0,0,0,0,0},{3602,257,848,269,0,0,0,0,0},{1286,0,0,0,0,0,0,0}},
+       {20057, 36866, 36884, {36899, 36912, 36931, 36944, 36959, 36976, 10975}, {36987, 36994, 37001, 37008, 37015, 37022, 37029}, {456, 459, 37036, 465, 468, 459, 465}, {37039, 37052, 501, 510, 15858, 15865, 15874, 542, 37067, 37086, 37101, 37118, 0}, {37039, 37052, 501, 510, 15858, 15865, 15874, 542, 37067, 37086, 37101, 37118, 0}, {37135, 37142, 37149, 37156, 15858, 37163, 37170, 37177, 37184, 37191, 37198, 37205, 0}, {37135, 37142, 37149, 37156, 15858, 37163, 37170, 37177, 37184, 37191, 37198, 37205, 0}, 0, 1, 691, 187, {4753,4762,2266,1156,36736,1167,9806,1692,0,0,0,0,0,0},{2300,4769,2818,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {12109, 36682, 36692, {9187, 9196, 9208, 9215, 9223, 9233, 9239}, {9246, 9250, 9254, 9258, 9262, 9267, 9271}, {0, 0, 0, 0, 0, 0, 0}, {2438, 2445, 15168, 2459, 2465, 2469, 2474, 12088, 36700, 36710, 36718, 36727, 0}, {2438, 2445, 15168, 2459, 2465, 2469, 2474, 12088, 36700, 36710, 36718, 36727, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 12095, 2550, 2554, 2558, 2562, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 12095, 2550, 2554, 2558, 2562, 0}, 0, 1, 691, 187, {4753,4762,2266,1156,36736,1167,9806,1692,0,0,0,0,0,0},{2300,4769,2818,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {1921, 36866, 36884, {36899, 36912, 36931, 8714, 36959, 36976, 10975}, {36987, 36994, 37001, 37212, 37015, 37022, 37029}, {456, 459, 37036, 465, 468, 459, 465}, {37039, 37052, 501, 510, 15858, 37163, 37170, 542, 37067, 37086, 37101, 37118, 0}, {37039, 37052, 501, 510, 15858, 37163, 37170, 542, 37067, 37086, 37101, 37118, 0}, {37135, 37142, 37149, 37156, 15858, 37163, 37170, 37177, 37184, 37191, 37198, 37205, 0}, {37135, 37142, 37149, 37156, 15858, 37163, 37170, 37177, 37184, 37191, 37198, 37205, 0}, 0, 1, 691, 187, {9499,9517,0,0,0,0,0,0,0,0,0,0,0,0},{9561,9575,9590,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{36855,0,0,0,0,0,0,0}},
+       {1921, 36682, 36692, {12020, 36844, 9208, 12045, 9223, 9233, 9239}, {9246, 9250, 9254, 12066, 9262, 9267, 9271}, {9275, 9277, 9279, 9281, 9283, 9277, 9281}, {2438, 2445, 15168, 2459, 2465, 2538, 2542, 12088, 36700, 36710, 36718, 36727, 0}, {2438, 2445, 15168, 2459, 2465, 2538, 2542, 12088, 36700, 36710, 36718, 36727, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 12095, 2550, 2554, 2558, 2562, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 12095, 2550, 2554, 2558, 2562, 0}, 0, 1, 691, 187, {9499,9517,0,0,0,0,0,0,0,0,0,0,0,0},{9561,9575,9590,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{36855,0,0,0,0,0,0,0}},
+       {289, 1929, 1932, {35735, 35746, 35770, 35800, 35817, 35839, 35848}, {15057, 15060, 15065, 15071, 15075, 7736, 15080}, {6617, 6605, 6607, 6609, 6611, 6613, 6615}, {35859, 35872, 501, 35885, 521, 35896, 35905, 542, 35914, 35931, 35946, 35959, 0}, {35859, 35872, 501, 35885, 521, 35896, 35905, 542, 35914, 35931, 35946, 35959, 0}, {15231, 8135, 2530, 2534, 15179, 15235, 15239, 15243, 15247, 2554, 15251, 15255, 0}, {15231, 8135, 2530, 2534, 15179, 15235, 15239, 15243, 15247, 2554, 15251, 15255, 0}, 0, 1, 691, 187, {1156,1167,4762,189,1692,0,0,0,0,0,0,0,0,0},{1242,5505,0,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{269,0,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {1327, 1340, 1347, {1354, 1364, 1374, 1384, 1394, 1404, 1414}, {1424, 1431, 1438, 1445, 1452, 1459, 1466}, {1473, 1477, 1481, 1485, 1489, 1493, 1497}, {1501, 1508, 1515, 1522, 1529, 1536, 1543, 1550, 1557, 1564, 1571, 1581, 0}, {1501, 1508, 1515, 1522, 1529, 1536, 1543, 1550, 1557, 1564, 1571, 1581, 0}, {1591, 1596, 1601, 1606, 1611, 1616, 1621, 1626, 1631, 1636, 1642, 1648, 0}, {1591, 1596, 1601, 1606, 1611, 1616, 1621, 1626, 1631, 1636, 1642, 1648, 0}, 0, 0, 185, 187, {1654,1663,1672,1681,1692,1703,1714,1721,1728,1735,0,0,0,0},{1744,1766,1794,1822,1837,0,0,0,0,0},{843,251,1858,1866,0,0,0,0,0,0,0,0},{848,269,1875,1886,0,0,0,0,0},{1898,1914,0,0,0,0,0,0}},
+       {1921, 35642, 35647, {2345, 10060, 35652, 2368, 2375, 2383, 35659}, {2398, 35667, 35672, 2411, 2415, 2419, 35676}, {2023, 2428, 2430, 2432, 2430, 2434, 2436}, {2438, 2445, 4887, 2459, 4898, 2469, 2474, 2479, 2486, 2496, 2504, 6121, 0}, {2438, 2445, 4887, 2459, 4898, 2469, 2474, 2479, 2486, 2496, 2504, 6121, 0}, {2522, 2526, 2530, 2534, 4898, 2538, 2542, 2546, 2550, 2554, 2558, 7515, 0}, {2522, 2526, 2530, 2534, 4898, 2538, 2542, 2546, 2550, 2554, 2558, 7515, 0}, 2, 1, 691, 187, {1156,7519,1167,4762,2804,1692,0,0,0,0,0,0,0,0},{2300,4769,0,0,0,0,0,0,0,0},{251,843,7529,7539,4288,2321,7550,7561,0,0,0,0},{269,848,7571,7585,4302,2337,7598,7612,0},{1301,7625,7635,0,0,0,0,0}},
+       {12109, 36682, 36692, {9187, 9196, 9208, 9215, 9223, 9233, 9239}, {9246, 9250, 9254, 9258, 9262, 9267, 9271}, {0, 0, 0, 0, 0, 0, 0}, {2438, 2445, 15168, 2459, 2465, 2469, 2474, 12088, 36700, 36710, 36718, 36727, 0}, {2438, 2445, 15168, 2459, 2465, 2469, 2474, 12088, 36700, 36710, 36718, 36727, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 12095, 2550, 2554, 2558, 2562, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 12095, 2550, 2554, 2558, 2562, 0}, 0, 1, 691, 187, {4753,4762,2266,1156,36736,1167,9806,1692,0,0,0,0,0,0},{2300,4769,2818,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 1929, 1932, {14968, 14974, 14988, 15011, 15025, 15041, 15048}, {15057, 15060, 15065, 15071, 15075, 7736, 15080}, {6617, 6605, 6607, 6609, 6611, 6613, 6615}, {15084, 15091, 10374, 15098, 3730, 15104, 15110, 15116, 15123, 15132, 15140, 15147, 0}, {15154, 15161, 15168, 15173, 15179, 15183, 15188, 15193, 15200, 15209, 15217, 15224, 0}, {15231, 8135, 2530, 2534, 15179, 15235, 15239, 15243, 15247, 2554, 15251, 15255, 0}, {15231, 8135, 2530, 2534, 15179, 15235, 15239, 15243, 15247, 2554, 15251, 15255, 0}, 0, 1, 691, 187, {1156,1167,4762,189,1692,0,0,0,0,0,0,0,0,0},{15259,0,0,0,0,0,0,0,0,0},{251,843,0,0,0,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 1929, 1932, {35972, 35987, 36002, 36017, 36034, 36051, 36060}, {36071, 36078, 36085, 36092, 36099, 19832, 36106}, {36113, 19439, 8811, 8814, 8808, 19436, 19846}, {13229, 13240, 8845, 13253, 8867, 13264, 13271, 8892, 13278, 13293, 13306, 13317, 0}, {13229, 13240, 8845, 13253, 8867, 13264, 13271, 8892, 13278, 13293, 13306, 13317, 0}, {13330, 13337, 13344, 13351, 8867, 13264, 13271, 13358, 13365, 13372, 13379, 13386, 0}, {13330, 13337, 13344, 13351, 8867, 13264, 13271, 13358, 13365, 13372, 13379, 13386, 0}, 0, 1, 691, 187, {1156,1167,36116,4762,189,1692,0,0,0,0,0,0,0,0},{36127,1242,5505,0,0,0,0,0,0,0},{251,843,0,0,0,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {5619, 26213, 26218, {26223, 26230, 26241, 26254, 26267, 26278, 26291}, {26302, 26307, 26312, 26317, 26322, 26327, 26332}, {6605, 6607, 6609, 6611, 6613, 6615, 6617}, {26337, 26363, 26391, 26421, 26451, 26477, 26507, 26533, 26561, 26585, 26613, 26650, 0}, {26337, 26363, 26391, 26421, 26451, 26477, 26507, 26533, 26561, 26585, 26613, 26650, 0}, {26689, 26701, 26713, 26725, 26737, 26749, 26761, 26773, 26785, 26797, 26810, 26823, 0}, {26689, 26701, 26713, 26725, 26737, 26749, 26761, 26773, 26785, 26797, 26810, 26823, 0}, 0, 0, 2566, 187, {1692,0,0,0,0,0,0,0,0,0,0,0,0,0},{26836,26890,0,0,0,0,0,0,0,0},{251,843,0,0,0,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{26926,0,0,0,0,0,0,0}},
+       {1327, 1340, 1347, {1354, 1364, 1374, 1384, 1394, 1404, 1414}, {35236, 35243, 35250, 35257, 35264, 35271, 35278}, {1473, 1477, 1481, 1485, 1489, 1493, 1497}, {1591, 1596, 1601, 1606, 1611, 1616, 1621, 1626, 1631, 1636, 1642, 1648, 0}, {1591, 1596, 1601, 1606, 1611, 1616, 1621, 1626, 1631, 1636, 1642, 1648, 0}, {1591, 1596, 1601, 1606, 1611, 1616, 1621, 1626, 1631, 1636, 1642, 1648, 0}, {1591, 1596, 1601, 1606, 1611, 1616, 1621, 1626, 1631, 1636, 1642, 1648, 0}, 0, 0, 185, 187, {2277,2286,189,1714,1735,1654,1681,1692,0,0,0,0,0,0},{1744,6632,1822,1837,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{1898,1914,0,0,0,0,0,0}},
+       {1327, 1340, 1347, {1354, 1364, 1374, 1384, 1394, 1404, 1414}, {35236, 35243, 35250, 35257, 35264, 35271, 35278}, {1473, 1477, 1481, 1485, 1489, 1493, 1497}, {1591, 1596, 1601, 1606, 1611, 1616, 1621, 1626, 1631, 1636, 1642, 1648, 0}, {1591, 1596, 1601, 1606, 1611, 1616, 1621, 1626, 1631, 1636, 1642, 1648, 0}, {1591, 1596, 1601, 1606, 1611, 1616, 1621, 1626, 1631, 1636, 1642, 1648, 0}, {1591, 1596, 1601, 1606, 1611, 1616, 1621, 1626, 1631, 1636, 1642, 1648, 0}, 0, 0, 185, 187, {2277,2286,189,1714,1735,1654,1681,1692,0,0,0,0,0,0},{1744,6632,1822,1837,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{1898,1914,0,0,0,0,0,0}},
+       {1921, 7281, 7286, {2345, 2353, 2360, 2368, 2375, 2383, 2390}, {7485, 7490, 7494, 7498, 7502, 7506, 7510}, {2023, 2428, 2430, 2432, 2430, 2434, 2436}, {2438, 2445, 4887, 2459, 4898, 2469, 2474, 2479, 2486, 2496, 2504, 6121, 0}, {2438, 2445, 4887, 2459, 4898, 2469, 2474, 2479, 2486, 2496, 2504, 6121, 0}, {2522, 2526, 2530, 2534, 4898, 2538, 2542, 2546, 2550, 2554, 2558, 7515, 0}, {2522, 2526, 2530, 2534, 4898, 2538, 2542, 2546, 2550, 2554, 2558, 7515, 0}, 2, 1, 691, 187, {1156,7519,1167,4762,2804,1692,0,0,0,0,0,0,0,0},{2300,4769,0,0,0,0,0,0,0,0},{251,843,7529,7539,4288,2321,7550,7561,0,0,0,0},{269,848,7571,7585,4302,2337,7598,7612,0},{1301,7625,7635,0,0,0,0,0}},
+       {1921, 36866, 36884, {36899, 36912, 36931, 8714, 36959, 36976, 10975}, {36987, 36994, 37001, 37212, 37015, 37022, 37029}, {456, 459, 37036, 465, 468, 459, 465}, {37039, 37052, 501, 510, 15858, 37163, 37170, 542, 37067, 37086, 37101, 37118, 0}, {37039, 37052, 501, 510, 15858, 37163, 37170, 542, 37067, 37086, 37101, 37118, 0}, {37135, 37142, 37149, 37156, 15858, 37163, 37170, 37177, 37184, 37191, 37198, 37205, 0}, {37135, 37142, 37149, 37156, 15858, 37163, 37170, 37177, 37184, 37191, 37198, 37205, 0}, 0, 1, 691, 187, {9499,9517,0,0,0,0,0,0,0,0,0,0,0,0},{9561,9575,9590,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{36855,0,0,0,0,0,0,0}},
+       {1, 13053, 13065, {13077, 13092, 13107, 13122, 13139, 13158, 13169}, {13180, 13187, 13194, 13201, 13208, 13215, 13222}, {0, 0, 0, 0, 0, 0, 0}, {13229, 13240, 8845, 13253, 8867, 13264, 13271, 8892, 13278, 13293, 13306, 13317, 0}, {13229, 13240, 8845, 13253, 8867, 13264, 13271, 8892, 13278, 13293, 13306, 13317, 0}, {13330, 13337, 13344, 13351, 8867, 13264, 13271, 13358, 13365, 13372, 13379, 13386, 0}, {13330, 13337, 13344, 13351, 8867, 13264, 13271, 13358, 13365, 13372, 13379, 13386, 0}, 0, 1, 691, 187, {1156,1167,4762,1128,189,0,0,0,0,0,0,0,0,0},{13393,13411,0,0,0,0,0,0,0,0},{251,843,0,0,0,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {20220, 1929, 1932, {20227, 20237, 20246, 20255, 20266, 20276, 20281}, {20288, 20294, 20299, 20304, 20309, 10828, 20313}, {20318, 2673, 2023, 7736, 2018, 3987, 2023}, {15084, 15091, 10374, 15098, 3730, 20320, 20325, 20330, 15123, 15132, 15140, 15147, 0}, {15084, 15091, 10374, 15098, 3730, 20320, 20325, 20330, 15123, 15132, 15140, 15147, 0}, {20337, 20342, 3761, 2772, 3730, 20320, 20325, 20346, 10812, 2792, 20350, 20355, 0}, {20337, 20342, 3761, 2772, 3730, 20320, 20325, 20346, 10812, 2792, 20350, 20355, 0}, 0, 1, 691, 187, {1156,0,0,0,0,0,0,0,0,0,0,0,0,0},{20359,1242,5505,0,0,0,0,0,0,0},{251,843,0,0,0,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 30915, 30925, {30938, 30945, 30951, 30958, 30964, 30970, 30978}, {30988, 30992, 30996, 31000, 31004, 31008, 31012}, {12842, 12842, 12842, 12842, 12842, 12842, 12842}, {31018, 31027, 10131, 31036, 31042, 31048, 31054, 31061, 31067, 31076, 31085, 31093, 0}, {31018, 31027, 10131, 31036, 31042, 31048, 31054, 31061, 31067, 31076, 31085, 31093, 0}, {31102, 31106, 3761, 31110, 3730, 31114, 31118, 31122, 31127, 31131, 31137, 31141, 0}, {31102, 31106, 3761, 31110, 3730, 31114, 31118, 31122, 31127, 31131, 31137, 31141, 0}, 0, 0, 2566, 187, {1128,1139,1692,0,0,0,0,0,0,0,0,0,0,0},{10751,222,0,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {289, 0, 0, {31916, 31923, 31931, 31938, 31945, 31953, 31961}, {31968, 31971, 31974, 31977, 31980, 31983, 31986}, {2436, 2436, 2430, 2436, 12842, 3987, 12842}, {31989, 31997, 32007, 32013, 32021, 32026, 32031, 32036, 32043, 20167, 32051, 32059, 0}, {31989, 31997, 32007, 32013, 32021, 32026, 32031, 32036, 32043, 20167, 32051, 32059, 0}, {2759, 32067, 3761, 32071, 3730, 31114, 31118, 32075, 3701, 2792, 32079, 16383, 0}, {2759, 32067, 3761, 32071, 3730, 31114, 31118, 32075, 3701, 2792, 32079, 16383, 0}, 0, 0, 185, 187, {2277,2286,189,198,1735,1692,3809,0,0,0,0,0,0,0},{20186,20206,222,10751,0,0,0,0,0,0},{3594,242,843,251,0,0,0,0,0,0,0,0},{3602,257,848,269,0,0,0,0,0},{278,0,0,0,0,0,0,0}}
 };
 
 
 static const NumberFormatEntry number_format_entries [] = {
-       {754, 36825, 36827, 36830, 36827, 36830, 36833, 36843, 36846, 36861, 36864, 36874, 2541, 36883, 3, 2, 0, 0, 3, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 36888, 36825, 36888, 36825, 36888, 36891, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 754, 36825, 754, 36825, 754, 36909, 36897, 36899, 36903, 36913, 36922, 2541, 36907, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 754, 36825, 754, 36825, 36930, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 2, 0, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 754, 36825, 754, 36825, 36930, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 2, 0, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 36888, 36825, 36888, 36825, 36888, 36933, 36897, 36899, 36903, 36937, 36949, 2541, 36907, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 754, 36825, 754, 36825, 754, 36961, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 12, 2, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 754, 36825, 754, 36825, 754, 36909, 36897, 36899, 36903, 36964, 36975, 2541, 36907, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 754, 36825, 754, 36825, 754, 36909, 36897, 36899, 36903, 36986, 37000, 2541, 36907, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 754, 36825, 754, 36825, 37013, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 0, 0, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 754, 36825, 36888, 36825, 36888, 36909, 36897, 36899, 36903, 37015, 37025, 2541, 36907, 8, 3, 0, 0, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 36888, 36825, 36888, 36825, 36888, 36909, 36897, 37034, 36903, 36864, 36874, 2541, 36907, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 36888, 36825, 36888, 36825, 36888, 36909, 36897, 36899, 36903, 37043, 37051, 2541, 36907, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 754, 36825, 754, 36825, 37059, 36897, 36899, 36903, 37063, 36874, 37076, 37081, 2, 2, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 36888, 36825, 36888, 36825, 36888, 37086, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 8, 3, 0, 0, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 754, 36825, 754, 36825, 754, 36961, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 8, 3, 1, 1, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 754, 36825, 754, 36825, 754, 36909, 36897, 36899, 36903, 37015, 37089, 2541, 36907, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 754, 36825, 754, 36825, 37099, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 1, 0, 1, 1, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 754, 36825, 754, 36825, 37103, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 1, 0, 0, 0, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 754, 36825, 754, 36825, 754, 36909, 36897, 36899, 36903, 37107, 37117, 2541, 36907, 12, 2, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 36888, 36825, 36888, 36825, 36888, 0, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 12, 2, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 36888, 36825, 36888, 36825, 36888, 37126, 36897, 36899, 36903, 37130, 37149, 2541, 36907, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 754, 36825, 754, 36825, 754, 37168, 36897, 36899, 36903, 37015, 37089, 2541, 36907, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 37171, 754, 37173, 754, 37173, 37177, 36897, 36899, 36903, 37181, 37190, 2541, 36907, 2, 2, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 754, 36825, 754, 36825, 754, 0, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 36888, 36825, 36888, 36825, 36888, 37199, 36897, 37207, 36903, 37224, 37252, 2541, 36907, 5, 1, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 754, 36825, 754, 36825, 754, 37279, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 8, 3, 1, 1, 2, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 36888, 36825, 36888, 36825, 36888, 36909, 36897, 36899, 36903, 36937, 36949, 2541, 36907, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 754, 36825, 36888, 36825, 36888, 37282, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 5, 1, 0, 0, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 754, 36825, 36888, 36825, 36888, 36961, 36897, 37288, 36903, 36864, 36874, 2541, 36907, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 754, 36825, 754, 36825, 37295, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 1, 0, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 754, 36825, 754, 36825, 754, 37299, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 8, 3, 2, 2, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 754, 36825, 754, 36825, 37303, 36897, 37306, 36903, 37329, 36874, 37345, 37353, 3, 0, 0, 0, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 754, 36825, 754, 36825, 754, 37361, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 0, 0, 0, 0, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 36888, 36825, 36888, 36825, 36888, 37364, 36897, 37368, 36903, 36864, 36874, 2541, 36907, 5, 1, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 36888, 36825, 36888, 36825, 36888, 37385, 36897, 0, 36903, 36864, 36874, 2541, 36907, 8, 3, 0, 0, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 754, 36825, 754, 36825, 754, 36909, 36897, 36899, 36903, 37389, 37403, 2541, 36907, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36888, 36825, 36888, 36825, 36888, 36909, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 36888, 36825, 36888, 36825, 36888, 36909, 36897, 37416, 36903, 37430, 37442, 2541, 36907, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 754, 36825, 36888, 36825, 36888, 37453, 36897, 36899, 36903, 37456, 37467, 2541, 36907, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37477, 36888, 36825, 36825, 36825, 36825, 0, 36897, 0, 36903, 36864, 36874, 2541, 36907, 8, 3, 1, 1, 1, 2, 2, 2, {3, 0}, {3, 0}, {3, 0}},
-       {239, 36825, 36827, 36830, 36827, 36830, 37479, 36843, 37488, 36861, 37499, 36874, 37514, 37353, 3, 2, 0, 0, 3, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 754, 36825, 754, 36825, 754, 37521, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 8, 3, 0, 0, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 36825, 754, 36825, 754, 37525, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 8, 3, 0, 0, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 36888, 36825, 754, 36825, 754, 0, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 754, 36825, 754, 36825, 754, 36909, 36897, 36899, 36903, 37531, 37541, 2541, 36907, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 754, 36825, 754, 36825, 754, 37550, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 36825, 36888, 36825, 36888, 10707, 36897, 0, 36903, 36864, 36874, 2541, 36907, 2, 2, 2, 2, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 36825, 36888, 36825, 36888, 10707, 36897, 0, 36903, 36864, 36874, 2541, 36907, 2, 2, 2, 2, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 754, 36825, 754, 36825, 10707, 36897, 37557, 36903, 36864, 36874, 2541, 36907, 2, 2, 2, 2, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 36825, 36888, 36825, 36888, 10707, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 2, 2, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 36888, 36825, 36888, 36825, 36888, 0, 36897, 37563, 36903, 36864, 36874, 2541, 36907, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 754, 36825, 754, 36825, 754, 36961, 36897, 37288, 36903, 36864, 36874, 2541, 36907, 12, 2, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 754, 36825, 754, 36825, 37604, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 12, 2, 0, 0, 1, 2, 2, 2, {3, 2}, {3, 2}, {3, 2}},
-       {754, 36825, 754, 36825, 754, 36825, 36909, 36897, 0, 36903, 36864, 36874, 2541, 36907, 1, 0, 2, 2, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 36888, 36825, 36888, 36825, 36888, 36909, 36897, 37288, 36903, 36864, 36874, 2541, 36907, 12, 2, 2, 2, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 754, 36825, 754, 36825, 36909, 36897, 0, 36903, 36864, 36874, 2541, 36907, 1, 0, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 754, 36825, 754, 36825, 37608, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 0, 0, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {2541, 36888, 36825, 36888, 36825, 36888, 0, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 1, 0, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {2541, 36888, 36825, 36888, 36825, 36888, 0, 36897, 37611, 36903, 36864, 36874, 2541, 36907, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 754, 36825, 754, 36825, 37628, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 0, 0, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 36888, 36827, 36830, 36827, 36830, 0, 36843, 36899, 36861, 36864, 36874, 2541, 36907, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 36825, 36825, 36825, 36825, 37632, 36897, 37639, 36903, 36864, 36874, 2541, 36907, 12, 2, 2, 2, 1, 2, 2, 2, {3, 2}, {3, 2}, {3, 2}},
-       {754, 36825, 36827, 36825, 36827, 36825, 0, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 12, 2, 0, 0, 1, 2, 2, 2, {3, 2}, {3, 2}, {3, 2}},
-       {754, 36825, 754, 36825, 754, 36825, 37604, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 12, 2, 0, 0, 1, 2, 2, 2, {3, 2}, {3, 2}, {3, 2}},
-       {754, 36825, 754, 36825, 754, 36825, 37604, 36897, 0, 36903, 36864, 36874, 2541, 36907, 12, 2, 0, 0, 1, 2, 2, 2, {3, 2}, {3, 2}, {3, 2}},
-       {754, 36825, 754, 36825, 754, 36825, 37604, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 12, 2, 0, 0, 1, 2, 2, 2, {3, 2}, {3, 2}, {3, 2}},
-       {754, 36825, 754, 36825, 754, 36825, 37604, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 12, 2, 0, 0, 1, 2, 2, 2, {3, 2}, {3, 2}, {3, 2}},
-       {754, 36825, 754, 36825, 754, 36825, 37604, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 12, 2, 0, 0, 1, 2, 2, 2, {3, 2}, {3, 2}, {3, 2}},
-       {754, 36825, 754, 36825, 754, 36825, 37604, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 12, 2, 2, 2, 1, 2, 2, 2, {3, 2}, {3, 2}, {3, 2}},
-       {754, 36825, 36825, 36825, 36825, 36825, 37604, 36897, 0, 36903, 36864, 36874, 2541, 36907, 12, 1, 1, 1, 1, 2, 2, 2, {3, 2}, {3, 2}, {3, 2}},
-       {754, 36825, 754, 36825, 754, 36825, 37604, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 12, 2, 0, 0, 1, 2, 2, 2, {3, 2}, {3, 2}, {3, 2}},
-       {36825, 36888, 754, 36825, 754, 36825, 0, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 5, 1, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 754, 36825, 754, 36825, 36930, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 2, 0, 1, 1, 1, 2, 2, 2, {3, 0}, {3, 0}, {3, 0}},
-       {754, 36825, 754, 36825, 754, 36825, 37666, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 1, 0, 2, 2, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 36825, 754, 36825, 754, 37669, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 5, 1, 1, 1, 2, 2, 2, 2, {3, -1}, {3, 0}, {3, 0}},
-       {754, 36825, 36825, 754, 36825, 754, 37673, 36897, 37677, 36903, 36864, 36874, 2541, 36907, 4, 1, 0, 0, 0, 0, 2, 2, {3, 0}, {3, 0}, {3, 0}},
-       {36825, 754, 36825, 754, 36825, 754, 36909, 36897, 36899, 36903, 37015, 37025, 2541, 36907, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 36825, 36825, 36825, 36825, 37604, 36897, 0, 36903, 36864, 36874, 2541, 36907, 12, 2, 0, 0, 1, 2, 2, 2, {3, 2}, {3, 2}, {3, 2}},
-       {754, 36825, 754, 36825, 754, 36825, 37714, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 14, 2, 0, 0, 1, 2, 2, 2, {3, -1}, {3, 2}, {3, 2}},
-       {754, 36825, 754, 36825, 754, 36825, 37722, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 1, 0, 1, 1, 1, 2, 1, 1, {3, 0}, {3, 0}, {3, 0}},
-       {754, 36825, 36825, 36888, 36825, 36888, 0, 36897, 0, 36903, 37043, 37051, 2541, 36907, 8, 3, 0, 0, 3, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 754, 36825, 754, 36825, 37729, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 1, 0, 1, 1, 1, 2, 2, 2, {3, -1}, {3, 2}, {3, 2}},
-       {36827, 36830, 36827, 36830, 36827, 36830, 37742, 36843, 0, 36903, 36864, 36874, 2541, 36907, 3, 0, 4, 2, 3, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 754, 36825, 754, 36825, 37745, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 0, 0, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 754, 36825, 754, 36825, 0, 36897, 0, 36903, 36864, 36874, 2541, 36907, 2, 2, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 36825, 36825, 36825, 36825, 37749, 36897, 0, 36903, 36864, 36874, 2541, 36907, 2, 2, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 36825, 36888, 36825, 36888, 10707, 36897, 0, 36903, 36864, 36874, 2541, 36907, 2, 2, 2, 2, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 754, 36825, 754, 36825, 754, 36961, 36897, 37288, 36903, 36864, 36874, 2541, 36907, 12, 2, 0, 0, 1, 2, 2, 2, {3, 0}, {3, 0}, {3, 0}},
-       {754, 36825, 36825, 36825, 36825, 36825, 37749, 36897, 0, 36903, 36864, 36874, 2541, 36907, 2, 2, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 754, 36825, 754, 36825, 36930, 36897, 0, 36903, 36864, 36874, 2541, 36907, 2, 0, 1, 1, 1, 2, 2, 2, {3, -1}, {3, 0}, {3, 0}},
-       {36825, 36888, 36825, 36888, 36825, 36888, 36909, 36897, 0, 36903, 36864, 36874, 2541, 36907, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 36888, 754, 37173, 754, 37173, 0, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 36888, 36825, 36825, 36825, 36825, 37199, 36897, 0, 36903, 36864, 36874, 2541, 36907, 5, 1, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 36888, 36825, 754, 36825, 754, 37753, 36897, 0, 36903, 36864, 36874, 2541, 36907, 2, 2, 0, 0, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 754, 36825, 754, 36825, 37666, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 1, 0, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 36827, 36830, 36827, 36830, 36833, 36843, 36846, 36861, 36864, 36874, 2541, 36883, 3, 2, 0, 0, 3, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 36888, 36825, 36888, 36825, 36888, 36891, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 754, 36825, 754, 36825, 754, 36909, 36897, 36899, 36903, 36913, 36922, 2541, 36907, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 754, 36825, 754, 36825, 37756, 36897, 37760, 36903, 36864, 36874, 2541, 36907, 1, 0, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 36888, 36825, 36888, 36825, 36888, 36933, 36897, 36899, 36903, 36937, 36949, 2541, 36907, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 754, 36825, 754, 36825, 754, 36961, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 12, 2, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 754, 36825, 754, 36825, 754, 36909, 36897, 36899, 36903, 36964, 36975, 2541, 36907, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 754, 36825, 754, 36825, 754, 36909, 36897, 36899, 36903, 36986, 37000, 2541, 36907, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 754, 36825, 754, 36825, 37013, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 0, 0, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 36888, 36825, 36888, 36825, 36888, 36909, 36897, 37034, 36903, 36864, 36874, 2541, 36907, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 36888, 36825, 36888, 36825, 36888, 36909, 36897, 36899, 36903, 37043, 37051, 2541, 36907, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 754, 36825, 754, 36825, 37059, 36897, 36899, 36903, 37063, 36874, 37076, 37081, 2, 2, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 36888, 36825, 36888, 36825, 36888, 37086, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 8, 3, 0, 0, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 754, 36825, 754, 36825, 754, 36961, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 8, 3, 1, 1, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 754, 36825, 754, 36825, 754, 36909, 36897, 36899, 36903, 37015, 37089, 2541, 36907, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 754, 36825, 754, 36825, 37099, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 1, 0, 1, 1, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 754, 36825, 754, 36825, 37103, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 1, 0, 0, 0, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 754, 36825, 754, 36825, 754, 36909, 36897, 36899, 36903, 37107, 37117, 2541, 36907, 12, 2, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 36888, 36825, 36888, 36825, 36888, 36961, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 12, 2, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 36888, 36825, 36888, 36825, 36888, 37126, 36897, 36899, 36903, 37130, 37149, 2541, 36907, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 754, 36825, 754, 36825, 754, 37168, 36897, 36899, 36903, 37015, 37089, 2541, 36907, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 37171, 754, 37173, 754, 37173, 37177, 36897, 36899, 36903, 37181, 37190, 2541, 36907, 2, 2, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 754, 36825, 754, 36825, 754, 0, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 36888, 36825, 36888, 36825, 36888, 37199, 36897, 37207, 36903, 37224, 37252, 2541, 36907, 5, 1, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 754, 36825, 754, 36825, 754, 37279, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 8, 3, 1, 1, 2, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 36888, 36825, 36888, 36825, 36888, 36909, 36897, 36899, 36903, 36937, 36949, 2541, 36907, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 754, 36825, 36888, 36825, 36888, 37282, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 5, 1, 0, 0, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 754, 36825, 36888, 36825, 36888, 36961, 36897, 37288, 36903, 36864, 36874, 2541, 36907, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 754, 36825, 754, 36825, 37295, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 1, 0, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 754, 36825, 754, 36825, 754, 37299, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 8, 3, 2, 2, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 754, 36825, 754, 36825, 37303, 36897, 37306, 36903, 37329, 36874, 37345, 37353, 3, 0, 0, 0, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 754, 36825, 754, 36825, 754, 37361, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 0, 0, 0, 0, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 36888, 36825, 36888, 36825, 36888, 37364, 36897, 37368, 36903, 36864, 36874, 2541, 36907, 5, 1, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 36888, 36825, 36888, 36825, 36888, 37385, 36897, 0, 36903, 36864, 36874, 2541, 36907, 8, 3, 0, 0, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 754, 36825, 754, 36825, 754, 36909, 36897, 36899, 36903, 37389, 37403, 2541, 36907, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36888, 36825, 36888, 36825, 36888, 36909, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 36888, 36825, 36888, 36825, 36888, 36909, 36897, 37416, 36903, 37430, 37442, 2541, 36907, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 754, 36825, 36888, 36825, 36888, 37453, 36897, 36899, 36903, 37456, 37467, 2541, 36907, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37477, 36888, 36825, 36825, 36825, 36825, 37770, 36897, 0, 36903, 36864, 36874, 2541, 36907, 8, 3, 1, 1, 1, 2, 2, 2, {3, 0}, {3, 0}, {3, 0}},
-       {239, 36825, 36827, 36830, 36827, 36830, 37479, 36843, 37488, 36861, 37499, 36874, 37514, 37353, 3, 2, 0, 0, 3, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 754, 36825, 754, 36825, 754, 37521, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 8, 3, 0, 0, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 36825, 754, 36825, 754, 37525, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 8, 3, 0, 0, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 36888, 36825, 754, 36825, 754, 37777, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 754, 36825, 754, 36825, 754, 36909, 36897, 36899, 36903, 37531, 37541, 2541, 36907, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 754, 36825, 754, 36825, 754, 37550, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 36825, 36888, 36825, 36888, 10707, 36897, 0, 36903, 36864, 36874, 2541, 36907, 2, 2, 2, 2, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 36825, 36888, 36825, 36888, 10707, 36897, 0, 36903, 36864, 36874, 2541, 36907, 2, 2, 2, 2, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 754, 36825, 754, 36825, 10707, 36897, 37557, 36903, 36864, 36874, 2541, 36907, 2, 2, 2, 2, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 36825, 36888, 36825, 36888, 10707, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 2, 2, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 36888, 36825, 36888, 36825, 36888, 0, 36897, 37563, 36903, 36864, 36874, 2541, 36907, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 754, 36825, 754, 36825, 754, 36961, 36897, 37288, 36903, 36864, 36874, 2541, 36907, 12, 2, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 754, 36825, 754, 36825, 37604, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 12, 2, 0, 0, 1, 2, 2, 2, {3, 2}, {3, 2}, {3, 2}},
-       {754, 36825, 754, 36825, 754, 36825, 36909, 36897, 0, 36903, 36864, 36874, 2541, 36907, 1, 0, 2, 2, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 36888, 36825, 36888, 36825, 36888, 36961, 36897, 37288, 36903, 36864, 36874, 2541, 36907, 12, 2, 2, 2, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 754, 36825, 754, 36825, 37628, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 0, 0, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 36888, 36827, 36830, 36827, 36830, 37782, 36843, 36899, 36861, 36864, 36874, 2541, 36907, 8, 3, 1, 1, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 36825, 36825, 36825, 36825, 37604, 36897, 37639, 36903, 36864, 36874, 2541, 36907, 12, 2, 2, 2, 1, 2, 2, 2, {3, 2}, {3, 2}, {3, 2}},
-       {754, 36825, 754, 36825, 754, 36825, 37604, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 12, 2, 0, 0, 1, 2, 2, 2, {3, 2}, {3, 2}, {3, 2}},
-       {754, 36825, 754, 36825, 754, 36825, 37604, 36897, 0, 36903, 36864, 36874, 2541, 36907, 12, 2, 0, 0, 1, 2, 2, 2, {3, 2}, {3, 2}, {3, 2}},
-       {754, 36825, 754, 36825, 754, 36825, 37604, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 12, 2, 0, 0, 1, 2, 2, 2, {3, 2}, {3, 2}, {3, 2}},
-       {754, 36825, 754, 36825, 754, 36825, 37604, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 12, 2, 0, 0, 1, 2, 2, 2, {3, 2}, {3, 2}, {3, 2}},
-       {754, 36825, 754, 36825, 754, 36825, 37604, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 12, 2, 0, 0, 1, 2, 2, 2, {3, 2}, {3, 2}, {3, 2}},
-       {754, 36825, 754, 36825, 754, 36825, 37604, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 12, 2, 2, 2, 1, 2, 2, 2, {3, 2}, {3, 2}, {3, 2}},
-       {754, 36825, 36825, 36825, 36825, 36825, 37604, 36897, 0, 36903, 36864, 36874, 2541, 36907, 12, 1, 1, 1, 1, 2, 2, 2, {3, 2}, {3, 2}, {3, 2}},
-       {754, 36825, 754, 36825, 754, 36825, 37604, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 12, 2, 0, 0, 1, 2, 2, 2, {3, 2}, {3, 2}, {3, 2}},
-       {754, 36825, 754, 36825, 754, 36825, 36930, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 2, 0, 1, 1, 1, 2, 2, 2, {3, 0}, {3, 0}, {3, 0}},
-       {754, 36825, 754, 36825, 754, 36825, 37666, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 1, 0, 2, 2, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 36825, 754, 36825, 754, 37669, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 5, 1, 1, 1, 2, 2, 2, 2, {3, -1}, {3, 0}, {3, 0}},
-       {754, 36825, 36825, 754, 36825, 754, 37673, 36897, 37677, 36903, 36864, 36874, 2541, 36907, 4, 1, 0, 0, 0, 0, 2, 2, {3, 0}, {3, 0}, {3, 0}},
-       {36825, 754, 36825, 754, 36825, 754, 36909, 36897, 36899, 36903, 37015, 37025, 2541, 36907, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 36825, 36825, 36825, 36825, 37604, 36897, 0, 36903, 36864, 36874, 2541, 36907, 12, 2, 0, 0, 1, 2, 2, 2, {3, 2}, {3, 2}, {3, 2}},
-       {754, 36825, 754, 36825, 754, 36825, 37714, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 14, 2, 0, 0, 1, 2, 2, 2, {3, -1}, {3, 2}, {3, 2}},
-       {754, 36825, 754, 36825, 754, 36825, 37722, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 1, 0, 1, 1, 1, 2, 1, 1, {3, 0}, {3, 0}, {3, 0}},
-       {754, 36825, 754, 36825, 754, 36825, 37729, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 1, 0, 1, 1, 1, 2, 2, 2, {3, -1}, {3, 2}, {3, 2}},
-       {36827, 36830, 36827, 36830, 36827, 36830, 37742, 36843, 0, 36903, 36864, 36874, 2541, 36907, 3, 0, 4, 2, 3, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 754, 36825, 754, 36825, 37745, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 0, 0, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 754, 36825, 754, 36825, 37749, 36897, 0, 36903, 36864, 36874, 2541, 36907, 2, 2, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 36825, 36825, 36825, 36825, 37749, 36897, 0, 36903, 36864, 36874, 2541, 36907, 2, 2, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 36825, 36888, 36825, 36888, 10707, 36897, 0, 36903, 36864, 36874, 2541, 36907, 2, 2, 2, 2, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 754, 36825, 754, 36825, 754, 36961, 36897, 37288, 36903, 36864, 36874, 2541, 36907, 12, 2, 0, 0, 1, 2, 2, 2, {3, 0}, {3, 0}, {3, 0}},
-       {754, 36825, 36825, 36825, 36825, 36825, 37749, 36897, 0, 36903, 36864, 36874, 2541, 36907, 2, 2, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 754, 36825, 754, 36825, 36930, 36897, 0, 36903, 36864, 36874, 2541, 36907, 2, 0, 1, 1, 1, 2, 2, 2, {3, -1}, {3, 0}, {3, 0}},
-       {36825, 36888, 36825, 36888, 36825, 36888, 36909, 36897, 0, 36903, 36864, 36874, 2541, 36907, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 36888, 36825, 36825, 36825, 36825, 37199, 36897, 0, 36903, 36864, 36874, 2541, 36907, 5, 1, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 36888, 36825, 754, 36825, 754, 37753, 36897, 0, 36903, 36864, 36874, 2541, 36907, 2, 2, 0, 0, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 754, 36825, 754, 36825, 37666, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 1, 0, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 36827, 36830, 36827, 36830, 37788, 36843, 36846, 36861, 36864, 36874, 2541, 36883, 3, 2, 0, 0, 3, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 754, 36825, 754, 36825, 37099, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 2, 0, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 37171, 754, 37171, 754, 37171, 37177, 36897, 36899, 36903, 36964, 36975, 2541, 36907, 2, 2, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 754, 36825, 754, 36825, 37666, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 1, 0, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 754, 36825, 754, 36825, 37013, 36897, 36899, 36903, 37015, 37025, 2541, 36907, 1, 0, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 754, 36825, 754, 36825, 754, 36909, 36897, 36899, 36903, 37043, 37051, 2541, 36907, 12, 2, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 37171, 754, 37171, 754, 37171, 37177, 36897, 36899, 36903, 37015, 37089, 2541, 36907, 2, 2, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 754, 36825, 754, 36825, 754, 36909, 36897, 36899, 36903, 37107, 37117, 2541, 36907, 12, 2, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 36888, 36825, 36888, 36825, 36888, 36961, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 12, 2, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 754, 36825, 36888, 36825, 36888, 36909, 36897, 36899, 36903, 37015, 37089, 2541, 36907, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 36888, 36825, 36888, 36825, 36888, 36909, 36897, 37288, 36903, 36864, 36874, 2541, 36907, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 36888, 36825, 754, 36825, 754, 37798, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 754, 36825, 754, 36825, 36909, 36897, 0, 36903, 36864, 36874, 2541, 36907, 1, 0, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 36888, 36827, 36830, 36827, 36830, 37806, 36843, 36899, 36861, 36864, 36874, 2541, 36907, 8, 3, 1, 1, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 36825, 36825, 36825, 36825, 37813, 36897, 37639, 36903, 36864, 36874, 2541, 36907, 12, 2, 2, 2, 1, 2, 2, 2, {3, 2}, {3, 2}, {3, 2}},
-       {754, 36825, 36827, 36830, 36827, 36830, 37817, 36843, 36899, 36861, 36864, 36874, 2541, 36883, 3, 2, 0, 0, 3, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 754, 36825, 754, 36825, 37013, 36897, 37760, 36903, 36864, 36874, 2541, 36907, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 754, 36825, 754, 36825, 754, 36909, 36897, 36899, 36903, 36964, 36975, 2541, 36907, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 754, 36825, 754, 36825, 37013, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 1, 0, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 754, 36825, 754, 36825, 754, 36909, 36897, 36899, 36903, 37015, 37025, 2541, 36907, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 36888, 36825, 36888, 36825, 36888, 37013, 36897, 36899, 36903, 37043, 37051, 2541, 36907, 15, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 36888, 36825, 36888, 36825, 36888, 36909, 36897, 37288, 36903, 36864, 36874, 2541, 36907, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 36825, 754, 36825, 754, 37827, 36843, 36846, 36861, 36864, 36874, 2541, 36883, 3, 0, 0, 0, 3, 3, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 754, 36825, 754, 36825, 37013, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 754, 36825, 754, 36825, 754, 36909, 36897, 36899, 36903, 36964, 36975, 2541, 36907, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 754, 36825, 754, 36825, 37013, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 1, 0, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 754, 36825, 754, 36825, 7868, 36897, 36899, 36903, 37015, 37025, 2541, 36907, 0, 0, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 37171, 754, 37171, 754, 37171, 37177, 36897, 36899, 36903, 37043, 37051, 2541, 36907, 2, 2, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 754, 36825, 754, 36825, 754, 37837, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 8, 3, 0, 0, 2, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 36827, 36830, 36827, 36830, 37840, 36843, 36846, 36861, 36864, 36874, 2541, 36883, 3, 2, 0, 0, 3, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 754, 36825, 754, 36825, 37850, 36897, 37760, 36903, 36864, 36874, 2541, 36907, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 37171, 754, 37171, 754, 37171, 0, 36897, 36899, 36903, 36964, 36975, 2541, 36907, 2, 2, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 754, 36825, 754, 36825, 37013, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 1, 0, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 754, 36825, 754, 36825, 754, 37855, 36897, 36899, 36903, 37015, 37025, 2541, 36907, 0, 0, 0, 0, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 36888, 36825, 754, 36825, 754, 36909, 36897, 36899, 36903, 37043, 37051, 2541, 36907, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 754, 36825, 754, 36825, 754, 37837, 36897, 0, 36903, 36864, 36874, 2541, 36907, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 36827, 36830, 36827, 36830, 37859, 36843, 36846, 36861, 36864, 36874, 2541, 36883, 3, 2, 0, 0, 3, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 754, 36825, 754, 36825, 36909, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 1, 0, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 754, 36825, 754, 36825, 37869, 36897, 36899, 36903, 37015, 37025, 2541, 36907, 14, 2, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 36888, 36825, 36888, 36825, 36888, 36909, 36897, 36899, 36903, 37043, 37051, 2541, 36907, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 754, 36825, 754, 36825, 754, 37837, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 36825, 754, 36825, 754, 37873, 36843, 36846, 36861, 36864, 36874, 2541, 36883, 3, 2, 0, 0, 3, 3, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 36888, 36825, 36888, 36825, 36888, 10707, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 2, 2, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 754, 36825, 754, 36825, 37013, 36897, 36899, 36903, 37015, 37025, 2541, 36907, 0, 0, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 754, 36825, 754, 36825, 754, 37883, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 36827, 36830, 36827, 36830, 37888, 36843, 36846, 36861, 36864, 36874, 2541, 36883, 3, 2, 0, 0, 3, 3, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 754, 36825, 754, 36825, 37013, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 1, 0, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 754, 36825, 754, 36825, 754, 37898, 36897, 36899, 36903, 37015, 37025, 2541, 36907, 12, 2, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 754, 36825, 754, 36825, 754, 37883, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 36827, 36830, 36827, 36830, 37902, 36843, 36846, 36861, 36864, 36874, 2541, 36883, 3, 2, 0, 0, 3, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 754, 36825, 754, 36825, 754, 37013, 36897, 36899, 36903, 37015, 37025, 2541, 36907, 14, 2, 0, 0, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 754, 36825, 754, 36825, 754, 37912, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 8, 3, 1, 1, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 36827, 36830, 36827, 36830, 37917, 36843, 36846, 36861, 36864, 36874, 2541, 36883, 3, 2, 0, 0, 3, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 754, 36825, 754, 36825, 37013, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 0, 0, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 754, 36825, 754, 36825, 37927, 36897, 36899, 36903, 37015, 37025, 2541, 36907, 12, 2, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 754, 36825, 754, 36825, 754, 37931, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 8, 3, 1, 1, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 36827, 36830, 36827, 36830, 37939, 36843, 36846, 36861, 36864, 36874, 2541, 36883, 3, 2, 0, 0, 3, 3, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 754, 36825, 754, 36825, 37013, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 0, 0, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 754, 36825, 754, 36825, 754, 37013, 36897, 36899, 36903, 37015, 37025, 2541, 36907, 2, 2, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 754, 36825, 754, 36825, 754, 36909, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 36825, 754, 36825, 754, 37949, 36843, 36846, 36861, 36864, 36874, 2541, 36883, 3, 2, 0, 0, 3, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 754, 36825, 754, 36825, 37013, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 0, 0, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 754, 36825, 754, 36825, 754, 37013, 36897, 36899, 36903, 37015, 37025, 2541, 36907, 14, 2, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 754, 36825, 754, 36825, 754, 36909, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 36827, 36830, 36827, 36830, 37959, 36843, 36846, 36861, 36864, 36874, 2541, 36883, 3, 2, 0, 0, 3, 3, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 754, 36825, 754, 36825, 37745, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 0, 0, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 754, 36825, 754, 36825, 754, 37013, 36897, 36899, 36903, 37015, 37025, 2541, 36907, 9, 2, 0, 0, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 36827, 36830, 36827, 36830, 37969, 36843, 36846, 36861, 36864, 36874, 2541, 36883, 3, 2, 0, 0, 3, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 754, 36825, 754, 36825, 754, 37013, 36897, 36899, 36903, 37015, 37025, 2541, 36907, 14, 2, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 36827, 36830, 36827, 36830, 37979, 36843, 36846, 36861, 36864, 36874, 2541, 36883, 3, 2, 0, 0, 3, 3, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 754, 36825, 754, 36825, 754, 37989, 36897, 36899, 36903, 37015, 37025, 2541, 36907, 14, 2, 0, 0, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 36827, 36830, 36827, 36830, 37993, 36843, 36846, 36861, 36864, 36874, 2541, 36883, 3, 2, 0, 0, 3, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 754, 36825, 754, 36825, 37604, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 12, 2, 0, 0, 1, 2, 2, 2, {3, 2}, {3, 2}, {3, 2}},
-       {36825, 754, 36825, 754, 36825, 754, 38003, 36897, 36899, 36903, 37015, 37025, 2541, 36907, 14, 2, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 754, 36825, 754, 36825, 37013, 36897, 36899, 36903, 37015, 37025, 2541, 36907, 0, 0, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 754, 36825, 754, 36825, 37013, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 754, 36825, 754, 36825, 2411, 36897, 36899, 36903, 37015, 37025, 2541, 36907, 12, 2, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 754, 36825, 754, 36825, 38006, 36897, 36899, 36903, 37015, 37025, 2541, 36907, 14, 2, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 754, 36825, 754, 36825, 37013, 36897, 36899, 36903, 37015, 37025, 2541, 36907, 14, 2, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 754, 36825, 754, 36825, 37013, 36897, 36899, 36903, 37015, 37025, 2541, 36907, 0, 0, 0, 0, 1, 2, 2, 2, {3, -1}, {3, 0}, {3, 0}},
-       {36825, 754, 36825, 754, 36825, 754, 37883, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 754, 36825, 754, 36825, 754, 37837, 36897, 0, 36903, 36864, 36874, 2541, 36907, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 754, 36825, 754, 36825, 754, 38009, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 754, 36825, 754, 36825, 754, 38017, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 36888, 36825, 754, 36825, 754, 37798, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 754, 36825, 754, 36825, 36930, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 2, 0, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 36888, 36825, 36888, 36825, 36888, 36961, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 12, 2, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 754, 36825, 754, 36825, 754, 37837, 36897, 0, 36903, 36864, 36874, 2541, 36907, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 36888, 36825, 754, 36825, 754, 37777, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 36888, 36827, 36830, 36827, 36830, 37806, 36843, 36899, 36861, 36864, 36874, 2541, 36907, 8, 3, 1, 1, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 36888, 754, 36825, 754, 36825, 0, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 5, 1, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 754, 36825, 754, 36825, 38022, 36897, 37760, 36903, 36864, 36874, 2541, 36907, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 754, 36825, 754, 36825, 38022, 36897, 37760, 36903, 36864, 36874, 2541, 36907, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 36888, 36825, 36888, 36825, 36888, 36961, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 12, 2, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {36825, 754, 36825, 754, 36825, 754, 38017, 36897, 36899, 36903, 36864, 36874, 2541, 36907, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37477, 36888, 36825, 36825, 36825, 36825, 37770, 36897, 0, 36903, 36864, 36874, 2541, 36907, 8, 3, 1, 1, 1, 2, 2, 2, {3, 0}, {3, 0}, {3, 0}},
-       {36825, 36888, 36827, 36830, 36827, 36830, 37782, 36843, 36899, 36861, 36864, 36874, 2541, 36907, 8, 3, 1, 1, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 36825, 36888, 36825, 36888, 0, 36897, 0, 36903, 37043, 37051, 2541, 36907, 8, 3, 0, 0, 3, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {754, 36825, 754, 36825, 754, 36825, 37749, 36897, 0, 36903, 36864, 36874, 2541, 36907, 2, 2, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}}
+       {691, 37292, 37294, 37297, 37294, 37297, 37300, 37310, 37313, 37328, 37331, 37341, 2566, 37350, 3, 2, 0, 0, 3, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 37355, 37292, 37355, 37292, 37355, 37358, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 691, 37292, 691, 37292, 691, 37376, 37364, 37366, 37370, 37380, 37389, 2566, 37374, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 691, 37292, 691, 37292, 37397, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 2, 0, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 691, 37292, 691, 37292, 37397, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 2, 0, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 37355, 37292, 37355, 37292, 37355, 37400, 37364, 37366, 37370, 37404, 37416, 2566, 37374, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 691, 37292, 691, 37292, 691, 37428, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 12, 2, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 691, 37292, 691, 37292, 691, 37376, 37364, 37366, 37370, 37431, 37442, 2566, 37374, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 691, 37292, 691, 37292, 691, 37376, 37364, 37366, 37370, 37453, 37467, 2566, 37374, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 691, 37292, 691, 37292, 37480, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 0, 0, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 691, 37292, 37355, 37292, 37355, 37376, 37364, 37366, 37370, 37482, 37492, 2566, 37374, 8, 3, 0, 0, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 37355, 37292, 37355, 37292, 37355, 37376, 37364, 37501, 37370, 37331, 37341, 2566, 37374, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 37355, 37292, 37355, 37292, 37355, 37376, 37364, 37366, 37370, 37510, 37518, 2566, 37374, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 691, 37292, 691, 37292, 37526, 37364, 37366, 37370, 37530, 37341, 37543, 37548, 2, 2, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 37355, 37292, 37355, 37292, 37355, 37553, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 8, 3, 0, 0, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 691, 37292, 691, 37292, 691, 37428, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 8, 3, 1, 1, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 691, 37292, 691, 37292, 691, 37376, 37364, 37366, 37370, 37482, 37556, 2566, 37374, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 691, 37292, 691, 37292, 37566, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 1, 0, 1, 1, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 691, 37292, 691, 37292, 37570, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 1, 0, 0, 0, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 691, 37292, 691, 37292, 691, 37376, 37364, 37366, 37370, 37574, 37584, 2566, 37374, 12, 2, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 37355, 37292, 37355, 37292, 37355, 0, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 12, 2, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 37355, 37292, 37355, 37292, 37355, 37593, 37364, 37366, 37370, 37597, 37616, 2566, 37374, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 691, 37292, 691, 37292, 691, 37635, 37364, 37366, 37370, 37482, 37556, 2566, 37374, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37638, 691, 37640, 691, 37640, 37644, 37364, 37366, 37370, 37648, 37657, 2566, 37374, 2, 2, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 691, 37292, 691, 37292, 691, 0, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 37355, 37292, 37355, 37292, 37355, 37666, 37364, 37674, 37370, 37691, 37719, 2566, 37374, 5, 1, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 691, 37292, 691, 37292, 691, 37746, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 8, 3, 1, 1, 2, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 37355, 37292, 37355, 37292, 37355, 37376, 37364, 37366, 37370, 37404, 37416, 2566, 37374, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 691, 37292, 37355, 37292, 37355, 37749, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 5, 1, 0, 0, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 691, 37292, 37355, 37292, 37355, 37428, 37364, 37755, 37370, 37331, 37341, 2566, 37374, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 691, 37292, 691, 37292, 37762, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 1, 0, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 691, 37292, 691, 37292, 691, 37766, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 8, 3, 2, 2, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 691, 37292, 691, 37292, 37770, 37364, 37773, 37370, 37796, 37341, 37812, 37820, 3, 0, 0, 0, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 691, 37292, 691, 37292, 691, 37828, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 0, 0, 0, 0, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 37355, 37292, 37355, 37292, 37355, 37831, 37364, 37835, 37370, 37331, 37341, 2566, 37374, 5, 1, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 37355, 37292, 37355, 37292, 37355, 37852, 37364, 0, 37370, 37331, 37341, 2566, 37374, 8, 3, 0, 0, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 691, 37292, 691, 37292, 691, 37376, 37364, 37366, 37370, 37856, 37870, 2566, 37374, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37355, 37292, 37355, 37292, 37355, 37376, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 37355, 37292, 37355, 37292, 37355, 37376, 37364, 37883, 37370, 37897, 37909, 2566, 37374, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 691, 37292, 37355, 37292, 37355, 37920, 37364, 37366, 37370, 37923, 37934, 2566, 37374, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37944, 37355, 37292, 37292, 37292, 37292, 0, 37364, 0, 37370, 37331, 37341, 2566, 37374, 8, 3, 1, 1, 1, 2, 2, 2, {3, 0}, {3, 0}, {3, 0}},
+       {185, 37292, 37294, 37297, 37294, 37297, 37946, 37310, 37955, 37328, 37966, 37341, 37981, 37820, 3, 2, 0, 0, 3, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 691, 37292, 691, 37292, 691, 37988, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 8, 3, 0, 0, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 37292, 691, 37292, 691, 37992, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 8, 3, 0, 0, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 37355, 37292, 691, 37292, 691, 0, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 691, 37292, 691, 37292, 691, 37376, 37364, 37366, 37370, 37998, 38008, 2566, 37374, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 691, 37292, 691, 37292, 691, 38017, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 37292, 37355, 37292, 37355, 10836, 37364, 0, 37370, 37331, 37341, 2566, 37374, 2, 2, 2, 2, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 37292, 37355, 37292, 37355, 10836, 37364, 0, 37370, 37331, 37341, 2566, 37374, 2, 2, 2, 2, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 691, 37292, 691, 37292, 10836, 37364, 38024, 37370, 37331, 37341, 2566, 37374, 2, 2, 2, 2, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 37292, 37355, 37292, 37355, 10836, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 2, 2, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 37355, 37292, 37355, 37292, 37355, 0, 37364, 38030, 37370, 37331, 37341, 2566, 37374, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 691, 37292, 691, 37292, 691, 37428, 37364, 37755, 37370, 37331, 37341, 2566, 37374, 12, 2, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 691, 37292, 691, 37292, 38071, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 12, 2, 0, 0, 1, 2, 2, 2, {3, 2}, {3, 2}, {3, 2}},
+       {691, 37292, 691, 37292, 691, 37292, 37376, 37364, 0, 37370, 37331, 37341, 2566, 37374, 1, 0, 2, 2, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 37355, 37292, 37355, 37292, 37355, 37376, 37364, 37755, 37370, 37331, 37341, 2566, 37374, 12, 2, 2, 2, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 691, 37292, 691, 37292, 37376, 37364, 0, 37370, 37331, 37341, 2566, 37374, 1, 0, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 691, 37292, 691, 37292, 38075, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 0, 0, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {2566, 37355, 37292, 37355, 37292, 37355, 0, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 1, 0, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {2566, 37355, 37292, 37355, 37292, 37355, 0, 37364, 38078, 37370, 37331, 37341, 2566, 37374, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 691, 37292, 691, 37292, 38095, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 0, 0, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 37355, 37294, 37297, 37294, 37297, 0, 37310, 37366, 37328, 37331, 37341, 2566, 37374, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 37292, 37292, 37292, 37292, 38099, 37364, 38106, 37370, 37331, 37341, 2566, 37374, 12, 2, 2, 2, 1, 2, 2, 2, {3, 2}, {3, 2}, {3, 2}},
+       {691, 37292, 37294, 37292, 37294, 37292, 0, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 12, 2, 0, 0, 1, 2, 2, 2, {3, 2}, {3, 2}, {3, 2}},
+       {691, 37292, 691, 37292, 691, 37292, 38071, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 12, 2, 0, 0, 1, 2, 2, 2, {3, 2}, {3, 2}, {3, 2}},
+       {691, 37292, 691, 37292, 691, 37292, 38071, 37364, 0, 37370, 37331, 37341, 2566, 37374, 12, 2, 0, 0, 1, 2, 2, 2, {3, 2}, {3, 2}, {3, 2}},
+       {691, 37292, 691, 37292, 691, 37292, 38071, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 12, 2, 0, 0, 1, 2, 2, 2, {3, 2}, {3, 2}, {3, 2}},
+       {691, 37292, 691, 37292, 691, 37292, 38071, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 12, 2, 0, 0, 1, 2, 2, 2, {3, 2}, {3, 2}, {3, 2}},
+       {691, 37292, 691, 37292, 691, 37292, 38071, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 12, 2, 0, 0, 1, 2, 2, 2, {3, 2}, {3, 2}, {3, 2}},
+       {691, 37292, 691, 37292, 691, 37292, 38071, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 12, 2, 2, 2, 1, 2, 2, 2, {3, 2}, {3, 2}, {3, 2}},
+       {691, 37292, 37292, 37292, 37292, 37292, 38071, 37364, 0, 37370, 37331, 37341, 2566, 37374, 12, 1, 1, 1, 1, 2, 2, 2, {3, 2}, {3, 2}, {3, 2}},
+       {691, 37292, 691, 37292, 691, 37292, 38071, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 12, 2, 0, 0, 1, 2, 2, 2, {3, 2}, {3, 2}, {3, 2}},
+       {37292, 37355, 691, 37292, 691, 37292, 0, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 5, 1, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 691, 37292, 691, 37292, 37397, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 2, 0, 1, 1, 1, 2, 2, 2, {3, 0}, {3, 0}, {3, 0}},
+       {691, 37292, 691, 37292, 691, 37292, 38133, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 1, 0, 2, 2, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 37292, 691, 37292, 691, 38136, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 5, 1, 1, 1, 2, 2, 2, 2, {3, -1}, {3, 0}, {3, 0}},
+       {691, 37292, 37292, 691, 37292, 691, 38140, 37364, 38144, 37370, 37331, 37341, 2566, 37374, 4, 1, 0, 0, 0, 0, 2, 2, {3, 0}, {3, 0}, {3, 0}},
+       {37292, 691, 37292, 691, 37292, 691, 37376, 37364, 37366, 37370, 37482, 37492, 2566, 37374, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 37292, 37292, 37292, 37292, 38071, 37364, 0, 37370, 37331, 37341, 2566, 37374, 12, 2, 0, 0, 1, 2, 2, 2, {3, 2}, {3, 2}, {3, 2}},
+       {691, 37292, 691, 37292, 691, 37292, 38181, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 14, 2, 0, 0, 1, 2, 2, 2, {3, -1}, {3, 2}, {3, 2}},
+       {691, 37292, 691, 37292, 691, 37292, 38189, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 1, 0, 1, 1, 1, 2, 1, 1, {3, 0}, {3, 0}, {3, 0}},
+       {691, 37292, 37292, 37355, 37292, 37355, 0, 37364, 0, 37370, 37510, 37518, 2566, 37374, 8, 3, 0, 0, 3, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 691, 37292, 691, 37292, 38196, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 1, 0, 1, 1, 1, 2, 2, 2, {3, -1}, {3, 2}, {3, 2}},
+       {37294, 37297, 37294, 37297, 37294, 37297, 38209, 37310, 0, 37370, 37331, 37341, 2566, 37374, 3, 0, 4, 2, 3, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 691, 37292, 691, 37292, 38212, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 0, 0, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 691, 37292, 691, 37292, 0, 37364, 0, 37370, 37331, 37341, 2566, 37374, 2, 2, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 37292, 37292, 37292, 37292, 38216, 37364, 0, 37370, 37331, 37341, 2566, 37374, 2, 2, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 37292, 37355, 37292, 37355, 10836, 37364, 0, 37370, 37331, 37341, 2566, 37374, 2, 2, 2, 2, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 691, 37292, 691, 37292, 691, 37428, 37364, 37755, 37370, 37331, 37341, 2566, 37374, 12, 2, 0, 0, 1, 2, 2, 2, {3, 0}, {3, 0}, {3, 0}},
+       {691, 37292, 37292, 37292, 37292, 37292, 38216, 37364, 0, 37370, 37331, 37341, 2566, 37374, 2, 2, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 691, 37292, 691, 37292, 37397, 37364, 0, 37370, 37331, 37341, 2566, 37374, 2, 0, 1, 1, 1, 2, 2, 2, {3, -1}, {3, 0}, {3, 0}},
+       {37292, 37355, 37292, 37355, 37292, 37355, 37376, 37364, 0, 37370, 37331, 37341, 2566, 37374, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 37355, 691, 37640, 691, 37640, 0, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 37355, 37292, 37292, 37292, 37292, 37666, 37364, 0, 37370, 37331, 37341, 2566, 37374, 5, 1, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 37355, 37292, 691, 37292, 691, 38220, 37364, 0, 37370, 37331, 37341, 2566, 37374, 2, 2, 0, 0, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 691, 37292, 691, 37292, 38133, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 1, 0, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 37294, 37297, 37294, 37297, 37300, 37310, 37313, 37328, 37331, 37341, 2566, 37350, 3, 2, 0, 0, 3, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 37355, 37292, 37355, 37292, 37355, 37358, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 691, 37292, 691, 37292, 691, 37376, 37364, 37366, 37370, 37380, 37389, 2566, 37374, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 691, 37292, 691, 37292, 38223, 37364, 38227, 37370, 37331, 37341, 2566, 37374, 1, 0, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 37355, 37292, 37355, 37292, 37355, 37400, 37364, 37366, 37370, 37404, 37416, 2566, 37374, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 691, 37292, 691, 37292, 691, 37428, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 12, 2, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 691, 37292, 691, 37292, 691, 37376, 37364, 37366, 37370, 37431, 37442, 2566, 37374, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 691, 37292, 691, 37292, 691, 37376, 37364, 37366, 37370, 37453, 37467, 2566, 37374, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 691, 37292, 691, 37292, 37480, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 0, 0, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 37355, 37292, 37355, 37292, 37355, 37376, 37364, 37501, 37370, 37331, 37341, 2566, 37374, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 37355, 37292, 37355, 37292, 37355, 37376, 37364, 37366, 37370, 37510, 37518, 2566, 37374, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 691, 37292, 691, 37292, 37526, 37364, 37366, 37370, 37530, 37341, 37543, 37548, 2, 2, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 37355, 37292, 37355, 37292, 37355, 37553, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 8, 3, 0, 0, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 691, 37292, 691, 37292, 691, 37428, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 8, 3, 1, 1, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 691, 37292, 691, 37292, 691, 37376, 37364, 37366, 37370, 37482, 37556, 2566, 37374, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 691, 37292, 691, 37292, 37566, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 1, 0, 1, 1, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 691, 37292, 691, 37292, 37570, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 1, 0, 0, 0, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 691, 37292, 691, 37292, 691, 37376, 37364, 37366, 37370, 37574, 37584, 2566, 37374, 12, 2, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 37355, 37292, 37355, 37292, 37355, 37428, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 12, 2, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 37355, 37292, 37355, 37292, 37355, 37593, 37364, 37366, 37370, 37597, 37616, 2566, 37374, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 691, 37292, 691, 37292, 691, 37635, 37364, 37366, 37370, 37482, 37556, 2566, 37374, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37638, 691, 37640, 691, 37640, 37644, 37364, 37366, 37370, 37648, 37657, 2566, 37374, 2, 2, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 691, 37292, 691, 37292, 691, 0, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 37355, 37292, 37355, 37292, 37355, 37666, 37364, 37674, 37370, 37691, 37719, 2566, 37374, 5, 1, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 691, 37292, 691, 37292, 691, 37746, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 8, 3, 1, 1, 2, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 37355, 37292, 37355, 37292, 37355, 37376, 37364, 37366, 37370, 37404, 37416, 2566, 37374, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 691, 37292, 37355, 37292, 37355, 37749, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 5, 1, 0, 0, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 691, 37292, 37355, 37292, 37355, 37428, 37364, 37755, 37370, 37331, 37341, 2566, 37374, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 691, 37292, 691, 37292, 37762, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 1, 0, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 691, 37292, 691, 37292, 691, 37766, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 8, 3, 2, 2, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 691, 37292, 691, 37292, 37770, 37364, 37773, 37370, 37796, 37341, 37812, 37820, 3, 0, 0, 0, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 691, 37292, 691, 37292, 691, 37828, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 0, 0, 0, 0, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 37355, 37292, 37355, 37292, 37355, 37831, 37364, 37835, 37370, 37331, 37341, 2566, 37374, 5, 1, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 37355, 37292, 37355, 37292, 37355, 37852, 37364, 0, 37370, 37331, 37341, 2566, 37374, 8, 3, 0, 0, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 691, 37292, 691, 37292, 691, 37376, 37364, 37366, 37370, 37856, 37870, 2566, 37374, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37355, 37292, 37355, 37292, 37355, 37376, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 37355, 37292, 37355, 37292, 37355, 37376, 37364, 37883, 37370, 37897, 37909, 2566, 37374, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 691, 37292, 37355, 37292, 37355, 37920, 37364, 37366, 37370, 37923, 37934, 2566, 37374, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37944, 37355, 37292, 37292, 37292, 37292, 38237, 37364, 0, 37370, 37331, 37341, 2566, 37374, 8, 3, 1, 1, 1, 2, 2, 2, {3, 0}, {3, 0}, {3, 0}},
+       {185, 37292, 37294, 37297, 37294, 37297, 37946, 37310, 37955, 37328, 37966, 37341, 37981, 37820, 3, 2, 0, 0, 3, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 691, 37292, 691, 37292, 691, 37988, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 8, 3, 0, 0, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 37292, 691, 37292, 691, 37992, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 8, 3, 0, 0, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 37355, 37292, 691, 37292, 691, 38244, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 691, 37292, 691, 37292, 691, 37376, 37364, 37366, 37370, 37998, 38008, 2566, 37374, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 691, 37292, 691, 37292, 691, 38017, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 37292, 37355, 37292, 37355, 10836, 37364, 0, 37370, 37331, 37341, 2566, 37374, 2, 2, 2, 2, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 37292, 37355, 37292, 37355, 10836, 37364, 0, 37370, 37331, 37341, 2566, 37374, 2, 2, 2, 2, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 691, 37292, 691, 37292, 10836, 37364, 38024, 37370, 37331, 37341, 2566, 37374, 2, 2, 2, 2, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 37292, 37355, 37292, 37355, 10836, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 2, 2, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 37355, 37292, 37355, 37292, 37355, 0, 37364, 38030, 37370, 37331, 37341, 2566, 37374, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 691, 37292, 691, 37292, 691, 37428, 37364, 37755, 37370, 37331, 37341, 2566, 37374, 12, 2, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 691, 37292, 691, 37292, 38071, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 12, 2, 0, 0, 1, 2, 2, 2, {3, 2}, {3, 2}, {3, 2}},
+       {691, 37292, 691, 37292, 691, 37292, 37376, 37364, 0, 37370, 37331, 37341, 2566, 37374, 1, 0, 2, 2, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 37355, 37292, 37355, 37292, 37355, 37428, 37364, 37755, 37370, 37331, 37341, 2566, 37374, 12, 2, 2, 2, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 691, 37292, 691, 37292, 38095, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 0, 0, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 37355, 37294, 37297, 37294, 37297, 38249, 37310, 37366, 37328, 37331, 37341, 2566, 37374, 8, 3, 1, 1, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 37292, 37292, 37292, 37292, 38071, 37364, 38106, 37370, 37331, 37341, 2566, 37374, 12, 2, 2, 2, 1, 2, 2, 2, {3, 2}, {3, 2}, {3, 2}},
+       {691, 37292, 691, 37292, 691, 37292, 38071, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 12, 2, 0, 0, 1, 2, 2, 2, {3, 2}, {3, 2}, {3, 2}},
+       {691, 37292, 691, 37292, 691, 37292, 38071, 37364, 0, 37370, 37331, 37341, 2566, 37374, 12, 2, 0, 0, 1, 2, 2, 2, {3, 2}, {3, 2}, {3, 2}},
+       {691, 37292, 691, 37292, 691, 37292, 38071, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 12, 2, 0, 0, 1, 2, 2, 2, {3, 2}, {3, 2}, {3, 2}},
+       {691, 37292, 691, 37292, 691, 37292, 38071, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 12, 2, 0, 0, 1, 2, 2, 2, {3, 2}, {3, 2}, {3, 2}},
+       {691, 37292, 691, 37292, 691, 37292, 38071, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 12, 2, 0, 0, 1, 2, 2, 2, {3, 2}, {3, 2}, {3, 2}},
+       {691, 37292, 691, 37292, 691, 37292, 38071, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 12, 2, 2, 2, 1, 2, 2, 2, {3, 2}, {3, 2}, {3, 2}},
+       {691, 37292, 37292, 37292, 37292, 37292, 38071, 37364, 0, 37370, 37331, 37341, 2566, 37374, 12, 1, 1, 1, 1, 2, 2, 2, {3, 2}, {3, 2}, {3, 2}},
+       {691, 37292, 691, 37292, 691, 37292, 38071, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 12, 2, 0, 0, 1, 2, 2, 2, {3, 2}, {3, 2}, {3, 2}},
+       {691, 37292, 691, 37292, 691, 37292, 37397, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 2, 0, 1, 1, 1, 2, 2, 2, {3, 0}, {3, 0}, {3, 0}},
+       {691, 37292, 691, 37292, 691, 37292, 38133, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 1, 0, 2, 2, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 37292, 691, 37292, 691, 38136, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 5, 1, 1, 1, 2, 2, 2, 2, {3, -1}, {3, 0}, {3, 0}},
+       {691, 37292, 37292, 691, 37292, 691, 38140, 37364, 38144, 37370, 37331, 37341, 2566, 37374, 4, 1, 0, 0, 0, 0, 2, 2, {3, 0}, {3, 0}, {3, 0}},
+       {37292, 691, 37292, 691, 37292, 691, 37376, 37364, 37366, 37370, 37482, 37492, 2566, 37374, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 37292, 37292, 37292, 37292, 38071, 37364, 0, 37370, 37331, 37341, 2566, 37374, 12, 2, 0, 0, 1, 2, 2, 2, {3, 2}, {3, 2}, {3, 2}},
+       {691, 37292, 691, 37292, 691, 37292, 38181, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 14, 2, 0, 0, 1, 2, 2, 2, {3, -1}, {3, 2}, {3, 2}},
+       {691, 37292, 691, 37292, 691, 37292, 38189, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 1, 0, 1, 1, 1, 2, 1, 1, {3, 0}, {3, 0}, {3, 0}},
+       {691, 37292, 691, 37292, 691, 37292, 38196, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 1, 0, 1, 1, 1, 2, 2, 2, {3, -1}, {3, 2}, {3, 2}},
+       {37294, 37297, 37294, 37297, 37294, 37297, 38209, 37310, 0, 37370, 37331, 37341, 2566, 37374, 3, 0, 4, 2, 3, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 691, 37292, 691, 37292, 38212, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 0, 0, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 691, 37292, 691, 37292, 38216, 37364, 0, 37370, 37331, 37341, 2566, 37374, 2, 2, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 37292, 37292, 37292, 37292, 38216, 37364, 0, 37370, 37331, 37341, 2566, 37374, 2, 2, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 37292, 37355, 37292, 37355, 10836, 37364, 0, 37370, 37331, 37341, 2566, 37374, 2, 2, 2, 2, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 691, 37292, 691, 37292, 691, 37428, 37364, 37755, 37370, 37331, 37341, 2566, 37374, 12, 2, 0, 0, 1, 2, 2, 2, {3, 0}, {3, 0}, {3, 0}},
+       {691, 37292, 37292, 37292, 37292, 37292, 38216, 37364, 0, 37370, 37331, 37341, 2566, 37374, 2, 2, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 691, 37292, 691, 37292, 37397, 37364, 0, 37370, 37331, 37341, 2566, 37374, 2, 0, 1, 1, 1, 2, 2, 2, {3, -1}, {3, 0}, {3, 0}},
+       {37292, 37355, 37292, 37355, 37292, 37355, 37376, 37364, 0, 37370, 37331, 37341, 2566, 37374, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 37355, 37292, 37292, 37292, 37292, 37666, 37364, 0, 37370, 37331, 37341, 2566, 37374, 5, 1, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 37355, 37292, 691, 37292, 691, 38220, 37364, 0, 37370, 37331, 37341, 2566, 37374, 2, 2, 0, 0, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 691, 37292, 691, 37292, 38133, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 1, 0, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 37294, 37297, 37294, 37297, 38255, 37310, 37313, 37328, 37331, 37341, 2566, 37350, 3, 2, 0, 0, 3, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 691, 37292, 691, 37292, 37566, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 2, 0, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37638, 691, 37638, 691, 37638, 37644, 37364, 37366, 37370, 37431, 37442, 2566, 37374, 2, 2, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 691, 37292, 691, 37292, 38133, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 1, 0, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 691, 37292, 691, 37292, 37480, 37364, 37366, 37370, 37482, 37492, 2566, 37374, 1, 0, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 691, 37292, 691, 37292, 691, 37376, 37364, 37366, 37370, 37510, 37518, 2566, 37374, 12, 2, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37638, 691, 37638, 691, 37638, 37644, 37364, 37366, 37370, 37482, 37556, 2566, 37374, 2, 2, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 691, 37292, 691, 37292, 691, 37376, 37364, 37366, 37370, 37574, 37584, 2566, 37374, 12, 2, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 37355, 37292, 37355, 37292, 37355, 37428, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 12, 2, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 691, 37292, 37355, 37292, 37355, 37376, 37364, 37366, 37370, 37482, 37556, 2566, 37374, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 37355, 37292, 37355, 37292, 37355, 37376, 37364, 37755, 37370, 37331, 37341, 2566, 37374, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 37355, 37292, 691, 37292, 691, 38265, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 691, 37292, 691, 37292, 37376, 37364, 0, 37370, 37331, 37341, 2566, 37374, 1, 0, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 37355, 37294, 37297, 37294, 37297, 38273, 37310, 37366, 37328, 37331, 37341, 2566, 37374, 8, 3, 1, 1, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 37292, 37292, 37292, 37292, 38280, 37364, 38106, 37370, 37331, 37341, 2566, 37374, 12, 2, 2, 2, 1, 2, 2, 2, {3, 2}, {3, 2}, {3, 2}},
+       {691, 37292, 37294, 37297, 37294, 37297, 38284, 37310, 37366, 37328, 37331, 37341, 2566, 37350, 3, 2, 0, 0, 3, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 691, 37292, 691, 37292, 37480, 37364, 38227, 37370, 37331, 37341, 2566, 37374, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 691, 37292, 691, 37292, 691, 37376, 37364, 37366, 37370, 37431, 37442, 2566, 37374, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 691, 37292, 691, 37292, 37480, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 1, 0, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 691, 37292, 691, 37292, 691, 37376, 37364, 37366, 37370, 37482, 37492, 2566, 37374, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 37355, 37292, 37355, 37292, 37355, 37480, 37364, 37366, 37370, 37510, 37518, 2566, 37374, 15, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 37355, 37292, 37355, 37292, 37355, 37376, 37364, 37755, 37370, 37331, 37341, 2566, 37374, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 37292, 691, 37292, 691, 38294, 37310, 37313, 37328, 37331, 37341, 2566, 37350, 3, 0, 0, 0, 3, 3, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 691, 37292, 691, 37292, 37480, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 691, 37292, 691, 37292, 691, 37376, 37364, 37366, 37370, 37431, 37442, 2566, 37374, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 691, 37292, 691, 37292, 37480, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 1, 0, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 691, 37292, 691, 37292, 8056, 37364, 37366, 37370, 37482, 37492, 2566, 37374, 0, 0, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37638, 691, 37638, 691, 37638, 37644, 37364, 37366, 37370, 37510, 37518, 2566, 37374, 2, 2, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 691, 37292, 691, 37292, 691, 38304, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 8, 3, 0, 0, 2, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 37294, 37297, 37294, 37297, 38307, 37310, 37313, 37328, 37331, 37341, 2566, 37350, 3, 2, 0, 0, 3, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 691, 37292, 691, 37292, 38317, 37364, 38227, 37370, 37331, 37341, 2566, 37374, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37638, 691, 37638, 691, 37638, 0, 37364, 37366, 37370, 37431, 37442, 2566, 37374, 2, 2, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 691, 37292, 691, 37292, 37480, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 1, 0, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 691, 37292, 691, 37292, 691, 38322, 37364, 37366, 37370, 37482, 37492, 2566, 37374, 0, 0, 0, 0, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 37355, 37292, 691, 37292, 691, 37376, 37364, 37366, 37370, 37510, 37518, 2566, 37374, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 691, 37292, 691, 37292, 691, 38304, 37364, 0, 37370, 37331, 37341, 2566, 37374, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 37294, 37297, 37294, 37297, 38326, 37310, 37313, 37328, 37331, 37341, 2566, 37350, 3, 2, 0, 0, 3, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 691, 37292, 691, 37292, 37376, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 1, 0, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 691, 37292, 691, 37292, 38336, 37364, 37366, 37370, 37482, 37492, 2566, 37374, 14, 2, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 37355, 37292, 37355, 37292, 37355, 37376, 37364, 37366, 37370, 37510, 37518, 2566, 37374, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 691, 37292, 691, 37292, 691, 38304, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 37292, 691, 37292, 691, 38340, 37310, 37313, 37328, 37331, 37341, 2566, 37350, 3, 2, 0, 0, 3, 3, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 37355, 37292, 37355, 37292, 37355, 10836, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 2, 2, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 691, 37292, 691, 37292, 37480, 37364, 37366, 37370, 37482, 37492, 2566, 37374, 0, 0, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 691, 37292, 691, 37292, 691, 38350, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 37294, 37297, 37294, 37297, 38355, 37310, 37313, 37328, 37331, 37341, 2566, 37350, 3, 2, 0, 0, 3, 3, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 691, 37292, 691, 37292, 37480, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 1, 0, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 691, 37292, 691, 37292, 691, 38365, 37364, 37366, 37370, 37482, 37492, 2566, 37374, 12, 2, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 691, 37292, 691, 37292, 691, 38350, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 37294, 37297, 37294, 37297, 38369, 37310, 37313, 37328, 37331, 37341, 2566, 37350, 3, 2, 0, 0, 3, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 691, 37292, 691, 37292, 691, 37480, 37364, 37366, 37370, 37482, 37492, 2566, 37374, 14, 2, 0, 0, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 691, 37292, 691, 37292, 691, 38379, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 8, 3, 1, 1, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 37294, 37297, 37294, 37297, 38384, 37310, 37313, 37328, 37331, 37341, 2566, 37350, 3, 2, 0, 0, 3, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 691, 37292, 691, 37292, 37480, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 0, 0, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 691, 37292, 691, 37292, 38394, 37364, 37366, 37370, 37482, 37492, 2566, 37374, 12, 2, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 691, 37292, 691, 37292, 691, 38398, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 8, 3, 1, 1, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 37294, 37297, 37294, 37297, 38406, 37310, 37313, 37328, 37331, 37341, 2566, 37350, 3, 2, 0, 0, 3, 3, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 691, 37292, 691, 37292, 37480, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 0, 0, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 691, 37292, 691, 37292, 691, 37480, 37364, 37366, 37370, 37482, 37492, 2566, 37374, 2, 2, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 691, 37292, 691, 37292, 691, 37376, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 37292, 691, 37292, 691, 38416, 37310, 37313, 37328, 37331, 37341, 2566, 37350, 3, 2, 0, 0, 3, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 691, 37292, 691, 37292, 37480, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 0, 0, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 691, 37292, 691, 37292, 691, 37480, 37364, 37366, 37370, 37482, 37492, 2566, 37374, 14, 2, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 691, 37292, 691, 37292, 691, 37376, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 37294, 37297, 37294, 37297, 38426, 37310, 37313, 37328, 37331, 37341, 2566, 37350, 3, 2, 0, 0, 3, 3, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 691, 37292, 691, 37292, 38212, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 0, 0, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 691, 37292, 691, 37292, 691, 37480, 37364, 37366, 37370, 37482, 37492, 2566, 37374, 9, 2, 0, 0, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 37294, 37297, 37294, 37297, 38436, 37310, 37313, 37328, 37331, 37341, 2566, 37350, 3, 2, 0, 0, 3, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 691, 37292, 691, 37292, 691, 37480, 37364, 37366, 37370, 37482, 37492, 2566, 37374, 14, 2, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 37294, 37297, 37294, 37297, 38446, 37310, 37313, 37328, 37331, 37341, 2566, 37350, 3, 2, 0, 0, 3, 3, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 691, 37292, 691, 37292, 691, 38456, 37364, 37366, 37370, 37482, 37492, 2566, 37374, 14, 2, 0, 0, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 37294, 37297, 37294, 37297, 38460, 37310, 37313, 37328, 37331, 37341, 2566, 37350, 3, 2, 0, 0, 3, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 691, 37292, 691, 37292, 38071, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 12, 2, 0, 0, 1, 2, 2, 2, {3, 2}, {3, 2}, {3, 2}},
+       {37292, 691, 37292, 691, 37292, 691, 38470, 37364, 37366, 37370, 37482, 37492, 2566, 37374, 14, 2, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 691, 37292, 691, 37292, 37480, 37364, 37366, 37370, 37482, 37492, 2566, 37374, 0, 0, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 691, 37292, 691, 37292, 37480, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 691, 37292, 691, 37292, 2436, 37364, 37366, 37370, 37482, 37492, 2566, 37374, 12, 2, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 691, 37292, 691, 37292, 38473, 37364, 37366, 37370, 37482, 37492, 2566, 37374, 14, 2, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 691, 37292, 691, 37292, 37480, 37364, 37366, 37370, 37482, 37492, 2566, 37374, 14, 2, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 691, 37292, 691, 37292, 37480, 37364, 37366, 37370, 37482, 37492, 2566, 37374, 0, 0, 0, 0, 1, 2, 2, 2, {3, -1}, {3, 0}, {3, 0}},
+       {37292, 691, 37292, 691, 37292, 691, 38350, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 691, 37292, 691, 37292, 691, 38304, 37364, 0, 37370, 37331, 37341, 2566, 37374, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 691, 37292, 691, 37292, 691, 38476, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 691, 37292, 691, 37292, 691, 38484, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 37355, 37292, 691, 37292, 691, 38265, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 691, 37292, 691, 37292, 37397, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 2, 0, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 37355, 37292, 37355, 37292, 37355, 37428, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 12, 2, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 691, 37292, 691, 37292, 691, 38304, 37364, 0, 37370, 37331, 37341, 2566, 37374, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 37355, 37292, 691, 37292, 691, 38244, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 37355, 37294, 37297, 37294, 37297, 38273, 37310, 37366, 37328, 37331, 37341, 2566, 37374, 8, 3, 1, 1, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 37355, 691, 37292, 691, 37292, 0, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 5, 1, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 691, 37292, 691, 37292, 38489, 37364, 38227, 37370, 37331, 37341, 2566, 37374, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 691, 37292, 691, 37292, 38489, 37364, 38227, 37370, 37331, 37341, 2566, 37374, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 37355, 37292, 37355, 37292, 37355, 37428, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 12, 2, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37292, 691, 37292, 691, 37292, 691, 38484, 37364, 37366, 37370, 37331, 37341, 2566, 37374, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {37944, 37355, 37292, 37292, 37292, 37292, 38237, 37364, 0, 37370, 37331, 37341, 2566, 37374, 8, 3, 1, 1, 1, 2, 2, 2, {3, 0}, {3, 0}, {3, 0}},
+       {37292, 37355, 37294, 37297, 37294, 37297, 38249, 37310, 37366, 37328, 37331, 37341, 2566, 37374, 8, 3, 1, 1, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 37292, 37355, 37292, 37355, 0, 37364, 0, 37370, 37510, 37518, 2566, 37374, 8, 3, 0, 0, 3, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
+       {691, 37292, 691, 37292, 691, 37292, 38216, 37364, 0, 37370, 37331, 37341, 2566, 37374, 2, 2, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}}
 };
 
 
 static const CultureInfoEntry culture_entries [] = {
-       {0x0001, 0x007F, 768, -1, 38026, 38029, 38036, 38051, 38055, 38026, 0, {0, 0, 38059, 0}, 0, 0, { 1256, 20420, 10004, 720, 1, ';' }},
-       {0x0002, 0x007F, 257, -1, 38087, 38090, 38100, 38119, 38123, 38087, 0, {38127, 0, 0, 0}, 1, 1, { 1251, 21025, 10007, 866, 0, ';' }},
-       {0x0003, 0x007F, 257, -1, 38169, 38172, 38180, 38188, 38192, 38169, 0, {38196, 0, 0, 0}, 2, 2, { 1252, 500, 10000, 850, 0, ';' }},
-       {0x0004, 0x0004, 257, -1, 38216, 38223, 38251, 38258, 38262, 38266, 0, {38269, 0, 0, 0}, 3, 3, { 936, 500, 10008, 936, 0, ',' }},
-       {0x0004, 0x7804, 257, -1, 38276, 38284, 38251, 38258, 38262, 38266, 0, {38269, 0, 0, 0}, 4, 4, { 936, 500, 10008, 936, 0, ',' }},
-       {0x0005, 0x007F, 257, -1, 38305, 38308, 38314, 38324, 38328, 38305, 0, {38332, 0, 0, 0}, 5, 5, { 1250, 500, 10029, 852, 0, ';' }},
-       {0x0006, 0x007F, 257, -1, 38358, 38361, 38368, 38374, 38378, 38358, 0, {38382, 0, 0, 0}, 6, 6, { 1252, 20277, 10000, 850, 0, ';' }},
-       {0x0007, 0x007F, 257, -1, 38403, 38406, 38413, 38421, 38425, 38403, 0, {38429, 0, 0, 0}, 7, 7, { 1252, 20273, 10000, 850, 0, ';' }},
-       {0x0008, 0x007F, 257, -1, 38454, 38457, 38463, 38480, 38484, 38454, 0, {38488, 0, 0, 0}, 8, 8, { 1253, 20273, 10006, 737, 0, ';' }},
-       {0x0009, 0x007F, 257, -1, 38530, 38533, 38533, 38541, 38545, 38530, 0, {38549, 0, 0, 0}, 9, 9, { 1252, 37, 10000, 437, 0, ',' }},
-       {0x000A, 0x007F, 257, -1, 38568, 38571, 38579, 38588, 38592, 38568, 0, {38596, 0, 0, 0}, 10, 10, { 1252, 20284, 10000, 850, 0, ';' }},
-       {0x000B, 0x007F, 257, -1, 38618, 38621, 38629, 38635, 38639, 38618, 0, {38643, 0, 0, 0}, 11, 11, { 1252, 20278, 10000, 850, 0, ';' }},
-       {0x000C, 0x007F, 257, -1, 38668, 38671, 38678, 38688, 38692, 38668, 0, {38696, 0, 0, 0}, 12, 12, { 1252, 20297, 10000, 850, 0, ';' }},
-       {0x000D, 0x007F, 257, -1, 38718, 38721, 38728, 38739, 38743, 38718, 0, {38747, 0, 0, 0}, 13, 13, { 1255, 500, 10005, 862, 1, ',' }},
-       {0x000E, 0x007F, 257, -1, 38780, 38783, 38793, 38800, 38804, 38780, 0, {38808, 0, 0, 0}, 14, 14, { 1250, 500, 10029, 852, 0, ';' }},
-       {0x000F, 0x007F, 257, -1, 38824, 38827, 38837, 38847, 38851, 38824, 0, {38855, 0, 0, 0}, 15, 15, { 1252, 20871, 10079, 850, 0, ';' }},
-       {0x0010, 0x007F, 257, -1, 38875, 38878, 38886, 38895, 38899, 38875, 0, {38903, 0, 0, 0}, 16, 16, { 1252, 20280, 10000, 850, 0, ';' }},
-       {0x0011, 0x007F, 257, -1, 38925, 38928, 38937, 38947, 38951, 38925, 0, {38955, 0, 0, 0}, 17, 17, { 932, 20290, 10001, 932, 0, ',' }},
-       {0x0012, 0x007F, 257, -1, 38982, 38985, 38992, 39002, 39006, 38982, 0, {39010, 0, 0, 0}, 18, 18, { 949, 20833, 10003, 949, 0, ',' }},
-       {0x0013, 0x007F, 257, -1, 39020, 39023, 39029, 39040, 39044, 39020, 0, {39048, 0, 0, 0}, 19, 19, { 1252, 500, 10000, 850, 0, ';' }},
-       {0x0014, 0x007F, 257, -1, 39070, 39073, 39083, 39089, 39093, 39097, 0, {38382, 0, 0, 0}, 20, 20, { 1252, 20277, 10000, 850, 0, ';' }},
-       {0x0015, 0x007F, 257, -1, 39100, 39103, 39110, 39117, 39121, 39100, 0, {39125, 0, 0, 0}, 21, 21, { 1250, 20880, 10029, 852, 0, ';' }},
-       {0x0016, 0x007F, 257, -1, 39149, 39152, 39163, 39174, 39178, 39149, 0, {39182, 0, 0, 0}, 22, 22, { 1252, 500, 10000, 850, 0, ';' }},
-       {0x0017, 0x007F, 257, -1, 39205, 39208, 39216, 39226, 39230, 39205, 0, {39234, 0, 0, 0}, 23, 23, { 1252, 20273, 10000, 850, 0, ';' }},
-       {0x0018, 0x007F, 257, -1, 39254, 39257, 39266, 39275, 39279, 39254, 0, {39283, 0, 0, 0}, 24, 24, { 1250, 20880, 10029, 852, 0, ';' }},
-       {0x0019, 0x007F, 257, -1, 39302, 39305, 39313, 39328, 39332, 39302, 0, {39336, 0, 0, 0}, 25, 25, { 1251, 20880, 10007, 866, 0, ';' }},
-       {0x001A, 0x007F, 257, -1, 39382, 39385, 39394, 39403, 39407, 39382, 0, {39411, 0, 0, 0}, 26, 26, { 1250, 500, 10082, 852, 0, ';' }},
-       {0x001B, 0x007F, 257, -1, 12780, 39434, 39441, 39453, 39457, 12780, 0, {39461, 0, 0, 0}, 27, 27, { 1250, 20880, 10029, 852, 0, ';' }},
-       {0x001C, 0x007F, 257, -1, 39485, 39488, 39497, 39503, 39507, 39485, 0, {39511, 0, 0, 0}, 28, 28, { 1250, 20880, 10029, 852, 0, ';' }},
-       {0x001D, 0x007F, 257, -1, 39531, 39534, 39542, 39550, 39554, 39531, 0, {38382, 0, 0, 0}, 29, 29, { 1252, 20278, 10000, 850, 0, ';' }},
-       {0x001E, 0x007F, 512, -1, 39558, 39561, 39566, 39576, 39580, 39558, 0, {0, 39584, 0, 0}, 30, 30, { 874, 20838, 10021, 874, 0, ',' }},
-       {0x001F, 0x007F, 257, -1, 12789, 39615, 39623, 39632, 39636, 12789, 0, {39640, 0, 0, 0}, 31, 31, { 1254, 20905, 10081, 857, 0, ';' }},
-       {0x0020, 0x007F, 257, -1, 39654, 39657, 39662, 39671, 39675, 39654, 0, {39679, 0, 0, 0}, 32, 32, { 1256, 20420, 10004, 720, 1, ';' }},
-       {0x0021, 0x007F, 257, -1, 39709, 39712, 39723, 39740, 39744, 39709, 0, {39748, 0, 0, 0}, 33, 33, { 1252, 500, 10000, 850, 0, ';' }},
-       {0x0022, 0x007F, 257, -1, 39767, 39770, 39780, 39801, 39805, 39767, 0, {39809, 0, 0, 0}, 34, 34, { 1251, 500, 10017, 866, 0, ';' }},
-       {0x0023, 0x007F, 257, -1, 39855, 39858, 39869, 39890, 39894, 39855, 0, {39898, 0, 0, 0}, 35, 35, { 1251, 500, 10007, 866, 0, ';' }},
-       {0x0024, 0x007F, 257, -1, 39940, 39943, 39953, 39967, 39971, 39940, 0, {39975, 0, 0, 0}, 36, 36, { 1250, 20880, 10029, 852, 0, ';' }},
-       {0x0025, 0x007F, 257, -1, 39997, 40000, 40009, 40015, 40019, 39997, 0, {40023, 0, 0, 0}, 37, 37, { 1257, 500, 10029, 775, 0, ';' }},
-       {0x0026, 0x007F, 257, -1, 40043, 40046, 40054, 40064, 40068, 40043, 0, {40072, 0, 0, 0}, 38, 38, { 1257, 500, 10029, 775, 0, ';' }},
-       {0x0027, 0x007F, 257, -1, 40091, 40094, 40105, 40115, 40119, 40091, 0, {40123, 0, 0, 0}, 39, 39, { 1257, 500, 10029, 775, 0, ';' }},
-       {0x0028, 0x007F, 257, -1, 40146, 40149, 40155, 40168, 40172, 40146, 0, {0, 0, 0, 0}, 40, 40, { 1251, 20880, 10007, 866, 0, ';' }},
-       {0x0029, 0x007F, 257, -1, 40176, 40179, 40187, 40198, 40202, 40176, 0, {40206, 0, 0, 0}, 41, 41, { 1256, 20420, 10004, 720, 1, ';' }},
-       {0x002A, 0x007F, 257, -1, 40230, 40233, 40244, 40259, 35156, 40230, 0, {40263, 0, 0, 0}, 42, 42, { 1258, 500, 10000, 1258, 0, ',' }},
-       {0x002B, 0x007F, 257, -1, 40278, 40281, 40290, 40305, 40309, 40278, 0, {40313, 0, 0, 0}, 43, 43, { 0, 500, 2, 1, 0, ',' }},
-       {0x002C, 0x007F, 257, -1, 40343, 40346, 40358, 40370, 40374, 40343, 0, {40378, 0, 0, 0}, 44, 44, { 1254, 20905, 10081, 857, 0, ';' }},
-       {0x002D, 0x007F, 257, -1, 40397, 40400, 40407, 40415, 40419, 40397, 0, {40423, 0, 0, 0}, 45, 45, { 1252, 500, 10000, 850, 0, ';' }},
-       {0x002F, 0x007F, 257, -1, 40443, 40446, 40457, 40478, 40482, 40443, 0, {40486, 0, 0, 0}, 46, 46, { 1251, 500, 10007, 866, 0, ';' }},
-       {0x0032, 0x007F, 257, -1, 40530, 40533, 40540, 40549, 40553, 40530, 0, {0, 0, 0, 0}, 47, 47, { 1252, 500, 10000, 850, 0, ',' }},
-       {0x0034, 0x007F, 257, -1, 40557, 40560, 40566, 40575, 40579, 40557, 0, {0, 0, 0, 0}, 48, 48, { 1252, 500, 10000, 850, 0, ',' }},
-       {0x0035, 0x007F, 257, -1, 40583, 40586, 40591, 40599, 40603, 40583, 0, {40607, 0, 0, 0}, 49, 49, { 1252, 500, 10000, 850, 0, ',' }},
-       {0x0036, 0x007F, 257, -1, 40628, 40631, 40631, 40641, 40645, 40628, 0, {40649, 0, 0, 0}, 50, 50, { 1252, 500, 10000, 850, 0, ',' }},
-       {0x0037, 0x007F, 257, -1, 40669, 40672, 40681, 40703, 40707, 40669, 0, {40711, 0, 0, 0}, 51, 51, { 0, 500, 2, 1, 0, ';' }},
-       {0x0038, 0x007F, 257, -1, 40776, 40779, 40787, 40797, 40801, 40776, 0, {0, 0, 0, 0}, 52, 52, { 1252, 20277, 10079, 850, 0, ';' }},
-       {0x0039, 0x007F, 257, -1, 40805, 40808, 40814, 40830, 40834, 40805, 0, {40838, 0, 0, 0}, 53, 53, { 0, 500, 2, 1, 0, ',' }},
-       {0x003A, 0x007F, 257, -1, 40891, 40894, 40902, 40908, 40912, 40891, 0, {40916, 0, 0, 0}, 54, 54, { 0, 500, 2, 1, 0, ',' }},
-       {0x003B, 0x007F, 257, -1, 40937, 40940, 40954, 40971, 40975, 40937, 0, {40979, 0, 0, 0}, 55, 55, { 1252, 20277, 10000, 850, 0, ';' }},
-       {0x003C, 0x007F, 257, -1, 40998, 41001, 41007, 41015, 41019, 40998, 0, {41023, 0, 0, 0}, 56, 56, { 1252, 500, 10000, 850, 0, ',' }},
-       {0x003E, 0x007F, 257, -1, 41044, 41047, 41053, 41067, 41071, 41044, 0, {41075, 0, 0, 0}, 57, 57, { 1252, 500, 10000, 850, 0, ';' }},
-       {0x003F, 0x007F, 257, -1, 41092, 41095, 41102, 41122, 41126, 41092, 0, {41130, 0, 0, 0}, 58, 58, { 0, 500, 2, 1, 0, ';' }},
-       {0x0040, 0x007F, 257, -1, 41172, 41175, 41182, 41199, 41203, 41172, 0, {41207, 0, 0, 0}, 59, 59, { 1251, 20880, 10007, 866, 0, ';' }},
-       {0x0041, 0x007F, 257, -1, 41245, 41248, 41256, 41266, 41270, 41245, 0, {41274, 0, 0, 0}, 60, 60, { 1252, 500, 10000, 437, 0, ',' }},
-       {0x0043, 0x007F, 257, -1, 41295, 41298, 41304, 41315, 41319, 41295, 0, {41323, 0, 0, 0}, 61, 61, { 1254, 500, 10029, 857, 0, ';' }},
-       {0x0045, 0x007F, 257, -1, 41343, 41346, 41354, 41370, 41374, 41343, 0, {41378, 0, 0, 0}, 62, 62, { 0, 500, 2, 1, 0, ',' }},
-       {0x0046, 0x007F, 257, -1, 41443, 41446, 41454, 41473, 41477, 41443, 0, {41481, 0, 0, 0}, 63, 63, { 0, 500, 2, 1, 0, ',' }},
-       {0x0047, 0x007F, 257, -1, 41528, 41531, 41540, 41562, 41566, 41528, 0, {41570, 0, 0, 0}, 64, 64, { 0, 500, 2, 1, 0, ',' }},
-       {0x0048, 0x007F, 257, -1, 41626, 41629, 41635, 41651, 41655, 41626, 0, {0, 0, 0, 0}, 65, 65, { 0, 500, 2, 1, 0, ',' }},
-       {0x0049, 0x007F, 257, -1, 41659, 41662, 41668, 41684, 41688, 41659, 0, {41692, 0, 0, 0}, 66, 66, { 0, 500, 2, 1, 0, ',' }},
-       {0x004A, 0x007F, 257, -1, 41757, 41760, 41767, 41786, 41790, 41757, 0, {41794, 0, 0, 0}, 67, 67, { 0, 500, 2, 1, 0, ',' }},
-       {0x004B, 0x007F, 257, -1, 37279, 41859, 41867, 41883, 41887, 37279, 0, {41891, 0, 0, 0}, 68, 68, { 0, 500, 2, 1, 0, ',' }},
-       {0x004C, 0x007F, 257, -1, 41956, 41959, 41969, 41988, 41992, 41956, 0, {41996, 0, 0, 0}, 69, 69, { 0, 500, 2, 1, 0, ',' }},
-       {0x004D, 0x007F, 257, -1, 42040, 42043, 42052, 42074, 42078, 42040, 0, {42082, 0, 0, 0}, 70, 70, { 0, 500, 2, 1, 0, ',' }},
-       {0x004E, 0x007F, 257, -1, 42135, 42138, 42146, 42162, 2505, 42135, 0, {42166, 0, 0, 0}, 71, 71, { 0, 500, 2, 1, 0, ',' }},
-       {0x0050, 0x007F, 257, -1, 42228, 42231, 42241, 42254, 42258, 42228, 0, {42262, 0, 0, 0}, 72, 72, { 1251, 20880, 10007, 866, 0, ';' }},
-       {0x0051, 0x007F, 257, -1, 42294, 42297, 42305, 42330, 42334, 42294, 0, {0, 0, 0, 0}, 73, 73, { 0, 500, 2, 1, 0, ',' }},
-       {0x0052, 0x007F, 257, -1, 42338, 42341, 42347, 42355, 42359, 42338, 0, {42363, 0, 0, 0}, 74, 74, { 1252, 20285, 10000, 850, 0, ',' }},
-       {0x0053, 0x007F, 257, -1, 42379, 42382, 42388, 42404, 42408, 42379, 0, {42412, 0, 0, 0}, 75, 75, { 0, 500, 2, 1, 0, ',' }},
-       {0x0054, 0x007F, 257, -1, 42467, 42470, 42474, 42484, 42488, 42467, 0, {42492, 0, 0, 0}, 76, 76, { 0, 500, 2, 1, 0, ',' }},
-       {0x0056, 0x007F, 257, -1, 42538, 42541, 42550, 42557, 42561, 42538, 0, {38903, 0, 0, 0}, 77, 77, { 1252, 500, 10000, 850, 0, ';' }},
-       {0x0057, 0x007F, 257, -1, 42565, 42569, 42577, 42596, 42565, 42565, 0, {0, 0, 0, 0}, 78, 78, { 0, 500, 2, 1, 0, ',' }},
-       {0x005B, 0x007F, 257, -1, 42600, 42603, 42611, 42627, 42631, 42600, 0, {42635, 0, 0, 0}, 79, 79, { 0, 500, 2, 1, 0, ',' }},
-       {0x005E, 0x007F, 257, -1, 7992, 42694, 42702, 42715, 42719, 7992, 0, {42723, 0, 0, 0}, 80, 80, { 0, 500, 2, 1, 0, ';' }},
-       {0x005F, 0x007F, 257, -1, 42768, 42772, 42796, 42806, 42768, 42768, 0, {0, 0, 0, 0}, 81, 81, { 1252, 20297, 10000, 850, 0, ';' }},
-       {0x0061, 0x007F, 257, -1, 1987, 42810, 42817, 42836, 42840, 1987, 0, {42844, 0, 0, 0}, 82, 82, { 0, 500, 2, 1, 0, ',' }},
-       {0x0063, 0x007F, 1024, -1, 42894, 42897, 42904, 42913, 42917, 42894, 0, {0, 0, 0, 0}, 83, 83, { 0, 500, 2, 1, 1, ';' }},
-       {0x0064, 0x007F, 257, -1, 42921, 42925, 42925, 42934, 42921, 42921, 0, {42938, 0, 0, 0}, 84, 84, { 1252, 500, 10000, 437, 0, ',' }},
-       {0x0068, 0x007F, 257, -1, 42961, 42964, 42964, 42970, 42974, 42961, 0, {0, 0, 0, 0}, 85, 85, { 1252, 37, 10000, 437, 0, ',' }},
-       {0x006A, 0x007F, 257, -1, 42978, 42981, 42988, 43003, 43007, 42978, 0, {0, 0, 0, 0}, 86, 86, { 1252, 37, 10000, 437, 0, ',' }},
-       {0x006C, 0x007F, 257, -1, 43011, 43015, 43030, 43047, 43011, 43011, 0, {0, 0, 0, 0}, 87, 87, { 1252, 500, 10000, 850, 0, ',' }},
-       {0x006F, 0x007F, 257, -1, 43051, 43054, 43066, 43078, 43082, 43051, 0, {43086, 0, 0, 0}, 88, 88, { 1252, 20277, 10000, 850, 0, ';' }},
-       {0x0070, 0x007F, 257, -1, 43113, 43116, 43116, 43121, 43125, 43113, 0, {0, 0, 0, 0}, 89, 89, { 1252, 37, 10000, 437, 0, ',' }},
-       {0x0078, 0x007F, 257, -1, 43129, 43132, 43143, 43153, 43157, 43129, 0, {43161, 0, 0, 0}, 90, 90, { 0, 500, 2, 1, 0, ',' }},
-       {0x007E, 0x007F, 257, -1, 43174, 43177, 43184, 43194, 43198, 43174, 0, {43202, 0, 0, 0}, 91, 91, { 1252, 20297, 10000, 850, 0, ';' }},
-       {0x0084, 0x007F, 257, -1, 43222, 43226, 43239, 43258, 43222, 43222, 0, {43262, 0, 0, 0}, 92, 92, { 1252, 20297, 10000, 850, 0, ';' }},
-       {0x0085, 0x007F, 257, -1, 43287, 43291, 43297, 43315, 43287, 43287, 0, {0, 0, 0, 0}, 93, 93, { 1251, 20880, 10007, 866, 0, ';' }},
-       {0x0087, 0x007F, 257, -1, 43319, 43322, 43322, 43334, 43338, 43319, 0, {0, 0, 0, 0}, 94, 94, { 1252, 37, 10000, 437, 0, ';' }},
-       {0x0091, 0x007F, 257, -1, 43342, 43345, 43361, 43371, 43375, 43342, 0, {43379, 0, 0, 0}, 95, 95, { 1252, 20285, 10000, 850, 0, ',' }},
-       {0x0401, 0x0001, 768, 95, 43404, 43410, 43432, 38051, 38055, 38026, 13675, {0, 0, 38059, 0}, 96, 96, { 1256, 20420, 10004, 720, 1, ';' }},
-       {0x0402, 0x0002, 257, 11, 43496, 43502, 43523, 38119, 38123, 38087, 43561, {38127, 0, 0, 0}, 97, 97, { 1251, 21025, 10007, 866, 0, ';' }},
-       {0x0403, 0x0003, 257, 31, 43564, 43570, 43586, 38188, 38192, 38169, 43604, {38196, 0, 0, 0}, 98, 98, { 1252, 500, 10000, 850, 0, ';' }},
-       {0x0404, 0x7C04, 257, 107, 43607, 43613, 43635, 43651, 38262, 38266, 43655, {43658, 0, 0, 0}, 99, 99, { 950, 500, 10002, 950, 0, ',' }},
-       {0x0405, 0x0005, 257, 23, 43665, 43671, 43694, 38324, 38328, 38305, 43724, {38332, 0, 0, 0}, 100, 100, { 1250, 500, 10029, 852, 0, ';' }},
-       {0x0406, 0x0006, 257, 25, 43727, 43733, 43750, 38374, 38378, 38358, 43766, {38382, 0, 0, 0}, 101, 101, { 1252, 20277, 10000, 850, 0, ';' }},
-       {0x0407, 0x0007, 257, 24, 43769, 43775, 43792, 38421, 38425, 38403, 43814, {38429, 0, 0, 0}, 102, 102, { 1252, 20273, 10000, 850, 0, ';' }},
-       {0x0408, 0x0008, 257, 39, 43817, 43823, 43838, 38480, 38484, 38454, 43870, {38488, 0, 0, 0}, 103, 103, { 1253, 20273, 10006, 737, 0, ';' }},
-       {0x0409, 0x0009, 257, 109, 43873, 43879, 43879, 38541, 38545, 38530, 43903, {38549, 0, 0, 0}, 104, 104, { 1252, 37, 10000, 437, 0, ',' }},
-       {0x040B, 0x000B, 257, 33, 43906, 43912, 43930, 38635, 38639, 38618, 43944, {38643, 0, 0, 0}, 105, 105, { 1252, 20278, 10000, 850, 0, ';' }},
-       {0x040C, 0x000C, 257, 35, 43947, 43953, 43969, 38688, 38692, 38668, 43988, {38696, 0, 0, 0}, 106, 106, { 1252, 20297, 10000, 850, 0, ';' }},
-       {0x040D, 0x000D, 257, 47, 43991, 43997, 44013, 38739, 38743, 38718, 44037, {38747, 0, 0, 0}, 107, 107, { 1255, 500, 10005, 862, 1, ',' }},
-       {0x040E, 0x000E, 257, 44, 44040, 44046, 44066, 38800, 38804, 38780, 44089, {38808, 0, 0, 0}, 108, 108, { 1250, 500, 10029, 852, 0, ';' }},
-       {0x040F, 0x000F, 257, 51, 44092, 44098, 44118, 38847, 38851, 38824, 44138, {38855, 0, 0, 0}, 109, 109, { 1252, 20871, 10079, 850, 0, ';' }},
-       {0x0410, 0x0010, 257, 52, 44141, 44147, 44163, 38895, 38899, 38875, 44181, {38903, 0, 0, 0}, 110, 110, { 1252, 20280, 10000, 850, 0, ';' }},
-       {0x0411, 0x0011, 257, 55, 44184, 44190, 44207, 38947, 38951, 38925, 44226, {38955, 0, 0, 0}, 111, 111, { 932, 20290, 10001, 932, 0, ',' }},
-       {0x0412, 0x0012, 257, 58, 44229, 44235, 44256, 39002, 39006, 38982, 44281, {39010, 0, 0, 0}, 112, 112, { 949, 20833, 10003, 949, 0, ',' }},
-       {0x0413, 0x0013, 257, 77, 44284, 44290, 44310, 39040, 39044, 39020, 44333, {39048, 0, 0, 0}, 113, 113, { 1252, 500, 10000, 850, 0, ';' }},
-       {0x0414, 0x7C14, 257, 78, 44336, 44342, 44369, 39089, 39093, 39097, 44391, {38382, 0, 0, 0}, 114, 114, { 1252, 20277, 10000, 850, 0, ';' }},
-       {0x0415, 0x0015, 257, 86, 44394, 44400, 44416, 39117, 39121, 39100, 44432, {39125, 0, 0, 0}, 115, 115, { 1250, 20880, 10029, 852, 0, ';' }},
-       {0x0416, 0x0016, 257, 14, 44435, 44441, 44461, 39174, 39178, 39149, 44481, {39182, 0, 0, 0}, 116, 116, { 1252, 500, 10000, 850, 0, ';' }},
-       {0x0417, 0x0017, 257, 18, 44484, 44490, 44512, 39226, 39230, 39205, 13678, {39234, 0, 0, 0}, 117, 117, { 1252, 20273, 10000, 850, 0, ';' }},
-       {0x0418, 0x0018, 257, 91, 44531, 44537, 44556, 39275, 39279, 39254, 44576, {39283, 0, 0, 0}, 118, 118, { 1250, 20880, 10029, 852, 0, ';' }},
-       {0x0419, 0x0019, 257, 93, 44579, 44585, 44602, 39328, 39332, 39302, 44632, {39336, 0, 0, 0}, 119, 119, { 1251, 20880, 10007, 866, 0, ';' }},
-       {0x041A, 0x001A, 257, 43, 44635, 44641, 44660, 39403, 39407, 39382, 44680, {39411, 0, 0, 0}, 120, 120, { 1250, 500, 10082, 852, 0, ';' }},
-       {0x041B, 0x001B, 257, 99, 44683, 44689, 44707, 39453, 39457, 12780, 44731, {39461, 0, 0, 0}, 121, 121, { 1250, 20880, 10029, 852, 0, ';' }},
-       {0x041C, 0x001C, 257, 2, 44734, 44740, 44759, 39503, 39507, 39485, 44777, {39511, 0, 0, 0}, 122, 122, { 1250, 20880, 10029, 852, 0, ';' }},
-       {0x041D, 0x001D, 257, 96, 44780, 44786, 44803, 39550, 39554, 39531, 44821, {38382, 0, 0, 0}, 123, 123, { 1252, 20278, 10000, 850, 0, ';' }},
-       {0x041E, 0x001E, 512, 102, 44824, 44830, 44846, 39576, 39580, 39558, 44868, {0, 39584, 0, 0}, 124, 124, { 874, 20838, 10021, 874, 0, ',' }},
-       {0x041F, 0x001F, 257, 105, 44871, 44877, 44894, 39632, 39636, 12789, 44914, {39640, 0, 0, 0}, 125, 125, { 1254, 20905, 10081, 857, 0, ';' }},
-       {0x0420, 0x0020, 257, 85, 44917, 44923, 44939, 39671, 39675, 39654, 44965, {39679, 0, 0, 0}, 126, 126, { 1256, 20420, 10004, 720, 1, ';' }},
-       {0x0421, 0x0021, 257, 45, 44968, 44974, 44997, 39740, 39744, 39709, 45026, {39748, 0, 0, 0}, 127, 127, { 1252, 500, 10000, 850, 0, ';' }},
-       {0x0422, 0x0022, 257, 108, 45029, 45035, 45055, 39801, 39805, 39767, 45093, {39809, 0, 0, 0}, 128, 128, { 1251, 500, 10017, 866, 0, ';' }},
-       {0x0423, 0x0023, 257, 15, 45096, 45102, 45123, 39890, 39894, 39855, 45163, {39898, 0, 0, 0}, 129, 129, { 1251, 500, 10007, 866, 0, ';' }},
-       {0x0424, 0x0024, 257, 98, 45166, 45172, 45193, 39967, 39971, 39940, 45219, {39975, 0, 0, 0}, 130, 130, { 1250, 20880, 10029, 852, 0, ';' }},
-       {0x0425, 0x0025, 257, 29, 45222, 45228, 45247, 40015, 40019, 39997, 45261, {40023, 0, 0, 0}, 131, 131, { 1257, 500, 10029, 775, 0, ';' }},
-       {0x0426, 0x0026, 257, 66, 45264, 45270, 45287, 40064, 40068, 40043, 45307, {40072, 0, 0, 0}, 132, 132, { 1257, 500, 10029, 775, 0, ';' }},
-       {0x0427, 0x0027, 257, 64, 45310, 45316, 45339, 40115, 40119, 40091, 45359, {40123, 0, 0, 0}, 133, 133, { 1257, 500, 10029, 775, 0, ';' }},
-       {0x0428, 0x7C28, 257, 103, 45362, 45373, 45402, 40168, 40172, 40146, 45438, {0, 0, 0, 0}, 134, 134, { 1251, 20880, 10007, 866, 0, ';' }},
-       {0x0429, 0x0029, 257, 50, 45441, 45447, 45462, 40198, 40202, 40176, 45486, {40206, 0, 0, 0}, 135, 135, { 1256, 20420, 10004, 720, 1, ';' }},
-       {0x042A, 0x002A, 257, 113, 45489, 45495, 45516, 40259, 35156, 40230, 45544, {40263, 0, 0, 0}, 136, 136, { 1258, 500, 10000, 1258, 0, ',' }},
-       {0x042B, 0x002B, 257, 3, 45547, 45553, 45572, 40305, 40309, 40278, 1924, {40313, 0, 0, 0}, 137, 137, { 0, 500, 2, 1, 0, ',' }},
-       {0x042C, 0x782C, 257, 7, 45606, 45617, 45649, 40370, 40374, 40343, 45675, {40378, 0, 0, 0}, 138, 138, { 1254, 20905, 10081, 857, 0, ';' }},
-       {0x042D, 0x002D, 257, 31, 45678, 45684, 45699, 40415, 40419, 40397, 43604, {40423, 0, 0, 0}, 139, 139, { 1252, 500, 10000, 850, 0, ';' }},
-       {0x042F, 0x002F, 257, 71, 45718, 45724, 45747, 40478, 40482, 40443, 45791, {40486, 0, 0, 0}, 140, 140, { 1251, 500, 10007, 866, 0, ';' }},
-       {0x0432, 0x0032, 257, 115, 45794, 45800, 40540, 40549, 40553, 40530, 45822, {0, 0, 0, 0}, 141, 141, { 1252, 500, 10000, 850, 0, ',' }},
-       {0x0434, 0x0034, 257, 115, 45825, 45831, 40566, 40575, 40579, 40557, 45822, {0, 0, 0, 0}, 142, 142, { 1252, 500, 10000, 850, 0, ',' }},
-       {0x0435, 0x0035, 257, 115, 45852, 45858, 45878, 40599, 40603, 40583, 45822, {40607, 0, 0, 0}, 143, 143, { 1252, 500, 10000, 850, 0, ',' }},
-       {0x0436, 0x0036, 257, 115, 45903, 45909, 45934, 40641, 40645, 40628, 45822, {40649, 0, 0, 0}, 144, 144, { 1252, 500, 10000, 850, 0, ',' }},
-       {0x0437, 0x0037, 257, 37, 45958, 45964, 45983, 40703, 40707, 40669, 46038, {40711, 0, 0, 0}, 145, 145, { 0, 500, 2, 1, 0, ';' }},
-       {0x0438, 0x0038, 257, 34, 46041, 46047, 46071, 40797, 40801, 40776, 46092, {0, 0, 0, 0}, 146, 146, { 1252, 20277, 10079, 850, 0, ';' }},
-       {0x0439, 0x0039, 257, 48, 46095, 46101, 46115, 40830, 40834, 40805, 46146, {40838, 0, 0, 0}, 147, 147, { 0, 500, 2, 1, 0, ',' }},
-       {0x043A, 0x003A, 257, 73, 46149, 46155, 46171, 40908, 40912, 40891, 46185, {40916, 0, 0, 0}, 148, 148, { 0, 500, 2, 1, 0, ',' }},
-       {0x043B, 0x003B, 257, 78, 46188, 46194, 46217, 40971, 40975, 40937, 44391, {40979, 0, 0, 0}, 149, 149, { 1252, 20277, 10000, 850, 0, ';' }},
-       {0x0441, 0x0041, 257, 56, 46242, 46248, 46264, 41266, 41270, 41245, 46282, {41274, 0, 0, 0}, 150, 150, { 1252, 500, 10000, 437, 0, ',' }},
-       {0x0443, 0x7C43, 257, 111, 46285, 46296, 46322, 41315, 41319, 41295, 46348, {41323, 0, 0, 0}, 151, 151, { 1254, 500, 10029, 857, 0, ';' }},
-       {0x0445, 0x0045, 257, 48, 46351, 46357, 46373, 41370, 41374, 41343, 46146, {41378, 0, 0, 0}, 152, 152, { 0, 500, 2, 1, 0, ',' }},
-       {0x0447, 0x0047, 257, 48, 46404, 46410, 46427, 41562, 41566, 41528, 46146, {41570, 0, 0, 0}, 153, 153, { 0, 500, 2, 1, 0, ',' }},
-       {0x0448, 0x0048, 257, 48, 46464, 46470, 46484, 41651, 41655, 41626, 46146, {0, 0, 0, 0}, 154, 154, { 0, 500, 2, 1, 0, ',' }},
-       {0x0449, 0x0049, 257, 48, 46515, 46521, 46535, 41684, 41688, 41659, 46146, {41692, 0, 0, 0}, 155, 155, { 0, 500, 2, 1, 0, ',' }},
-       {0x044A, 0x004A, 257, 48, 46575, 46581, 46596, 41786, 41790, 41757, 46146, {41794, 0, 0, 0}, 156, 156, { 0, 500, 2, 1, 0, ',' }},
-       {0x044B, 0x004B, 257, 48, 46643, 46649, 46665, 41883, 41887, 37279, 46146, {41891, 0, 0, 0}, 157, 157, { 0, 500, 2, 1, 0, ',' }},
-       {0x044C, 0x004C, 257, 48, 46696, 46702, 46720, 41988, 41992, 41956, 46146, {41996, 0, 0, 0}, 158, 158, { 0, 500, 2, 1, 0, ',' }},
-       {0x044D, 0x004D, 257, 48, 46760, 46766, 46783, 42074, 42078, 42040, 46146, {42082, 0, 0, 0}, 159, 159, { 0, 500, 2, 1, 0, ',' }},
-       {0x044E, 0x004E, 257, 48, 46820, 46826, 46842, 42162, 2505, 42135, 46146, {42166, 0, 0, 0}, 160, 160, { 0, 500, 2, 1, 0, ',' }},
-       {0x0451, 0x0051, 257, 20, 46873, 46879, 46895, 42330, 42334, 42294, 13757, {0, 0, 0, 0}, 161, 161, { 0, 500, 2, 1, 0, ',' }},
-       {0x0452, 0x0052, 257, 36, 46941, 46947, 46970, 42355, 42359, 42338, 46997, {42363, 0, 0, 0}, 162, 162, { 1252, 20285, 10000, 850, 0, ',' }},
-       {0x0453, 0x0053, 257, 57, 47000, 47006, 47023, 42404, 42408, 42379, 47063, {42412, 0, 0, 0}, 163, 163, { 0, 500, 2, 1, 0, ',' }},
-       {0x0454, 0x0054, 257, 60, 47066, 47072, 47083, 42484, 42488, 42467, 47105, {42492, 0, 0, 0}, 164, 164, { 0, 500, 2, 1, 0, ',' }},
-       {0x0456, 0x0056, 257, 31, 47108, 47114, 47131, 42557, 42561, 42538, 43604, {38903, 0, 0, 0}, 165, 165, { 1252, 500, 10000, 850, 0, ';' }},
-       {0x0457, 0x0057, 257, 48, 47148, 47155, 47171, 42596, 42565, 42565, 46146, {0, 0, 0, 0}, 166, 166, { 0, 500, 2, 1, 0, ',' }},
-       {0x045B, 0x005B, 257, 63, 47205, 47211, 47231, 42627, 42631, 42600, 47281, {42635, 0, 0, 0}, 167, 167, { 0, 500, 2, 1, 0, ',' }},
-       {0x045E, 0x005E, 257, 32, 47284, 47290, 47309, 42715, 42719, 7992, 47340, {42723, 0, 0, 0}, 168, 168, { 0, 500, 2, 1, 0, ';' }},
-       {0x0461, 0x0061, 257, 79, 47343, 47349, 47364, 42836, 42840, 1987, 47401, {42844, 0, 0, 0}, 169, 169, { 0, 500, 2, 1, 0, ',' }},
-       {0x0463, 0x0063, 1024, 1, 47404, 47410, 47431, 42913, 42917, 42894, 47461, {0, 0, 0, 0}, 170, 170, { 0, 500, 2, 1, 1, ';' }},
-       {0x0464, 0x0064, 257, 84, 47464, 47471, 47494, 42934, 42921, 42921, 47515, {42938, 0, 0, 0}, 171, 171, { 1252, 500, 10000, 437, 0, ',' }},
-       {0x0468, 0x7C68, 257, 75, 47518, 47529, 47552, 42970, 42974, 42961, 47569, {0, 0, 0, 0}, 172, 172, { 1252, 37, 10000, 437, 0, ',' }},
-       {0x046A, 0x006A, 257, 75, 47572, 47578, 47595, 43003, 43007, 42978, 47569, {0, 0, 0, 0}, 173, 173, { 1252, 37, 10000, 437, 0, ',' }},
-       {0x046C, 0x006C, 257, 115, 47641, 47648, 43030, 43047, 43011, 43011, 45822, {0, 0, 0, 0}, 174, 174, { 1252, 500, 10000, 850, 0, ',' }},
-       {0x046F, 0x006F, 257, 38, 47678, 47684, 47708, 43078, 43082, 43051, 47739, {43086, 0, 0, 0}, 175, 175, { 1252, 20277, 10000, 850, 0, ';' }},
-       {0x0470, 0x0070, 257, 75, 47742, 47748, 47748, 43121, 43125, 43113, 47569, {0, 0, 0, 0}, 176, 176, { 1252, 37, 10000, 437, 0, ',' }},
-       {0x0478, 0x0078, 257, 20, 47763, 47769, 47788, 43153, 43157, 43129, 13757, {43161, 0, 0, 0}, 177, 177, { 0, 500, 2, 1, 0, ',' }},
-       {0x047E, 0x007E, 257, 35, 47807, 47813, 47829, 43194, 43198, 43174, 43988, {43202, 0, 0, 0}, 178, 178, { 1252, 20297, 10000, 850, 0, ';' }},
-       {0x0485, 0x0085, 257, 93, 47848, 47855, 43297, 43315, 43287, 43287, 44632, {0, 0, 0, 0}, 179, 179, { 1251, 20880, 10007, 866, 0, ';' }},
-       {0x0487, 0x0087, 257, 94, 47870, 47876, 47876, 43334, 43338, 43319, 47897, {0, 0, 0, 0}, 180, 180, { 1252, 37, 10000, 437, 0, ';' }},
-       {0x0491, 0x0091, 257, 36, 47900, 47906, 47939, 43371, 43375, 43342, 46997, {43379, 0, 0, 0}, 181, 181, { 1252, 20285, 10000, 850, 0, ',' }},
-       {0x0801, 0x0001, 257, 49, 47975, 47981, 47995, 48025, 38055, 38026, 48029, {38059, 0, 0, 0}, 182, 182, { 1256, 20420, 10004, 720, 1, ';' }},
-       {0x0804, 0x0004, 257, 20, 48032, 38284, 48038, 38258, 38262, 38266, 13757, {38269, 0, 0, 0}, 183, 183, { 936, 500, 10008, 936, 0, ',' }},
-       {0x0807, 0x0007, 257, 18, 48054, 48060, 48081, 48099, 38425, 38403, 13678, {38429, 0, 0, 0}, 184, 184, { 1252, 20273, 10000, 850, 0, ';' }},
-       {0x0809, 0x0009, 257, 36, 48103, 48109, 48109, 48134, 38545, 38530, 46997, {38549, 0, 0, 0}, 185, 185, { 1252, 20285, 10000, 850, 0, ',' }},
-       {0x080A, 0x000A, 257, 74, 48138, 48144, 48161, 48180, 38592, 38568, 48184, {38903, 0, 0, 0}, 186, 186, { 1252, 20284, 10000, 850, 0, ',' }},
-       {0x080C, 0x000C, 257, 10, 48187, 48193, 48210, 48231, 38692, 38668, 48235, {38696, 0, 0, 0}, 187, 187, { 1252, 20297, 10000, 850, 0, ';' }},
-       {0x0810, 0x0010, 257, 18, 48238, 48244, 48266, 48286, 38899, 38875, 13678, {38903, 0, 0, 0}, 188, 188, { 1252, 500, 10000, 850, 0, ';' }},
-       {0x0813, 0x0013, 257, 10, 48290, 48296, 48312, 48333, 39044, 39020, 48235, {39048, 0, 0, 0}, 189, 189, { 1252, 500, 10000, 850, 0, ';' }},
-       {0x0814, 0x7814, 257, 78, 48337, 48343, 48370, 48386, 48390, 48394, 44391, {38382, 0, 0, 0}, 190, 190, { 1252, 20277, 10000, 850, 0, ';' }},
-       {0x0816, 0x0016, 257, 88, 48397, 48403, 48425, 48447, 39178, 39149, 48451, {39182, 0, 0, 0}, 191, 191, { 1252, 500, 10000, 850, 0, ';' }},
-       {0x081D, 0x001D, 257, 33, 48454, 48460, 48478, 48496, 39554, 39531, 43944, {38382, 0, 0, 0}, 192, 192, { 1252, 20278, 10000, 850, 0, ';' }},
-       {0x082C, 0x742C, 257, 7, 48500, 48511, 45649, 48546, 40374, 40343, 45675, {40378, 0, 0, 0}, 193, 193, { 1251, 20880, 10007, 866, 0, ';' }},
-       {0x083C, 0x003C, 257, 46, 48550, 48556, 48572, 41015, 41019, 40998, 48588, {41023, 0, 0, 0}, 194, 194, { 1252, 500, 10000, 850, 0, ',' }},
-       {0x0843, 0x7843, 257, 111, 48591, 48602, 46322, 41315, 41319, 41295, 46348, {48631, 0, 0, 0}, 195, 195, { 1251, 20880, 10007, 866, 0, ';' }},
-       {0x0845, 0x0045, 257, 9, 48669, 48675, 48696, 48739, 41374, 41343, 48743, {41378, 0, 0, 0}, 196, 196, { 0, 500, 2, 1, 0, ',' }},
-       {0x0C01, 0x0001, 257, 30, 48746, 48752, 48767, 48791, 38055, 38026, 48795, {38059, 0, 0, 0}, 197, 197, { 1256, 20420, 10004, 720, 1, ';' }},
-       {0x0C04, 0x7C04, 257, 41, 48798, 48804, 48847, 48884, 38262, 38266, 48888, {43658, 0, 0, 0}, 198, 198, { 950, 500, 10002, 950, 0, ',' }},
-       {0x0C07, 0x0007, 257, 5, 48891, 48897, 48914, 48936, 38425, 38403, 48940, {38429, 0, 0, 0}, 199, 199, { 1252, 20273, 10000, 850, 0, ';' }},
-       {0x0C09, 0x0009, 257, 6, 48943, 48949, 48949, 48969, 38545, 38530, 48973, {38549, 0, 0, 0}, 200, 200, { 1252, 500, 10000, 850, 0, ',' }},
-       {0x0C0A, 0x000A, 257, 31, 48976, 48982, 48998, 49017, 38592, 38568, 43604, {38596, 0, 0, 0}, 201, 201, { 1252, 20284, 10000, 850, 0, ';' }},
-       {0x0C0C, 0x000C, 257, 17, 49021, 49027, 49043, 49062, 38692, 38668, 49066, {49069, 0, 0, 0}, 202, 202, { 1252, 20297, 10000, 850, 0, ';' }},
-       {0x0C3B, 0x003B, 257, 33, 49091, 49097, 49121, 49147, 49151, 40937, 43944, {40979, 0, 0, 0}, 203, 203, { 1252, 20278, 10000, 850, 0, ';' }},
-       {0x1001, 0x0001, 257, 67, 49155, 49161, 49176, 49204, 38055, 38026, 49208, {38059, 0, 0, 0}, 204, 204, { 1256, 20420, 10004, 720, 1, ';' }},
-       {0x1004, 0x0004, 257, 97, 49211, 49217, 49249, 49268, 38262, 38266, 49272, {38269, 0, 0, 0}, 205, 205, { 936, 500, 10008, 936, 0, ',' }},
-       {0x1007, 0x0007, 257, 65, 49275, 49281, 49301, 49321, 38425, 38403, 49325, {38429, 0, 0, 0}, 206, 206, { 1252, 20273, 10000, 850, 0, ';' }},
-       {0x1009, 0x0009, 257, 17, 49328, 49334, 49334, 49351, 38545, 38530, 49066, {38549, 0, 0, 0}, 207, 207, { 1252, 37, 10000, 850, 0, ',' }},
-       {0x100A, 0x000A, 257, 40, 49355, 49361, 49381, 49402, 38592, 38568, 49406, {38596, 0, 0, 0}, 208, 208, { 1252, 20284, 10000, 850, 0, ',' }},
-       {0x100C, 0x000C, 257, 18, 49409, 49415, 49436, 49455, 38692, 38668, 13678, {38696, 0, 0, 0}, 209, 209, { 1252, 20297, 10000, 850, 0, ';' }},
-       {0x101A, 0x001A, 257, 8, 49459, 49465, 49499, 49530, 49534, 39382, 49538, {39411, 0, 0, 0}, 210, 210, { 1250, 870, 10082, 852, 0, ';' }},
-       {0x1401, 0x0001, 257, 27, 49541, 49547, 49564, 49596, 38055, 38026, 49600, {38059, 0, 0, 0}, 211, 211, { 1256, 20420, 10004, 720, 1, ';' }},
-       {0x1404, 0x7C04, 257, 72, 49603, 49609, 49648, 49685, 38262, 38266, 49689, {43658, 0, 0, 0}, 212, 212, { 950, 500, 10002, 950, 0, ',' }},
-       {0x1407, 0x0007, 257, 62, 49692, 49698, 49721, 49745, 38425, 38403, 49749, {38429, 0, 0, 0}, 213, 213, { 1252, 20273, 10000, 850, 0, ';' }},
-       {0x1409, 0x0009, 257, 80, 49752, 49758, 49758, 49780, 38545, 38530, 49784, {38549, 0, 0, 0}, 214, 214, { 1252, 500, 10000, 850, 0, ',' }},
-       {0x140A, 0x000A, 257, 22, 49787, 49793, 49814, 49836, 38592, 38568, 49840, {38596, 0, 0, 0}, 215, 215, { 1252, 20284, 10000, 850, 0, ',' }},
-       {0x140C, 0x000C, 257, 65, 49843, 49849, 49869, 49892, 38692, 38668, 49325, {38696, 0, 0, 0}, 216, 216, { 1252, 20297, 10000, 850, 0, ';' }},
-       {0x141A, 0x681A, 257, 8, 49896, 49907, 49947, 49978, 49982, 49986, 49538, {49989, 0, 0, 0}, 217, 217, { 1250, 870, 10082, 852, 0, ';' }},
-       {0x1801, 0x0001, 257, 68, 50012, 50018, 50035, 50065, 38055, 38026, 50069, {38059, 0, 0, 0}, 218, 218, { 1256, 20420, 10004, 720, 1, ';' }},
-       {0x1809, 0x0009, 257, 46, 50072, 50078, 50078, 50096, 38545, 38530, 48588, {38549, 0, 0, 0}, 219, 219, { 1252, 500, 10000, 850, 0, ',' }},
-       {0x180A, 0x000A, 257, 82, 50100, 50106, 50123, 50142, 38592, 38568, 50146, {38596, 0, 0, 0}, 220, 220, { 1252, 20284, 10000, 850, 0, ',' }},
-       {0x180C, 0x000C, 257, 69, 50149, 50155, 50171, 50190, 38692, 38668, 50194, {38696, 0, 0, 0}, 221, 221, { 1252, 20297, 10000, 850, 0, ';' }},
-       {0x181A, 0x701A, 257, 8, 50197, 50208, 50248, 50300, 50304, 50308, 49538, {49989, 0, 0, 0}, 222, 222, { 1250, 870, 10082, 852, 0, ';' }},
-       {0x1C01, 0x0001, 257, 104, 50311, 50317, 50334, 50360, 38055, 38026, 50364, {38059, 0, 0, 0}, 223, 223, { 1256, 20420, 10004, 720, 1, ';' }},
-       {0x1C09, 0x0009, 257, 115, 50367, 50373, 50373, 50396, 38545, 38530, 45822, {38549, 0, 0, 0}, 224, 224, { 1252, 500, 10000, 437, 0, ',' }},
-       {0x1C0A, 0x000A, 257, 26, 50400, 50406, 50435, 50468, 38592, 38568, 50472, {38596, 0, 0, 0}, 225, 225, { 1252, 20284, 10000, 850, 0, ',' }},
-       {0x1C1A, 0x6C1A, 257, 8, 50475, 50486, 50248, 50529, 50533, 50308, 49538, {40486, 0, 0, 0}, 226, 226, { 1251, 21025, 10007, 855, 0, ';' }},
-       {0x2001, 0x0001, 257, 81, 50537, 50543, 50557, 50585, 38055, 38026, 50589, {38059, 0, 0, 0}, 227, 227, { 1256, 20420, 10004, 720, 1, ';' }},
-       {0x2009, 0x0009, 257, 53, 50592, 50598, 50598, 50616, 38545, 38530, 50620, {38549, 0, 0, 0}, 228, 228, { 1252, 500, 10000, 850, 0, ',' }},
-       {0x200A, 0x000A, 257, 112, 50623, 50629, 50649, 50670, 38592, 38568, 50674, {38596, 0, 0, 0}, 229, 229, { 1252, 20284, 10000, 850, 0, ',' }},
-       {0x201A, 0x641A, 257, 8, 50677, 50688, 49947, 50731, 50735, 49986, 49538, {40486, 0, 0, 0}, 230, 230, { 1251, 870, 10082, 855, 0, ';' }},
-       {0x2401, 0x0001, 257, 114, 50739, 50745, 50760, 50788, 38055, 38026, 50792, {38059, 0, 0, 0}, 231, 231, { 1256, 20420, 10004, 720, 1, ';' }},
-       {0x240A, 0x000A, 257, 21, 50795, 50801, 50820, 50840, 38592, 38568, 50844, {38596, 0, 0, 0}, 232, 232, { 1252, 20284, 10000, 850, 0, ',' }},
-       {0x241A, 0x701A, 257, 92, 50847, 50858, 50882, 50910, 2234, 50308, 50914, {49989, 0, 0, 0}, 233, 233, { 1250, 500, 10029, 852, 0, ';' }},
-       {0x2801, 0x0001, 257, 101, 50917, 50923, 50938, 50966, 38055, 38026, 50970, {38059, 0, 0, 0}, 234, 234, { 1256, 20420, 10004, 720, 1, ';' }},
-       {0x2809, 0x0009, 257, 16, 50973, 50979, 50979, 50996, 38545, 38530, 51000, {38549, 0, 0, 0}, 235, 235, { 1252, 500, 10000, 850, 0, ';' }},
-       {0x280A, 0x000A, 257, 83, 51003, 51009, 51024, 51041, 38592, 38568, 51045, {38596, 0, 0, 0}, 236, 236, { 1252, 20284, 10000, 850, 0, ',' }},
-       {0x281A, 0x6C1A, 257, 92, 51048, 51059, 50882, 51086, 2234, 50308, 50914, {40486, 0, 0, 0}, 237, 237, { 1251, 21025, 10007, 855, 0, ';' }},
-       {0x2C01, 0x0001, 257, 54, 51090, 51096, 51112, 51142, 38055, 38026, 51146, {38059, 0, 0, 0}, 238, 238, { 1256, 20420, 10004, 720, 1, ';' }},
-       {0x2C09, 0x0009, 257, 106, 51149, 51155, 51155, 51185, 38545, 38530, 51189, {38549, 0, 0, 0}, 239, 239, { 1252, 500, 10000, 850, 0, ';' }},
-       {0x2C0A, 0x000A, 257, 4, 51192, 51198, 51218, 51239, 38592, 38568, 51243, {38596, 0, 0, 0}, 240, 240, { 1252, 20284, 10000, 850, 0, ',' }},
-       {0x2C1A, 0x701A, 257, 70, 51246, 51257, 51285, 51318, 2234, 50308, 51322, {49989, 0, 0, 0}, 241, 241, { 1250, 500, 10029, 852, 0, ';' }},
-       {0x3001, 0x0001, 257, 61, 51325, 51331, 51348, 51376, 38055, 38026, 51380, {38059, 0, 0, 0}, 242, 242, { 1256, 20420, 10004, 720, 1, ';' }},
-       {0x3009, 0x0009, 257, 116, 51383, 51389, 51389, 51408, 38545, 38530, 51412, {38549, 0, 0, 0}, 243, 243, { 1252, 500, 10000, 437, 0, ',' }},
-       {0x300A, 0x000A, 257, 28, 51415, 51421, 51439, 51458, 38592, 38568, 51462, {38596, 0, 0, 0}, 244, 244, { 1252, 20284, 10000, 850, 0, ',' }},
-       {0x301A, 0x6C1A, 257, 70, 51465, 51476, 51285, 51507, 2234, 50308, 51322, {40486, 0, 0, 0}, 245, 245, { 1251, 21025, 10007, 855, 0, ';' }},
-       {0x3401, 0x0001, 257, 59, 51511, 51517, 51533, 51563, 38055, 38026, 51567, {38059, 0, 0, 0}, 246, 246, { 1256, 20420, 10004, 720, 1, ';' }},
-       {0x3409, 0x0009, 257, 84, 51570, 51576, 51576, 51598, 38545, 38530, 47515, {38549, 0, 0, 0}, 247, 247, { 1252, 500, 10000, 437, 0, ',' }},
-       {0x340A, 0x000A, 257, 19, 51602, 51608, 51624, 51641, 38592, 38568, 51645, {38596, 0, 0, 0}, 248, 248, { 1252, 20284, 10000, 850, 0, ',' }},
-       {0x3801, 0x0001, 257, 0, 51648, 51654, 51684, 51748, 38055, 38026, 51752, {38059, 0, 0, 0}, 249, 249, { 1256, 20420, 10004, 720, 1, ';' }},
-       {0x380A, 0x000A, 257, 110, 51755, 51761, 51779, 51798, 38592, 38568, 51802, {38596, 0, 0, 0}, 250, 250, { 1252, 20284, 10000, 850, 0, ',' }},
-       {0x3C01, 0x0001, 257, 12, 51805, 51811, 51828, 51860, 38055, 38026, 51864, {38059, 0, 0, 0}, 251, 251, { 1256, 20420, 10004, 720, 1, ';' }},
-       {0x3C0A, 0x000A, 257, 89, 51867, 51873, 51892, 51912, 38592, 38568, 51916, {38596, 0, 0, 0}, 252, 252, { 1252, 20284, 10000, 850, 0, ',' }},
-       {0x4001, 0x0001, 257, 90, 51919, 51925, 51940, 51964, 38055, 38026, 51968, {38059, 0, 0, 0}, 253, 253, { 1256, 20420, 10004, 720, 1, ';' }},
-       {0x4009, 0x0009, 257, 48, 51971, 51977, 51977, 51993, 38545, 38530, 46146, {38549, 0, 0, 0}, 254, 254, { 1252, 37, 10000, 437, 0, ',' }},
-       {0x400A, 0x000A, 257, 13, 51997, 52003, 52021, 52040, 38592, 38568, 52044, {38596, 0, 0, 0}, 255, 255, { 1252, 20284, 10000, 850, 0, ',' }},
-       {0x440A, 0x000A, 257, 100, 52047, 52053, 52075, 52098, 38592, 38568, 52102, {38596, 0, 0, 0}, 256, 256, { 1252, 20284, 10000, 850, 0, ',' }},
-       {0x4809, 0x0009, 257, 97, 52105, 52111, 52111, 52131, 38545, 38530, 49272, {38549, 0, 0, 0}, 257, 257, { 1252, 37, 10000, 437, 0, ',' }},
-       {0x480A, 0x000A, 257, 42, 52135, 52141, 52160, 52180, 38592, 38568, 52184, {38596, 0, 0, 0}, 258, 258, { 1252, 20284, 10000, 850, 0, ',' }},
-       {0x4C0A, 0x000A, 257, 76, 52187, 52193, 52213, 52234, 38592, 38568, 52238, {38596, 0, 0, 0}, 259, 259, { 1252, 20284, 10000, 850, 0, ',' }},
-       {0x500A, 0x000A, 257, 87, 52241, 52247, 52269, 52292, 38592, 38568, 52296, {38596, 0, 0, 0}, 260, 260, { 1252, 20284, 10000, 850, 0, ',' }},
-       {0x540A, 0x000A, 257, 109, 52299, 52305, 52329, 52355, 38592, 38568, 43903, {38596, 0, 0, 0}, 261, 261, { 1252, 20284, 10000, 850, 0, ',' }},
-       {0x641A, 0x781A, 257, -1, 52359, 52367, 52386, 50731, 50735, 49986, 0, {40486, 0, 0, 0}, 262, 262, { 1251, 870, 10082, 855, 0, ';' }},
-       {0x681A, 0x781A, 257, -1, 52395, 52403, 52386, 49978, 49982, 49986, 0, {49989, 0, 0, 0}, 263, 263, { 1250, 870, 10082, 852, 0, ';' }},
-       {0x6C1A, 0x7C1A, 257, -1, 52419, 52427, 52446, 51086, 2234, 50308, 0, {40486, 0, 0, 0}, 264, 264, { 1251, 21025, 10007, 855, 0, ';' }},
-       {0x701A, 0x7C1A, 257, -1, 52459, 52467, 52446, 50910, 2234, 50308, 0, {49989, 0, 0, 0}, 265, 265, { 1250, 500, 10029, 852, 0, ';' }},
-       {0x742C, 0x002C, 257, -1, 52483, 52491, 40358, 48546, 40374, 40343, 0, {40378, 0, 0, 0}, 266, 266, { 1251, 20880, 10007, 866, 0, ';' }},
-       {0x7804, 0x007F, 257, -1, 38266, 38284, 38251, 38258, 38262, 38266, 0, {38269, 0, 0, 0}, 267, 267, { 936, 500, 10008, 936, 0, ',' }},
-       {0x7814, 0x0014, 257, -1, 48394, 52514, 52532, 48386, 48390, 48394, 0, {38382, 0, 0, 0}, 268, 268, { 1252, 20277, 10000, 850, 0, ';' }},
-       {0x781A, 0x007F, 257, -1, 49986, 52540, 52386, 49978, 49982, 49986, 0, {49989, 0, 0, 0}, 269, 269, { 1250, 870, 10082, 852, 0, ';' }},
-       {0x782C, 0x002C, 257, -1, 52548, 52556, 40358, 40370, 40374, 40343, 0, {40378, 0, 0, 0}, 270, 270, { 1254, 20905, 10081, 857, 0, ';' }},
-       {0x7843, 0x0043, 257, -1, 52576, 52584, 41304, 41315, 41319, 41295, 0, {48631, 0, 0, 0}, 271, 271, { 1251, 20880, 10007, 866, 0, ';' }},
-       {0x7850, 0x0050, 257, -1, 52601, 52609, 42241, 52630, 42258, 42228, 0, {42262, 0, 0, 0}, 272, 272, { 1251, 20880, 10007, 866, 0, ';' }},
-       {0x7C04, 0x7804, 257, -1, 52634, 43613, 38251, 43651, 38262, 38266, 0, {43658, 0, 0, 0}, 273, 273, { 950, 500, 10002, 950, 0, ',' }},
-       {0x7C04, 0x7C04, 257, -1, 52642, 52649, 38251, 43651, 38262, 38266, 0, {43658, 0, 0, 0}, 274, 274, { 950, 500, 10002, 950, 0, ',' }},
-       {0x7C14, 0x0014, 257, -1, 39097, 52678, 52696, 39089, 39093, 39097, 0, {38382, 0, 0, 0}, 275, 275, { 1252, 20277, 10000, 850, 0, ';' }},
-       {0x7C1A, 0x007F, 257, -1, 50308, 52710, 52446, 52718, 2234, 50308, 0, {40486, 0, 0, 0}, 276, 276, { 1250, 500, 10029, 852, 0, ';' }},
-       {0x7C28, 0x0028, 257, -1, 52722, 52730, 40155, 40168, 40172, 40146, 0, {0, 0, 0, 0}, 277, 277, { 1251, 20880, 10007, 866, 0, ';' }},
-       {0x7C43, 0x0043, 257, -1, 52747, 52755, 41304, 41315, 41319, 41295, 0, {41323, 0, 0, 0}, 278, 278, { 1254, 500, 10029, 857, 0, ';' }},
-       {0x7C5F, 0x005F, 257, -1, 52769, 52778, 42796, 42806, 42768, 42768, 0, {0, 0, 0, 0}, 279, 279, { 1252, 20297, 10000, 850, 0, ';' }},
-       {0x7C68, 0x0068, 257, -1, 52810, 52818, 42964, 42970, 42974, 42961, 0, {0, 0, 0, 0}, 280, 280, { 1252, 37, 10000, 437, 0, ',' }}
+       {0x0001, 0x007F, 768, -1, 38493, 38496, 38503, 38518, 38522, 38493, 0, {0, 0, 38526, 0}, 0, 0, { 1256, 20420, 10004, 720, 1, ';' }},
+       {0x0002, 0x007F, 257, -1, 38554, 38557, 38567, 38586, 38590, 38554, 0, {38594, 0, 0, 0}, 1, 1, { 1251, 21025, 10007, 866, 0, ';' }},
+       {0x0003, 0x007F, 257, -1, 38636, 38639, 38647, 38655, 38659, 38636, 0, {38663, 0, 0, 0}, 2, 2, { 1252, 500, 10000, 850, 0, ';' }},
+       {0x0004, 0x0004, 257, -1, 38683, 38690, 38718, 38725, 38729, 38733, 0, {38736, 0, 0, 0}, 3, 3, { 936, 500, 10008, 936, 0, ',' }},
+       {0x0004, 0x7804, 257, -1, 38743, 38751, 38718, 38725, 38729, 38733, 0, {38736, 0, 0, 0}, 4, 4, { 936, 500, 10008, 936, 0, ',' }},
+       {0x0005, 0x007F, 257, -1, 38772, 38775, 38781, 38791, 38795, 38772, 0, {38799, 0, 0, 0}, 5, 5, { 1250, 500, 10029, 852, 0, ';' }},
+       {0x0006, 0x007F, 257, -1, 38825, 38828, 38835, 38841, 38845, 38825, 0, {38849, 0, 0, 0}, 6, 6, { 1252, 20277, 10000, 850, 0, ';' }},
+       {0x0007, 0x007F, 257, -1, 38870, 38873, 38880, 38888, 38892, 38870, 0, {38896, 0, 0, 0}, 7, 7, { 1252, 20273, 10000, 850, 0, ';' }},
+       {0x0008, 0x007F, 257, -1, 38921, 38924, 38930, 38947, 38951, 38921, 0, {38955, 0, 0, 0}, 8, 8, { 1253, 20273, 10006, 737, 0, ';' }},
+       {0x0009, 0x007F, 257, -1, 38997, 39000, 39000, 39008, 39012, 38997, 0, {39016, 0, 0, 0}, 9, 9, { 1252, 37, 10000, 437, 0, ',' }},
+       {0x000A, 0x007F, 257, -1, 39035, 39038, 39046, 39055, 39059, 39035, 0, {39063, 0, 0, 0}, 10, 10, { 1252, 20284, 10000, 850, 0, ';' }},
+       {0x000B, 0x007F, 257, -1, 39085, 39088, 39096, 39102, 39106, 39085, 0, {39110, 0, 0, 0}, 11, 11, { 1252, 20278, 10000, 850, 0, ';' }},
+       {0x000C, 0x007F, 257, -1, 39135, 39138, 39145, 39155, 39159, 39135, 0, {39163, 0, 0, 0}, 12, 12, { 1252, 20297, 10000, 850, 0, ';' }},
+       {0x000D, 0x007F, 257, -1, 39185, 39188, 39195, 39206, 39210, 39185, 0, {39214, 0, 0, 0}, 13, 13, { 1255, 500, 10005, 862, 1, ',' }},
+       {0x000E, 0x007F, 257, -1, 39247, 39250, 39260, 39267, 39271, 39247, 0, {39275, 0, 0, 0}, 14, 14, { 1250, 500, 10029, 852, 0, ';' }},
+       {0x000F, 0x007F, 257, -1, 39291, 39294, 39304, 39314, 39318, 39291, 0, {39322, 0, 0, 0}, 15, 15, { 1252, 20871, 10079, 850, 0, ';' }},
+       {0x0010, 0x007F, 257, -1, 39342, 39345, 39353, 39362, 39366, 39342, 0, {39370, 0, 0, 0}, 16, 16, { 1252, 20280, 10000, 850, 0, ';' }},
+       {0x0011, 0x007F, 257, -1, 39392, 39395, 39404, 39414, 39418, 39392, 0, {39422, 0, 0, 0}, 17, 17, { 932, 20290, 10001, 932, 0, ',' }},
+       {0x0012, 0x007F, 257, -1, 39449, 39452, 39459, 39469, 39473, 39449, 0, {39477, 0, 0, 0}, 18, 18, { 949, 20833, 10003, 949, 0, ',' }},
+       {0x0013, 0x007F, 257, -1, 39487, 39490, 39496, 39507, 39511, 39487, 0, {39515, 0, 0, 0}, 19, 19, { 1252, 500, 10000, 850, 0, ';' }},
+       {0x0014, 0x007F, 257, -1, 39537, 39540, 39550, 39556, 39560, 39564, 0, {38849, 0, 0, 0}, 20, 20, { 1252, 20277, 10000, 850, 0, ';' }},
+       {0x0015, 0x007F, 257, -1, 39567, 39570, 39577, 39584, 39588, 39567, 0, {39592, 0, 0, 0}, 21, 21, { 1250, 20880, 10029, 852, 0, ';' }},
+       {0x0016, 0x007F, 257, -1, 39616, 39619, 39630, 39641, 39645, 39616, 0, {39649, 0, 0, 0}, 22, 22, { 1252, 500, 10000, 850, 0, ';' }},
+       {0x0017, 0x007F, 257, -1, 39672, 39675, 39683, 39693, 39697, 39672, 0, {39701, 0, 0, 0}, 23, 23, { 1252, 20273, 10000, 850, 0, ';' }},
+       {0x0018, 0x007F, 257, -1, 39721, 39724, 39733, 39742, 39746, 39721, 0, {39750, 0, 0, 0}, 24, 24, { 1250, 20880, 10029, 852, 0, ';' }},
+       {0x0019, 0x007F, 257, -1, 39769, 39772, 39780, 39795, 39799, 39769, 0, {39803, 0, 0, 0}, 25, 25, { 1251, 20880, 10007, 866, 0, ';' }},
+       {0x001A, 0x007F, 257, -1, 39849, 39852, 39861, 39870, 39874, 39849, 0, {39878, 0, 0, 0}, 26, 26, { 1250, 500, 10082, 852, 0, ';' }},
+       {0x001B, 0x007F, 257, -1, 12824, 39901, 39908, 39920, 39924, 12824, 0, {39928, 0, 0, 0}, 27, 27, { 1250, 20880, 10029, 852, 0, ';' }},
+       {0x001C, 0x007F, 257, -1, 39952, 39955, 39964, 39970, 39974, 39952, 0, {39978, 0, 0, 0}, 28, 28, { 1250, 20880, 10029, 852, 0, ';' }},
+       {0x001D, 0x007F, 257, -1, 39998, 40001, 40009, 40017, 40021, 39998, 0, {38849, 0, 0, 0}, 29, 29, { 1252, 20278, 10000, 850, 0, ';' }},
+       {0x001E, 0x007F, 512, -1, 40025, 40028, 40033, 40043, 40047, 40025, 0, {0, 40051, 0, 0}, 30, 30, { 874, 20838, 10021, 874, 0, ',' }},
+       {0x001F, 0x007F, 257, -1, 12833, 40082, 40090, 40099, 40103, 12833, 0, {40107, 0, 0, 0}, 31, 31, { 1254, 20905, 10081, 857, 0, ';' }},
+       {0x0020, 0x007F, 257, -1, 40121, 40124, 40129, 40138, 40142, 40121, 0, {40146, 0, 0, 0}, 32, 32, { 1256, 20420, 10004, 720, 1, ';' }},
+       {0x0021, 0x007F, 257, -1, 40176, 40179, 40190, 40207, 40211, 40176, 0, {40215, 0, 0, 0}, 33, 33, { 1252, 500, 10000, 850, 0, ';' }},
+       {0x0022, 0x007F, 257, -1, 40234, 40237, 40247, 40268, 40272, 40234, 0, {40276, 0, 0, 0}, 34, 34, { 1251, 500, 10017, 866, 0, ';' }},
+       {0x0023, 0x007F, 257, -1, 40322, 40325, 40336, 40357, 40361, 40322, 0, {40365, 0, 0, 0}, 35, 35, { 1251, 500, 10007, 866, 0, ';' }},
+       {0x0024, 0x007F, 257, -1, 40407, 40410, 40420, 40434, 40438, 40407, 0, {40442, 0, 0, 0}, 36, 36, { 1250, 20880, 10029, 852, 0, ';' }},
+       {0x0025, 0x007F, 257, -1, 40464, 40467, 40476, 40482, 40486, 40464, 0, {40490, 0, 0, 0}, 37, 37, { 1257, 500, 10029, 775, 0, ';' }},
+       {0x0026, 0x007F, 257, -1, 40510, 40513, 40521, 40531, 40535, 40510, 0, {40539, 0, 0, 0}, 38, 38, { 1257, 500, 10029, 775, 0, ';' }},
+       {0x0027, 0x007F, 257, -1, 40558, 40561, 40572, 40582, 40586, 40558, 0, {40590, 0, 0, 0}, 39, 39, { 1257, 500, 10029, 775, 0, ';' }},
+       {0x0028, 0x007F, 257, -1, 40613, 40616, 40622, 40635, 40639, 40613, 0, {0, 0, 0, 0}, 40, 40, { 1251, 20880, 10007, 866, 0, ';' }},
+       {0x0029, 0x007F, 257, -1, 40643, 40646, 40654, 40665, 40669, 40643, 0, {40673, 0, 0, 0}, 41, 41, { 1256, 20420, 10004, 720, 1, ';' }},
+       {0x002A, 0x007F, 257, -1, 40697, 40700, 40711, 40726, 35604, 40697, 0, {40730, 0, 0, 0}, 42, 42, { 1258, 500, 10000, 1258, 0, ',' }},
+       {0x002B, 0x007F, 257, -1, 40745, 40748, 40757, 40772, 40776, 40745, 0, {40780, 0, 0, 0}, 43, 43, { 0, 500, 2, 1, 0, ',' }},
+       {0x002C, 0x007F, 257, -1, 40810, 40813, 40825, 40837, 40841, 40810, 0, {40845, 0, 0, 0}, 44, 44, { 1254, 20905, 10081, 857, 0, ';' }},
+       {0x002D, 0x007F, 257, -1, 40864, 40867, 40874, 40882, 40886, 40864, 0, {40890, 0, 0, 0}, 45, 45, { 1252, 500, 10000, 850, 0, ';' }},
+       {0x002F, 0x007F, 257, -1, 40910, 40913, 40924, 40945, 40949, 40910, 0, {40953, 0, 0, 0}, 46, 46, { 1251, 500, 10007, 866, 0, ';' }},
+       {0x0032, 0x007F, 257, -1, 40997, 41000, 41007, 41016, 41020, 40997, 0, {0, 0, 0, 0}, 47, 47, { 1252, 500, 10000, 850, 0, ',' }},
+       {0x0034, 0x007F, 257, -1, 41024, 41027, 41033, 41042, 41046, 41024, 0, {0, 0, 0, 0}, 48, 48, { 1252, 500, 10000, 850, 0, ',' }},
+       {0x0035, 0x007F, 257, -1, 41050, 41053, 41058, 41066, 41070, 41050, 0, {41074, 0, 0, 0}, 49, 49, { 1252, 500, 10000, 850, 0, ',' }},
+       {0x0036, 0x007F, 257, -1, 41095, 41098, 41098, 41108, 41112, 41095, 0, {41116, 0, 0, 0}, 50, 50, { 1252, 500, 10000, 850, 0, ',' }},
+       {0x0037, 0x007F, 257, -1, 41136, 41139, 41148, 41170, 41174, 41136, 0, {41178, 0, 0, 0}, 51, 51, { 0, 500, 2, 1, 0, ';' }},
+       {0x0038, 0x007F, 257, -1, 41243, 41246, 41254, 41264, 41268, 41243, 0, {0, 0, 0, 0}, 52, 52, { 1252, 20277, 10079, 850, 0, ';' }},
+       {0x0039, 0x007F, 257, -1, 41272, 41275, 41281, 41297, 41301, 41272, 0, {41305, 0, 0, 0}, 53, 53, { 0, 500, 2, 1, 0, ',' }},
+       {0x003A, 0x007F, 257, -1, 41358, 41361, 41369, 41375, 41379, 41358, 0, {41383, 0, 0, 0}, 54, 54, { 0, 500, 2, 1, 0, ',' }},
+       {0x003B, 0x007F, 257, -1, 41404, 41407, 41421, 41438, 41442, 41404, 0, {41446, 0, 0, 0}, 55, 55, { 1252, 20277, 10000, 850, 0, ';' }},
+       {0x003C, 0x007F, 257, -1, 41465, 41468, 41474, 41482, 41486, 41465, 0, {41490, 0, 0, 0}, 56, 56, { 1252, 500, 10000, 850, 0, ',' }},
+       {0x003E, 0x007F, 257, -1, 41511, 41514, 41520, 41534, 41538, 41511, 0, {41542, 0, 0, 0}, 57, 57, { 1252, 500, 10000, 850, 0, ';' }},
+       {0x003F, 0x007F, 257, -1, 41559, 41562, 41569, 41589, 41593, 41559, 0, {41597, 0, 0, 0}, 58, 58, { 0, 500, 2, 1, 0, ';' }},
+       {0x0040, 0x007F, 257, -1, 41639, 41642, 41649, 41666, 41670, 41639, 0, {41674, 0, 0, 0}, 59, 59, { 1251, 20880, 10007, 866, 0, ';' }},
+       {0x0041, 0x007F, 257, -1, 41712, 41715, 41723, 41733, 41737, 41712, 0, {41741, 0, 0, 0}, 60, 60, { 1252, 500, 10000, 437, 0, ',' }},
+       {0x0043, 0x007F, 257, -1, 41762, 41765, 41771, 41782, 41786, 41762, 0, {41790, 0, 0, 0}, 61, 61, { 1254, 500, 10029, 857, 0, ';' }},
+       {0x0045, 0x007F, 257, -1, 41810, 41813, 41821, 41837, 41841, 41810, 0, {41845, 0, 0, 0}, 62, 62, { 0, 500, 2, 1, 0, ',' }},
+       {0x0046, 0x007F, 257, -1, 41910, 41913, 41921, 41940, 41944, 41910, 0, {41948, 0, 0, 0}, 63, 63, { 0, 500, 2, 1, 0, ',' }},
+       {0x0047, 0x007F, 257, -1, 41995, 41998, 42007, 42029, 42033, 41995, 0, {42037, 0, 0, 0}, 64, 64, { 0, 500, 2, 1, 0, ',' }},
+       {0x0048, 0x007F, 257, -1, 42093, 42096, 42102, 42118, 42122, 42093, 0, {0, 0, 0, 0}, 65, 65, { 0, 500, 2, 1, 0, ',' }},
+       {0x0049, 0x007F, 257, -1, 42126, 42129, 42135, 42151, 42155, 42126, 0, {42159, 0, 0, 0}, 66, 66, { 0, 500, 2, 1, 0, ',' }},
+       {0x004A, 0x007F, 257, -1, 42224, 42227, 42234, 42253, 42257, 42224, 0, {42261, 0, 0, 0}, 67, 67, { 0, 500, 2, 1, 0, ',' }},
+       {0x004B, 0x007F, 257, -1, 37746, 42326, 42334, 42350, 42354, 37746, 0, {42358, 0, 0, 0}, 68, 68, { 0, 500, 2, 1, 0, ',' }},
+       {0x004C, 0x007F, 257, -1, 42423, 42426, 42436, 42455, 42459, 42423, 0, {42463, 0, 0, 0}, 69, 69, { 0, 500, 2, 1, 0, ',' }},
+       {0x004D, 0x007F, 257, -1, 42507, 42510, 42519, 42541, 42545, 42507, 0, {42549, 0, 0, 0}, 70, 70, { 0, 500, 2, 1, 0, ',' }},
+       {0x004E, 0x007F, 257, -1, 42602, 42605, 42613, 42629, 2530, 42602, 0, {42633, 0, 0, 0}, 71, 71, { 0, 500, 2, 1, 0, ',' }},
+       {0x0050, 0x007F, 257, -1, 42695, 42698, 42708, 42721, 42725, 42695, 0, {42729, 0, 0, 0}, 72, 72, { 1251, 20880, 10007, 866, 0, ';' }},
+       {0x0051, 0x007F, 257, -1, 42761, 42764, 42772, 42797, 42801, 42761, 0, {0, 0, 0, 0}, 73, 73, { 0, 500, 2, 1, 0, ',' }},
+       {0x0052, 0x007F, 257, -1, 42805, 42808, 42814, 42822, 42826, 42805, 0, {42830, 0, 0, 0}, 74, 74, { 1252, 20285, 10000, 850, 0, ',' }},
+       {0x0053, 0x007F, 257, -1, 42846, 42849, 42855, 42871, 42875, 42846, 0, {42879, 0, 0, 0}, 75, 75, { 0, 500, 2, 1, 0, ',' }},
+       {0x0054, 0x007F, 257, -1, 42934, 42937, 42941, 42951, 42955, 42934, 0, {42959, 0, 0, 0}, 76, 76, { 0, 500, 2, 1, 0, ',' }},
+       {0x0056, 0x007F, 257, -1, 43005, 43008, 43017, 43024, 43028, 43005, 0, {39370, 0, 0, 0}, 77, 77, { 1252, 500, 10000, 850, 0, ';' }},
+       {0x0057, 0x007F, 257, -1, 43032, 43036, 43044, 43063, 43032, 43032, 0, {0, 0, 0, 0}, 78, 78, { 0, 500, 2, 1, 0, ',' }},
+       {0x005B, 0x007F, 257, -1, 43067, 43070, 43078, 43094, 43098, 43067, 0, {43102, 0, 0, 0}, 79, 79, { 0, 500, 2, 1, 0, ',' }},
+       {0x005E, 0x007F, 257, -1, 8151, 43161, 43169, 43182, 43186, 8151, 0, {43190, 0, 0, 0}, 80, 80, { 0, 500, 2, 1, 0, ';' }},
+       {0x005F, 0x007F, 257, -1, 43235, 43239, 43263, 43273, 43235, 43235, 0, {0, 0, 0, 0}, 81, 81, { 1252, 20297, 10000, 850, 0, ';' }},
+       {0x0061, 0x007F, 257, -1, 1992, 43277, 43284, 43303, 43307, 1992, 0, {43311, 0, 0, 0}, 82, 82, { 0, 500, 2, 1, 0, ',' }},
+       {0x0063, 0x007F, 1024, -1, 43361, 43364, 43371, 43380, 43384, 43361, 0, {0, 0, 0, 0}, 83, 83, { 0, 500, 2, 1, 1, ';' }},
+       {0x0064, 0x007F, 257, -1, 43388, 43392, 43392, 43401, 43388, 43388, 0, {43405, 0, 0, 0}, 84, 84, { 1252, 500, 10000, 437, 0, ',' }},
+       {0x0068, 0x007F, 257, -1, 43428, 43431, 43431, 43437, 43441, 43428, 0, {0, 0, 0, 0}, 85, 85, { 1252, 37, 10000, 437, 0, ',' }},
+       {0x006A, 0x007F, 257, -1, 43445, 43448, 43455, 43470, 43474, 43445, 0, {0, 0, 0, 0}, 86, 86, { 1252, 37, 10000, 437, 0, ',' }},
+       {0x006C, 0x007F, 257, -1, 43478, 43482, 43497, 43514, 43478, 43478, 0, {0, 0, 0, 0}, 87, 87, { 1252, 500, 10000, 850, 0, ',' }},
+       {0x006F, 0x007F, 257, -1, 43518, 43521, 43533, 43545, 43549, 43518, 0, {43553, 0, 0, 0}, 88, 88, { 1252, 20277, 10000, 850, 0, ';' }},
+       {0x0070, 0x007F, 257, -1, 43580, 43583, 43583, 43588, 43592, 43580, 0, {0, 0, 0, 0}, 89, 89, { 1252, 37, 10000, 437, 0, ',' }},
+       {0x0078, 0x007F, 257, -1, 43596, 43599, 43610, 43620, 43624, 43596, 0, {43628, 0, 0, 0}, 90, 90, { 0, 500, 2, 1, 0, ',' }},
+       {0x007E, 0x007F, 257, -1, 43641, 43644, 43651, 43661, 43665, 43641, 0, {43669, 0, 0, 0}, 91, 91, { 1252, 20297, 10000, 850, 0, ';' }},
+       {0x0084, 0x007F, 257, -1, 43689, 43693, 43706, 43725, 43689, 43689, 0, {43729, 0, 0, 0}, 92, 92, { 1252, 20297, 10000, 850, 0, ';' }},
+       {0x0085, 0x007F, 257, -1, 43754, 43758, 43764, 43782, 43754, 43754, 0, {0, 0, 0, 0}, 93, 93, { 1251, 20880, 10007, 866, 0, ';' }},
+       {0x0087, 0x007F, 257, -1, 43786, 43789, 43789, 43801, 43805, 43786, 0, {0, 0, 0, 0}, 94, 94, { 1252, 37, 10000, 437, 0, ';' }},
+       {0x0091, 0x007F, 257, -1, 43809, 43812, 43828, 43838, 43842, 43809, 0, {43846, 0, 0, 0}, 95, 95, { 1252, 20285, 10000, 850, 0, ',' }},
+       {0x0401, 0x0001, 768, 95, 43871, 43877, 43899, 38518, 38522, 38493, 13775, {0, 0, 38526, 0}, 96, 96, { 1256, 20420, 10004, 720, 1, ';' }},
+       {0x0402, 0x0002, 257, 11, 43963, 43969, 43990, 38586, 38590, 38554, 44028, {38594, 0, 0, 0}, 97, 97, { 1251, 21025, 10007, 866, 0, ';' }},
+       {0x0403, 0x0003, 257, 31, 44031, 44037, 44053, 38655, 38659, 38636, 44071, {38663, 0, 0, 0}, 98, 98, { 1252, 500, 10000, 850, 0, ';' }},
+       {0x0404, 0x7C04, 257, 107, 44074, 44080, 44102, 44118, 38729, 38733, 44122, {44125, 0, 0, 0}, 99, 99, { 950, 500, 10002, 950, 0, ',' }},
+       {0x0405, 0x0005, 257, 23, 44132, 44138, 44161, 38791, 38795, 38772, 44191, {38799, 0, 0, 0}, 100, 100, { 1250, 500, 10029, 852, 0, ';' }},
+       {0x0406, 0x0006, 257, 25, 44194, 44200, 44217, 38841, 38845, 38825, 44233, {38849, 0, 0, 0}, 101, 101, { 1252, 20277, 10000, 850, 0, ';' }},
+       {0x0407, 0x0007, 257, 24, 44236, 44242, 44259, 38888, 38892, 38870, 44281, {38896, 0, 0, 0}, 102, 102, { 1252, 20273, 10000, 850, 0, ';' }},
+       {0x0408, 0x0008, 257, 39, 44284, 44290, 44305, 38947, 38951, 38921, 44337, {38955, 0, 0, 0}, 103, 103, { 1253, 20273, 10006, 737, 0, ';' }},
+       {0x0409, 0x0009, 257, 109, 44340, 44346, 44346, 39008, 39012, 38997, 44370, {39016, 0, 0, 0}, 104, 104, { 1252, 37, 10000, 437, 0, ',' }},
+       {0x040B, 0x000B, 257, 33, 44373, 44379, 44397, 39102, 39106, 39085, 44411, {39110, 0, 0, 0}, 105, 105, { 1252, 20278, 10000, 850, 0, ';' }},
+       {0x040C, 0x000C, 257, 35, 44414, 44420, 44436, 39155, 39159, 39135, 44455, {39163, 0, 0, 0}, 106, 106, { 1252, 20297, 10000, 850, 0, ';' }},
+       {0x040D, 0x000D, 257, 47, 44458, 44464, 44480, 39206, 39210, 39185, 44504, {39214, 0, 0, 0}, 107, 107, { 1255, 500, 10005, 862, 1, ',' }},
+       {0x040E, 0x000E, 257, 44, 44507, 44513, 44533, 39267, 39271, 39247, 44556, {39275, 0, 0, 0}, 108, 108, { 1250, 500, 10029, 852, 0, ';' }},
+       {0x040F, 0x000F, 257, 51, 44559, 44565, 44585, 39314, 39318, 39291, 44605, {39322, 0, 0, 0}, 109, 109, { 1252, 20871, 10079, 850, 0, ';' }},
+       {0x0410, 0x0010, 257, 52, 44608, 44614, 44630, 39362, 39366, 39342, 44648, {39370, 0, 0, 0}, 110, 110, { 1252, 20280, 10000, 850, 0, ';' }},
+       {0x0411, 0x0011, 257, 55, 44651, 44657, 44674, 39414, 39418, 39392, 44693, {39422, 0, 0, 0}, 111, 111, { 932, 20290, 10001, 932, 0, ',' }},
+       {0x0412, 0x0012, 257, 58, 44696, 44702, 44723, 39469, 39473, 39449, 44748, {39477, 0, 0, 0}, 112, 112, { 949, 20833, 10003, 949, 0, ',' }},
+       {0x0413, 0x0013, 257, 77, 44751, 44757, 44777, 39507, 39511, 39487, 44800, {39515, 0, 0, 0}, 113, 113, { 1252, 500, 10000, 850, 0, ';' }},
+       {0x0414, 0x7C14, 257, 78, 44803, 44809, 44836, 39556, 39560, 39564, 44858, {38849, 0, 0, 0}, 114, 114, { 1252, 20277, 10000, 850, 0, ';' }},
+       {0x0415, 0x0015, 257, 86, 44861, 44867, 44883, 39584, 39588, 39567, 44899, {39592, 0, 0, 0}, 115, 115, { 1250, 20880, 10029, 852, 0, ';' }},
+       {0x0416, 0x0016, 257, 14, 44902, 44908, 44928, 39641, 39645, 39616, 44948, {39649, 0, 0, 0}, 116, 116, { 1252, 500, 10000, 850, 0, ';' }},
+       {0x0417, 0x0017, 257, 18, 44951, 44957, 44979, 39693, 39697, 39672, 13778, {39701, 0, 0, 0}, 117, 117, { 1252, 20273, 10000, 850, 0, ';' }},
+       {0x0418, 0x0018, 257, 91, 44998, 45004, 45023, 39742, 39746, 39721, 45043, {39750, 0, 0, 0}, 118, 118, { 1250, 20880, 10029, 852, 0, ';' }},
+       {0x0419, 0x0019, 257, 93, 45046, 45052, 45069, 39795, 39799, 39769, 45099, {39803, 0, 0, 0}, 119, 119, { 1251, 20880, 10007, 866, 0, ';' }},
+       {0x041A, 0x001A, 257, 43, 45102, 45108, 45127, 39870, 39874, 39849, 45147, {39878, 0, 0, 0}, 120, 120, { 1250, 500, 10082, 852, 0, ';' }},
+       {0x041B, 0x001B, 257, 99, 45150, 45156, 45174, 39920, 39924, 12824, 45198, {39928, 0, 0, 0}, 121, 121, { 1250, 20880, 10029, 852, 0, ';' }},
+       {0x041C, 0x001C, 257, 2, 45201, 45207, 45226, 39970, 39974, 39952, 45244, {39978, 0, 0, 0}, 122, 122, { 1250, 20880, 10029, 852, 0, ';' }},
+       {0x041D, 0x001D, 257, 96, 45247, 45253, 45270, 40017, 40021, 39998, 45288, {38849, 0, 0, 0}, 123, 123, { 1252, 20278, 10000, 850, 0, ';' }},
+       {0x041E, 0x001E, 512, 102, 45291, 45297, 45313, 40043, 40047, 40025, 45335, {0, 40051, 0, 0}, 124, 124, { 874, 20838, 10021, 874, 0, ',' }},
+       {0x041F, 0x001F, 257, 105, 45338, 45344, 45361, 40099, 40103, 12833, 45381, {40107, 0, 0, 0}, 125, 125, { 1254, 20905, 10081, 857, 0, ';' }},
+       {0x0420, 0x0020, 257, 85, 45384, 45390, 45406, 40138, 40142, 40121, 45432, {40146, 0, 0, 0}, 126, 126, { 1256, 20420, 10004, 720, 1, ';' }},
+       {0x0421, 0x0021, 257, 45, 45435, 45441, 45464, 40207, 40211, 40176, 45493, {40215, 0, 0, 0}, 127, 127, { 1252, 500, 10000, 850, 0, ';' }},
+       {0x0422, 0x0022, 257, 108, 45496, 45502, 45522, 40268, 40272, 40234, 45560, {40276, 0, 0, 0}, 128, 128, { 1251, 500, 10017, 866, 0, ';' }},
+       {0x0423, 0x0023, 257, 15, 45563, 45569, 45590, 40357, 40361, 40322, 45630, {40365, 0, 0, 0}, 129, 129, { 1251, 500, 10007, 866, 0, ';' }},
+       {0x0424, 0x0024, 257, 98, 45633, 45639, 45660, 40434, 40438, 40407, 45686, {40442, 0, 0, 0}, 130, 130, { 1250, 20880, 10029, 852, 0, ';' }},
+       {0x0425, 0x0025, 257, 29, 45689, 45695, 45714, 40482, 40486, 40464, 45728, {40490, 0, 0, 0}, 131, 131, { 1257, 500, 10029, 775, 0, ';' }},
+       {0x0426, 0x0026, 257, 66, 45731, 45737, 45754, 40531, 40535, 40510, 45774, {40539, 0, 0, 0}, 132, 132, { 1257, 500, 10029, 775, 0, ';' }},
+       {0x0427, 0x0027, 257, 64, 45777, 45783, 45806, 40582, 40586, 40558, 45826, {40590, 0, 0, 0}, 133, 133, { 1257, 500, 10029, 775, 0, ';' }},
+       {0x0428, 0x7C28, 257, 103, 45829, 45840, 45869, 40635, 40639, 40613, 45905, {0, 0, 0, 0}, 134, 134, { 1251, 20880, 10007, 866, 0, ';' }},
+       {0x0429, 0x0029, 257, 50, 45908, 45914, 45929, 40665, 40669, 40643, 45953, {40673, 0, 0, 0}, 135, 135, { 1256, 20420, 10004, 720, 1, ';' }},
+       {0x042A, 0x002A, 257, 113, 45956, 45962, 45983, 40726, 35604, 40697, 46011, {40730, 0, 0, 0}, 136, 136, { 1258, 500, 10000, 1258, 0, ',' }},
+       {0x042B, 0x002B, 257, 3, 46014, 46020, 46039, 40772, 40776, 40745, 1929, {40780, 0, 0, 0}, 137, 137, { 0, 500, 2, 1, 0, ',' }},
+       {0x042C, 0x782C, 257, 7, 46073, 46084, 46116, 40837, 40841, 40810, 46142, {40845, 0, 0, 0}, 138, 138, { 1254, 20905, 10081, 857, 0, ';' }},
+       {0x042D, 0x002D, 257, 31, 46145, 46151, 46166, 40882, 40886, 40864, 44071, {40890, 0, 0, 0}, 139, 139, { 1252, 500, 10000, 850, 0, ';' }},
+       {0x042F, 0x002F, 257, 71, 46185, 46191, 46214, 40945, 40949, 40910, 46258, {40953, 0, 0, 0}, 140, 140, { 1251, 500, 10007, 866, 0, ';' }},
+       {0x0432, 0x0032, 257, 115, 46261, 46267, 41007, 41016, 41020, 40997, 46289, {0, 0, 0, 0}, 141, 141, { 1252, 500, 10000, 850, 0, ',' }},
+       {0x0434, 0x0034, 257, 115, 46292, 46298, 41033, 41042, 41046, 41024, 46289, {0, 0, 0, 0}, 142, 142, { 1252, 500, 10000, 850, 0, ',' }},
+       {0x0435, 0x0035, 257, 115, 46319, 46325, 46345, 41066, 41070, 41050, 46289, {41074, 0, 0, 0}, 143, 143, { 1252, 500, 10000, 850, 0, ',' }},
+       {0x0436, 0x0036, 257, 115, 46370, 46376, 46401, 41108, 41112, 41095, 46289, {41116, 0, 0, 0}, 144, 144, { 1252, 500, 10000, 850, 0, ',' }},
+       {0x0437, 0x0037, 257, 37, 46425, 46431, 46450, 41170, 41174, 41136, 46505, {41178, 0, 0, 0}, 145, 145, { 0, 500, 2, 1, 0, ';' }},
+       {0x0438, 0x0038, 257, 34, 46508, 46514, 46538, 41264, 41268, 41243, 46559, {0, 0, 0, 0}, 146, 146, { 1252, 20277, 10079, 850, 0, ';' }},
+       {0x0439, 0x0039, 257, 48, 46562, 46568, 46582, 41297, 41301, 41272, 46613, {41305, 0, 0, 0}, 147, 147, { 0, 500, 2, 1, 0, ',' }},
+       {0x043A, 0x003A, 257, 73, 46616, 46622, 46638, 41375, 41379, 41358, 46652, {41383, 0, 0, 0}, 148, 148, { 0, 500, 2, 1, 0, ',' }},
+       {0x043B, 0x003B, 257, 78, 46655, 46661, 46684, 41438, 41442, 41404, 44858, {41446, 0, 0, 0}, 149, 149, { 1252, 20277, 10000, 850, 0, ';' }},
+       {0x0441, 0x0041, 257, 56, 46709, 46715, 46731, 41733, 41737, 41712, 46749, {41741, 0, 0, 0}, 150, 150, { 1252, 500, 10000, 437, 0, ',' }},
+       {0x0443, 0x7C43, 257, 111, 46752, 46763, 46789, 41782, 41786, 41762, 46815, {41790, 0, 0, 0}, 151, 151, { 1254, 500, 10029, 857, 0, ';' }},
+       {0x0445, 0x0045, 257, 48, 46818, 46824, 46840, 41837, 41841, 41810, 46613, {41845, 0, 0, 0}, 152, 152, { 0, 500, 2, 1, 0, ',' }},
+       {0x0447, 0x0047, 257, 48, 46871, 46877, 46894, 42029, 42033, 41995, 46613, {42037, 0, 0, 0}, 153, 153, { 0, 500, 2, 1, 0, ',' }},
+       {0x0448, 0x0048, 257, 48, 46931, 46937, 46951, 42118, 42122, 42093, 46613, {0, 0, 0, 0}, 154, 154, { 0, 500, 2, 1, 0, ',' }},
+       {0x0449, 0x0049, 257, 48, 46982, 46988, 47002, 42151, 42155, 42126, 46613, {42159, 0, 0, 0}, 155, 155, { 0, 500, 2, 1, 0, ',' }},
+       {0x044A, 0x004A, 257, 48, 47042, 47048, 47063, 42253, 42257, 42224, 46613, {42261, 0, 0, 0}, 156, 156, { 0, 500, 2, 1, 0, ',' }},
+       {0x044B, 0x004B, 257, 48, 47110, 47116, 47132, 42350, 42354, 37746, 46613, {42358, 0, 0, 0}, 157, 157, { 0, 500, 2, 1, 0, ',' }},
+       {0x044C, 0x004C, 257, 48, 47163, 47169, 47187, 42455, 42459, 42423, 46613, {42463, 0, 0, 0}, 158, 158, { 0, 500, 2, 1, 0, ',' }},
+       {0x044D, 0x004D, 257, 48, 47227, 47233, 47250, 42541, 42545, 42507, 46613, {42549, 0, 0, 0}, 159, 159, { 0, 500, 2, 1, 0, ',' }},
+       {0x044E, 0x004E, 257, 48, 47287, 47293, 47309, 42629, 2530, 42602, 46613, {42633, 0, 0, 0}, 160, 160, { 0, 500, 2, 1, 0, ',' }},
+       {0x0451, 0x0051, 257, 20, 47340, 47346, 47362, 42797, 42801, 42761, 13857, {0, 0, 0, 0}, 161, 161, { 0, 500, 2, 1, 0, ',' }},
+       {0x0452, 0x0052, 257, 36, 47408, 47414, 47437, 42822, 42826, 42805, 47464, {42830, 0, 0, 0}, 162, 162, { 1252, 20285, 10000, 850, 0, ',' }},
+       {0x0453, 0x0053, 257, 57, 47467, 47473, 47490, 42871, 42875, 42846, 47530, {42879, 0, 0, 0}, 163, 163, { 0, 500, 2, 1, 0, ',' }},
+       {0x0454, 0x0054, 257, 60, 47533, 47539, 47550, 42951, 42955, 42934, 47572, {42959, 0, 0, 0}, 164, 164, { 0, 500, 2, 1, 0, ',' }},
+       {0x0456, 0x0056, 257, 31, 47575, 47581, 47598, 43024, 43028, 43005, 44071, {39370, 0, 0, 0}, 165, 165, { 1252, 500, 10000, 850, 0, ';' }},
+       {0x0457, 0x0057, 257, 48, 47615, 47622, 47638, 43063, 43032, 43032, 46613, {0, 0, 0, 0}, 166, 166, { 0, 500, 2, 1, 0, ',' }},
+       {0x045B, 0x005B, 257, 63, 47672, 47678, 47698, 43094, 43098, 43067, 47748, {43102, 0, 0, 0}, 167, 167, { 0, 500, 2, 1, 0, ',' }},
+       {0x045E, 0x005E, 257, 32, 47751, 47757, 47776, 43182, 43186, 8151, 47807, {43190, 0, 0, 0}, 168, 168, { 0, 500, 2, 1, 0, ';' }},
+       {0x0461, 0x0061, 257, 79, 47810, 47816, 47831, 43303, 43307, 1992, 47868, {43311, 0, 0, 0}, 169, 169, { 0, 500, 2, 1, 0, ',' }},
+       {0x0463, 0x0063, 1024, 1, 47871, 47877, 47898, 43380, 43384, 43361, 47928, {0, 0, 0, 0}, 170, 170, { 0, 500, 2, 1, 1, ';' }},
+       {0x0464, 0x0064, 257, 84, 47931, 47938, 47961, 43401, 43388, 43388, 47982, {43405, 0, 0, 0}, 171, 171, { 1252, 500, 10000, 437, 0, ',' }},
+       {0x0468, 0x7C68, 257, 75, 47985, 47996, 48019, 43437, 43441, 43428, 48036, {0, 0, 0, 0}, 172, 172, { 1252, 37, 10000, 437, 0, ',' }},
+       {0x046A, 0x006A, 257, 75, 48039, 48045, 48062, 43470, 43474, 43445, 48036, {0, 0, 0, 0}, 173, 173, { 1252, 37, 10000, 437, 0, ',' }},
+       {0x046C, 0x006C, 257, 115, 48108, 48115, 43497, 43514, 43478, 43478, 46289, {0, 0, 0, 0}, 174, 174, { 1252, 500, 10000, 850, 0, ',' }},
+       {0x046F, 0x006F, 257, 38, 48145, 48151, 48175, 43545, 43549, 43518, 48206, {43553, 0, 0, 0}, 175, 175, { 1252, 20277, 10000, 850, 0, ';' }},
+       {0x0470, 0x0070, 257, 75, 48209, 48215, 48215, 43588, 43592, 43580, 48036, {0, 0, 0, 0}, 176, 176, { 1252, 37, 10000, 437, 0, ',' }},
+       {0x0478, 0x0078, 257, 20, 48230, 48236, 48255, 43620, 43624, 43596, 13857, {43628, 0, 0, 0}, 177, 177, { 0, 500, 2, 1, 0, ',' }},
+       {0x047E, 0x007E, 257, 35, 48274, 48280, 48296, 43661, 43665, 43641, 44455, {43669, 0, 0, 0}, 178, 178, { 1252, 20297, 10000, 850, 0, ';' }},
+       {0x0485, 0x0085, 257, 93, 48315, 48322, 43764, 43782, 43754, 43754, 45099, {0, 0, 0, 0}, 179, 179, { 1251, 20880, 10007, 866, 0, ';' }},
+       {0x0487, 0x0087, 257, 94, 48337, 48343, 48343, 43801, 43805, 43786, 48364, {0, 0, 0, 0}, 180, 180, { 1252, 37, 10000, 437, 0, ';' }},
+       {0x0491, 0x0091, 257, 36, 48367, 48373, 48406, 43838, 43842, 43809, 47464, {43846, 0, 0, 0}, 181, 181, { 1252, 20285, 10000, 850, 0, ',' }},
+       {0x0801, 0x0001, 257, 49, 48442, 48448, 48462, 48492, 38522, 38493, 48496, {38526, 0, 0, 0}, 182, 182, { 1256, 20420, 10004, 720, 1, ';' }},
+       {0x0804, 0x0004, 257, 20, 48499, 38751, 48505, 38725, 38729, 38733, 13857, {38736, 0, 0, 0}, 183, 183, { 936, 500, 10008, 936, 0, ',' }},
+       {0x0807, 0x0007, 257, 18, 48521, 48527, 48548, 48566, 38892, 38870, 13778, {38896, 0, 0, 0}, 184, 184, { 1252, 20273, 10000, 850, 0, ';' }},
+       {0x0809, 0x0009, 257, 36, 48570, 48576, 48576, 48601, 39012, 38997, 47464, {39016, 0, 0, 0}, 185, 185, { 1252, 20285, 10000, 850, 0, ',' }},
+       {0x080A, 0x000A, 257, 74, 48605, 48611, 48628, 48647, 39059, 39035, 48651, {39370, 0, 0, 0}, 186, 186, { 1252, 20284, 10000, 850, 0, ',' }},
+       {0x080C, 0x000C, 257, 10, 48654, 48660, 48677, 48698, 39159, 39135, 48702, {39163, 0, 0, 0}, 187, 187, { 1252, 20297, 10000, 850, 0, ';' }},
+       {0x0810, 0x0010, 257, 18, 48705, 48711, 48733, 48753, 39366, 39342, 13778, {39370, 0, 0, 0}, 188, 188, { 1252, 500, 10000, 850, 0, ';' }},
+       {0x0813, 0x0013, 257, 10, 48757, 48763, 48779, 48800, 39511, 39487, 48702, {39515, 0, 0, 0}, 189, 189, { 1252, 500, 10000, 850, 0, ';' }},
+       {0x0814, 0x7814, 257, 78, 48804, 48810, 48837, 48853, 48857, 48861, 44858, {38849, 0, 0, 0}, 190, 190, { 1252, 20277, 10000, 850, 0, ';' }},
+       {0x0816, 0x0016, 257, 88, 48864, 48870, 48892, 48914, 39645, 39616, 48918, {39649, 0, 0, 0}, 191, 191, { 1252, 500, 10000, 850, 0, ';' }},
+       {0x081D, 0x001D, 257, 33, 48921, 48927, 48945, 48963, 40021, 39998, 44411, {38849, 0, 0, 0}, 192, 192, { 1252, 20278, 10000, 850, 0, ';' }},
+       {0x082C, 0x742C, 257, 7, 48967, 48978, 46116, 49013, 40841, 40810, 46142, {40845, 0, 0, 0}, 193, 193, { 1251, 20880, 10007, 866, 0, ';' }},
+       {0x083C, 0x003C, 257, 46, 49017, 49023, 49039, 41482, 41486, 41465, 49055, {41490, 0, 0, 0}, 194, 194, { 1252, 500, 10000, 850, 0, ',' }},
+       {0x0843, 0x7843, 257, 111, 49058, 49069, 46789, 41782, 41786, 41762, 46815, {49098, 0, 0, 0}, 195, 195, { 1251, 20880, 10007, 866, 0, ';' }},
+       {0x0845, 0x0045, 257, 9, 49136, 49142, 49163, 49206, 41841, 41810, 49210, {41845, 0, 0, 0}, 196, 196, { 0, 500, 2, 1, 0, ',' }},
+       {0x0C01, 0x0001, 257, 30, 49213, 49219, 49234, 49258, 38522, 38493, 49262, {38526, 0, 0, 0}, 197, 197, { 1256, 20420, 10004, 720, 1, ';' }},
+       {0x0C04, 0x7C04, 257, 41, 49265, 49271, 49314, 49351, 38729, 38733, 49355, {44125, 0, 0, 0}, 198, 198, { 950, 500, 10002, 950, 0, ',' }},
+       {0x0C07, 0x0007, 257, 5, 49358, 49364, 49381, 49403, 38892, 38870, 49407, {38896, 0, 0, 0}, 199, 199, { 1252, 20273, 10000, 850, 0, ';' }},
+       {0x0C09, 0x0009, 257, 6, 49410, 49416, 49416, 49436, 39012, 38997, 49440, {39016, 0, 0, 0}, 200, 200, { 1252, 500, 10000, 850, 0, ',' }},
+       {0x0C0A, 0x000A, 257, 31, 49443, 49449, 49465, 49484, 39059, 39035, 44071, {39063, 0, 0, 0}, 201, 201, { 1252, 20284, 10000, 850, 0, ';' }},
+       {0x0C0C, 0x000C, 257, 17, 49488, 49494, 49510, 49529, 39159, 39135, 49533, {49536, 0, 0, 0}, 202, 202, { 1252, 20297, 10000, 850, 0, ';' }},
+       {0x0C3B, 0x003B, 257, 33, 49558, 49564, 49588, 49614, 49618, 41404, 44411, {41446, 0, 0, 0}, 203, 203, { 1252, 20278, 10000, 850, 0, ';' }},
+       {0x1001, 0x0001, 257, 67, 49622, 49628, 49643, 49671, 38522, 38493, 49675, {38526, 0, 0, 0}, 204, 204, { 1256, 20420, 10004, 720, 1, ';' }},
+       {0x1004, 0x0004, 257, 97, 49678, 49684, 49716, 49735, 38729, 38733, 49739, {38736, 0, 0, 0}, 205, 205, { 936, 500, 10008, 936, 0, ',' }},
+       {0x1007, 0x0007, 257, 65, 49742, 49748, 49768, 49788, 38892, 38870, 49792, {38896, 0, 0, 0}, 206, 206, { 1252, 20273, 10000, 850, 0, ';' }},
+       {0x1009, 0x0009, 257, 17, 49795, 49801, 49801, 49818, 39012, 38997, 49533, {39016, 0, 0, 0}, 207, 207, { 1252, 37, 10000, 850, 0, ',' }},
+       {0x100A, 0x000A, 257, 40, 49822, 49828, 49848, 49869, 39059, 39035, 49873, {39063, 0, 0, 0}, 208, 208, { 1252, 20284, 10000, 850, 0, ',' }},
+       {0x100C, 0x000C, 257, 18, 49876, 49882, 49903, 49922, 39159, 39135, 13778, {39163, 0, 0, 0}, 209, 209, { 1252, 20297, 10000, 850, 0, ';' }},
+       {0x101A, 0x001A, 257, 8, 49926, 49932, 49966, 49997, 50001, 39849, 50005, {39878, 0, 0, 0}, 210, 210, { 1250, 870, 10082, 852, 0, ';' }},
+       {0x1401, 0x0001, 257, 27, 50008, 50014, 50031, 50063, 38522, 38493, 50067, {38526, 0, 0, 0}, 211, 211, { 1256, 20420, 10004, 720, 1, ';' }},
+       {0x1404, 0x7C04, 257, 72, 50070, 50076, 50115, 50152, 38729, 38733, 50156, {44125, 0, 0, 0}, 212, 212, { 950, 500, 10002, 950, 0, ',' }},
+       {0x1407, 0x0007, 257, 62, 50159, 50165, 50188, 50212, 38892, 38870, 50216, {38896, 0, 0, 0}, 213, 213, { 1252, 20273, 10000, 850, 0, ';' }},
+       {0x1409, 0x0009, 257, 80, 50219, 50225, 50225, 50247, 39012, 38997, 50251, {39016, 0, 0, 0}, 214, 214, { 1252, 500, 10000, 850, 0, ',' }},
+       {0x140A, 0x000A, 257, 22, 50254, 50260, 50281, 50303, 39059, 39035, 50307, {39063, 0, 0, 0}, 215, 215, { 1252, 20284, 10000, 850, 0, ',' }},
+       {0x140C, 0x000C, 257, 65, 50310, 50316, 50336, 50359, 39159, 39135, 49792, {39163, 0, 0, 0}, 216, 216, { 1252, 20297, 10000, 850, 0, ';' }},
+       {0x141A, 0x681A, 257, 8, 50363, 50374, 50414, 50445, 50449, 50453, 50005, {50456, 0, 0, 0}, 217, 217, { 1250, 870, 10082, 852, 0, ';' }},
+       {0x1801, 0x0001, 257, 68, 50479, 50485, 50502, 50532, 38522, 38493, 50536, {38526, 0, 0, 0}, 218, 218, { 1256, 20420, 10004, 720, 1, ';' }},
+       {0x1809, 0x0009, 257, 46, 50539, 50545, 50545, 50563, 39012, 38997, 49055, {39016, 0, 0, 0}, 219, 219, { 1252, 500, 10000, 850, 0, ',' }},
+       {0x180A, 0x000A, 257, 82, 50567, 50573, 50590, 50609, 39059, 39035, 50613, {39063, 0, 0, 0}, 220, 220, { 1252, 20284, 10000, 850, 0, ',' }},
+       {0x180C, 0x000C, 257, 69, 50616, 50622, 50638, 50657, 39159, 39135, 50661, {39163, 0, 0, 0}, 221, 221, { 1252, 20297, 10000, 850, 0, ';' }},
+       {0x181A, 0x701A, 257, 8, 50664, 50675, 50715, 50767, 50771, 50775, 50005, {50456, 0, 0, 0}, 222, 222, { 1250, 870, 10082, 852, 0, ';' }},
+       {0x1C01, 0x0001, 257, 104, 50778, 50784, 50801, 50827, 38522, 38493, 50831, {38526, 0, 0, 0}, 223, 223, { 1256, 20420, 10004, 720, 1, ';' }},
+       {0x1C09, 0x0009, 257, 115, 50834, 50840, 50840, 50863, 39012, 38997, 46289, {39016, 0, 0, 0}, 224, 224, { 1252, 500, 10000, 437, 0, ',' }},
+       {0x1C0A, 0x000A, 257, 26, 50867, 50873, 50902, 50935, 39059, 39035, 50939, {39063, 0, 0, 0}, 225, 225, { 1252, 20284, 10000, 850, 0, ',' }},
+       {0x1C1A, 0x6C1A, 257, 8, 50942, 50953, 50715, 50996, 51000, 50775, 50005, {40953, 0, 0, 0}, 226, 226, { 1251, 21025, 10007, 855, 0, ';' }},
+       {0x2001, 0x0001, 257, 81, 51004, 51010, 51024, 51052, 38522, 38493, 51056, {38526, 0, 0, 0}, 227, 227, { 1256, 20420, 10004, 720, 1, ';' }},
+       {0x2009, 0x0009, 257, 53, 51059, 51065, 51065, 51083, 39012, 38997, 51087, {39016, 0, 0, 0}, 228, 228, { 1252, 500, 10000, 850, 0, ',' }},
+       {0x200A, 0x000A, 257, 112, 51090, 51096, 51116, 51137, 39059, 39035, 51141, {39063, 0, 0, 0}, 229, 229, { 1252, 20284, 10000, 850, 0, ',' }},
+       {0x201A, 0x641A, 257, 8, 51144, 51155, 50414, 51198, 51202, 50453, 50005, {40953, 0, 0, 0}, 230, 230, { 1251, 870, 10082, 855, 0, ';' }},
+       {0x2401, 0x0001, 257, 114, 51206, 51212, 51227, 51255, 38522, 38493, 51259, {38526, 0, 0, 0}, 231, 231, { 1256, 20420, 10004, 720, 1, ';' }},
+       {0x240A, 0x000A, 257, 21, 51262, 51268, 51287, 51307, 39059, 39035, 51311, {39063, 0, 0, 0}, 232, 232, { 1252, 20284, 10000, 850, 0, ',' }},
+       {0x241A, 0x701A, 257, 92, 51314, 51325, 51349, 51377, 2239, 50775, 51381, {50456, 0, 0, 0}, 233, 233, { 1250, 500, 10029, 852, 0, ';' }},
+       {0x2801, 0x0001, 257, 101, 51384, 51390, 51405, 51433, 38522, 38493, 51437, {38526, 0, 0, 0}, 234, 234, { 1256, 20420, 10004, 720, 1, ';' }},
+       {0x2809, 0x0009, 257, 16, 51440, 51446, 51446, 51463, 39012, 38997, 51467, {39016, 0, 0, 0}, 235, 235, { 1252, 500, 10000, 850, 0, ';' }},
+       {0x280A, 0x000A, 257, 83, 51470, 51476, 51491, 51508, 39059, 39035, 51512, {39063, 0, 0, 0}, 236, 236, { 1252, 20284, 10000, 850, 0, ',' }},
+       {0x281A, 0x6C1A, 257, 92, 51515, 51526, 51349, 51553, 2239, 50775, 51381, {40953, 0, 0, 0}, 237, 237, { 1251, 21025, 10007, 855, 0, ';' }},
+       {0x2C01, 0x0001, 257, 54, 51557, 51563, 51579, 51609, 38522, 38493, 51613, {38526, 0, 0, 0}, 238, 238, { 1256, 20420, 10004, 720, 1, ';' }},
+       {0x2C09, 0x0009, 257, 106, 51616, 51622, 51622, 51652, 39012, 38997, 51656, {39016, 0, 0, 0}, 239, 239, { 1252, 500, 10000, 850, 0, ';' }},
+       {0x2C0A, 0x000A, 257, 4, 51659, 51665, 51685, 51706, 39059, 39035, 51710, {39063, 0, 0, 0}, 240, 240, { 1252, 20284, 10000, 850, 0, ',' }},
+       {0x2C1A, 0x701A, 257, 70, 51713, 51724, 51752, 51785, 2239, 50775, 51789, {50456, 0, 0, 0}, 241, 241, { 1250, 500, 10029, 852, 0, ';' }},
+       {0x3001, 0x0001, 257, 61, 51792, 51798, 51815, 51843, 38522, 38493, 51847, {38526, 0, 0, 0}, 242, 242, { 1256, 20420, 10004, 720, 1, ';' }},
+       {0x3009, 0x0009, 257, 116, 51850, 51856, 51856, 51875, 39012, 38997, 51879, {39016, 0, 0, 0}, 243, 243, { 1252, 500, 10000, 437, 0, ',' }},
+       {0x300A, 0x000A, 257, 28, 51882, 51888, 51906, 51925, 39059, 39035, 51929, {39063, 0, 0, 0}, 244, 244, { 1252, 20284, 10000, 850, 0, ',' }},
+       {0x301A, 0x6C1A, 257, 70, 51932, 51943, 51752, 51974, 2239, 50775, 51789, {40953, 0, 0, 0}, 245, 245, { 1251, 21025, 10007, 855, 0, ';' }},
+       {0x3401, 0x0001, 257, 59, 51978, 51984, 52000, 52030, 38522, 38493, 52034, {38526, 0, 0, 0}, 246, 246, { 1256, 20420, 10004, 720, 1, ';' }},
+       {0x3409, 0x0009, 257, 84, 52037, 52043, 52043, 52065, 39012, 38997, 47982, {39016, 0, 0, 0}, 247, 247, { 1252, 500, 10000, 437, 0, ',' }},
+       {0x340A, 0x000A, 257, 19, 52069, 52075, 52091, 52108, 39059, 39035, 52112, {39063, 0, 0, 0}, 248, 248, { 1252, 20284, 10000, 850, 0, ',' }},
+       {0x3801, 0x0001, 257, 0, 52115, 52121, 52151, 52215, 38522, 38493, 52219, {38526, 0, 0, 0}, 249, 249, { 1256, 20420, 10004, 720, 1, ';' }},
+       {0x380A, 0x000A, 257, 110, 52222, 52228, 52246, 52265, 39059, 39035, 52269, {39063, 0, 0, 0}, 250, 250, { 1252, 20284, 10000, 850, 0, ',' }},
+       {0x3C01, 0x0001, 257, 12, 52272, 52278, 52295, 52327, 38522, 38493, 52331, {38526, 0, 0, 0}, 251, 251, { 1256, 20420, 10004, 720, 1, ';' }},
+       {0x3C0A, 0x000A, 257, 89, 52334, 52340, 52359, 52379, 39059, 39035, 52383, {39063, 0, 0, 0}, 252, 252, { 1252, 20284, 10000, 850, 0, ',' }},
+       {0x4001, 0x0001, 257, 90, 52386, 52392, 52407, 52431, 38522, 38493, 52435, {38526, 0, 0, 0}, 253, 253, { 1256, 20420, 10004, 720, 1, ';' }},
+       {0x4009, 0x0009, 257, 48, 52438, 52444, 52444, 52460, 39012, 38997, 46613, {39016, 0, 0, 0}, 254, 254, { 1252, 37, 10000, 437, 0, ',' }},
+       {0x400A, 0x000A, 257, 13, 52464, 52470, 52488, 52507, 39059, 39035, 52511, {39063, 0, 0, 0}, 255, 255, { 1252, 20284, 10000, 850, 0, ',' }},
+       {0x440A, 0x000A, 257, 100, 52514, 52520, 52542, 52565, 39059, 39035, 52569, {39063, 0, 0, 0}, 256, 256, { 1252, 20284, 10000, 850, 0, ',' }},
+       {0x4809, 0x0009, 257, 97, 52572, 52578, 52578, 52598, 39012, 38997, 49739, {39016, 0, 0, 0}, 257, 257, { 1252, 37, 10000, 437, 0, ',' }},
+       {0x480A, 0x000A, 257, 42, 52602, 52608, 52627, 52647, 39059, 39035, 52651, {39063, 0, 0, 0}, 258, 258, { 1252, 20284, 10000, 850, 0, ',' }},
+       {0x4C0A, 0x000A, 257, 76, 52654, 52660, 52680, 52701, 39059, 39035, 52705, {39063, 0, 0, 0}, 259, 259, { 1252, 20284, 10000, 850, 0, ',' }},
+       {0x500A, 0x000A, 257, 87, 52708, 52714, 52736, 52759, 39059, 39035, 52763, {39063, 0, 0, 0}, 260, 260, { 1252, 20284, 10000, 850, 0, ',' }},
+       {0x540A, 0x000A, 257, 109, 52766, 52772, 52796, 52822, 39059, 39035, 44370, {39063, 0, 0, 0}, 261, 261, { 1252, 20284, 10000, 850, 0, ',' }},
+       {0x641A, 0x781A, 257, -1, 52826, 52834, 52853, 51198, 51202, 50453, 0, {40953, 0, 0, 0}, 262, 262, { 1251, 870, 10082, 855, 0, ';' }},
+       {0x681A, 0x781A, 257, -1, 52862, 52870, 52853, 50445, 50449, 50453, 0, {50456, 0, 0, 0}, 263, 263, { 1250, 870, 10082, 852, 0, ';' }},
+       {0x6C1A, 0x7C1A, 257, -1, 52886, 52894, 52913, 51553, 2239, 50775, 0, {40953, 0, 0, 0}, 264, 264, { 1251, 21025, 10007, 855, 0, ';' }},
+       {0x701A, 0x7C1A, 257, -1, 52926, 52934, 52913, 51377, 2239, 50775, 0, {50456, 0, 0, 0}, 265, 265, { 1250, 500, 10029, 852, 0, ';' }},
+       {0x742C, 0x002C, 257, -1, 52950, 52958, 40825, 49013, 40841, 40810, 0, {40845, 0, 0, 0}, 266, 266, { 1251, 20880, 10007, 866, 0, ';' }},
+       {0x7804, 0x007F, 257, -1, 38733, 38751, 38718, 38725, 38729, 38733, 0, {38736, 0, 0, 0}, 267, 267, { 936, 500, 10008, 936, 0, ',' }},
+       {0x7814, 0x0014, 257, -1, 48861, 52981, 52999, 48853, 48857, 48861, 0, {38849, 0, 0, 0}, 268, 268, { 1252, 20277, 10000, 850, 0, ';' }},
+       {0x781A, 0x007F, 257, -1, 50453, 53007, 52853, 50445, 50449, 50453, 0, {50456, 0, 0, 0}, 269, 269, { 1250, 870, 10082, 852, 0, ';' }},
+       {0x782C, 0x002C, 257, -1, 53015, 53023, 40825, 40837, 40841, 40810, 0, {40845, 0, 0, 0}, 270, 270, { 1254, 20905, 10081, 857, 0, ';' }},
+       {0x7843, 0x0043, 257, -1, 53043, 53051, 41771, 41782, 41786, 41762, 0, {49098, 0, 0, 0}, 271, 271, { 1251, 20880, 10007, 866, 0, ';' }},
+       {0x7850, 0x0050, 257, -1, 53068, 53076, 42708, 53097, 42725, 42695, 0, {42729, 0, 0, 0}, 272, 272, { 1251, 20880, 10007, 866, 0, ';' }},
+       {0x7C04, 0x7804, 257, -1, 53101, 44080, 38718, 44118, 38729, 38733, 0, {44125, 0, 0, 0}, 273, 273, { 950, 500, 10002, 950, 0, ',' }},
+       {0x7C04, 0x7C04, 257, -1, 53109, 53116, 38718, 44118, 38729, 38733, 0, {44125, 0, 0, 0}, 274, 274, { 950, 500, 10002, 950, 0, ',' }},
+       {0x7C14, 0x0014, 257, -1, 39564, 53145, 53163, 39556, 39560, 39564, 0, {38849, 0, 0, 0}, 275, 275, { 1252, 20277, 10000, 850, 0, ';' }},
+       {0x7C1A, 0x007F, 257, -1, 50775, 53177, 52913, 53185, 2239, 50775, 0, {40953, 0, 0, 0}, 276, 276, { 1250, 500, 10029, 852, 0, ';' }},
+       {0x7C28, 0x0028, 257, -1, 53189, 53197, 40622, 40635, 40639, 40613, 0, {0, 0, 0, 0}, 277, 277, { 1251, 20880, 10007, 866, 0, ';' }},
+       {0x7C43, 0x0043, 257, -1, 53214, 53222, 41771, 41782, 41786, 41762, 0, {41790, 0, 0, 0}, 278, 278, { 1254, 500, 10029, 857, 0, ';' }},
+       {0x7C5F, 0x005F, 257, -1, 53236, 53245, 43263, 43273, 43235, 43235, 0, {0, 0, 0, 0}, 279, 279, { 1252, 20297, 10000, 850, 0, ';' }},
+       {0x7C68, 0x0068, 257, -1, 53277, 53285, 43431, 43437, 43441, 43428, 0, {0, 0, 0, 0}, 280, 280, { 1252, 37, 10000, 437, 0, ',' }}
 };
 
 
 static const CultureInfoNameEntry culture_name_entries [] = {
-       {40628, 50},     /* af */
-       {52832, 144},    /* af-za */
-       {7992, 80},      /* am */
-       {52838, 168},    /* am-et */
-       {38026, 0},      /* ar */
-       {52844, 249},    /* ar-ae */
-       {52850, 251},    /* ar-bh */
-       {52856, 211},    /* ar-dz */
-       {52862, 197},    /* ar-eg */
-       {52868, 182},    /* ar-iq */
-       {52874, 238},    /* ar-jo */
-       {52880, 246},    /* ar-kw */
-       {52886, 242},    /* ar-lb */
-       {52892, 204},    /* ar-ly */
-       {52898, 218},    /* ar-ma */
-       {52904, 227},    /* ar-om */
-       {52910, 253},    /* ar-qa */
-       {52916, 96},     /* ar-sa */
-       {52922, 234},    /* ar-sy */
-       {52928, 223},    /* ar-tn */
-       {52934, 231},    /* ar-ye */
-       {42040, 70},     /* as */
-       {52940, 159},    /* as-in */
-       {40343, 44},     /* az */
-       {52946, 266},    /* az-cyrl */
-       {52954, 193},    /* az-cyrl-az */
-       {52965, 270},    /* az-latn */
-       {52973, 138},    /* az-latn-az */
-       {39855, 35},     /* be */
-       {52984, 129},    /* be-by */
-       {38087, 1},      /* bg */
-       {52990, 97},     /* bg-bg */
-       {41343, 62},     /* bn */
-       {52996, 196},    /* bn-bd */
-       {53002, 152},    /* bn-in */
-       {42294, 73},     /* bo */
-       {53008, 161},    /* bo-cn */
-       {43174, 91},     /* br */
-       {53014, 178},    /* br-fr */
-       {49986, 269},    /* bs */
-       {53020, 262},    /* bs-cyrl */
-       {53028, 230},    /* bs-cyrl-ba */
-       {53039, 263},    /* bs-latn */
-       {53047, 217},    /* bs-latn-ba */
-       {38169, 2},      /* ca */
-       {53058, 98},     /* ca-es */
-       {38305, 5},      /* cs */
-       {53064, 100},    /* cs-cz */
-       {42338, 74},     /* cy */
-       {53070, 162},    /* cy-gb */
-       {38358, 6},      /* da */
-       {53076, 101},    /* da-dk */
-       {38403, 7},      /* de */
-       {53082, 199},    /* de-at */
-       {53088, 184},    /* de-ch */
-       {53094, 102},    /* de-de */
-       {53100, 213},    /* de-li */
-       {53106, 206},    /* de-lu */
-       {38454, 8},      /* el */
-       {53112, 103},    /* el-gr */
-       {38530, 9},      /* en */
-       {53118, 200},    /* en-au */
-       {53124, 235},    /* en-bz */
-       {53130, 207},    /* en-ca */
-       {53136, 185},    /* en-gb */
-       {53142, 219},    /* en-ie */
-       {53148, 254},    /* en-in */
-       {53154, 228},    /* en-jm */
-       {53160, 214},    /* en-nz */
-       {53166, 247},    /* en-ph */
-       {53172, 257},    /* en-sg */
-       {53178, 239},    /* en-tt */
-       {53184, 104},    /* en-us */
-       {53190, 224},    /* en-za */
-       {53196, 243},    /* en-zw */
-       {38568, 10},     /* es */
-       {53202, 240},    /* es-ar */
-       {53208, 255},    /* es-bo */
-       {53214, 248},    /* es-cl */
-       {53220, 232},    /* es-co */
-       {53226, 215},    /* es-cr */
-       {53232, 225},    /* es-do */
-       {53238, 244},    /* es-ec */
-       {53244, 201},    /* es-es */
-       {53250, 208},    /* es-gt */
-       {53256, 258},    /* es-hn */
-       {53262, 186},    /* es-mx */
-       {53268, 259},    /* es-ni */
-       {53274, 220},    /* es-pa */
-       {53280, 236},    /* es-pe */
-       {53286, 260},    /* es-pr */
-       {53292, 252},    /* es-py */
-       {53298, 256},    /* es-sv */
-       {53304, 261},    /* es-us */
-       {53310, 250},    /* es-uy */
-       {53316, 229},    /* es-ve */
-       {39997, 37},     /* et */
-       {53322, 131},    /* et-ee */
-       {40397, 45},     /* eu */
-       {53328, 139},    /* eu-es */
-       {40176, 41},     /* fa */
-       {53334, 135},    /* fa-ir */
-       {38618, 11},     /* fi */
-       {53340, 105},    /* fi-fi */
-       {42921, 84},     /* fil */
-       {53346, 171},    /* fil-ph */
-       {40776, 52},     /* fo */
-       {53353, 146},    /* fo-fo */
-       {38668, 12},     /* fr */
-       {53359, 187},    /* fr-be */
-       {53365, 202},    /* fr-ca */
-       {53371, 209},    /* fr-ch */
-       {53377, 106},    /* fr-fr */
-       {53383, 216},    /* fr-lu */
-       {53389, 221},    /* fr-mc */
-       {40998, 56},     /* ga */
-       {53395, 194},    /* ga-ie */
-       {43342, 95},     /* gd */
-       {53401, 181},    /* gd-gb */
-       {42538, 77},     /* gl */
-       {53407, 165},    /* gl-es */
-       {43222, 92},     /* gsw */
-       {41528, 64},     /* gu */
-       {53413, 153},    /* gu-in */
-       {42961, 85},     /* ha */
-       {53419, 280},    /* ha-latn */
-       {53427, 172},    /* ha-latn-ng */
-       {38718, 13},     /* he */
-       {53438, 107},    /* he-il */
-       {40805, 53},     /* hi */
-       {53444, 147},    /* hi-in */
-       {39382, 26},     /* hr */
-       {53450, 210},    /* hr-ba */
-       {53456, 120},    /* hr-hr */
-       {38780, 14},     /* hu */
-       {53462, 108},    /* hu-hu */
-       {40278, 43},     /* hy */
-       {53468, 137},    /* hy-am */
-       {39709, 33},     /* id */
-       {53474, 127},    /* id-id */
-       {43113, 89},     /* ig */
-       {53480, 176},    /* ig-ng */
-       {43129, 90},     /* ii */
-       {53486, 177},    /* ii-cn */
-       {38824, 15},     /* is */
-       {53492, 109},    /* is-is */
-       {38875, 16},     /* it */
-       {53498, 188},    /* it-ch */
-       {53504, 110},    /* it-it */
-       {38925, 17},     /* ja */
-       {53510, 111},    /* ja-jp */
-       {40669, 51},     /* ka */
-       {53516, 145},    /* ka-ge */
-       {41092, 58},     /* kk */
-       {43051, 88},     /* kl */
-       {53522, 175},    /* kl-gl */
-       {42379, 75},     /* km */
-       {53528, 163},    /* km-kh */
-       {37279, 68},     /* kn */
-       {53534, 157},    /* kn-in */
-       {38982, 18},     /* ko */
-       {53540, 112},    /* ko-kr */
-       {42565, 78},     /* kok */
-       {53546, 166},    /* kok-in */
-       {41172, 59},     /* ky */
-       {42467, 76},     /* lo */
-       {53553, 164},    /* lo-la */
-       {40091, 39},     /* lt */
-       {53559, 133},    /* lt-lt */
-       {40043, 38},     /* lv */
-       {53565, 132},    /* lv-lv */
-       {40443, 46},     /* mk */
-       {53571, 140},    /* mk-mk */
-       {41956, 69},     /* ml */
-       {53577, 158},    /* ml-in */
-       {42228, 72},     /* mn */
-       {53583, 272},    /* mn-cyrl */
-       {42135, 71},     /* mr */
-       {53591, 160},    /* mr-in */
-       {41044, 57},     /* ms */
-       {40891, 54},     /* mt */
-       {53597, 148},    /* mt-mt */
-       {39097, 275},    /* nb */
-       {53603, 114},    /* nb-no */
-       {1987, 82},      /* ne */
-       {53609, 169},    /* ne-np */
-       {39020, 19},     /* nl */
-       {53615, 189},    /* nl-be */
-       {53621, 113},    /* nl-nl */
-       {48394, 268},    /* nn */
-       {53627, 190},    /* nn-no */
-       {39070, 20},     /* no */
-       {43011, 87},     /* nso */
-       {53633, 174},    /* nso-za */
-       {41626, 65},     /* or */
-       {53640, 154},    /* or-in */
-       {41443, 63},     /* pa */
-       {39100, 21},     /* pl */
-       {53646, 115},    /* pl-pl */
-       {42894, 83},     /* ps */
-       {53652, 170},    /* ps-af */
-       {39149, 22},     /* pt */
-       {53658, 116},    /* pt-br */
-       {53664, 191},    /* pt-pt */
-       {39205, 23},     /* rm */
-       {53670, 117},    /* rm-ch */
-       {39254, 24},     /* ro */
-       {53676, 118},    /* ro-ro */
-       {39302, 25},     /* ru */
-       {53682, 119},    /* ru-ru */
-       {43319, 94},     /* rw */
-       {53688, 180},    /* rw-rw */
-       {43287, 93},     /* sah */
-       {53694, 179},    /* sah-ru */
-       {40937, 55},     /* se */
-       {53701, 203},    /* se-fi */
-       {53707, 149},    /* se-no */
-       {42600, 79},     /* si */
-       {53713, 167},    /* si-lk */
-       {12780, 27},     /* sk */
-       {53719, 121},    /* sk-sk */
-       {39940, 36},     /* sl */
-       {53725, 130},    /* sl-si */
-       {39485, 28},     /* sq */
-       {53731, 122},    /* sq-al */
-       {50308, 276},    /* sr */
-       {53737, 264},    /* sr-cyrl */
-       {53745, 226},    /* sr-cyrl-ba */
-       {53756, 245},    /* sr-cyrl-me */
-       {53767, 237},    /* sr-cyrl-rs */
-       {53778, 265},    /* sr-latn */
-       {53786, 222},    /* sr-latn-ba */
-       {53797, 241},    /* sr-latn-me */
-       {53808, 233},    /* sr-latn-rs */
-       {39531, 29},     /* sv */
-       {53819, 192},    /* sv-fi */
-       {53825, 123},    /* sv-se */
-       {41245, 60},     /* sw */
-       {53831, 150},    /* sw-ke */
-       {41659, 66},     /* ta */
-       {53837, 155},    /* ta-in */
-       {41757, 67},     /* te */
-       {53843, 156},    /* te-in */
-       {40146, 40},     /* tg */
-       {53849, 277},    /* tg-cyrl */
-       {53857, 134},    /* tg-cyrl-tj */
-       {39558, 30},     /* th */
-       {53868, 124},    /* th-th */
-       {40530, 47},     /* tn */
-       {53874, 141},    /* tn-za */
-       {12789, 31},     /* tr */
-       {53880, 125},    /* tr-tr */
-       {42768, 81},     /* tzm */
-       {53886, 279},    /* tzm-latn */
-       {39767, 34},     /* uk */
-       {53895, 128},    /* uk-ua */
-       {39654, 32},     /* ur */
-       {53901, 126},    /* ur-pk */
-       {41295, 61},     /* uz */
-       {53907, 271},    /* uz-cyrl */
-       {53915, 195},    /* uz-cyrl-uz */
-       {53926, 278},    /* uz-latn */
-       {53934, 151},    /* uz-latn-uz */
-       {40230, 42},     /* vi */
-       {53945, 136},    /* vi-vn */
-       {40557, 48},     /* xh */
-       {53951, 142},    /* xh-za */
-       {42978, 86},     /* yo */
-       {53957, 173},    /* yo-ng */
-       {38266, 267},    /* zh */
-       {53963, 3},      /* zh-chs */
-       {53970, 274},    /* zh-cht */
-       {53977, 183},    /* zh-cn */
-       {53983, 4},      /* zh-hans */
-       {53991, 273},    /* zh-hant */
-       {53999, 198},    /* zh-hk */
-       {54005, 212},    /* zh-mo */
-       {54011, 205},    /* zh-sg */
-       {54017, 99},     /* zh-tw */
-       {40583, 49},     /* zu */
-       {54023, 143}     /* zu-za */
+       {41095, 50},     /* af */
+       {53299, 144},    /* af-za */
+       {8151, 80},      /* am */
+       {53305, 168},    /* am-et */
+       {38493, 0},      /* ar */
+       {53311, 249},    /* ar-ae */
+       {53317, 251},    /* ar-bh */
+       {53323, 211},    /* ar-dz */
+       {53329, 197},    /* ar-eg */
+       {53335, 182},    /* ar-iq */
+       {53341, 238},    /* ar-jo */
+       {53347, 246},    /* ar-kw */
+       {53353, 242},    /* ar-lb */
+       {53359, 204},    /* ar-ly */
+       {53365, 218},    /* ar-ma */
+       {53371, 227},    /* ar-om */
+       {53377, 253},    /* ar-qa */
+       {53383, 96},     /* ar-sa */
+       {53389, 234},    /* ar-sy */
+       {53395, 223},    /* ar-tn */
+       {53401, 231},    /* ar-ye */
+       {42507, 70},     /* as */
+       {53407, 159},    /* as-in */
+       {40810, 44},     /* az */
+       {53413, 266},    /* az-cyrl */
+       {53421, 193},    /* az-cyrl-az */
+       {53432, 270},    /* az-latn */
+       {53440, 138},    /* az-latn-az */
+       {40322, 35},     /* be */
+       {53451, 129},    /* be-by */
+       {38554, 1},      /* bg */
+       {53457, 97},     /* bg-bg */
+       {41810, 62},     /* bn */
+       {53463, 196},    /* bn-bd */
+       {53469, 152},    /* bn-in */
+       {42761, 73},     /* bo */
+       {53475, 161},    /* bo-cn */
+       {43641, 91},     /* br */
+       {53481, 178},    /* br-fr */
+       {50453, 269},    /* bs */
+       {53487, 262},    /* bs-cyrl */
+       {53495, 230},    /* bs-cyrl-ba */
+       {53506, 263},    /* bs-latn */
+       {53514, 217},    /* bs-latn-ba */
+       {38636, 2},      /* ca */
+       {53525, 98},     /* ca-es */
+       {38772, 5},      /* cs */
+       {53531, 100},    /* cs-cz */
+       {42805, 74},     /* cy */
+       {53537, 162},    /* cy-gb */
+       {38825, 6},      /* da */
+       {53543, 101},    /* da-dk */
+       {38870, 7},      /* de */
+       {53549, 199},    /* de-at */
+       {53555, 184},    /* de-ch */
+       {53561, 102},    /* de-de */
+       {53567, 213},    /* de-li */
+       {53573, 206},    /* de-lu */
+       {38921, 8},      /* el */
+       {53579, 103},    /* el-gr */
+       {38997, 9},      /* en */
+       {53585, 200},    /* en-au */
+       {53591, 235},    /* en-bz */
+       {53597, 207},    /* en-ca */
+       {53603, 185},    /* en-gb */
+       {53609, 219},    /* en-ie */
+       {53615, 254},    /* en-in */
+       {53621, 228},    /* en-jm */
+       {53627, 214},    /* en-nz */
+       {53633, 247},    /* en-ph */
+       {53639, 257},    /* en-sg */
+       {53645, 239},    /* en-tt */
+       {53651, 104},    /* en-us */
+       {53657, 224},    /* en-za */
+       {53663, 243},    /* en-zw */
+       {39035, 10},     /* es */
+       {53669, 240},    /* es-ar */
+       {53675, 255},    /* es-bo */
+       {53681, 248},    /* es-cl */
+       {53687, 232},    /* es-co */
+       {53693, 215},    /* es-cr */
+       {53699, 225},    /* es-do */
+       {53705, 244},    /* es-ec */
+       {53711, 201},    /* es-es */
+       {53717, 208},    /* es-gt */
+       {53723, 258},    /* es-hn */
+       {53729, 186},    /* es-mx */
+       {53735, 259},    /* es-ni */
+       {53741, 220},    /* es-pa */
+       {53747, 236},    /* es-pe */
+       {53753, 260},    /* es-pr */
+       {53759, 252},    /* es-py */
+       {53765, 256},    /* es-sv */
+       {53771, 261},    /* es-us */
+       {53777, 250},    /* es-uy */
+       {53783, 229},    /* es-ve */
+       {40464, 37},     /* et */
+       {53789, 131},    /* et-ee */
+       {40864, 45},     /* eu */
+       {53795, 139},    /* eu-es */
+       {40643, 41},     /* fa */
+       {53801, 135},    /* fa-ir */
+       {39085, 11},     /* fi */
+       {53807, 105},    /* fi-fi */
+       {43388, 84},     /* fil */
+       {53813, 171},    /* fil-ph */
+       {41243, 52},     /* fo */
+       {53820, 146},    /* fo-fo */
+       {39135, 12},     /* fr */
+       {53826, 187},    /* fr-be */
+       {53832, 202},    /* fr-ca */
+       {53838, 209},    /* fr-ch */
+       {53844, 106},    /* fr-fr */
+       {53850, 216},    /* fr-lu */
+       {53856, 221},    /* fr-mc */
+       {41465, 56},     /* ga */
+       {53862, 194},    /* ga-ie */
+       {43809, 95},     /* gd */
+       {53868, 181},    /* gd-gb */
+       {43005, 77},     /* gl */
+       {53874, 165},    /* gl-es */
+       {43689, 92},     /* gsw */
+       {41995, 64},     /* gu */
+       {53880, 153},    /* gu-in */
+       {43428, 85},     /* ha */
+       {53886, 280},    /* ha-latn */
+       {53894, 172},    /* ha-latn-ng */
+       {39185, 13},     /* he */
+       {53905, 107},    /* he-il */
+       {41272, 53},     /* hi */
+       {53911, 147},    /* hi-in */
+       {39849, 26},     /* hr */
+       {53917, 210},    /* hr-ba */
+       {53923, 120},    /* hr-hr */
+       {39247, 14},     /* hu */
+       {53929, 108},    /* hu-hu */
+       {40745, 43},     /* hy */
+       {53935, 137},    /* hy-am */
+       {40176, 33},     /* id */
+       {53941, 127},    /* id-id */
+       {43580, 89},     /* ig */
+       {53947, 176},    /* ig-ng */
+       {43596, 90},     /* ii */
+       {53953, 177},    /* ii-cn */
+       {39291, 15},     /* is */
+       {53959, 109},    /* is-is */
+       {39342, 16},     /* it */
+       {53965, 188},    /* it-ch */
+       {53971, 110},    /* it-it */
+       {39392, 17},     /* ja */
+       {53977, 111},    /* ja-jp */
+       {41136, 51},     /* ka */
+       {53983, 145},    /* ka-ge */
+       {41559, 58},     /* kk */
+       {43518, 88},     /* kl */
+       {53989, 175},    /* kl-gl */
+       {42846, 75},     /* km */
+       {53995, 163},    /* km-kh */
+       {37746, 68},     /* kn */
+       {54001, 157},    /* kn-in */
+       {39449, 18},     /* ko */
+       {54007, 112},    /* ko-kr */
+       {43032, 78},     /* kok */
+       {54013, 166},    /* kok-in */
+       {41639, 59},     /* ky */
+       {42934, 76},     /* lo */
+       {54020, 164},    /* lo-la */
+       {40558, 39},     /* lt */
+       {54026, 133},    /* lt-lt */
+       {40510, 38},     /* lv */
+       {54032, 132},    /* lv-lv */
+       {40910, 46},     /* mk */
+       {54038, 140},    /* mk-mk */
+       {42423, 69},     /* ml */
+       {54044, 158},    /* ml-in */
+       {42695, 72},     /* mn */
+       {54050, 272},    /* mn-cyrl */
+       {42602, 71},     /* mr */
+       {54058, 160},    /* mr-in */
+       {41511, 57},     /* ms */
+       {41358, 54},     /* mt */
+       {54064, 148},    /* mt-mt */
+       {39564, 275},    /* nb */
+       {54070, 114},    /* nb-no */
+       {1992, 82},      /* ne */
+       {54076, 169},    /* ne-np */
+       {39487, 19},     /* nl */
+       {54082, 189},    /* nl-be */
+       {54088, 113},    /* nl-nl */
+       {48861, 268},    /* nn */
+       {54094, 190},    /* nn-no */
+       {39537, 20},     /* no */
+       {43478, 87},     /* nso */
+       {54100, 174},    /* nso-za */
+       {42093, 65},     /* or */
+       {54107, 154},    /* or-in */
+       {41910, 63},     /* pa */
+       {39567, 21},     /* pl */
+       {54113, 115},    /* pl-pl */
+       {43361, 83},     /* ps */
+       {54119, 170},    /* ps-af */
+       {39616, 22},     /* pt */
+       {54125, 116},    /* pt-br */
+       {54131, 191},    /* pt-pt */
+       {39672, 23},     /* rm */
+       {54137, 117},    /* rm-ch */
+       {39721, 24},     /* ro */
+       {54143, 118},    /* ro-ro */
+       {39769, 25},     /* ru */
+       {54149, 119},    /* ru-ru */
+       {43786, 94},     /* rw */
+       {54155, 180},    /* rw-rw */
+       {43754, 93},     /* sah */
+       {54161, 179},    /* sah-ru */
+       {41404, 55},     /* se */
+       {54168, 203},    /* se-fi */
+       {54174, 149},    /* se-no */
+       {43067, 79},     /* si */
+       {54180, 167},    /* si-lk */
+       {12824, 27},     /* sk */
+       {54186, 121},    /* sk-sk */
+       {40407, 36},     /* sl */
+       {54192, 130},    /* sl-si */
+       {39952, 28},     /* sq */
+       {54198, 122},    /* sq-al */
+       {50775, 276},    /* sr */
+       {54204, 264},    /* sr-cyrl */
+       {54212, 226},    /* sr-cyrl-ba */
+       {54223, 245},    /* sr-cyrl-me */
+       {54234, 237},    /* sr-cyrl-rs */
+       {54245, 265},    /* sr-latn */
+       {54253, 222},    /* sr-latn-ba */
+       {54264, 241},    /* sr-latn-me */
+       {54275, 233},    /* sr-latn-rs */
+       {39998, 29},     /* sv */
+       {54286, 192},    /* sv-fi */
+       {54292, 123},    /* sv-se */
+       {41712, 60},     /* sw */
+       {54298, 150},    /* sw-ke */
+       {42126, 66},     /* ta */
+       {54304, 155},    /* ta-in */
+       {42224, 67},     /* te */
+       {54310, 156},    /* te-in */
+       {40613, 40},     /* tg */
+       {54316, 277},    /* tg-cyrl */
+       {54324, 134},    /* tg-cyrl-tj */
+       {40025, 30},     /* th */
+       {54335, 124},    /* th-th */
+       {40997, 47},     /* tn */
+       {54341, 141},    /* tn-za */
+       {12833, 31},     /* tr */
+       {54347, 125},    /* tr-tr */
+       {43235, 81},     /* tzm */
+       {54353, 279},    /* tzm-latn */
+       {40234, 34},     /* uk */
+       {54362, 128},    /* uk-ua */
+       {40121, 32},     /* ur */
+       {54368, 126},    /* ur-pk */
+       {41762, 61},     /* uz */
+       {54374, 271},    /* uz-cyrl */
+       {54382, 195},    /* uz-cyrl-uz */
+       {54393, 278},    /* uz-latn */
+       {54401, 151},    /* uz-latn-uz */
+       {40697, 42},     /* vi */
+       {54412, 136},    /* vi-vn */
+       {41024, 48},     /* xh */
+       {54418, 142},    /* xh-za */
+       {43445, 86},     /* yo */
+       {54424, 173},    /* yo-ng */
+       {38733, 267},    /* zh */
+       {54430, 3},      /* zh-chs */
+       {54437, 274},    /* zh-cht */
+       {54444, 183},    /* zh-cn */
+       {54450, 4},      /* zh-hans */
+       {54458, 273},    /* zh-hant */
+       {54466, 198},    /* zh-hk */
+       {54472, 212},    /* zh-mo */
+       {54478, 205},    /* zh-sg */
+       {54484, 99},     /* zh-tw */
+       {41050, 49},     /* zu */
+       {54490, 143}     /* zu-za */
 };
 
 
 static const RegionInfoEntry region_entries [] = {
-       { 224,51752,48791,48791,54029,54050,37969,54097,54101,54129},
-       { 3,47461,54153,54153,54157,54169,37742,54188,54192,54207},
-       { 6,44777,54220,54220,54224,54232,37282,54242,54246,54259},
-       { 7,1924,50065,50065,54273,54281,37525,54298,54302,54316},
-       { 11,51243,49596,49596,54342,54342,37013,50966,54352,54367},
-       { 14,48940,54382,54382,54386,54394,36909,54406,54410,54410},
-       { 12,48973,54415,54415,54419,54419,37013,54429,54433,54433},
-       { 5,45675,40370,40370,54451,54462,37777,54474,54478,54496},
-       { 25,49538,54516,54516,54520,54543,37837,54563,54567,54603},
-       { 23,48743,54623,54623,54627,54638,37813,54663,54667,54684},
-       { 21,48235,39890,39890,54725,54733,36909,54406,54410,54742},
-       { 35,43561,38119,38119,54747,54756,36891,54773,54777,54791},
-       { 17,51864,54817,54817,54821,54829,37979,54844,54848,54863},
-       { 26,52044,54887,54887,54891,54891,38003,42330,54899,54918},
-       { 32,44481,54928,54928,54932,54939,37168,54946,54950,54965},
-       { 29,45163,54981,54981,54985,54993,37385,55010,55014,55031},
-       { 24,51000,55063,55063,55067,55067,37013,55074,55078,55078},
-       { 39,49066,55092,55092,55096,55096,37013,55103,55107,55123},
-       { 223,13678,55139,55139,55143,55155,37177,37177,55162,55174},
-       { 46,51645,55188,55188,55192,55192,37013,55198,55202,55215},
-       { 45,13757,55228,55228,55232,55238,36930,55257,55261,55274},
-       { 51,50844,55293,55293,55297,55297,37013,55306,55310,55325},
-       { 54,49840,55341,55341,55345,55345,37855,55356,55360,55379},
-       { 75,43724,55400,55400,55404,55419,36933,55437,55441,55463},
-       { 94,43814,38421,38421,55478,55486,36909,54406,54410,54410},
-       { 61,43766,55498,55498,55502,55510,36961,55518,55522,55535},
-       { 65,50472,55547,55547,55551,55570,37013,55592,55596,55611},
-       { 4,49600,55627,55627,55631,55639,37840,55654,55658,55673},
-       { 66,51462,55697,55697,55701,55701,37013,55709,55713,55723},
-       { 70,45261,52355,52355,55745,55753,36909,54406,54410,54742},
-       { 67,48795,55759,55759,55763,55769,37817,55776,55780,55795},
-       { 217,43604,38588,38588,55813,55819,36909,54406,54410,54742},
-       { 73,47340,55827,55827,55831,55840,37722,55856,55860,55875},
-       { 77,43944,38635,38635,55901,55909,36909,54406,54410,54742},
-       { 81,46092,55915,55915,55919,55933,36961,55518,55522,55942},
-       { 84,43988,38688,38688,55955,55955,36909,54406,54410,54742},
-       { 242,46997,55962,55962,55966,55981,37666,55998,56002,56025},
-       { 88,46038,56047,56047,56051,56059,0,56090,56094,56108},
-       { 93,47739,56143,56143,56147,56157,36961,55518,55522,56174},
-       { 98,43870,56194,56194,56198,56205,36909,54406,54410,56218},
-       { 99,49406,56227,56227,56231,56231,7868,56241,56245,56264},
-       { 104,48888,56285,56285,56289,56309,37013,56337,56341,56358},
-       { 106,52184,56365,56365,56369,56369,2411,56378,56382,56399},
-       { 108,44680,39403,39403,56418,56426,37279,56435,56439,56453},
-       { 109,44089,38800,38800,56467,56475,37086,56489,56493,56510},
-       { 111,45026,56524,56524,56528,56528,37361,56538,56542,56560},
-       { 68,48588,56577,56577,56581,56589,36909,54406,54410,54410},
-       { 117,44037,56595,56595,56599,56606,37059,56617,56621,56640},
-       { 113,46146,39740,39740,56647,56653,37604,56666,56670,56683},
-       { 121,48029,56718,56718,56722,56727,37788,56740,56744,56756},
-       { 116,45486,56778,56778,56782,56787,37479,56798,56802,56815},
-       { 110,44138,38847,38847,56835,56843,36961,56851,56855,56872},
-       { 118,44181,38895,38895,56888,56894,36909,54406,54410,54410},
-       { 124,50620,56901,56901,56905,56905,37013,56913,56917,56917},
-       { 126,51146,56933,56933,56937,56944,37939,56957,56961,56977},
-       { 122,44226,38947,38947,56999,57005,37099,57012,57016,57029},
-       { 129,46282,57039,57039,57043,57043,37628,57049,57053,57069},
-       { 40,47063,42404,42404,57087,57096,37669,57118,57122,57137},
-       { 134,44281,39002,39002,57169,57181,37103,57194,57198,57215},
-       { 136,51567,57232,57232,57236,57243,37959,57256,57260,57274},
-       { 138,47105,42484,42484,57296,42474,37673,57301,57305,57317},
-       { 139,51380,57337,57337,57341,57349,37949,57360,57364,57379},
-       { 145,49749,57401,57401,57405,57405,0,37177,55162,57419},
-       { 42,47281,57437,57437,57441,57451,37714,57483,57487,57504},
-       { 141,45359,57552,57552,57556,57566,37453,57574,57578,57595},
-       { 147,49325,57610,57610,57614,57625,36909,54406,54410,54410},
-       { 140,45307,57635,57635,57639,57646,36909,54406,54410,57654},
-       { 148,49208,57659,57659,57663,57669,37827,57680,57684,57697},
-       { 159,50069,42162,42162,57717,57725,37859,57738,57742,57758},
-       { 158,50194,57778,57778,57782,57782,36909,54406,54410,54742},
-       { 270,51322,57789,57789,57793,57804,36909,54406,54410,57822},
-       { 19618,45791,57827,57827,57831,57841,37550,57827,57862,57879},
-       { 151,49689,57911,57911,57915,57931,37850,57959,57963,57979},
-       { 163,46185,40908,40908,57989,57989,36909,54406,54410,57995},
-       { 166,48184,58000,58000,58004,58011,37013,58019,58023,58036},
-       { 175,47569,58050,58050,58054,58062,37749,58071,58075,58090},
-       { 182,52238,58096,58096,58100,58100,38006,58110,58114,58134},
-       { 176,44333,39040,39040,58157,58169,36909,54406,54410,54410},
-       { 177,44391,39089,39089,58179,58186,36961,58192,58196,58212},
-       { 178,47401,58226,58226,58230,58236,37729,58252,58256,58271},
-       { 183,49784,58312,58312,58316,58316,37013,58328,58332,58332},
-       { 164,50589,58351,58351,58355,58360,37888,58371,58375,58386},
-       { 192,50146,41473,41473,58406,58413,37869,58421,58425,58443},
-       { 187,51045,58460,58460,58464,58469,37927,58475,58479,58498},
-       { 201,47515,58516,58516,58520,58532,37745,58542,58546,58546},
-       { 190,44965,58562,58562,58566,58575,37303,58590,58594,58610},
-       { 191,44432,58638,58638,58642,58649,37126,58656,58660,58673},
-       { 202,52296,58687,58687,58691,58691,37013,55709,55713,55723},
-       { 193,48451,58703,58703,58707,58707,36909,54406,54410,54410},
-       { 185,51916,58716,58716,58720,58720,37989,58729,58733,58752},
-       { 197,51968,58771,58771,58775,58781,37993,58788,58792,58804},
-       { 200,44576,58822,58822,58826,58834,0,58843,58847,58860},
-       { 271,50914,52718,52718,58874,58881,37912,58894,58898,58912},
-       { 203,44632,39328,39328,58925,58932,37199,58945,58949,58963},
-       { 204,47897,58995,58995,58999,58999,37753,59006,59010,0},
-       { 205,13675,59024,59024,59028,59041,36833,59088,59092,59104},
-       { 221,44821,59124,59124,59128,59135,36961,59143,59147,59161},
-       { 215,49272,59174,59174,59178,59188,37013,59198,59202,59219},
-       { 212,45219,59232,59232,59236,59245,36909,54406,54410,59255},
-       { 143,44731,59260,59260,59264,59273,36909,54406,54410,54410},
-       { 72,52102,39967,39967,59283,59283,37013,55709,55713,55723},
-       { 222,50970,59295,59295,59299,59305,37917,59316,59320,59333},
-       { 227,44868,39576,39576,59353,39566,37295,59362,59366,59376},
-       { 228,45438,59395,59395,59399,59410,37770,59431,59435,59454},
-       { 234,50364,59467,59467,59471,59479,37873,59488,59492,59507},
-       { 235,44914,59528,59528,59532,59539,37299,59548,59552,59565},
-       { 225,51189,59579,59579,59583,59583,37013,59603,59607,59607},
-       { 237,43655,59634,59634,59638,59645,37756,59652,59656,59674},
-       { 241,45093,39801,39801,59684,59692,37364,59707,59711,59729},
-       { 244,43903,59763,59763,59767,59767,37013,55709,55713,55713},
-       { 246,51802,59781,59781,59785,59785,37013,59793,59797,59812},
-       { 247,46348,41315,41315,59826,59837,37782,59850,59854,59869},
-       { 249,50674,59888,59888,59892,59892,37898,59902,59906,59926},
-       { 251,45544,59946,59946,59950,59958,37521,59969,59973,59989},
-       { 261,50792,60008,60008,60012,60018,37902,60029,60033,60045},
-       { 209,45822,60063,60063,60067,0,10707,60080,60084,0},
-       { 264,51412,60103,60103,60107,60107,37013,55709,55713,55713}
+       { 224,52219,49258,49258,54496,54517,38436,54564,54568,54596},
+       { 3,47928,54620,54620,54624,54636,38209,54655,54659,54674},
+       { 6,45244,54687,54687,54691,54699,37749,54709,54713,54726},
+       { 7,1929,50532,50532,54740,54748,37992,54765,54769,54783},
+       { 11,51710,50063,50063,54809,54809,37480,51433,54819,54834},
+       { 14,49407,54849,54849,54853,54861,37376,54873,54877,54877},
+       { 12,49440,54882,54882,54886,54886,37480,54896,54900,54900},
+       { 5,46142,40837,40837,54918,54929,38244,54941,54945,54963},
+       { 25,50005,54983,54983,54987,55010,38304,55030,55034,55070},
+       { 23,49210,55090,55090,55094,55105,38280,55130,55134,55151},
+       { 21,48702,40357,40357,55192,55200,37376,54873,54877,55209},
+       { 35,44028,38586,38586,55214,55223,37358,55240,55244,55258},
+       { 17,52331,55284,55284,55288,55296,38446,55311,55315,55330},
+       { 26,52511,55354,55354,55358,55358,38470,42797,55366,55385},
+       { 32,44948,55395,55395,55399,55406,37635,55413,55417,55432},
+       { 29,45630,55448,55448,55452,55460,37852,55477,55481,55498},
+       { 24,51467,55530,55530,55534,55534,37480,55541,55545,55545},
+       { 39,49533,55559,55559,55563,55563,37480,55570,55574,55590},
+       { 223,13778,55606,55606,55610,55622,37644,37644,55629,55641},
+       { 46,52112,55655,55655,55659,55659,37480,55665,55669,55682},
+       { 45,13857,55695,55695,55699,55705,37397,55724,55728,55741},
+       { 51,51311,55760,55760,55764,55764,37480,55773,55777,55792},
+       { 54,50307,55808,55808,55812,55812,38322,55823,55827,55846},
+       { 75,44191,55867,55867,55871,55886,37400,55904,55908,55930},
+       { 94,44281,38888,38888,55945,55953,37376,54873,54877,54877},
+       { 61,44233,55965,55965,55969,55977,37428,55985,55989,56002},
+       { 65,50939,56014,56014,56018,56037,37480,56059,56063,56078},
+       { 4,50067,56094,56094,56098,56106,38307,56121,56125,56140},
+       { 66,51929,56164,56164,56168,56168,37480,56176,56180,56190},
+       { 70,45728,52822,52822,56212,56220,37376,54873,54877,55209},
+       { 67,49262,56226,56226,56230,56236,38284,56243,56247,56262},
+       { 217,44071,39055,39055,56280,56286,37376,54873,54877,55209},
+       { 73,47807,56294,56294,56298,56307,38189,56323,56327,56342},
+       { 77,44411,39102,39102,56368,56376,37376,54873,54877,55209},
+       { 81,46559,56382,56382,56386,56400,37428,55985,55989,56409},
+       { 84,44455,39155,39155,56422,56422,37376,54873,54877,55209},
+       { 242,47464,56429,56429,56433,56448,38133,56465,56469,56492},
+       { 88,46505,56514,56514,56518,56526,0,56557,56561,56575},
+       { 93,48206,56610,56610,56614,56624,37428,55985,55989,56641},
+       { 98,44337,56661,56661,56665,56672,37376,54873,54877,56685},
+       { 99,49873,56694,56694,56698,56698,8056,56708,56712,56731},
+       { 104,49355,56752,56752,56756,56776,37480,56804,56808,56825},
+       { 106,52651,56832,56832,56836,56836,2436,56845,56849,56866},
+       { 108,45147,39870,39870,56885,56893,37746,56902,56906,56920},
+       { 109,44556,39267,39267,56934,56942,37553,56956,56960,56977},
+       { 111,45493,56991,56991,56995,56995,37828,57005,57009,57027},
+       { 68,49055,57044,57044,57048,57056,37376,54873,54877,54877},
+       { 117,44504,57062,57062,57066,57073,37526,57084,57088,57107},
+       { 113,46613,40207,40207,57114,57120,38071,57133,57137,57150},
+       { 121,48496,57185,57185,57189,57194,38255,57207,57211,57223},
+       { 116,45953,57245,57245,57249,57254,37946,57265,57269,57282},
+       { 110,44605,39314,39314,57302,57310,37428,57318,57322,57339},
+       { 118,44648,39362,39362,57355,57361,37376,54873,54877,54877},
+       { 124,51087,57368,57368,57372,57372,37480,57380,57384,57384},
+       { 126,51613,57400,57400,57404,57411,38406,57424,57428,57444},
+       { 122,44693,39414,39414,57466,57472,37566,57479,57483,57496},
+       { 129,46749,57506,57506,57510,57510,38095,57516,57520,57536},
+       { 40,47530,42871,42871,57554,57563,38136,57585,57589,57604},
+       { 134,44748,39469,39469,57636,57648,37570,57661,57665,57682},
+       { 136,52034,57699,57699,57703,57710,38426,57723,57727,57741},
+       { 138,47572,42951,42951,57763,42941,38140,57768,57772,57784},
+       { 139,51847,57804,57804,57808,57816,38416,57827,57831,57846},
+       { 145,50216,57868,57868,57872,57872,0,37644,55629,57886},
+       { 42,47748,57904,57904,57908,57918,38181,57950,57954,57971},
+       { 141,45826,58019,58019,58023,58033,37920,58041,58045,58062},
+       { 147,49792,58077,58077,58081,58092,37376,54873,54877,54877},
+       { 140,45774,58102,58102,58106,58113,37376,54873,54877,58121},
+       { 148,49675,58126,58126,58130,58136,38294,58147,58151,58164},
+       { 159,50536,42629,42629,58184,58192,38326,58205,58209,58225},
+       { 158,50661,58245,58245,58249,58249,37376,54873,54877,55209},
+       { 270,51789,58256,58256,58260,58271,37376,54873,54877,58289},
+       { 19618,46258,58294,58294,58298,58308,38017,58294,58329,58346},
+       { 151,50156,58378,58378,58382,58398,38317,58426,58430,58446},
+       { 163,46652,41375,41375,58456,58456,37376,54873,54877,58462},
+       { 166,48651,58467,58467,58471,58478,37480,58486,58490,58503},
+       { 175,48036,58517,58517,58521,58529,38216,58538,58542,58557},
+       { 182,52705,58563,58563,58567,58567,38473,58577,58581,58601},
+       { 176,44800,39507,39507,58624,58636,37376,54873,54877,54877},
+       { 177,44858,39556,39556,58646,58653,37428,58659,58663,58679},
+       { 178,47868,58693,58693,58697,58703,38196,58719,58723,58738},
+       { 183,50251,58779,58779,58783,58783,37480,58795,58799,58799},
+       { 164,51056,58818,58818,58822,58827,38355,58838,58842,58853},
+       { 192,50613,41940,41940,58873,58880,38336,58888,58892,58910},
+       { 187,51512,58927,58927,58931,58936,38394,58942,58946,58965},
+       { 201,47982,58983,58983,58987,58999,38212,59009,59013,59013},
+       { 190,45432,59029,59029,59033,59042,37770,59057,59061,59077},
+       { 191,44899,59105,59105,59109,59116,37593,59123,59127,59140},
+       { 202,52763,59154,59154,59158,59158,37480,56176,56180,56190},
+       { 193,48918,59170,59170,59174,59174,37376,54873,54877,54877},
+       { 185,52383,59183,59183,59187,59187,38456,59196,59200,59219},
+       { 197,52435,59238,59238,59242,59248,38460,59255,59259,59271},
+       { 200,45043,59289,59289,59293,59301,0,59310,59314,59327},
+       { 271,51381,53185,53185,59341,59348,38379,59361,59365,59379},
+       { 203,45099,39795,39795,59392,59399,37666,59412,59416,59430},
+       { 204,48364,59462,59462,59466,59466,38220,59473,59477,0},
+       { 205,13775,59491,59491,59495,59508,37300,59555,59559,59571},
+       { 221,45288,59591,59591,59595,59602,37428,59610,59614,59628},
+       { 215,49739,59641,59641,59645,59655,37480,59665,59669,59686},
+       { 212,45686,59699,59699,59703,59712,37376,54873,54877,59722},
+       { 143,45198,59727,59727,59731,59740,37376,54873,54877,54877},
+       { 72,52569,40434,40434,59750,59750,37480,56176,56180,56190},
+       { 222,51437,59762,59762,59766,59772,38384,59783,59787,59800},
+       { 227,45335,40043,40043,59820,40033,37762,59829,59833,59843},
+       { 228,45905,59862,59862,59866,59877,38237,59898,59902,59921},
+       { 234,50831,59934,59934,59938,59946,38340,59955,59959,59974},
+       { 235,45381,59995,59995,59999,60006,37766,60015,60019,60032},
+       { 225,51656,60046,60046,60050,60050,37480,60070,60074,60074},
+       { 237,44122,60101,60101,60105,60112,38223,60119,60123,60141},
+       { 241,45560,40268,40268,60151,60159,37831,60174,60178,60196},
+       { 244,44370,60230,60230,60234,60234,37480,56176,56180,56180},
+       { 246,52269,60248,60248,60252,60252,37480,60260,60264,60279},
+       { 247,46815,41782,41782,60293,60304,38249,60317,60321,60336},
+       { 249,51141,60355,60355,60359,60359,38365,60369,60373,60393},
+       { 251,46011,60413,60413,60417,60425,37988,60436,60440,60456},
+       { 261,51259,60475,60475,60479,60485,38369,60496,60500,60512},
+       { 209,46289,60530,60530,60534,0,10836,60547,60551,0},
+       { 264,51879,60570,60570,60574,60574,37480,56176,56180,56180}
 };
 
 
 static const RegionInfoNameEntry region_name_entries [] = {
-       {51752, 0},      /* AE */
-       {47461, 1},      /* AF */
-       {44777, 2},      /* AL */
-       {1924, 3},       /* AM */
-       {51243, 4},      /* AR */
-       {48940, 5},      /* AT */
-       {48973, 6},      /* AU */
-       {45675, 7},      /* AZ */
-       {49538, 8},      /* BA */
-       {48743, 9},      /* BD */
-       {48235, 10},     /* BE */
-       {43561, 11},     /* BG */
-       {51864, 12},     /* BH */
-       {52044, 13},     /* BO */
-       {44481, 14},     /* BR */
-       {45163, 15},     /* BY */
-       {51000, 16},     /* BZ */
-       {49066, 17},     /* CA */
-       {13678, 18},     /* CH */
-       {51645, 19},     /* CL */
-       {13757, 20},     /* CN */
-       {50844, 21},     /* CO */
-       {49840, 22},     /* CR */
-       {43724, 23},     /* CZ */
-       {43814, 24},     /* DE */
-       {43766, 25},     /* DK */
-       {50472, 26},     /* DO */
-       {49600, 27},     /* DZ */
-       {51462, 28},     /* EC */
-       {45261, 29},     /* EE */
-       {48795, 30},     /* EG */
-       {43604, 31},     /* ES */
-       {47340, 32},     /* ET */
-       {43944, 33},     /* FI */
-       {46092, 34},     /* FO */
-       {43988, 35},     /* FR */
-       {46997, 36},     /* GB */
-       {46038, 37},     /* GE */
-       {47739, 38},     /* GL */
-       {43870, 39},     /* GR */
-       {49406, 40},     /* GT */
-       {48888, 41},     /* HK */
-       {52184, 42},     /* HN */
-       {44680, 43},     /* HR */
-       {44089, 44},     /* HU */
-       {45026, 45},     /* ID */
-       {48588, 46},     /* IE */
-       {44037, 47},     /* IL */
-       {46146, 48},     /* IN */
-       {48029, 49},     /* IQ */
-       {45486, 50},     /* IR */
-       {44138, 51},     /* IS */
-       {44181, 52},     /* IT */
-       {50620, 53},     /* JM */
-       {51146, 54},     /* JO */
-       {44226, 55},     /* JP */
-       {46282, 56},     /* KE */
-       {47063, 57},     /* KH */
-       {44281, 58},     /* KR */
-       {51567, 59},     /* KW */
-       {47105, 60},     /* LA */
-       {51380, 61},     /* LB */
-       {49749, 62},     /* LI */
-       {47281, 63},     /* LK */
-       {45359, 64},     /* LT */
-       {49325, 65},     /* LU */
-       {45307, 66},     /* LV */
-       {49208, 67},     /* LY */
-       {50069, 68},     /* MA */
-       {50194, 69},     /* MC */
-       {51322, 70},     /* ME */
-       {45791, 71},     /* MK */
-       {49689, 72},     /* MO */
-       {46185, 73},     /* MT */
-       {48184, 74},     /* MX */
-       {47569, 75},     /* NG */
-       {52238, 76},     /* NI */
-       {44333, 77},     /* NL */
-       {44391, 78},     /* NO */
-       {47401, 79},     /* NP */
-       {49784, 80},     /* NZ */
-       {50589, 81},     /* OM */
-       {50146, 82},     /* PA */
-       {51045, 83},     /* PE */
-       {47515, 84},     /* PH */
-       {44965, 85},     /* PK */
-       {44432, 86},     /* PL */
-       {52296, 87},     /* PR */
-       {48451, 88},     /* PT */
-       {51916, 89},     /* PY */
-       {51968, 90},     /* QA */
-       {44576, 91},     /* RO */
-       {50914, 92},     /* RS */
-       {44632, 93},     /* RU */
-       {47897, 94},     /* RW */
-       {13675, 95},     /* SA */
-       {44821, 96},     /* SE */
-       {49272, 97},     /* SG */
-       {45219, 98},     /* SI */
-       {44731, 99},     /* SK */
-       {52102, 100},    /* SV */
-       {50970, 101},    /* SY */
-       {44868, 102},    /* TH */
-       {45438, 103},    /* TJ */
-       {50364, 104},    /* TN */
-       {44914, 105},    /* TR */
-       {51189, 106},    /* TT */
-       {43655, 107},    /* TW */
-       {45093, 108},    /* UA */
-       {43903, 109},    /* US */
-       {51802, 110},    /* UY */
-       {46348, 111},    /* UZ */
-       {50674, 112},    /* VE */
-       {45544, 113},    /* VN */
-       {50792, 114},    /* YE */
-       {45822, 115},    /* ZA */
-       {51412, 116}     /* ZW */
+       {52219, 0},      /* AE */
+       {47928, 1},      /* AF */
+       {45244, 2},      /* AL */
+       {1929, 3},       /* AM */
+       {51710, 4},      /* AR */
+       {49407, 5},      /* AT */
+       {49440, 6},      /* AU */
+       {46142, 7},      /* AZ */
+       {50005, 8},      /* BA */
+       {49210, 9},      /* BD */
+       {48702, 10},     /* BE */
+       {44028, 11},     /* BG */
+       {52331, 12},     /* BH */
+       {52511, 13},     /* BO */
+       {44948, 14},     /* BR */
+       {45630, 15},     /* BY */
+       {51467, 16},     /* BZ */
+       {49533, 17},     /* CA */
+       {13778, 18},     /* CH */
+       {52112, 19},     /* CL */
+       {13857, 20},     /* CN */
+       {51311, 21},     /* CO */
+       {50307, 22},     /* CR */
+       {44191, 23},     /* CZ */
+       {44281, 24},     /* DE */
+       {44233, 25},     /* DK */
+       {50939, 26},     /* DO */
+       {50067, 27},     /* DZ */
+       {51929, 28},     /* EC */
+       {45728, 29},     /* EE */
+       {49262, 30},     /* EG */
+       {44071, 31},     /* ES */
+       {47807, 32},     /* ET */
+       {44411, 33},     /* FI */
+       {46559, 34},     /* FO */
+       {44455, 35},     /* FR */
+       {47464, 36},     /* GB */
+       {46505, 37},     /* GE */
+       {48206, 38},     /* GL */
+       {44337, 39},     /* GR */
+       {49873, 40},     /* GT */
+       {49355, 41},     /* HK */
+       {52651, 42},     /* HN */
+       {45147, 43},     /* HR */
+       {44556, 44},     /* HU */
+       {45493, 45},     /* ID */
+       {49055, 46},     /* IE */
+       {44504, 47},     /* IL */
+       {46613, 48},     /* IN */
+       {48496, 49},     /* IQ */
+       {45953, 50},     /* IR */
+       {44605, 51},     /* IS */
+       {44648, 52},     /* IT */
+       {51087, 53},     /* JM */
+       {51613, 54},     /* JO */
+       {44693, 55},     /* JP */
+       {46749, 56},     /* KE */
+       {47530, 57},     /* KH */
+       {44748, 58},     /* KR */
+       {52034, 59},     /* KW */
+       {47572, 60},     /* LA */
+       {51847, 61},     /* LB */
+       {50216, 62},     /* LI */
+       {47748, 63},     /* LK */
+       {45826, 64},     /* LT */
+       {49792, 65},     /* LU */
+       {45774, 66},     /* LV */
+       {49675, 67},     /* LY */
+       {50536, 68},     /* MA */
+       {50661, 69},     /* MC */
+       {51789, 70},     /* ME */
+       {46258, 71},     /* MK */
+       {50156, 72},     /* MO */
+       {46652, 73},     /* MT */
+       {48651, 74},     /* MX */
+       {48036, 75},     /* NG */
+       {52705, 76},     /* NI */
+       {44800, 77},     /* NL */
+       {44858, 78},     /* NO */
+       {47868, 79},     /* NP */
+       {50251, 80},     /* NZ */
+       {51056, 81},     /* OM */
+       {50613, 82},     /* PA */
+       {51512, 83},     /* PE */
+       {47982, 84},     /* PH */
+       {45432, 85},     /* PK */
+       {44899, 86},     /* PL */
+       {52763, 87},     /* PR */
+       {48918, 88},     /* PT */
+       {52383, 89},     /* PY */
+       {52435, 90},     /* QA */
+       {45043, 91},     /* RO */
+       {51381, 92},     /* RS */
+       {45099, 93},     /* RU */
+       {48364, 94},     /* RW */
+       {13775, 95},     /* SA */
+       {45288, 96},     /* SE */
+       {49739, 97},     /* SG */
+       {45686, 98},     /* SI */
+       {45198, 99},     /* SK */
+       {52569, 100},    /* SV */
+       {51437, 101},    /* SY */
+       {45335, 102},    /* TH */
+       {45905, 103},    /* TJ */
+       {50831, 104},    /* TN */
+       {45381, 105},    /* TR */
+       {51656, 106},    /* TT */
+       {44122, 107},    /* TW */
+       {45560, 108},    /* UA */
+       {44370, 109},    /* US */
+       {52269, 110},    /* UY */
+       {46815, 111},    /* UZ */
+       {51141, 112},    /* VE */
+       {46011, 113},    /* VN */
+       {51259, 114},    /* YE */
+       {46289, 115},    /* ZA */
+       {51879, 116}     /* ZW */
 };
 
 
 static const char locale_strings [] = {
 "\0"
-       "dd/MMMM/yyyy\0"
-       "dd/MM/yy\0"
-       "hh:mm:ss tt\0"
-       "hh:mm tt\0"
-       "MMMM, yyyy\0"
        "dd MMMM\0"
        "\xd9\x85\xd8\xad\xd8\xb1\xd9\x85\0"
        "\xd8\xb5\xd9\x81\xd8\xb1\0"
@@ -1412,15 +1407,15 @@ static const char locale_strings [] = {
        "\xd8\xb0\xd9\x88 \xd8\xa7\xd9\x84\xd8\xad\xd8\xac\xd8\xa9\0"
        "/\0"
        ":\0"
+       "dd/MM/yy\0"
        "dd/MM/yyyy\0"
+       "dd/MMMM/yyyy\0"
        "dddd, dd MMMM, yyyy\0"
+       "hh:mm tt\0"
        "HH:mm\0"
+       "hh:mm:ss tt\0"
        "HH:mm:ss\0"
-       "dd MMMM yyyy '\xd0\xb3.'\0"
-       "d.M.yyyy '\xd0\xb3.'\0"
-       "H:mm:ss\0"
-       "H:mm\0"
-       "MMMM yyyy '\xd0\xb3.'\0"
+       "MMMM, yyyy\0"
        "d MMMM\0"
        "\xd0\xbf\xd1\x80.\xd0\xbe\xd0\xb1.\0"
        "\xd1\x81\xd0\xbb.\xd0\xbe\xd0\xb1.\0"
@@ -1464,18 +1459,17 @@ static const char locale_strings [] = {
        "\xd0\xbd\xd0\xbe\xd0\xb5\xd0\xbc.\0"
        "\xd0\xb4\xd0\xb5\xd0\xba.\0"
        ".\0"
+       "d.M.yyyy '\xd0\xb3.'\0"
        "dd.M.yyyy '\xd0\xb3.'\0"
        "d.MM.yyyy '\xd0\xb3.'\0"
        "dd.MM.yyyy '\xd0\xb3.'\0"
+       "dd MMMM yyyy '\xd0\xb3.'\0"
        "d MMMM yyyy '\xd0\xb3.'\0"
        "dddd, dd MMMM yyyy '\xd0\xb3.'\0"
        "dddd, d MMMM yyyy '\xd0\xb3.'\0"
-       "HH:mm '\xd1\x87.'\0"
-       "H:mm '\xd1\x87.'\0"
-       "HH:mm:ss '\xd1\x87.'\0"
-       "H:mm:ss '\xd1\x87.'\0"
-       "dddd, d MMMM' de 'yyyy\0"
-       "MMMM' de 'yyyy\0"
+       "H:mm\0"
+       "H:mm:ss\0"
+       "MMMM yyyy '\xd0\xb3.'\0"
        "a. m.\0"
        "p. m.\0"
        "diumenge\0"
@@ -1520,19 +1514,23 @@ static const char locale_strings [] = {
        "oct.\0"
        "nov.\0"
        "des.\0"
-       "yyyy-MM-dd\0"
        "d/MM/yy\0"
-       "d/M/yy\0"
+       "dd-MM-yyyy\0"
        "dd-MM-yy\0"
+       "d-MM-yy\0"
+       "dd.MM.yyyy\0"
        "dd.MM.yy\0"
-       "dddd, d' / 'MMMM' / 'yyyy\0"
-       "d'/'MMMM'/'yyyy\0"
-       "d' 'MMMM' 'yyyy\0"
-       "HH'H'mm'\\''\0"
-       "HH'H'mm'\\''ss'\\'\\''\0"
-       "yyyy'\xe5\xb9\xb4'M'\xe6\x9c\x88'd'\xe6\x97\xa5'\0"
-       "yyyy/M/d\0"
-       "yyyy'\xe5\xb9\xb4'M'\xe6\x9c\x88'\0"
+       "d.MM.yy\0"
+       "dddd, d MMMM' de 'yyyy\0"
+       "dddd, d MMMM yyyy\0"
+       "d MMMM' de 'yyyy\0"
+       "d MMMM yyyy\0"
+       "d'-'MMMM'-'yyyy\0"
+       "ddd, d MMM yyyy\0"
+       "MMMM' de 'yyyy\0"
+       "MMMM yyyy\0"
+       "MMM yyyy\0"
+       "MMM yy\0"
        "M'\xe6\x9c\x88'd'\xe6\x97\xa5'\0"
        "\xe4\xb8\x8a\xe5\x8d\x88\0"
        "\xe4\xb8\x8b\xe5\x8d\x88\0"
@@ -1581,23 +1579,27 @@ static const char locale_strings [] = {
        "10\xe6\x9c\x88\0"
        "11\xe6\x9c\x88\0"
        "12\xe6\x9c\x88\0"
+       "yyyy/M/d\0"
        "yyyy-M-d\0"
        "yyyy.M.d\0"
        "yyyy/MM/dd\0"
+       "yyyy-MM-dd\0"
        "yyyy.MM.dd\0"
-       "yy-M-d\0"
        "yy/M/d\0"
+       "yy-M-d\0"
        "yy.M.d\0"
        "yy/MM/dd\0"
-       "yyyy'\xe5\xb9\xb4'M'\xe6\x9c\x88'd'\xe6\x97\xa5',dddd\0"
-       "dddd,yyyy'\xe5\xb9\xb4'M'\xe6\x9c\x88'd'\xe6\x97\xa5'\0"
+       "yyyy'\xe5\xb9\xb4'M'\xe6\x9c\x88'd'\xe6\x97\xa5'\0"
+       "yyyy'\xe5\xb9\xb4'M'\xe6\x9c\x88'd'\xe6\x97\xa5', dddd\0"
+       "dddd, yyyy'\xe5\xb9\xb4'M'\xe6\x9c\x88'd'\xe6\x97\xa5'\0"
+       "yyyy\xe5\xb9\xb4MMMd\xe6\x97\xa5\0"
+       "yyyy\xe5\xb9\xb4MMMd\xe6\x97\xa5, dddd\0"
        "tt h:mm\0"
        "tt hh:mm\0"
        "tt h:mm:ss\0"
        "tt hh:mm:ss\0"
-       "d. MMMM yyyy\0"
-       "d. M. yyyy\0"
-       "MMMM yyyy\0"
+       "yyyy'\xe5\xb9\xb4'M'\xe6\x9c\x88'\0"
+       "yyyy.M\0"
        "d. MMMM\0"
        "AM\0"
        "PM\0"
@@ -1656,13 +1658,15 @@ static const char locale_strings [] = {
        "lis\0"
        "pro\0"
        ". \0"
-       "d.M.yyyy\0"
+       "d. M. yyyy\0"
+       "d/M/yyyy\0"
+       "d/M/yy\0"
        "d-M-yy\0"
+       "d. MMMM yyyy\0"
        "h.mm tt\0"
        "H.mm\0"
        "h.mm.ss tt\0"
        "H.mm.ss\0"
-       "dd-MM-yyyy\0"
        "s\xc3\xb8ndag\0"
        "mandag\0"
        "tirsdag\0"
@@ -1707,9 +1711,6 @@ static const char locale_strings [] = {
        "dec\0"
        "-\0"
        "yyyy MM dd\0"
-       "dd. MMMM yyyy\0"
-       "dddd, d. MMMM yyyy\0"
-       "dd.MM.yyyy\0"
        "vorm.\0"
        "nachm.\0"
        "Sonntag\0"
@@ -1750,18 +1751,11 @@ static const char locale_strings [] = {
        "Okt\0"
        "Nov\0"
        "Dez\0"
-       "dd.MMM.yyyy\0"
-       "d.MM.yy\0"
-       "d.M.yy\0"
-       "d. MMM yyyy\0"
-       "H.mm' Uhr'\0"
-       "H:mm:ss' Uhr'\0"
+       "dd. MMM. yyyy\0"
+       "dddd, d. MMMM yyyy\0"
+       "d. MMM. yyyy\0"
+       "HH:mm' Uhr'\0"
        "HH:mm:ss' Uhr'\0"
-       "HHmmss\0"
-       "dddd, d MMMM yyyy\0"
-       "d/M/yyyy\0"
-       "h:mm:ss tt\0"
-       "h:mm tt\0"
        "\xcf\x80.\xce\xbc.\0"
        "\xce\xbc.\xce\xbc.\0"
        "\xce\x9a\xcf\x85\xcf\x81\xce\xb9\xce\xb1\xce\xba\xce\xae\0"
@@ -1820,9 +1814,8 @@ static const char locale_strings [] = {
        "\xce\x9d\xce\xbf\xce\xad\0"
        "\xce\x94\xce\xb5\xce\xba\0"
        "dd/MMM/yyyy\0"
-       "d MMMM yyyy\0"
-       "dddd, MMMM d, yyyy\0"
-       "M/d/yyyy\0"
+       "h:mm tt\0"
+       "h:mm:ss tt\0"
        "MMMM d\0"
        "Sunday\0"
        "Monday\0"
@@ -1850,14 +1843,15 @@ static const char locale_strings [] = {
        "Mar\0"
        "Oct\0"
        "Dec\0"
+       "M/d/yyyy\0"
        "M/d/yy\0"
        "MM/dd/yy\0"
        "MM/dd/yyyy\0"
        "dd-MMM-yy\0"
-       "dddd, MMMM dd, yyyy\0"
-       "MMMM dd, yyyy\0"
-       "dd MMMM, yyyy\0"
-       "dddd, d' de 'MMMM' de 'yyyy\0"
+       "dddd, MMMM d, yyyy\0"
+       "MMMM d, yyyy\0"
+       "dddd, d MMMM, yyyy\0"
+       "d MMMM, yyyy\0"
        "d' de 'MMMM\0"
        "domingo\0"
        "lunes\0"
@@ -1908,9 +1902,13 @@ static const char locale_strings [] = {
        "Oct.\0"
        "Nov.\0"
        "Dic.\0"
-       "dddd, dd' de 'MMMM' de 'yyyy\0"
+       "dddd, d' de 'MMMM' de 'yyyy\0"
        "dddd d' de 'MMMM' de 'yyyy\0"
        "d' de 'MMMM' de 'yyyy\0"
+       "HH.mm\0"
+       "HH'H'mm\0"
+       "HH.mm.ss\0"
+       "HH'H'mm.ss\0"
        "d'.' MMMM\0"
        "ap.\0"
        "ip.\0"
@@ -1965,9 +1963,9 @@ static const char locale_strings [] = {
        "loka\0"
        "marras\0"
        "joulu\0"
-       "d. MMMM'ta 'yyyy\0"
-       "dd. MMMM'ta 'yyyy\0"
-       "dddd d MMMM yyyy\0"
+       "d.M.yyyy\0"
+       "d.M.yy\0"
+       "dd. MMMM yyyy\0"
        "dimanche\0"
        "lundi\0"
        "mardi\0"
@@ -1999,11 +1997,10 @@ static const char locale_strings [] = {
        "juil.\0"
        "sept.\0"
        "d\xc3\xa9\x63.\0"
+       "dddd d MMMM yyyy\0"
        "d MMM yy\0"
-       "HH.mm\0"
        "HH' h 'mm\0"
        "HH'h'mm\0"
-       "dddd dd MMMM yyyy\0"
        "\xd7\x9c\xd7\xa4\xd7\xa0\xd7\x94\xd7\xb4\xd7\xa6\0"
        "\xd7\x90\xd7\x97\xd7\x94\xd7\xb4\xd7\xa6\0"
        "\xd7\x99\xd7\x95\xd7\x9d \xd7\xa8\xd7\x90\xd7\xa9\xd7\x95\xd7\x9f\0"
@@ -2053,11 +2050,9 @@ static const char locale_strings [] = {
        "dd-MMMM-yyyy\0"
        "dd '\xd7\x91'MMMM yyyy\0"
        "dd MMM yy\0"
+       "dddd dd MMMM yyyy\0"
        "dddd dd '\xd7\x91'MMMM yyyy\0"
        "ddd dd '\xd7\x91'MMMM yyyy\0"
-       "yyyy. MMMM d.\0"
-       "yyyy.MM.dd.\0"
-       "yyyy. MMMM\0"
        "MMMM d.\0"
        "de.\0"
        "du.\0"
@@ -2094,8 +2089,11 @@ static const char locale_strings [] = {
        "szept.\0"
        "okt.\0"
        "dec.\0"
+       "yyyy.MM.dd.\0"
        "yyyy. MM. dd.\0"
        "yy-MM-dd\0"
+       "yyyy. MMMM d.\0"
+       "yyyy. MMMM\0"
        "f.h.\0"
        "e.h.\0"
        "sunnudagur\0"
@@ -2129,6 +2127,7 @@ static const char locale_strings [] = {
        "d. M. yyyy.\0"
        "d. M. '\\''yy.\0"
        "yy MM dd\0"
+       "dddd d. MMMM  yyyy\0"
        "domenica\0"
        "luned\xc3\xac\0"
        "marted\xc3\xac\0"
@@ -2172,7 +2171,6 @@ static const char locale_strings [] = {
        "dic\0"
        "dd.M.yy\0"
        "d-MMM-yy\0"
-       "HH.mm.ss\0"
        "\xe5\x8d\x88\xe5\x89\x8d\0"
        "\xe5\x8d\x88\xe5\xbe\x8c\0"
        "\xe6\x97\xa5\xe6\x9b\x9c\xe6\x97\xa5\0"
@@ -2200,14 +2198,13 @@ static const char locale_strings [] = {
        "10\0"
        "11\0"
        "12\0"
-       "yy/MM/dd' ('ddd')'\0"
-       "yy/M/d' ('ddd')'\0"
-       "yyyy/MM/dd' ('ddd')'\0"
        "yyyy'\xe5\xb9\xb4'MM'\xe6\x9c\x88'dd'\xe6\x97\xa5'\0"
-       "yyyy'\xe5\xb9\xb4'M'\xe6\x9c\x88'd'\xe6\x97\xa5' dddd\0"
-       "yyyy'\xe5\xb9\xb4'MM'\xe6\x9c\x88'dd'\xe6\x97\xa5' dddd\0"
-       "yyyy'\xeb\x85\x84' M'\xec\x9b\x94' d'\xec\x9d\xbc' dddd\0"
-       "yyyy'\xeb\x85\x84' M'\xec\x9b\x94'\0"
+       "yyyy'\xe5\xb9\xb4'M'\xe6\x9c\x88'd'\xe6\x97\xa5 'dddd\0"
+       "yyyy'\xe5\xb9\xb4'MM'\xe6\x9c\x88'dd'\xe6\x97\xa5 'dddd\0"
+       "yyyy'\xe5\xb9\xb4'MMM'\xe6\x9c\x88'd'\xe6\x97\xa5'\0"
+       "yyyy'\xe5\xb9\xb4'MMM'\xe6\x9c\x88'd'\xe6\x97\xa5 'dddd\0"
+       "yyyy'\xe5\xb9\xb4'MMMMd'\xe6\x97\xa5'\0"
+       "yyyy'\xe5\xb9\xb4'MMMMd'\xe6\x97\xa5 'dddd\0"
        "M'\xec\x9b\x94' d'\xec\x9d\xbc'\0"
        "\xec\x98\xa4\xec\xa0\x84\0"
        "\xec\x98\xa4\xed\x9b\x84\0"
@@ -2237,12 +2234,17 @@ static const char locale_strings [] = {
        "10\xec\x9b\x94\0"
        "11\xec\x9b\x94\0"
        "12\xec\x9b\x94\0"
+       "yyyy'\xeb\x85\x84' M'\xec\x9b\x94' d'\xec\x9d\xbc' dddd\0"
        "yyyy'\xeb\x85\x84' M'\xec\x9b\x94' d'\xec\x9d\xbc'\0"
        "yy'\xeb\x85\x84' M'\xec\x9b\x94' d'\xec\x9d\xbc' dddd\0"
        "yy'\xeb\x85\x84' M'\xec\x9b\x94' d'\xec\x9d\xbc'\0"
        "yyyy'\xeb\x85\x84' MM'\xec\x9b\x94' dd'\xec\x9d\xbc' dddd\0"
        "yyyy'\xeb\x85\x84' MM'\xec\x9b\x94' dd'\xec\x9d\xbc'\0"
-       "d-M-yyyy\0"
+       "yyyy'\xeb\x85\x84 'MMM'\xec\x9b\x94 'd'\xec\x9d\xbc 'dddd\0"
+       "yyyy'\xeb\x85\x84 'MMM'\xec\x9b\x94 'd'\xec\x9d\xbc'\0"
+       "yyyy'\xeb\x85\x84 'MMMM d'\xec\x9d\xbc 'dddd\0"
+       "yyyy'\xeb\x85\x84 'MMMM d'\xec\x9d\xbc'\0"
+       "yyyy'\xeb\x85\x84' M'\xec\x9b\x94'\0"
        "a.m.\0"
        "p.m.\0"
        "zondag\0"
@@ -2265,6 +2267,8 @@ static const char locale_strings [] = {
        "mei\0"
        "augustus\0"
        "mrt\0"
+       "d-M-yyyy\0"
+       "dd.MMM.yyyy\0"
        "HH.mm' uur'\0"
        "HH:mm' uur'\0"
        "HH.mm.ss' uur'\0"
@@ -2277,8 +2281,17 @@ static const char locale_strings [] = {
        "fr.\0"
        "l\xc3\xb8.\0"
        "des\0"
+       "d.MM.yyyy\0"
+       "'kl 'H:mm\0"
+       "'kl 'HH:mm\0"
        "'kl 'HH.mm\0"
+       "'kl 'H.mm\0"
+       "'kl 'HH:mm:ss\0"
+       "'kl 'H:mm:ss\0"
        "'kl 'HH.mm.ss\0"
+       "'kl 'H.mm.ss\0"
+       "MMM. yyyy\0"
+       "MM.yyyy\0"
        "niedziela\0"
        "poniedzia\xc5\x82\x65k\0"
        "wtorek\0"
@@ -2351,7 +2364,6 @@ static const char locale_strings [] = {
        "abr\0"
        "out\0"
        "dez\0"
-       "dddd, 'ils\xe2\x80\x99' d. MMMM, yyyy\0"
        "am\0"
        "sm\0"
        "dumengia\0"
@@ -2379,20 +2391,8 @@ static const char locale_strings [] = {
        "zercl.\0"
        "fan.\0"
        "sett.\0"
-       "dd/M/yy\0"
-       "HH:mm' Ura'\0"
-       "H:mm' Ura'\0"
-       "H' Ura'\0"
-       "HH.mm' h'\0"
-       "H.mm' h'\0"
-       "H' h'\0"
-       "H' Uhr'\0"
-       "HHmm\0"
+       "dddd, 'ils\xe2\x80\x99' d. MMMM, yyyy\0"
        "HH\0"
-       "HH:mm:ss' Ura'\0"
-       "H:mm:ss' Ura'\0"
-       "HH:mm:ss' h'\0"
-       "H:mm:ss' h'\0"
        "duminic\xc4\x83\0"
        "luni\0"
        "mar\xc8\x9bi\0"
@@ -2419,6 +2419,14 @@ static const char locale_strings [] = {
        "ian.\0"
        "iun.\0"
        "iul.\0"
+       "dd'/'MM'/'yyyy\0"
+       "dd'/'MM'/'yy\0"
+       "yyyy'/'MM'/'dd\0"
+       "d MMM yyyy\0"
+       "MMMM yy\0"
+       "MM.yy\0"
+       "MM'/'yyyy\0"
+       "MM'/'yy\0"
        "\xd0\xb4\xd0\xbe \xd0\xbf\xd0\xbe\xd0\xbb\xd1\x83\xd0\xb4\xd0\xbd\xd1\x8f\0"
        "\xd0\xbf\xd0\xbe\xd1\x81\xd0\xbb\xd0\xb5 \xd0\xbf\xd0\xbe\xd0\xbb\xd1\x83\xd0\xb4\xd0\xbd\xd1\x8f\0"
        "\xd0\xb2\xd0\xbe\xd1\x81\xd0\xba\xd1\x80\xd0\xb5\xd1\x81\xd0\xb5\xd0\xbd\xd1\x8c\xd0\xb5\0"
@@ -2470,8 +2478,6 @@ static const char locale_strings [] = {
        "\xd0\x9e\xd0\xba\xd1\x82.\0"
        "\xd0\x9d\xd0\xbe\xd1\x8f\xd0\xb1.\0"
        "\xd0\x94\xd0\xb5\xd0\xba.\0"
-       "d. MMMM yyyy.\0"
-       "d.M.yyyy.\0"
        "nedjelja\0"
        "ponedjeljak\0"
        "utorak\0"
@@ -2521,11 +2527,13 @@ static const char locale_strings [] = {
        "kol\0"
        "ruj\0"
        "stu\0"
+       "d.M.yyyy.\0"
        "d.M.yy.\0"
        "dd.MM.yyyy.\0"
        "d. M. yy.\0"
        "dd.MM.yy.\0"
        "dd. MM. yy.\0"
+       "d. MMMM yyyy.\0"
        "dd. MMMM yyyy.\0"
        "dddd, d. MMMM yyyy.\0"
        "nede\xc4\xbe\x61\0"
@@ -2554,7 +2562,9 @@ static const char locale_strings [] = {
        "okt\xc3\xb3\x62ra\0"
        "novembra\0"
        "decembra\0"
-       "d. M. yy\0"
+       "dd. MM. yyyy\0"
+       "d/MM/yyyy\0"
+       "dd. MM. yy\0"
        "paradite\0"
        "pasdite\0"
        "e diel\0"
@@ -2590,9 +2600,6 @@ static const char locale_strings [] = {
        "Tet\0"
        "N\xc3\xabn\0"
        "Dhj\0"
-       "h:mm.tt\0"
-       "h:mm:ss.tt\0"
-       "'den 'd MMMM yyyy\0"
        "'den 'd MMMM\0"
        "FM\0"
        "EM\0"
@@ -2612,14 +2619,11 @@ static const char locale_strings [] = {
        "Mars\0"
        "Augusti\0"
        "augusti\0"
+       "'den 'd MMMM yyyy\0"
        "dddd' den 'd MMMM yyyy\0"
-       "'kl 'H:mm\0"
-       "'kl 'H:mm:ss\0"
-       "d MMM yyyy\0"
        "dd MMM yyyy\0"
        "ddd d MMMM yyyy\0"
        "'\xe0\xb8\xa7\xe0\xb8\xb1\xe0\xb8\x99'dddd'\xe0\xb8\x97\xe0\xb8\xb5\xe0\xb9\x88' d MMMM gg yyyy\0"
-       "d MMMM yyyy dddd\0"
        "\xc3\x96\xc3\x96\0"
        "\xc3\x96S\0"
        "Pazar\0"
@@ -2659,6 +2663,7 @@ static const char locale_strings [] = {
        "Eki\0"
        "Kas\0"
        "Ara\0"
+       "d MMMM yyyy dddd\0"
        "dd MMMM yyyy dddd\0"
        "\xd9\x82\xd8\xa8\xd9\x84 \xd8\xaf\xd9\x88\xd9\xbe\xdb\x81\xd8\xb1\0"
        "\xd8\xa8\xd8\xb9\xd8\xaf \xd8\xaf\xd9\x88\xd9\xbe\xdb\x81\xd8\xb1\0"
@@ -2681,6 +2686,7 @@ static const char locale_strings [] = {
        "\xd8\xa7\xda\xa9\xd8\xaa\xd9\x88\xd8\xa8\xd8\xb1\0"
        "\xd9\x86\xd9\x88\xd9\x85\xd8\xa8\xd8\xb1\0"
        "\xd8\xaf\xd8\xb3\xd9\x85\xd8\xa8\xd8\xb1\0"
+       "dd MMMM, yyyy\0"
        "Minggu\0"
        "Senin\0"
        "Selasa\0"
@@ -2702,8 +2708,6 @@ static const char locale_strings [] = {
        "Desember\0"
        "Agt\0"
        "Des\0"
-       "d MMMM yyyy' \xd1\x80.'\0"
-       "MMMM yyyy' \xd1\x80.'\0"
        "\xd0\xb4\xd0\xbf\0"
        "\xd0\xbf\xd0\xbf\0"
        "\xd0\xbd\xd0\xb5\xd0\xb4\xd1\x96\xd0\xbb\xd1\x8f\0"
@@ -2751,6 +2755,8 @@ static const char locale_strings [] = {
        "\xd0\x96\xd0\xbe\xd0\xb2\0"
        "\xd0\x9b\xd0\xb8\xd1\x81\0"
        "\xd0\x93\xd1\x80\xd1\x83\0"
+       "d MMMM yyyy' \xd1\x80.'\0"
+       "MMMM yyyy' \xd1\x80.'\0"
        "\xd1\x80\xd0\xb0\xd0\xbd\xd1\x96\xd1\x86\xd1\x8b\0"
        "\xd0\xb2\xd0\xb5\xd1\x87\xd0\xb0\xd1\x80\xd0\xb0\0"
        "\xd0\xbd\xd1\x8f\xd0\xb4\xd0\xb7\xd0\xb5\xd0\xbb\xd1\x8f\0"
@@ -2810,8 +2816,7 @@ static const char locale_strings [] = {
        "julij\0"
        "avgust\0"
        "avg\0"
-       "dd. MM. yy\0"
-       "d.MM.yyyy\0"
+       "d.  M. yy\0"
        "dd. MMMM\0"
        "e.k.\0"
        "p.k.\0"
@@ -2834,10 +2839,6 @@ static const char locale_strings [] = {
        "veebr\0"
        "sept\0"
        "dets\0"
-       "d. MMMM yyyy'. a.'\0"
-       "dd. MMMM yyyy'. a.'\0"
-       "dddd, yyyy'. gada 'd. MMMM\0"
-       "yyyy'. gada 'MMMM\0"
        "priek\xc5\xa1pusdien\xc4\x81\0"
        "p\xc4\x93\x63pusdien\xc4\x81\0"
        "sv\xc4\x93tdiena\0"
@@ -2885,9 +2886,9 @@ static const char locale_strings [] = {
        "Aug.\0"
        "Okt.\0"
        "Dec.\0"
-       "yy.MM.dd.\0"
-       "yyyy 'm.' MMMM d 'd.'\0"
-       "yyyy 'm.' MMMM\0"
+       "dd-MM-yyyy.\0"
+       "dddd, yyyy'. gada 'd. MMMM\0"
+       "yyyy'. gada 'MMMM\0"
        "MMMM d 'd.'\0"
        "pr.p.\0"
        "sekmadienis\0"
@@ -2928,7 +2929,8 @@ static const char locale_strings [] = {
        "spal.\0"
        "lapkr.\0"
        "gruod.\0"
-       "d MMMM yyyy' \xd1\x81.'\0"
+       "yyyy 'm.' MMMM d 'd.'\0"
+       "yyyy 'm.' MMMM\0"
        "\xd0\xbf\xd0\xb5. \xd1\x87\xd0\xbe.\0"
        "\xd0\xbf\xd0\xb0. \xd1\x87\xd0\xbe.\0"
        "\xd0\xaf\xd0\xba\xd1\x88\xd0\xb0\xd0\xbd\xd0\xb1\xd0\xb5\0"
@@ -2963,7 +2965,8 @@ static const char locale_strings [] = {
        "\xd0\x9e\xd0\xba\xd1\x82\0"
        "\xd0\x9d\xd0\xbe\xd1\x8f\0"
        "\xd0\x94\xd0\xb5\xd0\xba\0"
-       "dddd, dd MMMM yyyy\0"
+       "d MMMM yyyy' \xd1\x81.'\0"
+       "dd MMMM yyyy' \xd1\x81.'\0"
        "\xd9\x82\xd8\xa8\xd9\x84\xe2\x80\x8c\xd8\xa7\xd8\xb2\xd8\xb8\xd9\x87\xd8\xb1\0"
        "\xd8\xa8\xd8\xb9\xd8\xaf\xd8\xa7\xd8\xb2\xd8\xb8\xd9\x87\xd8\xb1\0"
        "\xdb\x8c\xda\xa9\xd8\xb4\xd9\x86\xd8\xa8\xd9\x87\0"
@@ -2996,6 +2999,7 @@ static const char locale_strings [] = {
        "\xd9\x81\xd9\x88\xd8\xb1\xdb\x8c\xd9\x87\xd9\x94\0"
        "\xd9\x85\xd9\x87\xd9\x94\0"
        "\xda\x98\xd9\x88\xd8\xa6\xdb\x8c\xd9\x87\xd9\x94\0"
+       "dddd, dd MMMM yyyy\0"
        "SA\0"
        "CH\0"
        "Ch\xe1\xbb\xa7 Nh\xe1\xba\xadt\0"
@@ -3054,7 +3058,6 @@ static const char locale_strings [] = {
        "Thg 10\0"
        "Thg 11\0"
        "Thg 12\0"
-       "d MMMM, yyyy\0"
        "\xd5\xaf\xd5\xa5\xd5\xbd\xd6\x85\xd6\x80\xd5\xab\xd6\x81 \xd5\xa1\xd5\xbc\xd5\xa1\xd5\xbb\0"
        "\xd5\xaf\xd5\xa5\xd5\xbd\xd6\x85\xd6\x80\xd5\xab\xd6\x81 \xd5\xb0\xd5\xa5\xd5\xbf\xd5\xb8\0"
        "\xd5\xaf\xd5\xab\xd6\x80\xd5\xa1\xd5\xaf\xd5\xab\0"
@@ -3113,13 +3116,11 @@ static const char locale_strings [] = {
        "\xd5\xb0\xd5\xaf\xd5\xbf\0"
        "\xd5\xb6\xd5\xb5\xd5\xb4\0"
        "\xd5\xa4\xd5\xaf\xd5\xbf\0"
-       "d/MM/yyyy\0"
        "d/MMM/yyyy\0"
        "d-MMM-yyyy\0"
        "dd-MMM-yyyy\0"
        "ddd, d-MMMM-yyyy\0"
        "ddd, dd-MMMM-yyyy\0"
-       "dd MMMM yyyy'-c\xc3\xbc il'\0"
        "bazar\0"
        "bazar ert\xc9\x99si\0"
        "\xc3\xa7\xc9\x99r\xc5\x9f\xc9\x99nb\xc9\x99 ax\xc5\x9f\x61m\xc4\xb1\0"
@@ -3162,8 +3163,7 @@ static const char locale_strings [] = {
        "sen\0"
        "noy\0"
        "dek\0"
-       "dddd, yyyy'(e)ko' MMMM'ren' d'a'\0"
-       "yyyy'(e)ko' MMMM\0"
+       "dd MMMM yyyy'-c\xc3\xbc il'\0"
        "MMMM'ren' d'a'\0"
        "igandea\0"
        "astelehena\0"
@@ -3215,7 +3215,8 @@ static const char locale_strings [] = {
        "urr.\0"
        "aza.\0"
        "abe.\0"
-       "dddd, yyyy.'eko' MMMM'k 'd\0"
+       "dddd, yyyy'(e)ko' MMMM'ren' d'a'\0"
+       "yyyy'(e)ko' MMMM\0"
        "\xd0\xbf\xd1\x80\xd0\xb5\xd1\x82\xd0\xbf\xd0\xbb\xd0\xb0\xd0\xb4\xd0\xbd\xd0\xb5\0"
        "\xd0\xbf\xd0\xbe\xd0\xbf\xd0\xbb\xd0\xb0\xd0\xb4\xd0\xbd\xd0\xb5\0"
        "\xd0\xbd\xd0\xb5\xd0\xb4\xd0\xb5\xd0\xbb\xd0\xb0\0"
@@ -3238,6 +3239,7 @@ static const char locale_strings [] = {
        "\xd0\xbc\xd0\xb0\xd1\x80.\0"
        "\xd1\x98\xd1\x83\xd0\xbd.\0"
        "\xd1\x98\xd1\x83\xd0\xbb.\0"
+       "d. M. yyyy '\xd0\xb3.'\0"
        "Tshipi\0"
        "Mosopulogo\0"
        "Labobedi\0"
@@ -3348,7 +3350,6 @@ static const char locale_strings [] = {
        "Julie\0"
        "Augustus\0"
        "yyyy/MMM/dd\0"
-       "dddd, d MMMM, yyyy '\xe1\x83\xac\xe1\x83\x94\xe1\x83\x9a\xe1\x83\x98'\0"
        "\xe1\x83\x99\xe1\x83\x95\xe1\x83\x98\xe1\x83\xa0\xe1\x83\x90\0"
        "\xe1\x83\x9d\xe1\x83\xa0\xe1\x83\xa8\xe1\x83\x90\xe1\x83\x91\xe1\x83\x90\xe1\x83\x97\xe1\x83\x98\0"
        "\xe1\x83\xa1\xe1\x83\x90\xe1\x83\x9b\xe1\x83\xa8\xe1\x83\x90\xe1\x83\x91\xe1\x83\x90\xe1\x83\x97\xe1\x83\x98\0"
@@ -3393,7 +3394,10 @@ static const char locale_strings [] = {
        "\xe1\x83\x9d\xe1\x83\xa5\xe1\x83\xa2\0"
        "\xe1\x83\x9c\xe1\x83\x9d\xe1\x83\x94\0"
        "\xe1\x83\x93\xe1\x83\x94\xe1\x83\x99\0"
-       "yyyy '\xe1\x83\xac\xe1\x83\x9a\xe1\x83\x98\xe1\x83\xa1' dd MM, dddd\0"
+       "dddd, d MMMM, yyyy '\xe1\x83\xac\xe1\x83\x94\xe1\x83\x9a\xe1\x83\x98'\0"
+       "yyyy '\xe1\x83\xac\xe1\x83\x9a\xe1\x83\x98\xe1\x83\xa1' d MMMM, dddd\0"
+       "d MMMM, yyyy '\xe1\x83\xac\xe1\x83\x94\xe1\x83\x9a\xe1\x83\x98', dddd\0"
+       "d MMM. yyyy\0"
        "f.p.\0"
        "s.p.\0"
        "m\xc3\xa1nadagur\0"
@@ -3453,7 +3457,6 @@ static const char locale_strings [] = {
        "\xe0\xa4\x85\xe0\xa4\x95\xe0\xa5\x8d\xe0\xa4\x9f\xe0\xa5\x82\0"
        "\xe0\xa4\xa8\xe0\xa4\xb5\xe0\xa4\x82\0"
        "\xe0\xa4\xa6\xe0\xa4\xbf\xe0\xa4\xb8\xe0\xa4\x82\0"
-       "dddd, d' ta\\' 'MMMM yyyy\0"
        "d' ta\\' 'MMMM\0"
        "QN\0"
        "WN\0"
@@ -3493,8 +3496,8 @@ static const char locale_strings [] = {
        "Ott\0"
        "Di\xc4\x8b\0"
        "ddMMyyyy\0"
+       "dddd, d' ta\\' 'MMMM yyyy\0"
        "d' ta\\' 'MMMM yyyy\0"
-       "dddd, MMMM d'. b. 'yyyy\0"
        "MMMM d'. b.'\0"
        "i.b.\0"
        "e.b.\0"
@@ -3536,6 +3539,7 @@ static const char locale_strings [] = {
        "golg\0"
        "sk\xc3\xa1\x62\0"
        "juov\0"
+       "dddd, MMMM d'. b. 'yyyy\0"
        "MMMM d'. b. 'yyyy\0"
        "D\xc3\xa9 Domhnaigh\0"
        "D\xc3\xa9 Luain\0"
@@ -3587,7 +3591,6 @@ static const char locale_strings [] = {
        "Ogos\0"
        "Disember\0"
        "Ogo\0"
-       "d MMMM yyyy '\xd0\xb6.'\0"
        "\xd1\x82\xd2\xaf\xd1\x81\xd0\xba\xd0\xb5 \xd0\xb4\xd0\xb5\xd0\xb9\xd1\x96\xd0\xbd\0"
        "\xd1\x82\xd2\xaf\xd1\x81\xd1\x82\xd0\xb5\xd0\xbd \xd0\xba\xd0\xb5\xd0\xb9\xd1\x96\xd0\xbd\0"
        "\xd0\xb6\xd0\xb5\xd0\xba\xd1\x81\xd0\xb5\xd0\xbd\xd1\x96\0"
@@ -3631,10 +3634,8 @@ static const char locale_strings [] = {
        "\xd2\x9b\xd0\xb0\xd0\xb7.\0"
        "\xd2\x9b\xd0\xb0\xd1\x80.\0"
        "\xd0\xb6\xd0\xb5\xd0\xbb\xd1\x82.\0"
+       "d MMMM yyyy '\xd0\xb6.'\0"
        "dd MMMM yyyy '\xd0\xb6.'\0"
-       "dd'-'MMMM yyyy'-\xd0\xb6.'\0"
-       "d-MMM yy\0"
-       "MMMM yyyy'-\xd0\xb6.'\0"
        "d'-'MMMM\0"
        "\xd1\x82\xd2\xaf\xd1\x88\xd0\xba\xd3\xa9 \xd1\x87\xd0\xb5\xd0\xb9\xd0\xb8\xd0\xbd\xd0\xba\xd0\xb8\0"
        "\xd1\x82\xd2\xaf\xd1\x88\xd1\x82\xd3\xa9\xd0\xbd \xd0\xba\xd0\xb8\xd0\xb9\xd0\xb8\xd0\xbd\xd0\xba\xd0\xb8\0"
@@ -3661,7 +3662,9 @@ static const char locale_strings [] = {
        "\xd0\xb8\xd1\x8e\xd0\xbb.\0"
        "\xd1\x81\xd0\xb5\xd0\xbd.\0"
        "\xd0\xbd\xd0\xbe\xd1\x8f.\0"
-       "d'-'MMMM yyyy'-\xd0\xb6.'\0"
+       "d-MMM yy\0"
+       "dd'-'MMMM yyyy'-\xd0\xb6.'\0"
+       "MMMM yyyy'-\xd0\xb6.'\0"
        "MMMM dd\0"
        "Jumapili\0"
        "Jumatatu\0"
@@ -3683,7 +3686,8 @@ static const char locale_strings [] = {
        "Oktoba\0"
        "Desemba\0"
        "Ago\0"
-       "yyyy 'yil' d-MMMM\0"
+       "dddd, MMMM dd, yyyy\0"
+       "MMMM dd, yyyy\0"
        "d-MMMM\0"
        "yakshanba\0"
        "dushanba\0"
@@ -3707,7 +3711,7 @@ static const char locale_strings [] = {
        "Avg\0"
        "Noya\0"
        "Dek\0"
-       "dd/MM yyyy\0"
+       "yyyy 'yil' d-MMMM\0"
        "\xe0\xa6\xaa\xe0\xa7\x82\xe0\xa6\xb0\xe0\xa7\x8d\xe0\xa6\xac\xe0\xa6\xbe\xe0\xa6\xb9\xe0\xa7\x8d\xe0\xa6\xa3\0"
        "\xe0\xa6\x85\xe0\xa6\xaa\xe0\xa6\xb0\xe0\xa6\xbe\xe0\xa6\xb9\xe0\xa7\x8d\xe0\xa6\xa3\0"
        "\xe0\xa6\xb0\xe0\xa6\xac\xe0\xa6\xbf\xe0\xa6\xac\xe0\xa6\xbe\xe0\xa6\xb0\0"
@@ -3743,6 +3747,8 @@ static const char locale_strings [] = {
        "\xe0\xa6\x85\xe0\xa6\x95\xe0\xa7\x8d\xe0\xa6\x9f\xe0\xa7\x8b\xe0\xa6\xac\xe0\xa6\xb0\0"
        "\xe0\xa6\xa8\xe0\xa6\xad\xe0\xa7\x87\xe0\xa6\xae\xe0\xa7\x8d\xe0\xa6\xac\xe0\xa6\xb0\0"
        "\xe0\xa6\xa1\xe0\xa6\xbf\xe0\xa6\xb8\xe0\xa7\x87\xe0\xa6\xae\xe0\xa7\x8d\xe0\xa6\xac\xe0\xa6\xb0\0"
+       "dd'-'MM'-'yy\0"
+       "dd'-'MM'-'yyyy\0"
        "tt hh.mm\0"
        "tt h.mm\0"
        "tt hh.mm.ss\0"
@@ -4019,8 +4025,6 @@ static const char locale_strings [] = {
        "\xe0\xb4\x92\xe0\xb4\x95\xe0\xb5\x8d\xe0\xb4\x9f\xe0\xb5\x8b\0"
        "\xe0\xb4\xa8\xe0\xb4\xb5\xe0\xb4\x82\0"
        "\xe0\xb4\xa1\xe0\xb4\xbf\xe0\xb4\xb8\xe0\xb4\x82\0"
-       "yyyy,MMMM dd, dddd\0"
-       "MMMM,yy\0"
        "\xe0\xa6\xaa\xe0\xa7\x82\xe0\xa7\xb0\xe0\xa7\x8d\xe0\xa6\xac\xe0\xa6\xbe\xe0\xa6\xb9\xe0\xa7\x8d\xe0\xa6\xa3\0"
        "\xe0\xa6\x85\xe0\xa6\xaa\xe0\xa7\xb0\xe0\xa6\xbe\xe0\xa6\xb9\xe0\xa7\x8d\xe0\xa6\xa3\0"
        "\xe0\xa6\xa6\xe0\xa7\x87\xe0\xa6\x93\xe0\xa6\xac\xe0\xa6\xbe\xe0\xa7\xb0\0"
@@ -4049,6 +4053,9 @@ static const char locale_strings [] = {
        "\xe0\xa6\x85\xe0\xa6\x95\xe0\xa7\x8d\xe0\xa6\x9f\xe0\xa7\x8b\0"
        "\xe0\xa6\xa8\xe0\xa6\xad\xe0\xa7\x87\0"
        "\xe0\xa6\xa1\xe0\xa6\xbf\xe0\xa6\xb8\xe0\xa7\x87\0"
+       "yyyy,MMMM dd, dddd\0"
+       "MMMM,yy\0"
+       "MMMM,yyyy\0"
        "\xe0\xa4\xae\xe0\xa4\x82\xe0\xa4\x97\xe0\xa4\xb3\xe0\xa4\xb5\xe0\xa4\xbe\xe0\xa4\xb0\0"
        "\xe0\xa4\xae\xe0\xa4\x82\xe0\xa4\x97\xe0\xa4\xb3\0"
        "\xe0\xa4\x9c\xe0\xa4\xbe\xe0\xa4\xa8\xe0\xa5\x87\xe0\xa4\xb5\xe0\xa4\xbe\xe0\xa4\xb0\xe0\xa5\x80\0"
@@ -4069,8 +4076,6 @@ static const char locale_strings [] = {
        "\xe0\xa4\x91\xe0\xa4\x95\xe0\xa5\x8d\xe0\xa4\x9f\xe0\xa5\x8b\0"
        "\xe0\xa4\xa8\xe0\xa5\x8b\xe0\xa4\xb5\xe0\xa5\x8d\xe0\xa4\xb9\xe0\xa5\x87\xe0\xa4\x82\0"
        "\xe0\xa4\xa1\xe0\xa4\xbf\xe0\xa4\xb8\xe0\xa5\x87\xe0\xa4\x82\0"
-       "yyyy '\xd0\xbe\xd0\xbd\xd1\x8b' M'-\xd1\x80 \xd1\x81\xd0\xb0\xd1\x80\xd1\x8b\xd0\xbd' d. dddd '\xd0\xb3\xd0\xb0\xd1\x80\xd0\xb8\xd0\xb3'.\0"
-       "yyyy '\xd0\xbe\xd0\xbd\xd1\x8b' MMMM\0"
        "\xd2\xae\xd3\xa8\0"
        "\xd2\xae\xd0\xa5\0"
        "\xd0\xbd\xd1\x8f\xd0\xbc\0"
@@ -4111,10 +4116,9 @@ static const char locale_strings [] = {
        "10-\xd1\x80 \xd1\x81\xd0\xb0\xd1\x80\0"
        "11-\xd1\x80 \xd1\x81\xd0\xb0\xd1\x80\0"
        "12-\xd1\x80 \xd1\x81\xd0\xb0\xd1\x80\0"
-       "yy.MM.dd\0"
-       "yyyy '\xd0\xbe\xd0\xbd\xd1\x8b' MMMM d\0"
-       "yyyy'\xe0\xbd\xa3\xe0\xbd\xbc\xe0\xbd\xa0\xe0\xbd\xb2\xe0\xbc\x8b\xe0\xbd\x9f\xe0\xbe\xb3' M'\xe0\xbd\x9a\xe0\xbd\xba\xe0\xbd\xa6' d\0"
-       "yyyy'\xe0\xbd\xa3\xe0\xbd\xbc\xe0\xbd\xa0\xe0\xbd\xb2\xe0\xbc\x8b\xe0\xbd\x9f\xe0\xbe\xb3\xe0\xbc\x8b' M\0"
+       "yyyy '\xd0\xbe\xd0\xbd\xd1\x8b' M'-\xd1\x80 \xd1\x81\xd0\xb0\xd1\x80\xd1\x8b\xd0\xbd' d. dddd '\xd0\xb3\xd0\xb0\xd1\x80\xd0\xb8\xd0\xb3'.\0"
+       "yyyy \xd0\xbe\xd0\xbd\xd1\x8b MMM d. dddd \xd0\xb3\xd0\xb0\xd1\x80\xd0\xb8\xd0\xb3.\0"
+       "yyyy '\xd0\xbe\xd0\xbd\xd1\x8b' MMMM\0"
        "\xe0\xbd\x9f\xe0\xbe\xb3\xe0\xbc\x8bM\xe0\xbd\x9a\xe0\xbd\xba\xe0\xbd\xa6\xe0\xbc\x8b\x64\0"
        "\xe0\xbd\xa6\xe0\xbe\x94\xe0\xbc\x8b\xe0\xbd\x91\xe0\xbe\xb2\xe0\xbd\xbc\xe0\xbc\x8b\0"
        "\xe0\xbd\x95\xe0\xbe\xb1\xe0\xbd\xb2\xe0\xbc\x8b\xe0\xbd\x91\xe0\xbe\xb2\xe0\xbd\xbc\xe0\xbc\x8b\0"
@@ -4163,7 +4167,11 @@ static const char locale_strings [] = {
        "\xe0\xbd\x9f\xe0\xbe\xb3\xe0\xbc\x8b\xe0\xbc\xa1\xe0\xbc\xa0\0"
        "\xe0\xbd\x9f\xe0\xbe\xb3\xe0\xbc\x8b\xe0\xbc\xa1\xe0\xbc\xa1\0"
        "\xe0\xbd\x9f\xe0\xbe\xb3\xe0\xbc\x8b\xe0\xbc\xa1\xe0\xbc\xa2\0"
+       "yyyy'\xe0\xbd\xa3\xe0\xbd\xbc\xe0\xbd\xa0\xe0\xbd\xb2\xe0\xbc\x8b\xe0\xbd\x9f\xe0\xbe\xb3' M'\xe0\xbd\x9a\xe0\xbd\xba\xe0\xbd\xa6' d\0"
        "yyyy'\xe0\xbd\xa3\xe0\xbd\xbc\xe0\xbd\xa0\xe0\xbd\xb2\xe0\xbc\x8b\xe0\xbd\x9f\xe0\xbe\xb3' M'\xe0\xbd\x9a\xe0\xbd\xba\xe0\xbd\xa6' d dddd\0"
+       "yyyy\xe0\xbd\xa3\xe0\xbd\xbc\xe0\xbd\xa0\xe0\xbd\xb2\xe0\xbc\x8b\xe0\xbd\x9f\xe0\xbe\xb3 MMM d\0"
+       "yyyy\xe0\xbd\xa3\xe0\xbd\xbc\xe0\xbd\xa0\xe0\xbd\xb2\xe0\xbc\x8b\xe0\xbd\x9f\xe0\xbe\xb3 MMM d dddd\0"
+       "yyyy'\xe0\xbd\xa3\xe0\xbd\xbc\xe0\xbd\xa0\xe0\xbd\xb2\xe0\xbc\x8b\xe0\xbd\x9f\xe0\xbe\xb3\xe0\xbc\x8b' M\0"
        "Dydd Sul\0"
        "Dydd Llun\0"
        "Dydd Mawrth\0"
@@ -4198,7 +4206,6 @@ static const char locale_strings [] = {
        "Hyd\0"
        "Tach\0"
        "Rhag\0"
-       "'\xe1\x9e\x81\xe1\x9f\x82' MM '\xe1\x9e\x86\xe1\x9f\x92\xe1\x9e\x93\xe1\x9e\xb6\xe1\x9f\x86' yyyy\0"
        "\xe1\x9e\x96\xe1\x9f\x92\xe1\x9e\x9a\xe1\x9e\xb9\xe1\x9e\x80\0"
        "\xe1\x9e\x9b\xe1\x9f\x92\xe1\x9e\x84\xe1\x9e\xb6\xe1\x9e\x85\0"
        "\xe1\x9e\xa2\xe1\x9e\xb6\xe1\x9e\x91\xe1\x9e\xb7\xe1\x9e\x8f\xe1\x9f\x92\xe1\x9e\x99\0"
@@ -4220,7 +4227,7 @@ static const char locale_strings [] = {
        "\xe1\x9e\x8f\xe1\x9e\xbb\xe1\x9e\x9b\xe1\x9e\xb6\0"
        "\xe1\x9e\x9c\xe1\x9e\xb7\xe1\x9e\x85\xe1\x9f\x92\xe1\x9e\x86\xe1\x9e\xb7\xe1\x9e\x80\xe1\x9e\xb6\0"
        "\xe1\x9e\x92\xe1\x9f\x92\xe1\x9e\x93\xe1\x9e\xbc\0"
-       "H:mm tt\0"
+       "'\xe1\x9e\x81\xe1\x9f\x82' MM '\xe1\x9e\x86\xe1\x9f\x92\xe1\x9e\x93\xe1\x9e\xb6\xe1\x9f\x86' yyyy\0"
        "\xe0\xba\x81\xe0\xbb\x88\xe0\xba\xad\xe0\xba\x99\xe0\xba\x97\xe0\xbb\x88\xe0\xba\xbd\xe0\xba\x87\0"
        "\xe0\xba\xab\xe0\xba\xbc\xe0\xba\xb1\xe0\xba\x87\xe0\xba\x97\xe0\xbb\x88\xe0\xba\xbd\xe0\xba\x87\0"
        "\xe0\xba\xa7\xe0\xba\xb1\xe0\xba\x99\xe0\xba\xad\xe0\xba\xb2\xe0\xba\x97\xe0\xba\xb4\xe0\xba\x94\0"
@@ -4261,6 +4268,7 @@ static const char locale_strings [] = {
        "\xe0\xba\x95.\xe0\xba\xa5.\0"
        "\xe0\xba\x9e.\xe0\xba\x88.\0"
        "\xe0\xba\x97.\xe0\xba\xa7.\0"
+       "dd.M.yyyy\0"
        "luns\0"
        "m\xc3\xa9rcores\0"
        "xoves\0"
@@ -4290,6 +4298,9 @@ static const char locale_strings [] = {
        "Xu\xc3\xb1\0"
        "Xul\0"
        "Out\0"
+       "dddd, dd' de 'MMMM' de 'yyyy\0"
+       "HH'H'mm'\\''\0"
+       "HH'H'mm'\\''ss'\\'\\''\0"
        "\xe0\xa4\xae.\xe0\xa4\xaa\xe0\xa5\x82.\0"
        "\xe0\xa4\xae.\xe0\xa4\xa8\xe0\xa4\x82.\0"
        "\xe0\xa4\x86\xe0\xa4\xa6\xe0\xa4\xbf\xe0\xa4\xa4\xe0\xa5\x8d\xe0\xa4\xaf\xe0\xa4\xb5\xe0\xa4\xbe\xe0\xa4\xb0\0"
@@ -4297,8 +4308,6 @@ static const char locale_strings [] = {
        "\xe0\xa4\x93\xe0\xa4\x97\xe0\xa4\xb8\xe0\xa5\x8d\xe0\xa4\x9f\0"
        "\xe0\xa4\xb8\xe0\xa5\x87\xe0\xa4\xaa\xe0\xa5\x8d\xe0\xa4\x9f\xe0\xa5\x87\xe0\xa4\x82\xe0\xa4\xac\xe0\xa4\xb0\0"
        "\xe0\xa4\x93\xe0\xa4\x95\xe0\xa5\x8d\xe0\xa4\x9f\xe0\xa5\x8b\xe0\xa4\xac\xe0\xa4\xb0\0"
-       "yyyy MMMM' \xe0\xb6\xb8\xe0\xb7\x83 'dd' \xe0\xb7\x80\xe0\xb7\x90\xe0\xb6\xb1\xe0\xb7\x92\xe0\xb6\xaf\xe0\xb7\x8f 'dddd\0"
-       "yyyy MMMM\0"
        "\xe0\xb6\xb4\xe0\xb7\x99.\xe0\xb7\x80.\0"
        "\xe0\xb6\xb4.\xe0\xb7\x80.\0"
        "\xe0\xb6\x89\xe0\xb6\xbb\xe0\xb7\x92\xe0\xb6\xaf\xe0\xb7\x8f\0"
@@ -4339,7 +4348,8 @@ static const char locale_strings [] = {
        "\xe0\xb6\x94\xe0\xb6\x9a\xe0\xb7\x8a\0"
        "\xe0\xb6\xb1\xe0\xb7\x9c\xe0\xb7\x80\xe0\xb7\x90\0"
        "\xe0\xb6\xaf\xe0\xb7\x99\xe0\xb7\x83\xe0\xb7\x90\0"
-       "dddd '\xe1\x8d\xa3' MMMM d '\xe1\x89\x80\xe1\x8a\x95' yyyy\0"
+       "yyyy MMMM' \xe0\xb6\xb8\xe0\xb7\x83 'dd' \xe0\xb7\x80\xe0\xb7\x90\xe0\xb6\xb1\xe0\xb7\x92\xe0\xb6\xaf\xe0\xb7\x8f 'dddd\0"
+       "yyyy MMMM\0"
        "MMMM d' \xe1\x89\x80\xe1\x8a\x95'\0"
        "\xe1\x8c\xa5\xe1\x8b\x8b\xe1\x89\xb5\0"
        "\xe1\x8a\xa8\xe1\x88\xb0\xe1\x8b\x93\xe1\x89\xb5\0"
@@ -4379,6 +4389,7 @@ static const char locale_strings [] = {
        "\xe1\x8a\xa6\xe1\x8a\xad\xe1\x89\xb6\0"
        "\xe1\x8a\x96\xe1\x89\xac\xe1\x88\x9d\0"
        "\xe1\x8b\xb2\xe1\x88\xb4\xe1\x88\x9d\0"
+       "dddd '\xe1\x8d\xa3' MMMM d '\xe1\x89\x80\xe1\x8a\x95' yyyy\0"
        "Zdat azal\0"
        "\xe1\xb8\x8c\x65\x66\x66ir aza\0"
        "Asamas\0"
@@ -4416,8 +4427,6 @@ static const char locale_strings [] = {
        "K\xe1\xb9\xadu\0"
        "Nwa\0"
        "Duj\0"
-       "hh:mm\0"
-       "MMMM,yyyy\0"
        "\xe0\xa4\xaa\xe0\xa5\x82\xe0\xa4\xb0\xe0\xa5\x8d\xe0\xa4\xb5 \xe0\xa4\xae\xe0\xa4\xa7\xe0\xa5\x8d\xe0\xa4\xaf\xe0\xa4\xbe\xe0\xa4\xa8\xe0\xa5\x8d\xe0\xa4\xb9\0"
        "\xe0\xa4\x89\xe0\xa4\xa4\xe0\xa5\x8d\xe0\xa4\xa4\xe0\xa4\xb0 \xe0\xa4\xae\xe0\xa4\xa7\xe0\xa5\x8d\xe0\xa4\xaf\xe0\xa4\xbe\xe0\xa4\xa8\xe0\xa5\x8d\xe0\xa4\xb9\0"
        "\xe0\xa4\x86\xe0\xa4\x87\xe0\xa4\xa4\xe0\xa4\xac\xe0\xa4\xbe\xe0\xa4\xb0\0"
@@ -4441,7 +4450,6 @@ static const char locale_strings [] = {
        "\xe0\xa4\x85\xe0\xa4\x95\xe0\xa5\x8d\xe0\xa4\x9f\xe0\xa5\x8b\xe0\xa4\xac\xe0\xa4\xb0\0"
        "\xe0\xa4\xa8\xe0\xa5\x8b\xe0\xa4\xad\xe0\xa5\x87\xe0\xa4\xae\xe0\xa5\x8d\xe0\xa4\xac\xe0\xa4\xb0\0"
        "\xe0\xa4\xa1\xe0\xa4\xbf\xe0\xa4\xb8\xe0\xa5\x87\xe0\xa4\xae\xe0\xa5\x8d\xe0\xa4\xac\xe0\xa4\xb0\0"
-       "yyyy, dd, MMMM, dddd\0"
        "\xd9\x88\xd8\xb1\xdb\x8c\0"
        "\xd8\xba\xd9\x88\xdb\x8c\xdb\x8c\0"
        "\xd8\xba\xd8\xa8\xd8\xb1\xda\xab\xd9\x88\xd9\x84\xdb\x8c\0"
@@ -4454,7 +4462,8 @@ static const char locale_strings [] = {
        "\xd9\x85\xd8\xb1\xd8\xba\xd9\x88\xd9\x85\xdb\x8c\0"
        "\xd8\xb3\xd9\x84\xd9\x88\xd8\xa7\xd8\xba\xd9\x87\0"
        "\xda\xa9\xd8\xa8\0"
-       "dd/MM/yyyy '\xd9\x87\xd9\x80'\0"
+       "yyyy, dd, MMMM, dddd\0"
+       "yyyy, dd, MMMM\0"
        "MM/dd\0"
        "Linggo\0"
        "Lunes\0"
@@ -4564,7 +4573,6 @@ static const char locale_strings [] = {
        "Disemere\0"
        "Apo\0"
        "Nof\0"
-       "MMMM d'.-at, 'yyyy\0"
        "MMMM d'.-at'\0"
        "u.t.\0"
        "u.k.\0"
@@ -4588,6 +4596,7 @@ static const char locale_strings [] = {
        "oktoberi\0"
        "novemberi\0"
        "decemberi\0"
+       "MMMM d'.-at, 'yyyy\0"
        "A.M.\0"
        "P.M.\0"
        "Mb\xe1\xbb\x8ds\xe1\xbb\x8b \xe1\xbb\xa4ka\0"
@@ -4617,8 +4626,6 @@ static const char locale_strings [] = {
        "Juu\0"
        "\xe1\xbb\x8cg\xe1\xbb\x8d\0"
        "\xe1\xbb\x8ckt\0"
-       "yyyy'\xea\x88\x8e' M'\xea\x86\xaa' d'\xea\x91\x8d'\0"
-       "yyyy'\xea\x88\x8e' M'\xea\x86\xaa'\0"
        "M'\xe2\x80\x99 \xea\x86\xaa\xe2\x80\x99'd'\xe2\x80\x99 \xea\x91\x8d\xe2\x80\x99'\0"
        "\xea\x8e\xb8\xea\x84\x91\0"
        "\xea\x81\xaf\xea\x8b\x92\0"
@@ -4655,8 +4662,12 @@ static const char locale_strings [] = {
        "\xea\x8a\xb0\xea\x86\xaa\0"
        "\xea\x8a\xb0\xea\x8a\xaa\xea\x86\xaa\0"
        "\xea\x8a\xb0\xea\x91\x8b\xea\x86\xaa\0"
+       "yyyy'\xea\x88\x8e' M'\xea\x86\xaa' d'\xea\x91\x8d'\0"
        "dddd, yyyy'\xea\x88\x8e' M'\xea\x86\xaa' d'\xea\x91\x8d'\0"
        "yyyy'\xea\x88\x8e' M'\xea\x86\xaa' d'\xea\x91\x8d', dddd\0"
+       "yyyy\xea\x88\x8e MMM d\xea\x91\x8d\0"
+       "dddd, yyyy\xea\x88\x8e MMM d\xea\x91\x8d\0"
+       "yyyy'\xea\x88\x8e' M'\xea\x86\xaa'\0"
        "Meurzh\0"
        "Merc\xca\xbcher\0"
        "Yaou\0"
@@ -4712,8 +4723,6 @@ static const char locale_strings [] = {
        "Oktoober\0"
        "Nov\xc3\xa4mber\0"
        "Dez\xc3\xa4mber\0"
-       "dddd, yyyy '\xd1\x81.' MMMM d '\xd0\xba\xd2\xaf\xd0\xbd\xd1\x8d'\0"
-       "yyyy '\xd1\x81.' MMMM\0"
        "MMMM d '\xd0\xba\xd2\xaf\xd0\xbd\xd1\x8d'\0"
        "\xd0\xad\xd0\x98\0"
        "\xd0\xad\xd0\x9a\0"
@@ -4755,12 +4764,12 @@ static const char locale_strings [] = {
        "\xd0\x90\xd0\xbb\xd1\x82\0"
        "\xd0\xa1\xd1\x8d\xd1\x82\0"
        "\xd0\x90\xd1\x85\xd1\x81\0"
-       "MM.dd.yyyy\0"
-       "MM.dd.yy\0"
-       "MM-dd-yyyy\0"
-       "MMMM d yyyy '\xd1\x81.'\0"
-       "MMMM dd yyyy '\xd1\x81.'\0"
-       "d ' ' MMMM ' ' yyyy\0"
+       "yyyy MM d\0"
+       "dd yyyy MM d\0"
+       "dddd, yyyy '\xd1\x81.' MMMM d '\xd0\xba\xd2\xaf\xd0\xbd\xd1\x8d'\0"
+       "yyyy '\xd1\x81.' MMMM d '\xd0\xba\xd2\xaf\xd0\xbd\xd1\x8d'\0"
+       "dddd, MMMM d '\xd0\xba\xd2\xaf\xd0\xbd\xd1\x8d' yyyy '\xd1\x81.'\0"
+       "yyyy '\xd1\x81.' MMMM\0"
        "Ku cyumweru\0"
        "Kuwa mbere\0"
        "Kuwa kabiri\0"
@@ -4798,6 +4807,7 @@ static const char locale_strings [] = {
        "ukw.\0"
        "ugu.\0"
        "uku.\0"
+       "d ' ' MMMM ' ' yyyy\0"
        "m\0"
        "f\0"
        "DiD\xc3\xb2mhnaich\0"
@@ -4844,6 +4854,7 @@ static const char locale_strings [] = {
        "\xe9\x80\xb1\xe5\x9b\x9b\0"
        "\xe9\x80\xb1\xe4\xba\x94\0"
        "\xe9\x80\xb1\xe5\x85\xad\0"
+       "dddd yyyy\xe5\xb9\xb4MMMd\xe6\x97\xa5\0"
        "\xd9\x83\xd8\xa7\xd9\x86\xd9\x88\xd9\x86 \xd8\xa7\xd9\x84\xd8\xab\xd8\xa7\xd9\x86\xd9\x8a\0"
        "\xd8\xb4\xd8\xa8\xd8\xa7\xd8\xb7\0"
        "\xd8\xa2\xd8\xb0\xd8\xa7\xd8\xb1\0"
@@ -4858,6 +4869,16 @@ static const char locale_strings [] = {
        "\xd9\x83\xd8\xa7\xd9\x86\xd9\x88\xd9\x86 \xd8\xa7\xd9\x84\xd8\xa3\xd9\x88\xd9\x84\0"
        "dd. M. yy\0"
        "d. MMM yy\0"
+       "H.mm' h'\0"
+       "HH.mm' h'\0"
+       "H.mm' Uhr'\0"
+       "HHmm\0"
+       "H' h'\0"
+       "H' Uhr'\0"
+       "HH:mm:ss' h'\0"
+       "H:mm:ss' h'\0"
+       "H:mm:ss' Uhr'\0"
+       "HHmmss\0"
        "dom.\0"
        "mi\xc3\xa9.\0"
        "jue.\0"
@@ -4881,9 +4902,7 @@ static const char locale_strings [] = {
        "Junho\0"
        "Julho\0"
        "Dezembro\0"
-       "d/MMM/yy\0"
-       "d.MMM.yy\0"
-       "HH'H'mm'm'\0"
+       "yy.MM.dd\0"
        "\xd0\xb1\xd0\xb0\xd0\xb7\xd0\xb0\xd1\x80\0"
        "\xd0\xb1\xd0\xb0\xd0\xb7\xd0\xb0\xd1\x80 \xd0\xb5\xd1\x80\xd1\x82\xd3\x99\xd1\x81\xd0\xb8\0"
        "\xd1\x87\xd3\x99\xd1\x80\xd1\x88\xd3\x99\xd0\xbd\xd0\xb1\xd3\x99 \xd0\xb0\xd1\x85\xd1\x88\xd0\xb0\xd0\xbc\xd1\x8b\0"
@@ -4900,7 +4919,6 @@ static const char locale_strings [] = {
        "\xd0\xbe\xd0\xba\xd1\x82\xd1\x98\xd0\xb0\xd0\xb1\xd1\x80\0"
        "\xd0\xbd\xd0\xbe\xd1\x98\xd0\xb0\xd0\xb1\xd1\x80\0"
        "\xd0\xb4\xd0\xb5\xd0\xba\xd0\xb0\xd0\xb1\xd1\x80\0"
-       "yyyy '\xd0\xb9\xd0\xb8\xd0\xbb' d-MMMM\0"
        "\xd1\x8f\xd0\xba\xd1\x88\xd0\xb0\xd0\xbd\xd0\xb1\xd0\xb0\0"
        "\xd0\xb4\xd1\x83\xd1\x88\xd0\xb0\xd0\xbd\xd0\xb1\xd0\xb0\0"
        "\xd1\x81\xd0\xb5\xd1\x88\xd0\xb0\xd0\xbd\xd0\xb1\xd0\xb0\0"
@@ -4915,15 +4933,14 @@ static const char locale_strings [] = {
        "\xd0\x9f\xd0\xb0\xd0\xb9\0"
        "\xd0\xa8\xd0\xb0\xd0\xbd\0"
        "\xd0\xaf\0"
-       "dddd, dd. MMMM yyyy\0"
+       "dd/MM yyyy\0"
+       "yyyy '\xd0\xb9\xd0\xb8\xd0\xbb' d-MMMM\0"
        "J\xc3\xa4nner\0"
        "J\xc3\xa4n\0"
-       "dd.M.yyyy\0"
+       "dd.MMM.yy\0"
+       "dddd, dd. MMMM yyyy\0"
        "d.MMMM yyyy\0"
-       "d.MMMyyyy\0"
-       "HH:mm' Uhr'\0"
        "H:mm' Uhr'\0"
-       "dddd', 'MMMM d'. b. 'yyyy\0"
        "aejlege\0"
        "m\xc3\xa5\x61nta\0"
        "d\xc3\xa4jsta\0"
@@ -4943,8 +4960,10 @@ static const char locale_strings [] = {
        "golggot\0"
        "sk\xc3\xa1\x62ma\0"
        "juovla\0"
+       "dddd', 'MMMM d'. b. 'yyyy\0"
        "dddd' den 'd'.' MMMM yyyy\0"
-       "MMMM d, yyyy\0"
+       "d'.' MMMM yyyy\0"
+       "d'. 'MMM yyyy\0"
        "M/dd/yy\0"
        "MMMM-dd-yy\0"
        "\xd8\xac\xd8\xa7\xd9\x86\xd9\x81\xd9\x8a\0"
@@ -4960,6 +4979,8 @@ static const char locale_strings [] = {
        "\xd8\xaf\xd9\x8a\xd8\xb3\xd9\x85\xd8\xa8\xd8\xb1\0"
        "dddd yyyy'\xe5\xb9\xb4'M'\xe6\x9c\x88'd'\xe6\x97\xa5'\0"
        "dddd yyyy MM dd\0"
+       "d. MMM yyyy\0"
+       "d/MMM/yy\0"
        "dddd', le 'd MMMM yyyy\0"
        "pre podne\0"
        "popodne\0"
@@ -4967,6 +4988,7 @@ static const char locale_strings [] = {
        "oktobar\0"
        "novembar\0"
        "decembar\0"
+       "d. M. yy\0"
        "\xd9\x8a\xd9\x86\xd8\xa7\xd9\x8a\xd8\xb1\0"
        "\xd9\x81\xd8\xa8\xd8\xb1\xd8\xa7\xd9\x8a\xd8\xb1\0"
        "\xd8\xa3\xd8\xa8\xd8\xb1\xd9\x8a\xd9\x84\0"
@@ -4976,8 +4998,8 @@ static const char locale_strings [] = {
        "\xd8\xb4\xd8\xaa\xd9\x86\xd8\xa8\xd8\xb1\0"
        "\xd9\x86\xd9\x88\xd9\x86\xd8\xa8\xd8\xb1\0"
        "\xd8\xaf\xd8\xac\xd9\x86\xd8\xa8\xd8\xb1\0"
-       "MMMM yyyy.\0"
        "ponedeljak\0"
+       "MMMM yyyy.\0"
        "\xd0\xbf\xd1\x80\xd0\xb5 \xd0\xbf\xd0\xbe\xd0\xb4\xd0\xbd\xd0\xb5\0"
        "\xd0\xbf\xd0\xbe\xd0\xbf\xd0\xbe\xd0\xb4\xd0\xbd\xd0\xb5\0"
        "\xd0\xbd\xd0\xb5\xd0\xb4\xd0\xb5\xd1\x99\xd0\xb0\0"
@@ -5014,8 +5036,9 @@ static const char locale_strings [] = {
        "\xd1\x81\xd1\x80\xd0\xb5\0"
        "dd' de 'MMMM\0"
        "MMMM/yyyy\0"
+       "yyyy-MM-dd.\0"
        "d' de 'MMM\0"
-       "dddd, d MMMM, yyyy\0"
+       "MM-dd-yyyy\0"
        "MMMM' del 'yyyy\0"
        ",\0"
        "\xd9\xab\0"
index 5ee2eaf03f3a840e974db2f53d8c0e4fe078f85a..67640e3226b651c2009cca9204cc4f490a5c1620 100644 (file)
 #define NUM_CALENDARS 4
 
 #define NUM_SHORT_DATE_PATTERNS 14
-#define NUM_LONG_DATE_PATTERNS 8
+#define NUM_LONG_DATE_PATTERNS 10
 #define NUM_SHORT_TIME_PATTERNS 12
 #define NUM_LONG_TIME_PATTERNS 9
+#define NUM_YEAR_MONTH_PATTERNS 8
 
 #define idx2string(idx) (locale_strings + (idx))
 
 typedef guint16 stridx_t;
 
 typedef struct {
-       const stridx_t long_date_pattern;
-       const stridx_t short_date_pattern;
-       const stridx_t long_time_pattern;
-       const stridx_t short_time_pattern;
-       const stridx_t year_month_pattern;
        const stridx_t month_day_pattern;
-
        const stridx_t am_designator;
        const stridx_t pm_designator;
 
@@ -49,6 +44,7 @@ typedef struct {
        const stridx_t long_date_patterns [NUM_LONG_DATE_PATTERNS];
        const stridx_t short_time_patterns [NUM_SHORT_TIME_PATTERNS];
        const stridx_t long_time_patterns [NUM_LONG_TIME_PATTERNS];
+       const stridx_t year_month_patterns [NUM_YEAR_MONTH_PATTERNS];
 } DateTimeFormatEntry;
 
 typedef struct {
diff --git a/mono/metadata/decimal-ms.c b/mono/metadata/decimal-ms.c
new file mode 100644 (file)
index 0000000..1efc614
--- /dev/null
@@ -0,0 +1,3116 @@
+//
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+//
+// Copyright 2015 Xamarin Inc
+//
+// File: decimal.c
+//
+// Ported from C++ to C and adjusted to Mono runtime
+//
+// Pending:
+//   DoToCurrency (they look like new methods we do not have)
+//
+#ifndef DISABLE_DECIMAL
+#include "config.h"
+#include <stdint.h>
+#include <glib.h>
+#include <mono/utils/mono-compiler.h>
+#include <mono/metadata/exception.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+#ifdef HAVE_MEMORY_H
+#include <memory.h>
+#endif
+#ifdef _MSC_VER
+#include <intrin.h>
+#endif
+#include "decimal-ms.h"
+
+#define min(a, b) (((a) < (b)) ? (a) : (b))
+
+typedef enum {
+       MONO_DECIMAL_OK,
+       MONO_DECIMAL_OVERFLOW,
+       MONO_DECIMAL_INVALID_ARGUMENT,
+       MONO_DECIMAL_DIVBYZERO,
+       MONO_DECIMAL_ARGUMENT_OUT_OF_RANGE
+} MonoDecimalStatus;
+
+#ifndef FC_GC_POLL
+#   define FC_GC_POLL() 
+#endif
+
+static const uint32_t ten_to_nine    = 1000000000U;
+static const uint32_t ten_to_ten_div_4 = 2500000000U;
+#define POWER10_MAX     9
+#define DECIMAL_NEG ((uint8_t)0x80)
+#define DECMAX 28
+#define DECIMAL_SCALE(dec)       ((dec).u.u.scale)
+#define DECIMAL_SIGN(dec)        ((dec).u.u.sign)
+#define DECIMAL_SIGNSCALE(dec)   ((dec).u.signscale)
+#define DECIMAL_LO32(dec)        ((dec).v.v.Lo32)
+#define DECIMAL_MID32(dec)       ((dec).v.v.Mid32)
+#define DECIMAL_HI32(dec)        ((dec).Hi32)
+#define DECIMAL_LO64_GET(dec)    ((dec).v.Lo64)
+#define DECIMAL_LO64_SET(dec,value)   {(dec).v.Lo64 = value; }
+
+#define DECIMAL_SETZERO(dec) {DECIMAL_LO32(dec) = 0; DECIMAL_MID32(dec) = 0; DECIMAL_HI32(dec) = 0; DECIMAL_SIGNSCALE(dec) = 0;}
+#define COPYDEC(dest, src) {DECIMAL_SIGNSCALE(dest) = DECIMAL_SIGNSCALE(src); DECIMAL_HI32(dest) = DECIMAL_HI32(src); \
+    DECIMAL_MID32(dest) = DECIMAL_MID32(src); DECIMAL_LO32(dest) = DECIMAL_LO32(src); }
+
+#define DEC_SCALE_MAX   28
+#define POWER10_MAX     9
+
+#define OVFL_MAX_9_HI   4
+#define OVFL_MAX_9_MID  1266874889
+#define OVFL_MAX_9_LO   3047500985u
+
+#define OVFL_MAX_5_HI   42949
+#define OVFL_MAX_5_MID  2890341191
+
+#define OVFL_MAX_1_HI   429496729
+
+typedef union {
+       uint64_t int64;
+       struct {
+#if BYTE_ORDER == G_BIG_ENDIAN
+        uint32_t Hi;
+        uint32_t Lo;
+#else
+        uint32_t Lo;
+        uint32_t Hi;
+#endif
+    } u;
+} SPLIT64;
+
+static const SPLIT64    ten_to_eighteen = { 1000000000000000000ULL };
+// Double Bias
+#define DBLBIAS 1022
+
+// Structure to access an encoded double floating point
+typedef union{
+    struct {
+#if BYTE_ORDER == G_BIG_ENDIAN
+      unsigned int sign:1;
+      unsigned int exp:11;
+      unsigned int mantHi:20;
+      unsigned int mantLo;
+#else // BIGENDIAN
+      unsigned int mantLo;
+      unsigned int mantHi:20;
+      unsigned int exp:11;
+      unsigned int sign:1;
+#endif
+    } u;
+    double dbl;
+} DoubleStructure;
+
+#if BYTE_ORDER == G_BIG_ENDIAN
+#define DEFDS(Lo, Hi, exp, sign) { {sign, exp, Hi, Lo } }
+#else
+#define DEFDS(Lo, Hi, exp, sign) { {Lo, Hi, exp, sign} }
+#endif
+
+const DoubleStructure ds2to64 = DEFDS(0, 0, DBLBIAS + 65, 0);
+
+// Single floating point Bias
+#define SNGBIAS 126
+
+// Structure to access an encoded single floating point
+typedef struct {
+#if BYTE_ORDER == G_BIG_ENDIAN
+    unsigned int sign:1;
+    unsigned int exp:8;
+    unsigned int mant:23;
+#else
+    unsigned int mant:23;
+    unsigned int exp:8;
+    unsigned int sign:1;
+#endif
+} SingleStructure;
+
+//
+// Data tables
+//
+
+static const uint32_t power10 [POWER10_MAX+1] = {
+       1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000
+};
+
+
+static const double double_power10[] = {
+       1, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 
+       1e10, 1e11, 1e12, 1e13, 1e14, 1e15, 1e16, 1e17, 1e18, 1e19, 
+       1e20, 1e21, 1e22, 1e23, 1e24, 1e25, 1e26, 1e27, 1e28, 1e29, 
+       1e30, 1e31, 1e32, 1e33, 1e34, 1e35, 1e36, 1e37, 1e38, 1e39, 
+       1e40, 1e41, 1e42, 1e43, 1e44, 1e45, 1e46, 1e47, 1e48, 1e49, 
+       1e50, 1e51, 1e52, 1e53, 1e54, 1e55, 1e56, 1e57, 1e58, 1e59,
+       1e60, 1e61, 1e62, 1e63, 1e64, 1e65, 1e66, 1e67, 1e68, 1e69, 
+       1e70, 1e71, 1e72, 1e73, 1e74, 1e75, 1e76, 1e77, 1e78, 1e79,
+       1e80 };
+
+const SPLIT64 sdl_power10[] = { {10000000000ULL},          // 1E10
+                               {100000000000ULL},         // 1E11
+                               {1000000000000ULL},        // 1E12
+                               {10000000000000ULL},       // 1E13
+                               {100000000000000ULL} };    // 1E14
+
+static const uint64_t long_power10[] = {
+       1,
+       10ULL,
+       100ULL,
+       1000ULL,
+       10000ULL,
+       100000ULL,
+       1000000ULL,
+       10000000ULL,
+       100000000ULL,
+       1000000000ULL,
+       10000000000ULL,
+       100000000000ULL,
+       1000000000000ULL,
+       10000000000000ULL,
+       100000000000000ULL,
+       1000000000000000ULL,
+       10000000000000000ULL,
+       100000000000000000ULL,
+       1000000000000000000ULL,
+       10000000000000000000ULL};
+
+typedef struct  {
+       uint32_t Hi, Mid, Lo;
+} DECOVFL;
+
+const DECOVFL power_overflow[] = {
+// This is a table of the largest values that can be in the upper two
+// ULONGs of a 96-bit number that will not overflow when multiplied
+// by a given power.  For the upper word, this is a table of 
+// 2^32 / 10^n for 1 <= n <= 9.  For the lower word, this is the
+// remaining fraction part * 2^32.  2^32 = 4294967296.
+// 
+    { 429496729u, 2576980377u, 2576980377u }, // 10^1 remainder 0.6
+    { 42949672u,  4123168604u, 687194767u  }, // 10^2 remainder 0.16
+    { 4294967u,   1271310319u, 2645699854u }, // 10^3 remainder 0.616
+    { 429496u,    3133608139u, 694066715u  }, // 10^4 remainder 0.1616
+    { 42949u,     2890341191u, 2216890319u }, // 10^5 remainder 0.51616
+    { 4294u,      4154504685u, 2369172679u }, // 10^6 remainder 0.551616
+    { 429u,       2133437386u, 4102387834u }, // 10^7 remainder 0.9551616
+    { 42u,        4078814305u, 410238783u  }, // 10^8 remainder 0.09991616
+    { 4u,         1266874889u, 3047500985u }, // 10^9 remainder 0.709551616
+};
+
+
+#define UInt32x32To64(a, b) ((uint64_t)((uint32_t)(a)) * (uint64_t)((uint32_t)(b)))
+#define Div64by32(num, den) ((uint32_t)((uint64_t)(num) / (uint32_t)(den)))
+#define Mod64by32(num, den) ((uint32_t)((uint64_t)(num) % (uint32_t)(den)))
+
+static double
+fnDblPower10(int ix)
+{
+    const int maxIx = (sizeof(double_power10)/sizeof(double_power10[0]));
+    g_assert(ix >= 0);
+    if (ix < maxIx)
+        return double_power10[ix];
+    return pow(10.0, ix);
+} // double fnDblPower10()
+
+
+static inline int64_t
+DivMod32by32(int32_t num, int32_t den)
+{
+    SPLIT64  sdl;
+
+    sdl.u.Lo = num / den;
+    sdl.u.Hi = num % den;
+    return sdl.int64;
+}
+
+static inline int64_t
+DivMod64by32(int64_t num, int32_t den)
+{
+    SPLIT64  sdl;
+
+    sdl.u.Lo = Div64by32(num, den);
+    sdl.u.Hi = Mod64by32(num, den);
+    return sdl.int64;
+}
+
+static uint64_t
+UInt64x64To128(SPLIT64 op1, SPLIT64 op2, uint64_t *hi)
+{
+       SPLIT64  tmp1;
+       SPLIT64  tmp2;
+       SPLIT64  tmp3;
+
+       tmp1.int64 = UInt32x32To64(op1.u.Lo, op2.u.Lo); // lo partial prod
+       tmp2.int64 = UInt32x32To64(op1.u.Lo, op2.u.Hi); // mid 1 partial prod
+       tmp1.u.Hi += tmp2.u.Lo;
+       if (tmp1.u.Hi < tmp2.u.Lo)  // test for carry
+               tmp2.u.Hi++;
+       tmp3.int64 = UInt32x32To64(op1.u.Hi, op2.u.Hi) + (uint64_t)tmp2.u.Hi;
+       tmp2.int64 = UInt32x32To64(op1.u.Hi, op2.u.Lo);
+       tmp1.u.Hi += tmp2.u.Lo;
+       if (tmp1.u.Hi < tmp2.u.Lo)  // test for carry
+               tmp2.u.Hi++;
+       tmp3.int64 += (uint64_t)tmp2.u.Hi;
+
+       *hi = tmp3.int64;
+       return tmp1.int64;
+}
+
+/**
+* FullDiv64By32:
+*
+* Entry:
+*   pdlNum  - Pointer to 64-bit dividend
+*   ulDen   - 32-bit divisor
+*
+* Purpose:
+*   Do full divide, yielding 64-bit result and 32-bit remainder.
+*
+* Exit:
+*   Quotient overwrites dividend.
+*   Returns remainder.
+*
+* Exceptions:
+*   None.
+*/
+// Was: FullDiv64By32
+static uint32_t
+FullDiv64By32 (uint64_t *num, uint32_t den)
+{
+       SPLIT64  tmp;
+       SPLIT64  res;
+       
+       tmp.int64 = *num;
+       res.u.Hi = 0;
+       
+       if (tmp.u.Hi >= den) {
+               // DivMod64by32 returns quotient in Lo, remainder in Hi.
+               //
+               res.u.Lo = tmp.u.Hi;
+               res.int64 = DivMod64by32(res.int64, den);
+               tmp.u.Hi = res.u.Hi;
+               res.u.Hi = res.u.Lo;
+       }
+       
+       tmp.int64 = DivMod64by32(tmp.int64, den);
+       res.u.Lo = tmp.u.Lo;
+       *num = res.int64;
+       return tmp.u.Hi;
+}
+
+/***
+ * SearchScale
+ *
+ * Entry:
+ *   res_hi - Top uint32_t of quotient
+ *   res_mid - Middle uint32_t of quotient
+ *   res_lo - Bottom uint32_t of quotient
+ *   scale  - Scale factor of quotient, range -DEC_SCALE_MAX to DEC_SCALE_MAX
+ *
+ * Purpose:
+ *   Determine the max power of 10, <= 9, that the quotient can be scaled
+ *   up by and still fit in 96 bits.
+ *
+ * Exit:
+ *   Returns power of 10 to scale by, -1 if overflow error.
+ *
+ ***********************************************************************/
+
+static int
+SearchScale(uint32_t res_hi, uint32_t res_mid, uint32_t res_lo, int scale)
+{
+       int   cur_scale;
+
+       // Quick check to stop us from trying to scale any more.
+       //
+       if (res_hi > OVFL_MAX_1_HI || scale >= DEC_SCALE_MAX) {
+               cur_scale = 0;
+               goto HaveScale;
+       }
+
+       if (scale > DEC_SCALE_MAX - 9) {
+               // We can't scale by 10^9 without exceeding the max scale factor.
+               // See if we can scale to the max.  If not, we'll fall into
+               // standard search for scale factor.
+               //
+               cur_scale = DEC_SCALE_MAX - scale;
+               if (res_hi < power_overflow[cur_scale - 1].Hi)
+                       goto HaveScale;
+
+               if (res_hi == power_overflow[cur_scale - 1].Hi) {
+               UpperEq:
+                       if (res_mid > power_overflow[cur_scale - 1].Mid ||
+                           (res_mid == power_overflow[cur_scale - 1].Mid && res_lo > power_overflow[cur_scale - 1].Lo)) {
+                               cur_scale--;
+                       }
+                       goto HaveScale;
+               }
+       } else if (res_hi < OVFL_MAX_9_HI || (res_hi == OVFL_MAX_9_HI && res_mid < OVFL_MAX_9_MID) || (res_hi == OVFL_MAX_9_HI && res_mid == OVFL_MAX_9_MID && res_lo <= OVFL_MAX_9_LO))
+               return 9;
+
+       // Search for a power to scale by < 9.  Do a binary search
+       // on power_overflow[].
+       //
+       cur_scale = 5;
+       if (res_hi < OVFL_MAX_5_HI)
+               cur_scale = 7;
+       else if (res_hi > OVFL_MAX_5_HI)
+               cur_scale = 3;
+       else
+               goto UpperEq;
+
+       // cur_scale is 3 or 7.
+       //
+       if (res_hi < power_overflow[cur_scale - 1].Hi)
+               cur_scale++;
+       else if (res_hi > power_overflow[cur_scale - 1].Hi)
+               cur_scale--;
+       else
+               goto UpperEq;
+
+       // cur_scale is 2, 4, 6, or 8.
+       //
+       // In all cases, we already found we could not use the power one larger.
+       // So if we can use this power, it is the biggest, and we're done.  If
+       // we can't use this power, the one below it is correct for all cases 
+       // unless it's 10^1 -- we might have to go to 10^0 (no scaling).
+       // 
+       if (res_hi > power_overflow[cur_scale - 1].Hi)
+               cur_scale--;
+
+       if (res_hi == power_overflow[cur_scale - 1].Hi)
+               goto UpperEq;
+
+HaveScale:
+       // cur_scale = largest power of 10 we can scale by without overflow, 
+       // cur_scale < 9.  See if this is enough to make scale factor 
+       // positive if it isn't already.
+       // 
+       if (cur_scale + scale < 0)
+               cur_scale = -1;
+
+       return cur_scale;
+}
+
+
+/**
+* Div96By32
+*
+* Entry:
+*   rgulNum - Pointer to 96-bit dividend as array of uint32_ts, least-sig first
+*   ulDen   - 32-bit divisor.
+*
+* Purpose:
+*   Do full divide, yielding 96-bit result and 32-bit remainder.
+*
+* Exit:
+*   Quotient overwrites dividend.
+*   Returns remainder.
+*
+* Exceptions:
+*   None.
+*
+*/
+static uint32_t
+Div96By32(uint32_t *num, uint32_t den)
+{
+       SPLIT64  tmp;
+
+       tmp.u.Hi = 0;
+
+       if (num[2] != 0)
+               goto Div3Word;
+
+       if (num[1] >= den)
+               goto Div2Word;
+
+       tmp.u.Hi = num[1];
+       num[1] = 0;
+       goto Div1Word;
+
+Div3Word:
+       tmp.u.Lo = num[2];
+       tmp.int64 = DivMod64by32(tmp.int64, den);
+       num[2] = tmp.u.Lo;
+Div2Word:
+       tmp.u.Lo = num[1];
+       tmp.int64 = DivMod64by32(tmp.int64, den);
+       num[1] = tmp.u.Lo;
+Div1Word:
+       tmp.u.Lo = num[0];
+       tmp.int64 = DivMod64by32(tmp.int64, den);
+       num[0] = tmp.u.Lo;
+       return tmp.u.Hi;
+}
+
+/***
+ * DecFixInt
+ *
+ * Entry:
+ *   pdecRes - Pointer to Decimal result location
+ *   operand  - Pointer to Decimal operand
+ *
+ * Purpose:
+ *   Chop the value to integer.  Return remainder so Int() function
+ *   can round down if non-zero.
+ *
+ * Exit:
+ *   Returns remainder.
+ *
+ * Exceptions:
+ *   None.
+ *
+ ***********************************************************************/
+
+static uint32_t
+DecFixInt(MonoDecimal * result, MonoDecimal * operand)
+{
+       uint32_t   num[3];
+       uint32_t   rem;
+       uint32_t   pwr;
+       int     scale;
+
+       if (operand->u.u.scale > 0) {
+               num[0] = operand->v.v.Lo32;
+               num[1] = operand->v.v.Mid32;
+               num[2] = operand->Hi32;
+               scale = operand->u.u.scale;
+               result->u.u.sign = operand->u.u.sign;
+               rem = 0;
+
+               do {
+                       if (scale > POWER10_MAX)
+                               pwr = ten_to_nine;
+                       else
+                               pwr = power10[scale];
+
+                       rem |= Div96By32(num, pwr);
+                       scale -= 9;
+               }while (scale > 0);
+
+               result->v.v.Lo32 = num[0];
+               result->v.v.Mid32 = num[1];
+               result->Hi32 = num[2];
+               result->u.u.scale = 0;
+
+               return rem;
+       }
+
+       COPYDEC(*result, *operand);
+       // Odd, the Microsoft code does not set result->reserved to zero on this case
+       return 0;
+}
+
+/**
+ * ScaleResult:
+ *
+ * Entry:
+ *   res - Array of uint32_ts with value, least-significant first.
+ *   hi_res  - Index of last non-zero value in res.
+ *   scale  - Scale factor for this value, range 0 - 2 * DEC_SCALE_MAX
+ *
+ * Purpose:
+ *   See if we need to scale the result to fit it in 96 bits.
+ *   Perform needed scaling.  Adjust scale factor accordingly.
+ *
+ * Exit:
+ *   res updated in place, always 3 uint32_ts.
+ *   New scale factor returned, -1 if overflow error.
+ *
+ */
+static int
+ScaleResult(uint32_t *res, int hi_res, int scale)
+{
+       int     new_scale;
+       int     cur;
+       uint32_t   pwr;
+       uint32_t   tmp;
+       uint32_t   sticky;
+       SPLIT64 sdlTmp;
+
+       // See if we need to scale the result.  The combined scale must
+       // be <= DEC_SCALE_MAX and the upper 96 bits must be zero.
+       // 
+       // Start by figuring a lower bound on the scaling needed to make
+       // the upper 96 bits zero.  hi_res is the index into res[]
+       // of the highest non-zero uint32_t.
+       // 
+       new_scale =   hi_res * 32 - 64 - 1;
+       if (new_scale > 0) {
+
+               // Find the MSB.
+               //
+               tmp = res[hi_res];
+               if (!(tmp & 0xFFFF0000)) {
+                       new_scale -= 16;
+                       tmp <<= 16;
+               }
+               if (!(tmp & 0xFF000000)) {
+                       new_scale -= 8;
+                       tmp <<= 8;
+               }
+               if (!(tmp & 0xF0000000)) {
+                       new_scale -= 4;
+                       tmp <<= 4;
+               }
+               if (!(tmp & 0xC0000000)) {
+                       new_scale -= 2;
+                       tmp <<= 2;
+               }
+               if (!(tmp & 0x80000000)) {
+                       new_scale--;
+                       tmp <<= 1;
+               }
+    
+               // Multiply bit position by log10(2) to figure it's power of 10.
+               // We scale the log by 256.  log(2) = .30103, * 256 = 77.  Doing this 
+               // with a multiply saves a 96-byte lookup table.  The power returned
+               // is <= the power of the number, so we must add one power of 10
+               // to make it's integer part zero after dividing by 256.
+               // 
+               // Note: the result of this multiplication by an approximation of
+               // log10(2) have been exhaustively checked to verify it gives the 
+               // correct result.  (There were only 95 to check...)
+               // 
+               new_scale = ((new_scale * 77) >> 8) + 1;
+
+               // new_scale = min scale factor to make high 96 bits zero, 0 - 29.
+               // This reduces the scale factor of the result.  If it exceeds the
+               // current scale of the result, we'll overflow.
+               // 
+               if (new_scale > scale)
+                       return -1;
+       }
+       else
+               new_scale = 0;
+
+       // Make sure we scale by enough to bring the current scale factor
+       // into valid range.
+       //
+       if (new_scale < scale - DEC_SCALE_MAX)
+               new_scale = scale - DEC_SCALE_MAX;
+
+       if (new_scale != 0) {
+               // Scale by the power of 10 given by new_scale.  Note that this is 
+               // NOT guaranteed to bring the number within 96 bits -- it could 
+               // be 1 power of 10 short.
+               //
+               scale -= new_scale;
+               sticky = 0;
+               sdlTmp.u.Hi = 0; // initialize remainder
+
+               for (;;) {
+
+                       sticky |= sdlTmp.u.Hi; // record remainder as sticky bit
+
+                       if (new_scale > POWER10_MAX)
+                               pwr = ten_to_nine;
+                       else
+                               pwr = power10[new_scale];
+
+                       // Compute first quotient.
+                       // DivMod64by32 returns quotient in Lo, remainder in Hi.
+                       //
+                       sdlTmp.int64 = DivMod64by32(res[hi_res], pwr);
+                       res[hi_res] = sdlTmp.u.Lo;
+                       cur = hi_res - 1;
+
+                       if (cur >= 0) {
+                               // If first quotient was 0, update hi_res.
+                               //
+                               if (sdlTmp.u.Lo == 0)
+                                       hi_res--;
+
+                               // Compute subsequent quotients.
+                               //
+                               do {
+                                       sdlTmp.u.Lo = res[cur];
+                                       sdlTmp.int64 = DivMod64by32(sdlTmp.int64, pwr);
+                                       res[cur] = sdlTmp.u.Lo;
+                                       cur--;
+                               } while (cur >= 0);
+
+                       }
+
+                       new_scale -= POWER10_MAX;
+                       if (new_scale > 0)
+                               continue; // scale some more
+
+                       // If we scaled enough, hi_res would be 2 or less.  If not,
+                       // divide by 10 more.
+                       //
+                       if (hi_res > 2) {
+                               new_scale = 1;
+                               scale--;
+                               continue; // scale by 10
+                       }
+
+                       // Round final result.  See if remainder >= 1/2 of divisor.
+                       // If remainder == 1/2 divisor, round up if odd or sticky bit set.
+                       //
+                       pwr >>= 1;  // power of 10 always even
+                       if ( pwr <= sdlTmp.u.Hi && (pwr < sdlTmp.u.Hi ||
+                                                   ((res[0] & 1) | sticky)) ) {
+                               cur = -1;
+                               while (++res[++cur] == 0);
+                               
+                               if (cur > 2) {
+                                       // The rounding caused us to carry beyond 96 bits. 
+                                       // Scale by 10 more.
+                                       //
+                                       hi_res = cur;
+                                       sticky = 0;  // no sticky bit
+                                       sdlTmp.u.Hi = 0; // or remainder
+                                       new_scale = 1;
+                                       scale--;
+                                       continue; // scale by 10
+                               }
+                       }
+                       
+                       // We may have scaled it more than we planned.  Make sure the scale 
+                       // factor hasn't gone negative, indicating overflow.
+                       // 
+                       if (scale < 0)
+                               return -1;
+                       
+                       return scale;
+               } // for(;;)
+       }
+       return scale;
+}
+
+// Decimal multiply
+// Returns: MONO_DECIMAL_OVERFLOW or MONO_DECIMAL_OK
+static MonoDecimalStatus
+VarDecMul(MonoDecimal * left, MonoDecimal * right, MonoDecimal * result)
+{
+       SPLIT64 tmp;
+       SPLIT64 tmp2;
+       SPLIT64 tmp3;
+       int     scale;
+       int     hi_prod;
+       uint32_t   pwr;
+       uint32_t   rem_lo;
+       uint32_t   rem_hi;
+       uint32_t   prod[6];
+
+       scale = left->u.u.scale + right->u.u.scale;
+
+       if ((left->Hi32 | left->v.v.Mid32 | right->Hi32 | right->v.v.Mid32) == 0) {
+               // Upper 64 bits are zero.
+               //
+               tmp.int64 = UInt32x32To64(left->v.v.Lo32, right->v.v.Lo32);
+               if (scale > DEC_SCALE_MAX)
+               {
+                       // Result scale is too big.  Divide result by power of 10 to reduce it.
+                       // If the amount to divide by is > 19 the result is guaranteed
+                       // less than 1/2.  [max value in 64 bits = 1.84E19]
+                       //
+                       scale -= DEC_SCALE_MAX;
+                       if (scale > 19) {
+                       ReturnZero:
+                               DECIMAL_SETZERO(*result);
+                               return MONO_DECIMAL_OK;
+                       }
+
+                       if (scale > POWER10_MAX) {
+                               // Divide by 1E10 first, to get the power down to a 32-bit quantity.
+                               // 1E10 itself doesn't fit in 32 bits, so we'll divide by 2.5E9 now
+                               // then multiply the next divisor by 4 (which will be a max of 4E9).
+                               // 
+                               rem_lo = FullDiv64By32(&tmp.int64, ten_to_ten_div_4);
+                               pwr = power10[scale - 10] << 2;
+                       } else {
+                               pwr = power10[scale];
+                               rem_lo = 0;
+                       }
+
+                       // Power to divide by fits in 32 bits.
+                       //
+                       rem_hi = FullDiv64By32(&tmp.int64, pwr);
+
+                       // Round result.  See if remainder >= 1/2 of divisor.
+                       // Divisor is a power of 10, so it is always even.
+                       //
+                       pwr >>= 1;
+                       if (rem_hi >= pwr && (rem_hi > pwr || (rem_lo | (tmp.u.Lo & 1))))
+                               tmp.int64++;
+
+                       scale = DEC_SCALE_MAX;
+               }
+               DECIMAL_LO32(*result) = tmp.u.Lo;
+               DECIMAL_MID32(*result) = tmp.u.Hi;
+               DECIMAL_HI32(*result) = 0;
+       } else {
+               // At least one operand has bits set in the upper 64 bits.
+               //
+               // Compute and accumulate the 9 partial products into a 
+               // 192-bit (24-byte) result.
+               //
+               //                [l-h][l-m][l-l]   left high, middle, low
+               //             x  [r-h][r-m][r-l]   right high, middle, low
+               // ------------------------------
+               //
+               //                     [0-h][0-l]   l-l * r-l
+               //                [1ah][1al]        l-l * r-m
+               //                [1bh][1bl]        l-m * r-l
+               //           [2ah][2al]             l-m * r-m
+               //           [2bh][2bl]             l-l * r-h
+               //           [2ch][2cl]             l-h * r-l
+               //      [3ah][3al]                  l-m * r-h
+               //      [3bh][3bl]                  l-h * r-m
+               // [4-h][4-l]                       l-h * r-h
+               // ------------------------------
+               // [p-5][p-4][p-3][p-2][p-1][p-0]   prod[] array
+               //
+               tmp.int64 = UInt32x32To64(left->v.v.Lo32, right->v.v.Lo32);
+               prod[0] = tmp.u.Lo;
+
+               tmp2.int64 = UInt32x32To64(left->v.v.Lo32, right->v.v.Mid32) + tmp.u.Hi;
+
+               tmp.int64 = UInt32x32To64(left->v.v.Mid32, right->v.v.Lo32);
+               tmp.int64 += tmp2.int64; // this could generate carry
+               prod[1] = tmp.u.Lo;
+               if (tmp.int64 < tmp2.int64) // detect carry
+                       tmp2.u.Hi = 1;
+               else
+                       tmp2.u.Hi = 0;
+               tmp2.u.Lo = tmp.u.Hi;
+
+               tmp.int64 = UInt32x32To64(left->v.v.Mid32, right->v.v.Mid32) + tmp2.int64;
+
+               if (left->Hi32 | right->Hi32) {
+                       // Highest 32 bits is non-zero.  Calculate 5 more partial products.
+                       //
+                       tmp2.int64 = UInt32x32To64(left->v.v.Lo32, right->Hi32);
+                       tmp.int64 += tmp2.int64; // this could generate carry
+                       if (tmp.int64 < tmp2.int64) // detect carry
+                               tmp3.u.Hi = 1;
+                       else
+                               tmp3.u.Hi = 0;
+
+                       tmp2.int64 = UInt32x32To64(left->Hi32, right->v.v.Lo32);
+                       tmp.int64 += tmp2.int64; // this could generate carry
+                       prod[2] = tmp.u.Lo;
+                       if (tmp.int64 < tmp2.int64) // detect carry
+                               tmp3.u.Hi++;
+                       tmp3.u.Lo = tmp.u.Hi;
+
+                       tmp.int64 = UInt32x32To64(left->v.v.Mid32, right->Hi32);
+                       tmp.int64 += tmp3.int64; // this could generate carry
+                       if (tmp.int64 < tmp3.int64) // detect carry
+                               tmp3.u.Hi = 1;
+                       else
+                               tmp3.u.Hi = 0;
+
+                       tmp2.int64 = UInt32x32To64(left->Hi32, right->v.v.Mid32);
+                       tmp.int64 += tmp2.int64; // this could generate carry
+                       prod[3] = tmp.u.Lo;
+                       if (tmp.int64 < tmp2.int64) // detect carry
+                               tmp3.u.Hi++;
+                       tmp3.u.Lo = tmp.u.Hi;
+
+                       tmp.int64 = UInt32x32To64(left->Hi32, right->Hi32) + tmp3.int64;
+                       prod[4] = tmp.u.Lo;
+                       prod[5] = tmp.u.Hi;
+
+                       hi_prod = 5;
+               }
+               else {
+                       prod[2] = tmp.u.Lo;
+                       prod[3] = tmp.u.Hi;
+                       hi_prod = 3;
+               }
+
+               // Check for leading zero uint32_ts on the product
+               //
+               while (prod[hi_prod] == 0) {
+                       hi_prod--;
+                       if (hi_prod < 0)
+                               goto ReturnZero;
+               }
+
+               scale = ScaleResult(prod, hi_prod, scale);
+               if (scale == -1)
+                       return MONO_DECIMAL_OVERFLOW;
+
+               result->v.v.Lo32 = prod[0];
+               result->v.v.Mid32 = prod[1];
+               result->Hi32 = prod[2];
+       }
+
+       result->u.u.sign = right->u.u.sign ^ left->u.u.sign;
+       result->u.u.scale = (char)scale;
+       return MONO_DECIMAL_OK;
+}
+
+// Addition and subtraction
+static MonoDecimalStatus
+DecAddSub(MonoDecimal *left, MonoDecimal *right, MonoDecimal *result, int8_t sign)
+{
+       uint32_t     num[6];
+       uint32_t     pwr;
+       int       scale;
+       int       hi_prod;
+       int       cur;
+       SPLIT64   tmp;
+       MonoDecimal decRes;
+       MonoDecimal decTmp;
+       MonoDecimal *pdecTmp;
+
+       sign ^= (right->u.u.sign ^ left->u.u.sign) & DECIMAL_NEG;
+
+       if (right->u.u.scale == left->u.u.scale) {
+               // Scale factors are equal, no alignment necessary.
+               //
+               decRes.u.signscale = left->u.signscale;
+
+       AlignedAdd:
+               if (sign) {
+                       // Signs differ - subtract
+                       //
+                       DECIMAL_LO64_SET(decRes, DECIMAL_LO64_GET(*left) - DECIMAL_LO64_GET(*right));
+                       DECIMAL_HI32(decRes) = DECIMAL_HI32(*left) - DECIMAL_HI32(*right);
+
+                       // Propagate carry
+                       //
+                       if (DECIMAL_LO64_GET(decRes) > DECIMAL_LO64_GET(*left)) {
+                               decRes.Hi32--;
+                               if (decRes.Hi32 >= left->Hi32)
+                                       goto SignFlip;
+                       } else if (decRes.Hi32 > left->Hi32) {
+                               // Got negative result.  Flip its sign.
+                               //
+                       SignFlip:
+                               DECIMAL_LO64_SET(decRes, -(uint64_t)DECIMAL_LO64_GET(decRes));
+                               decRes.Hi32 = ~decRes.Hi32;
+                               if (DECIMAL_LO64_GET(decRes) == 0)
+                                       decRes.Hi32++;
+                               decRes.u.u.sign ^= DECIMAL_NEG;
+                       }
+
+               } else {
+                       // Signs are the same - add
+                       //
+                       DECIMAL_LO64_SET(decRes, DECIMAL_LO64_GET(*left) + DECIMAL_LO64_GET(*right));
+                       decRes.Hi32 = left->Hi32 + right->Hi32;
+
+                       // Propagate carry
+                       //
+                       if (DECIMAL_LO64_GET(decRes) < DECIMAL_LO64_GET(*left)) {
+                               decRes.Hi32++;
+                               if (decRes.Hi32 <= left->Hi32)
+                                       goto AlignedScale;
+                       } else if (decRes.Hi32 < left->Hi32) {
+                       AlignedScale:
+                               // The addition carried above 96 bits.  Divide the result by 10,
+                               // dropping the scale factor.
+                               //
+                               if (decRes.u.u.scale == 0)
+                                       return MONO_DECIMAL_OVERFLOW;
+                               decRes.u.u.scale--;
+
+                               tmp.u.Lo = decRes.Hi32;
+                               tmp.u.Hi = 1;
+                               tmp.int64 = DivMod64by32(tmp.int64, 10);
+                               decRes.Hi32 = tmp.u.Lo;
+
+                               tmp.u.Lo = decRes.v.v.Mid32;
+                               tmp.int64 = DivMod64by32(tmp.int64, 10);
+                               decRes.v.v.Mid32 = tmp.u.Lo;
+
+                               tmp.u.Lo = decRes.v.v.Lo32;
+                               tmp.int64 = DivMod64by32(tmp.int64, 10);
+                               decRes.v.v.Lo32 = tmp.u.Lo;
+
+                               // See if we need to round up.
+                               //
+                               if (tmp.u.Hi >= 5 && (tmp.u.Hi > 5 || (decRes.v.v.Lo32 & 1))) {
+                                       DECIMAL_LO64_SET(decRes, DECIMAL_LO64_GET(decRes)+1)
+                                               if (DECIMAL_LO64_GET(decRes) == 0)
+                                                       decRes.Hi32++;
+                               }
+                       }
+               }
+       }
+       else {
+               // Scale factors are not equal.  Assume that a larger scale
+               // factor (more decimal places) is likely to mean that number
+               // is smaller.  Start by guessing that the right operand has
+               // the larger scale factor.  The result will have the larger
+               // scale factor.
+               //
+               decRes.u.u.scale = right->u.u.scale;  // scale factor of "smaller"
+               decRes.u.u.sign = left->u.u.sign;    // but sign of "larger"
+               scale = decRes.u.u.scale - left->u.u.scale;
+
+               if (scale < 0) {
+                       // Guessed scale factor wrong. Swap operands.
+                       //
+                       scale = -scale;
+                       decRes.u.u.scale = left->u.u.scale;
+                       decRes.u.u.sign ^= sign;
+                       pdecTmp = right;
+                       right = left;
+                       left = pdecTmp;
+               }
+
+               // *left will need to be multiplied by 10^scale so
+               // it will have the same scale as *right.  We could be
+               // extending it to up to 192 bits of precision.
+               //
+               if (scale <= POWER10_MAX) {
+                       // Scaling won't make it larger than 4 uint32_ts
+                       //
+                       pwr = power10[scale];
+                       DECIMAL_LO64_SET(decTmp, UInt32x32To64(left->v.v.Lo32, pwr));
+                       tmp.int64 = UInt32x32To64(left->v.v.Mid32, pwr);
+                       tmp.int64 += decTmp.v.v.Mid32;
+                       decTmp.v.v.Mid32 = tmp.u.Lo;
+                       decTmp.Hi32 = tmp.u.Hi;
+                       tmp.int64 = UInt32x32To64(left->Hi32, pwr);
+                       tmp.int64 += decTmp.Hi32;
+                       if (tmp.u.Hi == 0) {
+                               // Result fits in 96 bits.  Use standard aligned add.
+                               //
+                               decTmp.Hi32 = tmp.u.Lo;
+                               left = &decTmp;
+                               goto AlignedAdd;
+                       }
+                       num[0] = decTmp.v.v.Lo32;
+                       num[1] = decTmp.v.v.Mid32;
+                       num[2] = tmp.u.Lo;
+                       num[3] = tmp.u.Hi;
+                       hi_prod = 3;
+               }
+               else {
+                       // Have to scale by a bunch.  Move the number to a buffer
+                       // where it has room to grow as it's scaled.
+                       //
+                       num[0] = left->v.v.Lo32;
+                       num[1] = left->v.v.Mid32;
+                       num[2] = left->Hi32;
+                       hi_prod = 2;
+
+                       // Scan for zeros in the upper words.
+                       //
+                       if (num[2] == 0) {
+                               hi_prod = 1;
+                               if (num[1] == 0) {
+                                       hi_prod = 0;
+                                       if (num[0] == 0) {
+                                               // Left arg is zero, return right.
+                                               //
+                                               DECIMAL_LO64_SET(decRes, DECIMAL_LO64_GET(*right));
+                                               decRes.Hi32 = right->Hi32;
+                                               decRes.u.u.sign ^= sign;
+                                               goto RetDec;
+                                       }
+                               }
+                       }
+
+                       // Scaling loop, up to 10^9 at a time.  hi_prod stays updated
+                       // with index of highest non-zero uint32_t.
+                       //
+                       for (; scale > 0; scale -= POWER10_MAX) {
+                               if (scale > POWER10_MAX)
+                                       pwr = ten_to_nine;
+                               else
+                                       pwr = power10[scale];
+
+                               tmp.u.Hi = 0;
+                               for (cur = 0; cur <= hi_prod; cur++) {
+                                       tmp.int64 = UInt32x32To64(num[cur], pwr) + tmp.u.Hi;
+                                       num[cur] = tmp.u.Lo;
+                               }
+
+                               if (tmp.u.Hi != 0)
+                                       // We're extending the result by another uint32_t.
+                                       num[++hi_prod] = tmp.u.Hi;
+                       }
+               }
+
+               // Scaling complete, do the add.  Could be subtract if signs differ.
+               //
+               tmp.u.Lo = num[0];
+               tmp.u.Hi = num[1];
+
+               if (sign) {
+                       // Signs differ, subtract.
+                       //
+                       DECIMAL_LO64_SET(decRes, tmp.int64 - DECIMAL_LO64_GET(*right));
+                       decRes.Hi32 = num[2] - right->Hi32;
+
+                       // Propagate carry
+                       //
+                       if (DECIMAL_LO64_GET(decRes) > tmp.int64) {
+                               decRes.Hi32--;
+                               if (decRes.Hi32 >= num[2])
+                                       goto LongSub;
+                       }
+                       else if (decRes.Hi32 > num[2]) {
+                       LongSub:
+                               // If num has more than 96 bits of precision, then we need to
+                               // carry the subtraction into the higher bits.  If it doesn't,
+                               // then we subtracted in the wrong order and have to flip the 
+                               // sign of the result.
+                               // 
+                               if (hi_prod <= 2)
+                                       goto SignFlip;
+
+                               cur = 3;
+                               while(num[cur++]-- == 0);
+                               if (num[hi_prod] == 0)
+                                       hi_prod--;
+                       }
+               }
+               else {
+                       // Signs the same, add.
+                       //
+                       DECIMAL_LO64_SET(decRes, tmp.int64 + DECIMAL_LO64_GET(*right));
+                       decRes.Hi32 = num[2] + right->Hi32;
+
+                       // Propagate carry
+                       //
+                       if (DECIMAL_LO64_GET(decRes) < tmp.int64) {
+                               decRes.Hi32++;
+                               if (decRes.Hi32 <= num[2])
+                                       goto LongAdd;
+                       }
+                       else if (decRes.Hi32 < num[2]) {
+                       LongAdd:
+                               // Had a carry above 96 bits.
+                               //
+                               cur = 3;
+                               do {
+                                       if (hi_prod < cur) {
+                                               num[cur] = 1;
+                                               hi_prod = cur;
+                                               break;
+                                       }
+                               }while (++num[cur++] == 0);
+                       }
+               }
+
+               if (hi_prod > 2) {
+                       num[0] = decRes.v.v.Lo32;
+                       num[1] = decRes.v.v.Mid32;
+                       num[2] = decRes.Hi32;
+                       decRes.u.u.scale = ScaleResult(num, hi_prod, decRes.u.u.scale);
+                       if (decRes.u.u.scale == (uint8_t) -1)
+                               return MONO_DECIMAL_OVERFLOW;
+
+                       decRes.v.v.Lo32 = num[0];
+                       decRes.v.v.Mid32 = num[1];
+                       decRes.Hi32 = num[2];
+               }
+       }
+
+RetDec:
+       COPYDEC(*result, decRes);
+       // Odd, the Microsoft code does not set result->reserved to zero on this case
+       return MONO_DECIMAL_OK;
+}
+
+// Decimal addition
+static MonoDecimalStatus
+VarDecAdd(MonoDecimal *left, MonoDecimal *right, MonoDecimal *result)
+{
+    return DecAddSub (left, right, result, 0);
+}
+
+// Decimal subtraction
+static MonoDecimalStatus
+VarDecSub(MonoDecimal *left, MonoDecimal *right, MonoDecimal *result)
+{
+    return DecAddSub (left, right, result, DECIMAL_NEG);
+}
+
+/**
+ * IncreaseScale:
+ *
+ * Entry:
+ *   num - Pointer to 96-bit number as array of uint32_ts, least-sig first
+ *   pwr   - Scale factor to multiply by
+ *
+ * Purpose:
+ *   Multiply the two numbers.  The low 96 bits of the result overwrite
+ *   the input.  The last 32 bits of the product are the return value.
+ *
+ * Exit:
+ *   Returns highest 32 bits of product.
+ *
+ * Exceptions:
+ *   None.
+ *
+ */
+static uint32_t
+IncreaseScale(uint32_t *num, uint32_t pwr)
+{
+       SPLIT64   sdlTmp;
+
+       sdlTmp.int64 = UInt32x32To64(num[0], pwr);
+       num[0] = sdlTmp.u.Lo;
+       sdlTmp.int64 = UInt32x32To64(num[1], pwr) + sdlTmp.u.Hi;
+       num[1] = sdlTmp.u.Lo;
+       sdlTmp.int64 = UInt32x32To64(num[2], pwr) + sdlTmp.u.Hi;
+       num[2] = sdlTmp.u.Lo;
+       return sdlTmp.u.Hi;
+}
+
+/**
+ * Div96By64:
+ *
+ * Entry:
+ *   rgulNum - Pointer to 96-bit dividend as array of uint32_ts, least-sig first
+ *   sdlDen  - 64-bit divisor.
+ *
+ * Purpose:
+ *   Do partial divide, yielding 32-bit result and 64-bit remainder.
+ *   Divisor must be larger than upper 64 bits of dividend.
+ *
+ * Exit:
+ *   Remainder overwrites lower 64-bits of dividend.
+ *   Returns quotient.
+ *
+ * Exceptions:
+ *   None.
+ *
+ */
+static uint32_t
+Div96By64(uint32_t *num, SPLIT64 den)
+{
+       SPLIT64 quo;
+       SPLIT64 sdlNum;
+       SPLIT64 prod;
+
+       sdlNum.u.Lo = num[0];
+
+       if (num[2] >= den.u.Hi) {
+               // Divide would overflow.  Assume a quotient of 2^32, and set
+               // up remainder accordingly.  Then jump to loop which reduces
+               // the quotient.
+               //
+               sdlNum.u.Hi = num[1] - den.u.Lo;
+               quo.u.Lo = 0;
+               goto NegRem;
+       }
+
+       // Hardware divide won't overflow
+       //
+       if (num[2] == 0 && num[1] < den.u.Hi)
+               // Result is zero.  Entire dividend is remainder.
+               //
+               return 0;
+
+       // DivMod64by32 returns quotient in Lo, remainder in Hi.
+       //
+       quo.u.Lo = num[1];
+       quo.u.Hi = num[2];
+       quo.int64 = DivMod64by32(quo.int64, den.u.Hi);
+       sdlNum.u.Hi = quo.u.Hi; // remainder
+
+       // Compute full remainder, rem = dividend - (quo * divisor).
+       //
+       prod.int64 = UInt32x32To64(quo.u.Lo, den.u.Lo); // quo * lo divisor
+       sdlNum.int64 -= prod.int64;
+
+       if (sdlNum.int64 > ~prod.int64) {
+       NegRem:
+               // Remainder went negative.  Add divisor back in until it's positive,
+               // a max of 2 times.
+               //
+               do {
+                       quo.u.Lo--;
+                       sdlNum.int64 += den.int64;
+               }while (sdlNum.int64 >= den.int64);
+       }
+
+       num[0] = sdlNum.u.Lo;
+       num[1] = sdlNum.u.Hi;
+       return quo.u.Lo;
+}
+
+/***
+* Div128By96
+*
+* Entry:
+*   rgulNum - Pointer to 128-bit dividend as array of uint32_ts, least-sig first
+*   den - Pointer to 96-bit divisor.
+*
+* Purpose:
+*   Do partial divide, yielding 32-bit result and 96-bit remainder.
+*   Top divisor uint32_t must be larger than top dividend uint32_t.  This is
+*   assured in the initial call because the divisor is normalized
+*   and the dividend can't be.  In subsequent calls, the remainder
+*   is multiplied by 10^9 (max), so it can be no more than 1/4 of
+*   the divisor which is effectively multiplied by 2^32 (4 * 10^9).
+*
+* Exit:
+*   Remainder overwrites lower 96-bits of dividend.
+*   Returns quotient.
+*
+* Exceptions:
+*   None.
+*
+***********************************************************************/
+
+static uint32_t
+Div128By96(uint32_t *num, uint32_t *den)
+{
+       SPLIT64 sdlQuo;
+       SPLIT64 sdlNum;
+       SPLIT64 sdlProd1;
+       SPLIT64 sdlProd2;
+
+       sdlNum.u.Lo = num[0];
+       sdlNum.u.Hi = num[1];
+
+       if (num[3] == 0 && num[2] < den[2]){
+               // Result is zero.  Entire dividend is remainder.
+               //
+               return 0;
+       }
+
+       // DivMod64by32 returns quotient in Lo, remainder in Hi.
+       //
+       sdlQuo.u.Lo = num[2];
+       sdlQuo.u.Hi = num[3];
+       sdlQuo.int64 = DivMod64by32(sdlQuo.int64, den[2]);
+
+       // Compute full remainder, rem = dividend - (quo * divisor).
+       //
+       sdlProd1.int64 = UInt32x32To64(sdlQuo.u.Lo, den[0]); // quo * lo divisor
+       sdlProd2.int64 = UInt32x32To64(sdlQuo.u.Lo, den[1]); // quo * mid divisor
+       sdlProd2.int64 += sdlProd1.u.Hi;
+       sdlProd1.u.Hi = sdlProd2.u.Lo;
+
+       sdlNum.int64 -= sdlProd1.int64;
+       num[2] = sdlQuo.u.Hi - sdlProd2.u.Hi; // sdlQuo.Hi is remainder
+
+       // Propagate carries
+       //
+       if (sdlNum.int64 > ~sdlProd1.int64) {
+               num[2]--;
+               if (num[2] >= ~sdlProd2.u.Hi)
+                       goto NegRem;
+       } else if (num[2] > ~sdlProd2.u.Hi) {
+       NegRem:
+               // Remainder went negative.  Add divisor back in until it's positive,
+               // a max of 2 times.
+               //
+               sdlProd1.u.Lo = den[0];
+               sdlProd1.u.Hi = den[1];
+
+               for (;;) {
+                       sdlQuo.u.Lo--;
+                       sdlNum.int64 += sdlProd1.int64;
+                       num[2] += den[2];
+
+                       if (sdlNum.int64 < sdlProd1.int64) {
+                               // Detected carry. Check for carry out of top
+                               // before adding it in.
+                               //
+                               if (num[2]++ < den[2])
+                                       break;
+                       }
+                       if (num[2] < den[2])
+                               break; // detected carry
+               }
+       }
+
+       num[0] = sdlNum.u.Lo;
+       num[1] = sdlNum.u.Hi;
+       return sdlQuo.u.Lo;
+}
+
+// Add a 32 bit unsigned long to an array of 3 unsigned longs representing a 96 integer
+// Returns FALSE if there is an overflow
+static gboolean
+Add32To96(uint32_t *num, uint32_t value)
+{
+       num[0] += value;
+       if (num[0] < value) {
+               if (++num[1] == 0) {                
+                       if (++num[2] == 0) {                
+                               return FALSE;
+                       }            
+               }
+       }
+       return TRUE;
+}
+
+static void
+OverflowUnscale (uint32_t *quo, gboolean remainder)
+{
+       SPLIT64  sdlTmp;
+       
+       // We have overflown, so load the high bit with a one.
+       sdlTmp.u.Hi = 1u;
+       sdlTmp.u.Lo = quo[2];
+       sdlTmp.int64 = DivMod64by32(sdlTmp.int64, 10u);
+       quo[2] = sdlTmp.u.Lo;
+       sdlTmp.u.Lo = quo[1];
+       sdlTmp.int64 = DivMod64by32(sdlTmp.int64, 10u);
+       quo[1] = sdlTmp.u.Lo;
+       sdlTmp.u.Lo = quo[0];
+       sdlTmp.int64 = DivMod64by32(sdlTmp.int64, 10u);
+       quo[0] = sdlTmp.u.Lo;
+       // The remainder is the last digit that does not fit, so we can use it to work out if we need to round up
+       if ((sdlTmp.u.Hi > 5) || ((sdlTmp.u.Hi == 5) && ( remainder || (quo[0] & 1)))) {
+               Add32To96(quo, 1u);
+       }
+}
+
+// VarDecDiv - Decimal divide
+static MonoDecimalStatus
+VarDecDiv(MonoDecimal *left, MonoDecimal *right, MonoDecimal *result)
+{
+       uint32_t   quo[3];
+       uint32_t   quoSave[3];
+       uint32_t   rem[4];
+       uint32_t   divisor[3];
+       uint32_t   pwr;
+       uint32_t   utmp;
+       uint32_t   utmp1;
+       SPLIT64 sdlTmp;
+       SPLIT64 sdlDivisor;
+       int     scale;
+       int     cur_scale;
+
+       scale = left->u.u.scale - right->u.u.scale;
+       divisor[0] = right->v.v.Lo32;
+       divisor[1] = right->v.v.Mid32;
+       divisor[2] = right->Hi32;
+
+       if (divisor[1] == 0 && divisor[2] == 0) {
+               // Divisor is only 32 bits.  Easy divide.
+               //
+               if (divisor[0] == 0)
+                       return MONO_DECIMAL_DIVBYZERO;
+
+               quo[0] = left->v.v.Lo32;
+               quo[1] = left->v.v.Mid32;
+               quo[2] = left->Hi32;
+               rem[0] = Div96By32(quo, divisor[0]);
+
+               for (;;) {
+                       if (rem[0] == 0) {
+                               if (scale < 0) {
+                                       cur_scale = min(9, -scale);
+                                       goto HaveScale;
+                               }
+                               break;
+                       }
+
+                       // We have computed a quotient based on the natural scale 
+                       // ( <dividend scale> - <divisor scale> ).  We have a non-zero 
+                       // remainder, so now we should increase the scale if possible to 
+                       // include more quotient bits.
+                       // 
+                       // If it doesn't cause overflow, we'll loop scaling by 10^9 and 
+                       // computing more quotient bits as long as the remainder stays 
+                       // non-zero.  If scaling by that much would cause overflow, we'll 
+                       // drop out of the loop and scale by as much as we can.
+                       // 
+                       // Scaling by 10^9 will overflow if quo[2].quo[1] >= 2^32 / 10^9 
+                       // = 4.294 967 296.  So the upper limit is quo[2] == 4 and 
+                       // quo[1] == 0.294 967 296 * 2^32 = 1,266,874,889.7+.  Since 
+                       // quotient bits in quo[0] could be all 1's, then 1,266,874,888 
+                       // is the largest value in quo[1] (when quo[2] == 4) that is 
+                       // assured not to overflow.
+                       // 
+                       cur_scale = SearchScale(quo[2], quo[1], quo [0], scale);
+                       if (cur_scale == 0) {
+                               // No more scaling to be done, but remainder is non-zero.
+                               // Round quotient.
+                               //
+                               utmp = rem[0] << 1;
+                               if (utmp < rem[0] || (utmp >= divisor[0] &&
+                                                     (utmp > divisor[0] || (quo[0] & 1)))) {
+                               RoundUp:
+                                       if (++quo[0] == 0)
+                                               if (++quo[1] == 0)
+                                                       quo[2]++;
+                               }
+                               break;
+                       }
+
+                       if (cur_scale == -1)
+                               return MONO_DECIMAL_OVERFLOW;
+
+               HaveScale:
+                       pwr = power10[cur_scale];
+                       scale += cur_scale;
+
+                       if (IncreaseScale(quo, pwr) != 0)
+                               return MONO_DECIMAL_OVERFLOW;
+
+                       sdlTmp.int64 = DivMod64by32(UInt32x32To64(rem[0], pwr), divisor[0]);
+                       rem[0] = sdlTmp.u.Hi;
+
+                       quo[0] += sdlTmp.u.Lo;
+                       if (quo[0] < sdlTmp.u.Lo) {
+                               if (++quo[1] == 0)
+                                       quo[2]++;
+                       }
+               } // for (;;)
+       }
+       else {
+               // Divisor has bits set in the upper 64 bits.
+               //
+               // Divisor must be fully normalized (shifted so bit 31 of the most 
+               // significant uint32_t is 1).  Locate the MSB so we know how much to 
+               // normalize by.  The dividend will be shifted by the same amount so 
+               // the quotient is not changed.
+               //
+               if (divisor[2] == 0)
+                       utmp = divisor[1];
+               else
+                       utmp = divisor[2];
+
+               cur_scale = 0;
+               if (!(utmp & 0xFFFF0000)) {
+                       cur_scale += 16;
+                       utmp <<= 16;
+               }
+               if (!(utmp & 0xFF000000)) {
+                       cur_scale += 8;
+                       utmp <<= 8;
+               }
+               if (!(utmp & 0xF0000000)) {
+                       cur_scale += 4;
+                       utmp <<= 4;
+               }
+               if (!(utmp & 0xC0000000)) {
+                       cur_scale += 2;
+                       utmp <<= 2;
+               }
+               if (!(utmp & 0x80000000)) {
+                       cur_scale++;
+                       utmp <<= 1;
+               }
+    
+               // Shift both dividend and divisor left by cur_scale.
+               // 
+               sdlTmp.int64 = DECIMAL_LO64_GET(*left) << cur_scale;
+               rem[0] = sdlTmp.u.Lo;
+               rem[1] = sdlTmp.u.Hi;
+               sdlTmp.u.Lo = left->v.v.Mid32;
+               sdlTmp.u.Hi = left->Hi32;
+               sdlTmp.int64 <<= cur_scale;
+               rem[2] = sdlTmp.u.Hi;
+               rem[3] = (left->Hi32 >> (31 - cur_scale)) >> 1;
+
+               sdlDivisor.u.Lo = divisor[0];
+               sdlDivisor.u.Hi = divisor[1];
+               sdlDivisor.int64 <<= cur_scale;
+
+               if (divisor[2] == 0) {
+                       // Have a 64-bit divisor in sdlDivisor.  The remainder
+                       // (currently 96 bits spread over 4 uint32_ts) will be < divisor.
+                       //
+                       sdlTmp.u.Lo = rem[2];
+                       sdlTmp.u.Hi = rem[3];
+
+                       quo[2] = 0;
+                       quo[1] = Div96By64(&rem[1], sdlDivisor);
+                       quo[0] = Div96By64(rem, sdlDivisor);
+
+                       for (;;) {
+                               if ((rem[0] | rem[1]) == 0) {
+                                       if (scale < 0) {
+                                               cur_scale = min(9, -scale);
+                                               goto HaveScale64;
+                                       }
+                                       break;
+                               }
+
+                               // Remainder is non-zero.  Scale up quotient and remainder by 
+                               // powers of 10 so we can compute more significant bits.
+                               // 
+                               cur_scale = SearchScale(quo[2], quo[1], quo [0], scale);
+                               if (cur_scale == 0) {
+                                       // No more scaling to be done, but remainder is non-zero.
+                                       // Round quotient.
+                                       //
+                                       sdlTmp.u.Lo = rem[0];
+                                       sdlTmp.u.Hi = rem[1];
+                                       if (sdlTmp.u.Hi >= 0x80000000 || (sdlTmp.int64 <<= 1) > sdlDivisor.int64 ||
+                                           (sdlTmp.int64 == sdlDivisor.int64 && (quo[0] & 1)))
+                                               goto RoundUp;
+                                       break;
+                               }
+
+                               if (cur_scale == -1)
+                                       return MONO_DECIMAL_OVERFLOW;
+
+                       HaveScale64:
+                               pwr = power10[cur_scale];
+                               scale += cur_scale;
+
+                               if (IncreaseScale(quo, pwr) != 0)
+                                       return MONO_DECIMAL_OVERFLOW;
+
+                               rem[2] = 0;  // rem is 64 bits, IncreaseScale uses 96
+                               IncreaseScale(rem, pwr);
+                               utmp = Div96By64(rem, sdlDivisor);
+                               quo[0] += utmp;
+                               if (quo[0] < utmp)
+                                       if (++quo[1] == 0)
+                                               quo[2]++;
+
+                       } // for (;;)
+               }
+               else {
+                       // Have a 96-bit divisor in divisor[].
+                       //
+                       // Start by finishing the shift left by cur_scale.
+                       //
+                       sdlTmp.u.Lo = divisor[1];
+                       sdlTmp.u.Hi = divisor[2];
+                       sdlTmp.int64 <<= cur_scale;
+                       divisor[0] = sdlDivisor.u.Lo;
+                       divisor[1] = sdlDivisor.u.Hi;
+                       divisor[2] = sdlTmp.u.Hi;
+
+                       // The remainder (currently 96 bits spread over 4 uint32_ts) 
+                       // will be < divisor.
+                       // 
+                       quo[2] = 0;
+                       quo[1] = 0;
+                       quo[0] = Div128By96(rem, divisor);
+
+                       for (;;) {
+                               if ((rem[0] | rem[1] | rem[2]) == 0) {
+                                       if (scale < 0) {
+                                               cur_scale = min(9, -scale);
+                                               goto HaveScale96;
+                                       }
+                                       break;
+                               }
+
+                               // Remainder is non-zero.  Scale up quotient and remainder by 
+                               // powers of 10 so we can compute more significant bits.
+                               // 
+                               cur_scale = SearchScale(quo[2], quo[1], quo [0], scale);
+                               if (cur_scale == 0) {
+                                       // No more scaling to be done, but remainder is non-zero.
+                                       // Round quotient.
+                                       //
+                                       if (rem[2] >= 0x80000000)
+                                               goto RoundUp;
+
+                                       utmp = rem[0] > 0x80000000;
+                                       utmp1 = rem[1] > 0x80000000;
+                                       rem[0] <<= 1;
+                                       rem[1] = (rem[1] << 1) + utmp;
+                                       rem[2] = (rem[2] << 1) + utmp1;
+
+                                       if ((rem[2] > divisor[2] || rem[2] == divisor[2]) &&
+                                           ((rem[1] > divisor[1] || rem[1] == divisor[1]) &&
+                                            ((rem[0] > divisor[0] || rem[0] == divisor[0]) &&
+                                             (quo[0] & 1))))
+                                               goto RoundUp;
+                                       break;
+                               }
+
+                               if (cur_scale == -1)
+                                       return MONO_DECIMAL_OVERFLOW;
+
+                       HaveScale96:
+                               pwr = power10[cur_scale];
+                               scale += cur_scale;
+
+                               if (IncreaseScale(quo, pwr) != 0)
+                                       return MONO_DECIMAL_OVERFLOW;
+
+                               rem[3] = IncreaseScale(rem, pwr);
+                               utmp = Div128By96(rem, divisor);
+                               quo[0] += utmp;
+                               if (quo[0] < utmp)
+                                       if (++quo[1] == 0)
+                                               quo[2]++;
+
+                       } // for (;;)
+               }
+       }
+
+       // No more remainder.  Try extracting any extra powers of 10 we may have 
+       // added.  We do this by trying to divide out 10^8, 10^4, 10^2, and 10^1.
+       // If a division by one of these powers returns a zero remainder, then
+       // we keep the quotient.  If the remainder is not zero, then we restore
+       // the previous value.
+       // 
+       // Since 10 = 2 * 5, there must be a factor of 2 for every power of 10
+       // we can extract.  We use this as a quick test on whether to try a
+       // given power.
+       // 
+       while ((quo[0] & 0xFF) == 0 && scale >= 8) {
+               quoSave[0] = quo[0];
+               quoSave[1] = quo[1];
+               quoSave[2] = quo[2];
+
+               if (Div96By32(quoSave, 100000000) == 0) {
+                       quo[0] = quoSave[0];
+                       quo[1] = quoSave[1];
+                       quo[2] = quoSave[2];
+                       scale -= 8;
+               }
+               else
+                       break;
+       }
+
+       if ((quo[0] & 0xF) == 0 && scale >= 4) {
+               quoSave[0] = quo[0];
+               quoSave[1] = quo[1];
+               quoSave[2] = quo[2];
+
+               if (Div96By32(quoSave, 10000) == 0) {
+                       quo[0] = quoSave[0];
+                       quo[1] = quoSave[1];
+                       quo[2] = quoSave[2];
+                       scale -= 4;
+               }
+       }
+
+       if ((quo[0] & 3) == 0 && scale >= 2) {
+               quoSave[0] = quo[0];
+               quoSave[1] = quo[1];
+               quoSave[2] = quo[2];
+
+               if (Div96By32(quoSave, 100) == 0) {
+                       quo[0] = quoSave[0];
+                       quo[1] = quoSave[1];
+                       quo[2] = quoSave[2];
+                       scale -= 2;
+               }
+       }
+
+       if ((quo[0] & 1) == 0 && scale >= 1) {
+               quoSave[0] = quo[0];
+               quoSave[1] = quo[1];
+               quoSave[2] = quo[2];
+
+               if (Div96By32(quoSave, 10) == 0) {
+                       quo[0] = quoSave[0];
+                       quo[1] = quoSave[1];
+                       quo[2] = quoSave[2];
+                       scale -= 1;
+               }
+       }
+
+       result->Hi32 = quo[2];
+       result->v.v.Mid32 = quo[1];
+       result->v.v.Lo32 = quo[0];
+       result->u.u.scale = scale;
+       result->u.u.sign = left->u.u.sign ^ right->u.u.sign;
+       return MONO_DECIMAL_OK;
+}
+
+// VarDecAbs - Decimal Absolute Value
+static void
+VarDecAbs (MonoDecimal *pdecOprd, MonoDecimal *result)
+{
+       COPYDEC(*result, *pdecOprd);
+       result->u.u.sign &= ~DECIMAL_NEG;
+       // Microsoft does not set reserved here
+}
+
+// VarDecFix - Decimal Fix (chop to integer)
+static void
+VarDecFix (MonoDecimal *pdecOprd, MonoDecimal *result)
+{
+       DecFixInt(result, pdecOprd);
+}
+
+
+// VarDecInt - Decimal Int (round down to integer)
+static void
+VarDecInt (MonoDecimal *pdecOprd, MonoDecimal *result)
+{
+       if (DecFixInt(result, pdecOprd) != 0 && (result->u.u.sign & DECIMAL_NEG)) {
+               // We have chopped off a non-zero amount from a negative value.  Since
+               // we round toward -infinity, we must increase the integer result by
+               // 1 to make it more negative.  This will never overflow because
+               // in order to have a remainder, we must have had a non-zero scale factor.
+               // Our scale factor is back to zero now.
+               //
+               DECIMAL_LO64_SET(*result, DECIMAL_LO64_GET(*result) + 1);
+               if (DECIMAL_LO64_GET(*result) == 0)
+                       result->Hi32++;
+       }
+}
+
+
+// VarDecNeg - Decimal Negate
+static void
+VarDecNeg (MonoDecimal *pdecOprd, MonoDecimal *result)
+{
+       COPYDEC(*result, *pdecOprd);
+       // Microsoft does not set result->reserved to zero on this case.
+       result->u.u.sign ^= DECIMAL_NEG;
+}
+
+//
+// Returns: MONO_DECIMAL_INVALID_ARGUMENT, MONO_DECIMAL_OK
+//
+static MonoDecimalStatus
+VarDecRound(MonoDecimal *input, int cDecimals, MonoDecimal *result)
+{
+       uint32_t num[3];
+       uint32_t rem;
+       uint32_t sticky;
+       uint32_t pwr;
+       int scale;
+
+       if (cDecimals < 0)
+               return MONO_DECIMAL_INVALID_ARGUMENT;
+
+       scale = input->u.u.scale - cDecimals;
+       if (scale > 0) {
+               num[0] = input->v.v.Lo32;
+               num[1] = input->v.v.Mid32;
+               num[2] = input->Hi32;
+               result->u.u.sign = input->u.u.sign;
+               rem = sticky = 0;
+
+               do {
+                       sticky |= rem;
+                       if (scale > POWER10_MAX)
+                               pwr = ten_to_nine;
+                       else
+                               pwr = power10[scale];
+
+                       rem = Div96By32(num, pwr);
+                       scale -= 9;
+               }while (scale > 0);
+
+               // Now round.  rem has last remainder, sticky has sticky bits.
+               // To do IEEE rounding, we add LSB of result to sticky bits so
+               // either causes round up if remainder * 2 == last divisor.
+               //
+               sticky |= num[0] & 1;
+               rem = (rem << 1) + (sticky != 0);
+               if (pwr < rem &&
+                   ++num[0] == 0 &&
+                   ++num[1] == 0
+                       )
+                       ++num[2];
+
+               result->v.v.Lo32 = num[0];
+               result->v.v.Mid32 = num[1];
+               result->Hi32 = num[2];
+               result->u.u.scale = cDecimals;
+               return MONO_DECIMAL_OK;
+       }
+
+       COPYDEC(*result, *input);
+       // Odd, the Microsoft source does not set the result->reserved to zero here.
+       return MONO_DECIMAL_OK;
+}
+
+//
+// Returns MONO_DECIMAL_OK or MONO_DECIMAL_OVERFLOW
+static MonoDecimalStatus
+VarDecFromR4 (float input, MonoDecimal* result)
+{
+       int         exp;    // number of bits to left of binary point
+       int         power;
+       uint32_t       mant;
+       double      dbl;
+       SPLIT64     sdlLo;
+       SPLIT64     sdlHi;
+       int         lmax, cur;  // temps used during scale reduction
+       
+       // The most we can scale by is 10^28, which is just slightly more
+       // than 2^93.  So a float with an exponent of -94 could just
+       // barely reach 0.5, but smaller exponents will always round to zero.
+       //
+       if ((exp = ((SingleStructure *)&input)->exp - SNGBIAS) < -94 ) {
+               DECIMAL_SETZERO(*result);
+               return MONO_DECIMAL_OK;
+       }
+
+       if (exp > 96)
+               return MONO_DECIMAL_OVERFLOW;
+
+       // Round the input to a 7-digit integer.  The R4 format has
+       // only 7 digits of precision, and we want to keep garbage digits
+       // out of the Decimal were making.
+       //
+       // Calculate max power of 10 input value could have by multiplying 
+       // the exponent by log10(2).  Using scaled integer multiplcation, 
+       // log10(2) * 2 ^ 16 = .30103 * 65536 = 19728.3.
+       //
+       dbl = fabs(input);
+       power = 6 - ((exp * 19728) >> 16);
+       
+       if (power >= 0) {
+               // We have less than 7 digits, scale input up.
+               //
+               if (power > DECMAX)
+                       power = DECMAX;
+               
+               dbl = dbl * double_power10[power];
+       } else {
+               if (power != -1 || dbl >= 1E7)
+                       dbl = dbl / fnDblPower10(-power);
+               else 
+                       power = 0; // didn't scale it
+       }
+       
+       g_assert (dbl < 1E7);
+       if (dbl < 1E6 && power < DECMAX) {
+               dbl *= 10;
+               power++;
+               g_assert(dbl >= 1E6);
+       }
+       
+       // Round to integer
+       //
+       mant = (int32_t)dbl;
+       dbl -= (double)mant;  // difference between input & integer
+       if ( dbl > 0.5 || (dbl == 0.5 && (mant & 1)))
+               mant++;
+       
+       if (mant == 0) {
+               DECIMAL_SETZERO(*result);
+               return MONO_DECIMAL_OK;
+       }
+       
+       if (power < 0) {
+               // Add -power factors of 10, -power <= (29 - 7) = 22.
+               //
+               power = -power;
+               if (power < 10) {
+                       sdlLo.int64 = UInt32x32To64(mant, (uint32_t)long_power10[power]);
+                       
+                       DECIMAL_LO32(*result) = sdlLo.u.Lo;
+                       DECIMAL_MID32(*result) = sdlLo.u.Hi;
+                       DECIMAL_HI32(*result) = 0;
+               } else {
+                       // Have a big power of 10.
+                       //
+                       if (power > 18) {
+                               sdlLo.int64 = UInt32x32To64(mant, (uint32_t)long_power10[power - 18]);
+                               sdlLo.int64 = UInt64x64To128(sdlLo, ten_to_eighteen, &sdlHi.int64);
+                               
+                               if (sdlHi.u.Hi != 0)
+                                       return MONO_DECIMAL_OVERFLOW;
+                       }
+                       else {
+                               sdlLo.int64 = UInt32x32To64(mant, (uint32_t)long_power10[power - 9]);
+                               sdlHi.int64 = UInt32x32To64(ten_to_nine, sdlLo.u.Hi);
+                               sdlLo.int64 = UInt32x32To64(ten_to_nine, sdlLo.u.Lo);
+                               sdlHi.int64 += sdlLo.u.Hi;
+                               sdlLo.u.Hi = sdlHi.u.Lo;
+                               sdlHi.u.Lo = sdlHi.u.Hi;
+                       }
+                       DECIMAL_LO32(*result) = sdlLo.u.Lo;
+                       DECIMAL_MID32(*result) = sdlLo.u.Hi;
+                       DECIMAL_HI32(*result) = sdlHi.u.Lo;
+               }
+               DECIMAL_SCALE(*result) = 0;
+       } else {
+               // Factor out powers of 10 to reduce the scale, if possible.
+               // The maximum number we could factor out would be 6.  This
+               // comes from the fact we have a 7-digit number, and the
+               // MSD must be non-zero -- but the lower 6 digits could be
+               // zero.  Note also the scale factor is never negative, so
+               // we can't scale by any more than the power we used to
+               // get the integer.
+               //
+               // DivMod32by32 returns the quotient in Lo, the remainder in Hi.
+               //
+               lmax = min(power, 6);
+               
+               // lmax is the largest power of 10 to try, lmax <= 6.
+               // We'll try powers 4, 2, and 1 unless they're too big.
+               //
+               for (cur = 4; cur > 0; cur >>= 1)
+               {
+                       if (cur > lmax)
+                               continue;
+                       
+                       sdlLo.int64 = DivMod32by32(mant, (uint32_t)long_power10[cur]);
+                       
+                       if (sdlLo.u.Hi == 0) {
+                               mant = sdlLo.u.Lo;
+                               power -= cur;
+                               lmax -= cur;
+                       }
+               }
+               DECIMAL_LO32(*result) = mant;
+               DECIMAL_MID32(*result) = 0;
+               DECIMAL_HI32(*result) = 0;
+               DECIMAL_SCALE(*result) = power;
+       }
+       
+       DECIMAL_SIGN(*result) = (char)((SingleStructure *)&input)->sign << 7;
+       return MONO_DECIMAL_OK;
+}
+
+//
+// Returns MONO_DECIMAL_OK or MONO_DECIMAL_OVERFLOW
+static MonoDecimalStatus
+VarDecFromR8 (double input, MonoDecimal *result)
+{
+       int         exp;    // number of bits to left of binary point
+       int         power;  // power-of-10 scale factor
+       SPLIT64     sdlMant;
+       SPLIT64     sdlLo;
+       double      dbl;
+       int         lmax, cur;  // temps used during scale reduction
+       uint32_t       pwr_cur;
+       uint32_t       quo;
+       
+       
+       // The most we can scale by is 10^28, which is just slightly more
+       // than 2^93.  So a float with an exponent of -94 could just
+       // barely reach 0.5, but smaller exponents will always round to zero.
+       //
+       if ((exp = ((DoubleStructure *)&input)->u.exp - DBLBIAS) < -94) {
+               DECIMAL_SETZERO(*result);
+               return MONO_DECIMAL_OK;
+       }
+
+       if (exp > 96)
+               return MONO_DECIMAL_OVERFLOW;
+
+       // Round the input to a 15-digit integer.  The R8 format has
+       // only 15 digits of precision, and we want to keep garbage digits
+       // out of the Decimal were making.
+       //
+       // Calculate max power of 10 input value could have by multiplying 
+       // the exponent by log10(2).  Using scaled integer multiplcation, 
+       // log10(2) * 2 ^ 16 = .30103 * 65536 = 19728.3.
+       //
+       dbl = fabs(input);
+       power = 14 - ((exp * 19728) >> 16);
+       
+       if (power >= 0) {
+               // We have less than 15 digits, scale input up.
+               //
+               if (power > DECMAX)
+                       power = DECMAX;
+
+               dbl = dbl * double_power10[power];
+       } else {
+               if (power != -1 || dbl >= 1E15)
+                       dbl = dbl / fnDblPower10(-power);
+               else 
+                       power = 0; // didn't scale it
+       }
+
+       g_assert (dbl < 1E15);
+       if (dbl < 1E14 && power < DECMAX) {
+               dbl *= 10;
+               power++;
+               g_assert(dbl >= 1E14);
+       }
+
+       // Round to int64
+       //
+       sdlMant.int64 = (int64_t)dbl;
+       dbl -= (double)(int64_t)sdlMant.int64;  // dif between input & integer
+       if ( dbl > 0.5 || (dbl == 0.5 && (sdlMant.u.Lo & 1)))
+               sdlMant.int64++;
+
+       if (sdlMant.int64 == 0) {
+               DECIMAL_SETZERO(*result);
+               return MONO_DECIMAL_OK;
+       }
+
+       if (power < 0) {
+               // Add -power factors of 10, -power <= (29 - 15) = 14.
+               //
+               power = -power;
+               if (power < 10) {
+                       sdlLo.int64 = UInt32x32To64(sdlMant.u.Lo, (uint32_t)long_power10[power]);
+                       sdlMant.int64 = UInt32x32To64(sdlMant.u.Hi, (uint32_t)long_power10[power]);
+                       sdlMant.int64 += sdlLo.u.Hi;
+                       sdlLo.u.Hi = sdlMant.u.Lo;
+                       sdlMant.u.Lo = sdlMant.u.Hi;
+               }
+               else {
+                       // Have a big power of 10.
+                       //
+                       g_assert(power <= 14);
+                       sdlLo.int64 = UInt64x64To128(sdlMant, sdl_power10[power-10], &sdlMant.int64);
+
+                       if (sdlMant.u.Hi != 0)
+                               return MONO_DECIMAL_OVERFLOW;
+               }
+               DECIMAL_LO32(*result) = sdlLo.u.Lo;
+               DECIMAL_MID32(*result) = sdlLo.u.Hi;
+               DECIMAL_HI32(*result) = sdlMant.u.Lo;
+               DECIMAL_SCALE(*result) = 0;
+       }
+       else {
+               // Factor out powers of 10 to reduce the scale, if possible.
+               // The maximum number we could factor out would be 14.  This
+               // comes from the fact we have a 15-digit number, and the 
+               // MSD must be non-zero -- but the lower 14 digits could be 
+               // zero.  Note also the scale factor is never negative, so
+               // we can't scale by any more than the power we used to
+               // get the integer.
+               //
+               // DivMod64by32 returns the quotient in Lo, the remainder in Hi.
+               //
+               lmax = min(power, 14);
+
+               // lmax is the largest power of 10 to try, lmax <= 14.
+               // We'll try powers 8, 4, 2, and 1 unless they're too big.
+               //
+               for (cur = 8; cur > 0; cur >>= 1)
+               {
+                       if (cur > lmax)
+                               continue;
+
+                       pwr_cur = (uint32_t)long_power10[cur];
+
+                       if (sdlMant.u.Hi >= pwr_cur) {
+                               // Overflow if we try to divide in one step.
+                               //
+                               sdlLo.int64 = DivMod64by32(sdlMant.u.Hi, pwr_cur);
+                               quo = sdlLo.u.Lo;
+                               sdlLo.u.Lo = sdlMant.u.Lo;
+                               sdlLo.int64 = DivMod64by32(sdlLo.int64, pwr_cur);
+                       }
+                       else {
+                               quo = 0;
+                               sdlLo.int64 = DivMod64by32(sdlMant.int64, pwr_cur);
+                       }
+
+                       if (sdlLo.u.Hi == 0) {
+                               sdlMant.u.Hi = quo;
+                               sdlMant.u.Lo = sdlLo.u.Lo;
+                               power -= cur;
+                               lmax -= cur;
+                       }
+               }
+
+               DECIMAL_HI32(*result) = 0;
+               DECIMAL_SCALE(*result) = power;
+               DECIMAL_LO32(*result) = sdlMant.u.Lo;
+               DECIMAL_MID32(*result) = sdlMant.u.Hi;
+       }
+
+       DECIMAL_SIGN(*result) = (char)((DoubleStructure *)&input)->u.sign << 7;
+       return MONO_DECIMAL_OK;
+}
+
+// Returns: MONO_DECIMAL_OK, or MONO_DECIMAL_INVALID_ARGUMENT
+static MonoDecimalStatus
+VarR8FromDec(MonoDecimal *input, double *result)
+{
+       SPLIT64  tmp;
+       double   dbl;
+       
+       if (DECIMAL_SCALE(*input) > DECMAX || (DECIMAL_SIGN(*input) & ~DECIMAL_NEG) != 0)
+               return MONO_DECIMAL_INVALID_ARGUMENT;
+       
+       tmp.u.Lo = DECIMAL_LO32(*input);
+       tmp.u.Hi = DECIMAL_MID32(*input);
+       
+       if ((int32_t)DECIMAL_MID32(*input) < 0)
+               dbl = (ds2to64.dbl + (double)(int64_t)tmp.int64 +
+                      (double)DECIMAL_HI32(*input) * ds2to64.dbl) / fnDblPower10(DECIMAL_SCALE(*input)) ;
+       else
+               dbl = ((double)(int64_t)tmp.int64 +
+                      (double)DECIMAL_HI32(*input) * ds2to64.dbl) / fnDblPower10(DECIMAL_SCALE(*input));
+       
+       if (DECIMAL_SIGN(*input))
+               dbl = -dbl;
+       
+       *result = dbl;
+       return MONO_DECIMAL_OK;
+}
+
+// Returns: MONO_DECIMAL_OK, or MONO_DECIMAL_INVALID_ARGUMENT
+static MonoDecimalStatus
+VarR4FromDec(MonoDecimal *input, float *result)
+{
+       double   dbl;
+       
+       if (DECIMAL_SCALE(*input) > DECMAX || (DECIMAL_SIGN(*input) & ~DECIMAL_NEG) != 0)
+               return MONO_DECIMAL_INVALID_ARGUMENT;
+       
+       // Can't overflow; no errors possible.
+       //
+       VarR8FromDec(input, &dbl);
+       *result = (float)dbl;
+       return MONO_DECIMAL_OK;
+}
+
+static void
+DecShiftLeft(MonoDecimal* value)
+{
+    g_assert(value != NULL);
+
+    unsigned int c0 = DECIMAL_LO32(*value) & 0x80000000? 1: 0;
+    unsigned int c1 = DECIMAL_MID32(*value) & 0x80000000? 1: 0;
+    DECIMAL_LO32(*value) <<= 1;
+    DECIMAL_MID32(*value) = DECIMAL_MID32(*value) << 1 | c0;
+    DECIMAL_HI32(*value) = DECIMAL_HI32(*value) << 1 | c1;
+}
+
+static int
+D32AddCarry(uint32_t* value, uint32_t i)
+{
+    uint32_t v = *value;
+    uint32_t sum = v + i;
+    *value = sum;
+    return sum < v || sum < i? 1: 0;
+}
+
+static void
+DecAdd(MonoDecimal *value, MonoDecimal* d)
+{
+       g_assert(value != NULL && d != NULL);
+
+       if (D32AddCarry(&DECIMAL_LO32(*value), DECIMAL_LO32(*d))) {
+               if (D32AddCarry(&DECIMAL_MID32(*value), 1)) {
+                       D32AddCarry(&DECIMAL_HI32(*value), 1);
+               }
+       }
+       if (D32AddCarry(&DECIMAL_MID32(*value), DECIMAL_MID32(*d))) {
+               D32AddCarry(&DECIMAL_HI32(*value), 1);
+       }
+       D32AddCarry(&DECIMAL_HI32(*value), DECIMAL_HI32(*d));
+}
+
+static void
+DecMul10(MonoDecimal* value)
+{
+       g_assert (value != NULL);
+
+       MonoDecimal d = *value;
+       DecShiftLeft(value);
+       DecShiftLeft(value);
+       DecAdd(value, &d);
+       DecShiftLeft(value);
+}
+
+static void
+DecAddInt32(MonoDecimal* value, unsigned int i)
+{
+       g_assert(value != NULL);
+
+       if (D32AddCarry(&DECIMAL_LO32(*value), i)) {
+               if (D32AddCarry(&DECIMAL_MID32(*value), 1)) {
+                       D32AddCarry(&DECIMAL_HI32(*value), 1);
+               }
+       }
+}
+
+MonoDecimalCompareResult
+mono_decimal_compare (MonoDecimal *left, MonoDecimal *right)
+{
+       uint32_t   left_sign;
+       uint32_t   right_sign;
+
+       // First check signs and whether either are zero.  If both are
+       // non-zero and of the same sign, just use subtraction to compare.
+       //
+       left_sign = left->v.v.Lo32 | left->v.v.Mid32 | left->Hi32;
+       right_sign = right->v.v.Lo32 | right->v.v.Mid32 | right->Hi32;
+       if (left_sign != 0)
+               left_sign = (left->u.u.sign & DECIMAL_NEG) | 1;
+
+       if (right_sign != 0)
+               right_sign = (right->u.u.sign & DECIMAL_NEG) | 1;
+
+       // left_sign & right_sign have values 1, 0, or 0x81 depending on if the left/right
+       // operand is +, 0, or -.
+       //
+       if (left_sign == right_sign) {
+               if (left_sign == 0)    // both are zero
+                       return MONO_DECIMAL_CMP_EQ; // return equal
+
+               MonoDecimal result;
+
+               DecAddSub(left, right, &result, DECIMAL_NEG);
+               if (DECIMAL_LO64_GET(result) == 0 && result.Hi32 == 0)
+                       return MONO_DECIMAL_CMP_EQ;
+               if (result.u.u.sign & DECIMAL_NEG)
+                       return MONO_DECIMAL_CMP_LT;
+               return MONO_DECIMAL_CMP_GT;
+       }
+
+       //
+       // Signs are different.  Used signed byte compares
+       //
+       if ((char)left_sign > (char)right_sign)
+               return MONO_DECIMAL_CMP_GT;
+       return MONO_DECIMAL_CMP_LT;
+}
+
+void
+mono_decimal_init_single (MonoDecimal *_this, float value)
+{
+       if (VarDecFromR4 (value, _this) == MONO_DECIMAL_OVERFLOW)
+               mono_raise_exception (mono_get_exception_overflow ());
+       _this->reserved = 0;
+}
+
+void
+mono_decimal_init_double (MonoDecimal *_this, double value)
+{
+       if (VarDecFromR8 (value, _this) == MONO_DECIMAL_OVERFLOW)
+               mono_raise_exception (mono_get_exception_overflow ());
+       _this->reserved = 0;
+}
+
+void
+mono_decimal_floor (MonoDecimal *d)
+{
+       MonoDecimal decRes;
+
+       VarDecInt(d, &decRes);
+       
+       // copy decRes into d
+       COPYDEC(*d, decRes);
+       d->reserved = 0;
+       FC_GC_POLL ();
+}
+
+int32_t
+mono_decimal_get_hash_code (MonoDecimal *d)
+{
+       double dbl;
+
+       if (VarR8FromDec(d, &dbl) != MONO_DECIMAL_OK)
+               return 0;
+       
+       if (dbl == 0.0) {
+               // Ensure 0 and -0 have the same hash code
+               return 0;
+       }
+       // conversion to double is lossy and produces rounding errors so we mask off the lowest 4 bits
+       // 
+       // For example these two numerically equal decimals with different internal representations produce
+       // slightly different results when converted to double:
+       //
+       // decimal a = new decimal(new int[] { 0x76969696, 0x2fdd49fa, 0x409783ff, 0x00160000 });
+       //                     => (decimal)1999021.176470588235294117647000000000 => (double)1999021.176470588
+       // decimal b = new decimal(new int[] { 0x3f0f0f0f, 0x1e62edcc, 0x06758d33, 0x00150000 }); 
+       //                     => (decimal)1999021.176470588235294117647000000000 => (double)1999021.1764705882
+       //
+       return ((((int *)&dbl)[0]) & 0xFFFFFFF0) ^ ((int *)&dbl)[1];
+       
+}
+
+void
+mono_decimal_multiply (MonoDecimal *d1, MonoDecimal *d2)
+{
+       MonoDecimal decRes;
+
+       MonoDecimalStatus status = VarDecMul(d1, d2, &decRes);
+       if (status != MONO_DECIMAL_OK)
+               mono_raise_exception (mono_get_exception_overflow ());
+
+       COPYDEC(*d1, decRes);
+       d1->reserved = 0;
+
+       FC_GC_POLL ();
+}
+
+void
+mono_decimal_round (MonoDecimal *d, int32_t decimals)
+{
+       MonoDecimal decRes;
+       
+       // GC is only triggered for throwing, no need to protect result 
+       if (decimals < 0 || decimals > 28)
+               mono_raise_exception (mono_get_exception_argument_out_of_range ("d"));
+
+       VarDecRound(d, decimals, &decRes);
+
+       // copy decRes into d
+       COPYDEC(*d, decRes);
+       d->reserved = 0;
+
+       FC_GC_POLL();
+}
+
+void
+mono_decimal_tocurrency (MonoDecimal *decimal)
+{
+       // TODO
+}
+
+double
+mono_decimal_to_double (MonoDecimal d)
+{
+       double result = 0.0;
+       // Note: this can fail if the input is an invalid decimal, but for compatibility we should return 0
+       VarR8FromDec(&d, &result);
+       return result;
+}
+
+int32_t
+mono_decimal_to_int32 (MonoDecimal d)
+{
+       MonoDecimal result;
+       
+       // The following can not return an error, it only returns INVALID_ARG if the decimals is < 0
+       VarDecRound(&d, 0, &result);
+       
+       if (DECIMAL_SCALE(result) != 0) {
+               d = result;
+               VarDecFix (&d, &result);
+       }
+       
+       if (DECIMAL_HI32(result) == 0 && DECIMAL_MID32(result) == 0) {
+               int32_t i = DECIMAL_LO32(result);
+               if ((int16_t)DECIMAL_SIGNSCALE(result) >= 0) {
+                       if (i >= 0)
+                               return i;
+               } else {
+                       i = -i;
+                       if (i <= 0)
+                               return i;
+               }
+       }
+       
+       mono_raise_exception (mono_get_exception_overflow ());
+       // Not reachable
+       return 0;
+}
+
+float
+mono_decimal_to_float (MonoDecimal d)
+{
+       float result = 0.0f;
+       // Note: this can fail if the input is an invalid decimal, but for compatibility we should return 0
+       VarR4FromDec(&d, &result);
+       return result;
+}
+
+void
+mono_decimal_truncate (MonoDecimal *d)
+{
+       MonoDecimal decRes;
+
+       VarDecFix(d, &decRes);
+
+       // copy decRes into d
+       COPYDEC(*d, decRes);
+       d->reserved = 0;
+       FC_GC_POLL();
+}
+
+void
+mono_decimal_addsub (MonoDecimal *left, MonoDecimal *right, uint8_t sign)
+{
+       MonoDecimal result, decTmp;
+       MonoDecimal *pdecTmp, *leftOriginal;
+       uint32_t    num[6], pwr;
+       int         scale, hi_prod, cur;
+       SPLIT64     sdlTmp;
+       
+       g_assert(sign == 0 || sign == DECIMAL_NEG);
+
+       leftOriginal = left;
+
+       sign ^= (DECIMAL_SIGN(*right) ^ DECIMAL_SIGN(*left)) & DECIMAL_NEG;
+
+       if (DECIMAL_SCALE(*right) == DECIMAL_SCALE(*left)) {
+               // Scale factors are equal, no alignment necessary.
+               //
+               DECIMAL_SIGNSCALE(result) = DECIMAL_SIGNSCALE(*left);
+
+       AlignedAdd:
+               if (sign) {
+                       // Signs differ - subtract
+                       //
+                       DECIMAL_LO64_SET(result, (DECIMAL_LO64_GET(*left) - DECIMAL_LO64_GET(*right)));
+                       DECIMAL_HI32(result) = DECIMAL_HI32(*left) - DECIMAL_HI32(*right);
+
+                       // Propagate carry
+                       //
+                       if (DECIMAL_LO64_GET(result) > DECIMAL_LO64_GET(*left)) {
+                               DECIMAL_HI32(result)--;
+                               if (DECIMAL_HI32(result) >= DECIMAL_HI32(*left))
+                                       goto SignFlip;
+                       } else if (DECIMAL_HI32(result) > DECIMAL_HI32(*left)) {
+                               // Got negative result.  Flip its sign.
+                               // 
+                       SignFlip:
+                               DECIMAL_LO64_SET(result, -(int64_t)DECIMAL_LO64_GET(result));
+                               DECIMAL_HI32(result) = ~DECIMAL_HI32(result);
+                               if (DECIMAL_LO64_GET(result) == 0)
+                                       DECIMAL_HI32(result)++;
+                               DECIMAL_SIGN(result) ^= DECIMAL_NEG;
+                       }
+
+               } else {
+                       // Signs are the same - add
+                       //
+                       DECIMAL_LO64_SET(result, (DECIMAL_LO64_GET(*left) + DECIMAL_LO64_GET(*right)));
+                       DECIMAL_HI32(result) = DECIMAL_HI32(*left) + DECIMAL_HI32(*right);
+
+                       // Propagate carry
+                       //
+                       if (DECIMAL_LO64_GET(result) < DECIMAL_LO64_GET(*left)) {
+                               DECIMAL_HI32(result)++;
+                               if (DECIMAL_HI32(result) <= DECIMAL_HI32(*left))
+                                       goto AlignedScale;
+                       } else if (DECIMAL_HI32(result) < DECIMAL_HI32(*left)) {
+                       AlignedScale:
+                               // The addition carried above 96 bits.  Divide the result by 10,
+                               // dropping the scale factor.
+                               // 
+                               if (DECIMAL_SCALE(result) == 0)
+                                       mono_raise_exception (mono_get_exception_overflow ());
+                               DECIMAL_SCALE(result)--;
+
+                               sdlTmp.u.Lo = DECIMAL_HI32(result);
+                               sdlTmp.u.Hi = 1;
+                               sdlTmp.int64 = DivMod64by32(sdlTmp.int64, 10);
+                               DECIMAL_HI32(result) = sdlTmp.u.Lo;
+
+                               sdlTmp.u.Lo = DECIMAL_MID32(result);
+                               sdlTmp.int64 = DivMod64by32(sdlTmp.int64, 10);
+                               DECIMAL_MID32(result) = sdlTmp.u.Lo;
+
+                               sdlTmp.u.Lo = DECIMAL_LO32(result);
+                               sdlTmp.int64 = DivMod64by32(sdlTmp.int64, 10);
+                               DECIMAL_LO32(result) = sdlTmp.u.Lo;
+
+                               // See if we need to round up.
+                               //
+                               if (sdlTmp.u.Hi >= 5 && (sdlTmp.u.Hi > 5 || (DECIMAL_LO32(result) & 1))) {
+                                       DECIMAL_LO64_SET(result, DECIMAL_LO64_GET(result)+1);
+                                       if (DECIMAL_LO64_GET(result) == 0)
+                                               DECIMAL_HI32(result)++;
+                               }
+                       }
+               }
+       } else {
+               // Scale factors are not equal.  Assume that a larger scale
+               // factor (more decimal places) is likely to mean that number
+               // is smaller.  Start by guessing that the right operand has
+               // the larger scale factor.  The result will have the larger
+               // scale factor.
+               //
+               DECIMAL_SCALE(result) = DECIMAL_SCALE(*right);  // scale factor of "smaller"
+               DECIMAL_SIGN(result) = DECIMAL_SIGN(*left);    // but sign of "larger"
+               scale = DECIMAL_SCALE(result)- DECIMAL_SCALE(*left);
+
+               if (scale < 0) {
+                       // Guessed scale factor wrong. Swap operands.
+                       //
+                       scale = -scale;
+                       DECIMAL_SCALE(result) = DECIMAL_SCALE(*left);
+                       DECIMAL_SIGN(result) ^= sign;
+                       pdecTmp = right;
+                       right = left;
+                       left = pdecTmp;
+               }
+
+               // *left will need to be multiplied by 10^scale so
+               // it will have the same scale as *right.  We could be
+               // extending it to up to 192 bits of precision.
+               //
+               if (scale <= POWER10_MAX) {
+                       // Scaling won't make it larger than 4 uint32_ts
+                       //
+                       pwr = power10[scale];
+                       DECIMAL_LO64_SET(decTmp, UInt32x32To64(DECIMAL_LO32(*left), pwr));
+                       sdlTmp.int64 = UInt32x32To64(DECIMAL_MID32(*left), pwr);
+                       sdlTmp.int64 += DECIMAL_MID32(decTmp);
+                       DECIMAL_MID32(decTmp) = sdlTmp.u.Lo;
+                       DECIMAL_HI32(decTmp) = sdlTmp.u.Hi;
+                       sdlTmp.int64 = UInt32x32To64(DECIMAL_HI32(*left), pwr);
+                       sdlTmp.int64 += DECIMAL_HI32(decTmp);
+                       if (sdlTmp.u.Hi == 0) {
+                               // Result fits in 96 bits.  Use standard aligned add.
+                               //
+                               DECIMAL_HI32(decTmp) = sdlTmp.u.Lo;
+                               left = &decTmp;
+                               goto AlignedAdd;
+                       }
+                       num[0] = DECIMAL_LO32(decTmp);
+                       num[1] = DECIMAL_MID32(decTmp);
+                       num[2] = sdlTmp.u.Lo;
+                       num[3] = sdlTmp.u.Hi;
+                       hi_prod = 3;
+               } else {
+                       // Have to scale by a bunch.  Move the number to a buffer
+                       // where it has room to grow as it's scaled.
+                       //
+                       num[0] = DECIMAL_LO32(*left);
+                       num[1] = DECIMAL_MID32(*left);
+                       num[2] = DECIMAL_HI32(*left);
+                       hi_prod = 2;
+
+                       // Scan for zeros in the upper words.
+                       //
+                       if (num[2] == 0) {
+                               hi_prod = 1;
+                               if (num[1] == 0) {
+                                       hi_prod = 0;
+                                       if (num[0] == 0) {
+                                               // Left arg is zero, return right.
+                                               //
+                                               DECIMAL_LO64_SET(result, DECIMAL_LO64_GET(*right));
+                                               DECIMAL_HI32(result) = DECIMAL_HI32(*right);
+                                               DECIMAL_SIGN(result) ^= sign;
+                                               goto RetDec;
+                                       }
+                               }
+                       }
+
+                       // Scaling loop, up to 10^9 at a time.  hi_prod stays updated
+                       // with index of highest non-zero uint32_t.
+                       //
+                       for (; scale > 0; scale -= POWER10_MAX) {
+                               if (scale > POWER10_MAX)
+                                       pwr = ten_to_nine;
+                               else
+                                       pwr = power10[scale];
+
+                               sdlTmp.u.Hi = 0;
+                               for (cur = 0; cur <= hi_prod; cur++) {
+                                       sdlTmp.int64 = UInt32x32To64(num[cur], pwr) + sdlTmp.u.Hi;
+                                       num[cur] = sdlTmp.u.Lo;
+                               }
+
+                               if (sdlTmp.u.Hi != 0)
+                                       // We're extending the result by another uint32_t.
+                                       num[++hi_prod] = sdlTmp.u.Hi;
+                       }
+               }
+
+               // Scaling complete, do the add.  Could be subtract if signs differ.
+               //
+               sdlTmp.u.Lo = num[0];
+               sdlTmp.u.Hi = num[1];
+
+               if (sign) {
+                       // Signs differ, subtract.
+                       //
+                       DECIMAL_LO64_SET(result, (sdlTmp.int64 - DECIMAL_LO64_GET(*right)));
+                       DECIMAL_HI32(result) = num[2] - DECIMAL_HI32(*right);
+
+                       // Propagate carry
+                       //
+                       if (DECIMAL_LO64_GET(result) > sdlTmp.int64) {
+                               DECIMAL_HI32(result)--;
+                               if (DECIMAL_HI32(result) >= num[2])
+                                       goto LongSub;
+                       } else if (DECIMAL_HI32(result) > num[2]) {
+                       LongSub:
+                               // If num has more than 96 bits of precision, then we need to 
+                               // carry the subtraction into the higher bits.  If it doesn't, 
+                               // then we subtracted in the wrong order and have to flip the 
+                               // sign of the result.
+                               // 
+                               if (hi_prod <= 2)
+                                       goto SignFlip;
+
+                               cur = 3;
+                               while(num[cur++]-- == 0);
+                               if (num[hi_prod] == 0)
+                                       hi_prod--;
+                       }
+               } else {
+                       // Signs the same, add.
+                       //
+                       DECIMAL_LO64_SET(result, (sdlTmp.int64 + DECIMAL_LO64_GET(*right)));
+                       DECIMAL_HI32(result) = num[2] + DECIMAL_HI32(*right);
+
+                       // Propagate carry
+                       //
+                       if (DECIMAL_LO64_GET(result) < sdlTmp.int64) {
+                               DECIMAL_HI32(result)++;
+                               if (DECIMAL_HI32(result) <= num[2])
+                                       goto LongAdd;
+                       } else if (DECIMAL_HI32(result) < num[2]) {
+                       LongAdd:
+                               // Had a carry above 96 bits.
+                               //
+                               cur = 3;
+                               do {
+                                       if (hi_prod < cur) {
+                                               num[cur] = 1;
+                                               hi_prod = cur;
+                                               break;
+                                       }
+                               }while (++num[cur++] == 0);
+                       }
+               }
+
+               if (hi_prod > 2) {
+                       num[0] = DECIMAL_LO32(result);
+                       num[1] = DECIMAL_MID32(result);
+                       num[2] = DECIMAL_HI32(result);
+                       DECIMAL_SCALE(result) = (uint8_t)ScaleResult(num, hi_prod, DECIMAL_SCALE(result));
+                       if (DECIMAL_SCALE(result) == (uint8_t)-1)
+                               mono_raise_exception (mono_get_exception_overflow ());
+
+                       DECIMAL_LO32(result) = num[0];
+                       DECIMAL_MID32(result) = num[1];
+                       DECIMAL_HI32(result) = num[2];
+               }
+       }
+
+RetDec:
+       left = leftOriginal;
+       COPYDEC(*left, result);
+       left->reserved = 0;
+}
+
+void
+mono_decimal_divide (MonoDecimal *left, MonoDecimal *right)
+{
+       uint32_t quo[3], quo_save[3],rem[4], divisor[3];
+       uint32_t pwr, tmp, tmp1;
+       SPLIT64  sdlTmp, sdlDivisor;
+       int      scale, cur_scale;
+       gboolean unscale;
+
+       scale = DECIMAL_SCALE(*left) - DECIMAL_SCALE(*right);
+       unscale = FALSE;
+       divisor[0] = DECIMAL_LO32(*right);
+       divisor[1] = DECIMAL_MID32(*right);
+       divisor[2] = DECIMAL_HI32(*right);
+
+       if (divisor[1] == 0 && divisor[2] == 0) {
+               // Divisor is only 32 bits.  Easy divide.
+               //
+               if (divisor[0] == 0)
+                       mono_raise_exception (mono_get_exception_divide_by_zero ());
+
+               quo[0] = DECIMAL_LO32(*left);
+               quo[1] = DECIMAL_MID32(*left);
+               quo[2] = DECIMAL_HI32(*left);
+               rem[0] = Div96By32(quo, divisor[0]);
+
+               for (;;) {
+                       if (rem[0] == 0) {
+                               if (scale < 0) {
+                                       cur_scale = min(9, -scale);
+                                       goto HaveScale;
+                               }
+                               break;
+                       }
+                       // We need to unscale if and only if we have a non-zero remainder
+                       unscale = TRUE;
+
+                       // We have computed a quotient based on the natural scale 
+                       // ( <dividend scale> - <divisor scale> ).  We have a non-zero 
+                       // remainder, so now we should increase the scale if possible to 
+                       // include more quotient bits.
+                       // 
+                       // If it doesn't cause overflow, we'll loop scaling by 10^9 and 
+                       // computing more quotient bits as long as the remainder stays 
+                       // non-zero.  If scaling by that much would cause overflow, we'll 
+                       // drop out of the loop and scale by as much as we can.
+                       // 
+                       // Scaling by 10^9 will overflow if quo[2].quo[1] >= 2^32 / 10^9 
+                       // = 4.294 967 296.  So the upper limit is quo[2] == 4 and 
+                       // quo[1] == 0.294 967 296 * 2^32 = 1,266,874,889.7+.  Since 
+                       // quotient bits in quo[0] could be all 1's, then 1,266,874,888 
+                       // is the largest value in quo[1] (when quo[2] == 4) that is 
+                       // assured not to overflow.
+                       // 
+                       cur_scale = SearchScale(quo[2], quo[1], quo[0], scale);
+                       if (cur_scale == 0) {
+                               // No more scaling to be done, but remainder is non-zero.
+                               // Round quotient.
+                               //
+                               tmp = rem[0] << 1;
+                               if (tmp < rem[0] || (tmp >= divisor[0] &&
+                                                          (tmp > divisor[0] || (quo[0] & 1)))) {
+                               RoundUp:
+                                       if (!Add32To96(quo, 1)) {
+                                               if (scale == 0) 
+                                                       mono_raise_exception (mono_get_exception_overflow ());
+                                               scale--;
+                                               OverflowUnscale(quo, TRUE);
+                                               break;
+                                       }      
+                               }
+                               break;
+                       }
+
+                       if (cur_scale < 0) 
+                               mono_raise_exception (mono_get_exception_overflow ());
+
+               HaveScale:
+                       pwr = power10[cur_scale];
+                       scale += cur_scale;
+
+                       if (IncreaseScale(quo, pwr) != 0) 
+                               mono_raise_exception (mono_get_exception_overflow ());
+
+
+                       sdlTmp.int64 = DivMod64by32(UInt32x32To64(rem[0], pwr), divisor[0]);
+                       rem[0] = sdlTmp.u.Hi;
+
+                       if (!Add32To96(quo, sdlTmp.u.Lo)) {
+                               if (scale == 0)
+                                       mono_raise_exception (mono_get_exception_overflow ());                                  
+                               scale--;
+                               OverflowUnscale(quo, (rem[0] != 0));
+                               break;
+                       }
+               } // for (;;)
+       } else {
+               // Divisor has bits set in the upper 64 bits.
+               //
+               // Divisor must be fully normalized (shifted so bit 31 of the most 
+               // significant uint32_t is 1).  Locate the MSB so we know how much to 
+               // normalize by.  The dividend will be shifted by the same amount so 
+               // the quotient is not changed.
+               //
+               if (divisor[2] == 0)
+                       tmp = divisor[1];
+               else
+                       tmp = divisor[2];
+
+               cur_scale = 0;
+               if (!(tmp & 0xFFFF0000)) {
+                       cur_scale += 16;
+                       tmp <<= 16;
+               }
+               if (!(tmp & 0xFF000000)) {
+                       cur_scale += 8;
+                       tmp <<= 8;
+               }
+               if (!(tmp & 0xF0000000)) {
+                       cur_scale += 4;
+                       tmp <<= 4;
+               }
+               if (!(tmp & 0xC0000000)) {
+                       cur_scale += 2;
+                       tmp <<= 2;
+               }
+               if (!(tmp & 0x80000000)) {
+                       cur_scale++;
+                       tmp <<= 1;
+               }
+    
+               // Shift both dividend and divisor left by cur_scale.
+               // 
+               sdlTmp.int64 = DECIMAL_LO64_GET(*left) << cur_scale;
+               rem[0] = sdlTmp.u.Lo;
+               rem[1] = sdlTmp.u.Hi;
+               sdlTmp.u.Lo = DECIMAL_MID32(*left);
+               sdlTmp.u.Hi = DECIMAL_HI32(*left);
+               sdlTmp.int64 <<= cur_scale;
+               rem[2] = sdlTmp.u.Hi;
+               rem[3] = (DECIMAL_HI32(*left) >> (31 - cur_scale)) >> 1;
+
+               sdlDivisor.u.Lo = divisor[0];
+               sdlDivisor.u.Hi = divisor[1];
+               sdlDivisor.int64 <<= cur_scale;
+
+               if (divisor[2] == 0) {
+                       // Have a 64-bit divisor in sdlDivisor.  The remainder 
+                       // (currently 96 bits spread over 4 uint32_ts) will be < divisor.
+                       // 
+                       sdlTmp.u.Lo = rem[2];
+                       sdlTmp.u.Hi = rem[3];
+
+                       quo[2] = 0;
+                       quo[1] = Div96By64(&rem[1], sdlDivisor);
+                       quo[0] = Div96By64(rem, sdlDivisor);
+
+                       for (;;) {
+                               if ((rem[0] | rem[1]) == 0) {
+                                       if (scale < 0) {
+                                               cur_scale = min(9, -scale);
+                                               goto HaveScale64;
+                                       }
+                                       break;
+                               }
+
+                               // We need to unscale if and only if we have a non-zero remainder
+                               unscale = TRUE;
+
+                               // Remainder is non-zero.  Scale up quotient and remainder by 
+                               // powers of 10 so we can compute more significant bits.
+                               // 
+                               cur_scale = SearchScale(quo[2], quo[1], quo[0], scale);
+                               if (cur_scale == 0) {
+                                       // No more scaling to be done, but remainder is non-zero.
+                                       // Round quotient.
+                                       //
+                                       sdlTmp.u.Lo = rem[0];
+                                       sdlTmp.u.Hi = rem[1];
+                                       if (sdlTmp.u.Hi >= 0x80000000 || (sdlTmp.int64 <<= 1) > sdlDivisor.int64 ||
+                                           (sdlTmp.int64 == sdlDivisor.int64 && (quo[0] & 1)))
+                                               goto RoundUp;
+                                       break;
+                               }
+
+                               if (cur_scale < 0) 
+                                       mono_raise_exception (mono_get_exception_overflow ());
+
+                       HaveScale64:
+                               pwr = power10[cur_scale];
+                               scale += cur_scale;
+
+                               if (IncreaseScale(quo, pwr) != 0)
+                                       mono_raise_exception (mono_get_exception_overflow ());
+                               
+                               rem[2] = 0;  // rem is 64 bits, IncreaseScale uses 96
+                               IncreaseScale(rem, pwr);
+                               tmp = Div96By64(rem, sdlDivisor);
+                               if (!Add32To96(quo, tmp)) {
+                                       if (scale == 0) 
+                                               mono_raise_exception (mono_get_exception_overflow ());
+                                       scale--;
+                                       OverflowUnscale(quo, (rem[0] != 0 || rem[1] != 0));
+                                       break;
+                               }      
+
+                       } // for (;;)
+               } else {
+                       // Have a 96-bit divisor in divisor[].
+                       //
+                       // Start by finishing the shift left by cur_scale.
+                       //
+                       sdlTmp.u.Lo = divisor[1];
+                       sdlTmp.u.Hi = divisor[2];
+                       sdlTmp.int64 <<= cur_scale;
+                       divisor[0] = sdlDivisor.u.Lo;
+                       divisor[1] = sdlDivisor.u.Hi;
+                       divisor[2] = sdlTmp.u.Hi;
+
+                       // The remainder (currently 96 bits spread over 4 uint32_ts) 
+                       // will be < divisor.
+                       // 
+                       quo[2] = 0;
+                       quo[1] = 0;
+                       quo[0] = Div128By96(rem, divisor);
+
+                       for (;;) {
+                               if ((rem[0] | rem[1] | rem[2]) == 0) {
+                                       if (scale < 0) {
+                                               cur_scale = min(9, -scale);
+                                               goto HaveScale96;
+                                       }
+                                       break;
+                               }
+
+                               // We need to unscale if and only if we have a non-zero remainder
+                               unscale = TRUE;
+
+                               // Remainder is non-zero.  Scale up quotient and remainder by 
+                               // powers of 10 so we can compute more significant bits.
+                               // 
+                               cur_scale = SearchScale(quo[2], quo[1], quo[0], scale);
+                               if (cur_scale == 0) {
+                                       // No more scaling to be done, but remainder is non-zero.
+                                       // Round quotient.
+                                       //
+                                       if (rem[2] >= 0x80000000)
+                                               goto RoundUp;
+
+                                       tmp = rem[0] > 0x80000000;
+                                       tmp1 = rem[1] > 0x80000000;
+                                       rem[0] <<= 1;
+                                       rem[1] = (rem[1] << 1) + tmp;
+                                       rem[2] = (rem[2] << 1) + tmp1;
+
+                                       if (rem[2] > divisor[2] || (rem[2] == divisor[2] && (rem[1] > divisor[1] || rem[1] == (divisor[1] && (rem[0] > divisor[0] || (rem[0] == divisor[0] && (quo[0] & 1)))))))
+                                               goto RoundUp;
+                                       break;
+                               }
+
+                               if (cur_scale < 0) 
+                                       mono_raise_exception (mono_get_exception_overflow ());
+                               
+                       HaveScale96:
+                               pwr = power10[cur_scale];
+                               scale += cur_scale;
+
+                               if (IncreaseScale(quo, pwr) != 0) 
+                                       mono_raise_exception (mono_get_exception_overflow ());
+                               
+                               rem[3] = IncreaseScale(rem, pwr);
+                               tmp = Div128By96(rem, divisor);
+                               if (!Add32To96(quo, tmp)) {
+                                       if (scale == 0)
+                                               mono_raise_exception (mono_get_exception_overflow ());
+                                       
+                                       scale--;
+                                       OverflowUnscale(quo, (rem[0] != 0 || rem[1] != 0 || rem[2] != 0 || rem[3] != 0));
+                                       break;
+                               }      
+
+                       } // for (;;)
+               }
+       }
+
+       // We need to unscale if and only if we have a non-zero remainder
+       if (unscale) {
+               // Try extracting any extra powers of 10 we may have 
+               // added.  We do this by trying to divide out 10^8, 10^4, 10^2, and 10^1.
+               // If a division by one of these powers returns a zero remainder, then
+               // we keep the quotient.  If the remainder is not zero, then we restore
+               // the previous value.
+               // 
+               // Since 10 = 2 * 5, there must be a factor of 2 for every power of 10
+               // we can extract.  We use this as a quick test on whether to try a
+               // given power.
+               // 
+               while ((quo[0] & 0xFF) == 0 && scale >= 8) {
+                       quo_save[0] = quo[0];
+                       quo_save[1] = quo[1];
+                       quo_save[2] = quo[2];
+
+                       if (Div96By32(quo_save, 100000000) == 0) {
+                               quo[0] = quo_save[0];
+                               quo[1] = quo_save[1];
+                               quo[2] = quo_save[2];
+                               scale -= 8;
+                       } else
+                               break;
+               }
+
+               if ((quo[0] & 0xF) == 0 && scale >= 4) {
+                       quo_save[0] = quo[0];
+                       quo_save[1] = quo[1];
+                       quo_save[2] = quo[2];
+
+                       if (Div96By32(quo_save, 10000) == 0) {
+                               quo[0] = quo_save[0];
+                               quo[1] = quo_save[1];
+                               quo[2] = quo_save[2];
+                               scale -= 4;
+                       }
+               }
+
+               if ((quo[0] & 3) == 0 && scale >= 2) {
+                       quo_save[0] = quo[0];
+                       quo_save[1] = quo[1];
+                       quo_save[2] = quo[2];
+
+                       if (Div96By32(quo_save, 100) == 0) {
+                               quo[0] = quo_save[0];
+                               quo[1] = quo_save[1];
+                               quo[2] = quo_save[2];
+                               scale -= 2;
+                       }
+               }
+
+               if ((quo[0] & 1) == 0 && scale >= 1) {
+                       quo_save[0] = quo[0];
+                       quo_save[1] = quo[1];
+                       quo_save[2] = quo[2];
+
+                       if (Div96By32(quo_save, 10) == 0) {
+                               quo[0] = quo_save[0];
+                               quo[1] = quo_save[1];
+                               quo[2] = quo_save[2];
+                               scale -= 1;
+                       }
+               }
+       }
+
+       DECIMAL_SIGN(*left) = DECIMAL_SIGN(*left) ^ DECIMAL_SIGN(*right);
+       DECIMAL_HI32(*left) = quo[2];
+       DECIMAL_MID32(*left) = quo[1];
+       DECIMAL_LO32(*left) = quo[0];
+       DECIMAL_SCALE(*left) = (uint8_t)scale;
+       left->reserved = 0;
+
+}
+
+#define DECIMAL_PRECISION 29
+#define NUMBER_MAXDIGITS 50
+typedef struct  {
+       int32_t precision;
+       int32_t scale;
+       int32_t sign;
+       uint16_t digits[NUMBER_MAXDIGITS + 1];
+       uint16_t* allDigits;
+} CLRNumber;
+
+int
+mono_decimal_from_number (void *from, MonoDecimal *target)
+{
+       CLRNumber *number = (CLRNumber *) from;
+       g_assert(number != NULL);
+       g_assert(target != NULL);
+
+       MonoDecimal d;
+       d.reserved = 0;
+       DECIMAL_SIGNSCALE(d) = 0;
+       DECIMAL_HI32(d) = 0;
+       DECIMAL_LO32(d) = 0;
+       DECIMAL_MID32(d) = 0;
+       uint16_t* p = number->digits;
+       g_assert(p != NULL);
+       int e = number->scale;
+       if (!*p) {
+               // To avoid risking an app-compat issue with pre 4.5 (where some app was illegally using Reflection to examine the internal scale bits), we'll only force
+               // the scale to 0 if the scale was previously positive
+               if (e > 0) {
+                       e = 0;
+               }
+       } else {
+               if (e > DECIMAL_PRECISION) return 0;
+               while ((e > 0 || (*p && e > -28)) && (DECIMAL_HI32(d) < 0x19999999 || (DECIMAL_HI32(d) == 0x19999999 && (DECIMAL_MID32(d) < 0x99999999 || (DECIMAL_MID32(d) == 0x99999999 && (DECIMAL_LO32(d) < 0x99999999 || (DECIMAL_LO32(d) == 0x99999999 && *p <= '5'))))))) {
+                       DecMul10(&d);
+                       if (*p)
+                               DecAddInt32(&d, *p++ - '0');
+                       e--;
+               }
+               if (*p++ >= '5') {
+                       gboolean round = TRUE;
+                       if (*(p-1) == '5' && *(p-2) % 2 == 0) { // Check if previous digit is even, only if the when we are unsure whether hows to do Banker's rounding
+                               // For digits > 5 we will be roundinp up anyway.
+                               int count = 20; // Look at the next 20 digits to check to round
+                               while (*p == '0' && count != 0) {
+                                       p++;
+                                       count--;
+                               }
+                               if (*p == '\0' || count == 0) 
+                                       round = FALSE;// Do nothing
+                       }
+                       
+                       if (round) {
+                               DecAddInt32(&d, 1);
+                               if ((DECIMAL_HI32(d) | DECIMAL_MID32(d) | DECIMAL_LO32(d)) == 0) {
+                                       DECIMAL_HI32(d) = 0x19999999;
+                                       DECIMAL_MID32(d) = 0x99999999;
+                                       DECIMAL_LO32(d) = 0x9999999A;
+                                       e++;
+                               }
+                       }
+               }
+       }
+       if (e > 0)
+               return 0;
+       if (e <= -DECIMAL_PRECISION) {
+               // Parsing a large scale zero can give you more precision than fits in the decimal.
+               // This should only happen for actual zeros or very small numbers that round to zero.
+               DECIMAL_SIGNSCALE(d) = 0;
+               DECIMAL_HI32(d) = 0;
+               DECIMAL_LO32(d) = 0;
+               DECIMAL_MID32(d) = 0;
+               DECIMAL_SCALE(d) = (DECIMAL_PRECISION - 1);
+       } else {
+               DECIMAL_SCALE(d) = (uint8_t)(-e);
+       }
+       
+       DECIMAL_SIGN(d) = number->sign? DECIMAL_NEG: 0;
+       *target = d;
+       return 1;
+}
+
+
+#endif
diff --git a/mono/metadata/decimal-ms.h b/mono/metadata/decimal-ms.h
new file mode 100644 (file)
index 0000000..d60dd15
--- /dev/null
@@ -0,0 +1,61 @@
+#ifndef __MONO_DECIMAL_MS_H__
+#define __MONO_DECIMAL_MS_H__
+typedef struct tagDECIMAL {
+    // Decimal.cs treats the first two shorts as one long
+    // And they seriable the data so we need to little endian
+    // seriliazation
+    // The wReserved overlaps with Variant's vt member
+#if G_BYTE_ORDER != G_LITTLE_ENDIAN
+    union {
+        struct {
+            uint8_t sign;
+            uint8_t scale;
+        } u;
+        uint16_t signscale;
+    } u;
+    uint16_t reserved;
+#else
+    uint16_t reserved;
+    union {
+        struct {
+            uint8_t scale;
+            uint8_t sign;
+        } u;
+        uint16_t signscale;
+    } u;
+#endif
+    uint32_t Hi32;
+    union {
+        struct {
+            uint32_t Lo32;
+            uint32_t Mid32;
+        } v;
+        uint64_t Lo64;
+    } v;
+} MonoDecimal;
+
+typedef enum {
+       MONO_DECIMAL_CMP_LT=-1,
+       MONO_DECIMAL_CMP_EQ,
+       MONO_DECIMAL_CMP_GT
+} MonoDecimalCompareResult;
+       
+MonoDecimalCompareResult
+        mono_decimal_compare (MonoDecimal *left, MonoDecimal *right) MONO_INTERNAL;
+
+void    mono_decimal_init_single   (MonoDecimal *_this, float value) MONO_INTERNAL;
+void    mono_decimal_init_double   (MonoDecimal *_this, double value) MONO_INTERNAL;
+void    mono_decimal_floor         (MonoDecimal *d) MONO_INTERNAL;
+int32_t mono_decimal_get_hash_code (MonoDecimal *d) MONO_INTERNAL;
+void    mono_decimal_multiply      (MonoDecimal *d1, MonoDecimal *d2) MONO_INTERNAL;
+void    mono_decimal_round         (MonoDecimal *d, int32_t decimals) MONO_INTERNAL;
+void    mono_decimal_tocurrency    (MonoDecimal *decimal) MONO_INTERNAL;
+double  mono_decimal_to_double     (MonoDecimal d) MONO_INTERNAL;
+int32_t mono_decimal_to_int32      (MonoDecimal d) MONO_INTERNAL;
+float   mono_decimal_to_float      (MonoDecimal d) MONO_INTERNAL;
+void    mono_decimal_truncate      (MonoDecimal *d) MONO_INTERNAL;
+void    mono_decimal_addsub        (MonoDecimal *left, MonoDecimal *right, uint8_t sign);
+void    mono_decimal_divide        (MonoDecimal *left, MonoDecimal *right);
+int     mono_decimal_from_number   (void *from, MonoDecimal *target);
+
+#endif
diff --git a/mono/metadata/decimal.c b/mono/metadata/decimal.c
deleted file mode 100644 (file)
index 3bbd005..0000000
+++ /dev/null
@@ -1,1575 +0,0 @@
-/* 
- * decimal.c
- *
- * conversions and numerical operations for the c# type System.Decimal
- *
- * Author: Martin Weindel (martin.weindel@t-online.de)
- *
- * (C) 2001 by Martin Weindel
- */
-
-/*
- * machine dependent configuration for 
- * CSharp value type System.Decimal
- */
-
-#include "config.h"
-#include <mono/metadata/exception.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-#ifdef HAVE_MEMORY_H
-#include <memory.h>
-#endif
-#ifdef _MSC_VER
-#include <intrin.h>
-#endif
-
-#ifndef DISABLE_DECIMAL
-
-/* needed for building microsoft dll */
-#ifdef __GNUC__
-#define DECINLINE __inline
-#else
-#define DECINLINE
-#endif
-
-#define LIT_GUINT32(x) x
-#define LIT_GUINT64(x) x##LL
-
-
-/* we need a UInt64 type => guint64 */
-#include <glib.h>
-
-#include "decimal.h"
-
-/*
- * Deal with anon union support.
- */
-#define ss32 u.ss32
-#define signscale u.signscale
-
-/* debugging stuff */
-#ifdef _DEBUG
-#include <assert.h>
-#define PRECONDITION(flag)  assert(flag)
-#define POSTCONDITION(flag)  assert(flag)
-#define TEST(flag)  assert(flag)
-#define INVARIANT_TEST(p) assert(p->signscale.scale >= 0 && p->signscale.scale <= DECIMAL_MAX_SCALE \
-       && p->signscale.reserved1 == 0 && p->signscale.reserved2 == 0);
-#else
-#define PRECONDITION(flag)  
-#define POSTCONDITION(flag)  
-#define TEST(flag)
-#define INVARIANT_TEST(p)
-#endif /*#ifdef _DEBUG*/
-
-#define DECIMAL_MAX_SCALE 28
-#define DECIMAL_MAX_INTFACTORS 9
-
-#define DECIMAL_SUCCESS 0
-#define DECIMAL_FINISHED 1
-#define DECIMAL_OVERFLOW 2
-#define DECIMAL_INVALID_CHARACTER 2
-#define DECIMAL_INTERNAL_ERROR 3
-#define DECIMAL_INVALID_BITS 4
-#define DECIMAL_DIVIDE_BY_ZERO 5
-#define DECIMAL_BUFFER_OVERFLOW 6
-
-/* some MACROS */
-#define DECINIT(src) memset(src, 0, sizeof(decimal_repr))
-
-#define DECCOPY(dest, src) memcpy(dest, src, sizeof(decimal_repr))
-
-#define DECSWAP(p1, p2, h) \
-       h = (p1)->ss32; (p1)->ss32 = (p2)->ss32; (p2)->ss32 = h; \
-       h = (p1)->hi32; (p1)->hi32 = (p2)->hi32; (p2)->hi32 = h; \
-       h = (p1)->mid32; (p1)->mid32 = (p2)->mid32; (p2)->mid32 = h; \
-       h = (p1)->lo32; (p1)->lo32 = (p2)->lo32; (p2)->lo32 = h;
-
-#define DECNEGATE(p1) (p1)->signscale.sign = 1 - (p1)->signscale.sign
-
-#define LIT_DEC128(hi, mid, lo) { (((guint64)mid)<<32 | lo), hi }
-
-#define DECTO128(pd, lo, hi) \
-       lo = (((guint64)(pd)->mid32) << 32) | (pd)->lo32; \
-    hi = (pd)->hi32;
-
-/* some constants */
-#define LIT_GUINT32_HIGHBIT LIT_GUINT32(0x80000000)
-#define LIT_GUINT64_HIGHBIT LIT_GUINT64(0x8000000000000000)
-
-#define DECIMAL_LOG_NEGINF -1000
-
-static const guint32 constantsDecadeInt32Factors[DECIMAL_MAX_INTFACTORS+1] = {
-    LIT_GUINT32(1), LIT_GUINT32(10), LIT_GUINT32(100), LIT_GUINT32(1000), 
-    LIT_GUINT32(10000), LIT_GUINT32(100000), LIT_GUINT32(1000000), 
-    LIT_GUINT32(10000000), LIT_GUINT32(100000000), LIT_GUINT32(1000000000)
-};
-
-typedef struct {
-    guint64 lo;
-    guint64 hi;
-} dec128_repr;
-
-static const dec128_repr dec128decadeFactors[DECIMAL_MAX_SCALE+1] = {
-    LIT_DEC128( 0, 0, 1u), /* == 1 */
-    LIT_DEC128( 0, 0, 10u), /* == 10 */
-    LIT_DEC128( 0, 0, 100u), /* == 100 */
-    LIT_DEC128( 0, 0, 1000u), /* == 1e3m */
-    LIT_DEC128( 0, 0, 10000u), /* == 1e4m */
-    LIT_DEC128( 0, 0, 100000u), /* == 1e5m */
-    LIT_DEC128( 0, 0, 1000000u), /* == 1e6m */
-    LIT_DEC128( 0, 0, 10000000u), /* == 1e7m */
-    LIT_DEC128( 0, 0, 100000000u), /* == 1e8m */
-    LIT_DEC128( 0, 0, 1000000000u), /* == 1e9m */
-    LIT_DEC128( 0, 2u, 1410065408u), /* == 1e10m */
-    LIT_DEC128( 0, 23u, 1215752192u), /* == 1e11m */
-    LIT_DEC128( 0, 232u, 3567587328u), /* == 1e12m */
-    LIT_DEC128( 0, 2328u, 1316134912u), /* == 1e13m */
-    LIT_DEC128( 0, 23283u, 276447232u), /* == 1e14m */
-    LIT_DEC128( 0, 232830u, 2764472320u), /* == 1e15m */
-    LIT_DEC128( 0, 2328306u, 1874919424u), /* == 1e16m */
-    LIT_DEC128( 0, 23283064u, 1569325056u), /* == 1e17m */
-    LIT_DEC128( 0, 232830643u, 2808348672u), /* == 1e18m */
-    LIT_DEC128( 0, 2328306436u, 2313682944u), /* == 1e19m */
-    LIT_DEC128( 5u, 1808227885u, 1661992960u), /* == 1e20m */
-    LIT_DEC128( 54u, 902409669u, 3735027712u), /* == 1e21m */
-    LIT_DEC128( 542u, 434162106u, 2990538752u), /* == 1e22m */
-    LIT_DEC128( 5421u, 46653770u, 4135583744u), /* == 1e23m */
-    LIT_DEC128( 54210u, 466537709u, 2701131776u), /* == 1e24m */
-    LIT_DEC128( 542101u, 370409800u, 1241513984u), /* == 1e25m */
-    LIT_DEC128( 5421010u, 3704098002u, 3825205248u), /* == 1e26m */
-    LIT_DEC128( 54210108u, 2681241660u, 3892314112u), /* == 1e27m */
-    LIT_DEC128( 542101086u, 1042612833u, 268435456u), /* == 1e28m */
-};
-
-/* 192 bit addition: c = a + b 
-   addition is modulo 2**128, any carry is lost */
-DECINLINE static void add128(guint64 alo, guint64 ahi,
-                             guint64 blo, guint64 bhi,
-                             guint64* pclo, guint64* pchi)
-{
-    alo += blo; 
-    if (alo < blo) ahi++; /* carry */
-    ahi += bhi;
-
-    *pclo = alo;
-    *pchi = ahi;
-}
-
-/* 128 bit subtraction: c = a - b
-   subtraction is modulo 2**128, any carry is lost */
-DECINLINE static void sub128(guint64 alo, guint64 ahi,
-                             guint64 blo, guint64 bhi,
-                             guint64* pclo, guint64* pchi)
-{
-    guint64 clo, chi;
-
-    clo = alo - blo;
-    chi = ahi - bhi;
-    if (alo < blo) chi--; /* borrow */
-
-    *pclo = clo;
-    *pchi = chi;
-}
-
-/* 192 bit addition: c = a + b 
-   addition is modulo 2**192, any carry is lost */
-DECINLINE static void add192(guint64 alo, guint64 ami, guint64 ahi,
-                             guint64 blo, guint64 bmi, guint64 bhi,
-                             guint64* pclo, guint64* pcmi, guint64* pchi)
-{
-    alo += blo; 
-    if (alo < blo) { /* carry low */
-        ami++;
-        if (ami == 0) ahi++; /* carry mid */
-    }
-    ami += bmi;
-    if (ami < bmi) ahi++; /* carry mid */
-    ahi += bhi;
-    *pclo = alo;
-    *pcmi = ami;
-    *pchi = ahi;
-}
-
-/* 192 bit subtraction: c = a - b
-   subtraction is modulo 2**192, any carry is lost */
-DECINLINE static void sub192(guint64 alo, guint64 ami, guint64 ahi,
-                             guint64 blo, guint64 bmi, guint64 bhi,
-                             guint64* pclo, guint64* pcmi, guint64* pchi)
-{
-    guint64 clo, cmi, chi;
-
-    clo = alo - blo;
-    cmi = ami - bmi;
-    chi = ahi - bhi;
-    if (alo < blo) {
-        if (cmi == 0) chi--; /* borrow mid */
-        cmi--; /* borrow low */
-    }
-    if (ami < bmi) chi--; /* borrow mid */
-    *pclo = clo;
-    *pcmi = cmi;
-    *pchi = chi;
-}
-
-/* multiplication c(192bit) = a(96bit) * b(96bit) */
-DECINLINE static void mult96by96to192(guint32 alo, guint32 ami, guint32 ahi,
-                                      guint32 blo, guint32 bmi, guint32 bhi,
-                                      guint64* pclo, guint64* pcmi, guint64* pchi)
-{
-    guint64 a, b, c, d;
-    guint32 h0, h1, h2, h3, h4, h5;
-    int carry0, carry1;
-
-    a = ((guint64)alo) * blo;
-    h0 = (guint32) a;
-
-    a >>= 32; carry0 = 0;
-    b = ((guint64)alo) * bmi;
-    c = ((guint64)ami) * blo;
-    a += b; if (a < b) carry0++;
-    a += c; if (a < c) carry0++;
-    h1 = (guint32) a;
-
-    a >>= 32; carry1 = 0;
-    b = ((guint64)alo) * bhi;
-    c = ((guint64)ami) * bmi;
-    d = ((guint64)ahi) * blo;
-    a += b; if (a < b) carry1++;
-    a += c; if (a < c) carry1++;
-    a += d; if (a < d) carry1++;
-    h2 = (guint32) a;
-
-    a >>= 32; a += carry0; carry0 = 0;
-    b = ((guint64)ami) * bhi;
-    c = ((guint64)ahi) * bmi;
-    a += b; if (a < b) carry0++;
-    a += c; if (a < c) carry0++;
-    h3 = (guint32) a;
-
-    a >>= 32; a += carry1;
-    b = ((guint64)ahi) * bhi;
-    a += b;
-    h4 = (guint32) a;
-
-    a >>= 32; a += carry0;
-    h5 = (guint32) a;
-
-    *pclo = ((guint64)h1) << 32 | h0;
-    *pcmi = ((guint64)h3) << 32 | h2;
-    *pchi = ((guint64)h5) << 32 | h4;
-}
-
-/* multiplication c(128bit) = a(96bit) * b(32bit) */
-DECINLINE static void mult96by32to128(guint32 alo, guint32 ami, guint32 ahi,
-                                      guint32 factor,
-                                      guint64* pclo, guint64* pchi)
-{
-    guint64 a;
-    guint32 h0, h1;
-
-    a = ((guint64)alo) * factor;
-    h0 = (guint32) a;
-
-    a >>= 32;
-    a += ((guint64)ami) * factor;
-    h1 = (guint32) a;
-
-    a >>= 32;
-    a += ((guint64)ahi) * factor;
-
-    *pclo = ((guint64)h1) << 32 | h0;
-    *pchi = a;
-}
-
-/* multiplication c(128bit) *= b(32bit) */
-DECINLINE static int mult128by32(guint64* pclo, guint64* pchi, guint32 factor, int roundBit)
-{
-    guint64 a;
-    guint32 h0, h1;
-
-    a = ((guint64)(guint32)(*pclo)) * factor;
-    if (roundBit) a += factor / 2;
-    h0 = (guint32) a;
-
-    a >>= 32;
-    a += (*pclo >> 32) * factor;
-    h1 = (guint32) a;
-
-    *pclo = ((guint64)h1) << 32 | h0;
-
-    a >>= 32;
-    a += ((guint64)(guint32)(*pchi)) * factor;
-    h0 = (guint32) a;
-
-    a >>= 32;
-    a += (*pchi >> 32) * factor;
-    h1 = (guint32) a;
-
-    *pchi = ((guint64)h1) << 32 | h0;
-
-    return ((a >> 32) == 0) ? DECIMAL_SUCCESS : DECIMAL_OVERFLOW;
-}
-
-DECINLINE static int mult128DecadeFactor(guint64* pclo, guint64* pchi, int powerOfTen)
-{
-    int idx, rc;
-
-    while (powerOfTen > 0) {
-        idx = (powerOfTen >= DECIMAL_MAX_INTFACTORS) ? DECIMAL_MAX_INTFACTORS : powerOfTen;
-        powerOfTen -= idx;
-        rc = mult128by32(pclo, pchi, constantsDecadeInt32Factors[idx], 0);
-        if (rc != DECIMAL_SUCCESS) return rc;
-    }
-    return DECIMAL_SUCCESS;
-}
-
-/* division: x(128bit) /= factor(32bit) 
-   returns roundBit */
-DECINLINE static int div128by32(guint64* plo, guint64* phi, guint32 factor, guint32* pRest)
-{
-    guint64 a, b, c, h;
-
-    h = *phi;
-    a = (guint32)(h >> 32);
-    b = a / factor;
-    a -= b * factor;
-    a <<= 32;
-    a |= (guint32) h;
-    c = a / factor;
-    a -= c * factor;
-    a <<= 32;
-    *phi = b << 32 | (guint32)c;
-
-    h = *plo;
-    a |= (guint32)(h >> 32);
-    b = a / factor;
-    a -= b * factor;
-    a <<= 32;
-    a |= (guint32) h;
-    c = a / factor;
-    a -= c * factor;
-    *plo = b << 32 | (guint32)c;
-
-    if (pRest) *pRest = (guint32) a;
-
-    a <<= 1;
-    return (a >= factor || (a == factor && (c & 1) == 1)) ? 1 : 0;
-}
-
-/* division: x(192bit) /= factor(32bit) 
-   no rest and no rounding*/
-DECINLINE static void div192by32(guint64* plo, guint64* pmi, guint64* phi,
-                                 guint32 factor)
-{
-    guint64 a, b, c, h;
-
-    h = *phi;
-    a = (guint32)(h >> 32);
-    b = a / factor;
-    a -= b * factor;
-    a <<= 32;
-    a |= (guint32) h;
-    c = a / factor;
-    a -= c * factor;
-    a <<= 32;
-    *phi = b << 32 | (guint32)c;
-
-    h = *pmi;
-    a |= (guint32)(h >> 32);
-    b = a / factor;
-    a -= b * factor;
-    a <<= 32;
-    a |= (guint32) h;
-    c = a / factor;
-    a -= c * factor;
-    a <<= 32;
-    *pmi = b << 32 | (guint32)c;
-
-    h = *plo;
-    a |= (guint32)(h >> 32);
-    b = a / factor;
-    a -= b * factor;
-    a <<= 32;
-    a |= (guint32) h;
-    c = a / factor;
-    a -= c * factor;
-    a <<= 32;
-    *plo = b << 32 | (guint32)c;
-}
-
-/* returns upper 32bit for a(192bit) /= b(32bit)
-   a will contain remainder */
-DECINLINE static guint32 div192by96to32withRest(guint64* palo, guint64* pami, guint64* pahi, 
-                                                                                               guint32 blo, guint32 bmi, guint32 bhi)
-{
-    guint64 rlo, rmi, rhi; /* remainder */
-    guint64 tlo, thi; /* term */
-    guint32 c;
-
-    rlo = *palo; rmi = *pami; rhi = *pahi;
-    if (rhi >= (((guint64)bhi) << 32)) {
-        c = LIT_GUINT32(0xFFFFFFFF);
-    } else {
-        c = (guint32) (rhi / bhi);
-    }
-    mult96by32to128(blo, bmi, bhi, c, &tlo, &thi);
-    sub192(rlo, rmi, rhi, 0, tlo, thi, &rlo, &rmi, &rhi);
-    while (((gint64)rhi) < 0) {
-        c--;
-        add192(rlo, rmi, rhi, 0, (((guint64)bmi)<<32) | blo, bhi, &rlo, &rmi, &rhi);
-    }
-    *palo = rlo ; *pami = rmi ; *pahi = rhi;
-
-    POSTCONDITION(rhi >> 32 == 0);
-
-    return c;
-}
-
-/* c(128bit) = a(192bit) / b(96bit) 
-   b must be >= 2^95 */
-DECINLINE static void div192by96to128(guint64 alo, guint64 ami, guint64 ahi,
-                                                                         guint32 blo, guint32 bmi, guint32 bhi,
-                                                                         guint64* pclo, guint64* pchi)
-{
-    guint64 rlo, rmi, rhi; /* remainder */
-    guint32 h, c;
-
-    PRECONDITION(ahi < (((guint64)bhi) << 32 | bmi) 
-        || (ahi == (((guint64)bhi) << 32 | bmi) && (ami >> 32) > blo));
-
-    /* high 32 bit*/
-    rlo = alo; rmi = ami; rhi = ahi;
-    h = div192by96to32withRest(&rlo, &rmi, &rhi, blo, bmi, bhi);
-
-    /* mid 32 bit*/
-    rhi = (rhi << 32) | (rmi >> 32); rmi = (rmi << 32) | (rlo >> 32); rlo <<= 32;
-    *pchi = (((guint64)h) << 32) | div192by96to32withRest(&rlo, &rmi, &rhi, blo, bmi, bhi);
-
-    /* low 32 bit */
-    rhi = (rhi << 32) | (rmi >> 32); rmi = (rmi << 32) | (rlo >> 32); rlo <<= 32;
-    h = div192by96to32withRest(&rlo, &rmi, &rhi, blo, bmi, bhi);
-
-    /* estimate lowest 32 bit (two last bits may be wrong) */
-    if (rhi >= bhi) {
-        c = LIT_GUINT32(0xFFFFFFFF);
-    } else {
-        rhi <<= 32;
-        c = (guint32) (rhi / bhi);
-    }
-    *pclo = (((guint64)h) << 32) | c;
-}
-
-DECINLINE static void roundUp128(guint64* pclo, guint64* pchi) {
-    if (++(*pclo) == 0) ++(*pchi);
-}
-
-DECINLINE static int normalize128(guint64* pclo, guint64* pchi, int* pScale, 
-                                                                 int roundFlag, int roundBit)
-{
-    guint32 overhang = (guint32)(*pchi >> 32);
-    int scale = *pScale;
-    int deltaScale;
-
-    while (overhang != 0) {
-        for (deltaScale = 1; deltaScale < DECIMAL_MAX_INTFACTORS; deltaScale++)
-        {
-            if (overhang < constantsDecadeInt32Factors[deltaScale]) break;
-        }
-
-        scale -= deltaScale;
-        if (scale < 0) return DECIMAL_OVERFLOW;
-
-        roundBit = div128by32(pclo, pchi, constantsDecadeInt32Factors[deltaScale], 0);
-
-        overhang = (guint32)(*pchi >> 32);
-        if (roundFlag && roundBit && *pclo == (guint64)-1 && (gint32)*pchi == (gint32)-1) {
-            overhang = 1;
-        }
-    }
-
-    *pScale = scale;
-
-    if (roundFlag && roundBit) {
-        roundUp128(pclo, pchi);
-        TEST((*pchi >> 32) == 0);
-    }
-    
-    return DECIMAL_SUCCESS;
-}
-
-DECINLINE static int maxLeftShift(/*[In, Out]*/decimal_repr* pA)
-{
-    guint64 lo64 = (((guint64)(pA->mid32)) << 32) | pA->lo32;
-    guint32 hi32 = pA->hi32;
-    int shift;
-
-    for (shift = 0; ((gint32)hi32) >= 0 && shift < 96; shift++) {
-        hi32 <<= 1;
-        if (((gint64)lo64) < 0) hi32++;
-        lo64 <<= 1;
-    }
-
-    pA->lo32 = (guint32) lo64;
-    pA->mid32 = (guint32)(lo64>>32);
-    pA->hi32 = hi32;
-
-    return shift;
-}
-
-DECINLINE static void rshift128(guint64* pclo, guint64* pchi)
-{
-    *pclo >>= 1;
-       *pclo |= (*pchi & 1) << 63;
-    *pchi >>= 1;
-}
-
-DECINLINE static void lshift96(guint32* pclo, guint32* pcmid, guint32* pchi)
-{
-    *pchi <<= 1;
-       *pchi |= (*pcmid & LIT_GUINT32_HIGHBIT) >> 31;
-    *pcmid <<= 1;
-       *pcmid |= (*pclo & LIT_GUINT32_HIGHBIT) >> 31;
-    *pclo <<= 1;
-}
-
-DECINLINE static void lshift128(guint64* pclo, guint64* pchi)
-{
-    *pchi <<= 1;
-       *pchi |= (*pclo & LIT_GUINT64_HIGHBIT) >> 63;
-    *pclo <<= 1;
-}
-
-DECINLINE static void rshift192(guint64* pclo, guint64* pcmi, guint64* pchi)
-{
-    *pclo >>= 1;
-       *pclo |= (*pcmi & 1) << 63;
-    *pcmi >>= 1;
-       *pcmi |= (*pchi & 1) << 63;
-    *pchi >>= 1;
-}
-
-#if defined(__native_client__) && (defined(__i386__) || defined(__x86_64))
-#define USE_X86_32BIT_INSTRUCTIONS 1
-#endif
-
-static inline gint
-my_g_bit_nth_msf (gsize mask)
-{
-       /* Mask is expected to be != 0 */
-#if (defined(__i386__) && defined(__GNUC__)) || defined(USE_X86_32BIT_INSTRUCTIONS)
-       int r;
-
-       __asm__("bsrl %1,%0\n\t"
-                       : "=r" (r) : "rm" (mask));
-       return r;
-#elif defined(__x86_64) && defined(__GNUC__)
-       guint64 r;
-
-       __asm__("bsrq %1,%0\n\t"
-                       : "=r" (r) : "rm" (mask));
-       return r;
-#elif defined(__i386__) && defined(_MSC_VER)
-       unsigned long bIndex = 0;
-       if (_BitScanReverse (&bIndex, mask))
-               return bIndex;
-       return -1;
-#elif defined(_M_X64) && defined(_MSC_VER)
-       unsigned long bIndex = 0;
-       if (_BitScanReverse64 (&bIndex, mask))
-               return bIndex;
-       return -1;
-#elif defined(__s390x__) && defined(__NOT_YET)
-       guint64 r;
-
-       __asm__("\tlrvgr\t%1,%1\n"
-               "\tflogr\t%0,%1\n"
-               "\tjz\t0f\n"
-               "\tlghi\t%0,-1\n"
-               "0:\n"
-               : "=r" (r) : "r" (mask) : "cc");
-#else
-       int i;
-
-       i = sizeof (gsize) * 8;
-       while (i > 0) {
-               i --;
-               if (mask & (1ULL << i))
-                       return i;
-       }
-       return -1;
-#endif
-}
-
-/* returns log2(a) or DECIMAL_LOG_NEGINF for a = 0 */
-DECINLINE static int log2_32(guint32 a)
-{
-    if (a == 0) return DECIMAL_LOG_NEGINF;
-
-       return my_g_bit_nth_msf (a) + 1;
-}
-
-/* returns log2(a) or DECIMAL_LOG_NEGINF for a = 0 */
-DECINLINE static int log2_64(guint64 a)
-{
-    if (a == 0) return DECIMAL_LOG_NEGINF;
-
-#if SIZEOF_VOID_P == 8
-       return my_g_bit_nth_msf (a) + 1;
-#else
-       if ((a >> 32) == 0)
-               return my_g_bit_nth_msf ((guint32)a) + 1;
-       else
-               return my_g_bit_nth_msf ((guint32)(a >> 32)) + 1 + 32;
-#endif
-}
-
-/* returns log2(a) or DECIMAL_LOG_NEGINF for a = 0 */
-DECINLINE static int log2_128(guint64 alo, guint64 ahi)
-{
-    if (ahi == 0) return log2_64(alo);
-    else return log2_64(ahi) + 64;
-}
-
-/* returns a upper limit for log2(a) considering scale */
-DECINLINE static int log2withScale_128(guint64 alo, guint64 ahi, int scale)
-{
-    int tlog2 = log2_128(alo, ahi);
-    if (tlog2 < 0) tlog2 = 0;
-    return tlog2 - (scale * 33219) / 10000;
-}
-
-DECINLINE static int pack128toDecimal(/*[Out]*/decimal_repr* pA, guint64 alo, guint64 ahi,
-                                      int scale, int sign)
-{
-    PRECONDITION((ahi >> 32) == 0);
-    PRECONDITION(sign == 0 || sign == 1);
-    PRECONDITION(scale >= 0 && scale <= DECIMAL_MAX_SCALE);
-
-    if (scale < 0 || scale > DECIMAL_MAX_SCALE || (ahi >> 32) != 0) {
-        return DECIMAL_OVERFLOW;
-    }
-
-    pA->lo32 = (guint32) alo;   
-    pA->mid32 = (guint32) (alo >> 32);  
-    pA->hi32 = (guint32) ahi;
-    pA->signscale.sign = sign;
-    pA->signscale.scale = scale;
-
-    return DECIMAL_SUCCESS;
-}
-
-DECINLINE static int adjustScale128(guint64* palo, guint64* pahi, int deltaScale)
-{
-    int idx, rc;
-
-    if (deltaScale < 0) {
-        deltaScale *= -1;
-        if (deltaScale > DECIMAL_MAX_SCALE) return DECIMAL_INTERNAL_ERROR;
-        while (deltaScale > 0) {
-            idx = (deltaScale > DECIMAL_MAX_INTFACTORS) ? DECIMAL_MAX_INTFACTORS : deltaScale;
-            deltaScale -= idx;
-            div128by32(palo, pahi, constantsDecadeInt32Factors[idx], 0);
-        }
-    } else if (deltaScale > 0) {
-        if (deltaScale > DECIMAL_MAX_SCALE) return DECIMAL_INTERNAL_ERROR;
-        while (deltaScale > 0) {
-            idx = (deltaScale > DECIMAL_MAX_INTFACTORS) ? DECIMAL_MAX_INTFACTORS : deltaScale;
-            deltaScale -= idx;
-            rc = mult128by32(palo, pahi, constantsDecadeInt32Factors[idx], 0);
-            if (rc != DECIMAL_SUCCESS) return rc;
-        }
-    }
-    
-    return DECIMAL_SUCCESS;
-}
-
-/* input: c * 10^-(*pScale) * 2^-exp
-   output: c * 10^-(*pScale) with 
-   minScale <= *pScale <= maxScale and (chi >> 32) == 0 */
-DECINLINE static int rescale128(guint64* pclo, guint64* pchi, int* pScale, int texp,
-                                int minScale, int maxScale, int roundFlag)
-{
-    guint32 factor, overhang;
-    int scale, i, rc, roundBit = 0;
-
-    PRECONDITION(texp >= 0);
-
-    scale = *pScale;
-
-    if (texp > 0) {
-        /* reduce exp */
-        while (texp > 0 && scale <= maxScale) {
-            overhang = (guint32)(*pchi >> 32);
-
-                       /* The original loop was this: */
-                       /*
-            while (texp > 0 && (overhang > (2<<DECIMAL_MAX_INTFACTORS) || (*pclo & 1) == 0)) {
-                               if (--texp == 0)
-                                       roundBit = (int)(*pclo & 1);
-                rshift128(pclo, pchi);
-                overhang = (guint32)(*pchi >> 32);
-            }
-                       */
-                       if (overhang > 0) {
-                               int msf = my_g_bit_nth_msf (overhang);
-                               int shift = msf - (DECIMAL_MAX_INTFACTORS + 2);
-
-                               if (shift >= texp)
-                                       shift = texp - 1;
-
-                               if (shift > 0) {
-                                       texp -= shift;
-                                       *pclo = (*pclo >> shift) | ((*pchi & ((1 << shift) - 1)) << (64 - shift));
-                                       *pchi >>= shift;
-                                       overhang >>= shift;
-
-                                       g_assert (texp > 0);
-                                       g_assert (overhang > (2 << DECIMAL_MAX_INTFACTORS));
-                               }
-                       }
-            while (texp > 0 && (overhang > (2<<DECIMAL_MAX_INTFACTORS) || (*pclo & 1) == 0)) {
-                               if (--texp == 0) roundBit = (int)(*pclo & 1);
-                rshift128(pclo, pchi);
-                overhang >>= 1;
-            }
-
-            if (texp > DECIMAL_MAX_INTFACTORS) i = DECIMAL_MAX_INTFACTORS;
-            else i = texp;
-            if (scale + i > maxScale) i = maxScale - scale;
-            if (i == 0) break;
-            texp -= i;
-            scale += i;
-            factor = constantsDecadeInt32Factors[i] >> i; /* 10^i/2^i=5^i */
-            mult128by32(pclo, pchi, factor, 0);
-    /*printf("3: %.17e\n", (((double)chi) * pow(2,64) + clo) * pow(10, -scale) * pow(2, -texp));*/
-        }
-
-        while (texp > 0) {
-            if (--texp == 0) roundBit = (int)(*pclo & 1);
-            rshift128(pclo, pchi);
-        }
-    }
-
-    TEST(texp == 0);
-
-    while (scale > maxScale) {
-        i = scale - maxScale;
-        if (i > DECIMAL_MAX_INTFACTORS) i = DECIMAL_MAX_INTFACTORS;
-        scale -= i;
-        roundBit = div128by32(pclo, pchi, constantsDecadeInt32Factors[i], 0);
-    }
-
-    while (scale < minScale) {
-        if (!roundFlag) roundBit = 0;
-        i = minScale - scale;
-        if (i > DECIMAL_MAX_INTFACTORS) i = DECIMAL_MAX_INTFACTORS;
-        scale += i;
-        rc = mult128by32(pclo, pchi, constantsDecadeInt32Factors[i], roundBit);
-        if (rc != DECIMAL_SUCCESS) return rc;
-        roundBit = 0;
-    }
-
-    TEST(scale >= 0 && scale <= DECIMAL_MAX_SCALE);
-
-    *pScale = scale;
-
-    return normalize128(pclo, pchi, pScale, roundFlag, roundBit);
-}
-
-guint32 rest;
-static void trimExcessScale(guint64* pclo, guint64* pchi, int* pScale)
-{
-       guint64 ilo = *pclo, lastlo;
-       guint64 ihi = *pchi, lasthi;
-       int scale = *pScale;
-       int i = 0, roundBit;
-       
-       while (scale > 0) {
-               scale--;
-               i++;
-               lastlo = ilo;
-               lasthi = ihi;
-               
-               roundBit = div128by32(&ilo, &ihi, 10, &rest);
-               if (rest != 0){
-                       i--;
-                       if (i == 0)
-                               return;
-
-                       *pclo = lastlo;
-                       *pchi = lasthi;
-                       *pScale = scale+1;
-                       return;
-               }
-       }
-}
-
-/* performs a += b */
-gint32 mono_decimalIncr(/*[In, Out]*/decimal_repr* pA, /*[In]*/decimal_repr* pB)
-{
-    guint64 alo, ahi, blo, bhi;
-    int log2A, log2B, log2Result, log10Result, rc;
-    int subFlag, sign, scaleA, scaleB;
-
-    MONO_ARCH_SAVE_REGS;
-
-    DECTO128(pA, alo, ahi);
-    DECTO128(pB, blo, bhi);
-
-    sign = pA->signscale.sign;
-    subFlag = sign - (int)pB->signscale.sign;
-    scaleA = pA->signscale.scale;
-    scaleB = pB->signscale.scale;
-    if (scaleA == scaleB) {
-        /* same scale, that's easy */
-        if (subFlag) {
-            sub128(alo, ahi, blo, bhi, &alo, &ahi);
-            if (ahi & LIT_GUINT64_HIGHBIT) {
-                alo--;
-                alo = ~alo;
-                if (alo == 0) ahi--;
-                ahi = ~ahi;
-                sign = !sign;
-            }
-        } else {
-            add128(alo, ahi, blo, bhi, &alo, &ahi);
-        }
-        rc = normalize128(&alo, &ahi, &scaleA, 1, 0);
-    } else {
-        /* scales must be adjusted */
-        /* Estimate log10 and scale of result for adjusting scales */
-        log2A = log2withScale_128(alo, ahi, scaleA);
-        log2B = log2withScale_128(blo, bhi, scaleB);
-        log2Result = MAX (log2A, log2B);
-        if (!subFlag) log2Result++; /* result can have one bit more */
-        log10Result = (log2Result * 1000) / 3322 + 1;
-        /* we will calculate in 128bit, so we may need to adjust scale */
-        if (scaleB > scaleA) scaleA = scaleB;
-        if (scaleA + log10Result > DECIMAL_MAX_SCALE + 7) {
-            /* this may not fit in 128bit, so limit it */
-            scaleA = DECIMAL_MAX_SCALE + 7 - log10Result;
-        }
-
-        rc = adjustScale128(&alo, &ahi, scaleA - (int)pA->signscale.scale);
-        if (rc != DECIMAL_SUCCESS) return rc;
-        rc = adjustScale128(&blo, &bhi, scaleA - scaleB);
-        if (rc != DECIMAL_SUCCESS) return rc;
-
-        if (subFlag) {
-            sub128(alo, ahi, blo, bhi, &alo, &ahi);
-            if (ahi & LIT_GUINT64_HIGHBIT) {
-                alo--;
-                alo = ~alo;
-                if (alo == 0) ahi--;
-                ahi = ~ahi;
-                sign = !sign;
-            }
-        } else {
-            add128(alo, ahi, blo, bhi, &alo, &ahi);
-        }
-
-        rc = rescale128(&alo, &ahi,&scaleA, 0, 0, DECIMAL_MAX_SCALE, 1);
-    }
-
-    if (rc != DECIMAL_SUCCESS) return rc;
-
-    return pack128toDecimal(pA, alo, ahi, scaleA, sign);
-}
-
-/* performs a += factor * constants[idx] */
-static int incMultConstant128(guint64* palo, guint64* pahi, int idx, int factor)
-{
-    guint64 blo, bhi, h;
-
-    PRECONDITION(idx >= 0 && idx <= DECIMAL_MAX_SCALE);
-    PRECONDITION(factor > 0 && factor <= 9);
-
-    blo = dec128decadeFactors[idx].lo;
-    h = bhi = dec128decadeFactors[idx].hi;
-    if (factor != 1) {
-        mult128by32(&blo, &bhi, factor, 0);
-        if (h > bhi) return DECIMAL_OVERFLOW;
-    }
-    h = *pahi;
-    add128(*palo, *pahi, blo, bhi, palo, pahi);
-    if (h > *pahi) return DECIMAL_OVERFLOW;
-    return DECIMAL_SUCCESS;
-}
-
-DECINLINE static void div128DecadeFactor(guint64* palo, guint64* pahi, int powerOfTen)
-{
-    int idx, roundBit = 0;
-
-    while (powerOfTen > 0) {
-        idx = (powerOfTen > DECIMAL_MAX_INTFACTORS) ? DECIMAL_MAX_INTFACTORS : powerOfTen;
-        powerOfTen -= idx;
-        roundBit = div128by32(palo, pahi, constantsDecadeInt32Factors[idx], 0);
-    }
-
-    if (roundBit) roundUp128(palo, pahi);
-}
-
-/* calc significant digits of mantisse */
-DECINLINE static int calcDigits(guint64 alo, guint64 ahi)
-{
-    int tlog2 = 0;
-    int tlog10;
-
-    if (ahi == 0) {
-        if (alo == 0) {
-            return 0; /* zero has no signficant digits */
-        } else {
-            tlog2 = log2_64(alo);
-        }
-    } else {
-        tlog2 = 64 + log2_64(ahi);
-    }
-
-    tlog10 = (tlog2 * 1000) / 3322;
-    /* we need an exact floor value of log10(a) */
-    if (dec128decadeFactors[tlog10].hi > ahi
-            || (dec128decadeFactors[tlog10].hi == ahi
-                    && dec128decadeFactors[tlog10].lo > alo)) {
-        --tlog10;
-    }
-    return tlog10+1;
-}
-
-gint32 mono_double2decimal(/*[Out]*/decimal_repr* pA, double val, gint32 digits)
-{
-    guint64 alo, ahi;
-    guint64* p = (guint64*)(&val);
-    int sigDigits, sign, texp, rc, scale;
-    guint16 k;
-
-    PRECONDITION(digits <= 15);
-
-    sign = ((*p & LIT_GUINT64_HIGHBIT) != 0) ? 1 : 0;
-
-    // Exponent
-    k = ((guint16)((*p) >> 52)) & 0x7FF;
-
-    // 1-bit followed by the fraction component from the float
-    alo = (*p & LIT_GUINT64(0xFFFFFFFFFFFFF)) | LIT_GUINT64(0x10000000000000);
-    ahi = 0;
-
-    texp = (k & 0x7FF) - 0x3FF;
-    if (k == 0x7FF || texp >= 96) return DECIMAL_OVERFLOW; /* NaNs, SNaNs, Infinities or >= 2^96 */
-    if (k == 0 || texp <= -94) { /* Subnormals, Zeros or < 2^-94 */
-        DECINIT(pA); /* return zero */
-        return DECIMAL_SUCCESS;
-    }
-
-    texp -= 52;
-    if (texp > 0) {
-        for (; texp > 0; texp--) {
-            lshift128(&alo, &ahi);
-        }
-    }
-
-    scale = 0;
-    rc = rescale128(&alo, &ahi, &scale, -texp, 0, DECIMAL_MAX_SCALE, 1);
-    if (rc != DECIMAL_SUCCESS) return rc;
-
-    sigDigits = calcDigits(alo, ahi);
-    /* too much digits, then round */
-    if (sigDigits > digits) {
-        div128DecadeFactor(&alo, &ahi, sigDigits - digits);
-        scale -= sigDigits - digits;
-        /* check value, may be 10^(digits+1) caused by rounding */
-        if (ahi == dec128decadeFactors[digits].hi
-            && alo == dec128decadeFactors[digits].lo) {
-            div128by32(&alo, &ahi, 10, 0);
-            scale--;
-        }
-        if (scale < 0) {
-            rc = mult128DecadeFactor(&alo, &ahi, -scale);
-            if (rc != DECIMAL_SUCCESS) return rc;
-            scale = 0;
-        }
-    }
-
-    //
-    // Turn the double 0.6 which at this point is:
-    // 0.6000000000000000
-    // into:
-    // 0.6
-    //
-    trimExcessScale (&alo, &ahi, &scale);
-    
-    return pack128toDecimal(pA, alo, ahi, scale, sign);
-}
-
-/**
- * mono_string2decimal:
- * @decimal_repr:
- * @str:
- * @decrDecimal:
- * @sign:
- *
- * converts a digit string to decimal
- * The significant digits must be passed as an integer in buf !
- *
- * 1. Example:
- *   if you want to convert the number 123.456789012345678901234 to decimal
- *     buf := "123456789012345678901234"
- *     decrDecimal := 3
- *     sign := 0
- *
- * 2. Example:
- *   you want to convert -79228162514264337593543950335 to decimal
- *     buf := "79228162514264337593543950335"
- *     decrDecimal := 29
- *     sign := 1
- *
- * 3. Example:
- *   you want to convert -7922816251426433759354395033.250000000000001 to decimal
- *     buf := "7922816251426433759354395033250000000000001"
- *     decrDecimal := 29
- *     sign := 1
- *     returns (decimal)-7922816251426433759354395033.3
- *
- * 4. Example:
- *   you want to convert -7922816251426433759354395033.250000000000000 to decimal
- *     buf := "7922816251426433759354395033250000000000000"
- *     decrDecimal := 29
- *     sign := 1
- *     returns (decimal)-7922816251426433759354395033.2
- *
- * 5. Example:
- *   you want to convert -7922816251426433759354395033.150000000000000 to decimal
- *     buf := "7922816251426433759354395033150000000000000"
- *     decrDecimal := 29
- *     sign := 1
- *     returns (decimal)-7922816251426433759354395033.2
- *
- * Uses banker's rule for rounding if there are more digits than can be
- * represented by the significant
- */
-gint32 mono_string2decimal(/*[Out]*/decimal_repr* pA, MonoString* str, gint32 decrDecimal, gint32 sign)
-{
-    gushort *buf = mono_string_chars(str);
-    gushort *p;
-    guint64 alo, ahi;
-    int n, rc, i, len, sigLen = -1, firstNonZero;
-    int scale, roundBit = 0;
-
-    alo = ahi = 0;
-    DECINIT(pA);
-
-    for (p = buf, len = 0; *p != 0; len++, p++) { }
-
-    for (p = buf, i = 0; *p != 0; i++, p++) {
-        n = *p - '0';
-        if (n < 0 || n > 9) {
-            return DECIMAL_INVALID_CHARACTER;
-        }
-        if (n) {
-            if (sigLen < 0) {
-                firstNonZero = i;
-                sigLen = (len - firstNonZero > DECIMAL_MAX_SCALE+1)
-                    ? DECIMAL_MAX_SCALE+1+firstNonZero : len;
-                if (decrDecimal > sigLen+1) return DECIMAL_OVERFLOW;
-            }
-            if (i >= sigLen) break;
-            rc = incMultConstant128(&alo, &ahi, sigLen - 1 - i, n);
-            if (rc != DECIMAL_SUCCESS) {
-                return rc;
-            }
-        }
-    }
-
-    // Set correct scale for zeros decimal (000 input is 0.00)
-    if (sigLen < 0 && len > decrDecimal)
-        sigLen = len;
-
-    scale = sigLen - decrDecimal;
-
-    if (i < len) { /* too much digits, we must round */
-        n = buf[i] - '0';
-        if (n < 0 || n > 9) {
-            return DECIMAL_INVALID_CHARACTER;
-        }
-        if (n > 5) roundBit = 1;
-        else if (n == 5) { /* we must take a nearer look */
-            n = buf[i-1] - '0';
-            for (++i; i < len; ++i) {
-                if (buf[i] != '0') break; /* we are greater than .5 */
-            }
-            if (i < len /* greater than exactly .5 */
-                || n % 2 == 1) { /* exactly .5, use banker's rule for rounding */
-                roundBit = 1;
-            }
-        }
-    }
-
-    if (ahi != 0) {
-        rc = normalize128(&alo, &ahi, &scale, 1, roundBit);
-        if (rc != DECIMAL_SUCCESS) return rc;
-    }
-
-    if (alo == 0 && ahi == 0 && scale <= 0) {
-        return DECIMAL_SUCCESS;
-    } else {
-        return pack128toDecimal(pA, alo, ahi, sigLen - decrDecimal, sign);
-    }
-}
-
-/**
- * mono_decimal2UInt64:
- * @pA
- * @pResult
- * converts a decimal to an UInt64 without rounding
- */
-gint32 mono_decimal2UInt64(/*[In]*/decimal_repr* pA, guint64* pResult)
-{
-    guint64 alo, ahi;
-    int scale;
-
-    MONO_ARCH_SAVE_REGS;
-
-    DECTO128(pA, alo, ahi);
-    scale = pA->signscale.scale;
-    if (scale > 0) {
-        div128DecadeFactor(&alo, &ahi, scale);
-    }
-
-    /* overflow if integer too large or < 0 */
-    if (ahi != 0 || (alo != 0 && pA->signscale.sign)) return DECIMAL_OVERFLOW;
-
-    *pResult = alo;
-    return DECIMAL_SUCCESS;
-}
-
-/**
- * mono_decimal2Int64:
- * @pA:
- * pResult:
- * converts a decimal to an Int64 without rounding
- */
-gint32 mono_decimal2Int64(/*[In]*/decimal_repr* pA, gint64* pResult)
-{
-    guint64 alo, ahi;
-    int sign, scale;
-
-    MONO_ARCH_SAVE_REGS;
-
-    DECTO128(pA, alo, ahi);
-    scale = pA->signscale.scale;
-    if (scale > 0) {
-        div128DecadeFactor(&alo, &ahi, scale);
-    }
-
-    if (ahi != 0) return DECIMAL_OVERFLOW;
-
-    sign = pA->signscale.sign;
-    if (sign && alo != 0) {
-        if (alo > LIT_GUINT64_HIGHBIT) return DECIMAL_OVERFLOW;
-        *pResult = (gint64) ~(alo-1);
-    } else {
-        if (alo & LIT_GUINT64_HIGHBIT) return DECIMAL_OVERFLOW;
-        *pResult = (gint64) alo;
-    }
-
-    return DECIMAL_SUCCESS;
-}
-
-void mono_decimalFloorAndTrunc(/*[In, Out]*/decimal_repr* pA, gint32 floorFlag)
-{
-    guint64 alo, ahi;
-    guint32 factor, rest;
-    int scale, sign, idx;
-    int hasRest = 0;
-
-    MONO_ARCH_SAVE_REGS;
-
-    scale = pA->signscale.scale;
-    if (scale == 0) return; /* nothing to do */
-
-    DECTO128(pA, alo, ahi);
-    sign = pA->signscale.sign;
-
-    while (scale > 0) {
-        idx = (scale > DECIMAL_MAX_INTFACTORS) ? DECIMAL_MAX_INTFACTORS : scale;
-        factor = constantsDecadeInt32Factors[idx];
-        scale -= idx;
-        div128by32(&alo, &ahi, factor, &rest);
-        hasRest = hasRest || (rest != 0);
-    }
-
-    if (floorFlag && hasRest && sign) { /* floor: if negative, we must round up */
-        roundUp128(&alo, &ahi);
-    }
-
-    pack128toDecimal(pA, alo, ahi, 0, sign);
-}
-
-void mono_decimalRound(/*[In, Out]*/decimal_repr* pA, gint32 decimals)
-{
-    guint64 alo, ahi;
-    int scale, sign;
-
-    MONO_ARCH_SAVE_REGS;
-
-    DECTO128(pA, alo, ahi);
-    scale = pA->signscale.scale;
-    sign = pA->signscale.sign;
-    if (scale > decimals) {
-        div128DecadeFactor(&alo, &ahi, scale - decimals);
-        scale = decimals;
-    }
-    
-    pack128toDecimal(pA, alo, ahi, scale, sign);
-}
-
-gint32 mono_decimalMult(/*[In, Out]*/decimal_repr* pA, /*[In]*/decimal_repr* pB)
-{
-    guint64 low, mid, high;
-    guint32 factor;
-    int scale, sign, rc;
-
-    MONO_ARCH_SAVE_REGS;
-
-    mult96by96to192(pA->lo32, pA->mid32, pA->hi32, pB->lo32, pB->mid32, pB->hi32,
-        &low, &mid, &high);
-
-    /* adjust scale and sign */
-    scale = (int)pA->signscale.scale + (int)pB->signscale.scale;
-    sign = pA->signscale.sign ^ pB->signscale.sign;
-
-    /* first scaling step */
-    factor = constantsDecadeInt32Factors[DECIMAL_MAX_INTFACTORS];
-    while (high != 0 || (mid>>32) >= factor) {
-        if (high < 100) {
-            factor /= 1000; /* we need some digits for final rounding */
-            scale -= DECIMAL_MAX_INTFACTORS - 3;
-        } else {
-            scale -= DECIMAL_MAX_INTFACTORS;
-        }
-
-        div192by32(&low, &mid, &high, factor);
-    }
-
-    /* second and final scaling */
-    rc = rescale128(&low, &mid, &scale, 0, 0, DECIMAL_MAX_SCALE, 1);
-    if (rc != DECIMAL_SUCCESS) return rc;
-
-    return pack128toDecimal(pA, low, mid, scale, sign);
-}
-
-static DECINLINE int decimalDivSub(/*[In]*/decimal_repr* pA, /*[In]*/decimal_repr* pB,
-                                                                  guint64* pclo, guint64* pchi, int* pExp)
-{
-    guint64 alo, ami, ahi;
-    guint64 tlo, tmi, thi;
-    guint32 blo, bmi, bhi;
-    int ashift, bshift, extraBit, texp;
-
-    ahi = (((guint64)(pA->hi32)) << 32) | pA->mid32;
-    ami = ((guint64)(pA->lo32)) << 32;
-    alo = 0;
-    blo = pB->lo32;
-    bmi = pB->mid32;
-    bhi = pB->hi32;
-
-    if (blo == 0 && bmi == 0 && bhi == 0) {
-        return DECIMAL_DIVIDE_BY_ZERO;
-    }
-
-    if (ami == 0 && ahi == 0) {
-        *pclo = *pchi = 0;
-        return DECIMAL_FINISHED;
-    }
-
-    /* enlarge dividend to get maximal precision */
-       if (ahi == 0) {
-               ahi = ami;
-               ami = 0;
-               for (ashift = 64; (ahi & LIT_GUINT64_HIGHBIT) == 0; ++ashift) {
-                       ahi <<= 1;
-               }
-       } else {
-               for (ashift = 0; (ahi & LIT_GUINT64_HIGHBIT) == 0; ++ashift) {
-                       lshift128(&ami, &ahi);
-               }
-       }
-
-    /* ensure that divisor is at least 2^95 */
-       if (bhi == 0) {
-
-               if (bmi == 0) {
-                       guint32 hi_shift;
-                       bhi = blo;
-                       bmi = 0;
-                       blo = 0;
-
-                       //g_assert (g_bit_nth_msf (bhi, 32) == my_g_bit_nth_msf (bhi));
-
-                       hi_shift = 31 - my_g_bit_nth_msf (bhi);
-                       bhi <<= hi_shift;
-                       bshift = 64 + hi_shift;
-               } else {
-                       bhi = bmi;
-                       bmi = blo;
-                       blo = 0;
-
-                       for (bshift = 32; (bhi & LIT_GUINT32_HIGHBIT) == 0; ++bshift) {
-                               bhi <<= 1;
-                               bhi |= (bmi & LIT_GUINT32_HIGHBIT) >> 31;
-                               bmi <<= 1;
-                       }
-               }
-       } else {
-               for (bshift = 0; (bhi & LIT_GUINT32_HIGHBIT) == 0; ++bshift) {
-                       bhi <<= 1;
-                       bhi |= (bmi & LIT_GUINT32_HIGHBIT) >> 31;
-                       bmi <<= 1;
-                       bmi |= (blo & LIT_GUINT32_HIGHBIT) >> 31;
-                       blo <<= 1;
-               }
-       }
-
-    thi = ((guint64)bhi)<<32 | bmi;
-    tmi = ((guint64)blo)<<32;
-    tlo = 0;
-    if (ahi > thi || (ahi == thi && ami >= tmi)) {
-        sub192(alo, ami, ahi, tlo, tmi, thi, &alo, &ami, &ahi);
-        extraBit = 1;
-    } else {
-        extraBit = 0;
-    }
-
-    div192by96to128(alo, ami, ahi, blo, bmi, bhi, pclo, pchi);
-    texp = 128 + ashift - bshift;
-
-    if (extraBit) {
-        rshift128(pclo, pchi);
-        *pchi += LIT_GUINT64_HIGHBIT;
-        texp--;
-    }
-
-    /* try loss free right shift */
-    while (texp > 0 && (*pclo & 1) == 0) {
-        /* right shift */
-        rshift128(pclo, pchi);
-        texp--;
-    }
-
-    *pExp = texp;
-
-    return DECIMAL_SUCCESS;
-}
-
-gint32 mono_decimalDiv(/*[Out]*/decimal_repr* pC, /*[In]*/decimal_repr* pA, /*[In]*/decimal_repr* pB)
-{
-    guint64 clo, chi; /* result */
-    int scale, texp, rc;
-
-    MONO_ARCH_SAVE_REGS;
-
-       /* Check for common cases */
-       if (mono_decimalCompare (pA, pB) == 0)
-               /* One */
-               return pack128toDecimal (pC, 1, 0, 0, 0);
-       pA->signscale.sign = pA->signscale.sign ? 0 : 1;
-       if (mono_decimalCompare (pA, pB) == 0)
-               /* Minus one */
-               return pack128toDecimal (pC, 1, 0, 0, 1);
-       pA->signscale.sign = pA->signscale.sign ? 0 : 1;
-
-    rc = decimalDivSub(pA, pB, &clo, &chi, &texp);
-    if (rc != DECIMAL_SUCCESS) {
-        if (rc == DECIMAL_FINISHED) rc = DECIMAL_SUCCESS;
-        return rc;
-    }
-
-    /* adjust scale and sign */
-    scale = (int)pA->signscale.scale - (int)pB->signscale.scale;
-
-    /*test: printf("0: %.17e\n", (((double)chi) * pow(2,64) + clo) * pow(10, -scale) * pow(2, -exp));*/
-    rc = rescale128(&clo, &chi, &scale, texp, 0, DECIMAL_MAX_SCALE, 1);
-    if (rc != DECIMAL_SUCCESS) return rc;
-
-    return pack128toDecimal(pC, clo, chi, scale, pA->signscale.sign ^ pB->signscale.sign);
-}
-
-gint32 mono_decimalIntDiv(/*[Out]*/decimal_repr* pC, /*[In]*/decimal_repr* pA, /*[In]*/decimal_repr* pB)
-{
-    guint64 clo, chi; /* result */
-    int scale, texp, rc;
-
-    MONO_ARCH_SAVE_REGS;
-
-    rc = decimalDivSub(pA, pB, &clo, &chi, &texp);
-    if (rc != DECIMAL_SUCCESS) {
-        if (rc == DECIMAL_FINISHED) rc = DECIMAL_SUCCESS;
-        return rc;
-    }
-
-    /* calc scale  */
-    scale = (int)pA->signscale.scale - (int)pB->signscale.scale;
-
-    /* truncate result to integer */
-    rc = rescale128(&clo, &chi, &scale, texp, 0, 0, 0);
-    if (rc != DECIMAL_SUCCESS) return rc;
-
-    return pack128toDecimal(pC, clo, chi, scale, pA->signscale.sign);
-}
-
-/* approximation for log2 of a 
-   If q is the exact value for log2(a), then q <= decimalLog2(a) <= q+1 */
-DECINLINE static int decimalLog2(/*[In]*/decimal_repr* pA)
-{
-    int tlog2;
-    int scale = pA->signscale.scale;
-
-    if (pA->hi32 != 0) tlog2 = 64 + log2_32(pA->hi32);
-    else if (pA->mid32 != 0) tlog2 = 32 + log2_32(pA->mid32);
-    else tlog2 = log2_32(pA->lo32);
-
-    if (tlog2 != DECIMAL_LOG_NEGINF) {
-        tlog2 -= (scale * 33219) / 10000;
-    }
-
-    return tlog2;
-}
-
-DECINLINE static int decimalIsZero(/*[In]*/decimal_repr* pA)
-{
-    return (pA->lo32 == 0 && pA->mid32 == 0 && pA->hi32 == 0);
-}
-
-gint32 mono_decimalCompare(/*[In]*/decimal_repr* pA, /*[In]*/decimal_repr* pB)
-{
-    int log2a, log2b, delta, sign;
-    decimal_repr aa;
-
-    MONO_ARCH_SAVE_REGS;
-
-    sign = (pA->signscale.sign) ? -1 : 1;
-
-    if (pA->signscale.sign ^ pB->signscale.sign) {
-        return (decimalIsZero(pA) && decimalIsZero(pB)) ? 0 : sign;
-    }
-
-    /* try fast comparison via log2 */
-    log2a = decimalLog2(pA);
-    log2b = decimalLog2(pB);
-    delta = log2a - log2b;
-     /* decimalLog2 is not exact, so we can say nothing 
-        if abs(delta) <= 1 */
-    if (delta < -1) return -sign;
-    if (delta > 1) return sign;
-
-    DECCOPY(&aa, pA);
-    DECNEGATE(&aa);
-    mono_decimalIncr(&aa, pB);
-
-    if (decimalIsZero(&aa)) return 0;
-
-    return (aa.signscale.sign) ? 1 : -1;
-}
-
-/* d=(-1)^sign * n * 2^(k-52) with sign (1bit), k(11bit), n-2^52(52bit) */  
-DECINLINE static void buildIEEE754Double(double* pd, int sign, int texp, guint64 mantisse)
-{
-    guint64* p = (guint64*) pd;
-
-    PRECONDITION(sign == 0 || sign == 1);
-    *p = (((guint64)sign) << 63) | (((guint64)((1023+texp)&0x7ff)) << 52) | mantisse;
-}
-
-double mono_decimal2double(/*[In]*/decimal_repr* pA)
-{
-    double d;
-    guint64 alo, ahi, mantisse;
-    guint32 overhang, factor, roundBits;
-    int scale, texp, log5, i;
-
-    MONO_ARCH_SAVE_REGS;
-
-    ahi = (((guint64)(pA->hi32)) << 32) | pA->mid32;
-    alo = ((guint64)(pA->lo32)) << 32;
-
-    /* special case zero */
-    if (ahi == 0 && alo == 0) return 0.0;
-
-    texp = 0;
-    scale = pA->signscale.scale;
-
-    /* transform n * 10^-scale and exp = 0 => m * 2^-exp and scale = 0 */
-    while (scale > 0) {
-        while ((ahi & LIT_GUINT64_HIGHBIT) == 0) {
-            lshift128(&alo, &ahi);
-            texp++;
-        }
-
-        overhang = (guint32) (ahi >> 32);
-        if (overhang >= 5) {
-            /* estimate log5 */
-            log5 = (log2_32(overhang) * 1000) / 2322; /* ln(5)/ln(2) = 2.3219... */
-            if (log5 < DECIMAL_MAX_INTFACTORS) {
-                /* get maximal factor=5^i, so that overhang / factor >= 1 */
-                factor = constantsDecadeInt32Factors[log5] >> log5; /* 5^n = 10^n/2^n */
-                i = log5 + overhang / factor;
-            } else {
-                i = DECIMAL_MAX_INTFACTORS; /* we have only constants up to 10^DECIMAL_MAX_INTFACTORS */
-            }
-            if (i > scale) i = scale;
-            factor = constantsDecadeInt32Factors[i] >> i; /* 5^n = 10^n/2^n */
-            /* n * 10^-scale * 2^-exp => m * 10^-(scale-i) * 2^-(exp+i) with m = n * 5^-i */
-            div128by32(&alo, &ahi, factor, 0);
-            scale -= i;
-            texp += i;
-        }
-    }
-
-    /* normalize significand (highest bit should be 1) */
-    while ((ahi & LIT_GUINT64_HIGHBIT) == 0) {
-        lshift128(&alo, &ahi);
-        texp++;
-    }
-
-    /* round to nearest even */
-    roundBits = (guint32)ahi & 0x7ff;
-    ahi += 0x400;
-    if ((ahi & LIT_GUINT64_HIGHBIT) == 0) { /* overflow ? */
-        ahi >>= 1;
-       texp--;
-    } else if ((roundBits & 0x400) == 0) ahi &= ~1;
-
-    /* 96 bit => 1 implizit bit and 52 explicit bits */
-    mantisse = (ahi & ~LIT_GUINT64_HIGHBIT) >> 11;
-
-    buildIEEE754Double(&d, pA->signscale.sign, -texp+95, mantisse);
-
-    return d;
-}
-
-/* a *= 10^exp */
-gint32 mono_decimalSetExponent(/*[In, Out]*/decimal_repr* pA, gint32 texp)
-{
-    guint64 alo, ahi;
-    int rc;
-    int scale = pA->signscale.scale;
-
-    MONO_ARCH_SAVE_REGS;
-
-    scale -= texp;
-
-    if (scale < 0 || scale > DECIMAL_MAX_SCALE) {
-        DECTO128(pA, alo, ahi);
-        rc = rescale128(&alo, &ahi, &scale, 0, 0, DECIMAL_MAX_SCALE, 1);
-        if (rc != DECIMAL_SUCCESS) return rc;
-        return pack128toDecimal(pA, alo, ahi, scale, pA->signscale.sign);
-    } else {
-        pA->signscale.scale = scale;
-        return DECIMAL_SUCCESS;
-    }
-}
-
-#endif /* DISABLE_DECIMAL */
diff --git a/mono/metadata/decimal.h b/mono/metadata/decimal.h
deleted file mode 100644 (file)
index e9737c7..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-#ifndef _MONO_DECIMAL_H_
-#define _MONO_DECIMAL_H_
-
-#include <glib.h>
-#include "mono/metadata/object.h"
-#include "mono/utils/mono-compiler.h"
-
-/* representation for C# type decimal */
-/* This is the layout of MSC */
-typedef struct
-{
-       union {
-               guint32 ss32;
-#if G_BYTE_ORDER != G_LITTLE_ENDIAN
-           struct {
-                   unsigned int sign      : 1;
-                   unsigned int reserved2 : 7;
-                   unsigned int scale     : 8;
-                   unsigned int reserved1 : 16;
-           } signscale;
-#else
-           struct {
-                   unsigned int reserved1 : 16;
-                   unsigned int scale     : 8;
-                   unsigned int reserved2 : 7;
-                   unsigned int sign      : 1;
-           } signscale;
-#endif
-       } u;
-    guint32 hi32;
-    guint32 lo32;
-    guint32 mid32;
-} decimal_repr;
-
-
-/* function prototypes */
-gint32 mono_decimalIncr(/*[In, Out]*/decimal_repr* pA, /*[In]*/decimal_repr* pB) MONO_INTERNAL;
-gint32 mono_double2decimal(/*[Out]*/decimal_repr* pA, double val, gint32 digits) MONO_INTERNAL;
-gint32 mono_decimal2UInt64(/*[In]*/decimal_repr* pD, guint64* pResult) MONO_INTERNAL;
-gint32 mono_decimal2Int64(/*[In]*/decimal_repr* pD, gint64* pResult) MONO_INTERNAL;
-void mono_decimalFloorAndTrunc(/*[In, Out]*/decimal_repr* pD, gint32 floorFlag) MONO_INTERNAL;
-void mono_decimalRound(/*[In, Out]*/decimal_repr* pD, gint32 decimals) MONO_INTERNAL;
-gint32 mono_decimalMult(/*[In, Out]*/decimal_repr* pA, /*[In]*/decimal_repr* pB) MONO_INTERNAL;
-gint32 mono_decimalDiv(/*[Out]*/decimal_repr* pC, /*[In]*/decimal_repr* pA, /*[In]*/decimal_repr* pB) MONO_INTERNAL;
-gint32 mono_decimalIntDiv(/*[Out]*/decimal_repr* pC, /*[In]*/decimal_repr* pA, /*[In]*/decimal_repr* pB) MONO_INTERNAL;
-gint32 mono_decimalCompare(/*[In]*/decimal_repr* pA, /*[In]*/decimal_repr* pB) MONO_INTERNAL;
-double mono_decimal2double(/*[In]*/decimal_repr* pA) MONO_INTERNAL;
-gint32 mono_decimalSetExponent(/*[In, Out]*/decimal_repr* pA, gint32 texp) MONO_INTERNAL;
-
-gint32 mono_string2decimal(/*[Out]*/decimal_repr* pA, /*[In]*/MonoString* s, gint32 decrDecimal, gint32 sign) MONO_INTERNAL;
-
-#endif
index 019ba8ea5ba6959ce4d71c636a92a673f4ffd669..03c60f33dc3061b1df53ce2acf2c64a8cc7b8f6a 100644 (file)
@@ -43,8 +43,6 @@ ves_icall_System_Environment_GetOSVersionString (void)
 #ifdef HOST_WIN32
        OSVERSIONINFOEX verinfo;
 
-       MONO_ARCH_SAVE_REGS;
-
        verinfo.dwOSVersionInfoSize = sizeof (OSVERSIONINFOEX);
        if (GetVersionEx ((OSVERSIONINFO*)&verinfo)) {
                char version [128];
@@ -60,8 +58,6 @@ ves_icall_System_Environment_GetOSVersionString (void)
 #elif defined(HAVE_SYS_UTSNAME_H)
        struct utsname name;
 
-       MONO_ARCH_SAVE_REGS;
-
        if (uname (&name) >= 0) {
                return mono_string_new (mono_domain_get (), name.release);
        }
index 17279507a010c68d2fa2c5bfd151fe4e7197eb16..a03bde43f0e42a5a36ba91aa348ef110a7e8d43b 100644 (file)
@@ -1,9 +1,6 @@
 #ifndef _MONO_METADATA_EXCEPTION_H_
 #define _MONO_METADATA_EXCEPTION_H_
 
-/* here for compat: should not be used anymore */
-#define MONO_ARCH_SAVE_REGS 
-
 #include <mono/metadata/object.h>
 #include <mono/metadata/image.h>
 
index 097da28a8c73806199a74aaed65c4010fa6dfcd4..f7d40edb33b3bbf8d71fe816570fa26b341126db 100644 (file)
@@ -270,8 +270,6 @@ ves_icall_System_IO_MonoIO_CreateDirectory (MonoString *path, gint32 *error)
 {
        gboolean ret;
        
-       MONO_ARCH_SAVE_REGS;
-
        *error=ERROR_SUCCESS;
        
        ret=CreateDirectory (mono_string_chars (path), NULL);
@@ -287,8 +285,6 @@ ves_icall_System_IO_MonoIO_RemoveDirectory (MonoString *path, gint32 *error)
 {
        gboolean ret;
        
-       MONO_ARCH_SAVE_REGS;
-
        *error=ERROR_SUCCESS;
        
        ret=RemoveDirectory (mono_string_chars (path));
@@ -326,8 +322,6 @@ ves_icall_System_IO_MonoIO_GetFileSystemEntries (MonoString *path,
        gchar *utf8_path, *utf8_result, *full_name;
        gint32 attributes;
        
-       MONO_ARCH_SAVE_REGS;
-
        result = NULL;
        *error = ERROR_SUCCESS;
 
@@ -519,8 +513,6 @@ ves_icall_System_IO_MonoIO_GetCurrentDirectory (gint32 *error)
        gunichar2 *buf;
        int len, res_len;
 
-       MONO_ARCH_SAVE_REGS;
-
        len = MAX_PATH + 1; /*FIXME this is too smal under most unix systems.*/
        buf = g_new (gunichar2, len);
        
@@ -555,8 +547,6 @@ ves_icall_System_IO_MonoIO_SetCurrentDirectory (MonoString *path,
 {
        gboolean ret;
        
-       MONO_ARCH_SAVE_REGS;
-
        *error=ERROR_SUCCESS;
        
        ret=SetCurrentDirectory (mono_string_chars (path));
@@ -573,8 +563,6 @@ ves_icall_System_IO_MonoIO_MoveFile (MonoString *path, MonoString *dest,
 {
        gboolean ret;
        
-       MONO_ARCH_SAVE_REGS;
-
        *error=ERROR_SUCCESS;
        
        ret=MoveFile (mono_string_chars (path), mono_string_chars (dest));
@@ -594,8 +582,6 @@ ves_icall_System_IO_MonoIO_ReplaceFile (MonoString *sourceFileName, MonoString *
        gunichar2 *utf16_sourceFileName = NULL, *utf16_destinationFileName = NULL, *utf16_destinationBackupFileName = NULL;
        guint32 replaceFlags = REPLACEFILE_WRITE_THROUGH;
 
-       MONO_ARCH_SAVE_REGS;
-
        if (sourceFileName)
                utf16_sourceFileName = mono_string_chars (sourceFileName);
        if (destinationFileName)
@@ -622,8 +608,6 @@ ves_icall_System_IO_MonoIO_CopyFile (MonoString *path, MonoString *dest,
 {
        gboolean ret;
        
-       MONO_ARCH_SAVE_REGS;
-
        *error=ERROR_SUCCESS;
        
        ret=CopyFile (mono_string_chars (path), mono_string_chars (dest), !overwrite);
@@ -639,8 +623,6 @@ ves_icall_System_IO_MonoIO_DeleteFile (MonoString *path, gint32 *error)
 {
        gboolean ret;
        
-       MONO_ARCH_SAVE_REGS;
-
        *error=ERROR_SUCCESS;
        
        ret=DeleteFile (mono_string_chars (path));
@@ -656,8 +638,6 @@ ves_icall_System_IO_MonoIO_GetFileAttributes (MonoString *path, gint32 *error)
 {
        gint32 ret;
        
-       MONO_ARCH_SAVE_REGS;
-
        *error=ERROR_SUCCESS;
        
        ret=get_file_attributes (mono_string_chars (path));
@@ -682,8 +662,6 @@ ves_icall_System_IO_MonoIO_SetFileAttributes (MonoString *path, gint32 attrs,
 {
        gboolean ret;
        
-       MONO_ARCH_SAVE_REGS;
-
        *error=ERROR_SUCCESS;
        
        ret=SetFileAttributes (mono_string_chars (path),
@@ -700,8 +678,6 @@ ves_icall_System_IO_MonoIO_GetFileType (HANDLE handle, gint32 *error)
 {
        gboolean ret;
        
-       MONO_ARCH_SAVE_REGS;
-
        *error=ERROR_SUCCESS;
        
        ret=GetFileType (handle);
@@ -722,8 +698,6 @@ ves_icall_System_IO_MonoIO_GetFileStat (MonoString *path, MonoIOStat *stat,
        gboolean result;
        WIN32_FILE_ATTRIBUTE_DATA data;
 
-       MONO_ARCH_SAVE_REGS;
-
        *error=ERROR_SUCCESS;
        
        result = get_file_attributes_ex (mono_string_chars (path), &data);
@@ -747,8 +721,6 @@ ves_icall_System_IO_MonoIO_Open (MonoString *filename, gint32 mode,
        int attributes, attrs;
        gunichar2 *chars = mono_string_chars (filename);
        
-       MONO_ARCH_SAVE_REGS;
-
        *error=ERROR_SUCCESS;
 
        if (options != 0){
@@ -799,8 +771,6 @@ ves_icall_System_IO_MonoIO_Close (HANDLE handle, gint32 *error)
 {
        gboolean ret;
        
-       MONO_ARCH_SAVE_REGS;
-
        *error=ERROR_SUCCESS;
        
        ret=CloseHandle (handle);
@@ -820,8 +790,6 @@ ves_icall_System_IO_MonoIO_Read (HANDLE handle, MonoArray *dest,
        gboolean result;
        guint32 n;
 
-       MONO_ARCH_SAVE_REGS;
-
        *error=ERROR_SUCCESS;
 
        MONO_CHECK_ARG_NULL (dest);
@@ -849,8 +817,6 @@ ves_icall_System_IO_MonoIO_Write (HANDLE handle, MonoArray *src,
        gboolean result;
        guint32 n;
 
-       MONO_ARCH_SAVE_REGS;
-
        *error=ERROR_SUCCESS;
 
        MONO_CHECK_ARG_NULL (src);
@@ -875,8 +841,6 @@ ves_icall_System_IO_MonoIO_Seek (HANDLE handle, gint64 offset, gint32 origin,
 {
        gint32 offset_hi;
 
-       MONO_ARCH_SAVE_REGS;
-
        *error=ERROR_SUCCESS;
        
        offset_hi = offset >> 32;
@@ -895,8 +859,6 @@ ves_icall_System_IO_MonoIO_Flush (HANDLE handle, gint32 *error)
 {
        gboolean ret;
        
-       MONO_ARCH_SAVE_REGS;
-
        *error=ERROR_SUCCESS;
        
        ret=FlushFileBuffers (handle);
@@ -913,8 +875,6 @@ ves_icall_System_IO_MonoIO_GetLength (HANDLE handle, gint32 *error)
        gint64 length;
        guint32 length_hi;
 
-       MONO_ARCH_SAVE_REGS;
-
        *error=ERROR_SUCCESS;
        
        length = GetFileSize (handle, &length_hi);
@@ -934,8 +894,6 @@ ves_icall_System_IO_MonoIO_SetLength (HANDLE handle, gint64 length,
        gint32 length_hi;
        gboolean result;
 
-       MONO_ARCH_SAVE_REGS;
-
        *error=ERROR_SUCCESS;
        
        /* save file pointer */
@@ -985,8 +943,6 @@ ves_icall_System_IO_MonoIO_SetFileTime (HANDLE handle, gint64 creation_time,
        const FILETIME *last_access_filetime;
        const FILETIME *last_write_filetime;
 
-       MONO_ARCH_SAVE_REGS;
-
        *error=ERROR_SUCCESS;
        
        if (creation_time < 0)
@@ -1015,24 +971,18 @@ ves_icall_System_IO_MonoIO_SetFileTime (HANDLE handle, gint64 creation_time,
 HANDLE 
 ves_icall_System_IO_MonoIO_get_ConsoleOutput ()
 {
-       MONO_ARCH_SAVE_REGS;
-
        return GetStdHandle (STD_OUTPUT_HANDLE);
 }
 
 HANDLE 
 ves_icall_System_IO_MonoIO_get_ConsoleInput ()
 {
-       MONO_ARCH_SAVE_REGS;
-
        return GetStdHandle (STD_INPUT_HANDLE);
 }
 
 HANDLE 
 ves_icall_System_IO_MonoIO_get_ConsoleError ()
 {
-       MONO_ARCH_SAVE_REGS;
-
        return GetStdHandle (STD_ERROR_HANDLE);
 }
 
@@ -1043,8 +993,6 @@ ves_icall_System_IO_MonoIO_CreatePipe (HANDLE *read_handle,
        SECURITY_ATTRIBUTES attr;
        gboolean ret;
        
-       MONO_ARCH_SAVE_REGS;
-
        attr.nLength=sizeof(SECURITY_ATTRIBUTES);
        attr.bInheritHandle=TRUE;
        attr.lpSecurityDescriptor=NULL;
@@ -1065,8 +1013,6 @@ MonoBoolean ves_icall_System_IO_MonoIO_DuplicateHandle (HANDLE source_process_ha
        /* This is only used on Windows */
        gboolean ret;
        
-       MONO_ARCH_SAVE_REGS;
-       
        ret=DuplicateHandle (source_process_handle, source_handle, target_process_handle, target_handle, access, inherit, options);
        if(ret==FALSE) {
                /* FIXME: throw an exception? */
@@ -1147,8 +1093,6 @@ ves_icall_System_IO_MonoIO_get_InvalidPathChars ()
        MonoDomain *domain;
        int i, n;
 
-       MONO_ARCH_SAVE_REGS;
-
        domain = mono_domain_get ();
        n = sizeof (invalid_path_chars) / sizeof (gunichar2);
        chars = mono_array_new (domain, mono_defaults.char_class, n);
index 7b971aa6fc92ba06e56b1d6efd1796899a51c21b..5523df53204e9491bbd6a63a111613886498cd3b 100644 (file)
@@ -54,8 +54,6 @@ ves_icall_System_IO_FSW_SupportsFSW (void)
        void *iter;
        char *err;
 
-       MONO_ARCH_SAVE_REGS;
-
        inotify_instance = ves_icall_System_IO_InotifyWatcher_GetInotifyInstance ();
        if (inotify_instance != -1) {
                close (inotify_instance);
@@ -104,8 +102,6 @@ ves_icall_System_IO_FAMW_InternalFAMNextEvent (gpointer conn,
 {
        FAMEvent ev;
 
-       MONO_ARCH_SAVE_REGS;
-
        if (FAMNextEvent (conn, &ev) == 1) {
                *filename = mono_string_new (mono_domain_get (), ev.filename);
                *code = ev.code;
@@ -148,8 +144,6 @@ ves_icall_System_IO_InotifyWatcher_AddWatch (int fd, MonoString *name, gint32 ma
        char *str, *path;
        int retval;
 
-       MONO_ARCH_SAVE_REGS;
-
        if (name == NULL)
                return -1;
 
index 79032578afaf8b7b5a5ffa4c2ff7f677ad7cabb7..8f739af8484e28954d721716e6807d9957d4ca4f 100644 (file)
@@ -220,7 +220,8 @@ typedef struct {
        int alloc_type;
 } AllocatorWrapperInfo;
 
-MonoMethod* mono_gc_get_managed_allocator (MonoClass *klass, gboolean for_box) MONO_INTERNAL;
+int mono_gc_get_aligned_size_for_allocator (int size) MONO_INTERNAL;
+MonoMethod* mono_gc_get_managed_allocator (MonoClass *klass, gboolean for_box, gboolean known_instance_size) MONO_INTERNAL;
 MonoMethod* mono_gc_get_managed_array_allocator (MonoClass *klass) MONO_INTERNAL;
 MonoMethod *mono_gc_get_managed_allocator_by_type (int atype) MONO_INTERNAL;
 
index d84e944f96b76c35fc290f4dd83a3b4b41a2c105..e3dba446f938254caaba35db74214edcf375ccc1 100644 (file)
@@ -415,8 +415,6 @@ ves_icall_System_GC_InternalCollect (int generation)
 gint64
 ves_icall_System_GC_GetTotalMemory (MonoBoolean forceCollection)
 {
-       MONO_ARCH_SAVE_REGS;
-
        if (forceCollection)
                mono_gc_collect (mono_gc_max_generation ());
        return mono_gc_get_used_size ();
@@ -425,8 +423,6 @@ ves_icall_System_GC_GetTotalMemory (MonoBoolean forceCollection)
 void
 ves_icall_System_GC_KeepAlive (MonoObject *obj)
 {
-       MONO_ARCH_SAVE_REGS;
-
        /*
         * Does nothing.
         */
index c276a52b7d922ca8e48345529097dad3fddd91eb..c6ac27f86297146a790505b50c154039a7c5c2f9 100644 (file)
@@ -138,25 +138,23 @@ ICALL_TYPE(TZONE, "System.CurrentSystemTimeZone", TZONE_1)
 ICALL(TZONE_1, "GetTimeZoneData", ves_icall_System_CurrentSystemTimeZone_GetTimeZoneData)
 
 ICALL_TYPE(DTIME, "System.DateTime", DTIME_1)
-ICALL(DTIME_1, "GetNow", mono_100ns_datetime)
-ICALL(DTIME_2, "GetTimeMonotonic", mono_100ns_ticks)
+ICALL(DTIME_1, "GetSystemTimeAsFileTime", mono_100ns_datetime)
 
 #ifndef DISABLE_DECIMAL
 ICALL_TYPE(DECIMAL, "System.Decimal", DECIMAL_1)
-ICALL(DECIMAL_1, "decimal2Int64", mono_decimal2Int64)
-ICALL(DECIMAL_2, "decimal2UInt64", mono_decimal2UInt64)
-ICALL(DECIMAL_3, "decimal2double", mono_decimal2double)
-//ICALL(DECIMAL_4, "decimal2string", mono_decimal2string)
-ICALL(DECIMAL_5, "decimalCompare", mono_decimalCompare)
-ICALL(DECIMAL_6, "decimalDiv", mono_decimalDiv)
-ICALL(DECIMAL_7, "decimalFloorAndTrunc", mono_decimalFloorAndTrunc)
-ICALL(DECIMAL_8, "decimalIncr", mono_decimalIncr)
-ICALL(DECIMAL_9, "decimalIntDiv", mono_decimalIntDiv)
-ICALL(DECIMAL_10, "decimalMult", mono_decimalMult)
-ICALL(DECIMAL_11, "decimalRound", mono_decimalRound)
-ICALL(DECIMAL_12, "decimalSetExponent", mono_decimalSetExponent)
-ICALL(DECIMAL_13, "double2decimal", mono_double2decimal) /* FIXME: wrong signature. */
-ICALL(DECIMAL_14, "string2decimal", mono_string2decimal)
+ICALL(DECIMAL_1, ".ctor(double)", mono_decimal_init_double)
+ICALL(DECIMAL_2, ".ctor(single)", mono_decimal_init_single)
+ICALL(DECIMAL_3, "FCallAddSub(System.Decimal&,System.Decimal&,byte)", mono_decimal_addsub)
+ICALL(DECIMAL_4, "FCallCompare", mono_decimal_compare)
+ICALL(DECIMAL_5, "FCallDivide", mono_decimal_divide)
+ICALL(DECIMAL_6, "FCallFloor", mono_decimal_floor)
+ICALL(DECIMAL_7, "FCallMultiply", mono_decimal_multiply)
+ICALL(DECIMAL_8, "FCallRound", mono_decimal_round)
+ICALL(DECIMAL_9, "FCallToInt32", mono_decimal_to_int32)
+ICALL(DECIMAL_10, "FCallTruncate", mono_decimal_truncate)
+ICALL(DECIMAL_11, "GetHashCode", mono_decimal_get_hash_code)
+ICALL(DECIMAL_12, "ToDouble", mono_decimal_to_double)
+ICALL(DECIMAL_13, "ToSingle", mono_decimal_to_float)
 #endif
 
 ICALL_TYPE(DELEGATE, "System.Delegate", DELEGATE_1)
@@ -270,8 +268,8 @@ ICALL(GC_7, "get_MaxGeneration", mono_gc_max_generation)
 ICALL(GC_9, "get_ephemeron_tombstone", ves_icall_System_GC_get_ephemeron_tombstone)
 ICALL(GC_8, "register_ephemeron_array", ves_icall_System_GC_register_ephemeron_array)
 
-ICALL_TYPE(CHARINFO, "System.Globalization.CharUnicodeInfo", CHARINFO_1)
-ICALL(CHARINFO_1, "GetDataTablePointers", ves_icall_System_Globalization_CharUnicodeInfo_GetDataTablePointers)
+ICALL_TYPE(CALDATA, "System.Globalization.CalendarData", CALDATA_1)
+ICALL(CALDATA_1, "fill_calendar_data", ves_icall_System_Globalization_CalendarData_fill_calendar_data)
 
 ICALL_TYPE(COMPINF, "System.Globalization.CompareInfo", COMPINF_1)
 ICALL(COMPINF_1, "assign_sortkey(object,string,System.Globalization.CompareOptions)", ves_icall_System_Globalization_CompareInfo_assign_sortkey)
@@ -281,8 +279,10 @@ ICALL(COMPINF_4, "internal_compare(string,int,int,string,int,int,System.Globaliz
 ICALL(COMPINF_5, "internal_index(string,int,int,char,System.Globalization.CompareOptions,bool)", ves_icall_System_Globalization_CompareInfo_internal_index_char)
 ICALL(COMPINF_6, "internal_index(string,int,int,string,System.Globalization.CompareOptions,bool)", ves_icall_System_Globalization_CompareInfo_internal_index)
 
-ICALL_TYPE(CULINF, "System.Globalization.CultureInfo", CULINF_2)
-ICALL(CULINF_2, "construct_datetime_format", ves_icall_System_Globalization_CultureInfo_construct_datetime_format)
+ICALL_TYPE(CULDATA, "System.Globalization.CultureData", CULDATA_1)
+ICALL(CULDATA_1, "fill_culture_data", ves_icall_System_Globalization_CultureData_fill_culture_data)
+
+ICALL_TYPE(CULINF, "System.Globalization.CultureInfo", CULINF_5)
 ICALL(CULINF_5, "construct_internal_locale_from_lcid", ves_icall_System_Globalization_CultureInfo_construct_internal_locale_from_lcid)
 ICALL(CULINF_6, "construct_internal_locale_from_name", ves_icall_System_Globalization_CultureInfo_construct_internal_locale_from_name)
 ICALL(CULINF_8, "construct_number_format", ves_icall_System_Globalization_CultureInfo_construct_number_format)
@@ -294,6 +294,9 @@ ICALL_TYPE(REGINF, "System.Globalization.RegionInfo", REGINF_1)
 ICALL(REGINF_1, "construct_internal_region_from_lcid", ves_icall_System_Globalization_RegionInfo_construct_internal_region_from_lcid)
 ICALL(REGINF_2, "construct_internal_region_from_name", ves_icall_System_Globalization_RegionInfo_construct_internal_region_from_name)
 
+ICALL_TYPE(TXTINF, "System.Globalization.TextInfo", TXTINF_1)
+ICALL(TXTINF_1, "GetDataTablePointersLite", ves_icall_System_Globalization_TextInfo_GetDataTablePointersLite)
+
 #ifndef PLATFORM_NO_DRIVEINFO
 ICALL_TYPE(IODRIVEINFO, "System.IO.DriveInfo", IODRIVEINFO_1)
 ICALL(IODRIVEINFO_1, "GetDiskFreeSpaceInternal", ves_icall_System_IO_DriveInfo_GetDiskFreeSpace)
@@ -478,6 +481,8 @@ ICALL_TYPE(SOCKEX, "System.Net.Sockets.SocketException", SOCKEX_1)
 ICALL(SOCKEX_1, "WSAGetLastError_internal", ves_icall_System_Net_Sockets_SocketException_WSAGetLastError_internal)
 #endif /* !DISABLE_SOCKETS */
 
+ICALL_TYPE(NUMBER, "System.Number", NUMBER_1)
+ICALL(NUMBER_1, "NumberBufferToDecimal", mono_decimal_from_number)
 ICALL_TYPE(NUMBER_FORMATTER, "System.NumberFormatter", NUMBER_FORMATTER_1)
 ICALL(NUMBER_FORMATTER_1, "GetFormatterTables", ves_icall_System_NumberFormatter_GetFormatterTables)
 
@@ -801,8 +806,8 @@ ICALL(STRING_10, "InternalIntern", ves_icall_System_String_InternalIntern)
 ICALL(STRING_11, "InternalIsInterned", ves_icall_System_String_InternalIsInterned)
 ICALL(STRING_12, "InternalSetLength", ves_icall_System_String_InternalSetLength)
 
-ICALL_TYPE(TENC, "System.Text.Encoding", TENC_1)
-ICALL(TENC_1, "InternalCodePage", ves_icall_System_Text_Encoding_InternalCodePage)
+ICALL_TYPE(TENC, "System.Text.EncodingHelper", TENC_1)
+ICALL(TENC_1, "InternalCodePage", ves_icall_System_Text_EncodingHelper_InternalCodePage)
 
 ICALL_TYPE(ILOCK, "System.Threading.Interlocked", ILOCK_1)
 ICALL(ILOCK_1, "Add(int&,int)", ves_icall_System_Threading_Interlocked_Add_Int)
@@ -924,6 +929,9 @@ ICALL(THREADP_35, "SetMaxThreads", ves_icall_System_Threading_ThreadPool_SetMaxT
 ICALL(THREADP_4, "SetMinThreads", ves_icall_System_Threading_ThreadPool_SetMinThreads)
 ICALL(THREADP_5, "pool_queue", icall_append_job)
 
+ICALL_TYPE(TTIMER, "System.Threading.Timer", TTIMER_1)
+ICALL(TTIMER_1, "GetTimeMonotonic", mono_100ns_ticks)
+
 ICALL_TYPE(VOLATILE, "System.Threading.Volatile", VOLATILE_28)
 ICALL(VOLATILE_28, "Read(T&)", ves_icall_System_Threading_Volatile_Read_T)
 ICALL(VOLATILE_1, "Read(bool&)", ves_icall_System_Threading_Volatile_Read1)
index b1f866b8d63cda28d357d4b727dc568a5af9f520..545d7608c14d0d1aa478f39ff372554dd7e21625 100644 (file)
@@ -95,7 +95,7 @@
 #include <windows.h>
 #include <shlobj.h>
 #endif
-#include "decimal.h"
+#include "decimal-ms.h"
 
 extern MonoString* ves_icall_System_Environment_GetOSVersionString (void) MONO_INTERNAL;
 
@@ -126,8 +126,6 @@ mono_double_ParseImpl (char *ptr, double *result)
        gchar *endptr = NULL;
        *result = 0.0;
 
-       MONO_ARCH_SAVE_REGS;
-
        if (*ptr){
                /* mono_strtod () is not thread-safe */
                mono_mutex_lock (&mono_strtod_mutex);
@@ -149,8 +147,6 @@ ves_icall_System_Array_GetValueImpl (MonoObject *this, guint32 pos)
        gint32 esize;
        gpointer *ea;
 
-       MONO_ARCH_SAVE_REGS;
-
        ao = (MonoArray *)this;
        ac = (MonoClass *)ao->obj.vtable->klass;
 
@@ -170,8 +166,6 @@ ves_icall_System_Array_GetValue (MonoObject *this, MonoObject *idxs)
        MonoArray *ao, *io;
        gint32 i, pos, *ind;
 
-       MONO_ARCH_SAVE_REGS;
-
        MONO_CHECK_ARG_NULL (idxs);
 
        io = (MonoArray *)idxs;
@@ -218,8 +212,6 @@ ves_icall_System_Array_SetValueImpl (MonoArray *this, MonoObject *value, guint32
        gint64 i64 = 0;
        gdouble r64 = 0;
 
-       MONO_ARCH_SAVE_REGS;
-
        if (value)
                vc = value->vtable->klass;
        else
@@ -491,8 +483,6 @@ ves_icall_System_Array_SetValue (MonoArray *this, MonoObject *value,
        MonoClass *ac, *ic;
        gint32 i, pos, *ind;
 
-       MONO_ARCH_SAVE_REGS;
-
        MONO_CHECK_ARG_NULL (idxs);
 
        ic = idxs->obj.vtable->klass;
@@ -533,8 +523,6 @@ ves_icall_System_Array_CreateInstanceImpl (MonoReflectionType *type, MonoArray *
        uintptr_t *sizes, i;
        gboolean bounded = FALSE;
 
-       MONO_ARCH_SAVE_REGS;
-
        MONO_CHECK_ARG_NULL (type);
        MONO_CHECK_ARG_NULL (lengths);
 
@@ -579,8 +567,6 @@ ves_icall_System_Array_CreateInstanceImpl64 (MonoReflectionType *type, MonoArray
        uintptr_t *sizes, i;
        gboolean bounded = FALSE;
 
-       MONO_ARCH_SAVE_REGS;
-
        MONO_CHECK_ARG_NULL (type);
        MONO_CHECK_ARG_NULL (lengths);
 
@@ -621,8 +607,6 @@ ves_icall_System_Array_CreateInstanceImpl64 (MonoReflectionType *type, MonoArray
 ICALL_EXPORT gint32 
 ves_icall_System_Array_GetRank (MonoObject *this)
 {
-       MONO_ARCH_SAVE_REGS;
-
        return this->vtable->klass->rank;
 }
 
@@ -632,8 +616,6 @@ ves_icall_System_Array_GetLength (MonoArray *this, gint32 dimension)
        gint32 rank = ((MonoObject *)this)->vtable->klass->rank;
        uintptr_t length;
 
-       MONO_ARCH_SAVE_REGS;
-
        if ((dimension < 0) || (dimension >= rank))
                mono_raise_exception (mono_get_exception_index_out_of_range ());
        
@@ -654,8 +636,6 @@ ves_icall_System_Array_GetLongLength (MonoArray *this, gint32 dimension)
 {
        gint32 rank = ((MonoObject *)this)->vtable->klass->rank;
 
-       MONO_ARCH_SAVE_REGS;
-
        if ((dimension < 0) || (dimension >= rank))
                mono_raise_exception (mono_get_exception_index_out_of_range ());
        
@@ -670,8 +650,6 @@ ves_icall_System_Array_GetLowerBound (MonoArray *this, gint32 dimension)
 {
        gint32 rank = ((MonoObject *)this)->vtable->klass->rank;
 
-       MONO_ARCH_SAVE_REGS;
-
        if ((dimension < 0) || (dimension >= rank))
                mono_raise_exception (mono_get_exception_index_out_of_range ());
        
@@ -760,8 +738,6 @@ ves_icall_System_Array_GetGenericValueImpl (MonoObject *this, guint32 pos, gpoin
        gint32 esize;
        gpointer *ea;
 
-       MONO_ARCH_SAVE_REGS;
-
        ao = (MonoArray *)this;
        ac = (MonoClass *)ao->obj.vtable->klass;
 
@@ -779,8 +755,6 @@ ves_icall_System_Array_SetGenericValueImpl (MonoObject *this, guint32 pos, gpoin
        gint32 esize;
        gpointer *ea;
 
-       MONO_ARCH_SAVE_REGS;
-
        ao = (MonoArray *)this;
        ac = (MonoClass *)ao->obj.vtable->klass;
        ec = ac->element_class;
@@ -872,16 +846,12 @@ ves_icall_System_Runtime_CompilerServices_RuntimeHelpers_InitializeArray (MonoAr
 ICALL_EXPORT gint
 ves_icall_System_Runtime_CompilerServices_RuntimeHelpers_GetOffsetToStringData (void)
 {
-       MONO_ARCH_SAVE_REGS;
-
        return offsetof (MonoString, chars);
 }
 
 ICALL_EXPORT MonoObject *
 ves_icall_System_Runtime_CompilerServices_RuntimeHelpers_GetObjectValue (MonoObject *obj)
 {
-       MONO_ARCH_SAVE_REGS;
-
        if ((obj == NULL) || (! (obj->vtable->klass->valuetype)))
                return obj;
        else
@@ -950,8 +920,6 @@ ves_icall_System_Runtime_CompilerServices_RuntimeHelpers_SufficientExecutionStac
 ICALL_EXPORT MonoObject *
 ves_icall_System_Object_MemberwiseClone (MonoObject *this)
 {
-       MONO_ARCH_SAVE_REGS;
-
        return mono_object_clone (this);
 }
 
@@ -966,8 +934,6 @@ ves_icall_System_ValueType_InternalGetHashCode (MonoObject *this, MonoArray **fi
        MonoClassField* field;
        gpointer iter;
 
-       MONO_ARCH_SAVE_REGS;
-
        klass = mono_object_class (this);
 
        if (mono_class_num_fields (klass) == 0)
@@ -1025,8 +991,6 @@ ves_icall_System_ValueType_Equals (MonoObject *this, MonoObject *that, MonoArray
        gpointer iter;
        int count = 0;
 
-       MONO_ARCH_SAVE_REGS;
-
        MONO_CHECK_ARG_NULL (that);
 
        if (this->vtable != that->vtable)
@@ -1130,8 +1094,6 @@ ves_icall_System_ValueType_Equals (MonoObject *this, MonoObject *that, MonoArray
 ICALL_EXPORT MonoReflectionType *
 ves_icall_System_Object_GetType (MonoObject *obj)
 {
-       MONO_ARCH_SAVE_REGS;
-
 #ifndef DISABLE_REMOTING
        if (obj->vtable->klass == mono_defaults.transparent_proxy_class)
                return mono_type_get_object (mono_object_domain (obj), &((MonoTransparentProxy*)obj)->remote_class->proxy_class->byval_arg);
@@ -1143,8 +1105,6 @@ ves_icall_System_Object_GetType (MonoObject *obj)
 ICALL_EXPORT void
 mono_type_type_from_obj (MonoReflectionType *mtype, MonoObject *obj)
 {
-       MONO_ARCH_SAVE_REGS;
-
        mtype->type = &obj->vtable->klass->byval_arg;
        g_assert (mtype->type->type);
 }
@@ -1152,8 +1112,6 @@ mono_type_type_from_obj (MonoReflectionType *mtype, MonoObject *obj)
 ICALL_EXPORT gint32
 ves_icall_ModuleBuilder_getToken (MonoReflectionModuleBuilder *mb, MonoObject *obj, gboolean create_open_instance)
 {
-       MONO_ARCH_SAVE_REGS;
-       
        MONO_CHECK_ARG_NULL (obj);
        
        return mono_image_create_token (mb->dynamic_image, obj, create_open_instance, TRUE);
@@ -1164,8 +1122,6 @@ ves_icall_ModuleBuilder_getMethodToken (MonoReflectionModuleBuilder *mb,
                                        MonoReflectionMethod *method,
                                        MonoArray *opt_param_types)
 {
-       MONO_ARCH_SAVE_REGS;
-
        MONO_CHECK_ARG_NULL (method);
        
        return mono_image_create_method_token (
@@ -1175,24 +1131,18 @@ ves_icall_ModuleBuilder_getMethodToken (MonoReflectionModuleBuilder *mb,
 ICALL_EXPORT void
 ves_icall_ModuleBuilder_WriteToFile (MonoReflectionModuleBuilder *mb, HANDLE file)
 {
-       MONO_ARCH_SAVE_REGS;
-
        mono_image_create_pefile (mb, file);
 }
 
 ICALL_EXPORT void
 ves_icall_ModuleBuilder_build_metadata (MonoReflectionModuleBuilder *mb)
 {
-       MONO_ARCH_SAVE_REGS;
-
        mono_image_build_metadata (mb);
 }
 
 ICALL_EXPORT void
 ves_icall_ModuleBuilder_RegisterToken (MonoReflectionModuleBuilder *mb, MonoObject *obj, guint32 token)
 {
-       MONO_ARCH_SAVE_REGS;
-
        mono_image_register_token (mb->dynamic_image, token, obj);
 }
 
@@ -1271,8 +1221,6 @@ type_from_name (const char *str, MonoBoolean ignoreCase)
        char *temp_str = g_strdup (str);
        gboolean type_resolve = FALSE;
 
-       MONO_ARCH_SAVE_REGS;
-
        /* mono_reflection_parse_type() mangles the string */
        if (!mono_reflection_parse_type (temp_str, &info)) {
                mono_reflection_free_type_info (&info);
@@ -1376,16 +1324,12 @@ ves_icall_type_from_handle (MonoType *handle)
 {
        MonoDomain *domain = mono_domain_get (); 
 
-       MONO_ARCH_SAVE_REGS;
-
        return mono_type_get_object (domain, handle);
 }
 
 ICALL_EXPORT MonoBoolean
 ves_icall_System_Type_EqualsInternal (MonoReflectionType *type, MonoReflectionType *c)
 {
-       MONO_ARCH_SAVE_REGS;
-
        if (c && type->type && c->type)
                return mono_metadata_type_equal (type->type, c->type);
        else
@@ -1419,8 +1363,6 @@ ves_icall_type_GetTypeCodeInternal (MonoReflectionType *type)
 {
        int t = type->type->type;
 
-       MONO_ARCH_SAVE_REGS;
-
        if (type->type->byref)
                return TYPECODE_OBJECT;
 
@@ -1505,8 +1447,6 @@ ves_icall_type_is_subtype_of (MonoReflectionType *type, MonoReflectionType *c, M
        MonoClass *klass;
        MonoClass *klassc;
 
-       MONO_ARCH_SAVE_REGS;
-
        g_assert (type != NULL);
        
        domain = ((MonoObject *)type)->vtable->domain;
@@ -1558,8 +1498,6 @@ ves_icall_type_is_assignable_from (MonoReflectionType *type, MonoReflectionType
        MonoClass *klass;
        MonoClass *klassc;
 
-       MONO_ARCH_SAVE_REGS;
-
        g_assert (type != NULL);
        
        domain = ((MonoObject *)type)->vtable->domain;
@@ -1692,7 +1630,6 @@ ves_icall_get_method_info (MonoMethod *method, MonoMethodInfo *info)
        MonoError error;
        MonoDomain *domain = mono_domain_get ();
        MonoMethodSignature* sig;
-       MONO_ARCH_SAVE_REGS;
 
        sig = mono_method_signature_checked (method, &error);
        if (!mono_error_ok (&error))
@@ -1759,7 +1696,6 @@ ICALL_EXPORT MonoReflectionType*
 ves_icall_MonoField_GetParentType (MonoReflectionField *field, MonoBoolean declaring)
 {
        MonoClass *parent;
-       MONO_ARCH_SAVE_REGS;
 
        parent = declaring? field->field->parent: field->klass;
 
@@ -1791,8 +1727,6 @@ ves_icall_MonoField_SetValueInternal (MonoReflectionField *field, MonoObject *ob
        MonoType *type;
        gchar *v;
 
-       MONO_ARCH_SAVE_REGS;
-
        if (field->klass->image->assembly->ref_only)
                mono_raise_exception (mono_get_exception_invalid_operation (
                                        "It is illegal to set the value on a field on a type loaded using the ReflectionOnly methods."));
@@ -1887,8 +1821,6 @@ ves_icall_MonoField_GetRawConstantValue (MonoReflectionField *this)
        MonoType *t;
        MonoError error;
 
-       MONO_ARCH_SAVE_REGS;
-       
        mono_class_init (field->parent);
 
        t = mono_field_get_type_checked (field, &error);
@@ -1989,8 +1921,6 @@ ves_icall_get_property_info (MonoReflectionProperty *property, MonoPropertyInfo
 {
        MonoDomain *domain = mono_object_domain (property); 
 
-       MONO_ARCH_SAVE_REGS;
-
        if ((req_info & PInfo_ReflectedType) != 0)
                MONO_STRUCT_SETREF (info, parent, mono_type_get_object (domain, &property->klass->byval_arg));
        if ((req_info & PInfo_DeclaringType) != 0)
@@ -2020,8 +1950,6 @@ ves_icall_get_event_info (MonoReflectionMonoEvent *event, MonoEventInfo *info)
 {
        MonoDomain *domain = mono_object_domain (event); 
 
-       MONO_ARCH_SAVE_REGS;
-
        MONO_STRUCT_SETREF (info, reflected_type, mono_type_get_object (domain, &event->klass->byval_arg));
        MONO_STRUCT_SETREF (info, declaring_type, mono_type_get_object (domain, &event->event->parent->byval_arg));
 
@@ -2156,7 +2084,6 @@ ves_icall_Type_GetInterfaceMapData (MonoReflectionType *type, MonoReflectionType
        int i = 0, len, ioffset;
        MonoDomain *domain;
 
-       MONO_ARCH_SAVE_REGS;
        mono_class_init_or_throw (class);
        mono_class_init_or_throw (iclass);
 
@@ -2201,8 +2128,6 @@ ves_icall_MonoType_GetElementType (MonoReflectionType *type)
 {
        MonoClass *class;
 
-       MONO_ARCH_SAVE_REGS;
-
        if (!type->type->byref && type->type->type == MONO_TYPE_SZARRAY)
                return mono_type_get_object (mono_object_domain (type), &type->type->data.klass->byval_arg);
 
@@ -2231,24 +2156,18 @@ ves_icall_get_type_parent (MonoReflectionType *type)
 ICALL_EXPORT MonoBoolean
 ves_icall_type_ispointer (MonoReflectionType *type)
 {
-       MONO_ARCH_SAVE_REGS;
-
        return type->type->type == MONO_TYPE_PTR;
 }
 
 ICALL_EXPORT MonoBoolean
 ves_icall_type_isprimitive (MonoReflectionType *type)
 {
-       MONO_ARCH_SAVE_REGS;
-
        return (!type->type->byref && (((type->type->type >= MONO_TYPE_BOOLEAN) && (type->type->type <= MONO_TYPE_R8)) || (type->type->type == MONO_TYPE_I) || (type->type->type == MONO_TYPE_U)));
 }
 
 ICALL_EXPORT MonoBoolean
 ves_icall_type_isbyref (MonoReflectionType *type)
 {
-       MONO_ARCH_SAVE_REGS;
-
        return type->type->byref;
 }
 
@@ -2282,8 +2201,6 @@ ves_icall_MonoType_get_DeclaringType (MonoReflectionType *type)
        MonoDomain *domain = mono_domain_get ();
        MonoClass *class;
 
-       MONO_ARCH_SAVE_REGS;
-
        if (type->type->byref)
                return NULL;
        if (type->type->type == MONO_TYPE_VAR) {
@@ -2353,7 +2270,6 @@ ves_icall_MonoType_GetGenericArguments (MonoReflectionType *type)
        MonoDomain *domain = mono_object_domain (type);
        MonoVTable *array_vtable = mono_class_vtable_full (domain, mono_array_class_get_cached (mono_defaults.systemtype_class, 1), TRUE);
        int i;
-       MONO_ARCH_SAVE_REGS;
 
        klass = mono_class_from_mono_type (type->type);
 
@@ -2379,7 +2295,6 @@ ICALL_EXPORT gboolean
 ves_icall_Type_get_IsGenericTypeDefinition (MonoReflectionType *type)
 {
        MonoClass *klass;
-       MONO_ARCH_SAVE_REGS;
 
        if (!IS_MONOTYPE (type))
                return FALSE;
@@ -2395,7 +2310,6 @@ ICALL_EXPORT MonoReflectionType*
 ves_icall_Type_GetGenericTypeDefinition_impl (MonoReflectionType *type)
 {
        MonoClass *klass;
-       MONO_ARCH_SAVE_REGS;
 
        if (type->type->byref)
                return NULL;
@@ -2455,7 +2369,6 @@ ICALL_EXPORT gboolean
 ves_icall_Type_get_IsGenericInstance (MonoReflectionType *type)
 {
        MonoClass *klass;
-       MONO_ARCH_SAVE_REGS;
 
        if (type->type->byref)
                return FALSE;
@@ -2469,7 +2382,6 @@ ICALL_EXPORT gboolean
 ves_icall_Type_get_IsGenericType (MonoReflectionType *type)
 {
        MonoClass *klass;
-       MONO_ARCH_SAVE_REGS;
 
        if (!IS_MONOTYPE (type))
                return FALSE;
@@ -2484,8 +2396,6 @@ ves_icall_Type_get_IsGenericType (MonoReflectionType *type)
 ICALL_EXPORT gint32
 ves_icall_Type_GetGenericParameterPosition (MonoReflectionType *type)
 {
-       MONO_ARCH_SAVE_REGS;
-
        if (!IS_MONOTYPE (type))
                return -1;
 
@@ -2497,8 +2407,6 @@ ves_icall_Type_GetGenericParameterPosition (MonoReflectionType *type)
 ICALL_EXPORT GenericParameterAttributes
 ves_icall_Type_GetGenericParameterAttributes (MonoReflectionType *type)
 {
-       MONO_ARCH_SAVE_REGS;
-
        g_assert (IS_MONOTYPE (type));
        g_assert (is_generic_parameter (type->type));
        return mono_generic_param_info (type->type->data.generic_param)->flags;
@@ -2513,8 +2421,6 @@ ves_icall_Type_GetGenericParameterConstraints (MonoReflectionType *type)
        MonoArray *res;
        int i, count;
 
-       MONO_ARCH_SAVE_REGS;
-
        g_assert (IS_MONOTYPE (type));
 
        domain = mono_object_domain (type);
@@ -2533,14 +2439,12 @@ ves_icall_Type_GetGenericParameterConstraints (MonoReflectionType *type)
 ICALL_EXPORT MonoBoolean
 ves_icall_MonoType_get_IsGenericParameter (MonoReflectionType *type)
 {
-       MONO_ARCH_SAVE_REGS;
        return is_generic_parameter (type->type);
 }
 
 ICALL_EXPORT MonoBoolean
 ves_icall_TypeBuilder_get_IsGenericParameter (MonoReflectionTypeBuilder *tb)
 {
-       MONO_ARCH_SAVE_REGS;
        return is_generic_parameter (tb->type.type);
 }
 
@@ -2560,8 +2464,6 @@ ves_icall_MonoType_GetCorrespondingInflatedMethod (MonoReflectionType *type,
        MonoMethod *method;
        gpointer iter;
                
-       MONO_ARCH_SAVE_REGS;
-
        domain = ((MonoObject *)type)->vtable->domain;
 
        klass = mono_class_from_mono_type (type->type);
@@ -2584,8 +2486,6 @@ ves_icall_MonoType_get_DeclaringMethod (MonoReflectionType *ref_type)
        MonoMethod *method;
        MonoType *type = ref_type->type;
 
-       MONO_ARCH_SAVE_REGS;
-
        if (type->byref || (type->type != MONO_TYPE_MVAR && type->type != MONO_TYPE_VAR))
                mono_raise_exception (mono_get_exception_invalid_operation ("DeclaringMethod can only be used on generic arguments"));
        if (type->type == MONO_TYPE_VAR)
@@ -2672,8 +2572,6 @@ ves_icall_MonoMethod_GetGenericMethodDefinition (MonoReflectionMethod *method)
        MonoMethodInflated *imethod;
        MonoMethod *result;
 
-       MONO_ARCH_SAVE_REGS;
-
        if (method->method->is_generic)
                return method;
 
@@ -2719,16 +2617,12 @@ ves_icall_MonoMethod_GetGenericMethodDefinition (MonoReflectionMethod *method)
 ICALL_EXPORT gboolean
 ves_icall_MonoMethod_get_IsGenericMethod (MonoReflectionMethod *method)
 {
-       MONO_ARCH_SAVE_REGS;
-
        return mono_method_signature (method->method)->generic_param_count != 0;
 }
 
 ICALL_EXPORT gboolean
 ves_icall_MonoMethod_get_IsGenericMethodDefinition (MonoReflectionMethod *method)
 {
-       MONO_ARCH_SAVE_REGS;
-
        return method->method->is_generic;
 }
 
@@ -2738,7 +2632,6 @@ ves_icall_MonoMethod_GetGenericArguments (MonoReflectionMethod *method)
        MonoArray *res;
        MonoDomain *domain;
        int count, i;
-       MONO_ARCH_SAVE_REGS;
 
        domain = mono_object_domain (method);
 
@@ -2785,8 +2678,6 @@ ves_icall_InternalInvoke (MonoReflectionMethod *method, MonoObject *this, MonoAr
        int pcount;
        void *obj = this;
 
-       MONO_ARCH_SAVE_REGS;
-
        *exc = NULL;
 
        if (mono_security_core_clr_enabled ())
@@ -2894,10 +2785,7 @@ ves_icall_InternalExecute (MonoReflectionMethod *method, MonoObject *this, MonoA
        MonoObject *result;
        int i, j, outarg_count = 0;
 
-       MONO_ARCH_SAVE_REGS;
-
        if (m->klass == mono_defaults.object_class) {
-
                if (!strcmp (m->name, "FieldGetter")) {
                        MonoClass *k = this->vtable->klass;
                        MonoString *name;
@@ -3084,8 +2972,6 @@ ves_icall_System_Enum_ToObject (MonoReflectionType *enumType, MonoObject *value)
        MonoType *etype;
        guint64 val;
        
-       MONO_ARCH_SAVE_REGS;
-
        MONO_CHECK_ARG_NULL (enumType);
        MONO_CHECK_ARG_NULL (value);
 
@@ -3134,8 +3020,6 @@ ves_icall_System_Enum_get_value (MonoObject *this)
        gpointer src;
        int size;
 
-       MONO_ARCH_SAVE_REGS;
-
        if (!this)
                return NULL;
 
@@ -3158,8 +3042,6 @@ ves_icall_System_Enum_get_underlying_type (MonoReflectionType *type)
        MonoType *etype;
        MonoClass *klass;
 
-       MONO_ARCH_SAVE_REGS;
-
        klass = mono_class_from_mono_type (type->type);
        mono_class_init_or_throw (klass);
 
@@ -3254,8 +3136,6 @@ ves_icall_get_enum_info (MonoReflectionType *type, MonoEnumInfo *info)
        gpointer iter;
        MonoClassField *field;
 
-       MONO_ARCH_SAVE_REGS;
-
        mono_class_init_or_throw (enumc);
 
        MONO_STRUCT_SETREF (info, utype, mono_type_get_object (domain, mono_class_enum_basetype (enumc)));
@@ -3406,8 +3286,6 @@ ves_icall_Type_GetFields_internal (MonoReflectionType *type, guint32 bflags, Mon
        MonoClassField *field;
        MonoPtrArray tmp_array;
 
-       MONO_ARCH_SAVE_REGS;
-
        domain = ((MonoObject *)type)->vtable->domain;
        if (type->type->byref)
                return mono_array_new (domain, mono_defaults.field_info_class, 0);
@@ -3655,8 +3533,6 @@ ves_icall_Type_GetConstructors_internal (MonoReflectionType *type, guint32 bflag
        gpointer iter = NULL;
        MonoPtrArray tmp_array;
        
-       MONO_ARCH_SAVE_REGS;
-
        mono_ptr_array_init (tmp_array, 4); /*FIXME, guestimating*/
 
        domain = ((MonoObject *)type)->vtable->domain;
@@ -3764,8 +3640,6 @@ ves_icall_Type_GetPropertiesByName (MonoReflectionType *type, MonoString *name,
        GHashTable *properties = NULL;
        MonoPtrArray tmp_array;
 
-       MONO_ARCH_SAVE_REGS;
-
        mono_ptr_array_init (tmp_array, 8); /*This the average for ASP.NET types*/
 
        if (!System_Reflection_PropertyInfo)
@@ -3879,8 +3753,6 @@ ves_icall_MonoType_GetEvent (MonoReflectionType *type, MonoString *name, guint32
        gchar *event_name;
        int (*compare_func) (const char *s1, const char *s2);
 
-       MONO_ARCH_SAVE_REGS;
-
        event_name = mono_string_to_utf8 (name);
        if (type->type->byref)
                return NULL;
@@ -3969,8 +3841,6 @@ ves_icall_Type_GetEvents_internal (MonoReflectionType *type, guint32 bflags, Mon
        GHashTable *events = NULL;
        MonoPtrArray tmp_array;
 
-       MONO_ARCH_SAVE_REGS;
-
        mono_ptr_array_init (tmp_array, 4);
 
        if (!System_Reflection_EventInfo)
@@ -4070,8 +3940,6 @@ ves_icall_Type_GetNestedType (MonoReflectionType *type, MonoString *name, guint3
        char *str;
        gpointer iter;
        
-       MONO_ARCH_SAVE_REGS;
-
        if (name == NULL)
                mono_raise_exception (mono_get_exception_argument_null ("name"));
        
@@ -4133,8 +4001,6 @@ ves_icall_Type_GetNestedTypes (MonoReflectionType *type, guint32 bflags)
        gpointer iter;
        MonoPtrArray tmp_array;
 
-       MONO_ARCH_SAVE_REGS;
-
        domain = ((MonoObject *)type)->vtable->domain;
        if (type->type->byref)
                return mono_array_new (domain, mono_defaults.monotype_class, 0);
@@ -4187,8 +4053,6 @@ ves_icall_System_Reflection_Assembly_InternalGetType (MonoReflectionAssembly *as
        MonoTypeNameParse info;
        gboolean type_resolve;
 
-       MONO_ARCH_SAVE_REGS;
-
        /* On MS.NET, this does not fire a TypeResolve event */
        type_resolve = TRUE;
        str = mono_string_to_utf8 (name);
@@ -4332,8 +4196,6 @@ ves_icall_System_Reflection_Assembly_get_code_base (MonoReflectionAssembly *asse
        gchar *absolute;
        gchar *dirname;
        
-       MONO_ARCH_SAVE_REGS;
-
        if (g_path_is_absolute (mass->image->name)) {
                absolute = g_strdup (mass->image->name);
                dirname = g_path_get_dirname (absolute);
@@ -4379,8 +4241,6 @@ ves_icall_System_Reflection_Assembly_get_global_assembly_cache (MonoReflectionAs
 {
        MonoAssembly *mass = assembly->assembly;
 
-       MONO_ARCH_SAVE_REGS;
-
        return mass->in_gac;
 }
 
@@ -4391,8 +4251,6 @@ ves_icall_System_Reflection_Assembly_load_with_partial_name (MonoString *mname,
        MonoAssembly *res;
        MonoImageOpenStatus status;
        
-       MONO_ARCH_SAVE_REGS;
-
        name = mono_string_to_utf8 (mname);
        res = mono_assembly_load_with_partial_name (name, &status);
 
@@ -4409,8 +4267,6 @@ ves_icall_System_Reflection_Assembly_get_location (MonoReflectionAssembly *assem
        MonoDomain *domain = mono_object_domain (assembly); 
        MonoString *res;
 
-       MONO_ARCH_SAVE_REGS;
-
        res = mono_string_new (domain, mono_image_get_filename (assembly->assembly->image));
 
        return res;
@@ -4419,8 +4275,6 @@ ves_icall_System_Reflection_Assembly_get_location (MonoReflectionAssembly *assem
 ICALL_EXPORT MonoBoolean
 ves_icall_System_Reflection_Assembly_get_ReflectionOnly (MonoReflectionAssembly *assembly)
 {
-       MONO_ARCH_SAVE_REGS;
-
        return assembly->assembly->ref_only;
 }
 
@@ -4429,8 +4283,6 @@ ves_icall_System_Reflection_Assembly_InternalImageRuntimeVersion (MonoReflection
 {
        MonoDomain *domain = mono_object_domain (assembly); 
 
-       MONO_ARCH_SAVE_REGS;
-
        return mono_string_new (domain, assembly->assembly->image->version);
 }
 
@@ -4441,8 +4293,6 @@ ves_icall_System_Reflection_Assembly_get_EntryPoint (MonoReflectionAssembly *ass
        MonoMethod *method;
        guint32 token = mono_image_get_entry_point (assembly->assembly->image);
 
-       MONO_ARCH_SAVE_REGS;
-
        if (!token)
                return NULL;
        method = mono_get_method_checked (assembly->assembly->image, token, NULL, NULL, &error);
@@ -4465,8 +4315,6 @@ ves_icall_System_Reflection_Assembly_GetManifestResourceNames (MonoReflectionAss
        int i;
        const char *val;
 
-       MONO_ARCH_SAVE_REGS;
-
        for (i = 0; i < table->rows; ++i) {
                val = mono_metadata_string_heap (assembly->assembly->image, mono_metadata_decode_row_col (table, i, MONO_MANIFEST_NAME));
                mono_array_setref (result, i, mono_string_new (mono_object_domain (assembly), val));
@@ -4515,8 +4363,6 @@ ves_icall_System_Reflection_Assembly_GetReferencedAssemblies (MonoReflectionAsse
        MonoImage *image = assembly->assembly->image;
        MonoTableInfo *t;
 
-       MONO_ARCH_SAVE_REGS;
-
        if (!System_Reflection_AssemblyName)
                System_Reflection_AssemblyName = mono_class_from_name (
                        mono_defaults.corlib, "System.Reflection", "AssemblyName");
@@ -4615,8 +4461,6 @@ ves_icall_System_Reflection_Assembly_GetManifestResourceInternal (MonoReflection
        const char *val;
        MonoImage *module;
 
-       MONO_ARCH_SAVE_REGS;
-
        for (i = 0; i < table->rows; ++i) {
                mono_metadata_decode_row (table, i, cols, MONO_MANIFEST_SIZE);
                val = mono_metadata_string_heap (assembly->assembly->image, cols [MONO_MANIFEST_NAME]);
@@ -4658,8 +4502,6 @@ ves_icall_System_Reflection_Assembly_GetManifestResourceInfoInternal (MonoReflec
        const char *val;
        char *n;
 
-       MONO_ARCH_SAVE_REGS;
-
        n = mono_string_to_utf8 (name);
        for (i = 0; i < table->rows; ++i) {
                mono_metadata_decode_row (table, i, cols, MONO_MANIFEST_SIZE);
@@ -4722,8 +4564,6 @@ ves_icall_System_Reflection_Assembly_GetFilesInternal (MonoReflectionAssembly *a
        const char *val;
        char *n;
 
-       MONO_ARCH_SAVE_REGS;
-
        /* check hash if needed */
        if (name) {
                n = mono_string_to_utf8 (name);
@@ -4902,8 +4742,6 @@ ves_icall_System_Reflection_Assembly_GetExecutingAssembly (void)
 {
        MonoMethod *dest = NULL;
 
-       MONO_ARCH_SAVE_REGS;
-
        mono_stack_walk_no_il (get_executing, &dest);
        g_assert (dest);
        return mono_assembly_get_object (mono_domain_get (), dest->klass->image->assembly);
@@ -4915,8 +4753,6 @@ ves_icall_System_Reflection_Assembly_GetEntryAssembly (void)
 {
        MonoDomain* domain = mono_domain_get ();
 
-       MONO_ARCH_SAVE_REGS;
-
        if (!domain->entry_assembly)
                return NULL;
 
@@ -4929,8 +4765,6 @@ ves_icall_System_Reflection_Assembly_GetCallingAssembly (void)
        MonoMethod *m;
        MonoMethod *dest;
 
-       MONO_ARCH_SAVE_REGS;
-
        dest = NULL;
        mono_stack_walk_no_il (get_executing, &dest);
        m = dest;
@@ -4989,8 +4823,6 @@ fill_reflection_assembly_name (MonoDomain *domain, MonoReflectionAssemblyName *a
        gchar *codebase;
        MonoBoolean assembly_ref = 0;
 
-       MONO_ARCH_SAVE_REGS;
-
        MONO_OBJECT_SETREF (aname, name, mono_string_new (domain, name->name));
        aname->major = name->major;
        aname->minor = name->minor;
@@ -5099,8 +4931,6 @@ ves_icall_System_Reflection_Assembly_FillName (MonoReflectionAssembly *assembly,
        gchar *absolute;
        MonoAssembly *mass = assembly->assembly;
 
-       MONO_ARCH_SAVE_REGS;
-
        if (g_path_is_absolute (mass->image->name)) {
                fill_reflection_assembly_name (mono_object_domain (assembly),
                        aname, &mass->aname, mass->image->name, TRUE,
@@ -5124,9 +4954,7 @@ ves_icall_System_Reflection_Assembly_InternalGetAssemblyName (MonoString *fname,
        gboolean res;
        MonoImage *image;
        MonoAssemblyName name;
-       char *dirname
-
-       MONO_ARCH_SAVE_REGS;
+       char *dirname;
 
        filename = mono_string_to_utf8 (fname);
 
@@ -5246,8 +5074,6 @@ ves_icall_System_Reflection_Assembly_GetTypes (MonoReflectionAssembly *assembly,
        GList *list = NULL;
        int i, len, ex_count;
 
-       MONO_ARCH_SAVE_REGS;
-
        domain = mono_object_domain (assembly);
 
        g_assert (!assembly_is_dynamic (assembly->assembly));
@@ -5377,8 +5203,6 @@ ves_icall_System_Reflection_Module_GetGlobalType (MonoReflectionModule *module)
        MonoDomain *domain = mono_object_domain (module); 
        MonoClass *klass;
 
-       MONO_ARCH_SAVE_REGS;
-
        g_assert (module->image);
 
        if (image_is_dynamic (module->image) && ((MonoDynamicImage*)(module->image))->initial_image)
@@ -5402,8 +5226,6 @@ ves_icall_System_Reflection_Module_GetGuidInternal (MonoReflectionModule *module
 {
        MonoDomain *domain = mono_object_domain (module); 
 
-       MONO_ARCH_SAVE_REGS;
-
        g_assert (module->image);
        return mono_string_new (domain, module->image->guid);
 }
@@ -5445,8 +5267,6 @@ ves_icall_System_Reflection_Module_InternalGetTypes (MonoReflectionModule *modul
        MonoArray *exceptions;
        int i;
 
-       MONO_ARCH_SAVE_REGS;
-
        if (!module->image)
                return mono_array_new (mono_object_domain (module), mono_defaults.monotype_class, 0);
        else {
@@ -5758,8 +5578,6 @@ ves_icall_ModuleBuilder_create_modified_type (MonoReflectionTypeBuilder *tb, Mon
        char *str = mono_string_to_utf8 (smodifiers);
        char *p;
 
-       MONO_ARCH_SAVE_REGS;
-
        klass = mono_class_from_mono_type (tb->type.type);
        p = str;
        /* logic taken from mono_reflection_parse_type(): keep in sync */
@@ -5816,8 +5634,6 @@ ves_icall_Type_IsArrayImpl (MonoReflectionType *t)
        MonoType *type;
        MonoBoolean res;
 
-       MONO_ARCH_SAVE_REGS;
-
        type = t->type;
        res = !type->byref && (type->type == MONO_TYPE_ARRAY || type->type == MONO_TYPE_SZARRAY);
 
@@ -5843,8 +5659,6 @@ ves_icall_Type_make_array_type (MonoReflectionType *type, int rank)
 {
        MonoClass *klass, *aklass;
 
-       MONO_ARCH_SAVE_REGS;
-
        klass = mono_class_from_mono_type (type->type);
        check_for_invalid_type (klass);
 
@@ -5861,8 +5675,6 @@ ves_icall_Type_make_byref_type (MonoReflectionType *type)
 {
        MonoClass *klass;
 
-       MONO_ARCH_SAVE_REGS;
-
        klass = mono_class_from_mono_type (type->type);
        mono_class_init_or_throw (klass);
        check_for_invalid_type (klass);
@@ -5893,8 +5705,6 @@ ves_icall_System_Delegate_CreateDelegate_internal (MonoReflectionType *type, Mon
        gpointer func;
        MonoMethod *method = info->method;
 
-       MONO_ARCH_SAVE_REGS;
-
        mono_class_init_or_throw (delegate_class);
 
        mono_assert (delegate_class->parent == mono_defaults.multicastdelegate_class);
@@ -6020,8 +5830,6 @@ ves_icall_System_CurrentSystemTimeZone_GetTimeZoneData (guint32 year, MonoArray
 
        gmtoff_st = gmtoff_ds = transitioned = 0;
 
-       MONO_ARCH_SAVE_REGS;
-
        MONO_CHECK_ARG_NULL (data);
        MONO_CHECK_ARG_NULL (names);
 
@@ -6231,24 +6039,18 @@ mono_array_get_byte_length (MonoArray *array)
 ICALL_EXPORT gint32 
 ves_icall_System_Buffer_ByteLengthInternal (MonoArray *array) 
 {
-       MONO_ARCH_SAVE_REGS;
-
        return mono_array_get_byte_length (array);
 }
 
 ICALL_EXPORT gint8 
 ves_icall_System_Buffer_GetByteInternal (MonoArray *array, gint32 idx) 
 {
-       MONO_ARCH_SAVE_REGS;
-
        return mono_array_get (array, gint8, idx);
 }
 
 ICALL_EXPORT void 
 ves_icall_System_Buffer_SetByteInternal (MonoArray *array, gint32 idx, gint8 value) 
 {
-       MONO_ARCH_SAVE_REGS;
-
        mono_array_set (array, gint8, idx, value);
 }
 
@@ -6257,8 +6059,6 @@ ves_icall_System_Buffer_BlockCopyInternal (MonoArray *src, gint32 src_offset, Mo
 {
        guint8 *src_buf, *dest_buf;
 
-       MONO_ARCH_SAVE_REGS;
-
        /* This is called directly from the class libraries without going through the managed wrapper */
        MONO_CHECK_ARG_NULL (src);
        MONO_CHECK_ARG_NULL (dest);
@@ -6289,8 +6089,6 @@ ves_icall_Remoting_RealProxy_GetTransparentProxy (MonoObject *this, MonoString *
        MonoType *type;
        MonoClass *klass;
 
-       MONO_ARCH_SAVE_REGS;
-
        res = mono_object_new (domain, mono_defaults.transparent_proxy_class);
        tp = (MonoTransparentProxy*) res;
        
@@ -6317,8 +6115,6 @@ ves_icall_Remoting_RealProxy_InternalGetProxyType (MonoTransparentProxy *tp)
 MonoString*
 ves_icall_System_Environment_get_UserName (void)
 {
-       MONO_ARCH_SAVE_REGS;
-
        /* using glib is more portable */
        return mono_string_new (mono_domain_get (), g_get_user_name ());
 }
@@ -6381,8 +6177,6 @@ ves_icall_System_Environment_get_Platform (void)
 ICALL_EXPORT MonoString *
 ves_icall_System_Environment_get_NewLine (void)
 {
-       MONO_ARCH_SAVE_REGS;
-
 #if defined (HOST_WIN32)
        return mono_string_new (mono_domain_get (), "\r\n");
 #else
@@ -6396,8 +6190,6 @@ ves_icall_System_Environment_GetEnvironmentVariable (MonoString *name)
        const gchar *value;
        gchar *utf8_name;
 
-       MONO_ARCH_SAVE_REGS;
-
        if (name == NULL)
                return NULL;
 
@@ -6489,8 +6281,6 @@ ves_icall_System_Environment_GetEnvironmentVariableNames (void)
        gchar **e, **parts;
        int n;
 
-       MONO_ARCH_SAVE_REGS;
-
        n = 0;
        for (e = environ; *e != 0; ++ e)
                ++ n;
@@ -6533,8 +6323,6 @@ ves_icall_System_Environment_InternalSetEnvironmentVariable (MonoString *name, M
        MonoError error;
 #endif
 
-       MONO_ARCH_SAVE_REGS;
-       
 #ifdef HOST_WIN32
        utf16_name = mono_string_to_utf16 (name);
        if ((value == NULL) || (mono_string_length (value) == 0) || (mono_string_chars (value)[0] == 0)) {
@@ -6573,8 +6361,6 @@ ves_icall_System_Environment_InternalSetEnvironmentVariable (MonoString *name, M
 ICALL_EXPORT void
 ves_icall_System_Environment_Exit (int result)
 {
-       MONO_ARCH_SAVE_REGS;
-
        mono_environment_exitcode_set (result);
 
 /* FIXME: There are some cleanup hangs that should be worked out, but
@@ -6635,9 +6421,7 @@ ves_icall_System_Environment_GetLogicalDrives (void)
        MonoDomain *domain = mono_domain_get ();
        gint len;
 
-       MONO_ARCH_SAVE_REGS;
-
-        buf [0] = '\0';
+       buf [0] = '\0';
        ptr = buf;
 
        while (size > initial_size) {
@@ -6690,8 +6474,6 @@ ves_icall_System_IO_DriveInfo_GetDriveFormat (MonoString *path)
 ICALL_EXPORT MonoString *
 ves_icall_System_Environment_InternalGetHome (void)
 {
-       MONO_ARCH_SAVE_REGS;
-
        return mono_string_new (mono_domain_get (), g_get_home_dir ());
 }
 
@@ -6723,7 +6505,7 @@ static const char *encodings [] = {
  * returns the code page as a string
  */
 ICALL_EXPORT MonoString*
-ves_icall_System_Text_Encoding_InternalCodePage (gint32 *int_code_page) 
+ves_icall_System_Text_EncodingHelper_InternalCodePage (gint32 *int_code_page) 
 {
        const char *cset;
        const char *p;
@@ -6734,7 +6516,6 @@ ves_icall_System_Text_Encoding_InternalCodePage (gint32 *int_code_page)
        int i;
        
        *int_code_page = -1;
-       MONO_ARCH_SAVE_REGS;
 
        g_get_charset (&cset);
        c = codepage = strdup (cset);
@@ -6797,8 +6578,6 @@ ves_icall_MonoMethodMessage_InitMessage (MonoMethodMessage *this,
                                         MonoReflectionMethod *method,
                                         MonoArray *out_args)
 {
-       MONO_ARCH_SAVE_REGS;
-
        mono_message_init (mono_object_domain (this), this, method, out_args);
 }
 
@@ -6806,8 +6585,6 @@ ves_icall_MonoMethodMessage_InitMessage (MonoMethodMessage *this,
 ICALL_EXPORT MonoBoolean
 ves_icall_IsTransparentProxy (MonoObject *proxy)
 {
-       MONO_ARCH_SAVE_REGS;
-
        if (!proxy)
                return 0;
 
@@ -6875,8 +6652,6 @@ ves_icall_System_Runtime_Activation_ActivationServices_EnableProxyActivation (Mo
        MonoClass *klass;
        MonoVTable* vtable;
 
-       MONO_ARCH_SAVE_REGS;
-
        klass = mono_class_from_mono_type (type->type);
        vtable = mono_class_vtable_full (mono_domain_get (), klass, TRUE);
 
@@ -6899,8 +6674,6 @@ ves_icall_System_Runtime_Activation_ActivationServices_AllocateUninitializedClas
        MonoClass *klass;
        MonoDomain *domain;
        
-       MONO_ARCH_SAVE_REGS;
-
        domain = mono_object_domain (type);
        klass = mono_class_from_mono_type (type->type);
        mono_class_init_or_throw (klass);
@@ -6920,8 +6693,6 @@ ves_icall_System_Runtime_Activation_ActivationServices_AllocateUninitializedClas
 ICALL_EXPORT MonoString *
 ves_icall_System_IO_get_temp_path (void)
 {
-       MONO_ARCH_SAVE_REGS;
-
        return mono_string_new (mono_domain_get (), g_get_tmp_dir ());
 }
 
@@ -6936,8 +6707,6 @@ ves_icall_System_IO_DriveInfo_GetDiskFreeSpace (MonoString *path_name, guint64 *
        ULARGE_INTEGER wapi_total_number_of_bytes;
        ULARGE_INTEGER wapi_total_number_of_free_bytes;
 
-       MONO_ARCH_SAVE_REGS;
-
        *error = ERROR_SUCCESS;
        result = GetDiskFreeSpaceEx (mono_string_chars (path_name), &wapi_free_bytes_avail, &wapi_total_number_of_bytes,
                                     &wapi_total_number_of_free_bytes);
@@ -6959,8 +6728,6 @@ ves_icall_System_IO_DriveInfo_GetDiskFreeSpace (MonoString *path_name, guint64 *
 ICALL_EXPORT guint32
 ves_icall_System_IO_DriveInfo_GetDriveType (MonoString *root_path_name)
 {
-       MONO_ARCH_SAVE_REGS;
-
        return GetDriveType (mono_string_chars (root_path_name));
 }
 #endif
@@ -6968,8 +6735,6 @@ ves_icall_System_IO_DriveInfo_GetDriveType (MonoString *root_path_name)
 ICALL_EXPORT gpointer
 ves_icall_RuntimeMethod_GetFunctionPointer (MonoMethod *method)
 {
-       MONO_ARCH_SAVE_REGS;
-
        return mono_compile_method (method);
 }
 
@@ -6979,8 +6744,6 @@ ves_icall_System_Configuration_DefaultConfig_get_machine_config_path (void)
        MonoString *mcpath;
        gchar *path;
 
-       MONO_ARCH_SAVE_REGS;
-
        path = g_build_path (G_DIR_SEPARATOR_S, mono_get_config_dir (), "mono", mono_get_runtime_info ()->framework_version, "machine.config", NULL);
 
 #if defined (HOST_WIN32)
@@ -7008,8 +6771,6 @@ get_bundled_app_config (void)
        gsize len;
        gchar *module;
 
-       MONO_ARCH_SAVE_REGS;
-
        domain = mono_domain_get ();
        file = domain->setup->configuration_file;
        if (!file)
@@ -7042,8 +6803,6 @@ get_bundled_machine_config (void)
 {
        const gchar *machine_config;
 
-       MONO_ARCH_SAVE_REGS;
-
        machine_config = mono_get_machine_config ();
 
        if (!machine_config)
@@ -7058,8 +6817,6 @@ ves_icall_System_Web_Util_ICalls_get_machine_install_dir (void)
        MonoString *ipath;
        gchar *path;
 
-       MONO_ARCH_SAVE_REGS;
-
        path = g_path_get_dirname (mono_get_config_dir ());
 
 #if defined (HOST_WIN32)
@@ -7083,8 +6840,6 @@ ves_icall_get_resources_ptr (MonoReflectionAssembly *assembly, gpointer *result,
        MonoPEResourceDataEntry *entry;
        MonoImage *image;
 
-       MONO_ARCH_SAVE_REGS;
-
        if (!assembly || !result || !size)
                return FALSE;
 
@@ -7144,8 +6899,6 @@ ves_icall_System_Activator_CreateInstanceInternal (MonoReflectionType *type)
        MonoClass *klass;
        MonoDomain *domain;
        
-       MONO_ARCH_SAVE_REGS;
-
        domain = mono_object_domain (type);
        klass = mono_class_from_mono_type (type->type);
        mono_class_init_or_throw (klass);
@@ -7165,8 +6918,6 @@ ves_icall_MonoMethod_get_base_method (MonoReflectionMethod *m, gboolean definiti
        MonoMethod *result = NULL;
        int slot;
 
-       MONO_ARCH_SAVE_REGS;
-
        if (method->klass == NULL)
                return m;
 
@@ -7235,8 +6986,6 @@ ves_icall_MonoMethod_get_name (MonoReflectionMethod *m)
 ICALL_EXPORT void
 mono_ArgIterator_Setup (MonoArgIterator *iter, char* argsp, char* start)
 {
-       MONO_ARCH_SAVE_REGS;
-
        iter->sig = *(MonoMethodSignature**)argsp;
        
        g_assert (iter->sig->sentinelpos <= iter->sig->param_count);
@@ -7260,7 +7009,6 @@ mono_ArgIterator_IntGetNextArg (MonoArgIterator *iter)
        guint32 i, arg_size;
        gint32 align;
        MonoTypedRef res;
-       MONO_ARCH_SAVE_REGS;
 
        i = iter->sig->sentinelpos + iter->next_arg;
 
@@ -7300,7 +7048,6 @@ mono_ArgIterator_IntGetNextArgT (MonoArgIterator *iter, MonoType *type)
        guint32 i, arg_size;
        gint32 align;
        MonoTypedRef res;
-       MONO_ARCH_SAVE_REGS;
 
        i = iter->sig->sentinelpos + iter->next_arg;
 
@@ -7334,7 +7081,6 @@ ICALL_EXPORT MonoType*
 mono_ArgIterator_IntGetNextArgType (MonoArgIterator *iter)
 {
        gint i;
-       MONO_ARCH_SAVE_REGS;
        
        i = iter->sig->sentinelpos + iter->next_arg;
 
@@ -7346,8 +7092,6 @@ mono_ArgIterator_IntGetNextArgType (MonoArgIterator *iter)
 ICALL_EXPORT MonoObject*
 mono_TypedReference_ToObject (MonoTypedRef tref)
 {
-       MONO_ARCH_SAVE_REGS;
-
        if (MONO_TYPE_IS_REFERENCE (tref.type)) {
                MonoObject** objp = tref.value;
                return *objp;
@@ -7359,8 +7103,6 @@ mono_TypedReference_ToObject (MonoTypedRef tref)
 ICALL_EXPORT MonoObject*
 mono_TypedReference_ToObjectInternal (MonoType *type, gpointer value, MonoClass *klass)
 {
-       MONO_ARCH_SAVE_REGS;
-
        if (MONO_TYPE_IS_REFERENCE (type)) {
                MonoObject** objp = value;
                return *objp;
@@ -7386,7 +7128,6 @@ prelink_method (MonoMethod *method)
 ICALL_EXPORT void
 ves_icall_System_Runtime_InteropServices_Marshal_Prelink (MonoReflectionMethod *method)
 {
-       MONO_ARCH_SAVE_REGS;
        prelink_method (method->method);
 }
 
@@ -7396,7 +7137,6 @@ ves_icall_System_Runtime_InteropServices_Marshal_PrelinkAll (MonoReflectionType
        MonoClass *klass = mono_class_from_mono_type (type->type);
        MonoMethod* m;
        gpointer iter = NULL;
-       MONO_ARCH_SAVE_REGS;
 
        mono_class_init_or_throw (klass);
 
@@ -7421,44 +7161,14 @@ ves_icall_System_NumberFormatter_GetFormatterTables (guint64 const **mantissas,
        *decHexDigits = Formatter_DecHexDigits;
 }
 
+/* These parameters are "readonly" in corlib/System/Globalization/TextInfo.cs */
 ICALL_EXPORT void
-get_category_data (int version,
-                  guint8 const **category_data,
-                  guint16 const **category_astral_index)
-{
-       *category_astral_index = NULL;
-
-#ifndef DISABLE_NET_4_0
-       if (version == 4) {
-               *category_data = CategoryData_v4;
-#ifndef DISABLE_ASTRAL
-               *category_astral_index = CategoryData_v4_astral_index;
-#endif
-               return;
-       }
-#endif
-
-       *category_data = CategoryData_v2;
-#ifndef DISABLE_ASTRAL
-       *category_astral_index = CategoryData_v2_astral_index;
-#endif
-}
-
-/* These parameters are "readonly" in corlib/System/Globalization/CharUnicodeInfo.cs */
-ICALL_EXPORT void
-ves_icall_System_Globalization_CharUnicodeInfo_GetDataTablePointers (int category_data_version,
-                                           guint8 const **category_data,
-                                           guint16 const **category_astral_index,
-                                           guint8 const **numeric_data,
-                                           gdouble const **numeric_data_values,
+ves_icall_System_Globalization_TextInfo_GetDataTablePointersLite (
                                            guint16 const **to_lower_data_low,
                                            guint16 const **to_lower_data_high,
                                            guint16 const **to_upper_data_low,
                                            guint16 const **to_upper_data_high)
 {
-       get_category_data (category_data_version, category_data, category_astral_index);
-       *numeric_data = NumericData;
-       *numeric_data_values = NumericDataValues;
        *to_lower_data_low = ToLowerDataLow;
        *to_lower_data_high = ToLowerDataHigh;
        *to_upper_data_low = ToUpperDataLow;
@@ -8084,7 +7794,7 @@ mono_lookup_internal_call (MonoMethod *method)
        g_warning ("cant resolve internal call to \"%s\" (tested without signature also)", mname);
        g_print ("\nYour mono runtime and class libraries are out of sync.\n");
        g_print ("The out of sync library is: %s\n", method->klass->image->name);
-       g_print ("\nWhen you update one from svn you need to update, compile and install\nthe other too.\n");
+       g_print ("\nWhen you update one from git you need to update, compile and install\nthe other too.\n");
        g_print ("Do not report this as a bug unless you're sure you have updated correctly:\nyou probably have a broken mono install.\n");
        g_print ("If you see other errors or faults after this message they are probably related\n");
        g_print ("and you need to fix your mono install first.\n");
index c7c0756dc71614ce706def2d30d65e1cc5610f0d..33c389cb4bfb373c7124fd571e9b5580ad511f0d 100644 (file)
@@ -1618,6 +1618,7 @@ mono_image_close_except_pools (MonoImage *image)
        }
 
        free_hash (image->native_wrapper_cache);
+       free_hash (image->native_func_wrapper_cache);
        free_hash (image->managed_wrapper_cache);
        free_hash (image->delegate_begin_invoke_cache);
        free_hash (image->delegate_end_invoke_cache);
index dc9259d560934e6b72e44df111fdad0985e950e0..d0ea4441087dc30c8b43e5227d5354a366fee64c 100644 (file)
@@ -103,6 +103,7 @@ mono_loader_init ()
                mono_native_tls_alloc (&loader_error_thread_id, NULL);
                mono_native_tls_alloc (&loader_lock_nest_id, NULL);
 
+               mono_counters_init ();
                mono_counters_register ("Inflated signatures size",
                                                                MONO_COUNTER_GENERICS | MONO_COUNTER_INT, &inflated_signatures_size);
                mono_counters_register ("Memberref signature cache size",
@@ -1197,13 +1198,9 @@ method_from_methodspec (MonoImage *image, MonoGenericContext *context, guint32 i
        }
 
        if ((token & MONO_METHODDEFORREF_MASK) == MONO_METHODDEFORREF_METHODDEF) {
-               method = mono_get_method_full (image, MONO_TOKEN_METHOD_DEF | nindex, NULL, context);
-               if (!method) {
-                       if (mono_loader_get_last_error ())
-                               mono_error_set_from_loader_error (error);
-                       else
-                               mono_error_set_bad_image (error, image, "Could not resolve methodspec 0x%08x methoddef token 0x%08x", idx, MONO_TOKEN_METHOD_DEF | nindex);
-               }
+               method = mono_get_method_checked (image, MONO_TOKEN_METHOD_DEF | nindex, NULL, context, error);
+               if (!method)
+                       return NULL;
        } else {
                method = method_from_memberref (image, nindex, context, NULL, error);
        }
index 7fffad9cc8c5bf8206e0b34cefc24362c19d081a..dec4941b482bed7001328f0581c43d25756961ad 100644 (file)
@@ -157,52 +157,72 @@ create_names_array_idx_dynamic (const guint16 *names, int ml)
        return ret;
 }
 
-void
-ves_icall_System_Globalization_CultureInfo_construct_datetime_format (MonoCultureInfo *this)
+MonoBoolean
+ves_icall_System_Globalization_CalendarData_fill_calendar_data (MonoCalendarData *this, MonoString *name, gint32 calendar_index)
 {
        MonoDomain *domain;
-       MonoDateTimeFormatInfo *datetime;
        const DateTimeFormatEntry *dfe;
+       const CultureInfoNameEntry *ne;
+       const CultureInfoEntry *ci;
+       char *n;
 
-       MONO_ARCH_SAVE_REGS;
-
-       g_assert (this->datetime_index >= 0);
+       n = mono_string_to_utf8 (name);
+       ne = mono_binary_search (n, culture_name_entries, NUM_CULTURE_ENTRIES,
+                       sizeof (CultureInfoNameEntry), culture_name_locator);
+       g_free (n);
+       if (ne == NULL) {
+               return FALSE;
+       }
 
-       datetime = this->datetime_format;
-       dfe = &datetime_format_entries [this->datetime_index];
+       ci = &culture_entries [ne->culture_entry_index];
+       dfe = &datetime_format_entries [ci->datetime_format_index];
 
        domain = mono_domain_get ();
 
-       datetime->readOnly = this->is_read_only;
-       MONO_OBJECT_SETREF (datetime, AbbreviatedDayNames, create_names_array_idx (dfe->abbreviated_day_names, 
-                       NUM_DAYS));
-       MONO_OBJECT_SETREF (datetime, AbbreviatedMonthNames, create_names_array_idx (dfe->abbreviated_month_names,
-                       NUM_MONTHS));
-       MONO_OBJECT_SETREF (datetime, AMDesignator, mono_string_new (domain, idx2string (dfe->am_designator)));
-       datetime->CalendarWeekRule = dfe->calendar_week_rule;
-       MONO_OBJECT_SETREF (datetime, DateSeparator, mono_string_new (domain, idx2string (dfe->date_separator)));
-       MONO_OBJECT_SETREF (datetime, DayNames, create_names_array_idx (dfe->day_names, NUM_DAYS));
-       MONO_OBJECT_SETREF (datetime, ShortestDayNames, create_names_array_idx (dfe->shortest_day_names, NUM_DAYS));
-       datetime->FirstDayOfWeek = dfe->first_day_of_week;
-       MONO_OBJECT_SETREF (datetime, LongDatePattern, mono_string_new (domain, idx2string (dfe->long_date_pattern)));
-       MONO_OBJECT_SETREF (datetime, LongTimePattern, mono_string_new (domain, idx2string (dfe->long_time_pattern)));
-       MONO_OBJECT_SETREF (datetime, MonthDayPattern, mono_string_new (domain, idx2string (dfe->month_day_pattern)));
-       MONO_OBJECT_SETREF (datetime, MonthNames, create_names_array_idx (dfe->month_names, NUM_MONTHS));
-       MONO_OBJECT_SETREF (datetime, PMDesignator, mono_string_new (domain, idx2string (dfe->pm_designator)));
-       MONO_OBJECT_SETREF (datetime, ShortDatePattern, mono_string_new (domain, idx2string (dfe->short_date_pattern)));
-       MONO_OBJECT_SETREF (datetime, ShortTimePattern, mono_string_new (domain, idx2string (dfe->short_time_pattern)));
-       MONO_OBJECT_SETREF (datetime, TimeSeparator, mono_string_new (domain, idx2string (dfe->time_separator)));
-       MONO_OBJECT_SETREF (datetime, YearMonthPattern, mono_string_new (domain, idx2string (dfe->year_month_pattern)));
-       MONO_OBJECT_SETREF (datetime, ShortDatePatterns, create_names_array_idx_dynamic (dfe->short_date_patterns,
+       MONO_OBJECT_SETREF (this, NativeName, mono_string_new (domain, idx2string (ci->nativename)));
+       MONO_OBJECT_SETREF (this, ShortDatePatterns, create_names_array_idx_dynamic (dfe->short_date_patterns,
                        NUM_SHORT_DATE_PATTERNS));
-       MONO_OBJECT_SETREF (datetime, LongDatePatterns, create_names_array_idx_dynamic (dfe->long_date_patterns,
+       MONO_OBJECT_SETREF (this, YearMonthPatterns, create_names_array_idx_dynamic (dfe->year_month_patterns,
+                       NUM_YEAR_MONTH_PATTERNS));
+
+       MONO_OBJECT_SETREF (this, LongDatePatterns, create_names_array_idx_dynamic (dfe->long_date_patterns,
                        NUM_LONG_DATE_PATTERNS));
-       MONO_OBJECT_SETREF (datetime, ShortTimePatterns, create_names_array_idx_dynamic (dfe->short_time_patterns,
-                       NUM_SHORT_TIME_PATTERNS));
-       MONO_OBJECT_SETREF (datetime, LongTimePatterns, create_names_array_idx_dynamic (dfe->long_time_patterns,
+       MONO_OBJECT_SETREF (this, MonthDayPattern, mono_string_new (domain, idx2string (dfe->month_day_pattern)));
+
+       MONO_OBJECT_SETREF (this, DayNames, create_names_array_idx (dfe->day_names, NUM_DAYS));
+       MONO_OBJECT_SETREF (this, AbbreviatedDayNames, create_names_array_idx (dfe->abbreviated_day_names, 
+                       NUM_DAYS));
+       MONO_OBJECT_SETREF (this, SuperShortDayNames, create_names_array_idx (dfe->shortest_day_names, NUM_DAYS));
+       MONO_OBJECT_SETREF (this, MonthNames, create_names_array_idx (dfe->month_names, NUM_MONTHS));
+       MONO_OBJECT_SETREF (this, AbbreviatedMonthNames, create_names_array_idx (dfe->abbreviated_month_names,
+                       NUM_MONTHS));
+       MONO_OBJECT_SETREF (this, GenitiveMonthNames, create_names_array_idx (dfe->month_genitive_names, NUM_MONTHS));
+       MONO_OBJECT_SETREF (this, GenitiveAbbreviatedMonthNames, create_names_array_idx (dfe->abbreviated_month_genitive_names, NUM_MONTHS));
+
+       return TRUE;
+}
+
+void
+ves_icall_System_Globalization_CultureData_fill_culture_data (MonoCultureData *this, gint32 datetime_index)
+{
+       MonoDomain *domain;
+       const DateTimeFormatEntry *dfe;
+
+       g_assert (datetime_index >= 0);
+
+       dfe = &datetime_format_entries [datetime_index];
+
+       domain = mono_domain_get ();
+
+       MONO_OBJECT_SETREF (this, AMDesignator, mono_string_new (domain, idx2string (dfe->am_designator)));
+       MONO_OBJECT_SETREF (this, PMDesignator, mono_string_new (domain, idx2string (dfe->pm_designator)));
+       MONO_OBJECT_SETREF (this, TimeSeparator, mono_string_new (domain, idx2string (dfe->time_separator)));
+       MONO_OBJECT_SETREF (this, LongTimePatterns, create_names_array_idx_dynamic (dfe->long_time_patterns,
                        NUM_LONG_TIME_PATTERNS));
-       MONO_OBJECT_SETREF (datetime, GenitiveMonthNames, create_names_array_idx (dfe->month_genitive_names, NUM_MONTHS));
-       MONO_OBJECT_SETREF (datetime, GenitiveAbbreviatedMonthNames, create_names_array_idx (dfe->abbreviated_month_genitive_names, NUM_MONTHS));
+       MONO_OBJECT_SETREF (this, ShortTimePatterns, create_names_array_idx_dynamic (dfe->short_time_patterns,
+                       NUM_SHORT_TIME_PATTERNS));
+       this->FirstDayOfWeek = dfe->first_day_of_week;
+       this->CalendarWeekRule = dfe->calendar_week_rule;
 }
 
 void
@@ -212,8 +232,6 @@ ves_icall_System_Globalization_CultureInfo_construct_number_format (MonoCultureI
        MonoNumberFormatInfo *number;
        const NumberFormatEntry *nfe;
 
-       MONO_ARCH_SAVE_REGS;
-
        g_assert (this->number_format != 0);
        if (this->number_index < 0)
                return;
@@ -322,8 +340,6 @@ region_info_entry_from_lcid (int lcid)
        const RegionInfoEntry *entry;
        const CultureInfoEntry *ne;
 
-       MONO_ARCH_SAVE_REGS;
-
        ne = mono_binary_search (&lcid, culture_entries, NUM_CULTURE_ENTRIES, sizeof (CultureInfoEntry), culture_lcid_locator);
 
        if (ne == NULL)
@@ -473,8 +489,6 @@ ves_icall_System_Globalization_CultureInfo_get_current_locale_name (void)
        MonoString* ret;
        MonoDomain *domain;
 
-       MONO_ARCH_SAVE_REGS;
-
        locale = get_current_locale_name ();
        if (locale == NULL)
                return NULL;
@@ -492,8 +506,6 @@ ves_icall_System_Globalization_CultureInfo_construct_internal_locale_from_lcid (
 {
        const CultureInfoEntry *ci;
        
-       MONO_ARCH_SAVE_REGS;
-
        ci = culture_info_entry_from_lcid (lcid);
        if(ci == NULL)
                return FALSE;
@@ -508,8 +520,6 @@ ves_icall_System_Globalization_CultureInfo_construct_internal_locale_from_name (
        const CultureInfoNameEntry *ne;
        char *n;
        
-       MONO_ARCH_SAVE_REGS;
-
        n = mono_string_to_utf8 (name);
        ne = mono_binary_search (n, culture_name_entries, NUM_CULTURE_ENTRIES,
                        sizeof (CultureInfoNameEntry), culture_name_locator);
@@ -531,8 +541,6 @@ ves_icall_System_Globalization_CultureInfo_construct_internal_locale_from_specif
        gchar *locale;
        gboolean ret;
 
-       MONO_ARCH_SAVE_REGS;
-
        locale = mono_string_to_utf8 (name);
        ret = construct_culture_from_specific_name (ci, locale);
        g_free (locale);
@@ -546,8 +554,6 @@ ves_icall_System_Globalization_RegionInfo_construct_internal_region_from_lcid (M
 {
        const RegionInfoEntry *ri;
        
-       MONO_ARCH_SAVE_REGS;
-
        ri = region_info_entry_from_lcid (lcid);
        if(ri == NULL)
                return FALSE;
@@ -562,8 +568,6 @@ ves_icall_System_Globalization_RegionInfo_construct_internal_region_from_name (M
        const RegionInfoNameEntry *ne;
        char *n;
        
-       MONO_ARCH_SAVE_REGS;
-
        n = mono_string_to_utf8 (name);
        ne = mono_binary_search (n, region_name_entries, NUM_REGION_ENTRIES,
                sizeof (RegionInfoNameEntry), region_name_locator);
@@ -590,8 +594,6 @@ ves_icall_System_Globalization_CultureInfo_internal_get_cultures (MonoBoolean ne
        gint i, len;
        gboolean is_neutral;
 
-       MONO_ARCH_SAVE_REGS;
-
        domain = mono_domain_get ();
 
        len = 0;
@@ -641,8 +643,6 @@ void ves_icall_System_Globalization_CompareInfo_construct_compareinfo (MonoCompa
 
 int ves_icall_System_Globalization_CompareInfo_internal_compare (MonoCompareInfo *this, MonoString *str1, gint32 off1, gint32 len1, MonoString *str2, gint32 off2, gint32 len2, gint32 options)
 {
-       MONO_ARCH_SAVE_REGS;
-       
        /* Do a normal ascii string compare, as we only know the
         * invariant locale if we dont have ICU
         */
@@ -660,8 +660,6 @@ void ves_icall_System_Globalization_CompareInfo_assign_sortkey (MonoCompareInfo
        MonoArray *arr;
        gint32 keylen, i;
 
-       MONO_ARCH_SAVE_REGS;
-       
        keylen=mono_string_length (source);
        
        arr=mono_array_new (mono_domain_get (), mono_get_byte_class (),
@@ -675,31 +673,23 @@ void ves_icall_System_Globalization_CompareInfo_assign_sortkey (MonoCompareInfo
 
 int ves_icall_System_Globalization_CompareInfo_internal_index (MonoCompareInfo *this, MonoString *source, gint32 sindex, gint32 count, MonoString *value, gint32 options, MonoBoolean first)
 {
-       MONO_ARCH_SAVE_REGS;
-       
        return(string_invariant_indexof (source, sindex, count, value, first));
 }
 
 int ves_icall_System_Globalization_CompareInfo_internal_index_char (MonoCompareInfo *this, MonoString *source, gint32 sindex, gint32 count, gunichar2 value, gint32 options, MonoBoolean first)
 {
-       MONO_ARCH_SAVE_REGS;
-       
        return(string_invariant_indexof_char (source, sindex, count, value,
                                              first));
 }
 
 int ves_icall_System_Threading_Thread_current_lcid (void)
 {
-       MONO_ARCH_SAVE_REGS;
-       
        /* Invariant */
        return(0x007F);
 }
 
 MonoString *ves_icall_System_String_InternalReplace_Str_Comp (MonoString *this, MonoString *old, MonoString *new, MonoCompareInfo *comp)
 {
-       MONO_ARCH_SAVE_REGS;
-       
        /* Do a normal ascii string compare and replace, as we only
         * know the invariant locale if we dont have ICU
         */
index 26919ea43c0417094f55e5bcfea6dbc474c52e6b..f87439d5bed9394079b062662588eef6d9c7c622 100644 (file)
@@ -26,12 +26,13 @@ typedef enum {
        CompareOptions_Ordinal=0x40000000
 } MonoCompareOptions;
 
+extern MonoBoolean ves_icall_System_Globalization_CalendarData_fill_calendar_data (MonoCalendarData *this_obj, MonoString *name, gint32 calendar_index) MONO_INTERNAL;
+extern void ves_icall_System_Globalization_CultureData_fill_culture_data (MonoCultureData *this_obj, gint32 datetime_index) MONO_INTERNAL;
 extern void ves_icall_System_Globalization_CultureInfo_construct_internal_locale (MonoCultureInfo *this_obj, MonoString *locale) MONO_INTERNAL;
 extern MonoString* ves_icall_System_Globalization_CultureInfo_get_current_locale_name (void) MONO_INTERNAL;
 extern MonoBoolean ves_icall_System_Globalization_CultureInfo_construct_internal_locale_from_lcid (MonoCultureInfo *this_obj, gint lcid) MONO_INTERNAL;
 extern MonoBoolean ves_icall_System_Globalization_CultureInfo_construct_internal_locale_from_name (MonoCultureInfo *this_obj, MonoString *name) MONO_INTERNAL;
 extern MonoArray *ves_icall_System_Globalization_CultureInfo_internal_get_cultures (MonoBoolean neutral, MonoBoolean specific, MonoBoolean installed) MONO_INTERNAL;
-extern void ves_icall_System_Globalization_CultureInfo_construct_datetime_format (MonoCultureInfo *this_obj) MONO_INTERNAL;
 extern void ves_icall_System_Globalization_CultureInfo_construct_number_format (MonoCultureInfo *this_obj) MONO_INTERNAL;
 extern void ves_icall_System_Globalization_CompareInfo_construct_compareinfo (MonoCompareInfo *comp, MonoString *locale) MONO_INTERNAL;
 extern int ves_icall_System_Globalization_CompareInfo_internal_compare (MonoCompareInfo *this_obj, MonoString *str1, gint32 off1, gint32 len1, MonoString *str2, gint32 off2, gint32 len2, gint32 options) MONO_INTERNAL;
index 91fee5e4885e5fd100d44684113752b6ae2f50f1..0015944addc727142b261358d890d3b970ff6fb3 100644 (file)
@@ -2993,34 +2993,34 @@ mono_marshal_get_delegate_end_invoke (MonoMethod *method)
 typedef struct
 {
        MonoMethodSignature *sig;
-       MonoMethod *method;
-} SignatureMethodPair;
+       gpointer pointer;
+} SignaturePointerPair;
 
 static guint
-signature_method_pair_hash (gconstpointer data)
+signature_pointer_pair_hash (gconstpointer data)
 {
-       SignatureMethodPair *pair = (SignatureMethodPair*)data;
+       SignaturePointerPair *pair = (SignaturePointerPair*)data;
 
-       return mono_signature_hash (pair->sig) ^ mono_aligned_addr_hash (pair->method);
+       return mono_signature_hash (pair->sig) ^ mono_aligned_addr_hash (pair->pointer);
 }
 
 static gboolean
-signature_method_pair_equal (SignatureMethodPair *pair1, SignatureMethodPair *pair2)
+signature_pointer_pair_equal (gconstpointer data1, gconstpointer data2)
 {
-       return mono_metadata_signature_equal (pair1->sig, pair2->sig) && (pair1->method == pair2->method);
+       SignaturePointerPair *pair1 = (SignaturePointerPair*) data1, *pair2 = (SignaturePointerPair*) data2;
+       return mono_metadata_signature_equal (pair1->sig, pair2->sig) && (pair1->pointer == pair2->pointer);
 }
 
 static gboolean
-signature_method_pair_matches_method (gpointer key, gpointer value, gpointer user_data)
+signature_pointer_pair_matches_pointer (gpointer key, gpointer value, gpointer user_data)
 {
-       SignatureMethodPair *pair = (SignatureMethodPair*)key;
-       MonoMethod *method = (MonoMethod*)user_data;
+       SignaturePointerPair *pair = (SignaturePointerPair*)key;
 
-       return pair->method == method;
+       return pair->pointer == user_data;
 }
 
 static void
-free_signature_method_pair (SignatureMethodPair *pair)
+free_signature_pointer_pair (SignaturePointerPair *pair)
 {
        g_free (pair);
 }
@@ -3034,8 +3034,8 @@ mono_marshal_get_delegate_invoke_internal (MonoMethod *method, gboolean callvirt
        MonoMethod *res;
        GHashTable *cache;
        gpointer cache_key = NULL;
-       SignatureMethodPair key;
-       SignatureMethodPair *new_key;
+       SignaturePointerPair key;
+       SignaturePointerPair *new_key;
        int local_prev, local_target;
        int pos0;
        char *name;
@@ -3124,10 +3124,10 @@ mono_marshal_get_delegate_invoke_internal (MonoMethod *method, gboolean callvirt
                /* We need to cache the signature+method pair */
                mono_marshal_lock ();
                if (!*cache_ptr)
-                       *cache_ptr = g_hash_table_new_full (signature_method_pair_hash, (GEqualFunc)signature_method_pair_equal, (GDestroyNotify)free_signature_method_pair, NULL);
+                       *cache_ptr = g_hash_table_new_full (signature_pointer_pair_hash, (GEqualFunc)signature_pointer_pair_equal, (GDestroyNotify)free_signature_pointer_pair, NULL);
                cache = *cache_ptr;
                key.sig = invoke_sig;
-               key.method = target_method;
+               key.pointer = target_method;
                res = g_hash_table_lookup (cache, &key);
                mono_marshal_unlock ();
                if (res)
@@ -3278,7 +3278,7 @@ mono_marshal_get_delegate_invoke_internal (MonoMethod *method, gboolean callvirt
                def = mono_mb_create_and_cache (cache, cache_key, mb, sig, sig->param_count + 16);
                res = cache_generic_delegate_wrapper (cache, orig_method, def, ctx);
        } else if (callvirt) {
-               new_key = g_new0 (SignatureMethodPair, 1);
+               new_key = g_new0 (SignaturePointerPair, 1);
                *new_key = key;
 
                info = mono_wrapper_info_create (mb, subtype);
@@ -4176,20 +4176,23 @@ emit_marshal_custom (EmitMarshalContext *m, int argnum, MonoType *t,
        int pos2;
 
        if (!ICustomMarshaler) {
-               ICustomMarshaler = mono_class_from_name (mono_defaults.corlib, "System.Runtime.InteropServices", "ICustomMarshaler");
-               if (!ICustomMarshaler) {
+               MonoClass *klass = mono_class_from_name (mono_defaults.corlib, "System.Runtime.InteropServices", "ICustomMarshaler");
+               if (!klass) {
                        exception_msg = g_strdup ("Current profile doesn't support ICustomMarshaler");
                        goto handle_exception;
                }
 
-               cleanup_native = mono_class_get_method_from_name (ICustomMarshaler, "CleanUpNativeData", 1);
+               cleanup_native = mono_class_get_method_from_name (klass, "CleanUpNativeData", 1);
                g_assert (cleanup_native);
-               cleanup_managed = mono_class_get_method_from_name (ICustomMarshaler, "CleanUpManagedData", 1);
+               cleanup_managed = mono_class_get_method_from_name (klass, "CleanUpManagedData", 1);
                g_assert (cleanup_managed);
-               marshal_managed_to_native = mono_class_get_method_from_name (ICustomMarshaler, "MarshalManagedToNative", 1);
+               marshal_managed_to_native = mono_class_get_method_from_name (klass, "MarshalManagedToNative", 1);
                g_assert (marshal_managed_to_native);
-               marshal_native_to_managed = mono_class_get_method_from_name (ICustomMarshaler, "MarshalNativeToManaged", 1);
+               marshal_native_to_managed = mono_class_get_method_from_name (klass, "MarshalNativeToManaged", 1);
                g_assert (marshal_native_to_managed);
+
+               mono_memory_barrier ();
+               ICustomMarshaler = klass;
        }
 
        if (spec->data.custom_data.image)
@@ -7368,13 +7371,18 @@ mono_marshal_get_native_func_wrapper (MonoImage *image, MonoMethodSignature *sig
 {
        MonoMethodSignature *csig;
 
+       SignaturePointerPair key, *new_key;
        MonoMethodBuilder *mb;
        MonoMethod *res;
        GHashTable *cache;
+       gboolean found;
        char *name;
 
-       cache = get_cache (&image->native_wrapper_cache, mono_aligned_addr_hash, NULL);
-       if ((res = mono_marshal_find_in_cache (cache, func)))
+       key.sig = sig;
+       key.pointer = func;
+
+       cache = get_cache (&image->native_func_wrapper_cache, signature_pointer_pair_hash, signature_pointer_pair_equal);
+       if ((res = mono_marshal_find_in_cache (cache, &key)))
                return res;
 
        name = g_strdup_printf ("wrapper_native_%p", func);
@@ -7387,8 +7395,15 @@ mono_marshal_get_native_func_wrapper (MonoImage *image, MonoMethodSignature *sig
 
        csig = signature_dup (image, sig);
        csig->pinvoke = 0;
-       res = mono_mb_create_and_cache (cache, func,
-                                                                       mb, csig, csig->param_count + 16);
+
+       new_key = g_new (SignaturePointerPair,1);
+       new_key->sig = csig;
+       new_key->pointer = func;
+
+       res = mono_mb_create_and_cache_full (cache, new_key, mb, csig, csig->param_count + 16, NULL, &found);
+       if (found)
+               g_free (new_key);
+
        mono_mb_free (mb);
 
        mono_marshal_set_wrapper_info (res, NULL);
@@ -9849,8 +9864,6 @@ ves_icall_System_Runtime_InteropServices_Marshal_copy_to_unmanaged (MonoArray *s
        int element_size;
        void *source_addr;
 
-       MONO_ARCH_SAVE_REGS;
-
        MONO_CHECK_ARG_NULL (src);
        MONO_CHECK_ARG_NULL (dest);
 
@@ -9878,8 +9891,6 @@ ves_icall_System_Runtime_InteropServices_Marshal_copy_from_unmanaged (gpointer s
        int element_size;
        void *dest_addr;
 
-       MONO_ARCH_SAVE_REGS;
-
        MONO_CHECK_ARG_NULL (src);
        MONO_CHECK_ARG_NULL (dest);
 
@@ -9903,8 +9914,6 @@ ves_icall_System_Runtime_InteropServices_Marshal_copy_from_unmanaged (gpointer s
 MonoString *
 ves_icall_System_Runtime_InteropServices_Marshal_PtrToStringAnsi (char *ptr)
 {
-       MONO_ARCH_SAVE_REGS;
-
        if (ptr == NULL)
                return NULL;
        else
@@ -9914,8 +9923,6 @@ ves_icall_System_Runtime_InteropServices_Marshal_PtrToStringAnsi (char *ptr)
 MonoString *
 ves_icall_System_Runtime_InteropServices_Marshal_PtrToStringAnsi_len (char *ptr, gint32 len)
 {
-       MONO_ARCH_SAVE_REGS;
-
        if (ptr == NULL) {
                mono_raise_exception (mono_get_exception_argument_null ("ptr"));
                g_assert_not_reached ();
@@ -9932,8 +9939,6 @@ ves_icall_System_Runtime_InteropServices_Marshal_PtrToStringUni (guint16 *ptr)
        int len = 0;
        guint16 *t = ptr;
 
-       MONO_ARCH_SAVE_REGS;
-
        if (ptr == NULL)
                return NULL;
 
@@ -9948,8 +9953,6 @@ ves_icall_System_Runtime_InteropServices_Marshal_PtrToStringUni_len (guint16 *pt
 {
        MonoDomain *domain = mono_domain_get (); 
 
-       MONO_ARCH_SAVE_REGS;
-
        if (ptr == NULL) {
                mono_raise_exception (mono_get_exception_argument_null ("ptr"));
                g_assert_not_reached ();
@@ -9962,8 +9965,6 @@ ves_icall_System_Runtime_InteropServices_Marshal_PtrToStringUni_len (guint16 *pt
 guint32 
 ves_icall_System_Runtime_InteropServices_Marshal_GetLastWin32Error (void)
 {
-       MONO_ARCH_SAVE_REGS;
-
        return (GPOINTER_TO_INT (mono_native_tls_get_value (last_error_tls_id)));
 }
 
@@ -9974,8 +9975,6 @@ ves_icall_System_Runtime_InteropServices_Marshal_SizeOf (MonoReflectionType *rty
        MonoType *type;
        guint32 layout;
 
-       MONO_ARCH_SAVE_REGS;
-
        MONO_CHECK_ARG_NULL (rtype);
 
        type = rtype->type;
@@ -10007,8 +10006,6 @@ ves_icall_System_Runtime_InteropServices_Marshal_StructureToPtr (MonoObject *obj
        MonoMethod *method;
        gpointer pa [3];
 
-       MONO_ARCH_SAVE_REGS;
-
        MONO_CHECK_ARG_NULL (obj);
        MONO_CHECK_ARG_NULL (dst);
 
@@ -10040,8 +10037,6 @@ ves_icall_System_Runtime_InteropServices_Marshal_PtrToStructure (gpointer src, M
 {
        MonoType *t;
 
-       MONO_ARCH_SAVE_REGS;
-
        MONO_CHECK_ARG_NULL (src);
        MONO_CHECK_ARG_NULL (dst);
        
@@ -10069,8 +10064,6 @@ ves_icall_System_Runtime_InteropServices_Marshal_PtrToStructure_type (gpointer s
        MonoDomain *domain = mono_domain_get (); 
        MonoObject *res;
 
-       MONO_ARCH_SAVE_REGS;
-
        if (src == NULL)
                return NULL;
        MONO_CHECK_ARG_NULL (type);
@@ -10094,8 +10087,6 @@ ves_icall_System_Runtime_InteropServices_Marshal_OffsetOf (MonoReflectionType *t
        char *fname;
        int match_index = -1;
        
-       MONO_ARCH_SAVE_REGS;
-
        MONO_CHECK_ARG_NULL (type);
        MONO_CHECK_ARG_NULL (field_name);
 
@@ -10166,8 +10157,6 @@ ves_icall_System_Runtime_InteropServices_Marshal_StringToHGlobalAnsi (MonoString
 gpointer
 ves_icall_System_Runtime_InteropServices_Marshal_StringToHGlobalUni (MonoString *string)
 {
-       MONO_ARCH_SAVE_REGS;
-
        if (string == NULL)
                return NULL;
        else {
@@ -10239,8 +10228,6 @@ ves_icall_System_Runtime_InteropServices_Marshal_DestroyStructure (gpointer src,
 {
        MonoClass *klass;
 
-       MONO_ARCH_SAVE_REGS;
-
        MONO_CHECK_ARG_NULL (src);
        MONO_CHECK_ARG_NULL (type);
 
@@ -10256,8 +10243,6 @@ ves_icall_System_Runtime_InteropServices_Marshal_AllocHGlobal (int size)
 {
        gpointer res;
 
-       MONO_ARCH_SAVE_REGS;
-
        if ((gulong)size == 0)
                /* This returns a valid pointer for size 0 on MS.NET */
                size = 4;
@@ -10297,8 +10282,6 @@ ves_icall_System_Runtime_InteropServices_Marshal_ReAllocHGlobal (gpointer ptr, i
 void
 ves_icall_System_Runtime_InteropServices_Marshal_FreeHGlobal (void *ptr)
 {
-       MONO_ARCH_SAVE_REGS;
-
 #ifdef HOST_WIN32
        GlobalFree (ptr);
 #else
@@ -10309,8 +10292,6 @@ ves_icall_System_Runtime_InteropServices_Marshal_FreeHGlobal (void *ptr)
 void*
 ves_icall_System_Runtime_InteropServices_Marshal_AllocCoTaskMem (int size)
 {
-       MONO_ARCH_SAVE_REGS;
-
 #ifdef HOST_WIN32
        return CoTaskMemAlloc (size);
 #else
@@ -10321,8 +10302,6 @@ ves_icall_System_Runtime_InteropServices_Marshal_AllocCoTaskMem (int size)
 void
 ves_icall_System_Runtime_InteropServices_Marshal_FreeCoTaskMem (void *ptr)
 {
-       MONO_ARCH_SAVE_REGS;
-
 #ifdef HOST_WIN32
        CoTaskMemFree (ptr);
 #else
@@ -10333,8 +10312,6 @@ ves_icall_System_Runtime_InteropServices_Marshal_FreeCoTaskMem (void *ptr)
 gpointer
 ves_icall_System_Runtime_InteropServices_Marshal_ReAllocCoTaskMem (gpointer ptr, int size)
 {
-       MONO_ARCH_SAVE_REGS;
-
 #ifdef HOST_WIN32
        return CoTaskMemRealloc (ptr, size);
 #else
@@ -11127,7 +11104,7 @@ mono_marshal_free_dynamic_wrappers (MonoMethod *method)
        if (image->runtime_invoke_direct_cache)
                g_hash_table_remove (image->runtime_invoke_direct_cache, method);
        if (image->delegate_abstract_invoke_cache)
-               g_hash_table_foreach_remove (image->delegate_abstract_invoke_cache, signature_method_pair_matches_method, method);
+               g_hash_table_foreach_remove (image->delegate_abstract_invoke_cache, signature_pointer_pair_matches_pointer, method);
        // FIXME: Need to clear the caches in other images as well
        if (image->delegate_bound_static_invoke_cache)
                g_hash_table_remove (image->delegate_bound_static_invoke_cache, mono_method_signature (method));
@@ -11137,9 +11114,9 @@ mono_marshal_free_dynamic_wrappers (MonoMethod *method)
 }
 
 static gboolean
-signature_method_pair_matches_signature (gpointer key, gpointer value, gpointer user_data)
+signature_pointer_pair_matches_signature (gpointer key, gpointer value, gpointer user_data)
 {
-       SignatureMethodPair *pair = (SignatureMethodPair*)key;
+       SignaturePointerPair *pair = (SignaturePointerPair*)key;
        MonoMethodSignature *sig = (MonoMethodSignature*)user_data;
 
        return mono_metadata_signature_equal (pair->sig, sig);
@@ -11183,11 +11160,11 @@ mono_marshal_free_inflated_wrappers (MonoMethod *method)
                g_hash_table_remove (method->klass->image->runtime_invoke_vtype_cache, sig);
 
         /*
-         * indexed by SignatureMethodPair
+         * indexed by SignaturePointerPair
          */
        if (sig && method->klass->image->delegate_abstract_invoke_cache)
                g_hash_table_foreach_remove (method->klass->image->delegate_abstract_invoke_cache,
-                                            signature_method_pair_matches_signature, (gpointer)sig);
+                                            signature_pointer_pair_matches_signature, (gpointer)sig);
 
         /*
          * indexed by MonoMethod pointers
index d297e7aaf919e95b423aa6968f46b766228f1256..14eb80cd793406af986c94aa3c95f30d239c8bb4 100644 (file)
@@ -261,14 +261,12 @@ struct _MonoImage {
        GHashTable *runtime_invoke_vtype_cache;
 
        /*
-        * indexed by SignatureMethodPair
+        * indexed by SignaturePointerPair
         */
        GHashTable *delegate_abstract_invoke_cache;
-
-       /*
-        * indexed by SignatureMethodPair
-        */
        GHashTable *delegate_bound_static_invoke_cache;
+       GHashTable *native_func_wrapper_cache;
+
        /*
         * indexed by MonoMethod pointers 
         */
index 61057c0097f0c11e102041a4afcdd2f0a5ab1ef3..c5024b86a73b03ae7550c9d004c13cc5af7121b0 100644 (file)
@@ -269,8 +269,6 @@ ves_icall_System_Security_Principal_WindowsIdentity_GetCurrentToken (void)
 {
        gpointer token = NULL;
 
-       MONO_ARCH_SAVE_REGS;
-
 #ifdef HOST_WIN32
        /* Note: This isn't a copy of the Token - we must not close it!!!
         * http://www.develop.com/kbrown/book/html/whatis_windowsprincipal.html
@@ -296,8 +294,6 @@ ves_icall_System_Security_Principal_WindowsIdentity_GetTokenName (gpointer token
        gint32 size = 0;
 
 #ifdef HOST_WIN32
-       MONO_ARCH_SAVE_REGS;
-
        GetTokenInformation (token, TokenUser, NULL, size, (PDWORD)&size);
        if (size > 0) {
                TOKEN_USER *tu = g_malloc0 (size);
@@ -309,8 +305,6 @@ ves_icall_System_Security_Principal_WindowsIdentity_GetTokenName (gpointer token
 #else 
        gchar *uname = GetTokenName ((uid_t) GPOINTER_TO_INT (token));
 
-       MONO_ARCH_SAVE_REGS;
-
        if (uname) {
                size = strlen (uname);
                uniname = g_utf8_to_utf16 (uname, size, NULL, NULL, NULL);
@@ -337,8 +331,6 @@ ves_icall_System_Security_Principal_WindowsIdentity_GetUserToken (MonoString *us
 #ifdef HOST_WIN32
        gpointer token = NULL;
 
-       MONO_ARCH_SAVE_REGS;
-
        /* TODO: MS has something like this working in Windows 2003 (client and
         * server) but works only for domain accounts (so it's quite limiting).
         * http://www.develop.com/kbrown/book/html/howto_logonuser.html
@@ -358,8 +350,6 @@ ves_icall_System_Security_Principal_WindowsIdentity_GetUserToken (MonoString *us
        gchar *utf8_name;
        gboolean result;
 
-       MONO_ARCH_SAVE_REGS;
-
        utf8_name = mono_unicode_to_external (mono_string_chars (username));
 
 #ifdef HAVE_GETPWNAM_R
@@ -402,8 +392,6 @@ ves_icall_System_Security_Principal_WindowsIdentity_GetRoles (gpointer token)
 #ifdef HOST_WIN32
        gint32 size = 0;
 
-       MONO_ARCH_SAVE_REGS;
-
        GetTokenInformation (token, TokenGroups, NULL, size, (PDWORD)&size);
        if (size > 0) {
                TOKEN_GROUPS *tg = g_malloc0 (size);
@@ -446,8 +434,6 @@ ves_icall_System_Security_Principal_WindowsImpersonationContext_CloseToken (gpoi
 {
        gboolean result = TRUE;
 
-       MONO_ARCH_SAVE_REGS;
-
 #ifdef HOST_WIN32
        result = (CloseHandle (token) != 0);
 #endif
@@ -460,8 +446,6 @@ ves_icall_System_Security_Principal_WindowsImpersonationContext_DuplicateToken (
 {
        gpointer dupe = NULL;
 
-       MONO_ARCH_SAVE_REGS;
-
 #ifdef HOST_WIN32
        if (DuplicateToken (token, SecurityImpersonation, &dupe) == 0) {
                dupe = NULL;
@@ -476,8 +460,6 @@ ves_icall_System_Security_Principal_WindowsImpersonationContext_DuplicateToken (
 gboolean
 ves_icall_System_Security_Principal_WindowsImpersonationContext_SetCurrentToken (gpointer token)
 {
-       MONO_ARCH_SAVE_REGS;
-
        /* Posix version implemented in /mono/mono/io-layer/security.c */
        return (ImpersonateLoggedOnUser (token) != 0);
 }
@@ -486,8 +468,6 @@ ves_icall_System_Security_Principal_WindowsImpersonationContext_SetCurrentToken
 gboolean
 ves_icall_System_Security_Principal_WindowsImpersonationContext_RevertToSelf (void)
 {
-       MONO_ARCH_SAVE_REGS;
-
        /* Posix version implemented in /mono/mono/io-layer/security.c */
        return (RevertToSelf () != 0);
 }
@@ -501,8 +481,6 @@ ves_icall_System_Security_Principal_WindowsPrincipal_IsMemberOfGroupId (gpointer
        gboolean result = FALSE;
 
 #ifdef HOST_WIN32
-       MONO_ARCH_SAVE_REGS;
-
        /* The convertion from an ID to a string is done in managed code for Windows */
        g_warning ("IsMemberOfGroupId should never be called on Win32");
 
@@ -516,8 +494,6 @@ ves_icall_System_Security_Principal_WindowsPrincipal_IsMemberOfGroupId (gpointer
 #endif
        struct group *g = NULL;
 
-       MONO_ARCH_SAVE_REGS;
-
 #ifdef HAVE_GETGRGID_R
 #ifdef _SC_GETGR_R_SIZE_MAX
        fbufsize = mono_sysconf (_SC_GETGR_R_SIZE_MAX);
@@ -553,17 +529,12 @@ ves_icall_System_Security_Principal_WindowsPrincipal_IsMemberOfGroupName (gpoint
        gboolean result = FALSE;
 
 #ifdef HOST_WIN32
-
-       MONO_ARCH_SAVE_REGS;
-
        /* Windows version use a cache built using WindowsIdentity._GetRoles */
        g_warning ("IsMemberOfGroupName should never be called on Win32");
 
 #else /* HOST_WIN32 */
        gchar *utf8_groupname;
 
-       MONO_ARCH_SAVE_REGS;
-
        utf8_groupname = mono_unicode_to_external (mono_string_chars (group));
        if (utf8_groupname) {
                struct group *g = NULL;
@@ -861,14 +832,11 @@ ves_icall_Mono_Security_Cryptography_KeyPairPersistence_CanSecure (MonoString *r
 #if HOST_WIN32
        gint32 flags;
 
-       MONO_ARCH_SAVE_REGS;
-
        /* ACL are nice... unless you have FAT or other uncivilized filesystem */
        if (!GetVolumeInformation (mono_string_chars (root), NULL, 0, NULL, NULL, (LPDWORD)&flags, NULL, 0))
                return FALSE;
        return ((flags & FS_PERSISTENT_ACLS) == FS_PERSISTENT_ACLS);
 #else
-       MONO_ARCH_SAVE_REGS;
        /* we assume some kind of security is applicable outside Windows */
        return TRUE;
 #endif
@@ -880,8 +848,6 @@ ves_icall_Mono_Security_Cryptography_KeyPairPersistence_IsMachineProtected (Mono
 {
        gboolean ret = FALSE;
 
-       MONO_ARCH_SAVE_REGS;
-
        /* no one, but the owner, should have write access to the directory */
 #ifdef HOST_WIN32
        ret = IsMachineProtected (mono_string_chars (path));
@@ -897,8 +863,6 @@ ves_icall_Mono_Security_Cryptography_KeyPairPersistence_IsUserProtected (MonoStr
 {
        gboolean ret = FALSE;
 
-       MONO_ARCH_SAVE_REGS;
-
        /* no one, but the user, should have access to the directory */
 #ifdef HOST_WIN32
        ret = IsUserProtected (mono_string_chars (path));
@@ -914,8 +878,6 @@ ves_icall_Mono_Security_Cryptography_KeyPairPersistence_ProtectMachine (MonoStri
 {
        gboolean ret = FALSE;
 
-       MONO_ARCH_SAVE_REGS;
-
        /* read/write to owner, read to everyone else */
 #ifdef HOST_WIN32
        ret = ProtectMachine (mono_string_chars (path));
@@ -931,8 +893,6 @@ ves_icall_Mono_Security_Cryptography_KeyPairPersistence_ProtectUser (MonoString
 {
        gboolean ret = FALSE;
        
-       MONO_ARCH_SAVE_REGS;
-
        /* read/write to user, no access to everyone else */
 #ifdef HOST_WIN32
        ret = ProtectUser (mono_string_chars (path));
@@ -980,8 +940,6 @@ void invoke_protected_memory_method (MonoArray *data, MonoObject *scope, gboolea
        MonoMethod *method;
        void *params [2];
 
-       MONO_ARCH_SAVE_REGS;
-
        if (system_security_assembly == NULL) {
                system_security_assembly = mono_image_loaded ("System.Security");
                if (!system_security_assembly) {
index 54b2ddbeea4f055e77ca4ca7aabb144ae799247e..12f69e0df3f8f4f784b4e92a0416abbc5ce690c6 100644 (file)
@@ -234,8 +234,14 @@ mono_gc_is_critical_method (MonoMethod *method)
        return FALSE;
 }
 
+int
+mono_gc_get_aligned_size_for_allocator (int size)
+{
+       return size;
+}
+
 MonoMethod*
-mono_gc_get_managed_allocator (MonoClass *klass, gboolean for_box)
+mono_gc_get_managed_allocator (MonoClass *klass, gboolean for_box, gboolean known_instance_size)
 {
        return NULL;
 }
index 9266e9db2b155231427038ec485e52315f959aa7..2fad026e3eef4c30651a0d2640e87398652ebc1e 100644 (file)
@@ -527,6 +527,37 @@ typedef struct {
        gpointer ICU_collator;
 } MonoCompareInfo;
 
+typedef struct {
+       MonoObject obj;
+       MonoString *NativeName;
+       MonoArray *ShortDatePatterns;
+       MonoArray *YearMonthPatterns;
+       MonoArray *LongDatePatterns;
+       MonoString *MonthDayPattern;
+
+       MonoArray *EraNames;
+       MonoArray *AbbreviatedEraNames;
+       MonoArray *AbbreviatedEnglishEraNames;
+       MonoArray *DayNames;
+       MonoArray *AbbreviatedDayNames;
+       MonoArray *SuperShortDayNames;
+       MonoArray *MonthNames;
+       MonoArray *AbbreviatedMonthNames;
+       MonoArray *GenitiveMonthNames;
+       MonoArray *GenitiveAbbreviatedMonthNames;
+} MonoCalendarData;
+
+typedef struct {
+       MonoObject obj;
+       MonoString *AMDesignator;
+       MonoString *PMDesignator;
+       MonoString *TimeSeparator;
+       MonoArray *LongTimePatterns;
+       MonoArray *ShortTimePatterns;
+       guint32 FirstDayOfWeek;
+       guint32 CalendarWeekRule;
+} MonoCultureData;
+
 typedef struct {
        MonoObject obj;
        MonoBoolean is_read_only;
index c071849e97853f6e9e54d136d6b21a09b34b9ddf..5cdb52f52c1a2255d174863f13d344cb5f7e1bce 100644 (file)
@@ -275,8 +275,6 @@ mono_runtime_class_init_full (MonoVTable *vtable, gboolean raise_exception)
        MonoClass *klass;
        gchar *full_name;
 
-       MONO_ARCH_SAVE_REGS;
-
        if (vtable->initialized)
                return NULL;
 
@@ -4435,7 +4433,6 @@ mono_object_new (MonoDomain *domain, MonoClass *klass)
 {
        MonoVTable *vtable;
 
-       MONO_ARCH_SAVE_REGS;
        vtable = mono_class_vtable (domain, klass);
        if (!vtable)
                return NULL;
@@ -4453,7 +4450,6 @@ mono_object_new_pinned (MonoDomain *domain, MonoClass *klass)
 {
        MonoVTable *vtable;
 
-       MONO_ARCH_SAVE_REGS;
        vtable = mono_class_vtable (domain, klass);
        if (!vtable)
                return NULL;
@@ -4477,8 +4473,6 @@ mono_object_new_specific (MonoVTable *vtable)
 {
        MonoObject *o;
 
-       MONO_ARCH_SAVE_REGS;
-       
        /* check for is_com_object for COM Interop */
        if (mono_vtable_is_remote (vtable) || mono_class_is_com_object (vtable->klass))
        {
@@ -4681,8 +4675,6 @@ mono_array_full_copy (MonoArray *src, MonoArray *dest)
        uintptr_t size;
        MonoClass *klass = src->obj.vtable->klass;
 
-       MONO_ARCH_SAVE_REGS;
-
        g_assert (klass == dest->obj.vtable->klass);
 
        size = mono_array_length (src);
@@ -4718,8 +4710,6 @@ mono_array_clone_in_domain (MonoDomain *domain, MonoArray *array)
        uintptr_t *sizes;
        MonoClass *klass = array->obj.vtable->klass;
 
-       MONO_ARCH_SAVE_REGS;
-
        if (array->bounds == NULL) {
                size = mono_array_length (array);
                o = mono_array_new_full (domain, klass, &size, NULL);
@@ -4929,8 +4919,6 @@ mono_array_new (MonoDomain *domain, MonoClass *eclass, uintptr_t n)
 {
        MonoClass *ac;
 
-       MONO_ARCH_SAVE_REGS;
-
        ac = mono_array_class_get (eclass, 1);
        g_assert (ac);
 
@@ -4952,8 +4940,6 @@ mono_array_new_specific (MonoVTable *vtable, uintptr_t n)
        MonoArray *ao;
        uintptr_t byte_len;
 
-       MONO_ARCH_SAVE_REGS;
-
        if (G_UNLIKELY (n > MONO_ARRAY_MAX_INDEX)) {
                arith_overflow ();
                return NULL;
@@ -5168,8 +5154,6 @@ mono_string_new_wrapper (const char *text)
 {
        MonoDomain *domain = mono_domain_get ();
 
-       MONO_ARCH_SAVE_REGS;
-
        if (text)
                return mono_string_new (domain, text);
 
@@ -5545,8 +5529,6 @@ mono_string_intern (MonoString *str)
 MonoString*
 mono_ldstr (MonoDomain *domain, MonoImage *image, guint32 idx)
 {
-       MONO_ARCH_SAVE_REGS;
-
        if (image->dynamic) {
                MonoString *str = mono_lookup_dynamic_token (image, MONO_TOKEN_STRING | idx, NULL);
                return str;
index d7cc110aec6bbca2ac91b363582f40410cf1fba0..bbeaf97dc0d74f8440955d0b2f73eefc5fdca5f2 100644 (file)
@@ -34,8 +34,6 @@ HANDLE ves_icall_System_Diagnostics_Process_GetProcess_internal (guint32 pid)
 {
        HANDLE handle;
        
-       MONO_ARCH_SAVE_REGS;
-
        /* GetCurrentProcess returns a pseudo-handle, so use
         * OpenProcess instead
         */
@@ -52,16 +50,12 @@ HANDLE ves_icall_System_Diagnostics_Process_GetProcess_internal (guint32 pid)
 guint32
 ves_icall_System_Diagnostics_Process_GetPid_internal (void)
 {
-       MONO_ARCH_SAVE_REGS;
-
        return mono_process_current_pid ();
 }
 
 void ves_icall_System_Diagnostics_Process_Process_free_internal (MonoObject *this,
                                                                 HANDLE process)
 {
-       MONO_ARCH_SAVE_REGS;
-
 #ifdef THREAD_DEBUG
        g_message ("%s: Closing process %p, handle %p", __func__, this, process);
 #endif
@@ -264,11 +258,11 @@ static void process_get_fileversion (MonoObject *filever, gunichar2 *filename)
                                process_set_field_int (filever, "productbuildpart", HIWORD (ffi->dwProductVersionLS));
                                process_set_field_int (filever, "productprivatepart", LOWORD (ffi->dwProductVersionLS));
 
-                               process_set_field_bool (filever, "isdebug", (ffi->dwFileFlags & ffi->dwFileFlagsMask) & VS_FF_DEBUG);
-                               process_set_field_bool (filever, "isprerelease", (ffi->dwFileFlags & ffi->dwFileFlagsMask) & VS_FF_PRERELEASE);
-                               process_set_field_bool (filever, "ispatched", (ffi->dwFileFlags & ffi->dwFileFlagsMask) & VS_FF_PATCHED);
-                               process_set_field_bool (filever, "isprivatebuild", (ffi->dwFileFlags & ffi->dwFileFlagsMask) & VS_FF_PRIVATEBUILD);
-                               process_set_field_bool (filever, "isspecialbuild", (ffi->dwFileFlags & ffi->dwFileFlagsMask) & VS_FF_SPECIALBUILD);
+                               process_set_field_bool (filever, "isdebug", ((ffi->dwFileFlags & ffi->dwFileFlagsMask) & VS_FF_DEBUG) != 0);
+                               process_set_field_bool (filever, "isprerelease", ((ffi->dwFileFlags & ffi->dwFileFlagsMask) & VS_FF_PRERELEASE) != 0);
+                               process_set_field_bool (filever, "ispatched", ((ffi->dwFileFlags & ffi->dwFileFlagsMask) & VS_FF_PATCHED) != 0);
+                               process_set_field_bool (filever, "isprivatebuild", ((ffi->dwFileFlags & ffi->dwFileFlagsMask) & VS_FF_PRIVATEBUILD) != 0);
+                               process_set_field_bool (filever, "isspecialbuild", ((ffi->dwFileFlags & ffi->dwFileFlagsMask) & VS_FF_SPECIALBUILD) != 0);
                        }
                        g_free (query);
 
@@ -356,9 +350,9 @@ static void process_get_fileversion (MonoObject *filever, gunichar2 *filename)
        }
 }
 
-static MonoObject* process_add_module (HANDLE process, HMODULE mod, gunichar2 *filename, gunichar2 *modulename)
+static MonoObject* process_add_module (HANDLE process, HMODULE mod, gunichar2 *filename, gunichar2 *modulename, MonoClass *proc_class)
 {
-       MonoClass *proc_class, *filever_class;
+       MonoClass *filever_class;
        MonoObject *item, *filever;
        MonoDomain *domain=mono_domain_get ();
        MODULEINFO modinfo;
@@ -366,8 +360,6 @@ static MonoObject* process_add_module (HANDLE process, HMODULE mod, gunichar2 *f
        
        /* Build a System.Diagnostics.ProcessModule with the data.
         */
-       proc_class=mono_class_from_name (system_assembly, "System.Diagnostics",
-                                        "ProcessModule");
        item=mono_object_new (domain, proc_class);
 
        filever_class=mono_class_from_name (system_assembly,
@@ -409,17 +401,19 @@ MonoArray *ves_icall_System_Diagnostics_Process_GetModules_internal (MonoObject
        DWORD needed;
        guint32 count = 0;
        guint32 i, num_added = 0;
+       MonoClass *proc_class;
 
        STASH_SYS_ASS (this);
 
        if (EnumProcessModules (process, mods, sizeof(mods), &needed)) {
                count = needed / sizeof(HMODULE);
-               temp_arr = mono_array_new (mono_domain_get (), mono_get_object_class (), count);
+               proc_class = mono_class_from_name (system_assembly, "System.Diagnostics", "ProcessModule");
+               temp_arr = mono_array_new (mono_domain_get (), proc_class, count);
                for (i = 0; i < count; i++) {
                        if (GetModuleBaseName (process, mods[i], modname, MAX_PATH) &&
                                        GetModuleFileNameEx (process, mods[i], filename, MAX_PATH)) {
                                MonoObject *module = process_add_module (process, mods[i],
-                                               filename, modname);
+                                               filename, modname, proc_class);
                                mono_array_setref (temp_arr, num_added++, module);
                        }
                }
@@ -429,7 +423,7 @@ MonoArray *ves_icall_System_Diagnostics_Process_GetModules_internal (MonoObject
                arr = temp_arr;
        } else {
                /* shorter version of the array */
-               arr = mono_array_new (mono_domain_get (), mono_get_object_class (), num_added);
+               arr = mono_array_new (mono_domain_get (), proc_class, num_added);
 
                for (i = 0; i < num_added; i++)
                        mono_array_setref (arr, i, mono_array_get (temp_arr, MonoObject*, i));
@@ -440,8 +434,6 @@ MonoArray *ves_icall_System_Diagnostics_Process_GetModules_internal (MonoObject
 
 void ves_icall_System_Diagnostics_FileVersionInfo_GetVersionInfo_internal (MonoObject *this, MonoString *filename)
 {
-       MONO_ARCH_SAVE_REGS;
-
        STASH_SYS_ASS (this);
        
        process_get_fileversion (this, mono_string_chars (filename));
@@ -700,8 +692,6 @@ MonoBoolean ves_icall_System_Diagnostics_Process_WaitForExit_internal (MonoObjec
 {
        guint32 ret;
        
-       MONO_ARCH_SAVE_REGS;
-
        if(ms<0) {
                /* Wait forever */
                ret=WaitForSingleObjectEx (process, INFINITE, TRUE);
@@ -719,8 +709,6 @@ MonoBoolean ves_icall_System_Diagnostics_Process_WaitForInputIdle_internal (Mono
 {
        guint32 ret;
        
-       MONO_ARCH_SAVE_REGS;
-
        if(ms<0) {
                /* Wait forever */
                ret=WaitForInputIdle (process, INFINITE);
@@ -742,8 +730,6 @@ gint64 ves_icall_System_Diagnostics_Process_ExitTime_internal (HANDLE process)
        gboolean ret;
        FILETIME create_time, exit_time, kernel_time, user_time;
        
-       MONO_ARCH_SAVE_REGS;
-
        ret = GetProcessTimes (process, &create_time, &exit_time, &kernel_time,
                                                   &user_time);
        if (ret)
@@ -757,8 +743,6 @@ gint64 ves_icall_System_Diagnostics_Process_StartTime_internal (HANDLE process)
        gboolean ret;
        FILETIME create_time, exit_time, kernel_time, user_time;
        
-       MONO_ARCH_SAVE_REGS;
-
        ret = GetProcessTimes (process, &create_time, &exit_time, &kernel_time,
                                                   &user_time);
        if (ret)
@@ -771,8 +755,6 @@ gint32 ves_icall_System_Diagnostics_Process_ExitCode_internal (HANDLE process)
 {
        DWORD code;
        
-       MONO_ARCH_SAVE_REGS;
-
        GetExitCodeProcess (process, &code);
        
        LOGDEBUG (g_message ("%s: process exit code is %d", __func__, code));
@@ -789,8 +771,6 @@ MonoString *ves_icall_System_Diagnostics_Process_ProcessName_internal (HANDLE pr
        DWORD needed;
        guint32 len;
        
-       MONO_ARCH_SAVE_REGS;
-
        ok=EnumProcessModules (process, &mod, sizeof(mod), &needed);
        if(ok==FALSE) {
                return(NULL);
@@ -816,8 +796,6 @@ MonoArray *ves_icall_System_Diagnostics_Process_GetProcesses_internal (void)
        gpointer *pidarray;
        int i, count;
 
-       MONO_ARCH_SAVE_REGS;
-
        pidarray = mono_process_list (&count);
        if (!pidarray)
                mono_raise_exception (mono_get_exception_not_supported ("This system does not support EnumProcesses"));
@@ -873,8 +851,6 @@ MonoBoolean ves_icall_System_Diagnostics_Process_GetWorkingSet_internal (HANDLE
        gboolean ret;
        SIZE_T ws_min, ws_max;
        
-       MONO_ARCH_SAVE_REGS;
-
        ret=GetProcessWorkingSetSize (process, &ws_min, &ws_max);
        *min=(guint32)ws_min;
        *max=(guint32)ws_max;
@@ -888,8 +864,6 @@ MonoBoolean ves_icall_System_Diagnostics_Process_SetWorkingSet_internal (HANDLE
        SIZE_T ws_min;
        SIZE_T ws_max;
        
-       MONO_ARCH_SAVE_REGS;
-
        ret=GetProcessWorkingSetSize (process, &ws_min, &ws_max);
        if(ret==FALSE) {
                return(FALSE);
@@ -909,8 +883,6 @@ MonoBoolean ves_icall_System_Diagnostics_Process_SetWorkingSet_internal (HANDLE
 MonoBoolean
 ves_icall_System_Diagnostics_Process_Kill_internal (HANDLE process, gint32 sig)
 {
-       MONO_ARCH_SAVE_REGS;
-
        /* sig == 1 -> Kill, sig == 2 -> CloseMainWindow */
 
        return TerminateProcess (process, -sig);
@@ -956,8 +928,6 @@ ves_icall_System_Diagnostics_Process_ProcessHandle_duplicate (HANDLE process)
 {
        HANDLE ret;
 
-       MONO_ARCH_SAVE_REGS;
-
        LOGDEBUG (g_message ("%s: Duplicating process handle %p", __func__, process));
        
        DuplicateHandle (GetCurrentProcess (), process, GetCurrentProcess (),
@@ -969,8 +939,6 @@ ves_icall_System_Diagnostics_Process_ProcessHandle_duplicate (HANDLE process)
 void
 ves_icall_System_Diagnostics_Process_ProcessHandle_close (HANDLE process)
 {
-       MONO_ARCH_SAVE_REGS;
-
        LOGDEBUG (g_message ("%s: Closing process handle %p", __func__, process));
 
        CloseHandle (process);
index 8315975c439311ce087055ecfb0a29b1827facb2..7a9830c57ea65c603f7e8b09dbf8b20f47e28369 100644 (file)
@@ -4770,8 +4770,6 @@ mono_image_insert_string (MonoReflectionModuleBuilder *module, MonoString *str)
        char buf [16];
        char *b = buf;
        
-       MONO_ARCH_SAVE_REGS;
-
        if (!module->dynamic_image)
                mono_image_module_basic_init (module);
 
@@ -5289,8 +5287,6 @@ mono_image_basic_init (MonoReflectionAssemblyBuilder *assemblyb)
        MonoDynamicImage *image;
        MonoDomain *domain = mono_object_domain (assemblyb);
        
-       MONO_ARCH_SAVE_REGS;
-
        if (assemblyb->dynamic_assembly)
                return;
 
@@ -9890,8 +9886,6 @@ mono_reflection_get_custom_attrs_blob (MonoReflectionAssembly *assembly, MonoObj
        char *buffer, *p;
        guint32 buflen, i;
 
-       MONO_ARCH_SAVE_REGS;
-
        if (strcmp (ctor->vtable->klass->name, "MonoCMethod")) {
                /* sig is freed later so allocate it in the heap */
                sig = ctor_builder_to_signature (NULL, (MonoReflectionCtorBuilder*)ctor);
@@ -9969,8 +9963,6 @@ mono_reflection_setup_internal_class (MonoReflectionTypeBuilder *tb)
        MonoError error;
        MonoClass *klass, *parent;
 
-       MONO_ARCH_SAVE_REGS;
-
        RESOLVE_TYPE (tb->parent);
 
        mono_loader_lock ();
@@ -10108,8 +10100,6 @@ mono_reflection_create_generic_class (MonoReflectionTypeBuilder *tb)
        MonoClass *klass;
        int count, i;
 
-       MONO_ARCH_SAVE_REGS;
-
        klass = mono_class_from_mono_type (tb->type.type);
 
        count = tb->generic_params ? mono_array_length (tb->generic_params) : 0;
@@ -10153,8 +10143,6 @@ mono_reflection_create_internal_class (MonoReflectionTypeBuilder *tb)
 {
        MonoClass *klass;
 
-       MONO_ARCH_SAVE_REGS;
-
        klass = mono_class_from_mono_type (tb->type.type);
 
        mono_loader_lock ();
@@ -10707,8 +10695,6 @@ mono_reflection_bind_generic_method_parameters (MonoReflectionMethod *rmethod, M
        MonoType **type_argv;
        int count, i;
 
-       MONO_ARCH_SAVE_REGS;
-
        /*FIXME but this no longer should happen*/
        if (!strcmp (rmethod->object.vtable->klass->name, "MethodBuilder")) {
 #ifndef DISABLE_REFLECTION_EMIT
@@ -10862,8 +10848,6 @@ mono_reflection_generic_class_initialize (MonoReflectionGenericClass *type, Mono
        MonoType *gtype;
        int i;
 
-       MONO_ARCH_SAVE_REGS;
-
        gtype = mono_reflection_type_get_handle ((MonoReflectionType*)type);
        klass = mono_class_from_mono_type (gtype);
        g_assert (gtype->type == MONO_TYPE_GENERICINST);
@@ -11437,8 +11421,6 @@ mono_reflection_create_runtime_class (MonoReflectionTypeBuilder *tb)
        MonoReflectionType* res;
        int i, j;
 
-       MONO_ARCH_SAVE_REGS;
-
        domain = mono_object_domain (tb);
        klass = mono_class_from_mono_type (tb->type.type);
 
@@ -11615,8 +11597,6 @@ mono_reflection_initialize_generic_parameter (MonoReflectionGenericParam *gparam
        MonoClass *pklass;
        MonoError error;
 
-       MONO_ARCH_SAVE_REGS;
-
        image = &gparam->tbuilder->module->dynamic_image->image;
 
        param = mono_image_new0 (image, MonoGenericParamFull, 1);
index e27d332bd189822894517953f33efc1c47acdac8..7b88643c1e52d5fd8fc159805d52130c81a1b910 100644 (file)
@@ -191,8 +191,6 @@ type_from_handle (MonoType *handle)
        MonoDomain *domain = mono_domain_get (); 
        MonoClass *klass = mono_class_from_mono_type (handle);
 
-       MONO_ARCH_SAVE_REGS;
-
        mono_class_init (klass);
        return mono_type_get_object (domain, handle);
 }
index 12beef893f16a8f871527fcba4d24a51c3346752..47d86bbd5e11af17cb2cc3c96eac99ece0a9ae42 100644 (file)
@@ -93,7 +93,7 @@ static __thread char *tlab_next;
 static __thread char *tlab_temp_end;
 static __thread char *tlab_real_end;
 /* Used by the managed allocator/wbarrier */
-static __thread char **tlab_next_addr;
+static __thread char **tlab_next_addr MONO_ATTR_USED;
 #endif
 
 #ifdef HAVE_KW_THREAD
@@ -778,7 +778,7 @@ create_allocator (int atype)
        }
 
        if (atype == ATYPE_SMALL) {
-               num_params = 1;
+               num_params = 2;
                name = "AllocSmall";
        } else if (atype == ATYPE_NORMAL) {
                num_params = 1;
@@ -808,7 +808,11 @@ create_allocator (int atype)
 
 #ifndef DISABLE_JIT
        size_var = mono_mb_add_local (mb, &mono_defaults.int_class->byval_arg);
-       if (atype == ATYPE_NORMAL || atype == ATYPE_SMALL) {
+       if (atype == ATYPE_SMALL) {
+               /* size_var = size_arg */
+               mono_mb_emit_ldarg (mb, 1);
+               mono_mb_emit_stloc (mb, size_var);
+       } else if (atype == ATYPE_NORMAL) {
                /* size = vtable->klass->instance_size; */
                mono_mb_emit_ldarg (mb, 0);
                mono_mb_emit_icon (mb, MONO_STRUCT_OFFSET (MonoVTable, klass));
@@ -931,14 +935,16 @@ create_allocator (int atype)
                g_assert_not_reached ();
        }
 
-       /* size += ALLOC_ALIGN - 1; */
-       mono_mb_emit_ldloc (mb, size_var);
-       mono_mb_emit_icon (mb, ALLOC_ALIGN - 1);
-       mono_mb_emit_byte (mb, CEE_ADD);
-       /* size &= ~(ALLOC_ALIGN - 1); */
-       mono_mb_emit_icon (mb, ~(ALLOC_ALIGN - 1));
-       mono_mb_emit_byte (mb, CEE_AND);
-       mono_mb_emit_stloc (mb, size_var);
+       if (atype != ATYPE_SMALL) {
+               /* size += ALLOC_ALIGN - 1; */
+               mono_mb_emit_ldloc (mb, size_var);
+               mono_mb_emit_icon (mb, ALLOC_ALIGN - 1);
+               mono_mb_emit_byte (mb, CEE_ADD);
+               /* size &= ~(ALLOC_ALIGN - 1); */
+               mono_mb_emit_icon (mb, ~(ALLOC_ALIGN - 1));
+               mono_mb_emit_byte (mb, CEE_AND);
+               mono_mb_emit_stloc (mb, size_var);
+       }
 
        /* if (size > MAX_SMALL_OBJ_SIZE) goto slowpath */
        if (atype != ATYPE_SMALL) {
@@ -1072,13 +1078,22 @@ create_allocator (int atype)
 }
 #endif
 
+int
+mono_gc_get_aligned_size_for_allocator (int size)
+{
+       int aligned_size = size;
+       aligned_size += ALLOC_ALIGN - 1;
+       aligned_size &= ~(ALLOC_ALIGN - 1);
+       return aligned_size;
+}
+
 /*
  * Generate an allocator method implementing the fast path of mono_gc_alloc_obj ().
  * The signature of the called method is:
  *     object allocate (MonoVTable *vtable)
  */
 MonoMethod*
-mono_gc_get_managed_allocator (MonoClass *klass, gboolean for_box)
+mono_gc_get_managed_allocator (MonoClass *klass, gboolean for_box, gboolean known_instance_size)
 {
 #ifdef MANAGED_ALLOCATION
 
@@ -1097,6 +1112,8 @@ mono_gc_get_managed_allocator (MonoClass *klass, gboolean for_box)
                return NULL;
        if (klass->instance_size > tlab_size)
                return NULL;
+       if (known_instance_size && ALIGN_TO (klass->instance_size, ALLOC_ALIGN) >= MAX_SMALL_OBJ_SIZE)
+               return NULL;
 
        if (klass->has_finalize || mono_class_is_marshalbyref (klass) || (mono_profiler_get_events () & MONO_PROFILE_ALLOCATIONS))
                return NULL;
@@ -1105,7 +1122,7 @@ mono_gc_get_managed_allocator (MonoClass *klass, gboolean for_box)
        if (klass->byval_arg.type == MONO_TYPE_STRING)
                return mono_gc_get_managed_allocator_by_type (ATYPE_STRING);
        /* Generic classes have dynamic field and can go above MAX_SMALL_OBJ_SIZE. */
-       if (ALIGN_TO (klass->instance_size, ALLOC_ALIGN) < MAX_SMALL_OBJ_SIZE && !mono_class_is_open_constructed_type (&klass->byval_arg))
+       if (known_instance_size)
                return mono_gc_get_managed_allocator_by_type (ATYPE_SMALL);
        else
                return mono_gc_get_managed_allocator_by_type (ATYPE_NORMAL);
index b7cce12a86885d96f1aa2cde7a381715b299a26a..e7c4b91b7400f4e56eefd965a847c020447c9c15 100644 (file)
@@ -42,9 +42,8 @@ typedef enum {
        MONO_TOGGLE_REF_WEAK
 } MonoToggleRefStatus;
 
-void mono_gc_toggleref_register_callback (MonoToggleRefStatus (*proccess_toggleref) (MonoObject *obj));
-void mono_gc_toggleref_add (MonoObject *object, mono_bool strong_ref);
-
+MONO_API void mono_gc_toggleref_register_callback (MonoToggleRefStatus (*proccess_toggleref) (MonoObject *obj));
+MONO_API void mono_gc_toggleref_add (MonoObject *object, mono_bool strong_ref);
 
 MONO_END_DECLS
 
index 99969000f59a61d6bf504f746c94de384d14a404..eef60ab9139906aae2da5759b2a6b12fd21a0604 100644 (file)
@@ -665,8 +665,6 @@ gpointer ves_icall_System_Net_Sockets_Socket_Socket_internal(MonoObject *this, g
        gint32 sock_proto;
        gint32 sock_type;
        
-       MONO_ARCH_SAVE_REGS;
-
        *error = 0;
        
        sock_family=convert_family(family);
@@ -704,8 +702,6 @@ gpointer ves_icall_System_Net_Sockets_Socket_Socket_internal(MonoObject *this, g
 void ves_icall_System_Net_Sockets_Socket_Close_internal(SOCKET sock,
                                                        gint32 *error)
 {
-       MONO_ARCH_SAVE_REGS;
-
        LOGDEBUG (g_message ("%s: closing 0x%x", __func__, sock));
 
        *error = 0;
@@ -718,8 +714,6 @@ void ves_icall_System_Net_Sockets_Socket_Close_internal(SOCKET sock,
 
 gint32 ves_icall_System_Net_Sockets_SocketException_WSAGetLastError_internal(void)
 {
-       MONO_ARCH_SAVE_REGS;
-
        LOGDEBUG (g_message("%s: returning %d", __func__, WSAGetLastError()));
 
        return(WSAGetLastError());
@@ -731,8 +725,6 @@ gint32 ves_icall_System_Net_Sockets_Socket_Available_internal(SOCKET sock,
        int ret;
        int amount;
        
-       MONO_ARCH_SAVE_REGS;
-
        *error = 0;
 
        /* FIXME: this might require amount to be unsigned long. */
@@ -751,8 +743,6 @@ void ves_icall_System_Net_Sockets_Socket_Blocking_internal(SOCKET sock,
 {
        int ret;
        
-       MONO_ARCH_SAVE_REGS;
-
        *error = 0;
 
        /*
@@ -773,8 +763,6 @@ gpointer ves_icall_System_Net_Sockets_Socket_Accept_internal(SOCKET sock,
 {
        SOCKET newsock;
        
-       MONO_ARCH_SAVE_REGS;
-
        *error = 0;
 #ifdef HOST_WIN32
        {
@@ -800,8 +788,6 @@ void ves_icall_System_Net_Sockets_Socket_Listen_internal(SOCKET sock,
 {
        int ret;
        
-       MONO_ARCH_SAVE_REGS;
-
        *error = 0;
        
        ret = _wapi_listen (sock, backlog);
@@ -969,8 +955,6 @@ extern MonoObject *ves_icall_System_Net_Sockets_Socket_LocalEndPoint_internal(SO
        int ret;
        MonoObject *result;
        
-       MONO_ARCH_SAVE_REGS;
-
        *error = 0;
        
        salen = get_sockaddr_size (convert_family (af));
@@ -1003,8 +987,6 @@ extern MonoObject *ves_icall_System_Net_Sockets_Socket_RemoteEndPoint_internal(S
        int ret;
        MonoObject *result;
        
-       MONO_ARCH_SAVE_REGS;
-
        *error = 0;
        
        salen = get_sockaddr_size (convert_family (af));
@@ -1145,8 +1127,6 @@ extern void ves_icall_System_Net_Sockets_Socket_Bind_internal(SOCKET sock, MonoO
        socklen_t sa_size;
        int ret;
        
-       MONO_ARCH_SAVE_REGS;
-
        *error = 0;
        
        sa=create_sockaddr_from_object(sockaddr, &sa_size, error);
@@ -1179,9 +1159,6 @@ ves_icall_System_Net_Sockets_Socket_Poll_internal (SOCKET sock, gint mode,
        int ret;
        time_t start;
        
-
-       MONO_ARCH_SAVE_REGS;
-       
        pfds = g_new0 (mono_pollfd, 1);
        pfds[0].fd = GPOINTER_TO_INT (sock);
        pfds[0].events = (mode == SelectModeRead) ? MONO_POLLIN :
@@ -1251,8 +1228,6 @@ extern void ves_icall_System_Net_Sockets_Socket_Connect_internal(SOCKET sock, Mo
        socklen_t sa_size;
        int ret;
        
-       MONO_ARCH_SAVE_REGS;
-
        *error = 0;
        
        sa=create_sockaddr_from_object(sockaddr, &sa_size, error);
@@ -1294,8 +1269,6 @@ extern void ves_icall_System_Net_Sockets_Socket_Disconnect_internal(SOCKET sock,
        LPFN_TRANSMITFILE _wapi_transmitfile = NULL;
        gboolean bret;
        
-       MONO_ARCH_SAVE_REGS;
-
        *error = 0;
        
        LOGDEBUG (g_message("%s: disconnecting from socket %p (reuse %d)", __func__, sock, reuse));
@@ -1354,8 +1327,6 @@ gint32 ves_icall_System_Net_Sockets_Socket_Receive_internal(SOCKET sock, MonoArr
        gint32 alen;
        int recvflags=0;
        
-       MONO_ARCH_SAVE_REGS;
-
        *error = 0;
        
        alen = mono_array_length (buffer);
@@ -1397,8 +1368,6 @@ gint32 ves_icall_System_Net_Sockets_Socket_Receive_array_internal(SOCKET sock, M
        WSABUF *wsabufs;
        DWORD recvflags = 0;
        
-       MONO_ARCH_SAVE_REGS;
-
        *error = 0;
        
        wsabufs = mono_array_addr (buffers, WSABUF, 0);
@@ -1428,8 +1397,6 @@ gint32 ves_icall_System_Net_Sockets_Socket_RecvFrom_internal(SOCKET sock, MonoAr
        struct sockaddr *sa;
        socklen_t sa_size;
        
-       MONO_ARCH_SAVE_REGS;
-
        *error = 0;
        
        alen = mono_array_length (buffer);
@@ -1478,8 +1445,6 @@ gint32 ves_icall_System_Net_Sockets_Socket_Send_internal(SOCKET sock, MonoArray
        gint32 alen;
        int sendflags=0;
        
-       MONO_ARCH_SAVE_REGS;
-
        *error = 0;
        
        alen = mono_array_length (buffer);
@@ -1515,8 +1480,6 @@ gint32 ves_icall_System_Net_Sockets_Socket_Send_array_internal(SOCKET sock, Mono
        WSABUF *wsabufs;
        DWORD sendflags = 0;
        
-       MONO_ARCH_SAVE_REGS;
-
        *error = 0;
        
        wsabufs = mono_array_addr (buffers, WSABUF, 0);
@@ -1546,8 +1509,6 @@ gint32 ves_icall_System_Net_Sockets_Socket_SendTo_internal(SOCKET sock, MonoArra
        struct sockaddr *sa;
        socklen_t sa_size;
        
-       MONO_ARCH_SAVE_REGS;
-
        *error = 0;
        
        alen = mono_array_length (buffer);
@@ -1608,8 +1569,6 @@ void ves_icall_System_Net_Sockets_Socket_Select_internal(MonoArray **sockets, gi
        time_t start;
        uintptr_t socks_size;
        
-       MONO_ARCH_SAVE_REGS;
-
        /* *sockets -> READ, null, WRITE, null, ERROR, null */
        count = mono_array_length (*sockets);
        nfds = count - 3; /* NULL separators */
@@ -1747,8 +1706,6 @@ void ves_icall_System_Net_Sockets_Socket_GetSocketOption_obj_internal(SOCKET soc
        MonoClass *obj_class;
        MonoClassField *field;
        
-       MONO_ARCH_SAVE_REGS;
-
        *error = 0;
        
 #if !defined(SO_EXCLUSIVEADDRUSE) && defined(SO_REUSEADDR)
@@ -1886,8 +1843,6 @@ void ves_icall_System_Net_Sockets_Socket_GetSocketOption_arr_internal(SOCKET soc
        guchar *buf;
        socklen_t valsize;
        
-       MONO_ARCH_SAVE_REGS;
-
        *error = 0;
        
        ret=convert_sockopt_level_and_name(level, name, &system_level,
@@ -2004,8 +1959,6 @@ void ves_icall_System_Net_Sockets_Socket_SetSocketOption_internal(SOCKET sock, g
        sol_ipv6 = mono_networking_get_ipv6_protocol ();
        sol_ip = mono_networking_get_ip_protocol ();
 
-       MONO_ARCH_SAVE_REGS;
-
        ret=convert_sockopt_level_and_name(level, name, &system_level,
                                           &system_name);
 
@@ -2202,8 +2155,6 @@ void ves_icall_System_Net_Sockets_Socket_Shutdown_internal(SOCKET sock,
 {
        int ret;
        
-       MONO_ARCH_SAVE_REGS;
-
        *error = 0;
        
        /* Currently, the values for how (recv=0, send=1, both=2) match
@@ -2225,8 +2176,6 @@ ves_icall_System_Net_Sockets_Socket_WSAIoctl (SOCKET sock, gint32 code,
        gint i_len, o_len;
        gint ret;
 
-       MONO_ARCH_SAVE_REGS;
-
        *error = 0;
        
        if ((guint32)code == FIONBIO) {
@@ -2393,8 +2342,6 @@ MonoBoolean ves_icall_System_Net_Dns_GetHostByName_internal(MonoString *host, Mo
        MonoAddressInfo *info = NULL;
        char *hostname;
        
-       MONO_ARCH_SAVE_REGS;
-       
        hostname=mono_string_to_utf8 (host);
        if (*hostname == '\0') {
                add_local_ips = TRUE;
@@ -2477,8 +2424,6 @@ extern MonoBoolean ves_icall_System_Net_Dns_GetHostName_internal(MonoString **h_
        gchar hostname[256];
        int ret;
        
-       MONO_ARCH_SAVE_REGS;
-
        ret = gethostname (hostname, sizeof (hostname));
        if(ret==-1) {
                return(FALSE);
@@ -2496,8 +2441,6 @@ ves_icall_System_Net_Sockets_Socket_SendFile (SOCKET sock, MonoString *filename,
        gint32 error;
        TRANSMIT_FILE_BUFFERS buffers;
 
-       MONO_ARCH_SAVE_REGS;
-
        if (filename == NULL)
                return FALSE;
 
index e6b4ef0421e3e7ca2560f11a5ea354c3d84d0342..f93177876a42cd76eafec14a4d764754f5f79792 100644 (file)
@@ -43,7 +43,6 @@ MonoString  *
 ves_icall_System_String_InternalIntern (MonoString *str)
 {
        MonoString *res;
-       MONO_ARCH_SAVE_REGS;
 
        res = mono_string_intern(str);
        if (!res)
@@ -54,8 +53,6 @@ ves_icall_System_String_InternalIntern (MonoString *str)
 MonoString * 
 ves_icall_System_String_InternalIsInterned (MonoString *str)
 {
-       MONO_ARCH_SAVE_REGS;
-
        return mono_string_is_interned(str);
 }
 
index c5943b44cc908340346131c61e31c353e1a2b190..de24fcb0fa51d5c40bc1b613658527350e7653ed 100644 (file)
@@ -38,13 +38,12 @@ static __huge_val_t __huge_val = { __HUGE_VAL_bytes };
 
 
 gdouble ves_icall_System_Math_Floor (gdouble x) {
-       MONO_ARCH_SAVE_REGS;
        return floor(x);
 }
 
 gdouble ves_icall_System_Math_Round (gdouble x) {
        double int_part, dec_part;
-       MONO_ARCH_SAVE_REGS;
+
        int_part = floor(x);
        dec_part = x - int_part;
        if (((dec_part == 0.5) &&
@@ -61,7 +60,6 @@ gdouble ves_icall_System_Math_Round2 (gdouble value, gint32 digits, gboolean awa
 #endif
        double p;
 
-       MONO_ARCH_SAVE_REGS;
        if (value == HUGE_VAL)
                return HUGE_VAL;
        if (value == -HUGE_VAL)
@@ -95,56 +93,42 @@ gdouble ves_icall_System_Math_Round2 (gdouble value, gint32 digits, gboolean awa
 gdouble 
 ves_icall_System_Math_Sin (gdouble x)
 {
-       MONO_ARCH_SAVE_REGS;
-
        return sin (x);
 }
 
 gdouble 
 ves_icall_System_Math_Cos (gdouble x)
 {
-       MONO_ARCH_SAVE_REGS;
-
        return cos (x);
 }
 
 gdouble 
 ves_icall_System_Math_Tan (gdouble x)
 {
-       MONO_ARCH_SAVE_REGS;
-
        return tan (x);
 }
 
 gdouble 
 ves_icall_System_Math_Sinh (gdouble x)
 {
-       MONO_ARCH_SAVE_REGS;
-
        return sinh (x);
 }
 
 gdouble 
 ves_icall_System_Math_Cosh (gdouble x)
 {
-       MONO_ARCH_SAVE_REGS;
-
        return cosh (x);
 }
 
 gdouble 
 ves_icall_System_Math_Tanh (gdouble x)
 {
-       MONO_ARCH_SAVE_REGS;
-
        return tanh (x);
 }
 
 gdouble 
 ves_icall_System_Math_Acos (gdouble x)
 {
-       MONO_ARCH_SAVE_REGS;
-
        if (x < -1 || x > 1)
                return NAN;
 
@@ -154,8 +138,6 @@ ves_icall_System_Math_Acos (gdouble x)
 gdouble 
 ves_icall_System_Math_Asin (gdouble x)
 {
-       MONO_ARCH_SAVE_REGS;
-
        if (x < -1 || x > 1)
                return NAN;
 
@@ -165,8 +147,6 @@ ves_icall_System_Math_Asin (gdouble x)
 gdouble 
 ves_icall_System_Math_Atan (gdouble x)
 {
-       MONO_ARCH_SAVE_REGS;
-
        return atan (x);
 }
 
@@ -174,7 +154,6 @@ gdouble
 ves_icall_System_Math_Atan2 (gdouble y, gdouble x)
 {
        double result;
-       MONO_ARCH_SAVE_REGS;
 
        if ((y == HUGE_VAL && x == HUGE_VAL) ||
                (y == HUGE_VAL && x == -HUGE_VAL) ||
@@ -189,16 +168,12 @@ ves_icall_System_Math_Atan2 (gdouble y, gdouble x)
 gdouble 
 ves_icall_System_Math_Exp (gdouble x)
 {
-       MONO_ARCH_SAVE_REGS;
-
        return exp (x);
 }
 
 gdouble 
 ves_icall_System_Math_Log (gdouble x)
 {
-       MONO_ARCH_SAVE_REGS;
-
        if (x == 0)
                return -HUGE_VAL;
        else if (x < 0)
@@ -210,8 +185,6 @@ ves_icall_System_Math_Log (gdouble x)
 gdouble 
 ves_icall_System_Math_Log10 (gdouble x)
 {
-       MONO_ARCH_SAVE_REGS;
-
        if (x == 0)
                return -HUGE_VAL;
        else if (x < 0)
@@ -224,7 +197,6 @@ gdouble
 ves_icall_System_Math_Pow (gdouble x, gdouble y)
 {
        double result;
-       MONO_ARCH_SAVE_REGS;
 
        if (isnan(x) || isnan(y)) {
                return NAN;
@@ -259,8 +231,6 @@ ves_icall_System_Math_Pow (gdouble x, gdouble y)
 gdouble 
 ves_icall_System_Math_Sqrt (gdouble x)
 {
-       MONO_ARCH_SAVE_REGS;
-
        if (x < 0)
                return NAN;
 
index 7fc18bd39ea96cb91fd0f59a10ee573503a793dd..847a070d6a235902ff272556287d7b2d8fd5f481 100644 (file)
@@ -6,6 +6,7 @@
 #include <mono/metadata/mono-hash.h>
 #include <mono/metadata/mono-mlist.h>
 #include <mono/utils/mono-compiler.h>
+#include <mono/utils/mono-mutex.h>
 
 typedef struct {
        mono_mutex_t io_lock; /* access to sock_to_state */
index 4f86197699d574a9dbec27e42828b4ece60efa23..5c9a7dc22da7165a2709314aec2e9e0e86417856 100644 (file)
@@ -47,7 +47,7 @@
 #include <signal.h>
 #endif
 
-#if defined(PLATFORM_ANDROID) && !defined(TARGET_ARM64)
+#if defined(PLATFORM_ANDROID) && !defined(TARGET_ARM64) && !defined(TARGET_AMD64)
 #define USE_TKILL_ON_ANDROID 1
 #endif
 
index af2c288dcc7b2a0922a6998ed7a2a407e5af3869..cad7c83ae04618a1e9de8a953e766b85e67fb93a 100644 (file)
@@ -2985,6 +2985,12 @@ stack_slot_is_complex_type_not_reference_type (ILStackDesc *slot)
        return stack_slot_get_type (slot) == TYPE_COMPLEX && !MONO_TYPE_IS_REFERENCE (slot->type) && !stack_slot_is_boxed_value (slot);
 }
 
+static gboolean
+stack_slot_is_reference_value (ILStackDesc *slot)
+{
+       return stack_slot_get_type (slot) == TYPE_COMPLEX && (MONO_TYPE_IS_REFERENCE (slot->type) || stack_slot_is_boxed_value (slot));
+}
+
 static void
 do_branch_op (VerifyContext *ctx, signed int delta, const unsigned char table [TYPE_MAX][TYPE_MAX])
 {
@@ -3058,7 +3064,8 @@ do_cmp_op (VerifyContext *ctx, const unsigned char table [TYPE_MAX][TYPE_MAX], g
        a = stack_pop (ctx);
 
        if (opcode == CEE_CGT_UN) {
-               if (stack_slot_get_type (a) == TYPE_COMPLEX && stack_slot_get_type (b) == TYPE_COMPLEX) {
+               if ((stack_slot_is_reference_value (a) && stack_slot_is_null_literal (b)) ||
+                       (stack_slot_is_reference_value (b) && stack_slot_is_null_literal (a))) {
                        stack_push_val (ctx, TYPE_I4, &mono_defaults.int32_class->byval_arg);
                        return;
                }
@@ -3081,7 +3088,11 @@ do_cmp_op (VerifyContext *ctx, const unsigned char table [TYPE_MAX][TYPE_MAX], g
        }
 
        if(res == TYPE_INV) {
-               CODE_NOT_VERIFIABLE (ctx, g_strdup_printf("Compare instruction applyed to ill formed stack (%s x %s) at 0x%04x", stack_slot_get_name (a), stack_slot_get_name (b), ctx->ip_offset));
+               char *left_type = stack_slot_full_name (a);
+               char *right_type = stack_slot_full_name (b);
+               CODE_NOT_VERIFIABLE (ctx, g_strdup_printf("Compare instruction applyed to ill formed stack (%s x %s) at 0x%04x", left_type, right_type, ctx->ip_offset));
+               g_free (left_type);
+               g_free (right_type);
        } else if (res & NON_VERIFIABLE_RESULT) {
                CODE_NOT_VERIFIABLE (ctx, g_strdup_printf ("Compare instruction is not verifiable (%s x %s) at 0x%04x", stack_slot_get_name (a), stack_slot_get_name (b), ctx->ip_offset)); 
                res = res & ~NON_VERIFIABLE_RESULT;
index 8b2fdee7c40209a6bb514233975fc7e3e0662d73..ad1a4b3239da02b72e3a6c255ec97cc9a23e6fca 100755 (executable)
@@ -51,7 +51,7 @@ AM_CFLAGS = \
        -I$(top_srcdir)         \
        $(GLIB_CFLAGS)          \
        $(LLVM_CFLAGS)          \
-       $(PLATFORM_CFLAGS) $(ARCH_CFLAGS)
+       $(PLATFORM_CFLAGS) $(ARCH_CFLAGS) $(SHARED_CFLAGS)
 
 AM_CXXFLAGS = $(LLVM_CXXFLAGS) $(GLIB_CFLAGS)
 
@@ -749,6 +749,7 @@ EXTRA_DIST = TestDriver.cs ldscript ldscript.mono \
        $(windows_sources)                      \
        $(darwin_sources) Info.plist            \
        $(posix_sources)                                        \
+       test_op_il_seq_point.sh                 \
        Makefile.am.in
 
 version.h: Makefile
index cd156ce0ba68f24ed4ffaf09cd8d3a569e7df83a..3ac620526b10681825d7f430c4b8280aa28fd1cf 100644 (file)
@@ -50,6 +50,7 @@
 #include <mono/utils/mono-compiler.h>
 #include <mono/utils/mono-time.h>
 #include <mono/utils/mono-mmap.h>
+#include <mono/utils/json.h>
 
 #include "mini.h"
 #include "seq-points.h"
@@ -129,6 +130,7 @@ typedef struct MonoAotOptions {
        char *llvm_path;
        char *instances_logfile_path;
        char *logfile;
+       gboolean dump_json;
 } MonoAotOptions;
 
 typedef struct MonoAotStats {
@@ -5035,7 +5037,10 @@ emit_method_code (MonoAotCompile *acfg, MonoCompile *cfg)
        emit_line (acfg);
 
        if (acfg->aot_opts.write_symbols) {
-               emit_symbol_size (acfg, debug_sym, ".");
+               if (debug_sym)
+                       emit_symbol_size (acfg, debug_sym, ".");
+               else
+                       emit_symbol_size (acfg, cfg->asm_symbol, ".");
                g_free (debug_sym);
        }
 
@@ -5855,7 +5860,9 @@ emit_plt (MonoAotCompile *acfg)
                        emit_label (acfg, plt_entry->llvm_symbol);
                        if (acfg->llvm_separate) {
                                emit_global (acfg, plt_entry->llvm_symbol, TRUE);
+#if defined(TARGET_MACH)
                                fprintf (acfg->fp, ".private_extern %s\n", plt_entry->llvm_symbol);
+#endif
                        }
                }
 
@@ -6463,6 +6470,8 @@ mono_aot_parse_options (const char *aot_options, MonoAotOptions *opts)
                        exit (0);
                } else if (str_begins_with (arg, "gc-maps")) {
                        mini_gc_enable_gc_maps_for_aot ();
+               } else if (str_begins_with (arg, "dump")) {
+                       opts->dump_json = TRUE;                 
                } else if (str_begins_with (arg, "help") || str_begins_with (arg, "?")) {
                        printf ("Supported options for --aot:\n");
                        printf ("    outfile=\n");
@@ -6491,6 +6500,7 @@ mono_aot_parse_options (const char *aot_options, MonoAotOptions *opts)
                        printf ("    print-skipped\n");
                        printf ("    no-instances\n");
                        printf ("    stats\n");
+                       printf ("    dump\n");
                        printf ("    info\n");
                        printf ("    help/?\n");
                        exit (0);
@@ -8895,6 +8905,160 @@ acfg_free (MonoAotCompile *acfg)
        g_free (acfg);
 }
 
+#define WRAPPER(e,n) n,
+static const char* const
+wrapper_type_names [MONO_WRAPPER_NUM + 1] = {
+#include "mono/metadata/wrapper-types.h"
+       NULL
+};
+
+static G_GNUC_UNUSED const char*
+get_wrapper_type_name (int type)
+{
+       return wrapper_type_names [type];
+}
+
+//#define DUMP_PLT
+//#define DUMP_GOT
+
+static void aot_dump (MonoAotCompile *acfg)
+{
+       FILE *dumpfile;
+       char * dumpname;
+
+       JsonWriter writer;
+       json_writer_init (&writer);
+
+       json_writer_object_begin(&writer);
+
+       // Methods
+       json_writer_indent (&writer);
+       json_writer_object_key(&writer, "methods");
+       json_writer_array_begin (&writer);
+
+       int i;
+       for (i = 0; i < acfg->nmethods; ++i) {
+               MonoCompile *cfg;
+               MonoMethod *method;
+               MonoClass *klass;
+               int index;
+
+               cfg = acfg->cfgs [i];
+               if (!cfg)
+                       continue;
+
+               method = cfg->orig_method;
+
+               json_writer_indent (&writer);
+               json_writer_object_begin(&writer);
+
+               json_writer_indent (&writer);
+               json_writer_object_key(&writer, "name");
+               json_writer_printf (&writer, "\"%s\",\n", method->name);
+
+               json_writer_indent (&writer);
+               json_writer_object_key(&writer, "signature");
+               json_writer_printf (&writer, "\"%s\",\n", mono_method_full_name (method,
+                       /*signature=*/TRUE));
+
+               json_writer_indent (&writer);
+               json_writer_object_key(&writer, "code_size");
+               json_writer_printf (&writer, "\"%d\",\n", cfg->code_size);
+
+               klass = method->klass;
+
+               json_writer_indent (&writer);
+               json_writer_object_key(&writer, "class");
+               json_writer_printf (&writer, "\"%s\",\n", klass->name);
+
+               json_writer_indent (&writer);
+               json_writer_object_key(&writer, "namespace");
+               json_writer_printf (&writer, "\"%s\",\n", klass->name_space);
+
+               json_writer_indent (&writer);
+               json_writer_object_key(&writer, "wrapper_type");
+               json_writer_printf (&writer, "\"%s\",\n", get_wrapper_type_name(method->wrapper_type));
+
+               json_writer_indent_pop (&writer);
+               json_writer_indent (&writer);
+               json_writer_object_end (&writer);
+               json_writer_printf (&writer, ",\n");
+       }
+
+       json_writer_indent_pop (&writer);
+       json_writer_indent (&writer);
+       json_writer_array_end (&writer);
+       json_writer_printf (&writer, ",\n");
+
+       // PLT entries
+#ifdef DUMP_PLT
+       json_writer_indent_push (&writer);
+       json_writer_indent (&writer);
+       json_writer_object_key(&writer, "plt");
+       json_writer_array_begin (&writer);
+
+       for (i = 0; i < acfg->plt_offset; ++i) {
+               MonoPltEntry *plt_entry = NULL;
+               MonoJumpInfo *ji;
+
+               if (i == 0)
+                       /* 
+                        * The first plt entry is unused.
+                        */
+                       continue;
+
+               plt_entry = g_hash_table_lookup (acfg->plt_offset_to_entry, GUINT_TO_POINTER (i));
+               ji = plt_entry->ji;
+
+               json_writer_indent (&writer);
+               json_writer_printf (&writer, "{ ");
+               json_writer_object_key(&writer, "symbol");
+               json_writer_printf (&writer, "\"%s\" },\n", plt_entry->symbol);
+       }
+
+       json_writer_indent_pop (&writer);
+       json_writer_indent (&writer);
+       json_writer_array_end (&writer);
+       json_writer_printf (&writer, ",\n");
+#endif
+
+       // GOT entries
+#ifdef DUMP_GOT
+       json_writer_indent_push (&writer);
+       json_writer_indent (&writer);
+       json_writer_object_key(&writer, "got");
+       json_writer_array_begin (&writer);
+
+       json_writer_indent_push (&writer);
+       for (i = 0; i < acfg->got_info.got_patches->len; ++i) {
+               MonoJumpInfo *ji = g_ptr_array_index (acfg->got_info.got_patches, i);
+
+               json_writer_indent (&writer);
+               json_writer_printf (&writer, "{ ");
+               json_writer_object_key(&writer, "patch_name");
+               json_writer_printf (&writer, "\"%s\" },\n", get_patch_name (ji->type));
+       }
+
+       json_writer_indent_pop (&writer);
+       json_writer_indent (&writer);
+       json_writer_array_end (&writer);
+       json_writer_printf (&writer, ",\n");
+#endif
+
+       json_writer_indent_pop (&writer);
+       json_writer_indent (&writer);
+       json_writer_object_end (&writer);
+
+       dumpname = g_strdup_printf ("%s.json", g_path_get_basename (acfg->image->name));
+       dumpfile = fopen (dumpname, "w+");
+       g_free (dumpname);
+
+       fprintf (dumpfile, "%s", writer.text->str);
+       fclose (dumpfile);
+
+       json_writer_destroy (&writer);
+}
+
 int
 mono_compile_assembly (MonoAssembly *ass, guint32 opts, const char *aot_options)
 {
@@ -9355,6 +9519,9 @@ mono_compile_assembly (MonoAssembly *ass, guint32 opts, const char *aot_options)
 
        aot_printf (acfg, "JIT time: %d ms, Generation time: %d ms, Assembly+Link time: %d ms.\n", acfg->stats.jit_time / 1000, acfg->stats.gen_time / 1000, acfg->stats.link_time / 1000);
 
+       if (acfg->aot_opts.dump_json)
+               aot_dump (acfg);
+
        acfg_free (acfg);
        
        return 0;
index 74e7f61b55465814806816621ef99e414633c097..ac38a175d632e2711192e16cca5bb93feb77d5fd 100644 (file)
@@ -15,8 +15,8 @@ class Tests
 #endif
 {
 #if !MOBILE
-       static int Main () {
-               return TestDriver.RunTests (typeof (Tests));
+       static int Main (String[] args) {
+               return TestDriver.RunTests (typeof (Tests), args);
        }
 #endif
 
@@ -57,6 +57,7 @@ class Tests
                }
        }
 
+       [Category ("!AMD64")]
        static int test_0_arm64_dyncall_double () {
                double arg1 = 1.0f;
                double s = 2.0f;
@@ -66,6 +67,7 @@ class Tests
                return 0;
        }
 
+       [Category ("!AMD64")]
        static int test_0_arm64_dyncall_float () {
                double arg1 = 1.0f;
                float s = 2.0f;
@@ -75,6 +77,7 @@ class Tests
                return 0;
        }
 
+       [Category ("!AMD64")]
        static int test_0_arm64_dyncall_hfa_double () {
                double arg1 = 1.0f;
                // HFA with double members
@@ -87,6 +90,7 @@ class Tests
                return 0;
        }
 
+       [Category ("!AMD64")]
        static int test_0_arm64_dyncall_hfa_float () {
                double arg1 = 1.0f;
                var s = new Struct2 ();
@@ -98,6 +102,7 @@ class Tests
                return 0;
        }
 
+       [Category ("GSHAREDVT")]
        static int test_0_arm64_dyncall_gsharedvt_out_hfa_double () {
                /* gsharedvt out trampoline with double hfa argument */
                double arg1 = 1.0f;
@@ -115,6 +120,7 @@ class Tests
                return 0;
        }
 
+       [Category ("GSHAREDVT")]
        static int test_0_arm64_dyncall_gsharedvt_out_hfa_float () {
                /* gsharedvt out trampoline with double hfa argument */
                double arg1 = 1.0f;
@@ -146,6 +152,8 @@ class Tests
                public long o1, o2, o3;
        }
 
+#if FALSE
+       [Category ("GSHAREDVT")]
        public static int test_0_arm64_gsharedvt_out_vtypebyref () {
                /* gsharedvt out trampoline with vtypebyref argument */
                var s = new VTypeByRefStruct () { o1 = 1, o2 = 2, o3 = 3 };
@@ -159,4 +167,27 @@ class Tests
                        return 1;
                return 0;
        }
+#endif
+
+       class Foo5<T> {
+               public static T Get_T (object o) {
+                       return (T)o;
+               }
+       }
+
+       [Category ("!AMD64")]
+       static int test_0_arm64_dyncall_vtypebyref_ret () {
+               var s = new VTypeByRefStruct () { o1 = 1, o2 = 2, o3 = 3 };
+               Type t = typeof (Foo5<>).MakeGenericType (new Type [] { typeof (VTypeByRefStruct) });
+               var o = Activator.CreateInstance (t);
+               try {
+                       var s_res = (VTypeByRefStruct)t.GetMethod ("Get_T").Invoke (o, new object [] { s });
+                       if (s_res.o1 != 1 || s_res.o2 != 2 || s_res.o3 != 3)
+                               return 1;
+               } catch (TargetInvocationException) {
+                       return 2;
+               }
+               return 0;
+       }
+
 }
index 9f87926717da6329485ff16bbaf2ee661bf5dd58..ed62046b8a2cabdcab252e5020577d69e96e69cd 100644 (file)
@@ -679,5 +679,132 @@ class Tests
                        return 1;
                return 0;
        }
+
+       public static int test_5_r4_fadd () {
+               float f1 = 3.0f;
+               float f2 = 2.0f;
+               return (int)(f1 + f2);
+       }
+
+       public static int test_1_r4_fsub () {
+               float f1 = 3.0f;
+               float f2 = 2.0f;
+               return (int)(f1 - f2);
+       }
+
+       public static int test_6_fmul_r4 () {
+               float f1 = 2.0f;
+               float f2 = 3.0f;
+               return (int)(f1 * f2);
+       }
+
+       public static int test_3_fdiv_r4 () {
+               float f1 = 6.0f;
+               float f2 = 2.0f;
+               return (int)(f1 / f2);
+       }
+
+       public static int test_0_fcmp_eq_r4 () {
+               float f1 = 1.0f;
+               float f2 = 1.0f;
+               return f1 == f2 ? 0 : 1;
+       }
+
+       public static int test_0_fcmp_eq_2_r4 () {
+               float f1 = 1.0f;
+               float f2 = 2.0f;
+               return f1 == f2 ? 1 : 0;
+       }
+
+       public static int test_0_fcmp_eq_r4_mixed () {
+               float f1 = 1.0f;
+               double f2 = 1.0;
+               return f1 == f2 ? 0 : 1;
+       }
+
+       public static int test_3_iconv_to_r4 () {
+               int i = 3;
+               float f = (float)i;
+               return (int)f;
+       }
+
+       public static int test_2_neg_r4 () {
+               float a = -2.0f;
+               return (int)(-a);
+       }
+
+       public static int test_0_fceq_r4 () {
+               float f1 = 1.0f;
+               float f2 = 1.0f;
+               bool res = f1 == f2;
+               return res ? 0 : 1;
+       }
+
+       public static int test_0_fcgt_r4 () {
+               float f1 = 2.0f;
+               float f2 = 1.0f;
+               bool res = f1 > f2;
+               bool res2 = f2 > f1;
+               return res && !res2 ? 0 : 1;
+       }
+
+       public static int test_0_fclt_r4 () {
+               float f1 = 1.0f;
+               float f2 = 2.0f;
+               bool res = f1 < f2;
+               bool res2 = f2 < f1;
+               return res && !res2 ? 0 : 1;
+       }
+
+       public static int test_0_fclt_un_r4 () {
+               float f1 = 2.0f;
+               float f2 = 1.0f;
+               bool res = f1 >= f2;
+               bool res2 = f2 >= f1;
+               return res && !res2 ? 0 : 1;
+       }
+
+       public static int test_0_fcgt_un_r4 () {
+               float f1 = 1.0f;
+               float f2 = 2.0f;
+               bool res = f1 <= f2;
+               bool res2 = f2 <= f1;
+               return res && !res2 ? 0 : 1;
+       }
+
+       public static int test_0_fconv_to_u4_r4 () {
+               float a = 10.0f;
+
+               uint b = (uint)a;
+               return b == 10 ? 0 : 1;
+       }
+
+       public static int test_0_fconv_to_u1_r4 () {
+               float a = 10.0f;
+
+               byte b = (byte)a;
+               return b == 10 ? 0 : 1;
+       }
+
+       public static int test_0_fconv_to_i1_r4 () {
+               float a = 127.0f;
+
+               sbyte b = (sbyte)a;
+               return b == 127 ? 0 : 1;
+       }
+
+       public static int test_0_fconv_to_u2_r4 () {
+               float a = 10.0f;
+
+               ushort b = (ushort)a;
+               return b == 10 ? 0 : 1;
+       }
+
+       public static int test_0_fconv_to_i2_r4 () {
+               float a = 127.0f;
+
+               short b = (short)a;
+               return b == 127 ? 0 : 1;
+       }
 }
 
index 77cadb0448da9f2244affc73c7b3b49019422847..b24b0e5f5005cc1e299c132c099c663b234950c3 100755 (executable)
@@ -122,6 +122,7 @@ icompare: src1:i src2:i len:3
 compare_imm: src1:i len:13
 icompare_imm: src1:i len:8
 fcompare: src1:f src2:f clob:a len:13
+rcompare: src1:f src2:f clob:a len:13
 oparglist: src1:b len:11
 checkthis: src1:b len:5 nacl:8
 call: dest:a clob:c len:32 nacl:64
@@ -131,6 +132,9 @@ voidcall_membase: src1:b clob:c len:32 nacl:64
 fcall: dest:f len:64 clob:c
 fcall_reg: dest:f src1:i len:64 clob:c
 fcall_membase: dest:f src1:b len:64 clob:c
+rcall: dest:f len:64 clob:c
+rcall_reg: dest:f src1:i len:64 clob:c
+rcall_membase: dest:f src1:b len:64 clob:c
 lcall: dest:a len:64 clob:c
 lcall_reg: dest:a src1:i len:64 clob:c
 lcall_membase: dest:a src1:b len:64 clob:c
@@ -256,7 +260,37 @@ float_cgt_un_membase: dest:i src1:f src2:b len:48
 float_clt_membase: dest:i src1:f src2:b len:35
 float_clt_un_membase: dest:i src1:f src2:b len:42
 float_conv_to_u: dest:i src1:f len:46
+
+# R4 opcodes
+r4_conv_to_i1: dest:i src1:f len:32
+r4_conv_to_u1: dest:i src1:f len:32
+r4_conv_to_i2: dest:i src1:f len:32
+r4_conv_to_u2: dest:i src1:f len:32
+r4_conv_to_i4: dest:i src1:f len:16
+r4_conv_to_u4: dest:i src1:f len:32
+r4_conv_to_i8: dest:i src1:f len:32
+r4_conv_to_r8: dest:f src1:f len:17
+r4_conv_to_r4: dest:f src1:f len:17
+r4_add: dest:f src1:f src2:f clob:1 len:5
+r4_sub: dest:f src1:f src2:f clob:1 len:5
+r4_mul: dest:f src1:f src2:f clob:1 len:5
+r4_div: dest:f src1:f src2:f clob:1 len:5
+r4_neg: dest:f src1:f clob:1 len:23
+r4_ceq: dest:i src1:f src2:f len:35
+r4_cgt: dest:i src1:f src2:f len:35
+r4_cgt_un: dest:i src1:f src2:f len:48
+r4_clt: dest:i src1:f src2:f len:35
+r4_clt_un: dest:i src1:f src2:f len:42
+r4_cneq: dest:i src1:f src2:f len:42
+r4_cge: dest:i src1:f src2:f len:35
+r4_cle: dest:i src1:f src2:f len:35
+
 fmove: dest:f src1:f len:8
+rmove: dest:f src1:f len:8
+move_f_to_i4: dest:i src1:f len:16
+move_i4_to_f: dest:f src1:i len:16
+move_f_to_i8: dest:i src1:f len:5
+move_i8_to_f: dest:f src1:i len:5
 call_handler: len:14 clob:c nacl:52
 aot_const: dest:i len:10
 nacl_gc_safe_point: clob:c
@@ -300,8 +334,8 @@ tls_set: src1:i len:16
 tls_set_reg: src1:i src2:i len:32
 atomic_add_i4: src1:b src2:i dest:i len:32
 atomic_add_i8: src1:b src2:i dest:i len:32
-atomic_exchange_i4: src1:b src2:i dest:a len:32
-atomic_exchange_i8: src1:b src2:i dest:a len:32
+atomic_exchange_i4: src1:b src2:i dest:i len:12
+atomic_exchange_i8: src1:b src2:i dest:i len:12
 atomic_cas_i4: src1:b src2:i src3:a dest:a len:24
 atomic_cas_i8: src1:b src2:i src3:a dest:a len:24
 memory_barrier: len:3
@@ -722,7 +756,7 @@ extract_i1: dest:i src1:x len:13
 extract_u1: dest:i src1:x len:13
 extract_r8: dest:f src1:x len:5 
 
-iconv_to_r8_raw: dest:f src1:i len:10
+iconv_to_r4_raw: dest:f src1:i len:10
 
 insert_i2: dest:x src1:x src2:i len:6 clob:1
 
index 2e2e7d468f5d2cd566a27d558c576e72b49d84f2..9501ea5786becfa463afa63d78cbe8021f37aab8 100644 (file)
@@ -76,6 +76,7 @@ localloc: dest:i src1:i len:60
 compare: src1:i src2:i len:4
 compare_imm: src1:i len:12
 fcompare: src1:f src2:f len:12
+rcompare: src1:f src2:f len:12
 oparglist: src1:i len:12
 setlret: src1:i src2:i len:12
 checkthis: src1:b len:4
@@ -88,6 +89,9 @@ voidcall_membase: src1:b len:16 clob:c
 fcall: dest:g len:28 clob:c
 fcall_reg: dest:g src1:i len:16 clob:c
 fcall_membase: dest:g src1:b len:24 clob:c
+rcall: dest:g len:28 clob:c
+rcall_reg: dest:g src1:i len:16 clob:c
+rcall_membase: dest:g src1:b len:24 clob:c
 lcall: dest:l len:20 clob:c
 lcall_reg: dest:l src1:i len:8 clob:c
 lcall_membase: dest:l src1:b len:16 clob:c
@@ -135,6 +139,8 @@ loadu4_memindex: dest:i src1:b src2:i len:4
 loadu4_mem: dest:i len:8
 move: dest:i src1:i len:4
 fmove: dest:f src1:f len:4
+move_f_to_i4: dest:i src1:f len:28
+move_i4_to_f: dest:f src1:i len:8
 add_imm: dest:i src1:i len:12
 sub_imm: dest:i src1:i len:12
 mul_imm: dest:i src1:i len:12
@@ -196,6 +202,31 @@ float_cneq: dest:y src1:f src2:f len:20
 float_cge: dest:y src1:f src2:f len:20
 float_cle: dest:y src1:f src2:f len:20
 float_conv_to_u: dest:i src1:f len:36
+
+# R4 opcodes
+r4_conv_to_i1: dest:i src1:f len:88
+r4_conv_to_i2: dest:i src1:f len:88
+r4_conv_to_i4: dest:i src1:f len:88
+r4_conv_to_u1: dest:i src1:f len:88
+r4_conv_to_u2: dest:i src1:f len:88
+r4_conv_to_u4: dest:i src1:f len:88
+r4_conv_to_r4: dest:f src1:f len:16
+r4_conv_to_r8: dest:f src1:f len:16
+r4_add: dest:f src1:f src2:f len:4
+r4_sub: dest:f src1:f src2:f len:4
+r4_mul: dest:f src1:f src2:f len:4
+r4_div: dest:f src1:f src2:f len:4
+r4_rem: dest:f src1:f src2:f len:16
+r4_neg: dest:f src1:f len:4
+r4_ceq: dest:i src1:f src2:f len:16
+r4_cgt: dest:i src1:f src2:f len:16
+r4_cgt_un: dest:i src1:f src2:f len:20
+r4_clt: dest:i src1:f src2:f len:16
+r4_clt_un: dest:i src1:f src2:f len:20
+r4_cneq: dest:y src1:f src2:f len:20
+r4_cge: dest:y src1:f src2:f len:20
+r4_cle: dest:y src1:f src2:f len:20
+
 setfret: src1:f len:12
 aot_const: dest:i len:16
 objc_get_selector: dest:i len:32
index 97e063f111ab26e24715bfb44957ddbd57ab6031..9fdca593e335c84842b025f93d3ea74ab5a01651 100644 (file)
@@ -76,6 +76,7 @@ localloc: dest:i src1:i len:96
 compare: src1:i src2:i len:4
 compare_imm: src1:i len:20
 fcompare: src1:f src2:f len:12
+rcompare: src1:f src2:f len:12
 oparglist: src1:i len:12
 setlret: src1:i src2:i len:12
 checkthis: src1:b len:4
@@ -88,6 +89,9 @@ voidcall_membase: src1:b len:32 clob:c
 fcall: dest:f len:32 clob:c
 fcall_reg: dest:f src1:i len:32 clob:c
 fcall_membase: dest:f src1:b len:32 clob:c
+rcall: dest:f len:32 clob:c
+rcall_reg: dest:f src1:i len:32 clob:c
+rcall_membase: dest:f src1:b len:32 clob:c
 lcall: dest:l len:32 clob:c
 lcall_reg: dest:l src1:i len:32 clob:c
 lcall_membase: dest:l src1:b len:32 clob:c
@@ -132,6 +136,11 @@ loadu4_memindex: dest:i src1:b src2:i len:4
 loadu4_mem: dest:i len:8
 move: dest:i src1:i len:4
 fmove: dest:f src1:f len:4
+rmove: dest:f src1:f len:4
+move_f_to_i4: dest:i src1:f len:8
+move_i4_to_f: dest:f src1:i len:8
+move_f_to_i8: dest:i src1:f len:4
+move_i8_to_f: dest:f src1:i len:4
 add_imm: dest:i src1:i len:12
 sub_imm: dest:i src1:i len:12
 mul_imm: dest:i src1:i len:12
@@ -194,6 +203,33 @@ float_cge: dest:i src1:f src2:f len:20
 float_cle: dest:i src1:f src2:f len:20
 float_conv_to_u: dest:i src1:f len:36
 setfret: src1:f len:12
+
+# R4 opcodes
+r4_conv_to_i1: dest:i src1:f len:8
+r4_conv_to_u1: dest:i src1:f len:8
+r4_conv_to_i2: dest:i src1:f len:8
+r4_conv_to_u2: dest:i src1:f len:8
+r4_conv_to_i4: dest:i src1:f len:8
+r4_conv_to_u4: dest:i src1:f len:8
+r4_conv_to_i8: dest:l src1:f len:8
+r4_conv_to_u8: dest:l src1:f len:8
+r4_conv_to_r4: dest:f src1:f len:4
+r4_conv_to_r8: dest:f src1:f len:4
+r4_add: dest:f src1:f src2:f len:4
+r4_sub: dest:f src1:f src2:f len:4
+r4_mul: dest:f src1:f src2:f len:4
+r4_div: dest:f src1:f src2:f len:4
+r4_rem: dest:f src1:f src2:f len:16
+r4_neg: dest:f src1:f len:4
+r4_ceq: dest:i src1:f src2:f len:16
+r4_cgt: dest:i src1:f src2:f len:16
+r4_cgt_un: dest:i src1:f src2:f len:20
+r4_clt: dest:i src1:f src2:f len:16
+r4_clt_un: dest:i src1:f src2:f len:20
+r4_cneq: dest:i src1:f src2:f len:20
+r4_cge: dest:i src1:f src2:f len:20
+r4_cle: dest:i src1:f src2:f len:20
+
 aot_const: dest:i len:16
 objc_get_selector: dest:i len:32
 sqrt: dest:f src1:f len:4
index 8d3447a7ee1cd5cd46119fb8c7b578922d79a4f0..d6047aa98df18ea116c7754eee85d1b060a459a7 100644 (file)
@@ -151,6 +151,8 @@ storer8_memindex: dest:b src1:f src2:i len:12
 loadu4_mem: dest:i len:8
 move: dest:i src1:i len:4
 fmove: dest:f src1:f len:8
+move_f_to_i4: dest:i src1:f len:4
+move_i4_to_f: dest:f src1:i len:4
 add_imm: dest:i src1:i len:12
 sub_imm: dest:i src1:i len:12
 mul_imm: dest:i src1:i len:20
index 96c218de52b61ddab6d2d2e22cff21de4306015f..d940b73a7ee3790a781f13ba37ddd898473c36b5 100644 (file)
@@ -131,6 +131,10 @@ float_rem: dest:f src1:f src2:f len:16
 float_rem_un: dest:f src1:f src2:f len:16
 float_sub: dest:f src1:f src2:f len:6
 fmove: dest:f src1:f len:4
+move_f_to_i4: dest:i src1:f len:4
+move_i4_to_f: dest:f src1:i len:4
+move_f_to_i8: dest:i src1:f len:4
+move_i8_to_f: dest:f src1:i len:4
 i8const: dest:i len:20
 icompare: src1:i src2:i len:4
 icompare_imm: src1:i len:18
index 206e06569ddef3c65d8e8ac7c9b349a2f5c51f60..8319bb25280ec09783e99ae3a2b2559d75fa8e5b 100644 (file)
@@ -411,6 +411,8 @@ long_conv_to_r4_2: dest:f src1:i src2:i len:14
 long_conv_to_r_un_2: dest:f src1:i src2:i len:40
 
 fmove: dest:f src1:f
+move_f_to_i4: dest:i src1:f len:17
+move_i4_to_f: dest:f src1:i len:17
 float_conv_to_r4: dest:f src1:f  len:12
 
 load_mem: dest:i len:9
@@ -614,8 +616,6 @@ extract_i1: dest:i src1:x len:10
 extract_u1: dest:i src1:x len:10
 extract_r8: dest:f src1:x len:8 
 
-iconv_to_r8_raw: dest:f src1:i len:17 
-
 insert_i2: dest:x src1:x src2:i len:5 clob:1
 
 extractx_u2: dest:i src1:x len:5
index 07196428d66d6a66af76c687b5fa0f28fdc3f828..9d65414a4f6ca981583975145e9c01fbf4e6ebca 100644 (file)
@@ -3386,6 +3386,43 @@ strdup_tolower (char *s)
        return s2;
 }
 
+/*
+ * Same as g_path_get_basename () but handles windows paths as well,
+ * which can occur in .mdb files created by pdb2mdb.
+ */
+static char*
+dbg_path_get_basename (const char *filename)
+{
+       char *r;
+
+       if (!filename || strchr (filename, '/') || !strchr (filename, '\\'))
+               return g_path_get_basename (filename);
+
+       /* From gpath.c */
+
+       /* No separator -> filename */
+       r = strrchr (filename, '\\');
+       if (r == NULL)
+               return g_strdup (filename);
+
+       /* Trailing slash, remove component */
+       if (r [1] == 0){
+               char *copy = g_strdup (filename);
+               copy [r-filename] = 0;
+               r = strrchr (copy, '\\');
+
+               if (r == NULL){
+                       g_free (copy);
+                       return g_strdup ("/");
+               }
+               r = g_strdup (&r[1]);
+               g_free (copy);
+               return r;
+       }
+
+       return g_strdup (&r[1]);
+}
+
 static void
 init_jit_info_dbg_attrs (MonoJitInfo *ji)
 {
@@ -3526,7 +3563,7 @@ create_event_list (EventKind event, GPtrArray *reqs, MonoJitInfo *ji, EventInfo
                                                                if (g_hash_table_lookup (mod->data.source_files, s))
                                                                        found = TRUE;
                                                                else {
-                                                                       char *s2 = g_path_get_basename (sinfo->source_file);
+                                                                       char *s2 = dbg_path_get_basename (sinfo->source_file);
                                                                        char *s3 = strdup_tolower (s2);
 
                                                                        if (g_hash_table_lookup (mod->data.source_files, s3))
@@ -7132,7 +7169,7 @@ vm_commands (int command, int id, guint8 *p, guint8 *end, Buffer *buf)
                fname = decode_string (p, &p, end);
                ignore_case = decode_byte (p, &p, end);
 
-               basename = g_path_get_basename (fname);
+               basename = dbg_path_get_basename (fname);
 
                res_classes = g_ptr_array_new ();
                res_domains = g_ptr_array_new ();
@@ -7151,7 +7188,7 @@ vm_commands (int command, int id, guint8 *p, guint8 *end, Buffer *buf)
 
                                        for (i = 0; i < files->len; ++i) {
                                                char *s = g_ptr_array_index (files, i);
-                                               char *s2 = g_path_get_basename (s);
+                                               char *s2 = dbg_path_get_basename (s);
                                                char *s3;
 
                                                class_list = g_hash_table_lookup (info->source_file_to_class, s2);
@@ -8181,7 +8218,7 @@ type_commands_internal (int command, MonoClass *klass, MonoDomain *domain, guint
                        if (command == CMD_TYPE_GET_SOURCE_FILES_2) {
                                buffer_add_string (buf, source_file);
                        } else {
-                               base = g_path_get_basename (source_file);
+                               base = dbg_path_get_basename (source_file);
                                buffer_add_string (buf, base);
                                g_free (base);
                        }
index 3d179097328ffcc8d4bf731f00f5258af7a42cfb..4be4026aadeed22ca9f8c3c0efef8193364e7e67 100644 (file)
@@ -142,7 +142,7 @@ extern char *nacl_mono_path;
        MONO_OPT_ALIAS_ANALYSIS | \
        MONO_OPT_AOT)
 
-#define EXCLUDED_FROM_ALL (MONO_OPT_SHARED | MONO_OPT_PRECOMP | MONO_OPT_UNSAFE | MONO_OPT_GSHAREDVT)
+#define EXCLUDED_FROM_ALL (MONO_OPT_SHARED | MONO_OPT_PRECOMP | MONO_OPT_UNSAFE | MONO_OPT_GSHAREDVT | MONO_OPT_FLOAT32)
 
 static guint32
 parse_optimizations (const char* p)
index b64792863d8b768a2f6c47a09182edbe68d0a5f9..8510917341b87d747bd61318c19552789f330cf5 100644 (file)
@@ -2718,4 +2718,67 @@ END:
           ldc.i4.0
        ret
   }
+
+  .method public hidebysig static int32  test_5_r4_fadd_mixed() cil managed
+  {
+    // Code size       17 (0x11)
+    .maxstack  2
+    .locals init (float32 V_0,
+             float64 V_1)
+    IL_0000:  ldc.r4     3
+    IL_0005:  stloc.0
+    IL_0006:  ldc.r8     2
+    IL_000b:  stloc.1
+    IL_000c:  ldloc.0
+    IL_000d:  ldloc.1
+    IL_000e:  add
+    IL_000f:  conv.i4
+    IL_0010:  ret
+  }
+
+ .method public hidebysig static int32  test_0_fcmp_eq_r4_mixed() cil managed
+  {
+    // Code size       32 (0x20)
+    .maxstack  2
+    .locals init (float32 V_0,
+             float64 V_1)
+    IL_0000:  ldc.r4     1
+    IL_0005:  stloc.0
+    IL_0006:  ldc.r8     1
+    IL_000f:  stloc.1
+    IL_0010:  ldloc.0
+    IL_0012:  ldloc.1
+    IL_0013:  bne.un     IL_001e
+
+    IL_0018:  ldc.i4.0
+    IL_0019:  br         IL_001f
+
+    IL_001e:  ldc.i4.1
+    IL_001f:  ret
+  } // end of method Tests::test_0_fcmp_eq_r4_mixed
+
+  .method public hidebysig static int32  test_0_fceq_r4_mixed() cil managed
+  {
+    // Code size       31 (0x1f)
+    .maxstack  2
+    .locals init (float32 V_0,
+             float64 V_1,
+             bool V_2)
+    IL_0000:  ldc.r4     1
+    IL_0005:  stloc.0
+    IL_0006:  ldc.r8     1
+    IL_000b:  stloc.1
+    IL_000c:  ldloc.0
+    IL_000d:  ldloc.1
+    IL_000e:  ceq
+    IL_0010:  stloc.2
+    IL_0011:  ldloc.2
+    IL_0012:  brfalse    IL_001d
+
+    IL_0017:  ldc.i4.0
+    IL_0018:  br         IL_001e
+
+    IL_001d:  ldc.i4.1
+    IL_001e:  ret
+  } // end of method Tests::test_0_fceq_r4
 }
index 748c5072279781cd6628389211af4d4d589dec58..67d073448d3fbdf9b440e87c663538ce8a7d9e7f 100644 (file)
@@ -86,6 +86,7 @@ alloc_dreg (MonoCompile *cfg, MonoStackType stack_type)
                return alloc_ireg_mp (cfg);
        case STACK_OBJ:
                return alloc_ireg_ref (cfg);
+       case STACK_R4:
        case STACK_R8:
                return alloc_freg (cfg);
        case STACK_I8:
index 60ab0af5794c041c61a881d69d7d8dc06ff6a688..e73b832052e6cb56f099dfe4d4a90c73870a203f 100644 (file)
@@ -23,8 +23,6 @@ mono_ldftn (MonoMethod *method)
 {
        gpointer addr;
 
-       MONO_ARCH_SAVE_REGS;
-
        addr = mono_create_jump_trampoline (mono_domain_get (), method, FALSE);
 
        return mono_create_ftnptr (mono_domain_get (), addr);
@@ -36,8 +34,6 @@ ldvirtfn_internal (MonoObject *obj, MonoMethod *method, gboolean gshared)
        MonoError error;
        MonoMethod *res;
 
-       MONO_ARCH_SAVE_REGS;
-
        if (obj == NULL)
                mono_raise_exception (mono_get_exception_null_reference ());
 
@@ -76,8 +72,6 @@ mono_ldvirtfn_gshared (MonoObject *obj, MonoMethod *method)
 void
 mono_helper_stelem_ref_check (MonoArray *array, MonoObject *val)
 {
-       MONO_ARCH_SAVE_REGS;
-
        if (!array)
                mono_raise_exception (mono_get_exception_null_reference ());
        if (val && !mono_object_isinst (val, array->obj.vtable->klass->element_class))
@@ -89,7 +83,6 @@ mono_helper_stelem_ref_check (MonoArray *array, MonoObject *val)
 gint64 
 mono_llmult (gint64 a, gint64 b)
 {
-       /* no need, no exceptions: MONO_ARCH_SAVE_REGS;*/
        return a * b;
 }
 
@@ -102,8 +95,6 @@ mono_llmult_ovf_un (guint64 a, guint64 b)
        guint32 bh = b >> 32; 
        guint64 res, t1;
 
-       MONO_ARCH_SAVE_REGS;
-
        // fixme: this is incredible slow
 
        if (ah && bh)
@@ -151,8 +142,6 @@ mono_llmult_ovf (gint64 a, gint64 b)
        gint64 res, t1;
        gint32 sign;
 
-       MONO_ARCH_SAVE_REGS;
-
        /* need to work with absoulte values, so find out what the
           resulting sign will be and convert any negative numbers
           from two's complement
@@ -239,8 +228,6 @@ mono_llmult_ovf (gint64 a, gint64 b)
 gint64 
 mono_lldiv (gint64 a, gint64 b)
 {
-       MONO_ARCH_SAVE_REGS;
-
 #ifdef MONO_ARCH_NEED_DIV_CHECK
        if (!b)
                mono_raise_exception (mono_get_exception_divide_by_zero ());
@@ -253,8 +240,6 @@ mono_lldiv (gint64 a, gint64 b)
 gint64 
 mono_llrem (gint64 a, gint64 b)
 {
-       MONO_ARCH_SAVE_REGS;
-
 #ifdef MONO_ARCH_NEED_DIV_CHECK
        if (!b)
                mono_raise_exception (mono_get_exception_divide_by_zero ());
@@ -267,8 +252,6 @@ mono_llrem (gint64 a, gint64 b)
 guint64 
 mono_lldiv_un (guint64 a, guint64 b)
 {
-       MONO_ARCH_SAVE_REGS;
-
 #ifdef MONO_ARCH_NEED_DIV_CHECK
        if (!b)
                mono_raise_exception (mono_get_exception_divide_by_zero ());
@@ -279,8 +262,6 @@ mono_lldiv_un (guint64 a, guint64 b)
 guint64 
 mono_llrem_un (guint64 a, guint64 b)
 {
-       MONO_ARCH_SAVE_REGS;
-
 #ifdef MONO_ARCH_NEED_DIV_CHECK
        if (!b)
                mono_raise_exception (mono_get_exception_divide_by_zero ());
@@ -297,7 +278,6 @@ mono_lshl (guint64 a, gint32 shamt)
 {
        guint64 res;
 
-       /* no need, no exceptions: MONO_ARCH_SAVE_REGS;*/
        res = a << shamt;
 
        /*printf ("TESTL %lld << %d = %lld\n", a, shamt, res);*/
@@ -310,7 +290,6 @@ mono_lshr_un (guint64 a, gint32 shamt)
 {
        guint64 res;
 
-       /* no need, no exceptions: MONO_ARCH_SAVE_REGS;*/
        res = a >> shamt;
 
        /*printf ("TESTR %lld >> %d = %lld\n", a, shamt, res);*/
@@ -323,7 +302,6 @@ mono_lshr (gint64 a, gint32 shamt)
 {
        gint64 res;
 
-       /* no need, no exceptions: MONO_ARCH_SAVE_REGS;*/
        res = a >> shamt;
 
        /*printf ("TESTR %lld >> %d = %lld\n", a, shamt, res);*/
@@ -338,8 +316,6 @@ mono_lshr (gint64 a, gint32 shamt)
 gint32
 mono_idiv (gint32 a, gint32 b)
 {
-       MONO_ARCH_SAVE_REGS;
-
 #ifdef MONO_ARCH_NEED_DIV_CHECK
        if (!b)
                mono_raise_exception (mono_get_exception_divide_by_zero ());
@@ -352,8 +328,6 @@ mono_idiv (gint32 a, gint32 b)
 guint32
 mono_idiv_un (guint32 a, guint32 b)
 {
-       MONO_ARCH_SAVE_REGS;
-
 #ifdef MONO_ARCH_NEED_DIV_CHECK
        if (!b)
                mono_raise_exception (mono_get_exception_divide_by_zero ());
@@ -364,8 +338,6 @@ mono_idiv_un (guint32 a, guint32 b)
 gint32
 mono_irem (gint32 a, gint32 b)
 {
-       MONO_ARCH_SAVE_REGS;
-
 #ifdef MONO_ARCH_NEED_DIV_CHECK
        if (!b)
                mono_raise_exception (mono_get_exception_divide_by_zero ());
@@ -379,8 +351,6 @@ mono_irem (gint32 a, gint32 b)
 guint32
 mono_irem_un (guint32 a, guint32 b)
 {
-       MONO_ARCH_SAVE_REGS;
-
 #ifdef MONO_ARCH_NEED_DIV_CHECK
        if (!b)
                mono_raise_exception (mono_get_exception_divide_by_zero ());
@@ -395,8 +365,6 @@ mono_irem_un (guint32 a, guint32 b)
 gint32
 mono_imul (gint32 a, gint32 b)
 {
-       MONO_ARCH_SAVE_REGS;
-
        return a * b;
 }
 
@@ -405,8 +373,6 @@ mono_imul_ovf (gint32 a, gint32 b)
 {
        gint64 res;
 
-       MONO_ARCH_SAVE_REGS;
-
        res = (gint64)a * (gint64)b;
 
        if ((res > 0x7fffffffL) || (res < -2147483648LL))
@@ -420,8 +386,6 @@ mono_imul_ovf_un (guint32 a, guint32 b)
 {
        guint64 res;
 
-       MONO_ARCH_SAVE_REGS;
-
        res = (guint64)a * (guint64)b;
 
        if ((res >> 32))
@@ -435,8 +399,6 @@ mono_imul_ovf_un (guint32 a, guint32 b)
 double
 mono_fdiv (double a, double b)
 {
-       MONO_ARCH_SAVE_REGS;
-
        return a / b;
 }
 #endif
@@ -649,8 +611,6 @@ mono_array_new_va (MonoMethod *cm, ...)
        int rank;
        int i, d;
 
-       MONO_ARCH_SAVE_REGS;
-
        pcount = mono_method_signature (cm)->param_count;
        rank = cm->klass->rank;
 
@@ -689,8 +649,6 @@ mono_array_new_1 (MonoMethod *cm, guint32 length)
        int pcount;
        int rank;
 
-       MONO_ARCH_SAVE_REGS;
-
        pcount = mono_method_signature (cm)->param_count;
        rank = cm->klass->rank;
 
@@ -717,8 +675,6 @@ mono_array_new_2 (MonoMethod *cm, guint32 length1, guint32 length2)
        int pcount;
        int rank;
 
-       MONO_ARCH_SAVE_REGS;
-
        pcount = mono_method_signature (cm)->param_count;
        rank = cm->klass->rank;
 
@@ -746,8 +702,6 @@ mono_array_new_3 (MonoMethod *cm, guint32 length1, guint32 length2, guint32 leng
        int pcount;
        int rank;
 
-       MONO_ARCH_SAVE_REGS;
-
        pcount = mono_method_signature (cm)->param_count;
        rank = cm->klass->rank;
 
@@ -776,8 +730,6 @@ mono_array_new_4 (MonoMethod *cm, guint32 length1, guint32 length2, guint32 leng
        int pcount;
        int rank;
 
-       MONO_ARCH_SAVE_REGS;
-
        pcount = mono_method_signature (cm)->param_count;
        rank = cm->klass->rank;
 
@@ -804,8 +756,6 @@ mono_class_static_field_address (MonoDomain *domain, MonoClassField *field)
        MonoVTable *vtable;
        gpointer addr;
        
-       MONO_ARCH_SAVE_REGS;
-
        //printf ("SFLDA0 %s.%s::%s %d\n", field->parent->name_space, field->parent->name, field->name, field->offset, field->parent->inited);
 
        mono_class_init (field->parent);
@@ -831,7 +781,6 @@ mono_ldtoken_wrapper (MonoImage *image, int token, MonoGenericContext *context)
        MonoClass *handle_class;
        gpointer res;
 
-       MONO_ARCH_SAVE_REGS;
        res = mono_ldtoken_checked (image, token, &handle_class, context, &error);
        mono_error_raise_exception (&error);
        mono_class_init (handle_class);
@@ -866,7 +815,6 @@ mono_fconv_u8 (double v)
 gint64
 mono_fconv_i8 (double v)
 {
-       /* no need, no exceptions: MONO_ARCH_SAVE_REGS;*/
        return (gint64)v;
 }
 #endif
@@ -874,8 +822,6 @@ mono_fconv_i8 (double v)
 guint32
 mono_fconv_u4 (double v)
 {
-       /* no need, no exceptions: MONO_ARCH_SAVE_REGS;*/
-
        /* MS.NET behaves like this for some reason */
 #ifdef HAVE_ISINF
        if (isinf (v) || isnan (v))
@@ -901,8 +847,6 @@ mono_fconv_ovf_i8 (double v)
 {
        gint64 res;
 
-       MONO_ARCH_SAVE_REGS;
-
        res = (gint64)v;
 
        if (isnan(v) || trunc (v) != res) {
@@ -916,7 +860,6 @@ mono_fconv_ovf_u8 (double v)
 {
        guint64 res;
 
-       MONO_ARCH_SAVE_REGS;
 /*
  * The soft-float implementation of some ARM devices have a buggy guin64 to double
  * conversion that it looses precision even when the integer if fully representable
@@ -940,6 +883,39 @@ mono_fconv_ovf_u8 (double v)
        return res;
 }
 
+#ifdef MONO_ARCH_EMULATE_FCONV_TO_I8
+gint64
+mono_rconv_i8 (float v)
+{
+       return (gint64)v;
+}
+#endif
+
+gint64
+mono_rconv_ovf_i8 (float v)
+{
+       gint64 res;
+
+       res = (gint64)v;
+
+       if (isnan(v) || trunc (v) != res) {
+               mono_raise_exception (mono_get_exception_overflow ());
+       }
+       return res;
+}
+
+guint64
+mono_rconv_ovf_u8 (float v)
+{
+       guint64 res;
+
+       res = (guint64)v;
+       if (isnan(v) || trunc (v) != res) {
+               mono_raise_exception (mono_get_exception_overflow ());
+       }
+       return res;
+}
+
 #ifdef MONO_ARCH_EMULATE_LCONV_TO_R8
 double
 mono_lconv_to_r8 (gint64 a)
@@ -1193,6 +1169,8 @@ constrained_gsharedvt_call_setup (gpointer mp, MonoMethod *cmethod, MonoClass *k
                        vt_slot += iface_offset;
                }
                m = klass->vtable [vt_slot];
+               if (cmethod->is_inflated)
+                       m = mono_class_inflate_generic_method (m, mono_method_get_context (cmethod));
        }
        if (klass->valuetype && (m->klass == mono_defaults.object_class || m->klass == mono_defaults.enum_class->parent || m->klass == mono_defaults.enum_class))
                /*
index dd99e7c763559c3834f0076a69fc2090930fcccf..5991716bdc3ffcb050c53b580148714e169dbdf9 100644 (file)
@@ -75,6 +75,12 @@ gint64 mono_fconv_ovf_i8 (double v) MONO_INTERNAL;
 
 guint64 mono_fconv_ovf_u8 (double v) MONO_INTERNAL;
 
+gint64 mono_rconv_i8 (float v) MONO_INTERNAL;
+
+gint64 mono_rconv_ovf_i8 (float v) MONO_INTERNAL;
+
+guint64 mono_rconv_ovf_u8 (float v) MONO_INTERNAL;
+
 double mono_lconv_to_r8 (gint64 a) MONO_INTERNAL;
 
 double mono_conv_to_r8 (gint32 a) MONO_INTERNAL;
index 980694ac604c6763f29a83ea45361b420d71f235..4e316f6db021d3d0eec80b212950cedbc9472535 100644 (file)
@@ -20,6 +20,8 @@
 
 #define BITS_PER_CHUNK MONO_BITSET_BITS_PER_CHUNK
 
+#define BB_ID_SHIFT 18
+
 /* 
  * The liveness2 pass can't handle long vars on 32 bit platforms because the component
  * vars have the same 'idx'.
@@ -217,7 +219,7 @@ analyze_liveness_bb (MonoCompile *cfg, MonoBasicBlock *bb)
        MonoInst *ins;
        int sreg, inst_num;
        MonoMethodVar *vars = cfg->vars;
-       guint32 abs_pos = (bb->dfn << 16);
+       guint32 abs_pos = (bb->dfn << BB_ID_SHIFT);
        
        /* Start inst_num from > 0, so last_use.abs_pos is only 0 for dead variables */
        for (inst_num = 2, ins = bb->code; ins; ins = ins->next, inst_num += 2) {
@@ -492,7 +494,7 @@ mono_analyze_liveness (MonoCompile *cfg)
        for (i = 0; i < cfg->num_bblocks; ++i) {
                MonoBasicBlock *bb = cfg->bblocks [i];
                guint32 max;
-               guint32 abs_pos = (bb->dfn << 16);
+               guint32 abs_pos = (bb->dfn << BB_ID_SHIFT);
                MonoMethodVar *vars = cfg->vars;
 
                if (!bb->live_out_set)
@@ -512,7 +514,7 @@ mono_analyze_liveness (MonoCompile *cfg)
                                if (bits_in & 1)
                                        update_live_range (&vars [k], abs_pos + 0);
                                if (bits_out & 1)
-                                       update_live_range (&vars [k], abs_pos + 0xffff);
+                                       update_live_range (&vars [k], abs_pos + ((1 << BB_ID_SHIFT) - 1));
                                bits_in >>= 1;
                                bits_out >>= 1;
                                k ++;
@@ -614,7 +616,7 @@ optimize_initlocals (MonoCompile *cfg)
                                //printf ("DEAD: "); mono_print_ins (ins);
                                if (cfg->disable_initlocals_opt_refs && var->type == STACK_OBJ)
                                        continue;
-                               if ((ins->opcode == OP_ICONST) || (ins->opcode == OP_I8CONST) || (ins->opcode == OP_R8CONST)) {
+                               if ((ins->opcode == OP_ICONST) || (ins->opcode == OP_I8CONST) || (ins->opcode == OP_R8CONST) || (ins->opcode == OP_R4CONST)) {
                                        NULLIFY_INS (ins);
                                        MONO_VARINFO (cfg, var->inst_c0)->spill_costs -= 1;
                                        /* 
@@ -859,6 +861,23 @@ mono_analyze_liveness2 (MonoCompile *cfg)
        if (disabled)
                return;
 
+       if (cfg->num_bblocks >= (1 << (32 - BB_ID_SHIFT)))
+               /* Ranges would overflow */
+               return;
+
+       for (bnum = cfg->num_bblocks - 1; bnum >= 0; --bnum) {
+               MonoBasicBlock *bb = cfg->bblocks [bnum];
+               MonoInst *ins;
+
+               nins = 0;
+               for (nins = 0, ins = bb->code; ins; ins = ins->next, ++nins)
+                       nins ++;
+
+               if (nins >= ((1 << BB_ID_SHIFT) - 1))
+                       /* Ranges would overflow */
+                       return;
+       }
+
        LIVENESS_DEBUG (printf ("LIVENESS 2 %s\n", mono_method_full_name (cfg->method, TRUE)));
 
        /*
@@ -886,12 +905,12 @@ mono_analyze_liveness2 (MonoCompile *cfg)
                MonoBasicBlock *bb = cfg->bblocks [bnum];
                MonoInst *ins;
 
-               block_from = (bb->dfn << 16) + 1; /* so pos > 0 */
+               block_from = (bb->dfn << BB_ID_SHIFT) + 1; /* so pos > 0 */
                if (bnum < cfg->num_bblocks - 1)
                        /* Beginning of the next bblock */
-                       block_to = (cfg->bblocks [bnum + 1]->dfn << 16) + 1;
+                       block_to = (cfg->bblocks [bnum + 1]->dfn << BB_ID_SHIFT) + 1;
                else
-                       block_to = (bb->dfn << 16) + 0xffff;
+                       block_to = (bb->dfn << BB_ID_SHIFT) + ((1 << BB_ID_SHIFT) - 1);
 
                LIVENESS_DEBUG (printf ("LIVENESS BLOCK BB%d:\n", bb->block_num));
 
index f48d360ffd635e8ec9e9f6c2428f03cbdcebbb88..56047489f80de54825131ade3e99a250399ce5ea 100755 (executable)
@@ -309,7 +309,7 @@ handle_enum:
                return OP_LMOVE;
 #endif
        case MONO_TYPE_R4:
-               return OP_FMOVE;
+               return cfg->r4fp ? OP_RMOVE : OP_FMOVE;
        case MONO_TYPE_R8:
                return OP_FMOVE;
        case MONO_TYPE_VALUETYPE:
@@ -459,29 +459,58 @@ gsharedvt_failure (MonoCompile *cfg, int opcode, const char *file, int line)
        } while (0)
 #endif
 
+/* Emit conversions so both operands of a binary opcode are of the same type */
+static void
+add_widen_op (MonoCompile *cfg, MonoInst *ins, MonoInst **arg1_ref, MonoInst **arg2_ref)
+{
+       MonoInst *arg1 = *arg1_ref;
+       MonoInst *arg2 = *arg2_ref;
+
+       if (cfg->r4fp &&
+               ((arg1->type == STACK_R4 && arg2->type == STACK_R8) ||
+                (arg1->type == STACK_R8 && arg2->type == STACK_R4))) {
+               MonoInst *conv;
+
+               /* Mixing r4/r8 is allowed by the spec */
+               if (arg1->type == STACK_R4) {
+                       int dreg = alloc_freg (cfg);
+
+                       EMIT_NEW_UNALU (cfg, conv, OP_RCONV_TO_R8, dreg, arg1->dreg);
+                       conv->type = STACK_R8;
+                       ins->sreg1 = dreg;
+                       *arg1_ref = conv;
+               }
+               if (arg2->type == STACK_R4) {
+                       int dreg = alloc_freg (cfg);
+
+                       EMIT_NEW_UNALU (cfg, conv, OP_RCONV_TO_R8, dreg, arg2->dreg);
+                       conv->type = STACK_R8;
+                       ins->sreg2 = dreg;
+                       *arg2_ref = conv;
+               }
+       }
+
 #if SIZEOF_REGISTER == 8
-#define ADD_WIDEN_OP(ins, arg1, arg2) do { \
-               /* FIXME: Need to add many more cases */ \
-               if ((arg1)->type == STACK_PTR && (arg2)->type == STACK_I4) {    \
-                       MonoInst *widen; \
-                       int dr = alloc_preg (cfg); \
-                       EMIT_NEW_UNALU (cfg, widen, OP_SEXT_I4, dr, (arg2)->dreg); \
-                       (ins)->sreg2 = widen->dreg; \
-               } \
-       } while (0)
-#else
-#define ADD_WIDEN_OP(ins, arg1, arg2)
+       /* FIXME: Need to add many more cases */
+       if ((arg1)->type == STACK_PTR && (arg2)->type == STACK_I4) {
+               MonoInst *widen;
+
+               int dr = alloc_preg (cfg);
+               EMIT_NEW_UNALU (cfg, widen, OP_SEXT_I4, dr, (arg2)->dreg);
+               (ins)->sreg2 = widen->dreg;
+       }
 #endif
+}
 
 #define ADD_BINOP(op) do {     \
                MONO_INST_NEW (cfg, ins, (op)); \
                sp -= 2;        \
                ins->sreg1 = sp [0]->dreg;      \
                ins->sreg2 = sp [1]->dreg;      \
-               type_from_op (ins, sp [0], sp [1]);     \
+               type_from_op (cfg, ins, sp [0], sp [1]);        \
                CHECK_TYPE (ins);       \
                /* Have to insert a widening op */               \
-        ADD_WIDEN_OP (ins, sp [0], sp [1]); \
+        add_widen_op (cfg, ins, &sp [0], &sp [1]);              \
         ins->dreg = alloc_dreg ((cfg), (ins)->type); \
         MONO_ADD_INS ((cfg)->cbb, (ins)); \
         *sp++ = mono_decompose_opcode ((cfg), (ins)); \
@@ -491,7 +520,7 @@ gsharedvt_failure (MonoCompile *cfg, int opcode, const char *file, int line)
                MONO_INST_NEW (cfg, ins, (op)); \
                sp--;   \
                ins->sreg1 = sp [0]->dreg;      \
-               type_from_op (ins, sp [0], NULL);       \
+               type_from_op (cfg, ins, sp [0], NULL);  \
                CHECK_TYPE (ins);       \
         (ins)->dreg = alloc_dreg ((cfg), (ins)->type); \
         MONO_ADD_INS ((cfg)->cbb, (ins)); \
@@ -504,9 +533,10 @@ gsharedvt_failure (MonoCompile *cfg, int opcode, const char *file, int line)
                MONO_INST_NEW(cfg, cmp, OP_COMPARE);    \
                cmp->sreg1 = sp [0]->dreg;      \
                cmp->sreg2 = sp [1]->dreg;      \
-               type_from_op (cmp, sp [0], sp [1]);     \
+               type_from_op (cfg, cmp, sp [0], sp [1]);        \
                CHECK_TYPE (cmp);       \
-               type_from_op (ins, sp [0], sp [1]);     \
+               add_widen_op (cfg, cmp, &sp [0], &sp [1]);                                              \
+               type_from_op (cfg, ins, sp [0], sp [1]);                                                        \
                ins->inst_many_bb = mono_mempool_alloc (cfg->mempool, sizeof(gpointer)*2);      \
                GET_BBLOCK (cfg, tblock, target);               \
                link_bblock (cfg, bblock, tblock);      \
@@ -748,6 +778,8 @@ handle_enum:
                inst->type = STACK_I8;
                return;
        case MONO_TYPE_R4:
+               inst->type = cfg->r4_stack_type;
+               break;
        case MONO_TYPE_R8:
                inst->type = STACK_R8;
                return;
@@ -791,15 +823,16 @@ bin_num_table [STACK_MAX] [STACK_MAX] = {
        {STACK_INV, STACK_I4,  STACK_INV, STACK_PTR, STACK_INV, STACK_MP,  STACK_INV, STACK_INV},
        {STACK_INV, STACK_INV, STACK_I8,  STACK_INV, STACK_INV, STACK_INV, STACK_INV, STACK_INV},
        {STACK_INV, STACK_PTR, STACK_INV, STACK_PTR, STACK_INV, STACK_MP,  STACK_INV, STACK_INV},
-       {STACK_INV, STACK_INV, STACK_INV, STACK_INV, STACK_R8,  STACK_INV, STACK_INV, STACK_INV},
+       {STACK_INV, STACK_INV, STACK_INV, STACK_INV, STACK_R8,  STACK_INV, STACK_INV, STACK_INV, STACK_R8},
        {STACK_INV, STACK_MP,  STACK_INV, STACK_MP,  STACK_INV, STACK_PTR, STACK_INV, STACK_INV},
        {STACK_INV, STACK_INV, STACK_INV, STACK_INV, STACK_INV, STACK_INV, STACK_INV, STACK_INV},
-       {STACK_INV, STACK_INV, STACK_INV, STACK_INV, STACK_INV, STACK_INV, STACK_INV, STACK_INV}
+       {STACK_INV, STACK_INV, STACK_INV, STACK_INV, STACK_INV, STACK_INV, STACK_INV, STACK_INV},
+       {STACK_INV, STACK_INV, STACK_INV, STACK_INV, STACK_R8, STACK_INV, STACK_INV, STACK_INV, STACK_R4}
 };
 
 static const char 
 neg_table [] = {
-       STACK_INV, STACK_I4, STACK_I8, STACK_PTR, STACK_R8, STACK_INV, STACK_INV, STACK_INV
+       STACK_INV, STACK_I4, STACK_I8, STACK_PTR, STACK_R8, STACK_INV, STACK_INV, STACK_INV, STACK_R4
 };
 
 /* reduce the size of this table */
@@ -817,15 +850,16 @@ bin_int_table [STACK_MAX] [STACK_MAX] = {
 
 static const char
 bin_comp_table [STACK_MAX] [STACK_MAX] = {
-/*     Inv i  L  p  F  &  O  vt */
+/*     Inv i  L  p  F  &  O  vt r4 */
        {0},
        {0, 1, 0, 1, 0, 0, 0, 0}, /* i, int32 */
        {0, 0, 1, 0, 0, 0, 0, 0}, /* L, int64 */
        {0, 1, 0, 1, 0, 2, 4, 0}, /* p, ptr */
-       {0, 0, 0, 0, 1, 0, 0, 0}, /* F, R8 */
+       {0, 0, 0, 0, 1, 0, 0, 0, 1}, /* F, R8 */
        {0, 0, 0, 2, 0, 1, 0, 0}, /* &, managed pointer */
        {0, 0, 0, 4, 0, 0, 3, 0}, /* O, reference */
        {0, 0, 0, 0, 0, 0, 0, 0}, /* vt value type */
+       {0, 0, 0, 0, 1, 0, 0, 0, 1}, /* r, r4 */
 };
 
 /* reduce the size of this table */
@@ -848,43 +882,43 @@ shift_table [STACK_MAX] [STACK_MAX] = {
 /* handles from CEE_ADD to CEE_SHR_UN (CEE_REM_UN for floats) */
 static const guint16
 binops_op_map [STACK_MAX] = {
-       0, OP_IADD-CEE_ADD, OP_LADD-CEE_ADD, OP_PADD-CEE_ADD, OP_FADD-CEE_ADD, OP_PADD-CEE_ADD
+       0, OP_IADD-CEE_ADD, OP_LADD-CEE_ADD, OP_PADD-CEE_ADD, OP_FADD-CEE_ADD, OP_PADD-CEE_ADD, 0, 0, OP_RADD-CEE_ADD
 };
 
 /* handles from CEE_NEG to CEE_CONV_U8 */
 static const guint16
 unops_op_map [STACK_MAX] = {
-       0, OP_INEG-CEE_NEG, OP_LNEG-CEE_NEG, OP_PNEG-CEE_NEG, OP_FNEG-CEE_NEG, OP_PNEG-CEE_NEG
+       0, OP_INEG-CEE_NEG, OP_LNEG-CEE_NEG, OP_PNEG-CEE_NEG, OP_FNEG-CEE_NEG, OP_PNEG-CEE_NEG, 0, 0, OP_RNEG-CEE_NEG
 };
 
 /* handles from CEE_CONV_U2 to CEE_SUB_OVF_UN */
 static const guint16
 ovfops_op_map [STACK_MAX] = {
-       0, OP_ICONV_TO_U2-CEE_CONV_U2, OP_LCONV_TO_U2-CEE_CONV_U2, OP_PCONV_TO_U2-CEE_CONV_U2, OP_FCONV_TO_U2-CEE_CONV_U2, OP_PCONV_TO_U2-CEE_CONV_U2, OP_PCONV_TO_U2-CEE_CONV_U2
+       0, OP_ICONV_TO_U2-CEE_CONV_U2, OP_LCONV_TO_U2-CEE_CONV_U2, OP_PCONV_TO_U2-CEE_CONV_U2, OP_FCONV_TO_U2-CEE_CONV_U2, OP_PCONV_TO_U2-CEE_CONV_U2, OP_PCONV_TO_U2-CEE_CONV_U2, 0, OP_RCONV_TO_U2-CEE_CONV_U2
 };
 
 /* handles from CEE_CONV_OVF_I1_UN to CEE_CONV_OVF_U_UN */
 static const guint16
 ovf2ops_op_map [STACK_MAX] = {
-       0, OP_ICONV_TO_OVF_I1_UN-CEE_CONV_OVF_I1_UN, OP_LCONV_TO_OVF_I1_UN-CEE_CONV_OVF_I1_UN, OP_PCONV_TO_OVF_I1_UN-CEE_CONV_OVF_I1_UN, OP_FCONV_TO_OVF_I1_UN-CEE_CONV_OVF_I1_UN, OP_PCONV_TO_OVF_I1_UN-CEE_CONV_OVF_I1_UN
+       0, OP_ICONV_TO_OVF_I1_UN-CEE_CONV_OVF_I1_UN, OP_LCONV_TO_OVF_I1_UN-CEE_CONV_OVF_I1_UN, OP_PCONV_TO_OVF_I1_UN-CEE_CONV_OVF_I1_UN, OP_FCONV_TO_OVF_I1_UN-CEE_CONV_OVF_I1_UN, OP_PCONV_TO_OVF_I1_UN-CEE_CONV_OVF_I1_UN, 0, 0, OP_RCONV_TO_OVF_I1_UN-CEE_CONV_OVF_I1_UN
 };
 
 /* handles from CEE_CONV_OVF_I1 to CEE_CONV_OVF_U8 */
 static const guint16
 ovf3ops_op_map [STACK_MAX] = {
-       0, OP_ICONV_TO_OVF_I1-CEE_CONV_OVF_I1, OP_LCONV_TO_OVF_I1-CEE_CONV_OVF_I1, OP_PCONV_TO_OVF_I1-CEE_CONV_OVF_I1, OP_FCONV_TO_OVF_I1-CEE_CONV_OVF_I1, OP_PCONV_TO_OVF_I1-CEE_CONV_OVF_I1
+       0, OP_ICONV_TO_OVF_I1-CEE_CONV_OVF_I1, OP_LCONV_TO_OVF_I1-CEE_CONV_OVF_I1, OP_PCONV_TO_OVF_I1-CEE_CONV_OVF_I1, OP_FCONV_TO_OVF_I1-CEE_CONV_OVF_I1, OP_PCONV_TO_OVF_I1-CEE_CONV_OVF_I1, 0, 0, OP_RCONV_TO_OVF_I1-CEE_CONV_OVF_I1
 };
 
 /* handles from CEE_BEQ to CEE_BLT_UN */
 static const guint16
 beqops_op_map [STACK_MAX] = {
-       0, OP_IBEQ-CEE_BEQ, OP_LBEQ-CEE_BEQ, OP_PBEQ-CEE_BEQ, OP_FBEQ-CEE_BEQ, OP_PBEQ-CEE_BEQ, OP_PBEQ-CEE_BEQ
+       0, OP_IBEQ-CEE_BEQ, OP_LBEQ-CEE_BEQ, OP_PBEQ-CEE_BEQ, OP_FBEQ-CEE_BEQ, OP_PBEQ-CEE_BEQ, OP_PBEQ-CEE_BEQ, 0, OP_FBEQ-CEE_BEQ
 };
 
 /* handles from CEE_CEQ to CEE_CLT_UN */
 static const guint16
 ceqops_op_map [STACK_MAX] = {
-       0, OP_ICEQ-OP_CEQ, OP_LCEQ-OP_CEQ, OP_PCEQ-OP_CEQ, OP_FCEQ-OP_CEQ, OP_PCEQ-OP_CEQ, OP_PCEQ-OP_CEQ
+       0, OP_ICEQ-OP_CEQ, OP_LCEQ-OP_CEQ, OP_PCEQ-OP_CEQ, OP_FCEQ-OP_CEQ, OP_PCEQ-OP_CEQ, OP_PCEQ-OP_CEQ, 0, OP_RCEQ-OP_CEQ
 };
 
 /*
@@ -896,8 +930,8 @@ ceqops_op_map [STACK_MAX] = {
  * it should set it to invalid for some types (a conv.x on an object)
  */
 static void
-type_from_op (MonoInst *ins, MonoInst *src1, MonoInst *src2) {
-
+type_from_op (MonoCompile *cfg, MonoInst *ins, MonoInst *src1, MonoInst *src2)
+{
        switch (ins->opcode) {
        /* binops */
        case CEE_ADD:
@@ -929,6 +963,8 @@ type_from_op (MonoInst *ins, MonoInst *src1, MonoInst *src2) {
                ins->type = bin_comp_table [src1->type] [src2->type] ? STACK_I4: STACK_INV;
                if ((src1->type == STACK_I8) || ((SIZEOF_VOID_P == 8) && ((src1->type == STACK_PTR) || (src1->type == STACK_OBJ) || (src1->type == STACK_MP))))
                        ins->opcode = OP_LCOMPARE;
+               else if (src1->type == STACK_R4)
+                       ins->opcode = OP_RCOMPARE;
                else if (src1->type == STACK_R8)
                        ins->opcode = OP_FCOMPARE;
                else
@@ -1054,6 +1090,9 @@ type_from_op (MonoInst *ins, MonoInst *src1, MonoInst *src2) {
                ins->opcode += ovf2ops_op_map [src1->type];
                break;
        case CEE_CONV_R4:
+               ins->type = cfg->r4_stack_type;
+               ins->opcode += unops_op_map [src1->type];
+               break;
        case CEE_CONV_R8:
                ins->type = STACK_R8;
                ins->opcode += unops_op_map [src1->type];
@@ -1098,6 +1137,8 @@ type_from_op (MonoInst *ins, MonoInst *src1, MonoInst *src2) {
                ins->type = STACK_I8;
                break;
        case OP_LOADR4_MEMBASE:
+               ins->type = cfg->r4_stack_type;
+               break;
        case OP_LOADR8_MEMBASE:
                ins->type = STACK_R8;
                break;
@@ -1230,6 +1271,7 @@ type_from_stack_type (MonoInst *ins) {
        case STACK_I4: return &mono_defaults.int32_class->byval_arg;
        case STACK_I8: return &mono_defaults.int64_class->byval_arg;
        case STACK_PTR: return &mono_defaults.int_class->byval_arg;
+       case STACK_R4: return &mono_defaults.single_class->byval_arg;
        case STACK_R8: return &mono_defaults.double_class->byval_arg;
        case STACK_MP:
                return &ins->klass->this_arg;
@@ -1242,7 +1284,7 @@ type_from_stack_type (MonoInst *ins) {
 }
 
 static G_GNUC_UNUSED int
-type_to_stack_type (MonoType *t)
+type_to_stack_type (MonoCompile *cfg, MonoType *t)
 {
        t = mono_type_get_underlying_type (t);
        switch (t->type) {
@@ -1270,6 +1312,7 @@ type_to_stack_type (MonoType *t)
        case MONO_TYPE_U8:
                return STACK_I8;
        case MONO_TYPE_R4:
+               return cfg->r4_stack_type;
        case MONO_TYPE_R8:
                return STACK_R8;
        case MONO_TYPE_VALUETYPE:
@@ -2095,7 +2138,7 @@ emit_instrumentation_call (MonoCompile *cfg, void *func)
 }
 
 static int
-ret_type_to_call_opcode (MonoType *type, int calli, int virt, MonoGenericSharingContext *gsctx)
+ret_type_to_call_opcode (MonoCompile *cfg, MonoType *type, int calli, int virt, MonoGenericSharingContext *gsctx)
 {
        if (type->byref)
                return calli? OP_CALL_REG: virt? OP_CALL_MEMBASE: OP_CALL;
@@ -2130,6 +2173,10 @@ handle_enum:
        case MONO_TYPE_U8:
                return calli? OP_LCALL_REG: virt? OP_LCALL_MEMBASE: OP_LCALL;
        case MONO_TYPE_R4:
+               if (cfg->r4fp)
+                       return calli? OP_RCALL_REG: virt? OP_RCALL_MEMBASE: OP_RCALL;
+               else
+                       return calli? OP_FCALL_REG: virt? OP_FCALL_MEMBASE: OP_FCALL;
        case MONO_TYPE_R8:
                return calli? OP_FCALL_REG: virt? OP_FCALL_MEMBASE: OP_FCALL;
        case MONO_TYPE_VALUETYPE:
@@ -2225,6 +2272,9 @@ target_type_is_incompatible (MonoCompile *cfg, MonoType *target, MonoInst *arg)
                        return 1;
                return 0;
        case MONO_TYPE_R4:
+               if (arg->type != cfg->r4_stack_type)
+                       return 1;
+               return 0;
        case MONO_TYPE_R8:
                if (arg->type != STACK_R8)
                        return 1;
@@ -2339,6 +2389,9 @@ handle_enum:
                                return 1;
                        continue;
                case MONO_TYPE_R4:
+                       if (args [i]->type != cfg->r4_stack_type)
+                               return 1;
+                       continue;
                case MONO_TYPE_R8:
                        if (args [i]->type != STACK_R8)
                                return 1;
@@ -2382,6 +2435,8 @@ callvirt_to_call (int opcode)
                return OP_VOIDCALL;
        case OP_FCALL_MEMBASE:
                return OP_FCALL;
+       case OP_RCALL_MEMBASE:
+               return OP_RCALL;
        case OP_VCALL_MEMBASE:
                return OP_VCALL;
        case OP_LCALL_MEMBASE:
@@ -2552,7 +2607,7 @@ mono_emit_call_args (MonoCompile *cfg, MonoMethodSignature *sig,
 
                MONO_INST_NEW_CALL (cfg, call, OP_TAILCALL);
        } else
-               MONO_INST_NEW_CALL (cfg, call, ret_type_to_call_opcode (sig->ret, calli, virtual, cfg->generic_sharing_context));
+               MONO_INST_NEW_CALL (cfg, call, ret_type_to_call_opcode (cfg, sig->ret, calli, virtual, cfg->generic_sharing_context));
 
        call->args = args;
        call->signature = sig;
@@ -3243,7 +3298,7 @@ mini_emit_stobj (MonoCompile *cfg, MonoInst *dest, MonoInst *src, MonoClass *kla
                }
        }
 
-       if (!size_ins && (cfg->opt & MONO_OPT_INTRINS) && n <= sizeof (gpointer) * 5) {
+       if (!size_ins && (cfg->opt & MONO_OPT_INTRINS) && n <= sizeof (gpointer) * 8) {
                /* FIXME: Optimize the case when src/dest is OP_LDADDR */
                mini_emit_memcpy (cfg, dest->dreg, 0, src->dreg, 0, n, align);
        } else {
@@ -3303,7 +3358,7 @@ mini_emit_initobj (MonoCompile *cfg, MonoInst *dest, const guchar *ip, MonoClass
 
        n = mono_class_value_size (klass, &align);
 
-       if (n <= sizeof (gpointer) * 5) {
+       if (n <= sizeof (gpointer) * 8) {
                mini_emit_memset (cfg, dest->dreg, 0, n, 0, align);
        }
        else {
@@ -3887,8 +3942,9 @@ handle_alloc (MonoCompile *cfg, MonoClass *klass, gboolean for_box, int context_
                MonoInst *data;
                int rgctx_info;
                MonoInst *iargs [2];
+               gboolean known_instance_size = !mini_is_gsharedvt_klass (cfg, klass);
 
-               MonoMethod *managed_alloc = mono_gc_get_managed_allocator (klass, for_box);
+               MonoMethod *managed_alloc = mono_gc_get_managed_allocator (klass, for_box, known_instance_size);
 
                if (cfg->opt & MONO_OPT_SHARED)
                        rgctx_info = MONO_RGCTX_INFO_KLASS;
@@ -3905,8 +3961,11 @@ handle_alloc (MonoCompile *cfg, MonoClass *klass, gboolean for_box, int context_
                        alloc_ftn = mono_object_new_specific;
                }
 
-               if (managed_alloc && !(cfg->opt & MONO_OPT_SHARED))
+               if (managed_alloc && !(cfg->opt & MONO_OPT_SHARED)) {
+                       if (known_instance_size)
+                               EMIT_NEW_ICONST (cfg, iargs [1], mono_gc_get_aligned_size_for_allocator (klass->instance_size));
                        return mono_emit_method_call (cfg, managed_alloc, iargs, NULL);
+               }
 
                return mono_emit_jit_icall (cfg, alloc_ftn, iargs);
        }
@@ -3933,11 +3992,12 @@ handle_alloc (MonoCompile *cfg, MonoClass *klass, gboolean for_box, int context_
                }
 
 #ifndef MONO_CROSS_COMPILE
-               managed_alloc = mono_gc_get_managed_allocator (klass, for_box);
+               managed_alloc = mono_gc_get_managed_allocator (klass, for_box, TRUE);
 #endif
 
                if (managed_alloc) {
                        EMIT_NEW_VTABLECONST (cfg, iargs [0], vtable);
+                       EMIT_NEW_ICONST (cfg, iargs [1], mono_gc_get_aligned_size_for_allocator (klass->instance_size));
                        return mono_emit_method_call (cfg, managed_alloc, iargs, NULL);
                }
                alloc_ftn = mono_class_get_allocation_ftn (vtable, for_box, &pass_lw);
@@ -4781,6 +4841,99 @@ handle_array_new (MonoCompile *cfg, int rank, MonoInst **sp, unsigned char *ip)
        return mono_emit_native_call (cfg, mono_icall_get_wrapper (info), info->sig, sp);
 }
 
+/*
+ * handle_constrained_gsharedvt_call:
+ *
+ *   Handle constrained calls where the receiver is a gsharedvt type.
+ * Return the instruction representing the call. Set the cfg exception on failure.
+ */
+static MonoInst*
+handle_constrained_gsharedvt_call (MonoCompile *cfg, MonoMethod *cmethod, MonoMethodSignature *fsig, MonoInst **sp, MonoClass *constrained_call,
+                                                                  gboolean *ref_emit_widen, MonoBasicBlock **ref_bblock)
+{
+       MonoInst *ins = NULL;
+       MonoBasicBlock *bblock = *ref_bblock;
+       gboolean emit_widen = *ref_emit_widen;
+
+       /*
+        * Constrained calls need to behave differently at runtime dependending on whenever the receiver is instantiated as ref type or as a vtype.
+        * This is hard to do with the current call code, since we would have to emit a branch and two different calls. So instead, we
+        * pack the arguments into an array, and do the rest of the work in in an icall.
+        */
+       if (((cmethod->klass == mono_defaults.object_class) || (cmethod->klass->flags & TYPE_ATTRIBUTE_INTERFACE) || (!cmethod->klass->valuetype && cmethod->klass->image != mono_defaults.corlib)) &&
+               (MONO_TYPE_IS_VOID (fsig->ret) || MONO_TYPE_IS_PRIMITIVE (fsig->ret) || MONO_TYPE_IS_REFERENCE (fsig->ret) || MONO_TYPE_ISSTRUCT (fsig->ret) || mini_is_gsharedvt_type (cfg, fsig->ret)) &&
+               (fsig->param_count == 0 || (!fsig->hasthis && fsig->param_count == 1) || (fsig->param_count == 1 && (MONO_TYPE_IS_REFERENCE (fsig->params [0]) || fsig->params [0]->byref || mini_is_gsharedvt_type (cfg, fsig->params [0]))))) {
+               MonoInst *args [16];
+
+               /*
+                * This case handles calls to
+                * - object:ToString()/Equals()/GetHashCode(),
+                * - System.IComparable<T>:CompareTo()
+                * - System.IEquatable<T>:Equals ()
+                * plus some simple interface calls enough to support AsyncTaskMethodBuilder.
+                */
+
+               args [0] = sp [0];
+               if (mono_method_check_context_used (cmethod))
+                       args [1] = emit_get_rgctx_method (cfg, mono_method_check_context_used (cmethod), cmethod, MONO_RGCTX_INFO_METHOD);
+               else
+                       EMIT_NEW_METHODCONST (cfg, args [1], cmethod);
+               args [2] = emit_get_rgctx_klass (cfg, mono_class_check_context_used (constrained_call), constrained_call, MONO_RGCTX_INFO_KLASS);
+
+               /* !fsig->hasthis is for the wrapper for the Object.GetType () icall */
+               if (fsig->hasthis && fsig->param_count) {
+                       /* Pass the arguments using a localloc-ed array using the format expected by runtime_invoke () */
+                       MONO_INST_NEW (cfg, ins, OP_LOCALLOC_IMM);
+                       ins->dreg = alloc_preg (cfg);
+                       ins->inst_imm = fsig->param_count * sizeof (mgreg_t);
+                       MONO_ADD_INS (cfg->cbb, ins);
+                       args [4] = ins;
+
+                       if (mini_is_gsharedvt_type (cfg, fsig->params [0])) {
+                               int addr_reg;
+
+                               args [3] = emit_get_gsharedvt_info_klass (cfg, mono_class_from_mono_type (fsig->params [0]), MONO_RGCTX_INFO_CLASS_BOX_TYPE);
+
+                               EMIT_NEW_VARLOADA_VREG (cfg, ins, sp [1]->dreg, fsig->params [0]);
+                               addr_reg = ins->dreg;
+                               EMIT_NEW_STORE_MEMBASE (cfg, ins, OP_STORE_MEMBASE_REG, args [4]->dreg, 0, addr_reg);
+                       } else {
+                               EMIT_NEW_ICONST (cfg, args [3], 0);
+                               EMIT_NEW_STORE_MEMBASE (cfg, ins, OP_STORE_MEMBASE_REG, args [4]->dreg, 0, sp [1]->dreg);
+                       }
+               } else {
+                       EMIT_NEW_ICONST (cfg, args [3], 0);
+                       EMIT_NEW_ICONST (cfg, args [4], 0);
+               }
+               ins = mono_emit_jit_icall (cfg, mono_gsharedvt_constrained_call, args);
+               emit_widen = FALSE;
+
+               if (mini_is_gsharedvt_type (cfg, fsig->ret)) {
+                       ins = handle_unbox_gsharedvt (cfg, mono_class_from_mono_type (fsig->ret), ins, &bblock);
+               } else if (MONO_TYPE_IS_PRIMITIVE (fsig->ret) || MONO_TYPE_ISSTRUCT (fsig->ret)) {
+                       MonoInst *add;
+
+                       /* Unbox */
+                       NEW_BIALU_IMM (cfg, add, OP_ADD_IMM, alloc_dreg (cfg, STACK_MP), ins->dreg, sizeof (MonoObject));
+                       MONO_ADD_INS (cfg->cbb, add);
+                       /* Load value */
+                       NEW_LOAD_MEMBASE_TYPE (cfg, ins, fsig->ret, add->dreg, 0);
+                       MONO_ADD_INS (cfg->cbb, ins);
+                       /* ins represents the call result */
+               }
+       } else {
+               GSHAREDVT_FAILURE (CEE_CALLVIRT);
+       }
+
+       *ref_emit_widen = emit_widen;
+       *ref_bblock = bblock;
+
+       return ins;
+
+ exception_exit:
+       return NULL;
+}
+
 static void
 mono_emit_load_got_addr (MonoCompile *cfg)
 {
@@ -5476,7 +5629,7 @@ mini_emit_inst_for_method (MonoCompile *cfg, MonoMethod *cmethod, MonoMethodSign
                        EMIT_NEW_LOAD_MEMBASE (cfg, ins, OP_LOADU2_MEMBASE, dreg, 
                                                                   add_reg, MONO_STRUCT_OFFSET (MonoString, chars));
 #endif
-                       type_from_op (ins, NULL, NULL);
+                       type_from_op (cfg, ins, NULL, NULL);
                        return ins;
                } else if (strcmp (cmethod->name, "get_Length") == 0 && fsig->param_count == 1) {
                        int dreg = alloc_ireg (cfg);
@@ -5506,7 +5659,7 @@ mini_emit_inst_for_method (MonoCompile *cfg, MonoMethod *cmethod, MonoMethodSign
                        int vt_reg = alloc_preg (cfg);
                        MONO_EMIT_NEW_LOAD_MEMBASE_FAULT (cfg, vt_reg, args [0]->dreg, MONO_STRUCT_OFFSET (MonoObject, vtable));
                        EMIT_NEW_LOAD_MEMBASE (cfg, ins, OP_LOAD_MEMBASE, dreg, vt_reg, MONO_STRUCT_OFFSET (MonoVTable, type));
-                       type_from_op (ins, NULL, NULL);
+                       type_from_op (cfg, ins, NULL, NULL);
 
                        return ins;
 #if !defined(MONO_ARCH_EMULATE_MUL_DIV)
@@ -5586,7 +5739,7 @@ mini_emit_inst_for_method (MonoCompile *cfg, MonoMethod *cmethod, MonoMethodSign
                                                                                                 args [0]->dreg, MONO_STRUCT_OFFSET (MonoObject, vtable));
                        EMIT_NEW_LOAD_MEMBASE (cfg, ins, OP_LOADU1_MEMBASE, dreg,
                                                                   vtable_reg, MONO_STRUCT_OFFSET (MonoVTable, rank));
-                       type_from_op (ins, NULL, NULL);
+                       type_from_op (cfg, ins, NULL, NULL);
 
                        return ins;
                } else if (strcmp (cmethod->name, "get_Length") == 0 && fsig->param_count == 1) {
@@ -5594,7 +5747,7 @@ mini_emit_inst_for_method (MonoCompile *cfg, MonoMethod *cmethod, MonoMethodSign
 
                        EMIT_NEW_LOAD_MEMBASE_FAULT (cfg, ins, OP_LOADI4_MEMBASE, dreg, 
                                                                                 args [0]->dreg, MONO_STRUCT_OFFSET (MonoArray, max_length));
-                       type_from_op (ins, NULL, NULL);
+                       type_from_op (cfg, ins, NULL, NULL);
 
                        return ins;
                } else
@@ -5652,22 +5805,31 @@ mini_emit_inst_for_method (MonoCompile *cfg, MonoMethod *cmethod, MonoMethodSign
                                case MONO_TYPE_I4:
                                case MONO_TYPE_U4:
                                        ins->dreg = mono_alloc_ireg (cfg);
+                                       ins->type = STACK_I4;
                                        break;
                                case MONO_TYPE_I8:
                                case MONO_TYPE_U8:
                                        ins->dreg = mono_alloc_lreg (cfg);
+                                       ins->type = STACK_I8;
                                        break;
                                case MONO_TYPE_I:
                                case MONO_TYPE_U:
                                        ins->dreg = mono_alloc_ireg (cfg);
+#if SIZEOF_REGISTER == 8
+                                       ins->type = STACK_I8;
+#else
+                                       ins->type = STACK_I4;
+#endif
                                        break;
                                case MONO_TYPE_R4:
                                case MONO_TYPE_R8:
                                        ins->dreg = mono_alloc_freg (cfg);
+                                       ins->type = STACK_R8;
                                        break;
                                default:
                                        g_assert (mini_type_is_reference (cfg, fsig->params [0]));
                                        ins->dreg = mono_alloc_ireg_ref (cfg);
+                                       ins->type = STACK_OBJ;
                                        break;
                                }
 
@@ -5776,6 +5938,7 @@ mini_emit_inst_for_method (MonoCompile *cfg, MonoMethod *cmethod, MonoMethodSign
                                MONO_INST_NEW (cfg, ins, OP_ATOMIC_LOAD_I8);
                                ins->dreg = mono_alloc_preg (cfg);
                                ins->sreg1 = args [0]->dreg;
+                               ins->type = STACK_I8;
                                ins->backend.memory_barrier_kind = MONO_MEMORY_BARRIER_SEQ;
                                MONO_ADD_INS (cfg->cbb, ins);
                        } else {
@@ -5788,6 +5951,7 @@ mini_emit_inst_for_method (MonoCompile *cfg, MonoMethod *cmethod, MonoMethodSign
                                load_ins->dreg = mono_alloc_preg (cfg);
                                load_ins->inst_basereg = args [0]->dreg;
                                load_ins->inst_offset = 0;
+                               load_ins->type = STACK_I8;
                                MONO_ADD_INS (cfg->cbb, load_ins);
 
                                emit_memory_barrier (cfg, MONO_MEMORY_BARRIER_SEQ);
@@ -5877,19 +6041,29 @@ mini_emit_inst_for_method (MonoCompile *cfg, MonoMethod *cmethod, MonoMethodSign
                        }
                }
                else if (strcmp (cmethod->name, "Exchange") == 0 && fsig->param_count == 2) {
-                       guint32 opcode;
+                       MonoInst *f2i = NULL, *i2f;
+                       guint32 opcode, f2i_opcode, i2f_opcode;
                        gboolean is_ref = mini_type_is_reference (cfg, fsig->params [0]);
+                       gboolean is_float = fsig->params [0]->type == MONO_TYPE_R4 || fsig->params [0]->type == MONO_TYPE_R8;
 
-                       if (fsig->params [0]->type == MONO_TYPE_I4) {
+                       if (fsig->params [0]->type == MONO_TYPE_I4 ||
+                           fsig->params [0]->type == MONO_TYPE_R4) {
                                opcode = OP_ATOMIC_EXCHANGE_I4;
+                               f2i_opcode = OP_MOVE_F_TO_I4;
+                               i2f_opcode = OP_MOVE_I4_TO_F;
                                cfg->has_atomic_exchange_i4 = TRUE;
                        }
 #if SIZEOF_REGISTER == 8
-                       else if (is_ref || (fsig->params [0]->type == MONO_TYPE_I8) ||
-                                       (fsig->params [0]->type == MONO_TYPE_I))
+                       else if (is_ref ||
+                                fsig->params [0]->type == MONO_TYPE_I8 ||
+                                fsig->params [0]->type == MONO_TYPE_R8 ||
+                                fsig->params [0]->type == MONO_TYPE_I) {
                                opcode = OP_ATOMIC_EXCHANGE_I8;
+                               f2i_opcode = OP_MOVE_F_TO_I8;
+                               i2f_opcode = OP_MOVE_I8_TO_F;
+                       }
 #else
-                       else if (is_ref || (fsig->params [0]->type == MONO_TYPE_I)) {
+                       else if (is_ref || fsig->params [0]->type == MONO_TYPE_I) {
                                opcode = OP_ATOMIC_EXCHANGE_I4;
                                cfg->has_atomic_exchange_i4 = TRUE;
                        }
@@ -5900,11 +6074,24 @@ mini_emit_inst_for_method (MonoCompile *cfg, MonoMethod *cmethod, MonoMethodSign
                        if (!mono_arch_opcode_supported (opcode))
                                return NULL;
 
+                       if (is_float) {
+                               /* TODO: Decompose these opcodes instead of bailing here. */
+                               if (COMPILE_SOFT_FLOAT (cfg))
+                                       return NULL;
+
+                               MONO_INST_NEW (cfg, f2i, f2i_opcode);
+                               f2i->dreg = mono_alloc_ireg (cfg);
+                               f2i->sreg1 = args [1]->dreg;
+                               if (f2i_opcode == OP_MOVE_F_TO_I4)
+                                       f2i->backend.spill_var = mini_get_int_to_float_spill_area (cfg);
+                               MONO_ADD_INS (cfg->cbb, f2i);
+                       }
+
                        MONO_INST_NEW (cfg, ins, opcode);
                        ins->dreg = is_ref ? mono_alloc_ireg_ref (cfg) : mono_alloc_ireg (cfg);
                        ins->inst_basereg = args [0]->dreg;
                        ins->inst_offset = 0;
-                       ins->sreg2 = args [1]->dreg;
+                       ins->sreg2 = is_float ? f2i->dreg : args [1]->dreg;
                        MONO_ADD_INS (cfg->cbb, ins);
 
                        switch (fsig->params [0]->type) {
@@ -5921,71 +6108,126 @@ mini_emit_inst_for_method (MonoCompile *cfg, MonoMethod *cmethod, MonoMethodSign
                                ins->type = STACK_I4;
 #endif
                                break;
+                       case MONO_TYPE_R4:
+                       case MONO_TYPE_R8:
+                               ins->type = STACK_R8;
+                               break;
                        default:
                                g_assert (mini_type_is_reference (cfg, fsig->params [0]));
                                ins->type = STACK_OBJ;
                                break;
                        }
 
+                       if (is_float) {
+                               MONO_INST_NEW (cfg, i2f, i2f_opcode);
+                               i2f->dreg = mono_alloc_freg (cfg);
+                               i2f->sreg1 = ins->dreg;
+                               i2f->type = STACK_R8;
+                               if (i2f_opcode == OP_MOVE_I4_TO_F)
+                                       i2f->backend.spill_var = mini_get_int_to_float_spill_area (cfg);
+                               MONO_ADD_INS (cfg->cbb, i2f);
+
+                               ins = i2f;
+                       }
+
                        if (cfg->gen_write_barriers && is_ref)
                                emit_write_barrier (cfg, args [0], args [1]);
                }
                else if ((strcmp (cmethod->name, "CompareExchange") == 0) && fsig->param_count == 3) {
-                       int size = 0;
+                       MonoInst *f2i_new = NULL, *f2i_cmp = NULL, *i2f;
+                       guint32 opcode, f2i_opcode, i2f_opcode;
                        gboolean is_ref = mini_type_is_reference (cfg, fsig->params [1]);
+                       gboolean is_float = fsig->params [1]->type == MONO_TYPE_R4 || fsig->params [1]->type == MONO_TYPE_R8;
 
-                       if (fsig->params [1]->type == MONO_TYPE_I4)
-                               size = 4;
-                       else if (is_ref || fsig->params [1]->type == MONO_TYPE_I)
-                               size = sizeof (gpointer);
+                       if (fsig->params [1]->type == MONO_TYPE_I4 ||
+                           fsig->params [1]->type == MONO_TYPE_R4) {
+                               opcode = OP_ATOMIC_CAS_I4;
+                               f2i_opcode = OP_MOVE_F_TO_I4;
+                               i2f_opcode = OP_MOVE_I4_TO_F;
+                               cfg->has_atomic_cas_i4 = TRUE;
+                       }
 #if SIZEOF_REGISTER == 8
-                       else if (fsig->params [1]->type == MONO_TYPE_I8)
-                               size = 8;
+                       else if (is_ref ||
+                                fsig->params [1]->type == MONO_TYPE_I8 ||
+                                fsig->params [1]->type == MONO_TYPE_R8 ||
+                                fsig->params [1]->type == MONO_TYPE_I) {
+                               opcode = OP_ATOMIC_CAS_I8;
+                               f2i_opcode = OP_MOVE_F_TO_I8;
+                               i2f_opcode = OP_MOVE_I8_TO_F;
+                       }
+#else
+                       else if (is_ref || fsig->params [1]->type == MONO_TYPE_I) {
+                               opcode = OP_ATOMIC_CAS_I4;
+                               cfg->has_atomic_cas_i4 = TRUE;
+                       }
 #endif
+                       else
+                               return NULL;
 
-                       if (size == 4) {
-                               if (!mono_arch_opcode_supported (OP_ATOMIC_CAS_I4))
-                                       return NULL;
-                               MONO_INST_NEW (cfg, ins, OP_ATOMIC_CAS_I4);
-                               ins->dreg = is_ref ? alloc_ireg_ref (cfg) : alloc_ireg (cfg);
-                               ins->sreg1 = args [0]->dreg;
-                               ins->sreg2 = args [1]->dreg;
-                               ins->sreg3 = args [2]->dreg;
-                               MONO_ADD_INS (cfg->cbb, ins);
-                               cfg->has_atomic_cas_i4 = TRUE;
-                       } else if (size == 8) {
-                               if (!mono_arch_opcode_supported (OP_ATOMIC_CAS_I8))
+                       if (!mono_arch_opcode_supported (opcode))
+                               return NULL;
+
+                       if (is_float) {
+                               /* TODO: Decompose these opcodes instead of bailing here. */
+                               if (COMPILE_SOFT_FLOAT (cfg))
                                        return NULL;
-                               MONO_INST_NEW (cfg, ins, OP_ATOMIC_CAS_I8);
-                               ins->dreg = is_ref ? alloc_ireg_ref (cfg) : alloc_ireg (cfg);
-                               ins->sreg1 = args [0]->dreg;
-                               ins->sreg2 = args [1]->dreg;
-                               ins->sreg3 = args [2]->dreg;
-                               MONO_ADD_INS (cfg->cbb, ins);
-                       } else {
-                               /* g_assert_not_reached (); */
+
+                               MONO_INST_NEW (cfg, f2i_new, f2i_opcode);
+                               f2i_new->dreg = mono_alloc_ireg (cfg);
+                               f2i_new->sreg1 = args [1]->dreg;
+                               if (f2i_opcode == OP_MOVE_F_TO_I4)
+                                       f2i_new->backend.spill_var = mini_get_int_to_float_spill_area (cfg);
+                               MONO_ADD_INS (cfg->cbb, f2i_new);
+
+                               MONO_INST_NEW (cfg, f2i_cmp, f2i_opcode);
+                               f2i_cmp->dreg = mono_alloc_ireg (cfg);
+                               f2i_cmp->sreg1 = args [2]->dreg;
+                               if (f2i_opcode == OP_MOVE_F_TO_I4)
+                                       f2i_cmp->backend.spill_var = mini_get_int_to_float_spill_area (cfg);
+                               MONO_ADD_INS (cfg->cbb, f2i_cmp);
                        }
 
-                       if (ins) {
-                               switch (fsig->params [0]->type) {
-                               case MONO_TYPE_I4:
-                                       ins->type = STACK_I4;
-                                       break;
-                               case MONO_TYPE_I8:
-                                       ins->type = STACK_I8;
-                                       break;
-                               case MONO_TYPE_I:
+                       MONO_INST_NEW (cfg, ins, opcode);
+                       ins->dreg = is_ref ? alloc_ireg_ref (cfg) : alloc_ireg (cfg);
+                       ins->sreg1 = args [0]->dreg;
+                       ins->sreg2 = is_float ? f2i_new->dreg : args [1]->dreg;
+                       ins->sreg3 = is_float ? f2i_cmp->dreg : args [2]->dreg;
+                       MONO_ADD_INS (cfg->cbb, ins);
+
+                       switch (fsig->params [0]->type) {
+                       case MONO_TYPE_I4:
+                               ins->type = STACK_I4;
+                               break;
+                       case MONO_TYPE_I8:
+                               ins->type = STACK_I8;
+                               break;
+                       case MONO_TYPE_I:
 #if SIZEOF_REGISTER == 8
-                                       ins->type = STACK_I8;
+                               ins->type = STACK_I8;
 #else
-                                       ins->type = STACK_I4;
+                               ins->type = STACK_I4;
 #endif
-                                       break;
-                               default:
-                                       g_assert (mini_type_is_reference (cfg, fsig->params [0]));
-                                       ins->type = STACK_OBJ;
-                                       break;
-                               }
+                               break;
+                       case MONO_TYPE_R4:
+                       case MONO_TYPE_R8:
+                               ins->type = STACK_R8;
+                               break;
+                       default:
+                               g_assert (mini_type_is_reference (cfg, fsig->params [0]));
+                               ins->type = STACK_OBJ;
+                               break;
+                       }
+
+                       if (is_float) {
+                               MONO_INST_NEW (cfg, i2f, i2f_opcode);
+                               i2f->dreg = mono_alloc_freg (cfg);
+                               i2f->sreg1 = ins->dreg;
+                               i2f->type = STACK_R8;
+                               if (i2f_opcode == OP_MOVE_I4_TO_F)
+                                       i2f->backend.spill_var = mini_get_int_to_float_spill_area (cfg);
+                               MONO_ADD_INS (cfg->cbb, i2f);
+
+                               ins = i2f;
                        }
 
                        if (cfg->gen_write_barriers && is_ref)
@@ -6076,6 +6318,38 @@ mini_emit_inst_for_method (MonoCompile *cfg, MonoMethod *cmethod, MonoMethodSign
                                ins->sreg1 = args [0]->dreg;
                                ins->backend.memory_barrier_kind = MONO_MEMORY_BARRIER_ACQ;
                                MONO_ADD_INS (cfg->cbb, ins);
+
+                               switch (fsig->params [0]->type) {
+                               case MONO_TYPE_BOOLEAN:
+                               case MONO_TYPE_I1:
+                               case MONO_TYPE_U1:
+                               case MONO_TYPE_I2:
+                               case MONO_TYPE_U2:
+                               case MONO_TYPE_I4:
+                               case MONO_TYPE_U4:
+                                       ins->type = STACK_I4;
+                                       break;
+                               case MONO_TYPE_I8:
+                               case MONO_TYPE_U8:
+                                       ins->type = STACK_I8;
+                                       break;
+                               case MONO_TYPE_I:
+                               case MONO_TYPE_U:
+#if SIZEOF_REGISTER == 8
+                                       ins->type = STACK_I8;
+#else
+                                       ins->type = STACK_I4;
+#endif
+                                       break;
+                               case MONO_TYPE_R4:
+                               case MONO_TYPE_R8:
+                                       ins->type = STACK_R8;
+                                       break;
+                               default:
+                                       g_assert (mini_type_is_reference (cfg, fsig->params [0]));
+                                       ins->type = STACK_OBJ;
+                                       break;
+                               }
                        }
                }
 
@@ -6232,7 +6506,7 @@ mini_redirect_call (MonoCompile *cfg, MonoMethod *method,
 
                        g_assert (vtable); /*Should not fail since it System.String*/
 #ifndef MONO_CROSS_COMPILE
-                       managed_alloc = mono_gc_get_managed_allocator (method->klass, FALSE);
+                       managed_alloc = mono_gc_get_managed_allocator (method->klass, FALSE, FALSE);
 #endif
                        if (!managed_alloc)
                                return NULL;
@@ -6337,6 +6611,7 @@ static void
 emit_init_rvar (MonoCompile *cfg, int dreg, MonoType *rtype)
 {
        static double r8_0 = 0.0;
+       static float r4_0 = 0.0;
        MonoInst *ins;
        int t;
 
@@ -6349,6 +6624,12 @@ emit_init_rvar (MonoCompile *cfg, int dreg, MonoType *rtype)
                MONO_EMIT_NEW_ICONST (cfg, dreg, 0);
        } else if (t == MONO_TYPE_I8 || t == MONO_TYPE_U8) {
                MONO_EMIT_NEW_I8CONST (cfg, dreg, 0);
+       } else if (cfg->r4fp && t == MONO_TYPE_R4) {
+               MONO_INST_NEW (cfg, ins, OP_R4CONST);
+               ins->type = STACK_R4;
+               ins->inst_p0 = (void*)&r4_0;
+               ins->dreg = dreg;
+               MONO_ADD_INS (cfg->cbb, ins);
        } else if (t == MONO_TYPE_R4 || t == MONO_TYPE_R8) {
                MONO_INST_NEW (cfg, ins, OP_R8CONST);
                ins->type = STACK_R8;
@@ -6379,6 +6660,8 @@ emit_dummy_init_rvar (MonoCompile *cfg, int dreg, MonoType *rtype)
                MONO_EMIT_NEW_DUMMY_INIT (cfg, dreg, OP_DUMMY_ICONST);
        } else if (t == MONO_TYPE_I8 || t == MONO_TYPE_U8) {
                MONO_EMIT_NEW_DUMMY_INIT (cfg, dreg, OP_DUMMY_I8CONST);
+       } else if (cfg->r4fp && t == MONO_TYPE_R4) {
+               MONO_EMIT_NEW_DUMMY_INIT (cfg, dreg, OP_DUMMY_R4CONST);
        } else if (t == MONO_TYPE_R4 || t == MONO_TYPE_R8) {
                MONO_EMIT_NEW_DUMMY_INIT (cfg, dreg, OP_DUMMY_R8CONST);
        } else if ((t == MONO_TYPE_VALUETYPE) || (t == MONO_TYPE_TYPEDBYREF) ||
@@ -8217,10 +8500,10 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
 
                                dreg = alloc_freg (cfg);
                                EMIT_NEW_LOAD_MEMBASE (cfg, ins, OP_LOADR4_MEMBASE, dreg, cons->dreg, 0);
-                               ins->type = STACK_R8;
+                               ins->type = cfg->r4_stack_type;
                        } else {
                                MONO_INST_NEW (cfg, ins, OP_R4CONST);
-                               ins->type = STACK_R8;
+                               ins->type = cfg->r4_stack_type;
                                ins->dreg = alloc_dreg (cfg, STACK_R8);
                                ins->inst_p0 = f;
                                MONO_ADD_INS (bblock, ins);
@@ -8544,80 +8827,18 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
 
                        if (constrained_call) {
                                if (mini_is_gsharedvt_klass (cfg, constrained_call)) {
-                                       /*
-                                        * Constrained calls need to behave differently at runtime dependending on whenever the receiver is instantiated as ref type or as a vtype.
-                                        */
                                        if ((cmethod->klass != mono_defaults.object_class) && constrained_call->valuetype && cmethod->klass->valuetype) {
                                                /* The 'Own method' case below */
                                        } else if (cmethod->klass->image != mono_defaults.corlib && !(cmethod->klass->flags & TYPE_ATTRIBUTE_INTERFACE) && !cmethod->klass->valuetype) {
                                                /* 'The type parameter is instantiated as a reference type' case below. */
-                                       } else if (((cmethod->klass == mono_defaults.object_class) || (cmethod->klass->flags & TYPE_ATTRIBUTE_INTERFACE) || (!cmethod->klass->valuetype && cmethod->klass->image != mono_defaults.corlib)) &&
-                                                          (MONO_TYPE_IS_VOID (fsig->ret) || MONO_TYPE_IS_PRIMITIVE (fsig->ret) || MONO_TYPE_IS_REFERENCE (fsig->ret) || MONO_TYPE_ISSTRUCT (fsig->ret) || mini_is_gsharedvt_type (cfg, fsig->ret)) &&
-                                                          (fsig->param_count == 0 || (!fsig->hasthis && fsig->param_count == 1) || (fsig->param_count == 1 && (MONO_TYPE_IS_REFERENCE (fsig->params [0]) || mini_is_gsharedvt_type (cfg, fsig->params [0]))))) {
-                                               MonoInst *args [16];
-
-                                               /*
-                                                * This case handles calls to
-                                                * - object:ToString()/Equals()/GetHashCode(),
-                                                * - System.IComparable<T>:CompareTo()
-                                                * - System.IEquatable<T>:Equals ()
-                                                * plus some simple interface calls enough to support AsyncTaskMethodBuilder.
-                                                */
-
-                                               args [0] = sp [0];
-                                               if (mono_method_check_context_used (cmethod))
-                                                       args [1] = emit_get_rgctx_method (cfg, mono_method_check_context_used (cmethod), cmethod, MONO_RGCTX_INFO_METHOD);
-                                               else
-                                                       EMIT_NEW_METHODCONST (cfg, args [1], cmethod);
-                                               args [2] = emit_get_rgctx_klass (cfg, mono_class_check_context_used (constrained_call), constrained_call, MONO_RGCTX_INFO_KLASS);
-
-                                               /* !fsig->hasthis is for the wrapper for the Object.GetType () icall */
-                                               if (fsig->hasthis && fsig->param_count) {
-                                                       /* Pass the arguments using a localloc-ed array using the format expected by runtime_invoke () */
-                                                       MONO_INST_NEW (cfg, ins, OP_LOCALLOC_IMM);
-                                                       ins->dreg = alloc_preg (cfg);
-                                                       ins->inst_imm = fsig->param_count * sizeof (mgreg_t);
-                                                       MONO_ADD_INS (cfg->cbb, ins);
-                                                       args [4] = ins;
-
-                                                       if (mini_is_gsharedvt_type (cfg, fsig->params [0])) {
-                                                               int addr_reg;
-
-                                                               args [3] = emit_get_gsharedvt_info_klass (cfg, mono_class_from_mono_type (fsig->params [0]), MONO_RGCTX_INFO_CLASS_BOX_TYPE);
-
-                                                               EMIT_NEW_VARLOADA_VREG (cfg, ins, sp [1]->dreg, fsig->params [0]);
-                                                               addr_reg = ins->dreg;
-                                                               EMIT_NEW_STORE_MEMBASE (cfg, ins, OP_STORE_MEMBASE_REG, args [4]->dreg, 0, addr_reg);
-                                                       } else {
-                                                               EMIT_NEW_ICONST (cfg, args [3], 0);
-                                                               EMIT_NEW_STORE_MEMBASE (cfg, ins, OP_STORE_MEMBASE_REG, args [4]->dreg, 0, sp [1]->dreg);
-                                                       }
-                                               } else {
-                                                       EMIT_NEW_ICONST (cfg, args [3], 0);
-                                                       EMIT_NEW_ICONST (cfg, args [4], 0);
-                                               }
-                                               ins = mono_emit_jit_icall (cfg, mono_gsharedvt_constrained_call, args);
-                                               emit_widen = FALSE;
-
-                                               if (mini_is_gsharedvt_type (cfg, fsig->ret)) {
-                                                       ins = handle_unbox_gsharedvt (cfg, mono_class_from_mono_type (fsig->ret), ins, &bblock);
-                                               } else if (MONO_TYPE_IS_PRIMITIVE (fsig->ret) || MONO_TYPE_ISSTRUCT (fsig->ret)) {
-                                                       MonoInst *add;
-
-                                                       /* Unbox */
-                                                       NEW_BIALU_IMM (cfg, add, OP_ADD_IMM, alloc_dreg (cfg, STACK_MP), ins->dreg, sizeof (MonoObject));
-                                                       MONO_ADD_INS (cfg->cbb, add);
-                                                       /* Load value */
-                                                       NEW_LOAD_MEMBASE_TYPE (cfg, ins, fsig->ret, add->dreg, 0);
-                                                       MONO_ADD_INS (cfg->cbb, ins);
-                                                       /* ins represents the call result */
-                                               }
-
-                                               goto call_end;
                                        } else {
-                                               GSHAREDVT_FAILURE (*ip);
+                                               ins = handle_constrained_gsharedvt_call (cfg, cmethod, fsig, sp, constrained_call, &emit_widen, &bblock);
+                                               CHECK_CFG_EXCEPTION;
+                                               g_assert (ins);
+                                               goto call_end;
                                        }
                                }
+
                                /*
                                 * We have the `constrained.' prefix opcode.
                                 */
@@ -9421,7 +9642,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
 
                        MONO_INST_NEW(cfg, cmp, OP_ICOMPARE_IMM);
                        cmp->sreg1 = sp [0]->dreg;
-                       type_from_op (cmp, sp [0], NULL);
+                       type_from_op (cfg, cmp, sp [0], NULL);
                        CHECK_TYPE (cmp);
 
 #if SIZEOF_REGISTER == 4
@@ -9439,7 +9660,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                        MONO_ADD_INS (bblock, cmp);
 
                        MONO_INST_NEW (cfg, ins, is_true ? CEE_BNE_UN : CEE_BEQ);
-                       type_from_op (ins, sp [0], NULL);
+                       type_from_op (cfg, ins, sp [0], NULL);
                        MONO_ADD_INS (bblock, ins);
                        ins->inst_many_bb = mono_mempool_alloc (cfg->mempool, sizeof(gpointer)*2);
                        GET_BBLOCK (cfg, tblock, target);
@@ -9614,6 +9835,8 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
 
                        NEW_LOAD_MEMBASE (cfg, ins, ldind_to_load_membase (*ip), dreg, sp [0]->dreg, 0);
                        ins->type = ldind_type [*ip - CEE_LDIND_I1];
+                       if (*ip == CEE_LDIND_R4)
+                               ins->type = cfg->r4_stack_type;
                        ins->flags |= ins_flag;
                        MONO_ADD_INS (bblock, ins);
                        *sp++ = ins;
@@ -9660,7 +9883,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                        sp -= 2;
                        ins->sreg1 = sp [0]->dreg;
                        ins->sreg2 = sp [1]->dreg;
-                       type_from_op (ins, sp [0], sp [1]);
+                       type_from_op (cfg, ins, sp [0], sp [1]);
                        CHECK_TYPE (ins);
                        ins->dreg = alloc_dreg ((cfg), (ins)->type);
 
@@ -9699,9 +9922,9 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                        sp -= 2;
                        ins->sreg1 = sp [0]->dreg;
                        ins->sreg2 = sp [1]->dreg;
-                       type_from_op (ins, sp [0], sp [1]);
+                       type_from_op (cfg, ins, sp [0], sp [1]);
                        CHECK_TYPE (ins);
-                       ADD_WIDEN_OP (ins, sp [0], sp [1]);
+                       add_widen_op (cfg, ins, &sp [0], &sp [1]);
                        ins->dreg = alloc_dreg ((cfg), (ins)->type);
 
                        /* FIXME: Pass opcode to is_inst_imm */
@@ -9731,7 +9954,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                                                ins->inst_imm = (gssize)(sp [1]->inst_c0);
                                        ins->sreg2 = -1;
 
-                                       /* Might be followed by an instruction added by ADD_WIDEN_OP */
+                                       /* Might be followed by an instruction added by add_widen_op */
                                        if (sp [1]->next == NULL)
                                                NULLIFY_INS (sp [1]);
                                }
@@ -9787,7 +10010,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                case CEE_CONV_OVF_U:
                        CHECK_STACK (1);
 
-                       if (sp [-1]->type == STACK_R8) {
+                       if (sp [-1]->type == STACK_R8 || sp [-1]->type == STACK_R4) {
                                ADD_UNOP (CEE_CONV_OVF_I8);
                                ADD_UNOP (*ip);
                        } else {
@@ -9800,7 +10023,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                case CEE_CONV_OVF_U4:
                        CHECK_STACK (1);
 
-                       if (sp [-1]->type == STACK_R8) {
+                       if (sp [-1]->type == STACK_R8 || sp [-1]->type == STACK_R4) {
                                ADD_UNOP (CEE_CONV_OVF_U8);
                                ADD_UNOP (*ip);
                        } else {
@@ -12068,8 +12291,13 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                        case CEE_CGT_UN:
                        case CEE_CLT:
                        case CEE_CLT_UN: {
-                               MonoInst *cmp;
+                               MonoInst *cmp, *arg1, *arg2;
+
                                CHECK_STACK (2);
+                               sp -= 2;
+                               arg1 = sp [0];
+                               arg2 = sp [1];
+
                                /*
                                 * The following transforms:
                                 *    CEE_CEQ    into OP_CEQ
@@ -12079,25 +12307,27 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                                 *    CEE_CLT_UN into OP_CLT_UN
                                 */
                                MONO_INST_NEW (cfg, cmp, (OP_CEQ - CEE_CEQ) + ip [1]);
-                               
+
                                MONO_INST_NEW (cfg, ins, cmp->opcode);
-                               sp -= 2;
-                               cmp->sreg1 = sp [0]->dreg;
-                               cmp->sreg2 = sp [1]->dreg;
-                               type_from_op (cmp, sp [0], sp [1]);
+                               cmp->sreg1 = arg1->dreg;
+                               cmp->sreg2 = arg2->dreg;
+                               type_from_op (cfg, cmp, arg1, arg2);
                                CHECK_TYPE (cmp);
-                               if ((sp [0]->type == STACK_I8) || ((SIZEOF_VOID_P == 8) && ((sp [0]->type == STACK_PTR) || (sp [0]->type == STACK_OBJ) || (sp [0]->type == STACK_MP))))
+                               add_widen_op (cfg, cmp, &arg1, &arg2);
+                               if ((arg1->type == STACK_I8) || ((SIZEOF_VOID_P == 8) && ((arg1->type == STACK_PTR) || (arg1->type == STACK_OBJ) || (arg1->type == STACK_MP))))
                                        cmp->opcode = OP_LCOMPARE;
-                               else if (sp [0]->type == STACK_R8)
+                               else if (arg1->type == STACK_R4)
+                                       cmp->opcode = OP_RCOMPARE;
+                               else if (arg1->type == STACK_R8)
                                        cmp->opcode = OP_FCOMPARE;
                                else
                                        cmp->opcode = OP_ICOMPARE;
                                MONO_ADD_INS (bblock, cmp);
                                ins->type = STACK_I4;
                                ins->dreg = alloc_dreg (cfg, ins->type);
-                               type_from_op (ins, sp [0], sp [1]);
+                               type_from_op (cfg, ins, arg1, arg2);
 
-                               if (cmp->opcode == OP_FCOMPARE) {
+                               if (cmp->opcode == OP_FCOMPARE || cmp->opcode == OP_RCOMPARE) {
                                        /*
                                         * The backends expect the fceq opcodes to do the
                                         * comparison too.
@@ -13826,7 +14056,7 @@ mono_spill_global_vars (MonoCompile *cfg, gboolean *need_local_opts)
                                                        ins->inst_destbasereg = var->inst_basereg;
                                                        ins->inst_offset = var->inst_offset;
                                                        spec = INS_INFO (ins->opcode);
-                                               } else if (!lvreg && ((ins->opcode == OP_MOVE) || (ins->opcode == OP_FMOVE) || (ins->opcode == OP_LMOVE))) {
+                                               } else if (!lvreg && ((ins->opcode == OP_MOVE) || (ins->opcode == OP_FMOVE) || (ins->opcode == OP_LMOVE) || (ins->opcode == OP_RMOVE))) {
                                                        ins->opcode = store_opcode;
                                                        ins->inst_destbasereg = var->inst_basereg;
                                                        ins->inst_offset = var->inst_offset;
index dccd61c1cf8bb533813a5d33bfbbdf8fa21c8261..29336f277da3c7fd455f5e49254d90e3dfcccb7a 100755 (executable)
@@ -751,7 +751,7 @@ add_valuetype (MonoGenericSharingContext *gsctx, MonoMethodSignature *sig, ArgIn
        klass = mono_class_from_mono_type (type);
        size = mini_type_stack_size_full (gsctx, &klass->byval_arg, NULL, sig->pinvoke);
 #ifndef HOST_WIN32
-       if (!sig->pinvoke && !disable_vtypes_in_regs && ((is_return && (size == 8)) || (!is_return && (size <= 16)))) {
+       if (!sig->pinvoke && ((is_return && (size == 8)) || (!is_return && (size <= 16)))) {
                /* We pass and return vtypes of size 8 in a register */
        } else if (!sig->pinvoke || (size == 0) || (size > 16)) {
                pass_on_stack = TRUE;
@@ -3496,6 +3496,12 @@ emit_move_return_value (MonoCompile *cfg, MonoInst *ins, guint8 *code)
                                amd64_sse_movsd_reg_reg (code, ins->dreg, AMD64_XMM0);
                }
                break;
+       case OP_RCALL:
+       case OP_RCALL_REG:
+       case OP_RCALL_MEMBASE:
+               if (ins->dreg != AMD64_XMM0)
+                       amd64_sse_movss_reg_reg (code, ins->dreg, AMD64_XMM0);
+               break;
        case OP_VCALL:
        case OP_VCALL_REG:
        case OP_VCALL_MEMBASE:
@@ -3543,7 +3549,7 @@ static int tls_gs_offset;
 gboolean
 mono_amd64_have_tls_get (void)
 {
-#ifdef __APPLE__
+#ifdef TARGET_MACH
        static gboolean have_tls_get = FALSE;
        static gboolean inited = FALSE;
        guint8 *ins;
@@ -3574,6 +3580,8 @@ mono_amd64_have_tls_get (void)
        tls_gs_offset = ins[5];
 
        return have_tls_get;
+#elif defined(TARGET_ANDROID)
+       return FALSE;
 #else
        return TRUE;
 #endif
@@ -4657,10 +4665,16 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
                        amd64_mov_reg_imm_size (code, ins->dreg, 0, 8);
                        break;
                case OP_MOVE:
-                       amd64_mov_reg_reg (code, ins->dreg, ins->sreg1, sizeof(mgreg_t));
+                       if (ins->dreg != ins->sreg1)
+                               amd64_mov_reg_reg (code, ins->dreg, ins->sreg1, sizeof(mgreg_t));
                        break;
                case OP_AMD64_SET_XMMREG_R4: {
-                       amd64_sse_cvtsd2ss_reg_reg (code, ins->dreg, ins->sreg1);
+                       if (cfg->r4fp) {
+                               if (ins->dreg != ins->sreg1)
+                                       amd64_sse_movss_reg_reg (code, ins->dreg, ins->sreg1);
+                       } else {
+                               amd64_sse_cvtsd2ss_reg_reg (code, ins->dreg, ins->sreg1);
+                       }
                        break;
                }
                case OP_AMD64_SET_XMMREG_R8: {
@@ -4720,6 +4734,7 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
                }
                case OP_CALL:
                case OP_FCALL:
+               case OP_RCALL:
                case OP_LCALL:
                case OP_VCALL:
                case OP_VCALL2:
@@ -4756,6 +4771,7 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
                        code = emit_move_return_value (cfg, ins, code);
                        break;
                case OP_FCALL_REG:
+               case OP_RCALL_REG:
                case OP_LCALL_REG:
                case OP_VCALL_REG:
                case OP_VCALL2_REG:
@@ -4804,6 +4820,7 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
                        code = emit_move_return_value (cfg, ins, code);
                        break;
                case OP_FCALL_MEMBASE:
+               case OP_RCALL_MEMBASE:
                case OP_LCALL_MEMBASE:
                case OP_VCALL_MEMBASE:
                case OP_VCALL2_MEMBASE:
@@ -5085,12 +5102,16 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
                        float f = *(float *)ins->inst_p0;
 
                        if ((f == 0.0) && (mono_signbit (f) == 0)) {
-                               amd64_sse_xorpd_reg_reg (code, ins->dreg, ins->dreg);
+                               if (cfg->r4fp)
+                                       amd64_sse_xorps_reg_reg (code, ins->dreg, ins->dreg);
+                               else
+                                       amd64_sse_xorpd_reg_reg (code, ins->dreg, ins->dreg);
                        }
                        else {
                                mono_add_patch_info (cfg, offset, MONO_PATCH_INFO_R4, ins->inst_p0);
                                amd64_sse_movss_reg_membase (code, ins->dreg, AMD64_RIP, 0);
-                               amd64_sse_cvtss2sd_reg_reg (code, ins->dreg, ins->dreg);
+                               if (!cfg->r4fp)
+                                       amd64_sse_cvtss2sd_reg_reg (code, ins->dreg, ins->dreg);
                        }
                        break;
                }
@@ -5101,31 +5122,51 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
                        amd64_sse_movsd_reg_membase (code, ins->dreg, ins->inst_basereg, ins->inst_offset);
                        break;
                case OP_STORER4_MEMBASE_REG:
-                       /* This requires a double->single conversion */
-                       amd64_sse_cvtsd2ss_reg_reg (code, MONO_ARCH_FP_SCRATCH_REG, ins->sreg1);
-                       amd64_sse_movss_membase_reg (code, ins->inst_destbasereg, ins->inst_offset, MONO_ARCH_FP_SCRATCH_REG);
+                       if (cfg->r4fp) {
+                               amd64_sse_movss_membase_reg (code, ins->inst_destbasereg, ins->inst_offset, ins->sreg1);
+                       } else {
+                               /* This requires a double->single conversion */
+                               amd64_sse_cvtsd2ss_reg_reg (code, MONO_ARCH_FP_SCRATCH_REG, ins->sreg1);
+                               amd64_sse_movss_membase_reg (code, ins->inst_destbasereg, ins->inst_offset, MONO_ARCH_FP_SCRATCH_REG);
+                       }
                        break;
                case OP_LOADR4_MEMBASE:
-                       amd64_sse_movss_reg_membase (code, ins->dreg, ins->inst_basereg, ins->inst_offset);
-                       amd64_sse_cvtss2sd_reg_reg (code, ins->dreg, ins->dreg);
+                       if (cfg->r4fp) {
+                               amd64_sse_movss_reg_membase (code, ins->dreg, ins->inst_basereg, ins->inst_offset);
+                       } else {
+                               amd64_sse_movss_reg_membase (code, ins->dreg, ins->inst_basereg, ins->inst_offset);
+                               amd64_sse_cvtss2sd_reg_reg (code, ins->dreg, ins->dreg);
+                       }
                        break;
                case OP_ICONV_TO_R4:
-                       amd64_sse_cvtsi2ss_reg_reg_size (code, ins->dreg, ins->sreg1, 4);
-                       amd64_sse_cvtss2sd_reg_reg (code, ins->dreg, ins->dreg);
+                       if (cfg->r4fp) {
+                               amd64_sse_cvtsi2ss_reg_reg_size (code, ins->dreg, ins->sreg1, 4);
+                       } else {
+                               amd64_sse_cvtsi2ss_reg_reg_size (code, ins->dreg, ins->sreg1, 4);
+                               amd64_sse_cvtss2sd_reg_reg (code, ins->dreg, ins->dreg);
+                       }
                        break;
                case OP_ICONV_TO_R8:
                        amd64_sse_cvtsi2sd_reg_reg_size (code, ins->dreg, ins->sreg1, 4);
                        break;
                case OP_LCONV_TO_R4:
-                       amd64_sse_cvtsi2ss_reg_reg (code, ins->dreg, ins->sreg1);
-                       amd64_sse_cvtss2sd_reg_reg (code, ins->dreg, ins->dreg);
+                       if (cfg->r4fp) {
+                               amd64_sse_cvtsi2ss_reg_reg (code, ins->dreg, ins->sreg1);
+                       } else {
+                               amd64_sse_cvtsi2ss_reg_reg (code, ins->dreg, ins->sreg1);
+                               amd64_sse_cvtss2sd_reg_reg (code, ins->dreg, ins->dreg);
+                       }
                        break;
                case OP_LCONV_TO_R8:
                        amd64_sse_cvtsi2sd_reg_reg (code, ins->dreg, ins->sreg1);
                        break;
                case OP_FCONV_TO_R4:
-                       amd64_sse_cvtsd2ss_reg_reg (code, ins->dreg, ins->sreg1);
-                       amd64_sse_cvtss2sd_reg_reg (code, ins->dreg, ins->dreg);
+                       if (cfg->r4fp) {
+                               amd64_sse_cvtsd2ss_reg_reg (code, ins->dreg, ins->sreg1);
+                       } else {
+                               amd64_sse_cvtsd2ss_reg_reg (code, ins->dreg, ins->sreg1);
+                               amd64_sse_cvtss2sd_reg_reg (code, ins->dreg, ins->dreg);
+                       }
                        break;
                case OP_FCONV_TO_I1:
                        code = emit_float_to_int (cfg, code, ins->dreg, ins->sreg1, 1, TRUE);
@@ -5149,6 +5190,40 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
                case OP_FCONV_TO_I8:
                        code = emit_float_to_int (cfg, code, ins->dreg, ins->sreg1, 8, TRUE);
                        break;
+
+               case OP_RCONV_TO_I1:
+                       amd64_sse_cvtss2si_reg_reg_size (code, ins->dreg, ins->sreg1, 4);
+                       amd64_widen_reg (code, ins->dreg, ins->dreg, TRUE, FALSE);
+                       break;
+               case OP_RCONV_TO_U1:
+                       amd64_sse_cvtss2si_reg_reg_size (code, ins->dreg, ins->sreg1, 4);
+                       amd64_widen_reg (code, ins->dreg, ins->dreg, FALSE, FALSE);
+                       break;
+               case OP_RCONV_TO_I2:
+                       amd64_sse_cvtss2si_reg_reg_size (code, ins->dreg, ins->sreg1, 4);
+                       amd64_widen_reg (code, ins->dreg, ins->dreg, TRUE, TRUE);
+                       break;
+               case OP_RCONV_TO_U2:
+                       amd64_sse_cvtss2si_reg_reg_size (code, ins->dreg, ins->sreg1, 4);
+                       amd64_widen_reg (code, ins->dreg, ins->dreg, FALSE, TRUE);
+                       break;
+               case OP_RCONV_TO_I4:
+                       amd64_sse_cvtss2si_reg_reg_size (code, ins->dreg, ins->sreg1, 4);
+                       break;
+               case OP_RCONV_TO_U4:
+                       amd64_sse_cvtss2si_reg_reg_size (code, ins->dreg, ins->sreg1, 4);
+                       break;
+               case OP_RCONV_TO_I8:
+                       amd64_sse_cvtss2si_reg_reg_size (code, ins->dreg, ins->sreg1, 8);
+                       break;
+               case OP_RCONV_TO_R8:
+                       amd64_sse_cvtss2sd_reg_reg (code, ins->dreg, ins->sreg1);
+                       break;
+               case OP_RCONV_TO_R4:
+                       if (ins->dreg != ins->sreg1)
+                               amd64_sse_movss_reg_reg (code, ins->dreg, ins->sreg1);
+                       break;
+
                case OP_LCONV_TO_R_UN: { 
                        guint8 *br [2];
 
@@ -5192,6 +5267,29 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
                        if (ins->dreg != ins->sreg1)
                                amd64_sse_movsd_reg_reg (code, ins->dreg, ins->sreg1);
                        break;
+               case OP_RMOVE:
+                       if (ins->dreg != ins->sreg1)
+                               amd64_sse_movss_reg_reg (code, ins->dreg, ins->sreg1);
+                       break;
+               case OP_MOVE_F_TO_I4:
+                       if (cfg->r4fp) {
+                               amd64_movd_reg_xreg_size (code, ins->dreg, ins->sreg1, 8);
+                       } else {
+                               amd64_sse_cvtsd2ss_reg_reg (code, MONO_ARCH_FP_SCRATCH_REG, ins->sreg1);
+                               amd64_movd_reg_xreg_size (code, ins->dreg, MONO_ARCH_FP_SCRATCH_REG, 8);
+                       }
+                       break;
+               case OP_MOVE_I4_TO_F:
+                       amd64_movd_xreg_reg_size (code, ins->dreg, ins->sreg1, 8);
+                       if (!cfg->r4fp)
+                               amd64_sse_cvtss2sd_reg_reg (code, ins->dreg, ins->dreg);
+                       break;
+               case OP_MOVE_F_TO_I8:
+                       amd64_movd_reg_xreg_size (code, ins->dreg, ins->sreg1, 8);
+                       break;
+               case OP_MOVE_I8_TO_F:
+                       amd64_movd_xreg_reg_size (code, ins->dreg, ins->sreg1, 8);
+                       break;
                case OP_FADD:
                        amd64_sse_addsd_reg_reg (code, ins->dreg, ins->sreg2);
                        break;
@@ -5231,6 +5329,30 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
                case OP_SQRT:
                        EMIT_SSE2_FPFUNC (code, fsqrt, ins->dreg, ins->sreg1);
                        break;
+
+               case OP_RADD:
+                       amd64_sse_addss_reg_reg (code, ins->dreg, ins->sreg2);
+                       break;
+               case OP_RSUB:
+                       amd64_sse_subss_reg_reg (code, ins->dreg, ins->sreg2);
+                       break;
+               case OP_RMUL:
+                       amd64_sse_mulss_reg_reg (code, ins->dreg, ins->sreg2);
+                       break;
+               case OP_RDIV:
+                       amd64_sse_divss_reg_reg (code, ins->dreg, ins->sreg2);
+                       break;
+               case OP_RNEG: {
+                       static float r4_0 = -0.0;
+
+                       g_assert (ins->sreg1 == ins->dreg);
+
+                       mono_add_patch_info (cfg, offset, MONO_PATCH_INFO_R4, &r4_0);
+                       amd64_sse_movss_reg_membase (code, MONO_ARCH_FP_SCRATCH_REG, AMD64_RIP, 0);
+                       amd64_sse_xorps_reg_reg (code, ins->dreg, MONO_ARCH_FP_SCRATCH_REG);
+                       break;
+               }
+
                case OP_IMIN:
                        g_assert (cfg->opt & MONO_OPT_CMOV);
                        g_assert (ins->dreg == ins->sreg1);
@@ -5288,12 +5410,21 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
                         */
                        amd64_sse_comisd_reg_reg (code, ins->sreg2, ins->sreg1);
                        break;
+               case OP_RCOMPARE:
+                       /*
+                        * FIXME: Get rid of this.
+                        * The two arguments are swapped because the fbranch instructions
+                        * depend on this for the non-sse case to work.
+                        */
+                       amd64_sse_comiss_reg_reg (code, ins->sreg2, ins->sreg1);
+                       break;
                case OP_FCNEQ:
                case OP_FCEQ: {
                        /* zeroing the register at the start results in 
                         * shorter and faster code (we can also remove the widening op)
                         */
                        guchar *unordered_check;
+
                        amd64_alu_reg_reg (code, X86_XOR, ins->dreg, ins->dreg);
                        amd64_sse_comisd_reg_reg (code, ins->sreg1, ins->sreg2);
                        unordered_check = code;
@@ -5314,7 +5445,7 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
                        break;
                }
                case OP_FCLT:
-               case OP_FCLT_UN:
+               case OP_FCLT_UN: {
                        /* zeroing the register at the start results in 
                         * shorter and faster code (we can also remove the widening op)
                         */
@@ -5334,6 +5465,7 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
                                amd64_set_reg (code, X86_CC_GT, ins->dreg, FALSE);
                        }
                        break;
+               }
                case OP_FCLE: {
                        guchar *unordered_check;
                        amd64_alu_reg_reg (code, X86_XOR, ins->dreg, ins->dreg);
@@ -5350,6 +5482,7 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
                         * shorter and faster code (we can also remove the widening op)
                         */
                        guchar *unordered_check;
+
                        amd64_alu_reg_reg (code, X86_XOR, ins->dreg, ins->dreg);
                        amd64_sse_comisd_reg_reg (code, ins->sreg2, ins->sreg1);
                        if (ins->opcode == OP_FCGT) {
@@ -5372,7 +5505,58 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
                        amd64_patch (unordered_check, code);
                        break;
                }
-               
+
+               case OP_RCEQ:
+               case OP_RCGT:
+               case OP_RCLT:
+               case OP_RCLT_UN:
+               case OP_RCGT_UN: {
+                       int x86_cond;
+                       gboolean unordered = FALSE;
+
+                       amd64_alu_reg_reg (code, X86_XOR, ins->dreg, ins->dreg);
+                       amd64_sse_comiss_reg_reg (code, ins->sreg2, ins->sreg1);
+
+                       switch (ins->opcode) {
+                       case OP_RCEQ:
+                               x86_cond = X86_CC_EQ;
+                               break;
+                       case OP_RCGT:
+                               x86_cond = X86_CC_LT;
+                               break;
+                       case OP_RCLT:
+                               x86_cond = X86_CC_GT;
+                               break;
+                       case OP_RCLT_UN:
+                               x86_cond = X86_CC_GT;
+                               unordered = TRUE;
+                               break;
+                       case OP_RCGT_UN:
+                               x86_cond = X86_CC_LT;
+                               unordered = TRUE;
+                               break;
+                       default:
+                               g_assert_not_reached ();
+                               break;
+                       }
+
+                       if (unordered) {
+                               guchar *unordered_check;
+                               guchar *jump_to_end;
+
+                               unordered_check = code;
+                               x86_branch8 (code, X86_CC_P, 0, FALSE);
+                               amd64_set_reg (code, x86_cond, ins->dreg, FALSE);
+                               jump_to_end = code;
+                               x86_jump8 (code, 0);
+                               amd64_patch (unordered_check, code);
+                               amd64_inc_reg (code, ins->dreg);
+                               amd64_patch (jump_to_end, code);
+                       } else {
+                               amd64_set_reg (code, x86_cond, ins->dreg, FALSE);
+                       }
+                       break;
+               }
                case OP_FCLT_MEMBASE:
                case OP_FCGT_MEMBASE:
                case OP_FCLT_UN_MEMBASE:
@@ -5550,62 +5734,12 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
                }
                case OP_ATOMIC_EXCHANGE_I4:
                case OP_ATOMIC_EXCHANGE_I8: {
-                       guchar *br[2];
-                       int sreg2 = ins->sreg2;
-                       int breg = ins->inst_basereg;
-                       guint32 size;
-                       gboolean need_push = FALSE, rdx_pushed = FALSE;
-
-                       if (ins->opcode == OP_ATOMIC_EXCHANGE_I8)
-                               size = 8;
-                       else
-                               size = 4;
-
-                       /* 
-                        * See http://msdn.microsoft.com/en-us/magazine/cc302329.aspx for
-                        * an explanation of how this works.
-                        */
-
-                       /* cmpxchg uses eax as comperand, need to make sure we can use it
-                        * hack to overcome limits in x86 reg allocator 
-                        * (req: dreg == eax and sreg2 != eax and breg != eax) 
-                        */
-                       g_assert (ins->dreg == AMD64_RAX);
-
-                       if (breg == AMD64_RAX && ins->sreg2 == AMD64_RAX)
-                               /* Highly unlikely, but possible */
-                               need_push = TRUE;
-
-                       /* The pushes invalidate rsp */
-                       if ((breg == AMD64_RAX) || need_push) {
-                               amd64_mov_reg_reg (code, AMD64_R11, breg, 8);
-                               breg = AMD64_R11;
-                       }
-
-                       /* We need the EAX reg for the comparand */
-                       if (ins->sreg2 == AMD64_RAX) {
-                               if (breg != AMD64_R11) {
-                                       amd64_mov_reg_reg (code, AMD64_R11, AMD64_RAX, 8);
-                                       sreg2 = AMD64_R11;
-                               } else {
-                                       g_assert (need_push);
-                                       amd64_push_reg (code, AMD64_RDX);
-                                       amd64_mov_reg_reg (code, AMD64_RDX, AMD64_RAX, size);
-                                       sreg2 = AMD64_RDX;
-                                       rdx_pushed = TRUE;
-                               }
-                       }
-
-                       amd64_mov_reg_membase (code, AMD64_RAX, breg, ins->inst_offset, size);
-
-                       br [0] = code; amd64_prefix (code, X86_LOCK_PREFIX);
-                       amd64_cmpxchg_membase_reg_size (code, breg, ins->inst_offset, sreg2, size);
-                       br [1] = code; amd64_branch8 (code, X86_CC_NE, -1, FALSE);
-                       amd64_patch (br [1], br [0]);
-
-                       if (rdx_pushed)
-                               amd64_pop_reg (code, AMD64_RDX);
+                       guint32 size = ins->opcode == OP_ATOMIC_EXCHANGE_I4 ? 4 : 8;
 
+                       /* LOCK prefix is implied. */
+                       amd64_mov_reg_reg (code, GP_SCRATCH_REG, ins->sreg2, size);
+                       amd64_xchg_membase_reg_size (code, ins->sreg1, ins->inst_offset, GP_SCRATCH_REG, size);
+                       amd64_mov_reg_reg (code, ins->dreg, GP_SCRATCH_REG, size);
                        break;
                }
                case OP_ATOMIC_CAS_I4:
@@ -6296,21 +6430,33 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
                case OP_INSERTX_R4_SLOW:
                        switch (ins->inst_c0) {
                        case 0:
-                               amd64_sse_cvtsd2ss_reg_reg (code, ins->dreg, ins->sreg2);
+                               if (cfg->r4fp)
+                                       amd64_sse_movss_reg_reg (code, ins->dreg, ins->sreg2);
+                               else
+                                       amd64_sse_cvtsd2ss_reg_reg (code, ins->dreg, ins->sreg2);
                                break;
                        case 1:
                                amd64_sse_pshufd_reg_reg_imm (code, ins->dreg, ins->dreg, mono_simd_shuffle_mask(1, 0, 2, 3));
-                               amd64_sse_cvtsd2ss_reg_reg (code, ins->dreg, ins->sreg2);
+                               if (cfg->r4fp)
+                                       amd64_sse_movss_reg_reg (code, ins->dreg, ins->sreg2);
+                               else
+                                       amd64_sse_cvtsd2ss_reg_reg (code, ins->dreg, ins->sreg2);
                                amd64_sse_pshufd_reg_reg_imm (code, ins->dreg, ins->dreg, mono_simd_shuffle_mask(1, 0, 2, 3));
                                break;
                        case 2:
                                amd64_sse_pshufd_reg_reg_imm (code, ins->dreg, ins->dreg, mono_simd_shuffle_mask(2, 1, 0, 3));
-                               amd64_sse_cvtsd2ss_reg_reg (code, ins->dreg, ins->sreg2);
+                               if (cfg->r4fp)
+                                       amd64_sse_movss_reg_reg (code, ins->dreg, ins->sreg2);
+                               else
+                                       amd64_sse_cvtsd2ss_reg_reg (code, ins->dreg, ins->sreg2);
                                amd64_sse_pshufd_reg_reg_imm (code, ins->dreg, ins->dreg, mono_simd_shuffle_mask(2, 1, 0, 3));
                                break;
                        case 3:
                                amd64_sse_pshufd_reg_reg_imm (code, ins->dreg, ins->dreg, mono_simd_shuffle_mask(3, 1, 2, 0));
-                               amd64_sse_cvtsd2ss_reg_reg (code, ins->dreg, ins->sreg2);
+                               if (cfg->r4fp)
+                                       amd64_sse_movss_reg_reg (code, ins->dreg, ins->sreg2);
+                               else
+                                       amd64_sse_cvtsd2ss_reg_reg (code, ins->dreg, ins->sreg2);
                                amd64_sse_pshufd_reg_reg_imm (code, ins->dreg, ins->dreg, mono_simd_shuffle_mask(3, 1, 2, 0));
                                break;
                        }
@@ -6349,9 +6495,8 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
                case OP_XZERO:
                        amd64_sse_pxor_reg_reg (code, ins->dreg, ins->dreg);
                        break;
-               case OP_ICONV_TO_R8_RAW:
+               case OP_ICONV_TO_R4_RAW:
                        amd64_movd_xreg_reg_size (code, ins->dreg, ins->sreg1, 4);
-                       amd64_sse_cvtss2sd_reg_reg (code, ins->dreg, ins->dreg);
                        break;
 
                case OP_FCONV_TO_R8_X:
@@ -6390,8 +6535,12 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
                        amd64_sse_pshufd_reg_reg_imm (code, ins->dreg, ins->dreg, 0x44);
                        break;
                case OP_EXPAND_R4:
-                       amd64_sse_movsd_reg_reg (code, ins->dreg, ins->sreg1);
-                       amd64_sse_cvtsd2ss_reg_reg (code, ins->dreg, ins->dreg);
+                       if (cfg->r4fp) {
+                               amd64_sse_movsd_reg_reg (code, ins->dreg, ins->sreg1);
+                       } else {
+                               amd64_sse_movsd_reg_reg (code, ins->dreg, ins->sreg1);
+                               amd64_sse_cvtsd2ss_reg_reg (code, ins->dreg, ins->dreg);
+                       }
                        amd64_sse_pshufd_reg_reg_imm (code, ins->dreg, ins->dreg, 0);
                        break;
                case OP_EXPAND_R8:
index 9a8a630b1d4068553b3d139552a475c5e28e635c..fe1cc21b73826459c9686f4a6e673e0c6cf9af41 100644 (file)
@@ -408,6 +408,25 @@ emit_move_return_value (MonoCompile *cfg, MonoInst *ins, guint8 *code)
                        }
                }
                break;
+       case OP_RCALL:
+       case OP_RCALL_REG:
+       case OP_RCALL_MEMBASE: {
+               MonoType *sig_ret;
+
+               g_assert (IS_VFP);
+
+               sig_ret = mini_type_get_underlying_type (NULL, ((MonoCallInst*)ins)->signature->ret);
+               g_assert (sig_ret->type == MONO_TYPE_R4);
+               if (IS_HARD_FLOAT) {
+                       ARM_CPYS (code, ins->dreg, ARM_VFP_F0);
+               } else {
+                       ARM_FMSR (code, ins->dreg, ARMREG_R0);
+                       ARM_CPYS (code, ins->dreg, ins->dreg);
+               }
+               break;
+       }
+       default:
+               break;
        }
 
        return code;
@@ -512,6 +531,8 @@ emit_float_args (MonoCompile *cfg, MonoCallInst *inst, guint8 *code, int *max_le
 {
        GSList *list;
 
+       g_assert (!cfg->r4fp);
+
        for (list = inst->float_args; list; list = list->next) {
                FloatArgData *fad = list->data;
                MonoInst *var = get_vreg_to_inst (cfg, fad->vreg);
@@ -933,12 +954,25 @@ mono_arch_init (void)
        arm_fpu = MONO_ARM_FPU_VFP;
 
 #if defined(ARM_FPU_NONE) && !defined(__APPLE__)
-       /* If we're compiling with a soft float fallback and it
-          turns out that no VFP unit is available, we need to
-          switch to soft float. We don't do this for iOS, since
-          iOS devices always have a VFP unit. */
+       /*
+        * If we're compiling with a soft float fallback and it
+        * turns out that no VFP unit is available, we need to
+        * switch to soft float. We don't do this for iOS, since
+        * iOS devices always have a VFP unit.
+        */
        if (!mono_hwcap_arm_has_vfp)
                arm_fpu = MONO_ARM_FPU_NONE;
+
+       /*
+        * This environment variable can be useful in testing
+        * environments to make sure the soft float fallback
+        * works. Most ARM devices have VFP units these days, so
+        * normally soft float code would not be exercised much.
+        */
+       const char *soft = g_getenv ("MONO_ARM_FORCE_SOFT_FLOAT");
+
+       if (!strncmp (soft, "1", 1))
+               arm_fpu = MONO_ARM_FPU_NONE;
 #endif
 #endif
 
@@ -2223,18 +2257,8 @@ mono_arch_get_llvm_call_info (MonoCompile *cfg, MonoMethodSignature *sig)
                        linfo->args [i].storage = LLVMArgInIReg;
                        break;
                case RegTypeStructByVal:
-                       // FIXME: Passing entirely on the stack or split reg/stack
-                       if (ainfo->vtsize == 0 && ainfo->size <= 2) {
-                               linfo->args [i].storage = LLVMArgVtypeInReg;
-                               linfo->args [i].pair_storage [0] = LLVMArgInIReg;
-                               if (ainfo->size == 2)
-                                       linfo->args [i].pair_storage [1] = LLVMArgInIReg;
-                               else
-                                       linfo->args [i].pair_storage [1] = LLVMArgNone;
-                       } else {
-                               cfg->exception_message = g_strdup_printf ("vtype-by-val on stack");
-                               cfg->disable_llvm = TRUE;
-                       }
+                       linfo->args [i].storage = LLVMArgAsIArgs;
+                       linfo->args [i].nslots = ainfo->struct_size / sizeof (gpointer);
                        break;
                default:
                        cfg->exception_message = g_strdup_printf ("ainfo->storage (%d)", ainfo->storage);
@@ -3514,7 +3538,8 @@ loop_start:
                        ins->opcode = map_to_reg_reg_op (ins->opcode);
                        last_ins = temp;
                        goto loop_start; /* make it handle the possibly big ins->inst_offset */
-               case OP_FCOMPARE: {
+               case OP_FCOMPARE:
+               case OP_RCOMPARE: {
                        gboolean swap = FALSE;
                        int reg;
 
@@ -3605,6 +3630,38 @@ emit_float_to_int (MonoCompile *cfg, guchar *code, int dreg, int sreg, int size,
        return code;
 }
 
+static guchar*
+emit_r4_to_int (MonoCompile *cfg, guchar *code, int dreg, int sreg, int size, gboolean is_signed)
+{
+       /* sreg is a float, dreg is an integer reg  */
+       g_assert (IS_VFP);
+       code = mono_arm_emit_vfp_scratch_save (cfg, code, vfp_scratch1);
+       if (is_signed)
+               ARM_TOSIZS (code, vfp_scratch1, sreg);
+       else
+               ARM_TOUIZS (code, vfp_scratch1, sreg);
+       ARM_FMRS (code, dreg, vfp_scratch1);
+       code = mono_arm_emit_vfp_scratch_restore (cfg, code, vfp_scratch1);
+
+       if (!is_signed) {
+               if (size == 1)
+                       ARM_AND_REG_IMM8 (code, dreg, dreg, 0xff);
+               else if (size == 2) {
+                       ARM_SHL_IMM (code, dreg, dreg, 16);
+                       ARM_SHR_IMM (code, dreg, dreg, 16);
+               }
+       } else {
+               if (size == 1) {
+                       ARM_SHL_IMM (code, dreg, dreg, 24);
+                       ARM_SAR_IMM (code, dreg, dreg, 24);
+               } else if (size == 2) {
+                       ARM_SHL_IMM (code, dreg, dreg, 16);
+                       ARM_SAR_IMM (code, dreg, dreg, 16);
+               }
+       }
+       return code;
+}
+
 #endif /* #ifndef DISABLE_JIT */
 
 typedef struct {
@@ -4840,13 +4897,27 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
                        break;
                }
                case OP_FMOVE:
-                       if (IS_VFP)
+                       if (IS_VFP && ins->dreg != ins->sreg1)
                                ARM_CPYD (code, ins->dreg, ins->sreg1);
                        break;
+               case OP_MOVE_F_TO_I4:
+                       code = mono_arm_emit_vfp_scratch_save (cfg, code, vfp_scratch1);
+                       ARM_CVTD (code, vfp_scratch1, ins->sreg1);
+                       ARM_FMRS (code, ins->dreg, vfp_scratch1);
+                       code = mono_arm_emit_vfp_scratch_restore (cfg, code, vfp_scratch1);
+                       break;
+               case OP_MOVE_I4_TO_F:
+                       ARM_FMSR (code, ins->dreg, ins->sreg1);
+                       ARM_CVTS (code, ins->dreg, ins->dreg);
+                       break;
                case OP_FCONV_TO_R4:
                        if (IS_VFP) {
-                               ARM_CVTD (code, ins->dreg, ins->sreg1);
-                               ARM_CVTS (code, ins->dreg, ins->dreg);
+                               if (cfg->r4fp) {
+                                       ARM_CVTD (code, ins->dreg, ins->sreg1);
+                               } else {
+                                       ARM_CVTD (code, ins->dreg, ins->sreg1);
+                                       ARM_CVTS (code, ins->dreg, ins->dreg);
+                               }
                        }
                        break;
                case OP_JMP:
@@ -4947,6 +5018,7 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
                        break;
                }
                case OP_FCALL:
+               case OP_RCALL:
                case OP_LCALL:
                case OP_VCALL:
                case OP_VCALL2:
@@ -4967,6 +5039,7 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
                        code = emit_move_return_value (cfg, ins, code);
                        break;
                case OP_FCALL_REG:
+               case OP_RCALL_REG:
                case OP_LCALL_REG:
                case OP_VCALL_REG:
                case OP_VCALL2_REG:
@@ -4981,6 +5054,7 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
                        code = emit_move_return_value (cfg, ins, code);
                        break;
                case OP_FCALL_MEMBASE:
+               case OP_RCALL_MEMBASE:
                case OP_LCALL_MEMBASE:
                case OP_VCALL_MEMBASE:
                case OP_VCALL2_MEMBASE:
@@ -5357,11 +5431,13 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
                                ARM_B (code, 0);
                                *(guint32*)code = ((guint32*)(ins->inst_p0))[0];
                                code += 4;
-                               ARM_CVTS (code, ins->dreg, ins->dreg);
+                               if (!cfg->r4fp)
+                                       ARM_CVTS (code, ins->dreg, ins->dreg);
                        } else {
                                code = mono_arm_emit_load_imm (code, ARMREG_LR, (guint32)ins->inst_p0);
                                ARM_FLDS (code, ins->dreg, ARMREG_LR, 0);
-                               ARM_CVTS (code, ins->dreg, ins->dreg);
+                               if (!cfg->r4fp)
+                                       ARM_CVTS (code, ins->dreg, ins->dreg);
                        }
                        break;
                case OP_STORER8_MEMBASE_REG:
@@ -5386,28 +5462,41 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
                        break;
                case OP_STORER4_MEMBASE_REG:
                        g_assert (arm_is_fpimm8 (ins->inst_offset));
-                       code = mono_arm_emit_vfp_scratch_save (cfg, code, vfp_scratch1);
-                       ARM_CVTD (code, vfp_scratch1, ins->sreg1);
-                       ARM_FSTS (code, vfp_scratch1, ins->inst_destbasereg, ins->inst_offset);
-                       code = mono_arm_emit_vfp_scratch_restore (cfg, code, vfp_scratch1);
+                       if (cfg->r4fp) {
+                               ARM_FSTS (code, ins->sreg1, ins->inst_destbasereg, ins->inst_offset);
+                       } else {
+                               code = mono_arm_emit_vfp_scratch_save (cfg, code, vfp_scratch1);
+                               ARM_CVTD (code, vfp_scratch1, ins->sreg1);
+                               ARM_FSTS (code, vfp_scratch1, ins->inst_destbasereg, ins->inst_offset);
+                               code = mono_arm_emit_vfp_scratch_restore (cfg, code, vfp_scratch1);
+                       }
                        break;
                case OP_LOADR4_MEMBASE:
-                       g_assert (arm_is_fpimm8 (ins->inst_offset));
-                       code = mono_arm_emit_vfp_scratch_save (cfg, code, vfp_scratch1);
-                       ARM_FLDS (code, vfp_scratch1, ins->inst_basereg, ins->inst_offset);
-                       ARM_CVTS (code, ins->dreg, vfp_scratch1);
-                       code = mono_arm_emit_vfp_scratch_restore (cfg, code, vfp_scratch1);
+                       if (cfg->r4fp) {
+                               ARM_FLDS (code, ins->dreg, ins->inst_basereg, ins->inst_offset);
+                       } else {
+                               g_assert (arm_is_fpimm8 (ins->inst_offset));
+                               code = mono_arm_emit_vfp_scratch_save (cfg, code, vfp_scratch1);
+                               ARM_FLDS (code, vfp_scratch1, ins->inst_basereg, ins->inst_offset);
+                               ARM_CVTS (code, ins->dreg, vfp_scratch1);
+                               code = mono_arm_emit_vfp_scratch_restore (cfg, code, vfp_scratch1);
+                       }
                        break;
                case OP_ICONV_TO_R_UN: {
                        g_assert_not_reached ();
                        break;
                }
                case OP_ICONV_TO_R4:
-                       code = mono_arm_emit_vfp_scratch_save (cfg, code, vfp_scratch1);
-                       ARM_FMSR (code, vfp_scratch1, ins->sreg1);
-                       ARM_FSITOS (code, vfp_scratch1, vfp_scratch1);
-                       ARM_CVTS (code, ins->dreg, vfp_scratch1);
-                       code = mono_arm_emit_vfp_scratch_restore (cfg, code, vfp_scratch1);
+                       if (cfg->r4fp) {
+                               ARM_FMSR (code, ins->dreg, ins->sreg1);
+                               ARM_FSITOS (code, ins->dreg, ins->dreg);
+                       } else {
+                               code = mono_arm_emit_vfp_scratch_save (cfg, code, vfp_scratch1);
+                               ARM_FMSR (code, vfp_scratch1, ins->sreg1);
+                               ARM_FSITOS (code, vfp_scratch1, vfp_scratch1);
+                               ARM_CVTS (code, ins->dreg, vfp_scratch1);
+                               code = mono_arm_emit_vfp_scratch_restore (cfg, code, vfp_scratch1);
+                       }
                        break;
                case OP_ICONV_TO_R8:
                        code = mono_arm_emit_vfp_scratch_save (cfg, code, vfp_scratch1);
@@ -5419,17 +5508,20 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
                case OP_SETFRET: {
                        MonoType *sig_ret = mini_type_get_underlying_type (NULL, mono_method_signature (cfg->method)->ret);
                        if (sig_ret->type == MONO_TYPE_R4) {
-                               ARM_CVTD (code, ARM_VFP_F0, ins->sreg1);
+                               if (cfg->r4fp) {
+                                       g_assert (!IS_HARD_FLOAT);
+                                       ARM_FMRS (code, ARMREG_R0, ins->sreg1);
+                               } else {
+                                       ARM_CVTD (code, ARM_VFP_F0, ins->sreg1);
 
-                               if (!IS_HARD_FLOAT) {
-                                       ARM_FMRS (code, ARMREG_R0, ARM_VFP_F0);
+                                       if (!IS_HARD_FLOAT)
+                                               ARM_FMRS (code, ARMREG_R0, ARM_VFP_F0);
                                }
                        } else {
-                               if (IS_HARD_FLOAT) {
+                               if (IS_HARD_FLOAT)
                                        ARM_CPYD (code, ARM_VFP_D0, ins->sreg1);
-                               } else {
+                               else
                                        ARM_FMRRD (code, ARMREG_R0, ARMREG_R1, ins->sreg1);
-                               }
                        }
                        break;
                }
@@ -5519,6 +5611,11 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
                                ARM_FMSTAT (code);
                        }
                        break;
+               case OP_RCOMPARE:
+                       g_assert (IS_VFP);
+                       ARM_CMPS (code, ins->sreg1, ins->sreg2);
+                       ARM_FMSTAT (code);
+                       break;
                case OP_FCEQ:
                        if (IS_VFP) {
                                ARM_CMPD (code, ins->sreg1, ins->sreg2);
@@ -5661,6 +5758,115 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
                        break;
                }
 
+               case OP_RCONV_TO_I1:
+                       code = emit_r4_to_int (cfg, code, ins->dreg, ins->sreg1, 1, TRUE);
+                       break;
+               case OP_RCONV_TO_U1:
+                       code = emit_r4_to_int (cfg, code, ins->dreg, ins->sreg1, 1, FALSE);
+                       break;
+               case OP_RCONV_TO_I2:
+                       code = emit_r4_to_int (cfg, code, ins->dreg, ins->sreg1, 2, TRUE);
+                       break;
+               case OP_RCONV_TO_U2:
+                       code = emit_r4_to_int (cfg, code, ins->dreg, ins->sreg1, 2, FALSE);
+                       break;
+               case OP_RCONV_TO_I4:
+                       code = emit_r4_to_int (cfg, code, ins->dreg, ins->sreg1, 4, TRUE);
+                       break;
+               case OP_RCONV_TO_U4:
+                       code = emit_r4_to_int (cfg, code, ins->dreg, ins->sreg1, 4, FALSE);
+                       break;
+               case OP_RCONV_TO_R4:
+                       g_assert (IS_VFP);
+                       if (ins->dreg != ins->sreg1)
+                               ARM_CPYS (code, ins->dreg, ins->sreg1);
+                       break;
+               case OP_RCONV_TO_R8:
+                       g_assert (IS_VFP);
+                       ARM_CVTS (code, ins->dreg, ins->sreg1);
+                       break;
+               case OP_RADD:
+                       ARM_VFP_ADDS (code, ins->dreg, ins->sreg1, ins->sreg2);
+                       break;
+               case OP_RSUB:
+                       ARM_VFP_SUBS (code, ins->dreg, ins->sreg1, ins->sreg2);
+                       break;          
+               case OP_RMUL:
+                       ARM_VFP_MULS (code, ins->dreg, ins->sreg1, ins->sreg2);
+                       break;          
+               case OP_RDIV:
+                       ARM_VFP_DIVS (code, ins->dreg, ins->sreg1, ins->sreg2);
+                       break;          
+               case OP_RNEG:
+                       ARM_NEGS (code, ins->dreg, ins->sreg1);
+                       break;
+               case OP_RCEQ:
+                       if (IS_VFP) {
+                               ARM_CMPS (code, ins->sreg1, ins->sreg2);
+                               ARM_FMSTAT (code);
+                       }
+                       ARM_MOV_REG_IMM8_COND (code, ins->dreg, 0, ARMCOND_NE);
+                       ARM_MOV_REG_IMM8_COND (code, ins->dreg, 1, ARMCOND_EQ);
+                       break;
+               case OP_RCLT:
+                       if (IS_VFP) {
+                               ARM_CMPS (code, ins->sreg1, ins->sreg2);
+                               ARM_FMSTAT (code);
+                       }
+                       ARM_MOV_REG_IMM8 (code, ins->dreg, 0);
+                       ARM_MOV_REG_IMM8_COND (code, ins->dreg, 1, ARMCOND_MI);
+                       break;
+               case OP_RCLT_UN:
+                       if (IS_VFP) {
+                               ARM_CMPS (code, ins->sreg1, ins->sreg2);
+                               ARM_FMSTAT (code);
+                       }
+                       ARM_MOV_REG_IMM8 (code, ins->dreg, 0);
+                       ARM_MOV_REG_IMM8_COND (code, ins->dreg, 1, ARMCOND_MI);
+                       ARM_MOV_REG_IMM8_COND (code, ins->dreg, 1, ARMCOND_VS);
+                       break;
+               case OP_RCGT:
+                       if (IS_VFP) {
+                               ARM_CMPS (code, ins->sreg2, ins->sreg1);
+                               ARM_FMSTAT (code);
+                       }
+                       ARM_MOV_REG_IMM8 (code, ins->dreg, 0);
+                       ARM_MOV_REG_IMM8_COND (code, ins->dreg, 1, ARMCOND_MI);
+                       break;
+               case OP_RCGT_UN:
+                       if (IS_VFP) {
+                               ARM_CMPS (code, ins->sreg2, ins->sreg1);
+                               ARM_FMSTAT (code);
+                       }
+                       ARM_MOV_REG_IMM8 (code, ins->dreg, 0);
+                       ARM_MOV_REG_IMM8_COND (code, ins->dreg, 1, ARMCOND_MI);
+                       ARM_MOV_REG_IMM8_COND (code, ins->dreg, 1, ARMCOND_VS);
+                       break;
+               case OP_RCNEQ:
+                       if (IS_VFP) {
+                               ARM_CMPS (code, ins->sreg1, ins->sreg2);
+                               ARM_FMSTAT (code);
+                       }
+                       ARM_MOV_REG_IMM8_COND (code, ins->dreg, 1, ARMCOND_NE);
+                       ARM_MOV_REG_IMM8_COND (code, ins->dreg, 0, ARMCOND_EQ);
+                       break;
+               case OP_RCGE:
+                       if (IS_VFP) {
+                               ARM_CMPS (code, ins->sreg1, ins->sreg2);
+                               ARM_FMSTAT (code);
+                       }
+                       ARM_MOV_REG_IMM8 (code, ins->dreg, 1);
+                       ARM_MOV_REG_IMM8_COND (code, ins->dreg, 0, ARMCOND_MI);
+                       break;
+               case OP_RCLE:
+                       if (IS_VFP) {
+                               ARM_CMPS (code, ins->sreg2, ins->sreg1);
+                               ARM_FMSTAT (code);
+                       }
+                       ARM_MOV_REG_IMM8 (code, ins->dreg, 1);
+                       ARM_MOV_REG_IMM8_COND (code, ins->dreg, 0, ARMCOND_MI);
+                       break;
+
                case OP_GC_LIVENESS_DEF:
                case OP_GC_LIVENESS_USE:
                case OP_GC_PARAM_SLOT_LIVENESS_DEF:
index 26619944542fbdbe6be9242f009b8defe13b7466..04b2ec30be4410daf07787972101d26be1eb25c5 100644 (file)
@@ -2355,6 +2355,8 @@ mono_opcode_to_cond (int opcode)
        case OP_LCEQ:
        case OP_FBEQ:
        case OP_FCEQ:
+       case OP_RBEQ:
+       case OP_RCEQ:
        case OP_COND_EXC_EQ:
        case OP_COND_EXC_IEQ:
        case OP_CMOV_IEQ:
@@ -2393,6 +2395,8 @@ mono_opcode_to_cond (int opcode)
        case OP_LCLT:
        case OP_FBLT:
        case OP_FCLT:
+       case OP_RBLT:
+       case OP_RCLT:
        case OP_COND_EXC_LT:
        case OP_COND_EXC_ILT:
        case OP_CMOV_ILT:
@@ -2405,6 +2409,8 @@ mono_opcode_to_cond (int opcode)
        case OP_LCGT:
        case OP_FBGT:
        case OP_FCGT:
+       case OP_RBGT:
+       case OP_RCGT:
        case OP_COND_EXC_GT:
        case OP_COND_EXC_IGT:
        case OP_CMOV_IGT:
@@ -2435,6 +2441,8 @@ mono_opcode_to_cond (int opcode)
        case OP_LCLT_UN:
        case OP_FBLT_UN:
        case OP_FCLT_UN:
+       case OP_RBLT_UN:
+       case OP_RCLT_UN:
        case OP_COND_EXC_LT_UN:
        case OP_COND_EXC_ILT_UN:
        case OP_CMOV_ILT_UN:
@@ -2447,6 +2455,8 @@ mono_opcode_to_cond (int opcode)
        case OP_LCGT_UN:
        case OP_FCGT_UN:
        case OP_FBGT_UN:
+       case OP_RCGT_UN:
+       case OP_RBGT_UN:
        case OP_COND_EXC_GT_UN:
        case OP_COND_EXC_IGT_UN:
        case OP_CMOV_IGT_UN:
@@ -2749,4 +2759,53 @@ mini_exception_id_by_name (const char *name)
        return -1;
 }
 
+gboolean
+mini_type_is_hfa (MonoType *t, int *out_nfields, int *out_esize)
+{
+       MonoClass *klass;
+       gpointer iter;
+       MonoClassField *field;
+       MonoType *ftype, *prev_ftype = NULL;
+       int nfields = 0;
+
+       klass = mono_class_from_mono_type (t);
+       iter = NULL;
+       while ((field = mono_class_get_fields (klass, &iter))) {
+               if (field->type->attrs & FIELD_ATTRIBUTE_STATIC)
+                       continue;
+               ftype = mono_field_get_type (field);
+               ftype = mini_native_type_replace_type (ftype);
+
+               if (MONO_TYPE_ISSTRUCT (ftype)) {
+                       int nested_nfields, nested_esize;
+
+                       if (!mini_type_is_hfa (ftype, &nested_nfields, &nested_esize))
+                               return FALSE;
+                       if (nested_esize == 4)
+                               ftype = &mono_defaults.single_class->byval_arg;
+                       else
+                               ftype = &mono_defaults.double_class->byval_arg;
+                       if (prev_ftype && prev_ftype->type != ftype->type)
+                               return FALSE;
+                       prev_ftype = ftype;
+                       nfields += nested_nfields;
+                       // FIXME: Nested float structs are aligned to 8 bytes
+                       if (ftype->type == MONO_TYPE_R4)
+                               return FALSE;
+               } else {
+                       if (!(!ftype->byref && (ftype->type == MONO_TYPE_R4 || ftype->type == MONO_TYPE_R8)))
+                               return FALSE;
+                       if (prev_ftype && prev_ftype->type != ftype->type)
+                               return FALSE;
+                       prev_ftype = ftype;
+                       nfields ++;
+               }
+       }
+       if (nfields == 0 || nfields > 4)
+               return FALSE;
+       *out_nfields = nfields;
+       *out_esize = prev_ftype->type == MONO_TYPE_R4 ? 4 : 8;
+       return TRUE;
+}
+
 #endif /* DISABLE_JIT */
index 465a1e0d1fb014f3d418b20757f3e28d61ac168c..0e0bfc6fb5ee34e3d60382f9b5a59da715a23171 100644 (file)
@@ -327,6 +327,43 @@ type_to_simd_type (int type)
        }
 }
 
+static LLVMTypeRef
+create_llvm_type_for_type (MonoClass *klass)
+{
+       int i, size, nfields, esize;
+       LLVMTypeRef *eltypes;
+       char *name;
+       MonoType *t;
+       LLVMTypeRef ltype;
+
+       t = &klass->byval_arg;
+
+       if (mini_type_is_hfa (t, &nfields, &esize)) {
+               /*
+                * This is needed on arm64 where HFAs are returned in
+                * registers.
+                */
+               size = nfields;
+               eltypes = g_new (LLVMTypeRef, size);
+               for (i = 0; i < size; ++i)
+                       eltypes [i] = esize == 4 ? LLVMFloatType () : LLVMDoubleType ();
+       } else {
+               size = get_vtype_size (t);
+
+               eltypes = g_new (LLVMTypeRef, size);
+               for (i = 0; i < size; ++i)
+                       eltypes [i] = LLVMInt8Type ();
+       }
+
+       name = mono_type_full_name (&klass->byval_arg);
+       ltype = LLVMStructCreateNamed (LLVMGetGlobalContext (), name);
+       LLVMStructSetBody (ltype, eltypes, size, FALSE);
+       g_free (eltypes);
+       g_free (name);
+
+       return ltype;
+}
+
 /*
  * type_to_llvm_type:
  *
@@ -398,22 +435,8 @@ type_to_llvm_type (EmitContext *ctx, MonoType *t)
 
                ltype = g_hash_table_lookup (ctx->lmodule->llvm_types, klass);
                if (!ltype) {
-                       int i, size;
-                       LLVMTypeRef *eltypes;
-                       char *name;
-
-                       size = get_vtype_size (t);
-
-                       eltypes = g_new (LLVMTypeRef, size);
-                       for (i = 0; i < size; ++i)
-                               eltypes [i] = LLVMInt8Type ();
-
-                       name = mono_type_full_name (&klass->byval_arg);
-                       ltype = LLVMStructCreateNamed (LLVMGetGlobalContext (), name);
-                       LLVMStructSetBody (ltype, eltypes, size, FALSE);
+                       ltype = create_llvm_type_for_type (klass);
                        g_hash_table_insert (ctx->lmodule->llvm_types, klass, ltype);
-                       g_free (eltypes);
-                       g_free (name);
                }
                return ltype;
        }
@@ -482,7 +505,7 @@ type_to_llvm_arg_type (EmitContext *ctx, MonoType *t)
  * on the IL stack.
  */
 static G_GNUC_UNUSED LLVMTypeRef
-llvm_type_to_stack_type (LLVMTypeRef type)
+llvm_type_to_stack_type (MonoCompile *cfg, LLVMTypeRef type)
 {
        if (type == NULL)
                return NULL;
@@ -490,7 +513,7 @@ llvm_type_to_stack_type (LLVMTypeRef type)
                return LLVMInt32Type ();
        else if (type == LLVMInt16Type ())
                return LLVMInt32Type ();
-       else if (type == LLVMFloatType ())
+       else if (!cfg->r4fp && type == LLVMFloatType ())
                return LLVMDoubleType ();
        else
                return type;
@@ -558,9 +581,13 @@ op_to_llvm_type (int opcode)
                return LLVMInt64Type ();
        case OP_FCONV_TO_I1:
        case OP_FCONV_TO_U1:
+       case OP_RCONV_TO_I1:
+       case OP_RCONV_TO_U1:
                return LLVMInt8Type ();
        case OP_FCONV_TO_I2:
        case OP_FCONV_TO_U2:
+       case OP_RCONV_TO_I2:
+       case OP_RCONV_TO_U2:
                return LLVMInt16Type ();
        case OP_FCONV_TO_I:
        case OP_FCONV_TO_U:
@@ -1139,6 +1166,8 @@ sig_to_llvm_sig_full (EmitContext *ctx, MonoMethodSignature *sig, LLVMCallInfo *
                } else {
                        g_assert_not_reached ();
                }
+       } else if (cinfo && cinfo->ret.storage == LLVMArgVtypeByVal) {
+               /* Vtype returned normally by val */
        } else if (cinfo && mini_type_is_vtype (ctx->cfg, rtype)) {
                g_assert (cinfo->ret.storage == LLVMArgVtypeRetAddr);
                vretaddr = TRUE;
@@ -1146,7 +1175,7 @@ sig_to_llvm_sig_full (EmitContext *ctx, MonoMethodSignature *sig, LLVMCallInfo *
        }
 
        pindexes = g_new0 (int, sig->param_count);
-       param_types = g_new0 (LLVMTypeRef, (sig->param_count * 2) + 3);
+       param_types = g_new0 (LLVMTypeRef, (sig->param_count * 8) + 3);
        pindex = 0;
        if (cinfo && cinfo->rgctx_arg) {
                if (sinfo)
@@ -1192,12 +1221,14 @@ sig_to_llvm_sig_full (EmitContext *ctx, MonoMethodSignature *sig, LLVMCallInfo *
        if (vretaddr && vret_arg_pindex == pindex)
                param_types [pindex ++] = IntPtrType ();
        for (i = 0; i < sig->param_count; ++i) {
+               LLVMArgInfo *ainfo = cinfo ? &cinfo->args [i + sig->hasthis] : NULL;
+
                if (vretaddr && vret_arg_pindex == pindex)
                        param_types [pindex ++] = IntPtrType ();
                pindexes [i] = pindex;
-               if (cinfo && cinfo->args [i + sig->hasthis].storage == LLVMArgVtypeInReg) {
+               if (ainfo && ainfo->storage == LLVMArgVtypeInReg) {
                        for (j = 0; j < 2; ++j) {
-                               switch (cinfo->args [i + sig->hasthis].pair_storage [j]) {
+                               switch (ainfo->pair_storage [j]) {
                                case LLVMArgInIReg:
                                        param_types [pindex ++] = LLVMIntType (sizeof (gpointer) * 8);
                                        break;
@@ -1207,11 +1238,20 @@ sig_to_llvm_sig_full (EmitContext *ctx, MonoMethodSignature *sig, LLVMCallInfo *
                                        g_assert_not_reached ();
                                }
                        }
-               } else if (cinfo && cinfo->args [i + sig->hasthis].storage == LLVMArgVtypeByVal) {
+               } else if (ainfo && ainfo->storage == LLVMArgVtypeByVal) {
                        param_types [pindex] = type_to_llvm_arg_type (ctx, sig->params [i]);
                        CHECK_FAILURE (ctx);
                        param_types [pindex] = LLVMPointerType (param_types [pindex], 0);
                        pindex ++;
+               } else if (ainfo && ainfo->storage == LLVMArgAsIArgs) {
+                       param_types [pindex] = LLVMArrayType (IntPtrType (), ainfo->nslots);
+                       pindex ++;
+               } else if (ainfo && ainfo->storage == LLVMArgAsFpArgs) {
+                       int j;
+
+                       for (j = 0; j < ainfo->nslots; ++j)
+                               param_types [pindex + j] = ainfo->esize == 8 ? LLVMDoubleType () : LLVMFloatType ();
+                       pindex += ainfo->nslots;
                } else {
                        param_types [pindex ++] = type_to_llvm_arg_type (ctx, sig->params [i]);
                }                       
@@ -1700,14 +1740,14 @@ emit_cond_system_exception (EmitContext *ctx, MonoBasicBlock *bb, const char *ex
 }
 
 /*
- * emit_reg_to_vtype:
+ * emit_args_to_vtype:
  *
- *   Emit code to store the vtype in the registers REGS to the address ADDRESS.
+ *   Emit code to store the vtype in the arguments args to the address ADDRESS.
  */
 static void
-emit_reg_to_vtype (EmitContext *ctx, LLVMBuilderRef builder, MonoType *t, LLVMValueRef address, LLVMArgInfo *ainfo, LLVMValueRef *regs)
+emit_args_to_vtype (EmitContext *ctx, LLVMBuilderRef builder, MonoType *t, LLVMValueRef address, LLVMArgInfo *ainfo, LLVMValueRef *args)
 {
-       int j, size;
+       int j, size, nslots;
 
        size = get_vtype_size (t);
 
@@ -1715,27 +1755,47 @@ emit_reg_to_vtype (EmitContext *ctx, LLVMBuilderRef builder, MonoType *t, LLVMVa
                address = LLVMBuildBitCast (ctx->builder, address, LLVMPointerType (LLVMInt8Type (), 0), "");
        }
 
-       for (j = 0; j < 2; ++j) {
-               LLVMValueRef index [2], addr;
+       if (ainfo->storage == LLVMArgAsFpArgs)
+               nslots = ainfo->nslots;
+       else
+               nslots = 2;
+
+       for (j = 0; j < nslots; ++j) {
+               LLVMValueRef index [2], addr, daddr;
                int part_size = size > sizeof (gpointer) ? sizeof (gpointer) : size;
                LLVMTypeRef part_type;
 
                if (ainfo->pair_storage [j] == LLVMArgNone)
                        continue;
 
-               part_type = LLVMIntType (part_size * 8);
-               if (MONO_CLASS_IS_SIMD (ctx->cfg, mono_class_from_mono_type (t))) {
-                       index [0] = LLVMConstInt (LLVMInt32Type (), j * sizeof (gpointer), FALSE);
-                       addr = LLVMBuildGEP (builder, address, index, 1, "");
-               } else {
-                       index [0] = LLVMConstInt (LLVMInt32Type (), 0, FALSE);
-                       index [1] = LLVMConstInt (LLVMInt32Type (), j * sizeof (gpointer), FALSE);
-                       addr = LLVMBuildGEP (builder, address, index, 2, "");
-               }
                switch (ainfo->pair_storage [j]) {
-               case LLVMArgInIReg:
-                       LLVMBuildStore (builder, convert (ctx, regs [j], part_type), LLVMBuildBitCast (ctx->builder, addr, LLVMPointerType (part_type, 0), ""));
+               case LLVMArgInIReg: {
+                       part_type = LLVMIntType (part_size * 8);
+                       if (MONO_CLASS_IS_SIMD (ctx->cfg, mono_class_from_mono_type (t))) {
+                               index [0] = LLVMConstInt (LLVMInt32Type (), j * sizeof (gpointer), FALSE);
+                               addr = LLVMBuildGEP (builder, address, index, 1, "");
+                       } else {
+                               daddr = LLVMBuildBitCast (ctx->builder, address, LLVMPointerType (IntPtrType (), 0), "");
+                               index [0] = LLVMConstInt (LLVMInt32Type (), j, FALSE);
+                               addr = LLVMBuildGEP (builder, daddr, index, 1, "");
+                       }
+                       LLVMBuildStore (builder, convert (ctx, args [j], part_type), LLVMBuildBitCast (ctx->builder, addr, LLVMPointerType (part_type, 0), ""));
                        break;
+               }
+               case LLVMArgInFPReg: {
+                       LLVMTypeRef arg_type;
+
+                       if (ainfo->esize == 8)
+                               arg_type = LLVMDoubleType ();
+                       else
+                               arg_type = LLVMFloatType ();
+
+                       index [0] = LLVMConstInt (LLVMInt32Type (), j, FALSE);
+                       daddr = LLVMBuildBitCast (ctx->builder, address, LLVMPointerType (arg_type, 0), "");
+                       addr = LLVMBuildGEP (builder, daddr, index, 1, "");
+                       LLVMBuildStore (builder, args [j], addr);
+                       break;
+               }
                case LLVMArgNone:
                        break;
                default:
@@ -1747,41 +1807,55 @@ emit_reg_to_vtype (EmitContext *ctx, LLVMBuilderRef builder, MonoType *t, LLVMVa
 }
 
 /*
- * emit_vtype_to_reg:
+ * emit_vtype_to_args:
  *
- *   Emit code to load a vtype at address ADDRESS into registers. Store the registers
- * into REGS, and the number of registers into NREGS.
+ *   Emit code to load a vtype at address ADDRESS into scalar arguments. Store the arguments
+ * into ARGS, and the number of arguments into NARGS.
  */
 static void
-emit_vtype_to_reg (EmitContext *ctx, LLVMBuilderRef builder, MonoType *t, LLVMValueRef address, LLVMArgInfo *ainfo, LLVMValueRef *regs, guint32 *nregs)
+emit_vtype_to_args (EmitContext *ctx, LLVMBuilderRef builder, MonoType *t, LLVMValueRef address, LLVMArgInfo *ainfo, LLVMValueRef *args, guint32 *nargs)
 {
        int pindex = 0;
-       int j, size;
+       int j, size, nslots;
+       LLVMTypeRef arg_type;
 
        size = get_vtype_size (t);
 
-       if (MONO_CLASS_IS_SIMD (ctx->cfg, mono_class_from_mono_type (t))) {
+       if (MONO_CLASS_IS_SIMD (ctx->cfg, mono_class_from_mono_type (t)))
                address = LLVMBuildBitCast (ctx->builder, address, LLVMPointerType (LLVMInt8Type (), 0), "");
-       }
 
-       for (j = 0; j < 2; ++j) {
-               LLVMValueRef index [2], addr;
+       if (ainfo->storage == LLVMArgAsFpArgs)
+               nslots = ainfo->nslots;
+       else
+               nslots = 2;
+       for (j = 0; j < nslots; ++j) {
+               LLVMValueRef index [2], addr, daddr;
                int partsize = size > sizeof (gpointer) ? sizeof (gpointer) : size;
 
                if (ainfo->pair_storage [j] == LLVMArgNone)
                        continue;
 
-               if (MONO_CLASS_IS_SIMD (ctx->cfg, mono_class_from_mono_type (t))) {
-                       index [0] = LLVMConstInt (LLVMInt32Type (), j * sizeof (gpointer), FALSE);
-                       addr = LLVMBuildGEP (builder, address, index, 1, "");
-               } else {
-                       index [0] = LLVMConstInt (LLVMInt32Type (), 0, FALSE);
-                       index [1] = LLVMConstInt (LLVMInt32Type (), j * sizeof (gpointer), FALSE);                              
-                       addr = LLVMBuildGEP (builder, address, index, 2, "");
-               }
                switch (ainfo->pair_storage [j]) {
                case LLVMArgInIReg:
-                       regs [pindex ++] = convert (ctx, LLVMBuildLoad (builder, LLVMBuildBitCast (ctx->builder, addr, LLVMPointerType (LLVMIntType (partsize * 8), 0), ""), ""), IntPtrType ());
+                       if (MONO_CLASS_IS_SIMD (ctx->cfg, mono_class_from_mono_type (t))) {
+                               index [0] = LLVMConstInt (LLVMInt32Type (), j * sizeof (gpointer), FALSE);
+                               addr = LLVMBuildGEP (builder, address, index, 1, "");
+                       } else {
+                               daddr = LLVMBuildBitCast (ctx->builder, address, LLVMPointerType (IntPtrType (), 0), "");
+                               index [0] = LLVMConstInt (LLVMInt32Type (), j, FALSE);
+                               addr = LLVMBuildGEP (builder, daddr, index, 1, "");
+                       }
+                       args [pindex ++] = convert (ctx, LLVMBuildLoad (builder, LLVMBuildBitCast (ctx->builder, addr, LLVMPointerType (LLVMIntType (partsize * 8), 0), ""), ""), IntPtrType ());
+                       break;
+               case LLVMArgInFPReg:
+                       if (ainfo->esize == 8)
+                               arg_type = LLVMDoubleType ();
+                       else
+                               arg_type = LLVMFloatType ();
+                       daddr = LLVMBuildBitCast (ctx->builder, address, LLVMPointerType (arg_type, 0), "");
+                       index [0] = LLVMConstInt (LLVMInt32Type (), j, FALSE);
+                       addr = LLVMBuildGEP (builder, daddr, index, 1, "");
+                       args [pindex ++] = LLVMBuildLoad (builder, addr, "");
                        break;
                case LLVMArgNone:
                        break;
@@ -1791,7 +1865,7 @@ emit_vtype_to_reg (EmitContext *ctx, LLVMBuilderRef builder, MonoType *t, LLVMVa
                size -= sizeof (gpointer);
        }
 
-       *nregs = pindex;
+       *nargs = pindex;
 }
 
 static LLVMValueRef
@@ -1895,25 +1969,27 @@ emit_entry_bb (EmitContext *ctx, LLVMBuilderRef builder)
                LLVMArgInfo *ainfo = &linfo->args [i + sig->hasthis];
                int reg = cfg->args [i + sig->hasthis]->dreg;
 
-               if (ainfo->storage == LLVMArgVtypeInReg) {
-                       LLVMValueRef regs [2];
+               if (ainfo->storage == LLVMArgVtypeInReg || ainfo->storage == LLVMArgAsFpArgs) {
+                       LLVMValueRef args [8];
+                       int j;
 
-                       /* 
-                        * Emit code to save the argument from the registers to 
-                        * the real argument.
-                        */
+                       /* The argument is received as a set of int/fp arguments, store them into the real argument */
+                       memset (args, 0, sizeof (args));
                        pindex = ctx->pindexes [i];
-                       regs [0] = LLVMGetParam (ctx->lmethod, pindex);
-                       if (ainfo->pair_storage [1] != LLVMArgNone)
-                               regs [1] = LLVMGetParam (ctx->lmethod, pindex + 1);
-                       else
-                               regs [1] = NULL;
-
+                       if (ainfo->storage == LLVMArgVtypeInReg) {
+                               args [0] = LLVMGetParam (ctx->lmethod, pindex);
+                               if (ainfo->pair_storage [1] != LLVMArgNone)
+                                       args [1] = LLVMGetParam (ctx->lmethod, pindex + 1);
+                       } else {
+                               g_assert (ainfo->nslots <= 8);
+                               for (j = 0; j < ainfo->nslots; ++j)
+                                       args [j] = LLVMGetParam (ctx->lmethod, ctx->pindexes [i] + j);
+                       }
                        ctx->addresses [reg] = build_alloca (ctx, sig->params [i]);
 
-                       emit_reg_to_vtype (ctx, builder, sig->params [i], ctx->addresses [reg], ainfo, regs);
+                       emit_args_to_vtype (ctx, builder, sig->params [i], ctx->addresses [reg], ainfo, args);
 
-                       if (MONO_CLASS_IS_SIMD (ctx->cfg, mono_class_from_mono_type (sig->params [i]))) {
+                       if (ainfo->storage == LLVMArgVtypeInReg && MONO_CLASS_IS_SIMD (ctx->cfg, mono_class_from_mono_type (sig->params [i]))) {
                                /* Treat these as normal values */
                                ctx->values [reg] = LLVMBuildLoad (builder, ctx->addresses [reg], "");
                        }
@@ -1924,8 +2000,15 @@ emit_entry_bb (EmitContext *ctx, LLVMBuilderRef builder)
                                /* Treat these as normal values */
                                ctx->values [reg] = LLVMBuildLoad (builder, ctx->addresses [reg], "");
                        }
+               } else if (ainfo->storage == LLVMArgAsIArgs) {
+                       LLVMValueRef arg = LLVMGetParam (ctx->lmethod, ctx->pindexes [i]);
+
+                       ctx->addresses [reg] = build_alloca (ctx, sig->params [i]);
+
+                       /* The argument is received as an array of ints, store it into the real argument */
+                       LLVMBuildStore (ctx->builder, arg, convert (ctx, ctx->addresses [reg], LLVMPointerType (LLVMTypeOf (arg), 0)));
                } else {
-                       ctx->values [reg] = convert_full (ctx, ctx->values [reg], llvm_type_to_stack_type (type_to_llvm_type (ctx, sig->params [i])), type_is_unsigned (ctx, sig->params [i]));
+                       ctx->values [reg] = convert_full (ctx, ctx->values [reg], llvm_type_to_stack_type (cfg, type_to_llvm_type (ctx, sig->params [i])), type_is_unsigned (ctx, sig->params [i]));
                }
        }
 
@@ -1999,9 +2082,6 @@ emit_entry_bb (EmitContext *ctx, LLVMBuilderRef builder)
 }
 
 /* Have to export this for AOT */
-void
-mono_personality (void);
-       
 void
 mono_personality (void)
 {
@@ -2044,8 +2124,8 @@ process_call (EmitContext *ctx, MonoBasicBlock *bb, LLVMBuilderRef *builder_ref,
        llvm_sig = sig_to_llvm_sig_full (ctx, sig, cinfo, &sinfo);
        CHECK_FAILURE (ctx);
 
-       virtual = (ins->opcode == OP_VOIDCALL_MEMBASE || ins->opcode == OP_CALL_MEMBASE || ins->opcode == OP_VCALL_MEMBASE || ins->opcode == OP_LCALL_MEMBASE || ins->opcode == OP_FCALL_MEMBASE);
-       calli = (ins->opcode == OP_VOIDCALL_REG || ins->opcode == OP_CALL_REG || ins->opcode == OP_VCALL_REG || ins->opcode == OP_LCALL_REG || ins->opcode == OP_FCALL_REG);
+       virtual = (ins->opcode == OP_VOIDCALL_MEMBASE || ins->opcode == OP_CALL_MEMBASE || ins->opcode == OP_VCALL_MEMBASE || ins->opcode == OP_LCALL_MEMBASE || ins->opcode == OP_FCALL_MEMBASE || ins->opcode == OP_RCALL_MEMBASE);
+       calli = (ins->opcode == OP_VOIDCALL_REG || ins->opcode == OP_CALL_REG || ins->opcode == OP_VCALL_REG || ins->opcode == OP_LCALL_REG || ins->opcode == OP_FCALL_REG || ins->opcode == OP_RCALL_REG);
 
        /* FIXME: Avoid creating duplicate methods */
 
@@ -2209,24 +2289,21 @@ process_call (EmitContext *ctx, MonoBasicBlock *bb, LLVMBuilderRef *builder_ref,
                regpair = (guint32)(gssize)(l->data);
                reg = regpair & 0xffffff;
                args [pindex] = values [reg];
-               if (ainfo->storage == LLVMArgVtypeInReg) {
-                       int j;
-                       LLVMValueRef regs [2];
-                       guint32 nregs;
-
-                       g_assert (ainfo);
+               if (ainfo->storage == LLVMArgVtypeInReg || ainfo->storage == LLVMArgAsFpArgs) {
+                       guint32 nargs;
 
                        g_assert (addresses [reg]);
-
-                       emit_vtype_to_reg (ctx, builder, sig->params [i - sig->hasthis], addresses [reg], ainfo, regs, &nregs);
-                       for (j = 0; j < nregs; ++j)
-                               args [pindex ++] = regs [j];
+                       emit_vtype_to_args (ctx, builder, sig->params [i - sig->hasthis], addresses [reg], ainfo, args + pindex, &nargs);
+                       pindex += nargs;
 
                        // FIXME: alignment
                        // FIXME: Get rid of the VMOVE
                } else if (ainfo->storage == LLVMArgVtypeByVal) {
                        g_assert (addresses [reg]);
                        args [pindex] = addresses [reg];
+               } else if (ainfo->storage == LLVMArgAsIArgs) {
+                       g_assert (addresses [reg]);
+                       args [pindex] = LLVMBuildLoad (ctx->builder, convert (ctx, addresses [reg], LLVMPointerType (LLVMArrayType (IntPtrType (), ainfo->nslots), 0)), "");
                } else {
                        g_assert (args [pindex]);
                        if (i == 0 && sig->hasthis)
@@ -2284,11 +2361,21 @@ process_call (EmitContext *ctx, MonoBasicBlock *bb, LLVMBuilderRef *builder_ref,
                if (cinfo->ret.pair_storage [1] != LLVMArgNone)
                        regs [1] = LLVMBuildExtractValue (builder, lcall, 1, "");
                                        
-               emit_reg_to_vtype (ctx, builder, sig->ret, addresses [ins->dreg], &cinfo->ret, regs);
+               emit_args_to_vtype (ctx, builder, sig->ret, addresses [ins->dreg], &cinfo->ret, regs);
+       } else if (cinfo && cinfo->ret.storage == LLVMArgVtypeByVal) {
+               if (!addresses [call->inst.dreg])
+                       addresses [call->inst.dreg] = build_alloca (ctx, sig->ret);
+               LLVMBuildStore (builder, lcall, addresses [call->inst.dreg]);
        } else if (sig->ret->type != MONO_TYPE_VOID && !vretaddr) {
                /* If the method returns an unsigned value, need to zext it */
+               values [ins->dreg] = convert_full (ctx, lcall, llvm_type_to_stack_type (cfg, type_to_llvm_type (ctx, sig->ret)), type_is_unsigned (ctx, sig->ret));
+       }
 
-               values [ins->dreg] = convert_full (ctx, lcall, llvm_type_to_stack_type (type_to_llvm_type (ctx, sig->ret)), type_is_unsigned (ctx, sig->ret));
+       if (vretaddr) {
+               if (!addresses [call->inst.dreg])
+                       addresses [call->inst.dreg] = build_alloca (ctx, sig->ret);
+               g_assert (sinfo.vret_arg_pindex < nargs);
+               args [sinfo.vret_arg_pindex] = LLVMBuildPtrToInt (builder, addresses [call->inst.dreg], IntPtrType (), "");
        }
 
        *builder_ref = ctx->builder;
@@ -2308,7 +2395,6 @@ process_bb (EmitContext *ctx, MonoBasicBlock *bb)
        LLVMValueRef method = ctx->lmethod;
        LLVMValueRef *values = ctx->values;
        LLVMValueRef *addresses = ctx->addresses;
-       int i;
        LLVMCallInfo *linfo = ctx->linfo;
        LLVMModuleRef module = ctx->module;
        BBInfo *bblocks = ctx->bblocks;
@@ -2514,7 +2600,10 @@ process_bb (EmitContext *ctx, MonoBasicBlock *bb)
                        values [ins->dreg] = LLVMConstReal (LLVMDoubleType (), *(double*)ins->inst_p0);
                        break;
                case OP_R4CONST:
-                       values [ins->dreg] = LLVMConstFPExt (LLVMConstReal (LLVMFloatType (), *(float*)ins->inst_p0), LLVMDoubleType ());
+                       if (cfg->r4fp)
+                               values [ins->dreg] = LLVMConstReal (LLVMFloatType (), *(float*)ins->inst_p0);
+                       else
+                               values [ins->dreg] = LLVMConstFPExt (LLVMConstReal (LLVMFloatType (), *(float*)ins->inst_p0), LLVMDoubleType ());
                        break;
                case OP_DUMMY_ICONST:
                        values [ins->dreg] = LLVMConstInt (LLVMInt32Type (), 0, FALSE);
@@ -2582,6 +2671,15 @@ process_bb (EmitContext *ctx, MonoBasicBlock *bb)
                                break;
                        }
 
+                       if (linfo->ret.storage == LLVMArgVtypeByVal) {
+                               LLVMValueRef retval;
+
+                               g_assert (addresses [ins->sreg1]);
+                               retval = LLVMBuildLoad (builder, addresses [ins->sreg1], "");
+                               LLVMBuildRet (builder, retval);
+                               break;
+                       }
+
                        if (linfo->ret.storage == LLVMArgVtypeRetAddr) {
                                LLVMBuildRetVoid (builder);
                                break;
@@ -2603,6 +2701,7 @@ process_bb (EmitContext *ctx, MonoBasicBlock *bb)
                        break;
                case OP_ICOMPARE:
                case OP_FCOMPARE:
+               case OP_RCOMPARE:
                case OP_LCOMPARE:
                case OP_COMPARE:
                case OP_ICOMPARE_IMM:
@@ -2645,9 +2744,11 @@ process_bb (EmitContext *ctx, MonoBasicBlock *bb)
                        }
 
                        /* We use COMPARE+SETcc/Bcc, llvm uses SETcc+br cond */
-                       if (ins->opcode == OP_FCOMPARE)
+                       if (ins->opcode == OP_FCOMPARE) {
                                cmp = LLVMBuildFCmp (builder, fpcond_to_llvm_cond [rel], convert (ctx, lhs, LLVMDoubleType ()), convert (ctx, rhs, LLVMDoubleType ()), "");
-                       else if (ins->opcode == OP_COMPARE_IMM) {
+                       } else if (ins->opcode == OP_RCOMPARE) {
+                               cmp = LLVMBuildFCmp (builder, fpcond_to_llvm_cond [rel], convert (ctx, lhs, LLVMFloatType ()), convert (ctx, rhs, LLVMFloatType ()), "");
+                       } else if (ins->opcode == OP_COMPARE_IMM) {
                                if (LLVMGetTypeKind (LLVMTypeOf (lhs)) == LLVMPointerTypeKind && ins->inst_imm == 0)
                                        cmp = LLVMBuildICmp (builder, cond_to_llvm_cond [rel], lhs, LLVMConstNull (LLVMTypeOf (lhs)), "");
                                else
@@ -2713,6 +2814,20 @@ process_bb (EmitContext *ctx, MonoBasicBlock *bb)
                        values [ins->dreg] = LLVMBuildZExt (builder, cmp, LLVMInt32Type (), dname);
                        break;
                }
+               case OP_RCEQ:
+               case OP_RCLT:
+               case OP_RCLT_UN:
+               case OP_RCGT:
+               case OP_RCGT_UN: {
+                       CompRelation rel;
+                       LLVMValueRef cmp;
+
+                       rel = mono_opcode_to_cond (ins->opcode);
+
+                       cmp = LLVMBuildFCmp (builder, fpcond_to_llvm_cond [rel], convert (ctx, lhs, LLVMFloatType ()), convert (ctx, rhs, LLVMFloatType ()), "");
+                       values [ins->dreg] = LLVMBuildZExt (builder, cmp, LLVMInt32Type (), dname);
+                       break;
+               }
                case OP_PHI:
                case OP_FPHI:
                case OP_VPHI:
@@ -2776,7 +2891,8 @@ process_bb (EmitContext *ctx, MonoBasicBlock *bb)
                        g_assert (lhs);
                        values [ins->dreg] = lhs;
                        break;
-               case OP_FMOVE: {
+               case OP_FMOVE:
+               case OP_RMOVE: {
                        MonoInst *var = get_vreg_to_inst (cfg, ins->dreg);
                                
                        g_assert (lhs);
@@ -2791,6 +2907,22 @@ process_bb (EmitContext *ctx, MonoBasicBlock *bb)
                        }
                        break;
                }
+               case OP_MOVE_F_TO_I4: {
+                       values [ins->dreg] = LLVMBuildBitCast (builder, LLVMBuildFPTrunc (builder, lhs, LLVMFloatType (), ""), LLVMInt32Type (), "");
+                       break;
+               }
+               case OP_MOVE_I4_TO_F: {
+                       values [ins->dreg] = LLVMBuildFPExt (builder, LLVMBuildBitCast (builder, lhs, LLVMFloatType (), ""), LLVMDoubleType (), "");
+                       break;
+               }
+               case OP_MOVE_F_TO_I8: {
+                       values [ins->dreg] = LLVMBuildBitCast (builder, lhs, LLVMInt64Type (), "");
+                       break;
+               }
+               case OP_MOVE_I8_TO_F: {
+                       values [ins->dreg] = LLVMBuildBitCast (builder, lhs, LLVMDoubleType (), "");
+                       break;
+               }
                case OP_IADD:
                case OP_ISUB:
                case OP_IAND:
@@ -2854,6 +2986,7 @@ process_bb (EmitContext *ctx, MonoBasicBlock *bb)
                                values [ins->dreg] = LLVMBuildUDiv (builder, lhs, rhs, dname);
                                break;
                        case OP_FDIV:
+                       case OP_RDIV:
                                values [ins->dreg] = LLVMBuildFDiv (builder, lhs, rhs, dname);
                                break;
                        case OP_IAND:
@@ -2895,6 +3028,31 @@ process_bb (EmitContext *ctx, MonoBasicBlock *bb)
                                g_assert_not_reached ();
                        }
                        break;
+               case OP_RADD:
+               case OP_RSUB:
+               case OP_RMUL:
+               case OP_RDIV: {
+                       lhs = convert (ctx, lhs, LLVMFloatType ());
+                       rhs = convert (ctx, rhs, LLVMFloatType ());
+                       switch (ins->opcode) {
+                       case OP_RADD:
+                               values [ins->dreg] = LLVMBuildFAdd (builder, lhs, rhs, dname);
+                               break;
+                       case OP_RSUB:
+                               values [ins->dreg] = LLVMBuildFSub (builder, lhs, rhs, dname);
+                               break;
+                       case OP_RMUL:
+                               values [ins->dreg] = LLVMBuildFMul (builder, lhs, rhs, dname);
+                               break;
+                       case OP_RDIV:
+                               values [ins->dreg] = LLVMBuildFDiv (builder, lhs, rhs, dname);
+                               break;
+                       default:
+                               g_assert_not_reached ();
+                               break;
+                       }
+                       break;
+               }
                case OP_IADD_IMM:
                case OP_ISUB_IMM:
                case OP_IMUL_IMM:
@@ -3016,6 +3174,10 @@ process_bb (EmitContext *ctx, MonoBasicBlock *bb)
                        lhs = convert (ctx, lhs, LLVMDoubleType ());
                        values [ins->dreg] = LLVMBuildFSub (builder, LLVMConstReal (LLVMDoubleType (), 0.0), lhs, dname);
                        break;
+               case OP_RNEG:
+                       lhs = convert (ctx, lhs, LLVMFloatType ());
+                       values [ins->dreg] = LLVMBuildFSub (builder, LLVMConstReal (LLVMFloatType (), 0.0), lhs, dname);
+                       break;
                case OP_INOT: {
                        guint32 v = 0xffffffff;
                        values [ins->dreg] = LLVMBuildXor (builder, LLVMConstInt (LLVMInt32Type (), v, FALSE), convert (ctx, lhs, LLVMInt32Type ()), dname);
@@ -3067,21 +3229,27 @@ process_bb (EmitContext *ctx, MonoBasicBlock *bb)
                        values [ins->dreg] = LLVMBuildZExt (builder, lhs, LLVMInt64Type (), dname);
                        break;
                case OP_FCONV_TO_I4:
+               case OP_RCONV_TO_I4:
                        values [ins->dreg] = LLVMBuildFPToSI (builder, lhs, LLVMInt32Type (), dname);
                        break;
                case OP_FCONV_TO_I1:
+               case OP_RCONV_TO_I1:
                        values [ins->dreg] = LLVMBuildSExt (builder, LLVMBuildFPToSI (builder, lhs, LLVMInt8Type (), dname), LLVMInt32Type (), "");
                        break;
                case OP_FCONV_TO_U1:
+               case OP_RCONV_TO_U1:
                        values [ins->dreg] = LLVMBuildZExt (builder, LLVMBuildFPToUI (builder, lhs, LLVMInt8Type (), dname), LLVMInt32Type (), "");
                        break;
                case OP_FCONV_TO_I2:
+               case OP_RCONV_TO_I2:
                        values [ins->dreg] = LLVMBuildSExt (builder, LLVMBuildFPToSI (builder, lhs, LLVMInt16Type (), dname), LLVMInt32Type (), "");
                        break;
                case OP_FCONV_TO_U2:
+               case OP_RCONV_TO_U2:
                        values [ins->dreg] = LLVMBuildZExt (builder, LLVMBuildFPToUI (builder, lhs, LLVMInt16Type (), dname), LLVMInt32Type (), "");
                        break;
                case OP_FCONV_TO_I8:
+               case OP_RCONV_TO_I8:
                        values [ins->dreg] = LLVMBuildFPToSI (builder, lhs, LLVMInt64Type (), dname);
                        break;
                case OP_FCONV_TO_I:
@@ -3103,11 +3271,23 @@ process_bb (EmitContext *ctx, MonoBasicBlock *bb)
                case OP_ICONV_TO_R4:
                case OP_LCONV_TO_R4:
                        v = LLVMBuildSIToFP (builder, lhs, LLVMFloatType (), "");
-                       values [ins->dreg] = LLVMBuildFPExt (builder, v, LLVMDoubleType (), dname);
+                       if (cfg->r4fp)
+                               values [ins->dreg] = v;
+                       else
+                               values [ins->dreg] = LLVMBuildFPExt (builder, v, LLVMDoubleType (), dname);
                        break;
                case OP_FCONV_TO_R4:
                        v = LLVMBuildFPTrunc (builder, lhs, LLVMFloatType (), "");
-                       values [ins->dreg] = LLVMBuildFPExt (builder, v, LLVMDoubleType (), dname);
+                       if (cfg->r4fp)
+                               values [ins->dreg] = v;
+                       else
+                               values [ins->dreg] = LLVMBuildFPExt (builder, v, LLVMDoubleType (), dname);
+                       break;
+               case OP_RCONV_TO_R8:
+                       values [ins->dreg] = LLVMBuildFPExt (builder, lhs, LLVMDoubleType (), dname);
+                       break;
+               case OP_RCONV_TO_R4:
+                       values [ins->dreg] = lhs;
                        break;
                case OP_SEXT_I4:
                        values [ins->dreg] = LLVMBuildSExt (builder, convert (ctx, lhs, LLVMInt32Type ()), LLVMInt64Type (), dname);
@@ -3223,7 +3403,7 @@ process_bb (EmitContext *ctx, MonoBasicBlock *bb)
                                values [ins->dreg] = LLVMBuildSExt (builder, values [ins->dreg], LLVMInt32Type (), dname);
                        else if (zext)
                                values [ins->dreg] = LLVMBuildZExt (builder, values [ins->dreg], LLVMInt32Type (), dname);
-                       else if (ins->opcode == OP_LOADR4_MEMBASE)
+                       else if (!cfg->r4fp && ins->opcode == OP_LOADR4_MEMBASE)
                                values [ins->dreg] = LLVMBuildFPExt (builder, values [ins->dreg], LLVMDoubleType (), dname);
                        break;
                }
@@ -3292,16 +3472,19 @@ process_bb (EmitContext *ctx, MonoBasicBlock *bb)
                case OP_CALL:
                case OP_LCALL:
                case OP_FCALL:
+               case OP_RCALL:
                case OP_VCALL:
                case OP_VOIDCALL_MEMBASE:
                case OP_CALL_MEMBASE:
                case OP_LCALL_MEMBASE:
                case OP_FCALL_MEMBASE:
+               case OP_RCALL_MEMBASE:
                case OP_VCALL_MEMBASE:
                case OP_VOIDCALL_REG:
                case OP_CALL_REG:
                case OP_LCALL_REG:
                case OP_FCALL_REG:
+               case OP_RCALL_REG:
                case OP_VCALL_REG: {
                        process_call (ctx, bb, &builder, ins);
                        CHECK_FAILURE (ctx);
@@ -3978,6 +4161,7 @@ process_bb (EmitContext *ctx, MonoBasicBlock *bb)
                case OP_EXPAND_R8: {
                        LLVMTypeRef t = simd_op_to_llvm_type (ins->opcode);
                        LLVMValueRef mask [16], v;
+                       int i;
 
                        for (i = 0; i < 16; ++i)
                                mask [i] = LLVMConstInt (LLVMInt32Type (), 0, FALSE);
@@ -4029,11 +4213,6 @@ process_bb (EmitContext *ctx, MonoBasicBlock *bb)
                        break;
                }
 
-               case OP_ICONV_TO_R8_RAW:
-                       /* Same as OP_ICONV_TO_R8 */
-                       values [ins->dreg] = convert (ctx, LLVMBuildBitCast (builder, lhs, LLVMFloatType (), ""), LLVMDoubleType ());
-                       break;
-
                case OP_COMPPS:
                case OP_COMPPD: {
                        LLVMValueRef args [3];
@@ -4724,7 +4903,7 @@ mono_llvm_emit_method (MonoCompile *cfg)
                        case OP_FPHI:
                        case OP_VPHI:
                        case OP_XPHI: {
-                               LLVMTypeRef phi_type = llvm_type_to_stack_type (type_to_llvm_type (ctx, &ins->klass->byval_arg));
+                               LLVMTypeRef phi_type = llvm_type_to_stack_type (cfg, type_to_llvm_type (ctx, &ins->klass->byval_arg));
 
                                CHECK_FAILURE (ctx);
 
@@ -4995,6 +5174,8 @@ mono_llvm_emit_call (MonoCompile *cfg, MonoCallInst *call)
                }
                case LLVMArgVtypeByVal:
                case LLVMArgVtypeInReg:
+               case LLVMArgAsIArgs:
+               case LLVMArgAsFpArgs:
                        MONO_INST_NEW (cfg, ins, OP_LLVM_OUTARG_VT);
                        ins->dreg = mono_alloc_ireg (cfg);
                        ins->sreg1 = in->dreg;
index 0eafa3fb31651f7e7367552a71bd3ca9f308f828..833a1facc7a4155adf638def6c4d5fde605ffcb0 100644 (file)
@@ -3913,6 +3913,14 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
                                mips_fmovd (code, ins->dreg, ins->sreg1);
                        }
                        break;
+               case OP_MOVE_F_TO_I4:
+                       mips_cvtsd (code, mips_ftemp, ins->sreg1);
+                       mips_mfc1 (code, ins->dreg, mips_ftemp);
+                       break;
+               case OP_MOVE_I4_TO_F:
+                       mips_mtc1 (code, ins->dreg, ins->sreg1);
+                       mips_cvtds (code, ins->dreg, ins->dreg);
+                       break;
                case OP_MIPS_CVTSD:
                        /* Convert from double to float and leave it there */
                        mips_cvtsd (code, ins->dreg, ins->sreg1);
index 8ad4571c8c150ebef71e530bd8e337238027a9aa..cdab7a8481523fba87997df9f72b1e22db0d4583 100644 (file)
@@ -15,6 +15,7 @@ MINI_OP(OP_VPHI,      "vphi", VREG, NONE, NONE)
 MINI_OP(OP_COMPARE,    "compare", NONE, IREG, IREG)
 MINI_OP(OP_COMPARE_IMM,        "compare_imm", NONE, IREG, NONE)
 MINI_OP(OP_FCOMPARE,   "fcompare", NONE, FREG, FREG)
+MINI_OP(OP_RCOMPARE,   "rcompare", NONE, FREG, FREG)
 MINI_OP(OP_LCOMPARE,   "lcompare", NONE, LREG, LREG)
 MINI_OP(OP_ICOMPARE,   "icompare", NONE, IREG, IREG)
 MINI_OP(OP_ICOMPARE_IMM,       "icompare_imm", NONE, IREG, NONE)
@@ -49,6 +50,9 @@ MINI_OP(OP_CALL_MEMBASE,      "call_membase", IREG, IREG, NONE)
 MINI_OP(OP_FCALL,      "fcall", FREG, NONE, NONE)
 MINI_OP(OP_FCALL_REG,  "fcall_reg", FREG, IREG, NONE)
 MINI_OP(OP_FCALL_MEMBASE,      "fcall_membase", FREG, IREG, NONE)
+MINI_OP(OP_RCALL,      "rcall", FREG, NONE, NONE)
+MINI_OP(OP_RCALL_REG,  "rcall_reg", FREG, IREG, NONE)
+MINI_OP(OP_RCALL_MEMBASE,      "rcall_membase", FREG, IREG, NONE)
 MINI_OP(OP_LCALL,      "lcall", LREG, NONE, NONE)
 MINI_OP(OP_LCALL_REG,  "lcall_reg", LREG, IREG, NONE)
 MINI_OP(OP_LCALL_MEMBASE,      "lcall_membase", LREG, IREG, NONE)
@@ -68,6 +72,7 @@ MINI_OP(OP_R8CONST,   "r8const", FREG, NONE, NONE)
 MINI_OP(OP_DUMMY_ICONST, "dummy_iconst", IREG, NONE, NONE)
 MINI_OP(OP_DUMMY_I8CONST, "dummy_i8const", LREG, NONE, NONE)
 MINI_OP(OP_DUMMY_R8CONST, "dummy_r8const", FREG, NONE, NONE)
+MINI_OP(OP_DUMMY_R4CONST, "dummy_r4const", FREG, NONE, NONE)
 MINI_OP(OP_DUMMY_VZERO, "dummy_vzero", VREG, NONE, NONE)
 MINI_OP(OP_REGVAR,     "regvar", NONE, NONE, NONE)
 MINI_OP(OP_REGOFFSET,  "regoffset", NONE, NONE, NONE)
@@ -170,6 +175,17 @@ MINI_OP(OP_MOVE,   "move", IREG, IREG, NONE)
 MINI_OP(OP_LMOVE,      "lmove", LREG, LREG, NONE)
 MINI_OP(OP_FMOVE,      "fmove", FREG, FREG, NONE)
 MINI_OP(OP_VMOVE,   "vmove", VREG, VREG, NONE)
+MINI_OP(OP_RMOVE,      "rmove", FREG, FREG, NONE)
+
+/*
+ * All 4 of these are only available when soft float isn't active. They
+ * perform no conversions; they simply move values back and forth.
+ */
+MINI_OP(OP_MOVE_F_TO_I4, "move_f_to_i4", IREG, FREG, NONE)
+MINI_OP(OP_MOVE_I4_TO_F, "move_i4_to_f", FREG, IREG, NONE)
+/* These 2 are only available on 64-bit targets. */
+MINI_OP(OP_MOVE_F_TO_I8, "move_f_to_i8", IREG, FREG, NONE)
+MINI_OP(OP_MOVE_I8_TO_F, "move_i8_to_f", FREG, IREG, NONE)
 
 MINI_OP(OP_VZERO,   "vzero", VREG, NONE, NONE)
 
@@ -454,6 +470,17 @@ MINI_OP(OP_FBGT_UN, "float_bgt_un", NONE, NONE, NONE)
 MINI_OP(OP_FBLE_UN, "float_ble_un", NONE, NONE, NONE)
 MINI_OP(OP_FBLT_UN, "float_blt_un", NONE, NONE, NONE)
 
+MINI_OP(OP_RBEQ,    "r4_beq", NONE, NONE, NONE)
+MINI_OP(OP_RBGE,    "r4_bge", NONE, NONE, NONE)
+MINI_OP(OP_RBGT,    "r4_bgt", NONE, NONE, NONE)
+MINI_OP(OP_RBLE,    "r4_ble", NONE, NONE, NONE)
+MINI_OP(OP_RBLT,    "r4_blt", NONE, NONE, NONE)
+MINI_OP(OP_RBNE_UN, "r4_bne_un", NONE, NONE, NONE)
+MINI_OP(OP_RBGE_UN, "r4_bge_un", NONE, NONE, NONE)
+MINI_OP(OP_RBGT_UN, "r4_bgt_un", NONE, NONE, NONE)
+MINI_OP(OP_RBLE_UN, "r4_ble_un", NONE, NONE, NONE)
+MINI_OP(OP_RBLT_UN, "r4_blt_un", NONE, NONE, NONE)
+
 /* float opcodes: must be in the same order as the matching CEE_ opcodes: binops_op_map */
 MINI_OP(OP_FADD,   "float_add", FREG, FREG, FREG)
 MINI_OP(OP_FSUB,   "float_sub", FREG, FREG, FREG)
@@ -463,6 +490,15 @@ MINI_OP(OP_FDIV_UN,"float_div_un", FREG, FREG, FREG)
 MINI_OP(OP_FREM,   "float_rem", FREG, FREG, FREG)
 MINI_OP(OP_FREM_UN,"float_rem_un", FREG, FREG, FREG)
 
+/* r4 opcodes: must be in the same order as the matching CEE_ opcodes: binops_op_map */
+MINI_OP(OP_RADD,   "r4_add", FREG, FREG, FREG)
+MINI_OP(OP_RSUB,   "r4_sub", FREG, FREG, FREG)
+MINI_OP(OP_RMUL,   "r4_mul", FREG, FREG, FREG)
+MINI_OP(OP_RDIV,   "r4_div", FREG, FREG, FREG)
+MINI_OP(OP_RDIV_UN,"r4_div_un", FREG, FREG, FREG)
+MINI_OP(OP_RREM,   "r4_rem", FREG, FREG, FREG)
+MINI_OP(OP_RREM_UN,"r4_rem_un", FREG, FREG, FREG)
+
 /* float opcodes: must be in the same order as the matching CEE_ opcodes: unops_op_map */
 MINI_OP(OP_FNEG,       "float_neg", FREG, FREG, NONE)
 MINI_OP(OP_FNOT,       "float_not", FREG, FREG, NONE)
@@ -475,12 +511,25 @@ MINI_OP(OP_FCONV_TO_R8,"float_conv_to_r8", FREG, FREG, NONE)
 MINI_OP(OP_FCONV_TO_U4,"float_conv_to_u4", IREG, FREG, NONE)
 MINI_OP(OP_FCONV_TO_U8,"float_conv_to_u8", LREG, FREG, NONE)
 
+MINI_OP(OP_RNEG,       "r4_neg", FREG, FREG, NONE)
+MINI_OP(OP_RNOT,       "r4_not", FREG, FREG, NONE)
+MINI_OP(OP_RCONV_TO_I1,"r4_conv_to_i1", IREG, FREG, NONE)
+MINI_OP(OP_RCONV_TO_I2,"r4_conv_to_i2", IREG, FREG, NONE)
+MINI_OP(OP_RCONV_TO_I4,"r4_conv_to_i4", IREG, FREG, NONE)
+MINI_OP(OP_RCONV_TO_I8,"r4_conv_to_i8", LREG, FREG, NONE)
+MINI_OP(OP_RCONV_TO_R4,"r4_conv_to_r4", FREG, FREG, NONE)
+MINI_OP(OP_RCONV_TO_R8,"r4_conv_to_r8", FREG, FREG, NONE)
+MINI_OP(OP_RCONV_TO_U4,"r4_conv_to_u4", IREG, FREG, NONE)
+MINI_OP(OP_RCONV_TO_U8,"r4_conv_to_u8", LREG, FREG, NONE)
+
+/* float opcodes: must be in the same order as the matching CEE_ opcodes: ovfops_op_map */
 MINI_OP(OP_FCONV_TO_U2,   "float_conv_to_u2", IREG, FREG, NONE)
 MINI_OP(OP_FCONV_TO_U1,   "float_conv_to_u1", IREG, FREG, NONE)
 MINI_OP(OP_FCONV_TO_I,    "float_conv_to_i", IREG, FREG, NONE)
 MINI_OP(OP_FCONV_TO_OVF_I,"float_conv_to_ovf_i", IREG, FREG, NONE)
 MINI_OP(OP_FCONV_TO_OVF_U,"float_conv_to_ovd_u", IREG, FREG, NONE)
 
+/* float opcodes: must be in the same order as the matching CEE_ opcodes: ovfops_op_map */
 MINI_OP(OP_FADD_OVF,      "float_add_ovf", FREG, FREG, FREG)
 MINI_OP(OP_FADD_OVF_UN,   "float_add_ovf_un", FREG, FREG, FREG)
 MINI_OP(OP_FMUL_OVF,      "float_mul_ovf", FREG, FREG, FREG)
@@ -528,6 +577,52 @@ MINI_OP(OP_FCLT_UN_MEMBASE,"float_clt_un_membase", IREG, FREG, IREG)
 MINI_OP(OP_FCONV_TO_U, "float_conv_to_u", IREG, FREG, NONE)
 MINI_OP(OP_CKFINITE, "ckfinite", FREG, FREG, NONE)
 
+/* r4 opcodes: must be in the same order as the matching CEE_ opcodes: ovfops_op_map */
+MINI_OP(OP_RCONV_TO_U2,   "r4_conv_to_u2", IREG, FREG, NONE)
+MINI_OP(OP_RCONV_TO_U1,   "r4_conv_to_u1", IREG, FREG, NONE)
+MINI_OP(OP_RCONV_TO_I,    "r4_conv_to_i", IREG, FREG, NONE)
+MINI_OP(OP_RCONV_TO_OVF_I,"r4_conv_to_ovf_i", IREG, FREG, NONE)
+MINI_OP(OP_RCONV_TO_OVF_U,"r4_conv_to_ovd_u", IREG, FREG, NONE)
+
+/* r4 opcodes: must be in the same order as the matching CEE_ opcodes: ovfops_op_map */
+MINI_OP(OP_RADD_OVF,      "r4_add_ovf", FREG, FREG, FREG)
+MINI_OP(OP_RADD_OVF_UN,   "r4_add_ovf_un", FREG, FREG, FREG)
+MINI_OP(OP_RMUL_OVF,      "r4_mul_ovf", FREG, FREG, FREG)
+MINI_OP(OP_RMUL_OVF_UN,   "r4_mul_ovf_un", FREG, FREG, FREG)
+MINI_OP(OP_RSUB_OVF,      "r4_sub_ovf", FREG, FREG, FREG)
+MINI_OP(OP_RSUB_OVF_UN,   "r4_sub_ovf_un", FREG, FREG, FREG)
+
+MINI_OP(OP_RCONV_TO_OVF_I1_UN,"r4_conv_to_ovf_i1_un", IREG, FREG, NONE)
+MINI_OP(OP_RCONV_TO_OVF_I2_UN,"r4_conv_to_ovf_i2_un", IREG, FREG, NONE)
+MINI_OP(OP_RCONV_TO_OVF_I4_UN,"r4_conv_to_ovf_i4_un", IREG, FREG, NONE)
+MINI_OP(OP_RCONV_TO_OVF_I8_UN,"r4_conv_to_ovf_i8_un", IREG, FREG, NONE)
+MINI_OP(OP_RCONV_TO_OVF_U1_UN,"r4_conv_to_ovf_u1_un", IREG, FREG, NONE)
+MINI_OP(OP_RCONV_TO_OVF_U2_UN,"r4_conv_to_ovf_u2_un", IREG, FREG, NONE)
+MINI_OP(OP_RCONV_TO_OVF_U4_UN,"r4_conv_to_ovf_u4_un", IREG, FREG, NONE)
+MINI_OP(OP_RCONV_TO_OVF_U8_UN,"r4_conv_to_ovf_u8_un", IREG, FREG, NONE)
+MINI_OP(OP_RCONV_TO_OVF_I_UN, "r4_conv_to_ovf_i_un", IREG, FREG, NONE)
+MINI_OP(OP_RCONV_TO_OVF_U_UN, "r4_conv_to_ovf_u_un", IREG, FREG, NONE)
+
+MINI_OP(OP_RCONV_TO_OVF_I1,"r4_conv_to_ovf_i1", IREG, FREG, NONE)
+MINI_OP(OP_RCONV_TO_OVF_U1,"r4_conv_to_ovf_u1", IREG, FREG, NONE)
+MINI_OP(OP_RCONV_TO_OVF_I2,"r4_conv_to_ovf_i2", IREG, FREG, NONE)
+MINI_OP(OP_RCONV_TO_OVF_U2,"r4_conv_to_ovf_u2", IREG, FREG, NONE)
+MINI_OP(OP_RCONV_TO_OVF_I4,"r4_conv_to_ovf_i4", IREG, FREG, NONE)
+MINI_OP(OP_RCONV_TO_OVF_U4,"r4_conv_to_ovf_u4", IREG, FREG, NONE)
+MINI_OP(OP_RCONV_TO_OVF_I8,"r4_conv_to_ovf_i8", IREG, FREG, NONE)
+MINI_OP(OP_RCONV_TO_OVF_U8,"r4_conv_to_ovf_u8", IREG, FREG, NONE)
+
+/* r4 opcodes: must be in the same order as the matching CEE_ opcodes: ceqops_op_map */
+MINI_OP(OP_RCEQ,   "r4_ceq", IREG, FREG, FREG)
+MINI_OP(OP_RCGT,   "r4_cgt", IREG, FREG, FREG)
+MINI_OP(OP_RCGT_UN,"r4_cgt_un", IREG, FREG, FREG)
+MINI_OP(OP_RCLT,   "r4_clt", IREG, FREG, FREG)
+MINI_OP(OP_RCLT_UN,"r4_clt_un", IREG, FREG, FREG)
+
+MINI_OP(OP_RCNEQ,  "r4_cneq", IREG, FREG, FREG)
+MINI_OP(OP_RCGE,   "r4_cge", IREG, FREG, FREG)
+MINI_OP(OP_RCLE,   "r4_cle", IREG, FREG, FREG)
+
 /* Return the low 32 bits of a double vreg */
 MINI_OP(OP_FGETLOW32, "float_getlow32", IREG, FREG, NONE)
 /* Return the high 32 bits of a double vreg */
@@ -790,7 +885,7 @@ MINI_OP(OP_PSHLQ, "pshlq", XREG, XREG, NONE)
 MINI_OP(OP_PSHLQ_REG, "pshlq_reg", XREG, XREG, XREG)
 
 MINI_OP(OP_EXTRACT_I4, "extract_i4", IREG, XREG, NONE)
-MINI_OP(OP_ICONV_TO_R8_RAW, "iconv_to_r8_raw", FREG, IREG, NONE)
+MINI_OP(OP_ICONV_TO_R4_RAW, "iconv_to_r4_raw", FREG, IREG, NONE)
 
 MINI_OP(OP_EXTRACT_I2, "extract_i2", IREG, XREG, NONE)
 MINI_OP(OP_EXTRACT_U2, "extract_u2", IREG, XREG, NONE)
index 907fe766c9c1219742d862bc1844896111d358b8..80a6c8af2481f1850e4fb7ebb3befd1125f774b3 100644 (file)
@@ -3709,7 +3709,8 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
                CASE_PPC32 (OP_ICONV_TO_I4)
                CASE_PPC32 (OP_ICONV_TO_U4)
                case OP_MOVE:
-                       ppc_mr (code, ins->dreg, ins->sreg1);
+                       if (ins->dreg != ins->sreg1)
+                               ppc_mr (code, ins->dreg, ins->sreg1);
                        break;
                case OP_SETLRET: {
                        int saved = ins->sreg1;
@@ -3724,7 +3725,8 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
                        break;
                }
                case OP_FMOVE:
-                       ppc_fmr (code, ins->dreg, ins->sreg1);
+                       if (ins->dreg != ins->sreg1)
+                               ppc_fmr (code, ins->dreg, ins->sreg1);
                        break;
                case OP_FCONV_TO_R4:
                        ppc_frsp (code, ins->dreg, ins->sreg1);
index 83bbe416a86d68c7e8a09a945f38f55e73957f23..3676ab578b7f1318326a1fd6b0983aa4d660a5d4 100644 (file)
@@ -3827,20 +3827,30 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
                        EMIT_COND_SYSTEM_EXCEPTION (S390_CC_LT, "OverflowException");
                        s390_lgfr (code, ins->dreg, ins->sreg1);
                        break;
-               case OP_FMOVE: {
+               case OP_FMOVE:
                        if (ins->dreg != ins->sreg1) {
                                s390_ldr   (code, ins->dreg, ins->sreg1);
                        }
-               }
                        break;
-               case OP_FCONV_TO_R4: {
+               case OP_MOVE_F_TO_I8: 
+                       s390_lgdr (code, ins->dreg, ins->sreg1);
+                       break;
+               case OP_MOVE_I8_TO_F: 
+                       s390_ldgr (code, ins->dreg, ins->sreg1);
+                       break;
+               case OP_MOVE_F_TO_I4:
+                       s390_lgdr (code, ins->dreg, ins->sreg1);
+                       break;
+               case OP_MOVE_I4_TO_F: 
+                       s390_lgfr (code, s390_r0, ins->sreg1);
+                       s390_ldgr (code, ins->dreg, s390_r0);
+                       break;
+               case OP_FCONV_TO_R4:
                        s390_ledbr (code, ins->dreg, ins->sreg1);
                        s390_ldebr (code, ins->dreg, ins->dreg);
-               }
                        break;
-               case OP_S390_SETF4RET: {
+               case OP_S390_SETF4RET:
                        s390_ledbr (code, ins->dreg, ins->sreg1);
-               }
                        break;
                case OP_TLS_GET: {
                        if (s390_is_imm16 (ins->inst_offset)) {
index 027bb055052a44b8cd5426f37ebb76af12eef646..25c5d0e85c15ec9c377f50ebb6e78499b49e15f2 100644 (file)
@@ -2289,7 +2289,7 @@ static int tls_gs_offset;
 gboolean
 mono_x86_have_tls_get (void)
 {
-#ifdef __APPLE__
+#ifdef TARGET_MACH
        static gboolean have_tls_get = FALSE;
        static gboolean inited = FALSE;
        guint32 *ins;
@@ -3174,7 +3174,8 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
                        x86_push_membase (code, ins->inst_basereg, 0xf0f0f0f0);
                        break;
                case OP_MOVE:
-                       x86_mov_reg_reg (code, ins->dreg, ins->sreg1, 4);
+                       if (ins->dreg != ins->sreg1)
+                               x86_mov_reg_reg (code, ins->dreg, ins->sreg1, 4);
                        break;
                case OP_TAILCALL: {
                        MonoCallInst *call = (MonoCallInst*)ins;
@@ -3700,6 +3701,14 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
                case OP_FMOVE:
                        /* Not needed on the fp stack */
                        break;
+               case OP_MOVE_F_TO_I4:
+                       x86_fst_membase (code, ins->backend.spill_var->inst_basereg, ins->backend.spill_var->inst_offset, FALSE, TRUE);
+                       x86_mov_reg_membase (code, ins->dreg, ins->backend.spill_var->inst_basereg, ins->backend.spill_var->inst_offset, 4);
+                       break;
+               case OP_MOVE_I4_TO_F:
+                       x86_mov_membase_reg (code, ins->backend.spill_var->inst_basereg, ins->backend.spill_var->inst_offset, ins->sreg1, 4);
+                       x86_fld_membase (code, ins->backend.spill_var->inst_basereg, ins->backend.spill_var->inst_offset, FALSE);
+                       break;
                case OP_FADD:
                        x86_fp_op_reg (code, X86_FADD, 1, TRUE);
                        break;
@@ -4921,10 +4930,6 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
                case OP_XZERO:
                        x86_sse_alu_pd_reg_reg (code, X86_SSE_PXOR, ins->dreg, ins->dreg);
                        break;
-               case OP_ICONV_TO_R8_RAW:
-                       x86_mov_membase_reg (code, ins->backend.spill_var->inst_basereg, ins->backend.spill_var->inst_offset, ins->sreg1, 4);
-                       x86_fld_membase (code, ins->backend.spill_var->inst_basereg, ins->backend.spill_var->inst_offset, FALSE);
-                       break;
 
                case OP_FCONV_TO_R8_X:
                        x86_fst_membase (code, ins->backend.spill_var->inst_basereg, ins->backend.spill_var->inst_offset, TRUE, TRUE);
index d6c93c7ce6550cd1a86c352e8383399b27794650..ba3b0d890e0cf047104940026a3a552ba7ab8426 100755 (executable)
@@ -141,9 +141,6 @@ mono_breakpoint_info_index [MONO_BREAKPOINT_ARRAY_SIZE];
 /* Whenever to check for pending exceptions in managed-to-native wrappers */
 gboolean check_for_pending_exc = TRUE;
 
-/* Whenever to disable passing/returning small valuetypes in registers for managed methods */
-gboolean disable_vtypes_in_regs = FALSE;
-
 static GSList *tramp_infos;
 
 static void register_icalls (void);
@@ -1383,6 +1380,20 @@ mono_compile_make_var_load (MonoCompile *cfg, MonoInst *dest, gssize var_index)
        dest->klass = dest->inst_i0->klass;
 }
 
+MonoInst*
+mini_get_int_to_float_spill_area (MonoCompile *cfg)
+{
+#ifdef TARGET_X86
+       if (!cfg->iconv_raw_var) {
+               cfg->iconv_raw_var = mono_compile_create_var (cfg, &mono_defaults.int32_class->byval_arg, OP_LOCAL);
+               cfg->iconv_raw_var->flags |= MONO_INST_VOLATILE; /*FIXME, use the don't regalloc flag*/
+       }
+       return cfg->iconv_raw_var;
+#else
+       return NULL;
+#endif
+}
+
 #endif
 
 void
@@ -1496,7 +1507,7 @@ mono_add_ins_to_end (MonoBasicBlock *bb, MonoInst *inst)
                                /* Only two instructions */
                                opcode = bb->code->opcode;
 
-                               if ((opcode == OP_COMPARE) || (opcode == OP_COMPARE_IMM) || (opcode == OP_ICOMPARE) || (opcode == OP_ICOMPARE_IMM) || (opcode == OP_FCOMPARE) || (opcode == OP_LCOMPARE) || (opcode == OP_LCOMPARE_IMM)) {
+                               if ((opcode == OP_COMPARE) || (opcode == OP_COMPARE_IMM) || (opcode == OP_ICOMPARE) || (opcode == OP_ICOMPARE_IMM) || (opcode == OP_FCOMPARE) || (opcode == OP_LCOMPARE) || (opcode == OP_LCOMPARE_IMM) || (opcode == OP_RCOMPARE)) {
                                        /* NEW IR */
                                        mono_bblock_insert_before_ins (bb, bb->code, inst);
                                } else {
@@ -1505,7 +1516,7 @@ mono_add_ins_to_end (MonoBasicBlock *bb, MonoInst *inst)
                        } else {
                                opcode = bb->last_ins->prev->opcode;
 
-                               if ((opcode == OP_COMPARE) || (opcode == OP_COMPARE_IMM) || (opcode == OP_ICOMPARE) || (opcode == OP_ICOMPARE_IMM) || (opcode == OP_FCOMPARE) || (opcode == OP_LCOMPARE) || (opcode == OP_LCOMPARE_IMM)) {
+                               if ((opcode == OP_COMPARE) || (opcode == OP_COMPARE_IMM) || (opcode == OP_ICOMPARE) || (opcode == OP_ICOMPARE_IMM) || (opcode == OP_FCOMPARE) || (opcode == OP_LCOMPARE) || (opcode == OP_LCOMPARE_IMM) || (opcode == OP_RCOMPARE)) {
                                        /* NEW IR */
                                        mono_bblock_insert_before_ins (bb, bb->last_ins->prev, inst);
                                } else {
@@ -4885,6 +4896,11 @@ mini_method_compile (MonoMethod *method, guint32 opts, MonoDomain *domain, JitFl
        cfg->compile_llvm = try_llvm;
        cfg->token_info_hash = g_hash_table_new (NULL, NULL);
 
+       if (!mono_debug_count ())
+               cfg->opt &= ~MONO_OPT_FLOAT32;
+       cfg->r4fp = (cfg->opt & MONO_OPT_FLOAT32) ? 1 : 0;
+       cfg->r4_stack_type = cfg->r4fp ? STACK_R4 : STACK_R8;
+
        if (cfg->gen_seq_points)
                cfg->seq_points = g_ptr_array_new ();
        mono_error_init (&cfg->error);
@@ -7516,9 +7532,12 @@ register_icalls (void)
        register_opcode_emulation (OP_FCONV_TO_U4, "__emul_fconv_to_u4", "uint32 double", mono_fconv_u4, "mono_fconv_u4", FALSE);
        register_opcode_emulation (OP_FCONV_TO_OVF_I8, "__emul_fconv_to_ovf_i8", "long double", mono_fconv_ovf_i8, "mono_fconv_ovf_i8", FALSE);
        register_opcode_emulation (OP_FCONV_TO_OVF_U8, "__emul_fconv_to_ovf_u8", "ulong double", mono_fconv_ovf_u8, "mono_fconv_ovf_u8", FALSE);
+       register_opcode_emulation (OP_RCONV_TO_OVF_I8, "__emul_rconv_to_ovf_i8", "long float", mono_rconv_ovf_i8, "mono_rconv_ovf_i8", FALSE);
+       register_opcode_emulation (OP_RCONV_TO_OVF_U8, "__emul_rconv_to_ovf_u8", "ulong float", mono_rconv_ovf_u8, "mono_rconv_ovf_u8", FALSE);
 
 #ifdef MONO_ARCH_EMULATE_FCONV_TO_I8
        register_opcode_emulation (OP_FCONV_TO_I8, "__emul_fconv_to_i8", "long double", mono_fconv_i8, "mono_fconv_i8", FALSE);
+       register_opcode_emulation (OP_RCONV_TO_I8, "__emul_rconv_to_i8", "long float", mono_rconv_i8, "mono_rconv_i8", FALSE);
 #endif
 #ifdef MONO_ARCH_EMULATE_CONV_R8_UN
        register_opcode_emulation (OP_ICONV_TO_R_UN, "__emul_iconv_to_r_un", "double int32", mono_conv_to_r8_un, "mono_conv_to_r8_un", FALSE);
index 5f02bc56e1ad707a1165c1ac4fda0781a4fc3d22..6ca7bec56698cc3219e6362f9cbcb840ff4048dd 100755 (executable)
@@ -431,7 +431,7 @@ enum {
 #define MONO_IS_STORE_MEMBASE(ins) (((ins)->opcode >= OP_STORE_MEMBASE_REG && (ins)->opcode <= OP_STOREV_MEMBASE) || ((ins)->opcode >= OP_ATOMIC_STORE_I1 && (ins)->opcode <= OP_ATOMIC_STORE_R8))
 #define MONO_IS_STORE_MEMINDEX(ins) (((ins)->opcode >= OP_STORE_MEMINDEX) && ((ins)->opcode <= OP_STORER8_MEMINDEX))
 
-#define MONO_IS_CALL(ins) (((ins->opcode >= OP_VOIDCALL) && (ins->opcode <= OP_VOIDCALL_MEMBASE)) || ((ins->opcode >= OP_FCALL) && (ins->opcode <= OP_FCALL_MEMBASE)) || ((ins->opcode >= OP_LCALL) && (ins->opcode <= OP_LCALL_MEMBASE)) || ((ins->opcode >= OP_VCALL) && (ins->opcode <= OP_VCALL_MEMBASE)) || ((ins->opcode >= OP_CALL) && (ins->opcode <= OP_CALL_MEMBASE)) || ((ins->opcode >= OP_VCALL2) && (ins->opcode <= OP_VCALL2_MEMBASE)) || (ins->opcode == OP_TAILCALL))
+#define MONO_IS_CALL(ins) (((ins->opcode >= OP_VOIDCALL) && (ins->opcode <= OP_VOIDCALL_MEMBASE)) || ((ins->opcode >= OP_FCALL) && (ins->opcode <= OP_FCALL_MEMBASE)) || ((ins->opcode >= OP_LCALL) && (ins->opcode <= OP_LCALL_MEMBASE)) || ((ins->opcode >= OP_VCALL) && (ins->opcode <= OP_VCALL_MEMBASE)) || ((ins->opcode >= OP_CALL) && (ins->opcode <= OP_CALL_MEMBASE)) || ((ins->opcode >= OP_VCALL2) && (ins->opcode <= OP_VCALL2_MEMBASE)) || (ins->opcode == OP_TAILCALL) || ((ins->opcode >= OP_RCALL) && (ins->opcode <= OP_RCALL_MEMBASE)))
 
 #define MONO_IS_JUMP_TABLE(ins) (((ins)->opcode == OP_JUMP_TABLE) ? TRUE : ((((ins)->opcode == OP_AOTCONST) && (ins->inst_i1 == (gpointer)MONO_PATCH_INFO_SWITCH)) ? TRUE : ((ins)->opcode == OP_SWITCH) ? TRUE : ((((ins)->opcode == OP_GOT_ENTRY) && ((ins)->inst_right->inst_i1 == (gpointer)MONO_PATCH_INFO_SWITCH)) ? TRUE : FALSE)))
 
@@ -447,9 +447,9 @@ enum {
 #ifdef MONO_ARCH_SIMD_INTRINSICS
 
 #define MONO_IS_PHI(ins) (((ins)->opcode == OP_PHI) || ((ins)->opcode == OP_FPHI) || ((ins)->opcode == OP_VPHI)  || ((ins)->opcode == OP_XPHI))
-#define MONO_IS_MOVE(ins) (((ins)->opcode == OP_MOVE) || ((ins)->opcode == OP_FMOVE) || ((ins)->opcode == OP_VMOVE) || ((ins)->opcode == OP_XMOVE))
+#define MONO_IS_MOVE(ins) (((ins)->opcode == OP_MOVE) || ((ins)->opcode == OP_FMOVE) || ((ins)->opcode == OP_VMOVE) || ((ins)->opcode == OP_XMOVE) || ((ins)->opcode == OP_RMOVE))
 #define MONO_IS_NON_FP_MOVE(ins) (((ins)->opcode == OP_MOVE) || ((ins)->opcode == OP_VMOVE) || ((ins)->opcode == OP_XMOVE))
-#define MONO_IS_REAL_MOVE(ins) (((ins)->opcode == OP_MOVE) || ((ins)->opcode == OP_FMOVE) || ((ins)->opcode == OP_XMOVE))
+#define MONO_IS_REAL_MOVE(ins) (((ins)->opcode == OP_MOVE) || ((ins)->opcode == OP_FMOVE) || ((ins)->opcode == OP_XMOVE) || ((ins)->opcode == OP_RMOVE))
 #define MONO_IS_ZERO(ins) (((ins)->opcode == OP_VZERO) || ((ins)->opcode == OP_XZERO))
 
 #define MONO_CLASS_IS_SIMD(cfg, klass) (((cfg)->opt & MONO_OPT_SIMD) && (klass)->simd_type)
@@ -457,10 +457,10 @@ enum {
 #else
 
 #define MONO_IS_PHI(ins) (((ins)->opcode == OP_PHI) || ((ins)->opcode == OP_FPHI) || ((ins)->opcode == OP_VPHI))
-#define MONO_IS_MOVE(ins) (((ins)->opcode == OP_MOVE) || ((ins)->opcode == OP_FMOVE) || ((ins)->opcode == OP_VMOVE))
+#define MONO_IS_MOVE(ins) (((ins)->opcode == OP_MOVE) || ((ins)->opcode == OP_FMOVE) || ((ins)->opcode == OP_VMOVE) || ((ins)->opcode == OP_RMOVE))
 #define MONO_IS_NON_FP_MOVE(ins) (((ins)->opcode == OP_MOVE) || ((ins)->opcode == OP_VMOVE))
 /*A real MOVE is one that isn't decomposed such as a VMOVE or LMOVE*/
-#define MONO_IS_REAL_MOVE(ins) (((ins)->opcode == OP_MOVE) || ((ins)->opcode == OP_FMOVE))
+#define MONO_IS_REAL_MOVE(ins) (((ins)->opcode == OP_MOVE) || ((ins)->opcode == OP_FMOVE) || ((ins)->opcode == OP_RMOVE))
 #define MONO_IS_ZERO(ins) ((ins)->opcode == OP_VZERO)
 
 #define MONO_CLASS_IS_SIMD(cfg, klass) (0)
@@ -489,7 +489,6 @@ extern int mono_inject_async_exc_pos;
 extern MonoMethodDesc *mono_break_at_bb_method;
 extern int mono_break_at_bb_bb_num;
 extern gboolean check_for_pending_exc;
-extern gboolean disable_vtypes_in_regs;
 extern gboolean mono_verify_all;
 extern gboolean mono_do_x86_stack_align;
 extern const char *mono_build_date;
@@ -704,13 +703,28 @@ typedef enum {
        LLVMArgVtypeByVal,
        LLVMArgVtypeRetAddr, /* On on cinfo->ret */
        LLVMArgGSharedVt,
+       /* Vtype passed as one int array argument */
+       LLVMArgAsIArgs,
+       /* Vtype passed as a set of fp arguments */
+       LLVMArgAsFpArgs
 } LLVMArgStorage;
 
 typedef struct {
        LLVMArgStorage storage;
 
-       /* Only if storage == ArgValuetypeInReg */
-       LLVMArgStorage pair_storage [2];
+       /*
+        * Only if storage == ArgValuetypeInReg/LLVMArgAsFpArgs.
+        * This contains how the parts of the vtype are passed.
+        */
+       LLVMArgStorage pair_storage [8];
+       /*
+        * Only if storage == LLVMArgAsIArgs/LLVMArgAsFpArgs.
+        * If storage == LLVMArgAsFpArgs, this is the number of arguments
+        * used to pass the value.
+        */
+       int nslots;
+       /* Only if storage == LLVMArgAsFpArgs (4/8) */
+       int esize;
 } LLVMArgInfo;
 
 typedef struct {
@@ -780,7 +794,7 @@ struct MonoInst {
                gint shift_amount;
                gboolean is_pinvoke; /* for variables in the unmanaged marshal format */
                gboolean record_cast_details; /* For CEE_CASTCLASS */
-               MonoInst *spill_var; /* for OP_ICONV_TO_R8_RAW and OP_FCONV_TO_R8_X */
+               MonoInst *spill_var; /* for OP_MOVE_I4_TO_F/F_TO_I4 and OP_FCONV_TO_R8_X */
                guint16 source_opcode; /*OP_XCONV_R8_TO_I4 needs to know which op was used to do proper widening*/
                int pc_offset; /* OP_GC_LIVERANGE_START/END */
 
@@ -1503,6 +1517,8 @@ typedef struct {
        guint            disable_inline : 1;
        guint            gshared : 1;
        guint            gsharedvt : 1;
+       guint            r4fp : 1;
+       int              r4_stack_type;
        gpointer         debug_info;
        guint32          lmf_offset;
     guint16          *intvars;
@@ -1563,7 +1579,7 @@ typedef struct {
           mini-ppc.c. */
        MonoInst **tailcall_valuetype_addrs;
 
-       /* Used to implement iconv_to_r8_raw on archs that can't do raw
+       /* Used to implement move_i4_to_f on archs that can't do raw
        copy between an ireg and a freg. This is an int32 var.*/
        MonoInst *iconv_raw_var;
 
@@ -1781,6 +1797,7 @@ typedef enum {
        STACK_MP,
        STACK_OBJ,
        STACK_VTYPE,
+       STACK_R4,
        STACK_MAX
 } MonoStackType;
 
@@ -2053,6 +2070,7 @@ MonoInst* mono_compile_create_var_for_vreg  (MonoCompile *cfg, MonoType *type, i
 void      mono_compile_make_var_load        (MonoCompile *cfg, MonoInst *dest, gssize var_index) MONO_INTERNAL;
 MonoInst* mono_compile_create_var_load      (MonoCompile *cfg, gssize var_index) MONO_INTERNAL;
 MonoInst* mono_compile_create_var_store     (MonoCompile *cfg, gssize var_index, MonoInst *value) MONO_INTERNAL;
+MonoInst* mini_get_int_to_float_spill_area  (MonoCompile *cfg) MONO_INTERNAL;
 MonoType* mono_type_from_stack_type         (MonoInst *ins) MONO_INTERNAL;
 guint32   mono_alloc_ireg                   (MonoCompile *cfg) MONO_LLVM_INTERNAL;
 guint32   mono_alloc_lreg                   (MonoCompile *cfg) MONO_LLVM_INTERNAL;
@@ -2257,6 +2275,7 @@ void     mono_llvm_create_aot_module        (const char *got_symbol, gboolean ex
 void     mono_llvm_emit_aot_module          (const char *filename, const char *cu_name) MONO_LLVM_INTERNAL;
 void     mono_llvm_check_method_supported   (MonoCompile *cfg) MONO_LLVM_INTERNAL;
 void     mono_llvm_free_domain_info         (MonoDomain *domain) MONO_LLVM_INTERNAL;
+MONO_API void mono_personality              (void);
 
 gboolean mini_llvm_init                     (void);
 
@@ -2350,6 +2369,7 @@ MonoTrampInfo*    mono_tramp_info_create (const char *name, guint8 *code, guint3
 void              mono_tramp_info_free (MonoTrampInfo *info) MONO_INTERNAL;
 void              mono_tramp_info_register (MonoTrampInfo *info) MONO_INTERNAL;
 int               mini_exception_id_by_name (const char *name) MONO_INTERNAL;
+gboolean          mini_type_is_hfa (MonoType *t, int *out_nfields, int *out_esize) MONO_LLVM_INTERNAL;
 
 int               mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_bblock, MonoBasicBlock *end_bblock, 
                                                                         MonoInst *return_var, MonoInst **inline_args,
@@ -2842,7 +2862,7 @@ guint32     mono_arch_cpu_enumerate_simd_versions (void) MONO_INTERNAL;
 void        mono_simd_intrinsics_init (void) MONO_INTERNAL;
 
 MonoInst*   mono_emit_native_types_intrinsics (MonoCompile *cfg, MonoMethod *cmethod, MonoMethodSignature *fsig, MonoInst **args) MONO_INTERNAL;
-MonoType*   mini_native_type_replace_type (MonoType *type) MONO_INTERNAL;
+MonoType*   mini_native_type_replace_type (MonoType *type) MONO_LLVM_INTERNAL;
 
 #ifdef __linux__
 /* maybe enable also for other systems? */
index bee894bdc5571b11a7fe175c8f100d141e58b217..c811f3ec3be51ee6835c0d9e25d788aa62c84ed5 100644 (file)
@@ -27,3 +27,5 @@ OPTFLAG(GSHAREDVT,24, "gsharedvt",    "Generic sharing for valuetypes")
 OPTFLAG(SIMD    ,26, "simd",       "Simd intrinsics")
 OPTFLAG(UNSAFE  ,27, "unsafe",     "Remove bound checks and perform other dangerous changes")
 OPTFLAG(ALIAS_ANALYSIS  ,28, "alias-analysis",      "Alias analysis of locals")
+OPTFLAG(FLOAT32  ,29, "float32",    "Use 32 bit float arithmetic if possible")
+
index 0324d22a99b7f3662eccf15dfd1509536b06d89d..bf1e37d31b1f489371ddfe15ebcfcd61cc011af1 100644 (file)
@@ -28,7 +28,7 @@ TODO add support for fusing a XMOVE into a simd op in mono_spill_global_vars.
 TODO add stuff to man pages
 TODO document this under /docs
 TODO make passing a xmm as argument not cause it to be LDADDR'ed (introduce an OP_XPUSH)
-TODO revamp the .ctor sequence as it looks very fragile, maybe use a var just like iconv_to_r8_raw. (or just pinst sse ops) 
+TODO revamp the .ctor sequence as it looks very fragile, maybe use a var just like move_i4_to_f. (or just pinst sse ops) 
 TODO figure out what's wrong with OP_STOREX_MEMBASE_REG and OP_STOREX_MEMBASE (the 2nd is for imm operands)
 TODO maybe add SSE3 emulation on top of SSE2, or just implement the corresponding functions using SSE2 intrinsics.
 TODO pass simd arguments in registers or, at least, add SSE support for pushing large (>=16) valuetypes 
@@ -772,13 +772,15 @@ mono_simd_simplify_indirection (MonoCompile *cfg)
 
                        num_sregs = mono_inst_get_src_registers (ins, sregs);
                        for (j = 0; j < num_sregs; ++j) {
-                               if (sregs [i] == var->dreg)
+                               if (sregs [j] == var->dreg)
                                        found = TRUE;
                        }
                        /*We can avoid inserting the XZERO if the first use doesn't depend on the zero'ed value.*/
                        if (ins->dreg == var->dreg && !found) {
+                               DEBUG (printf ("[simd-simplify] INGORING R%d on BB %d because first op is a def", i, target_bb [var->dreg]->block_num););
                                break;
                        } else if (found) {
+                               DEBUG (printf ("[simd-simplify] Adding XZERO for R%d on BB %d: ", i, target_bb [var->dreg]->block_num); );
                                MonoInst *tmp;
                                MONO_INST_NEW (cfg, tmp, OP_XZERO);
                                tmp->dreg = var->dreg;
@@ -791,8 +793,10 @@ mono_simd_simplify_indirection (MonoCompile *cfg)
        }
 
        for (ins = first_bb->code; ins; ins = ins->next) {
-               if (ins->opcode == OP_XZERO && (vreg_flags [ins->dreg] & VREG_SINGLE_BB_USE))
+               if (ins->opcode == OP_XZERO && (vreg_flags [ins->dreg] & VREG_SINGLE_BB_USE)) {
+                       DEBUG (printf ("[simd-simplify] Nullify %d on first BB: ", ins->dreg); mono_print_ins(ins));
                        NULLIFY_INS (ins);
+               }
        }
 
        g_free (vreg_flags);
@@ -849,16 +853,6 @@ load_simd_vreg (MonoCompile *cfg, MonoMethod *cmethod, MonoInst *src, gboolean *
        g_assert_not_reached ();
 }
 
-static MonoInst*
-get_int_to_float_spill_area (MonoCompile *cfg)
-{
-       if (!cfg->iconv_raw_var) {
-               cfg->iconv_raw_var = mono_compile_create_var (cfg, &mono_defaults.int32_class->byval_arg, OP_LOCAL);
-               cfg->iconv_raw_var->flags |= MONO_INST_VOLATILE; /*FIXME, use the don't regalloc flag*/
-       }       
-       return cfg->iconv_raw_var;
-}
-
 /*We share the var with fconv_to_r8_x to save some stack space.*/
 static MonoInst*
 get_double_spill_area (MonoCompile *cfg)
@@ -926,7 +920,7 @@ get_simd_vreg_or_expanded_scalar (MonoCompile *cfg, MonoMethod *cmethod, MonoIns
        MONO_ADD_INS (cfg->cbb, ins);
 
        if (expand_op == OP_EXPAND_R4)
-               ins->backend.spill_var = get_int_to_float_spill_area (cfg);
+               ins->backend.spill_var = mini_get_int_to_float_spill_area (cfg);
        else if (expand_op == OP_EXPAND_R8)
                ins->backend.spill_var = get_double_spill_area (cfg);
 
@@ -1088,7 +1082,7 @@ simd_intrinsic_emit_setter (const SimdIntrinsc *intrinsic, MonoCompile *cfg, Mon
                ins->sreg2 = args [1]->dreg;
                ins->inst_c0 = intrinsic->opcode;
                if (sig->params [0]->type == MONO_TYPE_R4)
-                       ins->backend.spill_var = get_int_to_float_spill_area (cfg);
+                       ins->backend.spill_var = mini_get_int_to_float_spill_area (cfg);
                else if (sig->params [0]->type == MONO_TYPE_R8)
                        ins->backend.spill_var = get_double_spill_area (cfg);
                MONO_ADD_INS (cfg->cbb, ins);
@@ -1153,13 +1147,13 @@ simd_intrinsic_emit_getter (const SimdIntrinsc *intrinsic, MonoCompile *cfg, Mon
        MONO_ADD_INS (cfg->cbb, ins);
 
        if (sig->ret->type == MONO_TYPE_R4) {
-               MONO_INST_NEW (cfg, ins, OP_ICONV_TO_R8_RAW);
+               MONO_INST_NEW (cfg, ins, cfg->r4fp ? OP_ICONV_TO_R4_RAW : OP_MOVE_I4_TO_F);
                ins->klass = mono_defaults.single_class;
                ins->sreg1 = vreg;
-               ins->type = STACK_R8;
+               ins->type = cfg->r4_stack_type;
                ins->dreg = alloc_freg (cfg);
-               ins->backend.spill_var = get_int_to_float_spill_area (cfg);
-               MONO_ADD_INS (cfg->cbb, ins);   
+               ins->backend.spill_var = mini_get_int_to_float_spill_area (cfg);
+               MONO_ADD_INS (cfg->cbb, ins);
        }
        return ins;
 }
@@ -1219,7 +1213,7 @@ simd_intrinsic_emit_ctor (const SimdIntrinsc *intrinsic, MonoCompile *cfg, MonoM
 
                MONO_ADD_INS (cfg->cbb, ins);
                if (sig->params [0]->type == MONO_TYPE_R4)
-                       ins->backend.spill_var = get_int_to_float_spill_area (cfg);
+                       ins->backend.spill_var = mini_get_int_to_float_spill_area (cfg);
                else if (sig->params [0]->type == MONO_TYPE_R8)
                        ins->backend.spill_var = get_double_spill_area (cfg);
 
index af2d2ef11f2f13f7aad11aec22879be425a40404..3b29b4d8ad30bcdef51c9e2aaa8667d0206a3d4f 100644 (file)
@@ -799,7 +799,7 @@ mono_arch_create_monitor_enter_trampoline (MonoTrampInfo **info, gboolean is_v4,
        status_offset = MONO_THREADS_SYNC_MEMBER_OFFSET (status_offset);
        nest_offset = MONO_THREADS_SYNC_MEMBER_OFFSET (nest_offset);
 
-       tramp_size = NACL_SIZE (96, 128);
+       tramp_size = NACL_SIZE (128, 192);
 
        code = buf = mono_global_codeman_reserve (tramp_size);
 
@@ -961,7 +961,7 @@ mono_arch_create_monitor_exit_trampoline (MonoTrampInfo **info, gboolean aot)
        status_offset = MONO_THREADS_SYNC_MEMBER_OFFSET (status_offset);
        nest_offset = MONO_THREADS_SYNC_MEMBER_OFFSET (nest_offset);
 
-       tramp_size = NACL_SIZE (96, 128);
+       tramp_size = NACL_SIZE (128, 192);
 
        code = buf = mono_global_codeman_reserve (tramp_size);
 
index 41d1c7d985c90feb5ece59312c244202df83d91a..cb3e70aa21994511c20ec7de9c66d8e2ea4b6bb9 100644 (file)
@@ -2744,13 +2744,6 @@ create_profiler (const char *filename)
                FILE *f;
                if (force_delete)
                        unlink (nf);
-               if ((f = fopen (nf, "r"))) {
-                       fclose (f);
-                       fprintf (stderr, "The Mono profiler won't overwrite existing filename: %s.\n", nf);
-                       fprintf (stderr, "Profiling disabled: use a different name or -FILENAME to force overwrite.\n");
-                       free (prof);
-                       return NULL;
-               }
                prof->file = fopen (nf, "wb");
        }
        if (!prof->file) {
index 1ed2f23656c57de5c52e9fb09f2242d8412dc64a..bf45f625a802884da8e9d51014b9fa50ff322a00 100644 (file)
@@ -840,7 +840,7 @@ runtest-managed: test-runner.exe $(TESTSI_CS) $(TESTSI_IL) $(TESTBS) libtest.la
        $(RUNTIME) ./test-runner.exe -j a --disabled "$${disabled_tests}" $(TESTSI_CS) $(TESTBS) $(TESTSI_IL)
 
 testjit:
-       @if test x$(M) != x; then $(MAKE) runtest-managed; else $(MAKE) runtest; fi
+       @if test x$(M) != x0; then $(MAKE) runtest-managed; else $(MAKE) runtest; fi
 
 testaot:
        @$(MAKE) AOT=1 runtest
@@ -904,12 +904,11 @@ test-cattr-type-load: TestDriver.dll custom-attr-errors.cs custom-attr-errors-li
        @$(RUNTIME) custom-attr-errors.exe > custom-attr-errors.exe.stdout 2> custom-attr-errors.exe.stderr
 
 EXTRA_DIST += reflection-load-with-context-lib.cs reflection-load-with-context-second-lib.cs reflection-load-with-context.cs
-test-reflection-load-with-context: TestDriver.dll reflection-load-with-context-lib.cs reflection-load-with-context-second-lib.cs reflection-load-with-context.cs
+test-reflection-load-with-context: reflection-load-with-context-lib.cs reflection-load-with-context-second-lib.cs reflection-load-with-context.exe
        rm -rf reflection-load-dir
        mkdir reflection-load-dir
        $(MCS) /t:library $(srcdir)/reflection-load-with-context-second-lib.cs -out:reflection-load-dir/reflection-load-with-context-second-lib.dll
        $(MCS) /t:library -r:reflection-load-dir/reflection-load-with-context-second-lib.dll $(srcdir)/reflection-load-with-context-lib.cs -out:reflection-load-dir/reflection-load-with-context-lib.dll
-       $(MCS) reflection-load-with-context.cs
        @echo "Testing reflection-load-with-context.cs.exe..."
        @$(RUNTIME) reflection-load-with-context.exe > reflection-load-with-context.exe.stdout 2> reflection-load-with-context.exe.stderr
 
index cbb14a0ec2301f40538b4085c7524d19796685a8..495a44f457a7c3d2a6372a56ba6fa70a3ec7e3f6 100644 (file)
@@ -33,7 +33,9 @@ typedef int (STDCALL *SimpleDelegate) (int a);
 
 #if defined(WIN32) && defined (_MSC_VER)
 #define LIBTEST_API __declspec(dllexport)
-#else 
+#elif defined(__GNUC__)
+#define LIBTEST_API  __attribute__ ((visibility ("default")))
+#else
 #define LIBTEST_API
 #endif
 
@@ -3540,7 +3542,6 @@ test_method_thunk (int test_id, gpointer test_method_handle, gpointer create_obj
        gpointer test_method, ex = NULL;
        gpointer (STDCALL *CreateObject)(gpointer*);
 
-
        if (!mono_method_get_unmanaged_thunk)
                return 1;
 
index dda3625061ee373af5961780ad343cbc02378c60..6dc6745d53e2453804c79b8191e4deb1366a0d0f 100644 (file)
@@ -30,6 +30,8 @@ using System.IO;
 using System.Threading;
 using System.Diagnostics;
 using System.Collections.Generic;
+using System.Globalization;
+using System.Xml;
 
 //
 // This is a simple test runner with support for parallel execution
@@ -63,6 +65,8 @@ public class TestRunner
                int concurrency = 1;
                int timeout = 2 * 60; // in seconds
 
+               DateTime test_start_time = DateTime.UtcNow;
+
                // FIXME: Add support for runtime arguments + env variables
 
                string disabled_tests = null;
@@ -138,6 +142,7 @@ public class TestRunner
                int nfailed = 0;
 
                var processes = new List<Process> ();
+               var passed = new List<ProcessData> ();
                var failed = new List<ProcessData> ();
                var process_data = new Dictionary<Process, ProcessData> ();
 
@@ -212,6 +217,7 @@ public class TestRunner
                                                        Console.WriteLine ("passed.");
                                                else
                                                        Console.Write (".");
+                                               passed.Add(process_data [dead]);
                                                npassed ++;
                                        } else {
                                                if (concurrency == 1)
@@ -310,6 +316,110 @@ public class TestRunner
                        }
                }
 
+               TimeSpan test_time = DateTime.UtcNow - test_start_time;
+               XmlWriterSettings xmlWriterSettings = new XmlWriterSettings ();
+               xmlWriterSettings.NewLineOnAttributes = true;
+               xmlWriterSettings.Indent = true;
+               using (XmlWriter writer = XmlWriter.Create ("TestResults_runtime.xml", xmlWriterSettings)) {
+                       // <?xml version="1.0" encoding="utf-8" standalone="no"?>
+                       writer.WriteStartDocument ();
+                       // <!--This file represents the results of running a test suite-->
+                       writer.WriteComment ("This file represents the results of running a test suite");
+                       // <test-results name="/home/charlie/Dev/NUnit/nunit-2.5/work/src/bin/Debug/tests/mock-assembly.dll" total="21" errors="1" failures="1" not-run="7" inconclusive="1" ignored="4" skipped="0" invalid="3" date="2010-10-18" time="13:23:35">
+                       writer.WriteStartElement ("test-results");
+                       writer.WriteAttributeString ("name", "runtime-tests.dummy");
+                       writer.WriteAttributeString ("total", (npassed + nfailed).ToString());
+                       writer.WriteAttributeString ("failures", nfailed.ToString());
+                       writer.WriteAttributeString ("not-run", "0");
+                       writer.WriteAttributeString ("date", DateTime.Now.ToString ("yyyy-MM-dd"));
+                       writer.WriteAttributeString ("time", DateTime.Now.ToString ("HH:mm:ss"));
+                       //   <environment nunit-version="2.4.8.0" clr-version="4.0.30319.17020" os-version="Unix 3.13.0.45" platform="Unix" cwd="/home/directhex/Projects/mono/mcs/class/corlib" machine-name="marceline" user="directhex" user-domain="marceline" />
+                       writer.WriteStartElement ("environment");
+                       writer.WriteAttributeString ("nunit-version", "2.4.8.0" );
+                       writer.WriteAttributeString ("clr-version", Environment.Version.ToString() );
+                       writer.WriteAttributeString ("os-version", Environment.OSVersion.ToString() );
+                       writer.WriteAttributeString ("platform", Environment.OSVersion.Platform.ToString() );
+                       writer.WriteAttributeString ("cwd", Environment.CurrentDirectory );
+                       writer.WriteAttributeString ("machine-name", Environment.MachineName );
+                       writer.WriteAttributeString ("user", Environment.UserName );
+                       writer.WriteAttributeString ("user-domain", Environment.UserDomainName );
+                       writer.WriteEndElement ();
+                       //   <culture-info current-culture="en-GB" current-uiculture="en-GB" />
+                       writer.WriteStartElement ("culture-info");
+                       writer.WriteAttributeString ("current-culture", CultureInfo.CurrentCulture.Name );
+                       writer.WriteAttributeString ("current-uiculture", CultureInfo.CurrentUICulture.Name );
+                       writer.WriteEndElement ();
+                       //   <test-suite name="corlib_test_net_4_5.dll" success="True" time="114.318" asserts="0">
+                       writer.WriteStartElement ("test-suite");
+                       writer.WriteAttributeString ("name","runtime-tests.dummy");
+                       writer.WriteAttributeString ("success", (nfailed == 0).ToString());
+                       writer.WriteAttributeString ("time", test_time.Seconds.ToString());
+                       writer.WriteAttributeString ("asserts", nfailed.ToString());
+                       //     <results>
+                       writer.WriteStartElement ("results");
+                       //       <test-suite name="MonoTests" success="True" time="114.318" asserts="0">
+                       writer.WriteStartElement ("test-suite");
+                       writer.WriteAttributeString ("name","MonoTests");
+                       writer.WriteAttributeString ("success", (nfailed == 0).ToString());
+                       writer.WriteAttributeString ("time", test_time.Seconds.ToString());
+                       writer.WriteAttributeString ("asserts", nfailed.ToString());
+                       //         <results>
+                       writer.WriteStartElement ("results");
+                       //           <test-suite name="MonoTests" success="True" time="114.318" asserts="0">
+                       writer.WriteStartElement ("test-suite");
+                       writer.WriteAttributeString ("name","runtime");
+                       writer.WriteAttributeString ("success", (nfailed == 0).ToString());
+                       writer.WriteAttributeString ("time", test_time.Seconds.ToString());
+                       writer.WriteAttributeString ("asserts", nfailed.ToString());
+                       //             <results>
+                       writer.WriteStartElement ("results");
+                       // Dump all passing tests first
+                       foreach (ProcessData pd in passed) {
+                               // <test-case name="MonoTests.Microsoft.Win32.RegistryKeyTest.bug79051" executed="True" success="True" time="0.063" asserts="0" />
+                               writer.WriteStartElement ("test-case");
+                               writer.WriteAttributeString ("name", "MonoTests.runtime." + pd.test);
+                               writer.WriteAttributeString ("executed", "True");
+                               writer.WriteAttributeString ("success", "True");
+                               writer.WriteAttributeString ("time", "0");
+                               writer.WriteAttributeString ("asserts", "0");
+                               writer.WriteEndElement ();
+                       }
+                       // Now dump all failing tests
+                       foreach (ProcessData pd in failed) {
+                               // <test-case name="MonoTests.Microsoft.Win32.RegistryKeyTest.bug79051" executed="True" success="True" time="0.063" asserts="0" />
+                               writer.WriteStartElement ("test-case");
+                               writer.WriteAttributeString ("name", "MonoTests.runtime." + pd.test);
+                               writer.WriteAttributeString ("executed", "True");
+                               writer.WriteAttributeString ("success", "False");
+                               writer.WriteAttributeString ("time", "0");
+                               writer.WriteAttributeString ("asserts", "1");
+                               writer.WriteStartElement ("failure");
+                               writer.WriteStartElement ("message");
+                               writer.WriteCData (DumpPseudoTrace (pd.stdoutFile));
+                               writer.WriteEndElement ();
+                               writer.WriteStartElement ("stack-trace");
+                               writer.WriteCData (DumpPseudoTrace (pd.stderrFile));
+                               writer.WriteEndElement ();
+                               writer.WriteEndElement ();
+                               writer.WriteEndElement ();
+                       }
+                       //             </results>
+                       writer.WriteEndElement ();
+                       //           </test-suite>
+                       writer.WriteEndElement ();
+                       //         </results>
+                       writer.WriteEndElement ();
+                       //       </test-suite>
+                       writer.WriteEndElement ();
+                       //     </results>
+                       writer.WriteEndElement ();
+                       //   </test-suite>
+                       writer.WriteEndElement ();
+                       // </test-results>
+                       writer.WriteEndElement ();
+                       writer.WriteEndDocument ();
+               }
+
                Console.WriteLine ();
 
                if (timed_out) {
@@ -349,4 +459,11 @@ public class TestRunner
                        Console.WriteLine ("=============== EOF ===============");
                }
        }
+
+       static string DumpPseudoTrace (string filename) {
+               if (File.Exists (filename))
+                       return File.ReadAllText (filename);
+               else
+                       return string.Empty;
+       }
 }
diff --git a/mono/tests/verifier/invalid_cgt_un_valuetype_and_null.il b/mono/tests/verifier/invalid_cgt_un_valuetype_and_null.il
new file mode 100644 (file)
index 0000000..717778f
--- /dev/null
@@ -0,0 +1,81 @@
+.assembly extern mscorlib
+{
+  .ver 4:0:0:0
+  .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4..
+}
+.assembly 'test-pattern-01'
+{
+  .custom instance void class [mscorlib]System.Runtime.CompilerServices.RuntimeCompatibilityAttribute::'.ctor'() =  (
+               01 00 01 00 54 02 16 57 72 61 70 4E 6F 6E 45 78   // ....T..WrapNonEx
+               63 65 70 74 69 6F 6E 54 68 72 6F 77 73 01       ) // ceptionThrows.
+
+  .hash algorithm 0x00008004
+  .ver  0:0:0:0
+}
+.module 'test-pattern-01.exe' // GUID = {9F506173-2872-430E-8B04-E4C828ABCFA1}
+
+
+  .class private auto ansi beforefieldinit TypePattern
+       extends [mscorlib]System.Object
+  {
+
+    // method line 1
+    .method public hidebysig specialname rtspecialname 
+           instance default void '.ctor' ()  cil managed 
+    {
+        // Method begins at RVA 0x2050
+       // Code size 7 (0x7)
+       .maxstack 8
+       IL_0000:  ldarg.0 
+       IL_0001:  call instance void object::'.ctor'()
+       IL_0006:  ret 
+    } // end of method TypePattern::.ctor
+
+    // method line 2
+    .method public static hidebysig 
+           default int32 Main ()  cil managed 
+    {
+        // Method begins at RVA 0x2058
+       .entrypoint
+       // Code size 63 (0x3f)
+       .maxstack 2
+       .locals init (
+               object  V_0,
+               bool    V_1,
+               valuetype [mscorlib]System.Nullable`1<unsigned int8>    V_2)
+       IL_0000:  ldc.i4.4 
+       IL_0001:  newobj instance void valuetype [mscorlib]System.Nullable`1<int32>::'.ctor'(!0)
+       IL_0006:  box valuetype [mscorlib]System.Nullable`1<int32>
+       IL_000b:  stloc.0 
+       IL_000c:  ldloc.0 
+       IL_000d:  isinst valuetype [mscorlib]System.Nullable`1<unsigned int8>
+       IL_0012:  unbox.any valuetype [mscorlib]System.Nullable`1<unsigned int8>
+       IL_0017:  stloc.2 
+       
+       IL_0019:  ldnull 
+       
+       IL_0018:  ldloc.2
+       // box valuetype [mscorlib]System.Nullable`1<unsigned int8>
+
+
+       IL_001a:  cgt.un 
+       IL_001c:  stloc.1 
+       IL_001d:  ldloca.s 2
+       IL_001f:  call instance bool valuetype [mscorlib]System.Nullable`1<unsigned int8>::get_HasValue()
+       IL_0024:  brfalse IL_002b
+
+       IL_0029:  ldc.i4.5 
+       IL_002a:  ret 
+       IL_002b:  ldloc.1 
+       IL_002c:  brfalse IL_0033
+
+       IL_0031:  ldc.i4.5 
+       IL_0032:  ret 
+       IL_0033:  ldstr "ok"
+       IL_0038:  call void class [mscorlib]System.Console::WriteLine(string)
+       IL_003d:  ldc.i4.0 
+       IL_003e:  ret 
+    } // end of method TypePattern::Main
+
+  } // end of class TypePattern
+
index 23797f64633078f2982335abc71e2341cab33041..50cec63f24ea8fd10d72f34c9dcf08e8bc8ccd04 100644 (file)
@@ -1,10 +1,10 @@
 AM_CPPFLAGS = -I$(top_srcdir) -I$(top_srcdir)/mono $(LIBGC_CPPFLAGS) $(GLIB_CFLAGS) -DMONO_BINDIR=\"$(bindir)/\" -DMONO_ASSEMBLIES=\"$(assembliesdir)\" -DMONO_CFG_DIR=\"$(confdir)\"
 
-TEST_CFLAGS = $(AM_CFLAGS) $(SGEN_DEFINES)
-TEST_LDADD = ../metadata/libmonoruntimesgen.la ../io-layer/libwapi.la ../utils/libmonoutils.la \
+test_cflags = $(AM_CFLAGS) $(SGEN_DEFINES)
+test_ldadd = ../metadata/libmonoruntimesgen.la ../io-layer/libwapi.la ../utils/libmonoutils.la \
        $(LIBGC_LIBS) $(GLIB_LIBS) -lm $(LIBICONV)
 if PLATFORM_DARWIN
-TEST_LDFLAGS = -framework CoreFoundation -framework Foundation
+test_ldflags = -framework CoreFoundation -framework Foundation
 endif
 
 
@@ -14,24 +14,24 @@ if SUPPORT_BOEHM
 if !PLATFORM_GNU
 
 test_sgen_qsort_SOURCES = test-sgen-qsort.c
-test_sgen_qsort_CFLAGS = $(TEST_CFLAGS)
-test_sgen_qsort_LDADD = $(TEST_LDADD)
-test_sgen_qsort_LDFLAGS = $(TEST_LDFLAGS)
+test_sgen_qsort_CFLAGS = $(test_cflags)
+test_sgen_qsort_LDADD = $(test_ldadd)
+test_sgen_qsort_LDFLAGS = $(test_ldflags)
 
 test_gc_memfuncs_SOURCES = test-gc-memfuncs.c
-test_gc_memfuncs_CFLAGS = $(TEST_CFLAGS)
-test_gc_memfuncs_LDADD = $(TEST_LDADD)
-test_gc_memfuncs_LDFLAGS = $(TEST_LDFLAGS)
+test_gc_memfuncs_CFLAGS = $(test_cflags)
+test_gc_memfuncs_LDADD = $(test_ldadd)
+test_gc_memfuncs_LDFLAGS = $(test_ldflags)
 
 test_mono_linked_list_set_SOURCES = test-mono-linked-list-set.c
-test_mono_linked_list_set_CFLAGS = $(TEST_CFLAGS)
-test_mono_linked_list_set_LDADD = $(TEST_LDADD)
-test_mono_linked_list_set_LDFLAGS = $(TEST_LDFLAGS)
+test_mono_linked_list_set_CFLAGS = $(test_cflags)
+test_mono_linked_list_set_LDADD = $(test_ldadd)
+test_mono_linked_list_set_LDFLAGS = $(test_ldflags)
 
 test_conc_hashtable_SOURCES = test-conc-hashtable.c
-test_conc_hashtable_CFLAGS = $(TEST_CFLAGS)
-test_conc_hashtable_LDADD = $(TEST_LDADD)
-test_conc_hashtable_LDFLAGS = $(TEST_LDFLAGS)
+test_conc_hashtable_CFLAGS = $(test_cflags)
+test_conc_hashtable_LDADD = $(test_ldadd)
+test_conc_hashtable_LDFLAGS = $(test_ldflags)
 
 noinst_PROGRAMS = test-sgen-qsort test-gc-memfuncs test-mono-linked-list-set test-conc-hashtable
 
index 286ef7dae2178f7b4d7b6d0a4dae8b6786ff1e96..ec199f2ce8a5f40b8caf0d4c4632fb30e0ce4d4e 100644 (file)
@@ -1,6 +1,6 @@
 noinst_LTLIBRARIES = libmonoutils.la
 
-AM_CPPFLAGS = -I$(top_srcdir) -I$(top_srcdir)/mono $(LIBGC_CPPFLAGS) $(GLIB_CFLAGS)
+AM_CPPFLAGS = -I$(top_srcdir) -I$(top_srcdir)/mono $(LIBGC_CPPFLAGS) $(GLIB_CFLAGS) $(SHARED_CFLAGS)
 
 if ENABLE_DTRACE
 
@@ -123,6 +123,8 @@ monoutils_sources = \
        mono-conc-hashtable.c   \
        sha1.h          \
        sha1.c  \
+       json.h  \
+       json.c  \       
        networking.c    \
        networking-posix.c      \
        networking-fallback.c   \
diff --git a/mono/utils/json.c b/mono/utils/json.c
new file mode 100644 (file)
index 0000000..4de3e9f
--- /dev/null
@@ -0,0 +1,104 @@
+/*
+ * json.c: JSON writer
+ *
+ * Author:
+ *   Joao Matos (joao.matos@xamarin.com)
+ *
+ * Copyright 2015 Xamarin Inc (http://www.xamarin.com)
+ */
+
+#include <mono/utils/json.h>
+
+void json_writer_init (JsonWriter* writer)
+{
+       g_assert (writer && "Expected a valid JSON writer instance");
+
+       writer->text = g_string_new ("");
+       writer->indent = 0;
+}
+
+void json_writer_destroy (JsonWriter* writer)
+{
+       g_assert (writer && "Expected a valid JSON writer instance");
+       g_string_free (writer->text, /*free_segment=*/TRUE);
+}
+
+void json_writer_indent_push(JsonWriter* writer)
+{
+       g_assert (writer && "Expected a valid JSON writer instance");
+       writer->indent += JSON_INDENT_VALUE;
+}
+
+void json_writer_indent_pop(JsonWriter* writer)
+{
+       g_assert (writer && "Expected a valid JSON writer instance");
+       writer->indent -= JSON_INDENT_VALUE;
+}
+
+void json_writer_indent(JsonWriter* writer)
+{
+       g_assert (writer && "Expected a valid JSON writer instance");
+
+       int i = 0;
+       for (i = 0; i < writer->indent; ++i)
+               g_string_append_c (writer->text, ' ');
+}
+
+void json_writer_vprintf(JsonWriter* writer, const gchar *format, va_list args)
+{
+       g_assert (writer && "Expected a valid JSON writer instance");
+       g_string_append_vprintf (writer->text, format, args);
+}
+
+void json_writer_printf(JsonWriter* writer, const gchar *format, ...)
+{
+       g_assert (writer && "Expected a valid JSON writer instance");
+
+       va_list args;
+       va_start (args, format);
+
+       g_string_append_vprintf (writer->text, format, args);
+
+       va_end (args);
+}
+
+void json_writer_array_begin(JsonWriter* writer)
+{
+       g_assert (writer && "Expected a valid JSON writer instance");
+       g_string_append_printf (writer->text, "[\n");
+       writer->indent += JSON_INDENT_VALUE;
+}
+
+void json_writer_array_end(JsonWriter* writer)
+{
+       g_assert (writer && "Expected a valid JSON writer instance");
+       g_string_append_printf (writer->text, "]");
+       writer->indent -= JSON_INDENT_VALUE;
+}
+
+void json_writer_object_begin(JsonWriter* writer)
+{
+       g_assert (writer && "Expected a valid JSON writer instance");
+       json_writer_printf (writer, "{\n");
+       writer->indent += JSON_INDENT_VALUE;
+}
+
+void json_writer_object_end(JsonWriter* writer)
+{
+       g_assert (writer && "Expected a valid JSON writer instance");
+       json_writer_printf (writer, "}");
+}
+
+void json_writer_object_key(JsonWriter* writer, const gchar* format, ...)
+{
+       g_assert (writer && "Expected a valid JSON writer instance");
+
+       va_list args;
+       va_start (args, format);
+
+       g_string_append_printf (writer->text, "\"");
+       json_writer_vprintf (writer, format, args);
+       g_string_append_printf (writer->text, "\" : ");
+
+       va_end (args);
+}
diff --git a/mono/utils/json.h b/mono/utils/json.h
new file mode 100644 (file)
index 0000000..5e5a06a
--- /dev/null
@@ -0,0 +1,35 @@
+/*
+ * json.h: JSON writer
+ *
+ * Author:
+ *   Joao Matos (joao.matos@xamarin.com)
+ *
+ * Copyright 2015 Xamarin Inc (http://www.xamarin.com)
+ */
+
+#ifndef __MONO_UTILS_JSON_H__
+#define __MONO_UTILS_JSON_H__
+
+ #include <glib.h>
+
+#define JSON_INDENT_VALUE 2
+
+typedef struct JsonWriter {
+       GString* text;
+       int indent;
+} JsonWriter;
+
+void json_writer_init (JsonWriter* writer);
+void json_writer_destroy (JsonWriter* writer);
+void json_writer_indent(JsonWriter* writer);
+void json_writer_indent_push(JsonWriter* writer);
+void json_writer_indent_pop(JsonWriter* writer);
+void json_writer_vprintf(JsonWriter* writer, const gchar *format, va_list args);
+void json_writer_printf(JsonWriter* writer, const gchar *format, ...);
+void json_writer_array_begin(JsonWriter* writer);
+void json_writer_array_end(JsonWriter* writer);
+void json_writer_object_begin(JsonWriter* writer);
+void json_writer_object_end(JsonWriter* writer);
+void json_writer_object_key(JsonWriter* writer, const gchar* format, ...);
+
+#endif
index fcc76446d9cf21a1b26c169fbe305957f30d44d7..2740578f1dc53cb0a2f8ad83d5982d43d0fd0e1a 100644 (file)
@@ -13,7 +13,7 @@
    This file is part of MemCheck, a heavyweight Valgrind tool for
    detecting memory errors.
 
-   Copyright (C) 2000-2012 Julian Seward.  All rights reserved.
+   Copyright (C) 2000-2013 Julian Seward.  All rights reserved.
 
    Redistribution and use in source and binary forms, with or without
    modification, are permitted provided that the following conditions
@@ -96,6 +96,9 @@ typedef
       /* Not next to VG_USERREQ__COUNT_LEAKS because it was added later. */
       VG_USERREQ__COUNT_LEAK_BLOCKS,
 
+      VG_USERREQ__ENABLE_ADDR_ERROR_REPORTING_IN_RANGE,
+      VG_USERREQ__DISABLE_ADDR_ERROR_REPORTING_IN_RANGE,
+
       /* This is just for memcheck's internal use - don't use it */
       _VG_USERREQ__MEMCHECK_RECORD_OVERLAP_ERROR 
          = VG_USERREQ_TOOL_BASE('M','C') + 256
@@ -283,5 +286,17 @@ typedef
                                     (const char*)(zzvbits),     \
                                     (zznbytes), 0, 0 )
 
+/* Disable and re-enable reporting of addressing errors in the
+   specified address range. */
+#define VALGRIND_DISABLE_ADDR_ERROR_REPORTING_IN_RANGE(_qzz_addr,_qzz_len) \
+    VALGRIND_DO_CLIENT_REQUEST_EXPR(0 /* default return */,    \
+       VG_USERREQ__DISABLE_ADDR_ERROR_REPORTING_IN_RANGE,      \
+       (_qzz_addr), (_qzz_len), 0, 0, 0)
+
+#define VALGRIND_ENABLE_ADDR_ERROR_REPORTING_IN_RANGE(_qzz_addr,_qzz_len) \
+    VALGRIND_DO_CLIENT_REQUEST_EXPR(0 /* default return */,    \
+       VG_USERREQ__ENABLE_ADDR_ERROR_REPORTING_IN_RANGE,       \
+       (_qzz_addr), (_qzz_len), 0, 0, 0)
+
 #endif
 
index bad994cc29338cd5bfdc17376e665dfe2a3414b6..a910e917d7f2d253b03ba665b517210ce9c7b6e6 100644 (file)
@@ -7,13 +7,19 @@
  */
 #include <config.h>
 
+#ifdef __GNUC__
+#define MONO_ATTR_USED __attribute__ ((used))
+#else
+#define MONO_ATTR_USED
+#endif
+
 #ifdef HAVE_KW_THREAD
 
 #define MONO_HAVE_FAST_TLS
 #define MONO_FAST_TLS_SET(x,y) x = y
 #define MONO_FAST_TLS_GET(x) x
 #define MONO_FAST_TLS_INIT(x)
-#define MONO_FAST_TLS_DECLARE(x) static __thread gpointer x MONO_TLS_FAST;
+#define MONO_FAST_TLS_DECLARE(x) static __thread gpointer x MONO_TLS_FAST MONO_ATTR_USED;
 
 #if HAVE_TLS_MODEL_ATTR
 
 #define MONO_FAST_TLS_DECLARE(x) static pthread_key_t x;
 
 #define MONO_THREAD_VAR_OFFSET(x,y) ({ \
-       typeof(x) _x = (x);                     \
+       __typeof__(x) _x = (x);                 \
        pthread_key_t _y;       \
        (void) (&_x == &_y);            \
        y = (gint32) x; })
index d96eb759ef290aab6c5266270a468d463b14510b..ad56e2c50c267b08ac39f13a56434df06c62fe7b 100755 (executable)
@@ -464,6 +464,8 @@ mono_ia64_context_get_fp (MonoContext *ctx)
 
 #elif ((defined(__mips__) && !defined(MONO_CROSS_COMPILE)) || (defined(TARGET_MIPS))) && SIZEOF_REGISTER == 4 /* defined(__ia64__) */
 
+#include <mono/arch/mips/mips-codegen.h>
+
 typedef struct {
        mgreg_t     sc_pc;
        mgreg_t         sc_regs [32];
index 9c92dfb6ec2414a9dabb677886ac0b2c932ce765..effc17c84f44ccc10353bfbc522eeeeb9be4d656 100644 (file)
@@ -243,7 +243,7 @@ mono_counters_register (const char* name, int type, void *addr)
        }
 
        if (!initialized)
-               g_warning ("counters not enabled");
+               g_debug ("counters not enabled");
        else
                register_internal (name, type, addr, size);
 }
@@ -272,7 +272,7 @@ void
 mono_counters_register_with_size (const char *name, int type, void *addr, int size)
 {
        if (!initialized)
-               g_warning ("counters not enabled");
+               g_debug ("counters not enabled");
        else
                register_internal (name, type, addr, size);
 }
@@ -287,7 +287,7 @@ void
 mono_counters_on_register (MonoCounterRegisterCallback callback)
 {
        if (!initialized) {
-               g_warning ("counters not enabled");
+               g_debug ("counters not enabled");
                return;
        }
 
@@ -433,7 +433,7 @@ mono_counters_foreach (CountersEnumCallback cb, gpointer user_data)
        MonoCounter *counter;
 
        if (!initialized) {
-               g_warning ("counters not enabled");
+               g_debug ("counters not enabled");
                return;
        }
 
@@ -510,7 +510,7 @@ int
 mono_counters_sample (MonoCounter *counter, void *buffer, int buffer_size)
 {
        if (!initialized) {
-               g_warning ("counters not enabled");
+               g_debug ("counters not enabled");
                return -1;
        }
 
index a418cadeca17dba4b1dd5de93e06c03fbcf3da77..c9becb2bf5e24f5e99c4b2e9d54d6284511dbf8a 100644 (file)
@@ -44,7 +44,11 @@ typedef unsigned __int64     uint64_t;
 
 #include <stdint.h>
 
+#ifdef __GNUC__
+#define MONO_API_EXPORT __attribute__ ((visibility ("default")))
+#else
 #define MONO_API_EXPORT
+#endif
 #define MONO_API_IMPORT
 
 #endif /* end of compiler-specific stuff */
index a32f5a9ff9cfca04767515abcbb7c55302ed99b3..9aa28fba74de0e2f57e12c56a2bd72ae651845b0 100644 (file)
@@ -19,7 +19,7 @@
 
 #include <errno.h>
 
-#if defined(PLATFORM_ANDROID) && !defined(TARGET_ARM64)
+#if defined(PLATFORM_ANDROID) && !defined(TARGET_ARM64) && !defined(TARGET_AMD64)
 #define USE_TKILL_ON_ANDROID 1
 #endif
 
index 422ede53f1d06e0928c08ac733fabcc45c3457b6..b38ec5ef7d1ba15f8bc9e2ccbd7783515a6047c9 100644 (file)
@@ -782,7 +782,7 @@ mono_thread_info_new_interrupt_enabled (void)
 #if defined (__i386__) || defined(__x86_64__)
        return !disable_new_interrupt;
 #endif
-#if defined(__arm__)
+#if defined(__arm__) || defined(__aarch64__)
        return !disable_new_interrupt;
 #endif
        return FALSE;
index 30fe621b6f3ee6ddb58fac746284a3d3c068ae50..cd347546c207d8b6e72590fcec8060960cd522fd 100644 (file)
@@ -41,12 +41,7 @@ mono_100ns_ticks (void)
        return (cur_time - start_time) * (double)MTICKS_PER_SEC / freq.QuadPart;
 }
 
-/*
- * Magic number to convert FILETIME base Jan 1, 1601 to DateTime - base Jan, 1, 0001
- */
-#define FILETIME_ADJUST ((guint64)504911232000000000LL)
-
-/* Returns the number of 100ns ticks since 1/1/1, UTC timezone */
+/* Returns the number of 100ns ticks since Jan 1, 1601, UTC timezone */
 gint64
 mono_100ns_datetime (void)
 {
@@ -56,7 +51,7 @@ mono_100ns_datetime (void)
                g_assert_not_reached ();
 
        GetSystemTimeAsFileTime ((FILETIME*) &ft);
-       return FILETIME_ADJUST + ft.QuadPart;
+       return ft.QuadPart;
 }
 
 #else
@@ -162,12 +157,12 @@ mono_100ns_ticks (void)
 }
 
 /*
- * Magic number to convert a time which is relative to
- * Jan 1, 1970 into a value which is relative to Jan 1, 0001.
+ * Magic number to convert unix epoch start to windows epoch start
+ * Jan 1, 1970 into a value which is relative to Jan 1, 1601.
  */
-#define EPOCH_ADJUST    ((guint64)62135596800LL)
+#define EPOCH_ADJUST    ((guint64)11644473600LL)
 
-/* Returns the number of 100ns ticks since 1/1/1, UTC timezone */
+/* Returns the number of 100ns ticks since 1/1/1601, UTC timezone */
 gint64
 mono_100ns_datetime (void)
 {
index 315da5b0fc8eab3d5063d3bb4a6393140d115371..6954d751d5eb0c4f47b9f05622a92e00a9609d7a 100644 (file)
@@ -12,7 +12,7 @@
    This file is part of Valgrind, a dynamic binary instrumentation
    framework.
 
-   Copyright (C) 2000-2012 Julian Seward.  All rights reserved.
+   Copyright (C) 2000-2013 Julian Seward.  All rights reserved.
 
    Redistribution and use in source and binary forms, with or without
    modification, are permitted provided that the following conditions
@@ -89,7 +89,7 @@
         || (__VALGRIND_MAJOR__ == 3 && __VALGRIND_MINOR__ >= 6))
 */
 #define __VALGRIND_MAJOR__    3
-#define __VALGRIND_MINOR__    8
+#define __VALGRIND_MINOR__    10
 
 
 #include <stdarg.h>
 #undef PLAT_x86_darwin
 #undef PLAT_amd64_darwin
 #undef PLAT_x86_win32
+#undef PLAT_amd64_win64
 #undef PLAT_x86_linux
 #undef PLAT_amd64_linux
 #undef PLAT_ppc32_linux
-#undef PLAT_ppc64_linux
+#undef PLAT_ppc64be_linux
+#undef PLAT_ppc64le_linux
 #undef PLAT_arm_linux
+#undef PLAT_arm64_linux
 #undef PLAT_s390x_linux
 #undef PLAT_mips32_linux
+#undef PLAT_mips64_linux
 
 
 #if defined(__APPLE__) && defined(__i386__)
 #  define PLAT_x86_darwin 1
 #elif defined(__APPLE__) && defined(__x86_64__)
 #  define PLAT_amd64_darwin 1
-#elif defined(__MINGW32__) || defined(__CYGWIN32__) \
+#elif (defined(__MINGW32__) && !defined(__MINGW64__)) \
+      || defined(__CYGWIN32__) \
       || (defined(_WIN32) && defined(_M_IX86))
 #  define PLAT_x86_win32 1
+#elif defined(__MINGW64__) \
+      || (defined(_WIN64) && defined(_M_X64))
+#  define PLAT_amd64_win64 1
 #elif defined(__linux__) && defined(__i386__)
 #  define PLAT_x86_linux 1
 #elif defined(__linux__) && defined(__x86_64__)
 #  define PLAT_amd64_linux 1
 #elif defined(__linux__) && defined(__powerpc__) && !defined(__powerpc64__)
 #  define PLAT_ppc32_linux 1
-#elif defined(__linux__) && defined(__powerpc__) && defined(__powerpc64__)
-#  define PLAT_ppc64_linux 1
-#elif defined(__linux__) && defined(__arm__)
+#elif defined(__linux__) && defined(__powerpc__) && defined(__powerpc64__) && _CALL_ELF != 2
+/* Big Endian uses ELF version 1 */
+#  define PLAT_ppc64be_linux 1
+#elif defined(__linux__) && defined(__powerpc__) && defined(__powerpc64__) && _CALL_ELF == 2
+/* Little Endian uses ELF version 2 */
+#  define PLAT_ppc64le_linux 1
+#elif defined(__linux__) && defined(__arm__) && !defined(__aarch64__)
 #  define PLAT_arm_linux 1
+#elif defined(__linux__) && defined(__aarch64__) && !defined(__arm__)
+#  define PLAT_arm64_linux 1
 #elif defined(__linux__) && defined(__s390__) && defined(__s390x__)
 #  define PLAT_s390x_linux 1
-#elif defined(__linux__) && defined(__mips__)
+#elif defined(__linux__) && defined(__mips__) && (__mips==64)
+#  define PLAT_mips64_linux 1
+#elif defined(__linux__) && defined(__mips__) && (__mips!=64)
 #  define PLAT_mips32_linux 1
 #else
 /* If we're not compiling for our target platform, don't generate
@@ -368,7 +384,8 @@ valgrind_do_client_request_expr(uintptr_t _zzq_default, uintptr_t _zzq_request,
 
 /* ------------------------ amd64-{linux,darwin} --------------- */
 
-#if defined(PLAT_amd64_linux)  ||  defined(PLAT_amd64_darwin)
+#if defined(PLAT_amd64_linux)  ||  defined(PLAT_amd64_darwin) \
+    ||  (defined(PLAT_amd64_win64) && defined(__GNUC__))
 
 typedef
    struct { 
@@ -430,6 +447,14 @@ typedef
 
 #endif /* PLAT_amd64_linux || PLAT_amd64_darwin */
 
+/* ------------------------- amd64-Win64 ------------------------- */
+
+#if defined(PLAT_amd64_win64) && !defined(__GNUC__)
+
+#error Unsupported compiler.
+
+#endif /* PLAT_amd64_win64 */
+
 /* ------------------------ ppc32-linux ------------------------ */
 
 #if defined(PLAT_ppc32_linux)
@@ -441,8 +466,8 @@ typedef
    OrigFn;
 
 #define __SPECIAL_INSTRUCTION_PREAMBLE                            \
-                     "rlwinm 0,0,3,0,0  ; rlwinm 0,0,13,0,0\n\t"  \
-                     "rlwinm 0,0,29,0,0 ; rlwinm 0,0,19,0,0\n\t"
+                    "rlwinm 0,0,3,0,31  ; rlwinm 0,0,13,0,31\n\t" \
+                    "rlwinm 0,0,29,0,31 ; rlwinm 0,0,19,0,31\n\t"
 
 #define VALGRIND_DO_CLIENT_REQUEST_EXPR(                          \
         _zzq_default, _zzq_request,                               \
@@ -501,7 +526,7 @@ typedef
 
 /* ------------------------ ppc64-linux ------------------------ */
 
-#if defined(PLAT_ppc64_linux)
+#if defined(PLAT_ppc64be_linux)
 
 typedef
    struct { 
@@ -576,7 +601,84 @@ typedef
                     );                                           \
  } while (0)
 
-#endif /* PLAT_ppc64_linux */
+#endif /* PLAT_ppc64be_linux */
+
+#if defined(PLAT_ppc64le_linux)
+
+typedef
+   struct {
+      unsigned long long int nraddr; /* where's the code? */
+      unsigned long long int r2;     /* what tocptr do we need? */
+   }
+   OrigFn;
+
+#define __SPECIAL_INSTRUCTION_PREAMBLE                            \
+                     "rotldi 0,0,3  ; rotldi 0,0,13\n\t"          \
+                     "rotldi 0,0,61 ; rotldi 0,0,51\n\t"
+
+#define VALGRIND_DO_CLIENT_REQUEST_EXPR(                          \
+        _zzq_default, _zzq_request,                               \
+        _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5)    \
+                                                                  \
+  __extension__                                                   \
+  ({         unsigned long long int  _zzq_args[6];                \
+             unsigned long long int  _zzq_result;                 \
+             unsigned long long int* _zzq_ptr;                    \
+    _zzq_args[0] = (unsigned long long int)(_zzq_request);        \
+    _zzq_args[1] = (unsigned long long int)(_zzq_arg1);           \
+    _zzq_args[2] = (unsigned long long int)(_zzq_arg2);           \
+    _zzq_args[3] = (unsigned long long int)(_zzq_arg3);           \
+    _zzq_args[4] = (unsigned long long int)(_zzq_arg4);           \
+    _zzq_args[5] = (unsigned long long int)(_zzq_arg5);           \
+    _zzq_ptr = _zzq_args;                                         \
+    __asm__ volatile("mr 3,%1\n\t" /*default*/                    \
+                     "mr 4,%2\n\t" /*ptr*/                        \
+                     __SPECIAL_INSTRUCTION_PREAMBLE               \
+                     /* %R3 = client_request ( %R4 ) */           \
+                     "or 1,1,1\n\t"                               \
+                     "mr %0,3"     /*result*/                     \
+                     : "=b" (_zzq_result)                         \
+                     : "b" (_zzq_default), "b" (_zzq_ptr)         \
+                     : "cc", "memory", "r3", "r4");               \
+    _zzq_result;                                                  \
+  })
+
+#define VALGRIND_GET_NR_CONTEXT(_zzq_rlval)                       \
+  { volatile OrigFn* _zzq_orig = &(_zzq_rlval);                   \
+    unsigned long long int __addr;                                \
+    __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE               \
+                     /* %R3 = guest_NRADDR */                     \
+                     "or 2,2,2\n\t"                               \
+                     "mr %0,3"                                    \
+                     : "=b" (__addr)                              \
+                     :                                            \
+                     : "cc", "memory", "r3"                       \
+                    );                                            \
+    _zzq_orig->nraddr = __addr;                                   \
+    __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE               \
+                     /* %R3 = guest_NRADDR_GPR2 */                \
+                     "or 4,4,4\n\t"                               \
+                     "mr %0,3"                                    \
+                     : "=b" (__addr)                              \
+                     :                                            \
+                     : "cc", "memory", "r3"                       \
+                    );                                            \
+    _zzq_orig->r2 = __addr;                                       \
+  }
+
+#define VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R12                   \
+                     __SPECIAL_INSTRUCTION_PREAMBLE               \
+                     /* branch-and-link-to-noredir *%R12 */       \
+                     "or 3,3,3\n\t"
+
+#define VALGRIND_VEX_INJECT_IR()                                 \
+ do {                                                            \
+    __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE              \
+                     "or 5,5,5\n\t"                              \
+                    );                                           \
+ } while (0)
+
+#endif /* PLAT_ppc64le_linux */
 
 /* ------------------------- arm-linux ------------------------- */
 
@@ -646,6 +748,74 @@ typedef
 
 #endif /* PLAT_arm_linux */
 
+/* ------------------------ arm64-linux ------------------------- */
+
+#if defined(PLAT_arm64_linux)
+
+typedef
+   struct { 
+      unsigned long long int nraddr; /* where's the code? */
+   }
+   OrigFn;
+
+#define __SPECIAL_INSTRUCTION_PREAMBLE                            \
+            "ror x12, x12, #3  ;  ror x12, x12, #13 \n\t"         \
+            "ror x12, x12, #51 ;  ror x12, x12, #61 \n\t"
+
+#define VALGRIND_DO_CLIENT_REQUEST_EXPR(                          \
+        _zzq_default, _zzq_request,                               \
+        _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5)    \
+                                                                  \
+  __extension__                                                   \
+  ({volatile unsigned long long int  _zzq_args[6];                \
+    volatile unsigned long long int  _zzq_result;                 \
+    _zzq_args[0] = (unsigned long long int)(_zzq_request);        \
+    _zzq_args[1] = (unsigned long long int)(_zzq_arg1);           \
+    _zzq_args[2] = (unsigned long long int)(_zzq_arg2);           \
+    _zzq_args[3] = (unsigned long long int)(_zzq_arg3);           \
+    _zzq_args[4] = (unsigned long long int)(_zzq_arg4);           \
+    _zzq_args[5] = (unsigned long long int)(_zzq_arg5);           \
+    __asm__ volatile("mov x3, %1\n\t" /*default*/                 \
+                     "mov x4, %2\n\t" /*ptr*/                     \
+                     __SPECIAL_INSTRUCTION_PREAMBLE               \
+                     /* X3 = client_request ( X4 ) */             \
+                     "orr x10, x10, x10\n\t"                      \
+                     "mov %0, x3"     /*result*/                  \
+                     : "=r" (_zzq_result)                         \
+                     : "r" (_zzq_default), "r" (&_zzq_args[0])    \
+                     : "cc","memory", "x3", "x4");                \
+    _zzq_result;                                                  \
+  })
+
+#define VALGRIND_GET_NR_CONTEXT(_zzq_rlval)                       \
+  { volatile OrigFn* _zzq_orig = &(_zzq_rlval);                   \
+    unsigned long long int __addr;                                \
+    __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE               \
+                     /* X3 = guest_NRADDR */                      \
+                     "orr x11, x11, x11\n\t"                      \
+                     "mov %0, x3"                                 \
+                     : "=r" (__addr)                              \
+                     :                                            \
+                     : "cc", "memory", "x3"                       \
+                    );                                            \
+    _zzq_orig->nraddr = __addr;                                   \
+  }
+
+#define VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_X8                    \
+                     __SPECIAL_INSTRUCTION_PREAMBLE               \
+                     /* branch-and-link-to-noredir X8 */          \
+                     "orr x12, x12, x12\n\t"
+
+#define VALGRIND_VEX_INJECT_IR()                                 \
+ do {                                                            \
+    __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE              \
+                     "orr x9, x9, x9\n\t"                        \
+                     : : : "cc", "memory"                        \
+                    );                                           \
+ } while (0)
+
+#endif /* PLAT_arm64_linux */
+
 /* ------------------------ s390x-linux ------------------------ */
 
 #if defined(PLAT_s390x_linux)
@@ -763,7 +933,7 @@ typedef
                      "move %0, $11\n\t"     /*result*/            \
                      : "=r" (_zzq_result)                         \
                      : "r" (_zzq_default), "r" (&_zzq_args[0])    \
-                     : "cc","memory", "t3", "t4");                \
+                     : "$11", "$12");                             \
     _zzq_result;                                                  \
   })
 
@@ -776,7 +946,7 @@ typedef
                      "move %0, $11"     /*result*/                \
                      : "=r" (__addr)                              \
                      :                                            \
-                     : "cc", "memory" , "t3"                      \
+                     : "$11"                                      \
                     );                                            \
     _zzq_orig->nraddr = __addr;                                   \
   }
@@ -796,6 +966,75 @@ typedef
 
 #endif /* PLAT_mips32_linux */
 
+/* ------------------------- mips64-linux ---------------- */
+
+#if defined(PLAT_mips64_linux)
+
+typedef
+   struct {
+      unsigned long long nraddr; /* where's the code? */
+   }
+   OrigFn;
+
+/* dsll $0,$0, 3
+ * dsll $0,$0, 13
+ * dsll $0,$0, 29
+ * dsll $0,$0, 19*/
+#define __SPECIAL_INSTRUCTION_PREAMBLE                              \
+                     "dsll $0,$0, 3 ; dsll $0,$0,13\n\t"            \
+                     "dsll $0,$0,29 ; dsll $0,$0,19\n\t"
+
+#define VALGRIND_DO_CLIENT_REQUEST_EXPR(                            \
+       _zzq_default, _zzq_request,                                  \
+       _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5)       \
+  __extension__                                                     \
+  ({ volatile unsigned long long int _zzq_args[6];                  \
+    volatile unsigned long long int _zzq_result;                    \
+    _zzq_args[0] = (unsigned long long int)(_zzq_request);          \
+    _zzq_args[1] = (unsigned long long int)(_zzq_arg1);             \
+    _zzq_args[2] = (unsigned long long int)(_zzq_arg2);             \
+    _zzq_args[3] = (unsigned long long int)(_zzq_arg3);             \
+    _zzq_args[4] = (unsigned long long int)(_zzq_arg4);             \
+    _zzq_args[5] = (unsigned long long int)(_zzq_arg5);             \
+        __asm__ volatile("move $11, %1\n\t" /*default*/             \
+                         "move $12, %2\n\t" /*ptr*/                 \
+                         __SPECIAL_INSTRUCTION_PREAMBLE             \
+                         /* $11 = client_request ( $12 ) */         \
+                         "or $13, $13, $13\n\t"                     \
+                         "move %0, $11\n\t"     /*result*/          \
+                         : "=r" (_zzq_result)                       \
+                         : "r" (_zzq_default), "r" (&_zzq_args[0])  \
+                         : "$11", "$12");                           \
+    _zzq_result;                                                    \
+  })
+
+#define VALGRIND_GET_NR_CONTEXT(_zzq_rlval)                         \
+  { volatile OrigFn* _zzq_orig = &(_zzq_rlval);                     \
+    volatile unsigned long long int __addr;                         \
+    __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE                 \
+                     /* $11 = guest_NRADDR */                       \
+                     "or $14, $14, $14\n\t"                         \
+                     "move %0, $11"     /*result*/                  \
+                     : "=r" (__addr)                                \
+                     :                                              \
+                     : "$11");                                      \
+    _zzq_orig->nraddr = __addr;                                     \
+  }
+
+#define VALGRIND_CALL_NOREDIR_T9                                    \
+                     __SPECIAL_INSTRUCTION_PREAMBLE                 \
+                     /* call-noredir $25 */                         \
+                     "or $15, $15, $15\n\t"
+
+#define VALGRIND_VEX_INJECT_IR()                                    \
+ do {                                                               \
+    __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE                 \
+                     "or $11, $11, $11\n\t"                         \
+                    );                                              \
+ } while (0)
+
+#endif /* PLAT_mips64_linux */
+
 /* Insert assembly code for other platforms here... */
 
 #endif /* NVALGRIND */
@@ -2379,7 +2618,7 @@ typedef
 
 /* ------------------------ ppc64-linux ------------------------ */
 
-#if defined(PLAT_ppc64_linux)
+#if defined(PLAT_ppc64be_linux)
 
 /* ARGREGS: r3 r4 r5 r6 r7 r8 r9 r10 (the rest on stack somewhere) */
 
@@ -2932,54 +3171,56 @@ typedef
       lval = (__typeof__(lval)) _res;                             \
    } while (0)
 
-#endif /* PLAT_ppc64_linux */
+#endif /* PLAT_ppc64be_linux */
 
-/* ------------------------- arm-linux ------------------------- */
+/* ------------------------- ppc64le-linux ----------------------- */
+#if defined(PLAT_ppc64le_linux)
 
-#if defined(PLAT_arm_linux)
+/* ARGREGS: r3 r4 r5 r6 r7 r8 r9 r10 (the rest on stack somewhere) */
 
 /* These regs are trashed by the hidden call. */
-#define __CALLER_SAVED_REGS "r0", "r1", "r2", "r3","r4","r14"
+#define __CALLER_SAVED_REGS                                       \
+   "lr", "ctr", "xer",                                            \
+   "cr0", "cr1", "cr2", "cr3", "cr4", "cr5", "cr6", "cr7",        \
+   "r0", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10",   \
+   "r11", "r12", "r13"
 
 /* Macros to save and align the stack before making a function
    call and restore it afterwards as gcc may not keep the stack
    pointer aligned if it doesn't realise calls are being made
    to other functions. */
 
-/* This is a bit tricky.  We store the original stack pointer in r10
-   as it is callee-saves.  gcc doesn't allow the use of r11 for some
-   reason.  Also, we can't directly "bic" the stack pointer in thumb
-   mode since r13 isn't an allowed register number in that context.
-   So use r4 as a temporary, since that is about to get trashed
-   anyway, just after each use of this macro.  Side effect is we need
-   to be very careful about any future changes, since
-   VALGRIND_ALIGN_STACK simply assumes r4 is usable. */
 #define VALGRIND_ALIGN_STACK               \
-      "mov r10, sp\n\t"                    \
-      "mov r4,  sp\n\t"                    \
-      "bic r4,  r4, #7\n\t"                \
-      "mov sp,  r4\n\t"
+      "mr 28,1\n\t"                        \
+      "rldicr 1,1,0,59\n\t"
 #define VALGRIND_RESTORE_STACK             \
-      "mov sp,  r10\n\t"
+      "mr 1,28\n\t"
 
-/* These CALL_FN_ macros assume that on arm-linux, sizeof(unsigned
-   long) == 4. */
+/* These CALL_FN_ macros assume that on ppc64-linux, sizeof(unsigned
+   long) == 8. */
 
 #define CALL_FN_W_v(lval, orig)                                   \
    do {                                                           \
       volatile OrigFn        _orig = (orig);                      \
-      volatile unsigned long _argvec[1];                          \
+      volatile unsigned long _argvec[3+0];                        \
       volatile unsigned long _res;                                \
-      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      /* _argvec[0] holds current r2 across the call */           \
+      _argvec[1] = (unsigned long)_orig.r2;                       \
+      _argvec[2] = (unsigned long)_orig.nraddr;                   \
       __asm__ volatile(                                           \
          VALGRIND_ALIGN_STACK                                     \
-         "ldr r4, [%1] \n\t"  /* target->r4 */                    \
-         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4                   \
+         "mr 12,%1\n\t"                                           \
+         "std 2,-16(12)\n\t"  /* save tocptr */                   \
+         "ld   2,-8(12)\n\t"  /* use nraddr's tocptr */           \
+         "ld  12, 0(12)\n\t"  /* target->r12 */                   \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R12                  \
+         "mr 12,%1\n\t"                                           \
+         "mr %0,3\n\t"                                            \
+         "ld 2,-16(12)\n\t" /* restore tocptr */                  \
          VALGRIND_RESTORE_STACK                                   \
-         "mov %0, r0\n"                                           \
          : /*out*/   "=r" (_res)                                  \
-         : /*in*/    "0" (&_argvec[0])                            \
-         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r10"   \
+         : /*in*/    "r" (&_argvec[2])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28"   \
       );                                                          \
       lval = (__typeof__(lval)) _res;                             \
    } while (0)
@@ -2987,20 +3228,27 @@ typedef
 #define CALL_FN_W_W(lval, orig, arg1)                             \
    do {                                                           \
       volatile OrigFn        _orig = (orig);                      \
-      volatile unsigned long _argvec[2];                          \
+      volatile unsigned long _argvec[3+1];                        \
       volatile unsigned long _res;                                \
-      _argvec[0] = (unsigned long)_orig.nraddr;                   \
-      _argvec[1] = (unsigned long)(arg1);                         \
+      /* _argvec[0] holds current r2 across the call */           \
+      _argvec[1]   = (unsigned long)_orig.r2;                     \
+      _argvec[2]   = (unsigned long)_orig.nraddr;                 \
+      _argvec[2+1] = (unsigned long)arg1;                         \
       __asm__ volatile(                                           \
          VALGRIND_ALIGN_STACK                                     \
-         "ldr r0, [%1, #4] \n\t"                                  \
-         "ldr r4, [%1] \n\t"  /* target->r4 */                    \
-         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4                   \
+         "mr 12,%1\n\t"                                           \
+         "std 2,-16(12)\n\t"  /* save tocptr */                   \
+         "ld   2,-8(12)\n\t"  /* use nraddr's tocptr */           \
+         "ld   3, 8(12)\n\t"  /* arg1->r3 */                      \
+         "ld  12, 0(12)\n\t"  /* target->r12 */                   \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R12                  \
+         "mr 12,%1\n\t"                                           \
+         "mr %0,3\n\t"                                            \
+         "ld 2,-16(12)\n\t" /* restore tocptr */                  \
          VALGRIND_RESTORE_STACK                                   \
-         "mov %0, r0\n"                                           \
          : /*out*/   "=r" (_res)                                  \
-         : /*in*/    "0" (&_argvec[0])                            \
-         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r10"   \
+         : /*in*/    "r" (&_argvec[2])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28"   \
       );                                                          \
       lval = (__typeof__(lval)) _res;                             \
    } while (0)
@@ -3008,22 +3256,29 @@ typedef
 #define CALL_FN_W_WW(lval, orig, arg1,arg2)                       \
    do {                                                           \
       volatile OrigFn        _orig = (orig);                      \
-      volatile unsigned long _argvec[3];                          \
+      volatile unsigned long _argvec[3+2];                        \
       volatile unsigned long _res;                                \
-      _argvec[0] = (unsigned long)_orig.nraddr;                   \
-      _argvec[1] = (unsigned long)(arg1);                         \
-      _argvec[2] = (unsigned long)(arg2);                         \
+      /* _argvec[0] holds current r2 across the call */           \
+      _argvec[1]   = (unsigned long)_orig.r2;                     \
+      _argvec[2]   = (unsigned long)_orig.nraddr;                 \
+      _argvec[2+1] = (unsigned long)arg1;                         \
+      _argvec[2+2] = (unsigned long)arg2;                         \
       __asm__ volatile(                                           \
          VALGRIND_ALIGN_STACK                                     \
-         "ldr r0, [%1, #4] \n\t"                                  \
-         "ldr r1, [%1, #8] \n\t"                                  \
-         "ldr r4, [%1] \n\t"  /* target->r4 */                    \
-         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4                   \
+         "mr 12,%1\n\t"                                           \
+         "std 2,-16(12)\n\t"  /* save tocptr */                   \
+         "ld   2,-8(12)\n\t"  /* use nraddr's tocptr */           \
+         "ld   3, 8(12)\n\t"  /* arg1->r3 */                      \
+         "ld   4, 16(12)\n\t" /* arg2->r4 */                      \
+         "ld  12, 0(12)\n\t"  /* target->r12 */                   \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R12                  \
+         "mr 12,%1\n\t"                                           \
+         "mr %0,3\n\t"                                            \
+         "ld 2,-16(12)\n\t" /* restore tocptr */                  \
          VALGRIND_RESTORE_STACK                                   \
-         "mov %0, r0\n"                                           \
          : /*out*/   "=r" (_res)                                  \
-         : /*in*/    "0" (&_argvec[0])                            \
-         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r10"   \
+         : /*in*/    "r" (&_argvec[2])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28"   \
       );                                                          \
       lval = (__typeof__(lval)) _res;                             \
    } while (0)
@@ -3031,24 +3286,31 @@ typedef
 #define CALL_FN_W_WWW(lval, orig, arg1,arg2,arg3)                 \
    do {                                                           \
       volatile OrigFn        _orig = (orig);                      \
-      volatile unsigned long _argvec[4];                          \
+      volatile unsigned long _argvec[3+3];                        \
       volatile unsigned long _res;                                \
-      _argvec[0] = (unsigned long)_orig.nraddr;                   \
-      _argvec[1] = (unsigned long)(arg1);                         \
-      _argvec[2] = (unsigned long)(arg2);                         \
-      _argvec[3] = (unsigned long)(arg3);                         \
+      /* _argvec[0] holds current r2 across the call */           \
+      _argvec[1]   = (unsigned long)_orig.r2;                     \
+      _argvec[2]   = (unsigned long)_orig.nraddr;                 \
+      _argvec[2+1] = (unsigned long)arg1;                         \
+      _argvec[2+2] = (unsigned long)arg2;                         \
+      _argvec[2+3] = (unsigned long)arg3;                         \
       __asm__ volatile(                                           \
          VALGRIND_ALIGN_STACK                                     \
-         "ldr r0, [%1, #4] \n\t"                                  \
-         "ldr r1, [%1, #8] \n\t"                                  \
-         "ldr r2, [%1, #12] \n\t"                                 \
-         "ldr r4, [%1] \n\t"  /* target->r4 */                    \
-         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4                   \
+         "mr 12,%1\n\t"                                           \
+         "std 2,-16(12)\n\t"  /* save tocptr */                   \
+         "ld   2,-8(12)\n\t"  /* use nraddr's tocptr */           \
+         "ld   3, 8(12)\n\t"  /* arg1->r3 */                      \
+         "ld   4, 16(12)\n\t" /* arg2->r4 */                      \
+         "ld   5, 24(12)\n\t" /* arg3->r5 */                      \
+         "ld  12, 0(12)\n\t"  /* target->r12 */                   \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R12                  \
+         "mr 12,%1\n\t"                                           \
+         "mr %0,3\n\t"                                            \
+         "ld 2,-16(12)\n\t" /* restore tocptr */                  \
          VALGRIND_RESTORE_STACK                                   \
-         "mov %0, r0\n"                                           \
          : /*out*/   "=r" (_res)                                  \
-         : /*in*/    "0" (&_argvec[0])                            \
-         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r10"   \
+         : /*in*/    "r" (&_argvec[2])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28"   \
       );                                                          \
       lval = (__typeof__(lval)) _res;                             \
    } while (0)
@@ -3056,15 +3318,647 @@ typedef
 #define CALL_FN_W_WWWW(lval, orig, arg1,arg2,arg3,arg4)           \
    do {                                                           \
       volatile OrigFn        _orig = (orig);                      \
-      volatile unsigned long _argvec[5];                          \
+      volatile unsigned long _argvec[3+4];                        \
       volatile unsigned long _res;                                \
-      _argvec[0] = (unsigned long)_orig.nraddr;                   \
-      _argvec[1] = (unsigned long)(arg1);                         \
-      _argvec[2] = (unsigned long)(arg2);                         \
-      _argvec[3] = (unsigned long)(arg3);                         \
-      _argvec[4] = (unsigned long)(arg4);                         \
+      /* _argvec[0] holds current r2 across the call */           \
+      _argvec[1]   = (unsigned long)_orig.r2;                     \
+      _argvec[2]   = (unsigned long)_orig.nraddr;                 \
+      _argvec[2+1] = (unsigned long)arg1;                         \
+      _argvec[2+2] = (unsigned long)arg2;                         \
+      _argvec[2+3] = (unsigned long)arg3;                         \
+      _argvec[2+4] = (unsigned long)arg4;                         \
       __asm__ volatile(                                           \
          VALGRIND_ALIGN_STACK                                     \
+         "mr 12,%1\n\t"                                           \
+         "std 2,-16(12)\n\t"  /* save tocptr */                   \
+         "ld   2,-8(12)\n\t"  /* use nraddr's tocptr */           \
+         "ld   3, 8(12)\n\t"  /* arg1->r3 */                      \
+         "ld   4, 16(12)\n\t" /* arg2->r4 */                      \
+         "ld   5, 24(12)\n\t" /* arg3->r5 */                      \
+         "ld   6, 32(12)\n\t" /* arg4->r6 */                      \
+         "ld  12, 0(12)\n\t"  /* target->r12 */                   \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R12                  \
+         "mr 12,%1\n\t"                                           \
+         "mr %0,3\n\t"                                            \
+         "ld 2,-16(12)\n\t" /* restore tocptr */                  \
+         VALGRIND_RESTORE_STACK                                   \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[2])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28"   \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_5W(lval, orig, arg1,arg2,arg3,arg4,arg5)        \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[3+5];                        \
+      volatile unsigned long _res;                                \
+      /* _argvec[0] holds current r2 across the call */           \
+      _argvec[1]   = (unsigned long)_orig.r2;                     \
+      _argvec[2]   = (unsigned long)_orig.nraddr;                 \
+      _argvec[2+1] = (unsigned long)arg1;                         \
+      _argvec[2+2] = (unsigned long)arg2;                         \
+      _argvec[2+3] = (unsigned long)arg3;                         \
+      _argvec[2+4] = (unsigned long)arg4;                         \
+      _argvec[2+5] = (unsigned long)arg5;                         \
+      __asm__ volatile(                                           \
+         VALGRIND_ALIGN_STACK                                     \
+         "mr 12,%1\n\t"                                           \
+         "std 2,-16(12)\n\t"  /* save tocptr */                   \
+         "ld   2,-8(12)\n\t"  /* use nraddr's tocptr */           \
+         "ld   3, 8(12)\n\t"  /* arg1->r3 */                      \
+         "ld   4, 16(12)\n\t" /* arg2->r4 */                      \
+         "ld   5, 24(12)\n\t" /* arg3->r5 */                      \
+         "ld   6, 32(12)\n\t" /* arg4->r6 */                      \
+         "ld   7, 40(12)\n\t" /* arg5->r7 */                      \
+         "ld  12, 0(12)\n\t"  /* target->r12 */                   \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R12                  \
+         "mr 12,%1\n\t"                                           \
+         "mr %0,3\n\t"                                            \
+         "ld 2,-16(12)\n\t" /* restore tocptr */                  \
+         VALGRIND_RESTORE_STACK                                   \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[2])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28"   \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_6W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6)   \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[3+6];                        \
+      volatile unsigned long _res;                                \
+      /* _argvec[0] holds current r2 across the call */           \
+      _argvec[1]   = (unsigned long)_orig.r2;                     \
+      _argvec[2]   = (unsigned long)_orig.nraddr;                 \
+      _argvec[2+1] = (unsigned long)arg1;                         \
+      _argvec[2+2] = (unsigned long)arg2;                         \
+      _argvec[2+3] = (unsigned long)arg3;                         \
+      _argvec[2+4] = (unsigned long)arg4;                         \
+      _argvec[2+5] = (unsigned long)arg5;                         \
+      _argvec[2+6] = (unsigned long)arg6;                         \
+      __asm__ volatile(                                           \
+         VALGRIND_ALIGN_STACK                                     \
+         "mr 12,%1\n\t"                                           \
+         "std 2,-16(12)\n\t"  /* save tocptr */                   \
+         "ld   2,-8(12)\n\t"  /* use nraddr's tocptr */           \
+         "ld   3, 8(12)\n\t"  /* arg1->r3 */                      \
+         "ld   4, 16(12)\n\t" /* arg2->r4 */                      \
+         "ld   5, 24(12)\n\t" /* arg3->r5 */                      \
+         "ld   6, 32(12)\n\t" /* arg4->r6 */                      \
+         "ld   7, 40(12)\n\t" /* arg5->r7 */                      \
+         "ld   8, 48(12)\n\t" /* arg6->r8 */                      \
+         "ld  12, 0(12)\n\t"  /* target->r12 */                   \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R12                  \
+         "mr 12,%1\n\t"                                           \
+         "mr %0,3\n\t"                                            \
+         "ld 2,-16(12)\n\t" /* restore tocptr */                  \
+         VALGRIND_RESTORE_STACK                                   \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[2])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28"   \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_7W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6,   \
+                                 arg7)                            \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[3+7];                        \
+      volatile unsigned long _res;                                \
+      /* _argvec[0] holds current r2 across the call */           \
+      _argvec[1]   = (unsigned long)_orig.r2;                     \
+      _argvec[2]   = (unsigned long)_orig.nraddr;                 \
+      _argvec[2+1] = (unsigned long)arg1;                         \
+      _argvec[2+2] = (unsigned long)arg2;                         \
+      _argvec[2+3] = (unsigned long)arg3;                         \
+      _argvec[2+4] = (unsigned long)arg4;                         \
+      _argvec[2+5] = (unsigned long)arg5;                         \
+      _argvec[2+6] = (unsigned long)arg6;                         \
+      _argvec[2+7] = (unsigned long)arg7;                         \
+      __asm__ volatile(                                           \
+         VALGRIND_ALIGN_STACK                                     \
+         "mr 12,%1\n\t"                                           \
+         "std 2,-16(12)\n\t"  /* save tocptr */                   \
+         "ld   2,-8(12)\n\t"  /* use nraddr's tocptr */           \
+         "ld   3, 8(12)\n\t"  /* arg1->r3 */                      \
+         "ld   4, 16(12)\n\t" /* arg2->r4 */                      \
+         "ld   5, 24(12)\n\t" /* arg3->r5 */                      \
+         "ld   6, 32(12)\n\t" /* arg4->r6 */                      \
+         "ld   7, 40(12)\n\t" /* arg5->r7 */                      \
+         "ld   8, 48(12)\n\t" /* arg6->r8 */                      \
+         "ld   9, 56(12)\n\t" /* arg7->r9 */                      \
+         "ld  12, 0(12)\n\t"  /* target->r12 */                   \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R12                  \
+         "mr 12,%1\n\t"                                           \
+         "mr %0,3\n\t"                                            \
+         "ld 2,-16(12)\n\t" /* restore tocptr */                  \
+         VALGRIND_RESTORE_STACK                                   \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[2])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28"   \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_8W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6,   \
+                                 arg7,arg8)                       \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[3+8];                        \
+      volatile unsigned long _res;                                \
+      /* _argvec[0] holds current r2 across the call */           \
+      _argvec[1]   = (unsigned long)_orig.r2;                     \
+      _argvec[2]   = (unsigned long)_orig.nraddr;                 \
+      _argvec[2+1] = (unsigned long)arg1;                         \
+      _argvec[2+2] = (unsigned long)arg2;                         \
+      _argvec[2+3] = (unsigned long)arg3;                         \
+      _argvec[2+4] = (unsigned long)arg4;                         \
+      _argvec[2+5] = (unsigned long)arg5;                         \
+      _argvec[2+6] = (unsigned long)arg6;                         \
+      _argvec[2+7] = (unsigned long)arg7;                         \
+      _argvec[2+8] = (unsigned long)arg8;                         \
+      __asm__ volatile(                                           \
+         VALGRIND_ALIGN_STACK                                     \
+         "mr 12,%1\n\t"                                           \
+         "std 2,-16(12)\n\t"  /* save tocptr */                   \
+         "ld   2,-8(12)\n\t"  /* use nraddr's tocptr */           \
+         "ld   3, 8(12)\n\t"  /* arg1->r3 */                      \
+         "ld   4, 16(12)\n\t" /* arg2->r4 */                      \
+         "ld   5, 24(12)\n\t" /* arg3->r5 */                      \
+         "ld   6, 32(12)\n\t" /* arg4->r6 */                      \
+         "ld   7, 40(12)\n\t" /* arg5->r7 */                      \
+         "ld   8, 48(12)\n\t" /* arg6->r8 */                      \
+         "ld   9, 56(12)\n\t" /* arg7->r9 */                      \
+         "ld  10, 64(12)\n\t" /* arg8->r10 */                     \
+         "ld  12, 0(12)\n\t"  /* target->r12 */                   \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R12                  \
+         "mr 12,%1\n\t"                                           \
+         "mr %0,3\n\t"                                            \
+         "ld 2,-16(12)\n\t" /* restore tocptr */                  \
+         VALGRIND_RESTORE_STACK                                   \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[2])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28"   \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_9W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6,   \
+                                 arg7,arg8,arg9)                  \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[3+9];                        \
+      volatile unsigned long _res;                                \
+      /* _argvec[0] holds current r2 across the call */           \
+      _argvec[1]   = (unsigned long)_orig.r2;                     \
+      _argvec[2]   = (unsigned long)_orig.nraddr;                 \
+      _argvec[2+1] = (unsigned long)arg1;                         \
+      _argvec[2+2] = (unsigned long)arg2;                         \
+      _argvec[2+3] = (unsigned long)arg3;                         \
+      _argvec[2+4] = (unsigned long)arg4;                         \
+      _argvec[2+5] = (unsigned long)arg5;                         \
+      _argvec[2+6] = (unsigned long)arg6;                         \
+      _argvec[2+7] = (unsigned long)arg7;                         \
+      _argvec[2+8] = (unsigned long)arg8;                         \
+      _argvec[2+9] = (unsigned long)arg9;                         \
+      __asm__ volatile(                                           \
+         VALGRIND_ALIGN_STACK                                     \
+         "mr 12,%1\n\t"                                           \
+         "std 2,-16(12)\n\t"  /* save tocptr */                   \
+         "ld   2,-8(12)\n\t"  /* use nraddr's tocptr */           \
+         "addi 1,1,-128\n\t"  /* expand stack frame */            \
+         /* arg9 */                                               \
+         "ld  3,72(12)\n\t"                                       \
+         "std 3,96(1)\n\t"                                        \
+         /* args1-8 */                                            \
+         "ld   3, 8(12)\n\t"  /* arg1->r3 */                      \
+         "ld   4, 16(12)\n\t" /* arg2->r4 */                      \
+         "ld   5, 24(12)\n\t" /* arg3->r5 */                      \
+         "ld   6, 32(12)\n\t" /* arg4->r6 */                      \
+         "ld   7, 40(12)\n\t" /* arg5->r7 */                      \
+         "ld   8, 48(12)\n\t" /* arg6->r8 */                      \
+         "ld   9, 56(12)\n\t" /* arg7->r9 */                      \
+         "ld  10, 64(12)\n\t" /* arg8->r10 */                     \
+         "ld  12, 0(12)\n\t"  /* target->r12 */                   \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R12                  \
+         "mr 12,%1\n\t"                                           \
+         "mr %0,3\n\t"                                            \
+         "ld 2,-16(12)\n\t" /* restore tocptr */                  \
+         VALGRIND_RESTORE_STACK                                   \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[2])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28"   \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_10W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6,  \
+                                  arg7,arg8,arg9,arg10)           \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[3+10];                       \
+      volatile unsigned long _res;                                \
+      /* _argvec[0] holds current r2 across the call */           \
+      _argvec[1]   = (unsigned long)_orig.r2;                     \
+      _argvec[2]   = (unsigned long)_orig.nraddr;                 \
+      _argvec[2+1] = (unsigned long)arg1;                         \
+      _argvec[2+2] = (unsigned long)arg2;                         \
+      _argvec[2+3] = (unsigned long)arg3;                         \
+      _argvec[2+4] = (unsigned long)arg4;                         \
+      _argvec[2+5] = (unsigned long)arg5;                         \
+      _argvec[2+6] = (unsigned long)arg6;                         \
+      _argvec[2+7] = (unsigned long)arg7;                         \
+      _argvec[2+8] = (unsigned long)arg8;                         \
+      _argvec[2+9] = (unsigned long)arg9;                         \
+      _argvec[2+10] = (unsigned long)arg10;                       \
+      __asm__ volatile(                                           \
+         VALGRIND_ALIGN_STACK                                     \
+         "mr 12,%1\n\t"                                           \
+         "std 2,-16(12)\n\t"  /* save tocptr */                   \
+         "ld   2,-8(12)\n\t"  /* use nraddr's tocptr */           \
+         "addi 1,1,-128\n\t"  /* expand stack frame */            \
+         /* arg10 */                                              \
+         "ld  3,80(12)\n\t"                                       \
+         "std 3,104(1)\n\t"                                       \
+         /* arg9 */                                               \
+         "ld  3,72(12)\n\t"                                       \
+         "std 3,96(1)\n\t"                                        \
+         /* args1-8 */                                            \
+         "ld   3, 8(12)\n\t"  /* arg1->r3 */                      \
+         "ld   4, 16(12)\n\t" /* arg2->r4 */                      \
+         "ld   5, 24(12)\n\t" /* arg3->r5 */                      \
+         "ld   6, 32(12)\n\t" /* arg4->r6 */                      \
+         "ld   7, 40(12)\n\t" /* arg5->r7 */                      \
+         "ld   8, 48(12)\n\t" /* arg6->r8 */                      \
+         "ld   9, 56(12)\n\t" /* arg7->r9 */                      \
+         "ld  10, 64(12)\n\t" /* arg8->r10 */                     \
+         "ld  12, 0(12)\n\t"  /* target->r12 */                   \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R12                  \
+         "mr 12,%1\n\t"                                           \
+         "mr %0,3\n\t"                                            \
+         "ld 2,-16(12)\n\t" /* restore tocptr */                  \
+         VALGRIND_RESTORE_STACK                                   \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[2])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28"   \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_11W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6,  \
+                                  arg7,arg8,arg9,arg10,arg11)     \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[3+11];                       \
+      volatile unsigned long _res;                                \
+      /* _argvec[0] holds current r2 across the call */           \
+      _argvec[1]   = (unsigned long)_orig.r2;                     \
+      _argvec[2]   = (unsigned long)_orig.nraddr;                 \
+      _argvec[2+1] = (unsigned long)arg1;                         \
+      _argvec[2+2] = (unsigned long)arg2;                         \
+      _argvec[2+3] = (unsigned long)arg3;                         \
+      _argvec[2+4] = (unsigned long)arg4;                         \
+      _argvec[2+5] = (unsigned long)arg5;                         \
+      _argvec[2+6] = (unsigned long)arg6;                         \
+      _argvec[2+7] = (unsigned long)arg7;                         \
+      _argvec[2+8] = (unsigned long)arg8;                         \
+      _argvec[2+9] = (unsigned long)arg9;                         \
+      _argvec[2+10] = (unsigned long)arg10;                       \
+      _argvec[2+11] = (unsigned long)arg11;                       \
+      __asm__ volatile(                                           \
+         VALGRIND_ALIGN_STACK                                     \
+         "mr 12,%1\n\t"                                           \
+         "std 2,-16(12)\n\t"  /* save tocptr */                   \
+         "ld   2,-8(12)\n\t"  /* use nraddr's tocptr */           \
+         "addi 1,1,-144\n\t"  /* expand stack frame */            \
+         /* arg11 */                                              \
+         "ld  3,88(12)\n\t"                                       \
+         "std 3,112(1)\n\t"                                       \
+         /* arg10 */                                              \
+         "ld  3,80(12)\n\t"                                       \
+         "std 3,104(1)\n\t"                                       \
+         /* arg9 */                                               \
+         "ld  3,72(12)\n\t"                                       \
+         "std 3,96(1)\n\t"                                        \
+         /* args1-8 */                                            \
+         "ld   3, 8(12)\n\t"  /* arg1->r3 */                      \
+         "ld   4, 16(12)\n\t" /* arg2->r4 */                      \
+         "ld   5, 24(12)\n\t" /* arg3->r5 */                      \
+         "ld   6, 32(12)\n\t" /* arg4->r6 */                      \
+         "ld   7, 40(12)\n\t" /* arg5->r7 */                      \
+         "ld   8, 48(12)\n\t" /* arg6->r8 */                      \
+         "ld   9, 56(12)\n\t" /* arg7->r9 */                      \
+         "ld  10, 64(12)\n\t" /* arg8->r10 */                     \
+         "ld  12, 0(12)\n\t"  /* target->r12 */                   \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R12                  \
+         "mr 12,%1\n\t"                                           \
+         "mr %0,3\n\t"                                            \
+         "ld 2,-16(12)\n\t" /* restore tocptr */                  \
+         VALGRIND_RESTORE_STACK                                   \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[2])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28"   \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_12W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6,  \
+                                arg7,arg8,arg9,arg10,arg11,arg12) \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[3+12];                       \
+      volatile unsigned long _res;                                \
+      /* _argvec[0] holds current r2 across the call */           \
+      _argvec[1]   = (unsigned long)_orig.r2;                     \
+      _argvec[2]   = (unsigned long)_orig.nraddr;                 \
+      _argvec[2+1] = (unsigned long)arg1;                         \
+      _argvec[2+2] = (unsigned long)arg2;                         \
+      _argvec[2+3] = (unsigned long)arg3;                         \
+      _argvec[2+4] = (unsigned long)arg4;                         \
+      _argvec[2+5] = (unsigned long)arg5;                         \
+      _argvec[2+6] = (unsigned long)arg6;                         \
+      _argvec[2+7] = (unsigned long)arg7;                         \
+      _argvec[2+8] = (unsigned long)arg8;                         \
+      _argvec[2+9] = (unsigned long)arg9;                         \
+      _argvec[2+10] = (unsigned long)arg10;                       \
+      _argvec[2+11] = (unsigned long)arg11;                       \
+      _argvec[2+12] = (unsigned long)arg12;                       \
+      __asm__ volatile(                                           \
+         VALGRIND_ALIGN_STACK                                     \
+         "mr 12,%1\n\t"                                           \
+         "std 2,-16(12)\n\t"  /* save tocptr */                   \
+         "ld   2,-8(12)\n\t"  /* use nraddr's tocptr */           \
+         "addi 1,1,-144\n\t"  /* expand stack frame */            \
+         /* arg12 */                                              \
+         "ld  3,96(12)\n\t"                                       \
+         "std 3,120(1)\n\t"                                       \
+         /* arg11 */                                              \
+         "ld  3,88(12)\n\t"                                       \
+         "std 3,112(1)\n\t"                                       \
+         /* arg10 */                                              \
+         "ld  3,80(12)\n\t"                                       \
+         "std 3,104(1)\n\t"                                       \
+         /* arg9 */                                               \
+         "ld  3,72(12)\n\t"                                       \
+         "std 3,96(1)\n\t"                                        \
+         /* args1-8 */                                            \
+         "ld   3, 8(12)\n\t"  /* arg1->r3 */                      \
+         "ld   4, 16(12)\n\t" /* arg2->r4 */                      \
+         "ld   5, 24(12)\n\t" /* arg3->r5 */                      \
+         "ld   6, 32(12)\n\t" /* arg4->r6 */                      \
+         "ld   7, 40(12)\n\t" /* arg5->r7 */                      \
+         "ld   8, 48(12)\n\t" /* arg6->r8 */                      \
+         "ld   9, 56(12)\n\t" /* arg7->r9 */                      \
+         "ld  10, 64(12)\n\t" /* arg8->r10 */                     \
+         "ld  12, 0(12)\n\t"  /* target->r12 */                   \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R12                  \
+         "mr 12,%1\n\t"                                           \
+         "mr %0,3\n\t"                                            \
+         "ld 2,-16(12)\n\t" /* restore tocptr */                  \
+         VALGRIND_RESTORE_STACK                                   \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[2])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28"   \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#endif /* PLAT_ppc64le_linux */
+
+/* ------------------------- arm-linux ------------------------- */
+
+#if defined(PLAT_arm_linux)
+
+/* These regs are trashed by the hidden call. */
+#define __CALLER_SAVED_REGS "r0", "r1", "r2", "r3","r4","r14"
+
+/* Macros to save and align the stack before making a function
+   call and restore it afterwards as gcc may not keep the stack
+   pointer aligned if it doesn't realise calls are being made
+   to other functions. */
+
+/* This is a bit tricky.  We store the original stack pointer in r10
+   as it is callee-saves.  gcc doesn't allow the use of r11 for some
+   reason.  Also, we can't directly "bic" the stack pointer in thumb
+   mode since r13 isn't an allowed register number in that context.
+   So use r4 as a temporary, since that is about to get trashed
+   anyway, just after each use of this macro.  Side effect is we need
+   to be very careful about any future changes, since
+   VALGRIND_ALIGN_STACK simply assumes r4 is usable. */
+#define VALGRIND_ALIGN_STACK               \
+      "mov r10, sp\n\t"                    \
+      "mov r4,  sp\n\t"                    \
+      "bic r4,  r4, #7\n\t"                \
+      "mov sp,  r4\n\t"
+#define VALGRIND_RESTORE_STACK             \
+      "mov sp,  r10\n\t"
+
+/* These CALL_FN_ macros assume that on arm-linux, sizeof(unsigned
+   long) == 4. */
+
+#define CALL_FN_W_v(lval, orig)                                   \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[1];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      __asm__ volatile(                                           \
+         VALGRIND_ALIGN_STACK                                     \
+         "ldr r4, [%1] \n\t"  /* target->r4 */                    \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4                   \
+         VALGRIND_RESTORE_STACK                                   \
+         "mov %0, r0\n"                                           \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "0" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r10"   \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_W(lval, orig, arg1)                             \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[2];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      __asm__ volatile(                                           \
+         VALGRIND_ALIGN_STACK                                     \
+         "ldr r0, [%1, #4] \n\t"                                  \
+         "ldr r4, [%1] \n\t"  /* target->r4 */                    \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4                   \
+         VALGRIND_RESTORE_STACK                                   \
+         "mov %0, r0\n"                                           \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "0" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r10"   \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_WW(lval, orig, arg1,arg2)                       \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[3];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      __asm__ volatile(                                           \
+         VALGRIND_ALIGN_STACK                                     \
+         "ldr r0, [%1, #4] \n\t"                                  \
+         "ldr r1, [%1, #8] \n\t"                                  \
+         "ldr r4, [%1] \n\t"  /* target->r4 */                    \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4                   \
+         VALGRIND_RESTORE_STACK                                   \
+         "mov %0, r0\n"                                           \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "0" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r10"   \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_WWW(lval, orig, arg1,arg2,arg3)                 \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[4];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      _argvec[3] = (unsigned long)(arg3);                         \
+      __asm__ volatile(                                           \
+         VALGRIND_ALIGN_STACK                                     \
+         "ldr r0, [%1, #4] \n\t"                                  \
+         "ldr r1, [%1, #8] \n\t"                                  \
+         "ldr r2, [%1, #12] \n\t"                                 \
+         "ldr r4, [%1] \n\t"  /* target->r4 */                    \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4                   \
+         VALGRIND_RESTORE_STACK                                   \
+         "mov %0, r0\n"                                           \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "0" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r10"   \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_WWWW(lval, orig, arg1,arg2,arg3,arg4)           \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[5];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      _argvec[3] = (unsigned long)(arg3);                         \
+      _argvec[4] = (unsigned long)(arg4);                         \
+      __asm__ volatile(                                           \
+         VALGRIND_ALIGN_STACK                                     \
+         "ldr r0, [%1, #4] \n\t"                                  \
+         "ldr r1, [%1, #8] \n\t"                                  \
+         "ldr r2, [%1, #12] \n\t"                                 \
+         "ldr r3, [%1, #16] \n\t"                                 \
+         "ldr r4, [%1] \n\t"  /* target->r4 */                    \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4                   \
+         VALGRIND_RESTORE_STACK                                   \
+         "mov %0, r0"                                             \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "0" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r10"   \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_5W(lval, orig, arg1,arg2,arg3,arg4,arg5)        \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[6];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      _argvec[3] = (unsigned long)(arg3);                         \
+      _argvec[4] = (unsigned long)(arg4);                         \
+      _argvec[5] = (unsigned long)(arg5);                         \
+      __asm__ volatile(                                           \
+         VALGRIND_ALIGN_STACK                                     \
+         "sub sp, sp, #4 \n\t"                                    \
+         "ldr r0, [%1, #20] \n\t"                                 \
+         "push {r0} \n\t"                                         \
+         "ldr r0, [%1, #4] \n\t"                                  \
+         "ldr r1, [%1, #8] \n\t"                                  \
+         "ldr r2, [%1, #12] \n\t"                                 \
+         "ldr r3, [%1, #16] \n\t"                                 \
+         "ldr r4, [%1] \n\t"  /* target->r4 */                    \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4                   \
+         VALGRIND_RESTORE_STACK                                   \
+         "mov %0, r0"                                             \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "0" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r10"   \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_6W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6)   \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[7];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      _argvec[3] = (unsigned long)(arg3);                         \
+      _argvec[4] = (unsigned long)(arg4);                         \
+      _argvec[5] = (unsigned long)(arg5);                         \
+      _argvec[6] = (unsigned long)(arg6);                         \
+      __asm__ volatile(                                           \
+         VALGRIND_ALIGN_STACK                                     \
+         "ldr r0, [%1, #20] \n\t"                                 \
+         "ldr r1, [%1, #24] \n\t"                                 \
+         "push {r0, r1} \n\t"                                     \
+         "ldr r0, [%1, #4] \n\t"                                  \
+         "ldr r1, [%1, #8] \n\t"                                  \
+         "ldr r2, [%1, #12] \n\t"                                 \
+         "ldr r3, [%1, #16] \n\t"                                 \
+         "ldr r4, [%1] \n\t"  /* target->r4 */                    \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4                   \
+         VALGRIND_RESTORE_STACK                                   \
+         "mov %0, r0"                                             \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "0" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r10"   \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_7W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6,   \
+                                 arg7)                            \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[8];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      _argvec[3] = (unsigned long)(arg3);                         \
+      _argvec[4] = (unsigned long)(arg4);                         \
+      _argvec[5] = (unsigned long)(arg5);                         \
+      _argvec[6] = (unsigned long)(arg6);                         \
+      _argvec[7] = (unsigned long)(arg7);                         \
+      __asm__ volatile(                                           \
+         VALGRIND_ALIGN_STACK                                     \
+         "sub sp, sp, #4 \n\t"                                    \
+         "ldr r0, [%1, #20] \n\t"                                 \
+         "ldr r1, [%1, #24] \n\t"                                 \
+         "ldr r2, [%1, #28] \n\t"                                 \
+         "push {r0, r1, r2} \n\t"                                 \
          "ldr r0, [%1, #4] \n\t"                                  \
          "ldr r1, [%1, #8] \n\t"                                  \
          "ldr r2, [%1, #12] \n\t"                                 \
@@ -3072,10 +3966,364 @@ typedef
          "ldr r4, [%1] \n\t"  /* target->r4 */                    \
          VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4                   \
          VALGRIND_RESTORE_STACK                                   \
-         "mov %0, r0"                                             \
+         "mov %0, r0"                                             \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "0" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r10"   \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_8W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6,   \
+                                 arg7,arg8)                       \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[9];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      _argvec[3] = (unsigned long)(arg3);                         \
+      _argvec[4] = (unsigned long)(arg4);                         \
+      _argvec[5] = (unsigned long)(arg5);                         \
+      _argvec[6] = (unsigned long)(arg6);                         \
+      _argvec[7] = (unsigned long)(arg7);                         \
+      _argvec[8] = (unsigned long)(arg8);                         \
+      __asm__ volatile(                                           \
+         VALGRIND_ALIGN_STACK                                     \
+         "ldr r0, [%1, #20] \n\t"                                 \
+         "ldr r1, [%1, #24] \n\t"                                 \
+         "ldr r2, [%1, #28] \n\t"                                 \
+         "ldr r3, [%1, #32] \n\t"                                 \
+         "push {r0, r1, r2, r3} \n\t"                             \
+         "ldr r0, [%1, #4] \n\t"                                  \
+         "ldr r1, [%1, #8] \n\t"                                  \
+         "ldr r2, [%1, #12] \n\t"                                 \
+         "ldr r3, [%1, #16] \n\t"                                 \
+         "ldr r4, [%1] \n\t"  /* target->r4 */                    \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4                   \
+         VALGRIND_RESTORE_STACK                                   \
+         "mov %0, r0"                                             \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "0" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r10"   \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_9W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6,   \
+                                 arg7,arg8,arg9)                  \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[10];                         \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      _argvec[3] = (unsigned long)(arg3);                         \
+      _argvec[4] = (unsigned long)(arg4);                         \
+      _argvec[5] = (unsigned long)(arg5);                         \
+      _argvec[6] = (unsigned long)(arg6);                         \
+      _argvec[7] = (unsigned long)(arg7);                         \
+      _argvec[8] = (unsigned long)(arg8);                         \
+      _argvec[9] = (unsigned long)(arg9);                         \
+      __asm__ volatile(                                           \
+         VALGRIND_ALIGN_STACK                                     \
+         "sub sp, sp, #4 \n\t"                                    \
+         "ldr r0, [%1, #20] \n\t"                                 \
+         "ldr r1, [%1, #24] \n\t"                                 \
+         "ldr r2, [%1, #28] \n\t"                                 \
+         "ldr r3, [%1, #32] \n\t"                                 \
+         "ldr r4, [%1, #36] \n\t"                                 \
+         "push {r0, r1, r2, r3, r4} \n\t"                         \
+         "ldr r0, [%1, #4] \n\t"                                  \
+         "ldr r1, [%1, #8] \n\t"                                  \
+         "ldr r2, [%1, #12] \n\t"                                 \
+         "ldr r3, [%1, #16] \n\t"                                 \
+         "ldr r4, [%1] \n\t"  /* target->r4 */                    \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4                   \
+         VALGRIND_RESTORE_STACK                                   \
+         "mov %0, r0"                                             \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "0" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r10"   \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_10W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6,  \
+                                  arg7,arg8,arg9,arg10)           \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[11];                         \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      _argvec[3] = (unsigned long)(arg3);                         \
+      _argvec[4] = (unsigned long)(arg4);                         \
+      _argvec[5] = (unsigned long)(arg5);                         \
+      _argvec[6] = (unsigned long)(arg6);                         \
+      _argvec[7] = (unsigned long)(arg7);                         \
+      _argvec[8] = (unsigned long)(arg8);                         \
+      _argvec[9] = (unsigned long)(arg9);                         \
+      _argvec[10] = (unsigned long)(arg10);                       \
+      __asm__ volatile(                                           \
+         VALGRIND_ALIGN_STACK                                     \
+         "ldr r0, [%1, #40] \n\t"                                 \
+         "push {r0} \n\t"                                         \
+         "ldr r0, [%1, #20] \n\t"                                 \
+         "ldr r1, [%1, #24] \n\t"                                 \
+         "ldr r2, [%1, #28] \n\t"                                 \
+         "ldr r3, [%1, #32] \n\t"                                 \
+         "ldr r4, [%1, #36] \n\t"                                 \
+         "push {r0, r1, r2, r3, r4} \n\t"                         \
+         "ldr r0, [%1, #4] \n\t"                                  \
+         "ldr r1, [%1, #8] \n\t"                                  \
+         "ldr r2, [%1, #12] \n\t"                                 \
+         "ldr r3, [%1, #16] \n\t"                                 \
+         "ldr r4, [%1] \n\t"  /* target->r4 */                    \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4                   \
+         VALGRIND_RESTORE_STACK                                   \
+         "mov %0, r0"                                             \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "0" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r10"   \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_11W(lval, orig, arg1,arg2,arg3,arg4,arg5,       \
+                                  arg6,arg7,arg8,arg9,arg10,      \
+                                  arg11)                          \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[12];                         \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      _argvec[3] = (unsigned long)(arg3);                         \
+      _argvec[4] = (unsigned long)(arg4);                         \
+      _argvec[5] = (unsigned long)(arg5);                         \
+      _argvec[6] = (unsigned long)(arg6);                         \
+      _argvec[7] = (unsigned long)(arg7);                         \
+      _argvec[8] = (unsigned long)(arg8);                         \
+      _argvec[9] = (unsigned long)(arg9);                         \
+      _argvec[10] = (unsigned long)(arg10);                       \
+      _argvec[11] = (unsigned long)(arg11);                       \
+      __asm__ volatile(                                           \
+         VALGRIND_ALIGN_STACK                                     \
+         "sub sp, sp, #4 \n\t"                                    \
+         "ldr r0, [%1, #40] \n\t"                                 \
+         "ldr r1, [%1, #44] \n\t"                                 \
+         "push {r0, r1} \n\t"                                     \
+         "ldr r0, [%1, #20] \n\t"                                 \
+         "ldr r1, [%1, #24] \n\t"                                 \
+         "ldr r2, [%1, #28] \n\t"                                 \
+         "ldr r3, [%1, #32] \n\t"                                 \
+         "ldr r4, [%1, #36] \n\t"                                 \
+         "push {r0, r1, r2, r3, r4} \n\t"                         \
+         "ldr r0, [%1, #4] \n\t"                                  \
+         "ldr r1, [%1, #8] \n\t"                                  \
+         "ldr r2, [%1, #12] \n\t"                                 \
+         "ldr r3, [%1, #16] \n\t"                                 \
+         "ldr r4, [%1] \n\t"  /* target->r4 */                    \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4                   \
+         VALGRIND_RESTORE_STACK                                   \
+         "mov %0, r0"                                             \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "0" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r10"   \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_12W(lval, orig, arg1,arg2,arg3,arg4,arg5,       \
+                                  arg6,arg7,arg8,arg9,arg10,      \
+                                  arg11,arg12)                    \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[13];                         \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      _argvec[3] = (unsigned long)(arg3);                         \
+      _argvec[4] = (unsigned long)(arg4);                         \
+      _argvec[5] = (unsigned long)(arg5);                         \
+      _argvec[6] = (unsigned long)(arg6);                         \
+      _argvec[7] = (unsigned long)(arg7);                         \
+      _argvec[8] = (unsigned long)(arg8);                         \
+      _argvec[9] = (unsigned long)(arg9);                         \
+      _argvec[10] = (unsigned long)(arg10);                       \
+      _argvec[11] = (unsigned long)(arg11);                       \
+      _argvec[12] = (unsigned long)(arg12);                       \
+      __asm__ volatile(                                           \
+         VALGRIND_ALIGN_STACK                                     \
+         "ldr r0, [%1, #40] \n\t"                                 \
+         "ldr r1, [%1, #44] \n\t"                                 \
+         "ldr r2, [%1, #48] \n\t"                                 \
+         "push {r0, r1, r2} \n\t"                                 \
+         "ldr r0, [%1, #20] \n\t"                                 \
+         "ldr r1, [%1, #24] \n\t"                                 \
+         "ldr r2, [%1, #28] \n\t"                                 \
+         "ldr r3, [%1, #32] \n\t"                                 \
+         "ldr r4, [%1, #36] \n\t"                                 \
+         "push {r0, r1, r2, r3, r4} \n\t"                         \
+         "ldr r0, [%1, #4] \n\t"                                  \
+         "ldr r1, [%1, #8] \n\t"                                  \
+         "ldr r2, [%1, #12] \n\t"                                 \
+         "ldr r3, [%1, #16] \n\t"                                 \
+         "ldr r4, [%1] \n\t"  /* target->r4 */                    \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4                   \
+         VALGRIND_RESTORE_STACK                                   \
+         "mov %0, r0"                                             \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "0" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r10"   \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#endif /* PLAT_arm_linux */
+
+/* ------------------------ arm64-linux ------------------------ */
+
+#if defined(PLAT_arm64_linux)
+
+/* These regs are trashed by the hidden call. */
+#define __CALLER_SAVED_REGS \
+     "x0", "x1", "x2", "x3","x4", "x5", "x6", "x7", "x8", "x9",   \
+     "x10", "x11", "x12", "x13", "x14", "x15", "x16", "x17",      \
+     "x18", "x19", "x20", "x30",                                  \
+     "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", "v8", "v9",  \
+     "v10", "v11", "v12", "v13", "v14", "v15", "v16", "v17",      \
+     "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25",      \
+     "v26", "v27", "v28", "v29", "v30", "v31"
+
+/* x21 is callee-saved, so we can use it to save and restore SP around
+   the hidden call. */
+#define VALGRIND_ALIGN_STACK               \
+      "mov x21, sp\n\t"                    \
+      "bic sp, x21, #15\n\t"
+#define VALGRIND_RESTORE_STACK             \
+      "mov sp,  x21\n\t"
+
+/* These CALL_FN_ macros assume that on arm64-linux,
+   sizeof(unsigned long) == 8. */
+
+#define CALL_FN_W_v(lval, orig)                                   \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[1];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      __asm__ volatile(                                           \
+         VALGRIND_ALIGN_STACK                                     \
+         "ldr x8, [%1] \n\t"  /* target->x8 */                    \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_X8                   \
+         VALGRIND_RESTORE_STACK                                   \
+         "mov %0, x0\n"                                           \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "0" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "x21"   \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_W(lval, orig, arg1)                             \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[2];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      __asm__ volatile(                                           \
+         VALGRIND_ALIGN_STACK                                     \
+         "ldr x0, [%1, #8] \n\t"                                  \
+         "ldr x8, [%1] \n\t"  /* target->x8 */                    \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_X8                   \
+         VALGRIND_RESTORE_STACK                                   \
+         "mov %0, x0\n"                                           \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "0" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "x21"   \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_WW(lval, orig, arg1,arg2)                       \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[3];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      __asm__ volatile(                                           \
+         VALGRIND_ALIGN_STACK                                     \
+         "ldr x0, [%1, #8] \n\t"                                  \
+         "ldr x1, [%1, #16] \n\t"                                 \
+         "ldr x8, [%1] \n\t"  /* target->x8 */                    \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_X8                   \
+         VALGRIND_RESTORE_STACK                                   \
+         "mov %0, x0\n"                                           \
          : /*out*/   "=r" (_res)                                  \
          : /*in*/    "0" (&_argvec[0])                            \
-         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r10"   \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "x21"   \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_WWW(lval, orig, arg1,arg2,arg3)                 \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[4];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      _argvec[3] = (unsigned long)(arg3);                         \
+      __asm__ volatile(                                           \
+         VALGRIND_ALIGN_STACK                                     \
+         "ldr x0, [%1, #8] \n\t"                                  \
+         "ldr x1, [%1, #16] \n\t"                                 \
+         "ldr x2, [%1, #24] \n\t"                                 \
+         "ldr x8, [%1] \n\t"  /* target->x8 */                    \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_X8                   \
+         VALGRIND_RESTORE_STACK                                   \
+         "mov %0, x0\n"                                           \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "0" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "x21"   \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_WWWW(lval, orig, arg1,arg2,arg3,arg4)           \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[5];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      _argvec[3] = (unsigned long)(arg3);                         \
+      _argvec[4] = (unsigned long)(arg4);                         \
+      __asm__ volatile(                                           \
+         VALGRIND_ALIGN_STACK                                     \
+         "ldr x0, [%1, #8] \n\t"                                  \
+         "ldr x1, [%1, #16] \n\t"                                 \
+         "ldr x2, [%1, #24] \n\t"                                 \
+         "ldr x3, [%1, #32] \n\t"                                 \
+         "ldr x8, [%1] \n\t"  /* target->x8 */                    \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_X8                   \
+         VALGRIND_RESTORE_STACK                                   \
+         "mov %0, x0"                                             \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "0" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "x21"   \
       );                                                          \
       lval = (__typeof__(lval)) _res;                             \
    } while (0)
@@ -3093,20 +4341,18 @@ typedef
       _argvec[5] = (unsigned long)(arg5);                         \
       __asm__ volatile(                                           \
          VALGRIND_ALIGN_STACK                                     \
-         "sub sp, sp, #4 \n\t"                                    \
-         "ldr r0, [%1, #20] \n\t"                                 \
-         "push {r0} \n\t"                                         \
-         "ldr r0, [%1, #4] \n\t"                                  \
-         "ldr r1, [%1, #8] \n\t"                                  \
-         "ldr r2, [%1, #12] \n\t"                                 \
-         "ldr r3, [%1, #16] \n\t"                                 \
-         "ldr r4, [%1] \n\t"  /* target->r4 */                    \
-         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4                   \
+         "ldr x0, [%1, #8] \n\t"                                  \
+         "ldr x1, [%1, #16] \n\t"                                 \
+         "ldr x2, [%1, #24] \n\t"                                 \
+         "ldr x3, [%1, #32] \n\t"                                 \
+         "ldr x4, [%1, #40] \n\t"                                 \
+         "ldr x8, [%1] \n\t"  /* target->x8 */                    \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_X8                   \
          VALGRIND_RESTORE_STACK                                   \
-         "mov %0, r0"                                             \
+         "mov %0, x0"                                             \
          : /*out*/   "=r" (_res)                                  \
          : /*in*/    "0" (&_argvec[0])                            \
-         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r10"   \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "x21"   \
       );                                                          \
       lval = (__typeof__(lval)) _res;                             \
    } while (0)
@@ -3125,20 +4371,19 @@ typedef
       _argvec[6] = (unsigned long)(arg6);                         \
       __asm__ volatile(                                           \
          VALGRIND_ALIGN_STACK                                     \
-         "ldr r0, [%1, #20] \n\t"                                 \
-         "ldr r1, [%1, #24] \n\t"                                 \
-         "push {r0, r1} \n\t"                                     \
-         "ldr r0, [%1, #4] \n\t"                                  \
-         "ldr r1, [%1, #8] \n\t"                                  \
-         "ldr r2, [%1, #12] \n\t"                                 \
-         "ldr r3, [%1, #16] \n\t"                                 \
-         "ldr r4, [%1] \n\t"  /* target->r4 */                    \
-         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4                   \
+         "ldr x0, [%1, #8] \n\t"                                  \
+         "ldr x1, [%1, #16] \n\t"                                 \
+         "ldr x2, [%1, #24] \n\t"                                 \
+         "ldr x3, [%1, #32] \n\t"                                 \
+         "ldr x4, [%1, #40] \n\t"                                 \
+         "ldr x5, [%1, #48] \n\t"                                 \
+         "ldr x8, [%1] \n\t"  /* target->x8 */                    \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_X8                   \
          VALGRIND_RESTORE_STACK                                   \
-         "mov %0, r0"                                             \
+         "mov %0, x0"                                             \
          : /*out*/   "=r" (_res)                                  \
          : /*in*/    "0" (&_argvec[0])                            \
-         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r10"   \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "x21"   \
       );                                                          \
       lval = (__typeof__(lval)) _res;                             \
    } while (0)
@@ -3159,22 +4404,20 @@ typedef
       _argvec[7] = (unsigned long)(arg7);                         \
       __asm__ volatile(                                           \
          VALGRIND_ALIGN_STACK                                     \
-         "sub sp, sp, #4 \n\t"                                    \
-         "ldr r0, [%1, #20] \n\t"                                 \
-         "ldr r1, [%1, #24] \n\t"                                 \
-         "ldr r2, [%1, #28] \n\t"                                 \
-         "push {r0, r1, r2} \n\t"                                 \
-         "ldr r0, [%1, #4] \n\t"                                  \
-         "ldr r1, [%1, #8] \n\t"                                  \
-         "ldr r2, [%1, #12] \n\t"                                 \
-         "ldr r3, [%1, #16] \n\t"                                 \
-         "ldr r4, [%1] \n\t"  /* target->r4 */                    \
-         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4                   \
+         "ldr x0, [%1, #8] \n\t"                                  \
+         "ldr x1, [%1, #16] \n\t"                                 \
+         "ldr x2, [%1, #24] \n\t"                                 \
+         "ldr x3, [%1, #32] \n\t"                                 \
+         "ldr x4, [%1, #40] \n\t"                                 \
+         "ldr x5, [%1, #48] \n\t"                                 \
+         "ldr x6, [%1, #56] \n\t"                                 \
+         "ldr x8, [%1] \n\t"  /* target->x8 */                    \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_X8                   \
          VALGRIND_RESTORE_STACK                                   \
-         "mov %0, r0"                                             \
+         "mov %0, x0"                                             \
          : /*out*/   "=r" (_res)                                  \
          : /*in*/    "0" (&_argvec[0])                            \
-         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r10"   \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "x21"   \
       );                                                          \
       lval = (__typeof__(lval)) _res;                             \
    } while (0)
@@ -3196,22 +4439,21 @@ typedef
       _argvec[8] = (unsigned long)(arg8);                         \
       __asm__ volatile(                                           \
          VALGRIND_ALIGN_STACK                                     \
-         "ldr r0, [%1, #20] \n\t"                                 \
-         "ldr r1, [%1, #24] \n\t"                                 \
-         "ldr r2, [%1, #28] \n\t"                                 \
-         "ldr r3, [%1, #32] \n\t"                                 \
-         "push {r0, r1, r2, r3} \n\t"                             \
-         "ldr r0, [%1, #4] \n\t"                                  \
-         "ldr r1, [%1, #8] \n\t"                                  \
-         "ldr r2, [%1, #12] \n\t"                                 \
-         "ldr r3, [%1, #16] \n\t"                                 \
-         "ldr r4, [%1] \n\t"  /* target->r4 */                    \
-         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4                   \
+         "ldr x0, [%1, #8] \n\t"                                  \
+         "ldr x1, [%1, #16] \n\t"                                 \
+         "ldr x2, [%1, #24] \n\t"                                 \
+         "ldr x3, [%1, #32] \n\t"                                 \
+         "ldr x4, [%1, #40] \n\t"                                 \
+         "ldr x5, [%1, #48] \n\t"                                 \
+         "ldr x6, [%1, #56] \n\t"                                 \
+         "ldr x7, [%1, #64] \n\t"                                 \
+         "ldr x8, [%1] \n\t"  /* target->x8 */                    \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_X8                   \
          VALGRIND_RESTORE_STACK                                   \
-         "mov %0, r0"                                             \
+         "mov %0, x0"                                             \
          : /*out*/   "=r" (_res)                                  \
          : /*in*/    "0" (&_argvec[0])                            \
-         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r10"   \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "x21"   \
       );                                                          \
       lval = (__typeof__(lval)) _res;                             \
    } while (0)
@@ -3234,24 +4476,24 @@ typedef
       _argvec[9] = (unsigned long)(arg9);                         \
       __asm__ volatile(                                           \
          VALGRIND_ALIGN_STACK                                     \
-         "sub sp, sp, #4 \n\t"                                    \
-         "ldr r0, [%1, #20] \n\t"                                 \
-         "ldr r1, [%1, #24] \n\t"                                 \
-         "ldr r2, [%1, #28] \n\t"                                 \
-         "ldr r3, [%1, #32] \n\t"                                 \
-         "ldr r4, [%1, #36] \n\t"                                 \
-         "push {r0, r1, r2, r3, r4} \n\t"                         \
-         "ldr r0, [%1, #4] \n\t"                                  \
-         "ldr r1, [%1, #8] \n\t"                                  \
-         "ldr r2, [%1, #12] \n\t"                                 \
-         "ldr r3, [%1, #16] \n\t"                                 \
-         "ldr r4, [%1] \n\t"  /* target->r4 */                    \
-         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4                   \
+         "sub sp, sp, #0x20 \n\t"                                 \
+         "ldr x0, [%1, #8] \n\t"                                  \
+         "ldr x1, [%1, #16] \n\t"                                 \
+         "ldr x2, [%1, #24] \n\t"                                 \
+         "ldr x3, [%1, #32] \n\t"                                 \
+         "ldr x4, [%1, #40] \n\t"                                 \
+         "ldr x5, [%1, #48] \n\t"                                 \
+         "ldr x6, [%1, #56] \n\t"                                 \
+         "ldr x7, [%1, #64] \n\t"                                 \
+         "ldr x8, [%1, #72] \n\t"                                 \
+         "str x8, [sp, #0]  \n\t"                                 \
+         "ldr x8, [%1] \n\t"  /* target->x8 */                    \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_X8                   \
          VALGRIND_RESTORE_STACK                                   \
-         "mov %0, r0"                                             \
+         "mov %0, x0"                                             \
          : /*out*/   "=r" (_res)                                  \
          : /*in*/    "0" (&_argvec[0])                            \
-         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r10"   \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "x21"   \
       );                                                          \
       lval = (__typeof__(lval)) _res;                             \
    } while (0)
@@ -3275,32 +4517,32 @@ typedef
       _argvec[10] = (unsigned long)(arg10);                       \
       __asm__ volatile(                                           \
          VALGRIND_ALIGN_STACK                                     \
-         "ldr r0, [%1, #40] \n\t"                                 \
-         "push {r0} \n\t"                                         \
-         "ldr r0, [%1, #20] \n\t"                                 \
-         "ldr r1, [%1, #24] \n\t"                                 \
-         "ldr r2, [%1, #28] \n\t"                                 \
-         "ldr r3, [%1, #32] \n\t"                                 \
-         "ldr r4, [%1, #36] \n\t"                                 \
-         "push {r0, r1, r2, r3, r4} \n\t"                         \
-         "ldr r0, [%1, #4] \n\t"                                  \
-         "ldr r1, [%1, #8] \n\t"                                  \
-         "ldr r2, [%1, #12] \n\t"                                 \
-         "ldr r3, [%1, #16] \n\t"                                 \
-         "ldr r4, [%1] \n\t"  /* target->r4 */                    \
-         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4                   \
+         "sub sp, sp, #0x20 \n\t"                                 \
+         "ldr x0, [%1, #8] \n\t"                                  \
+         "ldr x1, [%1, #16] \n\t"                                 \
+         "ldr x2, [%1, #24] \n\t"                                 \
+         "ldr x3, [%1, #32] \n\t"                                 \
+         "ldr x4, [%1, #40] \n\t"                                 \
+         "ldr x5, [%1, #48] \n\t"                                 \
+         "ldr x6, [%1, #56] \n\t"                                 \
+         "ldr x7, [%1, #64] \n\t"                                 \
+         "ldr x8, [%1, #72] \n\t"                                 \
+         "str x8, [sp, #0]  \n\t"                                 \
+         "ldr x8, [%1, #80] \n\t"                                 \
+         "str x8, [sp, #8]  \n\t"                                 \
+         "ldr x8, [%1] \n\t"  /* target->x8 */                    \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_X8                   \
          VALGRIND_RESTORE_STACK                                   \
-         "mov %0, r0"                                             \
+         "mov %0, x0"                                             \
          : /*out*/   "=r" (_res)                                  \
          : /*in*/    "0" (&_argvec[0])                            \
-         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r10"   \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "x21"   \
       );                                                          \
       lval = (__typeof__(lval)) _res;                             \
    } while (0)
 
-#define CALL_FN_W_11W(lval, orig, arg1,arg2,arg3,arg4,arg5,       \
-                                  arg6,arg7,arg8,arg9,arg10,      \
-                                  arg11)                          \
+#define CALL_FN_W_11W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6,  \
+                                  arg7,arg8,arg9,arg10,arg11)     \
    do {                                                           \
       volatile OrigFn        _orig = (orig);                      \
       volatile unsigned long _argvec[12];                         \
@@ -3319,34 +4561,35 @@ typedef
       _argvec[11] = (unsigned long)(arg11);                       \
       __asm__ volatile(                                           \
          VALGRIND_ALIGN_STACK                                     \
-         "sub sp, sp, #4 \n\t"                                    \
-         "ldr r0, [%1, #40] \n\t"                                 \
-         "ldr r1, [%1, #44] \n\t"                                 \
-         "push {r0, r1} \n\t"                                     \
-         "ldr r0, [%1, #20] \n\t"                                 \
-         "ldr r1, [%1, #24] \n\t"                                 \
-         "ldr r2, [%1, #28] \n\t"                                 \
-         "ldr r3, [%1, #32] \n\t"                                 \
-         "ldr r4, [%1, #36] \n\t"                                 \
-         "push {r0, r1, r2, r3, r4} \n\t"                         \
-         "ldr r0, [%1, #4] \n\t"                                  \
-         "ldr r1, [%1, #8] \n\t"                                  \
-         "ldr r2, [%1, #12] \n\t"                                 \
-         "ldr r3, [%1, #16] \n\t"                                 \
-         "ldr r4, [%1] \n\t"  /* target->r4 */                    \
-         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4                   \
+         "sub sp, sp, #0x30 \n\t"                                 \
+         "ldr x0, [%1, #8] \n\t"                                  \
+         "ldr x1, [%1, #16] \n\t"                                 \
+         "ldr x2, [%1, #24] \n\t"                                 \
+         "ldr x3, [%1, #32] \n\t"                                 \
+         "ldr x4, [%1, #40] \n\t"                                 \
+         "ldr x5, [%1, #48] \n\t"                                 \
+         "ldr x6, [%1, #56] \n\t"                                 \
+         "ldr x7, [%1, #64] \n\t"                                 \
+         "ldr x8, [%1, #72] \n\t"                                 \
+         "str x8, [sp, #0]  \n\t"                                 \
+         "ldr x8, [%1, #80] \n\t"                                 \
+         "str x8, [sp, #8]  \n\t"                                 \
+         "ldr x8, [%1, #88] \n\t"                                 \
+         "str x8, [sp, #16] \n\t"                                 \
+         "ldr x8, [%1] \n\t"  /* target->x8 */                    \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_X8                   \
          VALGRIND_RESTORE_STACK                                   \
-         "mov %0, r0"                                             \
+         "mov %0, x0"                                             \
          : /*out*/   "=r" (_res)                                  \
          : /*in*/    "0" (&_argvec[0])                            \
-         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r10"   \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "x21"   \
       );                                                          \
       lval = (__typeof__(lval)) _res;                             \
    } while (0)
 
-#define CALL_FN_W_12W(lval, orig, arg1,arg2,arg3,arg4,arg5,       \
-                                  arg6,arg7,arg8,arg9,arg10,      \
-                                  arg11,arg12)                    \
+#define CALL_FN_W_12W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6,  \
+                                  arg7,arg8,arg9,arg10,arg11,     \
+                                  arg12)                          \
    do {                                                           \
       volatile OrigFn        _orig = (orig);                      \
       volatile unsigned long _argvec[13];                         \
@@ -3366,32 +4609,35 @@ typedef
       _argvec[12] = (unsigned long)(arg12);                       \
       __asm__ volatile(                                           \
          VALGRIND_ALIGN_STACK                                     \
-         "ldr r0, [%1, #40] \n\t"                                 \
-         "ldr r1, [%1, #44] \n\t"                                 \
-         "ldr r2, [%1, #48] \n\t"                                 \
-         "push {r0, r1, r2} \n\t"                                 \
-         "ldr r0, [%1, #20] \n\t"                                 \
-         "ldr r1, [%1, #24] \n\t"                                 \
-         "ldr r2, [%1, #28] \n\t"                                 \
-         "ldr r3, [%1, #32] \n\t"                                 \
-         "ldr r4, [%1, #36] \n\t"                                 \
-         "push {r0, r1, r2, r3, r4} \n\t"                         \
-         "ldr r0, [%1, #4] \n\t"                                  \
-         "ldr r1, [%1, #8] \n\t"                                  \
-         "ldr r2, [%1, #12] \n\t"                                 \
-         "ldr r3, [%1, #16] \n\t"                                 \
-         "ldr r4, [%1] \n\t"  /* target->r4 */                    \
-         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4                   \
+         "sub sp, sp, #0x30 \n\t"                                 \
+         "ldr x0, [%1, #8] \n\t"                                  \
+         "ldr x1, [%1, #16] \n\t"                                 \
+         "ldr x2, [%1, #24] \n\t"                                 \
+         "ldr x3, [%1, #32] \n\t"                                 \
+         "ldr x4, [%1, #40] \n\t"                                 \
+         "ldr x5, [%1, #48] \n\t"                                 \
+         "ldr x6, [%1, #56] \n\t"                                 \
+         "ldr x7, [%1, #64] \n\t"                                 \
+         "ldr x8, [%1, #72] \n\t"                                 \
+         "str x8, [sp, #0]  \n\t"                                 \
+         "ldr x8, [%1, #80] \n\t"                                 \
+         "str x8, [sp, #8]  \n\t"                                 \
+         "ldr x8, [%1, #88] \n\t"                                 \
+         "str x8, [sp, #16] \n\t"                                 \
+         "ldr x8, [%1, #96] \n\t"                                 \
+         "str x8, [sp, #24] \n\t"                                 \
+         "ldr x8, [%1] \n\t"  /* target->x8 */                    \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_X8                   \
          VALGRIND_RESTORE_STACK                                   \
-         "mov %0, r0"                                             \
+         "mov %0, x0"                                             \
          : /*out*/   "=r" (_res)                                  \
          : /*in*/    "0" (&_argvec[0])                            \
-         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r10"   \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "x21"   \
       );                                                          \
       lval = (__typeof__(lval)) _res;                             \
    } while (0)
 
-#endif /* PLAT_arm_linux */
+#endif /* PLAT_arm64_linux */
 
 /* ------------------------- s390x-linux ------------------------- */
 
@@ -3659,7 +4905,85 @@ typedef
          "lg 1, 0(1)\n\t"                                        \
          VALGRIND_CALL_NOREDIR_R1                                \
          "lgr %0, 2\n\t"                                         \
-         "aghi 15,176\n\t"                                       \
+         "aghi 15,176\n\t"                                       \
+         VALGRIND_CFI_EPILOGUE                                   \
+         : /*out*/   "=d" (_res)                                 \
+         : /*in*/    "a" (&_argvec[0]) __FRAME_POINTER           \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS,"6","7" \
+      );                                                         \
+      lval = (__typeof__(lval)) _res;                            \
+   } while (0)
+
+#define CALL_FN_W_8W(lval, orig, arg1, arg2, arg3, arg4, arg5,   \
+                     arg6, arg7 ,arg8)                           \
+   do {                                                          \
+      volatile OrigFn        _orig = (orig);                     \
+      volatile unsigned long _argvec[9];                         \
+      volatile unsigned long _res;                               \
+      _argvec[0] = (unsigned long)_orig.nraddr;                  \
+      _argvec[1] = (unsigned long)arg1;                          \
+      _argvec[2] = (unsigned long)arg2;                          \
+      _argvec[3] = (unsigned long)arg3;                          \
+      _argvec[4] = (unsigned long)arg4;                          \
+      _argvec[5] = (unsigned long)arg5;                          \
+      _argvec[6] = (unsigned long)arg6;                          \
+      _argvec[7] = (unsigned long)arg7;                          \
+      _argvec[8] = (unsigned long)arg8;                          \
+      __asm__ volatile(                                          \
+         VALGRIND_CFI_PROLOGUE                                   \
+         "aghi 15,-184\n\t"                                      \
+         "lg 2, 8(1)\n\t"                                        \
+         "lg 3,16(1)\n\t"                                        \
+         "lg 4,24(1)\n\t"                                        \
+         "lg 5,32(1)\n\t"                                        \
+         "lg 6,40(1)\n\t"                                        \
+         "mvc 160(8,15), 48(1)\n\t"                              \
+         "mvc 168(8,15), 56(1)\n\t"                              \
+         "mvc 176(8,15), 64(1)\n\t"                              \
+         "lg 1, 0(1)\n\t"                                        \
+         VALGRIND_CALL_NOREDIR_R1                                \
+         "lgr %0, 2\n\t"                                         \
+         "aghi 15,184\n\t"                                       \
+         VALGRIND_CFI_EPILOGUE                                   \
+         : /*out*/   "=d" (_res)                                 \
+         : /*in*/    "a" (&_argvec[0]) __FRAME_POINTER           \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS,"6","7" \
+      );                                                         \
+      lval = (__typeof__(lval)) _res;                            \
+   } while (0)
+
+#define CALL_FN_W_9W(lval, orig, arg1, arg2, arg3, arg4, arg5,   \
+                     arg6, arg7 ,arg8, arg9)                     \
+   do {                                                          \
+      volatile OrigFn        _orig = (orig);                     \
+      volatile unsigned long _argvec[10];                        \
+      volatile unsigned long _res;                               \
+      _argvec[0] = (unsigned long)_orig.nraddr;                  \
+      _argvec[1] = (unsigned long)arg1;                          \
+      _argvec[2] = (unsigned long)arg2;                          \
+      _argvec[3] = (unsigned long)arg3;                          \
+      _argvec[4] = (unsigned long)arg4;                          \
+      _argvec[5] = (unsigned long)arg5;                          \
+      _argvec[6] = (unsigned long)arg6;                          \
+      _argvec[7] = (unsigned long)arg7;                          \
+      _argvec[8] = (unsigned long)arg8;                          \
+      _argvec[9] = (unsigned long)arg9;                          \
+      __asm__ volatile(                                          \
+         VALGRIND_CFI_PROLOGUE                                   \
+         "aghi 15,-192\n\t"                                      \
+         "lg 2, 8(1)\n\t"                                        \
+         "lg 3,16(1)\n\t"                                        \
+         "lg 4,24(1)\n\t"                                        \
+         "lg 5,32(1)\n\t"                                        \
+         "lg 6,40(1)\n\t"                                        \
+         "mvc 160(8,15), 48(1)\n\t"                              \
+         "mvc 168(8,15), 56(1)\n\t"                              \
+         "mvc 176(8,15), 64(1)\n\t"                              \
+         "mvc 184(8,15), 72(1)\n\t"                              \
+         "lg 1, 0(1)\n\t"                                        \
+         VALGRIND_CALL_NOREDIR_R1                                \
+         "lgr %0, 2\n\t"                                         \
+         "aghi 15,192\n\t"                                       \
          VALGRIND_CFI_EPILOGUE                                   \
          : /*out*/   "=d" (_res)                                 \
          : /*in*/    "a" (&_argvec[0]) __FRAME_POINTER           \
@@ -3668,11 +4992,11 @@ typedef
       lval = (__typeof__(lval)) _res;                            \
    } while (0)
 
-#define CALL_FN_W_8W(lval, orig, arg1, arg2, arg3, arg4, arg5,   \
-                     arg6, arg7 ,arg8)                           \
+#define CALL_FN_W_10W(lval, orig, arg1, arg2, arg3, arg4, arg5,  \
+                     arg6, arg7 ,arg8, arg9, arg10)              \
    do {                                                          \
       volatile OrigFn        _orig = (orig);                     \
-      volatile unsigned long _argvec[9];                         \
+      volatile unsigned long _argvec[11];                        \
       volatile unsigned long _res;                               \
       _argvec[0] = (unsigned long)_orig.nraddr;                  \
       _argvec[1] = (unsigned long)arg1;                          \
@@ -3683,9 +5007,11 @@ typedef
       _argvec[6] = (unsigned long)arg6;                          \
       _argvec[7] = (unsigned long)arg7;                          \
       _argvec[8] = (unsigned long)arg8;                          \
+      _argvec[9] = (unsigned long)arg9;                          \
+      _argvec[10] = (unsigned long)arg10;                        \
       __asm__ volatile(                                          \
          VALGRIND_CFI_PROLOGUE                                   \
-         "aghi 15,-184\n\t"                                      \
+         "aghi 15,-200\n\t"                                      \
          "lg 2, 8(1)\n\t"                                        \
          "lg 3,16(1)\n\t"                                        \
          "lg 4,24(1)\n\t"                                        \
@@ -3694,10 +5020,12 @@ typedef
          "mvc 160(8,15), 48(1)\n\t"                              \
          "mvc 168(8,15), 56(1)\n\t"                              \
          "mvc 176(8,15), 64(1)\n\t"                              \
+         "mvc 184(8,15), 72(1)\n\t"                              \
+         "mvc 192(8,15), 80(1)\n\t"                              \
          "lg 1, 0(1)\n\t"                                        \
          VALGRIND_CALL_NOREDIR_R1                                \
          "lgr %0, 2\n\t"                                         \
-         "aghi 15,184\n\t"                                       \
+         "aghi 15,200\n\t"                                       \
          VALGRIND_CFI_EPILOGUE                                   \
          : /*out*/   "=d" (_res)                                 \
          : /*in*/    "a" (&_argvec[0]) __FRAME_POINTER           \
@@ -3706,11 +5034,11 @@ typedef
       lval = (__typeof__(lval)) _res;                            \
    } while (0)
 
-#define CALL_FN_W_9W(lval, orig, arg1, arg2, arg3, arg4, arg5,   \
-                     arg6, arg7 ,arg8, arg9)                     \
+#define CALL_FN_W_11W(lval, orig, arg1, arg2, arg3, arg4, arg5,  \
+                     arg6, arg7 ,arg8, arg9, arg10, arg11)       \
    do {                                                          \
       volatile OrigFn        _orig = (orig);                     \
-      volatile unsigned long _argvec[10];                        \
+      volatile unsigned long _argvec[12];                        \
       volatile unsigned long _res;                               \
       _argvec[0] = (unsigned long)_orig.nraddr;                  \
       _argvec[1] = (unsigned long)arg1;                          \
@@ -3722,9 +5050,11 @@ typedef
       _argvec[7] = (unsigned long)arg7;                          \
       _argvec[8] = (unsigned long)arg8;                          \
       _argvec[9] = (unsigned long)arg9;                          \
+      _argvec[10] = (unsigned long)arg10;                        \
+      _argvec[11] = (unsigned long)arg11;                        \
       __asm__ volatile(                                          \
          VALGRIND_CFI_PROLOGUE                                   \
-         "aghi 15,-192\n\t"                                      \
+         "aghi 15,-208\n\t"                                      \
          "lg 2, 8(1)\n\t"                                        \
          "lg 3,16(1)\n\t"                                        \
          "lg 4,24(1)\n\t"                                        \
@@ -3734,10 +5064,12 @@ typedef
          "mvc 168(8,15), 56(1)\n\t"                              \
          "mvc 176(8,15), 64(1)\n\t"                              \
          "mvc 184(8,15), 72(1)\n\t"                              \
+         "mvc 192(8,15), 80(1)\n\t"                              \
+         "mvc 200(8,15), 88(1)\n\t"                              \
          "lg 1, 0(1)\n\t"                                        \
          VALGRIND_CALL_NOREDIR_R1                                \
          "lgr %0, 2\n\t"                                         \
-         "aghi 15,192\n\t"                                       \
+         "aghi 15,208\n\t"                                       \
          VALGRIND_CFI_EPILOGUE                                   \
          : /*out*/   "=d" (_res)                                 \
          : /*in*/    "a" (&_argvec[0]) __FRAME_POINTER           \
@@ -3746,11 +5078,11 @@ typedef
       lval = (__typeof__(lval)) _res;                            \
    } while (0)
 
-#define CALL_FN_W_10W(lval, orig, arg1, arg2, arg3, arg4, arg5,  \
-                     arg6, arg7 ,arg8, arg9, arg10)              \
+#define CALL_FN_W_12W(lval, orig, arg1, arg2, arg3, arg4, arg5,  \
+                     arg6, arg7 ,arg8, arg9, arg10, arg11, arg12)\
    do {                                                          \
       volatile OrigFn        _orig = (orig);                     \
-      volatile unsigned long _argvec[11];                        \
+      volatile unsigned long _argvec[13];                        \
       volatile unsigned long _res;                               \
       _argvec[0] = (unsigned long)_orig.nraddr;                  \
       _argvec[1] = (unsigned long)arg1;                          \
@@ -3763,9 +5095,11 @@ typedef
       _argvec[8] = (unsigned long)arg8;                          \
       _argvec[9] = (unsigned long)arg9;                          \
       _argvec[10] = (unsigned long)arg10;                        \
+      _argvec[11] = (unsigned long)arg11;                        \
+      _argvec[12] = (unsigned long)arg12;                        \
       __asm__ volatile(                                          \
          VALGRIND_CFI_PROLOGUE                                   \
-         "aghi 15,-200\n\t"                                      \
+         "aghi 15,-216\n\t"                                      \
          "lg 2, 8(1)\n\t"                                        \
          "lg 3,16(1)\n\t"                                        \
          "lg 4,24(1)\n\t"                                        \
@@ -3776,10 +5110,12 @@ typedef
          "mvc 176(8,15), 64(1)\n\t"                              \
          "mvc 184(8,15), 72(1)\n\t"                              \
          "mvc 192(8,15), 80(1)\n\t"                              \
+         "mvc 200(8,15), 88(1)\n\t"                              \
+         "mvc 208(8,15), 96(1)\n\t"                              \
          "lg 1, 0(1)\n\t"                                        \
          VALGRIND_CALL_NOREDIR_R1                                \
          "lgr %0, 2\n\t"                                         \
-         "aghi 15,200\n\t"                                       \
+         "aghi 15,216\n\t"                                       \
          VALGRIND_CFI_EPILOGUE                                   \
          : /*out*/   "=d" (_res)                                 \
          : /*in*/    "a" (&_argvec[0]) __FRAME_POINTER           \
@@ -3788,102 +5124,551 @@ typedef
       lval = (__typeof__(lval)) _res;                            \
    } while (0)
 
-#define CALL_FN_W_11W(lval, orig, arg1, arg2, arg3, arg4, arg5,  \
-                     arg6, arg7 ,arg8, arg9, arg10, arg11)       \
-   do {                                                          \
-      volatile OrigFn        _orig = (orig);                     \
-      volatile unsigned long _argvec[12];                        \
-      volatile unsigned long _res;                               \
-      _argvec[0] = (unsigned long)_orig.nraddr;                  \
-      _argvec[1] = (unsigned long)arg1;                          \
-      _argvec[2] = (unsigned long)arg2;                          \
-      _argvec[3] = (unsigned long)arg3;                          \
-      _argvec[4] = (unsigned long)arg4;                          \
-      _argvec[5] = (unsigned long)arg5;                          \
-      _argvec[6] = (unsigned long)arg6;                          \
-      _argvec[7] = (unsigned long)arg7;                          \
-      _argvec[8] = (unsigned long)arg8;                          \
-      _argvec[9] = (unsigned long)arg9;                          \
-      _argvec[10] = (unsigned long)arg10;                        \
-      _argvec[11] = (unsigned long)arg11;                        \
-      __asm__ volatile(                                          \
-         VALGRIND_CFI_PROLOGUE                                   \
-         "aghi 15,-208\n\t"                                      \
-         "lg 2, 8(1)\n\t"                                        \
-         "lg 3,16(1)\n\t"                                        \
-         "lg 4,24(1)\n\t"                                        \
-         "lg 5,32(1)\n\t"                                        \
-         "lg 6,40(1)\n\t"                                        \
-         "mvc 160(8,15), 48(1)\n\t"                              \
-         "mvc 168(8,15), 56(1)\n\t"                              \
-         "mvc 176(8,15), 64(1)\n\t"                              \
-         "mvc 184(8,15), 72(1)\n\t"                              \
-         "mvc 192(8,15), 80(1)\n\t"                              \
-         "mvc 200(8,15), 88(1)\n\t"                              \
-         "lg 1, 0(1)\n\t"                                        \
-         VALGRIND_CALL_NOREDIR_R1                                \
-         "lgr %0, 2\n\t"                                         \
-         "aghi 15,208\n\t"                                       \
-         VALGRIND_CFI_EPILOGUE                                   \
-         : /*out*/   "=d" (_res)                                 \
-         : /*in*/    "a" (&_argvec[0]) __FRAME_POINTER           \
-         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS,"6","7" \
-      );                                                         \
-      lval = (__typeof__(lval)) _res;                            \
+
+#endif /* PLAT_s390x_linux */
+
+/* ------------------------- mips32-linux ----------------------- */
+#if defined(PLAT_mips32_linux)
+
+/* These regs are trashed by the hidden call. */
+#define __CALLER_SAVED_REGS "$2", "$3", "$4", "$5", "$6",       \
+"$7", "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24", \
+"$25", "$31"
+
+/* These CALL_FN_ macros assume that on mips-linux, sizeof(unsigned
+   long) == 4. */
+
+#define CALL_FN_W_v(lval, orig)                                   \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[1];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      __asm__ volatile(                                           \
+         "subu $29, $29, 8 \n\t"                                  \
+         "sw $28, 0($29) \n\t"                                    \
+         "sw $31, 4($29) \n\t"                                    \
+         "subu $29, $29, 16 \n\t"                                 \
+         "lw $25, 0(%1) \n\t"  /* target->t9 */                   \
+         VALGRIND_CALL_NOREDIR_T9                                 \
+         "addu $29, $29, 16\n\t"                                  \
+         "lw $28, 0($29) \n\t"                                    \
+         "lw $31, 4($29) \n\t"                                    \
+         "addu $29, $29, 8 \n\t"                                  \
+         "move %0, $2\n"                                          \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "0" (&_argvec[0])                            \
+         : /*trash*/ "memory", __CALLER_SAVED_REGS                \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_W(lval, orig, arg1)                             \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+     volatile unsigned long _argvec[2];                           \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      __asm__ volatile(                                           \
+         "subu $29, $29, 8 \n\t"                                  \
+         "sw $28, 0($29) \n\t"                                    \
+         "sw $31, 4($29) \n\t"                                    \
+         "subu $29, $29, 16 \n\t"                                 \
+         "lw $4, 4(%1) \n\t"   /* arg1*/                          \
+         "lw $25, 0(%1) \n\t"  /* target->t9 */                   \
+         VALGRIND_CALL_NOREDIR_T9                                 \
+         "addu $29, $29, 16 \n\t"                                 \
+         "lw $28, 0($29) \n\t"                                    \
+         "lw $31, 4($29) \n\t"                                    \
+         "addu $29, $29, 8 \n\t"                                  \
+         "move %0, $2\n"                                          \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "0" (&_argvec[0])                            \
+         : /*trash*/ "memory",  __CALLER_SAVED_REGS               \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_WW(lval, orig, arg1,arg2)                       \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[3];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      __asm__ volatile(                                           \
+         "subu $29, $29, 8 \n\t"                                  \
+         "sw $28, 0($29) \n\t"                                    \
+         "sw $31, 4($29) \n\t"                                    \
+         "subu $29, $29, 16 \n\t"                                 \
+         "lw $4, 4(%1) \n\t"                                      \
+         "lw $5, 8(%1) \n\t"                                      \
+         "lw $25, 0(%1) \n\t"  /* target->t9 */                   \
+         VALGRIND_CALL_NOREDIR_T9                                 \
+         "addu $29, $29, 16 \n\t"                                 \
+         "lw $28, 0($29) \n\t"                                    \
+         "lw $31, 4($29) \n\t"                                    \
+         "addu $29, $29, 8 \n\t"                                  \
+         "move %0, $2\n"                                          \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "0" (&_argvec[0])                            \
+         : /*trash*/ "memory", __CALLER_SAVED_REGS                \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_WWW(lval, orig, arg1,arg2,arg3)                 \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[4];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      _argvec[3] = (unsigned long)(arg3);                         \
+      __asm__ volatile(                                           \
+         "subu $29, $29, 8 \n\t"                                  \
+         "sw $28, 0($29) \n\t"                                    \
+         "sw $31, 4($29) \n\t"                                    \
+         "subu $29, $29, 16 \n\t"                                 \
+         "lw $4, 4(%1) \n\t"                                      \
+         "lw $5, 8(%1) \n\t"                                      \
+         "lw $6, 12(%1) \n\t"                                     \
+         "lw $25, 0(%1) \n\t"  /* target->t9 */                   \
+         VALGRIND_CALL_NOREDIR_T9                                 \
+         "addu $29, $29, 16 \n\t"                                 \
+         "lw $28, 0($29) \n\t"                                    \
+         "lw $31, 4($29) \n\t"                                    \
+         "addu $29, $29, 8 \n\t"                                  \
+         "move %0, $2\n"                                          \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "0" (&_argvec[0])                            \
+         : /*trash*/ "memory", __CALLER_SAVED_REGS                \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_WWWW(lval, orig, arg1,arg2,arg3,arg4)           \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[5];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      _argvec[3] = (unsigned long)(arg3);                         \
+      _argvec[4] = (unsigned long)(arg4);                         \
+      __asm__ volatile(                                           \
+         "subu $29, $29, 8 \n\t"                                  \
+         "sw $28, 0($29) \n\t"                                    \
+         "sw $31, 4($29) \n\t"                                    \
+         "subu $29, $29, 16 \n\t"                                 \
+         "lw $4, 4(%1) \n\t"                                      \
+         "lw $5, 8(%1) \n\t"                                      \
+         "lw $6, 12(%1) \n\t"                                     \
+         "lw $7, 16(%1) \n\t"                                     \
+         "lw $25, 0(%1) \n\t"  /* target->t9 */                   \
+         VALGRIND_CALL_NOREDIR_T9                                 \
+         "addu $29, $29, 16 \n\t"                                 \
+         "lw $28, 0($29) \n\t"                                    \
+         "lw $31, 4($29) \n\t"                                    \
+         "addu $29, $29, 8 \n\t"                                  \
+         "move %0, $2\n"                                          \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "0" (&_argvec[0])                            \
+         : /*trash*/ "memory", __CALLER_SAVED_REGS                \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_5W(lval, orig, arg1,arg2,arg3,arg4,arg5)        \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[6];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      _argvec[3] = (unsigned long)(arg3);                         \
+      _argvec[4] = (unsigned long)(arg4);                         \
+      _argvec[5] = (unsigned long)(arg5);                         \
+      __asm__ volatile(                                           \
+         "subu $29, $29, 8 \n\t"                                  \
+         "sw $28, 0($29) \n\t"                                    \
+         "sw $31, 4($29) \n\t"                                    \
+         "lw $4, 20(%1) \n\t"                                     \
+         "subu $29, $29, 24\n\t"                                  \
+         "sw $4, 16($29) \n\t"                                    \
+         "lw $4, 4(%1) \n\t"                                      \
+         "lw $5, 8(%1) \n\t"                                      \
+         "lw $6, 12(%1) \n\t"                                     \
+         "lw $7, 16(%1) \n\t"                                     \
+         "lw $25, 0(%1) \n\t"  /* target->t9 */                   \
+         VALGRIND_CALL_NOREDIR_T9                                 \
+         "addu $29, $29, 24 \n\t"                                 \
+         "lw $28, 0($29) \n\t"                                    \
+         "lw $31, 4($29) \n\t"                                    \
+         "addu $29, $29, 8 \n\t"                                  \
+         "move %0, $2\n"                                          \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "0" (&_argvec[0])                            \
+         : /*trash*/ "memory", __CALLER_SAVED_REGS                \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+#define CALL_FN_W_6W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6)   \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[7];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      _argvec[3] = (unsigned long)(arg3);                         \
+      _argvec[4] = (unsigned long)(arg4);                         \
+      _argvec[5] = (unsigned long)(arg5);                         \
+      _argvec[6] = (unsigned long)(arg6);                         \
+      __asm__ volatile(                                           \
+         "subu $29, $29, 8 \n\t"                                  \
+         "sw $28, 0($29) \n\t"                                    \
+         "sw $31, 4($29) \n\t"                                    \
+         "lw $4, 20(%1) \n\t"                                     \
+         "subu $29, $29, 32\n\t"                                  \
+         "sw $4, 16($29) \n\t"                                    \
+         "lw $4, 24(%1) \n\t"                                     \
+         "nop\n\t"                                                \
+         "sw $4, 20($29) \n\t"                                    \
+         "lw $4, 4(%1) \n\t"                                      \
+         "lw $5, 8(%1) \n\t"                                      \
+         "lw $6, 12(%1) \n\t"                                     \
+         "lw $7, 16(%1) \n\t"                                     \
+         "lw $25, 0(%1) \n\t"  /* target->t9 */                   \
+         VALGRIND_CALL_NOREDIR_T9                                 \
+         "addu $29, $29, 32 \n\t"                                 \
+         "lw $28, 0($29) \n\t"                                    \
+         "lw $31, 4($29) \n\t"                                    \
+         "addu $29, $29, 8 \n\t"                                  \
+         "move %0, $2\n"                                          \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "0" (&_argvec[0])                            \
+         : /*trash*/ "memory", __CALLER_SAVED_REGS                \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_7W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6,   \
+                                 arg7)                            \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[8];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      _argvec[3] = (unsigned long)(arg3);                         \
+      _argvec[4] = (unsigned long)(arg4);                         \
+      _argvec[5] = (unsigned long)(arg5);                         \
+      _argvec[6] = (unsigned long)(arg6);                         \
+      _argvec[7] = (unsigned long)(arg7);                         \
+      __asm__ volatile(                                           \
+         "subu $29, $29, 8 \n\t"                                  \
+         "sw $28, 0($29) \n\t"                                    \
+         "sw $31, 4($29) \n\t"                                    \
+         "lw $4, 20(%1) \n\t"                                     \
+         "subu $29, $29, 32\n\t"                                  \
+         "sw $4, 16($29) \n\t"                                    \
+         "lw $4, 24(%1) \n\t"                                     \
+         "sw $4, 20($29) \n\t"                                    \
+         "lw $4, 28(%1) \n\t"                                     \
+         "sw $4, 24($29) \n\t"                                    \
+         "lw $4, 4(%1) \n\t"                                      \
+         "lw $5, 8(%1) \n\t"                                      \
+         "lw $6, 12(%1) \n\t"                                     \
+         "lw $7, 16(%1) \n\t"                                     \
+         "lw $25, 0(%1) \n\t"  /* target->t9 */                   \
+         VALGRIND_CALL_NOREDIR_T9                                 \
+         "addu $29, $29, 32 \n\t"                                 \
+         "lw $28, 0($29) \n\t"                                    \
+         "lw $31, 4($29) \n\t"                                    \
+         "addu $29, $29, 8 \n\t"                                  \
+         "move %0, $2\n"                                          \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "0" (&_argvec[0])                            \
+         : /*trash*/ "memory", __CALLER_SAVED_REGS                \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_8W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6,   \
+                                 arg7,arg8)                       \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[9];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      _argvec[3] = (unsigned long)(arg3);                         \
+      _argvec[4] = (unsigned long)(arg4);                         \
+      _argvec[5] = (unsigned long)(arg5);                         \
+      _argvec[6] = (unsigned long)(arg6);                         \
+      _argvec[7] = (unsigned long)(arg7);                         \
+      _argvec[8] = (unsigned long)(arg8);                         \
+      __asm__ volatile(                                           \
+         "subu $29, $29, 8 \n\t"                                  \
+         "sw $28, 0($29) \n\t"                                    \
+         "sw $31, 4($29) \n\t"                                    \
+         "lw $4, 20(%1) \n\t"                                     \
+         "subu $29, $29, 40\n\t"                                  \
+         "sw $4, 16($29) \n\t"                                    \
+         "lw $4, 24(%1) \n\t"                                     \
+         "sw $4, 20($29) \n\t"                                    \
+         "lw $4, 28(%1) \n\t"                                     \
+         "sw $4, 24($29) \n\t"                                    \
+         "lw $4, 32(%1) \n\t"                                     \
+         "sw $4, 28($29) \n\t"                                    \
+         "lw $4, 4(%1) \n\t"                                      \
+         "lw $5, 8(%1) \n\t"                                      \
+         "lw $6, 12(%1) \n\t"                                     \
+         "lw $7, 16(%1) \n\t"                                     \
+         "lw $25, 0(%1) \n\t"  /* target->t9 */                   \
+         VALGRIND_CALL_NOREDIR_T9                                 \
+         "addu $29, $29, 40 \n\t"                                 \
+         "lw $28, 0($29) \n\t"                                    \
+         "lw $31, 4($29) \n\t"                                    \
+         "addu $29, $29, 8 \n\t"                                  \
+         "move %0, $2\n"                                          \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "0" (&_argvec[0])                            \
+         : /*trash*/ "memory", __CALLER_SAVED_REGS                \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_9W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6,   \
+                                 arg7,arg8,arg9)                  \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[10];                         \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      _argvec[3] = (unsigned long)(arg3);                         \
+      _argvec[4] = (unsigned long)(arg4);                         \
+      _argvec[5] = (unsigned long)(arg5);                         \
+      _argvec[6] = (unsigned long)(arg6);                         \
+      _argvec[7] = (unsigned long)(arg7);                         \
+      _argvec[8] = (unsigned long)(arg8);                         \
+      _argvec[9] = (unsigned long)(arg9);                         \
+      __asm__ volatile(                                           \
+         "subu $29, $29, 8 \n\t"                                  \
+         "sw $28, 0($29) \n\t"                                    \
+         "sw $31, 4($29) \n\t"                                    \
+         "lw $4, 20(%1) \n\t"                                     \
+         "subu $29, $29, 40\n\t"                                  \
+         "sw $4, 16($29) \n\t"                                    \
+         "lw $4, 24(%1) \n\t"                                     \
+         "sw $4, 20($29) \n\t"                                    \
+         "lw $4, 28(%1) \n\t"                                     \
+         "sw $4, 24($29) \n\t"                                    \
+         "lw $4, 32(%1) \n\t"                                     \
+         "sw $4, 28($29) \n\t"                                    \
+         "lw $4, 36(%1) \n\t"                                     \
+         "sw $4, 32($29) \n\t"                                    \
+         "lw $4, 4(%1) \n\t"                                      \
+         "lw $5, 8(%1) \n\t"                                      \
+         "lw $6, 12(%1) \n\t"                                     \
+         "lw $7, 16(%1) \n\t"                                     \
+         "lw $25, 0(%1) \n\t"  /* target->t9 */                   \
+         VALGRIND_CALL_NOREDIR_T9                                 \
+         "addu $29, $29, 40 \n\t"                                 \
+         "lw $28, 0($29) \n\t"                                    \
+         "lw $31, 4($29) \n\t"                                    \
+         "addu $29, $29, 8 \n\t"                                  \
+         "move %0, $2\n"                                          \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "0" (&_argvec[0])                            \
+         : /*trash*/ "memory", __CALLER_SAVED_REGS                \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_10W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6,  \
+                                  arg7,arg8,arg9,arg10)           \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[11];                         \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      _argvec[3] = (unsigned long)(arg3);                         \
+      _argvec[4] = (unsigned long)(arg4);                         \
+      _argvec[5] = (unsigned long)(arg5);                         \
+      _argvec[6] = (unsigned long)(arg6);                         \
+      _argvec[7] = (unsigned long)(arg7);                         \
+      _argvec[8] = (unsigned long)(arg8);                         \
+      _argvec[9] = (unsigned long)(arg9);                         \
+      _argvec[10] = (unsigned long)(arg10);                       \
+      __asm__ volatile(                                           \
+         "subu $29, $29, 8 \n\t"                                  \
+         "sw $28, 0($29) \n\t"                                    \
+         "sw $31, 4($29) \n\t"                                    \
+         "lw $4, 20(%1) \n\t"                                     \
+         "subu $29, $29, 48\n\t"                                  \
+         "sw $4, 16($29) \n\t"                                    \
+         "lw $4, 24(%1) \n\t"                                     \
+         "sw $4, 20($29) \n\t"                                    \
+         "lw $4, 28(%1) \n\t"                                     \
+         "sw $4, 24($29) \n\t"                                    \
+         "lw $4, 32(%1) \n\t"                                     \
+         "sw $4, 28($29) \n\t"                                    \
+         "lw $4, 36(%1) \n\t"                                     \
+         "sw $4, 32($29) \n\t"                                    \
+         "lw $4, 40(%1) \n\t"                                     \
+         "sw $4, 36($29) \n\t"                                    \
+         "lw $4, 4(%1) \n\t"                                      \
+         "lw $5, 8(%1) \n\t"                                      \
+         "lw $6, 12(%1) \n\t"                                     \
+         "lw $7, 16(%1) \n\t"                                     \
+         "lw $25, 0(%1) \n\t"  /* target->t9 */                   \
+         VALGRIND_CALL_NOREDIR_T9                                 \
+         "addu $29, $29, 48 \n\t"                                 \
+         "lw $28, 0($29) \n\t"                                    \
+         "lw $31, 4($29) \n\t"                                    \
+         "addu $29, $29, 8 \n\t"                                  \
+         "move %0, $2\n"                                          \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "0" (&_argvec[0])                            \
+         : /*trash*/ "memory", __CALLER_SAVED_REGS                \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
    } while (0)
 
-#define CALL_FN_W_12W(lval, orig, arg1, arg2, arg3, arg4, arg5,  \
-                     arg6, arg7 ,arg8, arg9, arg10, arg11, arg12)\
-   do {                                                          \
-      volatile OrigFn        _orig = (orig);                     \
-      volatile unsigned long _argvec[13];                        \
-      volatile unsigned long _res;                               \
-      _argvec[0] = (unsigned long)_orig.nraddr;                  \
-      _argvec[1] = (unsigned long)arg1;                          \
-      _argvec[2] = (unsigned long)arg2;                          \
-      _argvec[3] = (unsigned long)arg3;                          \
-      _argvec[4] = (unsigned long)arg4;                          \
-      _argvec[5] = (unsigned long)arg5;                          \
-      _argvec[6] = (unsigned long)arg6;                          \
-      _argvec[7] = (unsigned long)arg7;                          \
-      _argvec[8] = (unsigned long)arg8;                          \
-      _argvec[9] = (unsigned long)arg9;                          \
-      _argvec[10] = (unsigned long)arg10;                        \
-      _argvec[11] = (unsigned long)arg11;                        \
-      _argvec[12] = (unsigned long)arg12;                        \
-      __asm__ volatile(                                          \
-         VALGRIND_CFI_PROLOGUE                                   \
-         "aghi 15,-216\n\t"                                      \
-         "lg 2, 8(1)\n\t"                                        \
-         "lg 3,16(1)\n\t"                                        \
-         "lg 4,24(1)\n\t"                                        \
-         "lg 5,32(1)\n\t"                                        \
-         "lg 6,40(1)\n\t"                                        \
-         "mvc 160(8,15), 48(1)\n\t"                              \
-         "mvc 168(8,15), 56(1)\n\t"                              \
-         "mvc 176(8,15), 64(1)\n\t"                              \
-         "mvc 184(8,15), 72(1)\n\t"                              \
-         "mvc 192(8,15), 80(1)\n\t"                              \
-         "mvc 200(8,15), 88(1)\n\t"                              \
-         "mvc 208(8,15), 96(1)\n\t"                              \
-         "lg 1, 0(1)\n\t"                                        \
-         VALGRIND_CALL_NOREDIR_R1                                \
-         "lgr %0, 2\n\t"                                         \
-         "aghi 15,216\n\t"                                       \
-         VALGRIND_CFI_EPILOGUE                                   \
-         : /*out*/   "=d" (_res)                                 \
-         : /*in*/    "a" (&_argvec[0]) __FRAME_POINTER           \
-         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS,"6","7" \
-      );                                                         \
-      lval = (__typeof__(lval)) _res;                            \
+#define CALL_FN_W_11W(lval, orig, arg1,arg2,arg3,arg4,arg5,       \
+                                  arg6,arg7,arg8,arg9,arg10,      \
+                                  arg11)                          \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[12];                         \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      _argvec[3] = (unsigned long)(arg3);                         \
+      _argvec[4] = (unsigned long)(arg4);                         \
+      _argvec[5] = (unsigned long)(arg5);                         \
+      _argvec[6] = (unsigned long)(arg6);                         \
+      _argvec[7] = (unsigned long)(arg7);                         \
+      _argvec[8] = (unsigned long)(arg8);                         \
+      _argvec[9] = (unsigned long)(arg9);                         \
+      _argvec[10] = (unsigned long)(arg10);                       \
+      _argvec[11] = (unsigned long)(arg11);                       \
+      __asm__ volatile(                                           \
+         "subu $29, $29, 8 \n\t"                                  \
+         "sw $28, 0($29) \n\t"                                    \
+         "sw $31, 4($29) \n\t"                                    \
+         "lw $4, 20(%1) \n\t"                                     \
+         "subu $29, $29, 48\n\t"                                  \
+         "sw $4, 16($29) \n\t"                                    \
+         "lw $4, 24(%1) \n\t"                                     \
+         "sw $4, 20($29) \n\t"                                    \
+         "lw $4, 28(%1) \n\t"                                     \
+         "sw $4, 24($29) \n\t"                                    \
+         "lw $4, 32(%1) \n\t"                                     \
+         "sw $4, 28($29) \n\t"                                    \
+         "lw $4, 36(%1) \n\t"                                     \
+         "sw $4, 32($29) \n\t"                                    \
+         "lw $4, 40(%1) \n\t"                                     \
+         "sw $4, 36($29) \n\t"                                    \
+         "lw $4, 44(%1) \n\t"                                     \
+         "sw $4, 40($29) \n\t"                                    \
+         "lw $4, 4(%1) \n\t"                                      \
+         "lw $5, 8(%1) \n\t"                                      \
+         "lw $6, 12(%1) \n\t"                                     \
+         "lw $7, 16(%1) \n\t"                                     \
+         "lw $25, 0(%1) \n\t"  /* target->t9 */                   \
+         VALGRIND_CALL_NOREDIR_T9                                 \
+         "addu $29, $29, 48 \n\t"                                 \
+         "lw $28, 0($29) \n\t"                                    \
+         "lw $31, 4($29) \n\t"                                    \
+         "addu $29, $29, 8 \n\t"                                  \
+         "move %0, $2\n"                                          \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "0" (&_argvec[0])                            \
+         : /*trash*/ "memory", __CALLER_SAVED_REGS                \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
    } while (0)
 
+#define CALL_FN_W_12W(lval, orig, arg1,arg2,arg3,arg4,arg5,       \
+                                  arg6,arg7,arg8,arg9,arg10,      \
+                                  arg11,arg12)                    \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[13];                         \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      _argvec[3] = (unsigned long)(arg3);                         \
+      _argvec[4] = (unsigned long)(arg4);                         \
+      _argvec[5] = (unsigned long)(arg5);                         \
+      _argvec[6] = (unsigned long)(arg6);                         \
+      _argvec[7] = (unsigned long)(arg7);                         \
+      _argvec[8] = (unsigned long)(arg8);                         \
+      _argvec[9] = (unsigned long)(arg9);                         \
+      _argvec[10] = (unsigned long)(arg10);                       \
+      _argvec[11] = (unsigned long)(arg11);                       \
+      _argvec[12] = (unsigned long)(arg12);                       \
+      __asm__ volatile(                                           \
+         "subu $29, $29, 8 \n\t"                                  \
+         "sw $28, 0($29) \n\t"                                    \
+         "sw $31, 4($29) \n\t"                                    \
+         "lw $4, 20(%1) \n\t"                                     \
+         "subu $29, $29, 56\n\t"                                  \
+         "sw $4, 16($29) \n\t"                                    \
+         "lw $4, 24(%1) \n\t"                                     \
+         "sw $4, 20($29) \n\t"                                    \
+         "lw $4, 28(%1) \n\t"                                     \
+         "sw $4, 24($29) \n\t"                                    \
+         "lw $4, 32(%1) \n\t"                                     \
+         "sw $4, 28($29) \n\t"                                    \
+         "lw $4, 36(%1) \n\t"                                     \
+         "sw $4, 32($29) \n\t"                                    \
+         "lw $4, 40(%1) \n\t"                                     \
+         "sw $4, 36($29) \n\t"                                    \
+         "lw $4, 44(%1) \n\t"                                     \
+         "sw $4, 40($29) \n\t"                                    \
+         "lw $4, 48(%1) \n\t"                                     \
+         "sw $4, 44($29) \n\t"                                    \
+         "lw $4, 4(%1) \n\t"                                      \
+         "lw $5, 8(%1) \n\t"                                      \
+         "lw $6, 12(%1) \n\t"                                     \
+         "lw $7, 16(%1) \n\t"                                     \
+         "lw $25, 0(%1) \n\t"  /* target->t9 */                   \
+         VALGRIND_CALL_NOREDIR_T9                                 \
+         "addu $29, $29, 56 \n\t"                                 \
+         "lw $28, 0($29) \n\t"                                    \
+         "lw $31, 4($29) \n\t"                                    \
+         "addu $29, $29, 8 \n\t"                                  \
+         "move %0, $2\n"                                          \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[0])                            \
+         : /*trash*/ "memory", __CALLER_SAVED_REGS                \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
 
-#endif /* PLAT_s390x_linux */
+#endif /* PLAT_mips32_linux */
 
-/* ------------------------- mips-linux ------------------------- */
-#if defined(PLAT_mips32_linux)
+/* ------------------------- mips64-linux ------------------------- */
+
+#if defined(PLAT_mips64_linux)
 
 /* These regs are trashed by the hidden call. */
 #define __CALLER_SAVED_REGS "$2", "$3", "$4", "$5", "$6",       \
@@ -3900,20 +5685,12 @@ typedef
       volatile unsigned long _res;                                \
       _argvec[0] = (unsigned long)_orig.nraddr;                   \
       __asm__ volatile(                                           \
-         "subu $29, $29, 8 \n\t"                                  \
-         "sw $gp, 0($sp) \n\t"                                    \
-         "sw $ra, 4($sp) \n\t"                                    \
-        "subu $29, $29, 16 \n\t"                                 \
-         "lw $t9, 0(%1) \n\t"  /* target->t9 */                   \
+         "ld $25, 0(%1)\n\t"  /* target->t9 */                    \
          VALGRIND_CALL_NOREDIR_T9                                 \
-         "addu $29, $29, 16\n\t"                                  \
-         "lw $gp, 0($sp) \n\t"                                    \
-         "lw $ra, 4($sp) \n\t"                                    \
-         "addu $29, $29, 8 \n\t"                                  \
-         "move %0, $v0\n"                                         \
+         "move %0, $2\n"                                          \
          : /*out*/   "=r" (_res)                                  \
          : /*in*/    "0" (&_argvec[0])                            \
-         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+         : /*trash*/ "memory", __CALLER_SAVED_REGS                \
       );                                                          \
       lval = (__typeof__(lval)) _res;                             \
    } while (0)
@@ -3921,26 +5698,18 @@ typedef
 #define CALL_FN_W_W(lval, orig, arg1)                             \
    do {                                                           \
       volatile OrigFn        _orig = (orig);                      \
-     volatile unsigned long _argvec[2];                           \
+      volatile unsigned long _argvec[2];                          \
       volatile unsigned long _res;                                \
       _argvec[0] = (unsigned long)_orig.nraddr;                   \
       _argvec[1] = (unsigned long)(arg1);                         \
       __asm__ volatile(                                           \
-         "subu $29, $29, 8 \n\t"                                  \
-         "sw $gp, 0($sp) \n\t"                                    \
-         "sw $ra, 4($sp) \n\t"                                    \
-         "subu $29, $29, 16 \n\t"                                 \
-         "lw $a0, 4(%1) \n\t"   /* arg1*/                         \
-         "lw $t9, 0(%1) \n\t"  /* target->t9 */                   \
+         "ld $4, 8(%1)\n\t"   /* arg1*/                           \
+         "ld $25, 0(%1)\n\t"  /* target->t9 */                    \
          VALGRIND_CALL_NOREDIR_T9                                 \
-         "addu $29, $29, 16 \n\t"                                 \
-         "lw $gp, 0($sp) \n\t"                                    \
-         "lw $ra, 4($sp) \n\t"                                    \
-         "addu $29, $29, 8 \n\t"                                  \
-         "move %0, $v0\n"                                         \
+         "move %0, $2\n"                                          \
          : /*out*/   "=r" (_res)                                  \
-        : /*in*/    "0" (&_argvec[0])                             \
-         : /*trash*/ "cc", "memory",  __CALLER_SAVED_REGS         \
+         : /*in*/    "r" (&_argvec[0])                            \
+         : /*trash*/ "memory", __CALLER_SAVED_REGS                \
       );                                                          \
       lval = (__typeof__(lval)) _res;                             \
    } while (0)
@@ -3954,22 +5723,14 @@ typedef
       _argvec[1] = (unsigned long)(arg1);                         \
       _argvec[2] = (unsigned long)(arg2);                         \
       __asm__ volatile(                                           \
-         "subu $29, $29, 8 \n\t"                                  \
-         "sw $gp, 0($sp) \n\t"                                    \
-         "sw $ra, 4($sp) \n\t"                                    \
-         "subu $29, $29, 16 \n\t"                                 \
-         "lw $a0, 4(%1) \n\t"                                     \
-         "lw $a1, 8(%1) \n\t"                                     \
-         "lw $t9, 0(%1) \n\t"  /* target->t9 */                   \
+         "ld $4, 8(%1)\n\t"                                       \
+         "ld $5, 16(%1)\n\t"                                      \
+         "ld $25, 0(%1)\n\t"  /* target->t9 */                    \
          VALGRIND_CALL_NOREDIR_T9                                 \
-         "addu $29, $29, 16 \n\t"                                 \
-         "lw $gp, 0($sp) \n\t"                                    \
-         "lw $ra, 4($sp) \n\t"                                    \
-         "addu $29, $29, 8 \n\t"                                  \
-         "move %0, $v0\n"                                         \
+         "move %0, $2\n"                                          \
          : /*out*/   "=r" (_res)                                  \
-         : /*in*/    "0" (&_argvec[0])                            \
-         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+         : /*in*/    "r" (&_argvec[0])                            \
+         : /*trash*/ "memory", __CALLER_SAVED_REGS                \
       );                                                          \
       lval = (__typeof__(lval)) _res;                             \
    } while (0)
@@ -3984,23 +5745,15 @@ typedef
       _argvec[2] = (unsigned long)(arg2);                         \
       _argvec[3] = (unsigned long)(arg3);                         \
       __asm__ volatile(                                           \
-         "subu $29, $29, 8 \n\t"                                  \
-         "sw $gp, 0($sp) \n\t"                                    \
-         "sw $ra, 4($sp) \n\t"                                    \
-         "subu $29, $29, 16 \n\t"                                 \
-         "lw $a0, 4(%1) \n\t"                                     \
-         "lw $a1, 8(%1) \n\t"                                     \
-         "lw $a2, 12(%1) \n\t"                                    \
-         "lw $t9, 0(%1) \n\t"  /* target->t9 */                   \
+         "ld $4, 8(%1)\n\t"                                       \
+         "ld $5, 16(%1)\n\t"                                      \
+         "ld $6, 24(%1)\n\t"                                      \
+         "ld $25, 0(%1)\n\t"  /* target->t9 */                    \
          VALGRIND_CALL_NOREDIR_T9                                 \
-         "addu $29, $29, 16 \n\t"                                 \
-         "lw $gp, 0($sp) \n\t"                                    \
-         "lw $ra, 4($sp) \n\t"                                    \
-         "addu $29, $29, 8 \n\t"                                  \
-         "move %0, $v0\n"                                         \
+         "move %0, $2\n"                                          \
          : /*out*/   "=r" (_res)                                  \
-         : /*in*/    "0" (&_argvec[0])                            \
-         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+         : /*in*/    "r" (&_argvec[0])                            \
+         : /*trash*/ "memory", __CALLER_SAVED_REGS                \
       );                                                          \
       lval = (__typeof__(lval)) _res;                             \
    } while (0)
@@ -4016,24 +5769,16 @@ typedef
       _argvec[3] = (unsigned long)(arg3);                         \
       _argvec[4] = (unsigned long)(arg4);                         \
       __asm__ volatile(                                           \
-         "subu $29, $29, 8 \n\t"                                  \
-         "sw $gp, 0($sp) \n\t"                                    \
-         "sw $ra, 4($sp) \n\t"                                    \
-         "subu $29, $29, 16 \n\t"                                 \
-         "lw $a0, 4(%1) \n\t"                                     \
-         "lw $a1, 8(%1) \n\t"                                     \
-         "lw $a2, 12(%1) \n\t"                                    \
-         "lw $a3, 16(%1) \n\t"                                    \
-         "lw $t9, 0(%1) \n\t"  /* target->t9 */                   \
+         "ld $4, 8(%1)\n\t"                                       \
+         "ld $5, 16(%1)\n\t"                                      \
+         "ld $6, 24(%1)\n\t"                                      \
+         "ld $7, 32(%1)\n\t"                                      \
+         "ld $25, 0(%1)\n\t"  /* target->t9 */                    \
          VALGRIND_CALL_NOREDIR_T9                                 \
-         "addu $29, $29, 16 \n\t"                                 \
-         "lw $gp, 0($sp) \n\t"                                    \
-         "lw $ra, 4($sp) \n\t"                                    \
-         "addu $29, $29, 8 \n\t"                                  \
-         "move %0, $v0\n"                                         \
+         "move %0, $2\n"                                          \
          : /*out*/   "=r" (_res)                                  \
-         : /*in*/    "0" (&_argvec[0])                            \
-         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+         : /*in*/    "r" (&_argvec[0])                            \
+         : /*trash*/ "memory", __CALLER_SAVED_REGS                \
       );                                                          \
       lval = (__typeof__(lval)) _res;                             \
    } while (0)
@@ -4050,29 +5795,21 @@ typedef
       _argvec[4] = (unsigned long)(arg4);                         \
       _argvec[5] = (unsigned long)(arg5);                         \
       __asm__ volatile(                                           \
-         "subu $29, $29, 8 \n\t"                                  \
-         "sw $gp, 0($sp) \n\t"                                    \
-         "sw $ra, 4($sp) \n\t"                                    \
-         "lw $a0, 20(%1) \n\t"                                    \
-         "subu $sp, $sp, 24\n\t"                                  \
-         "sw $a0, 16($sp) \n\t"                                   \
-         "lw $a0, 4(%1) \n\t"                                     \
-         "lw $a1, 8(%1) \n\t"                                     \
-         "lw $a2, 12(%1) \n\t"                                    \
-         "lw $a3, 16(%1) \n\t"                                    \
-         "lw $t9, 0(%1) \n\t"  /* target->t9 */                   \
+         "ld $4, 8(%1)\n\t"                                       \
+         "ld $5, 16(%1)\n\t"                                      \
+         "ld $6, 24(%1)\n\t"                                      \
+         "ld $7, 32(%1)\n\t"                                      \
+         "ld $8, 40(%1)\n\t"                                      \
+         "ld $25, 0(%1)\n\t"  /* target->t9 */                    \
          VALGRIND_CALL_NOREDIR_T9                                 \
-         "addu $29, $29, 24 \n\t"                                 \
-         "lw $gp, 0($sp) \n\t"                                    \
-         "lw $ra, 4($sp) \n\t"                                    \
-         "addu $sp, $sp, 8 \n\t"                                  \
-         "move %0, $v0\n"                                         \
+         "move %0, $2\n"                                          \
          : /*out*/   "=r" (_res)                                  \
-         : /*in*/    "0" (&_argvec[0])                            \
-         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+         : /*in*/    "r" (&_argvec[0])                            \
+         : /*trash*/ "memory", __CALLER_SAVED_REGS                \
       );                                                          \
       lval = (__typeof__(lval)) _res;                             \
    } while (0)
+
 #define CALL_FN_W_6W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6)   \
    do {                                                           \
       volatile OrigFn        _orig = (orig);                      \
@@ -4086,29 +5823,18 @@ typedef
       _argvec[5] = (unsigned long)(arg5);                         \
       _argvec[6] = (unsigned long)(arg6);                         \
       __asm__ volatile(                                           \
-         "subu $29, $29, 8 \n\t"                                  \
-         "sw $gp, 0($sp) \n\t"                                    \
-         "sw $ra, 4($sp) \n\t"                                    \
-         "lw $a0, 20(%1) \n\t"                                    \
-         "subu $sp, $sp, 32\n\t"                                  \
-         "sw $a0, 16($sp) \n\t"                                   \
-         "lw $a0, 24(%1) \n\t"                                    \
-         "nop\n\t"                                                \
-         "sw $a0, 20($sp) \n\t"                                   \
-         "lw $a0, 4(%1) \n\t"                                     \
-         "lw $a1, 8(%1) \n\t"                                     \
-         "lw $a2, 12(%1) \n\t"                                    \
-         "lw $a3, 16(%1) \n\t"                                    \
-         "lw $t9, 0(%1) \n\t"  /* target->t9 */                   \
+         "ld $4, 8(%1)\n\t"                                       \
+         "ld $5, 16(%1)\n\t"                                      \
+         "ld $6, 24(%1)\n\t"                                      \
+         "ld $7, 32(%1)\n\t"                                      \
+         "ld $8, 40(%1)\n\t"                                      \
+         "ld $9, 48(%1)\n\t"                                      \
+         "ld $25, 0(%1)\n\t"  /* target->t9 */                    \
          VALGRIND_CALL_NOREDIR_T9                                 \
-         "addu $sp, $sp, 32 \n\t"                                 \
-         "lw $gp, 0($sp) \n\t"                                    \
-         "lw $ra, 4($sp) \n\t"                                    \
-         "addu $sp, $sp, 8 \n\t"                                  \
-         "move %0, $v0\n"                                         \
+         "move %0, $2\n"                                          \
          : /*out*/   "=r" (_res)                                  \
-         : /*in*/    "0" (&_argvec[0])                            \
-         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+         : /*in*/    "r" (&_argvec[0])                            \
+         : /*trash*/ "memory", __CALLER_SAVED_REGS                \
       );                                                          \
       lval = (__typeof__(lval)) _res;                             \
    } while (0)
@@ -4128,30 +5854,19 @@ typedef
       _argvec[6] = (unsigned long)(arg6);                         \
       _argvec[7] = (unsigned long)(arg7);                         \
       __asm__ volatile(                                           \
-         "subu $29, $29, 8 \n\t"                                  \
-         "sw $gp, 0($sp) \n\t"                                    \
-         "sw $ra, 4($sp) \n\t"                                    \
-         "lw $a0, 20(%1) \n\t"                                    \
-         "subu $sp, $sp, 32\n\t"                                  \
-         "sw $a0, 16($sp) \n\t"                                   \
-         "lw $a0, 24(%1) \n\t"                                    \
-         "sw $a0, 20($sp) \n\t"                                   \
-         "lw $a0, 28(%1) \n\t"                                    \
-         "sw $a0, 24($sp) \n\t"                                   \
-         "lw $a0, 4(%1) \n\t"                                     \
-         "lw $a1, 8(%1) \n\t"                                     \
-         "lw $a2, 12(%1) \n\t"                                    \
-         "lw $a3, 16(%1) \n\t"                                    \
-         "lw $t9, 0(%1) \n\t"  /* target->t9 */                   \
+         "ld $4, 8(%1)\n\t"                                       \
+         "ld $5, 16(%1)\n\t"                                      \
+         "ld $6, 24(%1)\n\t"                                      \
+         "ld $7, 32(%1)\n\t"                                      \
+         "ld $8, 40(%1)\n\t"                                      \
+         "ld $9, 48(%1)\n\t"                                      \
+         "ld $10, 56(%1)\n\t"                                     \
+         "ld $25, 0(%1) \n\t"  /* target->t9 */                   \
          VALGRIND_CALL_NOREDIR_T9                                 \
-         "addu $sp, $sp, 32 \n\t"                                 \
-         "lw $gp, 0($sp) \n\t"                                    \
-         "lw $ra, 4($sp) \n\t"                                    \
-         "addu $sp, $sp, 8 \n\t"                                  \
-         "move %0, $v0\n"                                         \
+         "move %0, $2\n"                                          \
          : /*out*/   "=r" (_res)                                  \
-         : /*in*/    "0" (&_argvec[0])                            \
-         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+         : /*in*/    "r" (&_argvec[0])                            \
+         : /*trash*/ "memory", __CALLER_SAVED_REGS                \
       );                                                          \
       lval = (__typeof__(lval)) _res;                             \
    } while (0)
@@ -4172,32 +5887,20 @@ typedef
       _argvec[7] = (unsigned long)(arg7);                         \
       _argvec[8] = (unsigned long)(arg8);                         \
       __asm__ volatile(                                           \
-         "subu $29, $29, 8 \n\t"                                  \
-         "sw $gp, 0($sp) \n\t"                                    \
-         "sw $ra, 4($sp) \n\t"                                    \
-         "lw $a0, 20(%1) \n\t"                                    \
-         "subu $sp, $sp, 40\n\t"                                  \
-         "sw $a0, 16($sp) \n\t"                                   \
-         "lw $a0, 24(%1) \n\t"                                    \
-         "sw $a0, 20($sp) \n\t"                                   \
-         "lw $a0, 28(%1) \n\t"                                    \
-         "sw $a0, 24($sp) \n\t"                                   \
-         "lw $a0, 32(%1) \n\t"                                    \
-         "sw $a0, 28($sp) \n\t"                                   \
-         "lw $a0, 4(%1) \n\t"                                     \
-         "lw $a1, 8(%1) \n\t"                                     \
-         "lw $a2, 12(%1) \n\t"                                    \
-         "lw $a3, 16(%1) \n\t"                                    \
-         "lw $t9, 0(%1) \n\t"  /* target->t9 */                   \
+         "ld $4, 8(%1)\n\t"                                       \
+         "ld $5, 16(%1)\n\t"                                      \
+         "ld $6, 24(%1)\n\t"                                      \
+         "ld $7, 32(%1)\n\t"                                      \
+         "ld $8, 40(%1)\n\t"                                      \
+         "ld $9, 48(%1)\n\t"                                      \
+         "ld $10, 56(%1)\n\t"                                     \
+         "ld $11, 64(%1)\n\t"                                     \
+         "ld $25, 0(%1) \n\t"  /* target->t9 */                   \
          VALGRIND_CALL_NOREDIR_T9                                 \
-         "addu $sp, $sp, 40 \n\t"                                 \
-         "lw $gp, 0($sp) \n\t"                                    \
-         "lw $ra, 4($sp) \n\t"                                    \
-         "addu $sp, $sp, 8 \n\t"                                  \
-         "move %0, $v0\n"                                         \
+         "move %0, $2\n"                                          \
          : /*out*/   "=r" (_res)                                  \
-         : /*in*/    "0" (&_argvec[0])                            \
-         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+         : /*in*/    "r" (&_argvec[0])                            \
+         : /*trash*/ "memory", __CALLER_SAVED_REGS                \
       );                                                          \
       lval = (__typeof__(lval)) _res;                             \
    } while (0)
@@ -4219,34 +5922,24 @@ typedef
       _argvec[8] = (unsigned long)(arg8);                         \
       _argvec[9] = (unsigned long)(arg9);                         \
       __asm__ volatile(                                           \
-         "subu $29, $29, 8 \n\t"                                  \
-         "sw $gp, 0($sp) \n\t"                                    \
-         "sw $ra, 4($sp) \n\t"                                    \
-         "lw $a0, 20(%1) \n\t"                                    \
-         "subu $sp, $sp, 40\n\t"                                  \
-         "sw $a0, 16($sp) \n\t"                                   \
-         "lw $a0, 24(%1) \n\t"                                    \
-         "sw $a0, 20($sp) \n\t"                                   \
-         "lw $a0, 28(%1) \n\t"                                    \
-         "sw $a0, 24($sp) \n\t"                                   \
-         "lw $a0, 32(%1) \n\t"                                    \
-         "sw $a0, 28($sp) \n\t"                                   \
-         "lw $a0, 36(%1) \n\t"                                    \
-         "sw $a0, 32($sp) \n\t"                                   \
-         "lw $a0, 4(%1) \n\t"                                     \
-         "lw $a1, 8(%1) \n\t"                                     \
-         "lw $a2, 12(%1) \n\t"                                    \
-         "lw $a3, 16(%1) \n\t"                                    \
-         "lw $t9, 0(%1) \n\t"  /* target->t9 */                   \
+         "dsubu $29, $29, 8\n\t"                                  \
+         "ld $4, 72(%1)\n\t"                                      \
+         "sd $4, 0($29)\n\t"                                      \
+         "ld $4, 8(%1)\n\t"                                       \
+         "ld $5, 16(%1)\n\t"                                      \
+         "ld $6, 24(%1)\n\t"                                      \
+         "ld $7, 32(%1)\n\t"                                      \
+         "ld $8, 40(%1)\n\t"                                      \
+         "ld $9, 48(%1)\n\t"                                      \
+         "ld $10, 56(%1)\n\t"                                     \
+         "ld $11, 64(%1)\n\t"                                     \
+         "ld $25, 0(%1)\n\t"  /* target->t9 */                    \
          VALGRIND_CALL_NOREDIR_T9                                 \
-         "addu $sp, $sp, 40 \n\t"                                 \
-         "lw $gp, 0($sp) \n\t"                                    \
-         "lw $ra, 4($sp) \n\t"                                    \
-         "addu $sp, $sp, 8 \n\t"                                  \
-         "move %0, $v0\n"                                         \
+         "daddu $29, $29, 8\n\t"                                  \
+         "move %0, $2\n"                                          \
          : /*out*/   "=r" (_res)                                  \
-         : /*in*/    "0" (&_argvec[0])                            \
-         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+         : /*in*/    "r" (&_argvec[0])                            \
+         : /*trash*/ "memory", __CALLER_SAVED_REGS                \
       );                                                          \
       lval = (__typeof__(lval)) _res;                             \
    } while (0)
@@ -4269,36 +5962,26 @@ typedef
       _argvec[9] = (unsigned long)(arg9);                         \
       _argvec[10] = (unsigned long)(arg10);                       \
       __asm__ volatile(                                           \
-         "subu $29, $29, 8 \n\t"                                  \
-         "sw $gp, 0($sp) \n\t"                                    \
-         "sw $ra, 4($sp) \n\t"                                    \
-         "lw $a0, 20(%1) \n\t"                                    \
-         "subu $sp, $sp, 48\n\t"                                  \
-         "sw $a0, 16($sp) \n\t"                                   \
-         "lw $a0, 24(%1) \n\t"                                    \
-         "sw $a0, 20($sp) \n\t"                                   \
-         "lw $a0, 28(%1) \n\t"                                    \
-         "sw $a0, 24($sp) \n\t"                                   \
-         "lw $a0, 32(%1) \n\t"                                    \
-         "sw $a0, 28($sp) \n\t"                                   \
-         "lw $a0, 36(%1) \n\t"                                    \
-         "sw $a0, 32($sp) \n\t"                                   \
-         "lw $a0, 40(%1) \n\t"                                    \
-         "sw $a0, 36($sp) \n\t"                                   \
-         "lw $a0, 4(%1) \n\t"                                     \
-         "lw $a1, 8(%1) \n\t"                                     \
-         "lw $a2, 12(%1) \n\t"                                    \
-         "lw $a3, 16(%1) \n\t"                                    \
-         "lw $t9, 0(%1) \n\t"  /* target->t9 */                   \
+         "dsubu $29, $29, 16\n\t"                                 \
+         "ld $4, 72(%1)\n\t"                                      \
+         "sd $4, 0($29)\n\t"                                      \
+         "ld $4, 80(%1)\n\t"                                      \
+         "sd $4, 8($29)\n\t"                                      \
+         "ld $4, 8(%1)\n\t"                                       \
+         "ld $5, 16(%1)\n\t"                                      \
+         "ld $6, 24(%1)\n\t"                                      \
+         "ld $7, 32(%1)\n\t"                                      \
+         "ld $8, 40(%1)\n\t"                                      \
+         "ld $9, 48(%1)\n\t"                                      \
+         "ld $10, 56(%1)\n\t"                                     \
+         "ld $11, 64(%1)\n\t"                                     \
+         "ld $25, 0(%1)\n\t"  /* target->t9 */                    \
          VALGRIND_CALL_NOREDIR_T9                                 \
-         "addu $sp, $sp, 48 \n\t"                                 \
-         "lw $gp, 0($sp) \n\t"                                    \
-         "lw $ra, 4($sp) \n\t"                                    \
-         "addu $sp, $sp, 8 \n\t"                                  \
-         "move %0, $v0\n"                                         \
+         "daddu $29, $29, 16\n\t"                                 \
+         "move %0, $2\n"                                          \
          : /*out*/   "=r" (_res)                                  \
-         : /*in*/    "0" (&_argvec[0])                            \
-         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+         : /*in*/    "r" (&_argvec[0])                            \
+         : /*trash*/ "memory", __CALLER_SAVED_REGS                \
       );                                                          \
       lval = (__typeof__(lval)) _res;                             \
    } while (0)
@@ -4323,38 +6006,28 @@ typedef
       _argvec[10] = (unsigned long)(arg10);                       \
       _argvec[11] = (unsigned long)(arg11);                       \
       __asm__ volatile(                                           \
-         "subu $29, $29, 8 \n\t"                                  \
-         "sw $gp, 0($sp) \n\t"                                    \
-         "sw $ra, 4($sp) \n\t"                                    \
-         "lw $a0, 20(%1) \n\t"                                    \
-         "subu $sp, $sp, 48\n\t"                                  \
-         "sw $a0, 16($sp) \n\t"                                   \
-         "lw $a0, 24(%1) \n\t"                                    \
-         "sw $a0, 20($sp) \n\t"                                   \
-         "lw $a0, 28(%1) \n\t"                                    \
-         "sw $a0, 24($sp) \n\t"                                   \
-         "lw $a0, 32(%1) \n\t"                                    \
-         "sw $a0, 28($sp) \n\t"                                   \
-         "lw $a0, 36(%1) \n\t"                                    \
-         "sw $a0, 32($sp) \n\t"                                   \
-         "lw $a0, 40(%1) \n\t"                                    \
-         "sw $a0, 36($sp) \n\t"                                   \
-         "lw $a0, 44(%1) \n\t"                                    \
-         "sw $a0, 40($sp) \n\t"                                   \
-         "lw $a0, 4(%1) \n\t"                                     \
-         "lw $a1, 8(%1) \n\t"                                     \
-         "lw $a2, 12(%1) \n\t"                                    \
-         "lw $a3, 16(%1) \n\t"                                    \
-         "lw $t9, 0(%1) \n\t"  /* target->t9 */                   \
+         "dsubu $29, $29, 24\n\t"                                 \
+         "ld $4, 72(%1)\n\t"                                      \
+         "sd $4, 0($29)\n\t"                                      \
+         "ld $4, 80(%1)\n\t"                                      \
+         "sd $4, 8($29)\n\t"                                      \
+         "ld $4, 88(%1)\n\t"                                      \
+         "sd $4, 16($29)\n\t"                                     \
+         "ld $4, 8(%1)\n\t"                                       \
+         "ld $5, 16(%1)\n\t"                                      \
+         "ld $6, 24(%1)\n\t"                                      \
+         "ld $7, 32(%1)\n\t"                                      \
+         "ld $8, 40(%1)\n\t"                                      \
+         "ld $9, 48(%1)\n\t"                                      \
+         "ld $10, 56(%1)\n\t"                                     \
+         "ld $11, 64(%1)\n\t"                                     \
+         "ld $25, 0(%1)\n\t"  /* target->t9 */                    \
          VALGRIND_CALL_NOREDIR_T9                                 \
-         "addu $sp, $sp, 48 \n\t"                                 \
-         "lw $gp, 0($sp) \n\t"                                    \
-         "lw $ra, 4($sp) \n\t"                                    \
-         "addu $sp, $sp, 8 \n\t"                                  \
-         "move %0, $v0\n"                                         \
+         "daddu $29, $29, 24\n\t"                                 \
+         "move %0, $2\n"                                          \
          : /*out*/   "=r" (_res)                                  \
-         : /*in*/    "0" (&_argvec[0])                            \
-         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+         : /*in*/    "r" (&_argvec[0])                            \
+         : /*trash*/ "memory", __CALLER_SAVED_REGS                \
       );                                                          \
       lval = (__typeof__(lval)) _res;                             \
    } while (0)
@@ -4380,45 +6053,35 @@ typedef
       _argvec[11] = (unsigned long)(arg11);                       \
       _argvec[12] = (unsigned long)(arg12);                       \
       __asm__ volatile(                                           \
-         "subu $29, $29, 8 \n\t"                                  \
-         "sw $gp, 0($sp) \n\t"                                    \
-         "sw $ra, 4($sp) \n\t"                                    \
-         "lw $a0, 20(%1) \n\t"                                    \
-         "subu $sp, $sp, 56\n\t"                                  \
-         "sw $a0, 16($sp) \n\t"                                   \
-         "lw $a0, 24(%1) \n\t"                                    \
-         "sw $a0, 20($sp) \n\t"                                   \
-         "lw $a0, 28(%1) \n\t"                                    \
-         "sw $a0, 24($sp) \n\t"                                   \
-         "lw $a0, 32(%1) \n\t"                                    \
-         "sw $a0, 28($sp) \n\t"                                   \
-         "lw $a0, 36(%1) \n\t"                                    \
-         "sw $a0, 32($sp) \n\t"                                   \
-         "lw $a0, 40(%1) \n\t"                                    \
-         "sw $a0, 36($sp) \n\t"                                   \
-         "lw $a0, 44(%1) \n\t"                                    \
-         "sw $a0, 40($sp) \n\t"                                   \
-         "lw $a0, 48(%1) \n\t"                                    \
-         "sw $a0, 44($sp) \n\t"                                   \
-         "lw $a0, 4(%1) \n\t"                                     \
-         "lw $a1, 8(%1) \n\t"                                     \
-         "lw $a2, 12(%1) \n\t"                                    \
-         "lw $a3, 16(%1) \n\t"                                    \
-         "lw $t9, 0(%1) \n\t"  /* target->t9 */                   \
+         "dsubu $29, $29, 32\n\t"                                 \
+         "ld $4, 72(%1)\n\t"                                      \
+         "sd $4, 0($29)\n\t"                                      \
+         "ld $4, 80(%1)\n\t"                                      \
+         "sd $4, 8($29)\n\t"                                      \
+         "ld $4, 88(%1)\n\t"                                      \
+         "sd $4, 16($29)\n\t"                                     \
+         "ld $4, 96(%1)\n\t"                                      \
+         "sd $4, 24($29)\n\t"                                     \
+         "ld $4, 8(%1)\n\t"                                       \
+         "ld $5, 16(%1)\n\t"                                      \
+         "ld $6, 24(%1)\n\t"                                      \
+         "ld $7, 32(%1)\n\t"                                      \
+         "ld $8, 40(%1)\n\t"                                      \
+         "ld $9, 48(%1)\n\t"                                      \
+         "ld $10, 56(%1)\n\t"                                     \
+         "ld $11, 64(%1)\n\t"                                     \
+         "ld $25, 0(%1)\n\t"  /* target->t9 */                    \
          VALGRIND_CALL_NOREDIR_T9                                 \
-         "addu $sp, $sp, 56 \n\t"                                 \
-         "lw $gp, 0($sp) \n\t"                                    \
-         "lw $ra, 4($sp) \n\t"                                    \
-         "addu $sp, $sp, 8 \n\t"                                  \
-         "move %0, $v0\n"                                         \
+         "daddu $29, $29, 32\n\t"                                 \
+         "move %0, $2\n"                                          \
          : /*out*/   "=r" (_res)                                  \
-         : /*in*/    "0" (&_argvec[0])                            \
-         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+         : /*in*/    "r" (&_argvec[0])                            \
+         : /*trash*/ "memory", __CALLER_SAVED_REGS                \
       );                                                          \
       lval = (__typeof__(lval)) _res;                             \
    } while (0)
 
-#endif /* PLAT_mips32_linux */
+#endif /* PLAT_mips64_linux */
 
 
 /* ------------------------------------------------------------------ */
@@ -4464,8 +6127,8 @@ typedef
              errors. */
           VG_USERREQ__COUNT_ERRORS = 0x1201,
 
-          /* Allows a string (gdb monitor command) to be passed to the tool
-             Used for interaction with vgdb/gdb */
+          /* Allows the client program and/or gdbserver to execute a monitor
+             command. */
           VG_USERREQ__GDB_MONITOR_COMMAND = 0x1202,
 
           /* These are useful and can be interpreted by any tool that
@@ -4562,14 +6225,14 @@ VALGRIND_PRINTF(const char *format, ...)
 #if defined(NVALGRIND)
    return 0;
 #else /* NVALGRIND */
-#if defined(_MSC_VER)
+#if defined(_MSC_VER) || defined(__MINGW64__)
    uintptr_t _qzz_res;
 #else
    unsigned long _qzz_res;
 #endif
    va_list vargs;
    va_start(vargs, format);
-#if defined(_MSC_VER)
+#if defined(_MSC_VER) || defined(__MINGW64__)
    _qzz_res = VALGRIND_DO_CLIENT_REQUEST_EXPR(0,
                               VG_USERREQ__PRINTF_VALIST_BY_REF,
                               (uintptr_t)format,
@@ -4600,14 +6263,14 @@ VALGRIND_PRINTF_BACKTRACE(const char *format, ...)
 #if defined(NVALGRIND)
    return 0;
 #else /* NVALGRIND */
-#if defined(_MSC_VER)
+#if defined(_MSC_VER) || defined(__MINGW64__)
    uintptr_t _qzz_res;
 #else
    unsigned long _qzz_res;
 #endif
    va_list vargs;
    va_start(vargs, format);
-#if defined(_MSC_VER)
+#if defined(_MSC_VER) || defined(__MINGW64__)
    _qzz_res = VALGRIND_DO_CLIENT_REQUEST_EXPR(0,
                               VG_USERREQ__PRINTF_BACKTRACE_VALIST_BY_REF,
                               (uintptr_t)format,
@@ -4844,7 +6507,9 @@ VALGRIND_PRINTF_BACKTRACE(const char *format, ...)
                                VG_USERREQ__MEMPOOL_EXISTS,        \
                                pool, 0, 0, 0, 0)
 
-/* Mark a piece of memory as being a stack. Returns a stack id. */
+/* Mark a piece of memory as being a stack. Returns a stack id.
+   start is the lowest addressable stack byte, end is the highest
+   addressable stack byte. */
 #define VALGRIND_STACK_REGISTER(start, end)                       \
     (unsigned)VALGRIND_DO_CLIENT_REQUEST_EXPR(0,                  \
                                VG_USERREQ__STACK_REGISTER,        \
@@ -4856,7 +6521,9 @@ VALGRIND_PRINTF_BACKTRACE(const char *format, ...)
     VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__STACK_DEREGISTER, \
                                     id, 0, 0, 0, 0)
 
-/* Change the start and end address of the stack id. */
+/* Change the start and end address of the stack id.
+   start is the new lowest addressable stack byte, end is the new highest
+   addressable stack byte. */
 #define VALGRIND_STACK_CHANGE(id, start, end)                     \
     VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__STACK_CHANGE,     \
                                     id, start, end, 0, 0)
@@ -4893,15 +6560,28 @@ VALGRIND_PRINTF_BACKTRACE(const char *format, ...)
     VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__CHANGE_ERR_DISABLEMENT, \
                                     -1, 0, 0, 0, 0)
 
+/* Execute a monitor command from the client program.
+   If a connection is opened with GDB, the output will be sent
+   according to the output mode set for vgdb.
+   If no connection is opened, output will go to the log output.
+   Returns 1 if command not recognised, 0 otherwise. */
+#define VALGRIND_MONITOR_COMMAND(command)                               \
+   VALGRIND_DO_CLIENT_REQUEST_EXPR(0, VG_USERREQ__GDB_MONITOR_COMMAND, \
+                                   command, 0, 0, 0, 0)
+
+
 #undef PLAT_x86_darwin
 #undef PLAT_amd64_darwin
 #undef PLAT_x86_win32
+#undef PLAT_amd64_win64
 #undef PLAT_x86_linux
 #undef PLAT_amd64_linux
 #undef PLAT_ppc32_linux
-#undef PLAT_ppc64_linux
+#undef PLAT_ppc64be_linux
+#undef PLAT_ppc64le_linux
 #undef PLAT_arm_linux
 #undef PLAT_s390x_linux
 #undef PLAT_mips32_linux
+#undef PLAT_mips64_linux
 
 #endif   /* __VALGRIND_H */
index 0829c88f7a3cc5b787db096fcc7e8b43153e097a..e9be47be4016034c0ecfa0823fe8c8c3477061e1 100644 (file)
@@ -43,7 +43,7 @@
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
     <ConfigurationType>StaticLibrary</ConfigurationType>\r
     <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v110</PlatformToolset>\r
+    <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_SGen|Win32'" Label="Configuration">\r
     <ConfigurationType>StaticLibrary</ConfigurationType>\r
@@ -53,7 +53,7 @@
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
     <ConfigurationType>StaticLibrary</ConfigurationType>\r
     <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v110</PlatformToolset>\r
+    <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug_SGen|Win32'" Label="Configuration">\r
     <ConfigurationType>StaticLibrary</ConfigurationType>\r
@@ -63,7 +63,7 @@
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
     <ConfigurationType>StaticLibrary</ConfigurationType>\r
     <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v110</PlatformToolset>\r
+    <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_SGen|x64'" Label="Configuration">\r
     <ConfigurationType>StaticLibrary</ConfigurationType>\r
@@ -73,7 +73,7 @@
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
     <ConfigurationType>StaticLibrary</ConfigurationType>\r
     <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v110</PlatformToolset>\r
+    <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug_SGen|x64'" Label="Configuration">\r
     <ConfigurationType>StaticLibrary</ConfigurationType>\r
index c247eb42993622908bd301489cc928c804979509..f5104c4aa5202d5e0c9eb4b08841874de82a0817 100644 (file)
@@ -34,7 +34,7 @@
       <Platform>x64</Platform>\r
     </ProjectConfiguration>\r
   </ItemGroup>\r
-  <Import Project="mono.props" />
+  <Import Project="mono.props" />\r
   <PropertyGroup Label="Globals">\r
     <ProjectGuid>{B7098DFA-31E6-4006-8A15-1C9A4E925149}</ProjectGuid>\r
     <RootNamespace>genmdesc</RootNamespace>\r
@@ -44,7 +44,7 @@
     <ConfigurationType>Application</ConfigurationType>\r
     <UseOfMfc>false</UseOfMfc>\r
     <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v110</PlatformToolset>\r
+    <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_SGen|Win32'" Label="Configuration">\r
     <ConfigurationType>Application</ConfigurationType>\r
@@ -56,7 +56,7 @@
     <ConfigurationType>Application</ConfigurationType>\r
     <UseOfMfc>false</UseOfMfc>\r
     <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v110</PlatformToolset>\r
+    <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug_SGen|Win32'" Label="Configuration">\r
     <ConfigurationType>Application</ConfigurationType>\r
@@ -68,7 +68,7 @@
     <ConfigurationType>Application</ConfigurationType>\r
     <UseOfMfc>false</UseOfMfc>\r
     <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v110</PlatformToolset>\r
+    <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_SGen|x64'" Label="Configuration">\r
     <ConfigurationType>Application</ConfigurationType>\r
@@ -80,7 +80,7 @@
     <ConfigurationType>Application</ConfigurationType>\r
     <UseOfMfc>false</UseOfMfc>\r
     <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v110</PlatformToolset>\r
+    <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug_SGen|x64'" Label="Configuration">\r
     <ConfigurationType>Application</ConfigurationType>\r
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
   <ImportGroup Label="ExtensionTargets">\r
   </ImportGroup>\r
-</Project>
+</Project>
\ No newline at end of file
index 4871cc2e3c2c20063ed31e214c484cb06bf364ec..674dc574749e3141c4c5cc342c65edba783af099 100644 (file)
@@ -43,7 +43,7 @@
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
     <ConfigurationType>StaticLibrary</ConfigurationType>\r
     <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v110</PlatformToolset>\r
+    <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_SGen|Win32'" Label="Configuration">\r
     <ConfigurationType>StaticLibrary</ConfigurationType>\r
@@ -53,7 +53,7 @@
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
     <ConfigurationType>StaticLibrary</ConfigurationType>\r
     <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v110</PlatformToolset>\r
+    <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug_SGen|Win32'" Label="Configuration">\r
     <ConfigurationType>StaticLibrary</ConfigurationType>\r
@@ -63,7 +63,7 @@
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
     <ConfigurationType>StaticLibrary</ConfigurationType>\r
     <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v110</PlatformToolset>\r
+    <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_SGen|x64'" Label="Configuration">\r
     <ConfigurationType>StaticLibrary</ConfigurationType>\r
@@ -73,7 +73,7 @@
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
     <ConfigurationType>StaticLibrary</ConfigurationType>\r
     <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v110</PlatformToolset>\r
+    <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug_SGen|x64'" Label="Configuration">\r
     <ConfigurationType>StaticLibrary</ConfigurationType>\r
index fe4a881401d784425321031974fe010770ad97ef..e602b28bca6498aff066fdd8e4a513026f4cf5b9 100644 (file)
     <ConfigurationType>DynamicLibrary</ConfigurationType>\r
     <UseOfMfc>false</UseOfMfc>\r
     <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v110</PlatformToolset>\r
+    <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_SGen|Win32'" Label="Configuration">\r
     <ConfigurationType>DynamicLibrary</ConfigurationType>\r
     <UseOfMfc>false</UseOfMfc>\r
     <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v110</PlatformToolset>\r
+    <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
     <ConfigurationType>DynamicLibrary</ConfigurationType>\r
     <UseOfMfc>false</UseOfMfc>\r
     <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v110</PlatformToolset>\r
+    <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug_SGen|Win32'" Label="Configuration">\r
     <ConfigurationType>DynamicLibrary</ConfigurationType>\r
     <UseOfMfc>false</UseOfMfc>\r
     <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v110</PlatformToolset>\r
+    <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
     <ConfigurationType>DynamicLibrary</ConfigurationType>\r
     <UseOfMfc>false</UseOfMfc>\r
     <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v110</PlatformToolset>\r
+    <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_SGen|x64'" Label="Configuration">\r
     <ConfigurationType>DynamicLibrary</ConfigurationType>\r
     <UseOfMfc>false</UseOfMfc>\r
     <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v110</PlatformToolset>\r
+    <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
     <ConfigurationType>DynamicLibrary</ConfigurationType>\r
     <UseOfMfc>false</UseOfMfc>\r
     <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v110</PlatformToolset>\r
+    <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug_SGen|x64'" Label="Configuration">\r
     <ConfigurationType>DynamicLibrary</ConfigurationType>\r
     <UseOfMfc>false</UseOfMfc>\r
     <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v110</PlatformToolset>\r
+    <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
   <ImportGroup Label="ExtensionSettings">\r
index e33dd96ad4bd033de1058e8e555cac2b23ca6922..942b2b346707ea5abce5342ebba8290bb2e6fd9e 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>\r
+<?xml version="1.0" encoding="utf-8"?>\r
 <Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
   <ItemGroup Label="ProjectConfigurations">\r
     <ProjectConfiguration Include="Debug_SGen|Win32">\r
@@ -46,7 +46,7 @@
     <ClCompile Include="..\mono\metadata\coree.c" />\r
     <ClCompile Include="..\mono\metadata\debug-helpers.c" />\r
     <ClCompile Include="..\mono\metadata\debug-mono-symfile.c" />\r
-    <ClCompile Include="..\mono\metadata\decimal.c" />\r
+    <ClCompile Include="..\mono\metadata\decimal-ms.c" />\r
     <ClCompile Include="..\mono\metadata\domain.c" />\r
     <ClCompile Include="..\mono\metadata\environment.c" />\r
     <ClCompile Include="..\mono\metadata\exception.c" />\r
     <ClCompile Include="..\mono\metadata\string-icalls.c" />\r
     <ClCompile Include="..\mono\metadata\sysmath.c" />\r
     <ClCompile Include="..\mono\metadata\threadpool.c" />\r
+    <ClCompile Include="..\mono\metadata\tpool-poll.c" />\r
     <ClCompile Include="..\mono\metadata\threads.c" />\r
     <ClCompile Include="..\mono\metadata\verify.c" />\r
     <ClCompile Include="..\mono\mini\mini-cross-helpers.c" />\r
     <ConfigurationType>StaticLibrary</ConfigurationType>\r
     <UseDebugLibraries>true</UseDebugLibraries>\r
     <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v110</PlatformToolset>\r
+    <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug_SGen|Win32'" Label="Configuration">\r
     <ConfigurationType>StaticLibrary</ConfigurationType>\r
     <UseDebugLibraries>true</UseDebugLibraries>\r
     <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v110</PlatformToolset>\r
+    <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
     <ConfigurationType>StaticLibrary</ConfigurationType>\r
     <UseDebugLibraries>true</UseDebugLibraries>\r
     <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v110</PlatformToolset>\r
+    <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug_SGen|x64'" Label="Configuration">\r
     <ConfigurationType>StaticLibrary</ConfigurationType>\r
     <UseDebugLibraries>true</UseDebugLibraries>\r
     <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v110</PlatformToolset>\r
+    <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
     <ConfigurationType>StaticLibrary</ConfigurationType>\r
     <UseDebugLibraries>false</UseDebugLibraries>\r
     <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v110</PlatformToolset>\r
+    <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_SGen|Win32'" Label="Configuration">\r
     <ConfigurationType>StaticLibrary</ConfigurationType>\r
     <ConfigurationType>StaticLibrary</ConfigurationType>\r
     <UseDebugLibraries>false</UseDebugLibraries>\r
     <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v110</PlatformToolset>\r
+    <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_SGen|x64'" Label="Configuration">\r
     <ConfigurationType>StaticLibrary</ConfigurationType>\r
     <UseDebugLibraries>false</UseDebugLibraries>\r
     <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v110</PlatformToolset>\r
+    <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
   <ImportGroup Label="ExtensionSettings">\r
index 7b1fa472ddf0fe2c561523fcaf87c565cdfc84d0..a091267ea896a81a1d73d318bf8f266ea67ad41f 100644 (file)
@@ -73,6 +73,7 @@
     <ClCompile Include="..\mono\utils\mono-hwcap.c" />\r
     <ClCompile Include="..\mono\utils\mono-hwcap-x86.c" />\r
     <ClCompile Include="..\mono\utils\bsearch.c" />\r
+    <ClInclude Include="..\mono\utils\json.c" />    \r
   </ItemGroup>\r
   <ItemGroup>\r
     <ClInclude Include="..\mono\utils\dlmalloc.h" />\r
     <ClInclude Include="..\mono\utils\mono-hwcap.h" />\r
     <ClInclude Include="..\mono\utils\mono-hwcap-x86.h" />\r
     <ClInclude Include="..\mono\utils\bsearch.h" />\r
+    <ClInclude Include="..\mono\utils\json.h" />\r
   </ItemGroup>\r
   <ItemGroup>\r
     <MASM Include="..\mono\utils\win64.asm">\r
     <ConfigurationType>StaticLibrary</ConfigurationType>\r
     <UseDebugLibraries>true</UseDebugLibraries>\r
     <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v110</PlatformToolset>\r
+    <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
     <ConfigurationType>StaticLibrary</ConfigurationType>\r
     <UseDebugLibraries>true</UseDebugLibraries>\r
     <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v110</PlatformToolset>\r
+    <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
     <ConfigurationType>StaticLibrary</ConfigurationType>\r
     <UseDebugLibraries>false</UseDebugLibraries>\r
     <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v110</PlatformToolset>\r
+    <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
     <ConfigurationType>StaticLibrary</ConfigurationType>\r
     <UseDebugLibraries>false</UseDebugLibraries>\r
     <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v110</PlatformToolset>\r
+    <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
   <ImportGroup Label="ExtensionSettings">\r
   <ImportGroup Label="ExtensionTargets">\r
     <Import Project="$(VCTargetsPath)\BuildCustomizations\masm.targets" />\r
   </ImportGroup>\r
-</Project>\r
+</Project>
\ No newline at end of file
index 8e35a6e7659f69d7d45dbdbcbd9b238f3157587f..49eba7f2e5abc997d7cd0d422a214c77e0080a9f 100644 (file)
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
     <ConfigurationType>DynamicLibrary</ConfigurationType>\r
     <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v110</PlatformToolset>\r
+    <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
     <ConfigurationType>DynamicLibrary</ConfigurationType>\r
     <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v110</PlatformToolset>\r
+    <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
     <ConfigurationType>DynamicLibrary</ConfigurationType>\r
     <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v110</PlatformToolset>\r
+    <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
     <ConfigurationType>DynamicLibrary</ConfigurationType>\r
     <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v110</PlatformToolset>\r
+    <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
   <ImportGroup Label="ExtensionSettings">\r
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
   <ImportGroup Label="ExtensionTargets">\r
   </ImportGroup>\r
-</Project>\r
+</Project>
\ No newline at end of file
index 8c3af8e38ca77c07148e9967ecb998a98edfb44a..3ecf25bff1e7ea2cac166a736f947f6a5ce88391 100644 (file)
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
     <ConfigurationType>Application</ConfigurationType>\r
     <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v110</PlatformToolset>\r
+    <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_SGen|Win32'" Label="Configuration">\r
     <ConfigurationType>Application</ConfigurationType>\r
     <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v110</PlatformToolset>\r
+    <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
     <ConfigurationType>Application</ConfigurationType>\r
     <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v110</PlatformToolset>\r
+    <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug_SGen|Win32'" Label="Configuration">\r
     <ConfigurationType>Application</ConfigurationType>\r
     <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v110</PlatformToolset>\r
+    <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
     <ConfigurationType>Application</ConfigurationType>\r
     <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v110</PlatformToolset>\r
+    <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_SGen|x64'" Label="Configuration">\r
     <ConfigurationType>Application</ConfigurationType>\r
     <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v110</PlatformToolset>\r
+    <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
     <ConfigurationType>Application</ConfigurationType>\r
     <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v110</PlatformToolset>\r
+    <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug_SGen|x64'" Label="Configuration">\r
     <ConfigurationType>Application</ConfigurationType>\r
     <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v110</PlatformToolset>\r
+    <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
   <ImportGroup Label="ExtensionSettings">\r
index 9ffaee6c8e7fe52196af0085a5941c3f71329a4f..b4b2c4e5d80ff5c1a97820c2774a9a6a27eabadc 100644 (file)
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
     <ConfigurationType>Application</ConfigurationType>\r
     <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v110</PlatformToolset>\r
+    <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
     <ConfigurationType>Application</ConfigurationType>\r
     <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v110</PlatformToolset>\r
+    <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
     <ConfigurationType>Application</ConfigurationType>\r
     <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v110</PlatformToolset>\r
+    <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
     <ConfigurationType>Application</ConfigurationType>\r
     <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v110</PlatformToolset>\r
+    <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
   <ImportGroup Label="ExtensionSettings">\r
index 90f7bbf1558237ce9ae989f22063cbec1e69a03e..b9cae332c8e15b2f6857590b2f797d5dc4381b44 100644 (file)
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
     <ConfigurationType>Application</ConfigurationType>\r
     <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v110</PlatformToolset>\r
+    <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
     <ConfigurationType>Application</ConfigurationType>\r
     <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v110</PlatformToolset>\r
+    <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
     <ConfigurationType>Application</ConfigurationType>\r
     <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v110</PlatformToolset>\r
+    <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
     <ConfigurationType>Application</ConfigurationType>\r
     <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v110</PlatformToolset>\r
+    <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
   <ImportGroup Label="ExtensionSettings">\r
index d3b5e3b5c20a6b23912a7d8e2647444968507b28..f77df6ffae81890739e5eadd50d0029204d392c4 100644 (file)
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
     <ConfigurationType>Application</ConfigurationType>\r
     <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v110</PlatformToolset>\r
+    <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
     <ConfigurationType>Application</ConfigurationType>\r
     <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v110</PlatformToolset>\r
+    <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
     <ConfigurationType>Application</ConfigurationType>\r
     <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v110</PlatformToolset>\r
+    <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
     <ConfigurationType>Application</ConfigurationType>\r
     <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v110</PlatformToolset>\r
+    <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
   <ImportGroup Label="ExtensionSettings">\r
index 6ce62fdc735f62cef5873bfdaea3c53cea86f222..b5ad48a17acbe10417211fe8a077e0e00633f0a5 100644 (file)
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
     <ConfigurationType>DynamicLibrary</ConfigurationType>\r
     <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v110</PlatformToolset>\r
+    <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
     <ConfigurationType>DynamicLibrary</ConfigurationType>\r
     <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v110</PlatformToolset>\r
+    <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
     <ConfigurationType>DynamicLibrary</ConfigurationType>\r
     <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v110</PlatformToolset>\r
+    <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
     <ConfigurationType>DynamicLibrary</ConfigurationType>\r
     <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v110</PlatformToolset>\r
+    <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
   <ImportGroup Label="ExtensionSettings">\r
index df59d4c4be54c1b507853281793b615cefcfd910..5e57c01b5dd91ad006d1752bfd865ecd40daa186 100644 (file)
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
     <ConfigurationType>Application</ConfigurationType>\r
     <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v110</PlatformToolset>\r
+    <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
     <ConfigurationType>Application</ConfigurationType>\r
     <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v110</PlatformToolset>\r
+    <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
     <ConfigurationType>Application</ConfigurationType>\r
     <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v110</PlatformToolset>\r
+    <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
     <ConfigurationType>Application</ConfigurationType>\r
     <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v110</PlatformToolset>\r
+    <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
   <ImportGroup Label="ExtensionSettings">\r
index 5950f87a30bd81b30ff022edfb873b38b7213e26..d9d013ce515de9a5e2d235fdef6b1284ceb186ec 100644 (file)
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
     <ConfigurationType>DynamicLibrary</ConfigurationType>\r
     <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v110</PlatformToolset>\r
+    <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
     <ConfigurationType>DynamicLibrary</ConfigurationType>\r
     <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v110</PlatformToolset>\r
+    <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
     <ConfigurationType>DynamicLibrary</ConfigurationType>\r
     <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v110</PlatformToolset>\r
+    <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
     <ConfigurationType>DynamicLibrary</ConfigurationType>\r
     <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v110</PlatformToolset>\r
+    <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
   <ImportGroup Label="ExtensionSettings">\r
index 44d30568b2ee6c4860a013f3d390f4210b8299a0..da7aaa3e67d3ac38c1f6ad4a5b463f4c52b5fd44 100644 (file)
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
     <ConfigurationType>DynamicLibrary</ConfigurationType>\r
     <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v110</PlatformToolset>\r
+    <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
     <ConfigurationType>DynamicLibrary</ConfigurationType>\r
     <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v110</PlatformToolset>\r
+    <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
     <ConfigurationType>DynamicLibrary</ConfigurationType>\r
     <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v110</PlatformToolset>\r
+    <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
     <ConfigurationType>DynamicLibrary</ConfigurationType>\r
     <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v110</PlatformToolset>\r
+    <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
   <ImportGroup Label="ExtensionSettings">\r
index b4576542797e35c432c4d5ad24db41ec1dafa806..5dba15bab2a7872640747bbec4e39daf00bdefb8 100644 (file)
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
     <ConfigurationType>DynamicLibrary</ConfigurationType>\r
     <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v110</PlatformToolset>\r
+    <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
     <ConfigurationType>DynamicLibrary</ConfigurationType>\r
     <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v110</PlatformToolset>\r
+    <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
     <ConfigurationType>DynamicLibrary</ConfigurationType>\r
     <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v110</PlatformToolset>\r
+    <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
     <ConfigurationType>DynamicLibrary</ConfigurationType>\r
     <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v110</PlatformToolset>\r
+    <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
   <ImportGroup Label="ExtensionSettings">\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\libgc\include;..\;..\mono\;..\mono\jit;..\mono\eglib\src;..\..\mono\eglib\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>TARGET_X86;_DEBUG;__i386__;TARGET_X86;i386;WIN32;_WIN32;__WIN32__;_WINDOWS;WINDOWS;HOST_WIN32;TARGET_WIN32;_CRT_SECURE_NO_DEPRECATE;GC_NOT_DLL;HAVE_CONFIG_H;WINVER=0x0502;_WIN32_WINNT=0x0502;_WIN32_IE=0x0501;WIN32_THREADS;FD_SETSIZE=1024;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>TARGET_X86;_DEBUG;__i386__;TARGET_X86;i386;WIN32;_WIN32;__WIN32__;_WINDOWS;WINDOWS;HOST_WIN32;TARGET_WIN32;_CRT_SECURE_NO_DEPRECATE;GC_NOT_DLL;HAVE_CONFIG_H;WINVER=0x0502;_WIN32_WINNT=0x0502;_WIN32_IE=0x0501;WIN32_THREADS;FD_SETSIZE=1024;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\libgc\include;..\;..\mono\;..\mono\jit;..\mono\eglib\src;..\..\mono\eglib\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>TARGET_X86;_DEBUG;__i386__;TARGET_X86;i386;WIN32;_WIN32;__WIN32__;_WINDOWS;WINDOWS;HOST_WIN32;TARGET_WIN32;_CRT_SECURE_NO_DEPRECATE;GC_NOT_DLL;HAVE_CONFIG_H;WINVER=0x0502;_WIN32_WINNT=0x0502;_WIN32_IE=0x0501;WIN32_THREADS;FD_SETSIZE=1024;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>TARGET_X86;_DEBUG;__i386__;TARGET_X86;i386;WIN32;_WIN32;__WIN32__;_WINDOWS;WINDOWS;HOST_WIN32;TARGET_WIN32;_CRT_SECURE_NO_DEPRECATE;GC_NOT_DLL;HAVE_CONFIG_H;WINVER=0x0502;_WIN32_WINNT=0x0502;_WIN32_IE=0x0501;WIN32_THREADS;FD_SETSIZE=1024;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <PrecompiledHeader>\r
index 840a6e3f690cb0a512804305b0db171c2ff529c0..dcdb2ba64855620ad1a170e0fb8b434fff1430a8 100644 (file)
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
     <ConfigurationType>DynamicLibrary</ConfigurationType>\r
     <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v110</PlatformToolset>\r
+    <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
     <ConfigurationType>DynamicLibrary</ConfigurationType>\r
     <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v110</PlatformToolset>\r
+    <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
     <ConfigurationType>DynamicLibrary</ConfigurationType>\r
     <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v110</PlatformToolset>\r
+    <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
     <ConfigurationType>DynamicLibrary</ConfigurationType>\r
     <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v110</PlatformToolset>\r
+    <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
   <ImportGroup Label="ExtensionSettings">\r
index c61e89c19bb9e0b935c562adbd786ded28107614..60b4036396213371311c9beeed78e78876abd830 100644 (file)
@@ -38,7 +38,7 @@ class SlnGenerator {
        const string project_start = "Project(\"{{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}}\") = \"{0}\", \"{1}\", \"{2}\""; // Note: No need to double up on {} around {2}
        const string project_end = "EndProject";
 
-       List<MsbuildGenerator.VsCsproj> libraries = new List<MsbuildGenerator.VsCsproj> ();
+       public List<MsbuildGenerator.VsCsproj> libraries = new List<MsbuildGenerator.VsCsproj> ();
        string header;
 
        string MakeHeader (string formatVersion, string yearTag)
@@ -123,7 +123,7 @@ class MsbuildGenerator {
        }
 
        // The directory as specified in order.xml
-       string dir;
+       public string dir;
        string library;
        string projectGuid;
        string fx_version;
@@ -153,7 +153,8 @@ class MsbuildGenerator {
                        projectGuid = this.projectGuid,
                        library_output = this.LibraryOutput,
                        fx_version = double.Parse (fx_version),
-                       library = this.library
+                       library = this.library,
+                       MsbuildGenerator = this
                };
 
                if (dir == "mcs") {
@@ -621,6 +622,7 @@ class MsbuildGenerator {
                public double fx_version;
                public List<VsCsproj> projReferences = new List<VsCsproj> ();
                public string library;
+               public MsbuildGenerator MsbuildGenerator;
        }
 
        public VsCsproj Csproj;
@@ -916,7 +918,7 @@ class MsbuildGenerator {
                        result.projReferences.Add (match.Csproj);
        }
 
-       static string GetRelativePath (string from, string to)
+       public static string GetRelativePath (string from, string to)
        {
                from = from.Replace ("\\", "/");
                to = to.Replace ("\\", "/");
@@ -964,7 +966,7 @@ class MsbuildGenerator {
 
 public class Driver {
 
-       static IEnumerable<XElement> GetProjects ()
+       static IEnumerable<XElement> GetProjects (bool full = false)
        {
                XDocument doc = XDocument.Load ("order.xml");
                foreach (XElement project in doc.Root.Elements ()) {
@@ -978,6 +980,12 @@ public class Driver {
                        if (!(dir.StartsWith ("class") || dir.StartsWith ("mcs") || dir.StartsWith ("basic")))
                                continue;
 
+                       if (full){
+                               if (!library.Contains ("tests"))
+                                       yield return project;
+                               continue;
+                       }
+                       
                        //
                        // Do not do 2.1, it is not working yet
                        // Do not do basic, as there is no point (requires a system mcs to be installed).
@@ -1009,12 +1017,18 @@ public class Driver {
                        Console.WriteLine (" assemblies (and dependencies) is included in the solution.");
                        Console.WriteLine ("Example:");
                        Console.WriteLine ("genproj.exe 2012 false");
-                       Console.WriteLine ("genproj.exe with no arguments is equivalent to 'genproj.exe 2012 true'");
+                       Console.WriteLine ("genproj.exe with no arguments is equivalent to 'genproj.exe 2012 true'\n\n");
+                       Console.WriteLine ("genproj.exe deps");
+                       Console.WriteLine ("Generates a Makefile dependency file from the projects input");
                        Environment.Exit (0);
                }
+
                var slnVersion = (args.Length > 0) ? args [0] : "2012";
                bool fullSolutions = (args.Length > 1) ? bool.Parse (args [1]) : true;
 
+               // To generate makefile depenedencies
+               var makefileDeps =  (args.Length > 0 && args [0] == "deps");
+
                var sln_gen = new SlnGenerator (slnVersion);
                var two_sln_gen = new SlnGenerator (slnVersion);
                var four_sln_gen = new SlnGenerator (slnVersion);
@@ -1023,11 +1037,11 @@ public class Driver {
                var projects = new Dictionary<string,MsbuildGenerator> ();
 
                var duplicates = new List<string> ();
-               foreach (var project in GetProjects ()) {
+               foreach (var project in GetProjects (makefileDeps)) {
                        var library_output = project.Element ("library_output").Value;
                        projects [library_output] = new MsbuildGenerator (project);
                }
-               foreach (var project in GetProjects ()){
+               foreach (var project in GetProjects (makefileDeps)){
                        var library_output = project.Element ("library_output").Value;
                        var gen = projects [library_output];
                        try {
@@ -1038,7 +1052,7 @@ public class Driver {
                                } else {
                                        duplicates.Add (csprojFilename);
                                }
-
+                               
                        } catch (Exception e) {
                                Console.WriteLine ("Error in {0}\n{1}", project, e);
                        }
@@ -1063,6 +1077,26 @@ public class Driver {
                WriteSolution (three_five_sln_gen, MakeSolutionName (MsbuildGenerator.profile_3_5));
                WriteSolution (four_sln_gen, MakeSolutionName (MsbuildGenerator.profile_4_0));
                WriteSolution (four_five_sln_gen, MakeSolutionName (MsbuildGenerator.profile_4_5));
+
+               if (makefileDeps){
+                       const string classDirPrefix = "./../../";
+                       Console.WriteLine ("here {0}", sln_gen.libraries.Count);
+                       foreach (var p in sln_gen.libraries){
+                               string rebasedOutput = RebaseToClassDirectory (MsbuildGenerator.GetRelativePath ("../../mcs/class", p.library_output));
+                               
+                               Console.Write ("{0}: ", rebasedOutput);
+                               foreach (var r in p.projReferences){
+                                       var lo = r.library_output;
+                                       if (lo.StartsWith (classDirPrefix))
+                                               lo = lo.Substring (classDirPrefix.Length);
+                                       else
+                                               lo = "<<ERROR-dependency is not a class library>>";
+                                       Console.Write ("{0} ", lo);
+                               }
+                               Console.Write ("\n\t(cd {0}; make {1})", p.MsbuildGenerator.dir, p.library_output);
+                               Console.WriteLine ("\n");
+                       }
+               }
                
                // A few other optional solutions
                // Solutions with 'everything' and the most common libraries used in development may be of interest
@@ -1073,6 +1107,18 @@ public class Driver {
                //WriteSolution (build_sln_gen, "mcs_build.sln");
        }
 
+       // Rebases a path, assuming that execution is taking place in the "class" subdirectory,
+       // so it strips ../class/ from a path, which is a no-op
+       static string RebaseToClassDirectory (string path)
+       {
+               const string prefix = "../class/";
+               int p = path.IndexOf (prefix);
+               if (p == -1)
+                       return path;
+               return path.Substring (0, p) + path.Substring (p+prefix.Length);
+               return path;
+       }
+       
        static string MakeSolutionName (string profileTag)
        {
                return "net" + profileTag + ".sln";
index 22d86cf5d5f674d57d4984e9fc07d014f77c7371..f296eba3d54697212d8cd2fedd27cace6db5a061 100644 (file)
     </project>
     <project dir="class/corlib" library="corlib-basic">
       <boot>true</boot>
-      <flags>/codepage:65001 -unsafe -nostdlib -nowarn:612,618 -d:INSIDE_CORLIB -d:LIBC -d:FEATURE_PAL -d:NET_1_1 -d:NET_2_0 -d:NET_3_0 -d:NET_3_5 -d:NET_4_0 -d:NET_4_5 -d:MONO -d:BOOTSTRAP_BASIC -nowarn:1699 -d:DISABLE_CAS_USE -lib:./../../class/lib/basic -optimize /noconfig -resource:resources/collation.core.bin -resource:resources/collation.tailoring.bin -resource:resources/collation.cjkCHS.bin -resource:resources/collation.cjkCHT.bin -resource:resources/collation.cjkJA.bin -resource:resources/collation.cjkKO.bin -resource:resources/collation.cjkKOlv2.bin --runtime:v4</flags>
+      <flags>/codepage:65001 -unsafe -nostdlib -nowarn:612,618 -d:INSIDE_CORLIB -d:LIBC -d:FEATURE_PAL,GENERICS_WORK,FEATURE_LIST_PREDICATES -d:NET_1_1 -d:NET_2_0 -d:NET_3_0 -d:NET_3_5 -d:NET_4_0 -d:NET_4_5 -d:MONO -d:BOOTSTRAP_BASIC -nowarn:1699 -d:DISABLE_CAS_USE -lib:./../../class/lib/basic -optimize /noconfig -d:FEATURE_PAL,GENERICS_WORK,FEATURE_LIST_PREDICATES -resource:resources/collation.core.bin -resource:resources/collation.tailoring.bin -resource:resources/collation.cjkCHS.bin -resource:resources/collation.cjkCHT.bin -resource:resources/collation.cjkJA.bin -resource:resources/collation.cjkKO.bin -resource:resources/collation.cjkKOlv2.bin --runtime:v4</flags>
       <output>mscorlib.dll</output>
       <built_sources></built_sources>
       <library_output>./../../class/lib/basic/mscorlib.dll</library_output>
       <fx_version>4.0</fx_version>
       <profile>basic</profile>
-      <response>./../../build/deps/basic_corlib.dll.sources</response>
+      <response>corlib.dll.sources</response>
     </project>
     <project dir="class/System" library="System-basic">
       <boot>true</boot>
-      <flags>/codepage:65001 -d:NET_1_1 -d:NET_2_0 -d:NET_3_0 -d:NET_3_5 -d:NET_4_0 -d:NET_4_5 -d:MONO -d:BOOTSTRAP_BASIC -nowarn:1699 -d:DISABLE_CAS_USE -lib:./../../class/lib/basic -optimize /noconfig -nowarn:618 -d:CONFIGURATION_2_0 -d:FEATURE_PAL,SYSTEM_NAMESPACE,MONO -unsafe -resource:resources/Asterisk.wav -resource:resources/Beep.wav -resource:resources/Exclamation.wav -resource:resources/Hand.wav -resource:resources/Question.wav -d:SECURITY_DEP -d:XML_DEP -r:PrebuiltSystem=./../../class/lib/basic/secxml/System.dll -r:System.Xml.dll -r:MonoSecurity=Mono.Security.dll -r:System.Configuration.dll -d:CONFIGURATION_DEP</flags>
+      <flags>/codepage:65001 -d:NET_1_1 -d:NET_2_0 -d:NET_3_0 -d:NET_3_5 -d:NET_4_0 -d:NET_4_5 -d:MONO -d:BOOTSTRAP_BASIC -nowarn:1699 -d:DISABLE_CAS_USE -lib:./../../class/lib/basic -optimize /noconfig -nowarn:618 -d:CONFIGURATION_2_0 -d:FEATURE_PAL,SYSTEM_NAMESPACE,MONO,PLATFORM_UNIX -unsafe -resource:resources/Asterisk.wav -resource:resources/Beep.wav -resource:resources/Exclamation.wav -resource:resources/Hand.wav -resource:resources/Question.wav -d:SECURITY_DEP -d:XML_DEP -r:PrebuiltSystem=./../../class/lib/basic/secxml/System.dll -r:System.Xml.dll -r:MonoSecurity=Mono.Security.dll -r:System.Configuration.dll -d:CONFIGURATION_DEP</flags>
       <output>System.dll</output>
       <built_sources></built_sources>
       <library_output>./../../class/lib/basic/System.dll</library_output>
@@ -42,7 +42,7 @@
     </project>
     <project dir="class/System" library="System-basic">
       <boot>true</boot>
-      <flags>/codepage:65001 -d:NET_1_1 -d:NET_2_0 -d:NET_3_0 -d:NET_3_5 -d:NET_4_0 -d:NET_4_5 -d:MONO -d:BOOTSTRAP_BASIC -nowarn:1699 -d:DISABLE_CAS_USE -lib:./../../class/lib/basic -optimize /noconfig -nowarn:618 -d:CONFIGURATION_2_0 -d:FEATURE_PAL,SYSTEM_NAMESPACE,MONO -unsafe -resource:resources/Asterisk.wav -resource:resources/Beep.wav -resource:resources/Exclamation.wav -resource:resources/Hand.wav -resource:resources/Question.wav -d:SECURITY_DEP -d:XML_DEP -r:PrebuiltSystem=./../../class/lib/basic/secxml/System.dll -r:System.Xml.dll -r:MonoSecurity=Mono.Security.dll -r:System.Configuration.dll -d:CONFIGURATION_DEP</flags>
+      <flags>/codepage:65001 -d:NET_1_1 -d:NET_2_0 -d:NET_3_0 -d:NET_3_5 -d:NET_4_0 -d:NET_4_5 -d:MONO -d:BOOTSTRAP_BASIC -nowarn:1699 -d:DISABLE_CAS_USE -lib:./../../class/lib/basic -optimize /noconfig -nowarn:618 -d:CONFIGURATION_2_0 -d:FEATURE_PAL,SYSTEM_NAMESPACE,MONO,PLATFORM_UNIX -unsafe -resource:resources/Asterisk.wav -resource:resources/Beep.wav -resource:resources/Exclamation.wav -resource:resources/Hand.wav -resource:resources/Question.wav -d:SECURITY_DEP -d:XML_DEP -r:PrebuiltSystem=./../../class/lib/basic/secxml/System.dll -r:System.Xml.dll -r:MonoSecurity=Mono.Security.dll -r:System.Configuration.dll -d:CONFIGURATION_DEP</flags>
       <output>System.dll</output>
       <built_sources></built_sources>
       <library_output>./../../class/lib/basic/System.dll</library_output>
@@ -72,7 +72,7 @@
     </project>
     <project dir="class/corlib" library="corlib-build">
       <boot>true</boot>
-      <flags>/codepage:65001 -unsafe -nostdlib -nowarn:612,618 -d:INSIDE_CORLIB -d:LIBC -d:FEATURE_PAL -d:NET_1_1 -d:NET_2_0 -d:NET_3_0 -d:NET_3_5 -d:NET_4_0 -d:NET_4_5 -d:MONO -d:DISABLE_CAS_USE -nowarn:1699 -nostdlib -lib:./../../class/lib/build -optimize /noconfig -resource:resources/collation.core.bin -resource:resources/collation.tailoring.bin -resource:resources/collation.cjkCHS.bin -resource:resources/collation.cjkCHT.bin -resource:resources/collation.cjkJA.bin -resource:resources/collation.cjkKO.bin -resource:resources/collation.cjkKOlv2.bin --runtime:v4</flags>
+      <flags>/codepage:65001 -unsafe -nostdlib -nowarn:612,618 -d:INSIDE_CORLIB -d:LIBC -d:FEATURE_PAL,GENERICS_WORK,FEATURE_LIST_PREDICATES -d:NET_1_1 -d:NET_2_0 -d:NET_3_0 -d:NET_3_5 -d:NET_4_0 -d:NET_4_5 -d:MONO -d:DISABLE_CAS_USE -nowarn:1699 -nostdlib -lib:./../../class/lib/build -optimize /noconfig -d:FEATURE_PAL,GENERICS_WORK,FEATURE_LIST_PREDICATES -resource:resources/collation.core.bin -resource:resources/collation.tailoring.bin -resource:resources/collation.cjkCHS.bin -resource:resources/collation.cjkCHT.bin -resource:resources/collation.cjkJA.bin -resource:resources/collation.cjkKO.bin -resource:resources/collation.cjkKOlv2.bin --runtime:v4</flags>
       <output>mscorlib.dll</output>
       <built_sources></built_sources>
       <library_output>./../../class/lib/build/mscorlib.dll</library_output>
@@ -82,7 +82,7 @@
     </project>
     <project dir="class/System" library="System-build">
       <boot>false</boot>
-      <flags>/codepage:65001 -d:NET_1_1 -d:NET_2_0 -d:NET_3_0 -d:NET_3_5 -d:NET_4_0 -d:NET_4_5 -d:MONO -d:DISABLE_CAS_USE -nowarn:1699 -nostdlib -lib:./../../class/lib/build -r:mscorlib.dll -optimize /noconfig -nowarn:618 -d:CONFIGURATION_2_0 -d:FEATURE_PAL,SYSTEM_NAMESPACE,MONO -unsafe -resource:resources/Asterisk.wav -resource:resources/Beep.wav -resource:resources/Exclamation.wav -resource:resources/Hand.wav -resource:resources/Question.wav -d:SECURITY_DEP -d:XML_DEP -r:PrebuiltSystem=./../../class/lib/build/secxml/System.dll -r:System.Xml.dll -r:MonoSecurity=Mono.Security.dll -r:System.Configuration.dll -d:CONFIGURATION_DEP</flags>
+      <flags>/codepage:65001 -d:NET_1_1 -d:NET_2_0 -d:NET_3_0 -d:NET_3_5 -d:NET_4_0 -d:NET_4_5 -d:MONO -d:DISABLE_CAS_USE -nowarn:1699 -nostdlib -lib:./../../class/lib/build -r:mscorlib.dll -optimize /noconfig -nowarn:618 -d:CONFIGURATION_2_0 -d:FEATURE_PAL,SYSTEM_NAMESPACE,MONO,PLATFORM_UNIX -unsafe -resource:resources/Asterisk.wav -resource:resources/Beep.wav -resource:resources/Exclamation.wav -resource:resources/Hand.wav -resource:resources/Question.wav -d:SECURITY_DEP -d:XML_DEP -r:PrebuiltSystem=./../../class/lib/build/secxml/System.dll -r:System.Xml.dll -r:MonoSecurity=Mono.Security.dll -r:System.Configuration.dll -d:CONFIGURATION_DEP</flags>
       <output>System.dll</output>
       <built_sources></built_sources>
       <library_output>./../../class/lib/build/System.dll</library_output>
@@ -92,7 +92,7 @@
     </project>
     <project dir="class/System" library="System-bare-build">
       <boot>false</boot>
-      <flags>/codepage:65001 -d:NET_1_1 -d:NET_2_0 -d:NET_3_0 -d:NET_3_5 -d:NET_4_0 -d:NET_4_5 -d:MONO -d:DISABLE_CAS_USE -nowarn:1699 -nostdlib -lib:./../../class/lib/build -r:mscorlib.dll -optimize /noconfig -nowarn:618 -d:CONFIGURATION_2_0 -d:FEATURE_PAL,SYSTEM_NAMESPACE,MONO -unsafe -resource:resources/Asterisk.wav -resource:resources/Beep.wav -resource:resources/Exclamation.wav -resource:resources/Hand.wav -resource:resources/Question.wav</flags>
+      <flags>/codepage:65001 -d:NET_1_1 -d:NET_2_0 -d:NET_3_0 -d:NET_3_5 -d:NET_4_0 -d:NET_4_5 -d:MONO -d:DISABLE_CAS_USE -nowarn:1699 -nostdlib -lib:./../../class/lib/build -r:mscorlib.dll -optimize /noconfig -nowarn:618 -d:CONFIGURATION_2_0 -d:FEATURE_PAL,SYSTEM_NAMESPACE,MONO,PLATFORM_UNIX -unsafe -resource:resources/Asterisk.wav -resource:resources/Beep.wav -resource:resources/Exclamation.wav -resource:resources/Hand.wav -resource:resources/Question.wav</flags>
       <output>System.dll</output>
       <built_sources></built_sources>
       <library_output>./../../class/lib/build/bare/System.dll</library_output>
     </project>
     <project dir="class/System" library="System-secxml-build">
       <boot>false</boot>
-      <flags>/codepage:65001 -lib:./../../class/lib/build/bare -d:NET_1_1 -d:NET_2_0 -d:NET_3_0 -d:NET_3_5 -d:NET_4_0 -d:NET_4_5 -d:MONO -d:DISABLE_CAS_USE -nowarn:1699 -nostdlib -lib:./../../class/lib/build -r:mscorlib.dll -optimize /noconfig -nowarn:618 -d:CONFIGURATION_2_0 -d:FEATURE_PAL,SYSTEM_NAMESPACE,MONO -unsafe -resource:resources/Asterisk.wav -resource:resources/Beep.wav -resource:resources/Exclamation.wav -resource:resources/Hand.wav -resource:resources/Question.wav -d:SECURITY_DEP -d:XML_DEP -r:PrebuiltSystem=./../../class/lib/build/bare/System.dll -r:System.Xml.dll -r:MonoSecurity=Mono.Security.dll</flags>
+      <flags>/codepage:65001 -lib:./../../class/lib/build/bare -d:NET_1_1 -d:NET_2_0 -d:NET_3_0 -d:NET_3_5 -d:NET_4_0 -d:NET_4_5 -d:MONO -d:DISABLE_CAS_USE -nowarn:1699 -nostdlib -lib:./../../class/lib/build -r:mscorlib.dll -optimize /noconfig -nowarn:618 -d:CONFIGURATION_2_0 -d:FEATURE_PAL,SYSTEM_NAMESPACE,MONO,PLATFORM_UNIX -unsafe -resource:resources/Asterisk.wav -resource:resources/Beep.wav -resource:resources/Exclamation.wav -resource:resources/Hand.wav -resource:resources/Question.wav -d:SECURITY_DEP -d:XML_DEP -r:PrebuiltSystem=./../../class/lib/build/bare/System.dll -r:System.Xml.dll -r:MonoSecurity=Mono.Security.dll</flags>
       <output>System.dll</output>
       <built_sources></built_sources>
       <library_output>./../../class/lib/build/secxml/System.dll</library_output>
     </project>
     <project dir="class/System" library="System-build">
       <boot>false</boot>
-      <flags>/codepage:65001 -d:NET_1_1 -d:NET_2_0 -d:NET_3_0 -d:NET_3_5 -d:NET_4_0 -d:NET_4_5 -d:MONO -d:DISABLE_CAS_USE -nowarn:1699 -nostdlib -lib:./../../class/lib/build -r:mscorlib.dll -optimize /noconfig -nowarn:618 -d:CONFIGURATION_2_0 -d:FEATURE_PAL,SYSTEM_NAMESPACE,MONO -unsafe -resource:resources/Asterisk.wav -resource:resources/Beep.wav -resource:resources/Exclamation.wav -resource:resources/Hand.wav -resource:resources/Question.wav -d:SECURITY_DEP -d:XML_DEP -r:PrebuiltSystem=./../../class/lib/build/secxml/System.dll -r:System.Xml.dll -r:MonoSecurity=Mono.Security.dll -r:System.Configuration.dll -d:CONFIGURATION_DEP</flags>
+      <flags>/codepage:65001 -d:NET_1_1 -d:NET_2_0 -d:NET_3_0 -d:NET_3_5 -d:NET_4_0 -d:NET_4_5 -d:MONO -d:DISABLE_CAS_USE -nowarn:1699 -nostdlib -lib:./../../class/lib/build -r:mscorlib.dll -optimize /noconfig -nowarn:618 -d:CONFIGURATION_2_0 -d:FEATURE_PAL,SYSTEM_NAMESPACE,MONO,PLATFORM_UNIX -unsafe -resource:resources/Asterisk.wav -resource:resources/Beep.wav -resource:resources/Exclamation.wav -resource:resources/Hand.wav -resource:resources/Question.wav -d:SECURITY_DEP -d:XML_DEP -r:PrebuiltSystem=./../../class/lib/build/secxml/System.dll -r:System.Xml.dll -r:MonoSecurity=Mono.Security.dll -r:System.Configuration.dll -d:CONFIGURATION_DEP</flags>
       <output>System.dll</output>
       <built_sources></built_sources>
       <library_output>./../../class/lib/build/System.dll</library_output>
     </project>
     <project dir="class/System" library="System-bare-build">
       <boot>false</boot>
-      <flags>/codepage:65001 -d:NET_1_1 -d:NET_2_0 -d:NET_3_0 -d:NET_3_5 -d:NET_4_0 -d:NET_4_5 -d:MONO -d:DISABLE_CAS_USE -nowarn:1699 -nostdlib -lib:./../../class/lib/build -r:mscorlib.dll -optimize /noconfig -nowarn:618 -d:CONFIGURATION_2_0 -d:FEATURE_PAL,SYSTEM_NAMESPACE,MONO -unsafe -resource:resources/Asterisk.wav -resource:resources/Beep.wav -resource:resources/Exclamation.wav -resource:resources/Hand.wav -resource:resources/Question.wav</flags>
+      <flags>/codepage:65001 -d:NET_1_1 -d:NET_2_0 -d:NET_3_0 -d:NET_3_5 -d:NET_4_0 -d:NET_4_5 -d:MONO -d:DISABLE_CAS_USE -nowarn:1699 -nostdlib -lib:./../../class/lib/build -r:mscorlib.dll -optimize /noconfig -nowarn:618 -d:CONFIGURATION_2_0 -d:FEATURE_PAL,SYSTEM_NAMESPACE,MONO,PLATFORM_UNIX -unsafe -resource:resources/Asterisk.wav -resource:resources/Beep.wav -resource:resources/Exclamation.wav -resource:resources/Hand.wav -resource:resources/Question.wav</flags>
       <output>System.dll</output>
       <built_sources></built_sources>
       <library_output>./../../class/lib/build/bare/System.dll</library_output>
     </project>
     <project dir="class/System" library="System-secxml-build">
       <boot>false</boot>
-      <flags>/codepage:65001 -lib:./../../class/lib/build/bare -d:NET_1_1 -d:NET_2_0 -d:NET_3_0 -d:NET_3_5 -d:NET_4_0 -d:NET_4_5 -d:MONO -d:DISABLE_CAS_USE -nowarn:1699 -nostdlib -lib:./../../class/lib/build -r:mscorlib.dll -optimize /noconfig -nowarn:618 -d:CONFIGURATION_2_0 -d:FEATURE_PAL,SYSTEM_NAMESPACE,MONO -unsafe -resource:resources/Asterisk.wav -resource:resources/Beep.wav -resource:resources/Exclamation.wav -resource:resources/Hand.wav -resource:resources/Question.wav -d:SECURITY_DEP -d:XML_DEP -r:PrebuiltSystem=./../../class/lib/build/bare/System.dll -r:System.Xml.dll -r:MonoSecurity=Mono.Security.dll</flags>
+      <flags>/codepage:65001 -lib:./../../class/lib/build/bare -d:NET_1_1 -d:NET_2_0 -d:NET_3_0 -d:NET_3_5 -d:NET_4_0 -d:NET_4_5 -d:MONO -d:DISABLE_CAS_USE -nowarn:1699 -nostdlib -lib:./../../class/lib/build -r:mscorlib.dll -optimize /noconfig -nowarn:618 -d:CONFIGURATION_2_0 -d:FEATURE_PAL,SYSTEM_NAMESPACE,MONO,PLATFORM_UNIX -unsafe -resource:resources/Asterisk.wav -resource:resources/Beep.wav -resource:resources/Exclamation.wav -resource:resources/Hand.wav -resource:resources/Question.wav -d:SECURITY_DEP -d:XML_DEP -r:PrebuiltSystem=./../../class/lib/build/bare/System.dll -r:System.Xml.dll -r:MonoSecurity=Mono.Security.dll</flags>
       <output>System.dll</output>
       <built_sources></built_sources>
       <library_output>./../../class/lib/build/secxml/System.dll</library_output>
     </project>
     <project dir="class/corlib" library="corlib-net_4_5">
       <boot>true</boot>
-      <flags>/codepage:65001 -unsafe -nostdlib -nowarn:612,618 -d:INSIDE_CORLIB -d:LIBC -d:FEATURE_PAL -d:NET_1_1 -d:NET_2_0 -d:NET_3_0 -d:NET_3_5 -d:NET_4_0 -d:NET_4_5 -d:MONO -d:DISABLE_CAS_USE -nowarn:1699 -nostdlib -lib:./../../class/lib/net_4_5 -debug -optimize /noconfig -resource:resources/collation.core.bin -resource:resources/collation.tailoring.bin -resource:resources/collation.cjkCHS.bin -resource:resources/collation.cjkCHT.bin -resource:resources/collation.cjkJA.bin -resource:resources/collation.cjkKO.bin -resource:resources/collation.cjkKOlv2.bin --runtime:v4</flags>
+      <flags>/codepage:65001 -unsafe -nostdlib -nowarn:612,618 -d:INSIDE_CORLIB -d:LIBC -d:FEATURE_PAL,GENERICS_WORK,FEATURE_LIST_PREDICATES -d:NET_1_1 -d:NET_2_0 -d:NET_3_0 -d:NET_3_5 -d:NET_4_0 -d:NET_4_5 -d:MONO -d:DISABLE_CAS_USE -nowarn:1699 -nostdlib -lib:./../../class/lib/net_4_5 -debug -optimize /noconfig -d:FEATURE_PAL,GENERICS_WORK,FEATURE_LIST_PREDICATES -resource:resources/collation.core.bin -resource:resources/collation.tailoring.bin -resource:resources/collation.cjkCHS.bin -resource:resources/collation.cjkCHT.bin -resource:resources/collation.cjkJA.bin -resource:resources/collation.cjkKO.bin -resource:resources/collation.cjkKOlv2.bin --runtime:v4</flags>
       <output>mscorlib.dll</output>
       <built_sources></built_sources>
       <library_output>./../../class/lib/net_4_5/mscorlib.dll</library_output>
       <fx_version>4.5</fx_version>
       <profile>net_4_5</profile>
-      <response>corlib.dll.sources</response>
+      <response>./../../build/deps/net_4_5_corlib.dll.sources</response>
     </project>
     <project dir="class/corlib" library="corlib-tests-net_4_5">
       <boot>false</boot>
-      <flags>/codepage:65001 -unsafe -nostdlib -nowarn:612,618 -d:INSIDE_CORLIB -d:LIBC -d:FEATURE_PAL -d:NET_1_1 -d:NET_2_0 -d:NET_3_0 -d:NET_3_5 -d:NET_4_0 -d:NET_4_5 -d:MONO -d:DISABLE_CAS_USE -nowarn:1699 -nostdlib -lib:./../../class/lib/net_4_5 -debug -optimize -r:./../../class/lib/net_4_5/mscorlib.dll -debug -nowarn:168,219,618,672 -unsafe -r:Mono.Posix.dll -r:System.Core.dll -define:MONO_DATACONVERTER_STATIC_METHODS -resource:Test/resources/Resources.resources</flags>
+      <flags>/codepage:65001 -unsafe -nostdlib -nowarn:612,618 -d:INSIDE_CORLIB -d:LIBC -d:FEATURE_PAL,GENERICS_WORK,FEATURE_LIST_PREDICATES -d:NET_1_1 -d:NET_2_0 -d:NET_3_0 -d:NET_3_5 -d:NET_4_0 -d:NET_4_5 -d:MONO -d:DISABLE_CAS_USE -nowarn:1699 -nostdlib -lib:./../../class/lib/net_4_5 -debug -optimize -r:./../../class/lib/net_4_5/mscorlib.dll -debug -nowarn:168,219,618,672 -unsafe -r:Mono.Posix.dll -r:System.Core.dll -define:MONO_DATACONVERTER_STATIC_METHODS -resource:Test/resources/Resources.resources</flags>
       <output>corlib_test_net_4_5.dll</output>
       <built_sources></built_sources>
       <library_output>corlib_test_net_4_5.dll</library_output>
     </project>
     <project dir="class/System" library="System-net_4_5">
       <boot>false</boot>
-      <flags>/codepage:65001 -d:NET_1_1 -d:NET_2_0 -d:NET_3_0 -d:NET_3_5 -d:NET_4_0 -d:NET_4_5 -d:MONO -d:DISABLE_CAS_USE -nowarn:1699 -nostdlib -lib:./../../class/lib/net_4_5 -r:mscorlib.dll -debug -optimize /noconfig -nowarn:618 -d:CONFIGURATION_2_0 -d:FEATURE_PAL,SYSTEM_NAMESPACE,MONO -unsafe -resource:resources/Asterisk.wav -resource:resources/Beep.wav -resource:resources/Exclamation.wav -resource:resources/Hand.wav -resource:resources/Question.wav -d:SECURITY_DEP -d:XML_DEP -r:PrebuiltSystem=./../../class/lib/net_4_5/secxml/System.dll -r:System.Xml.dll -r:MonoSecurity=Mono.Security.dll -r:System.Configuration.dll -d:CONFIGURATION_DEP</flags>
+      <flags>/codepage:65001 -d:NET_1_1 -d:NET_2_0 -d:NET_3_0 -d:NET_3_5 -d:NET_4_0 -d:NET_4_5 -d:MONO -d:DISABLE_CAS_USE -nowarn:1699 -nostdlib -lib:./../../class/lib/net_4_5 -r:mscorlib.dll -debug -optimize /noconfig -nowarn:618 -d:CONFIGURATION_2_0 -d:FEATURE_PAL,SYSTEM_NAMESPACE,MONO,PLATFORM_UNIX -unsafe -resource:resources/Asterisk.wav -resource:resources/Beep.wav -resource:resources/Exclamation.wav -resource:resources/Hand.wav -resource:resources/Question.wav -d:SECURITY_DEP -d:XML_DEP -r:PrebuiltSystem=./../../class/lib/net_4_5/secxml/System.dll -r:System.Xml.dll -r:MonoSecurity=Mono.Security.dll -r:System.Configuration.dll -d:CONFIGURATION_DEP</flags>
       <output>System.dll</output>
       <built_sources></built_sources>
       <library_output>./../../class/lib/net_4_5/System.dll</library_output>
     </project>
     <project dir="class/System" library="System-bare-net_4_5">
       <boot>false</boot>
-      <flags>/codepage:65001 -d:NET_1_1 -d:NET_2_0 -d:NET_3_0 -d:NET_3_5 -d:NET_4_0 -d:NET_4_5 -d:MONO -d:DISABLE_CAS_USE -nowarn:1699 -nostdlib -lib:./../../class/lib/net_4_5 -r:mscorlib.dll -debug -optimize /noconfig -nowarn:618 -d:CONFIGURATION_2_0 -d:FEATURE_PAL,SYSTEM_NAMESPACE,MONO -unsafe -resource:resources/Asterisk.wav -resource:resources/Beep.wav -resource:resources/Exclamation.wav -resource:resources/Hand.wav -resource:resources/Question.wav</flags>
+      <flags>/codepage:65001 -d:NET_1_1 -d:NET_2_0 -d:NET_3_0 -d:NET_3_5 -d:NET_4_0 -d:NET_4_5 -d:MONO -d:DISABLE_CAS_USE -nowarn:1699 -nostdlib -lib:./../../class/lib/net_4_5 -r:mscorlib.dll -debug -optimize /noconfig -nowarn:618 -d:CONFIGURATION_2_0 -d:FEATURE_PAL,SYSTEM_NAMESPACE,MONO,PLATFORM_UNIX -unsafe -resource:resources/Asterisk.wav -resource:resources/Beep.wav -resource:resources/Exclamation.wav -resource:resources/Hand.wav -resource:resources/Question.wav</flags>
       <output>System.dll</output>
       <built_sources></built_sources>
       <library_output>./../../class/lib/net_4_5/bare/System.dll</library_output>
     </project>
     <project dir="class/System" library="System-secxml-net_4_5">
       <boot>false</boot>
-      <flags>/codepage:65001 -lib:./../../class/lib/net_4_5/bare -d:NET_1_1 -d:NET_2_0 -d:NET_3_0 -d:NET_3_5 -d:NET_4_0 -d:NET_4_5 -d:MONO -d:DISABLE_CAS_USE -nowarn:1699 -nostdlib -lib:./../../class/lib/net_4_5 -r:mscorlib.dll -debug -optimize /noconfig -nowarn:618 -d:CONFIGURATION_2_0 -d:FEATURE_PAL,SYSTEM_NAMESPACE,MONO -unsafe -resource:resources/Asterisk.wav -resource:resources/Beep.wav -resource:resources/Exclamation.wav -resource:resources/Hand.wav -resource:resources/Question.wav -d:SECURITY_DEP -d:XML_DEP -r:PrebuiltSystem=./../../class/lib/net_4_5/bare/System.dll -r:System.Xml.dll -r:MonoSecurity=Mono.Security.dll</flags>
+      <flags>/codepage:65001 -lib:./../../class/lib/net_4_5/bare -d:NET_1_1 -d:NET_2_0 -d:NET_3_0 -d:NET_3_5 -d:NET_4_0 -d:NET_4_5 -d:MONO -d:DISABLE_CAS_USE -nowarn:1699 -nostdlib -lib:./../../class/lib/net_4_5 -r:mscorlib.dll -debug -optimize /noconfig -nowarn:618 -d:CONFIGURATION_2_0 -d:FEATURE_PAL,SYSTEM_NAMESPACE,MONO,PLATFORM_UNIX -unsafe -resource:resources/Asterisk.wav -resource:resources/Beep.wav -resource:resources/Exclamation.wav -resource:resources/Hand.wav -resource:resources/Question.wav -d:SECURITY_DEP -d:XML_DEP -r:PrebuiltSystem=./../../class/lib/net_4_5/bare/System.dll -r:System.Xml.dll -r:MonoSecurity=Mono.Security.dll</flags>
       <output>System.dll</output>
       <built_sources></built_sources>
       <library_output>./../../class/lib/net_4_5/secxml/System.dll</library_output>
       <profile>net_4_5</profile>
       <response>ikdasm.exe.sources</response>
     </project>
+    <project dir="tools/symbolicate" library="symbolicate-net_4_5">
+      <boot></boot>
+      <flags>/codepage:65001 /r:Mono.Cecil.dll /r:Mono.CompilerServices.SymbolWriter.dll /r:System.Xml -d:NET_1_1 -d:NET_2_0 -d:NET_3_0 -d:NET_3_5 -d:NET_4_0 -d:NET_4_5 -d:MONO -d:DISABLE_CAS_USE -nowarn:1699 -nostdlib -lib:./../../class/lib/net_4_5 -r:mscorlib.dll -debug -optimize /noconfig</flags>
+      <output>symbolicate.exe</output>
+      <built_sources></built_sources>
+      <library_output>./../../class/lib/net_4_5/symbolicate.exe</library_output>
+      <fx_version>4.5</fx_version>
+      <profile>net_4_5</profile>
+      <response>symbolicate.exe.sources</response>
+    </project>
     <project dir="class/Microsoft.Build.Framework" library="Microsoft.Build.Framework-xbuild_12">
       <boot>false</boot>
       <flags>/codepage:65001 -d:NET_1_1 -d:NET_2_0 -d:NET_3_0 -d:NET_3_5 -d:NET_4_0 -d:NET_4_5 -d:MONO -d:DISABLE_CAS_USE -nowarn:1699 -nostdlib -lib:./../../class/lib/xbuild_12 -r:mscorlib.dll -debug -d:XBUILD_12 -d:MONO -d:DISABLE_CAS_USE -lib:./../../class/lib/net_4_5 -optimize /noconfig /r:mscorlib.dll /r:System.dll</flags>
index 68fd55f27c8d0e13929fd22f756c419905a3289a..69a9aefb9c0520e2952dd187cb6317620c5e553e 100644 (file)
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
     <ConfigurationType>Application</ConfigurationType>\r
     <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v110</PlatformToolset>\r
+    <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
     <ConfigurationType>Application</ConfigurationType>\r
     <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v110</PlatformToolset>\r
+    <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
     <ConfigurationType>Application</ConfigurationType>\r
     <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v110</PlatformToolset>\r
+    <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
     <ConfigurationType>Application</ConfigurationType>\r
     <CharacterSet>Unicode</CharacterSet>\r
-    <PlatformToolset>v110</PlatformToolset>\r
+    <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
   <ImportGroup Label="ExtensionSettings">\r
index 6c57fe73214fe2886bc77797e3cfc60fe96d1416..aea6c5faa367e2bf07b9258e15c39001b5de3f0e 100644 (file)
@@ -140,7 +140,7 @@ if NACL_CODEGEN
 check-local:
 else
 check-local: mcs-compileall mcs-do-test-profiles
-       $(MAKE) ONLY_CENTUM_TESTS=yes mcs-do-run-test-profiles
+       $(MAKE) mcs-do-run-test-profiles
 endif
 
 # Compile all mcs tests
index b6cbd23fc44c95cd0c7e663adfc859f9ebb80b01..2483b89aea8a4d210339cc643979b48784494489 100644 (file)
@@ -41,8 +41,9 @@ namespace Mono.Tools.LocaleBuilder
                public const int NUM_CALENDARS = 4;
 
                public const int NUM_SHORT_DATE_PATTERNS = 14;
-               public const int NUM_LONG_DATE_PATTERNS = 8;
+               public const int NUM_LONG_DATE_PATTERNS = 10;
                public const int NUM_SHORT_TIME_PATTERNS = 12;
                public const int NUM_LONG_TIME_PATTERNS = 9;
+               public const int NUM_YEAR_MONTH_PATTERNS = 8;
        }
 }
index 3780835cbc825d6a095aa1b850fa2843e6d3bd6f..b9aa3822f6989b509a2ff04113928e1fd3d70a7f 100644 (file)
@@ -63,19 +63,13 @@ namespace Mono.Tools.LocaleBuilder
                public string[] ShortTimePatterns = new string[Constants.NUM_SHORT_TIME_PATTERNS];
                public string[] LongTimePatterns = new string[Constants.NUM_LONG_TIME_PATTERNS];
                public string[] ShortestDayNames = new string[Constants.NUM_DAYS];
+               public string[] YearMonthPatterns = new string[Constants.NUM_YEAR_MONTH_PATTERNS];
 
                public int Row;
 
                public void AppendTableRow (StringBuilder builder)
                {
                        builder.Append ("\t{");
-                       builder.Append (EncodeStringIdx (LongDatePattern) + ", ");
-                       builder.Append (EncodeStringIdx (ShortDatePattern) + ", ");
-
-                       builder.Append (EncodeStringIdx (LongTimePattern) + ", ");
-                       builder.Append (EncodeStringIdx (ShortTimePattern) + ", ");
-
-                       builder.Append (EncodeStringIdx (YearMonthPattern) + ", ");
                        builder.Append (EncodeStringIdx (MonthDayPattern) + ", ");
 
                        builder.Append (EncodeStringIdx (AMDesignator) + ", ");
@@ -104,6 +98,8 @@ namespace Mono.Tools.LocaleBuilder
                        AppendPatterns (builder, ShortTimePatterns);
                        builder.Append (',');
                        AppendPatterns (builder, LongTimePatterns);
+                       builder.Append (',');
+                       AppendPatterns (builder, YearMonthPatterns);
 
                        builder.Append ('}');
                }
index 41b8aaf5ef1c6244ecf4b4846f0b34dd3de4b675..b2e7e8b961017e7fb586222c7827496d7c82d1f7 100644 (file)
@@ -438,357 +438,408 @@ namespace Mono.Tools.LocaleBuilder
                };
 
                static readonly Dictionary<int, string[][]> DateTime2 = new Dictionary<int, string[][]> {
-                       { 0x0001, new[] { new[] { "dd/MM/yy", "dd/MM/yyyy" }, new[] { "dd/MMMM/yyyy", "dddd, dd MMMM, yyyy" }, new[] { "hh:mm tt", "HH:mm" }, new[] { "hh:mm:ss tt", "HH:mm:ss" } } },
-                       { 0x0002, new[] { new[] { "d.M.yyyy 'г.'", "dd.M.yyyy 'г.'", "d.MM.yyyy 'г.'", "dd.MM.yyyy 'г.'" }, new[] { "dd MMMM yyyy 'г.'", "d MMMM yyyy 'г.'", "dddd, dd MMMM yyyy 'г.'", "dddd, d MMMM yyyy 'г.'" }, new[] { "HH:mm 'ч.'", "H:mm 'ч.'" }, new[] { "HH:mm:ss 'ч.'", "H:mm:ss 'ч.'" } } },
-                       { 0x0003, new[] { new[] { "dd/MM/yyyy", "dd/MM/yy", "yyyy-MM-dd", "d/MM/yy", "d/M/yy", "dd-MM-yy", "dd.MM.yy" }, new[] { "dddd, d' / 'MMMM' / 'yyyy", "d'/'MMMM'/'yyyy", "d' 'MMMM' 'yyyy" }, new[] { "HH:mm", "H:mm", "HH'H'mm'\\''" }, new[] { "HH:mm:ss", "H:mm:ss", "HH'H'mm'\\''ss'\\'\\''" } } },
-                       { 0x0004, new[] { new[] { "yyyy/M/d", "yyyy-M-d", "yyyy.M.d", "yyyy-MM-dd", "yyyy/MM/dd", "yyyy.MM.dd", "yy-M-d", "yy/M/d", "yy.M.d", "yy/MM/dd" }, new[] { "yyyy'年'M'月'd'日'", "yyyy'年'M'月'd'日',dddd", "dddd,yyyy'年'M'月'd'日'" }, new[] { "H:mm", "HH:mm", "tt h:mm", "tt hh:mm" }, new[] { "H:mm:ss", "HH:mm:ss", "tt h:mm:ss", "tt hh:mm:ss" } } },
-                       { 0x0005, new[] { new[] { "d.M.yyyy", "d-M-yy", "yyyy-MM-dd", "yyyy-M-d", "yy-M-d" }, new[] { "d. MMMM yyyy" }, new[] { "H:mm", "HH:mm", "h.mm tt", "H.mm" }, new[] { "H:mm:ss", "HH:mm:ss", "h.mm.ss tt", "H.mm.ss" } } },
-                       { 0x0006, new[] { new[] { "dd-MM-yyyy", "dd-MM-yy", "yyyy-MM-dd", "yyyy MM dd" }, new[] { "d. MMMM yyyy", "dd. MMMM yyyy" }, new[] { "HH:mm", "H:mm" }, new[] { "HH:mm:ss", "H:mm:ss" } } },
-                       { 0x0007, new[] { new[] { "dd.MM.yyyy", "dd.MMM.yyyy", "dd.MM.yy", "d.MM.yy", "d.M.yy", "d.M.yyyy", "yyyy-MM-dd" }, new[] { "dddd, d. MMMM yyyy", "d. MMMM yyyy", "d. MMM yyyy" }, new[] { "HH:mm", "H:mm", "H.mm", "H.mm' Uhr'" }, new[] { "HH:mm:ss", "H:mm:ss' Uhr'", "HH:mm:ss' Uhr'", "HHmmss" } } },
-                       { 0x0008, new[] { new[] { "d/M/yyyy", "dd/MM/yyyy", "d/M/yy", "dd/MM/yy", "dd/MMM/yyyy", "yyyy-MM-dd" }, new[] { "dddd, d MMMM yyyy", "d MMMM yyyy" }, new[] { "h:mm tt", "hh:mm tt", "H:mm", "HH:mm" }, new[] { "h:mm:ss tt", "hh:mm:ss tt", "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x0009, new[] { new[] { "M/d/yyyy", "M/d/yy", "MM/dd/yy", "MM/dd/yyyy", "yy/MM/dd", "yyyy-MM-dd", "dd-MMM-yy" }, new[] { "dddd, MMMM dd, yyyy", "MMMM dd, yyyy", "dddd, dd MMMM, yyyy", "dd MMMM, yyyy" }, new[] { "h:mm tt", "hh:mm tt", "H:mm", "HH:mm" }, new[] { "h:mm:ss tt", "hh:mm:ss tt", "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x000a, new[] { new[] { "dd/MM/yyyy", "dd/MM/yy", "d/MM/yy", "d/M/yy", "dd-MM-yy", "dd.MM.yy", "yyyy-MM-dd", "dd.MMM.yyyy" }, new[] { "dddd, dd' de 'MMMM' de 'yyyy", "dddd d' de 'MMMM' de 'yyyy", "d' de 'MMMM' de 'yyyy" }, new[] { "H:mm", "HH:mm", "HH'H'mm'\\''" }, new[] { "H:mm:ss", "HH:mm:ss", "HH'H'mm'\\''ss'\\'\\''" } } },
-                       { 0x000b, new[] { new[] { "d.M.yyyy", "dd.MM.yyyy", "d.M.yy", "yyyy-MM-dd" }, new[] { "d. MMMM'ta 'yyyy", "dd. MMMM'ta 'yyyy" }, new[] { "H:mm", "HH:mm" }, new[] { "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x000c, new[] { new[] { "dd/MM/yyyy", "dd/MM/yy", "dd.MM.yy", "dd-MM-yy", "yyyy-MM-dd" }, new[] { "dddd d MMMM yyyy", "d MMM yy", "d MMMM yyyy" }, new[] { "HH:mm", "H:mm", "HH.mm", "HH' h 'mm", "HH'h'mm" }, new[] { "HH:mm:ss", "H:mm:ss" } } },
-                       { 0x000d, new[] { new[] { "dd/MM/yyyy", "dd MMMM yyyy", "dd/MM/yy", "dd/MMMM/yyyy", "dd-MM-yy", "dd-MM-yyyy", "dd-MMMM-yyyy", "yyyy-MM-dd", "dd 'ב'MMMM yyyy", "dd MMM yy" }, new[] { "dddd dd MMMM yyyy", "dd MMMM yyyy", "dddd dd 'ב'MMMM yyyy", "ddd dd 'ב'MMMM yyyy", "dd 'ב'MMMM yyyy" }, new[] { "HH:mm", "hh:mm tt" }, new[] { "HH:mm:ss", "hh:mm:ss tt" } } },
-                       { 0x000e, new[] { new[] { "yyyy.MM.dd.", "yyyy. MM. dd.", "yyyy-MM-dd", "yy-MM-dd" }, new[] { "yyyy. MMMM d." }, new[] { "H:mm", "HH:mm", "h:mm tt" }, new[] { "H:mm:ss", "HH:mm:ss", "h:mm:ss tt" } } },
-                       { 0x000f, new[] { new[] { "d.M.yyyy", "dd.MM.yy", "d. M. yyyy.", "d. M. '\\''yy.", "yyyy-MM-dd", "yy MM dd" }, new[] { "d. MMMM yyyy", "dd. MMMM yyyy" }, new[] { "HH:mm", "H:mm" }, new[] { "HH:mm:ss", "H:mm:ss" } } },
-                       { 0x0010, new[] { new[] { "dd/MM/yyyy", "dd/MMM/yyyy", "dd/MM/yy", "dd.M.yy", "d/M/yy", "yyyy-MM-dd" }, new[] { "dddd d MMMM yyyy", "d-MMM-yy", "d MMMM yyyy" }, new[] { "HH:mm", "H:mm", "H.mm", "HH.mm" }, new[] { "HH:mm:ss", "H.mm.ss", "HH.mm.ss" } } },
-                       { 0x0011, new[] { new[] { "yyyy/MM/dd", "yy/MM/dd", "yy/M/d", "yyyy/M/d", "yy/MM/dd' ('ddd')'", "yy/M/d' ('ddd')'", "yyyy/MM/dd' ('ddd')'", "yyyy-MM-dd" }, new[] { "yyyy'年'M'月'd'日'", "yyyy'年'MM'月'dd'日'", "yyyy'年'M'月'd'日' dddd", "yyyy'年'MM'月'dd'日' dddd" }, new[] { "H:mm", "HH:mm", "tt h:mm", "tt hh:mm" }, new[] { "H:mm:ss", "HH:mm:ss", "tt h:mm:ss", "tt hh:mm:ss" } } },
-                       { 0x0012, new[] { new[] { "yyyy-MM-dd", "yy-MM-dd", "yy-M-d", "yyyy-M-d" }, new[] { "yyyy'년' M'월' d'일' dddd", "yyyy'년' M'월' d'일'", "yy'년' M'월' d'일' dddd", "yy'년' M'월' d'일'", "yyyy'년' MM'월' dd'일' dddd", "yyyy'년' MM'월' dd'일'" }, new[] { "tt h:mm", "tt hh:mm", "H:mm", "HH:mm" }, new[] { "tt h:mm:ss", "tt hh:mm:ss", "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x0013, new[] { new[] { "d-M-yyyy", "d-M-yy", "dd-MM-yy", "dd/MM/yy", "dd.MM.yy", "dd.MMM.yyyy", "yyyy-MM-dd" }, new[] { "dddd d MMMM yyyy", "d-MMM-yy", "d MMMM yyyy", "d MMM yy" }, new[] { "H:mm", "HH:mm", "H.mm", "HH.mm' uur'", "HH:mm' uur'" }, new[] { "H:mm:ss", "HH:mm:ss", "HH.mm.ss' uur'", "HH:mm:ss' uur'" } } },
-                       { 0x0014, new[] { new[] { "dd.MM.yyyy", "dd.MM.yy", "d.M.yy", "yyyy-MM-dd", "dd.MMM.yyyy" }, new[] { "d. MMMM yyyy", "dd. MMMM yyyy" }, new[] { "HH:mm", "H:mm", "'kl 'HH.mm", "HH.mm" }, new[] { "HH:mm:ss", "H:mm:ss", "'kl 'HH.mm.ss", "HH.mm.ss" } } },
-                       { 0x0015, new[] { new[] { "yyyy-MM-dd", "yy-MM-dd" }, new[] { "d MMMM yyyy", "dd MMMM yyyy" }, new[] { "HH:mm", "H:mm" }, new[] { "HH:mm:ss", "H:mm:ss" } } },
-                       { 0x0016, new[] { new[] { "dd/MM/yyyy", "dd/MM/yy", "d/M/yyyy", "d/M/yy", "dd-MM-yy", "dd-MM-yyyy", "d-M-yy", "d-M-yyyy", "dd.MM.yy", "dd.MM.yyyy", "dd.MMM.yyyy", "d.M.yy", "d.M.yyyy", "yyyy-MM-dd" }, new[] { "dddd, d' de 'MMMM' de 'yyyy", "d' de 'MMMM' de 'yyyy" }, new[] { "HH:mm" }, new[] { "HH:mm:ss" } } },
-                       { 0x0017, new[] { new[] { "dd/MM/yyyy", "dd/MM/yy", "d/MM/yy", "dd/M/yy", "d/M/yy", "dd/MM/yyyy", "yyyy-MM-dd" }, new[] { "dddd, d MMMM yyyy", "d MMMM yyyy", "d MMM yy" }, new[] { "HH:mm", "H:mm", "HH:mm' Ura'", "H:mm' Ura'", "H' Ura'", "HH.mm' h'", "H.mm' h'", "H' h'", "H.mm' Uhr'", "H' Uhr'", "HHmm", "HH" }, new[] { "HH:mm:ss", "H:mm:ss", "HH:mm:ss' Ura'", "H:mm:ss' Ura'", "HH:mm:ss' Uhr'", "H:mm:ss' Uhr'", "HH:mm:ss' h'", "H:mm:ss' h'", "HHmmss" } } },
-                       { 0x0018, new[] { new[] { "dd.MM.yyyy", "d.M.yyyy", "yyyy-MM-dd" }, new[] { "d MMMM yyyy" }, new[] { "HH:mm", "H:mm" }, new[] { "HH:mm:ss", "H:mm:ss" } } },
-                       { 0x0019, new[] { new[] { "dd.MM.yyyy", "dd.MM.yy", "d.M.yy", "dd/MM/yy", "yyyy-MM-dd" }, new[] { "d MMMM yyyy 'г.'", "dd MMMM yyyy 'г.'" }, new[] { "H:mm", "HH:mm" }, new[] { "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x001a, new[] { new[] { "d.M.yyyy.", "d.M.yy.", "d. M. yyyy.", "dd.MM.yyyy.", "d. M. yy.", "dd.MM.yy.", "dd. MM. yy.", "yyyy-MM-dd" }, new[] { "d. MMMM yyyy.", "dd. MMMM yyyy.", "dddd, d. MMMM yyyy." }, new[] { "H:mm", "HH:mm" }, new[] { "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x001b, new[] { new[] { "d. M. yyyy", "d.M.yyyy", "d. M. yy", "d.M.yy", "dd.MM.yyyy", "dd.MM.yy", "yyyy-MM-dd" }, new[] { "d. MMMM yyyy", "dd. MMMM yyyy" }, new[] { "H:mm", "HH:mm", "H.mm" }, new[] { "H:mm:ss", "HH:mm:ss", "H.mm.ss" } } },
-                       { 0x001c, new[] { new[] { "yyyy-MM-dd", "yy-MM-dd" }, new[] { "yyyy-MM-dd" }, new[] { "h:mm.tt", "HH:mm" }, new[] { "h:mm:ss.tt", "HH:mm:ss" } } },
-                       { 0x001d, new[] { new[] { "yyyy-MM-dd", "yy-MM-dd" }, new[] { "'den 'd MMMM yyyy", "dddd' den 'd MMMM yyyy" }, new[] { "HH:mm", "H:mm", "'kl 'H:mm" }, new[] { "HH:mm:ss", "H:mm:ss", "'kl 'H:mm:ss" } } },
-                       { 0x001e, new[] { new[] { "d/M/yyyy", "d/M/yy", "dd/MM/yy", "dd/MM/yyyy", "d MMM yyyy", "dd MMM yyyy", "yyyy-MM-dd" }, new[] { "d MMMM yyyy", "ddd d MMMM yyyy", "'วัน'dddd'ที่' d MMMM gg yyyy" }, new[] { "H:mm", "HH:mm", "h:mm tt", "hh:mm tt" }, new[] { "H:mm:ss", "HH:mm:ss", "h:mm:ss tt", "hh:mm:ss tt" } } },
-                       { 0x001f, new[] { new[] { "dd.MM.yyyy", "dd.MM.yy", "yyyy-MM-dd" }, new[] { "dd MMMM yyyy dddd", "dd MMMM yyyy" }, new[] { "HH:mm" }, new[] { "HH:mm:ss" } } },
-                       { 0x0020, new[] { new[] { "dd/MM/yyyy", "dd/MM/yy", "yyyy-MM-dd" }, new[] { "dd MMMM, yyyy", "dddd, dd MMMM, yyyy" }, new[] { "h:mm tt", "hh:mm tt", "H:mm", "HH:mm" }, new[] { "h:mm:ss tt", "hh:mm:ss tt", "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x0021, new[] { new[] { "dd/MM/yyyy", "dd/MM/yy", "yyyy-MM-dd" }, new[] { "dd MMMM yyyy" }, new[] { "H:mm", "HH:mm" }, new[] { "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x0022, new[] { new[] { "dd.MM.yyyy", "dd.MM.yy", "yyyy-MM-dd" }, new[] { "d MMMM yyyy' р.'" }, new[] { "H:mm", "HH:mm" }, new[] { "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x0023, new[] { new[] { "dd.MM.yyyy", "dd.MM.yy", "yyyy-MM-dd" }, new[] { "d MMMM yyyy" }, new[] { "H:mm", "HH:mm" }, new[] { "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x0024, new[] { new[] { "d.M.yyyy", "d.M.yy", "d. M. yyyy", "dd.MM.yyyy", "d. M. yy", "dd.MM.yy", "dd. MM. yy", "yyyy-MM-dd" }, new[] { "d. MMMM yyyy", "dd. MMMM yyyy", "dddd, d. MMMM yyyy" }, new[] { "H:mm", "HH:mm" }, new[] { "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x0025, new[] { new[] { "d.MM.yyyy", "dd.MM.yyyy", "dd.MM.yy", "yyyy-MM-dd" }, new[] { "d. MMMM yyyy'. a.'", "dd. MMMM yyyy'. a.'", "dddd, d. MMMM yyyy" }, new[] { "H:mm", "HH:mm" }, new[] { "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x0026, new[] { new[] { "yyyy.MM.dd.", "yy.MM.dd.", "yyyy-MM-dd" }, new[] { "dddd, yyyy'. gada 'd. MMMM" }, new[] { "H:mm", "HH:mm" }, new[] { "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x0027, new[] { new[] { "yyyy.MM.dd", "yyyy-MM-dd" }, new[] { "yyyy 'm.' MMMM d 'd.'" }, new[] { "HH:mm" }, new[] { "HH:mm:ss" } } },
-                       { 0x0028, new[] { new[] { "dd.MM.yy", "yyyy-MM-dd" }, new[] { "d MMMM yyyy" }, new[] { "H:mm", "HH:mm" }, new[] { "H:mm:ss" } } },
-                       { 0x0029, new[] { new[] { "MM/dd/yyyy", "MM/dd/yy" }, new[] { "dddd, MMMM dd, yyyy", "MMMM dd, yyyy" }, new[] { "hh:mm tt", "HH:mm" }, new[] { "hh:mm:ss tt", "HH:mm:ss" } } },
-                       { 0x002a, new[] { new[] { "dd/MM/yyyy", "dd/MM/yy", "dd-MM-yy", "dd-MM-yyyy", "yyyy-MM-dd" }, new[] { "dd MMMM yyyy" }, new[] { "h:mm tt", "hh:mm tt", "H:mm", "HH:mm" }, new[] { "h:mm:ss tt", "hh:mm:ss tt", "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x002b, new[] { new[] { "dd.MM.yyyy", "dd.MM.yy", "d/MM/yyyy", "dd/MM/yyyy", "d/MMM/yyyy", "dd/MMM/yyyy", "yyyy-MM-dd" }, new[] { "d MMMM, yyyy", "dddd, d MMMM yyyy", "dddd, dd MMMM yyyy", "dd MMMM yyyy", "d-MMM-yyyy", "dd-MMM-yyyy", "ddd, d-MMMM-yyyy", "ddd, dd-MMMM-yyyy" }, new[] { "H:mm", "HH:mm" }, new[] { "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x002c, new[] { new[] { "dd.MM.yyyy", "dd.MM.yy", "d.M.yy", "dd/MM/yy", "yyyy-MM-dd" }, new[] { "d MMMM yyyy", "dd MMMM yyyy" }, new[] { "H:mm", "HH:mm" }, new[] { "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x002d, new[] { new[] { "yyyy/MM/dd", "yyyy-MM-dd" }, new[] { "dddd, yyyy.'eko' MMMM'k 'd" }, new[] { "HH:mm" }, new[] { "H:mm:ss", "HH:mm:ss", "HH'H'mm'\\''ss'\\'\\''" } } },
-                       { 0x002e, new[] { new[] { "d. M. yyyy", "d. M. yy", "dd.MM.yyyy", "dd.MM.yy", "yyyy-MM-dd" }, new[] { "dddd, 'dnja' d. MMMM yyyy", "dddd, d. MMMM yyyy", "d. MMMM yyyy", "d. M. yyyy" }, new[] { "H.mm 'hodź.'", "HH:mm" }, new[] { "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x002f, new[] { new[] { "dd.MM.yyyy", "dd.MM.yy", "yyyy-MM-dd" }, new[] { "dddd, dd MMMM yyyy" }, new[] { "HH:mm" }, new[] { "HH:mm:ss" } } },
-                       { 0x0032, new[] { new[] { "yyyy/MM/dd", "yy/MM/dd", "yyyy-MM-dd" }, new[] { "dd MMMM yyyy" }, new[] { "hh:mm tt", "h:mm tt", "HH:mm" }, new[] { "hh:mm:ss tt", "h:mm:ss tt", "HH:mm:ss" } } },
-                       { 0x0034, new[] { new[] { "yyyy/MM/dd", "yy/MM/dd", "yyyy-MM-dd" }, new[] { "dd MMMM yyyy" }, new[] { "hh:mm tt", "h:mm tt", "HH:mm" }, new[] { "hh:mm:ss tt", "h:mm:ss tt", "HH:mm:ss" } } },
-                       { 0x0035, new[] { new[] { "yyyy/MM/dd", "yy/MM/dd", "yyyy-MM-dd" }, new[] { "dd MMMM yyyy" }, new[] { "hh:mm tt", "h:mm tt", "HH:mm" }, new[] { "hh:mm:ss tt", "h:mm:ss tt", "HH:mm:ss" } } },
-                       { 0x0036, new[] { new[] { "yyyy/MM/dd", "yy/MM/dd", "yyyy-MM-dd", "yyyy/MMM/dd" }, new[] { "dd MMMM yyyy" }, new[] { "hh:mm tt", "h:mm tt", "HH:mm" }, new[] { "hh:mm:ss tt", "h:mm:ss tt", "HH:mm:ss" } } },
-                       { 0x0037, new[] { new[] { "dd.MM.yyyy", "dd.MM.yy", "d.M.yy", "dd/MM/yy", "yyyy-MM-dd" }, new[] { "yyyy 'წლის' dd MM, dddd" }, new[] { "H:mm", "HH:mm" }, new[] { "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x0038, new[] { new[] { "dd-MM-yyyy", "dd-MM-yy", "yyyy-MM-dd" }, new[] { "d. MMMM yyyy" }, new[] { "HH:mm", "HH.mm" }, new[] { "HH:mm:ss", "HH.mm.ss" } } },
-                       { 0x0039, new[] { new[] { "dd-MM-yyyy", "dd-MM-yy", "d-M-yy", "d.M.yy", "yyyy-MM-dd" }, new[] { "dd MMMM yyyy", "d MMMM yyyy" }, new[] { "HH:mm", "H:mm", "tt hh:mm", "tt h:mm" }, new[] { "HH:mm:ss", "H:mm:ss", "tt hh:mm:ss", "tt h:mm:ss" } } },
-                       { 0x003a, new[] { new[] { "dd/MM/yyyy", "yyyy-MM-dd", "ddMMyyyy", "d-M-yyyy", "d/M/yyyy" }, new[] { "dddd, d' ta\\' 'MMMM yyyy", "d' ta\\' 'MMMM yyyy", "dd MMM yyyy" }, new[] { "HH:mm", "h:mm tt", "H:mm", "hh:mm tt" }, new[] { "HH:mm:ss", "h:mm:ss tt", "H:mm:ss", "hh:mm:ss tt" } } },
-                       { 0x003b, new[] { new[] { "dd.MM.yyyy", "dd.MM.yy", "d.M.yy", "yyyy-MM-dd" }, new[] { "MMMM d'. b. 'yyyy" }, new[] { "HH:mm", "H:mm", "HH.mm" }, new[] { "HH:mm:ss", "H:mm:ss", "HH.mm.ss" } } },
-                       { 0x003c, new[] { new[] { "dd/MM/yyyy", "dd/MM/yy", "d/M/yy", "d.M.yy", "yyyy-MM-dd" }, new[] { "d MMMM yyyy", "dd MMMM yyyy", "dd MMM yyyy", "d MMM yyyy" }, new[] { "HH:mm", "H:mm" }, new[] { "HH:mm:ss", "H:mm:ss" } } },
-                       { 0x003e, new[] { new[] { "dd/MM/yyyy", "dd/MM/yy", "yyyy-MM-dd" }, new[] { "dd MMMM yyyy" }, new[] { "H:mm", "HH:mm" }, new[] { "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x003f, new[] { new[] { "dd.MM.yyyy", "dd.MM.yy", "d.M.yy", "dd/MM/yy", "yyyy-MM-dd" }, new[] { "d MMMM yyyy 'ж.'", "dd MMMM yyyy 'ж.'" }, new[] { "H:mm", "HH:mm" }, new[] { "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x0040, new[] { new[] { "dd.MM.yy", "yyyy-MM-dd" }, new[] { "d'-'MMMM yyyy'-ж.'" }, new[] { "H:mm" }, new[] { "H:mm:ss" } } },
-                       { 0x0041, new[] { new[] { "M/d/yyyy", "M/d/yy", "MM/dd/yy", "MM/dd/yyyy", "yy/MM/dd", "yyyy-MM-dd", "dd-MMM-yy" }, new[] { "dddd, MMMM dd, yyyy", "MMMM dd, yyyy", "dddd, dd MMMM, yyyy", "dd MMMM, yyyy" }, new[] { "h:mm tt", "hh:mm tt", "H:mm", "HH:mm" }, new[] { "h:mm:ss tt", "hh:mm:ss tt", "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x0042, new[] { new[] { "dd.MM.yy", "yyyy-MM-dd" }, new[] { "yyyy 'ý.' MMMM d", "yyyy 'ý.' MMMM dd" }, new[] { "H:mm", "HH:mm" }, new[] { "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x0043, new[] { new[] { "dd/MM yyyy", "dd.MM.yy", "d.M.yy", "dd/MM/yy", "yyyy-MM-dd" }, new[] { "yyyy 'yil' d-MMMM", "d MMMM yyyy", "dd MMMM yyyy" }, new[] { "HH:mm", "H:mm" }, new[] { "HH:mm:ss", "H:mm:ss" } } },
-                       { 0x0044, new[] { new[] { "dd.MM.yyyy", "dd.MM.yy", "d.M.yy", "dd/MM/yy", "yyyy-MM-dd" }, new[] { "d MMMM yyyy", "dd MMMM yyyy" }, new[] { "H:mm", "HH:mm" }, new[] { "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x0045, new[] { new[] { "dd-MM-yy", "d-M-yy", "d.M.yy", "dd-MM-yyyy", "yyyy-MM-dd" }, new[] { "dd MMMM yyyy", "d MMMM yyyy" }, new[] { "HH.mm", "H.mm", "tt hh.mm", "tt h.mm" }, new[] { "HH.mm.ss", "H.mm.ss", "tt hh.mm.ss", "tt h.mm.ss" } } },
-                       { 0x0046, new[] { new[] { "dd-MM-yy", "d-M-yy", "d.M.yy", "dd-MM-yyyy", "yyyy-MM-dd" }, new[] { "dd MMMM yyyy dddd", "d MMMM yyyy" }, new[] { "tt hh:mm", "tt h:mm", "H:mm", "HH:mm" }, new[] { "tt hh:mm:ss", "tt h:mm:ss", "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x0047, new[] { new[] { "dd-MM-yy", "d-M-yy", "d.M.yy", "dd-MM-yyyy", "yyyy-MM-dd" }, new[] { "dd MMMM yyyy", "d MMMM yyyy" }, new[] { "HH:mm", "H:mm", "tt hh:mm", "tt h:mm" }, new[] { "HH:mm:ss", "H:mm:ss", "tt hh:mm:ss", "tt h:mm:ss" } } },
-                       { 0x0048, new[] { new[] { "dd-MM-yy", "d-M-yy", "d.M.yy", "dd-MM-yyyy", "yyyy-MM-dd" }, new[] { "dd MMMM yyyy", "d MMMM yyyy" }, new[] { "HH:mm", "H:mm", "tt hh:mm", "tt h:mm" }, new[] { "HH:mm:ss", "H:mm:ss", "tt hh:mm:ss", "tt h:mm:ss" } } },
-                       { 0x0049, new[] { new[] { "dd-MM-yyyy", "dd-MM-yy", "d-M-yy", "d.M.yy", "yyyy-MM-dd" }, new[] { "dd MMMM yyyy", "d MMMM yyyy" }, new[] { "HH:mm", "H:mm", "tt hh:mm", "tt h:mm" }, new[] { "HH:mm:ss", "H:mm:ss", "tt hh:mm:ss", "tt h:mm:ss" } } },
-                       { 0x004a, new[] { new[] { "dd-MM-yy", "d-M-yy", "d.M.yy", "dd-MM-yyyy", "yyyy-MM-dd" }, new[] { "dd MMMM yyyy", "d MMMM yyyy" }, new[] { "HH:mm", "H:mm", "tt hh:mm", "tt h:mm" }, new[] { "HH:mm:ss", "H:mm:ss", "tt hh:mm:ss", "tt h:mm:ss" } } },
-                       { 0x004b, new[] { new[] { "dd-MM-yy", "d-M-yy", "d.M.yy", "dd-MM-yyyy", "yyyy-MM-dd" }, new[] { "dd MMMM yyyy", "d MMMM yyyy" }, new[] { "HH:mm", "H:mm", "tt hh:mm", "tt h:mm" }, new[] { "HH:mm:ss", "H:mm:ss", "tt hh:mm:ss", "tt h:mm:ss" } } },
-                       { 0x004c, new[] { new[] { "dd-MM-yy", "d-M-yy", "d.M.yy", "dd-MM-yyyy", "yyyy-MM-dd" }, new[] { "dd MMMM yyyy", "d MMMM yyyy" }, new[] { "HH.mm", "H.mm", "tt hh.mm", "tt h.mm" }, new[] { "HH.mm.ss", "H.mm.ss", "tt hh.mm.ss", "tt h.mm.ss" } } },
-                       { 0x004d, new[] { new[] { "dd-MM-yyyy" }, new[] { "yyyy,MMMM dd, dddd" }, new[] { "tt h:mm", "tt hh:mm" }, new[] { "tt h:mm:ss", "tt hh:mm:ss" } } },
-                       { 0x004e, new[] { new[] { "dd-MM-yyyy", "dd-MM-yy", "d-M-yy", "d.M.yy", "yyyy-MM-dd" }, new[] { "dd MMMM yyyy", "d MMMM yyyy" }, new[] { "HH:mm", "H:mm", "tt hh:mm", "tt h:mm" }, new[] { "HH:mm:ss", "H:mm:ss", "tt hh:mm:ss", "tt h:mm:ss" } } },
-                       { 0x004f, new[] { new[] { "dd-MM-yyyy", "dd-MM-yy", "d-M-yy", "d.M.yy", "yyyy-MM-dd" }, new[] { "dd MMMM yyyy dddd", "d MMMM yyyy" }, new[] { "HH:mm", "H:mm", "tt hh:mm", "tt h:mm" }, new[] { "HH:mm:ss", "H:mm:ss", "tt hh:mm:ss", "tt h:mm:ss" } } },
-                       { 0x0050, new[] { new[] { "yy.MM.dd", "yyyy-MM-dd" }, new[] { "yyyy 'оны' MMMM d" }, new[] { "H:mm" }, new[] { "H:mm:ss" } } },
-                       { 0x0051, new[] { new[] { "yyyy/M/d", "yyyy-M-d", "yyyy.M.d", "yyyy.MM.dd", "yyyy-MM-dd", "yyyy/MM/dd", "yy-M-d", "yy/M/d", "yy.M.d" }, new[] { "yyyy'ལོའི་ཟླ' M'ཚེས' d", "yyyy'ལོའི་ཟླ' M'ཚེས' d dddd" }, new[] { "HH:mm" }, new[] { "HH:mm:ss" } } },
-                       { 0x0052, new[] { new[] { "dd/MM/yyyy", "dd/MM/yy", "d/M/yy", "d.M.yy", "yyyy-MM-dd" }, new[] { "dd MMMM yyyy", "d MMMM yyyy" }, new[] { "HH:mm", "H:mm", "hh:mm tt", "h:mm tt" }, new[] { "HH:mm:ss", "H:mm:ss", "hh:mm:ss tt", "h:mm:ss tt" } } },
-                       { 0x0053, new[] { new[] { "yyyy-MM-dd" }, new[] { "d MMMM yyyy", "ddd d MMMM yyyy" }, new[] { "H:mm tt" }, new[] { "HH:mm:ss" } } },
-                       { 0x0054, new[] { new[] { "dd/MM/yyyy", "yyyy-MM-dd" }, new[] { "dd MMMM yyyy" }, new[] { "H:mm tt" }, new[] { "HH:mm:ss" } } },
-                       { 0x0056, new[] { new[] { "dd/MM/yyyy", "dd/MM/yy", "d/MM/yy", "d/M/yy", "dd-MM-yy", "dd.MM.yy", "yyyy-MM-dd" }, new[] { "dddd, dd' de 'MMMM' de 'yyyy", "dddd d' de 'MMMM' de 'yyyy", "d' de 'MMMM' de 'yyyy" }, new[] { "H:mm", "HH:mm", "hh:mm tt", "HH'H'mm'\\''" }, new[] { "H:mm:ss", "HH:mm:ss", "hh:mm:ss tt", "HH'H'mm'\\''ss'\\'\\''" } } },
-                       { 0x0057, new[] { new[] { "dd-MM-yyyy", "dd-MM-yy", "d-M-yy", "d.M.yy", "yyyy-MM-dd" }, new[] { "dd MMMM yyyy", "d MMMM yyyy" }, new[] { "HH:mm", "H:mm", "tt hh:mm", "tt h:mm" }, new[] { "HH:mm:ss", "H:mm:ss", "tt hh:mm:ss", "tt h:mm:ss" } } },
-                       { 0x005a, new[] { new[] { "dd/MM/yyyy", "dd/MM/yy", "yyyy-MM-dd" }, new[] { "dd MMMM, yyyy", "dddd, dd MMMM, yyyy" }, new[] { "hh:mm tt", "HH:mm" }, new[] { "hh:mm:ss tt", "HH:mm:ss" } } },
-                       { 0x005b, new[] { new[] { "yyyy-MM-dd", "yyyy/MM/dd", "yy/MM/dd", "dd/MM/yyyy", "dd/MM/yy" }, new[] { "yyyy MMMM' මස 'dd' වැනිදා 'dddd" }, new[] { "h:mm tt", "hh:mm tt", "H:mm", "HH:mm" }, new[] { "h:mm:ss tt", "hh:mm:ss tt", "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x005d, new[] { new[] { "d/MM/yyyy", "d/M/yy", "yy-MM-dd", "dd/MM/yyyy", "yy-MM-dd", "yyyy-MM-dd", "dd-MMM-yy" }, new[] { "ddd, MMMM dd,yyyy", "MMMM dd,yyyy", "dddd, dd MMMM, yyyy", "dd MMMM, yyyy" }, new[] { "h:mm tt", "hh:mm tt", "HH:mm", "H:mm" }, new[] { "h:mm:ss tt", "hh:mm:ss tt", "HH:mm:ss", "H:mm:ss" } } },
-                       { 0x005e, new[] { new[] { "d/M/yyyy", "yyyy-MM-dd" }, new[] { "dddd '፣' MMMM d 'ቀን' yyyy" }, new[] { "h:mm tt" }, new[] { "h:mm:ss tt" } } },
-                       { 0x005f, new[] { new[] { "dd-MM-yyyy", "dd-MM-yy", "yyyy-MM-dd" }, new[] { "dd MMMM, yyyy", "dddd, dd MMMM, yyyy" }, new[] { "H:mm", "HH:mm", "hh:mm" }, new[] { "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x0061, new[] { new[] { "M/d/yyyy", "M/d/yy", "MM/dd/yy", "MM/dd/yyyy", "yy/MM/dd", "yyyy-MM-dd", "dd-MMM-yy" }, new[] { "dddd, MMMM dd, yyyy", "MMMM dd, yyyy", "dddd, dd MMMM, yyyy", "dd MMMM, yyyy" }, new[] { "h:mm tt", "hh:mm tt", "H:mm", "HH:mm" }, new[] { "h:mm:ss tt", "hh:mm:ss tt", "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x0062, new[] { new[] { "d-M-yyyy", "d-M-yy", "dd-MM-yy", "dd/MM/yy", "dd.MM.yy", "yyyy-MM-dd" }, new[] { "dddd d MMMM yyyy", "d-MMM-yy", "d MMMM yyyy", "d MMM yy" }, new[] { "H:mm", "HH:mm", "H:mm", "H.mm" }, new[] { "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x0063, new[] { new[] { "dd/MM/yy", "dd/MM/yyyy" }, new[] { "dd/MM/yyyy", "dd/MMMM/yyyy", "dddd, dd MMMM, yyyy", "dd/MM/yyyy 'هـ'" }, new[] { "h:mm tt", "H:mm" }, new[] { "h:mm:ss tt", "H:mm:ss" } } },
-                       { 0x0064, new[] { new[] { "M/d/yyyy", "M/d/yy", "MM/dd/yy", "MM/dd/yyyy", "yy/MM/dd", "yyyy-MM-dd", "dd-MMM-yy" }, new[] { "dddd, MMMM dd, yyyy", "MMMM dd, yyyy", "dddd, dd MMMM, yyyy", "dd MMMM, yyyy" }, new[] { "h:mm tt", "hh:mm tt", "H:mm", "HH:mm" }, new[] { "h:mm:ss tt", "hh:mm:ss tt", "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x0065, new[] { new[] { "dd/MM/yy", "dd/MM/yyyy" }, new[] { "dd/MM/yyyy", "dd/MMMM/yyyy", "dddd, dd MMMM, yyyy", "dd/MM/yyyy 'هـ'" }, new[] { "HH:mm", "hh:mm tt" }, new[] { "HH:mm:ss", "hh:mm:ss tt" } } },
-                       { 0x0068, new[] { new[] { "d/M/yyyy", "d/M/yy", "dd/MM/yy", "dd/MM/yyyy", "yy/MM/dd", "yyyy-MM-dd", "dd-MMM-yy" }, new[] { "dddd, MMMM dd, yyyy", "MMMM dd, yyyy", "dddd, dd MMMM, yyyy", "dd MMMM, yyyy" }, new[] { "h:mm tt", "hh:mm tt", "H:mm", "HH:mm" }, new[] { "h:mm:ss tt", "hh:mm:ss tt", "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x006a, new[] { new[] { "d/M/yyyy", "d/M/yy", "dd/MM/yy", "dd/MM/yyyy", "yy/MM/dd", "yyyy-MM-dd", "dd-MMM-yy" }, new[] { "dddd, MMMM dd, yyyy", "MMMM dd, yyyy", "dddd, dd MMMM, yyyy", "dd MMMM, yyyy" }, new[] { "h:mm tt", "hh:mm tt", "H:mm", "HH:mm" }, new[] { "h:mm:ss tt", "hh:mm:ss tt", "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x006b, new[] { new[] { "dd/MM/yyyy", "dd/MM/yy", "d/M/yy", "dd-MM-yy", "yyyy-MM-dd" }, new[] { "dddd, dd' de 'MMMM' de 'yyyy", "dddd d' de 'MMMM' de 'yyyy", "d' de 'MMMM' de 'yyyy" }, new[] { "hh:mm tt", "h:mm tt", "H:mm", "HH:mm" }, new[] { "hh:mm:ss tt", "h:mm:ss tt", "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x006c, new[] { new[] { "yyyy/MM/dd", "yy/MM/dd", "yyyy-MM-dd" }, new[] { "dd MMMM yyyy" }, new[] { "hh:mm tt", "h:mm tt", "HH:mm" }, new[] { "hh:mm:ss tt", "h:mm:ss tt", "HH:mm:ss" } } },
-                       { 0x006d, new[] { new[] { "dd.MM.yy", "yyyy-MM-dd" }, new[] { "d MMMM yyyy 'й'" }, new[] { "H:mm" }, new[] { "H:mm:ss" } } },
-                       { 0x006e, new[] { new[] { "dd/MM/yyyy", " dd/MM/yy", "dd.MM.yy", "dd/MM/yy", "dd-MM-yy", "yyyy-MM-dd" }, new[] { "dddd d MMMM yyyy", "d MMM yy", "d MMMM yyyy" }, new[] { "HH:mm", "H:mm", "H.mm", "H.mm' Auer'" }, new[] { "HH:mm:ss", "H:mm:ss' Auer'", "HH:mm:ss' Auer'", "HHmmss" } } },
-                       { 0x006f, new[] { new[] { "dd-MM-yyyy", "dd-MM-yy", "yyyy-MM-dd", "yyyy MM dd" }, new[] { "d. MMMM yyyy", "dd. MMMM yyyy" }, new[] { "HH:mm", "H:mm" }, new[] { "HH:mm:ss", "H:mm:ss" } } },
-                       { 0x0070, new[] { new[] { "d/M/yyyy", "d/M/yy", "dd/MM/yy", "dd/MM/yyyy", "yy/MM/dd", "yyyy-MM-dd", "dd-MMM-yy" }, new[] { "dddd, MMMM dd, yyyy", "MMMM dd, yyyy", "dddd, dd MMMM, yyyy", "dd MMMM, yyyy" }, new[] { "h:mm tt", "hh:mm tt", "H:mm", "HH:mm" }, new[] { "h:mm:ss tt", "hh:mm:ss tt", "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x0078, new[] { new[] { "yyyy/M/d", "yyyy-M-d", "yyyy.M.d", "yyyy.MM.dd", "yyyy-MM-dd", "yyyy/MM/dd" }, new[] { "yyyy'ꈎ' M'ꆪ' d'ꑍ'", "dddd, yyyy'ꈎ' M'ꆪ' d'ꑍ'", "yyyy'ꈎ' M'ꆪ' d'ꑍ', dddd" }, new[] { "tt h:mm", "H:mm" }, new[] { "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x007a, new[] { new[] { "dd-MM-yyyy", "dd-MM-yy", "dd/MM/yy", "d/M/yy", "yyyy-MM-dd" }, new[] { "dddd, dd' de 'MMMM' de 'yyyy", "dddd d' de 'MMMM' de 'yyyy", "d' de 'MMMM' de 'yyyy" }, new[] { "H:mm", "HH:mm" }, new[] { "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x007c, new[] { new[] { "M/d/yyyy", "M/d/yy", "MM/dd/yy", "MM/dd/yyyy", "yy/MM/dd", "yyyy-MM-dd", "dd-MMM-yy" }, new[] { "dddd, MMMM dd, yyyy", "MMMM dd, yyyy", "dddd, dd MMMM, yyyy", "dd MMMM, yyyy" }, new[] { "h:mm tt", "hh:mm tt", "HH:mm", "H:mm" }, new[] { "h:mm:ss tt", "hh:mm:ss tt", "HH:mm:ss", "H:mm:ss" } } },
-                       { 0x007e, new[] { new[] { "dd/MM/yyyy", "dd/MM/yy", "dd.MM.yy", "dd-MM-yy", "yyyy-MM-dd" }, new[] { "dddd d MMMM yyyy", "d MMM yy", "d MMMM yyyy" }, new[] { "HH:mm", "H:mm", "HH.mm", "HH' h 'mm", "HH'h'mm" }, new[] { "HH:mm:ss", "H:mm:ss" } } },
-                       { 0x0080, new[] { new[] { "yyyy-M-d", "yyyy.M.d", "yyyy-MM-dd", "yyyy.MM.dd" }, new[] { "yyyy-'يىلى' MMMM d-'كۈنى،'", "yyyy-'يىلى' MMMM d-'كۈنى،' dddd" }, new[] { "H:mm", "HH:mm", "tt h:mm", "tt hh:mm" }, new[] { "H:mm:ss", "HH:mm:ss", "tt h:mm:ss", "tt hh:mm:ss" } } },
-                       { 0x0081, new[] { new[] { "dd/MM/yyyy", "d/MM/yy", "dd/MM/yy", "d.MM.yy", "yyyy-MM-dd" }, new[] { "dddd, dd MMMM, yyyy", "d MMMM yyyy" }, new[] { "h:mm tt", "hh:mm tt", "HH:mm", "H:mm" }, new[] { "h:mm:ss tt", "hh:mm:ss tt", "HH:mm:ss", "H:mm:ss" } } },
-                       { 0x0082, new[] { new[] { "dd/MM/yyyy", "dd/MM/yy", "dd.MM.yy", "dd-MM-yy", "yyyy-MM-dd" }, new[] { "dddd,' lo 'd MMMM' de 'yyyy" }, new[] { "HH:mm", "H:mm", "HH.mm", "HH' h 'mm", "HH'h'mm" }, new[] { "HH:mm:ss", "H:mm:ss" } } },
-                       { 0x0083, new[] { new[] { "dd/MM/yyyy", "dd/MM/yy", "dd.MM.yy", "dd-MM-yy", "yyyy-MM-dd" }, new[] { "dddd d MMMM yyyy", "d MMM yy", "d MMMM yyyy" }, new[] { "HH:mm", "H:mm", "HH.mm", "HH' h 'mm", "HH'h'mm" }, new[] { "HH:mm:ss", "H:mm:ss" } } },
-                       { 0x0084, new[] { new[] { "dd/MM/yyyy", "dd/MM/yy", "dd.MM.yy", "dd-MM-yy", "yyyy-MM-dd" }, new[] { "dddd d MMMM yyyy", "d MMM yy", "d MMMM yyyy" }, new[] { "HH:mm", "H:mm", "HH.mm", "HH' h 'mm", "HH'h'mm" }, new[] { "HH:mm:ss", "H:mm:ss" } } },
-                       { 0x0085, new[] { new[] { "MM.dd.yyyy", "MM.dd.yy", "d.M.yy", "MM/dd/yy", "MM-dd-yyyy" }, new[] { "MMMM d yyyy 'с.'", "MMMM dd yyyy 'с.'" }, new[] { "H:mm", "HH:mm" }, new[] { "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x0086, new[] { new[] { "dd/MM/yyyy", "dd/MM/yy", "d/MM/yyyy", "d/M/yy", "dd-MM-yy", "yyyy-MM-dd" }, new[] { "dddd, dd' de 'MMMM' de 'yyyy", "dddd d' de 'MMMM' de 'yyyy", "d' de 'MMMM' de 'yyyy" }, new[] { "hh:mm tt", "h:mm tt", "H:mm", "HH:mm" }, new[] { "hh:mm:ss tt", "h:mm:ss tt", "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x0087, new[] { new[] { "M/d/yyyy", "M/d/yy", "MM/dd/yy", "MM/dd/yyyy", "yy/MM/dd", "yyyy-MM-dd", "dd-MMM-yy" }, new[] { "dddd, MMMM dd, yyyy", "MMMM dd, yyyy", "dddd, dd MMMM, yyyy", "dd MMMM, yyyy" }, new[] { "h:mm tt", "hh:mm tt", "H:mm", "HH:mm" }, new[] { "h:mm:ss tt", "hh:mm:ss tt", "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x0088, new[] { new[] { "dd/MM/yyyy", "dd/MM/yy", "dd.MM.yy", "dd-MM-yy", "yyyy-MM-dd" }, new[] { "dddd d MMMM yyyy", "d MMM yy", "d MMMM yyyy" }, new[] { "HH:mm", "H:mm", "HH.mm", "HH' h 'mm" }, new[] { "HH:mm:ss", "H:mm:ss" } } },
-                       { 0x008c, new[] { new[] { "dd/MM/yy", "dd/MM/yyyy" }, new[] { "dd/MM/yyyy", "dd/MMMM/yyyy", "dddd, dd MMMM, yyyy", "dd/MM/yyyy 'هـ'" }, new[] { "h:mm tt", "H:mm" }, new[] { "h:mm:ss tt", "H:mm:ss" } } },
-                       { 0x0091, new[] { new[] { "dd/MM/yyyy", "dd/MM/yy", "d/M/yy", "d.M.yy", "yyyy-MM-dd" }, new[] { "dd MMMM yyyy", "d MMMM yyyy" }, new[] { "HH:mm", "H:mm", "hh:mm tt", "h:mm tt" }, new[] { "HH:mm:ss", "H:mm:ss", "hh:mm:ss tt", "h:mm:ss tt" } } },
-                       { 0x0401, new[] { new[] { "dd/MM/yy", "dd/MM/yyyy" }, new[] { "dd/MMMM/yyyy", "dddd, dd MMMM, yyyy" }, new[] { "hh:mm tt", "HH:mm" }, new[] { "hh:mm:ss tt", "HH:mm:ss" } } },
-                       { 0x0402, new[] { new[] { "d.M.yyyy 'г.'", "dd.M.yyyy 'г.'", "d.MM.yyyy 'г.'", "dd.MM.yyyy 'г.'" }, new[] { "dd MMMM yyyy 'г.'", "d MMMM yyyy 'г.'", "dddd, dd MMMM yyyy 'г.'", "dddd, d MMMM yyyy 'г.'" }, new[] { "HH:mm 'ч.'", "H:mm 'ч.'" }, new[] { "HH:mm:ss 'ч.'", "H:mm:ss 'ч.'" } } },
-                       { 0x0403, new[] { new[] { "dd/MM/yyyy", "dd/MM/yy", "yyyy-MM-dd", "d/MM/yy", "d/M/yy", "dd-MM-yy", "dd.MM.yy" }, new[] { "dddd, d' / 'MMMM' / 'yyyy", "d'/'MMMM'/'yyyy", "d' 'MMMM' 'yyyy" }, new[] { "HH:mm", "H:mm", "HH'H'mm'\\''" }, new[] { "HH:mm:ss", "H:mm:ss", "HH'H'mm'\\''ss'\\'\\''" } } },
-                       { 0x0404, new[] { new[] { "yyyy/M/d", "yyyy/MM/dd", "yyyy-MM-dd" }, new[] { "yyyy'年'M'月'd'日'", "yyyy'年'MM'月'dd'日'" }, new[] { "tt hh:mm", "tt h:mm", "HH:mm", "H:mm" }, new[] { "tt hh:mm:ss", "tt h:mm:ss", "HH:mm:ss", "H:mm:ss" } } },
-                       { 0x0405, new[] { new[] { "d.M.yyyy", "d-M-yy", "yyyy-MM-dd", "yyyy-M-d", "yy-M-d" }, new[] { "d. MMMM yyyy" }, new[] { "H:mm", "HH:mm", "h.mm tt", "H.mm" }, new[] { "H:mm:ss", "HH:mm:ss", "h.mm.ss tt", "H.mm.ss" } } },
-                       { 0x0406, new[] { new[] { "dd-MM-yyyy", "dd-MM-yy", "yyyy-MM-dd", "yyyy MM dd" }, new[] { "d. MMMM yyyy", "dd. MMMM yyyy" }, new[] { "HH:mm", "H:mm" }, new[] { "HH:mm:ss", "H:mm:ss" } } },
-                       { 0x0407, new[] { new[] { "dd.MM.yyyy", "dd.MMM.yyyy", "dd.MM.yy", "d.MM.yy", "d.M.yy", "d.M.yyyy", "yyyy-MM-dd" }, new[] { "dddd, d. MMMM yyyy", "d. MMMM yyyy", "d. MMM yyyy" }, new[] { "HH:mm", "H:mm", "H.mm", "H.mm' Uhr'" }, new[] { "HH:mm:ss", "H:mm:ss' Uhr'", "HH:mm:ss' Uhr'", "HHmmss" } } },
-                       { 0x0408, new[] { new[] { "d/M/yyyy", "dd/MM/yyyy", "d/M/yy", "dd/MM/yy", "dd/MMM/yyyy", "yyyy-MM-dd" }, new[] { "dddd, d MMMM yyyy", "d MMMM yyyy" }, new[] { "h:mm tt", "hh:mm tt", "H:mm", "HH:mm" }, new[] { "h:mm:ss tt", "hh:mm:ss tt", "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x0409, new[] { new[] { "M/d/yyyy", "M/d/yy", "MM/dd/yy", "MM/dd/yyyy", "yy/MM/dd", "yyyy-MM-dd", "dd-MMM-yy" }, new[] { "dddd, MMMM dd, yyyy", "MMMM dd, yyyy", "dddd, dd MMMM, yyyy", "dd MMMM, yyyy" }, new[] { "h:mm tt", "hh:mm tt", "H:mm", "HH:mm" }, new[] { "h:mm:ss tt", "hh:mm:ss tt", "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x040b, new[] { new[] { "d.M.yyyy", "dd.MM.yyyy", "d.M.yy", "yyyy-MM-dd" }, new[] { "d. MMMM'ta 'yyyy", "dd. MMMM'ta 'yyyy" }, new[] { "H:mm", "HH:mm" }, new[] { "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x040c, new[] { new[] { "dd/MM/yyyy", "dd/MM/yy", "dd.MM.yy", "dd-MM-yy", "yyyy-MM-dd" }, new[] { "dddd d MMMM yyyy", "d MMM yy", "d MMMM yyyy" }, new[] { "HH:mm", "H:mm", "HH.mm", "HH' h 'mm", "HH'h'mm" }, new[] { "HH:mm:ss", "H:mm:ss" } } },
-                       { 0x040d, new[] { new[] { "dd/MM/yyyy", "dd MMMM yyyy", "dd/MM/yy", "dd/MMMM/yyyy", "dd-MM-yy", "dd-MM-yyyy", "dd-MMMM-yyyy", "yyyy-MM-dd", "dd 'ב'MMMM yyyy", "dd MMM yy" }, new[] { "dddd dd MMMM yyyy", "dd MMMM yyyy", "dddd dd 'ב'MMMM yyyy", "ddd dd 'ב'MMMM yyyy", "dd 'ב'MMMM yyyy" }, new[] { "HH:mm", "hh:mm tt" }, new[] { "HH:mm:ss", "hh:mm:ss tt" } } },
-                       { 0x040e, new[] { new[] { "yyyy.MM.dd.", "yyyy. MM. dd.", "yyyy-MM-dd", "yy-MM-dd" }, new[] { "yyyy. MMMM d." }, new[] { "H:mm", "HH:mm", "h:mm tt" }, new[] { "H:mm:ss", "HH:mm:ss", "h:mm:ss tt" } } },
-                       { 0x040f, new[] { new[] { "d.M.yyyy", "dd.MM.yy", "d. M. yyyy.", "d. M. '\\''yy.", "yyyy-MM-dd", "yy MM dd" }, new[] { "d. MMMM yyyy", "dd. MMMM yyyy" }, new[] { "HH:mm", "H:mm" }, new[] { "HH:mm:ss", "H:mm:ss" } } },
-                       { 0x0410, new[] { new[] { "dd/MM/yyyy", "dd/MMM/yyyy", "dd/MM/yy", "dd.M.yy", "d/M/yy", "yyyy-MM-dd" }, new[] { "dddd d MMMM yyyy", "d-MMM-yy", "d MMMM yyyy" }, new[] { "HH:mm", "H:mm", "H.mm", "HH.mm" }, new[] { "HH:mm:ss", "H.mm.ss", "HH.mm.ss" } } },
-                       { 0x0411, new[] { new[] { "yyyy/MM/dd", "yy/MM/dd", "yy/M/d", "yyyy/M/d", "yy/MM/dd' ('ddd')'", "yy/M/d' ('ddd')'", "yyyy/MM/dd' ('ddd')'", "yyyy-MM-dd" }, new[] { "yyyy'年'M'月'd'日'", "yyyy'年'MM'月'dd'日'", "yyyy'年'M'月'd'日' dddd", "yyyy'年'MM'月'dd'日' dddd" }, new[] { "H:mm", "HH:mm", "tt h:mm", "tt hh:mm" }, new[] { "H:mm:ss", "HH:mm:ss", "tt h:mm:ss", "tt hh:mm:ss" } } },
-                       { 0x0412, new[] { new[] { "yyyy-MM-dd", "yy-MM-dd", "yy-M-d", "yyyy-M-d" }, new[] { "yyyy'년' M'월' d'일' dddd", "yyyy'년' M'월' d'일'", "yy'년' M'월' d'일' dddd", "yy'년' M'월' d'일'", "yyyy'년' MM'월' dd'일' dddd", "yyyy'년' MM'월' dd'일'" }, new[] { "tt h:mm", "tt hh:mm", "H:mm", "HH:mm" }, new[] { "tt h:mm:ss", "tt hh:mm:ss", "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x0413, new[] { new[] { "d-M-yyyy", "d-M-yy", "dd-MM-yy", "dd/MM/yy", "dd.MM.yy", "dd.MMM.yyyy", "yyyy-MM-dd" }, new[] { "dddd d MMMM yyyy", "d-MMM-yy", "d MMMM yyyy", "d MMM yy" }, new[] { "H:mm", "HH:mm", "H.mm", "HH.mm' uur'", "HH:mm' uur'" }, new[] { "H:mm:ss", "HH:mm:ss", "HH.mm.ss' uur'", "HH:mm:ss' uur'" } } },
-                       { 0x0414, new[] { new[] { "dd.MM.yyyy", "dd.MM.yy", "d.M.yy", "yyyy-MM-dd", "dd.MMM.yyyy" }, new[] { "d. MMMM yyyy", "dd. MMMM yyyy" }, new[] { "HH:mm", "H:mm", "'kl 'HH.mm", "HH.mm" }, new[] { "HH:mm:ss", "H:mm:ss", "'kl 'HH.mm.ss", "HH.mm.ss" } } },
-                       { 0x0415, new[] { new[] { "yyyy-MM-dd", "yy-MM-dd" }, new[] { "d MMMM yyyy", "dd MMMM yyyy" }, new[] { "HH:mm", "H:mm" }, new[] { "HH:mm:ss", "H:mm:ss" } } },
-                       { 0x0416, new[] { new[] { "dd/MM/yyyy", "dd/MM/yy", "d/M/yyyy", "d/M/yy", "dd-MM-yy", "dd-MM-yyyy", "d-M-yy", "d-M-yyyy", "dd.MM.yy", "dd.MM.yyyy", "dd.MMM.yyyy", "d.M.yy", "d.M.yyyy", "yyyy-MM-dd" }, new[] { "dddd, d' de 'MMMM' de 'yyyy", "d' de 'MMMM' de 'yyyy" }, new[] { "HH:mm" }, new[] { "HH:mm:ss" } } },
-                       { 0x0417, new[] { new[] { "dd/MM/yyyy", "dd/MM/yy", "d/MM/yy", "dd/M/yy", "d/M/yy", "dd/MM/yyyy", "yyyy-MM-dd" }, new[] { "dddd, d MMMM yyyy", "d MMMM yyyy", "d MMM yy" }, new[] { "HH:mm", "H:mm", "HH:mm' Ura'", "H:mm' Ura'", "H' Ura'", "HH.mm' h'", "H.mm' h'", "H' h'", "H.mm' Uhr'", "H' Uhr'", "HHmm", "HH" }, new[] { "HH:mm:ss", "H:mm:ss", "HH:mm:ss' Ura'", "H:mm:ss' Ura'", "HH:mm:ss' Uhr'", "H:mm:ss' Uhr'", "HH:mm:ss' h'", "H:mm:ss' h'", "HHmmss" } } },
-                       { 0x0418, new[] { new[] { "dd.MM.yyyy", "d.M.yyyy", "yyyy-MM-dd" }, new[] { "d MMMM yyyy" }, new[] { "HH:mm", "H:mm" }, new[] { "HH:mm:ss", "H:mm:ss" } } },
-                       { 0x0419, new[] { new[] { "dd.MM.yyyy", "dd.MM.yy", "d.M.yy", "dd/MM/yy", "yyyy-MM-dd" }, new[] { "d MMMM yyyy 'г.'", "dd MMMM yyyy 'г.'" }, new[] { "H:mm", "HH:mm" }, new[] { "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x041a, new[] { new[] { "d.M.yyyy.", "d.M.yy.", "d. M. yyyy.", "dd.MM.yyyy.", "d. M. yy.", "dd.MM.yy.", "dd. MM. yy.", "yyyy-MM-dd" }, new[] { "d. MMMM yyyy.", "dd. MMMM yyyy.", "dddd, d. MMMM yyyy." }, new[] { "H:mm", "HH:mm" }, new[] { "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x041b, new[] { new[] { "d. M. yyyy", "d.M.yyyy", "d. M. yy", "d.M.yy", "dd.MM.yyyy", "dd.MM.yy", "yyyy-MM-dd" }, new[] { "d. MMMM yyyy", "dd. MMMM yyyy" }, new[] { "H:mm", "HH:mm", "H.mm" }, new[] { "H:mm:ss", "HH:mm:ss", "H.mm.ss" } } },
-                       { 0x041c, new[] { new[] { "yyyy-MM-dd", "yy-MM-dd" }, new[] { "yyyy-MM-dd" }, new[] { "h:mm.tt", "HH:mm" }, new[] { "h:mm:ss.tt", "HH:mm:ss" } } },
-                       { 0x041d, new[] { new[] { "yyyy-MM-dd", "yy-MM-dd" }, new[] { "'den 'd MMMM yyyy", "dddd' den 'd MMMM yyyy" }, new[] { "HH:mm", "H:mm", "'kl 'H:mm" }, new[] { "HH:mm:ss", "H:mm:ss", "'kl 'H:mm:ss" } } },
-                       { 0x041e, new[] { new[] { "d/M/yyyy", "d/M/yy", "dd/MM/yy", "dd/MM/yyyy", "d MMM yyyy", "dd MMM yyyy", "yyyy-MM-dd" }, new[] { "d MMMM yyyy", "ddd d MMMM yyyy", "'วัน'dddd'ที่' d MMMM gg yyyy" }, new[] { "H:mm", "HH:mm", "h:mm tt", "hh:mm tt" }, new[] { "H:mm:ss", "HH:mm:ss", "h:mm:ss tt", "hh:mm:ss tt" } } },
-                       { 0x041f, new[] { new[] { "dd.MM.yyyy", "dd.MM.yy", "yyyy-MM-dd" }, new[] { "dd MMMM yyyy dddd", "dd MMMM yyyy" }, new[] { "HH:mm" }, new[] { "HH:mm:ss" } } },
-                       { 0x0420, new[] { new[] { "dd/MM/yyyy", "dd/MM/yy", "yyyy-MM-dd" }, new[] { "dd MMMM, yyyy", "dddd, dd MMMM, yyyy" }, new[] { "h:mm tt", "hh:mm tt", "H:mm", "HH:mm" }, new[] { "h:mm:ss tt", "hh:mm:ss tt", "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x0421, new[] { new[] { "dd/MM/yyyy", "dd/MM/yy", "yyyy-MM-dd" }, new[] { "dd MMMM yyyy" }, new[] { "H:mm", "HH:mm" }, new[] { "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x0422, new[] { new[] { "dd.MM.yyyy", "dd.MM.yy", "yyyy-MM-dd" }, new[] { "d MMMM yyyy' р.'" }, new[] { "H:mm", "HH:mm" }, new[] { "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x0423, new[] { new[] { "dd.MM.yyyy", "dd.MM.yy", "yyyy-MM-dd" }, new[] { "d MMMM yyyy" }, new[] { "H:mm", "HH:mm" }, new[] { "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x0424, new[] { new[] { "d.M.yyyy", "d.M.yy", "d. M. yyyy", "dd.MM.yyyy", "d. M. yy", "dd.MM.yy", "dd. MM. yy", "yyyy-MM-dd" }, new[] { "d. MMMM yyyy", "dd. MMMM yyyy", "dddd, d. MMMM yyyy" }, new[] { "H:mm", "HH:mm" }, new[] { "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x0425, new[] { new[] { "d.MM.yyyy", "dd.MM.yyyy", "dd.MM.yy", "yyyy-MM-dd" }, new[] { "d. MMMM yyyy'. a.'", "dd. MMMM yyyy'. a.'", "dddd, d. MMMM yyyy" }, new[] { "H:mm", "HH:mm" }, new[] { "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x0426, new[] { new[] { "yyyy.MM.dd.", "yy.MM.dd.", "yyyy-MM-dd" }, new[] { "dddd, yyyy'. gada 'd. MMMM" }, new[] { "H:mm", "HH:mm" }, new[] { "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x0427, new[] { new[] { "yyyy.MM.dd", "yyyy-MM-dd" }, new[] { "yyyy 'm.' MMMM d 'd.'" }, new[] { "HH:mm" }, new[] { "HH:mm:ss" } } },
-                       { 0x0428, new[] { new[] { "dd.MM.yy", "yyyy-MM-dd" }, new[] { "d MMMM yyyy" }, new[] { "H:mm", "HH:mm" }, new[] { "H:mm:ss" } } },
-                       { 0x0429, new[] { new[] { "MM/dd/yyyy", "MM/dd/yy" }, new[] { "dddd, MMMM dd, yyyy", "MMMM dd, yyyy" }, new[] { "hh:mm tt", "HH:mm" }, new[] { "hh:mm:ss tt", "HH:mm:ss" } } },
-                       { 0x042a, new[] { new[] { "dd/MM/yyyy", "dd/MM/yy", "dd-MM-yy", "dd-MM-yyyy", "yyyy-MM-dd" }, new[] { "dd MMMM yyyy" }, new[] { "h:mm tt", "hh:mm tt", "H:mm", "HH:mm" }, new[] { "h:mm:ss tt", "hh:mm:ss tt", "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x042b, new[] { new[] { "dd.MM.yyyy", "dd.MM.yy", "d/MM/yyyy", "dd/MM/yyyy", "d/MMM/yyyy", "dd/MMM/yyyy", "yyyy-MM-dd" }, new[] { "d MMMM, yyyy", "dddd, d MMMM yyyy", "dddd, dd MMMM yyyy", "dd MMMM yyyy", "d-MMM-yyyy", "dd-MMM-yyyy", "ddd, d-MMMM-yyyy", "ddd, dd-MMMM-yyyy" }, new[] { "H:mm", "HH:mm" }, new[] { "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x042c, new[] { new[] { "dd.MM.yyyy", "dd.MM.yy", "d.M.yy", "dd/MM/yy", "yyyy-MM-dd" }, new[] { "d MMMM yyyy", "dd MMMM yyyy" }, new[] { "H:mm", "HH:mm" }, new[] { "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x042d, new[] { new[] { "yyyy/MM/dd", "yyyy-MM-dd" }, new[] { "dddd, yyyy.'eko' MMMM'k 'd" }, new[] { "HH:mm" }, new[] { "H:mm:ss", "HH:mm:ss", "HH'H'mm'\\''ss'\\'\\''" } } },
-                       { 0x042e, new[] { new[] { "d. M. yyyy", "d. M. yy", "dd.MM.yyyy", "dd.MM.yy", "yyyy-MM-dd" }, new[] { "dddd, 'dnja' d. MMMM yyyy", "dddd, d. MMMM yyyy", "d. MMMM yyyy", "d. M. yyyy" }, new[] { "H.mm 'hodź.'", "HH:mm" }, new[] { "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x042f, new[] { new[] { "dd.MM.yyyy", "dd.MM.yy", "yyyy-MM-dd" }, new[] { "dddd, dd MMMM yyyy" }, new[] { "HH:mm" }, new[] { "HH:mm:ss" } } },
-                       { 0x0432, new[] { new[] { "yyyy/MM/dd", "yy/MM/dd", "yyyy-MM-dd" }, new[] { "dd MMMM yyyy" }, new[] { "hh:mm tt", "h:mm tt", "HH:mm" }, new[] { "hh:mm:ss tt", "h:mm:ss tt", "HH:mm:ss" } } },
-                       { 0x0434, new[] { new[] { "yyyy/MM/dd", "yy/MM/dd", "yyyy-MM-dd" }, new[] { "dd MMMM yyyy" }, new[] { "hh:mm tt", "h:mm tt", "HH:mm" }, new[] { "hh:mm:ss tt", "h:mm:ss tt", "HH:mm:ss" } } },
-                       { 0x0435, new[] { new[] { "yyyy/MM/dd", "yy/MM/dd", "yyyy-MM-dd" }, new[] { "dd MMMM yyyy" }, new[] { "hh:mm tt", "h:mm tt", "HH:mm" }, new[] { "hh:mm:ss tt", "h:mm:ss tt", "HH:mm:ss" } } },
-                       { 0x0436, new[] { new[] { "yyyy/MM/dd", "yy/MM/dd", "yyyy-MM-dd", "yyyy/MMM/dd" }, new[] { "dd MMMM yyyy" }, new[] { "hh:mm tt", "h:mm tt", "HH:mm" }, new[] { "hh:mm:ss tt", "h:mm:ss tt", "HH:mm:ss" } } },
-                       { 0x0437, new[] { new[] { "dd.MM.yyyy", "dd.MM.yy", "d.M.yy", "dd/MM/yy", "yyyy-MM-dd" }, new[] { "yyyy 'წლის' dd MM, dddd" }, new[] { "H:mm", "HH:mm" }, new[] { "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x0438, new[] { new[] { "dd-MM-yyyy", "dd-MM-yy", "yyyy-MM-dd" }, new[] { "d. MMMM yyyy" }, new[] { "HH:mm", "HH.mm" }, new[] { "HH:mm:ss", "HH.mm.ss" } } },
-                       { 0x0439, new[] { new[] { "dd-MM-yyyy", "dd-MM-yy", "d-M-yy", "d.M.yy", "yyyy-MM-dd" }, new[] { "dd MMMM yyyy", "d MMMM yyyy" }, new[] { "HH:mm", "H:mm", "tt hh:mm", "tt h:mm" }, new[] { "HH:mm:ss", "H:mm:ss", "tt hh:mm:ss", "tt h:mm:ss" } } },
-                       { 0x043a, new[] { new[] { "dd/MM/yyyy", "yyyy-MM-dd", "ddMMyyyy", "d-M-yyyy", "d/M/yyyy" }, new[] { "dddd, d' ta\\' 'MMMM yyyy", "d' ta\\' 'MMMM yyyy", "dd MMM yyyy" }, new[] { "HH:mm", "h:mm tt", "H:mm", "hh:mm tt" }, new[] { "HH:mm:ss", "h:mm:ss tt", "H:mm:ss", "hh:mm:ss tt" } } },
-                       { 0x043b, new[] { new[] { "dd.MM.yyyy", "dd.MM.yy", "d.M.yy", "yyyy-MM-dd" }, new[] { "MMMM d'. b. 'yyyy" }, new[] { "HH:mm", "H:mm", "HH.mm" }, new[] { "HH:mm:ss", "H:mm:ss", "HH.mm.ss" } } },
-                       { 0x043e, new[] { new[] { "dd/MM/yyyy", "dd/MM/yy", "yyyy-MM-dd" }, new[] { "dd MMMM yyyy" }, new[] { "H:mm", "HH:mm" }, new[] { "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x043f, new[] { new[] { "dd.MM.yyyy", "dd.MM.yy", "d.M.yy", "dd/MM/yy", "yyyy-MM-dd" }, new[] { "d MMMM yyyy 'ж.'", "dd MMMM yyyy 'ж.'" }, new[] { "H:mm", "HH:mm" }, new[] { "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x0440, new[] { new[] { "dd.MM.yy", "yyyy-MM-dd" }, new[] { "d'-'MMMM yyyy'-ж.'" }, new[] { "H:mm" }, new[] { "H:mm:ss" } } },
-                       { 0x0441, new[] { new[] { "M/d/yyyy", "M/d/yy", "MM/dd/yy", "MM/dd/yyyy", "yy/MM/dd", "yyyy-MM-dd", "dd-MMM-yy" }, new[] { "dddd, MMMM dd, yyyy", "MMMM dd, yyyy", "dddd, dd MMMM, yyyy", "dd MMMM, yyyy" }, new[] { "h:mm tt", "hh:mm tt", "H:mm", "HH:mm" }, new[] { "h:mm:ss tt", "hh:mm:ss tt", "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x0442, new[] { new[] { "dd.MM.yy", "yyyy-MM-dd" }, new[] { "yyyy 'ý.' MMMM d", "yyyy 'ý.' MMMM dd" }, new[] { "H:mm", "HH:mm" }, new[] { "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x0443, new[] { new[] { "dd/MM yyyy", "dd.MM.yy", "d.M.yy", "dd/MM/yy", "yyyy-MM-dd" }, new[] { "yyyy 'yil' d-MMMM", "d MMMM yyyy", "dd MMMM yyyy" }, new[] { "HH:mm", "H:mm" }, new[] { "HH:mm:ss", "H:mm:ss" } } },
-                       { 0x0444, new[] { new[] { "dd.MM.yyyy", "dd.MM.yy", "d.M.yy", "dd/MM/yy", "yyyy-MM-dd" }, new[] { "d MMMM yyyy", "dd MMMM yyyy" }, new[] { "H:mm", "HH:mm" }, new[] { "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x0445, new[] { new[] { "dd-MM-yy", "d-M-yy", "d.M.yy", "dd-MM-yyyy", "yyyy-MM-dd" }, new[] { "dd MMMM yyyy", "d MMMM yyyy" }, new[] { "HH.mm", "H.mm", "tt hh.mm", "tt h.mm" }, new[] { "HH.mm.ss", "H.mm.ss", "tt hh.mm.ss", "tt h.mm.ss" } } },
-                       { 0x0446, new[] { new[] { "dd-MM-yy", "d-M-yy", "d.M.yy", "dd-MM-yyyy", "yyyy-MM-dd" }, new[] { "dd MMMM yyyy dddd", "d MMMM yyyy" }, new[] { "tt hh:mm", "tt h:mm", "H:mm", "HH:mm" }, new[] { "tt hh:mm:ss", "tt h:mm:ss", "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x0447, new[] { new[] { "dd-MM-yy", "d-M-yy", "d.M.yy", "dd-MM-yyyy", "yyyy-MM-dd" }, new[] { "dd MMMM yyyy", "d MMMM yyyy" }, new[] { "HH:mm", "H:mm", "tt hh:mm", "tt h:mm" }, new[] { "HH:mm:ss", "H:mm:ss", "tt hh:mm:ss", "tt h:mm:ss" } } },
-                       { 0x0448, new[] { new[] { "dd-MM-yy", "d-M-yy", "d.M.yy", "dd-MM-yyyy", "yyyy-MM-dd" }, new[] { "dd MMMM yyyy", "d MMMM yyyy" }, new[] { "HH:mm", "H:mm", "tt hh:mm", "tt h:mm" }, new[] { "HH:mm:ss", "H:mm:ss", "tt hh:mm:ss", "tt h:mm:ss" } } },
-                       { 0x0449, new[] { new[] { "dd-MM-yyyy", "dd-MM-yy", "d-M-yy", "d.M.yy", "yyyy-MM-dd" }, new[] { "dd MMMM yyyy", "d MMMM yyyy" }, new[] { "HH:mm", "H:mm", "tt hh:mm", "tt h:mm" }, new[] { "HH:mm:ss", "H:mm:ss", "tt hh:mm:ss", "tt h:mm:ss" } } },
-                       { 0x044a, new[] { new[] { "dd-MM-yy", "d-M-yy", "d.M.yy", "dd-MM-yyyy", "yyyy-MM-dd" }, new[] { "dd MMMM yyyy", "d MMMM yyyy" }, new[] { "HH:mm", "H:mm", "tt hh:mm", "tt h:mm" }, new[] { "HH:mm:ss", "H:mm:ss", "tt hh:mm:ss", "tt h:mm:ss" } } },
-                       { 0x044b, new[] { new[] { "dd-MM-yy", "d-M-yy", "d.M.yy", "dd-MM-yyyy", "yyyy-MM-dd" }, new[] { "dd MMMM yyyy", "d MMMM yyyy" }, new[] { "HH:mm", "H:mm", "tt hh:mm", "tt h:mm" }, new[] { "HH:mm:ss", "H:mm:ss", "tt hh:mm:ss", "tt h:mm:ss" } } },
-                       { 0x044c, new[] { new[] { "dd-MM-yy", "d-M-yy", "d.M.yy", "dd-MM-yyyy", "yyyy-MM-dd" }, new[] { "dd MMMM yyyy", "d MMMM yyyy" }, new[] { "HH.mm", "H.mm", "tt hh.mm", "tt h.mm" }, new[] { "HH.mm.ss", "H.mm.ss", "tt hh.mm.ss", "tt h.mm.ss" } } },
-                       { 0x044d, new[] { new[] { "dd-MM-yyyy" }, new[] { "yyyy,MMMM dd, dddd" }, new[] { "tt h:mm", "tt hh:mm" }, new[] { "tt h:mm:ss", "tt hh:mm:ss" } } },
-                       { 0x044e, new[] { new[] { "dd-MM-yyyy", "dd-MM-yy", "d-M-yy", "d.M.yy", "yyyy-MM-dd" }, new[] { "dd MMMM yyyy", "d MMMM yyyy" }, new[] { "HH:mm", "H:mm", "tt hh:mm", "tt h:mm" }, new[] { "HH:mm:ss", "H:mm:ss", "tt hh:mm:ss", "tt h:mm:ss" } } },
-                       { 0x044f, new[] { new[] { "dd-MM-yyyy", "dd-MM-yy", "d-M-yy", "d.M.yy", "yyyy-MM-dd" }, new[] { "dd MMMM yyyy dddd", "d MMMM yyyy" }, new[] { "HH:mm", "H:mm", "tt hh:mm", "tt h:mm" }, new[] { "HH:mm:ss", "H:mm:ss", "tt hh:mm:ss", "tt h:mm:ss" } } },
-                       { 0x0450, new[] { new[] { "yy.MM.dd", "yyyy-MM-dd" }, new[] { "yyyy 'оны' MMMM d" }, new[] { "H:mm" }, new[] { "H:mm:ss" } } },
-                       { 0x0451, new[] { new[] { "yyyy/M/d", "yyyy-M-d", "yyyy.M.d", "yyyy.MM.dd", "yyyy-MM-dd", "yyyy/MM/dd", "yy-M-d", "yy/M/d", "yy.M.d" }, new[] { "yyyy'ལོའི་ཟླ' M'ཚེས' d", "yyyy'ལོའི་ཟླ' M'ཚེས' d dddd" }, new[] { "HH:mm" }, new[] { "HH:mm:ss" } } },
-                       { 0x0452, new[] { new[] { "dd/MM/yyyy", "dd/MM/yy", "d/M/yy", "d.M.yy", "yyyy-MM-dd" }, new[] { "dd MMMM yyyy", "d MMMM yyyy" }, new[] { "HH:mm", "H:mm", "hh:mm tt", "h:mm tt" }, new[] { "HH:mm:ss", "H:mm:ss", "hh:mm:ss tt", "h:mm:ss tt" } } },
-                       { 0x0453, new[] { new[] { "yyyy-MM-dd" }, new[] { "d MMMM yyyy", "ddd d MMMM yyyy" }, new[] { "H:mm tt" }, new[] { "HH:mm:ss" } } },
-                       { 0x0454, new[] { new[] { "dd/MM/yyyy", "yyyy-MM-dd" }, new[] { "dd MMMM yyyy" }, new[] { "H:mm tt" }, new[] { "HH:mm:ss" } } },
-                       { 0x0456, new[] { new[] { "dd/MM/yyyy", "dd/MM/yy", "d/MM/yy", "d/M/yy", "dd-MM-yy", "dd.MM.yy", "yyyy-MM-dd" }, new[] { "dddd, dd' de 'MMMM' de 'yyyy", "dddd d' de 'MMMM' de 'yyyy", "d' de 'MMMM' de 'yyyy" }, new[] { "H:mm", "HH:mm", "hh:mm tt", "HH'H'mm'\\''" }, new[] { "H:mm:ss", "HH:mm:ss", "hh:mm:ss tt", "HH'H'mm'\\''ss'\\'\\''" } } },
-                       { 0x0457, new[] { new[] { "dd-MM-yyyy", "dd-MM-yy", "d-M-yy", "d.M.yy", "yyyy-MM-dd" }, new[] { "dd MMMM yyyy", "d MMMM yyyy" }, new[] { "HH:mm", "H:mm", "tt hh:mm", "tt h:mm" }, new[] { "HH:mm:ss", "H:mm:ss", "tt hh:mm:ss", "tt h:mm:ss" } } },
-                       { 0x045a, new[] { new[] { "dd/MM/yyyy", "dd/MM/yy", "yyyy-MM-dd" }, new[] { "dd MMMM, yyyy", "dddd, dd MMMM, yyyy" }, new[] { "hh:mm tt", "HH:mm" }, new[] { "hh:mm:ss tt", "HH:mm:ss" } } },
-                       { 0x045b, new[] { new[] { "yyyy-MM-dd", "yyyy/MM/dd", "yy/MM/dd", "dd/MM/yyyy", "dd/MM/yy" }, new[] { "yyyy MMMM' මස 'dd' වැනිදා 'dddd" }, new[] { "h:mm tt", "hh:mm tt", "H:mm", "HH:mm" }, new[] { "h:mm:ss tt", "hh:mm:ss tt", "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x045d, new[] { new[] { "d/M/yyyy", "d/M/yy", "dd/MM/yy", "yy/MM/dd", "yyyy-MM-dd", "dd-MMM-yy" }, new[] { "dddd,MMMM dd,yyyy", "MMMM dd,yyyy", "dddd, dd MMMM, yyyy", "dd MMMM, yyyy" }, new[] { "h:mm tt", "hh:mm tt", "H:mm", "HH:mm" }, new[] { "h:mm:ss tt", "hh:mm:ss tt", "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x045e, new[] { new[] { "d/M/yyyy", "yyyy-MM-dd" }, new[] { "dddd '፣' MMMM d 'ቀን' yyyy" }, new[] { "h:mm tt" }, new[] { "h:mm:ss tt" } } },
-                       { 0x0461, new[] { new[] { "M/d/yyyy", "M/d/yy", "MM/dd/yy", "MM/dd/yyyy", "yy/MM/dd", "yyyy-MM-dd", "dd-MMM-yy" }, new[] { "dddd, MMMM dd, yyyy", "MMMM dd, yyyy", "dddd, dd MMMM, yyyy", "dd MMMM, yyyy" }, new[] { "h:mm tt", "hh:mm tt", "H:mm", "HH:mm" }, new[] { "h:mm:ss tt", "hh:mm:ss tt", "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x0462, new[] { new[] { "d-M-yyyy", "d-M-yy", "dd-MM-yy", "dd/MM/yy", "dd.MM.yy", "yyyy-MM-dd" }, new[] { "dddd d MMMM yyyy", "d-MMM-yy", "d MMMM yyyy", "d MMM yy" }, new[] { "H:mm", "HH:mm", "H:mm", "H.mm" }, new[] { "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x0463, new[] { new[] { "dd/MM/yy", "dd/MM/yyyy" }, new[] { "dd/MM/yyyy", "dd/MMMM/yyyy", "dddd, dd MMMM, yyyy", "dd/MM/yyyy 'هـ'" }, new[] { "h:mm tt", "H:mm" }, new[] { "h:mm:ss tt", "H:mm:ss" } } },
-                       { 0x0464, new[] { new[] { "M/d/yyyy", "M/d/yy", "MM/dd/yy", "MM/dd/yyyy", "yy/MM/dd", "yyyy-MM-dd", "dd-MMM-yy" }, new[] { "dddd, MMMM dd, yyyy", "MMMM dd, yyyy", "dddd, dd MMMM, yyyy", "dd MMMM, yyyy" }, new[] { "h:mm tt", "hh:mm tt", "H:mm", "HH:mm" }, new[] { "h:mm:ss tt", "hh:mm:ss tt", "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x0465, new[] { new[] { "dd/MM/yy", "dd/MM/yyyy" }, new[] { "dd/MM/yyyy", "dd/MMMM/yyyy", "dddd, dd MMMM, yyyy", "dd/MM/yyyy 'هـ'" }, new[] { "HH:mm", "hh:mm tt" }, new[] { "HH:mm:ss", "hh:mm:ss tt" } } },
-                       { 0x0468, new[] { new[] { "d/M/yyyy", "d/M/yy", "dd/MM/yy", "dd/MM/yyyy", "yy/MM/dd", "yyyy-MM-dd", "dd-MMM-yy" }, new[] { "dddd, MMMM dd, yyyy", "MMMM dd, yyyy", "dddd, dd MMMM, yyyy", "dd MMMM, yyyy" }, new[] { "h:mm tt", "hh:mm tt", "H:mm", "HH:mm" }, new[] { "h:mm:ss tt", "hh:mm:ss tt", "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x046a, new[] { new[] { "d/M/yyyy", "d/M/yy", "dd/MM/yy", "dd/MM/yyyy", "yy/MM/dd", "yyyy-MM-dd", "dd-MMM-yy" }, new[] { "dddd, MMMM dd, yyyy", "MMMM dd, yyyy", "dddd, dd MMMM, yyyy", "dd MMMM, yyyy" }, new[] { "h:mm tt", "hh:mm tt", "H:mm", "HH:mm" }, new[] { "h:mm:ss tt", "hh:mm:ss tt", "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x046b, new[] { new[] { "dd/MM/yyyy", "dd/MM/yy", "d/M/yy", "dd-MM-yy", "yyyy-MM-dd" }, new[] { "dddd, dd' de 'MMMM' de 'yyyy", "dddd d' de 'MMMM' de 'yyyy", "d' de 'MMMM' de 'yyyy" }, new[] { "hh:mm tt", "h:mm tt", "H:mm", "HH:mm" }, new[] { "hh:mm:ss tt", "h:mm:ss tt", "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x046c, new[] { new[] { "yyyy/MM/dd", "yy/MM/dd", "yyyy-MM-dd" }, new[] { "dd MMMM yyyy" }, new[] { "hh:mm tt", "h:mm tt", "HH:mm" }, new[] { "hh:mm:ss tt", "h:mm:ss tt", "HH:mm:ss" } } },
-                       { 0x046d, new[] { new[] { "dd.MM.yy", "yyyy-MM-dd" }, new[] { "d MMMM yyyy 'й'" }, new[] { "H:mm" }, new[] { "H:mm:ss" } } },
-                       { 0x046e, new[] { new[] { "dd/MM/yyyy", " dd/MM/yy", "dd.MM.yy", "dd/MM/yy", "dd-MM-yy", "yyyy-MM-dd" }, new[] { "dddd d MMMM yyyy", "d MMM yy", "d MMMM yyyy" }, new[] { "HH:mm", "H:mm", "H.mm", "H.mm' Auer'" }, new[] { "HH:mm:ss", "H:mm:ss' Auer'", "HH:mm:ss' Auer'", "HHmmss" } } },
-                       { 0x046f, new[] { new[] { "dd-MM-yyyy", "dd-MM-yy", "yyyy-MM-dd", "yyyy MM dd" }, new[] { "d. MMMM yyyy", "dd. MMMM yyyy" }, new[] { "HH:mm", "H:mm" }, new[] { "HH:mm:ss", "H:mm:ss" } } },
-                       { 0x0470, new[] { new[] { "d/M/yyyy", "d/M/yy", "dd/MM/yy", "dd/MM/yyyy", "yy/MM/dd", "yyyy-MM-dd", "dd-MMM-yy" }, new[] { "dddd, MMMM dd, yyyy", "MMMM dd, yyyy", "dddd, dd MMMM, yyyy", "dd MMMM, yyyy" }, new[] { "h:mm tt", "hh:mm tt", "H:mm", "HH:mm" }, new[] { "h:mm:ss tt", "hh:mm:ss tt", "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x0478, new[] { new[] { "yyyy/M/d", "yyyy-M-d", "yyyy.M.d", "yyyy.MM.dd", "yyyy-MM-dd", "yyyy/MM/dd" }, new[] { "yyyy'ꈎ' M'ꆪ' d'ꑍ'", "dddd, yyyy'ꈎ' M'ꆪ' d'ꑍ'", "yyyy'ꈎ' M'ꆪ' d'ꑍ', dddd" }, new[] { "tt h:mm", "H:mm" }, new[] { "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x047a, new[] { new[] { "dd-MM-yyyy", "dd-MM-yy", "dd/MM/yy", "d/M/yy", "yyyy-MM-dd" }, new[] { "dddd, dd' de 'MMMM' de 'yyyy", "dddd d' de 'MMMM' de 'yyyy", "d' de 'MMMM' de 'yyyy" }, new[] { "H:mm", "HH:mm" }, new[] { "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x047c, new[] { new[] { "M/d/yyyy", "M/d/yy", "MM/dd/yy", "MM/dd/yyyy", "yy/MM/dd", "yyyy-MM-dd", "dd-MMM-yy" }, new[] { "dddd, MMMM dd, yyyy", "MMMM dd, yyyy", "dddd, dd MMMM, yyyy", "dd MMMM, yyyy" }, new[] { "h:mm tt", "hh:mm tt", "HH:mm", "H:mm" }, new[] { "h:mm:ss tt", "hh:mm:ss tt", "HH:mm:ss", "H:mm:ss" } } },
-                       { 0x047e, new[] { new[] { "dd/MM/yyyy", "dd/MM/yy", "dd.MM.yy", "dd-MM-yy", "yyyy-MM-dd" }, new[] { "dddd d MMMM yyyy", "d MMM yy", "d MMMM yyyy" }, new[] { "HH:mm", "H:mm", "HH.mm", "HH' h 'mm", "HH'h'mm" }, new[] { "HH:mm:ss", "H:mm:ss" } } },
-                       { 0x0480, new[] { new[] { "yyyy-M-d", "yyyy.M.d", "yyyy-MM-dd", "yyyy.MM.dd" }, new[] { "yyyy-'يىلى' MMMM d-'كۈنى،'", "yyyy-'يىلى' MMMM d-'كۈنى،' dddd" }, new[] { "H:mm", "HH:mm", "tt h:mm", "tt hh:mm" }, new[] { "H:mm:ss", "HH:mm:ss", "tt h:mm:ss", "tt hh:mm:ss" } } },
-                       { 0x0481, new[] { new[] { "dd/MM/yyyy", "d/MM/yy", "dd/MM/yy", "d.MM.yy", "yyyy-MM-dd" }, new[] { "dddd, dd MMMM, yyyy", "d MMMM yyyy" }, new[] { "h:mm tt", "hh:mm tt", "HH:mm", "H:mm" }, new[] { "h:mm:ss tt", "hh:mm:ss tt", "HH:mm:ss", "H:mm:ss" } } },
-                       { 0x0482, new[] { new[] { "dd/MM/yyyy", "dd/MM/yy", "dd.MM.yy", "dd-MM-yy", "yyyy-MM-dd" }, new[] { "dddd,' lo 'd MMMM' de 'yyyy" }, new[] { "HH:mm", "H:mm", "HH.mm", "HH' h 'mm", "HH'h'mm" }, new[] { "HH:mm:ss", "H:mm:ss" } } },
-                       { 0x0483, new[] { new[] { "dd/MM/yyyy", "dd/MM/yy", "dd.MM.yy", "dd-MM-yy", "yyyy-MM-dd" }, new[] { "dddd d MMMM yyyy", "d MMM yy", "d MMMM yyyy" }, new[] { "HH:mm", "H:mm", "HH.mm", "HH' h 'mm", "HH'h'mm" }, new[] { "HH:mm:ss", "H:mm:ss" } } },
-                       { 0x0484, new[] { new[] { "dd/MM/yyyy", "dd/MM/yy", "dd.MM.yy", "dd-MM-yy", "yyyy-MM-dd" }, new[] { "dddd d MMMM yyyy", "d MMM yy", "d MMMM yyyy" }, new[] { "HH:mm", "H:mm", "HH.mm", "HH' h 'mm", "HH'h'mm" }, new[] { "HH:mm:ss", "H:mm:ss" } } },
-                       { 0x0485, new[] { new[] { "MM.dd.yyyy", "MM.dd.yy", "d.M.yy", "MM/dd/yy", "MM-dd-yyyy" }, new[] { "MMMM d yyyy 'с.'", "MMMM dd yyyy 'с.'" }, new[] { "H:mm", "HH:mm" }, new[] { "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x0486, new[] { new[] { "dd/MM/yyyy", "dd/MM/yy", "d/MM/yyyy", "d/M/yy", "dd-MM-yy", "yyyy-MM-dd" }, new[] { "dddd, dd' de 'MMMM' de 'yyyy", "dddd d' de 'MMMM' de 'yyyy", "d' de 'MMMM' de 'yyyy" }, new[] { "hh:mm tt", "h:mm tt", "H:mm", "HH:mm" }, new[] { "hh:mm:ss tt", "h:mm:ss tt", "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x0487, new[] { new[] { "M/d/yyyy", "M/d/yy", "MM/dd/yy", "MM/dd/yyyy", "yy/MM/dd", "yyyy-MM-dd", "dd-MMM-yy" }, new[] { "dddd, MMMM dd, yyyy", "MMMM dd, yyyy", "dddd, dd MMMM, yyyy", "dd MMMM, yyyy" }, new[] { "h:mm tt", "hh:mm tt", "H:mm", "HH:mm" }, new[] { "h:mm:ss tt", "hh:mm:ss tt", "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x0488, new[] { new[] { "dd/MM/yyyy", "dd/MM/yy", "dd.MM.yy", "dd-MM-yy", "yyyy-MM-dd" }, new[] { "dddd d MMMM yyyy", "d MMM yy", "d MMMM yyyy" }, new[] { "HH:mm", "H:mm", "HH.mm", "HH' h 'mm" }, new[] { "HH:mm:ss", "H:mm:ss" } } },
-                       { 0x048c, new[] { new[] { "dd/MM/yy", "dd/MM/yyyy" }, new[] { "dd/MM/yyyy", "dd/MMMM/yyyy", "dddd, dd MMMM, yyyy", "dd/MM/yyyy 'هـ'" }, new[] { "h:mm tt", "H:mm" }, new[] { "h:mm:ss tt", "H:mm:ss" } } },
-                       { 0x0491, new[] { new[] { "dd/MM/yyyy", "dd/MM/yy", "d/M/yy", "d.M.yy", "yyyy-MM-dd" }, new[] { "dd MMMM yyyy", "d MMMM yyyy" }, new[] { "HH:mm", "H:mm", "hh:mm tt", "h:mm tt" }, new[] { "HH:mm:ss", "H:mm:ss", "hh:mm:ss tt", "h:mm:ss tt" } } },
-                       { 0x0801, new[] { new[] { "dd/MM/yyyy", "dd/MM/yy", "yyyy-MM-dd" }, new[] { "dd MMMM, yyyy", "dddd, dd MMMM, yyyy" }, new[] { "hh:mm tt", "HH:mm" }, new[] { "hh:mm:ss tt", "HH:mm:ss" } } },
-                       { 0x0804, new[] { new[] { "yyyy/M/d", "yyyy-M-d", "yyyy.M.d", "yyyy-MM-dd", "yyyy/MM/dd", "yyyy.MM.dd", "yy-M-d", "yy/M/d", "yy.M.d", "yy/MM/dd" }, new[] { "yyyy'年'M'月'd'日'", "yyyy'年'M'月'd'日',dddd", "dddd,yyyy'年'M'月'd'日'" }, new[] { "H:mm", "HH:mm", "tt h:mm", "tt hh:mm" }, new[] { "H:mm:ss", "HH:mm:ss", "tt h:mm:ss", "tt hh:mm:ss" } } },
-                       { 0x0807, new[] { new[] { "dd.MM.yyyy", "dd.MM.yy", "d.MM.yy", "dd. M. yy", "d.M.yy", "yyyy-MM-dd" }, new[] { "dddd, d. MMMM yyyy", "d. MMMM yyyy", "d. MMM yy" }, new[] { "HH:mm", "H:mm", "H.mm' h'", "HH.mm' h'", "H.mm' Uhr'", "HHmm", "HH", "H' h'", "H' Uhr'" }, new[] { "HH:mm:ss", "H:mm:ss", "HH:mm:ss' h'", "H:mm:ss' h'", "HH:mm:ss' Uhr'", "H:mm:ss' Uhr'", "HHmmss" } } },
-                       { 0x0809, new[] { new[] { "dd/MM/yyyy", "dd/MM/yy", "d/M/yy", "d.M.yy", "yyyy-MM-dd" }, new[] { "dd MMMM yyyy", "d MMMM yyyy" }, new[] { "HH:mm", "H:mm", "hh:mm tt", "h:mm tt" }, new[] { "HH:mm:ss", "H:mm:ss", "hh:mm:ss tt", "h:mm:ss tt" } } },
-                       { 0x080a, new[] { new[] { "dd/MM/yyyy", "dd/MMM/yyyy", "dd/MM/yy", "d/MM/yy", "d/M/yy", "dd-MM-yy", "yyyy-MM-dd" }, new[] { "dddd, dd' de 'MMMM' de 'yyyy", "dddd d' de 'MMMM' de 'yyyy", "d' de 'MMMM' de 'yyyy" }, new[] { "hh:mm tt", "h:mm tt", "H:mm", "HH:mm" }, new[] { "hh:mm:ss tt", "h:mm:ss tt", "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x080c, new[] { new[] { "d/MM/yyyy", "d/MM/yy", "dd.MM.yy", "yy/MM/dd", "dd-MM-yy", "dd/MM/yyyy", "yyyy-MM-dd" }, new[] { "dddd d MMMM yyyy", "d MMMM yyyy", "dd-MMM-yy" }, new[] { "HH:mm", "H:mm", "HH.mm", "HH' h 'mm", "HH'h'mm" }, new[] { "HH:mm:ss", "H:mm:ss" } } },
-                       { 0x0810, new[] { new[] { "dd.MM.yyyy", "dd.MM.yy", "dd. MM. yy", "d/M/yy", "dd.M.yy", "yyyy-MM-dd" }, new[] { "dddd, d. MMMM yyyy", "d-MMM-yy", "d MMMM yyyy" }, new[] { "HH:mm", "H:mm", "H.mm' h'" }, new[] { "HH:mm:ss", "H:mm:ss" } } },
-                       { 0x0813, new[] { new[] { "d/MM/yyyy", "d/MM/yy", "dd-MM-yy", "dd.MM.yy", "dd.MMM.yyyy", "yyyy-MM-dd" }, new[] { "dddd d MMMM yyyy", "dd-MMM-yy", "d MMMM yyyy", "dd MMM yy" }, new[] { "H:mm", "HH:mm", "H.mm' u.'" }, new[] { "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x0814, new[] { new[] { "dd.MM.yyyy", "dd.MM.yy", "d.M.yy", "yyyy-MM-dd", "dd.MMM.yyyy" }, new[] { "d. MMMM yyyy", "dd. MMMM yyyy" }, new[] { "HH:mm", "H:mm", "'kl 'HH.mm", "HH.mm" }, new[] { "HH:mm:ss", "H:mm:ss", "'kl 'HH.mm.ss", "HH.mm.ss" } } },
-                       { 0x0816, new[] { new[] { "dd-MM-yyyy", "dd-MMM-yyyy", "yy.MM.dd", "d.M.yy", "dd/MM/yy", "yyyy-MM-dd" }, new[] { "dddd, d' de 'MMMM' de 'yyyy", "d' de 'MMMM' de 'yyyy", "d/MMM/yy", "d.MMM.yy" }, new[] { "HH:mm", "HH'H'mm'm'" }, new[] { "HH:mm:ss" } } },
-                       { 0x081a, new[] { new[] { "d.M.yyyy", "d.M.yy", "d. M. yyyy", "dd.MM.yyyy", "d. M. yy", "dd.MM.yy", "dd. MM. yy", "yyyy-MM-dd" }, new[] { "d. MMMM yyyy", "dd. MMMM yyyy", "dddd, d. MMMM yyyy" }, new[] { "H:mm", "HH:mm" }, new[] { "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x081d, new[] { new[] { "d.M.yyyy", "dd.MM.yyyy", "d.M.yy", "yyyy-MM-dd" }, new[] { "'den 'd MMMM yyyy", "dddd' den 'd MMMM yyyy" }, new[] { "HH:mm", "H:mm", "'kl 'H:mm" }, new[] { "HH:mm:ss", "H:mm:ss", "'kl 'H:mm:ss" } } },
-                       { 0x082c, new[] { new[] { "dd.MM.yyyy", "dd.MM.yy", "d.M.yy", "dd/MM/yy", "yyyy-MM-dd" }, new[] { "d MMMM yyyy", "dd MMMM yyyy" }, new[] { "H:mm", "HH:mm" }, new[] { "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x082e, new[] { new[] { "d. M. yyyy", "d. M. yy", "dd.MM.yyyy", "dd.MM.yy", "yyyy-MM-dd" }, new[] { "dddd, 'dnja' d. MMMM yyyy", "dddd, d. MMMM yyyy", "d. MMMM yyyy", "d. M. yyyy" }, new[] { "H.mm 'goź.'", "HH:mm" }, new[] { "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x083b, new[] { new[] { "yyyy-MM-dd", "yy-MM-dd" }, new[] { "MMMM d'. b. 'yyyy" }, new[] { "HH:mm", "H:mm" }, new[] { "HH:mm:ss", "H:mm:ss" } } },
-                       { 0x083c, new[] { new[] { "dd/MM/yyyy", "dd/MM/yy", "d/M/yy", "d.M.yy", "yyyy-MM-dd" }, new[] { "d MMMM yyyy", "dd MMMM yyyy", "dd MMM yyyy", "d MMM yyyy" }, new[] { "HH:mm", "H:mm" }, new[] { "HH:mm:ss", "H:mm:ss" } } },
-                       { 0x083e, new[] { new[] { "dd/MM/yyyy", "dd/MM/yy", "yyyy-MM-dd" }, new[] { "dd MMMM yyyy" }, new[] { "H:mm", "HH:mm" }, new[] { "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x0843, new[] { new[] { "dd.MM.yyyy", "dd.MM.yy", "dd/MM yyyy", "d.M.yy", "dd/MM/yy", "yyyy-MM-dd" }, new[] { "yyyy 'йил' d-MMMM", "d MMMM yyyy", "dd MMMM yyyy" }, new[] { "HH:mm", "H:mm" }, new[] { "HH:mm:ss", "H:mm:ss" } } },
-                       { 0x0845, new[] { new[] { "dd-MM-yy", "d-M-yy", "d.M.yy", "dd-MM-yyyy", "yyyy-MM-dd" }, new[] { "dd MMMM yyyy", "d MMMM yyyy" }, new[] { "HH.mm", "H.mm", "tt hh.mm", "tt h.mm" }, new[] { "HH.mm.ss", "H.mm.ss", "tt hh.mm.ss", "tt h.mm.ss" } } },
-                       { 0x0850, new[] { new[] { "yyyy/M/d", "yyyy-M-d", "yyyy.M.d", "yyyy.MM.dd", "yyyy-MM-dd", "yyyy/MM/dd", "yy-M-d", "yy/M/d", "yy.M.d", "yy/MM/dd" }, new[] { "yyyy'ᠣᠨ ᠤ᠋' M'ᠰᠠᠷ᠎ᠠ  ᠢᠢᠨ 'd' ᠤ᠋ ᠡᠳᠦᠷ'", "yyyy'ᠣᠨ ᠤ᠋' M'ᠰᠠᠷ᠎ᠠ  ᠢᠢᠨ 'd' ᠤ᠋ ᠡᠳᠦᠷ᠂' dddd" }, new[] { "H:mm" }, new[] { "H:mm:ss" } } },
-                       { 0x085d, new[] { new[] { "d/MM/yyyy", "d/M/yy", "yy-MM-dd", "dd/MM/yyyy", "yy-MM-dd", "yyyy-MM-dd", "dd-MMM-yy" }, new[] { "ddd, MMMM dd,yyyy", "MMMM dd,yyyy", "dddd, dd MMMM, yyyy", "dd MMMM, yyyy" }, new[] { "h:mm tt", "hh:mm tt", "HH:mm", "H:mm" }, new[] { "h:mm:ss tt", "hh:mm:ss tt", "HH:mm:ss", "H:mm:ss" } } },
-                       { 0x085f, new[] { new[] { "dd-MM-yyyy", "dd-MM-yy", "yyyy-MM-dd" }, new[] { "dd MMMM, yyyy", "dddd, dd MMMM, yyyy" }, new[] { "H:mm", "HH:mm", "hh:mm" }, new[] { "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x086b, new[] { new[] { "dd/MM/yyyy", "dd/MM/yy", "d/M/yy", "dd-MM-yy", "yyyy-MM-dd" }, new[] { "dddd, dd' de 'MMMM' de 'yyyy", "dddd d' de 'MMMM' de 'yyyy", "d' de 'MMMM' de 'yyyy" }, new[] { "H:mm", "HH:mm" }, new[] { "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x0c01, new[] { new[] { "dd/MM/yyyy", "dd/MM/yy", "yyyy-MM-dd" }, new[] { "dd MMMM, yyyy", "dddd, dd MMMM, yyyy" }, new[] { "hh:mm tt", "HH:mm" }, new[] { "hh:mm:ss tt", "HH:mm:ss" } } },
-                       { 0x0c04, new[] { new[] { "d/M/yyyy", "d/M/yy", "dd/MM/yy", "yy/M/d", "yy/MM/dd", "yyyy/M/d", "yyyy/MM/dd", "yyyy-MM-dd" }, new[] { "yyyy'年'M'月'd'日'", "yyyy'年'MM'月'dd'日'" }, new[] { "H:mm", "HH:mm" }, new[] { "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x0c07, new[] { new[] { "dd.MM.yyyy", "dd.MM.yy", "dd.M.yyyy", "yyyy-MM-dd" }, new[] { "dddd, dd. MMMM yyyy", "d.MMMM yyyy", "d.MMMyyyy", "d MMM yyyy" }, new[] { "HH:mm", "H:mm", "HH:mm' Uhr'", "H:mm' Uhr'", "HHmm", "HH", "H' Uhr'" }, new[] { "HH:mm:ss", "H:mm:ss", "HH:mm:ss' Uhr'", "H:mm:ss' Uhr'", "HHmmss" } } },
-                       { 0x0c09, new[] { new[] { "d/MM/yyyy", "d/MM/yy", "d/M/yy", "d/M/yyyy", "dd/MM/yy", "dd/MM/yyyy", "dd-MMM-yy", "dd-MMMM-yyyy", "yyyy-MM-dd", "yy/MM/dd", "yyyy/MM/dd" }, new[] { "dddd, d MMMM yyyy", "d MMMM yyyy" }, new[] { "h:mm tt", "H:mm", "HH:mm" }, new[] { "h:mm:ss tt", "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x0c0a, new[] { new[] { "dd/MM/yyyy", "dd/MM/yy", "d/MM/yy", "d/M/yy", "dd-MM-yy", "dd.MM.yy", "yyyy-MM-dd", "dd.MMM.yyyy" }, new[] { "dddd, dd' de 'MMMM' de 'yyyy", "dddd d' de 'MMMM' de 'yyyy", "d' de 'MMMM' de 'yyyy" }, new[] { "H:mm", "HH:mm", "HH'H'mm'\\''" }, new[] { "H:mm:ss", "HH:mm:ss", "HH'H'mm'\\''ss'\\'\\''" } } },
-                       { 0x0c0c, new[] { new[] { "yyyy-MM-dd", "yy-MM-dd", "dd-MM-yy", "yy MM dd", "dd/MM/yy", "dd/MMM/yyyy" }, new[] { "d MMMM yyyy", "d MMM yyyy" }, new[] { "HH:mm", "H:mm", "HH.mm", "HH' h 'mm", "HH'h'mm" }, new[] { "HH:mm:ss", "H:mm:ss" } } },
-                       { 0x0c1a, new[] { new[] { "d.M.yyyy", "d.M.yy", "d. M. yyyy", "dd.MM.yyyy", "d. M. yy", "dd.MM.yy", "dd. MM. yy", "yyyy-MM-dd" }, new[] { "d. MMMM yyyy", "dd. MMMM yyyy", "dddd, d. MMMM yyyy" }, new[] { "H:mm", "HH:mm" }, new[] { "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x0c3b, new[] { new[] { "d.M.yyyy", "dd.MM.yyyy", "d.M.yy", "yyyy-MM-dd" }, new[] { "MMMM d'. b. 'yyyy" }, new[] { "H:mm", "HH:mm" }, new[] { "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x0c6b, new[] { new[] { "dd/MM/yyyy", "dd/MM/yy", "d/M/yy", "dd-MM-yy", "yyyy-MM-dd" }, new[] { "dddd, dd' de 'MMMM' de 'yyyy", "dddd d' de 'MMMM' de 'yyyy", "d' de 'MMMM' de 'yyyy" }, new[] { "hh:mm tt", "h:mm tt", "H:mm", "HH:mm" }, new[] { "hh:mm:ss tt", "h:mm:ss tt", "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x1001, new[] { new[] { "dd/MM/yyyy", "dd/MM/yy", "yyyy-MM-dd" }, new[] { "dd MMMM, yyyy", "dddd, dd MMMM, yyyy" }, new[] { "hh:mm tt", "HH:mm" }, new[] { "hh:mm:ss tt", "HH:mm:ss" } } },
-                       { 0x1004, new[] { new[] { "d/M/yyyy", "d/M/yy", "dd/MM/yy", "yy/M/d", "yy/MM/dd", "yyyy/M/d", "yyyy/MM/dd", "yyyy-MM-dd" }, new[] { "yyyy'年'M'月'd'日'", "yyyy'年'MM'月'dd'日'" }, new[] { "tt h:mm", "tt hh:mm", "H:mm", "HH:mm" }, new[] { "tt h:mm:ss", "tt hh:mm:ss", "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x1007, new[] { new[] { "dd.MM.yyyy", "dd.MM.yy", "d.MM.yy", "d.M.yy", "d.M.yyyy", "yyyy-MM-dd" }, new[] { "dddd, d. MMMM yyyy", "d. MMMM yyyy", "d. MMM yyyy" }, new[] { "HH:mm", "H:mm", "H.mm", "H.mm' Uhr'" }, new[] { "HH:mm:ss", "H:mm:ss' Uhr'", "HH:mm:ss' Uhr'", "HHmmss" } } },
-                       { 0x1009, new[] { new[] { "dd/MM/yyyy", "dd/MM/yy", "d/M/yy", "yyyy-MM-dd", "yy-MM-dd", "M/dd/yy", "dd-MMM-yy", "dd-MMM-yyyy" }, new[] { "MMMM-dd-yy", "MMMM d, yyyy", "d-MMM-yy", "dddd, MMMM dd, yyyy" }, new[] { "h:mm tt", "hh:mm tt", "HH:mm", "H:mm" }, new[] { "h:mm:ss tt", "hh:mm:ss tt", "HH:mm:ss", "H:mm:ss" } } },
-                       { 0x100a, new[] { new[] { "dd/MM/yyyy", "dd/MM/yy", "d/MM/yyyy", "d/M/yy", "dd-MM-yy", "yyyy-MM-dd" }, new[] { "dddd, dd' de 'MMMM' de 'yyyy", "dddd d' de 'MMMM' de 'yyyy", "d' de 'MMMM' de 'yyyy" }, new[] { "hh:mm tt", "h:mm tt", "H:mm", "HH:mm" }, new[] { "hh:mm:ss tt", "h:mm:ss tt", "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x100c, new[] { new[] { "dd.MM.yyyy", "dd.MM.yy", "dd. M. yy", "d.M.yy", "yyyy-MM-dd" }, new[] { "dddd d MMMM yyyy", "d MMMM yyyy", "d MMM yy" }, new[] { "HH:mm", "H:mm", "HH.mm", "HH' h 'mm", "HH'h'mm" }, new[] { "HH:mm:ss", "H:mm:ss" } } },
-                       { 0x101a, new[] { new[] { "d.M.yyyy.", "d.M.yy.", "d. M. yyyy.", "dd.MM.yyyy.", "d. M. yy.", "dd.MM.yy.", "dd. MM. yy.", "yyyy-MM-dd" }, new[] { "d. MMMM yyyy.", "dd. MMMM yyyy.", "dddd, d. MMMM yyyy." }, new[] { "H:mm", "HH:mm" }, new[] { "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x103b, new[] { new[] { "dd.MM.yyyy", "dd.MM.yy", "d.M.yy", "yyyy-MM-dd" }, new[] { "MMMM d'. b. 'yyyy" }, new[] { "HH:mm", "H:mm", "HH.mm" }, new[] { "HH:mm:ss", "H:mm:ss", "HH.mm.ss" } } },
-                       { 0x1401, new[] { new[] { "dd-MM-yyyy", "dd-MM-yy", "yyyy-MM-dd" }, new[] { "dd MMMM, yyyy", "dddd, dd MMMM, yyyy" }, new[] { "H:mm", "HH:mm", "hh:mm tt" }, new[] { "H:mm:ss", "HH:mm:ss", "hh:mm:ss tt" } } },
-                       { 0x1404, new[] { new[] { "d/M/yyyy", "d/M/yy", "dd/MM/yy", "yy/M/d", "yy/MM/dd", "yyyy/M/d", "yyyy/MM/dd", "yyyy-MM-dd" }, new[] { "yyyy'年'M'月'd'日'", "dddd yyyy'年'M'月'd'日'", "dddd yyyy MM dd", "yyyy MM dd" }, new[] { "H:mm", "HH:mm" }, new[] { "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x1407, new[] { new[] { "dd.MM.yyyy", "dd.MM.yy", "d.MM.yy", "dd. M. yy", "d.M.yy", "yyyy-MM-dd" }, new[] { "dddd, d. MMMM yyyy", "d. MMMM yyyy", "d. MMM yy" }, new[] { "HH:mm", "H:mm", "H.mm' h'", "HH.mm' h'", "H.mm' Uhr'", "HHmm", "HH", "H' h'", "H' Uhr'" }, new[] { "HH:mm:ss", "H:mm:ss", "HH:mm:ss' h'", "H:mm:ss' h'", "HH:mm:ss' Uhr'", "H:mm:ss' Uhr'", "HHmmss" } } },
-                       { 0x1409, new[] { new[] { "d/MM/yyyy", "d/MM/yy", "dd/MM/yy", "d.MM.yy", "yyyy-MM-dd" }, new[] { "dddd, d MMMM yyyy", "d MMMM yyyy" }, new[] { "h:mm tt", "hh:mm tt", "HH:mm", "H:mm" }, new[] { "h:mm:ss tt", "hh:mm:ss tt", "HH:mm:ss", "H:mm:ss" } } },
-                       { 0x140a, new[] { new[] { "dd/MM/yyyy", "dd/MM/yy", "d/M/yy", "dd-MM-yy", "yyyy-MM-dd" }, new[] { "dddd, dd' de 'MMMM' de 'yyyy", "dddd d' de 'MMMM' de 'yyyy", "d' de 'MMMM' de 'yyyy" }, new[] { "hh:mm tt", "h:mm tt", "H:mm", "HH:mm" }, new[] { "hh:mm:ss tt", "h:mm:ss tt", "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x140c, new[] { new[] { "dd/MM/yyyy", "dd/MM/yy", "dd.MM.yy", "dd-MM-yy", "yyyy-MM-dd" }, new[] { "dddd d MMMM yyyy", "d MMM yy", "d MMMM yyyy" }, new[] { "HH:mm", "H:mm", "HH.mm", "HH' h 'mm", "HH'h'mm" }, new[] { "HH:mm:ss", "H:mm:ss" } } },
-                       { 0x141a, new[] { new[] { "d.M.yyyy", "d.M.yy", "d. M. yyyy", "dd.MM.yyyy", "d. M. yy", "dd.MM.yy", "dd. MM. yy", "yyyy-MM-dd" }, new[] { "d. MMMM yyyy", "dd. MMMM yyyy", "dddd, d. MMMM yyyy" }, new[] { "H:mm", "HH:mm" }, new[] { "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x143b, new[] { new[] { "yyyy-MM-dd", "yy-MM-dd" }, new[] { "MMMM d'. b. 'yyyy" }, new[] { "HH:mm", "H:mm" }, new[] { "HH:mm:ss", "H:mm:ss" } } },
-                       { 0x1801, new[] { new[] { "dd-MM-yyyy", "dd-MM-yy", "yyyy-MM-dd" }, new[] { "dd MMMM, yyyy", "dddd, dd MMMM, yyyy" }, new[] { "H:mm", "HH:mm", "hh:mm tt" }, new[] { "H:mm:ss", "HH:mm:ss", "hh:mm:ss tt" } } },
-                       { 0x1809, new[] { new[] { "dd/MM/yyyy", "dd/MM/yy", "d/M/yy", "d.M.yy", "yyyy-MM-dd" }, new[] { "dd MMMM yyyy", "d MMMM yyyy" }, new[] { "HH:mm", "H:mm" }, new[] { "HH:mm:ss", "H:mm:ss" } } },
-                       { 0x180a, new[] { new[] { "MM/dd/yyyy", "MM/dd/yy", "d/M/yy", "dd/MM/yy", "dd-MM-yy", "yyyy-MM-dd" }, new[] { "dddd, dd' de 'MMMM' de 'yyyy", "dddd d' de 'MMMM' de 'yyyy", "d' de 'MMMM' de 'yyyy" }, new[] { "hh:mm tt", "h:mm tt", "H:mm", "HH:mm" }, new[] { "hh:mm:ss tt", "h:mm:ss tt", "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x180c, new[] { new[] { "dd/MM/yyyy", "dd/MM/yy", "dd.MM.yy", "dd-MM-yy", "yyyy-MM-dd" }, new[] { "dddd d MMMM yyyy", "d MMM yy", "d MMMM yyyy" }, new[] { "HH:mm", "H:mm", "HH.mm", "HH' h 'mm", "HH'h'mm" }, new[] { "HH:mm:ss", "H:mm:ss" } } },
-                       { 0x181a, new[] { new[] { "d.M.yyyy", "d.M.yy", "d. M. yyyy", "dd.MM.yyyy", "d. M. yy", "dd.MM.yy", "dd. MM. yy", "yyyy-MM-dd" }, new[] { "d. MMMM yyyy", "dd. MMMM yyyy", "dddd, d. MMMM yyyy" }, new[] { "H:mm", "HH:mm" }, new[] { "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x183b, new[] { new[] { "dd.MM.yyyy", "dd.MM.yy", "d.M.yy", "yyyy-MM-dd" }, new[] { "MMMM d'. b. 'yyyy" }, new[] { "HH:mm", "H:mm" }, new[] { "HH:mm:ss", "H:mm:ss" } } },
-                       { 0x1c01, new[] { new[] { "dd-MM-yyyy", "dd-MM-yy", "yyyy-MM-dd" }, new[] { "dd MMMM, yyyy", "dddd, dd MMMM, yyyy" }, new[] { "H:mm", "HH:mm", "hh:mm tt" }, new[] { "H:mm:ss", "HH:mm:ss", "hh:mm:ss tt" } } },
-                       { 0x1c09, new[] { new[] { "yyyy/MM/dd", "yy/MM/dd", "yyyy-MM-dd" }, new[] { "dd MMMM yyyy" }, new[] { "hh:mm tt", "HH:mm" }, new[] { "hh:mm:ss tt", "HH:mm:ss" } } },
-                       { 0x1c0a, new[] { new[] { "dd/MM/yyyy", "dd/MM/yy", "MM/dd/yyyy", "d/M/yy", "dd-MM-yy", "yyyy-MM-dd" }, new[] { "dddd, dd' de 'MMMM' de 'yyyy", "dddd d' de 'MMMM' de 'yyyy", "d' de 'MMMM' de 'yyyy" }, new[] { "hh:mm tt", "h:mm tt", "H:mm", "HH:mm" }, new[] { "hh:mm:ss tt", "h:mm:ss tt", "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x1c1a, new[] { new[] { "d.M.yyyy", "d.M.yy", "d. M. yyyy", "dd.MM.yyyy", "d. M. yy", "dd.MM.yy", "dd. MM. yy", "yyyy-MM-dd" }, new[] { "d. MMMM yyyy", "dd. MMMM yyyy", "dddd, d. MMMM yyyy" }, new[] { "H:mm", "HH:mm" }, new[] { "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x1c3b, new[] { new[] { "yyyy-MM-dd", "yy-MM-dd" }, new[] { "MMMM d'. b. 'yyyy" }, new[] { "HH:mm", "H:mm" }, new[] { "HH:mm:ss", "H:mm:ss" } } },
-                       { 0x2001, new[] { new[] { "dd/MM/yyyy", "dd/MM/yy", "yyyy-MM-dd" }, new[] { "dd MMMM, yyyy", "dddd, dd MMMM, yyyy" }, new[] { "hh:mm tt", "HH:mm", "H:mm" }, new[] { "hh:mm:ss tt", "HH:mm:ss", "H:mm:ss" } } },
-                       { 0x2009, new[] { new[] { "dd/MM/yyyy", "yyyy-MM-dd" }, new[] { "dddd, MMMM dd, yyyy", "MMMM dd, yyyy", "dddd, dd MMMM, yyyy", "dd MMMM, yyyy" }, new[] { "hh:mm tt", "h:mm tt", "H:mm", "HH:mm" }, new[] { "hh:mm:ss tt", "h:mm:ss tt", "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x200a, new[] { new[] { "dd/MM/yyyy", "dd/MM/yy", "d/M/yy", "dd-MM-yy", "yyyy-MM-dd" }, new[] { "dddd, dd' de 'MMMM' de 'yyyy", "dddd d' de 'MMMM' de 'yyyy", "d' de 'MMMM' de 'yyyy" }, new[] { "hh:mm tt", "h:mm tt", "H:mm", "HH:mm" }, new[] { "hh:mm:ss tt", "h:mm:ss tt", "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x201a, new[] { new[] { "d.M.yyyy", "d.M.yy", "d. M. yyyy", "dd.MM.yyyy", "d. M. yy", "dd.MM.yy", "dd. MM. yy", "yyyy-MM-dd" }, new[] { "d. MMMM yyyy", "dd. MMMM yyyy", "dddd, d. MMMM yyyy" }, new[] { "H:mm", "HH:mm" }, new[] { "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x203b, new[] { new[] { "d.M.yyyy", "dd.MM.yyyy", "d.M.yy", "yyyy-MM-dd" }, new[] { "MMMM d'. p. 'yyyy" }, new[] { "H:mm", "HH:mm" }, new[] { "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x2401, new[] { new[] { "dd/MM/yyyy", "dd/MM/yy", "yyyy-MM-dd" }, new[] { "dd MMMM, yyyy", "dddd, dd MMMM, yyyy" }, new[] { "hh:mm tt", "HH:mm", "H:mm" }, new[] { "hh:mm:ss tt", "HH:mm:ss", "H:mm:ss" } } },
-                       { 0x2409, new[] { new[] { "MM/dd/yyyy", "MM/dd/yy", "yyyy-MM-dd" }, new[] { "dddd, MMMM dd, yyyy", "MMMM dd, yyyy", "dddd, dd MMMM, yyyy", "dd MMMM, yyyy" }, new[] { "h:mm tt", "hh:mm tt", "H:mm", "HH:mm" }, new[] { "h:mm:ss tt", "hh:mm:ss tt", "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x240a, new[] { new[] { "dd/MM/yyyy", "dd/MM/yy", "d/MM/yyyy", "d/M/yy", "dd-MM-yy", "yyyy-MM-dd" }, new[] { "dddd, dd' de 'MMMM' de 'yyyy", "dddd d' de 'MMMM' de 'yyyy", "d' de 'MMMM' de 'yyyy" }, new[] { "hh:mm tt", "h:mm tt", "H:mm", "HH:mm" }, new[] { "hh:mm:ss tt", "h:mm:ss tt", "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x241a, new[] { new[] { "d.M.yyyy", "d.M.yy", "d. M. yyyy", "dd.MM.yyyy", "d. M. yy", "dd.MM.yy", "dd. MM. yy", "yyyy-MM-dd" }, new[] { "d. MMMM yyyy", "dd. MMMM yyyy", "dddd, d. MMMM yyyy" }, new[] { "H:mm", "HH:mm" }, new[] { "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x243b, new[] { new[] { "d.M.yyyy", "dd.MM.yyyy", "d.M.yy", "yyyy-MM-dd" }, new[] { "MMMM d'. p. 'yyyy" }, new[] { "H:mm", "HH:mm" }, new[] { "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x2801, new[] { new[] { "dd/MM/yyyy", "dd/MM/yy", "yyyy-MM-dd" }, new[] { "dd MMMM, yyyy", "dddd, dd MMMM, yyyy" }, new[] { "hh:mm tt", "HH:mm", "H:mm" }, new[] { "hh:mm:ss tt", "HH:mm:ss", "H:mm:ss" } } },
-                       { 0x2809, new[] { new[] { "dd/MM/yyyy", "yyyy-MM-dd" }, new[] { "dddd, dd MMMM yyyy" }, new[] { "hh:mm tt", "HH:mm" }, new[] { "hh:mm:ss tt", "HH:mm:ss" } } },
-                       { 0x280a, new[] { new[] { "dd/MM/yyyy", "dd/MM/yy", "d/M/yy", "dd-MM-yy", "yyyy-MM-dd" }, new[] { "dddd, dd' de 'MMMM' de 'yyyy", "dddd d' de 'MMMM' de 'yyyy", "d' de 'MMMM' de 'yyyy" }, new[] { "hh:mm tt", "h:mm tt", "H:mm", "HH:mm" }, new[] { "hh:mm:ss tt", "h:mm:ss tt", "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x281a, new[] { new[] { "d.M.yyyy", "d.M.yy", "d. M. yyyy", "dd.MM.yyyy", "d. M. yy", "dd.MM.yy", "dd. MM. yy", "yyyy-MM-dd" }, new[] { "d. MMMM yyyy", "dd. MMMM yyyy", "dddd, d. MMMM yyyy" }, new[] { "H:mm", "HH:mm" }, new[] { "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x2c01, new[] { new[] { "dd/MM/yyyy", "dd/MM/yy", "yyyy-MM-dd" }, new[] { "dd MMMM, yyyy", "dddd, dd MMMM, yyyy" }, new[] { "hh:mm tt", "HH:mm", "H:mm" }, new[] { "hh:mm:ss tt", "HH:mm:ss", "H:mm:ss" } } },
-                       { 0x2c09, new[] { new[] { "dd/MM/yyyy", "yyyy-MM-dd" }, new[] { "dddd, dd MMMM yyyy" }, new[] { "hh:mm tt", "HH:mm" }, new[] { "hh:mm:ss tt", "HH:mm:ss" } } },
-                       { 0x2c0a, new[] { new[] { "dd/MM/yyyy", "dd/MM/yy", "d/M/yy", "dd-MM-yy", "yyyy-MM-dd" }, new[] { "dddd, dd' de 'MMMM' de 'yyyy", "dddd d' de 'MMMM' de 'yyyy", "d' de 'MMMM' de 'yyyy" }, new[] { "hh:mm tt", "h:mm tt", "HH:mm", "H:mm" }, new[] { "hh:mm:ss tt", "h:mm:ss tt", "HH:mm:ss", "H:mm:ss" } } },
-                       { 0x2c1a, new[] { new[] { "d.M.yyyy", "d.M.yy", "d. M. yyyy", "dd.MM.yyyy", "d. M. yy", "dd.MM.yy", "dd. MM. yy", "yyyy-MM-dd" }, new[] { "d. MMMM yyyy", "dd. MMMM yyyy", "dddd, d. MMMM yyyy" }, new[] { "H:mm", "HH:mm" }, new[] { "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x3001, new[] { new[] { "dd/MM/yyyy", "dd/MM/yy", "yyyy-MM-dd" }, new[] { "dd MMMM, yyyy", "dddd, dd MMMM, yyyy" }, new[] { "hh:mm tt", "HH:mm", "H:mm" }, new[] { "hh:mm:ss tt", "HH:mm:ss", "H:mm:ss" } } },
-                       { 0x3009, new[] { new[] { "M/d/yyyy", "M/d/yy", "MM/dd/yy", "MM/dd/yyyy", "yyyy-MM-dd", "yy/MM/dd", "dd-MMM-yy" }, new[] { "dddd, MMMM dd, yyyy", "MMMM dd, yyyy", "dddd, dd MMMM, yyyy", "dd MMMM, yyyy" }, new[] { "h:mm tt", "hh:mm tt", "H:mm", "HH:mm" }, new[] { "h:mm:ss tt", "hh:mm:ss tt", "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x300a, new[] { new[] { "dd/MM/yyyy", "dd/MM/yy", "d/M/yy", "dd-MM-yy", "yyyy-MM-dd" }, new[] { "dddd, dd' de 'MMMM' de 'yyyy", "dddd d' de 'MMMM' de 'yyyy", "d' de 'MMMM' de 'yyyy" }, new[] { "H:mm", "HH:mm" }, new[] { "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x301a, new[] { new[] { "d.M.yyyy", "d.M.yy", "d. M. yyyy", "dd.MM.yyyy", "d. M. yy", "dd.MM.yy", "dd. MM. yy", "yyyy-MM-dd" }, new[] { "d. MMMM yyyy", "dd. MMMM yyyy", "dddd, d. MMMM yyyy" }, new[] { "H:mm", "HH:mm" }, new[] { "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x3401, new[] { new[] { "dd/MM/yyyy", "dd/MM/yy", "yyyy-MM-dd" }, new[] { "dd MMMM, yyyy", "dddd, dd MMMM, yyyy" }, new[] { "hh:mm tt", "HH:mm", "H:mm" }, new[] { "hh:mm:ss tt", "HH:mm:ss", "H:mm:ss" } } },
-                       { 0x3409, new[] { new[] { "M/d/yyyy", "M/d/yy", "MM/dd/yy", "MM/dd/yyyy", "yyyy-MM-dd", "yy/MM/dd", "dd-MMM-yy" }, new[] { "dddd, MMMM dd, yyyy", "MMMM dd, yyyy", "dddd, dd MMMM, yyyy", "dd MMMM, yyyy" }, new[] { "h:mm tt", "hh:mm tt", "H:mm", "HH:mm" }, new[] { "h:mm:ss tt", "hh:mm:ss tt", "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x340a, new[] { new[] { "dd-MM-yyyy", "dd-MM-yy", "dd/MM/yy", "d/M/yy", "yyyy-MM-dd" }, new[] { "dddd, dd' de 'MMMM' de 'yyyy", "dddd d' de 'MMMM' de 'yyyy", "d' de 'MMMM' de 'yyyy" }, new[] { "H:mm", "HH:mm" }, new[] { "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x3801, new[] { new[] { "dd/MM/yyyy", "dd/MM/yy", "yyyy-MM-dd" }, new[] { "dd MMMM, yyyy", "dddd, dd MMMM, yyyy" }, new[] { "hh:mm tt", "HH:mm", "H:mm" }, new[] { "hh:mm:ss tt", "HH:mm:ss", "H:mm:ss" } } },
-                       { 0x380a, new[] { new[] { "dd/MM/yyyy", "dd/MM/yy", "d/M/yy", "dd-MM-yy", "yyyy-MM-dd" }, new[] { "dddd, dd' de 'MMMM' de 'yyyy", "dddd d' de 'MMMM' de 'yyyy", "d' de 'MMMM' de 'yyyy" }, new[] { "hh:mm tt", "h:mm tt", "H:mm", "HH:mm" }, new[] { "hh:mm:ss tt", "h:mm:ss tt", "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x3c01, new[] { new[] { "dd/MM/yyyy", "dd/MM/yy", "yyyy-MM-dd" }, new[] { "dd MMMM, yyyy", "dddd, dd MMMM, yyyy" }, new[] { "hh:mm tt", "HH:mm", "H:mm" }, new[] { "hh:mm:ss tt", "HH:mm:ss", "H:mm:ss" } } },
-                       { 0x3c0a, new[] { new[] { "dd/MM/yyyy", "dd/MM/yy", "d/M/yy", "dd-MM-yy", "yyyy-MM-dd" }, new[] { "dddd, dd' de 'MMMM' de 'yyyy", "dddd d' de 'MMMM' de 'yyyy", "d' de 'MMMM' de 'yyyy" }, new[] { "hh:mm tt", "h:mm tt", "H:mm", "HH:mm" }, new[] { "hh:mm:ss tt", "h:mm:ss tt", "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x4001, new[] { new[] { "dd/MM/yyyy", "dd/MM/yy", "yyyy-MM-dd" }, new[] { "dd MMMM, yyyy", "dddd, dd MMMM, yyyy" }, new[] { "hh:mm tt", "HH:mm", "H:mm" }, new[] { "hh:mm:ss tt", "HH:mm:ss", "H:mm:ss" } } },
-                       { 0x4009, new[] { new[] { "dd-MM-yyyy", "dd-MM-yy", "d-M-yy", "d.M.yy", "yyyy-MM-dd" }, new[] { "dd MMMM yyyy", "d MMMM yyyy" }, new[] { "HH:mm", "H:mm", "tt hh:mm" }, new[] { "HH:mm:ss", "H:mm:ss", "tt hh:mm:ss", "tt h:mm:ss" } } },
-                       { 0x400a, new[] { new[] { "dd/MM/yyyy", "dd/MM/yy", "d/M/yy", "dd-MM-yy", "yyyy-MM-dd" }, new[] { "dddd, dd' de 'MMMM' de 'yyyy", "dddd d' de 'MMMM' de 'yyyy", "d' de 'MMMM' de 'yyyy" }, new[] { "hh:mm tt", "h:mm tt", "H:mm", "HH:mm" }, new[] { "hh:mm:ss tt", "h:mm:ss tt", "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x4409, new[] { new[] { "d/M/yyyy", "d/M/yy", "dd/MM/yyyy", "dd/MM/yy", "yyyy-MM-dd" }, new[] { "dddd, d MMMM, yyyy", "d MMMM, yyyy" }, new[] { "h:mm tt", "hh:mm tt", "H:mm", "HH:mm" }, new[] { "h:mm:ss tt", "hh:mm:ss tt", "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x440a, new[] { new[] { "dd/MM/yyyy", "dd/MM/yy", "MM-dd-yyyy", "yyyy-MM-dd" }, new[] { "dddd, dd' de 'MMMM' de 'yyyy" }, new[] { "hh:mm tt", "HH:mm" }, new[] { "hh:mm:ss tt", "HH:mm:ss" } } },
-                       { 0x4809, new[] { new[] { "d/M/yyyy", "d/M/yy", "dd/MM/yyyy", "dd/MM/yy", "yyyy-MM-dd" }, new[] { "dddd, d MMMM, yyyy", "d MMMM, yyyy" }, new[] { "h:mm tt", "hh:mm tt", "H:mm", "HH:mm" }, new[] { "h:mm:ss tt", "hh:mm:ss tt", "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x480a, new[] { new[] { "dd/MM/yyyy", "dd/MM/yy", "MM-dd-yyyy", "yyyy-MM-dd" }, new[] { "dddd, dd' de 'MMMM' de 'yyyy" }, new[] { "hh:mm tt", "HH:mm" }, new[] { "hh:mm:ss tt", "HH:mm:ss" } } },
-                       { 0x4c0a, new[] { new[] { "dd/MM/yyyy", "dd/MM/yy", "MM-dd-yyyy", "yyyy-MM-dd" }, new[] { "dddd, dd' de 'MMMM' de 'yyyy" }, new[] { "hh:mm tt", "HH:mm" }, new[] { "hh:mm:ss tt", "HH:mm:ss" } } },
-                       { 0x500a, new[] { new[] { "dd/MM/yyyy", "dd/MM/yy", "MM-dd-yyyy", "yyyy-MM-dd" }, new[] { "dddd, dd' de 'MMMM' de 'yyyy" }, new[] { "hh:mm tt", "HH:mm" }, new[] { "hh:mm:ss tt", "HH:mm:ss" } } },
-                       { 0x540a, new[] { new[] { "M/d/yyyy", "M/d/yy", "MM/dd/yy", "MM/dd/yyyy", "yy/MM/dd", "yyyy-MM-dd", "dd-MMM-yy" }, new[] { "dddd, MMMM dd, yyyy", "MMMM dd, yyyy", "dddd, dd MMMM, yyyy", "dd MMMM, yyyy" }, new[] { "h:mm tt", "hh:mm tt", "H:mm", "HH:mm" }, new[] { "h:mm:ss tt", "hh:mm:ss tt", "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x641a, new[] { new[] { "d.M.yyyy", "d.M.yy", "d. M. yyyy", "dd.MM.yyyy", "d. M. yy", "dd.MM.yy", "dd. MM. yy", "yyyy-MM-dd" }, new[] { "d. MMMM yyyy", "dd. MMMM yyyy", "dddd, d. MMMM yyyy" }, new[] { "H:mm", "HH:mm" }, new[] { "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x681a, new[] { new[] { "d.M.yyyy", "d.M.yy", "d. M. yyyy", "dd.MM.yyyy", "d. M. yy", "dd.MM.yy", "dd. MM. yy", "yyyy-MM-dd" }, new[] { "d. MMMM yyyy", "dd. MMMM yyyy", "dddd, d. MMMM yyyy" }, new[] { "H:mm", "HH:mm" }, new[] { "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x6c1a, new[] { new[] { "d.M.yyyy", "d.M.yy", "d. M. yyyy", "dd.MM.yyyy", "d. M. yy", "dd.MM.yy", "dd. MM. yy", "yyyy-MM-dd" }, new[] { "d. MMMM yyyy", "dd. MMMM yyyy", "dddd, d. MMMM yyyy" }, new[] { "H:mm", "HH:mm" }, new[] { "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x701a, new[] { new[] { "d.M.yyyy", "d.M.yy", "d. M. yyyy", "dd.MM.yyyy", "d. M. yy", "dd.MM.yy", "dd. MM. yy", "yyyy-MM-dd" }, new[] { "d. MMMM yyyy", "dd. MMMM yyyy", "dddd, d. MMMM yyyy" }, new[] { "H:mm", "HH:mm" }, new[] { "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x703b, new[] { new[] { "d.M.yyyy", "dd.MM.yyyy", "d.M.yy", "yyyy-MM-dd" }, new[] { "MMMM d'. p. 'yyyy" }, new[] { "H:mm", "HH:mm" }, new[] { "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x742c, new[] { new[] { "dd.MM.yyyy", "dd.MM.yy", "d.M.yy", "dd/MM/yy", "yyyy-MM-dd" }, new[] { "d MMMM yyyy", "dd MMMM yyyy" }, new[] { "H:mm", "HH:mm" }, new[] { "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x743b, new[] { new[] { "d.M.yyyy", "dd.MM.yyyy", "d.M.yy", "yyyy-MM-dd" }, new[] { "MMMM d'. p. 'yyyy" }, new[] { "H:mm", "HH:mm" }, new[] { "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x7804, new[] { new[] { "yyyy/M/d", "yyyy-M-d", "yyyy.M.d", "yyyy-MM-dd", "yyyy/MM/dd", "yyyy.MM.dd", "yy-M-d", "yy/M/d", "yy.M.d", "yy/MM/dd" }, new[] { "yyyy'年'M'月'd'日'", "yyyy'年'M'月'd'日',dddd", "dddd,yyyy'年'M'月'd'日'" }, new[] { "H:mm", "HH:mm", "tt h:mm", "tt hh:mm" }, new[] { "H:mm:ss", "HH:mm:ss", "tt h:mm:ss", "tt hh:mm:ss" } } },
-                       { 0x7814, new[] { new[] { "dd.MM.yyyy", "dd.MM.yy", "d.M.yy", "yyyy-MM-dd", "dd.MMM.yyyy" }, new[] { "d. MMMM yyyy", "dd. MMMM yyyy" }, new[] { "HH:mm", "H:mm", "'kl 'HH.mm", "HH.mm" }, new[] { "HH:mm:ss", "H:mm:ss", "'kl 'HH.mm.ss", "HH.mm.ss" } } },
-                       { 0x781a, new[] { new[] { "d.M.yyyy", "d.M.yy", "d. M. yyyy", "dd.MM.yyyy", "d. M. yy", "dd.MM.yy", "dd. MM. yy", "yyyy-MM-dd" }, new[] { "d. MMMM yyyy", "dd. MMMM yyyy", "dddd, d. MMMM yyyy" }, new[] { "H:mm", "HH:mm" }, new[] { "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x782c, new[] { new[] { "dd.MM.yyyy", "dd.MM.yy", "d.M.yy", "dd/MM/yy", "yyyy-MM-dd" }, new[] { "d MMMM yyyy", "dd MMMM yyyy" }, new[] { "H:mm", "HH:mm" }, new[] { "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x783b, new[] { new[] { "yyyy-MM-dd", "yy-MM-dd" }, new[] { "MMMM d'. b. 'yyyy" }, new[] { "HH:mm", "H:mm" }, new[] { "HH:mm:ss", "H:mm:ss" } } },
-                       { 0x7843, new[] { new[] { "dd.MM.yyyy", "dd.MM.yy", "dd/MM yyyy", "d.M.yy", "dd/MM/yy", "yyyy-MM-dd" }, new[] { "yyyy 'йил' d-MMMM", "d MMMM yyyy", "dd MMMM yyyy" }, new[] { "HH:mm", "H:mm" }, new[] { "HH:mm:ss", "H:mm:ss" } } },
-                       { 0x7850, new[] { new[] { "yy.MM.dd", "yyyy-MM-dd" }, new[] { "yyyy 'оны' MMMM d" }, new[] { "H:mm" }, new[] { "H:mm:ss" } } },
-                       { 0x785d, new[] { new[] { "d/M/yyyy", "d/M/yy", "dd/MM/yy", "yy/MM/dd", "yyyy-MM-dd", "dd-MMM-yy" }, new[] { "dddd,MMMM dd,yyyy", "MMMM dd,yyyy", "dddd, dd MMMM, yyyy", "dd MMMM, yyyy" }, new[] { "h:mm tt", "hh:mm tt", "H:mm", "HH:mm" }, new[] { "h:mm:ss tt", "hh:mm:ss tt", "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x7c04, new[] { new[] { "d/M/yyyy", "d/M/yy", "dd/MM/yy", "yy/M/d", "yy/MM/dd", "yyyy/M/d", "yyyy/MM/dd", "yyyy-MM-dd" }, new[] { "yyyy'年'M'月'd'日'", "yyyy'年'MM'月'dd'日'" }, new[] { "H:mm", "HH:mm" }, new[] { "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x7c14, new[] { new[] { "dd.MM.yyyy", "dd.MM.yy", "d.M.yy", "yyyy-MM-dd", "dd.MMM.yyyy" }, new[] { "d. MMMM yyyy", "dd. MMMM yyyy" }, new[] { "HH:mm", "H:mm", "'kl 'HH.mm", "HH.mm" }, new[] { "HH:mm:ss", "H:mm:ss", "'kl 'HH.mm.ss", "HH.mm.ss" } } },
-                       { 0x7c1a, new[] { new[] { "d.M.yyyy", "d.M.yy", "d. M. yyyy", "dd.MM.yyyy", "d. M. yy", "dd.MM.yy", "dd. MM. yy", "yyyy-MM-dd" }, new[] { "d. MMMM yyyy", "dd. MMMM yyyy", "dddd, d. MMMM yyyy" }, new[] { "H:mm", "HH:mm" }, new[] { "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x7c28, new[] { new[] { "dd.MM.yy", "yyyy-MM-dd" }, new[] { "d MMMM yyyy" }, new[] { "H:mm", "HH:mm" }, new[] { "H:mm:ss" } } },
-                       { 0x7c2e, new[] { new[] { "d. M. yyyy", "d. M. yy", "dd.MM.yyyy", "dd.MM.yy", "yyyy-MM-dd" }, new[] { "dddd, 'dnja' d. MMMM yyyy", "dddd, d. MMMM yyyy", "d. MMMM yyyy", "d. M. yyyy" }, new[] { "H.mm 'goź.'", "HH:mm" }, new[] { "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x7c3b, new[] { new[] { "yyyy-MM-dd", "yy-MM-dd" }, new[] { "MMMM d'. b. 'yyyy" }, new[] { "HH:mm", "H:mm" }, new[] { "HH:mm:ss", "H:mm:ss" } } },
-                       { 0x7c43, new[] { new[] { "dd/MM yyyy", "dd.MM.yy", "d.M.yy", "dd/MM/yy", "yyyy-MM-dd" }, new[] { "yyyy 'yil' d-MMMM", "d MMMM yyyy", "dd MMMM yyyy" }, new[] { "HH:mm", "H:mm" }, new[] { "HH:mm:ss", "H:mm:ss" } } },
-                       { 0x7c50, new[] { new[] { "yyyy/M/d", "yyyy-M-d", "yyyy.M.d", "yyyy.MM.dd", "yyyy-MM-dd", "yyyy/MM/dd", "yy-M-d", "yy/M/d", "yy.M.d", "yy/MM/dd" }, new[] { "yyyy'ᠣᠨ ᠤ᠋' M'ᠰᠠᠷ᠎ᠠ  ᠢᠢᠨ 'd' ᠤ᠋ ᠡᠳᠦᠷ'", "yyyy'ᠣᠨ ᠤ᠋' M'ᠰᠠᠷ᠎ᠠ  ᠢᠢᠨ 'd' ᠤ᠋ ᠡᠳᠦᠷ᠂' dddd" }, new[] { "H:mm" }, new[] { "H:mm:ss" } } },
-                       { 0x7c5d, new[] { new[] { "d/MM/yyyy", "d/M/yy", "yy-MM-dd", "dd/MM/yyyy", "yy-MM-dd", "yyyy-MM-dd", "dd-MMM-yy" }, new[] { "ddd, MMMM dd,yyyy", "MMMM dd,yyyy", "dddd, dd MMMM, yyyy", "dd MMMM, yyyy" }, new[] { "h:mm tt", "hh:mm tt", "HH:mm", "H:mm" }, new[] { "h:mm:ss tt", "hh:mm:ss tt", "HH:mm:ss", "H:mm:ss" } } },
-                       { 0x7c5f, new[] { new[] { "dd-MM-yyyy", "dd-MM-yy", "yyyy-MM-dd" }, new[] { "dd MMMM, yyyy", "dddd, dd MMMM, yyyy" }, new[] { "H:mm", "HH:mm", "hh:mm" }, new[] { "H:mm:ss", "HH:mm:ss" } } },
-                       { 0x7c68, new[] { new[] { "d/M/yyyy", "d/M/yy", "dd/MM/yy", "dd/MM/yyyy", "yy/MM/dd", "yyyy-MM-dd", "dd-MMM-yy" }, new[] { "dddd, MMMM dd, yyyy", "MMMM dd, yyyy", "dddd, dd MMMM, yyyy", "dd MMMM, yyyy" }, new[] { "h:mm tt", "hh:mm tt", "H:mm", "HH:mm" }, new[] { "h:mm:ss tt", "hh:mm:ss tt", "H:mm:ss", "HH:mm:ss" } } },
+                       { 0x0001, new [] { new[] { "dd/MM/yy","dd/MM/yyyy" }, new[] { "dd/MMMM/yyyy","dddd, dd MMMM, yyyy" }, new[] { "hh:mm tt","HH:mm" }, new[] { "hh:mm:ss tt","HH:mm:ss" }, new[] { "MMMM, yyyy" } } },
+                       { 0x0002, new [] { new[] { "d.M.yyyy \'г.\'","dd.M.yyyy \'г.\'","d.MM.yyyy \'г.\'","dd.MM.yyyy \'г.\'" }, new[] { "dd MMMM yyyy \'г.\'","d MMMM yyyy \'г.\'","dddd, dd MMMM yyyy \'г.\'","dddd, d MMMM yyyy \'г.\'" }, new[] { "H:mm","HH:mm" }, new[] { "H:mm:ss","HH:mm:ss" }, new[] { "MMMM yyyy \'г.\'" } } },
+                       { 0x0003, new [] { new[] { "dd/MM/yyyy","dd/MM/yy","d/MM/yy","dd-MM-yyyy","dd-MM-yy","d-MM-yy","dd.MM.yyyy","dd.MM.yy","d.MM.yy" }, new[] { "dddd, d MMMM\' de \'yyyy","dddd, d MMMM yyyy","d MMMM\' de \'yyyy","d MMMM yyyy","d\'-\'MMMM\'-\'yyyy","ddd, d MMM yyyy" }, new[] { "H:mm" }, new[] { "H:mm:ss" }, new[] { "MMMM\' de \'yyyy","MMMM yyyy","MMM yyyy","MMM yy" } } },
+                       { 0x0004, new [] { new[] { "yyyy/M/d","yyyy-M-d","yyyy.M.d","yyyy/MM/dd","yyyy-MM-dd","yyyy.MM.dd","yy/M/d","yy-M-d","yy.M.d","yy/MM/dd" }, new[] { "yyyy\'年\'M\'月\'d\'日\'","yyyy\'年\'M\'月\'d\'日\', dddd","dddd, yyyy\'年\'M\'月\'d\'日\'","yyyy年MMMd日","yyyy年MMMd日, dddd" }, new[] { "H:mm","HH:mm","tt h:mm","tt hh:mm" }, new[] { "H:mm:ss","HH:mm:ss","tt h:mm:ss","tt hh:mm:ss" }, new[] { "yyyy\'年\'M\'月\'","yyyy.M" } } },
+                       { 0x0005, new [] { new[] { "d. M. yyyy","d/M/yyyy","dd/MM/yyyy","d/M/yy","dd/MM/yy","d-M-yy","yyyy-MM-dd","yyyy-M-d","yy-M-d" }, new[] { "d. MMMM yyyy" }, new[] { "H:mm","HH:mm","h.mm tt","H.mm" }, new[] { "H:mm:ss","HH:mm:ss","h.mm.ss tt","H.mm.ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x0006, new [] { new[] { "dd-MM-yyyy","dd-MM-yy","yyyy-MM-dd","yyyy MM dd" }, new[] { "d. MMMM yyyy" }, new[] { "HH:mm","H:mm" }, new[] { "HH:mm:ss","H:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x0007, new [] { new[] { "dd.MM.yyyy","dd.MM.yy","yyyy-MM-dd","dd. MMM. yyyy" }, new[] { "dddd, d. MMMM yyyy","d. MMMM yyyy","d. MMM. yyyy" }, new[] { "HH:mm","HH:mm\' Uhr\'" }, new[] { "HH:mm:ss","HH:mm:ss\' Uhr\'" }, new[] { "MMMM yyyy" } } },
+                       { 0x0008, new [] { new[] { "d/M/yyyy","dd/MM/yyyy","d/M/yy","dd/MM/yy","dd/MMM/yyyy","yyyy-MM-dd" }, new[] { "dddd, d MMMM yyyy","d MMMM yyyy" }, new[] { "h:mm tt","hh:mm tt","H:mm","HH:mm" }, new[] { "h:mm:ss tt","hh:mm:ss tt","H:mm:ss","HH:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x0009, new [] { new[] { "M/d/yyyy","M/d/yy","MM/dd/yy","MM/dd/yyyy","yy/MM/dd","yyyy-MM-dd","dd-MMM-yy" }, new[] { "dddd, MMMM d, yyyy","MMMM d, yyyy","dddd, d MMMM, yyyy","d MMMM, yyyy" }, new[] { "h:mm tt","hh:mm tt","H:mm","HH:mm" }, new[] { "h:mm:ss tt","hh:mm:ss tt","H:mm:ss","HH:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x000a, new [] { new[] { "dd/MM/yyyy","dd/MM/yy","d/MM/yy","d/M/yy","d-M-yy","dd-MM-yy","dd.MM.yy","yyyy-MM-dd" }, new[] { "dddd, d\' de \'MMMM\' de \'yyyy","dddd d\' de \'MMMM\' de \'yyyy","d\' de \'MMMM\' de \'yyyy" }, new[] { "H:mm","HH:mm","H.mm","HH.mm","HH\'H\'mm" }, new[] { "H:mm:ss","HH:mm:ss","H.mm.ss","HH.mm.ss","HH\'H\'mm.ss" }, new[] { "MMMM\' de \'yyyy" } } },
+                       { 0x000b, new [] { new[] { "d.M.yyyy","dd.MM.yyyy","d.M.yy","yyyy-MM-dd" }, new[] { "d. MMMM yyyy","dd. MMMM yyyy","dddd, d. MMMM yyyy" }, new[] { "H:mm","H.mm" }, new[] { "H:mm:ss","H.mm.ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x000c, new [] { new[] { "dd/MM/yyyy","dd/MM/yy","dd.MM.yy","dd-MM-yy","yyyy-MM-dd" }, new[] { "dddd d MMMM yyyy","d MMMM yyyy","d MMM yy" }, new[] { "HH:mm","H:mm","HH.mm","HH\' h \'mm","HH\'h\'mm" }, new[] { "HH:mm:ss","H:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x000d, new [] { new[] { "dd/MM/yyyy","dd MMMM yyyy","dd/MM/yy","dd/MMMM/yyyy","dd-MM-yy","dd-MM-yyyy","dd-MMMM-yyyy","yyyy-MM-dd","dd \'ב\'MMMM yyyy","dd MMM yy" }, new[] { "dddd dd MMMM yyyy","dd MMMM yyyy","dddd dd \'ב\'MMMM yyyy","ddd dd \'ב\'MMMM yyyy","dd \'ב\'MMMM yyyy" }, new[] { "HH:mm","hh:mm tt" }, new[] { "HH:mm:ss","hh:mm:ss tt" }, new[] { "MMMM yyyy" } } },
+                       { 0x000e, new [] { new[] { "yyyy.MM.dd.","yyyy. MM. dd.","yyyy-MM-dd","yy-MM-dd" }, new[] { "yyyy. MMMM d." }, new[] { "H:mm","HH:mm","h:mm tt" }, new[] { "H:mm:ss","HH:mm:ss","h:mm:ss tt" }, new[] { "yyyy. MMMM" } } },
+                       { 0x000f, new [] { new[] { "d.M.yyyy","dd.MM.yy","d. M. yyyy.","d. M. \'\\'\'yy.","yyyy-MM-dd","yy MM dd","dd/MM/yy" }, new[] { "d. MMMM yyyy","dd. MMMM yyyy","dddd d. MMMM  yyyy" }, new[] { "HH:mm","H:mm" }, new[] { "HH:mm:ss","H:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x0010, new [] { new[] { "dd/MM/yyyy","dd/MMM/yyyy","dd/MM/yy","dd.M.yy","d/M/yy" }, new[] { "dddd d MMMM yyyy","d-MMM-yy","d MMMM yyyy" }, new[] { "HH:mm" }, new[] { "HH:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x0011, new [] { new[] { "yyyy/MM/dd","yy/MM/dd","yy/M/d","yyyy/M/d","yyyy-MM-dd" }, new[] { "yyyy\'年\'M\'月\'d\'日\'","yyyy\'年\'MM\'月\'dd\'日\'","yyyy\'年\'M\'月\'d\'日 \'dddd","yyyy\'年\'MM\'月\'dd\'日 \'dddd","yyyy\'年\'MMM\'月\'d\'日\'","yyyy\'年\'MMM\'月\'d\'日 \'dddd","yyyy\'年\'MMMMd\'日\'","yyyy\'年\'MMMMd\'日 \'dddd" }, new[] { "H:mm","HH:mm","tt h:mm","tt hh:mm" }, new[] { "H:mm:ss","HH:mm:ss","tt h:mm:ss","tt hh:mm:ss" }, new[] { "yyyy\'年\'M\'月\'" } } },
+                       { 0x0012, new [] { new[] { "yyyy-MM-dd","yy-MM-dd","yy-M-d","yyyy-M-d" }, new[] { "yyyy\'년\' M\'월\' d\'일\' dddd","yyyy\'년\' M\'월\' d\'일\'","yy\'년\' M\'월\' d\'일\' dddd","yy\'년\' M\'월\' d\'일\'","yyyy\'년\' MM\'월\' dd\'일\' dddd","yyyy\'년\' MM\'월\' dd\'일\'","yyyy\'년 \'MMM\'월 \'d\'일 \'dddd","yyyy\'년 \'MMM\'월 \'d\'일\'","yyyy\'년 \'MMMM d\'일 \'dddd","yyyy\'년 \'MMMM d\'일\'" }, new[] { "tt h:mm","tt hh:mm","H:mm","HH:mm" }, new[] { "tt h:mm:ss","tt hh:mm:ss","H:mm:ss","HH:mm:ss" }, new[] { "yyyy\'년\' M\'월\'" } } },
+                       { 0x0013, new [] { new[] { "d-M-yyyy","d-M-yy","dd-MM-yy","dd/MM/yy","dd.MM.yy","dd.MMM.yyyy","yyyy-MM-dd" }, new[] { "dddd d MMMM yyyy","d-MMM-yy","d MMMM yyyy","d MMM yy" }, new[] { "HH:mm","H:mm","H.mm","HH.mm\' uur\'","HH:mm\' uur\'" }, new[] { "HH:mm:ss","H:mm:ss","HH.mm.ss\' uur\'","HH:mm:ss\' uur\'" }, new[] { "MMMM yyyy" } } },
+                       { 0x0014, new [] { new[] { "dd.MM.yyyy","d.MM.yyyy","dd.MM.yy","d.M.yy","dd. MMM. yyyy","yyyy-MM-dd" }, new[] { "d. MMMM yyyy","dd. MMMM yyyy" }, new[] { "HH:mm","H:mm","\'kl \'H:mm","\'kl \'HH:mm","HH.mm","H.mm","\'kl \'HH.mm","\'kl \'H.mm" }, new[] { "HH:mm:ss","H:mm:ss","\'kl \'HH:mm:ss","\'kl \'H:mm:ss","HH.mm.ss","H.mm.ss","\'kl \'HH.mm.ss","\'kl \'H.mm.ss" }, new[] { "MMMM yyyy","MMM. yyyy","MM.yyyy" } } },
+                       { 0x0015, new [] { new[] { "yyyy-MM-dd","yy-MM-dd" }, new[] { "d MMMM yyyy","dd MMMM yyyy" }, new[] { "HH:mm","H:mm" }, new[] { "HH:mm:ss","H:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x0016, new [] { new[] { "dd/MM/yyyy","dd/MM/yy","d/M/yyyy","d/M/yy","dd-MM-yy","dd-MM-yyyy","d-M-yy","d-M-yyyy","dd.MM.yy","dd.MM.yyyy","dd.MMM.yyyy","d.M.yy","d.M.yyyy","yyyy-MM-dd" }, new[] { "dddd, d\' de \'MMMM\' de \'yyyy","d\' de \'MMMM\' de \'yyyy" }, new[] { "HH:mm" }, new[] { "HH:mm:ss" }, new[] { "MMMM\' de \'yyyy" } } },
+                       { 0x0017, new [] { new[] { "dd-MM-yyyy","dd-MM-yy" }, new[] { "dddd, \'ils’\' d. MMMM, yyyy" }, new[] { "HH:mm","H:mm","HH" }, new[] { "HH:mm:ss","H:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x0018, new [] { new[] { "dd.MM.yyyy","d.M.yyyy","d.MM.yy","dd-MM-yyyy","dd-MM-yy","dd\'/\'MM\'/\'yyyy","dd\'/\'MM\'/\'yy","yyyy-MM-dd","yyyy\'/\'MM\'/\'dd" }, new[] { "d MMMM yyyy","dddd, d MMMM yyyy","dddd d MMMM yyyy","d MMM yyyy" }, new[] { "H:mm","HH:mm","h:mm tt","hh:mm tt" }, new[] { "H:mm:ss","HH:mm:ss","h:mm:ss tt","hh:mm:ss tt" }, new[] { "MMMM yyyy","MMM yyyy","MMMM yy","MMM yy","MM.yyyy","MM.yy","MM\'/\'yyyy","MM\'/\'yy" } } },
+                       { 0x0019, new [] { new[] { "dd.MM.yyyy","dd.MM.yy","d.M.yy","dd-MM-yyyy","dd/MM/yy" }, new[] { "d MMMM yyyy \'г.\'","dd MMMM yyyy \'г.\'" }, new[] { "H:mm","HH:mm" }, new[] { "H:mm:ss","HH:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x001a, new [] { new[] { "d.M.yyyy.","d.M.yy.","d. M. yyyy.","dd.MM.yyyy.","d. M. yy.","dd.MM.yy.","dd. MM. yy.","yyyy-MM-dd" }, new[] { "d. MMMM yyyy.","dd. MMMM yyyy.","dddd, d. MMMM yyyy." }, new[] { "H:mm","HH:mm" }, new[] { "H:mm:ss","HH:mm:ss" }, new[] { "MMMM, yyyy" } } },
+                       { 0x001b, new [] { new[] { "d.M.yyyy","dd.MM.yyyy","dd.MM.yy","yyyy-MM-dd","yy-MM-dd","dd. MM. yyyy","d/MM/yyyy","dd. MM. yy" }, new[] { "d. MMMM yyyy" }, new[] { "H:mm","HH:mm","H.mm" }, new[] { "H:mm:ss","HH:mm:ss","H.mm.ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x001c, new [] { new[] { "d.M.yyyy","d.M.yy" }, new[] { "dddd, d MMMM yyyy" }, new[] { "HH:mm" }, new[] { "HH:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x001d, new [] { new[] { "yyyy-MM-dd","yy-MM-dd" }, new[] { "\'den \'d MMMM yyyy","dddd\' den \'d MMMM yyyy" }, new[] { "HH:mm","H:mm","\'kl \'H:mm" }, new[] { "HH:mm:ss","H:mm:ss","\'kl \'H:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x001e, new [] { new[] { "d/M/yyyy","d/M/yy","dd/MM/yy","dd/MM/yyyy","d MMM yyyy","dd MMM yyyy","yyyy-MM-dd" }, new[] { "d MMMM yyyy","ddd d MMMM yyyy","\'วัน\'dddd\'ที่\' d MMMM gg yyyy" }, new[] { "H:mm","HH:mm","h:mm tt","hh:mm tt" }, new[] { "H:mm:ss","HH:mm:ss","h:mm:ss tt","hh:mm:ss tt" }, new[] { "MMMM yyyy" } } },
+                       { 0x001f, new [] { new[] { "d.M.yyyy","d.M.yy","dd.MM.yyyy","dd.MM.yy" }, new[] { "d MMMM yyyy dddd","d MMMM yyyy","dd MMMM yyyy dddd","dd MMMM yyyy" }, new[] { "HH:mm" }, new[] { "HH:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x0020, new [] { new[] { "dd/MM/yyyy","dd/MM/yy","yyyy-MM-dd" }, new[] { "dd MMMM, yyyy","dddd, dd MMMM, yyyy" }, new[] { "h:mm tt","hh:mm tt","H:mm","HH:mm" }, new[] { "h:mm:ss tt","hh:mm:ss tt","H:mm:ss","HH:mm:ss" }, new[] { "MMMM, yyyy" } } },
+                       { 0x0021, new [] { new[] { "dd/MM/yyyy","dd/MM/yy","dd-MM-yyyy" }, new[] { "dd MMMM yyyy" }, new[] { "H:mm","HH:mm" }, new[] { "H:mm:ss","HH:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x0022, new [] { new[] { "dd.MM.yyyy","dd.MM.yy","yyyy-MM-dd" }, new[] { "d MMMM yyyy\' р.\'" }, new[] { "H:mm","HH:mm" }, new[] { "H:mm:ss","HH:mm:ss" }, new[] { "MMMM yyyy\' р.\'" } } },
+                       { 0x0023, new [] { new[] { "dd.MM.yy" }, new[] { "d MMMM yyyy" }, new[] { "HH:mm","H:mm" }, new[] { "HH:mm:ss","H:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x0024, new [] { new[] { "d.M.yyyy","d.M.yy","d. M. yyyy","dd.MM.yyyy","d.  M. yy","dd.MM.yy","dd. MM. yy" }, new[] { "d. MMMM yyyy","dd. MMMM yyyy","dddd, d. MMMM yyyy" }, new[] { "H:mm","HH:mm" }, new[] { "H:mm:ss","HH:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x0025, new [] { new[] { "d.MM.yyyy","dd.MM.yyyy","dd.MM.yy","yyyy-MM-dd" }, new[] { "d. MMMM yyyy","dd. MMMM yyyy","dddd, d. MMMM yyyy" }, new[] { "H:mm","HH:mm" }, new[] { "H:mm:ss","HH:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x0026, new [] { new[] { "dd.MM.yyyy.","dd.MM.yy.","dd-MM-yyyy." }, new[] { "dddd, yyyy\'. gada \'d. MMMM" }, new[] { "H:mm","HH:mm" }, new[] { "H:mm:ss","HH:mm:ss" }, new[] { "yyyy\'. gada \'MMMM" } } },
+                       { 0x0027, new [] { new[] { "yyyy-MM-dd","yyyy MM dd" }, new[] { "yyyy \'m.\' MMMM d \'d.\'" }, new[] { "HH:mm" }, new[] { "HH:mm:ss" }, new[] { "yyyy \'m.\' MMMM" } } },
+                       { 0x0028, new [] { new[] { "dd.MM.yyyy","dd.MM.yy","d.M.yy","dd-MM-yyyy","dd/MM/yy" }, new[] { "d MMMM yyyy\' с.\'","dd MMMM yyyy\' с.\'" }, new[] { "HH:mm","H:mm" }, new[] { "HH:mm:ss","H:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x0029, new [] { new[] { "dd/MM/yyyy","dd/MM/yy" }, new[] { "dddd, dd MMMM yyyy","dd MMMM yyyy" }, new[] { "hh:mm tt","HH:mm" }, new[] { "hh:mm:ss tt","HH:mm:ss" }, new[] { "MMMM, yyyy" } } },
+                       { 0x002a, new [] { new[] { "dd/MM/yyyy","dd/MM/yy","dd-MM-yy","dd-MM-yyyy","yyyy-MM-dd" }, new[] { "dd MMMM yyyy" }, new[] { "h:mm tt","hh:mm tt","H:mm","HH:mm" }, new[] { "h:mm:ss tt","hh:mm:ss tt","H:mm:ss","HH:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x002b, new [] { new[] { "dd.MM.yyyy","dd.MM.yy","d/MM/yyyy","dd/MM/yyyy","d/MMM/yyyy","dd/MMM/yyyy","yyyy-MM-dd" }, new[] { "d MMMM, yyyy","dddd, d MMMM yyyy","dddd, dd MMMM yyyy","dd MMMM yyyy","d-MMM-yyyy","dd-MMM-yyyy","ddd, d-MMMM-yyyy","ddd, dd-MMMM-yyyy" }, new[] { "HH:mm","H:mm" }, new[] { "HH:mm:ss","H:mm:ss" }, new[] { "MMMM, yyyy" } } },
+                       { 0x002c, new [] { new[] { "dd.MM.yyyy","dd.MM.yy","d.M.yy","dd/MM/yy","yyyy-MM-dd" }, new[] { "dd MMMM yyyy\'-cü il\'" }, new[] { "HH:mm","H:mm" }, new[] { "HH:mm:ss","H:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x002d, new [] { new[] { "yyyy/MM/dd","yyyy-MM-dd" }, new[] { "dddd, yyyy\'(e)ko\' MMMM\'ren\' d\'a\'" }, new[] { "H:mm","HH:mm" }, new[] { "H:mm:ss","HH:mm:ss" }, new[] { "yyyy\'(e)ko\' MMMM" } } },
+                       { 0x002e, new [] { new[] { "d. M. yyyy","d. M. yy","dd.MM.yyyy","dd.MM.yy","yyyy-MM-dd" }, new[] { "dddd, \'dnja\' d. MMMM yyyy","dddd, d. MMMM yyyy","d. MMMM yyyy","d. M. yyyy" }, new[] { "H.mm","H.mm \'hodź.\'","HH:mm" }, new[] { "H.mm.ss","H.mm.ss \'hodź.\'","HH:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x002f, new [] { new[] { "dd.MM.yyyy","dd.MM.yy","d. M. yyyy \'г.\'" }, new[] { "dddd, dd MMMM yyyy" }, new[] { "HH:mm" }, new[] { "HH:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x0030, new [] { new[] { "yyyy-MM-dd","yyyy MMM d" }, new[] { "yyyy MMMM d, dddd","yyyy MMMM d" }, new[] { "HH:mm" }, new[] { "HH:mm:ss" }, new[] { "yyyy MMMM" } } },
+                       { 0x0031, new [] { new[] { "yyyy-MM-dd","yyyy MMM d" }, new[] { "yyyy MMMM d, dddd","yyyy MMMM d" }, new[] { "HH:mm" }, new[] { "HH:mm:ss" }, new[] { "yyyy MMMM" } } },
+                       { 0x0032, new [] { new[] { "dd/MM/yy","yyyy/MM/dd","yy/MM/dd","yyyy-MM-dd" }, new[] { "dd MMMM yyyy" }, new[] { "hh:mm tt","h:mm tt","HH:mm" }, new[] { "hh:mm:ss tt","h:mm:ss tt","HH:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x0034, new [] { new[] { "yyyy/MM/dd","yy/MM/dd","yyyy-MM-dd" }, new[] { "dd MMMM yyyy" }, new[] { "hh:mm tt","h:mm tt","HH:mm" }, new[] { "hh:mm:ss tt","h:mm:ss tt","HH:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x0035, new [] { new[] { "dd-MM-yyyy","dd-MM-yy","dd/MM/yy","yyyy/MM/dd","yy/MM/dd","yyyy-MM-dd" }, new[] { "dd MMMM yyyy" }, new[] { "hh:mm tt","h:mm tt","HH:mm" }, new[] { "hh:mm:ss tt","h:mm:ss tt","HH:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x0036, new [] { new[] { "yyyy/MM/dd","yy/MM/dd","yyyy-MM-dd","yyyy/MMM/dd" }, new[] { "dd MMMM yyyy" }, new[] { "hh:mm tt","h:mm tt","HH:mm" }, new[] { "hh:mm:ss tt","h:mm:ss tt","HH:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x0037, new [] { new[] { "dd.MM.yyyy","dd.MM.yy","dd.MMM.yyyy","d.MM.yy","d.M.yy","d.M.yyyy","yyyy-MM-dd" }, new[] { "dddd, d MMMM, yyyy \'წელი\'","yyyy \'წლის\' d MMMM, dddd","d MMMM, yyyy \'წელი\', dddd","d MMMM, yyyy","d MMM. yyyy" }, new[] { "H:mm","HH:mm" }, new[] { "H:mm:ss","HH:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x0038, new [] { new[] { "dd-MM-yyyy","dd-MM-yy","yyyy-MM-dd" }, new[] { "d. MMMM yyyy" }, new[] { "HH:mm","HH.mm" }, new[] { "HH:mm:ss","HH.mm.ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x0039, new [] { new[] { "dd-MM-yyyy","dd-MM-yy","d-M-yy","d.M.yy","yyyy-MM-dd" }, new[] { "dd MMMM yyyy","d MMMM yyyy" }, new[] { "HH:mm","H:mm","tt hh:mm","tt h:mm" }, new[] { "HH:mm:ss","H:mm:ss","tt hh:mm:ss","tt h:mm:ss" }, new[] { "MMMM, yyyy" } } },
+                       { 0x003a, new [] { new[] { "dd/MM/yyyy","yyyy-MM-dd","ddMMyyyy","d-M-yyyy","d/M/yyyy" }, new[] { "dddd, d\' ta\\' \'MMMM yyyy","d\' ta\\' \'MMMM yyyy","dd MMM yyyy" }, new[] { "HH:mm","h:mm tt","H:mm" }, new[] { "HH:mm:ss","h:mm:ss tt","H:mm:ss","h:mm tt" }, new[] { "MMMM yyyy" } } },
+                       { 0x003b, new [] { new[] { "dd.MM.yyyy","dd.MM.yy","d.M.yy","yyyy-MM-dd" }, new[] { "dddd, MMMM d\'. b. \'yyyy","MMMM d\'. b. \'yyyy" }, new[] { "HH:mm","H:mm","HH.mm" }, new[] { "HH:mm:ss","H:mm:ss","HH.mm.ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x003c, new [] { new[] { "dd/MM/yyyy","dd/MM/yy","d/M/yy","d.M.yy","yyyy-MM-dd" }, new[] { "d MMMM yyyy","dd MMMM yyyy","dd MMM yyyy","d MMM yyyy" }, new[] { "HH:mm","H:mm" }, new[] { "HH:mm:ss","H:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x003e, new [] { new[] { "dd/MM/yyyy","dd/MM/yy","yyyy-MM-dd" }, new[] { "dd MMMM yyyy" }, new[] { "H:mm","HH:mm" }, new[] { "H:mm:ss","HH:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x003f, new [] { new[] { "d-MMM-yy" }, new[] { "d MMMM yyyy \'ж.\'","dd MMMM yyyy \'ж.\'" }, new[] { "HH:mm","H:mm" }, new[] { "HH:mm:ss","H:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x0040, new [] { new[] { "d-MMM yy" }, new[] { "dd\'-\'MMMM yyyy\'-ж.\'" }, new[] { "HH:mm","H:mm" }, new[] { "HH:mm:ss","H:mm:ss" }, new[] { "MMMM yyyy\'-ж.\'" } } },
+                       { 0x0041, new [] { new[] { "M/d/yyyy","M/d/yy","MM/dd/yy","MM/dd/yyyy","yy/MM/dd","yyyy-MM-dd","dd-MMM-yy" }, new[] { "dddd, MMMM dd, yyyy","MMMM dd, yyyy","dddd, dd MMMM, yyyy","dd MMMM, yyyy" }, new[] { "h:mm tt","hh:mm tt","H:mm","HH:mm" }, new[] { "h:mm:ss tt","hh:mm:ss tt","H:mm:ss","HH:mm:ss" }, new[] { "MMMM, yyyy" } } },
+                       { 0x0042, new [] { new[] { "dd.MM.yy \'ý.\'","dd.MM.yyyy" }, new[] { "yyyy\'-nji ýylyň \'d\'-nji \'MMMM" }, new[] { "HH:mm","H:mm" }, new[] { "HH:mm:ss","H:mm:ss" }, new[] { "yyyy \'ý.\' MMMM" } } },
+                       { 0x0043, new [] { new[] { "dd.MM.yyyy" }, new[] { "yyyy \'yil\' d-MMMM","d MMMM yyyy","dd MMMM yyyy" }, new[] { "HH:mm","H:mm" }, new[] { "HH:mm:ss","H:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x0044, new [] { new[] { "dd.MM.yyyy","dd.MM.yy","d.M.yy","dd/MM/yy","yyyy-MM-dd","dd MMMM yyyy\' ел\'" }, new[] { "dd MMMM yyyy\' ел\'" }, new[] { "HH:mm","H:mm" }, new[] { "HH:mm:ss","H:mm:ss" }, new[] { "MMMM yyyy","MMMM yyyy\' ел\'" } } },
+                       { 0x0045, new [] { new[] { "dd-MM-yy","d-M-yy","dd-MM-yyyy","dd\'-\'MM\'-\'yy","dd\'-\'MM\'-\'yyyy" }, new[] { "dd MMMM yyyy","d MMMM yyyy" }, new[] { "HH.mm","H.mm","tt hh.mm","tt h.mm" }, new[] { "HH.mm.ss","H.mm.ss","tt hh.mm.ss","tt h.mm.ss" }, new[] { "MMMM, yyyy" } } },
+                       { 0x0046, new [] { new[] { "dd-MM-yy","d-M-yy","d.M.yy","dd-MM-yyyy","yyyy-MM-dd" }, new[] { "dd MMMM yyyy dddd","d MMMM yyyy" }, new[] { "tt hh:mm","tt h:mm","H:mm","HH:mm" }, new[] { "tt hh:mm:ss","tt h:mm:ss","H:mm:ss","HH:mm:ss" }, new[] { "MMMM, yyyy" } } },
+                       { 0x0047, new [] { new[] { "dd-MM-yy","d-M-yy","d.M.yy","dd-MM-yyyy","yyyy-MM-dd" }, new[] { "dd MMMM yyyy","d MMMM yyyy" }, new[] { "HH:mm","H:mm","tt hh:mm","tt h:mm" }, new[] { "HH:mm:ss","H:mm:ss","tt hh:mm:ss","tt h:mm:ss" }, new[] { "MMMM, yyyy" } } },
+                       { 0x0048, new [] { new[] { "dd-MM-yy","d-M-yy","d.M.yy","dd-MM-yyyy","yyyy-MM-dd" }, new[] { "dd MMMM yyyy","d MMMM yyyy" }, new[] { "HH:mm","H:mm","tt hh:mm","tt h:mm" }, new[] { "HH:mm:ss","H:mm:ss","tt hh:mm:ss","tt h:mm:ss" }, new[] { "MMMM, yyyy" } } },
+                       { 0x0049, new [] { new[] { "dd-MM-yyyy","dd-MM-yy","d-M-yy","d.M.yy","yyyy-MM-dd" }, new[] { "dd MMMM yyyy","d MMMM yyyy" }, new[] { "HH:mm","H:mm","tt hh:mm","tt h:mm" }, new[] { "HH:mm:ss","H:mm:ss","tt hh:mm:ss","tt h:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x004a, new [] { new[] { "dd-MM-yy","d-M-yy","d.M.yy","dd-MM-yyyy","yyyy-MM-dd" }, new[] { "dd MMMM yyyy","d MMMM yyyy" }, new[] { "HH:mm","H:mm","tt hh:mm","tt h:mm" }, new[] { "HH:mm:ss","H:mm:ss","tt hh:mm:ss","tt h:mm:ss" }, new[] { "MMMM, yyyy" } } },
+                       { 0x004b, new [] { new[] { "dd-MM-yy","d-M-yy","d.M.yy","dd-MM-yyyy","yyyy-MM-dd" }, new[] { "dd MMMM yyyy","d MMMM yyyy" }, new[] { "HH:mm","H:mm","tt hh:mm","tt h:mm" }, new[] { "HH:mm:ss","H:mm:ss","tt hh:mm:ss","tt h:mm:ss" }, new[] { "MMMM, yyyy" } } },
+                       { 0x004c, new [] { new[] { "dd-MM-yy","d-M-yy","dd.MM.yy","d.M.yy" }, new[] { "dd MMMM yyyy","d MMMM yyyy" }, new[] { "HH.mm","H.mm","tt hh.mm","tt h.mm" }, new[] { "HH.mm.ss","H.mm.ss","tt hh.mm.ss","tt h.mm.ss" }, new[] { "MMMM, yyyy" } } },
+                       { 0x004d, new [] { new[] { "dd-MM-yyyy" }, new[] { "yyyy,MMMM dd, dddd" }, new[] { "tt h:mm","tt hh:mm" }, new[] { "tt h:mm:ss","tt hh:mm:ss" }, new[] { "MMMM,yy","MMMM,yyyy" } } },
+                       { 0x004e, new [] { new[] { "dd-MM-yyyy","dd-MM-yy","d-M-yy","d.M.yy","yyyy-MM-dd" }, new[] { "dd MMMM yyyy","d MMMM yyyy" }, new[] { "HH:mm","H:mm","tt hh:mm","tt h:mm" }, new[] { "HH:mm:ss","H:mm:ss","tt hh:mm:ss","tt h:mm:ss" }, new[] { "MMMM, yyyy" } } },
+                       { 0x004f, new [] { new[] { "dd-MM-yyyy","dd-MM-yy","d-M-yy","d.M.yy","yyyy-MM-dd" }, new[] { "dd MMMM yyyy dddd","d MMMM yyyy" }, new[] { "HH:mm","H:mm","tt hh:mm","tt h:mm" }, new[] { "HH:mm:ss","H:mm:ss","tt hh:mm:ss","tt h:mm:ss" }, new[] { "MMMM, yyyy" } } },
+                       { 0x0050, new [] { new[] { "yyyy-MM-dd" }, new[] { "yyyy \'оны\' M\'-р сарын\' d. dddd \'гариг\'.","yyyy оны MMM d. dddd гариг." }, new[] { "HH:mm","H:mm" }, new[] { "HH:mm:ss","H:mm:ss" }, new[] { "yyyy \'оны\' MMMM" } } },
+                       { 0x0051, new [] { new[] { "yyyy/M/d","yyyy-M-d","yyyy.M.d","yyyy.MM.dd","yyyy-MM-dd","yyyy/MM/dd","yy-M-d","yy/M/d","yy.M.d" }, new[] { "yyyy\'ལོའི་ཟླ\' M\'ཚེས\' d","yyyy\'ལོའི་ཟླ\' M\'ཚེས\' d dddd","yyyyལོའི་ཟླ MMM d","yyyyལོའི་ཟླ MMM d dddd" }, new[] { "HH:mm" }, new[] { "HH:mm:ss" }, new[] { "yyyy\'ལོའི་ཟླ་\' M","yyyy.M" } } },
+                       { 0x0052, new [] { new[] { "dd/MM/yy","dd/MM/yyyy","d MMM yy","d MMM yyyy" }, new[] { "d MMMM yyyy","dddd, d MMMM yyyy" }, new[] { "HH:mm","H:mm","hh:mm tt","h:mm tt" }, new[] { "HH:mm:ss","H:mm:ss","hh:mm:ss tt","h:mm:ss tt" }, new[] { "MMMM yyyy" } } },
+                       { 0x0053, new [] { new[] { "dd/MM/yy","yyyy-MM-dd" }, new[] { "d MMMM yyyy","ddd d MMMM yyyy" }, new[] { "H:mm" }, new[] { "HH:mm:ss" }, new[] { "\'ខែ\' MM \'ឆ្នាំ\' yyyy" } } },
+                       { 0x0054, new [] { new[] { "dd/MM/yyyy","dd.M.yyyy","dd.M.yy" }, new[] { "dd MMMM yyyy" }, new[] { "HH:mm" }, new[] { "HH:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x0055, new [] { new[] { "dd-MM-yyyy","dd-MM-yy" }, new[] { "yyyy MMMM d","yyyy MMMM d dddd" }, new[] { "HH:mm","tt h:mm" }, new[] { "HH:mm:ss","tt h:mm:ss" }, new[] { "yyyy MMMM" } } },
+                       { 0x0056, new [] { new[] { "dd/MM/yyyy","dd/MM/yy","d/MM/yy","d/M/yy","dd-MM-yy","dd.MM.yy","yyyy-MM-dd" }, new[] { "dddd, dd\' de \'MMMM\' de \'yyyy","dddd d\' de \'MMMM\' de \'yyyy","d\' de \'MMMM\' de \'yyyy","d MMMM yyyy" }, new[] { "H:mm","HH:mm","hh:mm tt","HH\'H\'mm\'\\'\'" }, new[] { "H:mm:ss","HH:mm:ss","hh:mm:ss tt","HH\'H\'mm\'\\'\'ss\'\\'\\'\'" }, new[] { "MMMM\' de \'yyyy" } } },
+                       { 0x0057, new [] { new[] { "dd-MM-yyyy","dd-MM-yy","d-M-yy","d.M.yy","yyyy-MM-dd" }, new[] { "dd MMMM yyyy","d MMMM yyyy" }, new[] { "HH:mm","H:mm","tt hh:mm","tt h:mm" }, new[] { "HH:mm:ss","H:mm:ss","tt hh:mm:ss","tt h:mm:ss" }, new[] { "MMMM, yyyy" } } },
+                       { 0x0059, new [] { new[] { "dd/MM/yyyy","dd/MM/yy","yyyy-MM-dd" }, new[] { "dddd, dd MMMM, yyyy","dd MMMM yyyy" }, new[] { "h:mm tt","hh:mm tt","H:mm","HH:mm" }, new[] { "h:mm:ss tt","hh:mm:ss tt","H:mm:ss","HH:mm:ss" }, new[] { "MMMM, yyyy" } } },
+                       { 0x005a, new [] { new[] { "dd/MM/yyyy","dd/MM/yy","yyyy-MM-dd" }, new[] { "dd MMMM, yyyy","dddd, dd MMMM, yyyy" }, new[] { "hh:mm tt","HH:mm" }, new[] { "hh:mm:ss tt","HH:mm:ss" }, new[] { "MMMM, yyyy" } } },
+                       { 0x005b, new [] { new[] { "yyyy-MM-dd","yyyy/MM/dd","yy/MM/dd","dd/MM/yyyy","dd/MM/yy" }, new[] { "yyyy MMMM\' මස \'dd\' වැනිදා \'dddd" }, new[] { "tt h:mm","tt hh:mm","H:mm","HH:mm" }, new[] { "tt h:mm:ss","tt hh:mm:ss","H:mm:ss","HH:mm:ss" }, new[] { "yyyy MMMM" } } },
+                       { 0x005c, new [] { new[] { "M/d/yyyy","M/d/yy","MM/dd/yy","MM/dd/yyyy","yy/MM/dd","yyyy-MM-dd","dd-MMM-yy" }, new[] { "dddd, MMMM dd,yyyy","MMMM dd,yyyy","dddd, dd MMMM, yyyy","dd MMMM, yyyy" }, new[] { "h:mm tt","hh:mm tt","H:mm","HH:mm" }, new[] { "h:mm:ss tt","hh:mm:ss tt","H:mm:ss","HH:mm:ss" }, new[] { "MMMM, yyyy" } } },
+                       { 0x005d, new [] { new[] { "d/MM/yyyy","d/M/yy","yy-MM-dd","dd/MM/yyyy","yy-MM-dd","yyyy-MM-dd","dd-MMM-yy" }, new[] { "dddd, dd MMMM, yyyy","ddd, MMMM dd,yyyy","MMMM dd,yyyy","dd MMMM, yyyy" }, new[] { "h:mm tt","hh:mm tt","HH:mm","H:mm" }, new[] { "h:mm:ss tt","hh:mm:ss tt","HH:mm:ss","H:mm:ss" }, new[] { "MMMM, yyyy" } } },
+                       { 0x005e, new [] { new[] { "d/M/yyyy","yyyy-MM-dd" }, new[] { "dddd \'፣\' MMMM d \'ቀን\' yyyy" }, new[] { "h:mm tt" }, new[] { "h:mm:ss tt" }, new[] { "MMMM yyyy" } } },
+                       { 0x005f, new [] { new[] { "dd-MM-yyyy","dd-MM-yy","yyyy-MM-dd" }, new[] { "dd MMMM, yyyy","dddd, dd MMMM, yyyy" }, new[] { "H:mm","HH:mm" }, new[] { "H:mm:ss","HH:mm:ss" }, new[] { "MMMM, yyyy" } } },
+                       { 0x0061, new [] { new[] { "M/d/yyyy","M/d/yy","MM/dd/yy","MM/dd/yyyy","yy/MM/dd","yyyy-MM-dd","dd-MMM-yy" }, new[] { "dddd, MMMM dd, yyyy","MMMM dd, yyyy","dddd, dd MMMM, yyyy","dd MMMM, yyyy" }, new[] { "h:mm tt","hh:mm tt","H:mm","HH:mm" }, new[] { "h:mm:ss tt","hh:mm:ss tt","H:mm:ss","HH:mm:ss" }, new[] { "MMMM,yyyy" } } },
+                       { 0x0062, new [] { new[] { "d-M-yyyy","d-M-yy","dd-MM-yy","dd/MM/yy","dd.MM.yy","yyyy-MM-dd" }, new[] { "dddd d MMMM yyyy","d-MMM-yy","d MMMM yyyy","d MMM yy" }, new[] { "H:mm","HH:mm","H:mm","H.mm" }, new[] { "H:mm:ss","HH:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x0063, new [] { new[] { "yyyy/M/d","yyyy-MM-dd" }, new[] { "yyyy, dd, MMMM, dddd","yyyy, dd, MMMM" }, new[] { "h:mm tt","H:mm" }, new[] { "h:mm:ss tt","H:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x0064, new [] { new[] { "M/d/yyyy","M/d/yy","MM/dd/yy","MM/dd/yyyy","yy/MM/dd","yyyy-MM-dd","dd-MMM-yy" }, new[] { "dddd, MMMM dd, yyyy","MMMM dd, yyyy","dddd, dd MMMM, yyyy","dd MMMM, yyyy" }, new[] { "h:mm tt","hh:mm tt","H:mm","HH:mm" }, new[] { "h:mm:ss tt","hh:mm:ss tt","H:mm:ss","HH:mm:ss" }, new[] { "MMMM, yyyy" } } },
+                       { 0x0065, new [] { new[] { "dd/MM/yy" }, new[] { "ddd, yyyy MMMM dd" }, new[] { "HH:mm","hh:mm tt" }, new[] { "HH:mm:ss","hh:mm:ss tt" }, new[] { "yyyy, MMMM" } } },
+                       { 0x0067, new [] { new[] { "dd/MM/yyyy","dd/MM/yy","dd.MM.yy","dd-MM-yy","yyyy-MM-dd" }, new[] { "dddd d MMMM yyyy","d MMM yy","d MMMM yyyy" }, new[] { "HH:mm","H:mm","HH.mm","HH\' h \'mm" }, new[] { "HH:mm:ss","H:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x0068, new [] { new[] { "d/M/yyyy","d/M/yy","dd/MM/yy","dd/MM/yyyy","yy/MM/dd","yyyy-MM-dd","dd-MMM-yy" }, new[] { "dddd, MMMM dd, yyyy","MMMM dd, yyyy","dddd, dd MMMM, yyyy","dd MMMM, yyyy" }, new[] { "h:mm tt","hh:mm tt","H:mm","HH:mm" }, new[] { "h:mm:ss tt","hh:mm:ss tt","H:mm:ss","HH:mm:ss" }, new[] { "MMMM, yyyy" } } },
+                       { 0x006a, new [] { new[] { "d/M/yyyy","d/M/yy","dd/MM/yy","dd/MM/yyyy","yy/MM/dd","yyyy-MM-dd","dd-MMM-yy" }, new[] { "dddd, dd MMMM, yyyy","dddd, MMMM dd, yyyy","MMMM dd, yyyy","dd MMMM, yyyy" }, new[] { "h:mm tt","hh:mm tt","H:mm","HH:mm" }, new[] { "h:mm:ss tt","hh:mm:ss tt","H:mm:ss","HH:mm:ss" }, new[] { "MMMM,yyyy" } } },
+                       { 0x006b, new [] { new[] { "dd/MM/yyyy","dd/MM/yy","d/M/yy","dd-MM-yy","yyyy-MM-dd" }, new[] { "dddd, dd\' de \'MMMM\' de \'yyyy","dddd d\' de \'MMMM\' de \'yyyy","d\' de \'MMMM\' de \'yyyy" }, new[] { "hh:mm tt","h:mm tt","H:mm","HH:mm" }, new[] { "hh:mm:ss tt","h:mm:ss tt","H:mm:ss","HH:mm:ss" }, new[] { "MMMM\' de \'yyyy" } } },
+                       { 0x006c, new [] { new[] { "dd/MM/yy","yyyy/MM/dd","yy/MM/dd","yyyy-MM-dd" }, new[] { "dd MMMM yyyy" }, new[] { "hh:mm tt","h:mm tt","HH:mm" }, new[] { "hh:mm:ss tt","h:mm:ss tt","HH:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x006d, new [] { new[] { "dd.MM.yy","yyyy-MM-dd" }, new[] { "d MMMM yyyy \'й\'" }, new[] { "H:mm" }, new[] { "H:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x006e, new [] { new[] { "dd.MM.yy","dd/MM/yy","dd-MM-yy" }, new[] { "d. MMMM yyyy","dd. MMMMyyyy","dddd, d. MMMM yyyy","dddd, dd. MMMM yyyy","dddd,\' den \'d. MMMM yyyy","dddd,\' den \'dd. MMMM yyyy" }, new[] { "HH:mm","H:mm","H.mm","H.mm\' Auer\'" }, new[] { "HH:mm:ss","H:mm:ss\' Auer\'","HH:mm:ss\' Auer\'" }, new[] { "MMMM yyyy" } } },
+                       { 0x006f, new [] { new[] { "dd-MM-yyyy","dd-MM-yy","yyyy-MM-dd","yyyy MM dd" }, new[] { "MMMM d\'.-at, \'yyyy","d. MMMM yyyy","dd. MMMM yyyy" }, new[] { "HH:mm","H:mm" }, new[] { "HH:mm:ss","H:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x0070, new [] { new[] { "d/M/yyyy","d/M/yy","dd/MM/yy","dd/MM/yyyy","yy/MM/dd","yyyy-MM-dd","dd-MMM-yy" }, new[] { "dddd, MMMM dd, yyyy","MMMM dd, yyyy","dddd, dd MMMM, yyyy","dd MMMM, yyyy" }, new[] { "h.mm tt" }, new[] { "h.mm.ss tt" }, new[] { "MMMM, yyyy" } } },
+                       { 0x0072, new [] { new[] { "dd/MM/yy","dd-MMM-yyyy" }, new[] { "dddd, MMMM d, yyyy","dd MMMM yyyy" }, new[] { "h:mm tt" }, new[] { "h:mm:ss tt" }, new[] { "MMMM yyyy" } } },
+                       { 0x0073, new [] { new[] { "d/M/yyyy","yyyy-MM-dd" }, new[] { "dddd \'፣\' MMMM d \'መዓልቲ\' yyyy" }, new[] { "h:mm tt" }, new[] { "h:mm:ss tt" }, new[] { "MMMM yyyy" } } },
+                       { 0x0074, new [] { new[] { "dd/MM/yyyy","dd/MM/yy","dd-MM-yyyy","dd-MM-yy" }, new[] { "dddd, dd MMMM, yyyy","dddd, d MMMM, yyyy","dd/MMMM/yyyy","d/MMMM/yyyy","dd MMMM, yyyy","d MMMM, yyyy" }, new[] { "HH:mm","H:mm","hh:mm tt" }, new[] { "HH:mm:ss","H:mm:ss","hh:mm:ss tt" }, new[] { "MMMM, yyyy" } } },
+                       { 0x0075, new [] { new[] { "M/d/yyyy","M/d/yy","MM/dd/yy","MM/dd/yyyy","yy/MM/dd","yyyy-MM-dd","dd-MMM-yy" }, new[] { "dddd, MMMM dd, yyyy","MMMM dd, yyyy","dddd, dd MMMM, yyyy","dd MMMM, yyyy" }, new[] { "h:mm tt","hh:mm tt","H:mm","HH:mm" }, new[] { "h:mm:ss tt","hh:mm:ss tt","H:mm:ss","HH:mm:ss" }, new[] { "MMMM, yyyy" } } },
+                       { 0x0077, new [] { new[] { "dd/MM/yy","dd-MMM-yyyy" }, new[] { "dddd, MMMM dd, yyyy","dd MMMM yyyy" }, new[] { "h:mm tt" }, new[] { "h:mm:ss tt" }, new[] { "MMMM yyyy" } } },
+                       { 0x0078, new [] { new[] { "yyyy/M/d","yyyy-M-d","yyyy.M.d","yyyy.MM.dd","yyyy-MM-dd","yyyy/MM/dd" }, new[] { "yyyy\'ꈎ\' M\'ꆪ\' d\'ꑍ\'","dddd, yyyy\'ꈎ\' M\'ꆪ\' d\'ꑍ\'","yyyy\'ꈎ\' M\'ꆪ\' d\'ꑍ\', dddd","yyyyꈎ MMM dꑍ","dddd, yyyyꈎ MMM dꑍ" }, new[] { "tt h:mm","H:mm","HH:mm" }, new[] { "tt h:mm:ss","H:mm:ss","HH:mm:ss" }, new[] { "yyyy\'ꈎ\' M\'ꆪ\'","yyyy.M" } } },
+                       { 0x007a, new [] { new[] { "dd-MM-yyyy","dd-MM-yy","dd/MM/yy","d/M/yy","yyyy-MM-dd" }, new[] { "dddd, dd\' de \'MMMM\' de \'yyyy","dddd d\' de \'MMMM\' de \'yyyy","d\' de \'MMMM\' de \'yyyy" }, new[] { "H:mm","HH:mm" }, new[] { "H:mm:ss","HH:mm:ss" }, new[] { "MMMM\' de \'yyyy" } } },
+                       { 0x007c, new [] { new[] { "M/d/yyyy","M/d/yy","MM/dd/yy","MM/dd/yyyy","yy/MM/dd","yyyy-MM-dd","dd-MMM-yy" }, new[] { "dddd, MMMM dd, yyyy","MMMM dd, yyyy","dddd, dd MMMM, yyyy","dd MMMM, yyyy" }, new[] { "h:mm tt","hh:mm tt","HH:mm","H:mm" }, new[] { "h:mm:ss tt","hh:mm:ss tt","HH:mm:ss","H:mm:ss" }, new[] { "MMMM, yyyy" } } },
+                       { 0x007e, new [] { new[] { "dd/MM/yyyy","dd/MM/yy","dd.MM.yy","dd-MM-yy","yyyy-MM-dd" }, new[] { "dddd d MMMM yyyy","d MMM yy","d MMMM yyyy" }, new[] { "HH:mm","H:mm","HH.mm","HH\' h \'mm","HH\'h\'mm" }, new[] { "HH:mm:ss","H:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x0080, new [] { new[] { "yyyy-M-d","yyyy.M.d","yyyy-MM-dd","yyyy.MM.dd" }, new[] { "yyyy-\'يىل\' d-MMMM","yyyy-\'يىل\' d-MMMM dddd","yyyy-\'يىلى\' MMM\'نىڭ\' d\'-كۈنى\'","yyyy-\'يىلى\' MMM\'نىڭ\' d\'-كۈنى\' dddd","yyyy-M-d dddd" }, new[] { "H:mm","HH:mm","tt h:mm","tt hh:mm" }, new[] { "H:mm:ss","HH:mm:ss","tt h:mm:ss","tt hh:mm:ss" }, new[] { "yyyy-\'يىلى\' MMMM","yyyy MMMM","yyyy.M" } } },
+                       { 0x0081, new [] { new[] { "dd/MM/yyyy","d/MM/yy","dd/MM/yy","d.MM.yy","yyyy-MM-dd" }, new[] { "dddd, dd MMMM, yyyy","d MMMM yyyy" }, new[] { "h:mm tt","hh:mm tt","HH:mm","H:mm" }, new[] { "h:mm:ss tt","hh:mm:ss tt","HH:mm:ss","H:mm:ss" }, new[] { "MMMM, yy","MMMM yyyy" } } },
+                       { 0x0082, new [] { new[] { "dd/MM/yyyy","dd/MM/yy" }, new[] { "dddd d MMMM\' de \'yyyy","d MMMM\' de \'yyyy" }, new[] { "HH\' h \'mm" }, new[] { "HH.mm.ss" }, new[] { "MMMM\' de \'yyyy" } } },
+                       { 0x0083, new [] { new[] { "dd/MM/yyyy","dd/MM/yy" }, new[] { "dddd d MMMM yyyy","d MMM yy","d MMMM yyyy" }, new[] { "HH:mm","H:mm","HH.mm" }, new[] { "H:mm:ss","HH:mm:ss" }, new[] { "MMMM\' di u \'yyyy" } } },
+                       { 0x0084, new [] { new[] { "dd/MM/yyyy","dd/MM/yy","dd.MM.yy","dd-MM-yy","yyyy-MM-dd" }, new[] { "dddd d MMMM yyyy","d MMM yy","d MMMM yyyy" }, new[] { "HH:mm","H:mm","HH.mm","HH\' h \'mm","HH\'h\'mm" }, new[] { "HH:mm:ss","H:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x0085, new [] { new[] { "dd.MM.yyyy","d.M.yyyy","yyyy-MM-dd","yyyy MM d","dd yyyy MM d" }, new[] { "dddd, yyyy \'с.\' MMMM d \'күнэ\'","yyyy \'с.\' MMMM d \'күнэ\'","dddd, MMMM d \'күнэ\' yyyy \'с.\'" }, new[] { "H:mm","HH:mm" }, new[] { "H:mm:ss","HH:mm:ss" }, new[] { "yyyy \'с.\' MMMM" } } },
+                       { 0x0086, new [] { new[] { "dd/MM/yyyy","d/MM/yyyy" }, new[] { "dddd, dd\' rech \'MMMM\' rech \'yyyy","dddd d\' de \'MMMM\' de \'yyyy","d\' de \'MMMM\' de \'yyyy" }, new[] { "h:mm tt","HH:mm" }, new[] { "h:mm:ss tt","HH:mm:ss" }, new[] { "MMMM\' rech \'yyyy" } } },
+                       { 0x0087, new [] { new[] { "d/MM/yyyy","d/M/yy" }, new[] { "d \' \' MMMM \' \' yyyy","dddd, d MMMM yyyy" }, new[] { "H:mm" }, new[] { "H:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x0088, new [] { new[] { "dd/MM/yyyy","dd/MM/yy","dd.MM.yy","dd-MM-yy","yyyy-MM-dd" }, new[] { "dddd d MMMM yyyy","d MMM yy","d MMMM yyyy" }, new[] { "HH:mm","H:mm","HH.mm","HH\' h \'mm" }, new[] { "HH:mm:ss","H:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x008c, new [] { new[] { "yyyy/M/d","yyyy-MM-dd" }, new[] { "yyyy, dd, MMMM, dddd","yyyy, dd, MMMM" }, new[] { "h:mm tt","H:mm" }, new[] { "h:mm:ss tt","H:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x0091, new [] { new[] { "dd/MM/yyyy","dd/MM/yy","d/M/yy","d.M.yy","yyyy-MM-dd" }, new[] { "dd MMMM yyyy","d MMMM yyyy" }, new[] { "HH:mm","H:mm","hh:mm tt","h:mm tt" }, new[] { "HH:mm:ss","H:mm:ss","hh:mm:ss tt","h:mm:ss tt" }, new[] { "MMMM yyyy" } } },
+                       { 0x0092, new [] { new[] { "yyyy/MM/dd" }, new[] { "dddd, dd MMMM, yyyy" }, new[] { "hh:mm tt","HH:mm" }, new[] { "hh:mm:ss tt","HH:mm:ss" }, new[] { "MMMM, yyyy" } } },
+                       { 0x0401, new [] { new[] { "dd/MM/yy","dd/MM/yyyy" }, new[] { "dd/MMMM/yyyy","dddd, dd MMMM, yyyy" }, new[] { "hh:mm tt","HH:mm" }, new[] { "hh:mm:ss tt","HH:mm:ss" }, new[] { "MMMM, yyyy" } } },
+                       { 0x0402, new [] { new[] { "d.M.yyyy \'г.\'","dd.M.yyyy \'г.\'","d.MM.yyyy \'г.\'","dd.MM.yyyy \'г.\'" }, new[] { "dd MMMM yyyy \'г.\'","d MMMM yyyy \'г.\'","dddd, dd MMMM yyyy \'г.\'","dddd, d MMMM yyyy \'г.\'" }, new[] { "H:mm","HH:mm" }, new[] { "H:mm:ss","HH:mm:ss" }, new[] { "MMMM yyyy \'г.\'" } } },
+                       { 0x0403, new [] { new[] { "dd/MM/yyyy","dd/MM/yy","d/MM/yy","dd-MM-yyyy","dd-MM-yy","d-MM-yy","dd.MM.yyyy","dd.MM.yy","d.MM.yy" }, new[] { "dddd, d MMMM\' de \'yyyy","dddd, d MMMM yyyy","d MMMM\' de \'yyyy","d MMMM yyyy","d\'-\'MMMM\'-\'yyyy","ddd, d MMM yyyy" }, new[] { "H:mm" }, new[] { "H:mm:ss" }, new[] { "MMMM\' de \'yyyy","MMMM yyyy","MMM yyyy","MMM yy" } } },
+                       { 0x0404, new [] { new[] { "yyyy/M/d","yyyy/MM/dd","yyyy-MM-dd" }, new[] { "yyyy\'年\'M\'月\'d\'日\'","yyyy\'年\'MM\'月\'dd\'日\'","yyyy年MMMd日","dddd yyyy年MMMd日" }, new[] { "tt hh:mm","tt h:mm","HH:mm","H:mm" }, new[] { "tt hh:mm:ss","tt h:mm:ss","HH:mm:ss","H:mm:ss" }, new[] { "yyyy\'年\'M\'月\'" } } },
+                       { 0x0405, new [] { new[] { "d. M. yyyy","d/M/yyyy","dd/MM/yyyy","d/M/yy","dd/MM/yy","d-M-yy","yyyy-MM-dd","yyyy-M-d","yy-M-d" }, new[] { "d. MMMM yyyy" }, new[] { "H:mm","HH:mm","h.mm tt","H.mm" }, new[] { "H:mm:ss","HH:mm:ss","h.mm.ss tt","H.mm.ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x0406, new [] { new[] { "dd-MM-yyyy","dd-MM-yy","yyyy-MM-dd","yyyy MM dd" }, new[] { "d. MMMM yyyy" }, new[] { "HH:mm","H:mm" }, new[] { "HH:mm:ss","H:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x0407, new [] { new[] { "dd.MM.yyyy","dd.MM.yy","yyyy-MM-dd","dd. MMM. yyyy" }, new[] { "dddd, d. MMMM yyyy","d. MMMM yyyy","d. MMM. yyyy" }, new[] { "HH:mm","HH:mm\' Uhr\'" }, new[] { "HH:mm:ss","HH:mm:ss\' Uhr\'" }, new[] { "MMMM yyyy" } } },
+                       { 0x0408, new [] { new[] { "d/M/yyyy","dd/MM/yyyy","d/M/yy","dd/MM/yy","dd/MMM/yyyy","yyyy-MM-dd" }, new[] { "dddd, d MMMM yyyy","d MMMM yyyy" }, new[] { "h:mm tt","hh:mm tt","H:mm","HH:mm" }, new[] { "h:mm:ss tt","hh:mm:ss tt","H:mm:ss","HH:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x0409, new [] { new[] { "M/d/yyyy","M/d/yy","MM/dd/yy","MM/dd/yyyy","yy/MM/dd","yyyy-MM-dd","dd-MMM-yy" }, new[] { "dddd, MMMM d, yyyy","MMMM d, yyyy","dddd, d MMMM, yyyy","d MMMM, yyyy" }, new[] { "h:mm tt","hh:mm tt","H:mm","HH:mm" }, new[] { "h:mm:ss tt","hh:mm:ss tt","H:mm:ss","HH:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x040b, new [] { new[] { "d.M.yyyy","dd.MM.yyyy","d.M.yy","yyyy-MM-dd" }, new[] { "d. MMMM yyyy","dd. MMMM yyyy","dddd, d. MMMM yyyy" }, new[] { "H:mm","H.mm" }, new[] { "H:mm:ss","H.mm.ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x040c, new [] { new[] { "dd/MM/yyyy","dd/MM/yy","dd.MM.yy","dd-MM-yy","yyyy-MM-dd" }, new[] { "dddd d MMMM yyyy","d MMMM yyyy","d MMM yy" }, new[] { "HH:mm","H:mm","HH.mm","HH\' h \'mm","HH\'h\'mm" }, new[] { "HH:mm:ss","H:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x040d, new [] { new[] { "dd/MM/yyyy","dd MMMM yyyy","dd/MM/yy","dd/MMMM/yyyy","dd-MM-yy","dd-MM-yyyy","dd-MMMM-yyyy","yyyy-MM-dd","dd \'ב\'MMMM yyyy","dd MMM yy" }, new[] { "dddd dd MMMM yyyy","dd MMMM yyyy","dddd dd \'ב\'MMMM yyyy","ddd dd \'ב\'MMMM yyyy","dd \'ב\'MMMM yyyy" }, new[] { "HH:mm","hh:mm tt" }, new[] { "HH:mm:ss","hh:mm:ss tt" }, new[] { "MMMM yyyy" } } },
+                       { 0x040e, new [] { new[] { "yyyy.MM.dd.","yyyy. MM. dd.","yyyy-MM-dd","yy-MM-dd" }, new[] { "yyyy. MMMM d." }, new[] { "H:mm","HH:mm","h:mm tt" }, new[] { "H:mm:ss","HH:mm:ss","h:mm:ss tt" }, new[] { "yyyy. MMMM" } } },
+                       { 0x040f, new [] { new[] { "d.M.yyyy","dd.MM.yy","d. M. yyyy.","d. M. \'\\'\'yy.","yyyy-MM-dd","yy MM dd","dd/MM/yy" }, new[] { "d. MMMM yyyy","dd. MMMM yyyy","dddd d. MMMM  yyyy" }, new[] { "HH:mm","H:mm" }, new[] { "HH:mm:ss","H:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x0410, new [] { new[] { "dd/MM/yyyy","dd/MMM/yyyy","dd/MM/yy","dd.M.yy","d/M/yy" }, new[] { "dddd d MMMM yyyy","d-MMM-yy","d MMMM yyyy" }, new[] { "HH:mm" }, new[] { "HH:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x0411, new [] { new[] { "yyyy/MM/dd","yy/MM/dd","yy/M/d","yyyy/M/d","yyyy-MM-dd" }, new[] { "yyyy\'年\'M\'月\'d\'日\'","yyyy\'年\'MM\'月\'dd\'日\'","yyyy\'年\'M\'月\'d\'日 \'dddd","yyyy\'年\'MM\'月\'dd\'日 \'dddd","yyyy\'年\'MMM\'月\'d\'日\'","yyyy\'年\'MMM\'月\'d\'日 \'dddd","yyyy\'年\'MMMMd\'日\'","yyyy\'年\'MMMMd\'日 \'dddd" }, new[] { "H:mm","HH:mm","tt h:mm","tt hh:mm" }, new[] { "H:mm:ss","HH:mm:ss","tt h:mm:ss","tt hh:mm:ss" }, new[] { "yyyy\'年\'M\'月\'" } } },
+                       { 0x0412, new [] { new[] { "yyyy-MM-dd","yy-MM-dd","yy-M-d","yyyy-M-d" }, new[] { "yyyy\'년\' M\'월\' d\'일\' dddd","yyyy\'년\' M\'월\' d\'일\'","yy\'년\' M\'월\' d\'일\' dddd","yy\'년\' M\'월\' d\'일\'","yyyy\'년\' MM\'월\' dd\'일\' dddd","yyyy\'년\' MM\'월\' dd\'일\'","yyyy\'년 \'MMM\'월 \'d\'일 \'dddd","yyyy\'년 \'MMM\'월 \'d\'일\'","yyyy\'년 \'MMMM d\'일 \'dddd","yyyy\'년 \'MMMM d\'일\'" }, new[] { "tt h:mm","tt hh:mm","H:mm","HH:mm" }, new[] { "tt h:mm:ss","tt hh:mm:ss","H:mm:ss","HH:mm:ss" }, new[] { "yyyy\'년\' M\'월\'" } } },
+                       { 0x0413, new [] { new[] { "d-M-yyyy","d-M-yy","dd-MM-yy","dd/MM/yy","dd.MM.yy","dd.MMM.yyyy","yyyy-MM-dd" }, new[] { "dddd d MMMM yyyy","d-MMM-yy","d MMMM yyyy","d MMM yy" }, new[] { "HH:mm","H:mm","H.mm","HH.mm\' uur\'","HH:mm\' uur\'" }, new[] { "HH:mm:ss","H:mm:ss","HH.mm.ss\' uur\'","HH:mm:ss\' uur\'" }, new[] { "MMMM yyyy" } } },
+                       { 0x0414, new [] { new[] { "dd.MM.yyyy","d.MM.yyyy","dd.MM.yy","d.M.yy","dd. MMM. yyyy","yyyy-MM-dd" }, new[] { "d. MMMM yyyy","dd. MMMM yyyy" }, new[] { "HH:mm","H:mm","\'kl \'H:mm","\'kl \'HH:mm","HH.mm","H.mm","\'kl \'HH.mm","\'kl \'H.mm" }, new[] { "HH:mm:ss","H:mm:ss","\'kl \'HH:mm:ss","\'kl \'H:mm:ss","HH.mm.ss","H.mm.ss","\'kl \'HH.mm.ss","\'kl \'H.mm.ss" }, new[] { "MMMM yyyy","MMM. yyyy","MM.yyyy" } } },
+                       { 0x0415, new [] { new[] { "yyyy-MM-dd","yy-MM-dd" }, new[] { "d MMMM yyyy","dd MMMM yyyy" }, new[] { "HH:mm","H:mm" }, new[] { "HH:mm:ss","H:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x0416, new [] { new[] { "dd/MM/yyyy","dd/MM/yy","d/M/yyyy","d/M/yy","dd-MM-yy","dd-MM-yyyy","d-M-yy","d-M-yyyy","dd.MM.yy","dd.MM.yyyy","dd.MMM.yyyy","d.M.yy","d.M.yyyy","yyyy-MM-dd" }, new[] { "dddd, d\' de \'MMMM\' de \'yyyy","d\' de \'MMMM\' de \'yyyy" }, new[] { "HH:mm" }, new[] { "HH:mm:ss" }, new[] { "MMMM\' de \'yyyy" } } },
+                       { 0x0417, new [] { new[] { "dd-MM-yyyy","dd-MM-yy" }, new[] { "dddd, \'ils’\' d. MMMM, yyyy" }, new[] { "HH:mm","H:mm","HH" }, new[] { "HH:mm:ss","H:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x0418, new [] { new[] { "dd.MM.yyyy","d.M.yyyy","d.MM.yy","dd-MM-yyyy","dd-MM-yy","dd\'/\'MM\'/\'yyyy","dd\'/\'MM\'/\'yy","yyyy-MM-dd","yyyy\'/\'MM\'/\'dd" }, new[] { "d MMMM yyyy","dddd, d MMMM yyyy","dddd d MMMM yyyy","d MMM yyyy" }, new[] { "H:mm","HH:mm","h:mm tt","hh:mm tt" }, new[] { "H:mm:ss","HH:mm:ss","h:mm:ss tt","hh:mm:ss tt" }, new[] { "MMMM yyyy","MMM yyyy","MMMM yy","MMM yy","MM.yyyy","MM.yy","MM\'/\'yyyy","MM\'/\'yy" } } },
+                       { 0x0419, new [] { new[] { "dd.MM.yyyy","dd.MM.yy","d.M.yy","dd-MM-yyyy","dd/MM/yy" }, new[] { "d MMMM yyyy \'г.\'","dd MMMM yyyy \'г.\'" }, new[] { "H:mm","HH:mm" }, new[] { "H:mm:ss","HH:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x041a, new [] { new[] { "d.M.yyyy.","d.M.yy.","d. M. yyyy.","dd.MM.yyyy.","d. M. yy.","dd.MM.yy.","dd. MM. yy.","yyyy-MM-dd" }, new[] { "d. MMMM yyyy.","dd. MMMM yyyy.","dddd, d. MMMM yyyy." }, new[] { "H:mm","HH:mm" }, new[] { "H:mm:ss","HH:mm:ss" }, new[] { "MMMM, yyyy" } } },
+                       { 0x041b, new [] { new[] { "d.M.yyyy","dd.MM.yyyy","dd.MM.yy","yyyy-MM-dd","yy-MM-dd","dd. MM. yyyy","d/MM/yyyy","dd. MM. yy" }, new[] { "d. MMMM yyyy" }, new[] { "H:mm","HH:mm","H.mm" }, new[] { "H:mm:ss","HH:mm:ss","H.mm.ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x041c, new [] { new[] { "d.M.yyyy","d.M.yy" }, new[] { "dddd, d MMMM yyyy" }, new[] { "HH:mm" }, new[] { "HH:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x041d, new [] { new[] { "yyyy-MM-dd","yy-MM-dd" }, new[] { "\'den \'d MMMM yyyy","dddd\' den \'d MMMM yyyy" }, new[] { "HH:mm","H:mm","\'kl \'H:mm" }, new[] { "HH:mm:ss","H:mm:ss","\'kl \'H:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x041e, new [] { new[] { "d/M/yyyy","d/M/yy","dd/MM/yy","dd/MM/yyyy","d MMM yyyy","dd MMM yyyy","yyyy-MM-dd" }, new[] { "d MMMM yyyy","ddd d MMMM yyyy","\'วัน\'dddd\'ที่\' d MMMM gg yyyy" }, new[] { "H:mm","HH:mm","h:mm tt","hh:mm tt" }, new[] { "H:mm:ss","HH:mm:ss","h:mm:ss tt","hh:mm:ss tt" }, new[] { "MMMM yyyy" } } },
+                       { 0x041f, new [] { new[] { "d.M.yyyy","d.M.yy","dd.MM.yyyy","dd.MM.yy" }, new[] { "d MMMM yyyy dddd","d MMMM yyyy","dd MMMM yyyy dddd","dd MMMM yyyy" }, new[] { "HH:mm" }, new[] { "HH:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x0420, new [] { new[] { "dd/MM/yyyy","dd/MM/yy","yyyy-MM-dd" }, new[] { "dd MMMM, yyyy","dddd, dd MMMM, yyyy" }, new[] { "h:mm tt","hh:mm tt","H:mm","HH:mm" }, new[] { "h:mm:ss tt","hh:mm:ss tt","H:mm:ss","HH:mm:ss" }, new[] { "MMMM, yyyy" } } },
+                       { 0x0421, new [] { new[] { "dd/MM/yyyy","dd/MM/yy","dd-MM-yyyy" }, new[] { "dd MMMM yyyy" }, new[] { "H:mm","HH:mm" }, new[] { "H:mm:ss","HH:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x0422, new [] { new[] { "dd.MM.yyyy","dd.MM.yy","yyyy-MM-dd" }, new[] { "d MMMM yyyy\' р.\'" }, new[] { "H:mm","HH:mm" }, new[] { "H:mm:ss","HH:mm:ss" }, new[] { "MMMM yyyy\' р.\'" } } },
+                       { 0x0423, new [] { new[] { "dd.MM.yy" }, new[] { "d MMMM yyyy" }, new[] { "HH:mm","H:mm" }, new[] { "HH:mm:ss","H:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x0424, new [] { new[] { "d.M.yyyy","d.M.yy","d. M. yyyy","dd.MM.yyyy","d.  M. yy","dd.MM.yy","dd. MM. yy" }, new[] { "d. MMMM yyyy","dd. MMMM yyyy","dddd, d. MMMM yyyy" }, new[] { "H:mm","HH:mm" }, new[] { "H:mm:ss","HH:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x0425, new [] { new[] { "d.MM.yyyy","dd.MM.yyyy","dd.MM.yy","yyyy-MM-dd" }, new[] { "d. MMMM yyyy","dd. MMMM yyyy","dddd, d. MMMM yyyy" }, new[] { "H:mm","HH:mm" }, new[] { "H:mm:ss","HH:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x0426, new [] { new[] { "dd.MM.yyyy.","dd.MM.yy.","dd-MM-yyyy." }, new[] { "dddd, yyyy\'. gada \'d. MMMM" }, new[] { "H:mm","HH:mm" }, new[] { "H:mm:ss","HH:mm:ss" }, new[] { "yyyy\'. gada \'MMMM" } } },
+                       { 0x0427, new [] { new[] { "yyyy-MM-dd","yyyy MM dd" }, new[] { "yyyy \'m.\' MMMM d \'d.\'" }, new[] { "HH:mm" }, new[] { "HH:mm:ss" }, new[] { "yyyy \'m.\' MMMM" } } },
+                       { 0x0428, new [] { new[] { "dd.MM.yyyy","dd.MM.yy","d.M.yy","dd-MM-yyyy","dd/MM/yy" }, new[] { "d MMMM yyyy\' с.\'","dd MMMM yyyy\' с.\'" }, new[] { "HH:mm","H:mm" }, new[] { "HH:mm:ss","H:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x0429, new [] { new[] { "dd/MM/yyyy","dd/MM/yy" }, new[] { "dddd, dd MMMM yyyy","dd MMMM yyyy" }, new[] { "hh:mm tt","HH:mm" }, new[] { "hh:mm:ss tt","HH:mm:ss" }, new[] { "MMMM, yyyy" } } },
+                       { 0x042a, new [] { new[] { "dd/MM/yyyy","dd/MM/yy","dd-MM-yy","dd-MM-yyyy","yyyy-MM-dd" }, new[] { "dd MMMM yyyy" }, new[] { "h:mm tt","hh:mm tt","H:mm","HH:mm" }, new[] { "h:mm:ss tt","hh:mm:ss tt","H:mm:ss","HH:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x042b, new [] { new[] { "dd.MM.yyyy","dd.MM.yy","d/MM/yyyy","dd/MM/yyyy","d/MMM/yyyy","dd/MMM/yyyy","yyyy-MM-dd" }, new[] { "d MMMM, yyyy","dddd, d MMMM yyyy","dddd, dd MMMM yyyy","dd MMMM yyyy","d-MMM-yyyy","dd-MMM-yyyy","ddd, d-MMMM-yyyy","ddd, dd-MMMM-yyyy" }, new[] { "HH:mm","H:mm" }, new[] { "HH:mm:ss","H:mm:ss" }, new[] { "MMMM, yyyy" } } },
+                       { 0x042c, new [] { new[] { "dd.MM.yyyy","dd.MM.yy","d.M.yy","dd/MM/yy","yyyy-MM-dd" }, new[] { "dd MMMM yyyy\'-cü il\'" }, new[] { "HH:mm","H:mm" }, new[] { "HH:mm:ss","H:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x042d, new [] { new[] { "yyyy/MM/dd","yyyy-MM-dd" }, new[] { "dddd, yyyy\'(e)ko\' MMMM\'ren\' d\'a\'" }, new[] { "H:mm","HH:mm" }, new[] { "H:mm:ss","HH:mm:ss" }, new[] { "yyyy\'(e)ko\' MMMM" } } },
+                       { 0x042e, new [] { new[] { "d. M. yyyy","d. M. yy","dd.MM.yyyy","dd.MM.yy","yyyy-MM-dd" }, new[] { "dddd, \'dnja\' d. MMMM yyyy","dddd, d. MMMM yyyy","d. MMMM yyyy","d. M. yyyy" }, new[] { "H.mm","H.mm \'hodź.\'","HH:mm" }, new[] { "H.mm.ss","H.mm.ss \'hodź.\'","HH:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x042f, new [] { new[] { "dd.MM.yyyy","dd.MM.yy","d. M. yyyy \'г.\'" }, new[] { "dddd, dd MMMM yyyy" }, new[] { "HH:mm" }, new[] { "HH:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x0430, new [] { new[] { "yyyy-MM-dd","yyyy MMM d" }, new[] { "yyyy MMMM d, dddd","yyyy MMMM d" }, new[] { "HH:mm" }, new[] { "HH:mm:ss" }, new[] { "yyyy MMMM" } } },
+                       { 0x0431, new [] { new[] { "yyyy-MM-dd","yyyy MMM d" }, new[] { "yyyy MMMM d, dddd","yyyy MMMM d" }, new[] { "HH:mm" }, new[] { "HH:mm:ss" }, new[] { "yyyy MMMM" } } },
+                       { 0x0432, new [] { new[] { "dd/MM/yy","yyyy/MM/dd","yy/MM/dd","yyyy-MM-dd" }, new[] { "dd MMMM yyyy" }, new[] { "hh:mm tt","h:mm tt","HH:mm" }, new[] { "hh:mm:ss tt","h:mm:ss tt","HH:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x0434, new [] { new[] { "yyyy/MM/dd","yy/MM/dd","yyyy-MM-dd" }, new[] { "dd MMMM yyyy" }, new[] { "hh:mm tt","h:mm tt","HH:mm" }, new[] { "hh:mm:ss tt","h:mm:ss tt","HH:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x0435, new [] { new[] { "dd-MM-yyyy","dd-MM-yy","dd/MM/yy","yyyy/MM/dd","yy/MM/dd","yyyy-MM-dd" }, new[] { "dd MMMM yyyy" }, new[] { "hh:mm tt","h:mm tt","HH:mm" }, new[] { "hh:mm:ss tt","h:mm:ss tt","HH:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x0436, new [] { new[] { "yyyy/MM/dd","yy/MM/dd","yyyy-MM-dd","yyyy/MMM/dd" }, new[] { "dd MMMM yyyy" }, new[] { "hh:mm tt","h:mm tt","HH:mm" }, new[] { "hh:mm:ss tt","h:mm:ss tt","HH:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x0437, new [] { new[] { "dd.MM.yyyy","dd.MM.yy","dd.MMM.yyyy","d.MM.yy","d.M.yy","d.M.yyyy","yyyy-MM-dd" }, new[] { "dddd, d MMMM, yyyy \'წელი\'","yyyy \'წლის\' d MMMM, dddd","d MMMM, yyyy \'წელი\', dddd","d MMMM, yyyy","d MMM. yyyy" }, new[] { "H:mm","HH:mm" }, new[] { "H:mm:ss","HH:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x0438, new [] { new[] { "dd-MM-yyyy","dd-MM-yy","yyyy-MM-dd" }, new[] { "d. MMMM yyyy" }, new[] { "HH:mm","HH.mm" }, new[] { "HH:mm:ss","HH.mm.ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x0439, new [] { new[] { "dd-MM-yyyy","dd-MM-yy","d-M-yy","d.M.yy","yyyy-MM-dd" }, new[] { "dd MMMM yyyy","d MMMM yyyy" }, new[] { "HH:mm","H:mm","tt hh:mm","tt h:mm" }, new[] { "HH:mm:ss","H:mm:ss","tt hh:mm:ss","tt h:mm:ss" }, new[] { "MMMM, yyyy" } } },
+                       { 0x043a, new [] { new[] { "dd/MM/yyyy","yyyy-MM-dd","ddMMyyyy","d-M-yyyy","d/M/yyyy" }, new[] { "dddd, d\' ta\\' \'MMMM yyyy","d\' ta\\' \'MMMM yyyy","dd MMM yyyy" }, new[] { "HH:mm","h:mm tt","H:mm" }, new[] { "HH:mm:ss","h:mm:ss tt","H:mm:ss","h:mm tt" }, new[] { "MMMM yyyy" } } },
+                       { 0x043b, new [] { new[] { "dd.MM.yyyy","dd.MM.yy","d.M.yy","yyyy-MM-dd" }, new[] { "dddd, MMMM d\'. b. \'yyyy","MMMM d\'. b. \'yyyy" }, new[] { "HH:mm","H:mm","HH.mm" }, new[] { "HH:mm:ss","H:mm:ss","HH.mm.ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x043e, new [] { new[] { "dd/MM/yyyy","dd/MM/yy","yyyy-MM-dd" }, new[] { "dd MMMM yyyy" }, new[] { "H:mm","HH:mm" }, new[] { "H:mm:ss","HH:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x043f, new [] { new[] { "d-MMM-yy" }, new[] { "d MMMM yyyy \'ж.\'","dd MMMM yyyy \'ж.\'" }, new[] { "HH:mm","H:mm" }, new[] { "HH:mm:ss","H:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x0440, new [] { new[] { "d-MMM yy" }, new[] { "dd\'-\'MMMM yyyy\'-ж.\'" }, new[] { "HH:mm","H:mm" }, new[] { "HH:mm:ss","H:mm:ss" }, new[] { "MMMM yyyy\'-ж.\'" } } },
+                       { 0x0441, new [] { new[] { "M/d/yyyy","M/d/yy","MM/dd/yy","MM/dd/yyyy","yy/MM/dd","yyyy-MM-dd","dd-MMM-yy" }, new[] { "dddd, MMMM dd, yyyy","MMMM dd, yyyy","dddd, dd MMMM, yyyy","dd MMMM, yyyy" }, new[] { "h:mm tt","hh:mm tt","H:mm","HH:mm" }, new[] { "h:mm:ss tt","hh:mm:ss tt","H:mm:ss","HH:mm:ss" }, new[] { "MMMM, yyyy" } } },
+                       { 0x0442, new [] { new[] { "dd.MM.yy \'ý.\'","dd.MM.yyyy" }, new[] { "yyyy\'-nji ýylyň \'d\'-nji \'MMMM" }, new[] { "HH:mm","H:mm" }, new[] { "HH:mm:ss","H:mm:ss" }, new[] { "yyyy \'ý.\' MMMM" } } },
+                       { 0x0443, new [] { new[] { "dd.MM.yyyy" }, new[] { "yyyy \'yil\' d-MMMM","d MMMM yyyy","dd MMMM yyyy" }, new[] { "HH:mm","H:mm" }, new[] { "HH:mm:ss","H:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x0444, new [] { new[] { "dd.MM.yyyy","dd.MM.yy","d.M.yy","dd/MM/yy","yyyy-MM-dd","dd MMMM yyyy\' ел\'" }, new[] { "dd MMMM yyyy\' ел\'" }, new[] { "HH:mm","H:mm" }, new[] { "HH:mm:ss","H:mm:ss" }, new[] { "MMMM yyyy","MMMM yyyy\' ел\'" } } },
+                       { 0x0445, new [] { new[] { "dd-MM-yy","d-M-yy","dd-MM-yyyy","dd\'-\'MM\'-\'yy","dd\'-\'MM\'-\'yyyy" }, new[] { "dd MMMM yyyy","d MMMM yyyy" }, new[] { "HH.mm","H.mm","tt hh.mm","tt h.mm" }, new[] { "HH.mm.ss","H.mm.ss","tt hh.mm.ss","tt h.mm.ss" }, new[] { "MMMM, yyyy" } } },
+                       { 0x0446, new [] { new[] { "dd-MM-yy","d-M-yy","d.M.yy","dd-MM-yyyy","yyyy-MM-dd" }, new[] { "dd MMMM yyyy dddd","d MMMM yyyy" }, new[] { "tt hh:mm","tt h:mm","H:mm","HH:mm" }, new[] { "tt hh:mm:ss","tt h:mm:ss","H:mm:ss","HH:mm:ss" }, new[] { "MMMM, yyyy" } } },
+                       { 0x0447, new [] { new[] { "dd-MM-yy","d-M-yy","d.M.yy","dd-MM-yyyy","yyyy-MM-dd" }, new[] { "dd MMMM yyyy","d MMMM yyyy" }, new[] { "HH:mm","H:mm","tt hh:mm","tt h:mm" }, new[] { "HH:mm:ss","H:mm:ss","tt hh:mm:ss","tt h:mm:ss" }, new[] { "MMMM, yyyy" } } },
+                       { 0x0448, new [] { new[] { "dd-MM-yy","d-M-yy","d.M.yy","dd-MM-yyyy","yyyy-MM-dd" }, new[] { "dd MMMM yyyy","d MMMM yyyy" }, new[] { "HH:mm","H:mm","tt hh:mm","tt h:mm" }, new[] { "HH:mm:ss","H:mm:ss","tt hh:mm:ss","tt h:mm:ss" }, new[] { "MMMM, yyyy" } } },
+                       { 0x0449, new [] { new[] { "dd-MM-yyyy","dd-MM-yy","d-M-yy","d.M.yy","yyyy-MM-dd" }, new[] { "dd MMMM yyyy","d MMMM yyyy" }, new[] { "HH:mm","H:mm","tt hh:mm","tt h:mm" }, new[] { "HH:mm:ss","H:mm:ss","tt hh:mm:ss","tt h:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x044a, new [] { new[] { "dd-MM-yy","d-M-yy","d.M.yy","dd-MM-yyyy","yyyy-MM-dd" }, new[] { "dd MMMM yyyy","d MMMM yyyy" }, new[] { "HH:mm","H:mm","tt hh:mm","tt h:mm" }, new[] { "HH:mm:ss","H:mm:ss","tt hh:mm:ss","tt h:mm:ss" }, new[] { "MMMM, yyyy" } } },
+                       { 0x044b, new [] { new[] { "dd-MM-yy","d-M-yy","d.M.yy","dd-MM-yyyy","yyyy-MM-dd" }, new[] { "dd MMMM yyyy","d MMMM yyyy" }, new[] { "HH:mm","H:mm","tt hh:mm","tt h:mm" }, new[] { "HH:mm:ss","H:mm:ss","tt hh:mm:ss","tt h:mm:ss" }, new[] { "MMMM, yyyy" } } },
+                       { 0x044c, new [] { new[] { "dd-MM-yy","d-M-yy","dd.MM.yy","d.M.yy" }, new[] { "dd MMMM yyyy","d MMMM yyyy" }, new[] { "HH.mm","H.mm","tt hh.mm","tt h.mm" }, new[] { "HH.mm.ss","H.mm.ss","tt hh.mm.ss","tt h.mm.ss" }, new[] { "MMMM, yyyy" } } },
+                       { 0x044d, new [] { new[] { "dd-MM-yyyy" }, new[] { "yyyy,MMMM dd, dddd" }, new[] { "tt h:mm","tt hh:mm" }, new[] { "tt h:mm:ss","tt hh:mm:ss" }, new[] { "MMMM,yy","MMMM,yyyy" } } },
+                       { 0x044e, new [] { new[] { "dd-MM-yyyy","dd-MM-yy","d-M-yy","d.M.yy","yyyy-MM-dd" }, new[] { "dd MMMM yyyy","d MMMM yyyy" }, new[] { "HH:mm","H:mm","tt hh:mm","tt h:mm" }, new[] { "HH:mm:ss","H:mm:ss","tt hh:mm:ss","tt h:mm:ss" }, new[] { "MMMM, yyyy" } } },
+                       { 0x044f, new [] { new[] { "dd-MM-yyyy","dd-MM-yy","d-M-yy","d.M.yy","yyyy-MM-dd" }, new[] { "dd MMMM yyyy dddd","d MMMM yyyy" }, new[] { "HH:mm","H:mm","tt hh:mm","tt h:mm" }, new[] { "HH:mm:ss","H:mm:ss","tt hh:mm:ss","tt h:mm:ss" }, new[] { "MMMM, yyyy" } } },
+                       { 0x0450, new [] { new[] { "yyyy-MM-dd" }, new[] { "yyyy \'оны\' M\'-р сарын\' d. dddd \'гариг\'.","yyyy оны MMM d. dddd гариг." }, new[] { "HH:mm","H:mm" }, new[] { "HH:mm:ss","H:mm:ss" }, new[] { "yyyy \'оны\' MMMM" } } },
+                       { 0x0451, new [] { new[] { "yyyy/M/d","yyyy-M-d","yyyy.M.d","yyyy.MM.dd","yyyy-MM-dd","yyyy/MM/dd","yy-M-d","yy/M/d","yy.M.d" }, new[] { "yyyy\'ལོའི་ཟླ\' M\'ཚེས\' d","yyyy\'ལོའི་ཟླ\' M\'ཚེས\' d dddd","yyyyལོའི་ཟླ MMM d","yyyyལོའི་ཟླ MMM d dddd" }, new[] { "HH:mm" }, new[] { "HH:mm:ss" }, new[] { "yyyy\'ལོའི་ཟླ་\' M","yyyy.M" } } },
+                       { 0x0452, new [] { new[] { "dd/MM/yy","dd/MM/yyyy","d MMM yy","d MMM yyyy" }, new[] { "d MMMM yyyy","dddd, d MMMM yyyy" }, new[] { "HH:mm","H:mm","hh:mm tt","h:mm tt" }, new[] { "HH:mm:ss","H:mm:ss","hh:mm:ss tt","h:mm:ss tt" }, new[] { "MMMM yyyy" } } },
+                       { 0x0453, new [] { new[] { "dd/MM/yy","yyyy-MM-dd" }, new[] { "d MMMM yyyy","ddd d MMMM yyyy" }, new[] { "H:mm" }, new[] { "HH:mm:ss" }, new[] { "\'ខែ\' MM \'ឆ្នាំ\' yyyy" } } },
+                       { 0x0454, new [] { new[] { "dd/MM/yyyy","dd.M.yyyy","dd.M.yy" }, new[] { "dd MMMM yyyy" }, new[] { "HH:mm" }, new[] { "HH:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x0455, new [] { new[] { "dd-MM-yyyy","dd-MM-yy" }, new[] { "yyyy MMMM d","yyyy MMMM d dddd" }, new[] { "HH:mm","tt h:mm" }, new[] { "HH:mm:ss","tt h:mm:ss" }, new[] { "yyyy MMMM" } } },
+                       { 0x0456, new [] { new[] { "dd/MM/yyyy","dd/MM/yy","d/MM/yy","d/M/yy","dd-MM-yy","dd.MM.yy","yyyy-MM-dd" }, new[] { "dddd, dd\' de \'MMMM\' de \'yyyy","dddd d\' de \'MMMM\' de \'yyyy","d\' de \'MMMM\' de \'yyyy","d MMMM yyyy" }, new[] { "H:mm","HH:mm","hh:mm tt","HH\'H\'mm\'\\'\'" }, new[] { "H:mm:ss","HH:mm:ss","hh:mm:ss tt","HH\'H\'mm\'\\'\'ss\'\\'\\'\'" }, new[] { "MMMM\' de \'yyyy" } } },
+                       { 0x0457, new [] { new[] { "dd-MM-yyyy","dd-MM-yy","d-M-yy","d.M.yy","yyyy-MM-dd" }, new[] { "dd MMMM yyyy","d MMMM yyyy" }, new[] { "HH:mm","H:mm","tt hh:mm","tt h:mm" }, new[] { "HH:mm:ss","H:mm:ss","tt hh:mm:ss","tt h:mm:ss" }, new[] { "MMMM, yyyy" } } },
+                       { 0x045a, new [] { new[] { "dd/MM/yyyy","dd/MM/yy","yyyy-MM-dd" }, new[] { "dd MMMM, yyyy","dddd, dd MMMM, yyyy" }, new[] { "hh:mm tt","HH:mm" }, new[] { "hh:mm:ss tt","HH:mm:ss" }, new[] { "MMMM, yyyy" } } },
+                       { 0x045b, new [] { new[] { "yyyy-MM-dd","yyyy/MM/dd","yy/MM/dd","dd/MM/yyyy","dd/MM/yy" }, new[] { "yyyy MMMM\' මස \'dd\' වැනිදා \'dddd" }, new[] { "tt h:mm","tt hh:mm","H:mm","HH:mm" }, new[] { "tt h:mm:ss","tt hh:mm:ss","H:mm:ss","HH:mm:ss" }, new[] { "yyyy MMMM" } } },
+                       { 0x045c, new [] { new[] { "M/d/yyyy","M/d/yy","MM/dd/yy","MM/dd/yyyy","yy/MM/dd","yyyy-MM-dd","dd-MMM-yy" }, new[] { "dddd, MMMM dd,yyyy","MMMM dd,yyyy","dddd, dd MMMM, yyyy","dd MMMM, yyyy" }, new[] { "h:mm tt","hh:mm tt","H:mm","HH:mm" }, new[] { "h:mm:ss tt","hh:mm:ss tt","H:mm:ss","HH:mm:ss" }, new[] { "MMMM, yyyy" } } },
+                       { 0x045d, new [] { new[] { "d/M/yyyy","d/M/yy","dd/MM/yy","yy/MM/dd","yyyy-MM-dd","dd-MMM-yy" }, new[] { "dddd,MMMM dd,yyyy","MMMM dd,yyyy","dddd, dd MMMM, yyyy","dd MMMM, yyyy" }, new[] { "h:mm tt","hh:mm tt","H:mm","HH:mm" }, new[] { "h:mm:ss tt","hh:mm:ss tt","H:mm:ss","HH:mm:ss" }, new[] { "MMMM,yyyy" } } },
+                       { 0x045e, new [] { new[] { "d/M/yyyy","yyyy-MM-dd" }, new[] { "dddd \'፣\' MMMM d \'ቀን\' yyyy" }, new[] { "h:mm tt" }, new[] { "h:mm:ss tt" }, new[] { "MMMM yyyy" } } },
+                       { 0x0461, new [] { new[] { "M/d/yyyy","M/d/yy","MM/dd/yy","MM/dd/yyyy","yy/MM/dd","yyyy-MM-dd","dd-MMM-yy" }, new[] { "dddd, MMMM dd, yyyy","MMMM dd, yyyy","dddd, dd MMMM, yyyy","dd MMMM, yyyy" }, new[] { "h:mm tt","hh:mm tt","H:mm","HH:mm" }, new[] { "h:mm:ss tt","hh:mm:ss tt","H:mm:ss","HH:mm:ss" }, new[] { "MMMM,yyyy" } } },
+                       { 0x0462, new [] { new[] { "d-M-yyyy","d-M-yy","dd-MM-yy","dd/MM/yy","dd.MM.yy","yyyy-MM-dd" }, new[] { "dddd d MMMM yyyy","d-MMM-yy","d MMMM yyyy","d MMM yy" }, new[] { "H:mm","HH:mm","H:mm","H.mm" }, new[] { "H:mm:ss","HH:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x0463, new [] { new[] { "yyyy/M/d","yyyy-MM-dd" }, new[] { "yyyy, dd, MMMM, dddd","yyyy, dd, MMMM" }, new[] { "h:mm tt","H:mm" }, new[] { "h:mm:ss tt","H:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x0464, new [] { new[] { "M/d/yyyy","M/d/yy","MM/dd/yy","MM/dd/yyyy","yy/MM/dd","yyyy-MM-dd","dd-MMM-yy" }, new[] { "dddd, MMMM dd, yyyy","MMMM dd, yyyy","dddd, dd MMMM, yyyy","dd MMMM, yyyy" }, new[] { "h:mm tt","hh:mm tt","H:mm","HH:mm" }, new[] { "h:mm:ss tt","hh:mm:ss tt","H:mm:ss","HH:mm:ss" }, new[] { "MMMM, yyyy" } } },
+                       { 0x0465, new [] { new[] { "dd/MM/yy" }, new[] { "ddd, yyyy MMMM dd" }, new[] { "HH:mm","hh:mm tt" }, new[] { "HH:mm:ss","hh:mm:ss tt" }, new[] { "yyyy, MMMM" } } },
+                       { 0x0468, new [] { new[] { "d/M/yyyy","d/M/yy","dd/MM/yy","dd/MM/yyyy","yy/MM/dd","yyyy-MM-dd","dd-MMM-yy" }, new[] { "dddd, MMMM dd, yyyy","MMMM dd, yyyy","dddd, dd MMMM, yyyy","dd MMMM, yyyy" }, new[] { "h:mm tt","hh:mm tt","H:mm","HH:mm" }, new[] { "h:mm:ss tt","hh:mm:ss tt","H:mm:ss","HH:mm:ss" }, new[] { "MMMM, yyyy" } } },
+                       { 0x046a, new [] { new[] { "d/M/yyyy","d/M/yy","dd/MM/yy","dd/MM/yyyy","yy/MM/dd","yyyy-MM-dd","dd-MMM-yy" }, new[] { "dddd, dd MMMM, yyyy","dddd, MMMM dd, yyyy","MMMM dd, yyyy","dd MMMM, yyyy" }, new[] { "h:mm tt","hh:mm tt","H:mm","HH:mm" }, new[] { "h:mm:ss tt","hh:mm:ss tt","H:mm:ss","HH:mm:ss" }, new[] { "MMMM,yyyy" } } },
+                       { 0x046b, new [] { new[] { "dd/MM/yyyy","dd/MM/yy","d/M/yy","dd-MM-yy","yyyy-MM-dd" }, new[] { "dddd, dd\' de \'MMMM\' de \'yyyy","dddd d\' de \'MMMM\' de \'yyyy","d\' de \'MMMM\' de \'yyyy" }, new[] { "hh:mm tt","h:mm tt","H:mm","HH:mm" }, new[] { "hh:mm:ss tt","h:mm:ss tt","H:mm:ss","HH:mm:ss" }, new[] { "MMMM\' de \'yyyy" } } },
+                       { 0x046c, new [] { new[] { "dd/MM/yy","yyyy/MM/dd","yy/MM/dd","yyyy-MM-dd" }, new[] { "dd MMMM yyyy" }, new[] { "hh:mm tt","h:mm tt","HH:mm" }, new[] { "hh:mm:ss tt","h:mm:ss tt","HH:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x046d, new [] { new[] { "dd.MM.yy","yyyy-MM-dd" }, new[] { "d MMMM yyyy \'й\'" }, new[] { "H:mm" }, new[] { "H:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x046e, new [] { new[] { "dd.MM.yy","dd/MM/yy","dd-MM-yy" }, new[] { "d. MMMM yyyy","dd. MMMMyyyy","dddd, d. MMMM yyyy","dddd, dd. MMMM yyyy","dddd,\' den \'d. MMMM yyyy","dddd,\' den \'dd. MMMM yyyy" }, new[] { "HH:mm","H:mm","H.mm","H.mm\' Auer\'" }, new[] { "HH:mm:ss","H:mm:ss\' Auer\'","HH:mm:ss\' Auer\'" }, new[] { "MMMM yyyy" } } },
+                       { 0x046f, new [] { new[] { "dd-MM-yyyy","dd-MM-yy","yyyy-MM-dd","yyyy MM dd" }, new[] { "MMMM d\'.-at, \'yyyy","d. MMMM yyyy","dd. MMMM yyyy" }, new[] { "HH:mm","H:mm" }, new[] { "HH:mm:ss","H:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x0470, new [] { new[] { "d/M/yyyy","d/M/yy","dd/MM/yy","dd/MM/yyyy","yy/MM/dd","yyyy-MM-dd","dd-MMM-yy" }, new[] { "dddd, MMMM dd, yyyy","MMMM dd, yyyy","dddd, dd MMMM, yyyy","dd MMMM, yyyy" }, new[] { "h.mm tt" }, new[] { "h.mm.ss tt" }, new[] { "MMMM, yyyy" } } },
+                       { 0x0472, new [] { new[] { "dd/MM/yy","dd-MMM-yyyy" }, new[] { "dddd, MMMM d, yyyy","dd MMMM yyyy" }, new[] { "h:mm tt" }, new[] { "h:mm:ss tt" }, new[] { "MMMM yyyy" } } },
+                       { 0x0473, new [] { new[] { "d/M/yyyy","yyyy-MM-dd" }, new[] { "dddd \'፣\' MMMM d \'መዓልቲ\' yyyy" }, new[] { "h:mm tt" }, new[] { "h:mm:ss tt" }, new[] { "MMMM yyyy" } } },
+                       { 0x0474, new [] { new[] { "dd/MM/yyyy","dd/MM/yy","dd-MM-yyyy","dd-MM-yy" }, new[] { "dddd, dd MMMM, yyyy","dddd, d MMMM, yyyy","dd/MMMM/yyyy","d/MMMM/yyyy","dd MMMM, yyyy","d MMMM, yyyy" }, new[] { "HH:mm","H:mm","hh:mm tt" }, new[] { "HH:mm:ss","H:mm:ss","hh:mm:ss tt" }, new[] { "MMMM, yyyy" } } },
+                       { 0x0475, new [] { new[] { "M/d/yyyy","M/d/yy","MM/dd/yy","MM/dd/yyyy","yy/MM/dd","yyyy-MM-dd","dd-MMM-yy" }, new[] { "dddd, MMMM dd, yyyy","MMMM dd, yyyy","dddd, dd MMMM, yyyy","dd MMMM, yyyy" }, new[] { "h:mm tt","hh:mm tt","H:mm","HH:mm" }, new[] { "h:mm:ss tt","hh:mm:ss tt","H:mm:ss","HH:mm:ss" }, new[] { "MMMM, yyyy" } } },
+                       { 0x0477, new [] { new[] { "dd/MM/yy","dd-MMM-yyyy" }, new[] { "dddd, MMMM dd, yyyy","dd MMMM yyyy" }, new[] { "h:mm tt" }, new[] { "h:mm:ss tt" }, new[] { "MMMM yyyy" } } },
+                       { 0x0478, new [] { new[] { "yyyy/M/d","yyyy-M-d","yyyy.M.d","yyyy.MM.dd","yyyy-MM-dd","yyyy/MM/dd" }, new[] { "yyyy\'ꈎ\' M\'ꆪ\' d\'ꑍ\'","dddd, yyyy\'ꈎ\' M\'ꆪ\' d\'ꑍ\'","yyyy\'ꈎ\' M\'ꆪ\' d\'ꑍ\', dddd","yyyyꈎ MMM dꑍ","dddd, yyyyꈎ MMM dꑍ" }, new[] { "tt h:mm","H:mm","HH:mm" }, new[] { "tt h:mm:ss","H:mm:ss","HH:mm:ss" }, new[] { "yyyy\'ꈎ\' M\'ꆪ\'","yyyy.M" } } },
+                       { 0x047a, new [] { new[] { "dd-MM-yyyy","dd-MM-yy","dd/MM/yy","d/M/yy","yyyy-MM-dd" }, new[] { "dddd, dd\' de \'MMMM\' de \'yyyy","dddd d\' de \'MMMM\' de \'yyyy","d\' de \'MMMM\' de \'yyyy" }, new[] { "H:mm","HH:mm" }, new[] { "H:mm:ss","HH:mm:ss" }, new[] { "MMMM\' de \'yyyy" } } },
+                       { 0x047c, new [] { new[] { "M/d/yyyy","M/d/yy","MM/dd/yy","MM/dd/yyyy","yy/MM/dd","yyyy-MM-dd","dd-MMM-yy" }, new[] { "dddd, MMMM dd, yyyy","MMMM dd, yyyy","dddd, dd MMMM, yyyy","dd MMMM, yyyy" }, new[] { "h:mm tt","hh:mm tt","HH:mm","H:mm" }, new[] { "h:mm:ss tt","hh:mm:ss tt","HH:mm:ss","H:mm:ss" }, new[] { "MMMM, yyyy" } } },
+                       { 0x047e, new [] { new[] { "dd/MM/yyyy","dd/MM/yy","dd.MM.yy","dd-MM-yy","yyyy-MM-dd" }, new[] { "dddd d MMMM yyyy","d MMM yy","d MMMM yyyy" }, new[] { "HH:mm","H:mm","HH.mm","HH\' h \'mm","HH\'h\'mm" }, new[] { "HH:mm:ss","H:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x0480, new [] { new[] { "yyyy-M-d","yyyy.M.d","yyyy-MM-dd","yyyy.MM.dd" }, new[] { "yyyy-\'يىل\' d-MMMM","yyyy-\'يىل\' d-MMMM dddd","yyyy-\'يىلى\' MMM\'نىڭ\' d\'-كۈنى\'","yyyy-\'يىلى\' MMM\'نىڭ\' d\'-كۈنى\' dddd","yyyy-M-d dddd" }, new[] { "H:mm","HH:mm","tt h:mm","tt hh:mm" }, new[] { "H:mm:ss","HH:mm:ss","tt h:mm:ss","tt hh:mm:ss" }, new[] { "yyyy-\'يىلى\' MMMM","yyyy MMMM","yyyy.M" } } },
+                       { 0x0481, new [] { new[] { "dd/MM/yyyy","d/MM/yy","dd/MM/yy","d.MM.yy","yyyy-MM-dd" }, new[] { "dddd, dd MMMM, yyyy","d MMMM yyyy" }, new[] { "h:mm tt","hh:mm tt","HH:mm","H:mm" }, new[] { "h:mm:ss tt","hh:mm:ss tt","HH:mm:ss","H:mm:ss" }, new[] { "MMMM, yy","MMMM yyyy" } } },
+                       { 0x0482, new [] { new[] { "dd/MM/yyyy","dd/MM/yy" }, new[] { "dddd d MMMM\' de \'yyyy","d MMMM\' de \'yyyy" }, new[] { "HH\' h \'mm" }, new[] { "HH.mm.ss" }, new[] { "MMMM\' de \'yyyy" } } },
+                       { 0x0483, new [] { new[] { "dd/MM/yyyy","dd/MM/yy" }, new[] { "dddd d MMMM yyyy","d MMM yy","d MMMM yyyy" }, new[] { "HH:mm","H:mm","HH.mm" }, new[] { "H:mm:ss","HH:mm:ss" }, new[] { "MMMM\' di u \'yyyy" } } },
+                       { 0x0484, new [] { new[] { "dd/MM/yyyy","dd/MM/yy","dd.MM.yy","dd-MM-yy","yyyy-MM-dd" }, new[] { "dddd d MMMM yyyy","d MMM yy","d MMMM yyyy" }, new[] { "HH:mm","H:mm","HH.mm","HH\' h \'mm","HH\'h\'mm" }, new[] { "HH:mm:ss","H:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x0485, new [] { new[] { "dd.MM.yyyy","d.M.yyyy","yyyy-MM-dd","yyyy MM d","dd yyyy MM d" }, new[] { "dddd, yyyy \'с.\' MMMM d \'күнэ\'","yyyy \'с.\' MMMM d \'күнэ\'","dddd, MMMM d \'күнэ\' yyyy \'с.\'" }, new[] { "H:mm","HH:mm" }, new[] { "H:mm:ss","HH:mm:ss" }, new[] { "yyyy \'с.\' MMMM" } } },
+                       { 0x0486, new [] { new[] { "dd/MM/yyyy","d/MM/yyyy" }, new[] { "dddd, dd\' rech \'MMMM\' rech \'yyyy","dddd d\' de \'MMMM\' de \'yyyy","d\' de \'MMMM\' de \'yyyy" }, new[] { "h:mm tt","HH:mm" }, new[] { "h:mm:ss tt","HH:mm:ss" }, new[] { "MMMM\' rech \'yyyy" } } },
+                       { 0x0487, new [] { new[] { "d/MM/yyyy","d/M/yy" }, new[] { "d \' \' MMMM \' \' yyyy","dddd, d MMMM yyyy" }, new[] { "H:mm" }, new[] { "H:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x0488, new [] { new[] { "dd/MM/yyyy","dd/MM/yy","dd.MM.yy","dd-MM-yy","yyyy-MM-dd" }, new[] { "dddd d MMMM yyyy","d MMM yy","d MMMM yyyy" }, new[] { "HH:mm","H:mm","HH.mm","HH\' h \'mm" }, new[] { "HH:mm:ss","H:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x048c, new [] { new[] { "yyyy/M/d","yyyy-MM-dd" }, new[] { "yyyy, dd, MMMM, dddd","yyyy, dd, MMMM" }, new[] { "h:mm tt","H:mm" }, new[] { "h:mm:ss tt","H:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x0491, new [] { new[] { "dd/MM/yyyy","dd/MM/yy","d/M/yy","d.M.yy","yyyy-MM-dd" }, new[] { "dd MMMM yyyy","d MMMM yyyy" }, new[] { "HH:mm","H:mm","hh:mm tt","h:mm tt" }, new[] { "HH:mm:ss","H:mm:ss","hh:mm:ss tt","h:mm:ss tt" }, new[] { "MMMM yyyy" } } },
+                       { 0x0492, new [] { new[] { "yyyy/MM/dd" }, new[] { "dddd, dd MMMM, yyyy" }, new[] { "hh:mm tt","HH:mm" }, new[] { "hh:mm:ss tt","HH:mm:ss" }, new[] { "MMMM, yyyy" } } },
+                       { 0x0801, new [] { new[] { "dd/MM/yyyy","dd/MM/yy","yyyy-MM-dd" }, new[] { "dd MMMM, yyyy","dddd, dd MMMM, yyyy" }, new[] { "hh:mm tt","HH:mm" }, new[] { "hh:mm:ss tt","HH:mm:ss" }, new[] { "MMMM, yyyy" } } },
+                       { 0x0803, new [] { new[] { "dd/MM/yy","dd/MM/yyyy","dd.MM.yy","dd.MM.yyyy","dd-MM-yy","dd-MM-yyyy" }, new[] { "dddd, d MMMM\' del \'yyyy","d MMMM\' del \'yyyy","ddd, d MMM yyyy","d MMM yyyy" }, new[] { "HH:mm" }, new[] { "HH:mm:ss" }, new[] { "MM/yy","MM/yyyy","MMMM-yyyy","MMM-yyyy","MM-yyyy" } } },
+                       { 0x0804, new [] { new[] { "yyyy/M/d","yyyy-M-d","yyyy.M.d","yyyy/MM/dd","yyyy-MM-dd","yyyy.MM.dd","yy/M/d","yy-M-d","yy.M.d","yy/MM/dd" }, new[] { "yyyy\'年\'M\'月\'d\'日\'","yyyy\'年\'M\'月\'d\'日\', dddd","dddd, yyyy\'年\'M\'月\'d\'日\'","yyyy年MMMd日","yyyy年MMMd日, dddd" }, new[] { "H:mm","HH:mm","tt h:mm","tt hh:mm" }, new[] { "H:mm:ss","HH:mm:ss","tt h:mm:ss","tt hh:mm:ss" }, new[] { "yyyy\'年\'M\'月\'","yyyy.M" } } },
+                       { 0x0807, new [] { new[] { "dd.MM.yyyy","dd.MM.yy","d.MM.yy","dd. M. yy","d.M.yy","yyyy-MM-dd" }, new[] { "dddd, d. MMMM yyyy","d. MMMM yyyy","d. MMM yy" }, new[] { "HH:mm","H:mm","H.mm\' h\'","HH.mm\' h\'","H.mm\' Uhr\'","HHmm","HH","H\' h\'","H\' Uhr\'" }, new[] { "HH:mm:ss","H:mm:ss","HH:mm:ss\' h\'","H:mm:ss\' h\'","HH:mm:ss\' Uhr\'","H:mm:ss\' Uhr\'","HHmmss" }, new[] { "MMMM yyyy" } } },
+                       { 0x0809, new [] { new[] { "dd/MM/yyyy","dd/MM/yy","d/M/yy","d.M.yy","yyyy-MM-dd" }, new[] { "dd MMMM yyyy","d MMMM yyyy","dddd, d MMMM yyyy","dddd, dd MMMM yyyy" }, new[] { "HH:mm","H:mm","hh:mm tt","h:mm tt" }, new[] { "HH:mm:ss","H:mm:ss","hh:mm:ss tt","h:mm:ss tt" }, new[] { "MMMM yyyy" } } },
+                       { 0x080a, new [] { new[] { "dd/MM/yyyy","dd/MMM/yyyy","dd/MM/yy","d/MM/yy","d/M/yy","dd-MM-yy","yyyy-MM-dd" }, new[] { "dddd, d\' de \'MMMM\' de \'yyyy","d\' de \'MMMM\' de \'yyyy" }, new[] { "hh:mm tt","h:mm tt","H:mm","HH:mm" }, new[] { "hh:mm:ss tt","h:mm:ss tt","H:mm:ss","HH:mm:ss" }, new[] { "MMMM\' de \'yyyy" } } },
+                       { 0x080c, new [] { new[] { "dd-MM-yy","dd/MM/yyyy","dd/MM/yy","dd-MM-yyyy" }, new[] { "dddd d MMMM yyyy","d MMMM yyyy" }, new[] { "HH:mm","H:mm","HH.mm","HH\' h \'mm","HH\'h\'mm" }, new[] { "HH:mm:ss","H:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x0810, new [] { new[] { "dd.MM.yyyy","dd.MM.yy","dd. MM. yy","d/M/yy","dd.M.yy" }, new[] { "dddd, d. MMMM yyyy","d MMMM yyyy","dddd, d MMMM yyyy" }, new[] { "HH:mm","H:mm","H.mm\' h\'" }, new[] { "HH:mm:ss","H:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x0813, new [] { new[] { "d/MM/yyyy","d/MM/yy","dd-MM-yy","dd.MM.yy","dd.MMM.yyyy","yyyy-MM-dd" }, new[] { "dddd d MMMM yyyy","dd-MMM-yy","d MMMM yyyy","dd MMM yy" }, new[] { "H:mm","HH:mm","H.mm\' u.\'" }, new[] { "H:mm:ss","HH:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x0814, new [] { new[] { "dd.MM.yyyy","d.MM.yyyy","dd.MM.yy","d.M.yy","dd. MMM. yyyy","yyyy-MM-dd" }, new[] { "d. MMMM yyyy","dd. MMMM yyyy" }, new[] { "HH:mm","H:mm","\'kl \'H:mm","\'kl \'HH:mm","HH.mm","H.mm","\'kl \'HH.mm","\'kl \'H.mm" }, new[] { "HH:mm:ss","H:mm:ss","\'kl \'HH:mm:ss","\'kl \'H:mm:ss","HH.mm.ss","H.mm.ss","\'kl \'HH.mm.ss","\'kl \'H.mm.ss" }, new[] { "MMMM yyyy","MMM. yyyy","MM.yyyy" } } },
+                       { 0x0816, new [] { new[] { "dd/MM/yyyy","dd.MM.yyyy","dd-MM-yyyy","dd/MM/yy","dd.MM.yy","dd-MM-yy","yyyy/MM/dd","yyyy.MM.dd","yyyy-MM-dd","yy/MM/dd","yy.MM.dd","yy-MM-dd" }, new[] { "d\' de \'MMMM\' de \'yyyy","dddd, d\' de \'MMMM\' de \'yyyy" }, new[] { "HH:mm" }, new[] { "HH:mm:ss" }, new[] { "MMMM\' de \'yyyy" } } },
+                       { 0x0818, new [] { new[] { "dd.MM.yyyy","dd.MM.yyyy" }, new[] { "dddd, d MMMM yyyy","d MMMM yyyy" }, new[] { "HH:mm" }, new[] { "HH:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x081a, new [] { new[] { "d.M.yyyy.","dd.MM.yyyy." }, new[] { "d. MMMM yyyy.","dd. MMMM yyyy.","dddd, d. MMMM yyyy." }, new[] { "H:mm","HH:mm" }, new[] { "H:mm:ss","HH:mm:ss" }, new[] { "MMMM yyyy." } } },
+                       { 0x081d, new [] { new[] { "d.M.yyyy","dd.MM.yyyy","d.M.yy","yyyy-MM-dd" }, new[] { "\'den \'d MMMM yyyy","dddd\' den \'d MMMM yyyy" }, new[] { "HH:mm","H:mm","\'kl \'H:mm" }, new[] { "HH:mm:ss","H:mm:ss","\'kl \'H:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x0820, new [] { new[] { "d/M/yy","d MMM, yyyy" }, new[] { "dddd, d MMMM, yyyy","d MMMM, yyyy" }, new[] { "h:mm tt" }, new[] { "h:mm:ss tt" }, new[] { "MMMM yyyy" } } },
+                       { 0x082c, new [] { new[] { "dd.MM.yyyy","dd.MM.yy","d.M.yy","dd/MM/yy","yyyy-MM-dd" }, new[] { "d MMMM yyyy","dd MMMM yyyy" }, new[] { "H:mm","HH:mm" }, new[] { "HH:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x082e, new [] { new[] { "d. M. yyyy","d. M. yy","dd.MM.yyyy","dd.MM.yy","yyyy-MM-dd" }, new[] { "dddd, d. MMMM yyyy","d. MMMM yyyy","d. M. yyyy" }, new[] { "HH:mm","H:mm","H:mm\' góź.\'","\'zeger \'H:mm" }, new[] { "HH:mm:ss","H:mm:ss\' góź.\'","\'zeger \'H:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x0832, new [] { new[] { "dd/MM/yy","yyyy/MM/dd","yy/MM/dd","yyyy-MM-dd" }, new[] { "dd MMMM yyyy" }, new[] { "hh:mm tt","h:mm tt","HH:mm" }, new[] { "hh:mm:ss tt","h:mm:ss tt","HH:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x083b, new [] { new[] { "yyyy-MM-dd","yy-MM-dd" }, new[] { "dddd, MMMM d\'. b. \'yyyy","MMMM d\'. b. \'yyyy" }, new[] { "HH:mm","H:mm" }, new[] { "HH:mm:ss","H:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x083c, new [] { new[] { "dd/MM/yyyy","dd/MM/yy","d/M/yy","d.M.yy","yyyy-MM-dd" }, new[] { "d MMMM yyyy","dd MMMM yyyy","dd MMM yyyy","d MMM yyyy" }, new[] { "HH:mm","H:mm" }, new[] { "HH:mm:ss","H:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x083e, new [] { new[] { "dd/MM/yyyy","dd/MM/yy","yyyy-MM-dd" }, new[] { "dd MMMM yyyy" }, new[] { "H:mm","HH:mm" }, new[] { "H:mm:ss","HH:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x0843, new [] { new[] { "dd.MM.yyyy","dd.MM.yy","dd/MM yyyy","d.M.yy","dd/MM/yy","yyyy-MM-dd" }, new[] { "yyyy \'йил\' d-MMMM","d MMMM yyyy","dd MMMM yyyy" }, new[] { "HH:mm","H:mm" }, new[] { "HH:mm:ss","H:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x0845, new [] { new[] { "dd-MM-yy","d-M-yy","d.M.yy","dd-MM-yyyy","yyyy-MM-dd" }, new[] { "dd MMMM yyyy","d MMMM yyyy" }, new[] { "HH.mm","H.mm","tt hh.mm","tt h.mm" }, new[] { "HH.mm.ss","H.mm.ss","tt hh.mm.ss","tt h.mm.ss" }, new[] { "MMMM, yyyy" } } },
+                       { 0x0846, new [] { new[] { "dd-MM-yy","d-M-yy","d.M.yy","dd-MM-yyyy","yyyy-MM-dd" }, new[] { "dd MMMM yyyy dddd","d MMMM yyyy" }, new[] { "h.mm tt","hh:mm tt","H:mm","HH:mm" }, new[] { "h.mm.ss tt","hh:mm:ss tt","H:mm:ss","HH:mm:ss" }, new[] { "MMMM, yyyy" } } },
+                       { 0x0849, new [] { new[] { "dd-MM-yyyy","dd-MM-yy","d-M-yy","d.M.yy","yyyy-MM-dd" }, new[] { "dd MMMM yyyy","d MMMM yyyy" }, new[] { "HH:mm","H:mm","tt hh:mm","tt h:mm" }, new[] { "HH:mm:ss","H:mm:ss","tt hh:mm:ss","tt h:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x0850, new [] { new[] { "yyyy/M/d","yyyy-M-d","yyyy.M.d","yyyy.MM.dd","yyyy-MM-dd","yyyy/MM/dd","yy-M-d","yy/M/d","yy.M.d","yy/MM/dd" }, new[] { "yyyyᠣᠨ MMMM dᠡᠳᠦᠷ᠂ dddd","yyyyᠣᠨ MMMM dᠡᠳᠦᠷ" }, new[] { "H:mm" }, new[] { "H:mm:ss" }, new[] { "yyyyᠣᠨ MMMM","yyyy.M" } } },
+                       { 0x0859, new [] { new[] { "dd/MM/yyyy","dd/MM/yy","yyyy-MM-dd" }, new[] { "dddd, dd MMMM, yyyy","dd MMMM yyyy" }, new[] { "h:mm tt","hh:mm tt","H:mm","HH:mm" }, new[] { "h:mm:ss tt","hh:mm:ss tt","H:mm:ss","HH:mm:ss" }, new[] { "MMMM, yyyy" } } },
+                       { 0x085d, new [] { new[] { "d/MM/yyyy","d/M/yy","yy-MM-dd","dd/MM/yyyy","yy-MM-dd","yyyy-MM-dd","dd-MMM-yy" }, new[] { "dddd, dd MMMM, yyyy","ddd, MMMM dd,yyyy","MMMM dd,yyyy","dd MMMM, yyyy" }, new[] { "h:mm tt","hh:mm tt","HH:mm","H:mm" }, new[] { "h:mm:ss tt","hh:mm:ss tt","HH:mm:ss","H:mm:ss" }, new[] { "MMMM, yyyy" } } },
+                       { 0x085f, new [] { new[] { "dd-MM-yyyy","dd-MM-yy","yyyy-MM-dd" }, new[] { "dd MMMM, yyyy","dddd, dd MMMM, yyyy" }, new[] { "H:mm","HH:mm" }, new[] { "H:mm:ss","HH:mm:ss" }, new[] { "MMMM, yyyy" } } },
+                       { 0x0861, new [] { new[] { "yyyy-MM-dd","yyyy MMM d" }, new[] { "yyyy MMMM d, dddd","yyyy MMMM d" }, new[] { "HH:mm" }, new[] { "HH:mm:ss" }, new[] { "yyyy MMMM" } } },
+                       { 0x0867, new [] { new[] { "dd/MM/yyyy","dd/MM/yy","dd.MM.yy","dd-MM-yy","yyyy-MM-dd" }, new[] { "dddd d MMMM yyyy","d MMM yy","d MMMM yyyy" }, new[] { "HH:mm","H:mm","HH.mm","HH\' h \'mm" }, new[] { "HH:mm:ss","H:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x086b, new [] { new[] { "dd/MM/yyyy","dd/MM/yy","d/M/yy","dd-MM-yy","yyyy-MM-dd" }, new[] { "dddd, dd\' de \'MMMM\' de \'yyyy","dddd d\' de \'MMMM\' de \'yyyy","d\' de \'MMMM\' de \'yyyy" }, new[] { "H:mm","HH:mm" }, new[] { "H:mm:ss","HH:mm:ss" }, new[] { "MMMM\' de \'yyyy" } } },
+                       { 0x0873, new [] { new[] { "d/M/yyyy","yyyy-MM-dd" }, new[] { "dddd \'፣\' MMMM d \'መዓልቲ\' yyyy" }, new[] { "h:mm tt" }, new[] { "h:mm:ss tt" }, new[] { "MMMM yyyy" } } },
+                       { 0x0c01, new [] { new[] { "dd/MM/yyyy","dd/MM/yy","yyyy-MM-dd" }, new[] { "dd MMMM, yyyy","dddd, dd MMMM, yyyy" }, new[] { "hh:mm tt","HH:mm" }, new[] { "hh:mm:ss tt","HH:mm:ss" }, new[] { "MMMM, yyyy" } } },
+                       { 0x0c04, new [] { new[] { "d/M/yyyy","d/M/yy","dd/MM/yy","yy/M/d","yy/MM/dd","yyyy/M/d","yyyy/MM/dd","yyyy-MM-dd" }, new[] { "yyyy\'年\'M\'月\'d\'日\'","yyyy\'年\'MM\'月\'dd\'日\'","yyyy年MMMd日","yyyy年MMMd日, dddd" }, new[] { "H:mm","HH:mm" }, new[] { "H:mm:ss","HH:mm:ss" }, new[] { "yyyy\'年\'M\'月\'","yyyy.M" } } },
+                       { 0x0c07, new [] { new[] { "dd.MM.yyyy","dd.MM.yy","yyyy-MM-dd","dd.MMM.yy","dd.MMM.yyyy" }, new[] { "dddd, dd. MMMM yyyy","d.MMMM yyyy" }, new[] { "HH:mm","H:mm","HH:mm\' Uhr\'","H:mm\' Uhr\'","HHmm","HH","H\' Uhr\'" }, new[] { "HH:mm:ss","H:mm:ss","HH:mm:ss\' Uhr\'","H:mm:ss\' Uhr\'","HHmmss" }, new[] { "MMMM yyyy" } } },
+                       { 0x0c09, new [] { new[] { "d/MM/yyyy","d/MM/yy","d/M/yy","d/M/yyyy","dd/MM/yy","dd/MM/yyyy","dd-MMM-yy","dd-MMMM-yyyy","yyyy-MM-dd","yy/MM/dd","yyyy/MM/dd" }, new[] { "dddd, d MMMM yyyy","d MMMM yyyy" }, new[] { "h:mm tt","H:mm","HH:mm" }, new[] { "h:mm:ss tt","H:mm:ss","HH:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x0c0a, new [] { new[] { "dd/MM/yyyy","dd/MM/yy","d/MM/yy","d/M/yy","d-M-yy","dd-MM-yy","dd.MM.yy","yyyy-MM-dd" }, new[] { "dddd, d\' de \'MMMM\' de \'yyyy","dddd d\' de \'MMMM\' de \'yyyy","d\' de \'MMMM\' de \'yyyy" }, new[] { "H:mm","HH:mm","H.mm","HH.mm","HH\'H\'mm" }, new[] { "H:mm:ss","HH:mm:ss","H.mm.ss","HH.mm.ss","HH\'H\'mm.ss" }, new[] { "MMMM\' de \'yyyy" } } },
+                       { 0x0c0c, new [] { new[] { "yyyy-MM-dd","yy-MM-dd","dd-MM-yy","yy MM dd","dd/MM/yy","dd/MMM/yyyy" }, new[] { "d MMMM yyyy","d MMM yyyy" }, new[] { "HH:mm","H:mm","HH.mm","HH\' h \'mm","HH\'h\'mm" }, new[] { "HH:mm:ss","H:mm:ss" }, new[] { "MMMM, yyyy" } } },
+                       { 0x0c1a, new [] { new[] { "d.M.yyyy.","dd.MM.yyyy.","d. M. yyyy" }, new[] { "d. MMMM yyyy.","dd. MMMM yyyy.","dddd, d. MMMM yyyy." }, new[] { "H:mm","HH:mm" }, new[] { "H:mm:ss","HH:mm:ss" }, new[] { "MMMM yyyy." } } },
+                       { 0x0c3b, new [] { new[] { "d.M.yyyy","dd.MM.yyyy","d.M.yy","yyyy-MM-dd" }, new[] { "dddd\', \'MMMM d\'. b. \'yyyy","MMMM d\'. b. \'yyyy" }, new[] { "H:mm","HH:mm" }, new[] { "H:mm:ss","HH:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x0c50, new [] { new[] { "yyyy/M/d","yyyy-M-d","yyyy.M.d","yyyy.MM.dd","yyyy-MM-dd","yyyy/MM/dd","yy-M-d","yy/M/d","yy.M.d","yy/MM/dd" }, new[] { "yyyyᠣᠨ MMMM dᠡᠳᠦᠷ᠂ dddd","yyyyᠣᠨ MMMM dᠡᠳᠦᠷ" }, new[] { "H:mm" }, new[] { "H:mm:ss" }, new[] { "yyyyᠣᠨ MMMM","yyyy.M" } } },
+                       { 0x0c6b, new [] { new[] { "dd/MM/yyyy","dd/MM/yy","d/M/yy","dd-MM-yy","yyyy-MM-dd" }, new[] { "dddd, d MMMM, yyyy" }, new[] { "hh:mm tt","HH:mm" }, new[] { "hh:mm:ss tt","HH:mm:ss" }, new[] { "MMMM\' de \'yyyy" } } },
+                       { 0x1000, new [] { new[] { "dd/MM/yyyy","dd/MM/yy" }, new[] { "dd MMMM yyyy","dddd, dd MMMM yyyy" }, new[] { "HH.mm","H.mm" }, new[] { "HH.mm.ss","H.mm.ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x1001, new [] { new[] { "dd/MM/yyyy","dd/MM/yy","yyyy-MM-dd" }, new[] { "dd MMMM, yyyy","dddd, dd MMMM, yyyy" }, new[] { "hh:mm tt","HH:mm" }, new[] { "hh:mm:ss tt","HH:mm:ss" }, new[] { "MMMM, yyyy" } } },
+                       { 0x1004, new [] { new[] { "d/M/yyyy","d/M/yy","dd/MM/yy","yy/M/d","yy/MM/dd","yyyy/M/d","yyyy/MM/dd","yyyy-MM-dd" }, new[] { "yyyy\'年\'M\'月\'d\'日\'","yyyy\'年\'MM\'月\'dd\'日\'","yyyy年MMMd日","dddd yyyy年MMMd日" }, new[] { "tt h:mm","tt hh:mm","H:mm","HH:mm" }, new[] { "tt h:mm:ss","tt hh:mm:ss","H:mm:ss","HH:mm:ss" }, new[] { "yyyy\'年\'M\'月\'" } } },
+                       { 0x1007, new [] { new[] { "dd.MM.yyyy","dd.MM.yy","d.MM.yy","d.M.yy","d.M.yyyy","yyyy-MM-dd" }, new[] { "dddd\' den \'d\'.\' MMMM yyyy","dddd, d. MMMM yyyy","d\'.\' MMMM yyyy","d\'. \'MMM yyyy" }, new[] { "HH:mm","H:mm","H.mm","H.mm\' Uhr\'" }, new[] { "HH:mm:ss","H:mm:ss\' Uhr\'","HH:mm:ss\' Uhr\'","HHmmss" }, new[] { "MMMM yyyy" } } },
+                       { 0x1009, new [] { new[] { "yyyy-MM-dd","dd/MM/yyyy","dd/MM/yy","d/M/yy","yy-MM-dd","M/dd/yy","dd-MMM-yy","dd-MMM-yyyy","yyyy-MM-dd" }, new[] { "MMMM d, yyyy","dddd, MMMM dd, yyyy","MMMM-dd-yy","d-MMM-yy" }, new[] { "h:mm tt","hh:mm tt","HH:mm","H:mm" }, new[] { "h:mm:ss tt","hh:mm:ss tt","HH:mm:ss","H:mm:ss" }, new[] { "MMMM, yyyy" } } },
+                       { 0x100a, new [] { new[] { "dd/MM/yyyy","dd/MM/yy","d/MM/yyyy","d/M/yy","dd-MM-yy","yyyy-MM-dd" }, new[] { "dddd, dd\' de \'MMMM\' de \'yyyy","dddd d\' de \'MMMM\' de \'yyyy","d\' de \'MMMM\' de \'yyyy" }, new[] { "h:mm tt","H:mm" }, new[] { "h:mm:ss tt","H:mm:ss" }, new[] { "MMMM\' de \'yyyy" } } },
+                       { 0x100c, new [] { new[] { "dd.MM.yyyy","dd.MM.yy","d.M.yy","yyyy-MM-dd" }, new[] { "dddd d MMMM yyyy","d MMMM yyyy","d MMM yy" }, new[] { "HH:mm","H:mm","HH.mm","HH\' h \'mm","HH\'h\'mm" }, new[] { "HH:mm:ss","H:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x101a, new [] { new[] { "d.M.yyyy.","d.M.yy.","d. M. yyyy.","dd.MM.yyyy.","d. M. yy.","dd.MM.yy.","dd. MM. yy.","yyyy-MM-dd" }, new[] { "d. MMMM yyyy.","dd. MMMM yyyy.","dddd, d. MMMM yyyy." }, new[] { "H:mm","HH:mm" }, new[] { "H:mm:ss","HH:mm:ss" }, new[] { "MMMM, yyyy" } } },
+                       { 0x103b, new [] { new[] { "dd.MM.yyyy","dd.MM.yy","d.M.yy","yyyy-MM-dd" }, new[] { "dddd, MMMM d\'. b. \'yyyy","MMMM d\'. b. \'yyyy" }, new[] { "HH:mm","H:mm","HH.mm" }, new[] { "HH:mm:ss","H:mm:ss","HH.mm.ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x105f, new [] { new[] { "dd-MM-yyyy","dd-MM-yy","yyyy-MM-dd","dd.MMM.yyyy" }, new[] { "dddd, dd MMMM, yyyy","dd MMMM, yyyy" }, new[] { "H:mm","HH:mm" }, new[] { "H:mm:ss","HH:mm:ss" }, new[] { "MMMM, yyyy","MMMM yyyy" } } },
+                       { 0x1401, new [] { new[] { "dd-MM-yyyy","dd-MM-yy","yyyy-MM-dd" }, new[] { "dd MMMM, yyyy","dddd, dd MMMM, yyyy" }, new[] { "H:mm","HH:mm","hh:mm tt" }, new[] { "H:mm:ss","HH:mm:ss","hh:mm:ss tt" }, new[] { "MMMM, yyyy" } } },
+                       { 0x1404, new [] { new[] { "d/M/yyyy","d/M/yy","dd/MM/yy","yy/M/d","yy/MM/dd","yyyy/M/d","yyyy/MM/dd","yyyy-MM-dd" }, new[] { "yyyy\'年\'M\'月\'d\'日\'","dddd yyyy\'年\'M\'月\'d\'日\'","dddd yyyy MM dd","yyyy MM dd","yyyy年MMMd日","dddd yyyy年MMMd日" }, new[] { "H:mm","HH:mm" }, new[] { "H:mm:ss","HH:mm:ss" }, new[] { "yyyy\'年\'M\'月\'","yyyy.M" } } },
+                       { 0x1407, new [] { new[] { "dd.MM.yyyy","dd.MM.yy","d.MM.yy","dd. M. yy","d.M.yy","yyyy-MM-dd","dd.MMM.yyyy","d.M.yyyy" }, new[] { "dddd, d. MMMM yyyy","d. MMMM yyyy","d. MMM yyyy" }, new[] { "HH:mm","H:mm","H.mm\' Uhr\'","HHmm","H.mm" }, new[] { "HH:mm:ss","H:mm:ss","HH:mm:ss\' Uhr\'","H:mm:ss\' Uhr\'","HHmmss" }, new[] { "MMMM yyyy" } } },
+                       { 0x1409, new [] { new[] { "d/MM/yyyy","d/MM/yy","dd/MM/yy","d.MM.yy","yyyy-MM-dd" }, new[] { "dddd, d MMMM yyyy","d MMMM yyyy" }, new[] { "h:mm tt","hh:mm tt","HH:mm","H:mm" }, new[] { "h:mm:ss tt","hh:mm:ss tt","HH:mm:ss","H:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x140a, new [] { new[] { "dd/MM/yyyy","dd/MM/yy","d/M/yy","dd-MM-yy" }, new[] { "dddd d\' de \'MMMM\' de \'yyyy","d\' de \'MMMM\' de \'yyyy","dd-MMM-yy","d/MMM/yy","d-MMM-yyyy" }, new[] { "hh:mm tt","h:mm tt","H:mm","HH:mm" }, new[] { "hh:mm:ss tt","h:mm:ss tt","H:mm:ss","HH:mm:ss" }, new[] { "MMMM\' de \'yyyy" } } },
+                       { 0x140c, new [] { new[] { "dd/MM/yyyy","dd/MM/yy","dd.MM.yy","dd-MM-yy","yyyy-MM-dd" }, new[] { "dddd\', le \'d MMMM yyyy","dddd d MMMM yyyy","d MMM yy","d MMMM yyyy" }, new[] { "HH:mm","H:mm","HH.mm","HH\' h \'mm","HH\'h\'mm" }, new[] { "HH:mm:ss","H:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x141a, new [] { new[] { "d.M.yyyy","d.M.yy","d. M. yyyy","dd.MM.yyyy","d. M. yy","dd.MM.yy","dd. MM. yy","yyyy-MM-dd" }, new[] { "d. MMMM yyyy","dd. MMMM yyyy","dddd, d. MMMM yyyy" }, new[] { "H:mm","HH:mm" }, new[] { "H:mm:ss","HH:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x143b, new [] { new[] { "yyyy-MM-dd","yy-MM-dd" }, new[] { "dddd, MMMM d\'. b. \'yyyy","MMMM d\'. b. \'yyyy" }, new[] { "HH:mm","H:mm" }, new[] { "HH:mm:ss","H:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x1801, new [] { new[] { "dd-MM-yyyy","dd-MM-yy","yyyy-MM-dd" }, new[] { "dd MMMM, yyyy","dddd, dd MMMM, yyyy" }, new[] { "H:mm","HH:mm","hh:mm tt" }, new[] { "H:mm:ss","HH:mm:ss","hh:mm:ss tt" }, new[] { "MMMM, yyyy" } } },
+                       { 0x1809, new [] { new[] { "dd/MM/yyyy","dd-MM-yyyy","yyyy-MM-dd" }, new[] { "dd MMMM yyyy","d MMMM yyyy" }, new[] { "HH:mm","H:mm" }, new[] { "HH:mm:ss","H:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x180a, new [] { new[] { "d/M/yy","dd/MM/yy","dd-MM-yy","yyyy-MM-dd" }, new[] { "dddd, dd\' de \'MMMM\' de \'yyyy","dddd d\' de \'MMMM\' de \'yyyy","d\' de \'MMMM\' de \'yyyy" }, new[] { "h:mm tt","H:mm" }, new[] { "h:mm:ss tt","H:mm:ss" }, new[] { "MMMM\' de \'yyyy" } } },
+                       { 0x180c, new [] { new[] { "dd/MM/yyyy","dd/MM/yy","dd.MM.yy","dd-MM-yy","yyyy-MM-dd" }, new[] { "dddd d MMMM yyyy","d MMMM yyyy","d MMM yy" }, new[] { "HH:mm","H:mm","HH.mm","HH\' h \'mm","HH\'h\'mm" }, new[] { "HH:mm:ss","H:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x181a, new [] { new[] { "d.M.yyyy.","dd.MM.yyyy." }, new[] { "d. MMMM yyyy.","dd. MMMM yyyy.","dddd, d. MMMM yyyy." }, new[] { "H:mm","HH:mm" }, new[] { "H:mm:ss","HH:mm:ss" }, new[] { "MMMM yyyy." } } },
+                       { 0x183b, new [] { new[] { "dd.MM.yyyy","dd.MM.yy","d.M.yy","yyyy-MM-dd" }, new[] { "dddd, MMMM d\'. b. \'yyyy","MMMM d\'. b. \'yyyy" }, new[] { "HH:mm","H:mm" }, new[] { "HH:mm:ss","H:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x1c01, new [] { new[] { "dd-MM-yyyy","dd-MM-yy","yyyy-MM-dd" }, new[] { "dd MMMM, yyyy","dddd, dd MMMM, yyyy" }, new[] { "H:mm","HH:mm","hh:mm tt" }, new[] { "H:mm:ss","HH:mm:ss","hh:mm:ss tt" }, new[] { "MMMM, yyyy" } } },
+                       { 0x1c09, new [] { new[] { "yyyy-MM-dd" }, new[] { "dd MMMM yyyy" }, new[] { "hh:mm tt","HH:mm" }, new[] { "hh:mm:ss tt","HH:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x1c0a, new [] { new[] { "d/M/yy","d/M/yyyy","d-M-yy","d-M-yyyy","d.M.yy","d.M.yyyy" }, new[] { "dddd, dd\' de \'MMMM\' de \'yyyy","d\' de \'MMMM\' de \'yyyy" }, new[] { "h:mm tt","H:mm" }, new[] { "h:mm:ss tt","H:mm:ss" }, new[] { "MMMM\' de \'yyyy" } } },
+                       { 0x1c1a, new [] { new[] { "d.M.yyyy.","dd.MM.yyyy." }, new[] { "d. MMMM yyyy","dd. MMMM yyyy","dddd, d. MMMM yyyy" }, new[] { "H:mm","HH:mm" }, new[] { "H:mm:ss","HH:mm:ss" }, new[] { "MMMM, yyyy" } } },
+                       { 0x1c3b, new [] { new[] { "yyyy-MM-dd","yy-MM-dd" }, new[] { "dddd, MMMM d\'. b. \'yyyy","MMMM d\'. b. \'yyyy" }, new[] { "HH:mm","H:mm" }, new[] { "HH:mm:ss","H:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x2001, new [] { new[] { "dd/MM/yyyy","dd/MM/yy","yyyy-MM-dd" }, new[] { "dd MMMM, yyyy","dddd, dd MMMM, yyyy" }, new[] { "hh:mm tt","HH:mm","H:mm" }, new[] { "hh:mm:ss tt","HH:mm:ss","H:mm:ss" }, new[] { "MMMM, yyyy" } } },
+                       { 0x2009, new [] { new[] { "dd/MM/yyyy","yyyy-MM-dd" }, new[] { "dd MMMM, yyyy","dd-MMM-yyyy","dd-MM-yyyy","dddd, MMMM dd, yyyy","MMMM dd, yyyy","dddd, dd MMMM, yyyy" }, new[] { "HH:mm","hh:mm tt","h:mm tt","H:mm" }, new[] { "HH:mm:ss","hh:mm:ss tt","h:mm:ss tt","H:mm:ss" }, new[] { "MMMM, yyyy" } } },
+                       { 0x200a, new [] { new[] { "dd-MM-yyyy","dd/MM/yyyy","dd/MM/yy","d/M/yy","dd-MM-yy","yyyy-MM-dd" }, new[] { "dddd, dd\' de \'MMMM\' de \'yyyy","dddd d\' de \'MMMM\' de \'yyyy","d\' de \'MMMM\' de \'yyyy" }, new[] { "hh:mm tt","h:mm tt","H:mm","HH:mm" }, new[] { "hh:mm:ss tt","h:mm:ss tt","H:mm:ss","HH:mm:ss" }, new[] { "MMMM\' de \'yyyy" } } },
+                       { 0x200c, new [] { new[] { "dd/MM/yyyy","d MMM yyyy" }, new[] { "dddd d MMMM yyyy","d MMMM yyyy" }, new[] { "HH:mm" }, new[] { "HH:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x201a, new [] { new[] { "d.M.yyyy","d.M.yy","d. M. yyyy","dd.MM.yyyy","d. M. yy","dd.MM.yy","dd. MM. yy","yyyy-MM-dd" }, new[] { "d. MMMM yyyy","dd. MMMM yyyy","dddd, d. MMMM yyyy" }, new[] { "H:mm","HH:mm" }, new[] { "H:mm:ss","HH:mm:ss" }, new[] { "MMMM, yyyy" } } },
+                       { 0x203b, new [] { new[] { "d.M.yyyy","dd.MM.yyyy","d.M.yy","yyyy-MM-dd" }, new[] { "MMMM d\'. p. \'yyyy" }, new[] { "H:mm","HH:mm" }, new[] { "H:mm:ss","HH:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x2401, new [] { new[] { "dd/MM/yyyy","dd/MM/yy","yyyy-MM-dd" }, new[] { "dd MMMM, yyyy","dddd, dd MMMM, yyyy" }, new[] { "hh:mm tt","HH:mm","H:mm" }, new[] { "hh:mm:ss tt","HH:mm:ss","H:mm:ss" }, new[] { "MMMM, yyyy" } } },
+                       { 0x2409, new [] { new[] { "dd/MM/yyyy","dd/MM/yy","d/MM/yy","d/M/yyyy","dd/M/yy","d/MM/yyyy","d/M/yy" }, new[] { "dddd, dd MMMM yyyy","dddd, dd MMMM, yyyy","dd MMMM, yyyy","dddd, d MMMM yyyy","d MMMM yyyy","dddd d MMMM yyyy","d MMM yyyy" }, new[] { "HH:mm","H:mm","HH.mm","hh:mm tt","h:mm tt" }, new[] { "HH:mm:ss","H:mm:ss","HH.mm.ss","H.mm.ss","hh:mm:ss tt","h:mm:ss tt" }, new[] { "MMMM, yyyy" } } },
+                       { 0x240a, new [] { new[] { "dd/MM/yyyy","dd/MM/yy","d/MM/yyyy","d/M/yy","dd-MM-yy","yyyy-MM-dd" }, new[] { "dddd, dd\' de \'MMMM\' de \'yyyy","dddd d\' de \'MMMM\' de \'yyyy","d\' de \'MMMM\' de \'yyyy" }, new[] { "h:mm tt","H:mm" }, new[] { "h:mm:ss tt","H:mm:ss" }, new[] { "MMMM\' de \'yyyy" } } },
+                       { 0x240c, new [] { new[] { "dd/MM/yyyy","d MMM yyyy" }, new[] { "dddd d MMMM yyyy","d MMMM yyyy" }, new[] { "HH:mm" }, new[] { "HH:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x241a, new [] { new[] { "d.M.yyyy.","dd.MM.yyyy." }, new[] { "d. MMMM yyyy.","dd. MMMM yyyy.","dddd, d. MMMM yyyy." }, new[] { "H:mm","HH:mm" }, new[] { "H:mm:ss","HH:mm:ss" }, new[] { "MMMM yyyy." } } },
+                       { 0x243b, new [] { new[] { "d.M.yyyy","dd.MM.yyyy","d.M.yy","yyyy-MM-dd" }, new[] { "MMMM d\'. p. \'yyyy" }, new[] { "H:mm","HH:mm" }, new[] { "H:mm:ss","HH:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x2801, new [] { new[] { "dd/MM/yyyy","dd/MM/yy","yyyy-MM-dd" }, new[] { "dd MMMM, yyyy","dddd, dd MMMM, yyyy" }, new[] { "hh:mm tt","HH:mm","H:mm" }, new[] { "hh:mm:ss tt","HH:mm:ss","H:mm:ss" }, new[] { "MMMM, yyyy" } } },
+                       { 0x2809, new [] { new[] { "dd/MM/yyyy","yyyy-MM-dd" }, new[] { "dddd, dd MMMM yyyy" }, new[] { "hh:mm tt","HH:mm" }, new[] { "hh:mm:ss tt","HH:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x280a, new [] { new[] { "dd/MM/yyyy","dd/MM/yy","d/M/yy","dd-MM-yy","yyyy-MM-dd" }, new[] { "dddd, dd\' de \'MMMM\' de \'yyyy","dddd d\' de \'MMMM\' de \'yyyy","d\' de \'MMMM\' de \'yyyy" }, new[] { "hh:mm tt","h:mm tt","H:mm","HH:mm" }, new[] { "hh:mm:ss tt","h:mm:ss tt","H:mm:ss","HH:mm:ss" }, new[] { "MMMM\' de \'yyyy" } } },
+                       { 0x280c, new [] { new[] { "dd/MM/yyyy","d MMM yyyy" }, new[] { "dddd d MMMM yyyy","d MMMM yyyy" }, new[] { "HH:mm" }, new[] { "HH:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x281a, new [] { new[] { "d.M.yyyy.","dd.MM.yyyy." }, new[] { "d. MMMM yyyy.","dd. MMMM yyyy.","dddd, d. MMMM yyyy." }, new[] { "H:mm","HH:mm" }, new[] { "H:mm:ss","HH:mm:ss" }, new[] { "MMMM yyyy." } } },
+                       { 0x2c01, new [] { new[] { "dd/MM/yyyy","dd/MM/yy","yyyy-MM-dd" }, new[] { "dd MMMM, yyyy","dddd, dd MMMM, yyyy" }, new[] { "hh:mm tt","HH:mm","H:mm" }, new[] { "hh:mm:ss tt","HH:mm:ss","H:mm:ss" }, new[] { "MMMM, yyyy" } } },
+                       { 0x2c09, new [] { new[] { "dd/MM/yyyy","yyyy-MM-dd" }, new[] { "dddd, dd MMMM yyyy" }, new[] { "hh:mm tt","HH:mm" }, new[] { "hh:mm:ss tt","HH:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x2c0a, new [] { new[] { "dd/MM/yyyy","dd/MM/yy","d/M/yy","dd-MM-yy","yyyy-MM-dd" }, new[] { "dddd, dd\' de \'MMMM\' de \'yyyy","dddd d\' de \'MMMM\' de \'yyyy","d\' de \'MMMM\' de \'yyyy" }, new[] { "hh:mm tt","h:mm tt","HH:mm","H:mm" }, new[] { "hh:mm:ss tt","h:mm:ss tt","HH:mm:ss","H:mm:ss" }, new[] { "MMMM\' de \'yyyy" } } },
+                       { 0x2c0c, new [] { new[] { "dd/MM/yyyy","d MMM yyyy" }, new[] { "dddd d MMMM yyyy","d MMMM yyyy" }, new[] { "HH:mm" }, new[] { "HH:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x2c1a, new [] { new[] { "d.M.yyyy.","d.M.yy.","d. M. yyyy.","dd.MM.yyyy.","d. M. yy.","dd.MM.yy.","dd. MM. yy.","yyyy-MM-dd" }, new[] { "d. MMMM yyyy.","dd. MMMM yyyy.","dddd, d. MMMM yyyy." }, new[] { "H:mm","HH:mm" }, new[] { "H:mm:ss","HH:mm:ss" }, new[] { "MMMM yyyy." } } },
+                       { 0x3001, new [] { new[] { "dd/MM/yyyy","dd/MM/yy","yyyy-MM-dd" }, new[] { "dd MMMM, yyyy","dddd, dd MMMM, yyyy" }, new[] { "hh:mm tt","HH:mm","H:mm" }, new[] { "hh:mm:ss tt","HH:mm:ss","H:mm:ss" }, new[] { "MMMM, yyyy" } } },
+                       { 0x3009, new [] { new[] { "dd/MM/yyyy","d/M/yyyy" }, new[] { "dddd, d MMMM yyyy","d MMMM yyyy","d MMM yy","ddd d MMMM yyyy" }, new[] { "h:mm tt","hh:mm tt","H:mm","HH:mm" }, new[] { "h:mm:ss tt","hh:mm:ss tt","H:mm:ss","HH:mm:ss" }, new[] { "MMMM/yyyy" } } },
+                       { 0x300a, new [] { new[] { "dd/MM/yyyy","dd/MM/yy","d/M/yy","dd-MM-yy","yyyy-MM-dd" }, new[] { "dddd, dd\' de \'MMMM\' de \'yyyy","dddd d\' de \'MMMM\' de \'yyyy","d\' de \'MMMM\' de \'yyyy" }, new[] { "H:mm","HH:mm" }, new[] { "H:mm:ss","HH:mm:ss" }, new[] { "MMMM\' de \'yyyy" } } },
+                       { 0x300c, new [] { new[] { "dd/MM/yyyy","d MMM yyyy" }, new[] { "dddd d MMMM yyyy","d MMMM yyyy" }, new[] { "HH:mm" }, new[] { "HH:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x301a, new [] { new[] { "d.M.yyyy.","d.M.yy.","d. M. yyyy.","dd.MM.yyyy.","d. M. yy.","dd.MM.yy.","dd. MM. yy.","yyyy-MM-dd." }, new[] { "d. MMMM yyyy.","dd. MMMM yyyy.","dddd, d. MMMM yyyy." }, new[] { "H:mm","HH:mm" }, new[] { "H:mm:ss","HH:mm:ss" }, new[] { "MMMM yyyy." } } },
+                       { 0x3401, new [] { new[] { "dd/MM/yyyy","dd/MM/yy","yyyy-MM-dd" }, new[] { "dd MMMM, yyyy","dddd, dd MMMM, yyyy" }, new[] { "hh:mm tt","HH:mm","H:mm" }, new[] { "hh:mm:ss tt","HH:mm:ss","H:mm:ss" }, new[] { "MMMM, yyyy" } } },
+                       { 0x3409, new [] { new[] { "M/d/yyyy","M/d/yy","MM/dd/yy","MM/dd/yyyy","yyyy-MM-dd","yy/MM/dd","dd-MMM-yy" }, new[] { "dddd, MMMM dd, yyyy","MMMM dd, yyyy","dddd, dd MMMM, yyyy","dd MMMM, yyyy" }, new[] { "h:mm tt","hh:mm tt","H:mm","HH:mm" }, new[] { "h:mm:ss tt","hh:mm:ss tt","H:mm:ss","HH:mm:ss" }, new[] { "MMMM, yyyy" } } },
+                       { 0x340a, new [] { new[] { "dd-MM-yyyy","dd-MM-yy","dd/MM/yy","d/M/yy" }, new[] { "dddd, dd\' de \'MMMM\' de \'yyyy","dddd d\' de \'MMMM\' de \'yyyy","d\' de \'MMMM\' de \'yyyy" }, new[] { "H:mm","HH:mm" }, new[] { "H:mm:ss","HH:mm:ss" }, new[] { "MMMM\' de \'yyyy" } } },
+                       { 0x340c, new [] { new[] { "dd/MM/yyyy","d MMM yyyy" }, new[] { "dddd d MMMM yyyy","d MMMM yyyy" }, new[] { "HH:mm" }, new[] { "HH:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x3801, new [] { new[] { "dd/MM/yyyy","dd/MM/yy","yyyy-MM-dd" }, new[] { "dd MMMM, yyyy","dddd, dd MMMM, yyyy" }, new[] { "hh:mm tt","HH:mm","H:mm" }, new[] { "hh:mm:ss tt","HH:mm:ss","H:mm:ss" }, new[] { "MMMM, yyyy" } } },
+                       { 0x380a, new [] { new[] { "dd/MM/yyyy","dd/MM/yy","d/M/yy","dd-MM-yy","yyyy-MM-dd" }, new[] { "dddd, dd\' de \'MMMM\' de \'yyyy","dddd d\' de \'MMMM\' de \'yyyy","d\' de \'MMMM\' de \'yyyy" }, new[] { "H:mm","HH:mm","hh:mm tt","h:mm tt" }, new[] { "H:mm:ss","HH:mm:ss","hh:mm:ss tt","h:mm:ss tt" }, new[] { "MMMM\' de \'yyyy" } } },
+                       { 0x380c, new [] { new[] { "dd/MM/yyyy","d MMM yyyy" }, new[] { "dddd d MMMM yyyy","d MMMM yyyy" }, new[] { "HH:mm" }, new[] { "HH:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x3c01, new [] { new[] { "dd/MM/yyyy","dd/MM/yy","yyyy-MM-dd" }, new[] { "dd MMMM, yyyy","dddd, dd MMMM, yyyy" }, new[] { "hh:mm tt","HH:mm","H:mm" }, new[] { "hh:mm:ss tt","HH:mm:ss","H:mm:ss" }, new[] { "MMMM, yyyy" } } },
+                       { 0x3c09, new [] { new[] { "d/M/yy","d MMM, yyyy" }, new[] { "dddd, d MMMM, yyyy","d MMMM, yyyy" }, new[] { "h:mm tt" }, new[] { "h:mm:ss tt" }, new[] { "MMMM yyyy" } } },
+                       { 0x3c0a, new [] { new[] { "dd/MM/yyyy","dd/MM/yy","d/M/yy","dd-MM-yy","yyyy-MM-dd" }, new[] { "dddd, dd\' de \'MMMM\' de \'yyyy","dddd d\' de \'MMMM\' de \'yyyy","d\' de \'MMMM\' de \'yyyy" }, new[] { "hh:mm tt","h:mm tt","H:mm","HH:mm" }, new[] { "hh:mm:ss tt","h:mm:ss tt","H:mm:ss","HH:mm:ss" }, new[] { "MMMM\' de \'yyyy","MMMM, yyyy" } } },
+                       { 0x3c0c, new [] { new[] { "dd/MM/yyyy","d MMM yyyy" }, new[] { "dddd d MMMM yyyy","d MMMM yyyy" }, new[] { "HH:mm" }, new[] { "HH:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x4001, new [] { new[] { "dd/MM/yyyy","dd/MM/yy","yyyy-MM-dd" }, new[] { "dd MMMM, yyyy","dddd, dd MMMM, yyyy" }, new[] { "hh:mm tt","HH:mm","H:mm" }, new[] { "hh:mm:ss tt","HH:mm:ss","H:mm:ss" }, new[] { "MMMM, yyyy" } } },
+                       { 0x4009, new [] { new[] { "dd-MM-yyyy","dd-MM-yy","d-M-yy","d.M.yy","yyyy-MM-dd" }, new[] { "dd MMMM yyyy","d MMMM yyyy" }, new[] { "HH:mm","H:mm","hh:mm tt" }, new[] { "HH:mm:ss","H:mm:ss","h.mm.ss tt","hh:mm:ss tt" }, new[] { "MMMM, yyyy" } } },
+                       { 0x400a, new [] { new[] { "dd/MM/yyyy","dd/MM/yy","d/M/yy","dd-MM-yy" }, new[] { "dddd, dd\' de \'MMMM\' de \'yyyy","d\' de \'MMMM\' de \'yyyy" }, new[] { "hh:mm tt","h:mm tt","H:mm","HH:mm" }, new[] { "hh:mm:ss tt","h:mm:ss tt","H:mm:ss","HH:mm:ss" }, new[] { "MMMM\' de \'yyyy" } } },
+                       { 0x4409, new [] { new[] { "d/M/yyyy","d/M/yy","dd/MM/yyyy","dd/MM/yy","yyyy-MM-dd" }, new[] { "dddd, d MMMM, yyyy","d MMMM, yyyy" }, new[] { "h:mm tt","hh:mm tt","H:mm","HH:mm" }, new[] { "h:mm:ss tt","hh:mm:ss tt","H:mm:ss","HH:mm:ss" }, new[] { "MMMM, yyyy","MMMM yyyy" } } },
+                       { 0x440a, new [] { new[] { "dd/MM/yyyy","dd/MM/yy","MM-dd-yyyy","yyyy-MM-dd" }, new[] { "dddd, dd\' de \'MMMM\' de \'yyyy" }, new[] { "hh:mm tt","HH:mm" }, new[] { "hh:mm:ss tt","HH:mm:ss" }, new[] { "MMMM\' de \'yyyy" } } },
+                       { 0x4809, new [] { new[] { "d/M/yyyy","d/M/yy","dd/MM/yyyy","dd/MM/yy","yyyy-MM-dd" }, new[] { "dddd, d MMMM yyyy","d MMMM yyyy" }, new[] { "h:mm tt","hh:mm tt","H:mm","HH:mm" }, new[] { "h:mm:ss tt","hh:mm:ss tt","H:mm:ss","HH:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x480a, new [] { new[] { "dd/MM/yyyy","dd/MM/yy","MM-dd-yyyy","yyyy-MM-dd" }, new[] { "dddd, d\' de \'MMMM\' de \'yyyy" }, new[] { "hh:mm tt","HH:mm" }, new[] { "hh:mm:ss tt","HH:mm:ss" }, new[] { "MMMM\' de \'yyyy" } } },
+                       { 0x4c0a, new [] { new[] { "dd/MM/yyyy","dd/MM/yy","MM-dd-yyyy","yyyy-MM-dd" }, new[] { "dddd, d\' de \'MMMM\' de \'yyyy" }, new[] { "hh:mm tt","HH:mm" }, new[] { "hh:mm:ss tt","HH:mm:ss" }, new[] { "MMMM\' del \'yyyy" } } },
+                       { 0x500a, new [] { new[] { "dd/MM/yyyy","dd/MM/yy","MM-dd-yyyy","yyyy-MM-dd" }, new[] { "dddd, dd\' de \'MMMM\' de \'yyyy" }, new[] { "hh:mm tt","HH:mm" }, new[] { "hh:mm:ss tt","HH:mm:ss" }, new[] { "MMMM\' de \'yyyy" } } },
+                       { 0x540a, new [] { new[] { "M/d/yyyy","M/d/yy","MM/dd/yy","MM/dd/yyyy","yy/MM/dd","yyyy-MM-dd","dd-MMM-yy" }, new[] { "dddd, MMMM dd, yyyy","MMMM dd, yyyy","dddd, dd MMMM, yyyy","dd MMMM, yyyy" }, new[] { "h:mm tt","hh:mm tt","H:mm","HH:mm" }, new[] { "h:mm:ss tt","hh:mm:ss tt","H:mm:ss","HH:mm:ss" }, new[] { "MMMM\' de \'yyyy" } } },
+                       { 0x580a, new [] { new[] { "dd/MM/yy","dd/MM/yyyy" }, new[] { "dddd, d \'de\' MMMM \'de\' yyyy","d \'de\' MMMM \'de\' yyyy" }, new[] { "HH:mm" }, new[] { "HH:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x641a, new [] { new[] { "d.M.yyyy","d.M.yy","d. M. yyyy","dd.MM.yyyy","d. M. yy","dd.MM.yy","dd. MM. yy","yyyy-MM-dd" }, new[] { "d. MMMM yyyy","dd. MMMM yyyy","dddd, d. MMMM yyyy" }, new[] { "H:mm","HH:mm" }, new[] { "H:mm:ss","HH:mm:ss" }, new[] { "MMMM, yyyy" } } },
+                       { 0x681a, new [] { new[] { "d.M.yyyy","d.M.yy","d. M. yyyy","dd.MM.yyyy","d. M. yy","dd.MM.yy","dd. MM. yy","yyyy-MM-dd" }, new[] { "d. MMMM yyyy","dd. MMMM yyyy","dddd, d. MMMM yyyy" }, new[] { "H:mm","HH:mm" }, new[] { "H:mm:ss","HH:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x6c1a, new [] { new[] { "d.M.yyyy.","dd.MM.yyyy." }, new[] { "d. MMMM yyyy.","dd. MMMM yyyy.","dddd, d. MMMM yyyy." }, new[] { "H:mm","HH:mm" }, new[] { "H:mm:ss","HH:mm:ss" }, new[] { "MMMM yyyy." } } },
+                       { 0x701a, new [] { new[] { "d.M.yyyy.","dd.MM.yyyy." }, new[] { "d. MMMM yyyy.","dd. MMMM yyyy.","dddd, d. MMMM yyyy." }, new[] { "H:mm","HH:mm" }, new[] { "H:mm:ss","HH:mm:ss" }, new[] { "MMMM yyyy." } } },
+                       { 0x703b, new [] { new[] { "d.M.yyyy","dd.MM.yyyy","d.M.yy","yyyy-MM-dd" }, new[] { "MMMM d\'. p. \'yyyy" }, new[] { "H:mm","HH:mm" }, new[] { "H:mm:ss","HH:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x742c, new [] { new[] { "dd.MM.yyyy","dd.MM.yy","d.M.yy","dd/MM/yy","yyyy-MM-dd" }, new[] { "d MMMM yyyy","dd MMMM yyyy" }, new[] { "H:mm","HH:mm" }, new[] { "HH:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x743b, new [] { new[] { "d.M.yyyy","dd.MM.yyyy","d.M.yy","yyyy-MM-dd" }, new[] { "MMMM d\'. p. \'yyyy" }, new[] { "H:mm","HH:mm" }, new[] { "H:mm:ss","HH:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x7804, new [] { new[] { "yyyy/M/d","yyyy-M-d","yyyy.M.d","yyyy/MM/dd","yyyy-MM-dd","yyyy.MM.dd","yy/M/d","yy-M-d","yy.M.d","yy/MM/dd" }, new[] { "yyyy\'年\'M\'月\'d\'日\'","yyyy\'年\'M\'月\'d\'日\', dddd","dddd, yyyy\'年\'M\'月\'d\'日\'","yyyy年MMMd日","yyyy年MMMd日, dddd" }, new[] { "H:mm","HH:mm","tt h:mm","tt hh:mm" }, new[] { "H:mm:ss","HH:mm:ss","tt h:mm:ss","tt hh:mm:ss" }, new[] { "yyyy\'年\'M\'月\'","yyyy.M" } } },
+                       { 0x7814, new [] { new[] { "dd.MM.yyyy","d.MM.yyyy","dd.MM.yy","d.M.yy","dd. MMM. yyyy","yyyy-MM-dd" }, new[] { "d. MMMM yyyy","dd. MMMM yyyy" }, new[] { "HH:mm","H:mm","\'kl \'H:mm","\'kl \'HH:mm","HH.mm","H.mm","\'kl \'HH.mm","\'kl \'H.mm" }, new[] { "HH:mm:ss","H:mm:ss","\'kl \'HH:mm:ss","\'kl \'H:mm:ss","HH.mm.ss","H.mm.ss","\'kl \'HH.mm.ss","\'kl \'H.mm.ss" }, new[] { "MMMM yyyy","MMM. yyyy","MM.yyyy" } } },
+                       { 0x781a, new [] { new[] { "d.M.yyyy","d.M.yy","d. M. yyyy","dd.MM.yyyy","d. M. yy","dd.MM.yy","dd. MM. yy","yyyy-MM-dd" }, new[] { "d. MMMM yyyy","dd. MMMM yyyy","dddd, d. MMMM yyyy" }, new[] { "H:mm","HH:mm" }, new[] { "H:mm:ss","HH:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x782c, new [] { new[] { "dd.MM.yyyy","dd.MM.yy","d.M.yy","dd/MM/yy","yyyy-MM-dd" }, new[] { "dd MMMM yyyy\'-cü il\'" }, new[] { "HH:mm","H:mm" }, new[] { "HH:mm:ss","H:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x783b, new [] { new[] { "yyyy-MM-dd","yy-MM-dd" }, new[] { "dddd, MMMM d\'. b. \'yyyy","MMMM d\'. b. \'yyyy" }, new[] { "HH:mm","H:mm" }, new[] { "HH:mm:ss","H:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x7843, new [] { new[] { "dd.MM.yyyy","dd.MM.yy","dd/MM yyyy","d.M.yy","dd/MM/yy","yyyy-MM-dd" }, new[] { "yyyy \'йил\' d-MMMM","d MMMM yyyy","dd MMMM yyyy" }, new[] { "HH:mm","H:mm" }, new[] { "HH:mm:ss","H:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x7850, new [] { new[] { "yyyy-MM-dd" }, new[] { "yyyy \'оны\' M\'-р сарын\' d. dddd \'гариг\'.","yyyy оны MMM d. dddd гариг." }, new[] { "HH:mm","H:mm" }, new[] { "HH:mm:ss","H:mm:ss" }, new[] { "yyyy \'оны\' MMMM" } } },
+                       { 0x785d, new [] { new[] { "d/M/yyyy","d/M/yy","dd/MM/yy","yy/MM/dd","yyyy-MM-dd","dd-MMM-yy" }, new[] { "dddd,MMMM dd,yyyy","MMMM dd,yyyy","dddd, dd MMMM, yyyy","dd MMMM, yyyy" }, new[] { "h:mm tt","hh:mm tt","H:mm","HH:mm" }, new[] { "h:mm:ss tt","hh:mm:ss tt","H:mm:ss","HH:mm:ss" }, new[] { "MMMM,yyyy" } } },
+                       { 0x785f, new [] { new[] { "dd-MM-yyyy","dd-MM-yy","yyyy-MM-dd","dd.MMM.yyyy" }, new[] { "dddd, dd MMMM, yyyy","dd MMMM, yyyy" }, new[] { "H:mm","HH:mm" }, new[] { "H:mm:ss","HH:mm:ss" }, new[] { "MMMM, yyyy","MMMM yyyy" } } },
+                       { 0x7c04, new [] { new[] { "d/M/yyyy","d/M/yy","dd/MM/yy","yy/M/d","yy/MM/dd","yyyy/M/d","yyyy/MM/dd","yyyy-MM-dd" }, new[] { "yyyy\'年\'M\'月\'d\'日\'","yyyy\'年\'MM\'月\'dd\'日\'","yyyy年MMMd日","yyyy年MMMd日, dddd" }, new[] { "H:mm","HH:mm" }, new[] { "H:mm:ss","HH:mm:ss" }, new[] { "yyyy\'年\'M\'月\'","yyyy.M" } } },
+                       { 0x7c14, new [] { new[] { "dd.MM.yyyy","d.MM.yyyy","dd.MM.yy","d.M.yy","dd. MMM. yyyy","yyyy-MM-dd" }, new[] { "d. MMMM yyyy","dd. MMMM yyyy" }, new[] { "HH:mm","H:mm","\'kl \'H:mm","\'kl \'HH:mm","HH.mm","H.mm","\'kl \'HH.mm","\'kl \'H.mm" }, new[] { "HH:mm:ss","H:mm:ss","\'kl \'HH:mm:ss","\'kl \'H:mm:ss","HH.mm.ss","H.mm.ss","\'kl \'HH.mm.ss","\'kl \'H.mm.ss" }, new[] { "MMMM yyyy","MMM. yyyy","MM.yyyy" } } },
+                       { 0x7c1a, new [] { new[] { "d.M.yyyy.","dd.MM.yyyy." }, new[] { "d. MMMM yyyy.","dd. MMMM yyyy.","dddd, d. MMMM yyyy." }, new[] { "H:mm","HH:mm" }, new[] { "H:mm:ss","HH:mm:ss" }, new[] { "MMMM yyyy." } } },
+                       { 0x7c28, new [] { new[] { "dd.MM.yyyy","dd.MM.yy","d.M.yy","dd-MM-yyyy","dd/MM/yy" }, new[] { "d MMMM yyyy\' с.\'","dd MMMM yyyy\' с.\'" }, new[] { "HH:mm","H:mm" }, new[] { "HH:mm:ss","H:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x7c2e, new [] { new[] { "d. M. yyyy","d. M. yy","dd.MM.yyyy","dd.MM.yy","yyyy-MM-dd" }, new[] { "dddd, d. MMMM yyyy","d. MMMM yyyy","d. M. yyyy" }, new[] { "HH:mm","H:mm","H:mm\' góź.\'","\'zeger \'H:mm" }, new[] { "HH:mm:ss","H:mm:ss\' góź.\'","\'zeger \'H:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x7c3b, new [] { new[] { "yyyy-MM-dd","yy-MM-dd" }, new[] { "dddd, MMMM d\'. b. \'yyyy","MMMM d\'. b. \'yyyy" }, new[] { "HH:mm","H:mm" }, new[] { "HH:mm:ss","H:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x7c43, new [] { new[] { "dd.MM.yyyy" }, new[] { "yyyy \'yil\' d-MMMM","d MMMM yyyy","dd MMMM yyyy" }, new[] { "HH:mm","H:mm" }, new[] { "HH:mm:ss","H:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x7c46, new [] { new[] { "dd-MM-yy","d-M-yy","d.M.yy","dd-MM-yyyy","yyyy-MM-dd" }, new[] { "dd MMMM yyyy dddd","d MMMM yyyy" }, new[] { "h.mm tt","hh:mm tt","H:mm","HH:mm" }, new[] { "h.mm.ss tt","hh:mm:ss tt","H:mm:ss","HH:mm:ss" }, new[] { "MMMM, yyyy" } } },
+                       { 0x7c50, new [] { new[] { "yyyy/M/d","yyyy-M-d","yyyy.M.d","yyyy.MM.dd","yyyy-MM-dd","yyyy/MM/dd","yy-M-d","yy/M/d","yy.M.d","yy/MM/dd" }, new[] { "yyyyᠣᠨ MMMM dᠡᠳᠦᠷ᠂ dddd","yyyyᠣᠨ MMMM dᠡᠳᠦᠷ" }, new[] { "H:mm" }, new[] { "H:mm:ss" }, new[] { "yyyyᠣᠨ MMMM","yyyy.M" } } },
+                       { 0x7c59, new [] { new[] { "dd/MM/yyyy","dd/MM/yy","yyyy-MM-dd" }, new[] { "dddd, dd MMMM, yyyy","dd MMMM yyyy" }, new[] { "h:mm tt","hh:mm tt","H:mm","HH:mm" }, new[] { "h:mm:ss tt","hh:mm:ss tt","H:mm:ss","HH:mm:ss" }, new[] { "MMMM, yyyy" } } },
+                       { 0x7c5c, new [] { new[] { "M/d/yyyy","M/d/yy","MM/dd/yy","MM/dd/yyyy","yy/MM/dd","yyyy-MM-dd","dd-MMM-yy" }, new[] { "dddd, MMMM dd,yyyy","MMMM dd,yyyy","dddd, dd MMMM, yyyy","dd MMMM, yyyy" }, new[] { "h:mm tt","hh:mm tt","H:mm","HH:mm" }, new[] { "h:mm:ss tt","hh:mm:ss tt","H:mm:ss","HH:mm:ss" }, new[] { "MMMM, yyyy" } } },
+                       { 0x7c5d, new [] { new[] { "d/MM/yyyy","d/M/yy","yy-MM-dd","dd/MM/yyyy","yy-MM-dd","yyyy-MM-dd","dd-MMM-yy" }, new[] { "dddd, dd MMMM, yyyy","ddd, MMMM dd,yyyy","MMMM dd,yyyy","dd MMMM, yyyy" }, new[] { "h:mm tt","hh:mm tt","HH:mm","H:mm" }, new[] { "h:mm:ss tt","hh:mm:ss tt","HH:mm:ss","H:mm:ss" }, new[] { "MMMM, yyyy" } } },
+                       { 0x7c5f, new [] { new[] { "dd-MM-yyyy","dd-MM-yy","yyyy-MM-dd" }, new[] { "dd MMMM, yyyy","dddd, dd MMMM, yyyy" }, new[] { "H:mm","HH:mm" }, new[] { "H:mm:ss","HH:mm:ss" }, new[] { "MMMM, yyyy" } } },
+                       { 0x7c67, new [] { new[] { "dd/MM/yyyy","dd/MM/yy","dd.MM.yy","dd-MM-yy","yyyy-MM-dd" }, new[] { "dddd d MMMM yyyy","d MMM yy","d MMMM yyyy" }, new[] { "HH:mm","H:mm","HH.mm","HH\' h \'mm" }, new[] { "HH:mm:ss","H:mm:ss" }, new[] { "MMMM yyyy" } } },
+                       { 0x7c68, new [] { new[] { "d/M/yyyy","d/M/yy","dd/MM/yy","dd/MM/yyyy","yy/MM/dd","yyyy-MM-dd","dd-MMM-yy" }, new[] { "dddd, MMMM dd, yyyy","MMMM dd, yyyy","dddd, dd MMMM, yyyy","dd MMMM, yyyy" }, new[] { "h:mm tt","hh:mm tt","H:mm","HH:mm" }, new[] { "h:mm:ss tt","hh:mm:ss tt","H:mm:ss","HH:mm:ss" }, new[] { "MMMM, yyyy" } } },
+                       { 0x7c92, new [] { new[] { "yyyy/MM/dd" }, new[] { "dddd, dd MMMM, yyyy" }, new[] { "hh:mm tt","HH:mm" }, new[] { "hh:mm:ss tt","HH:mm:ss" }, new[] { "MMMM, yyyy" } } },
                };
 
                static readonly Dictionary<int, string[][]> GroupSizes = new Dictionary<int, string[][]> {
@@ -1793,6 +1844,7 @@ namespace Mono.Tools.LocaleBuilder
                        entry_dt[1].CopyTo (dfe.LongDatePatterns, 0);
                        entry_dt[2].CopyTo (dfe.ShortTimePatterns, 0);
                        entry_dt[3].CopyTo (dfe.LongTimePatterns, 0);
+                       entry_dt[4].CopyTo (dfe.YearMonthPatterns, 0);
 
                        var entry_te = Text[lcid];
                        var te = ci.TextInfoEntry;
index bb7fd5e681a0e9976cbe98ef8f8685c4f8d47713..5335f01e71baf7031f5aa6321c08dbe8baff7b1d 100644 (file)
@@ -2,6 +2,8 @@
 #include <stdlib.h>
 #include <assert.h>
 #include <glib.h>
+#include <unistd.h>
+#include <fcntl.h>
 
 #define SGEN_BINARY_PROTOCOL
 #define MONO_INTERNAL
 #define TYPE(t)                ((t) & 0x7f)
 #define WORKER(t)      ((t) & 0x80)
 
+#define MAX_ENTRY_SIZE (1 << 10)
+#define BUFFER_SIZE (1 << 20)
+
+typedef struct {
+       int file;
+       char *buffer;
+       const char *end;
+       const char *pos;
+} EntryStream;
+
+static void
+init_stream (EntryStream *stream, int file)
+{
+       stream->file = file;
+       stream->buffer = g_malloc0 (BUFFER_SIZE);
+       stream->end = stream->buffer + BUFFER_SIZE;
+       stream->pos = stream->end;
+}
+
+static void
+close_stream (EntryStream *stream)
+{
+       g_free (stream->buffer);
+}
+
+static gboolean
+refill_stream (EntryStream *in, size_t size)
+{
+       size_t remainder = in->end - in->pos;
+       ssize_t refilled;
+       g_assert (size > 0);
+       g_assert (in->pos >= in->buffer);
+       if (in->pos + size <= in->end)
+               return TRUE;
+       memmove (in->buffer, in->pos, remainder);
+       in->pos = in->buffer;
+       refilled = read (in->file, in->buffer + remainder, BUFFER_SIZE - remainder);
+       if (refilled < 0)
+               return FALSE;
+       g_assert (refilled + remainder <= BUFFER_SIZE);
+       in->end = in->buffer + refilled + remainder;
+       return in->end - in->buffer >= size;
+}
+
+static ssize_t
+read_stream (EntryStream *stream, void *out, size_t size)
+{
+       if (refill_stream (stream, size)) {
+               memcpy (out, stream->pos, size);
+               stream->pos += size;
+               return size;
+       }
+       return 0;
+}
+
 static int
-read_entry (FILE *in, void **data)
+read_entry (EntryStream *stream, void *data)
 {
        unsigned char type;
-       int size;
+       ssize_t size;
 
-       if (fread (&type, 1, 1, in) != 1)
+       if (read_stream (stream, &type, 1) <= 0)
                return SGEN_PROTOCOL_EOF;
        switch (TYPE (type)) {
 
@@ -71,11 +128,8 @@ read_entry (FILE *in, void **data)
        }
 
        if (size) {
-               *data = malloc (size);
-               if (fread (*data, size, 1, in) != 1)
-                       assert (0);
-       } else {
-               *data = NULL;
+               size_t size_read = read_stream (stream, data, size);
+               g_assert (size_read == size);
        }
 
        return (int)type;
@@ -523,7 +577,7 @@ int
 main (int argc, char *argv[])
 {
        int type;
-       void *data;
+       void *data = g_malloc0 (MAX_ENTRY_SIZE);
        int num_args = argc - 1;
        int num_nums = 0;
        int num_vtables = 0;
@@ -537,6 +591,9 @@ main (int argc, char *argv[])
        gboolean pause_times_finish = FALSE;
        gboolean color_output = FALSE;
        long long pause_times_ts = 0;
+       const char *input_path = NULL;
+       int input_file;
+       EntryStream stream;
 
        for (i = 0; i < num_args; ++i) {
                char *arg = argv [i + 1];
@@ -550,6 +607,9 @@ main (int argc, char *argv[])
                        ++i;
                } else if (!strcmp (arg, "-c") || !strcmp (arg, "--color")) {
                        color_output = TRUE;
+               } else if (!strcmp (arg, "-i") || !strcmp (arg, "--input")) {
+                       input_path = next_arg;
+                       ++i;
                } else {
                        nums [num_nums++] = strtoul (arg, NULL, 16);
                }
@@ -560,7 +620,9 @@ main (int argc, char *argv[])
        if (pause_times)
                assert (!dump_all);
 
-       while ((type = read_entry (stdin, &data)) != SGEN_PROTOCOL_EOF) {
+       input_file = input_path ? open (input_path, O_RDONLY) : STDIN_FILENO;
+       init_stream (&stream, input_file);
+       while ((type = read_entry (&stream, data)) != SGEN_PROTOCOL_EOF) {
                if (pause_times) {
                        switch (type) {
                        case PROTOCOL_ID (binary_protocol_world_stopping): {
@@ -613,8 +675,11 @@ main (int argc, char *argv[])
                        if (match || dump_all)
                                print_entry (type, data, num_nums, match_indices, color_output);
                }
-               free (data);
        }
+       close_stream (&stream);
+       if (input_path)
+               close (input_file);
+       g_free (data);
 
        return 0;
 }