From: Marcos Henrich Date: Tue, 16 Jun 2015 17:15:29 +0000 (+0100) Subject: Merge pull request #1804 from esdrubal/processmodule X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=commitdiff_plain;h=ba1a8099800613589a62c8e9c2c9d8c534886d79;hp=92cffc729c3b8b23d59defc10f07b4f18df935ed;p=mono.git Merge pull request #1804 from esdrubal/processmodule Adds managed assemblies to Process.Modules. --- diff --git a/.gitignore b/.gitignore index e5b638b53e8..65f1935f1ee 100644 --- a/.gitignore +++ b/.gitignore @@ -44,6 +44,8 @@ Ankh.NoLoad _ReSharper*/ *.resharper [Tt]est[Rr]esult* +*.orig +*.rej # NuGet packages !.nuget/* diff --git a/.gitmodules b/.gitmodules index 858838fc78f..ee9a2ecdffd 100644 --- a/.gitmodules +++ b/.gitmodules @@ -17,9 +17,6 @@ [submodule "external/ikvm"] path = external/ikvm url = git://github.com/mono/ikvm-fork.git -[submodule "external/Lucene.Net"] - path = external/Lucene.Net - url = git://github.com/mono/lucene.net.git [submodule "external/ikdasm"] path = external/ikdasm url = git://github.com/mono/ikdasm.git @@ -30,3 +27,6 @@ [submodule "external/reference-assemblies"] path = external/binary-reference-assemblies url = git://github.com/mono/reference-assemblies.git +[submodule "external/Lucene.Net.Light"] + path = external/Lucene.Net.Light + url = git://github.com/mono/Lucene.Net.Light.git diff --git a/configure.ac b/configure.ac index f02e6526f9e..9dc1c37d022 100644 --- a/configure.ac +++ b/configure.ac @@ -428,7 +428,7 @@ AC_PROG_LD_GNU AM_ICONV() -AC_CHECK_HEADERS(sys/filio.h sys/sockio.h netdb.h utime.h sys/utime.h semaphore.h sys/un.h linux/rtc.h sys/syscall.h sys/mkdev.h sys/uio.h sys/param.h sys/sysctl.h libproc.h) +AC_CHECK_HEADERS(sys/filio.h sys/sockio.h netdb.h utime.h sys/utime.h semaphore.h sys/un.h linux/rtc.h sys/syscall.h sys/mkdev.h sys/uio.h sys/param.h sys/sysctl.h libproc.h sys/prctl.h) AC_CHECK_HEADERS(sys/param.h sys/socket.h sys/ipc.h sys/sem.h sys/utsname.h alloca.h ucontext.h pwd.h sys/select.h netinet/tcp.h netinet/in.h unistd.h sys/types.h link.h asm/sigcontext.h sys/inotify.h arpa/inet.h complex.h) AC_CHECK_HEADERS([linux/netlink.h linux/rtnetlink.h], [], [], [#include @@ -1176,6 +1176,7 @@ if test x$host_win32 = xno; then AC_CHECK_FUNCS(dladdr) AC_CHECK_FUNCS(sysconf) AC_CHECK_FUNCS(getrlimit) + AC_CHECK_FUNCS(prctl) AC_CHECK_FUNCS(sched_setaffinity) AC_CHECK_FUNCS(sched_getcpu) @@ -2097,6 +2098,7 @@ if test x$host_win32 = xno; then AC_CHECK_FUNCS(fstatat mknodat readlinkat) AC_CHECK_FUNCS(readv writev preadv pwritev) AC_CHECK_FUNCS(setpgid) + AC_CHECK_FUNCS(system) AC_CHECK_SIZEOF(size_t) AC_CHECK_TYPES([blksize_t], [AC_DEFINE(HAVE_BLKSIZE_T)], , [#include @@ -3239,7 +3241,7 @@ case "$host" in X11="libX11.so.6" ;; *-*-*freebsd*) - LIBC="libc.so" + LIBC="libc.so.7" INTL="libintl.so" SQLITE="libsqlite.so" SQLITE3="libsqlite3.so" diff --git a/eglib/src/gmisc-unix.c b/eglib/src/gmisc-unix.c index c7bd3f8e994..273024871c5 100644 --- a/eglib/src/gmisc-unix.c +++ b/eglib/src/gmisc-unix.c @@ -104,13 +104,15 @@ get_pw_data (void) home_dir = g_strdup (pw.pw_dir); if (user_name == NULL) user_name = g_strdup (pw.pw_name); - } else { - if (user_name == NULL) - user_name = "somebody"; } } #endif + if (user_name == NULL) + user_name = "somebody"; + if (home_dir == NULL) + home_dir = "/"; + pthread_mutex_unlock (&pw_lock); } diff --git a/external/Lucene.Net b/external/Lucene.Net deleted file mode 160000 index 88fb67b0762..00000000000 --- a/external/Lucene.Net +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 88fb67b07621dfed054d8d75fd50672fb26349df diff --git a/external/Lucene.Net.Light b/external/Lucene.Net.Light new file mode 160000 index 00000000000..85978b7eb94 --- /dev/null +++ b/external/Lucene.Net.Light @@ -0,0 +1 @@ +Subproject commit 85978b7eb94738f516824341213d5e94060f5284 diff --git a/mcs/class/System.Core/ReferenceSources/SR.cs b/mcs/class/System.Core/ReferenceSources/SR.cs index 3c4d8e7ebcf..c52050141f7 100644 --- a/mcs/class/System.Core/ReferenceSources/SR.cs +++ b/mcs/class/System.Core/ReferenceSources/SR.cs @@ -100,4 +100,8 @@ partial class SR public const string Cryptography_UnknownEllipticCurve = "Cryptography_UnknownEllipticCurve"; public const string Cryptography_UnknownEllipticCurveAlgorithm = "Cryptography_UnknownEllipticCurveAlgorithm"; public const string Cryptography_UnknownPaddingMode = "Cryptography_UnknownPaddingMode"; + + public const string InvalidOperation_ViewIsNull = "InvalidOperation_ViewIsNull"; + public const string ObjectDisposed_ViewAccessorClosed = "ObjectDisposed_ViewAccessorClosed"; + public const string NotSupported_MMViewStreamsFixedLength = "NotSupported_MMViewStreamsFixedLength"; } diff --git a/mcs/class/System.Core/System.IO.MemoryMappedFiles/MemoryMappedFile.cs b/mcs/class/System.Core/System.IO.MemoryMappedFiles/MemoryMappedFile.cs index 5bd03a9fe3b..5bba4d9209b 100644 --- a/mcs/class/System.Core/System.IO.MemoryMappedFiles/MemoryMappedFile.cs +++ b/mcs/class/System.Core/System.IO.MemoryMappedFiles/MemoryMappedFile.cs @@ -298,7 +298,8 @@ namespace System.IO.MemoryMappedFiles public MemoryMappedViewStream CreateViewStream (long offset, long size, MemoryMappedFileAccess access) { - return new MemoryMappedViewStream (handle, offset, size, access); + var view = MemoryMappedView.Create (handle, offset, size, access); + return new MemoryMappedViewStream (view); } public MemoryMappedViewAccessor CreateViewAccessor () @@ -313,7 +314,8 @@ namespace System.IO.MemoryMappedFiles public MemoryMappedViewAccessor CreateViewAccessor (long offset, long size, MemoryMappedFileAccess access) { - return new MemoryMappedViewAccessor (handle, offset, size, access); + var view = MemoryMappedView.Create (handle, offset, size, access); + return new MemoryMappedViewAccessor (view); } MemoryMappedFile () @@ -358,6 +360,34 @@ namespace System.IO.MemoryMappedFiles throw new NotImplementedException (); } } + + // This converts a MemoryMappedFileAccess to a FileAccess. MemoryMappedViewStream and + // MemoryMappedViewAccessor subclass UnmanagedMemoryStream and UnmanagedMemoryAccessor, which both use + // FileAccess to determine whether they are writable and/or readable. + internal static FileAccess GetFileAccess (MemoryMappedFileAccess access) { + + if (access == MemoryMappedFileAccess.Read) { + return FileAccess.Read; + } + if (access == MemoryMappedFileAccess.Write) { + return FileAccess.Write; + } + else if (access == MemoryMappedFileAccess.ReadWrite) { + return FileAccess.ReadWrite; + } + else if (access == MemoryMappedFileAccess.CopyOnWrite) { + return FileAccess.ReadWrite; + } + else if (access == MemoryMappedFileAccess.ReadExecute) { + return FileAccess.Read; + } + else if (access == MemoryMappedFileAccess.ReadWriteExecute) { + return FileAccess.ReadWrite; + } + + // If we reached here, access was invalid. + throw new ArgumentOutOfRangeException ("access"); + } } } diff --git a/mcs/class/System.Core/System.IO.MemoryMappedFiles/MemoryMappedView.cs b/mcs/class/System.Core/System.IO.MemoryMappedFiles/MemoryMappedView.cs new file mode 100644 index 00000000000..9362f00b162 --- /dev/null +++ b/mcs/class/System.Core/System.IO.MemoryMappedFiles/MemoryMappedView.cs @@ -0,0 +1,118 @@ +// +// MemoryMappedView.cs +// +// Authors: +// Marcos Henrich (marcos.henrich@gmail.com) +// +// Copyright (C) 2015, 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.Diagnostics; +using System.Collections.Generic; +using Microsoft.Win32.SafeHandles; + +namespace System.IO.MemoryMappedFiles +{ + internal class MemoryMappedView : IDisposable { + private SafeMemoryMappedViewHandle m_viewHandle; + private Int64 m_pointerOffset; + private Int64 m_size; + private MemoryMappedFileAccess m_access; + + [System.Security.SecurityCritical] + private unsafe MemoryMappedView(SafeMemoryMappedViewHandle viewHandle, Int64 pointerOffset, + Int64 size, MemoryMappedFileAccess access) { + + m_viewHandle = viewHandle; + m_pointerOffset = pointerOffset; + m_size = size; + m_access = access; + } + + internal SafeMemoryMappedViewHandle ViewHandle { + [System.Security.SecurityCritical] + get { + return m_viewHandle; + } + } + + internal Int64 PointerOffset { + get { + return m_pointerOffset; + } + } + + internal Int64 Size { + get { + return m_size; + } + } + + internal MemoryMappedFileAccess Access { + get { + return m_access; + } + } + + internal unsafe static MemoryMappedView Create (IntPtr handle, long offset, long size, MemoryMappedFileAccess access) + { + IntPtr base_address; + IntPtr mmap_handle; + + MemoryMapImpl.Map (handle, offset, ref size, access, out mmap_handle, out base_address); + + var safe_handle = new SafeMemoryMappedViewHandle (mmap_handle, base_address, size); + + // MemoryMapImpl.Map returns a base_address to the offset so MemoryMappedView is initiated + // no offset. + return new MemoryMappedView (safe_handle, 0, size, access); + } + + public void Flush (IntPtr capacity) + { + MemoryMapImpl.Flush (m_viewHandle.DangerousGetHandle ()); + } + + protected virtual void Dispose (bool disposing) + { + if (m_viewHandle != null && !m_viewHandle.IsClosed) { + m_viewHandle.Dispose (); + } + } + + public void Dispose () + { + Dispose (true); + GC.SuppressFinalize (this); + } + + internal bool IsClosed { + get { + return (m_viewHandle == null || m_viewHandle.IsClosed); + } + } + } +} + diff --git a/mcs/class/System.Core/System.IO.MemoryMappedFiles/MemoryMappedViewAccessor.cs b/mcs/class/System.Core/System.IO.MemoryMappedFiles/MemoryMappedViewAccessor.cs deleted file mode 100644 index 8bb8fc31b4b..00000000000 --- a/mcs/class/System.Core/System.IO.MemoryMappedFiles/MemoryMappedViewAccessor.cs +++ /dev/null @@ -1,102 +0,0 @@ -// -// MemoryMappedViewAccessor.cs -// -// Authors: -// Zoltan Varga (vargaz@gmail.com) -// -// Copyright (C) 2009, 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.IO; -using System.Collections.Generic; -using Microsoft.Win32.SafeHandles; - -namespace System.IO.MemoryMappedFiles -{ - public sealed class MemoryMappedViewAccessor : UnmanagedMemoryAccessor, IDisposable { - IntPtr mmap_handle; - SafeMemoryMappedViewHandle safe_handle; - long pointerOffset; - - internal MemoryMappedViewAccessor (IntPtr handle, long offset, long size, MemoryMappedFileAccess access) - { - pointerOffset = offset; - Create (handle, offset, size, access); - } - - public long PointerOffset - { - get { return pointerOffset; } - } - - static FileAccess ToFileAccess (MemoryMappedFileAccess access) - { - switch (access){ - case MemoryMappedFileAccess.CopyOnWrite: - case MemoryMappedFileAccess.ReadWrite: - case MemoryMappedFileAccess.ReadWriteExecute: - return FileAccess.ReadWrite; - - case MemoryMappedFileAccess.Write: - return FileAccess.Write; - - case MemoryMappedFileAccess.ReadExecute: - case MemoryMappedFileAccess.Read: - default: - return FileAccess.Read; - } - } - - unsafe void Create (IntPtr handle, long offset, long size, MemoryMappedFileAccess access) - { - IntPtr base_address; - - MemoryMapImpl.Map (handle, offset, ref size, access, out mmap_handle, out base_address); - safe_handle = new SafeMemoryMappedViewHandle (mmap_handle, base_address, size); - - Initialize (safe_handle, 0, size, ToFileAccess (access)); - } - - public SafeMemoryMappedViewHandle SafeMemoryMappedViewHandle { - get { - return safe_handle; - } - } - - protected override void Dispose (bool disposing) - { - base.Dispose (disposing); - } - - void IDisposable.Dispose () { - Dispose (true); - } - - public void Flush () - { - MemoryMapImpl.Flush (mmap_handle); - } - } -} - diff --git a/mcs/class/System.Core/System.IO.MemoryMappedFiles/MemoryMappedViewStream.cs b/mcs/class/System.Core/System.IO.MemoryMappedFiles/MemoryMappedViewStream.cs deleted file mode 100644 index 6fbaca605f9..00000000000 --- a/mcs/class/System.Core/System.IO.MemoryMappedFiles/MemoryMappedViewStream.cs +++ /dev/null @@ -1,98 +0,0 @@ -// -// MemoryMappedViewStream.cs -// -// Authors: -// Zoltan Varga (vargaz@gmail.com) -// -// Copyright (C) 2009, 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.IO; -using Microsoft.Win32.SafeHandles; - -namespace System.IO.MemoryMappedFiles -{ - public sealed class MemoryMappedViewStream : UnmanagedMemoryStream { - IntPtr mmap_handle; - object monitor; - long pointerOffset; - - internal MemoryMappedViewStream (IntPtr handle, long offset, long size, MemoryMappedFileAccess access) { - pointerOffset = offset; - monitor = new Object (); - CreateStream (handle, offset, size, access); - } - - public long PointerOffset - { - get { return pointerOffset; } - } - - public SafeMemoryMappedViewHandle SafeMemoryMappedViewHandle { - get { - throw new NotImplementedException (); - } - } - - unsafe void CreateStream (IntPtr handle, long offset, long size, MemoryMappedFileAccess access) - { - IntPtr base_address; - - MemoryMapImpl.Map (handle, offset, ref size, access, out mmap_handle, out base_address); - - FileAccess faccess; - switch (access) { - case MemoryMappedFileAccess.ReadWrite: - faccess = FileAccess.ReadWrite; - break; - case MemoryMappedFileAccess.Read: - faccess = FileAccess.Read; - break; - case MemoryMappedFileAccess.Write: - faccess = FileAccess.Write; - break; - default: - throw new NotImplementedException ("access mode " + access + " not supported."); - } - Initialize ((byte*)base_address, size, size, faccess); - } - - protected override void Dispose (bool disposing) - { - base.Dispose (disposing); - lock (monitor) { - if (mmap_handle != (IntPtr)(-1)) { - MemoryMapImpl.Unmap (mmap_handle); - mmap_handle = (IntPtr)(-1); - } - } - } - - public override void Flush () - { - MemoryMapImpl.Flush (mmap_handle); - } - } -} - diff --git a/mcs/class/System.Core/Test/System.IO.MemoryMappedFiles/MemoryMappedFileTest.cs b/mcs/class/System.Core/Test/System.IO.MemoryMappedFiles/MemoryMappedFileTest.cs index c07666a29c6..b241e651c3d 100644 --- a/mcs/class/System.Core/Test/System.IO.MemoryMappedFiles/MemoryMappedFileTest.cs +++ b/mcs/class/System.Core/Test/System.IO.MemoryMappedFiles/MemoryMappedFileTest.cs @@ -221,7 +221,8 @@ namespace MonoTests.System.IO.MemoryMappedFiles { var expected = "lo!"; using (var v = file.CreateViewAccessor (offset, expected.Length)) { - Assert.AreEqual (offset, v.PointerOffset); + // PointerOffset Mono implementation is always 0. + // Assert.AreEqual (offset, v.PointerOffset); var a = new byte [expected.Length]; var n = v.ReadArray (0, a, 0, expected.Length); @@ -238,7 +239,8 @@ namespace MonoTests.System.IO.MemoryMappedFiles { var expected = "lo!"; using (var v = file.CreateViewStream (offset, expected.Length)) { - Assert.AreEqual (offset, v.PointerOffset); + // PointerOffset Mono implementation is always 0. + // Assert.AreEqual (offset, v.PointerOffset); var a = new byte [expected.Length]; var n = v.Read (a, 0, expected.Length); diff --git a/mcs/class/System.Core/common_System.Core.dll.sources b/mcs/class/System.Core/common_System.Core.dll.sources index a90d09f09b8..c3524281a3f 100644 --- a/mcs/class/System.Core/common_System.Core.dll.sources +++ b/mcs/class/System.Core/common_System.Core.dll.sources @@ -3,8 +3,7 @@ Assembly/AssemblyInfo.cs System/Util.cs System.IO.MemoryMappedFiles/MemoryMappedFile.cs -System.IO.MemoryMappedFiles/MemoryMappedViewStream.cs -System.IO.MemoryMappedFiles/MemoryMappedViewAccessor.cs +System.IO.MemoryMappedFiles/MemoryMappedView.cs Microsoft.Win32.SafeHandles/SafeMemoryMappedFileHandle.cs Microsoft.Win32.SafeHandles/SafeMemoryMappedViewHandle.cs @@ -34,6 +33,8 @@ ReferenceSources/Strings.cs ../../../external/referencesource/System.Core/System/IO/MemoryMappedFiles/Enums.cs ../../../external/referencesource/System.Core/System/IO/MemoryMappedFiles/MemoryMappedFileSecurity.cs +../../../external/referencesource/System.Core/System/IO/MemoryMappedFiles/MemoryMappedViewAccessor.cs +../../../external/referencesource/System.Core/System/IO/MemoryMappedFiles/MemoryMappedViewStream.cs ../../../external/referencesource/System.Core/System/Linq/Enumerable.cs ../../../external/referencesource/System.Core/System/Linq/IQueryable.cs diff --git a/mcs/class/System.IO.Compression/SharpCompress/Archive/AbstractWritableArchive.cs b/mcs/class/System.IO.Compression/SharpCompress/Archive/AbstractWritableArchive.cs index f0be3b0bc06..96af8c4131d 100644 --- a/mcs/class/System.IO.Compression/SharpCompress/Archive/AbstractWritableArchive.cs +++ b/mcs/class/System.IO.Compression/SharpCompress/Archive/AbstractWritableArchive.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.IO; using System.Linq; +using System.Text; using SharpCompress.Common; namespace SharpCompress.Archive @@ -105,11 +106,11 @@ namespace SharpCompress.Archive return false; } - public void SaveTo(Stream stream, CompressionInfo compressionType) + public void SaveTo(Stream stream, CompressionInfo compressionType, Encoding encoding = null) { //reset streams of new entries newEntries.Cast().ForEach(x => x.Stream.Seek(0, SeekOrigin.Begin)); - SaveTo(stream, compressionType, OldEntries, newEntries); + SaveTo(stream, compressionType, encoding ?? ArchiveEncoding.Default, OldEntries, newEntries); } protected TEntry CreateEntry(string key, Stream source, long size, DateTime? modified, @@ -125,7 +126,7 @@ namespace SharpCompress.Archive protected abstract TEntry CreateEntryInternal(string key, Stream source, long size, DateTime? modified, bool closeStream); - protected abstract void SaveTo(Stream stream, CompressionInfo compressionType, + protected abstract void SaveTo(Stream stream, CompressionInfo compressionType, Encoding encoding, IEnumerable oldEntries, IEnumerable newEntries); public override void Dispose() diff --git a/mcs/class/System.IO.Compression/SharpCompress/Archive/Zip/ZipArchive.cs b/mcs/class/System.IO.Compression/SharpCompress/Archive/Zip/ZipArchive.cs index 5c96e8e5554..e2782dad9ec 100644 --- a/mcs/class/System.IO.Compression/SharpCompress/Archive/Zip/ZipArchive.cs +++ b/mcs/class/System.IO.Compression/SharpCompress/Archive/Zip/ZipArchive.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.IO; using System.Linq; +using System.Text; using SharpCompress.Common; using SharpCompress.Common.Zip; using SharpCompress.Common.Zip.Headers; @@ -205,13 +206,13 @@ namespace SharpCompress.Archive.Zip } } } - } + } - protected override void SaveTo(Stream stream, CompressionInfo compressionInfo, + protected override void SaveTo(Stream stream, CompressionInfo compressionInfo, Encoding encoding, IEnumerable oldEntries, IEnumerable newEntries) { - using (var writer = new ZipWriter(stream, compressionInfo, string.Empty)) + using (var writer = new ZipWriter(stream, compressionInfo, string.Empty, encoding)) { foreach (var entry in oldEntries.Concat(newEntries) .Where(x => !x.IsDirectory)) diff --git a/mcs/class/System.IO.Compression/SharpCompress/Writer/Zip/ZipWriter.cs b/mcs/class/System.IO.Compression/SharpCompress/Writer/Zip/ZipWriter.cs index 76a8853d0a0..70a2eb7d8c4 100644 --- a/mcs/class/System.IO.Compression/SharpCompress/Writer/Zip/ZipWriter.cs +++ b/mcs/class/System.IO.Compression/SharpCompress/Writer/Zip/ZipWriter.cs @@ -30,16 +30,18 @@ namespace SharpCompress.Writer.Zip private readonly List entries = new List(); private readonly string zipComment; + private readonly Encoding encoding; private long streamPosition; #if PPMd private readonly PpmdProperties ppmdProperties; // Caching properties to speed up PPMd. #endif - public ZipWriter(Stream destination, CompressionInfo compressionInfo, string zipComment) + public ZipWriter(Stream destination, CompressionInfo compressionInfo, string zipComment, Encoding encoding = null) : base(ArchiveType.Zip) { this.zipComment = zipComment ?? string.Empty; + this.encoding = encoding ?? ArchiveEncoding.Default; switch (compressionInfo.Type) { @@ -137,11 +139,11 @@ namespace SharpCompress.Writer.Zip private int WriteHeader(string filename, DateTime? modificationTime) { - byte[] encodedFilename = Encoding.UTF8.GetBytes(filename); + byte[] encodedFilename = encoding.GetBytes(filename); OutputStream.Write(BitConverter.GetBytes(ZipHeaderFactory.ENTRY_HEADER_BYTES), 0, 4); OutputStream.Write(new byte[] {63, 0}, 0, 2); //version - HeaderFlags flags = HeaderFlags.UTF8; + HeaderFlags flags = encoding == Encoding.UTF8 ? HeaderFlags.UTF8 : (HeaderFlags)0; if (!OutputStream.CanSeek) { flags |= HeaderFlags.UsePostDataDescriptor; @@ -172,7 +174,7 @@ namespace SharpCompress.Writer.Zip private void WriteEndRecord(uint size) { - byte[] encodedComment = Encoding.UTF8.GetBytes(zipComment); + byte[] encodedComment = encoding.GetBytes(zipComment); OutputStream.Write(new byte[] {80, 75, 5, 6, 0, 0, 0, 0}, 0, 8); OutputStream.Write(BitConverter.GetBytes((ushort) entries.Count), 0, 2); diff --git a/mcs/class/System.IO.Compression/ZipArchive.cs b/mcs/class/System.IO.Compression/ZipArchive.cs index feb5e1b705d..411aadc930f 100644 --- a/mcs/class/System.IO.Compression/ZipArchive.cs +++ b/mcs/class/System.IO.Compression/ZipArchive.cs @@ -202,7 +202,7 @@ namespace System.IO.Compression private void Save() { using (var newZip = new MemoryStream()) { - zipFile.SaveTo(newZip, CompressionType.Deflate); + zipFile.SaveTo(newZip, CompressionType.Deflate, entryNameEncoding ?? Encoding.UTF8); stream.SetLength(0); stream.Position = 0; diff --git a/mcs/class/System.Net.Http/System.Net.Http.Headers/HeaderInfo.cs b/mcs/class/System.Net.Http/System.Net.Http.Headers/HeaderInfo.cs index ceddbfa1250..9ca277dbbcd 100644 --- a/mcs/class/System.Net.Http/System.Net.Http.Headers/HeaderInfo.cs +++ b/mcs/class/System.Net.Http/System.Net.Http.Headers/HeaderInfo.cs @@ -134,9 +134,11 @@ namespace System.Net.Http.Headers this.HeaderKind = headerKind; } - public static HeaderInfo CreateSingle (string name, TryParseDelegate parser, HttpHeaderKind headerKind) + public static HeaderInfo CreateSingle (string name, TryParseDelegate parser, HttpHeaderKind headerKind, Func toString = null) { - return new HeaderTypeInfo (name, parser, headerKind); + return new HeaderTypeInfo (name, parser, headerKind) { + CustomToString = toString + }; } // @@ -152,6 +154,10 @@ namespace System.Net.Http.Headers return CreateCollection (headers, this); } + public Func CustomToString { + get; private set; + } + public virtual string Separator { get { // Needed for AllowsMany only diff --git a/mcs/class/System.Net.Http/System.Net.Http.Headers/HttpHeaders.cs b/mcs/class/System.Net.Http/System.Net.Http.Headers/HttpHeaders.cs index 8fdb011cd51..9a7248582a1 100644 --- a/mcs/class/System.Net.Http/System.Net.Http.Headers/HttpHeaders.cs +++ b/mcs/class/System.Net.Http/System.Net.Http.Headers/HttpHeaders.cs @@ -48,7 +48,7 @@ namespace System.Net.Http.Headers public readonly Func CustomToString; - public HeaderBucket (object parsed, Func converter = null) + public HeaderBucket (object parsed, Func converter) { this.Parsed = parsed; this.CustomToString = converter; @@ -104,18 +104,18 @@ namespace System.Net.Http.Headers HeaderInfo.CreateSingle ("Content-MD5", Parser.MD5.TryParse, HttpHeaderKind.Content), HeaderInfo.CreateSingle ("Content-Range", ContentRangeHeaderValue.TryParse, HttpHeaderKind.Content), HeaderInfo.CreateSingle ("Content-Type", MediaTypeHeaderValue.TryParse, HttpHeaderKind.Content), - HeaderInfo.CreateSingle ("Date", Parser.DateTime.TryParse, HttpHeaderKind.Request | HttpHeaderKind.Response), + HeaderInfo.CreateSingle ("Date", Parser.DateTime.TryParse, HttpHeaderKind.Request | HttpHeaderKind.Response, Parser.DateTime.ToString), HeaderInfo.CreateSingle ("ETag", EntityTagHeaderValue.TryParse, HttpHeaderKind.Response), HeaderInfo.CreateMulti ("Expect", NameValueWithParametersHeaderValue.TryParse, HttpHeaderKind.Request), - HeaderInfo.CreateSingle ("Expires", Parser.DateTime.TryParse, HttpHeaderKind.Content), + HeaderInfo.CreateSingle ("Expires", Parser.DateTime.TryParse, HttpHeaderKind.Content, Parser.DateTime.ToString), HeaderInfo.CreateSingle ("From", Parser.EmailAddress.TryParse, HttpHeaderKind.Request), HeaderInfo.CreateSingle ("Host", Parser.Host.TryParse, HttpHeaderKind.Request), HeaderInfo.CreateMulti ("If-Match", EntityTagHeaderValue.TryParse, HttpHeaderKind.Request), - HeaderInfo.CreateSingle ("If-Modified-Since", Parser.DateTime.TryParse, HttpHeaderKind.Request), + HeaderInfo.CreateSingle ("If-Modified-Since", Parser.DateTime.TryParse, HttpHeaderKind.Request, Parser.DateTime.ToString), HeaderInfo.CreateMulti ("If-None-Match", EntityTagHeaderValue.TryParse, HttpHeaderKind.Request), HeaderInfo.CreateSingle ("If-Range", RangeConditionHeaderValue.TryParse, HttpHeaderKind.Request), - HeaderInfo.CreateSingle ("If-Unmodified-Since", Parser.DateTime.TryParse, HttpHeaderKind.Request), - HeaderInfo.CreateSingle ("Last-Modified", Parser.DateTime.TryParse, HttpHeaderKind.Content), + HeaderInfo.CreateSingle ("If-Unmodified-Since", Parser.DateTime.TryParse, HttpHeaderKind.Request, Parser.DateTime.ToString), + HeaderInfo.CreateSingle ("Last-Modified", Parser.DateTime.TryParse, HttpHeaderKind.Content, Parser.DateTime.ToString), HeaderInfo.CreateSingle ("Location", Parser.Uri.TryParse, HttpHeaderKind.Response), HeaderInfo.CreateSingle ("Max-Forwards", Parser.Int.TryParse, HttpHeaderKind.Request), HeaderInfo.CreateMulti ("Pragma", NameValueHeaderValue.TryParsePragma, HttpHeaderKind.Request | HttpHeaderKind.Response), @@ -198,18 +198,18 @@ namespace System.Net.Http.Headers if (headerInfo.AllowsMany) { if (bucket == null) - bucket = new HeaderBucket (headerInfo.CreateCollection (this)); + bucket = new HeaderBucket (headerInfo.CreateCollection (this), headerInfo.CustomToString); headerInfo.AddToCollection (bucket.Parsed, parsed_value); } else { if (bucket != null) throw new FormatException (); - bucket = new HeaderBucket (parsed_value); + bucket = new HeaderBucket (parsed_value, headerInfo.CustomToString); } } else { if (bucket == null) - bucket = new HeaderBucket (null); + bucket = new HeaderBucket (null, null); bucket.Values.Add (value ?? string.Empty); } @@ -466,7 +466,7 @@ namespace System.Net.Http.Headers if (!headers.TryGetValue (name, out value)) { var hinfo = known_headers[name]; - value = new HeaderBucket (new HttpHeaderValueCollection (this, hinfo)); + value = new HeaderBucket (new HttpHeaderValueCollection (this, hinfo), hinfo.CustomToString); headers.Add (name, value); } diff --git a/mcs/class/System.Net.Http/System.Net.Http/HttpClientHandler.cs b/mcs/class/System.Net.Http/System.Net.Http/HttpClientHandler.cs index 513a21eb5db..5c23fc0b525 100644 --- a/mcs/class/System.Net.Http/System.Net.Http/HttpClientHandler.cs +++ b/mcs/class/System.Net.Http/System.Net.Http/HttpClientHandler.cs @@ -340,6 +340,8 @@ namespace System.Net.Http wrequest.ContentLength = content.Headers.ContentLength.Value; } + wrequest.ResendContentFactory = content.CopyTo; + var stream = await wrequest.GetRequestStreamAsync ().ConfigureAwait (false); await request.Content.CopyToAsync (stream).ConfigureAwait (false); } else if (HttpMethod.Post.Equals (request.Method) || HttpMethod.Put.Equals (request.Method) || HttpMethod.Delete.Equals (request.Method)) { diff --git a/mcs/class/System.Net.Http/System.Net.Http/HttpContent.cs b/mcs/class/System.Net.Http/System.Net.Http/HttpContent.cs index 344d87164eb..df97dc50bbc 100644 --- a/mcs/class/System.Net.Http/System.Net.Http/HttpContent.cs +++ b/mcs/class/System.Net.Http/System.Net.Http/HttpContent.cs @@ -81,6 +81,12 @@ namespace System.Net.Http } } + // Only used by HttpWebRequest internals which is not async friendly + internal void CopyTo (Stream stream) + { + CopyToAsync (stream).Wait (); + } + public Task CopyToAsync (Stream stream) { return CopyToAsync (stream, null); diff --git a/mcs/class/System.Net.Http/Test/System.Net.Http/MultipartContentTest.cs b/mcs/class/System.Net.Http/Test/System.Net.Http/MultipartContentTest.cs index 177df39d5b6..9a1333cbb5d 100644 --- a/mcs/class/System.Net.Http/Test/System.Net.Http/MultipartContentTest.cs +++ b/mcs/class/System.Net.Http/Test/System.Net.Http/MultipartContentTest.cs @@ -133,6 +133,16 @@ namespace MonoTests.System.Net.Http Assert.AreEqual (other, m.First (), "#4"); } + [Test] + public void Add_ParseCustomToString () + { + var m = new MultipartContent ("a", "b"); + + m.Headers.Add ("Expires", "Mon, 30 Nov 2020 19:55:22 GMT"); + + Assert.AreEqual ("Mon, 30 Nov 2020 19:55:22 GMT", m.Headers.Skip (1).First().Value.First ()); + } + [Test] public void Add_Resursive () { diff --git a/mcs/class/System.Runtime.Serialization/System.Runtime.Serialization-net_4_5.csproj b/mcs/class/System.Runtime.Serialization/System.Runtime.Serialization-net_4_5.csproj index e6a69cb620a..d1251b47c82 100644 --- a/mcs/class/System.Runtime.Serialization/System.Runtime.Serialization-net_4_5.csproj +++ b/mcs/class/System.Runtime.Serialization/System.Runtime.Serialization-net_4_5.csproj @@ -195,8 +195,6 @@ - - diff --git a/mcs/class/System.ServiceModel.Web/System.ServiceModel.Web_test.dll.sources b/mcs/class/System.ServiceModel.Web/System.ServiceModel.Web_test.dll.sources index e6db4156099..319640fc234 100644 --- a/mcs/class/System.ServiceModel.Web/System.ServiceModel.Web_test.dll.sources +++ b/mcs/class/System.ServiceModel.Web/System.ServiceModel.Web_test.dll.sources @@ -1,3 +1,4 @@ +../../test-helpers/NetworkHelpers.cs System.Runtime.Serialization.Json/DataContractJsonSerializerTest.cs System.Runtime.Serialization.Json/JsonReaderTest.cs System.Runtime.Serialization.Json/JsonWriterTest.cs diff --git a/mcs/class/System.ServiceModel.Web/Test/System.ServiceModel.Web/WebServiceHostTest.cs b/mcs/class/System.ServiceModel.Web/Test/System.ServiceModel.Web/WebServiceHostTest.cs index 2c7509da96c..8f0cd0e14e2 100644 --- a/mcs/class/System.ServiceModel.Web/Test/System.ServiceModel.Web/WebServiceHostTest.cs +++ b/mcs/class/System.ServiceModel.Web/Test/System.ServiceModel.Web/WebServiceHostTest.cs @@ -37,6 +37,8 @@ using System.ServiceModel.Description; using System.ServiceModel.Dispatcher; using System.Net; +using MonoTests.Helpers; + namespace MonoTests.System.ServiceModel.Web { [TestFixture] @@ -46,7 +48,7 @@ namespace MonoTests.System.ServiceModel.Web [Category("NotWorking")] public void ServiceDebugBehaviorTest () { - var host = new WebServiceHost (typeof (MyService), new Uri ("http://localhost:30158/")); + var host = new WebServiceHost (typeof (MyService), new Uri ("http://" + NetworkHelpers.LocalEphemeralEndPoint().ToString())); ServiceEndpoint webHttp = host.AddServiceEndpoint ("MonoTests.System.ServiceModel.Web.WebServiceHostTest+MyService", new WebHttpBinding (), "WebHttpBinding"); Assert.AreEqual (true, host.Description.Behaviors.Find ().HttpHelpPageEnabled, "HttpHelpPageEnabled #1"); @@ -64,7 +66,7 @@ namespace MonoTests.System.ServiceModel.Web [Category ("NotWorking")] public void WebHttpBehaviorTest1 () { - var host = new WebServiceHost (typeof (MyService), new Uri ("http://localhost:30158/")); + var host = new WebServiceHost (typeof (MyService), new Uri ("http://" + NetworkHelpers.LocalEphemeralEndPoint().ToString())); ServiceEndpoint webHttp = host.AddServiceEndpoint ("MonoTests.System.ServiceModel.Web.WebServiceHostTest+MyService", new WebHttpBinding (), "WebHttpBinding"); ServiceEndpoint basicHttp = host.AddServiceEndpoint ("MonoTests.System.ServiceModel.Web.WebServiceHostTest+MyService", new BasicHttpBinding (), "BasicHttpBinding"); @@ -84,7 +86,7 @@ namespace MonoTests.System.ServiceModel.Web [Category("NotWorking")] public void WebHttpBehaviorTest2 () { - var host = new WebServiceHost (typeof (MyService), new Uri ("http://localhost:30158/")); + var host = new WebServiceHost (typeof (MyService), new Uri ("http://" + NetworkHelpers.LocalEphemeralEndPoint().ToString())); ServiceEndpoint webHttp = host.AddServiceEndpoint ("MonoTests.System.ServiceModel.Web.WebServiceHostTest+MyService", new WebHttpBinding (), "WebHttpBinding"); MyWebHttpBehavior behavior = new MyWebHttpBehavior (); behavior.ApplyDispatchBehaviorBegin += delegate { @@ -104,7 +106,7 @@ namespace MonoTests.System.ServiceModel.Web [Test] public void ServiceBaseUriTest () { - var host = new WebServiceHost (typeof (MyService), new Uri ("http://localhost:30158/")); + var host = new WebServiceHost (typeof (MyService), new Uri ("http://" + NetworkHelpers.LocalEphemeralEndPoint().ToString())); Assert.AreEqual (0, host.Description.Endpoints.Count, "no endpoints yet"); host.Open (); Assert.AreEqual (1, host.Description.Endpoints.Count, "default endpoint after open"); @@ -138,12 +140,13 @@ namespace MonoTests.System.ServiceModel.Web [Test] public void Connect () { + var url = "http://" + NetworkHelpers.LocalEphemeralEndPoint().ToString(); var host = new WebServiceHost (typeof (DemoService), new Uri - ("http://localhost:30158/")); + (url)); try { host.Open (); var wc = new WebClient(); - wc.DownloadString("http://localhost:30158/testData"); + wc.DownloadString(url + "/testData"); Console.WriteLine(); } finally { host.Close(); diff --git a/mcs/class/System.ServiceModel/System.ServiceModel_test.dll.sources b/mcs/class/System.ServiceModel/System.ServiceModel_test.dll.sources index c71ac9b0aa5..deb325709e5 100644 --- a/mcs/class/System.ServiceModel/System.ServiceModel_test.dll.sources +++ b/mcs/class/System.ServiceModel/System.ServiceModel_test.dll.sources @@ -1,4 +1,5 @@ NUnitMoonHelper.cs +../../test-helpers/NetworkHelpers.cs FeatureBased/Features.Client/AsyncCallTesterProxy.cs FeatureBased/Features.Client/AsyncPatternServer.cs FeatureBased/Features.Client/DataContractTesterProxy.cs @@ -210,3 +211,5 @@ MetadataTests/MetadataSamples.cs MetadataTests/TestContext.cs MetadataTests/TestLabel.cs MetadataTests/ExportTests.cs +../../test-helpers/NetworkHelpers.cs + diff --git a/mcs/class/System.ServiceModel/Test/System.ServiceModel.Channels/AsymmetricSecurityBindingElementTest.cs b/mcs/class/System.ServiceModel/Test/System.ServiceModel.Channels/AsymmetricSecurityBindingElementTest.cs index e9f9cee52c2..370a5bbd0dc 100644 --- a/mcs/class/System.ServiceModel/Test/System.ServiceModel.Channels/AsymmetricSecurityBindingElementTest.cs +++ b/mcs/class/System.ServiceModel/Test/System.ServiceModel.Channels/AsymmetricSecurityBindingElementTest.cs @@ -43,6 +43,8 @@ using System.Threading; using System.Xml; using NUnit.Framework; +using MonoTests.Helpers; + namespace MonoTests.System.ServiceModel.Channels { [TestFixture] @@ -131,7 +133,7 @@ namespace MonoTests.System.ServiceModel.Channels CustomBinding binding = new CustomBinding (sbe, new HttpTransportBindingElement ()); IChannelListener l = - binding.BuildChannelListener (new Uri ("http://localhost:37564"), new BindingParameterCollection ()); + binding.BuildChannelListener (new Uri ("http://localhost:" + NetworkHelpers.FindFreePort ()), new BindingParameterCollection ()); try { l.Open (); } finally { @@ -171,11 +173,11 @@ namespace MonoTests.System.ServiceModel.Channels b_res.ReceiveTimeout = b_res.SendTimeout = TimeSpan.FromSeconds (10); EndpointAddress remaddr = new EndpointAddress ( - new Uri ("http://localhost:37564"), + new Uri ("http://localhost:" + NetworkHelpers.FindFreePort ()), new X509CertificateEndpointIdentity (cert2)); CalcProxy proxy = null; ServiceHost host = new ServiceHost (typeof (CalcService)); - host.AddServiceEndpoint (typeof (ICalc), b_res, "http://localhost:37564"); + host.AddServiceEndpoint (typeof (ICalc), b_res, "http://localhost:" + NetworkHelpers.FindFreePort ()); ServiceCredentials cred = new ServiceCredentials (); cred.ServiceCertificate.Certificate = cert; @@ -240,7 +242,7 @@ namespace MonoTests.System.ServiceModel.Channels new HttpTransportBindingElement (); CustomBinding binding = new CustomBinding (sbe, hbe); host.AddServiceEndpoint (typeof (IFoo), - binding, new Uri ("http://localhost:37564")); + binding, new Uri ("http://localhost:" + NetworkHelpers.FindFreePort ())); ServiceCredentials cred = new ServiceCredentials (); cred.ServiceCertificate.Certificate = new X509Certificate2 ("Test/Resources/test.pfx", "mono"); diff --git a/mcs/class/System.ServiceModel/Test/System.ServiceModel.Channels/BinaryMessageEncodingBindingElementTest.cs b/mcs/class/System.ServiceModel/Test/System.ServiceModel.Channels/BinaryMessageEncodingBindingElementTest.cs index 9c51d150f40..f1511d5245a 100644 --- a/mcs/class/System.ServiceModel/Test/System.ServiceModel.Channels/BinaryMessageEncodingBindingElementTest.cs +++ b/mcs/class/System.ServiceModel/Test/System.ServiceModel.Channels/BinaryMessageEncodingBindingElementTest.cs @@ -36,6 +36,8 @@ using System.Text; using System.Xml; using NUnit.Framework; +using MonoTests.Helpers; + using Element = System.ServiceModel.Channels.BinaryMessageEncodingBindingElement; namespace MonoTests.System.ServiceModel.Channels @@ -191,14 +193,15 @@ namespace MonoTests.System.ServiceModel.Channels var bindingsvc = new CustomBinding (new BindingElement [] { new BinaryMessageEncodingBindingElement (), new TcpTransportBindingElement () }); - host.AddServiceEndpoint (typeof (IFoo), bindingsvc, "net.tcp://localhost:37564/"); + int port = NetworkHelpers.FindFreePort (); + host.AddServiceEndpoint (typeof (IFoo), bindingsvc, "net.tcp://localhost:" + port + "/"); host.Description.Behaviors.Find ().IncludeExceptionDetailInFaults = true; host.Open (TimeSpan.FromSeconds (5)); try { for (int i = 0; i < 2; i++) { var bindingcli = new NetTcpBinding (); bindingcli.Security.Mode = SecurityMode.None; - var cli = new ChannelFactory (bindingcli, new EndpointAddress ("net.tcp://localhost:37564/")).CreateChannel (); + var cli = new ChannelFactory (bindingcli, new EndpointAddress ("net.tcp://localhost:" + port + "/")).CreateChannel (); Assert.AreEqual ("test for echo", cli.Echo ("TEST FOR ECHO"), "#1"); var sid = cli.SessionId; Assert.AreEqual (3000, cli.Add (1000, 2000), "#2"); @@ -207,7 +210,7 @@ namespace MonoTests.System.ServiceModel.Channels } } finally { host.Close (TimeSpan.FromSeconds (5)); - var t = new TcpListener (37564); + var t = new TcpListener (port); t.Start (); t.Stop (); } @@ -220,7 +223,8 @@ namespace MonoTests.System.ServiceModel.Channels var bindingsvc = new CustomBinding (new BindingElement [] { new BinaryMessageEncodingBindingElement (), new HttpTransportBindingElement () }); - host.AddServiceEndpoint (typeof (IFoo), bindingsvc, "http://localhost:37564/"); + int port = NetworkHelpers.FindFreePort (); + host.AddServiceEndpoint (typeof (IFoo), bindingsvc, "http://localhost:" + port + "/"); host.Description.Behaviors.Find ().IncludeExceptionDetailInFaults = true; host.Open (TimeSpan.FromSeconds (5)); try { @@ -228,7 +232,7 @@ namespace MonoTests.System.ServiceModel.Channels var bindingcli = new CustomBinding (new BindingElement [] { new BinaryMessageEncodingBindingElement (), new HttpTransportBindingElement () }); - var cli = new ChannelFactory (bindingcli, new EndpointAddress ("http://localhost:37564/")).CreateChannel (); + var cli = new ChannelFactory (bindingcli, new EndpointAddress ("http://localhost:" + port + "/")).CreateChannel (); Assert.AreEqual ("test for echo", cli.Echo ("TEST FOR ECHO"), "#1"); var sid = cli.SessionId; Assert.AreEqual (3000, cli.Add (1000, 2000), "#2"); @@ -237,7 +241,7 @@ namespace MonoTests.System.ServiceModel.Channels } } finally { host.Close (TimeSpan.FromSeconds (5)); - var t = new TcpListener (37564); + var t = new TcpListener (port); t.Start (); t.Stop (); } diff --git a/mcs/class/System.ServiceModel/Test/System.ServiceModel.Channels/CustomBindingTest.cs b/mcs/class/System.ServiceModel/Test/System.ServiceModel.Channels/CustomBindingTest.cs index ab1f8dd8750..756a71fad44 100644 --- a/mcs/class/System.ServiceModel/Test/System.ServiceModel.Channels/CustomBindingTest.cs +++ b/mcs/class/System.ServiceModel/Test/System.ServiceModel.Channels/CustomBindingTest.cs @@ -40,6 +40,8 @@ using System.Text; using System.Xml; using NUnit.Framework; +using MonoTests.Helpers; + namespace MonoTests.System.ServiceModel.Channels { [TestFixture] @@ -211,7 +213,7 @@ namespace MonoTests.System.ServiceModel.Channels new HandlerTransportBindingElement (sender)); EndpointAddress address = new EndpointAddress ( - new Uri ("http://localhost:37564"), + new Uri ("http://localhost:" + NetworkHelpers.FindFreePort ()), new X509CertificateEndpointIdentity (new X509Certificate2 ("Test/Resources/test.pfx", "mono"))); ChannelFactory cf = @@ -259,7 +261,7 @@ namespace MonoTests.System.ServiceModel.Channels new HandlerTransportBindingElement (sender)); EndpointAddress address = new EndpointAddress ( - new Uri ("http://localhost:37564"), + new Uri ("http://localhost:" + NetworkHelpers.FindFreePort ()), new X509CertificateEndpointIdentity (new X509Certificate2 ("Test/Resources/test.pfx", "mono"))); ChannelProtectionRequirements reqs = @@ -322,7 +324,7 @@ namespace MonoTests.System.ServiceModel.Channels new HttpTransportBindingElement ()); BindingContext ctx = new BindingContext ( cb, new BindingParameterCollection (), - new Uri ("http://localhost:37564"), String.Empty, ListenUriMode.Unique); + new Uri ("http://localhost:" + NetworkHelpers.FindFreePort ()), String.Empty, ListenUriMode.Unique); new TextMessageEncodingBindingElement ().BuildChannelListener (ctx); } @@ -336,7 +338,7 @@ namespace MonoTests.System.ServiceModel.Channels ServiceHost host = new ServiceHost (typeof (FooService)); host.AddServiceEndpoint (typeof (IFooService), new CustomBinding (new MyBindingElement (false), new HttpTransportBindingElement ()), - "http://localhost:37564"); + "http://localhost:" + NetworkHelpers.FindFreePort ()); host.Open (); } @@ -349,7 +351,7 @@ namespace MonoTests.System.ServiceModel.Channels ServiceHost host = new ServiceHost (typeof (FooService)); host.AddServiceEndpoint (typeof (IFooService), new CustomBinding (new MyBindingElement (true), new HttpTransportBindingElement ()), - "http://localhost:37564"); + "http://localhost:" + NetworkHelpers.FindFreePort ()); host.Open (); host.Close (); } @@ -363,7 +365,7 @@ namespace MonoTests.System.ServiceModel.Channels ServiceHost host = new ServiceHost (typeof (FooService)); host.AddServiceEndpoint (typeof (IFooService), new CustomBinding (new MyBindingElement (true), new HttpTransportBindingElement ()), - "http://localhost:37564", new Uri ("foobar", UriKind.Relative)); + "http://localhost:" + NetworkHelpers.FindFreePort (), new Uri ("foobar", UriKind.Relative)); } [Test] @@ -372,10 +374,10 @@ namespace MonoTests.System.ServiceModel.Channels { // MyBindingElement overrides GetProperty() to call GetInnerProperty() (default implementation). // HttpTransportBindingElement should return Soap11. - ServiceHost host = new ServiceHost (typeof (FooService), new Uri ("http://localhost:37564")); + ServiceHost host = new ServiceHost (typeof (FooService), new Uri ("http://localhost:" + NetworkHelpers.FindFreePort ())); host.AddServiceEndpoint (typeof (IFooService), new CustomBinding (new MyBindingElement (true), new HttpTransportBindingElement ()), - "http://localhost:37564", new Uri ("foobar", UriKind.Relative)); + "http://localhost:" + NetworkHelpers.FindFreePort (), new Uri ("foobar", UriKind.Relative)); host.Open (); host.Close (); } diff --git a/mcs/class/System.ServiceModel/Test/System.ServiceModel.Channels/HttpTransportBindingElementTest.cs b/mcs/class/System.ServiceModel/Test/System.ServiceModel.Channels/HttpTransportBindingElementTest.cs index 705d4ed2af1..40401dec37e 100644 --- a/mcs/class/System.ServiceModel/Test/System.ServiceModel.Channels/HttpTransportBindingElementTest.cs +++ b/mcs/class/System.ServiceModel/Test/System.ServiceModel.Channels/HttpTransportBindingElementTest.cs @@ -38,6 +38,8 @@ using System.Threading; using System.Xml; using NUnit.Framework; +using MonoTests.Helpers; + #if NET_4_0 using System.Security.Authentication.ExtendedProtection; #endif @@ -203,7 +205,7 @@ namespace MonoTests.System.ServiceModel.Channels var cf = new HttpTransportBindingElement ().BuildChannelFactory (ctx); Assert.IsTrue (cf is ChannelFactoryBase, "#1"); cf.Open (); - cf.CreateChannel (new EndpointAddress ("http://localhost:8080"), null); + cf.CreateChannel (new EndpointAddress ("http://localhost:" + NetworkHelpers.FindFreePort ()), null); } [Test] @@ -228,7 +230,7 @@ namespace MonoTests.System.ServiceModel.Channels public void EndpointAddressAndViaMustMatchOnAddressingNone () { try { - var ch = ChannelFactory.CreateChannel (new BasicHttpBinding (), new EndpointAddress ("http://localhost:37564/"), new Uri ("http://localhost:8080/HogeService")); + var ch = ChannelFactory.CreateChannel (new BasicHttpBinding (), new EndpointAddress ("http://localhost:" + NetworkHelpers.FindFreePort () + "/"), new Uri ("http://localhost:" + NetworkHelpers.FindFreePort () + "/HogeService")); ((ICommunicationObject) ch).Close (); } catch (TargetInvocationException) { // we throw this exception so far. Since it is @@ -338,7 +340,7 @@ namespace MonoTests.System.ServiceModel.Channels BindingContext lbc = new BindingContext ( new CustomBinding (), new BindingParameterCollection (), - new Uri ("http://localhost:37564"), + new Uri ("http://localhost:" + NetworkHelpers.FindFreePort ()), String.Empty, ListenUriMode.Explicit); listener = lel.BuildChannelListener (lbc); @@ -370,7 +372,7 @@ namespace MonoTests.System.ServiceModel.Channels factory.Open (); IRequestChannel request = factory.CreateChannel ( - new EndpointAddress ("http://localhost:37564")); + new EndpointAddress ("http://localhost:" + NetworkHelpers.FindFreePort ())); request.Open (); diff --git a/mcs/class/System.ServiceModel/Test/System.ServiceModel.Channels/SecurityBindingElementTest.cs b/mcs/class/System.ServiceModel/Test/System.ServiceModel.Channels/SecurityBindingElementTest.cs index 9a476515e8e..2d4e9bfda22 100644 --- a/mcs/class/System.ServiceModel/Test/System.ServiceModel.Channels/SecurityBindingElementTest.cs +++ b/mcs/class/System.ServiceModel/Test/System.ServiceModel.Channels/SecurityBindingElementTest.cs @@ -41,6 +41,8 @@ using System.ServiceModel.Security.Tokens; using System.Xml; using NUnit.Framework; +using MonoTests.Helpers; + namespace MonoTests.System.ServiceModel.Channels { [TestFixture] @@ -428,7 +430,7 @@ namespace MonoTests.System.ServiceModel.Channels ClientCredentials cred = new ClientCredentials (); cred.ClientCertificate.Certificate = new X509Certificate2 ("Test/Resources/test.pfx", "mono"); - IChannelFactory ch = b.BuildChannelFactory (new Uri ("http://localhost:37564"), cred); + IChannelFactory ch = b.BuildChannelFactory (new Uri ("http://localhost:" + NetworkHelpers.FindFreePort ()), cred); try { ch.Open (); } finally { @@ -456,7 +458,7 @@ namespace MonoTests.System.ServiceModel.Channels ServiceCredentials cred = new ServiceCredentials (); cred.ServiceCertificate.Certificate = new X509Certificate2 ("Test/Resources/test.pfx", "mono"); - IChannelListener ch = b.BuildChannelListener (new Uri ("http://localhost:37564"), cred); + IChannelListener ch = b.BuildChannelListener (new Uri ("http://localhost:" + NetworkHelpers.FindFreePort ()), cred); try { ch.Open (); } finally { @@ -478,7 +480,7 @@ namespace MonoTests.System.ServiceModel.Channels new UserNameSecurityTokenParameters ()); Binding b = new CustomBinding (be, new HttpTransportBindingElement ()); X509Certificate2 cert = new X509Certificate2 ("Test/Resources/test.pfx", "mono"); - EndpointAddress ea = new EndpointAddress (new Uri ("http://localhost:37564"), new X509CertificateEndpointIdentity (cert)); + EndpointAddress ea = new EndpointAddress (new Uri ("http://localhost:" + NetworkHelpers.FindFreePort ()), new X509CertificateEndpointIdentity (cert)); CalcProxy client = new CalcProxy (b, ea); client.ClientCredentials.UserName.UserName = "rupert"; client.Sum (1, 2); diff --git a/mcs/class/System.ServiceModel/Test/System.ServiceModel.Channels/TcpTransportBindingElementTest.cs b/mcs/class/System.ServiceModel/Test/System.ServiceModel.Channels/TcpTransportBindingElementTest.cs index c68cb851126..d90197b2534 100644 --- a/mcs/class/System.ServiceModel/Test/System.ServiceModel.Channels/TcpTransportBindingElementTest.cs +++ b/mcs/class/System.ServiceModel/Test/System.ServiceModel.Channels/TcpTransportBindingElementTest.cs @@ -37,6 +37,8 @@ using System.Threading; using System.Xml; using NUnit.Framework; +using MonoTests.Helpers; + namespace MonoTests.System.ServiceModel.Channels { [TestFixture] @@ -173,8 +175,9 @@ namespace MonoTests.System.ServiceModel.Channels new TcpTransportBindingElement () }); bindingS.ReceiveTimeout = TimeSpan.FromSeconds (5); bindingS.OpenTimeout = TimeSpan.FromSeconds (20); + int port = NetworkHelpers.FindFreePort (); host.AddServiceEndpoint (typeof (IFoo), - bindingS, new Uri ("net.tcp://localhost:37564")); + bindingS, new Uri ("net.tcp://localhost:" + port)); host.Description.Behaviors.Find ().IncludeExceptionDetailInFaults = true; host.Open (); @@ -182,7 +185,7 @@ namespace MonoTests.System.ServiceModel.Channels for (int i = 0; i < 2; i++) { var bindingC = new NetTcpBinding (); bindingC.Security.Mode = SecurityMode.None; - IFooChannel proxy = new ChannelFactory (bindingC, new EndpointAddress ("net.tcp://localhost:37564/")).CreateChannel (); + IFooChannel proxy = new ChannelFactory (bindingC, new EndpointAddress ("net.tcp://localhost:" + port + "/")).CreateChannel (); proxy.Open (); try { Assert.AreEqual ("TEST FOR ECHO", proxy.Echo ("TEST FOR ECHO"), "#1"); @@ -212,8 +215,9 @@ namespace MonoTests.System.ServiceModel.Channels bindingS.Security.Mode = SecurityMode.None; bindingS.ReceiveTimeout = TimeSpan.FromSeconds (5); bindingS.OpenTimeout = TimeSpan.FromSeconds (20); + int port = NetworkHelpers.FindFreePort (); host.AddServiceEndpoint (typeof (IFoo), - bindingS, new Uri ("net.tcp://localhost:37564")); + bindingS, new Uri ("net.tcp://localhost:" + port)); host.Description.Behaviors.Find ().IncludeExceptionDetailInFaults = true; host.Open (); @@ -222,7 +226,7 @@ namespace MonoTests.System.ServiceModel.Channels var bindingC = new NetTcpBinding (); bindingS.TransferMode = TransferMode.Streamed; bindingC.Security.Mode = SecurityMode.None; - IFooChannel proxy = new ChannelFactory (bindingC, new EndpointAddress ("net.tcp://localhost:37564/")).CreateChannel (); + IFooChannel proxy = new ChannelFactory (bindingC, new EndpointAddress ("net.tcp://localhost:" + port + "/")).CreateChannel (); proxy.Open (); try { Assert.AreEqual ("TEST FOR ECHO", proxy.Echo ("TEST FOR ECHO"), "#1"); diff --git a/mcs/class/System.ServiceModel/Test/System.ServiceModel.Description/MetadataResolverTest.cs b/mcs/class/System.ServiceModel/Test/System.ServiceModel.Description/MetadataResolverTest.cs index 71e580f6903..c822063805c 100644 --- a/mcs/class/System.ServiceModel/Test/System.ServiceModel.Description/MetadataResolverTest.cs +++ b/mcs/class/System.ServiceModel/Test/System.ServiceModel.Description/MetadataResolverTest.cs @@ -38,17 +38,19 @@ using System.ServiceModel; using NUnit.Framework; +using MonoTests.Helpers; + namespace MonoTests.System.ServiceModel.Description { [TestFixture] public class MetadataResolverTest { - string url = "http://localhost:37564/echo/mex"; + string url; //string url = "http://192.168.0.1:8080/echo/mex"; static HttpListener listener; IAsyncResult current_request; - int remaining; + int remaining, port; static readonly string mex = File.ReadAllText ("Test/System.ServiceModel.Description/dump.xml"); @@ -58,7 +60,9 @@ namespace MonoTests.System.ServiceModel.Description if (listener != null) listener.Stop (); listener = new HttpListener (); - listener.Prefixes.Add ("http://*:37564/echo/"); + port = NetworkHelpers.FindFreePort (); + url = "http://localhost:" + port + "/echo/mex"; + listener.Prefixes.Add ("http://*:" + port + "/echo/"); listener.Start (); current_request = listener.BeginGetContext (OnReceivedRequest, null); remaining = 1; diff --git a/mcs/class/System.ServiceModel/Test/System.ServiceModel.Description/ServiceAuthorizationBehaviorTest.cs b/mcs/class/System.ServiceModel/Test/System.ServiceModel.Description/ServiceAuthorizationBehaviorTest.cs index a7cfc7807f7..861a0be9ac1 100644 --- a/mcs/class/System.ServiceModel/Test/System.ServiceModel.Description/ServiceAuthorizationBehaviorTest.cs +++ b/mcs/class/System.ServiceModel/Test/System.ServiceModel.Description/ServiceAuthorizationBehaviorTest.cs @@ -34,6 +34,8 @@ using System.ServiceModel.Description; using System.ServiceModel.Dispatcher; using NUnit.Framework; +using MonoTests.Helpers; + namespace MonoTests.System.ServiceModel.Description { [TestFixture] @@ -73,7 +75,7 @@ namespace MonoTests.System.ServiceModel.Description b.ImpersonateCallerForAllOperations = true; b.PrincipalPermissionMode = PrincipalPermissionMode.None; - host.AddServiceEndpoint (typeof (TestService), new BasicHttpBinding (), new Uri ("http://localhost:37564")); + host.AddServiceEndpoint (typeof (TestService), new BasicHttpBinding (), new Uri ("http://localhost:" + NetworkHelpers.FindFreePort ())); host.Open (); } @@ -86,7 +88,7 @@ namespace MonoTests.System.ServiceModel.Description b.ImpersonateCallerForAllOperations = false; b.PrincipalPermissionMode = PrincipalPermissionMode.None; - host.AddServiceEndpoint (typeof (TestService2), new BasicHttpBinding (), new Uri ("http://localhost:37564")); + host.AddServiceEndpoint (typeof (TestService2), new BasicHttpBinding (), new Uri ("http://localhost:" + NetworkHelpers.FindFreePort ())); host.Open (); var ed = ((ChannelDispatcher) host.ChannelDispatchers [0]).Endpoints [0]; diff --git a/mcs/class/System.ServiceModel/Test/System.ServiceModel.Description/ServiceDebugBehaviorTest.cs b/mcs/class/System.ServiceModel/Test/System.ServiceModel.Description/ServiceDebugBehaviorTest.cs index 46d129ff601..1785f29015b 100644 --- a/mcs/class/System.ServiceModel/Test/System.ServiceModel.Description/ServiceDebugBehaviorTest.cs +++ b/mcs/class/System.ServiceModel/Test/System.ServiceModel.Description/ServiceDebugBehaviorTest.cs @@ -36,6 +36,8 @@ using System.ServiceModel.Description; using System.ServiceModel.Dispatcher; using System.ServiceModel.Channels; +using MonoTests.Helpers; + namespace MonoTests.System.ServiceModel.Description { [TestFixture] @@ -66,7 +68,7 @@ namespace MonoTests.System.ServiceModel.Description [Test] public void InitializeRuntime1 () { - using (ServiceHost host = new ServiceHost (typeof (MyService), CreateUri ("http://localhost:37564"))) { + using (ServiceHost host = new ServiceHost (typeof (MyService), CreateUri ("http://localhost:" + NetworkHelpers.FindFreePort ()))) { host.AddServiceEndpoint (typeof (IMyContract), new BasicHttpBinding (), "e1"); Assert.AreEqual (0, host.ChannelDispatchers.Count, "ChannelDispatchers.Count #1"); @@ -103,7 +105,7 @@ namespace MonoTests.System.ServiceModel.Description [Test] public void InitializeRuntime2 () { - using (ServiceHost host = new ServiceHost (typeof (MyService), CreateUri ("http://localhost:37564"))) { + using (ServiceHost host = new ServiceHost (typeof (MyService), CreateUri ("http://localhost:" + NetworkHelpers.FindFreePort ()))) { host.AddServiceEndpoint (typeof (IMyContract), new BasicHttpBinding (), ""); host.Description.Behaviors.Remove (); @@ -122,7 +124,7 @@ namespace MonoTests.System.ServiceModel.Description [Test] public void InitializeRuntime3 () { - using (ServiceHost host = new ServiceHost (typeof (MyService), CreateUri ("http://localhost:37564"))) { + using (ServiceHost host = new ServiceHost (typeof (MyService), CreateUri ("http://localhost:" + NetworkHelpers.FindFreePort ()))) { host.AddServiceEndpoint (typeof (IMyContract), new BasicHttpBinding (), ""); host.Description.Behaviors.Find ().HttpHelpPageEnabled = false; @@ -140,9 +142,10 @@ namespace MonoTests.System.ServiceModel.Description [Test] public void InitializeRuntime4 () { - using (ServiceHost host = new ServiceHost (typeof (MyService), CreateUri ("http://localhost:37564"))) { + int port = NetworkHelpers.FindFreePort (); + using (ServiceHost host = new ServiceHost (typeof (MyService), CreateUri ("http://localhost:" + port))) { host.AddServiceEndpoint (typeof (IMyContract), new BasicHttpBinding (), ""); - host.Description.Behaviors.Find ().HttpHelpPageUrl = new Uri ("http://localhost:37564/help"); + host.Description.Behaviors.Find ().HttpHelpPageUrl = new Uri ("http://localhost:" + port + "/help"); Assert.AreEqual (0, host.ChannelDispatchers.Count, "ChannelDispatchers.Count #1"); @@ -168,7 +171,7 @@ namespace MonoTests.System.ServiceModel.Description Assert.AreEqual (0, ed.FilterPriority, "FilterPriority"); EndpointAddress ea = ed.EndpointAddress; - Assert.AreEqual (new Uri ("http://localhost:37564/help"), ea.Uri, "Uri"); + Assert.AreEqual (new Uri ("http://localhost:" + port + "/help"), ea.Uri, "Uri"); DispatchRuntime dr = ed.DispatchRuntime; Assert.AreEqual (1, dr.Operations.Count, "Operations.Count"); @@ -186,9 +189,10 @@ namespace MonoTests.System.ServiceModel.Description [Test] public void ServiceMetadataExtension1 () { - using (ServiceHost host = new ServiceHost (typeof (MyService), CreateUri ("http://localhost:37564"))) { + int port = NetworkHelpers.FindFreePort (); + using (ServiceHost host = new ServiceHost (typeof (MyService), CreateUri ("http://localhost:" + port))) { host.AddServiceEndpoint (typeof (IMyContract), new BasicHttpBinding (), ""); - host.Description.Behaviors.Find ().HttpHelpPageUrl = new Uri ("http://localhost:37564/help"); + host.Description.Behaviors.Find ().HttpHelpPageUrl = new Uri ("http://localhost:" + port + "/help"); try { host.Open (); @@ -202,9 +206,10 @@ namespace MonoTests.System.ServiceModel.Description [Test] public void ServiceMetadataExtension2 () { - using (ServiceHost host = new ServiceHost (typeof (MyService), CreateUri ("http://localhost:37564"))) { + int port = NetworkHelpers.FindFreePort (); + using (ServiceHost host = new ServiceHost (typeof (MyService), CreateUri ("http://localhost:" + port))) { host.AddServiceEndpoint (typeof (IMyContract), new BasicHttpBinding (), ""); - host.Description.Behaviors.Find ().HttpHelpPageUrl = CreateUri ("http://localhost:37564/help"); + host.Description.Behaviors.Find ().HttpHelpPageUrl = CreateUri ("http://localhost:" + port + "/help"); ServiceMetadataExtension extension = new ServiceMetadataExtension (); host.Extensions.Add (extension); diff --git a/mcs/class/System.ServiceModel/Test/System.ServiceModel.Description/ServiceEndpointTest.cs b/mcs/class/System.ServiceModel/Test/System.ServiceModel.Description/ServiceEndpointTest.cs index 4ec9e8827c7..7921e30d7fe 100644 --- a/mcs/class/System.ServiceModel/Test/System.ServiceModel.Description/ServiceEndpointTest.cs +++ b/mcs/class/System.ServiceModel/Test/System.ServiceModel.Description/ServiceEndpointTest.cs @@ -35,6 +35,8 @@ using System.ServiceModel.Description; using System.ServiceModel.Dispatcher; using System.ServiceModel.Channels; +using MonoTests.Helpers; + namespace MonoTests.System.ServiceModel.Description { [TestFixture] @@ -58,7 +60,7 @@ namespace MonoTests.System.ServiceModel.Description [Test] public void ListenUri () { - Uri uri = new Uri ("http://localhost:37564"); + Uri uri = new Uri ("http://localhost:" + NetworkHelpers.FindFreePort ()); var se = new ServiceEndpoint (contract1, null, new EndpointAddress (uri)); Assert.AreEqual (uri, se.ListenUri, "#1"); } diff --git a/mcs/class/System.ServiceModel/Test/System.ServiceModel.Dispatcher/Bug652331Test.cs b/mcs/class/System.ServiceModel/Test/System.ServiceModel.Dispatcher/Bug652331Test.cs index ed5fb8b65c9..70d9c79c624 100644 --- a/mcs/class/System.ServiceModel/Test/System.ServiceModel.Dispatcher/Bug652331Test.cs +++ b/mcs/class/System.ServiceModel/Test/System.ServiceModel.Dispatcher/Bug652331Test.cs @@ -35,6 +35,8 @@ using NUnit.Framework; using WebServiceMoonlightTest.ServiceReference1; +using MonoTests.Helpers; + namespace MonoTests.System.ServiceModel.Dispatcher { [TestFixture] @@ -44,7 +46,8 @@ namespace MonoTests.System.ServiceModel.Dispatcher public void Bug652331_2 () // test in one of the comment { // Init service - ServiceHost serviceHost = new ServiceHost (typeof (Service1), new Uri ("http://localhost:37564/Service1")); + int port = NetworkHelpers.FindFreePort (); + ServiceHost serviceHost = new ServiceHost (typeof (Service1), new Uri ("http://localhost:" + port + "/Service1")); serviceHost.AddServiceEndpoint (typeof (IService1), new BasicHttpBinding (), string.Empty); // Enable metadata exchange (WSDL publishing) @@ -58,7 +61,7 @@ namespace MonoTests.System.ServiceModel.Dispatcher try { // client var binding = new BasicHttpBinding (); - var remoteAddress = new EndpointAddress ("http://localhost:37564/Service1"); + var remoteAddress = new EndpointAddress ("http://localhost:" + port + "/Service1"); var client = new Service1Client (binding, remoteAddress); var wait = new ManualResetEvent (false); diff --git a/mcs/class/System.ServiceModel/Test/System.ServiceModel.Dispatcher/Bug652331_2Test.cs b/mcs/class/System.ServiceModel/Test/System.ServiceModel.Dispatcher/Bug652331_2Test.cs index 3655b417777..59328f08103 100644 --- a/mcs/class/System.ServiceModel/Test/System.ServiceModel.Dispatcher/Bug652331_2Test.cs +++ b/mcs/class/System.ServiceModel/Test/System.ServiceModel.Dispatcher/Bug652331_2Test.cs @@ -37,6 +37,8 @@ using NUnit.Framework; using WebServiceMoonlightTest.ServiceReference2; +using MonoTests.Helpers; + namespace MonoTests.System.ServiceModel.Dispatcher { [TestFixture] @@ -47,7 +49,7 @@ namespace MonoTests.System.ServiceModel.Dispatcher public void Bug652331_3 () { // Init service - ServiceHost serviceHost = new ServiceHost(typeof(Service1), new Uri("http://localhost:37564/Service1")); + ServiceHost serviceHost = new ServiceHost(typeof(Service1), new Uri("http://localhost:" + NetworkHelpers.FindFreePort () + "/Service1")); serviceHost.AddServiceEndpoint(typeof(IService1), new BasicHttpBinding(), string.Empty); // Enable metadata exchange (WSDL publishing) @@ -68,7 +70,7 @@ namespace MonoTests.System.ServiceModel.Dispatcher void RunClient () { var binding = new BasicHttpBinding (); - var remoteAddress = new EndpointAddress ("http://localhost:37564/Service1"); + var remoteAddress = new EndpointAddress ("http://localhost:" + NetworkHelpers.FindFreePort () + "/Service1"); var normalClient = new Service1Client (binding, remoteAddress); var collectionClient = new Service1Client (binding, remoteAddress); diff --git a/mcs/class/System.ServiceModel/Test/System.ServiceModel.Dispatcher/ChannelDispatcherTest.cs b/mcs/class/System.ServiceModel/Test/System.ServiceModel.Dispatcher/ChannelDispatcherTest.cs index 37183575138..11fe45e9a59 100644 --- a/mcs/class/System.ServiceModel/Test/System.ServiceModel.Dispatcher/ChannelDispatcherTest.cs +++ b/mcs/class/System.ServiceModel/Test/System.ServiceModel.Dispatcher/ChannelDispatcherTest.cs @@ -10,6 +10,8 @@ using System.ServiceModel.Channels; using System.ServiceModel.Description; using System.ServiceModel.Dispatcher; +using MonoTests.Helpers; + namespace MonoTests.System.ServiceModel.Dispatcher { [TestFixture] @@ -42,7 +44,7 @@ namespace MonoTests.System.ServiceModel.Dispatcher var st = cd.ServiceThrottle; Assert.IsNull (st, "#0"); - var uri = CreateAvailableUri ("http://localhost:37564"); + var uri = CreateAvailableUri ("http://localhost:" + NetworkHelpers.FindFreePort ()); ServiceHost h = new ServiceHost (typeof (TestContract), uri); h.AddServiceEndpoint (typeof (TestContract).FullName, new BasicHttpBinding (), "address"); h.ChannelDispatchers.Add (cd); @@ -69,7 +71,7 @@ namespace MonoTests.System.ServiceModel.Dispatcher [Test] public void Collection_Add_Remove () { Console.WriteLine ("STart test Collection_Add_Remove"); - var uri = CreateAvailableUri ("http://localhost:37564"); + var uri = CreateAvailableUri ("http://localhost:" + NetworkHelpers.FindFreePort ()); ServiceHost h = new ServiceHost (typeof (TestContract), uri); h.AddServiceEndpoint (typeof (TestContract).FullName, new BasicHttpBinding (), "address"); MyChannelDispatcher d = new MyChannelDispatcher (new MyChannelListener (uri)); @@ -87,7 +89,7 @@ namespace MonoTests.System.ServiceModel.Dispatcher [Test] public void EndpointDispatcherAddTest () { - var uri = CreateAvailableUri ("http://localhost:37564"); + var uri = CreateAvailableUri ("http://localhost:" + NetworkHelpers.FindFreePort ()); MyChannelDispatcher d = new MyChannelDispatcher (new MyChannelListener (uri)); d.Endpoints.Add (new EndpointDispatcher (new EndpointAddress (uri), "", "")); } @@ -95,7 +97,7 @@ namespace MonoTests.System.ServiceModel.Dispatcher [Test] [ExpectedException (typeof (InvalidOperationException))] public void EndpointDispatcherAddTest2 () { - var uri = CreateAvailableUri ("http://localhost:37564"); + var uri = CreateAvailableUri ("http://localhost:" + NetworkHelpers.FindFreePort ()); MyChannelDispatcher d = new MyChannelDispatcher (new MyChannelListener (uri)); d.Endpoints.Add (new EndpointDispatcher (new EndpointAddress (uri), "", "")); d.Open (); // the dispatcher must be attached. @@ -105,7 +107,7 @@ namespace MonoTests.System.ServiceModel.Dispatcher [ExpectedException (typeof (InvalidOperationException))] public void EndpointDispatcherAddTest3 () { - var uri = CreateAvailableUri ("http://localhost:37564"); + var uri = CreateAvailableUri ("http://localhost:" + NetworkHelpers.FindFreePort ()); ServiceHost h = new ServiceHost (typeof (TestContract), uri); MyChannelDispatcher d = new MyChannelDispatcher (new MyChannelListener (uri)); d.Endpoints.Add (new EndpointDispatcher (new EndpointAddress (uri), "", "")); @@ -117,7 +119,7 @@ namespace MonoTests.System.ServiceModel.Dispatcher [ExpectedException (typeof (InvalidOperationException))] // i.e. it is thrown synchronously in current thread. public void EndpointDispatcherAddTest4 () { - var uri = CreateAvailableUri ("http://localhost:37564"); + var uri = CreateAvailableUri ("http://localhost:" + NetworkHelpers.FindFreePort ()); ServiceHost h = new ServiceHost (typeof (TestContract), uri); var listener = new MyChannelListener (uri); MyChannelDispatcher d = new MyChannelDispatcher (listener); @@ -149,7 +151,7 @@ namespace MonoTests.System.ServiceModel.Dispatcher [ExpectedException (typeof (InvalidOperationException))] // i.e. it is thrown synchronously in current thread. public void EndpointDispatcherAddTest5 () { - var uri = CreateAvailableUri ("http://localhost:37564"); + var uri = CreateAvailableUri ("http://localhost:" + NetworkHelpers.FindFreePort ()); ServiceHost h = new ServiceHost (typeof (TestContract), uri); var binding = new BasicHttpBinding (); var listener = new MyChannelListener (uri); @@ -171,7 +173,7 @@ namespace MonoTests.System.ServiceModel.Dispatcher [Test] public void EndpointDispatcherAddTest6 () { - var uri = CreateAvailableUri ("http://localhost:37564"); + var uri = CreateAvailableUri ("http://localhost:" + NetworkHelpers.FindFreePort ()); ServiceHost h = new ServiceHost (typeof (TestContract), uri); var binding = new BasicHttpBinding (); var listener = new MyChannelListener (uri); @@ -202,7 +204,7 @@ namespace MonoTests.System.ServiceModel.Dispatcher [ExpectedException (typeof (InvalidOperationException))] public void EndpointDispatcherAddTest7 () { - var uri = CreateAvailableUri ("http://localhost:37564"); + var uri = CreateAvailableUri ("http://localhost:" + NetworkHelpers.FindFreePort ()); ServiceHost h = new ServiceHost (typeof (TestContract), uri); var binding = new BasicHttpBinding (); var listener = new MyChannelListener (uri); @@ -237,7 +239,7 @@ namespace MonoTests.System.ServiceModel.Dispatcher // but it makes little sense especially for checking duplicate listen URIs. Duplicate listen URIs should be rejected anyways. public void EndpointDispatcherAddTest8 () { - var uri = CreateAvailableUri ("http://localhost:37564"); + var uri = CreateAvailableUri ("http://localhost:" + NetworkHelpers.FindFreePort ()); ServiceHost h = new ServiceHost (typeof (TestContract), uri); var listener = new MyChannelListener (uri); MyChannelDispatcher d = new MyChannelDispatcher (listener); @@ -282,7 +284,7 @@ namespace MonoTests.System.ServiceModel.Dispatcher // [Test] public void EndpointDispatcherAddTest9 () // test singleton service { - var uri = CreateAvailableUri ("http://localhost:37564"); + var uri = CreateAvailableUri ("http://localhost:" + NetworkHelpers.FindFreePort ()); ServiceHost h = new ServiceHost (new TestContract (), uri); h.Description.Behaviors.Find ().InstanceContextMode = InstanceContextMode.Single; var listener = new MyChannelListener (uri); diff --git a/mcs/class/System.ServiceModel/Test/System.ServiceModel.Dispatcher/DispatchOperationTest.cs b/mcs/class/System.ServiceModel/Test/System.ServiceModel.Dispatcher/DispatchOperationTest.cs index e8881b27d8a..641a95852ee 100644 --- a/mcs/class/System.ServiceModel/Test/System.ServiceModel.Dispatcher/DispatchOperationTest.cs +++ b/mcs/class/System.ServiceModel/Test/System.ServiceModel.Dispatcher/DispatchOperationTest.cs @@ -37,6 +37,8 @@ using System.ServiceModel.Security; using System.Xml; using NUnit.Framework; +using MonoTests.Helpers; + namespace MonoTests.System.ServiceModel.Dispatcher { [TestFixture] @@ -88,11 +90,12 @@ namespace MonoTests.System.ServiceModel.Dispatcher public void FaultContractInfos () { var host = new ServiceHost (typeof (TestFaultContract)); + int port = NetworkHelpers.FindFreePort (); host.Description.Behaviors.Find ().IncludeExceptionDetailInFaults = false; - host.AddServiceEndpoint (typeof (ITestFaultContract), new BasicHttpBinding (), new Uri ("http://localhost:37564")); + host.AddServiceEndpoint (typeof (ITestFaultContract), new BasicHttpBinding (), new Uri ("http://localhost:" + port)); host.Open (); try { - var cf = new ChannelFactory (new BasicHttpBinding (), new EndpointAddress ("http://localhost:37564")); + var cf = new ChannelFactory (new BasicHttpBinding (), new EndpointAddress ("http://localhost:" + port)); var cli = cf.CreateChannel (); try { cli.Run ("default"); @@ -178,4 +181,4 @@ namespace MonoTests.System.ServiceModel.Dispatcher { } } } -} \ No newline at end of file +} diff --git a/mcs/class/System.ServiceModel/Test/System.ServiceModel.Security/SecurityMessagePropertyTest.cs b/mcs/class/System.ServiceModel/Test/System.ServiceModel.Security/SecurityMessagePropertyTest.cs index b29b970197a..424e6519ee3 100644 --- a/mcs/class/System.ServiceModel/Test/System.ServiceModel.Security/SecurityMessagePropertyTest.cs +++ b/mcs/class/System.ServiceModel/Test/System.ServiceModel.Security/SecurityMessagePropertyTest.cs @@ -42,6 +42,8 @@ using NUnit.Framework; using MonoTests.System.ServiceModel.Channels; +using MonoTests.Helpers; + namespace MonoTests.System.ServiceModel.Security { [TestFixture] @@ -190,7 +192,7 @@ namespace MonoTests.System.ServiceModel.Security sintercept, transport); b_res.ReceiveTimeout = b_res.SendTimeout = TimeSpan.FromSeconds (5); - host.AddServiceEndpoint (typeof (ICalc), b_res, "http://localhost:37564"); + host.AddServiceEndpoint (typeof (ICalc), b_res, "http://localhost:" + NetworkHelpers.FindFreePort ()); ServiceCredentials cred = new ServiceCredentials (); cred.ServiceCertificate.Certificate = cert; @@ -223,7 +225,7 @@ namespace MonoTests.System.ServiceModel.Security b_req.ReceiveTimeout = b_req.SendTimeout = TimeSpan.FromSeconds (5); EndpointAddress remaddr = new EndpointAddress ( - new Uri ("http://localhost:37564"), + new Uri ("http://localhost:" + NetworkHelpers.FindFreePort ()), new X509CertificateEndpointIdentity (cert)); CalcProxy proxy = new CalcProxy (b_req, remaddr); proxy.ClientCredentials.ClientCertificate.Certificate = cert2; diff --git a/mcs/class/System.ServiceModel/Test/System.ServiceModel/CallbackBehaviorAttributeTest.cs b/mcs/class/System.ServiceModel/Test/System.ServiceModel/CallbackBehaviorAttributeTest.cs index 3685bd6bb83..aa8d9417e25 100644 --- a/mcs/class/System.ServiceModel/Test/System.ServiceModel/CallbackBehaviorAttributeTest.cs +++ b/mcs/class/System.ServiceModel/Test/System.ServiceModel/CallbackBehaviorAttributeTest.cs @@ -39,6 +39,8 @@ using System.Transactions; using System.Threading; using NUnit.Framework; +using MonoTests.Helpers; + namespace MonoTests.System.ServiceModel { [TestFixture] @@ -80,7 +82,7 @@ namespace MonoTests.System.ServiceModel IEndpointBehavior eb = new CallbackBehaviorAttribute () { ConcurrencyMode = ConcurrencyMode.Multiple, ValidateMustUnderstand = false }; var cd = ContractDescription.GetContract (typeof (IFoo)); var se = new ServiceEndpoint (cd); - var ed = new EndpointDispatcher (new EndpointAddress ("http://localhost:37564"), "IFoo", "urn:foo"); + var ed = new EndpointDispatcher (new EndpointAddress ("http://localhost:" + NetworkHelpers.FindFreePort ()), "IFoo", "urn:foo"); eb.ApplyDispatchBehavior (se, ed); } @@ -92,7 +94,7 @@ namespace MonoTests.System.ServiceModel IEndpointBehavior eb = new CallbackBehaviorAttribute () { ConcurrencyMode = ConcurrencyMode.Multiple, ValidateMustUnderstand = false }; var cd = ContractDescription.GetContract (typeof (IFoo)); var se = new ServiceEndpoint (cd); - var ed = new EndpointDispatcher (new EndpointAddress ("http://localhost:37564"), "IFoo", "urn:foo"); + var ed = new EndpointDispatcher (new EndpointAddress ("http://localhost:" + NetworkHelpers.FindFreePort ()), "IFoo", "urn:foo"); var cr = ed.DispatchRuntime.CallbackClientRuntime; eb.ApplyClientBehavior (se, cr); } @@ -104,7 +106,7 @@ namespace MonoTests.System.ServiceModel IEndpointBehavior eb = new CallbackBehaviorAttribute () { ConcurrencyMode = ConcurrencyMode.Multiple, ValidateMustUnderstand = false }; var cd = ContractDescription.GetContract (typeof (IDuplexFoo)); var se = new ServiceEndpoint (cd); - var ed = new EndpointDispatcher (new EndpointAddress ("http://localhost:37564"), "IDuplexFoo", "urn:foo"); + var ed = new EndpointDispatcher (new EndpointAddress ("http://localhost:" + NetworkHelpers.FindFreePort ()), "IDuplexFoo", "urn:foo"); var cr = ed.DispatchRuntime.CallbackClientRuntime; eb.ApplyClientBehavior (se, cr); Assert.IsFalse (cr.ValidateMustUnderstand, "#2.1"); diff --git a/mcs/class/System.ServiceModel/Test/System.ServiceModel/ChannelFactory_1Test.cs b/mcs/class/System.ServiceModel/Test/System.ServiceModel/ChannelFactory_1Test.cs index 70efef2761c..30e4c4036d8 100644 --- a/mcs/class/System.ServiceModel/Test/System.ServiceModel/ChannelFactory_1Test.cs +++ b/mcs/class/System.ServiceModel/Test/System.ServiceModel/ChannelFactory_1Test.cs @@ -38,6 +38,8 @@ using System.Xml.Serialization; using MonoTests.System.ServiceModel.Channels; using NUnit.Framework; +using MonoTests.Helpers; + namespace MonoTests.System.ServiceModel { [TestFixture] @@ -63,14 +65,14 @@ namespace MonoTests.System.ServiceModel //ChannelFactory f = new ChannelFactory ( new BasicHttpBinding (), - new EndpointAddress ("http://localhost:37564")); + new EndpointAddress ("http://localhost:" + NetworkHelpers.FindFreePort ())); } [Test] public void EndpointAddressAfterCreateChannel () { var f = new ChannelFactory (new BasicHttpBinding ()); - f.CreateChannel (new EndpointAddress ("http://localhost:37564"), null); + f.CreateChannel (new EndpointAddress ("http://localhost:" + NetworkHelpers.FindFreePort ()), null); Assert.IsNull (f.Endpoint.Address, "#1"); } @@ -163,7 +165,7 @@ namespace MonoTests.System.ServiceModel MyChannelFactory f = new MyChannelFactory ( new BasicHttpBinding (), - new EndpointAddress ("http://localhost:37564")); + new EndpointAddress ("http://localhost:" + NetworkHelpers.FindFreePort ())); Assert.AreEqual (CommunicationState.Created, f.State, "#1"); f.OpenAnyways (); @@ -179,7 +181,7 @@ namespace MonoTests.System.ServiceModel ChannelFactory f = new ChannelFactory ( new BasicHttpBinding (), - new EndpointAddress ("http://localhost:37564")); + new EndpointAddress ("http://localhost:" + NetworkHelpers.FindFreePort ())); f.CreateChannel (); } diff --git a/mcs/class/System.ServiceModel/Test/System.ServiceModel/ClientBaseTest.cs b/mcs/class/System.ServiceModel/Test/System.ServiceModel/ClientBaseTest.cs index ee445d6620f..4fb3ce3a5d9 100644 --- a/mcs/class/System.ServiceModel/Test/System.ServiceModel/ClientBaseTest.cs +++ b/mcs/class/System.ServiceModel/Test/System.ServiceModel/ClientBaseTest.cs @@ -36,6 +36,8 @@ using System.ServiceModel.Description; using System.Xml; using NUnit.Framework; +using MonoTests.Helpers; + namespace MonoTests.System.ServiceModel { [TestFixture] @@ -217,22 +219,23 @@ namespace MonoTests.System.ServiceModel [Ignore ("With Orcas it does not work fine")] public void UseCase1Test () { + int port = NetworkHelpers.FindFreePort (); // almost equivalent to samples/clientbase/samplesvc.cs using (host = new ServiceHost (typeof (UseCase1))) { Binding binding = new BasicHttpBinding (); binding.ReceiveTimeout = TimeSpan.FromSeconds (15); - host.AddServiceEndpoint (typeof (IUseCase1).FullName, binding, new Uri ("http://localhost:37564")); + host.AddServiceEndpoint (typeof (IUseCase1).FullName, binding, new Uri ("http://localhost:" + port)); host.Open (); // almost equivalent to samples/clientbase/samplecli.cs using (UseCase1Proxy proxy = new UseCase1Proxy ( new BasicHttpBinding (), - new EndpointAddress ("http://localhost:37564"))) { + new EndpointAddress ("http://localhost:" + port))) { proxy.Open (); Assert.AreEqual ("TEST FOR ECHOTEST FOR ECHO", proxy.Echo ("TEST FOR ECHO")); } } - EnsurePortNonBlocking (37564); + EnsurePortNonBlocking (port); } void EnsurePortNonBlocking (int port) @@ -357,8 +360,9 @@ namespace MonoTests.System.ServiceModel ServiceHost host = new ServiceHost (typeof (UseCase2)); Binding binding = new BasicHttpBinding (); binding.ReceiveTimeout = TimeSpan.FromSeconds (15); + int port = NetworkHelpers.FindFreePort (); host.AddServiceEndpoint (typeof (IUseCase2).FullName, - binding, new Uri ("http://localhost:37564")); + binding, new Uri ("http://localhost:" + port)); try { host.Open (); @@ -368,7 +372,7 @@ namespace MonoTests.System.ServiceModel b.ReceiveTimeout = TimeSpan.FromSeconds (15); UseCase2Proxy proxy = new UseCase2Proxy ( b, - new EndpointAddress ("http://localhost:37564/")); + new EndpointAddress ("http://localhost:" + port + "/")); proxy.Open (); Message req = Message.CreateMessage (MessageVersion.Soap11, "http://tempuri.org/IUseCase2/Echo"); Message res = proxy.Echo (req); @@ -378,7 +382,7 @@ namespace MonoTests.System.ServiceModel } finally { if (host.State == CommunicationState.Opened) host.Close (); - EnsurePortNonBlocking (37564); + EnsurePortNonBlocking (port); } } @@ -426,9 +430,10 @@ namespace MonoTests.System.ServiceModel Binding bs = new BasicHttpBinding (); bs.SendTimeout = TimeSpan.FromSeconds (5); bs.ReceiveTimeout = TimeSpan.FromSeconds (5); + int port = NetworkHelpers.FindFreePort (); // magic name that does not require fully qualified name ... host.AddServiceEndpoint ("IMetadataExchange", - bs, new Uri ("http://localhost:37564")); + bs, new Uri ("http://localhost:" + port)); try { host.Open (); // almost equivalent to samples/clientbase/samplecli3.cs @@ -437,7 +442,7 @@ namespace MonoTests.System.ServiceModel bc.ReceiveTimeout = TimeSpan.FromSeconds (5); MetadataExchangeProxy proxy = new MetadataExchangeProxy ( bc, - new EndpointAddress ("http://localhost:37564/")); + new EndpointAddress ("http://localhost:" + port + "/")); proxy.Open (); Message req = Message.CreateMessage (MessageVersion.Soap11, "http://schemas.xmlsoap.org/ws/2004/09/transfer/Get"); @@ -448,7 +453,7 @@ namespace MonoTests.System.ServiceModel } finally { if (host.State == CommunicationState.Opened) host.Close (); - EnsurePortNonBlocking (37564); + EnsurePortNonBlocking (port); } } diff --git a/mcs/class/System.ServiceModel/Test/System.ServiceModel/ClientBase_InteractiveChannelInitializerTest.cs b/mcs/class/System.ServiceModel/Test/System.ServiceModel/ClientBase_InteractiveChannelInitializerTest.cs index c886a971395..d5908a5db45 100644 --- a/mcs/class/System.ServiceModel/Test/System.ServiceModel/ClientBase_InteractiveChannelInitializerTest.cs +++ b/mcs/class/System.ServiceModel/Test/System.ServiceModel/ClientBase_InteractiveChannelInitializerTest.cs @@ -37,6 +37,8 @@ using System.ServiceModel.Dispatcher; using System.Xml; using NUnit.Framework; +using MonoTests.Helpers; + namespace MonoTests.System.ServiceModel { [TestFixture] @@ -48,7 +50,7 @@ namespace MonoTests.System.ServiceModel [ExpectedException (typeof (InvalidOperationException))] public void NotAllowedInitializationUI () { - var f = new FooProxy (new BasicHttpBinding (), new EndpointAddress ("http://localhost:37564")); + var f = new FooProxy (new BasicHttpBinding (), new EndpointAddress ("http://localhost:" + NetworkHelpers.FindFreePort ())); f.Endpoint.Contract.Behaviors.Add (new MyContractBehavior ()); f.InnerChannel.AllowInitializationUI = false; f.DisplayInitializationUI (); @@ -58,7 +60,7 @@ namespace MonoTests.System.ServiceModel [ExpectedException (typeof (InvalidOperationException))] public void OpenBeforeDisplayInitializationUI () { - var f = new FooProxy (new BasicHttpBinding (), new EndpointAddress ("http://localhost:37564")); + var f = new FooProxy (new BasicHttpBinding (), new EndpointAddress ("http://localhost:" + NetworkHelpers.FindFreePort ())); f.Endpoint.Contract.Behaviors.Add (new MyContractBehavior ()); f.Open (); } diff --git a/mcs/class/System.ServiceModel/Test/System.ServiceModel/ClientCredentialsSecurityTokenManagerTest.cs b/mcs/class/System.ServiceModel/Test/System.ServiceModel/ClientCredentialsSecurityTokenManagerTest.cs index a1f28e3e153..cf758cfe3ab 100644 --- a/mcs/class/System.ServiceModel/Test/System.ServiceModel/ClientCredentialsSecurityTokenManagerTest.cs +++ b/mcs/class/System.ServiceModel/Test/System.ServiceModel/ClientCredentialsSecurityTokenManagerTest.cs @@ -42,6 +42,8 @@ using MonoTests.System.ServiceModel.Channels; using ReqType = System.ServiceModel.Security.Tokens.ServiceModelSecurityTokenRequirement; +using MonoTests.Helpers; + namespace MonoTests.System.ServiceModel { [TestFixture] @@ -621,7 +623,7 @@ Assert.IsFalse (new MyManager (new MyClientCredentials ()).IsIssued (r), "premis be.EndpointSupportingTokenParameters.Endorsing.Add ( new MyEndorsingTokenParameters ()); Binding b = new CustomBinding (be, new HttpTransportBindingElement ()); - EndpointAddress ea = new EndpointAddress (new Uri ("http://localhost:37564"), new X509CertificateEndpointIdentity (cert)); + EndpointAddress ea = new EndpointAddress (new Uri ("http://localhost:" + NetworkHelpers.FindFreePort ()), new X509CertificateEndpointIdentity (cert)); CalcProxy client = new CalcProxy (b, ea); client.Endpoint.Behaviors.RemoveAll (); client.Endpoint.Behaviors.Add (new MyClientCredentials ()); diff --git a/mcs/class/System.ServiceModel/Test/System.ServiceModel/IntegratedConnectionTest.cs b/mcs/class/System.ServiceModel/Test/System.ServiceModel/IntegratedConnectionTest.cs index 1fc0a1ee8d1..962643c81d6 100644 --- a/mcs/class/System.ServiceModel/Test/System.ServiceModel/IntegratedConnectionTest.cs +++ b/mcs/class/System.ServiceModel/Test/System.ServiceModel/IntegratedConnectionTest.cs @@ -39,6 +39,7 @@ using System.Threading; using System.Xml; using NUnit.Framework; +using MonoTests.Helpers; namespace MonoTests.System.ServiceModel { @@ -55,17 +56,18 @@ namespace MonoTests.System.ServiceModel { // Service ServiceHost host = new ServiceHost (typeof (Foo)); + int port = NetworkHelpers.FindFreePort (); try { Binding binding = new BasicHttpBinding (); binding.SendTimeout = binding.ReceiveTimeout = TimeSpan.FromSeconds (5); ServiceEndpoint se = host.AddServiceEndpoint ("MonoTests.System.ServiceModel.IFoo", - binding, new Uri ("http://localhost:37564")); + binding, new Uri ("http://localhost:" + port)); host.Open (); // Client ChannelFactory cf = new ChannelFactory ( new BasicHttpBinding (), - new EndpointAddress ("http://localhost:37564/")); + new EndpointAddress ("http://localhost:" + port + "/")); IFoo foo = cf.CreateChannel (); Assert.AreEqual ("Test for EchoTest for Echo", foo.Echo ("Test for Echo")); } finally { @@ -80,17 +82,18 @@ namespace MonoTests.System.ServiceModel { // Service ServiceHost host = new ServiceHost (typeof (Foo2)); + int port = NetworkHelpers.FindFreePort (); try { Binding binding = new BasicHttpBinding (); binding.SendTimeout = binding.ReceiveTimeout = TimeSpan.FromSeconds (5); host.AddServiceEndpoint ("MonoTests.System.ServiceModel.IFoo2", - binding, new Uri ("http://localhost:37564")); + binding, new Uri ("http://localhost:" + port)); host.Open (); // Client Foo2Proxy proxy = new Foo2Proxy ( new BasicHttpBinding (), - new EndpointAddress ("http://localhost:37564/")); + new EndpointAddress ("http://localhost:" + port + "/")); proxy.Open (); try { Assert.AreEqual ("TEST FOR ECHOTEST FOR ECHO", @@ -111,17 +114,18 @@ namespace MonoTests.System.ServiceModel { // Service ServiceHost host = new ServiceHost (typeof (MetadataExchange)); + int port = NetworkHelpers.FindFreePort (); try { Binding binding = new BasicHttpBinding (); binding.ReceiveTimeout = TimeSpan.FromSeconds (5); host.AddServiceEndpoint ("IMetadataExchange", - binding, new Uri ("http://localhost:37564")); + binding, new Uri ("http://localhost:" + port)); host.Open (); // Client MetadataExchangeProxy proxy = new MetadataExchangeProxy ( new BasicHttpBinding (), - new EndpointAddress ("http://localhost:37564/")); + new EndpointAddress ("http://localhost:" + port + "/")); proxy.Open (); try { diff --git a/mcs/class/System.ServiceModel/Test/System.ServiceModel/NetTcpBindingTest.cs b/mcs/class/System.ServiceModel/Test/System.ServiceModel/NetTcpBindingTest.cs index 72837c7af45..633b776aeac 100644 --- a/mcs/class/System.ServiceModel/Test/System.ServiceModel/NetTcpBindingTest.cs +++ b/mcs/class/System.ServiceModel/Test/System.ServiceModel/NetTcpBindingTest.cs @@ -35,6 +35,8 @@ using System.ServiceModel.Security; using System.Threading; using NUnit.Framework; +using MonoTests.Helpers; + namespace MonoTests.System.ServiceModel { [TestFixture] @@ -167,17 +169,18 @@ namespace MonoTests.System.ServiceModel { var host = new ServiceHost (typeof (Foo)); var bindingsvc = new CustomBinding (new BinaryMessageEncodingBindingElement (), new TcpTransportBindingElement ()); - host.AddServiceEndpoint (typeof (IFoo), bindingsvc, "net.tcp://localhost:37564/"); + int port = NetworkHelpers.FindFreePort (); + host.AddServiceEndpoint (typeof (IFoo), bindingsvc, "net.tcp://localhost:" + port + "/"); host.Open (TimeSpan.FromSeconds (5)); try { var bindingcli = new NetTcpBinding () { TransactionFlow = false }; bindingcli.Security.Mode = SecurityMode.None; - var cli = new ChannelFactory (bindingcli, new EndpointAddress ("net.tcp://localhost:37564/")).CreateChannel (); + var cli = new ChannelFactory (bindingcli, new EndpointAddress ("net.tcp://localhost:" + port + "/")).CreateChannel (); Assert.AreEqual (5, cli.Add (1, 4)); Assert.AreEqual ("monkey science", cli.Join ("monkey", "science")); } finally { host.Close (TimeSpan.FromSeconds (5)); - var t = new TcpListener (37564); + var t = new TcpListener (port); t.Start (); t.Stop (); } @@ -190,18 +193,19 @@ namespace MonoTests.System.ServiceModel { var host = new ServiceHost (typeof (Foo)); var bindingsvc = new CustomBinding (new BinaryMessageEncodingBindingElement (), new TcpTransportBindingElement () { TransferMode = TransferMode.Streamed }); - host.AddServiceEndpoint (typeof (IFoo), bindingsvc, "net.tcp://localhost:37564/"); + int port = NetworkHelpers.FindFreePort (); + host.AddServiceEndpoint (typeof (IFoo), bindingsvc, "net.tcp://localhost:" + port + "/"); host.Open (TimeSpan.FromSeconds (5)); try { var bindingcli = new NetTcpBinding () { TransactionFlow = false }; bindingcli.TransferMode = TransferMode.Streamed; bindingcli.Security.Mode = SecurityMode.None; - var cli = new ChannelFactory (bindingcli, new EndpointAddress ("net.tcp://localhost:37564/")).CreateChannel (); + var cli = new ChannelFactory (bindingcli, new EndpointAddress ("net.tcp://localhost:" + port + "/")).CreateChannel (); Assert.AreEqual (5, cli.Add (1, 4)); Assert.AreEqual ("monkey science", cli.Join ("monkey", "science")); } finally { host.Close (TimeSpan.FromSeconds (5)); - var t = new TcpListener (37564); + var t = new TcpListener (port); t.Start (); t.Stop (); } diff --git a/mcs/class/System.ServiceModel/Test/System.ServiceModel/OperationContextTest.cs b/mcs/class/System.ServiceModel/Test/System.ServiceModel/OperationContextTest.cs index dafa6346c52..3378c7b82b7 100644 --- a/mcs/class/System.ServiceModel/Test/System.ServiceModel/OperationContextTest.cs +++ b/mcs/class/System.ServiceModel/Test/System.ServiceModel/OperationContextTest.cs @@ -35,6 +35,8 @@ using System.ServiceModel; using System.Xml; using NUnit.Framework; +using MonoTests.Helpers; + namespace MonoTests.System.ServiceModel { [TestFixture] @@ -50,7 +52,7 @@ namespace MonoTests.System.ServiceModel [Test] public void UserContextProperties () { - var ch = ChannelFactory.CreateChannel (new BasicHttpBinding (), new EndpointAddress ("http://localhost:37564")); + var ch = ChannelFactory.CreateChannel (new BasicHttpBinding (), new EndpointAddress ("http://localhost:" + NetworkHelpers.FindFreePort ())); var o = new OperationContext (ch); // FIXME: this is strange. It should return non-null value. @@ -91,7 +93,7 @@ namespace MonoTests.System.ServiceModel Assert.IsNull (OperationContext.Current, "Current-1"); try { - var ch = ChannelFactory.CreateChannel (new BasicHttpBinding (), new EndpointAddress ("http://localhost:37564")); + var ch = ChannelFactory.CreateChannel (new BasicHttpBinding (), new EndpointAddress ("http://localhost:" + NetworkHelpers.FindFreePort ())); OperationContext.Current = new OperationContext (ch); Assert.IsNotNull (OperationContext.Current, "Current-2"); } diff --git a/mcs/class/System.ServiceModel/Test/System.ServiceModel/ServiceHostBaseTest.cs b/mcs/class/System.ServiceModel/Test/System.ServiceModel/ServiceHostBaseTest.cs index d73d516cbbb..55441b8d24e 100644 --- a/mcs/class/System.ServiceModel/Test/System.ServiceModel/ServiceHostBaseTest.cs +++ b/mcs/class/System.ServiceModel/Test/System.ServiceModel/ServiceHostBaseTest.cs @@ -36,6 +36,8 @@ using System.ServiceModel.Dispatcher; using SMMessage = System.ServiceModel.Channels.Message; using System.ServiceModel.Channels; +using MonoTests.Helpers; + namespace MonoTests.System.ServiceModel { [TestFixture] @@ -159,7 +161,8 @@ namespace MonoTests.System.ServiceModel [Test] public void ChannelDispatchers_NoDebug () { - ServiceHost h = new ServiceHost (typeof (AllActions), new Uri ("http://localhost:30158")); + var ep = "http://" + NetworkHelpers.LocalEphemeralEndPoint().ToString(); + ServiceHost h = new ServiceHost (typeof (AllActions), new Uri (ep)); h.AddServiceEndpoint (typeof (AllActions).FullName, new BasicHttpBinding (), "address"); ServiceDebugBehavior b = h.Description.Behaviors.Find (); @@ -173,7 +176,7 @@ namespace MonoTests.System.ServiceModel Assert.IsTrue (channelDispatcher.Endpoints.Count == 1, "#2"); EndpointAddressMessageFilter filter = channelDispatcher.Endpoints [0].AddressFilter as EndpointAddressMessageFilter; Assert.IsNotNull (filter, "#3"); - Assert.IsTrue (filter.Address.Equals (new EndpointAddress ("http://localhost:30158/address")), "#4"); + Assert.IsTrue (filter.Address.Equals (new EndpointAddress (ep + "/address")), "#4"); Assert.IsFalse (filter.IncludeHostNameInComparison, "#5"); Assert.IsTrue (channelDispatcher.Endpoints [0].ContractFilter is MatchAllMessageFilter, "#6"); } finally { @@ -183,11 +186,12 @@ namespace MonoTests.System.ServiceModel [Test] public void ChannelDispatchers_WithDebug () { - ServiceHost h = new ServiceHost (typeof (AllActions), new Uri ("http://localhost:30158")); + var ep = "http://" + NetworkHelpers.LocalEphemeralEndPoint().ToString(); + ServiceHost h = new ServiceHost (typeof (AllActions), new Uri (ep)); h.AddServiceEndpoint (typeof (AllActions).FullName, new BasicHttpBinding (), "address"); ServiceMetadataBehavior b = new ServiceMetadataBehavior (); b.HttpGetEnabled = true; - b.HttpGetUrl = new Uri( "http://localhost:30158" ); + b.HttpGetUrl = new Uri( ep ); h.Description.Behaviors.Add (b); h.Open (); @@ -197,7 +201,7 @@ namespace MonoTests.System.ServiceModel Assert.IsTrue (channelDispatcher.Endpoints.Count == 1, "#3"); EndpointAddressMessageFilter filter = channelDispatcher.Endpoints [0].AddressFilter as EndpointAddressMessageFilter; Assert.IsNotNull (filter, "#4"); - Assert.IsTrue (filter.Address.Equals (new EndpointAddress ("http://localhost:30158")), "#5"); + Assert.IsTrue (filter.Address.Equals (new EndpointAddress (ep)), "#5"); Assert.IsFalse (filter.IncludeHostNameInComparison, "#6"); Assert.IsTrue (channelDispatcher.Endpoints [0].ContractFilter is MatchAllMessageFilter, "#7"); h.Close (); @@ -207,7 +211,8 @@ namespace MonoTests.System.ServiceModel public void SpecificActionTest () { //EndpointDispatcher d = new EndpointDispatcher( - ServiceHost h = new ServiceHost (typeof (SpecificAction), new Uri ("http://localhost:30158")); + var ep = NetworkHelpers.LocalEphemeralEndPoint().ToString(); + ServiceHost h = new ServiceHost (typeof (SpecificAction), new Uri ("http://" + ep)); h.AddServiceEndpoint (typeof (Action1Interface), new BasicHttpBinding (), "address"); h.Open (); @@ -222,7 +227,8 @@ namespace MonoTests.System.ServiceModel [Test] public void InitializeRuntimeBehaviors1 () { HostState st = new HostState (); - ServiceHost h = new ServiceHost (typeof (SpecificAction2), new Uri ("http://localhost:30158")); + var ep = NetworkHelpers.LocalEphemeralEndPoint().ToString(); + ServiceHost h = new ServiceHost (typeof (SpecificAction2), new Uri ("http://" + ep)); h.AddServiceEndpoint (typeof (SpecificAction2), new BasicHttpBinding (), "temp"); h.Description.Behaviors.Add (new MyServiceBehavior (st, h)); @@ -241,7 +247,8 @@ namespace MonoTests.System.ServiceModel [Test] public void InitializeRuntimeBehaviors2 () { HostState st = new HostState (); - ServiceHost h = new ServiceHost (typeof (SpecificAction), new Uri ("http://localhost:30158")); + var ep = NetworkHelpers.LocalEphemeralEndPoint().ToString(); + ServiceHost h = new ServiceHost (typeof (SpecificAction), new Uri ("http://" + ep)); h.AddServiceEndpoint (typeof (Action1Interface), new BasicHttpBinding (), "temp"); h.AddServiceEndpoint (typeof (Action2Interface), new BasicHttpBinding (), "temp2"); @@ -266,9 +273,9 @@ namespace MonoTests.System.ServiceModel { var host = new Poker (); Assert.AreEqual (0, host.BaseAddresses.Count, "#1"); - host.DoAddBaseAddress (new Uri ("http://localhost:37564")); + host.DoAddBaseAddress (new Uri ("http://localhost:" + NetworkHelpers.FindFreePort ())); Assert.AreEqual (1, host.BaseAddresses.Count, "#1"); - host.DoAddBaseAddress (new Uri ("net.tcp://localhost:893")); + host.DoAddBaseAddress (new Uri ("net.tcp://localhost:" + NetworkHelpers.FindFreePort ())); Assert.AreEqual (2, host.BaseAddresses.Count, "#1"); } @@ -278,39 +285,42 @@ namespace MonoTests.System.ServiceModel { var host = new Poker (); Assert.AreEqual (0, host.BaseAddresses.Count, "#1"); - host.DoAddBaseAddress (new Uri ("http://localhost:37564")); + host.DoAddBaseAddress (new Uri ("http://localhost:" + NetworkHelpers.FindFreePort ())); // http base address is already added. - host.DoAddBaseAddress (new Uri ("http://localhost:893")); + host.DoAddBaseAddress (new Uri ("http://localhost:" + NetworkHelpers.FindFreePort ())); } [Test] public void AddServiceEndpointUri () { + int port = NetworkHelpers.FindFreePort (); var host = new ServiceHost (typeof (AllActions), - new Uri ("http://localhost:37564")); + new Uri ("http://localhost:" + port)); var se = host.AddServiceEndpoint (typeof (AllActions), new BasicHttpBinding (), "foobar"); - Assert.AreEqual ("http://localhost:37564/foobar", se.Address.Uri.AbsoluteUri, "#1"); - Assert.AreEqual ("http://localhost:37564/foobar", se.ListenUri.AbsoluteUri, "#2"); + Assert.AreEqual ("http://localhost:" + port + "/foobar", se.Address.Uri.AbsoluteUri, "#1"); + Assert.AreEqual ("http://localhost:" + port + "/foobar", se.ListenUri.AbsoluteUri, "#2"); } [Test] public void AddServiceEndpointUri2 () { + int port = NetworkHelpers.FindFreePort (); var host = new ServiceHost (typeof (AllActions), - new Uri ("http://localhost:37564")); + new Uri ("http://localhost:" + port)); var se = host.AddServiceEndpoint (typeof (AllActions), new BasicHttpBinding (), String.Empty); - Assert.AreEqual ("http://localhost:37564/", se.Address.Uri.AbsoluteUri, "#1"); - Assert.AreEqual ("http://localhost:37564/", se.ListenUri.AbsoluteUri, "#2"); + Assert.AreEqual ("http://localhost:" + port + "/", se.Address.Uri.AbsoluteUri, "#1"); + Assert.AreEqual ("http://localhost:" + port + "/", se.ListenUri.AbsoluteUri, "#2"); } [Test] [ExpectedException (typeof (InvalidOperationException))] public void AddServiceEndpointOnlyMex () { + var ep = NetworkHelpers.LocalEphemeralEndPoint().ToString(); var host = new ServiceHost (typeof (AllActions), - new Uri ("http://localhost:37564")); + new Uri ("http://" + ep)); host.Description.Behaviors.Add (new ServiceMetadataBehavior ()); host.AddServiceEndpoint ("IMetadataExchange", new BasicHttpBinding (), "/wsdl"); @@ -339,7 +349,7 @@ namespace MonoTests.System.ServiceModel void RunDestinationUnreachableTest (string label, Binding binding) { - string address = "http://localhost:37564/"; + string address = "http://" + NetworkHelpers.LocalEphemeralEndPoint().ToString(); var host = OpenHost (address, binding); try { diff --git a/mcs/class/System.ServiceModel/Test/System.ServiceModel/ServiceHostTest.cs b/mcs/class/System.ServiceModel/Test/System.ServiceModel/ServiceHostTest.cs index 57e03d8e7b4..a120402ff7c 100644 --- a/mcs/class/System.ServiceModel/Test/System.ServiceModel/ServiceHostTest.cs +++ b/mcs/class/System.ServiceModel/Test/System.ServiceModel/ServiceHostTest.cs @@ -34,6 +34,8 @@ using System.ServiceModel.Description; using System.ServiceModel.Dispatcher; using NUnit.Framework; +using MonoTests.Helpers; + namespace MonoTests.System.ServiceModel { [TestFixture] @@ -172,10 +174,11 @@ namespace MonoTests.System.ServiceModel [Test] public void AddServiceEndpoint2_4 () { - ServiceHost host = new ServiceHost (typeof (HogeFuga), new Uri ("http://localhost:37564")); + var ep = "http://" + NetworkHelpers.LocalEphemeralEndPoint().ToString(); + ServiceHost host = new ServiceHost (typeof (HogeFuga), new Uri (ep)); var binding = new BasicHttpBinding (); - host.AddServiceEndpoint (typeof (IHoge), binding, new Uri ("http://localhost:37564")); - host.AddServiceEndpoint (typeof (IFuga), binding, new Uri ("http://localhost:37564")); + host.AddServiceEndpoint (typeof (IHoge), binding, new Uri (ep)); + host.AddServiceEndpoint (typeof (IFuga), binding, new Uri (ep)); // Use the same binding, results in one ChannelDispatcher (actually two, for metadata/debug behavior). host.Open (); @@ -296,13 +299,14 @@ namespace MonoTests.System.ServiceModel [Test] public void InstanceWithNonSingletonMode () { + var ep = NetworkHelpers.LocalEphemeralEndPoint().ToString(); ServiceHost host = new ServiceHost ( new NonSingletonService ()); Assert.IsNotNull (host.Description.Behaviors.Find ().GetWellKnownSingleton (), "premise1"); host.AddServiceEndpoint ( typeof (NonSingletonService), new BasicHttpBinding (), - new Uri ("http://localhost:37564/s1")); + new Uri ("http://" + ep + "/s1")); // in case Open() didn't fail, we need to close the host. // And even if Close() caused the expected exception, @@ -323,13 +327,14 @@ namespace MonoTests.System.ServiceModel [Test] public void InstanceWithSingletonMode () { + var ep = NetworkHelpers.LocalEphemeralEndPoint().ToString(); SingletonService instance = new SingletonService (); ServiceHost host = new ServiceHost (instance); Assert.IsNotNull (host.Description.Behaviors.Find ().GetWellKnownSingleton (), "#1"); host.AddServiceEndpoint ( typeof (SingletonService), new BasicHttpBinding (), - new Uri ("http://localhost:37564/s2")); + new Uri ("http://" + ep + "/s2")); // in case Open() didn't fail, we need to close the host. // And even if Close() caused the expected exception, diff --git a/mcs/class/System.Web.Routing/System.Web.Routing/RouteCollection.cs b/mcs/class/System.Web.Routing/System.Web.Routing/RouteCollection.cs index b3e4a1c16dc..d53c063441e 100644 --- a/mcs/class/System.Web.Routing/System.Web.Routing/RouteCollection.cs +++ b/mcs/class/System.Web.Routing/System.Web.Routing/RouteCollection.cs @@ -92,6 +92,8 @@ namespace System.Web.Routing } } + public bool LowercaseUrls { get; set; } + public bool AppendTrailingSlash { get; set; } public bool RouteExistingFiles { get; set; } public void Add (string name, RouteBase item) diff --git a/mcs/class/System.Web/System.Web-net_4_5.csproj b/mcs/class/System.Web/System.Web-net_4_5.csproj index f1b350172c1..67956ca1ebd 100644 --- a/mcs/class/System.Web/System.Web-net_4_5.csproj +++ b/mcs/class/System.Web/System.Web-net_4_5.csproj @@ -1250,6 +1250,7 @@ + diff --git a/mcs/class/System.Web/System.Web-plainweb-net_4_5.csproj b/mcs/class/System.Web/System.Web-plainweb-net_4_5.csproj index fe5bb23c992..925358a6fb7 100644 --- a/mcs/class/System.Web/System.Web-plainweb-net_4_5.csproj +++ b/mcs/class/System.Web/System.Web-plainweb-net_4_5.csproj @@ -1250,6 +1250,7 @@ + diff --git a/mcs/class/System.Web/System.Web.Configuration_2.0/HttpRuntimeSection.cs b/mcs/class/System.Web/System.Web.Configuration_2.0/HttpRuntimeSection.cs index 62eb0716440..a328b5e18fc 100644 --- a/mcs/class/System.Web/System.Web.Configuration_2.0/HttpRuntimeSection.cs +++ b/mcs/class/System.Web/System.Web.Configuration_2.0/HttpRuntimeSection.cs @@ -63,6 +63,7 @@ namespace System.Web.Configuration static ConfigurationProperty encoderTypeProp; static ConfigurationProperty relaxedUrlToFileSystemMappingProp; static ConfigurationProperty targetFrameworkProp; + static ConfigurationProperty allowDynamicModuleRegistrationProp; static ConfigurationPropertyCollection properties; static HttpRuntimeSection () @@ -141,6 +142,8 @@ namespace System.Web.Configuration PropertyHelper.VersionConverter, PropertyHelper.DefaultValidator, ConfigurationPropertyOptions.None); + allowDynamicModuleRegistrationProp = new ConfigurationProperty ("allowDynamicModuleRegistration", typeof(bool), true, + ConfigurationPropertyOptions.None); properties = new ConfigurationPropertyCollection(); properties.Add (apartmentThreadingProp); @@ -169,6 +172,7 @@ namespace System.Web.Configuration properties.Add (encoderTypeProp); properties.Add (relaxedUrlToFileSystemMappingProp); properties.Add (targetFrameworkProp); + properties.Add (allowDynamicModuleRegistrationProp); } public HttpRuntimeSection() @@ -349,6 +353,11 @@ namespace System.Web.Configuration protected internal override ConfigurationPropertyCollection Properties { get { return properties; } } + [ConfigurationProperty ("allowDynamicModuleRegistration", DefaultValue = "True")] + public bool AllowDynamicModuleRegistration { + get { return (bool) base [allowDynamicModuleRegistrationProp]; } + set { base [allowDynamicModuleRegistrationProp] = value; } + } } } diff --git a/mcs/class/System.Web/System.Web.Hosting/HostingEnvironment.cs b/mcs/class/System.Web/System.Web.Hosting/HostingEnvironment.cs index ebf540bfb92..4b8a52f036d 100644 --- a/mcs/class/System.Web/System.Web.Hosting/HostingEnvironment.cs +++ b/mcs/class/System.Web/System.Web.Hosting/HostingEnvironment.cs @@ -104,6 +104,13 @@ namespace System.Web.Hosting { get { return vpath_provider; } } + public static bool InClientBuildManager { + get { + // Mono doesn't have a ClientBuildManager, so we can't be in it. Simple as that. + return false; + } + } + public static void DecrementBusyCount () { Interlocked.Decrement (ref busy_count); diff --git a/mcs/class/System.Web/System.Web/DynamicModuleManager.cs b/mcs/class/System.Web/System.Web/DynamicModuleManager.cs new file mode 100644 index 00000000000..99e0a36c653 --- /dev/null +++ b/mcs/class/System.Web/System.Web/DynamicModuleManager.cs @@ -0,0 +1,57 @@ +// +// DynamicModuleManager.cs: Manager for dynamic Http Modules. +// +// Author: +// Matthias Bogad (bogad@cs.tum.edu) +// +// (C) 2015 +// + +using System; +using System.Collections.Generic; + +namespace System.Web { + sealed class DynamicModuleManager { + const string moduleNameFormat = "__Module__{0}_{1}"; + + readonly List entries = new List (); + bool entriesAreReadOnly = false; + readonly object mutex = new object (); + + public void Add (Type moduleType) + { + if (moduleType == null) + throw new ArgumentException ("moduleType"); + + if (!typeof (IHttpModule).IsAssignableFrom (moduleType)) + throw new ArgumentException ("Given object does not implement IHttpModule.", "moduleType"); + + lock (mutex) { + if (entriesAreReadOnly) + throw new InvalidOperationException ("A module was to be added to the dynamic module list, but the list was already initialized. The dynamic module list can only be initialized once."); + + entries.Add (new DynamicModuleInfo (moduleType, + string.Format (moduleNameFormat, moduleType.AssemblyQualifiedName, Guid.NewGuid ()))); + } + } + + public ICollection LockAndGetModules () + { + lock (mutex) { + entriesAreReadOnly = true; + return entries; + } + } + } + + struct DynamicModuleInfo { + public readonly string Name; + public readonly Type Type; + + public DynamicModuleInfo (Type type, string name) + { + Name = name; + Type = type; + } + } +} diff --git a/mcs/class/System.Web/System.Web/HttpApplication.cs b/mcs/class/System.Web/System.Web/HttpApplication.cs index 68c098dcc26..34c2d105769 100644 --- a/mcs/class/System.Web/System.Web/HttpApplication.cs +++ b/mcs/class/System.Web/System.Web/HttpApplication.cs @@ -4,7 +4,8 @@ // Author: // Miguel de Icaza (miguel@novell.com) // Gonzalo Paniagua (gonzalo@ximian.com) -// +// Matthias Bogad (bogad@cs.tum.edu) +// // // Copyright (C) 2005-2009 Novell, Inc (http://www.novell.com) // @@ -62,8 +63,10 @@ // Events Disposed // +using System; using System.IO; using System.Collections; +using System.Collections.Generic; using System.ComponentModel; using System.Configuration; using System.Diagnostics; @@ -162,6 +165,8 @@ namespace System.Web bool removeConfigurationFromCache; bool fullInitComplete = false; + static DynamicModuleManager dynamicModuleManeger = new DynamicModuleManager (); + // // These are used to detect the case where the EndXXX method is invoked // from within the BeginXXXX delegate, so we detect whether we kick the @@ -209,6 +214,13 @@ namespace System.Web if (context == null) context = HttpContext.Current; HttpModuleCollection coll = modules.LoadModules (this); + + HttpModuleCollection dynMods = CreateDynamicModules (); + + for (int i = 0; i < dynMods.Count; i++) { + coll.AddModule (dynMods.GetKey (i), dynMods.Get (i)); + } + Interlocked.CompareExchange (ref modcoll, coll, null); HttpContext.Current = saved; @@ -404,7 +416,7 @@ namespace System.Web public void AddOnAcquireRequestStateAsync (BeginEventHandler bh, EndEventHandler eh) { - AsyncInvoker invoker = new AsyncInvoker (bh, eh); + AsyncInvoker invoker = new AsyncInvoker (bh, eh, this); AcquireRequestState += new EventHandler (invoker.Invoke); } @@ -417,7 +429,7 @@ namespace System.Web public void AddOnAuthenticateRequestAsync (BeginEventHandler bh, EndEventHandler eh) { - AsyncInvoker invoker = new AsyncInvoker (bh, eh); + AsyncInvoker invoker = new AsyncInvoker (bh, eh, this); AuthenticateRequest += new EventHandler (invoker.Invoke); } @@ -430,7 +442,7 @@ namespace System.Web public void AddOnAuthorizeRequestAsync (BeginEventHandler bh, EndEventHandler eh) { - AsyncInvoker invoker = new AsyncInvoker (bh, eh); + AsyncInvoker invoker = new AsyncInvoker (bh, eh, this); AuthorizeRequest += new EventHandler (invoker.Invoke); } @@ -452,7 +464,7 @@ namespace System.Web public void AddOnBeginRequestAsync (BeginEventHandler bh, EndEventHandler eh) { - AsyncInvoker invoker = new AsyncInvoker (bh, eh); + AsyncInvoker invoker = new AsyncInvoker (bh, eh, this); BeginRequest += new EventHandler (invoker.Invoke); } @@ -474,7 +486,7 @@ namespace System.Web public void AddOnEndRequestAsync (BeginEventHandler bh, EndEventHandler eh) { - AsyncInvoker invoker = new AsyncInvoker (bh, eh); + AsyncInvoker invoker = new AsyncInvoker (bh, eh, this); EndRequest += new EventHandler (invoker.Invoke); } @@ -487,7 +499,7 @@ namespace System.Web public void AddOnPostRequestHandlerExecuteAsync (BeginEventHandler bh, EndEventHandler eh) { - AsyncInvoker invoker = new AsyncInvoker (bh, eh); + AsyncInvoker invoker = new AsyncInvoker (bh, eh, this); PostRequestHandlerExecute += new EventHandler (invoker.Invoke); } @@ -500,7 +512,7 @@ namespace System.Web public void AddOnPreRequestHandlerExecuteAsync (BeginEventHandler bh, EndEventHandler eh) { - AsyncInvoker invoker = new AsyncInvoker (bh, eh); + AsyncInvoker invoker = new AsyncInvoker (bh, eh, this); PreRequestHandlerExecute += new EventHandler (invoker.Invoke); } @@ -513,7 +525,7 @@ namespace System.Web public void AddOnReleaseRequestStateAsync (BeginEventHandler bh, EndEventHandler eh) { - AsyncInvoker invoker = new AsyncInvoker (bh, eh); + AsyncInvoker invoker = new AsyncInvoker (bh, eh, this); ReleaseRequestState += new EventHandler (invoker.Invoke); } @@ -526,7 +538,7 @@ namespace System.Web public void AddOnResolveRequestCacheAsync (BeginEventHandler bh, EndEventHandler eh) { - AsyncInvoker invoker = new AsyncInvoker (bh, eh); + AsyncInvoker invoker = new AsyncInvoker (bh, eh, this); ResolveRequestCache += new EventHandler (invoker.Invoke); } @@ -539,7 +551,7 @@ namespace System.Web public void AddOnUpdateRequestCacheAsync (BeginEventHandler bh, EndEventHandler eh) { - AsyncInvoker invoker = new AsyncInvoker (bh, eh); + AsyncInvoker invoker = new AsyncInvoker (bh, eh, this); UpdateRequestCache += new EventHandler (invoker.Invoke); } @@ -557,7 +569,7 @@ namespace System.Web public void AddOnPostAuthenticateRequestAsync (BeginEventHandler bh, EndEventHandler eh, object data) { - AsyncInvoker invoker = new AsyncInvoker (bh, eh, data); + AsyncInvoker invoker = new AsyncInvoker (bh, eh, this, data); PostAuthenticateRequest += new EventHandler (invoker.Invoke); } @@ -575,7 +587,7 @@ namespace System.Web public void AddOnPostAuthorizeRequestAsync (BeginEventHandler bh, EndEventHandler eh, object data) { - AsyncInvoker invoker = new AsyncInvoker (bh, eh, data); + AsyncInvoker invoker = new AsyncInvoker (bh, eh, this, data); PostAuthorizeRequest += new EventHandler (invoker.Invoke); } @@ -593,7 +605,7 @@ namespace System.Web public void AddOnPostResolveRequestCacheAsync (BeginEventHandler bh, EndEventHandler eh, object data) { - AsyncInvoker invoker = new AsyncInvoker (bh, eh, data); + AsyncInvoker invoker = new AsyncInvoker (bh, eh, this, data); PostResolveRequestCache += new EventHandler (invoker.Invoke); } @@ -611,7 +623,7 @@ namespace System.Web public void AddOnPostMapRequestHandlerAsync (BeginEventHandler bh, EndEventHandler eh, object data) { - AsyncInvoker invoker = new AsyncInvoker (bh, eh, data); + AsyncInvoker invoker = new AsyncInvoker (bh, eh, this, data); PostMapRequestHandler += new EventHandler (invoker.Invoke); } @@ -629,7 +641,7 @@ namespace System.Web public void AddOnPostAcquireRequestStateAsync (BeginEventHandler bh, EndEventHandler eh, object data) { - AsyncInvoker invoker = new AsyncInvoker (bh, eh, data); + AsyncInvoker invoker = new AsyncInvoker (bh, eh, this, data); PostAcquireRequestState += new EventHandler (invoker.Invoke); } @@ -647,7 +659,7 @@ namespace System.Web public void AddOnPostReleaseRequestStateAsync (BeginEventHandler bh, EndEventHandler eh, object data) { - AsyncInvoker invoker = new AsyncInvoker (bh, eh, data); + AsyncInvoker invoker = new AsyncInvoker (bh, eh, this, data); PostReleaseRequestState += new EventHandler (invoker.Invoke); } @@ -665,7 +677,7 @@ namespace System.Web public void AddOnPostUpdateRequestCacheAsync (BeginEventHandler bh, EndEventHandler eh, object data) { - AsyncInvoker invoker = new AsyncInvoker (bh, eh, data); + AsyncInvoker invoker = new AsyncInvoker (bh, eh, this, data); PostUpdateRequestCache += new EventHandler (invoker.Invoke); } @@ -674,61 +686,61 @@ namespace System.Web // public void AddOnAcquireRequestStateAsync (BeginEventHandler bh, EndEventHandler eh, object data) { - AsyncInvoker invoker = new AsyncInvoker (bh, eh, data); + AsyncInvoker invoker = new AsyncInvoker (bh, eh, this, data); AcquireRequestState += new EventHandler (invoker.Invoke); } public void AddOnAuthenticateRequestAsync (BeginEventHandler bh, EndEventHandler eh, object data) { - AsyncInvoker invoker = new AsyncInvoker (bh, eh, data); + AsyncInvoker invoker = new AsyncInvoker (bh, eh, this, data); AuthenticateRequest += new EventHandler (invoker.Invoke); } public void AddOnAuthorizeRequestAsync (BeginEventHandler bh, EndEventHandler eh, object data) { - AsyncInvoker invoker = new AsyncInvoker (bh, eh, data); + AsyncInvoker invoker = new AsyncInvoker (bh, eh, this, data); AuthorizeRequest += new EventHandler (invoker.Invoke); } public void AddOnBeginRequestAsync (BeginEventHandler bh, EndEventHandler eh, object data) { - AsyncInvoker invoker = new AsyncInvoker (bh, eh, data); + AsyncInvoker invoker = new AsyncInvoker (bh, eh, this, data); BeginRequest += new EventHandler (invoker.Invoke); } public void AddOnEndRequestAsync (BeginEventHandler bh, EndEventHandler eh, object data) { - AsyncInvoker invoker = new AsyncInvoker (bh, eh, data); + AsyncInvoker invoker = new AsyncInvoker (bh, eh, this, data); EndRequest += new EventHandler (invoker.Invoke); } public void AddOnPostRequestHandlerExecuteAsync (BeginEventHandler bh, EndEventHandler eh, object data) { - AsyncInvoker invoker = new AsyncInvoker (bh, eh, data); + AsyncInvoker invoker = new AsyncInvoker (bh, eh, this, data); PostRequestHandlerExecute += new EventHandler (invoker.Invoke); } public void AddOnPreRequestHandlerExecuteAsync (BeginEventHandler bh, EndEventHandler eh, object data) { - AsyncInvoker invoker = new AsyncInvoker (bh, eh, data); + AsyncInvoker invoker = new AsyncInvoker (bh, eh, this, data); PreRequestHandlerExecute += new EventHandler (invoker.Invoke); } public void AddOnReleaseRequestStateAsync (BeginEventHandler bh, EndEventHandler eh, object data) { - AsyncInvoker invoker = new AsyncInvoker (bh, eh, data); + AsyncInvoker invoker = new AsyncInvoker (bh, eh, this, data); ReleaseRequestState += new EventHandler (invoker.Invoke); } public void AddOnResolveRequestCacheAsync (BeginEventHandler bh, EndEventHandler eh, object data) { - AsyncInvoker invoker = new AsyncInvoker (bh, eh, data); + AsyncInvoker invoker = new AsyncInvoker (bh, eh, this, data); ResolveRequestCache += new EventHandler (invoker.Invoke); } public void AddOnUpdateRequestCacheAsync (BeginEventHandler bh, EndEventHandler eh, object data) { - AsyncInvoker invoker = new AsyncInvoker (bh, eh, data); + AsyncInvoker invoker = new AsyncInvoker (bh, eh, this, data); UpdateRequestCache += new EventHandler (invoker.Invoke); } @@ -749,7 +761,7 @@ namespace System.Web public void AddOnLogRequestAsync (BeginEventHandler beginHandler, EndEventHandler endHandler, object state) { - AsyncInvoker invoker = new AsyncInvoker (beginHandler, endHandler, state); + AsyncInvoker invoker = new AsyncInvoker (beginHandler, endHandler, this, state); LogRequest += new EventHandler (invoker.Invoke); } @@ -767,7 +779,7 @@ namespace System.Web public void AddOnMapRequestHandlerAsync (BeginEventHandler beginHandler, EndEventHandler endHandler, object state) { - AsyncInvoker invoker = new AsyncInvoker (beginHandler, endHandler, state); + AsyncInvoker invoker = new AsyncInvoker (beginHandler, endHandler, this, state); MapRequestHandler += new EventHandler (invoker.Invoke); } @@ -785,7 +797,7 @@ namespace System.Web public void AddOnPostLogRequestAsync (BeginEventHandler beginHandler, EndEventHandler endHandler, object state) { - AsyncInvoker invoker = new AsyncInvoker (beginHandler, endHandler, state); + AsyncInvoker invoker = new AsyncInvoker (beginHandler, endHandler, this, state); PostLogRequest += new EventHandler (invoker.Invoke); } @@ -871,7 +883,7 @@ namespace System.Web // // If we catch an error, queue this error // - void ProcessError (Exception e) + internal void ProcessError (Exception e) { bool first = context.Error == null; context.AddError (e); @@ -1643,7 +1655,39 @@ namespace System.Web return true; } } - + + public static void RegisterModule (Type moduleType) + { + HttpRuntimeSection config = (HttpRuntimeSection)WebConfigurationManager.GetSection ("system.web/httpRuntime"); + + if (!config.AllowDynamicModuleRegistration) + throw new InvalidOperationException ("The Application has requested to register a dynamic Module, but dynamic module registration is disabled in web.config."); + + dynamicModuleManeger.Add (moduleType); + } + + + HttpModuleCollection CreateDynamicModules () + { + HttpModuleCollection modules = new HttpModuleCollection (); + + foreach (var module in dynamicModuleManeger.LockAndGetModules ()) { + IHttpModule httpModule = CreateModuleInstance (module.Type); + httpModule.Init (this); + modules.AddModule (module.Name, httpModule); + } + return modules; + } + + IHttpModule CreateModuleInstance (Type type) + { + return (IHttpModule) Activator.CreateInstance (type, + BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.CreateInstance, + null, + null, + null); + } + #region internals internal void ClearError () { @@ -1891,24 +1935,40 @@ namespace System.Web public BeginEventHandler begin; public EndEventHandler end; public object data; + HttpApplication app; + AsyncCallback callback; - public AsyncInvoker (BeginEventHandler bh, EndEventHandler eh, object d) + public AsyncInvoker (BeginEventHandler bh, EndEventHandler eh, HttpApplication a, object d) { begin = bh; end = eh; data = d; + app = a; + callback = new AsyncCallback (doAsyncCallback); } - public AsyncInvoker (BeginEventHandler bh, EndEventHandler eh) - { - begin = bh; - end = eh; - } + public AsyncInvoker (BeginEventHandler bh, EndEventHandler eh, HttpApplication app) : this(bh, eh, app, null) { } public void Invoke (object sender, EventArgs e) { - throw new Exception ("This is just a dummy"); + IAsyncResult res; + res = begin (app, e, callback, data); + } + + void doAsyncCallback (IAsyncResult res) + { + ThreadPool.QueueUserWorkItem ((object ores) => { + IAsyncResult tres = (IAsyncResult) ores; + try { + end (tres); + } catch (Exception ee) { + // I tried using ProcessError(), but we only come here frome an Invokation in PipelineDone(). + // Using ProcessError, I still get a blank screen, this way, we at least log the error to console... + Console.Error.WriteLine (ee.ToString ()); + } + }, res); } } #endregion } + diff --git a/mcs/class/System.Web/net_4_5_System.Web.dll.sources b/mcs/class/System.Web/net_4_5_System.Web.dll.sources index 8703eb00471..b074ec8f0a8 100644 --- a/mcs/class/System.Web/net_4_5_System.Web.dll.sources +++ b/mcs/class/System.Web/net_4_5_System.Web.dll.sources @@ -10,3 +10,4 @@ System.Web/UnvalidatedRequestValuesWrapper.cs System.Web/TaskAsyncResult.cs System.Web/TaskEventHandler.cs System.Web.Security/MembershipPasswordAttribute.cs +System.Web/DynamicModuleManager.cs diff --git a/mcs/class/System.Xaml/Assembly/AssemblyInfo.cs b/mcs/class/System.Xaml/Assembly/AssemblyInfo.cs index 10367320015..54cd8471352 100644 --- a/mcs/class/System.Xaml/Assembly/AssemblyInfo.cs +++ b/mcs/class/System.Xaml/Assembly/AssemblyInfo.cs @@ -64,3 +64,7 @@ using System.Runtime.InteropServices; #endif [assembly: ComVisible (false)] + +#if !MOBILE +[assembly: TypeForwardedTo (typeof (System.Windows.Markup.ValueSerializerAttribute))] +#endif diff --git a/mcs/class/System/System-bare-net_4_5.csproj b/mcs/class/System/System-bare-net_4_5.csproj index 5d82088e530..58f07d40c8a 100644 --- a/mcs/class/System/System-bare-net_4_5.csproj +++ b/mcs/class/System/System-bare-net_4_5.csproj @@ -582,6 +582,7 @@ + diff --git a/mcs/class/System/System-net_4_5.csproj b/mcs/class/System/System-net_4_5.csproj index 10451c47415..731ae63b879 100644 --- a/mcs/class/System/System-net_4_5.csproj +++ b/mcs/class/System/System-net_4_5.csproj @@ -582,6 +582,7 @@ + diff --git a/mcs/class/System/System-secxml-net_4_5.csproj b/mcs/class/System/System-secxml-net_4_5.csproj index d4c8d3e1523..c17518029fb 100644 --- a/mcs/class/System/System-secxml-net_4_5.csproj +++ b/mcs/class/System/System-secxml-net_4_5.csproj @@ -582,6 +582,7 @@ + diff --git a/mcs/class/System/System.Net/HttpWebRequest.cs b/mcs/class/System/System.Net/HttpWebRequest.cs index 7ccbcc2f34e..b9cc121d03c 100644 --- a/mcs/class/System/System.Net/HttpWebRequest.cs +++ b/mcs/class/System/System.Net/HttpWebRequest.cs @@ -110,6 +110,9 @@ namespace System.Net AuthorizationState auth_state, proxy_auth_state; string host; + [NonSerialized] + internal Action ResendContentFactory; + // Constructors static HttpWebRequest () { @@ -226,9 +229,15 @@ namespace System.Net internal bool InternalAllowBuffering { get { - return (allowBuffering && (method != "HEAD" && method != "GET" && - method != "MKCOL" && method != "CONNECT" && - method != "TRACE")); + return allowBuffering && MethodWithBuffer; + } + } + + bool MethodWithBuffer { + get { + return method != "HEAD" && method != "GET" && + method != "MKCOL" && method != "CONNECT" && + method != "TRACE"; } } @@ -1101,7 +1110,7 @@ namespace System.Net if (e != null) throw e; - if (AllowWriteStreamBuffering) + if (AllowWriteStreamBuffering || method == "GET") contentLength = -1; uriString = webResponse.Headers ["Location"]; @@ -1306,8 +1315,7 @@ namespace System.Net bodyBuffer = null; writeStream.Close (); } - } else if (method != "HEAD" && method != "GET" && method != "MKCOL" && method != "CONNECT" && - method != "TRACE") { + } else if (MethodWithBuffer) { if (getResponseCalled && !writeStream.RequestWritten) return writeStream.WriteRequestAsync (result); } @@ -1606,12 +1614,28 @@ namespace System.Net (ProxyQuery && !proxy_auth_state.IsCompleted && code == HttpStatusCode.ProxyAuthenticationRequired)) { if (!usedPreAuth && CheckAuthorization (webResponse, code)) { // Keep the written body, so it can be rewritten in the retry - if (InternalAllowBuffering) { - if (writeStream.WriteBufferLength > 0) { - bodyBuffer = writeStream.WriteBuffer; - bodyBufferLength = writeStream.WriteBufferLength; + if (MethodWithBuffer) { + if (AllowWriteStreamBuffering) { + if (writeStream.WriteBufferLength > 0) { + bodyBuffer = writeStream.WriteBuffer; + bodyBufferLength = writeStream.WriteBufferLength; + } + + return true; + } + + // + // Buffering is not allowed but we have alternative way to get same content (we + // need to resent it due to NTLM Authentication). + // + if (ResendContentFactory != null) { + using (var ms = new MemoryStream ()) { + ResendContentFactory (ms); + bodyBuffer = ms.ToArray (); + bodyBufferLength = bodyBuffer.Length; + } + return true; } - return true; } else if (method != "PUT" && method != "POST") { bodyBuffer = null; return true; diff --git a/mcs/class/System/Test/System.Net/HttpWebRequestTest.cs b/mcs/class/System/Test/System.Net/HttpWebRequestTest.cs index 326ff298024..a0a649376af 100644 --- a/mcs/class/System/Test/System.Net/HttpWebRequestTest.cs +++ b/mcs/class/System/Test/System.Net/HttpWebRequestTest.cs @@ -29,6 +29,8 @@ using Mono.Security.Authenticode; using Mono.Security.Protocol.Tls; #endif +using MonoTests.Helpers; + namespace MonoTests.System.Net { [TestFixture] @@ -93,7 +95,7 @@ namespace MonoTests.System.Net [Test] // bug #471782 public void CloseRequestStreamAfterReadingResponse () { - IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 9152); + IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint (); string url = "http://" + ep.ToString () + "/test/"; using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (EchoRequestHandler))) { @@ -241,7 +243,7 @@ namespace MonoTests.System.Net methods.Add ("whatever", "whatever"); methods.Add ("PUT", "PUT"); - IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 9153); + IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint (); string url = "http://" + ep.ToString () + "/test/"; foreach (DictionaryEntry de in methods) { @@ -271,7 +273,7 @@ namespace MonoTests.System.Net [Test] public void BeginGetRequestStream_Body_NotAllowed () { - IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 9154); + IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint (); string url = "http://" + ep.ToString () + "/test/"; using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (EchoRequestHandler))) { @@ -310,7 +312,7 @@ namespace MonoTests.System.Net [Test] // bug #465613 public void BeginGetRequestStream_NoBuffering () { - IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 11001); + IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint (); string url = "http://" + ep.ToString () + "/test/"; using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (EchoRequestHandler))) { @@ -366,7 +368,7 @@ namespace MonoTests.System.Net [Category ("NotWorking")] // #5842 public void BeginGetResponse () { - IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8001); + IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint (); string url = "http://" + ep.ToString () + "/test/"; using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (EchoRequestHandler))) { @@ -463,7 +465,7 @@ namespace MonoTests.System.Net [Test] // bug #511851 public void BeginGetRequestStream_Request_Aborted () { - IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8002); + IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint (); string url = "http://" + ep.ToString () + "/test/"; using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (EchoRequestHandler))) { @@ -490,7 +492,7 @@ namespace MonoTests.System.Net [Test] // bug #511851 public void BeginGetResponse_Request_Aborted () { - IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 9155); + IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint (); string url = "http://" + ep.ToString () + "/test/"; using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (EchoRequestHandler))) { @@ -517,7 +519,7 @@ namespace MonoTests.System.Net [Test] public void EndGetRequestStream_AsyncResult_Null () { - IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 9156); + IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint (); string url = "http://" + ep.ToString () + "/test/"; using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (EchoRequestHandler))) { @@ -545,7 +547,7 @@ namespace MonoTests.System.Net [Category ("NotWorking")] // do not get consistent result on MS public void EndGetRequestStream_Request_Aborted () { - IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8003); + IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint (); string url = "http://" + ep.ToString () + "/test/"; using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (EchoRequestHandler))) { @@ -575,7 +577,7 @@ namespace MonoTests.System.Net [Category ("NotWorking")] public void EndGetResponse_AsyncResult_Invalid () { - IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 9157); + IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint (); string url = "http://" + ep.ToString () + "/test/"; using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (EchoRequestHandler))) { @@ -601,7 +603,7 @@ namespace MonoTests.System.Net [Test] public void EndGetResponse_AsyncResult_Null () { - IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 9158); + IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint (); string url = "http://" + ep.ToString () + "/test/"; using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (EchoRequestHandler))) { @@ -634,7 +636,7 @@ namespace MonoTests.System.Net [Test] // bug #429200 public void GetRequestStream () { - IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 10000); + IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint (); string url = "http://" + ep.ToString () + "/test/"; using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (EchoRequestHandler))) { @@ -658,7 +660,7 @@ namespace MonoTests.System.Net [Test] // bug #511851 public void GetRequestStream_Request_Aborted () { - IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 10001); + IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint (); string url = "http://" + ep.ToString () + "/test/"; using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (EchoRequestHandler))) { @@ -686,7 +688,7 @@ namespace MonoTests.System.Net [Category ("NotWorking")] // #5842 public void GetRequestStream_Close_NotAllBytesWritten () { - IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 10002); + IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint (); string url = "http://" + ep.ToString () + "/test/"; using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (EchoRequestHandler))) { @@ -754,7 +756,7 @@ namespace MonoTests.System.Net [Category ("NotWorking")] // #5842 public void GetRequestStream_Write_Overflow () { - IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8010); + IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint (); string url = "http://" + ep.ToString () + "/test/"; // buffered, non-chunked @@ -965,7 +967,7 @@ namespace MonoTests.System.Net [Test] // bug #511851 public void GetResponse_Request_Aborted () { - IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 10100); + IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint (); string url = "http://" + ep.ToString () + "/test/"; using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (EchoRequestHandler))) { @@ -1320,7 +1322,7 @@ namespace MonoTests.System.Net [Test] // bug #513087 public void NonStandardVerb () { - IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8123); + IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint (); string url = "http://" + ep.ToString () + "/moved/"; using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (VerbEchoHandler))) { @@ -1355,7 +1357,7 @@ namespace MonoTests.System.Net [Category ("NotWorking")] // Assert #2 fails public void NotModifiedSince () { - IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 9123); + IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint (); string url = "http://" + ep.ToString () + "/test/"; using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (NotModifiedSinceHandler))) { @@ -2301,7 +2303,7 @@ namespace MonoTests.System.Net void DoRequest (Action request) { - int port = 30158; + int port = NetworkHelpers.FindFreePort (); ManualResetEvent completed = new ManualResetEvent (false); Uri address = new Uri (string.Format ("http://localhost:{0}", port)); @@ -2315,7 +2317,7 @@ namespace MonoTests.System.Net void DoRequest (Action request, Action processor) { - int port = 30158; + int port = NetworkHelpers.FindFreePort (); ManualResetEvent [] completed = new ManualResetEvent [2]; completed [0] = new ManualResetEvent (false); @@ -2697,7 +2699,7 @@ namespace MonoTests.System.Net [Test] public void CookieContainerTest () { - IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 11002); + IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint (); string url = "http://" + ep.ToString (); using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (CookieRequestHandler))) { @@ -2785,7 +2787,7 @@ namespace MonoTests.System.Net [Test] public void BeginRead () { - IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 9124); + IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint (); string url = "http://" + ep.ToString () + "/test/"; using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebRequestTest.EchoRequestHandler))) { @@ -2814,7 +2816,7 @@ namespace MonoTests.System.Net [Test] public void BeginWrite_Request_Aborted () { - IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 9125); + IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint (); string url = "http://" + ep.ToString () + "/test/"; using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebRequestTest.EchoRequestHandler))) { @@ -2843,7 +2845,7 @@ namespace MonoTests.System.Net [Test] public void CanRead () { - IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 9126); + IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint (); string url = "http://" + ep.ToString () + "/test/"; using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebRequestTest.EchoRequestHandler))) { @@ -2867,7 +2869,7 @@ namespace MonoTests.System.Net [Test] public void CanSeek () { - IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 9127); + IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint (); string url = "http://" + ep.ToString () + "/test/"; using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebRequestTest.EchoRequestHandler))) { @@ -2891,7 +2893,7 @@ namespace MonoTests.System.Net [Test] // bug #324182 public void CanTimeout () { - IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 9128); + IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint (); string url = "http://" + ep.ToString () + "/test/"; using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebRequestTest.EchoRequestHandler))) { @@ -2915,7 +2917,7 @@ namespace MonoTests.System.Net [Test] public void CanWrite () { - IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 9129); + IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint (); string url = "http://" + ep.ToString () + "/test/"; using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebRequestTest.EchoRequestHandler))) { @@ -2939,7 +2941,7 @@ namespace MonoTests.System.Net [Test] public void Read () { - IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 9130); + IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint (); string url = "http://" + ep.ToString () + "/test/"; using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebRequestTest.EchoRequestHandler))) { @@ -2968,7 +2970,7 @@ namespace MonoTests.System.Net [Test] public void ReadByte () { - IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 9140); + IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint (); string url = "http://" + ep.ToString () + "/test/"; using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebRequestTest.EchoRequestHandler))) { @@ -2996,7 +2998,7 @@ namespace MonoTests.System.Net [Test] public void ReadTimeout () { - IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 9141); + IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint (); string url = "http://" + ep.ToString () + "/test/"; using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebRequestTest.EchoRequestHandler))) { @@ -3020,7 +3022,7 @@ namespace MonoTests.System.Net [Test] public void Seek () { - IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 9142); + IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint (); string url = "http://" + ep.ToString () + "/test/"; using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebRequestTest.EchoRequestHandler))) { @@ -3048,7 +3050,7 @@ namespace MonoTests.System.Net [Test] public void Write_Buffer_Null () { - IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 9143); + IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint (); string url = "http://" + ep.ToString () + "/test/"; using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebRequestTest.EchoRequestHandler))) { @@ -3076,7 +3078,7 @@ namespace MonoTests.System.Net [Test] public void Write_Count_Negative () { - IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 9144); + IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint (); string url = "http://" + ep.ToString () + "/test/"; using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebRequestTest.EchoRequestHandler))) { @@ -3106,7 +3108,7 @@ namespace MonoTests.System.Net [Test] public void Write_Count_Overflow () { - IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 9145); + IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint (); string url = "http://" + ep.ToString () + "/test/"; using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebRequestTest.EchoRequestHandler))) { @@ -3136,7 +3138,7 @@ namespace MonoTests.System.Net [Test] public void Write_Offset_Negative () { - IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 9146); + IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint (); string url = "http://" + ep.ToString () + "/test/"; using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebRequestTest.EchoRequestHandler))) { @@ -3166,7 +3168,7 @@ namespace MonoTests.System.Net [Test] public void Write_Offset_Overflow () { - IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 9147); + IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint (); string url = "http://" + ep.ToString () + "/test/"; using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebRequestTest.EchoRequestHandler))) { @@ -3196,7 +3198,7 @@ namespace MonoTests.System.Net [Test] public void Write_Request_Aborted () { - IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 9148); + IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint (); string url = "http://" + ep.ToString () + "/test/"; using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebRequestTest.EchoRequestHandler))) { @@ -3226,7 +3228,7 @@ namespace MonoTests.System.Net [Category ("NotWorking")] public void Write_Stream_Closed () { - IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 9149); + IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint (); string url = "http://" + ep.ToString () + "/test/"; using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebRequestTest.EchoRequestHandler))) { @@ -3255,7 +3257,7 @@ namespace MonoTests.System.Net [Test] public void WriteByte_Request_Aborted () { - IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 9150); + IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint (); string url = "http://" + ep.ToString () + "/test/"; using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebRequestTest.EchoRequestHandler))) { @@ -3284,7 +3286,7 @@ namespace MonoTests.System.Net [Test] public void WriteTimeout () { - IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 9151); + IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint (); string url = "http://" + ep.ToString () + "/test/"; using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebRequestTest.EchoRequestHandler))) { diff --git a/mcs/class/System/Test/System.Net/HttpWebResponseTest.cs b/mcs/class/System/Test/System.Net/HttpWebResponseTest.cs index c62c888f24b..b76bd8b9a54 100644 --- a/mcs/class/System/Test/System.Net/HttpWebResponseTest.cs +++ b/mcs/class/System/Test/System.Net/HttpWebResponseTest.cs @@ -14,6 +14,8 @@ using System.Net; using System.Net.Sockets; using System.Text; +using MonoTests.Helpers; + using NUnit.Framework; namespace MonoTests.System.Net @@ -24,7 +26,7 @@ namespace MonoTests.System.Net [Test] public void CharacterSet_Disposed () { - IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000); + IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint(); string url = "http://" + ep.ToString () + "/test/"; using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) { @@ -54,7 +56,7 @@ namespace MonoTests.System.Net [Test] public void Close_Disposed () { - IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000); + IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint(); string url = "http://" + ep.ToString () + "/test/"; using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) { @@ -75,7 +77,7 @@ namespace MonoTests.System.Net [Test] public void ContentEncoding_Disposed () { - IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000); + IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint(); string url = "http://" + ep.ToString () + "/test/"; using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) { @@ -105,7 +107,7 @@ namespace MonoTests.System.Net [Test] public void ContentLength_Disposed () { - IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000); + IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint(); string url = "http://" + ep.ToString () + "/test/"; using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) { @@ -127,7 +129,7 @@ namespace MonoTests.System.Net [Test] public void ContentType_Disposed () { - IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000); + IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint(); string url = "http://" + ep.ToString () + "/test/"; using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) { @@ -157,7 +159,7 @@ namespace MonoTests.System.Net [Test] public void Cookies_Disposed () { - IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000); + IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint(); string url = "http://" + ep.ToString () + "/test/"; using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) { @@ -197,7 +199,7 @@ namespace MonoTests.System.Net [Test] public void GetResponseHeader_Disposed () { - IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000); + IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint(); string url = "http://" + ep.ToString () + "/test/"; using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) { @@ -227,7 +229,7 @@ namespace MonoTests.System.Net [Test] public void GetResponseStream_Disposed () { - IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000); + IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint(); string url = "http://" + ep.ToString () + "/test/"; using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) { @@ -257,7 +259,7 @@ namespace MonoTests.System.Net [Test] public void Headers_Disposed () { - IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000); + IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint(); string url = "http://" + ep.ToString () + "/test/"; using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) { @@ -286,7 +288,7 @@ namespace MonoTests.System.Net [Test] public void LastModified_Disposed () { - IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000); + IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint(); string url = "http://" + ep.ToString () + "/test/"; using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) { @@ -316,7 +318,7 @@ namespace MonoTests.System.Net [Test] public void Method_Disposed () { - IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000); + IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint(); string url = "http://" + ep.ToString () + "/test/"; using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) { @@ -346,7 +348,7 @@ namespace MonoTests.System.Net [Test] public void ProtocolVersion_Disposed () { - IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000); + IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint(); string url = "http://" + ep.ToString () + "/test/"; using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) { @@ -376,7 +378,7 @@ namespace MonoTests.System.Net [Test] public void ResponseUri_Disposed () { - IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000); + IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint(); string url = "http://" + ep.ToString () + "/test/"; using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) { @@ -406,7 +408,7 @@ namespace MonoTests.System.Net [Test] public void Server_Disposed () { - IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000); + IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint(); string url = "http://" + ep.ToString () + "/test/"; using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) { @@ -436,7 +438,7 @@ namespace MonoTests.System.Net [Test] public void StatusCode_Disposed () { - IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000); + IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint(); string url = "http://" + ep.ToString () + "/test/"; using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) { @@ -458,7 +460,7 @@ namespace MonoTests.System.Net [Test] public void StatusDescription_Disposed () { - IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000); + IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint(); string url = "http://" + ep.ToString () + "/test/"; using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) { @@ -511,7 +513,7 @@ namespace MonoTests.System.Net [Test] public void BeginRead_Buffer_Null () { - IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000); + IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint(); string url = "http://" + ep.ToString () + "/test/"; using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) { @@ -562,7 +564,7 @@ namespace MonoTests.System.Net [Test] public void BeginWrite () { - IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000); + IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint(); string url = "http://" + ep.ToString () + "/test/"; using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) { @@ -597,7 +599,7 @@ namespace MonoTests.System.Net [Category ("NotWorking")] public void CanRead () { - IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000); + IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint(); string url = "http://" + ep.ToString () + "/test/"; using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) { @@ -626,7 +628,7 @@ namespace MonoTests.System.Net [Test] public void CanSeek () { - IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000); + IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint(); string url = "http://" + ep.ToString () + "/test/"; using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) { @@ -655,7 +657,7 @@ namespace MonoTests.System.Net [Test] // bug #324182 public void CanTimeout () { - IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000); + IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint(); string url = "http://" + ep.ToString () + "/test/"; using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) { @@ -684,7 +686,7 @@ namespace MonoTests.System.Net [Test] public void CanWrite () { - IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000); + IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint(); string url = "http://" + ep.ToString () + "/test/"; using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) { @@ -713,7 +715,7 @@ namespace MonoTests.System.Net [Test] public void Read () { - IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000); + IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint(); string url = "http://" + ep.ToString () + "/test/"; using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) { @@ -752,7 +754,7 @@ namespace MonoTests.System.Net [Test] public void Read_Buffer_Null () { - IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000); + IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint(); string url = "http://" + ep.ToString () + "/test/"; using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) { @@ -803,7 +805,7 @@ namespace MonoTests.System.Net [Test] public void Read_Count_Negative () { - IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000); + IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint(); string url = "http://" + ep.ToString () + "/test/"; using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) { @@ -855,7 +857,7 @@ namespace MonoTests.System.Net [Test] public void Read_Count_Overflow () { - IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000); + IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint(); string url = "http://" + ep.ToString () + "/test/"; using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) { @@ -907,7 +909,7 @@ namespace MonoTests.System.Net [Test] public void Read_Offset_Negative () { - IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000); + IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint(); string url = "http://" + ep.ToString () + "/test/"; using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) { @@ -959,7 +961,7 @@ namespace MonoTests.System.Net [Test] public void Read_Offset_Overflow () { - IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000); + IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint(); string url = "http://" + ep.ToString () + "/test/"; using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) { @@ -1012,7 +1014,7 @@ namespace MonoTests.System.Net [Category ("NotWorking")] public void Read_Stream_Closed () { - IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000); + IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint(); string url = "http://" + ep.ToString () + "/test/"; using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) { @@ -1077,7 +1079,7 @@ namespace MonoTests.System.Net [Test] public void ReadTimeout () { - IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000); + IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint(); string url = "http://" + ep.ToString () + "/test/"; using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) { @@ -1106,7 +1108,7 @@ namespace MonoTests.System.Net [Test] public void Write () { - IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000); + IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint(); string url = "http://" + ep.ToString () + "/test/"; using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) { @@ -1140,7 +1142,7 @@ namespace MonoTests.System.Net [Test] public void WriteTimeout () { - IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000); + IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint(); string url = "http://" + ep.ToString () + "/test/"; using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) { diff --git a/mcs/class/System/Test/System.Net/WebClientTest.cs b/mcs/class/System/Test/System.Net/WebClientTest.cs index f3105b0ca16..133d293271e 100644 --- a/mcs/class/System/Test/System.Net/WebClientTest.cs +++ b/mcs/class/System/Test/System.Net/WebClientTest.cs @@ -16,6 +16,8 @@ using System.Text; using System.Threading; using NUnit.Framework; +using MonoTests.Helpers; + namespace MonoTests.System.Net { [TestFixture] @@ -1417,8 +1419,8 @@ namespace MonoTests.System.Net [Test] public void UploadValues1 () { - IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000); - string url = "http://" + IPAddress.Loopback.ToString () + ":8000/test/"; + IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint (); + string url = "http://" + ep.ToString () + "/test/"; using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (EchoRequestHandler))) { responder.Start (); @@ -1783,7 +1785,7 @@ namespace MonoTests.System.Net [Test] public void UploadStringAsyncCancelEvent () { - UploadAsyncCancelEventTest ((webClient, uri, cancelEvent) => + UploadAsyncCancelEventTest (9301, (webClient, uri, cancelEvent) => { webClient.UploadStringCompleted += (sender, args) => @@ -1799,7 +1801,7 @@ namespace MonoTests.System.Net [Test] public void UploadDataAsyncCancelEvent () { - UploadAsyncCancelEventTest ((webClient, uri, cancelEvent) => + UploadAsyncCancelEventTest (9302, (webClient, uri, cancelEvent) => { webClient.UploadDataCompleted += (sender, args) => { @@ -1814,7 +1816,7 @@ namespace MonoTests.System.Net [Test] public void UploadValuesAsyncCancelEvent () { - UploadAsyncCancelEventTest ((webClient, uri, cancelEvent) => + UploadAsyncCancelEventTest (9303, (webClient, uri, cancelEvent) => { webClient.UploadValuesCompleted += (sender, args) => { @@ -1829,7 +1831,7 @@ namespace MonoTests.System.Net [Test] public void UploadFileAsyncCancelEvent () { - UploadAsyncCancelEventTest ((webClient, uri, cancelEvent) => + UploadAsyncCancelEventTest (9304,(webClient, uri, cancelEvent) => { string tempFile = Path.Combine (_tempFolder, "upload.tmp"); File.Create (tempFile).Close (); @@ -1868,10 +1870,10 @@ namespace MonoTests.System.Net #endif #if NET_4_0 - public void UploadAsyncCancelEventTest (Action uploadAction) + public void UploadAsyncCancelEventTest (int port, Action uploadAction) { - var ep = new IPEndPoint (IPAddress.Loopback, 8000); - string url = "http://" + IPAddress.Loopback + ":8000/test/"; + var ep = NetworkHelpers.LocalEphemeralEndPoint (); + string url = "http://" + ep.ToString() + "/test/"; using (var responder = new SocketResponder (ep, EchoRequestHandler)) { diff --git a/mcs/class/WindowsBase/Assembly/AssemblyInfo.cs b/mcs/class/WindowsBase/Assembly/AssemblyInfo.cs index 47c11b00842..02780da33bf 100644 --- a/mcs/class/WindowsBase/Assembly/AssemblyInfo.cs +++ b/mcs/class/WindowsBase/Assembly/AssemblyInfo.cs @@ -76,5 +76,7 @@ using System.Windows.Markup; [assembly: XmlnsDefinitionAttribute ("http://schemas.microsoft.com/netfx/2007/xaml/presentation", "System.Windows")] [assembly: XmlnsDefinitionAttribute ("http://schemas.microsoft.com/netfx/2007/xaml/presentation", "System.Diagnostics")] +#if !MOBILE [assembly: TypeForwardedTo (typeof (ValueSerializerAttribute))] +#endif diff --git a/mcs/class/corlib/corlib-net_4_5.csproj b/mcs/class/corlib/corlib-net_4_5.csproj index ad5d95213b5..9d56645004f 100644 --- a/mcs/class/corlib/corlib-net_4_5.csproj +++ b/mcs/class/corlib/corlib-net_4_5.csproj @@ -25,7 +25,7 @@ full 612,618,1699 false - DEBUG;TRACE;INSIDE_CORLIB;MONO_CULTURE_DATA;LIBC;FEATURE_PAL;GENERICS_WORK;FEATURE_LIST_PREDICATES;FEATURE_SERIALIZATION;FEATURE_ASCII;FEATURE_LATIN1;FEATURE_UTF7;FEATURE_UTF32;MONO_HYBRID_ENCODING_SUPPORT;FEATURE_ASYNC_IO;NEW_EXPERIMENTAL_ASYNC_IO;FEATURE_UTF32;FEATURE_EXCEPTIONDISPATCHINFO;FEATURE_CORRUPTING_EXCEPTIONS;FEATURE_EXCEPTION_NOTIFICATIONS;FEATURE_STRONGNAME_MIGRATION;FEATURE_USE_LCID;FEATURE_FUSION;FEATURE_CRYPTO;FEATURE_X509_SECURESTRINGS;FEATURE_SYNCHRONIZATIONCONTEXT;FEATURE_SYNCHRONIZATIONCONTEXT_WAIT;FEATURE_REMOTING;MONO_COM;FEATURE_COMINTEROP;NET_4_0;NET_4_5;MONO;DISABLE_CAS_USE;FEATURE_PAL;GENERICS_WORK;FEATURE_LIST_PREDICATES;FEATURE_SERIALIZATION;FEATURE_ASCII;FEATURE_LATIN1;FEATURE_UTF7;FEATURE_UTF32;MONO_HYBRID_ENCODING_SUPPORT;FEATURE_ASYNC_IO;NEW_EXPERIMENTAL_ASYNC_IO;FEATURE_UTF32;FEATURE_EXCEPTIONDISPATCHINFO;FEATURE_CORRUPTING_EXCEPTIONS;FEATURE_EXCEPTION_NOTIFICATIONS;FEATURE_STRONGNAME_MIGRATION;FEATURE_USE_LCID;FEATURE_FUSION;FEATURE_CRYPTO;FEATURE_X509_SECURESTRINGS;FEATURE_SYNCHRONIZATIONCONTEXT;FEATURE_SYNCHRONIZATIONCONTEXT_WAIT;FEATURE_REMOTING;MONO_COM;FEATURE_COMINTEROP + DEBUG;TRACE;INSIDE_CORLIB;MONO_CULTURE_DATA;LIBC;FEATURE_PAL;GENERICS_WORK;FEATURE_LIST_PREDICATES;FEATURE_SERIALIZATION;FEATURE_ASCII;FEATURE_LATIN1;FEATURE_UTF7;FEATURE_UTF32;MONO_HYBRID_ENCODING_SUPPORT;FEATURE_ASYNC_IO;NEW_EXPERIMENTAL_ASYNC_IO;FEATURE_UTF32;FEATURE_EXCEPTIONDISPATCHINFO;FEATURE_CORRUPTING_EXCEPTIONS;FEATURE_EXCEPTION_NOTIFICATIONS;FEATURE_STRONGNAME_MIGRATION;FEATURE_USE_LCID;FEATURE_FUSION;FEATURE_CRYPTO;FEATURE_X509_SECURESTRINGS;FEATURE_SYNCHRONIZATIONCONTEXT;FEATURE_SYNCHRONIZATIONCONTEXT_WAIT;FEATURE_REMOTING;MONO_COM;FEATURE_COMINTEROP;FEATURE_ROLE_BASED_SECURITY;NET_4_0;NET_4_5;MONO;DISABLE_CAS_USE;FEATURE_PAL;GENERICS_WORK;FEATURE_LIST_PREDICATES;FEATURE_SERIALIZATION;FEATURE_ASCII;FEATURE_LATIN1;FEATURE_UTF7;FEATURE_UTF32;MONO_HYBRID_ENCODING_SUPPORT;FEATURE_ASYNC_IO;NEW_EXPERIMENTAL_ASYNC_IO;FEATURE_UTF32;FEATURE_EXCEPTIONDISPATCHINFO;FEATURE_CORRUPTING_EXCEPTIONS;FEATURE_EXCEPTION_NOTIFICATIONS;FEATURE_STRONGNAME_MIGRATION;FEATURE_USE_LCID;FEATURE_FUSION;FEATURE_CRYPTO;FEATURE_X509_SECURESTRINGS;FEATURE_SYNCHRONIZATIONCONTEXT;FEATURE_SYNCHRONIZATIONCONTEXT_WAIT;FEATURE_REMOTING;MONO_COM;FEATURE_COMINTEROP;FEATURE_ROLE_BASED_SECURITY prompt 4 @@ -33,7 +33,7 @@ pdbonly 612,618,1699 true - INSIDE_CORLIB;MONO_CULTURE_DATA;LIBC;FEATURE_PAL;GENERICS_WORK;FEATURE_LIST_PREDICATES;FEATURE_SERIALIZATION;FEATURE_ASCII;FEATURE_LATIN1;FEATURE_UTF7;FEATURE_UTF32;MONO_HYBRID_ENCODING_SUPPORT;FEATURE_ASYNC_IO;NEW_EXPERIMENTAL_ASYNC_IO;FEATURE_UTF32;FEATURE_EXCEPTIONDISPATCHINFO;FEATURE_CORRUPTING_EXCEPTIONS;FEATURE_EXCEPTION_NOTIFICATIONS;FEATURE_STRONGNAME_MIGRATION;FEATURE_USE_LCID;FEATURE_FUSION;FEATURE_CRYPTO;FEATURE_X509_SECURESTRINGS;FEATURE_SYNCHRONIZATIONCONTEXT;FEATURE_SYNCHRONIZATIONCONTEXT_WAIT;FEATURE_REMOTING;MONO_COM;FEATURE_COMINTEROP;NET_4_0;NET_4_5;MONO;DISABLE_CAS_USE;FEATURE_PAL;GENERICS_WORK;FEATURE_LIST_PREDICATES;FEATURE_SERIALIZATION;FEATURE_ASCII;FEATURE_LATIN1;FEATURE_UTF7;FEATURE_UTF32;MONO_HYBRID_ENCODING_SUPPORT;FEATURE_ASYNC_IO;NEW_EXPERIMENTAL_ASYNC_IO;FEATURE_UTF32;FEATURE_EXCEPTIONDISPATCHINFO;FEATURE_CORRUPTING_EXCEPTIONS;FEATURE_EXCEPTION_NOTIFICATIONS;FEATURE_STRONGNAME_MIGRATION;FEATURE_USE_LCID;FEATURE_FUSION;FEATURE_CRYPTO;FEATURE_X509_SECURESTRINGS;FEATURE_SYNCHRONIZATIONCONTEXT;FEATURE_SYNCHRONIZATIONCONTEXT_WAIT;FEATURE_REMOTING;MONO_COM;FEATURE_COMINTEROP + INSIDE_CORLIB;MONO_CULTURE_DATA;LIBC;FEATURE_PAL;GENERICS_WORK;FEATURE_LIST_PREDICATES;FEATURE_SERIALIZATION;FEATURE_ASCII;FEATURE_LATIN1;FEATURE_UTF7;FEATURE_UTF32;MONO_HYBRID_ENCODING_SUPPORT;FEATURE_ASYNC_IO;NEW_EXPERIMENTAL_ASYNC_IO;FEATURE_UTF32;FEATURE_EXCEPTIONDISPATCHINFO;FEATURE_CORRUPTING_EXCEPTIONS;FEATURE_EXCEPTION_NOTIFICATIONS;FEATURE_STRONGNAME_MIGRATION;FEATURE_USE_LCID;FEATURE_FUSION;FEATURE_CRYPTO;FEATURE_X509_SECURESTRINGS;FEATURE_SYNCHRONIZATIONCONTEXT;FEATURE_SYNCHRONIZATIONCONTEXT_WAIT;FEATURE_REMOTING;MONO_COM;FEATURE_COMINTEROP;FEATURE_ROLE_BASED_SECURITY;NET_4_0;NET_4_5;MONO;DISABLE_CAS_USE;FEATURE_PAL;GENERICS_WORK;FEATURE_LIST_PREDICATES;FEATURE_SERIALIZATION;FEATURE_ASCII;FEATURE_LATIN1;FEATURE_UTF7;FEATURE_UTF32;MONO_HYBRID_ENCODING_SUPPORT;FEATURE_ASYNC_IO;NEW_EXPERIMENTAL_ASYNC_IO;FEATURE_UTF32;FEATURE_EXCEPTIONDISPATCHINFO;FEATURE_CORRUPTING_EXCEPTIONS;FEATURE_EXCEPTION_NOTIFICATIONS;FEATURE_STRONGNAME_MIGRATION;FEATURE_USE_LCID;FEATURE_FUSION;FEATURE_CRYPTO;FEATURE_X509_SECURESTRINGS;FEATURE_SYNCHRONIZATIONCONTEXT;FEATURE_SYNCHRONIZATIONCONTEXT_WAIT;FEATURE_REMOTING;MONO_COM;FEATURE_COMINTEROP;FEATURE_ROLE_BASED_SECURITY prompt 4 @@ -266,6 +266,7 @@ + @@ -854,7 +855,6 @@ - diff --git a/mcs/class/monodoc/monodoc.dll.sources b/mcs/class/monodoc/monodoc.dll.sources index 1dee0470816..a4e89d0ed57 100644 --- a/mcs/class/monodoc/monodoc.dll.sources +++ b/mcs/class/monodoc/monodoc.dll.sources @@ -46,428 +46,428 @@ Monodoc.Ecma/EcmaUrlTokenizer.cs Monodoc.Ecma/EcmaDesc.cs Mono.Documentation/ManifestResourceResolver.cs Mono.Documentation/XmlDocUtils.cs -../../../external/Lucene.Net/src/core/Analysis/Analyzer.cs -../../../external/Lucene.Net/src/core/Analysis/ASCIIFoldingFilter.cs -../../../external/Lucene.Net/src/core/Analysis/BaseCharFilter.cs -../../../external/Lucene.Net/src/core/Analysis/CachingTokenFilter.cs -../../../external/Lucene.Net/src/core/Analysis/CharArraySet.cs -../../../external/Lucene.Net/src/core/Analysis/CharFilter.cs -../../../external/Lucene.Net/src/core/Analysis/CharReader.cs -../../../external/Lucene.Net/src/core/Analysis/CharStream.cs -../../../external/Lucene.Net/src/core/Analysis/CharTokenizer.cs -../../../external/Lucene.Net/src/core/Analysis/ISOLatin1AccentFilter.cs -../../../external/Lucene.Net/src/core/Analysis/KeywordAnalyzer.cs -../../../external/Lucene.Net/src/core/Analysis/KeywordTokenizer.cs -../../../external/Lucene.Net/src/core/Analysis/LengthFilter.cs -../../../external/Lucene.Net/src/core/Analysis/LetterTokenizer.cs -../../../external/Lucene.Net/src/core/Analysis/LowerCaseFilter.cs -../../../external/Lucene.Net/src/core/Analysis/LowerCaseTokenizer.cs -../../../external/Lucene.Net/src/core/Analysis/MappingCharFilter.cs -../../../external/Lucene.Net/src/core/Analysis/NormalizeCharMap.cs -../../../external/Lucene.Net/src/core/Analysis/NumericTokenStream.cs -../../../external/Lucene.Net/src/core/Analysis/PerFieldAnalyzerWrapper.cs -../../../external/Lucene.Net/src/core/Analysis/PorterStemFilter.cs -../../../external/Lucene.Net/src/core/Analysis/PorterStemmer.cs -../../../external/Lucene.Net/src/core/Analysis/SimpleAnalyzer.cs -../../../external/Lucene.Net/src/core/Analysis/Standard/StandardAnalyzer.cs -../../../external/Lucene.Net/src/core/Analysis/Standard/StandardFilter.cs -../../../external/Lucene.Net/src/core/Analysis/Standard/StandardTokenizer.cs -../../../external/Lucene.Net/src/core/Analysis/Standard/StandardTokenizerImpl.cs -../../../external/Lucene.Net/src/core/Analysis/StopAnalyzer.cs -../../../external/Lucene.Net/src/core/Analysis/StopFilter.cs -../../../external/Lucene.Net/src/core/Analysis/TeeSinkTokenFilter.cs -../../../external/Lucene.Net/src/core/Analysis/Token.cs -../../../external/Lucene.Net/src/core/Analysis/Tokenattributes/FlagsAttribute.cs -../../../external/Lucene.Net/src/core/Analysis/Tokenattributes/IFlagsAttribute.cs -../../../external/Lucene.Net/src/core/Analysis/Tokenattributes/IOffsetAttribute.cs -../../../external/Lucene.Net/src/core/Analysis/Tokenattributes/IPayloadAttribute.cs -../../../external/Lucene.Net/src/core/Analysis/Tokenattributes/IPositionIncrementAttribute.cs -../../../external/Lucene.Net/src/core/Analysis/Tokenattributes/ITermAttribute.cs -../../../external/Lucene.Net/src/core/Analysis/Tokenattributes/ITypeAttribute.cs -../../../external/Lucene.Net/src/core/Analysis/Tokenattributes/OffsetAttribute.cs -../../../external/Lucene.Net/src/core/Analysis/Tokenattributes/PayloadAttribute.cs -../../../external/Lucene.Net/src/core/Analysis/Tokenattributes/PositionIncrementAttribute.cs -../../../external/Lucene.Net/src/core/Analysis/Tokenattributes/TermAttribute.cs -../../../external/Lucene.Net/src/core/Analysis/Tokenattributes/TypeAttribute.cs -../../../external/Lucene.Net/src/core/Analysis/TokenFilter.cs -../../../external/Lucene.Net/src/core/Analysis/Tokenizer.cs -../../../external/Lucene.Net/src/core/Analysis/TokenStream.cs -../../../external/Lucene.Net/src/core/Analysis/WhitespaceAnalyzer.cs -../../../external/Lucene.Net/src/core/Analysis/WhitespaceTokenizer.cs -../../../external/Lucene.Net/src/core/Analysis/WordlistLoader.cs -../../../external/Lucene.Net/src/core/Document/AbstractField.cs -../../../external/Lucene.Net/src/core/Document/CompressionTools.cs -../../../external/Lucene.Net/src/core/Document/DateField.cs -../../../external/Lucene.Net/src/core/Document/DateTools.cs -../../../external/Lucene.Net/src/core/Document/Document.cs -../../../external/Lucene.Net/src/core/Document/Field.cs -../../../external/Lucene.Net/src/core/Document/Fieldable.cs -../../../external/Lucene.Net/src/core/Document/FieldSelector.cs -../../../external/Lucene.Net/src/core/Document/FieldSelectorResult.cs -../../../external/Lucene.Net/src/core/Document/LoadFirstFieldSelector.cs -../../../external/Lucene.Net/src/core/Document/MapFieldSelector.cs -../../../external/Lucene.Net/src/core/Document/NumberTools.cs -../../../external/Lucene.Net/src/core/Document/NumericField.cs -../../../external/Lucene.Net/src/core/Document/SetBasedFieldSelector.cs -../../../external/Lucene.Net/src/core/Index/AbstractAllTermDocs.cs -../../../external/Lucene.Net/src/core/Index/AllTermDocs.cs -../../../external/Lucene.Net/src/core/Index/BufferedDeletes.cs -../../../external/Lucene.Net/src/core/Index/ByteBlockPool.cs -../../../external/Lucene.Net/src/core/Index/ByteSliceReader.cs -../../../external/Lucene.Net/src/core/Index/ByteSliceWriter.cs -../../../external/Lucene.Net/src/core/Index/CharBlockPool.cs -../../../external/Lucene.Net/src/core/Index/CheckIndex.cs -../../../external/Lucene.Net/src/core/Index/CompoundFileReader.cs -../../../external/Lucene.Net/src/core/Index/CompoundFileWriter.cs -../../../external/Lucene.Net/src/core/Index/ConcurrentMergeScheduler.cs -../../../external/Lucene.Net/src/core/Index/CorruptIndexException.cs -../../../external/Lucene.Net/src/core/Index/DefaultSkipListReader.cs -../../../external/Lucene.Net/src/core/Index/DefaultSkipListWriter.cs -../../../external/Lucene.Net/src/core/Index/DirectoryReader.cs -../../../external/Lucene.Net/src/core/Index/DocConsumer.cs -../../../external/Lucene.Net/src/core/Index/DocConsumerPerThread.cs -../../../external/Lucene.Net/src/core/Index/DocFieldConsumer.cs -../../../external/Lucene.Net/src/core/Index/DocFieldConsumerPerField.cs -../../../external/Lucene.Net/src/core/Index/DocFieldConsumerPerThread.cs -../../../external/Lucene.Net/src/core/Index/DocFieldConsumers.cs -../../../external/Lucene.Net/src/core/Index/DocFieldConsumersPerField.cs -../../../external/Lucene.Net/src/core/Index/DocFieldConsumersPerThread.cs -../../../external/Lucene.Net/src/core/Index/DocFieldProcessor.cs -../../../external/Lucene.Net/src/core/Index/DocFieldProcessorPerField.cs -../../../external/Lucene.Net/src/core/Index/DocFieldProcessorPerThread.cs -../../../external/Lucene.Net/src/core/Index/DocInverter.cs -../../../external/Lucene.Net/src/core/Index/DocInverterPerField.cs -../../../external/Lucene.Net/src/core/Index/DocInverterPerThread.cs -../../../external/Lucene.Net/src/core/Index/DocumentsWriter.cs -../../../external/Lucene.Net/src/core/Index/DocumentsWriterThreadState.cs -../../../external/Lucene.Net/src/core/Index/FieldInfo.cs -../../../external/Lucene.Net/src/core/Index/FieldInfos.cs -../../../external/Lucene.Net/src/core/Index/FieldInvertState.cs -../../../external/Lucene.Net/src/core/Index/FieldReaderException.cs -../../../external/Lucene.Net/src/core/Index/FieldSortedTermVectorMapper.cs -../../../external/Lucene.Net/src/core/Index/FieldsReader.cs -../../../external/Lucene.Net/src/core/Index/FieldsWriter.cs -../../../external/Lucene.Net/src/core/Index/FilterIndexReader.cs -../../../external/Lucene.Net/src/core/Index/FormatPostingsDocsConsumer.cs -../../../external/Lucene.Net/src/core/Index/FormatPostingsDocsWriter.cs -../../../external/Lucene.Net/src/core/Index/FormatPostingsFieldsConsumer.cs -../../../external/Lucene.Net/src/core/Index/FormatPostingsFieldsWriter.cs -../../../external/Lucene.Net/src/core/Index/FormatPostingsPositionsConsumer.cs -../../../external/Lucene.Net/src/core/Index/FormatPostingsPositionsWriter.cs -../../../external/Lucene.Net/src/core/Index/FormatPostingsTermsConsumer.cs -../../../external/Lucene.Net/src/core/Index/FormatPostingsTermsWriter.cs -../../../external/Lucene.Net/src/core/Index/FreqProxFieldMergeState.cs -../../../external/Lucene.Net/src/core/Index/FreqProxTermsWriter.cs -../../../external/Lucene.Net/src/core/Index/FreqProxTermsWriterPerField.cs -../../../external/Lucene.Net/src/core/Index/FreqProxTermsWriterPerThread.cs -../../../external/Lucene.Net/src/core/Index/IndexCommit.cs -../../../external/Lucene.Net/src/core/Index/IndexDeletionPolicy.cs -../../../external/Lucene.Net/src/core/Index/IndexFileDeleter.cs -../../../external/Lucene.Net/src/core/Index/IndexFileNameFilter.cs -../../../external/Lucene.Net/src/core/Index/IndexFileNames.cs -../../../external/Lucene.Net/src/core/Index/IndexReader.cs -../../../external/Lucene.Net/src/core/Index/IndexWriter.cs -../../../external/Lucene.Net/src/core/Index/IntBlockPool.cs -../../../external/Lucene.Net/src/core/Index/InvertedDocConsumer.cs -../../../external/Lucene.Net/src/core/Index/InvertedDocConsumerPerField.cs -../../../external/Lucene.Net/src/core/Index/InvertedDocConsumerPerThread.cs -../../../external/Lucene.Net/src/core/Index/InvertedDocEndConsumer.cs -../../../external/Lucene.Net/src/core/Index/InvertedDocEndConsumerPerField.cs -../../../external/Lucene.Net/src/core/Index/InvertedDocEndConsumerPerThread.cs -../../../external/Lucene.Net/src/core/Index/KeepOnlyLastCommitDeletionPolicy.cs -../../../external/Lucene.Net/src/core/Index/LogByteSizeMergePolicy.cs -../../../external/Lucene.Net/src/core/Index/LogDocMergePolicy.cs -../../../external/Lucene.Net/src/core/Index/LogMergePolicy.cs -../../../external/Lucene.Net/src/core/Index/MergeDocIDRemapper.cs -../../../external/Lucene.Net/src/core/Index/MergePolicy.cs -../../../external/Lucene.Net/src/core/Index/MergeScheduler.cs -../../../external/Lucene.Net/src/core/Index/MultiLevelSkipListReader.cs -../../../external/Lucene.Net/src/core/Index/MultiLevelSkipListWriter.cs -../../../external/Lucene.Net/src/core/Index/MultipleTermPositions.cs -../../../external/Lucene.Net/src/core/Index/MultiReader.cs -../../../external/Lucene.Net/src/core/Index/NormsWriter.cs -../../../external/Lucene.Net/src/core/Index/NormsWriterPerField.cs -../../../external/Lucene.Net/src/core/Index/NormsWriterPerThread.cs -../../../external/Lucene.Net/src/core/Index/ParallelReader.cs -../../../external/Lucene.Net/src/core/Index/Payload.cs -../../../external/Lucene.Net/src/core/Index/PositionBasedTermVectorMapper.cs -../../../external/Lucene.Net/src/core/Index/RawPostingList.cs -../../../external/Lucene.Net/src/core/Index/ReadOnlyDirectoryReader.cs -../../../external/Lucene.Net/src/core/Index/ReadOnlySegmentReader.cs -../../../external/Lucene.Net/src/core/Index/ReusableStringReader.cs -../../../external/Lucene.Net/src/core/Index/SegmentInfo.cs -../../../external/Lucene.Net/src/core/Index/SegmentInfos.cs -../../../external/Lucene.Net/src/core/Index/SegmentMergeInfo.cs -../../../external/Lucene.Net/src/core/Index/SegmentMergeQueue.cs -../../../external/Lucene.Net/src/core/Index/SegmentMerger.cs -../../../external/Lucene.Net/src/core/Index/SegmentReader.cs -../../../external/Lucene.Net/src/core/Index/SegmentTermDocs.cs -../../../external/Lucene.Net/src/core/Index/SegmentTermEnum.cs -../../../external/Lucene.Net/src/core/Index/SegmentTermPositions.cs -../../../external/Lucene.Net/src/core/Index/SegmentTermPositionVector.cs -../../../external/Lucene.Net/src/core/Index/SegmentTermVector.cs -../../../external/Lucene.Net/src/core/Index/SegmentWriteState.cs -../../../external/Lucene.Net/src/core/Index/SerialMergeScheduler.cs -../../../external/Lucene.Net/src/core/Index/SnapshotDeletionPolicy.cs -../../../external/Lucene.Net/src/core/Index/SortedTermVectorMapper.cs -../../../external/Lucene.Net/src/core/Index/StaleReaderException.cs -../../../external/Lucene.Net/src/core/Index/StoredFieldsWriter.cs -../../../external/Lucene.Net/src/core/Index/StoredFieldsWriterPerThread.cs -../../../external/Lucene.Net/src/core/Index/Term.cs -../../../external/Lucene.Net/src/core/Index/TermBuffer.cs -../../../external/Lucene.Net/src/core/Index/TermDocs.cs -../../../external/Lucene.Net/src/core/Index/TermEnum.cs -../../../external/Lucene.Net/src/core/Index/TermFreqVector.cs -../../../external/Lucene.Net/src/core/Index/TermInfo.cs -../../../external/Lucene.Net/src/core/Index/TermInfosReader.cs -../../../external/Lucene.Net/src/core/Index/TermInfosWriter.cs -../../../external/Lucene.Net/src/core/Index/TermPositions.cs -../../../external/Lucene.Net/src/core/Index/TermPositionVector.cs -../../../external/Lucene.Net/src/core/Index/TermsHash.cs -../../../external/Lucene.Net/src/core/Index/TermsHashConsumer.cs -../../../external/Lucene.Net/src/core/Index/TermsHashConsumerPerField.cs -../../../external/Lucene.Net/src/core/Index/TermsHashConsumerPerThread.cs -../../../external/Lucene.Net/src/core/Index/TermsHashPerField.cs -../../../external/Lucene.Net/src/core/Index/TermsHashPerThread.cs -../../../external/Lucene.Net/src/core/Index/TermVectorEntry.cs -../../../external/Lucene.Net/src/core/Index/TermVectorEntryFreqSortedComparator.cs -../../../external/Lucene.Net/src/core/Index/TermVectorMapper.cs -../../../external/Lucene.Net/src/core/Index/TermVectorOffsetInfo.cs -../../../external/Lucene.Net/src/core/Index/TermVectorsReader.cs -../../../external/Lucene.Net/src/core/Index/TermVectorsTermsWriter.cs -../../../external/Lucene.Net/src/core/Index/TermVectorsTermsWriterPerField.cs -../../../external/Lucene.Net/src/core/Index/TermVectorsTermsWriterPerThread.cs -../../../external/Lucene.Net/src/core/Index/TermVectorsWriter.cs -../../../external/Lucene.Net/src/core/LucenePackage.cs -../../../external/Lucene.Net/src/core/LZOCompressor.cs -../../../external/Lucene.Net/src/core/Messages/INLSException.cs -../../../external/Lucene.Net/src/core/Messages/Message.cs -../../../external/Lucene.Net/src/core/Messages/MessageImpl.cs -../../../external/Lucene.Net/src/core/Messages/NLS.cs -../../../external/Lucene.Net/src/core/QueryParser/CharStream.cs -../../../external/Lucene.Net/src/core/QueryParser/FastCharStream.cs -../../../external/Lucene.Net/src/core/QueryParser/MultiFieldQueryParser.cs -../../../external/Lucene.Net/src/core/QueryParser/ParseException.cs -../../../external/Lucene.Net/src/core/QueryParser/QueryParser.cs -../../../external/Lucene.Net/src/core/QueryParser/QueryParserConstants.cs -../../../external/Lucene.Net/src/core/QueryParser/QueryParserTokenManager.cs -../../../external/Lucene.Net/src/core/QueryParser/Token.cs -../../../external/Lucene.Net/src/core/QueryParser/TokenMgrError.cs -../../../external/Lucene.Net/src/core/Search/BooleanClause.cs -../../../external/Lucene.Net/src/core/Search/BooleanQuery.cs -../../../external/Lucene.Net/src/core/Search/BooleanScorer.cs -../../../external/Lucene.Net/src/core/Search/BooleanScorer2.cs -../../../external/Lucene.Net/src/core/Search/CachingSpanFilter.cs -../../../external/Lucene.Net/src/core/Search/CachingWrapperFilter.cs -../../../external/Lucene.Net/src/core/Search/Collector.cs -../../../external/Lucene.Net/src/core/Search/ComplexExplanation.cs -../../../external/Lucene.Net/src/core/Search/ConjunctionScorer.cs -../../../external/Lucene.Net/src/core/Search/ConstantScoreQuery.cs -../../../external/Lucene.Net/src/core/Search/DefaultSimilarity.cs -../../../external/Lucene.Net/src/core/Search/DisjunctionMaxQuery.cs -../../../external/Lucene.Net/src/core/Search/DisjunctionMaxScorer.cs -../../../external/Lucene.Net/src/core/Search/DisjunctionSumScorer.cs -../../../external/Lucene.Net/src/core/Search/DocIdSet.cs -../../../external/Lucene.Net/src/core/Search/DocIdSetIterator.cs -../../../external/Lucene.Net/src/core/Search/ExactPhraseScorer.cs -../../../external/Lucene.Net/src/core/Search/Explanation.cs -../../../external/Lucene.Net/src/core/Search/FieldCache.cs -../../../external/Lucene.Net/src/core/Search/FieldCacheImpl.cs -../../../external/Lucene.Net/src/core/Search/FieldCacheRangeFilter.cs -../../../external/Lucene.Net/src/core/Search/FieldCacheTermsFilter.cs -../../../external/Lucene.Net/src/core/Search/FieldComparator.cs -../../../external/Lucene.Net/src/core/Search/FieldComparatorSource.cs -../../../external/Lucene.Net/src/core/Search/FieldDoc.cs -../../../external/Lucene.Net/src/core/Search/FieldDocSortedHitQueue.cs -../../../external/Lucene.Net/src/core/Search/FieldValueHitQueue.cs -../../../external/Lucene.Net/src/core/Search/Filter.cs -../../../external/Lucene.Net/src/core/Search/FilteredDocIdSet.cs -../../../external/Lucene.Net/src/core/Search/FilteredDocIdSetIterator.cs -../../../external/Lucene.Net/src/core/Search/FilteredQuery.cs -../../../external/Lucene.Net/src/core/Search/FilteredTermEnum.cs -../../../external/Lucene.Net/src/core/Search/FilterManager.cs -../../../external/Lucene.Net/src/core/Search/Function/ByteFieldSource.cs -../../../external/Lucene.Net/src/core/Search/Function/CustomScoreProvider.cs -../../../external/Lucene.Net/src/core/Search/Function/CustomScoreQuery.cs -../../../external/Lucene.Net/src/core/Search/Function/DocValues.cs -../../../external/Lucene.Net/src/core/Search/Function/FieldCacheSource.cs -../../../external/Lucene.Net/src/core/Search/Function/FieldScoreQuery.cs -../../../external/Lucene.Net/src/core/Search/Function/FloatFieldSource.cs -../../../external/Lucene.Net/src/core/Search/Function/IntFieldSource.cs -../../../external/Lucene.Net/src/core/Search/Function/OrdFieldSource.cs -../../../external/Lucene.Net/src/core/Search/Function/ReverseOrdFieldSource.cs -../../../external/Lucene.Net/src/core/Search/Function/ShortFieldSource.cs -../../../external/Lucene.Net/src/core/Search/Function/ValueSource.cs -../../../external/Lucene.Net/src/core/Search/Function/ValueSourceQuery.cs -../../../external/Lucene.Net/src/core/Search/FuzzyQuery.cs -../../../external/Lucene.Net/src/core/Search/FuzzyTermEnum.cs -../../../external/Lucene.Net/src/core/Search/HitQueue.cs -../../../external/Lucene.Net/src/core/Search/IndexSearcher.cs -../../../external/Lucene.Net/src/core/Search/MatchAllDocsQuery.cs -../../../external/Lucene.Net/src/core/Search/MultiPhraseQuery.cs -../../../external/Lucene.Net/src/core/Search/MultiSearcher.cs -../../../external/Lucene.Net/src/core/Search/MultiTermQuery.cs -../../../external/Lucene.Net/src/core/Search/MultiTermQueryWrapperFilter.cs -../../../external/Lucene.Net/src/core/Search/NumericRangeFilter.cs -../../../external/Lucene.Net/src/core/Search/NumericRangeQuery.cs -../../../external/Lucene.Net/src/core/Search/ParallelMultiSearcher.cs -../../../external/Lucene.Net/src/core/Search/Payloads/AveragePayloadFunction.cs -../../../external/Lucene.Net/src/core/Search/Payloads/MaxPayloadFunction.cs -../../../external/Lucene.Net/src/core/Search/Payloads/MinPayloadFunction.cs -../../../external/Lucene.Net/src/core/Search/Payloads/PayloadFunction.cs -../../../external/Lucene.Net/src/core/Search/Payloads/PayloadNearQuery.cs -../../../external/Lucene.Net/src/core/Search/Payloads/PayloadSpanUtil.cs -../../../external/Lucene.Net/src/core/Search/Payloads/PayloadTermQuery.cs -../../../external/Lucene.Net/src/core/Search/PhrasePositions.cs -../../../external/Lucene.Net/src/core/Search/PhraseQuery.cs -../../../external/Lucene.Net/src/core/Search/PhraseQueue.cs -../../../external/Lucene.Net/src/core/Search/PhraseScorer.cs -../../../external/Lucene.Net/src/core/Search/PositiveScoresOnlyCollector.cs -../../../external/Lucene.Net/src/core/Search/PrefixFilter.cs -../../../external/Lucene.Net/src/core/Search/PrefixQuery.cs -../../../external/Lucene.Net/src/core/Search/PrefixTermEnum.cs -../../../external/Lucene.Net/src/core/Search/Query.cs -../../../external/Lucene.Net/src/core/Search/QueryTermVector.cs -../../../external/Lucene.Net/src/core/Search/QueryWrapperFilter.cs -../../../external/Lucene.Net/src/core/Search/ReqExclScorer.cs -../../../external/Lucene.Net/src/core/Search/ReqOptSumScorer.cs -../../../external/Lucene.Net/src/core/Search/ScoreCachingWrappingScorer.cs -../../../external/Lucene.Net/src/core/Search/ScoreDoc.cs -../../../external/Lucene.Net/src/core/Search/Scorer.cs -../../../external/Lucene.Net/src/core/Search/Searchable.cs -../../../external/Lucene.Net/src/core/Search/Searcher.cs -../../../external/Lucene.Net/src/core/Search/Similarity.cs -../../../external/Lucene.Net/src/core/Search/SimilarityDelegator.cs -../../../external/Lucene.Net/src/core/Search/SingleTermEnum.cs -../../../external/Lucene.Net/src/core/Search/SloppyPhraseScorer.cs -../../../external/Lucene.Net/src/core/Search/Sort.cs -../../../external/Lucene.Net/src/core/Search/SortField.cs -../../../external/Lucene.Net/src/core/Search/SpanFilter.cs -../../../external/Lucene.Net/src/core/Search/SpanFilterResult.cs -../../../external/Lucene.Net/src/core/Search/SpanQueryFilter.cs -../../../external/Lucene.Net/src/core/Search/Spans/FieldMaskingSpanQuery.cs -../../../external/Lucene.Net/src/core/Search/Spans/NearSpansOrdered.cs -../../../external/Lucene.Net/src/core/Search/Spans/NearSpansUnordered.cs -../../../external/Lucene.Net/src/core/Search/Spans/SpanFirstQuery.cs -../../../external/Lucene.Net/src/core/Search/Spans/SpanNearQuery.cs -../../../external/Lucene.Net/src/core/Search/Spans/SpanNotQuery.cs -../../../external/Lucene.Net/src/core/Search/Spans/SpanOrQuery.cs -../../../external/Lucene.Net/src/core/Search/Spans/SpanQuery.cs -../../../external/Lucene.Net/src/core/Search/Spans/Spans.cs -../../../external/Lucene.Net/src/core/Search/Spans/SpanScorer.cs -../../../external/Lucene.Net/src/core/Search/Spans/SpanTermQuery.cs -../../../external/Lucene.Net/src/core/Search/Spans/SpanWeight.cs -../../../external/Lucene.Net/src/core/Search/Spans/TermSpans.cs -../../../external/Lucene.Net/src/core/Search/TermQuery.cs -../../../external/Lucene.Net/src/core/Search/TermRangeFilter.cs -../../../external/Lucene.Net/src/core/Search/TermRangeQuery.cs -../../../external/Lucene.Net/src/core/Search/TermRangeTermEnum.cs -../../../external/Lucene.Net/src/core/Search/TermScorer.cs -../../../external/Lucene.Net/src/core/Search/TimeLimitingCollector.cs -../../../external/Lucene.Net/src/core/Search/TopDocs.cs -../../../external/Lucene.Net/src/core/Search/TopDocsCollector.cs -../../../external/Lucene.Net/src/core/Search/TopFieldCollector.cs -../../../external/Lucene.Net/src/core/Search/TopFieldDocs.cs -../../../external/Lucene.Net/src/core/Search/TopScoreDocCollector.cs -../../../external/Lucene.Net/src/core/Search/Weight.cs -../../../external/Lucene.Net/src/core/Search/WildcardQuery.cs -../../../external/Lucene.Net/src/core/Search/WildcardTermEnum.cs -../../../external/Lucene.Net/src/core/Store/AlreadyClosedException.cs -../../../external/Lucene.Net/src/core/Store/BufferedIndexInput.cs -../../../external/Lucene.Net/src/core/Store/BufferedIndexOutput.cs -../../../external/Lucene.Net/src/core/Store/CheckSumIndexInput.cs -../../../external/Lucene.Net/src/core/Store/CheckSumIndexOutput.cs -../../../external/Lucene.Net/src/core/Store/Directory.cs -../../../external/Lucene.Net/src/core/Store/FileSwitchDirectory.cs -../../../external/Lucene.Net/src/core/Store/FSDirectory.cs -../../../external/Lucene.Net/src/core/Store/FSLockFactory.cs -../../../external/Lucene.Net/src/core/Store/IndexInput.cs -../../../external/Lucene.Net/src/core/Store/IndexOutput.cs -../../../external/Lucene.Net/src/core/Store/Lock.cs -../../../external/Lucene.Net/src/core/Store/LockFactory.cs -../../../external/Lucene.Net/src/core/Store/LockObtainFailedException.cs -../../../external/Lucene.Net/src/core/Store/LockReleaseFailedException.cs -../../../external/Lucene.Net/src/core/Store/LockStressTest.cs -../../../external/Lucene.Net/src/core/Store/LockVerifyServer.cs -../../../external/Lucene.Net/src/core/Store/MMapDirectory.cs -../../../external/Lucene.Net/src/core/Store/NativeFSLockFactory.cs -../../../external/Lucene.Net/src/core/Store/NIOFSDirectory.cs -../../../external/Lucene.Net/src/core/Store/NoLockFactory.cs -../../../external/Lucene.Net/src/core/Store/NoSuchDirectoryException.cs -../../../external/Lucene.Net/src/core/Store/RAMDirectory.cs -../../../external/Lucene.Net/src/core/Store/RAMFile.cs -../../../external/Lucene.Net/src/core/Store/RAMInputStream.cs -../../../external/Lucene.Net/src/core/Store/RAMOutputStream.cs -../../../external/Lucene.Net/src/core/Store/SimpleFSDirectory.cs -../../../external/Lucene.Net/src/core/Store/SimpleFSLockFactory.cs -../../../external/Lucene.Net/src/core/Store/SingleInstanceLockFactory.cs -../../../external/Lucene.Net/src/core/Store/VerifyingLockFactory.cs -../../../external/Lucene.Net/src/core/Support/AppSettings.cs -../../../external/Lucene.Net/src/core/Support/AttributeImplItem.cs -../../../external/Lucene.Net/src/core/Support/BitSetSupport.cs -../../../external/Lucene.Net/src/core/Support/BuildType.cs -../../../external/Lucene.Net/src/core/Support/Character.cs -../../../external/Lucene.Net/src/core/Support/CloseableThreadLocalProfiler.cs -../../../external/Lucene.Net/src/core/Support/CollectionsHelper.cs -../../../external/Lucene.Net/src/core/Support/Compare.cs -../../../external/Lucene.Net/src/core/Support/Compatibility/ConcurrentDictionary.cs -../../../external/Lucene.Net/src/core/Support/Compatibility/Func.cs -../../../external/Lucene.Net/src/core/Support/Compatibility/ISet.cs -../../../external/Lucene.Net/src/core/Support/Compatibility/SetFactory.cs -../../../external/Lucene.Net/src/core/Support/Compatibility/SortedSet.cs -../../../external/Lucene.Net/src/core/Support/Compatibility/ThreadLocal.cs -../../../external/Lucene.Net/src/core/Support/Compatibility/WrappedHashSet.cs -../../../external/Lucene.Net/src/core/Support/CRC32.cs -../../../external/Lucene.Net/src/core/Support/Cryptography.cs -../../../external/Lucene.Net/src/core/Support/Deflater.cs -../../../external/Lucene.Net/src/core/Support/Double.cs -../../../external/Lucene.Net/src/core/Support/EquatableList.cs -../../../external/Lucene.Net/src/core/Support/FileSupport.cs -../../../external/Lucene.Net/src/core/Support/GeneralKeyedCollection.cs -../../../external/Lucene.Net/src/core/Support/HashMap.cs -../../../external/Lucene.Net/src/core/Support/IChecksum.cs -../../../external/Lucene.Net/src/core/Support/Inflater.cs -../../../external/Lucene.Net/src/core/Support/IThreadRunnable.cs -../../../external/Lucene.Net/src/core/Support/Number.cs -../../../external/Lucene.Net/src/core/Support/OS.cs -../../../external/Lucene.Net/src/core/Support/SharpZipLib.cs -../../../external/Lucene.Net/src/core/Support/Single.cs -../../../external/Lucene.Net/src/core/Support/TextSupport.cs -../../../external/Lucene.Net/src/core/Support/ThreadClass.cs -../../../external/Lucene.Net/src/core/Support/ThreadLock.cs -../../../external/Lucene.Net/src/core/Support/WeakDictionary.cs -../../../external/Lucene.Net/src/core/Util/ArrayUtil.cs -../../../external/Lucene.Net/src/core/Util/Attribute.cs -../../../external/Lucene.Net/src/core/Util/AttributeSource.cs -../../../external/Lucene.Net/src/core/Util/AverageGuessMemoryModel.cs -../../../external/Lucene.Net/src/core/Util/BitUtil.cs -../../../external/Lucene.Net/src/core/Util/BitVector.cs -../../../external/Lucene.Net/src/core/Util/Cache/Cache.cs -../../../external/Lucene.Net/src/core/Util/Cache/SimpleLRUCache.cs -../../../external/Lucene.Net/src/core/Util/Cache/SimpleMapCache.cs -../../../external/Lucene.Net/src/core/Util/CloseableThreadLocal.cs -../../../external/Lucene.Net/src/core/Util/Constants.cs -../../../external/Lucene.Net/src/core/Util/DocIdBitSet.cs -../../../external/Lucene.Net/src/core/Util/FieldCacheSanityChecker.cs -../../../external/Lucene.Net/src/core/Util/IAttribute.cs -../../../external/Lucene.Net/src/core/Util/IdentityDictionary.cs -../../../external/Lucene.Net/src/core/Util/IndexableBinaryStringTools.cs -../../../external/Lucene.Net/src/core/Util/MapOfSets.cs -../../../external/Lucene.Net/src/core/Util/MemoryModel.cs -../../../external/Lucene.Net/src/core/Util/NumericUtils.cs -../../../external/Lucene.Net/src/core/Util/OpenBitSet.cs -../../../external/Lucene.Net/src/core/Util/OpenBitSetDISI.cs -../../../external/Lucene.Net/src/core/Util/OpenBitSetIterator.cs -../../../external/Lucene.Net/src/core/Util/PriorityQueue.cs -../../../external/Lucene.Net/src/core/Util/RamUsageEstimator.cs -../../../external/Lucene.Net/src/core/Util/ReaderUtil.cs -../../../external/Lucene.Net/src/core/Util/ScorerDocQueue.cs -../../../external/Lucene.Net/src/core/Util/SimpleStringInterner.cs -../../../external/Lucene.Net/src/core/Util/SmallFloat.cs -../../../external/Lucene.Net/src/core/Util/SortedVIntList.cs -../../../external/Lucene.Net/src/core/Util/SorterTemplate.cs -../../../external/Lucene.Net/src/core/Util/StringHelper.cs -../../../external/Lucene.Net/src/core/Util/StringInterner.cs -../../../external/Lucene.Net/src/core/Util/ToStringUtils.cs -../../../external/Lucene.Net/src/core/Util/UnicodeUtil.cs -../../../external/Lucene.Net/src/core/Util/Version.cs +../../../external/Lucene.Net.Light/src/core/Analysis/Analyzer.cs +../../../external/Lucene.Net.Light/src/core/Analysis/ASCIIFoldingFilter.cs +../../../external/Lucene.Net.Light/src/core/Analysis/BaseCharFilter.cs +../../../external/Lucene.Net.Light/src/core/Analysis/CachingTokenFilter.cs +../../../external/Lucene.Net.Light/src/core/Analysis/CharArraySet.cs +../../../external/Lucene.Net.Light/src/core/Analysis/CharFilter.cs +../../../external/Lucene.Net.Light/src/core/Analysis/CharReader.cs +../../../external/Lucene.Net.Light/src/core/Analysis/CharStream.cs +../../../external/Lucene.Net.Light/src/core/Analysis/CharTokenizer.cs +../../../external/Lucene.Net.Light/src/core/Analysis/ISOLatin1AccentFilter.cs +../../../external/Lucene.Net.Light/src/core/Analysis/KeywordAnalyzer.cs +../../../external/Lucene.Net.Light/src/core/Analysis/KeywordTokenizer.cs +../../../external/Lucene.Net.Light/src/core/Analysis/LengthFilter.cs +../../../external/Lucene.Net.Light/src/core/Analysis/LetterTokenizer.cs +../../../external/Lucene.Net.Light/src/core/Analysis/LowerCaseFilter.cs +../../../external/Lucene.Net.Light/src/core/Analysis/LowerCaseTokenizer.cs +../../../external/Lucene.Net.Light/src/core/Analysis/MappingCharFilter.cs +../../../external/Lucene.Net.Light/src/core/Analysis/NormalizeCharMap.cs +../../../external/Lucene.Net.Light/src/core/Analysis/NumericTokenStream.cs +../../../external/Lucene.Net.Light/src/core/Analysis/PerFieldAnalyzerWrapper.cs +../../../external/Lucene.Net.Light/src/core/Analysis/PorterStemFilter.cs +../../../external/Lucene.Net.Light/src/core/Analysis/PorterStemmer.cs +../../../external/Lucene.Net.Light/src/core/Analysis/SimpleAnalyzer.cs +../../../external/Lucene.Net.Light/src/core/Analysis/Standard/StandardAnalyzer.cs +../../../external/Lucene.Net.Light/src/core/Analysis/Standard/StandardFilter.cs +../../../external/Lucene.Net.Light/src/core/Analysis/Standard/StandardTokenizer.cs +../../../external/Lucene.Net.Light/src/core/Analysis/Standard/StandardTokenizerImpl.cs +../../../external/Lucene.Net.Light/src/core/Analysis/StopAnalyzer.cs +../../../external/Lucene.Net.Light/src/core/Analysis/StopFilter.cs +../../../external/Lucene.Net.Light/src/core/Analysis/TeeSinkTokenFilter.cs +../../../external/Lucene.Net.Light/src/core/Analysis/Token.cs +../../../external/Lucene.Net.Light/src/core/Analysis/Tokenattributes/FlagsAttribute.cs +../../../external/Lucene.Net.Light/src/core/Analysis/Tokenattributes/IFlagsAttribute.cs +../../../external/Lucene.Net.Light/src/core/Analysis/Tokenattributes/IOffsetAttribute.cs +../../../external/Lucene.Net.Light/src/core/Analysis/Tokenattributes/IPayloadAttribute.cs +../../../external/Lucene.Net.Light/src/core/Analysis/Tokenattributes/IPositionIncrementAttribute.cs +../../../external/Lucene.Net.Light/src/core/Analysis/Tokenattributes/ITermAttribute.cs +../../../external/Lucene.Net.Light/src/core/Analysis/Tokenattributes/ITypeAttribute.cs +../../../external/Lucene.Net.Light/src/core/Analysis/Tokenattributes/OffsetAttribute.cs +../../../external/Lucene.Net.Light/src/core/Analysis/Tokenattributes/PayloadAttribute.cs +../../../external/Lucene.Net.Light/src/core/Analysis/Tokenattributes/PositionIncrementAttribute.cs +../../../external/Lucene.Net.Light/src/core/Analysis/Tokenattributes/TermAttribute.cs +../../../external/Lucene.Net.Light/src/core/Analysis/Tokenattributes/TypeAttribute.cs +../../../external/Lucene.Net.Light/src/core/Analysis/TokenFilter.cs +../../../external/Lucene.Net.Light/src/core/Analysis/Tokenizer.cs +../../../external/Lucene.Net.Light/src/core/Analysis/TokenStream.cs +../../../external/Lucene.Net.Light/src/core/Analysis/WhitespaceAnalyzer.cs +../../../external/Lucene.Net.Light/src/core/Analysis/WhitespaceTokenizer.cs +../../../external/Lucene.Net.Light/src/core/Analysis/WordlistLoader.cs +../../../external/Lucene.Net.Light/src/core/Document/AbstractField.cs +../../../external/Lucene.Net.Light/src/core/Document/CompressionTools.cs +../../../external/Lucene.Net.Light/src/core/Document/DateField.cs +../../../external/Lucene.Net.Light/src/core/Document/DateTools.cs +../../../external/Lucene.Net.Light/src/core/Document/Document.cs +../../../external/Lucene.Net.Light/src/core/Document/Field.cs +../../../external/Lucene.Net.Light/src/core/Document/Fieldable.cs +../../../external/Lucene.Net.Light/src/core/Document/FieldSelector.cs +../../../external/Lucene.Net.Light/src/core/Document/FieldSelectorResult.cs +../../../external/Lucene.Net.Light/src/core/Document/LoadFirstFieldSelector.cs +../../../external/Lucene.Net.Light/src/core/Document/MapFieldSelector.cs +../../../external/Lucene.Net.Light/src/core/Document/NumberTools.cs +../../../external/Lucene.Net.Light/src/core/Document/NumericField.cs +../../../external/Lucene.Net.Light/src/core/Document/SetBasedFieldSelector.cs +../../../external/Lucene.Net.Light/src/core/Index/AbstractAllTermDocs.cs +../../../external/Lucene.Net.Light/src/core/Index/AllTermDocs.cs +../../../external/Lucene.Net.Light/src/core/Index/BufferedDeletes.cs +../../../external/Lucene.Net.Light/src/core/Index/ByteBlockPool.cs +../../../external/Lucene.Net.Light/src/core/Index/ByteSliceReader.cs +../../../external/Lucene.Net.Light/src/core/Index/ByteSliceWriter.cs +../../../external/Lucene.Net.Light/src/core/Index/CharBlockPool.cs +../../../external/Lucene.Net.Light/src/core/Index/CheckIndex.cs +../../../external/Lucene.Net.Light/src/core/Index/CompoundFileReader.cs +../../../external/Lucene.Net.Light/src/core/Index/CompoundFileWriter.cs +../../../external/Lucene.Net.Light/src/core/Index/ConcurrentMergeScheduler.cs +../../../external/Lucene.Net.Light/src/core/Index/CorruptIndexException.cs +../../../external/Lucene.Net.Light/src/core/Index/DefaultSkipListReader.cs +../../../external/Lucene.Net.Light/src/core/Index/DefaultSkipListWriter.cs +../../../external/Lucene.Net.Light/src/core/Index/DirectoryReader.cs +../../../external/Lucene.Net.Light/src/core/Index/DocConsumer.cs +../../../external/Lucene.Net.Light/src/core/Index/DocConsumerPerThread.cs +../../../external/Lucene.Net.Light/src/core/Index/DocFieldConsumer.cs +../../../external/Lucene.Net.Light/src/core/Index/DocFieldConsumerPerField.cs +../../../external/Lucene.Net.Light/src/core/Index/DocFieldConsumerPerThread.cs +../../../external/Lucene.Net.Light/src/core/Index/DocFieldConsumers.cs +../../../external/Lucene.Net.Light/src/core/Index/DocFieldConsumersPerField.cs +../../../external/Lucene.Net.Light/src/core/Index/DocFieldConsumersPerThread.cs +../../../external/Lucene.Net.Light/src/core/Index/DocFieldProcessor.cs +../../../external/Lucene.Net.Light/src/core/Index/DocFieldProcessorPerField.cs +../../../external/Lucene.Net.Light/src/core/Index/DocFieldProcessorPerThread.cs +../../../external/Lucene.Net.Light/src/core/Index/DocInverter.cs +../../../external/Lucene.Net.Light/src/core/Index/DocInverterPerField.cs +../../../external/Lucene.Net.Light/src/core/Index/DocInverterPerThread.cs +../../../external/Lucene.Net.Light/src/core/Index/DocumentsWriter.cs +../../../external/Lucene.Net.Light/src/core/Index/DocumentsWriterThreadState.cs +../../../external/Lucene.Net.Light/src/core/Index/FieldInfo.cs +../../../external/Lucene.Net.Light/src/core/Index/FieldInfos.cs +../../../external/Lucene.Net.Light/src/core/Index/FieldInvertState.cs +../../../external/Lucene.Net.Light/src/core/Index/FieldReaderException.cs +../../../external/Lucene.Net.Light/src/core/Index/FieldSortedTermVectorMapper.cs +../../../external/Lucene.Net.Light/src/core/Index/FieldsReader.cs +../../../external/Lucene.Net.Light/src/core/Index/FieldsWriter.cs +../../../external/Lucene.Net.Light/src/core/Index/FilterIndexReader.cs +../../../external/Lucene.Net.Light/src/core/Index/FormatPostingsDocsConsumer.cs +../../../external/Lucene.Net.Light/src/core/Index/FormatPostingsDocsWriter.cs +../../../external/Lucene.Net.Light/src/core/Index/FormatPostingsFieldsConsumer.cs +../../../external/Lucene.Net.Light/src/core/Index/FormatPostingsFieldsWriter.cs +../../../external/Lucene.Net.Light/src/core/Index/FormatPostingsPositionsConsumer.cs +../../../external/Lucene.Net.Light/src/core/Index/FormatPostingsPositionsWriter.cs +../../../external/Lucene.Net.Light/src/core/Index/FormatPostingsTermsConsumer.cs +../../../external/Lucene.Net.Light/src/core/Index/FormatPostingsTermsWriter.cs +../../../external/Lucene.Net.Light/src/core/Index/FreqProxFieldMergeState.cs +../../../external/Lucene.Net.Light/src/core/Index/FreqProxTermsWriter.cs +../../../external/Lucene.Net.Light/src/core/Index/FreqProxTermsWriterPerField.cs +../../../external/Lucene.Net.Light/src/core/Index/FreqProxTermsWriterPerThread.cs +../../../external/Lucene.Net.Light/src/core/Index/IndexCommit.cs +../../../external/Lucene.Net.Light/src/core/Index/IndexDeletionPolicy.cs +../../../external/Lucene.Net.Light/src/core/Index/IndexFileDeleter.cs +../../../external/Lucene.Net.Light/src/core/Index/IndexFileNameFilter.cs +../../../external/Lucene.Net.Light/src/core/Index/IndexFileNames.cs +../../../external/Lucene.Net.Light/src/core/Index/IndexReader.cs +../../../external/Lucene.Net.Light/src/core/Index/IndexWriter.cs +../../../external/Lucene.Net.Light/src/core/Index/IntBlockPool.cs +../../../external/Lucene.Net.Light/src/core/Index/InvertedDocConsumer.cs +../../../external/Lucene.Net.Light/src/core/Index/InvertedDocConsumerPerField.cs +../../../external/Lucene.Net.Light/src/core/Index/InvertedDocConsumerPerThread.cs +../../../external/Lucene.Net.Light/src/core/Index/InvertedDocEndConsumer.cs +../../../external/Lucene.Net.Light/src/core/Index/InvertedDocEndConsumerPerField.cs +../../../external/Lucene.Net.Light/src/core/Index/InvertedDocEndConsumerPerThread.cs +../../../external/Lucene.Net.Light/src/core/Index/KeepOnlyLastCommitDeletionPolicy.cs +../../../external/Lucene.Net.Light/src/core/Index/LogByteSizeMergePolicy.cs +../../../external/Lucene.Net.Light/src/core/Index/LogDocMergePolicy.cs +../../../external/Lucene.Net.Light/src/core/Index/LogMergePolicy.cs +../../../external/Lucene.Net.Light/src/core/Index/MergeDocIDRemapper.cs +../../../external/Lucene.Net.Light/src/core/Index/MergePolicy.cs +../../../external/Lucene.Net.Light/src/core/Index/MergeScheduler.cs +../../../external/Lucene.Net.Light/src/core/Index/MultiLevelSkipListReader.cs +../../../external/Lucene.Net.Light/src/core/Index/MultiLevelSkipListWriter.cs +../../../external/Lucene.Net.Light/src/core/Index/MultipleTermPositions.cs +../../../external/Lucene.Net.Light/src/core/Index/MultiReader.cs +../../../external/Lucene.Net.Light/src/core/Index/NormsWriter.cs +../../../external/Lucene.Net.Light/src/core/Index/NormsWriterPerField.cs +../../../external/Lucene.Net.Light/src/core/Index/NormsWriterPerThread.cs +../../../external/Lucene.Net.Light/src/core/Index/ParallelReader.cs +../../../external/Lucene.Net.Light/src/core/Index/Payload.cs +../../../external/Lucene.Net.Light/src/core/Index/PositionBasedTermVectorMapper.cs +../../../external/Lucene.Net.Light/src/core/Index/RawPostingList.cs +../../../external/Lucene.Net.Light/src/core/Index/ReadOnlyDirectoryReader.cs +../../../external/Lucene.Net.Light/src/core/Index/ReadOnlySegmentReader.cs +../../../external/Lucene.Net.Light/src/core/Index/ReusableStringReader.cs +../../../external/Lucene.Net.Light/src/core/Index/SegmentInfo.cs +../../../external/Lucene.Net.Light/src/core/Index/SegmentInfos.cs +../../../external/Lucene.Net.Light/src/core/Index/SegmentMergeInfo.cs +../../../external/Lucene.Net.Light/src/core/Index/SegmentMergeQueue.cs +../../../external/Lucene.Net.Light/src/core/Index/SegmentMerger.cs +../../../external/Lucene.Net.Light/src/core/Index/SegmentReader.cs +../../../external/Lucene.Net.Light/src/core/Index/SegmentTermDocs.cs +../../../external/Lucene.Net.Light/src/core/Index/SegmentTermEnum.cs +../../../external/Lucene.Net.Light/src/core/Index/SegmentTermPositions.cs +../../../external/Lucene.Net.Light/src/core/Index/SegmentTermPositionVector.cs +../../../external/Lucene.Net.Light/src/core/Index/SegmentTermVector.cs +../../../external/Lucene.Net.Light/src/core/Index/SegmentWriteState.cs +../../../external/Lucene.Net.Light/src/core/Index/SerialMergeScheduler.cs +../../../external/Lucene.Net.Light/src/core/Index/SnapshotDeletionPolicy.cs +../../../external/Lucene.Net.Light/src/core/Index/SortedTermVectorMapper.cs +../../../external/Lucene.Net.Light/src/core/Index/StaleReaderException.cs +../../../external/Lucene.Net.Light/src/core/Index/StoredFieldsWriter.cs +../../../external/Lucene.Net.Light/src/core/Index/StoredFieldsWriterPerThread.cs +../../../external/Lucene.Net.Light/src/core/Index/Term.cs +../../../external/Lucene.Net.Light/src/core/Index/TermBuffer.cs +../../../external/Lucene.Net.Light/src/core/Index/TermDocs.cs +../../../external/Lucene.Net.Light/src/core/Index/TermEnum.cs +../../../external/Lucene.Net.Light/src/core/Index/TermFreqVector.cs +../../../external/Lucene.Net.Light/src/core/Index/TermInfo.cs +../../../external/Lucene.Net.Light/src/core/Index/TermInfosReader.cs +../../../external/Lucene.Net.Light/src/core/Index/TermInfosWriter.cs +../../../external/Lucene.Net.Light/src/core/Index/TermPositions.cs +../../../external/Lucene.Net.Light/src/core/Index/TermPositionVector.cs +../../../external/Lucene.Net.Light/src/core/Index/TermsHash.cs +../../../external/Lucene.Net.Light/src/core/Index/TermsHashConsumer.cs +../../../external/Lucene.Net.Light/src/core/Index/TermsHashConsumerPerField.cs +../../../external/Lucene.Net.Light/src/core/Index/TermsHashConsumerPerThread.cs +../../../external/Lucene.Net.Light/src/core/Index/TermsHashPerField.cs +../../../external/Lucene.Net.Light/src/core/Index/TermsHashPerThread.cs +../../../external/Lucene.Net.Light/src/core/Index/TermVectorEntry.cs +../../../external/Lucene.Net.Light/src/core/Index/TermVectorEntryFreqSortedComparator.cs +../../../external/Lucene.Net.Light/src/core/Index/TermVectorMapper.cs +../../../external/Lucene.Net.Light/src/core/Index/TermVectorOffsetInfo.cs +../../../external/Lucene.Net.Light/src/core/Index/TermVectorsReader.cs +../../../external/Lucene.Net.Light/src/core/Index/TermVectorsTermsWriter.cs +../../../external/Lucene.Net.Light/src/core/Index/TermVectorsTermsWriterPerField.cs +../../../external/Lucene.Net.Light/src/core/Index/TermVectorsTermsWriterPerThread.cs +../../../external/Lucene.Net.Light/src/core/Index/TermVectorsWriter.cs +../../../external/Lucene.Net.Light/src/core/LucenePackage.cs +../../../external/Lucene.Net.Light/src/core/LZOCompressor.cs +../../../external/Lucene.Net.Light/src/core/Messages/INLSException.cs +../../../external/Lucene.Net.Light/src/core/Messages/Message.cs +../../../external/Lucene.Net.Light/src/core/Messages/MessageImpl.cs +../../../external/Lucene.Net.Light/src/core/Messages/NLS.cs +../../../external/Lucene.Net.Light/src/core/QueryParser/CharStream.cs +../../../external/Lucene.Net.Light/src/core/QueryParser/FastCharStream.cs +../../../external/Lucene.Net.Light/src/core/QueryParser/MultiFieldQueryParser.cs +../../../external/Lucene.Net.Light/src/core/QueryParser/ParseException.cs +../../../external/Lucene.Net.Light/src/core/QueryParser/QueryParser.cs +../../../external/Lucene.Net.Light/src/core/QueryParser/QueryParserConstants.cs +../../../external/Lucene.Net.Light/src/core/QueryParser/QueryParserTokenManager.cs +../../../external/Lucene.Net.Light/src/core/QueryParser/Token.cs +../../../external/Lucene.Net.Light/src/core/QueryParser/TokenMgrError.cs +../../../external/Lucene.Net.Light/src/core/Search/BooleanClause.cs +../../../external/Lucene.Net.Light/src/core/Search/BooleanQuery.cs +../../../external/Lucene.Net.Light/src/core/Search/BooleanScorer.cs +../../../external/Lucene.Net.Light/src/core/Search/BooleanScorer2.cs +../../../external/Lucene.Net.Light/src/core/Search/CachingSpanFilter.cs +../../../external/Lucene.Net.Light/src/core/Search/CachingWrapperFilter.cs +../../../external/Lucene.Net.Light/src/core/Search/Collector.cs +../../../external/Lucene.Net.Light/src/core/Search/ComplexExplanation.cs +../../../external/Lucene.Net.Light/src/core/Search/ConjunctionScorer.cs +../../../external/Lucene.Net.Light/src/core/Search/ConstantScoreQuery.cs +../../../external/Lucene.Net.Light/src/core/Search/DefaultSimilarity.cs +../../../external/Lucene.Net.Light/src/core/Search/DisjunctionMaxQuery.cs +../../../external/Lucene.Net.Light/src/core/Search/DisjunctionMaxScorer.cs +../../../external/Lucene.Net.Light/src/core/Search/DisjunctionSumScorer.cs +../../../external/Lucene.Net.Light/src/core/Search/DocIdSet.cs +../../../external/Lucene.Net.Light/src/core/Search/DocIdSetIterator.cs +../../../external/Lucene.Net.Light/src/core/Search/ExactPhraseScorer.cs +../../../external/Lucene.Net.Light/src/core/Search/Explanation.cs +../../../external/Lucene.Net.Light/src/core/Search/FieldCache.cs +../../../external/Lucene.Net.Light/src/core/Search/FieldCacheImpl.cs +../../../external/Lucene.Net.Light/src/core/Search/FieldCacheRangeFilter.cs +../../../external/Lucene.Net.Light/src/core/Search/FieldCacheTermsFilter.cs +../../../external/Lucene.Net.Light/src/core/Search/FieldComparator.cs +../../../external/Lucene.Net.Light/src/core/Search/FieldComparatorSource.cs +../../../external/Lucene.Net.Light/src/core/Search/FieldDoc.cs +../../../external/Lucene.Net.Light/src/core/Search/FieldDocSortedHitQueue.cs +../../../external/Lucene.Net.Light/src/core/Search/FieldValueHitQueue.cs +../../../external/Lucene.Net.Light/src/core/Search/Filter.cs +../../../external/Lucene.Net.Light/src/core/Search/FilteredDocIdSet.cs +../../../external/Lucene.Net.Light/src/core/Search/FilteredDocIdSetIterator.cs +../../../external/Lucene.Net.Light/src/core/Search/FilteredQuery.cs +../../../external/Lucene.Net.Light/src/core/Search/FilteredTermEnum.cs +../../../external/Lucene.Net.Light/src/core/Search/FilterManager.cs +../../../external/Lucene.Net.Light/src/core/Search/Function/ByteFieldSource.cs +../../../external/Lucene.Net.Light/src/core/Search/Function/CustomScoreProvider.cs +../../../external/Lucene.Net.Light/src/core/Search/Function/CustomScoreQuery.cs +../../../external/Lucene.Net.Light/src/core/Search/Function/DocValues.cs +../../../external/Lucene.Net.Light/src/core/Search/Function/FieldCacheSource.cs +../../../external/Lucene.Net.Light/src/core/Search/Function/FieldScoreQuery.cs +../../../external/Lucene.Net.Light/src/core/Search/Function/FloatFieldSource.cs +../../../external/Lucene.Net.Light/src/core/Search/Function/IntFieldSource.cs +../../../external/Lucene.Net.Light/src/core/Search/Function/OrdFieldSource.cs +../../../external/Lucene.Net.Light/src/core/Search/Function/ReverseOrdFieldSource.cs +../../../external/Lucene.Net.Light/src/core/Search/Function/ShortFieldSource.cs +../../../external/Lucene.Net.Light/src/core/Search/Function/ValueSource.cs +../../../external/Lucene.Net.Light/src/core/Search/Function/ValueSourceQuery.cs +../../../external/Lucene.Net.Light/src/core/Search/FuzzyQuery.cs +../../../external/Lucene.Net.Light/src/core/Search/FuzzyTermEnum.cs +../../../external/Lucene.Net.Light/src/core/Search/HitQueue.cs +../../../external/Lucene.Net.Light/src/core/Search/IndexSearcher.cs +../../../external/Lucene.Net.Light/src/core/Search/MatchAllDocsQuery.cs +../../../external/Lucene.Net.Light/src/core/Search/MultiPhraseQuery.cs +../../../external/Lucene.Net.Light/src/core/Search/MultiSearcher.cs +../../../external/Lucene.Net.Light/src/core/Search/MultiTermQuery.cs +../../../external/Lucene.Net.Light/src/core/Search/MultiTermQueryWrapperFilter.cs +../../../external/Lucene.Net.Light/src/core/Search/NumericRangeFilter.cs +../../../external/Lucene.Net.Light/src/core/Search/NumericRangeQuery.cs +../../../external/Lucene.Net.Light/src/core/Search/ParallelMultiSearcher.cs +../../../external/Lucene.Net.Light/src/core/Search/Payloads/AveragePayloadFunction.cs +../../../external/Lucene.Net.Light/src/core/Search/Payloads/MaxPayloadFunction.cs +../../../external/Lucene.Net.Light/src/core/Search/Payloads/MinPayloadFunction.cs +../../../external/Lucene.Net.Light/src/core/Search/Payloads/PayloadFunction.cs +../../../external/Lucene.Net.Light/src/core/Search/Payloads/PayloadNearQuery.cs +../../../external/Lucene.Net.Light/src/core/Search/Payloads/PayloadSpanUtil.cs +../../../external/Lucene.Net.Light/src/core/Search/Payloads/PayloadTermQuery.cs +../../../external/Lucene.Net.Light/src/core/Search/PhrasePositions.cs +../../../external/Lucene.Net.Light/src/core/Search/PhraseQuery.cs +../../../external/Lucene.Net.Light/src/core/Search/PhraseQueue.cs +../../../external/Lucene.Net.Light/src/core/Search/PhraseScorer.cs +../../../external/Lucene.Net.Light/src/core/Search/PositiveScoresOnlyCollector.cs +../../../external/Lucene.Net.Light/src/core/Search/PrefixFilter.cs +../../../external/Lucene.Net.Light/src/core/Search/PrefixQuery.cs +../../../external/Lucene.Net.Light/src/core/Search/PrefixTermEnum.cs +../../../external/Lucene.Net.Light/src/core/Search/Query.cs +../../../external/Lucene.Net.Light/src/core/Search/QueryTermVector.cs +../../../external/Lucene.Net.Light/src/core/Search/QueryWrapperFilter.cs +../../../external/Lucene.Net.Light/src/core/Search/ReqExclScorer.cs +../../../external/Lucene.Net.Light/src/core/Search/ReqOptSumScorer.cs +../../../external/Lucene.Net.Light/src/core/Search/ScoreCachingWrappingScorer.cs +../../../external/Lucene.Net.Light/src/core/Search/ScoreDoc.cs +../../../external/Lucene.Net.Light/src/core/Search/Scorer.cs +../../../external/Lucene.Net.Light/src/core/Search/Searchable.cs +../../../external/Lucene.Net.Light/src/core/Search/Searcher.cs +../../../external/Lucene.Net.Light/src/core/Search/Similarity.cs +../../../external/Lucene.Net.Light/src/core/Search/SimilarityDelegator.cs +../../../external/Lucene.Net.Light/src/core/Search/SingleTermEnum.cs +../../../external/Lucene.Net.Light/src/core/Search/SloppyPhraseScorer.cs +../../../external/Lucene.Net.Light/src/core/Search/Sort.cs +../../../external/Lucene.Net.Light/src/core/Search/SortField.cs +../../../external/Lucene.Net.Light/src/core/Search/SpanFilter.cs +../../../external/Lucene.Net.Light/src/core/Search/SpanFilterResult.cs +../../../external/Lucene.Net.Light/src/core/Search/SpanQueryFilter.cs +../../../external/Lucene.Net.Light/src/core/Search/Spans/FieldMaskingSpanQuery.cs +../../../external/Lucene.Net.Light/src/core/Search/Spans/NearSpansOrdered.cs +../../../external/Lucene.Net.Light/src/core/Search/Spans/NearSpansUnordered.cs +../../../external/Lucene.Net.Light/src/core/Search/Spans/SpanFirstQuery.cs +../../../external/Lucene.Net.Light/src/core/Search/Spans/SpanNearQuery.cs +../../../external/Lucene.Net.Light/src/core/Search/Spans/SpanNotQuery.cs +../../../external/Lucene.Net.Light/src/core/Search/Spans/SpanOrQuery.cs +../../../external/Lucene.Net.Light/src/core/Search/Spans/SpanQuery.cs +../../../external/Lucene.Net.Light/src/core/Search/Spans/Spans.cs +../../../external/Lucene.Net.Light/src/core/Search/Spans/SpanScorer.cs +../../../external/Lucene.Net.Light/src/core/Search/Spans/SpanTermQuery.cs +../../../external/Lucene.Net.Light/src/core/Search/Spans/SpanWeight.cs +../../../external/Lucene.Net.Light/src/core/Search/Spans/TermSpans.cs +../../../external/Lucene.Net.Light/src/core/Search/TermQuery.cs +../../../external/Lucene.Net.Light/src/core/Search/TermRangeFilter.cs +../../../external/Lucene.Net.Light/src/core/Search/TermRangeQuery.cs +../../../external/Lucene.Net.Light/src/core/Search/TermRangeTermEnum.cs +../../../external/Lucene.Net.Light/src/core/Search/TermScorer.cs +../../../external/Lucene.Net.Light/src/core/Search/TimeLimitingCollector.cs +../../../external/Lucene.Net.Light/src/core/Search/TopDocs.cs +../../../external/Lucene.Net.Light/src/core/Search/TopDocsCollector.cs +../../../external/Lucene.Net.Light/src/core/Search/TopFieldCollector.cs +../../../external/Lucene.Net.Light/src/core/Search/TopFieldDocs.cs +../../../external/Lucene.Net.Light/src/core/Search/TopScoreDocCollector.cs +../../../external/Lucene.Net.Light/src/core/Search/Weight.cs +../../../external/Lucene.Net.Light/src/core/Search/WildcardQuery.cs +../../../external/Lucene.Net.Light/src/core/Search/WildcardTermEnum.cs +../../../external/Lucene.Net.Light/src/core/Store/AlreadyClosedException.cs +../../../external/Lucene.Net.Light/src/core/Store/BufferedIndexInput.cs +../../../external/Lucene.Net.Light/src/core/Store/BufferedIndexOutput.cs +../../../external/Lucene.Net.Light/src/core/Store/CheckSumIndexInput.cs +../../../external/Lucene.Net.Light/src/core/Store/CheckSumIndexOutput.cs +../../../external/Lucene.Net.Light/src/core/Store/Directory.cs +../../../external/Lucene.Net.Light/src/core/Store/FileSwitchDirectory.cs +../../../external/Lucene.Net.Light/src/core/Store/FSDirectory.cs +../../../external/Lucene.Net.Light/src/core/Store/FSLockFactory.cs +../../../external/Lucene.Net.Light/src/core/Store/IndexInput.cs +../../../external/Lucene.Net.Light/src/core/Store/IndexOutput.cs +../../../external/Lucene.Net.Light/src/core/Store/Lock.cs +../../../external/Lucene.Net.Light/src/core/Store/LockFactory.cs +../../../external/Lucene.Net.Light/src/core/Store/LockObtainFailedException.cs +../../../external/Lucene.Net.Light/src/core/Store/LockReleaseFailedException.cs +../../../external/Lucene.Net.Light/src/core/Store/LockStressTest.cs +../../../external/Lucene.Net.Light/src/core/Store/LockVerifyServer.cs +../../../external/Lucene.Net.Light/src/core/Store/MMapDirectory.cs +../../../external/Lucene.Net.Light/src/core/Store/NativeFSLockFactory.cs +../../../external/Lucene.Net.Light/src/core/Store/NIOFSDirectory.cs +../../../external/Lucene.Net.Light/src/core/Store/NoLockFactory.cs +../../../external/Lucene.Net.Light/src/core/Store/NoSuchDirectoryException.cs +../../../external/Lucene.Net.Light/src/core/Store/RAMDirectory.cs +../../../external/Lucene.Net.Light/src/core/Store/RAMFile.cs +../../../external/Lucene.Net.Light/src/core/Store/RAMInputStream.cs +../../../external/Lucene.Net.Light/src/core/Store/RAMOutputStream.cs +../../../external/Lucene.Net.Light/src/core/Store/SimpleFSDirectory.cs +../../../external/Lucene.Net.Light/src/core/Store/SimpleFSLockFactory.cs +../../../external/Lucene.Net.Light/src/core/Store/SingleInstanceLockFactory.cs +../../../external/Lucene.Net.Light/src/core/Store/VerifyingLockFactory.cs +../../../external/Lucene.Net.Light/src/core/Support/AppSettings.cs +../../../external/Lucene.Net.Light/src/core/Support/AttributeImplItem.cs +../../../external/Lucene.Net.Light/src/core/Support/BitSetSupport.cs +../../../external/Lucene.Net.Light/src/core/Support/BuildType.cs +../../../external/Lucene.Net.Light/src/core/Support/Character.cs +../../../external/Lucene.Net.Light/src/core/Support/CloseableThreadLocalProfiler.cs +../../../external/Lucene.Net.Light/src/core/Support/CollectionsHelper.cs +../../../external/Lucene.Net.Light/src/core/Support/Compare.cs +../../../external/Lucene.Net.Light/src/core/Support/Compatibility/ConcurrentDictionary.cs +../../../external/Lucene.Net.Light/src/core/Support/Compatibility/Func.cs +../../../external/Lucene.Net.Light/src/core/Support/Compatibility/ISet.cs +../../../external/Lucene.Net.Light/src/core/Support/Compatibility/SetFactory.cs +../../../external/Lucene.Net.Light/src/core/Support/Compatibility/SortedSet.cs +../../../external/Lucene.Net.Light/src/core/Support/Compatibility/ThreadLocal.cs +../../../external/Lucene.Net.Light/src/core/Support/Compatibility/WrappedHashSet.cs +../../../external/Lucene.Net.Light/src/core/Support/CRC32.cs +../../../external/Lucene.Net.Light/src/core/Support/Cryptography.cs +../../../external/Lucene.Net.Light/src/core/Support/Deflater.cs +../../../external/Lucene.Net.Light/src/core/Support/Double.cs +../../../external/Lucene.Net.Light/src/core/Support/EquatableList.cs +../../../external/Lucene.Net.Light/src/core/Support/FileSupport.cs +../../../external/Lucene.Net.Light/src/core/Support/GeneralKeyedCollection.cs +../../../external/Lucene.Net.Light/src/core/Support/HashMap.cs +../../../external/Lucene.Net.Light/src/core/Support/IChecksum.cs +../../../external/Lucene.Net.Light/src/core/Support/Inflater.cs +../../../external/Lucene.Net.Light/src/core/Support/IThreadRunnable.cs +../../../external/Lucene.Net.Light/src/core/Support/Number.cs +../../../external/Lucene.Net.Light/src/core/Support/OS.cs +../../../external/Lucene.Net.Light/src/core/Support/SharpZipLib.cs +../../../external/Lucene.Net.Light/src/core/Support/Single.cs +../../../external/Lucene.Net.Light/src/core/Support/TextSupport.cs +../../../external/Lucene.Net.Light/src/core/Support/ThreadClass.cs +../../../external/Lucene.Net.Light/src/core/Support/ThreadLock.cs +../../../external/Lucene.Net.Light/src/core/Support/WeakDictionary.cs +../../../external/Lucene.Net.Light/src/core/Util/ArrayUtil.cs +../../../external/Lucene.Net.Light/src/core/Util/Attribute.cs +../../../external/Lucene.Net.Light/src/core/Util/AttributeSource.cs +../../../external/Lucene.Net.Light/src/core/Util/AverageGuessMemoryModel.cs +../../../external/Lucene.Net.Light/src/core/Util/BitUtil.cs +../../../external/Lucene.Net.Light/src/core/Util/BitVector.cs +../../../external/Lucene.Net.Light/src/core/Util/Cache/Cache.cs +../../../external/Lucene.Net.Light/src/core/Util/Cache/SimpleLRUCache.cs +../../../external/Lucene.Net.Light/src/core/Util/Cache/SimpleMapCache.cs +../../../external/Lucene.Net.Light/src/core/Util/CloseableThreadLocal.cs +../../../external/Lucene.Net.Light/src/core/Util/Constants.cs +../../../external/Lucene.Net.Light/src/core/Util/DocIdBitSet.cs +../../../external/Lucene.Net.Light/src/core/Util/FieldCacheSanityChecker.cs +../../../external/Lucene.Net.Light/src/core/Util/IAttribute.cs +../../../external/Lucene.Net.Light/src/core/Util/IdentityDictionary.cs +../../../external/Lucene.Net.Light/src/core/Util/IndexableBinaryStringTools.cs +../../../external/Lucene.Net.Light/src/core/Util/MapOfSets.cs +../../../external/Lucene.Net.Light/src/core/Util/MemoryModel.cs +../../../external/Lucene.Net.Light/src/core/Util/NumericUtils.cs +../../../external/Lucene.Net.Light/src/core/Util/OpenBitSet.cs +../../../external/Lucene.Net.Light/src/core/Util/OpenBitSetDISI.cs +../../../external/Lucene.Net.Light/src/core/Util/OpenBitSetIterator.cs +../../../external/Lucene.Net.Light/src/core/Util/PriorityQueue.cs +../../../external/Lucene.Net.Light/src/core/Util/RamUsageEstimator.cs +../../../external/Lucene.Net.Light/src/core/Util/ReaderUtil.cs +../../../external/Lucene.Net.Light/src/core/Util/ScorerDocQueue.cs +../../../external/Lucene.Net.Light/src/core/Util/SimpleStringInterner.cs +../../../external/Lucene.Net.Light/src/core/Util/SmallFloat.cs +../../../external/Lucene.Net.Light/src/core/Util/SortedVIntList.cs +../../../external/Lucene.Net.Light/src/core/Util/SorterTemplate.cs +../../../external/Lucene.Net.Light/src/core/Util/StringHelper.cs +../../../external/Lucene.Net.Light/src/core/Util/StringInterner.cs +../../../external/Lucene.Net.Light/src/core/Util/ToStringUtils.cs +../../../external/Lucene.Net.Light/src/core/Util/UnicodeUtil.cs +../../../external/Lucene.Net.Light/src/core/Util/Version.cs diff --git a/mcs/class/test-helpers/NetworkHelpers.cs b/mcs/class/test-helpers/NetworkHelpers.cs index 02709af2ba7..fcb63961d23 100644 --- a/mcs/class/test-helpers/NetworkHelpers.cs +++ b/mcs/class/test-helpers/NetworkHelpers.cs @@ -14,5 +14,9 @@ namespace MonoTests.Helpers { l.Stop(); return port; } + public static IPEndPoint LocalEphemeralEndPoint () + { + return new IPEndPoint (IPAddress.Loopback, FindFreePort()); + } } } diff --git a/mcs/mcs/generic.cs b/mcs/mcs/generic.cs index fb7b6c79942..369ee5db92e 100644 --- a/mcs/mcs/generic.cs +++ b/mcs/mcs/generic.cs @@ -1114,14 +1114,20 @@ namespace Mono.CSharp { // bool found; if (!TypeSpecComparer.Override.IsEqual (BaseType, other.BaseType)) { - if (other.targs == null) - return false; - found = false; - foreach (var otarg in other.targs) { - if (TypeSpecComparer.Override.IsEqual (BaseType, otarg)) { - found = true; - break; + if (other.targs != null) { + foreach (var otarg in other.targs) { + if (TypeSpecComparer.Override.IsEqual (BaseType, otarg)) { + found = true; + break; + } + } + } else if (targs != null) { + foreach (var targ in targs) { + if (TypeSpecComparer.Override.IsEqual (targ, other.BaseType)) { + found = true; + break; + } } } @@ -1164,18 +1170,25 @@ namespace Mono.CSharp { // Check interfaces implementation <- definition if (other.InterfacesDefined != null) { - if (InterfacesDefined == null) - return false; - // // Iterate over inflated interfaces // foreach (var oiface in other.Interfaces) { found = false; - foreach (var iface in Interfaces) { - if (TypeSpecComparer.Override.IsEqual (iface, oiface)) { - found = true; - break; + + if (InterfacesDefined != null) { + foreach (var iface in Interfaces) { + if (TypeSpecComparer.Override.IsEqual (iface, oiface)) { + found = true; + break; + } + } + } else if (targs != null) { + foreach (var targ in targs) { + if (TypeSpecComparer.Override.IsEqual (targ, oiface)) { + found = true; + break; + } } } @@ -1186,18 +1199,30 @@ namespace Mono.CSharp { // Check type parameters implementation -> definition if (targs != null) { - if (other.targs == null) - return false; - foreach (var targ in targs) { found = false; - foreach (var otarg in other.targs) { - if (TypeSpecComparer.Override.IsEqual (targ, otarg)) { - found = true; - break; + + if (other.targs != null) { + foreach (var otarg in other.targs) { + if (TypeSpecComparer.Override.IsEqual (targ, otarg)) { + found = true; + break; + } } } + if (other.InterfacesDefined != null && !found) { + foreach (var iface in other.Interfaces) { + if (TypeSpecComparer.Override.IsEqual (iface, targ)) { + found = true; + break; + } + } + } + + if (!found) + found = TypeSpecComparer.Override.IsEqual (targ, other.BaseType); + if (!found) return false; } diff --git a/mcs/mcs/property.cs b/mcs/mcs/property.cs index 4b7b21e4887..718fe669922 100644 --- a/mcs/mcs/property.cs +++ b/mcs/mcs/property.cs @@ -619,8 +619,7 @@ namespace Mono.CSharp GetSignatureForError ()); } } else if ((ModFlags & Modifiers.OVERRIDE) == 0 && - (Get == null && (Set.ModFlags & Modifiers.AccessibilityMask) != 0) || - (Set == null && (Get.ModFlags & Modifiers.AccessibilityMask) != 0)) { + ((Get == null && (Set.ModFlags & Modifiers.AccessibilityMask) != 0) || (Set == null && (Get.ModFlags & Modifiers.AccessibilityMask) != 0))) { Report.Error (276, Location, "`{0}': accessibility modifiers on accessors may only be used if the property or indexer has both a get and a set accessor", GetSignatureForError ()); diff --git a/mcs/tests/gtest-631.cs b/mcs/tests/gtest-631.cs new file mode 100644 index 00000000000..32939c958a2 --- /dev/null +++ b/mcs/tests/gtest-631.cs @@ -0,0 +1,22 @@ +public class BaseClass +{ + public void DoStuff (TInput stuff) where TInput: TSource + { + } +} + +public class MyClass: BaseClass, MyInterface +{ + public static void Main () + { + } +} + +public interface TInterface +{ +} + +public interface MyInterface +{ + void DoStuff (TInput stuff) where TInput: TInterface; +} \ No newline at end of file diff --git a/mcs/tests/gtest-632.cs b/mcs/tests/gtest-632.cs new file mode 100644 index 00000000000..59cbafb7908 --- /dev/null +++ b/mcs/tests/gtest-632.cs @@ -0,0 +1,22 @@ +public class BaseClass +{ + public void DoStuff (TInput stuff) where TInput: TSource + { + } +} + +public class MyClass: BaseClass, MyInterface +{ + public static void Main () + { + } +} + +public class TInterface +{ +} + +public interface MyInterface +{ + void DoStuff (TInput stuff) where TInput: TInterface; +} \ No newline at end of file diff --git a/mcs/tests/test-926.cs b/mcs/tests/test-926.cs new file mode 100644 index 00000000000..dfb7b3bd8fd --- /dev/null +++ b/mcs/tests/test-926.cs @@ -0,0 +1,32 @@ +class Program +{ + public static void Main () + { + System.Console.WriteLine("Hi"); + } +} + +public class MyClass +{ + protected internal virtual int this[int i] + { + protected get + { + return 2; + } + set + { + } + } +} + +public class Derived : MyClass +{ + protected internal override int this[int i] + { + protected get + { + return 4; + } + } +} \ No newline at end of file diff --git a/mcs/tests/ver-il-net_4_5.xml b/mcs/tests/ver-il-net_4_5.xml index b306de4869a..d8b153527fc 100644 --- a/mcs/tests/ver-il-net_4_5.xml +++ b/mcs/tests/ver-il-net_4_5.xml @@ -3053,6 +3053,25 @@ + + + + 88 + + + 54 + + + 2459 + + + 7 + + + 24 + + + @@ -19609,6 +19628,53 @@ + + + + 2 + + + 7 + + + + + 2 + + + 8 + + + 7 + + + + + + + 2 + + + 7 + + + + + 2 + + + 8 + + + 7 + + + + + 7 + + + @@ -51584,6 +51650,35 @@ + + + + 12 + + + 7 + + + + + 10 + + + 2 + + + 7 + + + + + 10 + + + 7 + + + diff --git a/mono/io-layer/processes.c b/mono/io-layer/processes.c index cdb191f3171..a57d8aaeb7a 100644 --- a/mono/io-layer/processes.c +++ b/mono/io-layer/processes.c @@ -54,12 +54,15 @@ #endif #endif -#if defined(PLATFORM_MACOSX) || defined(__OpenBSD__) +#if defined(PLATFORM_MACOSX) || defined(__OpenBSD__) || defined(__FreeBSD__) #include #include # if !defined(__OpenBSD__) # include # endif +# if defined(__FreeBSD__) +# include /* struct kinfo_proc */ +# endif #endif #ifdef PLATFORM_SOLARIS @@ -115,7 +118,7 @@ static guint32 process_wait (gpointer handle, guint32 timeout, gboolean alertabl static void process_close (gpointer handle, gpointer data); static gboolean is_pid_valid (pid_t pid); -#if !(defined(PLATFORM_MACOSX) || defined(__OpenBSD__) || defined(__HAIKU__)) +#if !(defined(PLATFORM_MACOSX) || defined(__OpenBSD__) || defined(__FreeBSD__) || defined(__HAIKU__)) static FILE * open_process_map (int pid, const char *mode); #endif @@ -175,7 +178,7 @@ is_pid_valid (pid_t pid) { gboolean result = FALSE; -#if defined(PLATFORM_MACOSX) || defined(__OpenBSD__) +#if defined(PLATFORM_MACOSX) || defined(__OpenBSD__) || defined(__FreeBSD__) if (((kill(pid, 0) == 0) || (errno == EPERM)) && pid != 0) result = TRUE; #elif defined(__HAIKU__) @@ -1448,7 +1451,7 @@ static GSList *load_modules (void) return(ret); } -#elif defined(__OpenBSD__) +#elif defined(__OpenBSD__) || defined(__FreeBSD__) #include static int load_modules_callback (struct dl_phdr_info *info, size_t size, void *ptr) { @@ -1670,6 +1673,7 @@ static gboolean match_procname_to_modulename (char *procname, char *modulename) if (procname == NULL || modulename == NULL) return (FALSE); + DEBUG ("%s: procname=\"%s\", modulename=\"%s\"", __func__, procname, modulename); pname = mono_path_resolve_symlinks (procname); mname = mono_path_resolve_symlinks (modulename); @@ -1698,10 +1702,11 @@ static gboolean match_procname_to_modulename (char *procname, char *modulename) g_free (pname); g_free (mname); + DEBUG ("%s: result is %d", __func__, result); return result; } -#if !(defined(PLATFORM_MACOSX) || defined(__OpenBSD__) || defined(__HAIKU__)) +#if !(defined(PLATFORM_MACOSX) || defined(__OpenBSD__) || defined(__FreeBSD__) || defined(__HAIKU__)) static FILE * open_process_map (int pid, const char *mode) { @@ -1724,11 +1729,13 @@ open_process_map (int pid, const char *mode) } #endif +static char *get_process_name_from_proc (pid_t pid); + gboolean EnumProcessModules (gpointer process, gpointer *modules, guint32 size, guint32 *needed) { WapiHandle_process *process_handle; -#if !defined(__OpenBSD__) && !defined(PLATFORM_MACOSX) +#if !defined(__OpenBSD__) && !defined(PLATFORM_MACOSX) && !defined(__FreeBSD__) FILE *fp; #endif GSList *mods = NULL; @@ -1752,6 +1759,7 @@ gboolean EnumProcessModules (gpointer process, gpointer *modules, if (WAPI_IS_PSEUDO_PROCESS_HANDLE (process)) { pid = WAPI_HANDLE_TO_PID (process); + proc_name = get_process_name_from_proc (pid); } else { process_handle = lookup_process_handle (process); if (!process_handle) { @@ -1763,7 +1771,7 @@ gboolean EnumProcessModules (gpointer process, gpointer *modules, proc_name = process_handle->proc_name; } -#if defined(PLATFORM_MACOSX) || defined(__OpenBSD__) || defined(__HAIKU__) +#if defined(PLATFORM_MACOSX) || defined(__OpenBSD__) || defined(__FreeBSD__) || defined(__HAIKU__) mods = load_modules (); if (!proc_name) { modules[0] = NULL; @@ -1818,7 +1826,7 @@ gboolean EnumProcessModules (gpointer process, gpointer *modules, static char * get_process_name_from_proc (pid_t pid) { -#if defined(__OpenBSD__) +#if defined(__OpenBSD__) || defined(__FreeBSD__) int mib [6]; size_t size; struct kinfo_proc *pi; @@ -1876,6 +1884,30 @@ get_process_name_from_proc (pid_t pid) free(pi); #endif +#elif defined(__FreeBSD__) + mib [0] = CTL_KERN; + mib [1] = KERN_PROC; + mib [2] = KERN_PROC_PID; + mib [3] = pid; + if (sysctl(mib, 4, NULL, &size, NULL, 0) < 0) { + DEBUG ("%s: sysctl() failed: %d", __func__, errno); + return(ret); + } + + if ((pi = malloc(size)) == NULL) + return(ret); + + if (sysctl (mib, 4, pi, &size, NULL, 0) < 0) { + if (errno == ENOMEM) { + free(pi); + DEBUG ("%s: Didn't allocate enough memory for kproc info", __func__); + } + return(ret); + } + + if (strlen (pi->ki_comm) > 0) + ret = g_strdup (pi->ki_comm); + free(pi); #elif defined(__OpenBSD__) mib [0] = CTL_KERN; mib [1] = KERN_PROC; @@ -1885,8 +1917,10 @@ get_process_name_from_proc (pid_t pid) mib [5] = 0; retry: - if (sysctl(mib, 6, NULL, &size, NULL, 0) < 0) + if (sysctl(mib, 6, NULL, &size, NULL, 0) < 0) { + DEBUG ("%s: sysctl() failed: %d", __func__, errno); return(ret); + } if ((pi = malloc(size)) == NULL) return(ret); @@ -1902,8 +1936,13 @@ retry: return(ret); } +#if defined(__OpenBSD__) if (strlen (pi->p_comm) > 0) ret = g_strdup (pi->p_comm); +#elif defined(__FreeBSD__) + if (strlen (pi->ki_comm) > 0) + ret = g_strdup (pi->ki_comm); +#endif free(pi); #elif defined(__HAIKU__) @@ -2010,7 +2049,7 @@ get_module_name (gpointer process, gpointer module, char *procname_ext = NULL; glong len; gsize bytes; -#if !defined(__OpenBSD__) && !defined(PLATFORM_MACOSX) +#if !defined(__OpenBSD__) && !defined(PLATFORM_MACOSX) && !defined(__FreeBSD__) FILE *fp; #endif GSList *mods = NULL; @@ -2044,7 +2083,7 @@ get_module_name (gpointer process, gpointer module, } /* Look up the address in /proc//maps */ -#if defined(PLATFORM_MACOSX) || defined(__OpenBSD__) || defined(__HAIKU__) +#if defined(PLATFORM_MACOSX) || defined(__OpenBSD__) || defined(__FreeBSD__) || defined(__HAIKU__) mods = load_modules (); #else fp = open_process_map (pid, "r"); @@ -2150,7 +2189,7 @@ GetModuleInformation (gpointer process, gpointer module, { WapiHandle_process *process_handle; pid_t pid; -#if !defined(__OpenBSD__) && !defined(PLATFORM_MACOSX) +#if !defined(__OpenBSD__) && !defined(PLATFORM_MACOSX) && !defined(__FreeBSD__) FILE *fp; #endif GSList *mods = NULL; @@ -2181,7 +2220,7 @@ GetModuleInformation (gpointer process, gpointer module, proc_name = g_strdup (process_handle->proc_name); } -#if defined(PLATFORM_MACOSX) || defined(__OpenBSD__) || defined(__HAIKU__) +#if defined(PLATFORM_MACOSX) || defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__HAIKU__) mods = load_modules (); #else /* Look up the address in /proc//maps */ diff --git a/mono/metadata/class-internals.h b/mono/metadata/class-internals.h index 441b0a4271c..25a116171ab 100644 --- a/mono/metadata/class-internals.h +++ b/mono/metadata/class-internals.h @@ -1223,6 +1223,9 @@ mono_loader_get_last_error (void); void mono_loader_clear_error (void); +void +mono_loader_assert_no_error (void); + void mono_reflection_init (void); diff --git a/mono/metadata/class.c b/mono/metadata/class.c index ca7567985ff..058c0c982d2 100644 --- a/mono/metadata/class.c +++ b/mono/metadata/class.c @@ -280,7 +280,7 @@ done: 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 ()); + mono_loader_assert_no_error (); return res; } @@ -1335,7 +1335,7 @@ mono_class_find_enum_basetype (MonoClass *class, MonoError *error) mono_error_set_type_load_class (error, class, "Could not find base type"); fail: - g_assert (!mono_loader_get_last_error ()); + mono_loader_assert_no_error (); return NULL; } @@ -5744,7 +5744,7 @@ mono_class_create_from_typedef (MonoImage *image, guint32 type_token, MonoError if (mono_metadata_token_table (type_token) != MONO_TABLE_TYPEDEF || tidx > tt->rows) { mono_error_set_bad_image (error, image, "Invalid typedef token %x", type_token); - g_assert (!mono_loader_get_last_error ()); + mono_loader_assert_no_error (); return NULL; } @@ -5752,7 +5752,7 @@ mono_class_create_from_typedef (MonoImage *image, guint32 type_token, MonoError if ((class = mono_internal_hash_table_lookup (&image->class_cache, GUINT_TO_POINTER (type_token)))) { mono_loader_unlock (); - g_assert (!mono_loader_get_last_error ()); + mono_loader_assert_no_error (); return class; } @@ -5841,7 +5841,7 @@ mono_class_create_from_typedef (MonoImage *image, guint32 type_token, MonoError mono_class_set_failure (class, MONO_EXCEPTION_TYPE_LOAD, g_strdup (mono_error_get_message (error))); mono_loader_unlock (); mono_profiler_class_loaded (class, MONO_PROFILE_FAILED); - g_assert (!mono_loader_get_last_error ()); + mono_loader_assert_no_error (); return NULL; } } @@ -5913,7 +5913,7 @@ mono_class_create_from_typedef (MonoImage *image, guint32 type_token, MonoError mono_class_set_failure (class, MONO_EXCEPTION_TYPE_LOAD, g_strdup (mono_error_get_message (error))); mono_loader_unlock (); mono_profiler_class_loaded (class, MONO_PROFILE_FAILED); - g_assert (!mono_loader_get_last_error ()); + mono_loader_assert_no_error (); return NULL; } class->cast_class = class->element_class = mono_class_from_mono_type (enum_basetype); @@ -5928,7 +5928,7 @@ mono_class_create_from_typedef (MonoImage *image, guint32 type_token, MonoError mono_class_set_failure (class, MONO_EXCEPTION_TYPE_LOAD, g_strdup_printf ("Could not load generic parameter constrains due to %s", mono_error_get_message (error))); mono_loader_unlock (); mono_profiler_class_loaded (class, MONO_PROFILE_FAILED); - g_assert (!mono_loader_get_last_error ()); + mono_loader_assert_no_error (); return NULL; } @@ -5940,7 +5940,7 @@ mono_class_create_from_typedef (MonoImage *image, guint32 type_token, MonoError mono_loader_unlock (); mono_profiler_class_loaded (class, MONO_PROFILE_OK); - g_assert (!mono_loader_get_last_error ()); + mono_loader_assert_no_error (); return class; @@ -5948,7 +5948,7 @@ parent_failure: mono_class_setup_mono_type (class); mono_loader_unlock (); mono_profiler_class_loaded (class, MONO_PROFILE_FAILED); - g_assert (!mono_loader_get_last_error ()); + mono_loader_assert_no_error (); return NULL; } @@ -6546,7 +6546,7 @@ mono_type_retrieve_from_typespec (MonoImage *image, guint32 type_spec, MonoGener MonoType *inflated = inflate_generic_type (NULL, t, context, error); if (!mono_error_ok (error)) { - g_assert (!mono_loader_get_last_error ()); + mono_loader_assert_no_error (); return NULL; } @@ -7408,7 +7408,7 @@ mono_type_get_checked (MonoImage *image, guint32 type_token, MonoGenericContext MonoClass *class = mono_class_get_checked (image, type_token, error); if (!class) { - g_assert (!mono_loader_get_last_error ()); + mono_loader_assert_no_error (); return NULL; } @@ -7419,7 +7419,7 @@ mono_type_get_checked (MonoImage *image, guint32 type_token, MonoGenericContext type = mono_type_retrieve_from_typespec (image, type_token, context, &inflated, error); if (!type) { - g_assert (!mono_loader_get_last_error ()); + mono_loader_assert_no_error (); return NULL; } diff --git a/mono/metadata/culture-info-tables.h b/mono/metadata/culture-info-tables.h index f1fd30c1360..7d7b7588e7d 100644 --- a/mono/metadata/culture-info-tables.h +++ b/mono/metadata/culture-info-tables.h @@ -38,77 +38,77 @@ static const DateTimeFormatEntry datetime_format_entries [] = { {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}}, + {10033, 10046, 10049, {10052, 10060, 10068, 2368, 2375, 2383, 10075}, {10083, 10088, 10093, 2411, 2415, 2419, 10097}, {2023, 2428, 2430, 2432, 2430, 2434, 2436}, {7370, 7378, 4887, 2459, 2465, 2469, 2474, 10102, 2486, 2496, 2504, 2513, 0}, {7370, 7378, 4887, 2459, 2465, 2469, 2474, 10102, 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, {1692,5888,0,0,0,0,0,0,0,0,0,0,0,0},{10110,10128,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,10151,1692,0,0,0,0,0,0,0},{1242,10163,10179,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, 10221, 10226, {10230, 10236, 10246, 10252, 10263, 10273, 10278}, {10288, 10292, 10296, 10300, 10305, 10309, 10313}, {2018, 2018, 2023, 10317, 2018, 7736, 7736}, {10320, 10325, 10332, 10337, 10343, 10350, 10358, 10365, 10374, 10381, 10386, 10393, 0}, {10320, 10325, 10332, 10337, 10343, 10350, 10358, 10365, 10374, 10381, 10386, 10393, 0}, {10401, 10405, 3761, 10410, 3730, 10414, 10418, 10422, 10427, 10431, 10435, 10439, 0}, {10401, 10405, 3761, 10410, 3730, 10414, 10418, 10422, 10427, 10431, 10435, 10439, 0}, 0, 1, 691, 187, {4753,4762,1156,1167,0,0,0,0,0,0,0,0,0,0},{10443,1242,10460,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, 10478, 10496, {10514, 10525, 10538, 10547, 10554, 10567, 10576}, {10514, 10525, 10538, 10547, 10554, 10567, 10576}, {2023, 2428, 2430, 3705, 2430, 2434, 2023}, {10585, 10596, 10607, 10616, 10627, 10634, 10641, 10654, 10663, 10674, 10687, 10698, 0}, {10585, 10596, 10607, 10616, 10627, 10634, 10641, 10654, 10663, 10674, 10687, 10698, 0}, {10585, 10596, 10607, 10616, 10627, 10634, 10641, 10654, 10663, 10674, 10687, 10698, 0}, {10585, 10596, 10607, 10616, 10627, 10634, 10641, 10654, 10663, 10674, 10687, 10698, 0}, 0, 0, 185, 187, {198,189,1692,0,0,0,0,0,0,0,0,0,0,0},{10709,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, {10723, 10730, 10736, 10743, 10748, 10754, 10760}, {10766, 10770, 10774, 10778, 10782, 10786, 10790}, {2428, 2023, 2023, 10794, 4442, 3987, 2023}, {10796, 10804, 10813, 2696, 10819, 2706, 2711, 10823, 2723, 2733, 2741, 10831, 0}, {10796, 10804, 10813, 2696, 10819, 2706, 2711, 10823, 2723, 2733, 2741, 10831, 0}, {2759, 2763, 3761, 2772, 10819, 2776, 2780, 10840, 2788, 2792, 2796, 10844, 0}, {2759, 2763, 3761, 2772, 10819, 2776, 2780, 10840, 2788, 2792, 2796, 10844, 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, 10848, 10853, {10858, 10871, 10890, 10907, 10920, 10933, 10950}, {10963, 8775, 8780, 8785, 8790, 8795, 8800}, {10968, 8808, 8805, 8811, 8814, 8808, 8811}, {10971, 10984, 10995, 11012, 11027, 11042, 11057, 11070, 11085, 11102, 11117, 11134, 0}, {11149, 11160, 11173, 11188, 11201, 11214, 11227, 11238, 11251, 11266, 11279, 11298, 0}, {11311, 11318, 11325, 11332, 11339, 11346, 11353, 11360, 11367, 11374, 11381, 11388, 0}, {11311, 11318, 11325, 11332, 11339, 11346, 11353, 11360, 11367, 11374, 11381, 11388, 0}, 0, 1, 691, 187, {1156,1167,1692,0,0,0,0,0,0,0,0,0,0,0},{11395,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},{11413,0,0,0,0,0,0,0}}, + {289, 11429, 11442, {11455, 11470, 11491, 11506, 11519, 11532, 10950}, {421, 426, 11547, 436, 11552, 446, 451}, {456, 459, 11557, 465, 468, 459, 465}, {11560, 11577, 11586, 11601, 521, 11618, 11633, 11646, 11661, 11678, 11699, 11716, 0}, {11731, 11748, 11761, 11778, 9017, 11797, 11812, 11825, 11838, 11853, 11876, 11895, 0}, {11908, 11915, 11922, 11929, 521, 11936, 11943, 11950, 11957, 11964, 11971, 11978, 0}, {11908, 11915, 11922, 11929, 521, 11936, 11943, 11950, 11957, 11964, 11971, 11978, 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, 11985, 11990, {11995, 12003, 12014, 12020, 12026, 12035, 1985}, {9246, 9250, 2415, 12041, 9262, 9267, 12045}, {9275, 9277, 12049, 9281, 9283, 9277, 9281}, {2438, 2445, 9672, 2459, 2465, 12051, 12057, 12063, 2486, 2496, 2504, 2513, 0}, {2438, 2445, 9672, 2459, 2465, 12051, 12057, 12063, 2486, 2496, 2504, 2513, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 12070, 2550, 2554, 2558, 2562, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 12070, 2550, 2554, 2558, 2562, 0}, 0, 1, 691, 187, {4753,4762,2266,1156,12074,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}}, + {12084, 12093, 12098, {12103, 12114, 12125, 12136, 12147, 12158, 12164}, {2018, 9924, 2430, 4442, 2016, 10794, 2436}, {2018, 9924, 2430, 4442, 2016, 10794, 2436}, {12173, 12181, 12190, 12197, 4898, 12204, 12210, 2479, 2486, 12216, 2504, 12225, 0}, {12173, 12181, 12190, 12197, 4898, 12204, 12210, 2479, 2486, 12216, 2504, 12225, 0}, {12235, 12240, 12190, 2534, 4898, 12204, 12210, 2546, 12246, 2554, 2558, 12251, 0}, {12235, 12240, 12190, 2534, 4898, 12204, 12210, 2546, 12246, 2554, 2558, 12251, 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, 12256, 12273, {12287, 12298, 12308, 12317, 12328, 12340, 12351}, {12361, 12364, 12367, 12370, 12373, 12376, 12379}, {2023, 2018, 2432, 2430, 7736, 2018, 2023}, {12382, 12392, 12403, 12409, 12418, 12424, 12432, 12440, 12448, 12459, 12468, 12478, 0}, {12488, 12498, 2453, 12509, 12518, 12524, 12532, 12540, 12548, 12559, 12568, 12578, 0}, {12588, 12594, 12403, 12600, 12418, 12605, 12611, 12617, 4190, 12622, 4201, 12627, 0}, {12588, 12594, 12403, 12600, 12418, 12605, 12611, 12617, 4190, 12622, 4201, 12627, 0}, 0, 1, 691, 187, {9517,9539,12632,0,0,0,0,0,0,0,0,0,0,0},{12644,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},{12671,0,0,0,0,0,0,0}}, + {12689, 12701, 11990, {12707, 12719, 12731, 12743, 12757, 12772, 12785}, {12799, 12802, 12805, 12808, 12811, 12814, 9660}, {2023, 2018, 12817, 2430, 4442, 2018, 9669}, {12819, 12826, 12834, 12840, 12849, 12858, 12868, 12874, 12885, 12895, 12902, 12912, 0}, {12819, 12826, 12834, 12840, 12849, 12858, 12868, 12874, 12885, 12895, 12902, 12912, 0}, {12920, 12926, 12931, 12936, 12941, 12946, 12953, 12959, 12965, 12971, 12977, 12984, 0}, {12920, 12926, 12931, 12936, 12941, 12946, 12953, 12959, 12965, 12971, 12977, 12984, 0}, 2, 1, 2566, 187, {1692,2568,0,0,0,0,0,0,0,0,0,0,0,0},{12991,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},{13013,0,0,0,0,0,0,0}}, + {1, 13028, 13040, {13052, 13067, 13082, 13097, 13114, 13133, 13144}, {13155, 13162, 13169, 13176, 13183, 13190, 13197}, {0, 0, 0, 0, 0, 0, 0}, {13204, 13215, 8845, 13228, 8867, 13239, 13246, 8892, 13253, 13268, 13281, 13292, 0}, {13204, 13215, 8845, 13228, 8867, 13239, 13246, 8892, 13253, 13268, 13281, 13292, 0}, {13305, 13312, 13319, 13326, 8867, 13239, 13246, 13333, 13340, 13347, 13354, 13361, 0}, {13305, 13312, 13319, 13326, 8867, 13239, 13246, 13333, 13340, 13347, 13354, 13361, 0}, 0, 0, 691, 187, {1156,1167,4762,1128,189,0,0,0,0,0,0,0,0,0},{13368,13386,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, 13405, 13425, {13442, 13455, 13468, 13484, 13501, 13516, 13525}, {13442, 13455, 13468, 13484, 13501, 13516, 13525}, {13534, 13537, 13540, 13543, 13546, 13549, 13552}, {13555, 13568, 13579, 13588, 13599, 13604, 13613, 13624, 13631, 13646, 13657, 13670, 0}, {13683, 13698, 13579, 13588, 13711, 13604, 13718, 13624, 13631, 13646, 13657, 13670, 0}, {13555, 13568, 13579, 13588, 13599, 13604, 13613, 13624, 13631, 13646, 13657, 13670, 0}, {13555, 13568, 13579, 13588, 13599, 13604, 13613, 13624, 13631, 13646, 13657, 13670, 0}, 0, 6, 185, 187, {198,189,0,0,0,0,0,0,0,0,0,0,0,0},{13731,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, 13750, 13753, {13756, 13769, 13779, 13788, 13798, 13809, 13820}, {13832, 13835, 13840, 13845, 13850, 13855, 13860}, {13832, 13865, 13868, 13871, 13874, 13877, 13880}, {13883, 13892, 13901, 13910, 13919, 13928, 13937, 13946, 13955, 13964, 13974, 13984, 0}, {13994, 14003, 14012, 14021, 14030, 14039, 14048, 14057, 14066, 14075, 14085, 14095, 0}, {14105, 14111, 14117, 14123, 14129, 14135, 14141, 14147, 14153, 14159, 14166, 14173, 0}, {14105, 14111, 14117, 14123, 14129, 14135, 14141, 14147, 14153, 14159, 14166, 14173, 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, 14180, 14204, {14228, 14241, 14262, 14281, 14302, 14321, 14334}, {14345, 14352, 14359, 14366, 14373, 14380, 14387}, {14394, 14397, 14397, 14400, 14403, 14406, 14411}, {14414, 14429, 14444, 14453, 14464, 14475, 14488, 14501, 14516, 14535, 14554, 14571, 0}, {14590, 14607, 14624, 14635, 14648, 14661, 14676, 14691, 14708, 14729, 14750, 14769, 0}, {14790, 14797, 14804, 14811, 14818, 14825, 14832, 14839, 14846, 14853, 14860, 14867, 0}, {14790, 14797, 14804, 14811, 14818, 14825, 14832, 14839, 14846, 14853, 14860, 14867, 0}, 0, 1, 691, 187, {1156,1167,9796,198,14874,3582,1692,0,0,0,0,0,0,0},{3870,1207,13731,5505,14885,14896,14908,14925,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, {14943, 14949, 14963, 14986, 15000, 15016, 15023}, {15032, 15035, 15040, 15046, 15050, 7736, 15055}, {6617, 6605, 6607, 6609, 6611, 6613, 6615}, {15059, 15066, 10332, 15073, 3730, 15079, 15085, 15091, 15098, 15107, 15115, 15122, 0}, {15129, 15136, 15143, 15148, 15154, 15158, 15163, 15168, 15175, 15184, 15192, 15199, 0}, {15206, 8135, 2530, 2534, 15154, 15210, 15214, 15218, 15222, 2554, 15226, 15230, 0}, {15206, 8135, 2530, 2534, 15154, 15210, 15214, 15218, 15222, 2554, 15226, 15230, 0}, 0, 0, 691, 187, {1156,1167,4762,189,1692,0,0,0,0,0,0,0,0,0},{15234,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}}, + {15256, 1929, 1932, {15271, 15279, 15290, 15300, 15311, 15320, 15329}, {15339, 15343, 15347, 15351, 15355, 15359, 15363}, {15367, 12817, 12817, 12817, 2432, 2432, 2436}, {15369, 15379, 15387, 15395, 15403, 15411, 15418, 15426, 15434, 15441, 15447, 15454, 0}, {15462, 15473, 15482, 15491, 15500, 15509, 15517, 15526, 15535, 15543, 15550, 15558, 0}, {15567, 15572, 4845, 15577, 15582, 15587, 15592, 15597, 15602, 15607, 15612, 15617, 0}, {15567, 15572, 4845, 15577, 15582, 15587, 15592, 15597, 15602, 15607, 15612, 15617, 0}, 2, 1, 185, 187, {1681,1692,0,0,0,0,0,0,0,0,0,0,0,0},{15622,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},{15655,0,0,0,0,0,0,0}}, + {289, 15672, 15693, {15710, 331, 352, 8714, 15723, 15740, 15751}, {15764, 15772, 15780, 15786, 15794, 15802, 15810}, {456, 459, 462, 465, 468, 459, 465}, {15818, 484, 501, 510, 15833, 15840, 15849, 542, 555, 574, 591, 606, 0}, {15818, 484, 501, 510, 15833, 15840, 15849, 542, 555, 574, 591, 606, 0}, {15858, 15866, 15874, 639, 15833, 15882, 15890, 647, 655, 665, 673, 683, 0}, {15858, 15866, 15874, 639, 15833, 15882, 15890, 647, 655, 665, 673, 683, 0}, 0, 1, 691, 187, {1156,1167,15898,0,0,0,0,0,0,0,0,0,0,0},{13731,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, {15915, 15922, 15933, 15942, 15951, 15958, 15969}, {15979, 15983, 15987, 15991, 15995, 15998, 16002}, {0, 0, 0, 0, 0, 0, 0}, {16006, 16016, 16025, 16033, 16042, 16055, 16067, 16074, 16081, 16088, 16098, 16110, 0}, {16006, 16016, 16025, 16033, 16042, 16055, 16067, 16074, 16081, 16088, 16098, 16110, 0}, {16123, 16127, 16131, 16135, 16139, 16143, 16147, 16151, 16155, 16159, 16163, 16167, 0}, {16123, 16127, 16131, 16135, 16139, 16143, 16147, 16151, 16155, 16159, 16163, 16167, 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, {16171, 16176, 16182, 16192, 16204, 16212, 16223}, {16232, 16236, 16240, 16244, 16248, 16252, 16256}, {0, 0, 0, 0, 0, 0, 0}, {16260, 16270, 16280, 16287, 16294, 2706, 16299, 16306, 16313, 16322, 16330, 16338, 0}, {16260, 16270, 16280, 16287, 16294, 2706, 16299, 16306, 16313, 16322, 16330, 16338, 0}, {2759, 2763, 16002, 16346, 16350, 2776, 2780, 16354, 2788, 2792, 2796, 16358, 0}, {2759, 2763, 16002, 16346, 16350, 2776, 2780, 16354, 2788, 2792, 2796, 16358, 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, {16362, 16368, 16379, 16192, 16204, 16212, 16223}, {16389, 16393, 16397, 16244, 16248, 16252, 16256}, {2023, 2428, 16401, 2430, 2023, 5694, 2428}, {16403, 16413, 16424, 16431, 16440, 16446, 16452, 16460, 16468, 16479, 16489, 16498, 0}, {16507, 16270, 16516, 16522, 16294, 2706, 16299, 16306, 16529, 16322, 16330, 16338, 0}, {2759, 2763, 16539, 2772, 16350, 2776, 2780, 16354, 2788, 2792, 2796, 16358, 0}, {2759, 2763, 16539, 2772, 16350, 2776, 2780, 16354, 2788, 2792, 2796, 16358, 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, 16543, 16547, {16551, 16558, 16566, 16574, 16583, 16593, 16600}, {2652, 16609, 2658, 16612, 2664, 16615, 2670}, {2023, 2428, 2673, 3705, 2673, 3989, 2023}, {16618, 16627, 16637, 2696, 10819, 16643, 16649, 16655, 2723, 2733, 2741, 10831, 0}, {16618, 16627, 16637, 2696, 10819, 16643, 16649, 16655, 2723, 2733, 2741, 10831, 0}, {2759, 2763, 3761, 2772, 10819, 2776, 2780, 2784, 2788, 2792, 2796, 10844, 0}, {2759, 2763, 3761, 2772, 10819, 2776, 2780, 2784, 2788, 2792, 2796, 10844, 0}, 0, 0, 185, 187, {1681,1735,1692,16664,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, {16676, 16692, 16717, 16745, 16773, 16801, 16829}, {16848, 16858, 16868, 16878, 16888, 16898, 16908}, {16918, 16922, 16926, 16922, 16930, 16934, 16938}, {16942, 16964, 16992, 17008, 17027, 17043, 17062, 17081, 17103, 17134, 17162, 17187, 0}, {16942, 16964, 16992, 17008, 17027, 17043, 17062, 17081, 17103, 17134, 17162, 17187, 0}, {17215, 17225, 17235, 17245, 17255, 17265, 17275, 17285, 17295, 17305, 17315, 17325, 0}, {17215, 17225, 17235, 17245, 17255, 17265, 17275, 17285, 17295, 17305, 17315, 17325, 0}, 0, 1, 691, 187, {1156,1167,7419,1176,4762,4753,1692,0,0,0,0,0,0,0},{17335,17369,17402,3870,17436,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, 17448, 17453, {5932, 17458, 17469, 17479, 17489, 17499, 17513}, {17525, 17529, 17534, 17539, 17543, 17548, 17553}, {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, 17557, 17573, {17583, 17602, 17621, 17643, 17662, 17684, 17709}, {17728, 17738, 17748, 17761, 17771, 17784, 17800}, {17810, 17814, 17821, 17828, 17835, 17842, 17849}, {17853, 17869, 17888, 17904, 17923, 17930, 17940, 17956, 17972, 17991, 18013, 18029, 0}, {17853, 17869, 17888, 17904, 17923, 17930, 17940, 17956, 17972, 17991, 18013, 18029, 0}, {18048, 18055, 17888, 18065, 17923, 17930, 18081, 18094, 18101, 18114, 18130, 18140, 0}, {18048, 18055, 17888, 18065, 17923, 17930, 18081, 18094, 18101, 18114, 18130, 18140, 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}}, + {18153, 18167, 18170, {18173, 18182, 18191, 18201, 18211, 18221, 18233}, {18241, 18246, 18250, 18254, 18258, 18263, 18268}, {18272, 2430, 2430, 9924, 18272, 18275, 2023}, {18278, 18285, 18290, 2696, 18296, 18302, 18309, 18315, 18323, 18333, 18341, 18350, 0}, {18278, 18285, 18290, 2696, 18296, 18302, 18309, 18315, 18323, 18333, 18341, 18350, 0}, {2759, 18360, 3761, 2772, 18364, 18368, 18373, 18377, 18381, 18385, 2796, 18389, 0}, {2759, 18360, 3761, 2772, 18364, 18368, 18373, 18377, 18381, 18385, 2796, 18389, 0}, 0, 0, 185, 187, {198,1692,18394,7410,2277,0,0,0,0,0,0,0,0,0},{18403,18428,10151,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}}, + {18447, 18460, 18465, {18470, 18482, 18493, 18507, 18519, 18529, 18539}, {18550, 18555, 18560, 18565, 18570, 18575, 18580}, {2023, 3989, 2428, 6293, 2673, 16401, 2436}, {18585, 18602, 18615, 18629, 18642, 18655, 18668, 18682, 18694, 18708, 18722, 18736, 0}, {18585, 18602, 18615, 18629, 18642, 18655, 18668, 18682, 18694, 18708, 18722, 18736, 0}, {18749, 18756, 18761, 18766, 18770, 18775, 18780, 18785, 18790, 18797, 18802, 18808, 0}, {18749, 18756, 18761, 18766, 18770, 18775, 18780, 18785, 18790, 18797, 18802, 18808, 0}, 2, 1, 691, 187, {1156,1167,4762,1692,0,0,0,0,0,0,0,0,0,0},{18813,18837,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, {18855, 18869, 18879, 18890, 18904, 18915, 18926}, {18939, 18944, 18949, 18956, 18962, 18968, 18974}, {2673, 2436, 2428, 7736, 2673, 12817, 2023}, {18979, 18987, 18995, 19002, 19011, 19021, 19031, 19037, 19045, 19060, 19078, 19086, 0}, {18979, 18987, 18995, 19002, 19011, 19021, 19031, 19037, 19045, 19060, 19078, 19086, 0}, {19094, 19098, 18995, 19104, 19108, 19113, 19031, 19119, 19124, 19131, 19138, 19143, 0}, {19094, 19098, 18995, 19104, 19108, 19113, 19031, 19119, 19124, 19131, 19138, 19143, 0}, 2, 0, 185, 187, {198,189,2286,4762,1692,0,0,0,0,0,0,0,0,0},{1242,5505,10151,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, 19148, 19151, {19155, 19160, 10736, 10743, 19166, 19173, 10760}, {19180, 19184, 10774, 10778, 19188, 10786, 10790}, {12817, 15367, 2023, 10794, 4442, 3987, 2023}, {10796, 10804, 19192, 2696, 10819, 2776, 19196, 19202, 2723, 2733, 2741, 19207, 0}, {10796, 10804, 19192, 2696, 10819, 2776, 19196, 19202, 2723, 2733, 2741, 19207, 0}, {2759, 2763, 19192, 2772, 10819, 2776, 2780, 19216, 2788, 2792, 2796, 16358, 0}, {2759, 2763, 19192, 2772, 10819, 2776, 2780, 19216, 2788, 2792, 2796, 16358, 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, 19220, 19242, {19266, 19281, 19298, 19315, 19332, 19349, 19358}, {19369, 19375, 19381, 19387, 19393, 19399, 19405}, {19411, 19414, 8811, 8811, 19417, 19411, 8811}, {19420, 19433, 19444, 19457, 19468, 19479, 19492, 19503, 19514, 19531, 19542, 19555, 0}, {19420, 19433, 19444, 19457, 19468, 19479, 19492, 19503, 19514, 19531, 19542, 19555, 0}, {19574, 19582, 19590, 19598, 19606, 19614, 19622, 19630, 19638, 19646, 19654, 19662, 0}, {19574, 19582, 19590, 19598, 19606, 19614, 19622, 19630, 19638, 19646, 19654, 19662, 0}, 0, 0, 2566, 187, {6488,0,0,0,0,0,0,0,0,0,0,0,0,0},{19672,19690,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}}, + {19709, 19718, 19744, {19772, 19779, 19786, 19793, 19800, 19807, 19814}, {19772, 19779, 19786, 19793, 19800, 19807, 19814}, {19411, 19414, 19821, 19821, 19417, 19411, 19824}, {19827, 19840, 501, 19855, 521, 19868, 19877, 542, 19886, 19903, 19918, 19931, 0}, {19827, 19840, 501, 19855, 521, 19868, 19877, 542, 19886, 19903, 19918, 19931, 0}, {19946, 15866, 15874, 639, 521, 19954, 19962, 647, 19970, 665, 19978, 683, 0}, {19946, 15866, 15874, 639, 521, 19954, 19962, 647, 19970, 665, 19978, 683, 0}, 0, 0, 2566, 187, {19986,0,0,0,0,0,0,0,0,0,0,0,0,0},{19995,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},{20016,0,0,0,0,0,0,0}}, + {20032, 1929, 1932, {20040, 20049, 20058, 20066, 20075, 20084, 20091}, {20100, 20103, 20106, 20109, 20112, 20116, 20119}, {6607, 6609, 6611, 6613, 12817, 15367, 6605}, {10796, 10804, 20122, 20128, 10819, 2706, 19196, 20135, 16313, 20142, 16330, 20149, 0}, {10796, 10804, 20122, 20128, 10819, 2706, 19196, 20135, 16313, 20142, 16330, 20149, 0}, {2759, 2763, 19192, 2772, 10819, 2776, 2780, 20157, 2788, 2792, 2796, 10844, 0}, {2759, 2763, 19192, 2772, 10819, 2776, 2780, 20157, 2788, 2792, 2796, 10844, 0}, 0, 0, 185, 187, {3773,3782,3789,3798,1735,1692,3809,0,0,0,0,0,0,0},{20161,20181,222,10709,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}}, + {20195, 1929, 1932, {20202, 20212, 20221, 20230, 20241, 20251, 20256}, {20263, 20269, 20274, 20279, 20284, 10786, 20288}, {20293, 2673, 2023, 7736, 2018, 3987, 2023}, {15059, 15066, 10332, 15073, 3730, 20295, 20300, 20305, 15098, 15107, 15115, 15122, 0}, {15059, 15066, 10332, 15073, 3730, 20295, 20300, 20305, 15098, 15107, 15115, 15122, 0}, {20312, 20317, 3761, 2772, 3730, 20295, 20300, 20321, 10770, 2792, 20325, 20330, 0}, {20312, 20317, 3761, 2772, 3730, 20295, 20300, 20321, 10770, 2792, 20325, 20330, 0}, 0, 0, 691, 187, {1156,0,0,0,0,0,0,0,0,0,0,0,0,0},{20334,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, 20352, 20380, {20402, 20421, 20440, 20465, 20484, 20518, 20543}, {20562, 20572, 20582, 20598, 20608, 20633, 20649}, {20659, 20663, 20670, 20674, 20681, 20688, 20695}, {20699, 20727, 20761, 20777, 20796, 20803, 20813, 20829, 20845, 20876, 20898, 20920, 0}, {20699, 20727, 20761, 20777, 20796, 20803, 20813, 20829, 20845, 20876, 20898, 20920, 0}, {20699, 20727, 20761, 20777, 20796, 20803, 20813, 20829, 20845, 20876, 20898, 20920, 0}, {20699, 20727, 20761, 20777, 20796, 20803, 20813, 20829, 20845, 20876, 20898, 20920, 0}, 0, 1, 2566, 187, {1139,2293,1128,20945,20958,0,0,0,0,0,0,0,0,0},{5505,1242,0,0,0,0,0,0,0,0},{4288,2321,20973,20982,0,0,0,0,0,0,0,0},{4302,2337,20990,21002,0,0,0,0,0},{278,0,0,0,0,0,0,0}}, + {1, 1929, 1932, {21013, 21029, 21048, 21070, 21089, 21108, 21136}, {21158, 21166, 21177, 21191, 21202, 21213, 21233}, {21247, 21251, 21258, 21265, 21275, 21282, 21295}, {21302, 21318, 21337, 21350, 21369, 21376, 21386, 21402, 21415, 21431, 21450, 21466, 0}, {21302, 21318, 21337, 21350, 21369, 21376, 21386, 21402, 21415, 21431, 21450, 21466, 0}, {21302, 21318, 21337, 21350, 21369, 21376, 21386, 21402, 21415, 21431, 21450, 21466, 0}, {21302, 21318, 21337, 21350, 21369, 21376, 21386, 21402, 21415, 21431, 21450, 21466, 0}, 0, 0, 2566, 187, {1139,2293,4762,1128,1692,0,0,0,0,0,0,0,0,0},{10460,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, {21482, 21501, 21520, 21542, 21561, 21583, 21608}, {21627, 21637, 21647, 21660, 21670, 21683, 21699}, {21709, 21713, 21720, 21727, 21734, 21741, 21748}, {21752, 21780, 21808, 21824, 21843, 21850, 21860, 21876, 21892, 21920, 21942, 21964, 0}, {21752, 21780, 21808, 21824, 21843, 21850, 21860, 21876, 21892, 21920, 21942, 21964, 0}, {21989, 22008, 21808, 21824, 21843, 21850, 21860, 22027, 22034, 22050, 22066, 22076, 0}, {21989, 22008, 21808, 21824, 21843, 21850, 21860, 22027, 22034, 22050, 22066, 22076, 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, 22089, {22092, 22111, 22130, 22155, 22174, 22196, 22221}, {22240, 22250, 22260, 22276, 22286, 22299, 22315}, {22325, 22329, 22336, 22340, 22347, 22354, 22361}, {22365, 22387, 22418, 22440, 22459, 22466, 22476, 22492, 22508, 22539, 22561, 22583, 0}, {22365, 22387, 22418, 22440, 22459, 22466, 22476, 22492, 22508, 22539, 22561, 22583, 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, 22608, 22633, {22658, 22677, 22699, 22724, 22740, 22762, 22781}, {22791, 22798, 22805, 22812, 22819, 22826, 22833}, {22791, 22798, 22805, 22812, 22819, 22826, 22833}, {22837, 22853, 22878, 22897, 22916, 22923, 22936, 22949, 22968, 22999, 23024, 23046, 0}, {22837, 22853, 22878, 22897, 22916, 22923, 22936, 23071, 22968, 22999, 23024, 23046, 0}, {23090, 23098, 23112, 23126, 22916, 22923, 22936, 23137, 23145, 23159, 23170, 23178, 0}, {23090, 23098, 23112, 23126, 22916, 22923, 22936, 23137, 23145, 23159, 23170, 23178, 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, {23189, 23211, 23233, 23258, 23280, 23305, 23333}, {23355, 23365, 23375, 23388, 23398, 23411, 23427}, {23437, 23441, 23448, 23452, 23459, 23466, 23473}, {23477, 23493, 23518, 23537, 23559, 23566, 23579, 23592, 23611, 23642, 23667, 23686, 0}, {23477, 23493, 23518, 23537, 23559, 23566, 23711, 23592, 23611, 23642, 23667, 23686, 0}, {23724, 23731, 23518, 23747, 23559, 23566, 23711, 23592, 23763, 23785, 23801, 23811, 0}, {23724, 23731, 23518, 23747, 23559, 23566, 23711, 23592, 23763, 23785, 23801, 23811, 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, {23827, 23846, 23865, 23887, 23906, 23928, 23953}, {23972, 23982, 23992, 24005, 24015, 24028, 24044}, {24054, 24058, 24065, 24072, 24079, 24086, 24093}, {24097, 24113, 24138, 24157, 24179, 24186, 24199, 24212, 24231, 24259, 24284, 24306, 0}, {24097, 24113, 24138, 24157, 24179, 24186, 24199, 24212, 24231, 24259, 24284, 24306, 0}, {24331, 24339, 24359, 24366, 24179, 24383, 24390, 24398, 24406, 24429, 24446, 24460, 0}, {24331, 24339, 24359, 24366, 24179, 24383, 24390, 24398, 24406, 24429, 24446, 24460, 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}}, + {20032, 1929, 1932, {24477, 24505, 24539, 24567, 24595, 24626, 24663}, {24691, 24704, 24723, 24739, 24752, 24771, 24790}, {24800, 24807, 24814, 24821, 24828, 24841, 24848}, {24852, 24871, 24899, 24921, 24940, 24953, 24963, 24976, 25001, 25032, 25057, 25073, 0}, {24852, 24871, 24899, 24921, 24940, 24953, 24963, 24976, 25001, 25032, 25057, 25073, 0}, {25092, 25102, 25121, 25131, 24940, 24953, 24963, 25147, 25154, 25179, 25195, 25205, 0}, {25092, 25102, 25121, 25131, 24940, 24953, 24963, 25147, 25154, 25179, 25195, 25205, 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,20973,20982,0,0,0,0,0,0,0,0},{4302,2337,20990,21002,0,0,0,0,0},{278,0,0,0,0,0,0,0}}, + {289, 25218, 25246, {25268, 25287, 25306, 25331, 25350, 25384, 25409}, {25428, 20572, 20582, 20598, 25438, 25463, 20649}, {0, 0, 0, 0, 0, 0, 0}, {25479, 25504, 25535, 25551, 20796, 20803, 20813, 25570, 25586, 25617, 25639, 25661, 0}, {25479, 25504, 25535, 25551, 20796, 20803, 20813, 25570, 25586, 25617, 25639, 25661, 0}, {25686, 25699, 25535, 25551, 20796, 20803, 20813, 25718, 25725, 25741, 25757, 25767, 0}, {25686, 25699, 25535, 25551, 20796, 20803, 20813, 25718, 25725, 25741, 25757, 25767, 0}, 0, 0, 2566, 187, {1128,0,0,0,0,0,0,0,0,0,0,0,0,0},{25780,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},{25799,25807,0,0,0,0,0,0}}, + {1, 1929, 1932, {17583, 17602, 25817, 17643, 17662, 17684, 17709}, {17728, 17738, 25839, 17761, 17771, 17784, 17800}, {17810, 17814, 17821, 17828, 17835, 17842, 17849}, {25852, 25877, 17888, 25908, 25927, 17930, 25934, 25947, 25963, 25988, 26010, 26038, 0}, {25852, 25877, 17888, 25908, 25927, 17930, 25934, 25947, 25963, 25988, 26010, 26038, 0}, {26060, 26073, 17888, 26092, 25927, 17930, 25934, 26108, 26115, 26134, 26150, 26172, 0}, {26060, 26073, 17888, 26092, 25927, 17930, 25934, 26108, 26115, 26134, 26150, 26172, 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, 26188, 26193, {26198, 26205, 26216, 26229, 26242, 26253, 26266}, {26277, 26282, 26287, 26292, 26297, 26302, 26307}, {6605, 6607, 6609, 6611, 6613, 6615, 6617}, {26312, 26338, 26366, 26396, 26426, 26452, 26482, 26508, 26536, 26560, 26588, 26625, 0}, {26312, 26338, 26366, 26396, 26426, 26452, 26482, 26508, 26536, 26560, 26588, 26625, 0}, {26664, 26676, 26688, 26700, 26712, 26724, 26736, 26748, 26760, 26772, 26785, 26798, 0}, {26664, 26676, 26688, 26700, 26712, 26724, 26736, 26748, 26760, 26772, 26785, 26798, 0}, 0, 0, 2566, 187, {1692,0,0,0,0,0,0,0,0,0,0,0,0,0},{26811,26865,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},{26901,0,0,0,0,0,0,0}}, + {26920, 26944, 26966, {26991, 27019, 27047, 27084, 27115, 27149, 27174}, {27208, 27224, 27240, 27265, 27284, 27306, 27319}, {27341, 27348, 27355, 27362, 27369, 27376, 27380}, {27390, 27424, 27461, 27495, 27529, 27560, 27597, 27634, 27674, 27708, 27742, 27791, 0}, {27390, 27424, 27461, 27495, 27529, 27560, 27597, 27634, 27674, 27708, 27742, 27791, 0}, {27840, 27853, 27866, 27879, 27892, 27905, 27918, 27931, 27944, 27957, 27973, 27989, 0}, {27840, 27853, 27866, 27879, 27892, 27905, 27918, 27931, 27944, 27957, 27973, 27989, 0}, 0, 0, 185, 187, {1654,1663,1672,1703,1692,1681,1721,1714,1728,0,0,0,0,0},{28005,28048,28096,28128,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},{28165,1914,0,0,0,0,0,0}}, + {289, 1929, 1932, {28198, 28207, 28217, 28229, 28242, 28251, 28263}, {28275, 28279, 28284, 28288, 28292, 28296, 28300}, {2023, 28304, 2428, 2428, 15367, 6293, 2023}, {28307, 28314, 28323, 28330, 2702, 28337, 28345, 28356, 28361, 28366, 28373, 28382, 0}, {28307, 28314, 28323, 28330, 2702, 28337, 28345, 28356, 28361, 28366, 28373, 28382, 0}, {28390, 28394, 28284, 28398, 2702, 28402, 28406, 28356, 28361, 28410, 28414, 28419, 0}, {28390, 28394, 28284, 28398, 2702, 28402, 28406, 28356, 28361, 28410, 28414, 28419, 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, 28424, 28440, {28456, 28478, 28491, 28510, 28520, 28551, 28567}, {28456, 28478, 28491, 28510, 28520, 28551, 28567}, {6605, 6607, 6609, 6611, 6613, 6615, 6617}, {28580, 28593, 28612, 28625, 28638, 28651, 28670, 28689, 28702, 28718, 28731, 28756, 0}, {28580, 28593, 28612, 28625, 28638, 28651, 28670, 28689, 28702, 28718, 28731, 28756, 0}, {28580, 28593, 28612, 28625, 28638, 28651, 28670, 28689, 28702, 28718, 28731, 28756, 0}, {28580, 28593, 28612, 28625, 28638, 28651, 28670, 28689, 28702, 28718, 28731, 28756, 0}, 0, 0, 185, 187, {189,1692,0,0,0,0,0,0,0,0,0,0,0,0},{1242,10163,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},{28769,0,0,0,0,0,0,0}}, + {289, 28804, 28829, {28854, 28879, 28898, 28926, 28945, 28970, 28989}, {28854, 28879, 28898, 28926, 28945, 28970, 28989}, {29011, 29015, 29019, 29023, 29033, 29037, 29047}, {29051, 29070, 29086, 29099, 29112, 29134, 29153, 29175, 29191, 29207, 29220, 29236, 0}, {29051, 29070, 29086, 29099, 29112, 29134, 29153, 29175, 29191, 29207, 29220, 29236, 0}, {29252, 29261, 29270, 29279, 29288, 29297, 29309, 29318, 29327, 29336, 29345, 29354, 0}, {29252, 29261, 29270, 29279, 29288, 29297, 29309, 29318, 29327, 29336, 29345, 29354, 0}, 0, 0, 185, 187, {198,29363,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, 29373, 3909, 29378, 29388, 29394, 3942}, {29401, 8413, 3761, 29405, 29410, 29414, 29418}, {2673, 2436, 2428, 2428, 29423, 3989, 2023}, {29425, 29433, 4005, 4011, 29442, 29447, 29453, 4034, 29459, 29468, 29476, 29485, 0}, {29494, 29502, 4094, 1012, 8083, 29511, 29517, 4117, 8100, 8109, 8117, 29523, 0}, {29532, 2763, 3761, 29536, 2702, 29540, 29545, 20157, 18381, 29549, 2796, 3769, 0}, {29532, 2763, 3761, 29536, 2702, 29540, 29545, 20157, 18381, 29549, 2796, 3769, 0}, 2, 1, 185, 187, {198,189,1120,2286,1139,1167,1692,0,0,0,0,0,0,0},{29553,4239,4266,1242,0,0,0,0,0,0},{843,251,242,29582,0,0,0,0,0,0,0,0},{848,269,257,29594,0,0,0,0,0},{1286,0,0,0,0,0,0,0}}, + {1, 29614, 29626, {29638, 17602, 29666, 17643, 17662, 17684, 17709}, {17728, 17738, 25839, 17761, 17771, 17784, 17800}, {0, 0, 0, 0, 0, 0, 0}, {25852, 25877, 17888, 25908, 25927, 17930, 25934, 29685, 29701, 29729, 26010, 26038, 0}, {25852, 25877, 17888, 25908, 25927, 17930, 25934, 29685, 29701, 29729, 26010, 26038, 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}}, + {20032, 29751, 29763, {29772, 29788, 29804, 29832, 29848, 29891, 29916}, {29772, 29788, 29944, 29832, 29954, 29976, 29989}, {29999, 30003, 30007, 30011, 30015, 30028, 30035}, {30042, 30061, 30086, 30105, 30130, 30143, 30156, 30169, 30191, 30225, 30250, 30278, 0}, {30042, 30061, 30086, 30105, 30130, 30143, 30156, 30169, 30191, 30225, 30250, 30278, 0}, {30306, 30313, 30323, 30105, 30130, 30143, 30156, 30336, 30346, 30359, 30369, 30382, 0}, {30306, 30313, 30323, 30105, 30130, 30143, 30156, 30336, 30346, 30359, 30369, 30382, 0}, 0, 1, 2566, 187, {1692,1681,1735,198,189,0,0,0,0,0,0,0,0,0},{30395,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},{30443,0,0,0,0,0,0,0}}, + {30453, 30469, 30479, {30492, 30502, 30509, 30522, 30532, 30542, 30552}, {30492, 30502, 30562, 30522, 30532, 30542, 30552}, {30572, 30576, 30580, 30584, 30588, 30592, 30596}, {30600, 30616, 30632, 30642, 30655, 30662, 30669, 30679, 30692, 30711, 30727, 30743, 0}, {30600, 30616, 30632, 30642, 30655, 30662, 30669, 30679, 30692, 30759, 30727, 30743, 0}, {30778, 30788, 30632, 30798, 30655, 30662, 30669, 30808, 30818, 30828, 30838, 30848, 0}, {30778, 30788, 30632, 30798, 30655, 30662, 30669, 30808, 30818, 30828, 30838, 30848, 0}, 0, 0, 185, 187, {2277,1692,0,0,0,0,0,0,0,0,0,0,0,0},{30858,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, 30890, 30900, {30913, 30920, 30926, 30933, 30939, 30945, 30953}, {30963, 30967, 30971, 30975, 30979, 30983, 30987}, {12817, 12817, 12817, 12817, 12817, 12817, 12817}, {30993, 31002, 31011, 31016, 31022, 31028, 31034, 31041, 31047, 31056, 31065, 31073, 0}, {30993, 31002, 31011, 31016, 31022, 31028, 31034, 31041, 31047, 31056, 31065, 31073, 0}, {31082, 31086, 3761, 31090, 3730, 31094, 31098, 31102, 31107, 31111, 31117, 31121, 0}, {31082, 31086, 3761, 31090, 3730, 31094, 31098, 31102, 31107, 31111, 31117, 31121, 0}, 0, 0, 2566, 187, {1128,1139,1692,0,0,0,0,0,0,0,0,0,0,0},{10709,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, 31125, 31166, {31207, 31226, 31245, 31270, 31289, 31311, 31336}, {31355, 17738, 31365, 17761, 31381, 17784, 17800}, {31394, 17814, 31398, 17828, 31402, 17842, 17849}, {17853, 31409, 17888, 31437, 25927, 31456, 17940, 31466, 31482, 31513, 31535, 31560, 0}, {17853, 31409, 17888, 31437, 25927, 31456, 17940, 31466, 31482, 31513, 31535, 31560, 0}, {17853, 31409, 17888, 31437, 25927, 31456, 17940, 31466, 31482, 31513, 31535, 31560, 0}, {17853, 31409, 17888, 31437, 25927, 31456, 17940, 31466, 31482, 31513, 31535, 31560, 0}, 0, 0, 185, 187, {3773,3782,3789,3798,1735,1692,3809,0,0,0,0,0,0,0},{20161,20181,222,10709,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},{25807,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}, {31585, 31592, 31601, 31616, 31627, 31636, 31643, 31650, 31657, 31668, 31681, 31694, 0}, {31585, 31592, 31601, 31616, 31627, 31636, 31643, 31650, 31657, 31668, 31681, 31694, 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},{31699,31720,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}}, + {31735, 1929, 1932, {31741, 31748, 31754, 31761, 31772, 31780, 31789}, {31796, 8413, 3761, 31800, 31804, 31808, 10790}, {2436, 2436, 2428, 2428, 5694, 16401, 2023}, {3991, 31812, 31820, 4011, 4017, 31826, 31832, 4034, 31838, 31848, 31856, 31866, 0}, {3991, 31812, 31820, 4011, 4017, 31826, 31832, 4034, 31838, 31848, 31856, 31866, 0}, {31876, 31880, 3761, 29536, 3730, 31884, 31888, 20157, 18381, 2792, 31892, 16358, 0}, {31876, 31880, 3761, 29536, 3730, 31884, 31888, 20157, 18381, 2792, 31892, 16358, 0}, 0, 0, 185, 187, {3773,3782,3789,3798,1735,1692,3809,0,0,0,0,0,0,0},{20161,20181,222,10709,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, {31896, 31903, 31911, 31918, 31925, 31933, 31941}, {31948, 31951, 31954, 31957, 31960, 31963, 31966}, {2436, 2436, 2430, 2436, 12817, 3987, 12817}, {31969, 31977, 31987, 31993, 32001, 32006, 32011, 32016, 32023, 20142, 32031, 32039, 0}, {31969, 31977, 31987, 31993, 32001, 32006, 32011, 32016, 32023, 20142, 32031, 32039, 0}, {2759, 32047, 3761, 32051, 3730, 31094, 31098, 32055, 3701, 2792, 32059, 16358, 0}, {2759, 32047, 3761, 32051, 3730, 31094, 31098, 32055, 3701, 2792, 32059, 16358, 0}, 0, 0, 185, 187, {2277,2286,189,198,1735,1692,3809,0,0,0,0,0,0,0},{20161,20181,222,10709,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, 32063, 32074, {32084, 32102, 32117, 32139, 32152, 32166, 32183}, {32207, 32215, 32220, 32139, 32152, 32232, 32239}, {0, 0, 0, 0, 0, 0, 0}, {32253, 32275, 32291, 32311, 32325, 32342, 32357, 32374, 32388, 32401, 32420, 32434, 0}, {32253, 32275, 32291, 32311, 32325, 32342, 32357, 32374, 32388, 32401, 32420, 32434, 0}, {32453, 32468, 32477, 32490, 32497, 32507, 32515, 32525, 32532, 32538, 32550, 32557, 0}, {32453, 32468, 32477, 32490, 32497, 32507, 32515, 32525, 32532, 32538, 32550, 32557, 0}, 0, 0, 185, 187, {2277,2286,189,198,1735,1692,3809,0,0,0,0,0,0,0},{222,20161,20181,10709,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},{25807,0,0,0,0,0,0,0}}, + {3613, 0, 0, {32569, 32577, 15933, 15942, 15951, 32588, 32598}, {16389, 15983, 15987, 15991, 15995, 16252, 32607}, {0, 0, 0, 0, 0, 0, 0}, {32611, 32620, 32630, 32638, 10819, 3734, 32646, 32652, 32661, 32670, 32679, 32688, 0}, {32611, 32620, 32630, 32638, 10819, 3734, 32646, 32652, 32661, 32670, 32679, 32688, 0}, {2759, 2763, 16002, 32697, 10819, 2776, 2780, 20157, 18381, 2792, 32701, 16358, 0}, {2759, 2763, 16002, 32697, 10819, 2776, 2780, 20157, 18381, 2792, 32701, 16358, 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}}, + {32705, 32718, 32723, {32728, 32735, 32750, 32764, 32780, 32795, 32811}, {6289, 32826, 2530, 32830, 32834, 32838, 32842}, {2023, 12817, 2428, 2018, 2023, 2430, 12817}, {7370, 7378, 32846, 32853, 32860, 2469, 2474, 32865, 32875, 32886, 32895, 32905, 0}, {7370, 7378, 32846, 32853, 32860, 2469, 2474, 32865, 32875, 32886, 32895, 32905, 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},{32915,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, 32934, 32939, {32944, 32960, 32968, 32976, 32985, 32997, 33007}, {33017, 33023, 33029, 33033, 33037, 33045, 3701}, {0, 0, 0, 0, 0, 0, 0}, {33052, 33065, 33079, 33088, 33094, 33098, 33103, 33111, 16313, 33124, 16330, 16338, 0}, {33052, 33065, 33079, 33088, 33094, 33098, 33103, 33111, 16313, 33124, 16330, 16338, 0}, {33133, 2763, 33137, 16346, 33094, 33141, 2780, 33145, 2788, 33153, 2796, 16358, 0}, {33133, 2763, 33137, 16346, 33094, 33141, 2780, 33145, 2788, 33153, 2796, 16358, 0}, 0, 0, 185, 187, {2277,2286,189,198,1735,1692,3809,0,0,0,0,0,0,0},{20161,20181,222,10709,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}}, + {33159, 33186, 33193, {33200, 33210, 33220, 33230, 33240, 33250, 33260}, {33270, 33277, 33284, 33291, 33298, 33305, 33312}, {33319, 33323, 33327, 33331, 33335, 33339, 33343}, {33347, 33354, 33361, 33368, 33375, 33382, 33389, 33396, 33403, 33410, 33417, 33427, 0}, {33347, 33354, 33361, 33368, 33375, 33382, 33389, 33396, 33403, 33410, 33417, 33427, 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},{33437,33461,33491,33521,33538,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},{33561,1914,0,0,0,0,0,0}}, + {289, 0, 0, {28275, 8413, 33578, 33585, 33595, 33600, 33607}, {33614, 6273, 33618, 4850, 33623, 33628, 33633}, {4421, 33638, 33641, 33644, 33647, 33650, 33653}, {33656, 33663, 33578, 33674, 33680, 33684, 33693, 33700, 33705, 33714, 33719, 33722, 0}, {33656, 33663, 33578, 33674, 33680, 33684, 33693, 33700, 33705, 33714, 33719, 33722, 0}, {33728, 33732, 33739, 28398, 33680, 33744, 33749, 33700, 33754, 33714, 33719, 33759, 0}, {33728, 33732, 33739, 28398, 33680, 33744, 33749, 33700, 33754, 33714, 33719, 33759, 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, 33763, 33768, {33773, 33781, 33791, 33801, 33810, 33820, 33828}, {33838, 33842, 33847, 33851, 33855, 33859, 33863}, {2023, 2428, 2673, 2428, 2673, 2434, 2023}, {2675, 2682, 2690, 2696, 2702, 2706, 2711, 33867, 33876, 33887, 33896, 33906, 0}, {2675, 2682, 2690, 2696, 2702, 2706, 2711, 33867, 33876, 33887, 33896, 33906, 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}}, + {33916, 33934, 33939, {33944, 33969, 33998, 34023, 34036, 34051, 34068}, {34083, 34088, 34093, 34098, 34103, 34108, 8800}, {19417, 19417, 34113, 8811, 8814, 19417, 8811}, {34116, 34135, 34150, 34172, 34192, 34208, 34224, 34238, 34264, 34288, 34305, 34322, 0}, {34116, 34135, 34150, 34172, 34192, 34208, 34224, 34238, 34264, 34288, 34305, 34322, 0}, {34339, 34348, 34357, 34371, 34385, 34397, 34409, 34419, 34435, 34449, 34456, 34463, 0}, {34339, 34348, 34357, 34371, 34385, 34397, 34409, 34419, 34435, 34449, 34456, 34463, 0}, 0, 1, 691, 187, {1156,4753,1692,34470,34480,0,0,0,0,0,0,0,0,0},{34493,34528,34557,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},{34592,0,0,0,0,0,0,0}}, + {20032, 0, 0, {34608, 34620, 34631, 34643, 34655, 34665, 34677}, {34692, 34697, 34702, 34707, 34712, 34717, 34722}, {0, 0, 0, 0, 0, 0, 0}, {34727, 34736, 34748, 34756, 34761, 34771, 34778, 34787, 34794, 34800, 34809, 34820, 0}, {34727, 34736, 34748, 34756, 34761, 34771, 34778, 34787, 34794, 34800, 34809, 34820, 0}, {34828, 34833, 34838, 34843, 34848, 34853, 34858, 34712, 34863, 34868, 34873, 34878, 0}, {34828, 34833, 34838, 34843, 34848, 34853, 34858, 34712, 34863, 34868, 34873, 34878, 0}, 0, 0, 185, 187, {9796,2286,0,0,0,0,0,0,0,0,0,0,0,0},{34883,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, 34903, 34905, {34907, 34920, 34928, 34937, 34947, 34957, 34966}, {34978, 34982, 34986, 34990, 34994, 34998, 35002}, {2673, 2436, 2428, 7736, 12817, 5694, 2023}, {35006, 35020, 35031, 35040, 35051, 35063, 35077, 35089, 35102, 35115, 35127, 35140, 0}, {35006, 35020, 35031, 35040, 35051, 35063, 35077, 35089, 35102, 35115, 35127, 35140, 0}, {35154, 35159, 35165, 35171, 35176, 35182, 35188, 35193, 35199, 35204, 19138, 35210, 0}, {35154, 35159, 35165, 35171, 35176, 35182, 35188, 35193, 35199, 35204, 19138, 35210, 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}}, + {1327, 1340, 1347, {1354, 1364, 1374, 1384, 1394, 1404, 1414}, {35216, 35223, 35230, 35237, 35244, 35251, 35258}, {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,35265,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}}, @@ -132,1261 +132,1261 @@ static const DateTimeFormatEntry datetime_format_entries [] = { {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, 35305, 35308, {35311, 35322, 35337, 35354, 35371, 35384, 35397}, {35311, 35322, 35337, 35354, 35371, 35384, 35397}, {35408, 35411, 35414, 35417, 35420, 13574, 13565}, {35423, 35447, 35456, 35465, 35476, 35485, 35498, 35507, 35512, 35523, 35545, 35569, 0}, {35423, 35447, 35456, 35465, 35476, 35485, 35498, 35507, 35512, 35523, 35545, 35569, 0}, {35423, 35447, 35456, 35465, 35476, 35485, 35498, 35507, 35512, 35523, 35545, 35569, 0}, {35423, 35447, 35456, 35465, 35476, 35485, 35498, 35507, 35512, 35523, 35545, 35569, 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}}, + {10033, 10046, 10049, {10052, 10060, 10068, 2368, 2375, 2383, 10075}, {10083, 10088, 10093, 2411, 2415, 2419, 10097}, {2023, 2428, 2430, 2432, 2430, 2434, 2436}, {7370, 7378, 4887, 2459, 2465, 2469, 2474, 10102, 2486, 2496, 2504, 2513, 0}, {7370, 7378, 4887, 2459, 2465, 2469, 2474, 10102, 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, {1692,5888,0,0,0,0,0,0,0,0,0,0,0,0},{10110,10128,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,10151,1692,0,0,0,0,0,0,0},{1242,10163,10179,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, 10221, 10226, {10230, 10236, 10246, 10252, 10263, 10273, 10278}, {10288, 10292, 10296, 10300, 10305, 10309, 10313}, {2018, 2018, 2023, 10317, 2018, 7736, 7736}, {10320, 10325, 10332, 10337, 10343, 10350, 10358, 10365, 10374, 10381, 10386, 10393, 0}, {10320, 10325, 10332, 10337, 10343, 10350, 10358, 10365, 10374, 10381, 10386, 10393, 0}, {10401, 10405, 3761, 10410, 3730, 10414, 10418, 10422, 10427, 10431, 10435, 10439, 0}, {10401, 10405, 3761, 10410, 3730, 10414, 10418, 10422, 10427, 10431, 10435, 10439, 0}, 0, 1, 691, 187, {4753,4762,1156,1167,0,0,0,0,0,0,0,0,0,0},{10443,1242,10460,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, 10478, 10496, {10514, 10525, 10538, 10547, 10554, 10567, 10576}, {10514, 10525, 10538, 10547, 10554, 10567, 10576}, {2023, 2428, 2430, 3705, 2430, 2434, 2023}, {10585, 10596, 10607, 10616, 10627, 10634, 10641, 10654, 10663, 10674, 10687, 10698, 0}, {10585, 10596, 10607, 10616, 10627, 10634, 10641, 10654, 10663, 10674, 10687, 10698, 0}, {10585, 10596, 10607, 10616, 10627, 10634, 10641, 10654, 10663, 10674, 10687, 10698, 0}, {10585, 10596, 10607, 10616, 10627, 10634, 10641, 10654, 10663, 10674, 10687, 10698, 0}, 0, 0, 185, 187, {198,189,1692,0,0,0,0,0,0,0,0,0,0,0},{10709,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, {10723, 10730, 10736, 10743, 10748, 10754, 10760}, {10766, 10770, 10774, 10778, 10782, 10786, 10790}, {2428, 2023, 2023, 10794, 4442, 3987, 2023}, {10796, 10804, 10813, 2696, 10819, 2706, 2711, 10823, 2723, 2733, 2741, 10831, 0}, {10796, 10804, 10813, 2696, 10819, 2706, 2711, 10823, 2723, 2733, 2741, 10831, 0}, {2759, 2763, 3761, 2772, 10819, 2776, 2780, 10840, 2788, 2792, 2796, 10844, 0}, {2759, 2763, 3761, 2772, 10819, 2776, 2780, 10840, 2788, 2792, 2796, 10844, 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, 10848, 10853, {10858, 10871, 10890, 10907, 10920, 10933, 10950}, {10963, 8775, 8780, 8785, 8790, 8795, 8800}, {10968, 8808, 8805, 8811, 8814, 8808, 8811}, {10971, 10984, 10995, 11012, 11027, 11042, 11057, 11070, 11085, 11102, 11117, 11134, 0}, {11149, 11160, 11173, 11188, 11201, 11214, 11227, 11238, 11251, 11266, 11279, 11298, 0}, {11311, 11318, 11325, 11332, 11339, 11346, 11353, 11360, 11367, 11374, 11381, 11388, 0}, {11311, 11318, 11325, 11332, 11339, 11346, 11353, 11360, 11367, 11374, 11381, 11388, 0}, 0, 1, 691, 187, {1156,1167,1692,0,0,0,0,0,0,0,0,0,0,0},{11395,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},{11413,0,0,0,0,0,0,0}}, + {289, 11429, 11442, {11455, 11470, 11491, 11506, 11519, 11532, 10950}, {421, 426, 11547, 436, 11552, 446, 451}, {456, 459, 11557, 465, 468, 459, 465}, {11560, 11577, 11586, 11601, 521, 11618, 11633, 11646, 11661, 11678, 11699, 11716, 0}, {11731, 11748, 11761, 11778, 9017, 11797, 11812, 11825, 11838, 11853, 11876, 11895, 0}, {11908, 11915, 11922, 11929, 521, 11936, 11943, 11950, 11957, 11964, 11971, 11978, 0}, {11908, 11915, 11922, 11929, 521, 11936, 11943, 11950, 11957, 11964, 11971, 11978, 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, 11985, 11990, {11995, 12003, 12014, 12020, 12026, 12035, 1985}, {9246, 9250, 2415, 12041, 9262, 9267, 12045}, {9275, 9277, 12049, 9281, 9283, 9277, 9281}, {2438, 2445, 9672, 2459, 2465, 12051, 12057, 12063, 2486, 2496, 2504, 2513, 0}, {2438, 2445, 9672, 2459, 2465, 12051, 12057, 12063, 2486, 2496, 2504, 2513, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 12070, 2550, 2554, 2558, 2562, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 12070, 2550, 2554, 2558, 2562, 0}, 0, 1, 691, 187, {4753,4762,2266,1156,12074,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}}, + {12084, 12093, 12098, {12103, 12114, 12125, 12136, 12147, 12158, 12164}, {2018, 9924, 2430, 4442, 2016, 10794, 2436}, {2018, 9924, 2430, 4442, 2016, 10794, 2436}, {12173, 12181, 12190, 12197, 4898, 12204, 12210, 2479, 2486, 12216, 2504, 12225, 0}, {12173, 12181, 12190, 12197, 4898, 12204, 12210, 2479, 2486, 12216, 2504, 12225, 0}, {12235, 12240, 12190, 2534, 4898, 12204, 12210, 2546, 12246, 2554, 2558, 12251, 0}, {12235, 12240, 12190, 2534, 4898, 12204, 12210, 2546, 12246, 2554, 2558, 12251, 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, 12256, 12273, {12287, 12298, 12308, 12317, 12328, 12340, 12351}, {12361, 12364, 12367, 12370, 12373, 12376, 12379}, {2023, 2018, 2432, 2430, 7736, 2018, 2023}, {12382, 12392, 12403, 12409, 12418, 12424, 12432, 12440, 12448, 12459, 12468, 12478, 0}, {12488, 12498, 2453, 12509, 12518, 12524, 12532, 12540, 12548, 12559, 12568, 12578, 0}, {12588, 12594, 12403, 12600, 12418, 12605, 12611, 12617, 4190, 12622, 4201, 12627, 0}, {12588, 12594, 12403, 12600, 12418, 12605, 12611, 12617, 4190, 12622, 4201, 12627, 0}, 0, 1, 691, 187, {9517,9539,12632,0,0,0,0,0,0,0,0,0,0,0},{12644,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},{12671,0,0,0,0,0,0,0}}, + {12689, 12701, 11990, {12707, 12719, 12731, 12743, 12757, 12772, 12785}, {12799, 12802, 12805, 12808, 12811, 12814, 9660}, {2023, 2018, 12817, 2430, 4442, 2018, 9669}, {12819, 12826, 12834, 12840, 12849, 12858, 12868, 12874, 12885, 12895, 12902, 12912, 0}, {12819, 12826, 12834, 12840, 12849, 12858, 12868, 12874, 12885, 12895, 12902, 12912, 0}, {12920, 12926, 12931, 12936, 12941, 12946, 12953, 12959, 12965, 12971, 12977, 12984, 0}, {12920, 12926, 12931, 12936, 12941, 12946, 12953, 12959, 12965, 12971, 12977, 12984, 0}, 2, 1, 2566, 187, {1692,2568,0,0,0,0,0,0,0,0,0,0,0,0},{12991,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},{13013,0,0,0,0,0,0,0}}, + {1, 13028, 13040, {13052, 13067, 13082, 13097, 13114, 13133, 13144}, {13155, 13162, 13169, 13176, 13183, 13190, 13197}, {0, 0, 0, 0, 0, 0, 0}, {13204, 13215, 8845, 13228, 8867, 13239, 13246, 8892, 13253, 13268, 13281, 13292, 0}, {13204, 13215, 8845, 13228, 8867, 13239, 13246, 8892, 13253, 13268, 13281, 13292, 0}, {13305, 13312, 13319, 13326, 8867, 13239, 13246, 13333, 13340, 13347, 13354, 13361, 0}, {13305, 13312, 13319, 13326, 8867, 13239, 13246, 13333, 13340, 13347, 13354, 13361, 0}, 0, 1, 691, 187, {1156,1167,4762,1128,189,0,0,0,0,0,0,0,0,0},{13368,13386,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, 13405, 13425, {13442, 13455, 13468, 13484, 13501, 13516, 13525}, {13442, 13455, 13468, 13484, 13501, 13516, 13525}, {13534, 13537, 13540, 13543, 13546, 13549, 13552}, {13555, 13568, 13579, 13588, 13599, 13604, 13613, 13624, 13631, 13646, 13657, 13670, 0}, {13683, 13698, 13579, 13588, 13711, 13604, 13718, 13624, 13631, 13646, 13657, 13670, 0}, {13555, 13568, 13579, 13588, 13599, 13604, 13613, 13624, 13631, 13646, 13657, 13670, 0}, {13555, 13568, 13579, 13588, 13599, 13604, 13613, 13624, 13631, 13646, 13657, 13670, 0}, 0, 6, 185, 187, {198,189,0,0,0,0,0,0,0,0,0,0,0,0},{13731,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, 13750, 13753, {13756, 13769, 13779, 13788, 13798, 13809, 13820}, {13832, 13835, 13840, 13845, 13850, 13855, 13860}, {13832, 13865, 13868, 13871, 13874, 13877, 13880}, {13883, 13892, 13901, 13910, 13919, 13928, 13937, 13946, 13955, 13964, 13974, 13984, 0}, {13994, 14003, 14012, 14021, 14030, 14039, 14048, 14057, 14066, 14075, 14085, 14095, 0}, {14105, 14111, 14117, 14123, 14129, 14135, 14141, 14147, 14153, 14159, 14166, 14173, 0}, {14105, 14111, 14117, 14123, 14129, 14135, 14141, 14147, 14153, 14159, 14166, 14173, 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, 14180, 14204, {14228, 14241, 14262, 14281, 14302, 14321, 14334}, {14345, 14352, 14359, 14366, 14373, 14380, 14387}, {14394, 14397, 14397, 14400, 14403, 14406, 14411}, {14414, 14429, 14444, 14453, 14464, 14475, 14488, 14501, 14516, 14535, 14554, 14571, 0}, {14590, 14607, 14624, 14635, 14648, 14661, 14676, 14691, 14708, 14729, 14750, 14769, 0}, {14790, 14797, 14804, 14811, 14818, 14825, 14832, 14839, 14846, 14853, 14860, 14867, 0}, {14790, 14797, 14804, 14811, 14818, 14825, 14832, 14839, 14846, 14853, 14860, 14867, 0}, 0, 1, 691, 187, {1156,1167,9796,198,14874,3582,1692,0,0,0,0,0,0,0},{3870,1207,13731,5505,14885,14896,14908,14925,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, {14943, 14949, 14963, 14986, 15000, 15016, 15023}, {15032, 15035, 15040, 15046, 15050, 7736, 15055}, {6617, 6605, 6607, 6609, 6611, 6613, 6615}, {15059, 15066, 10332, 15073, 3730, 15079, 15085, 15091, 15098, 15107, 15115, 15122, 0}, {15129, 15136, 15143, 15148, 15154, 15158, 15163, 15168, 15175, 15184, 15192, 15199, 0}, {15206, 8135, 2530, 2534, 15154, 15210, 15214, 15218, 15222, 2554, 15226, 15230, 0}, {15206, 8135, 2530, 2534, 15154, 15210, 15214, 15218, 15222, 2554, 15226, 15230, 0}, 0, 1, 691, 187, {1156,1167,4762,189,1692,0,0,0,0,0,0,0,0,0},{15234,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}}, + {15256, 1929, 1932, {15271, 15279, 15290, 15300, 15311, 15320, 15329}, {15339, 15343, 15347, 15351, 15355, 15359, 15363}, {15367, 12817, 12817, 12817, 2432, 2432, 2436}, {15369, 15379, 15387, 15395, 15403, 15411, 15418, 15426, 15434, 15441, 15447, 15454, 0}, {15462, 15473, 15482, 15491, 15500, 15509, 15517, 15526, 15535, 15543, 15550, 15558, 0}, {15567, 15572, 4845, 15577, 15582, 15587, 15592, 15597, 15602, 15607, 15612, 15617, 0}, {15567, 15572, 4845, 15577, 15582, 15587, 15592, 15597, 15602, 15607, 15612, 15617, 0}, 2, 1, 185, 187, {1681,1692,0,0,0,0,0,0,0,0,0,0,0,0},{15622,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},{15655,0,0,0,0,0,0,0}}, + {289, 15672, 15693, {15710, 331, 352, 8714, 15723, 15740, 15751}, {15764, 15772, 15780, 15786, 15794, 15802, 15810}, {456, 459, 462, 465, 468, 459, 465}, {15818, 484, 501, 510, 15833, 15840, 15849, 542, 555, 574, 591, 606, 0}, {15818, 484, 501, 510, 15833, 15840, 15849, 542, 555, 574, 591, 606, 0}, {15858, 15866, 15874, 639, 15833, 15882, 15890, 647, 655, 665, 673, 683, 0}, {15858, 15866, 15874, 639, 15833, 15882, 15890, 647, 655, 665, 673, 683, 0}, 0, 1, 691, 187, {1156,1167,15898,0,0,0,0,0,0,0,0,0,0,0},{13731,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, {15915, 15922, 15933, 15942, 15951, 15958, 15969}, {15979, 15983, 15987, 15991, 15995, 15998, 16002}, {0, 0, 0, 0, 0, 0, 0}, {16006, 16016, 16025, 16033, 16042, 16055, 16067, 16074, 16081, 16088, 16098, 16110, 0}, {16006, 16016, 16025, 16033, 16042, 16055, 16067, 16074, 16081, 16088, 16098, 16110, 0}, {16123, 16127, 16131, 16135, 16139, 16143, 16147, 16151, 16155, 16159, 16163, 16167, 0}, {16123, 16127, 16131, 16135, 16139, 16143, 16147, 16151, 16155, 16159, 16163, 16167, 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, {16171, 16176, 16182, 16192, 16204, 16212, 16223}, {16232, 16236, 16240, 16244, 16248, 16252, 16256}, {0, 0, 0, 0, 0, 0, 0}, {16260, 16270, 16280, 16287, 16294, 2706, 16299, 16306, 16313, 16322, 16330, 16338, 0}, {16260, 16270, 16280, 16287, 16294, 2706, 16299, 16306, 16313, 16322, 16330, 16338, 0}, {2759, 2763, 16002, 16346, 16350, 2776, 2780, 16354, 2788, 2792, 2796, 16358, 0}, {2759, 2763, 16002, 16346, 16350, 2776, 2780, 16354, 2788, 2792, 2796, 16358, 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, {16362, 16368, 16379, 16192, 16204, 16212, 16223}, {16389, 16393, 16397, 16244, 16248, 16252, 16256}, {2023, 2428, 16401, 2430, 2023, 5694, 2428}, {16403, 16413, 16424, 16431, 16440, 16446, 16452, 16460, 16468, 16479, 16489, 16498, 0}, {16507, 16270, 16516, 16522, 16294, 2706, 16299, 16306, 16529, 16322, 16330, 16338, 0}, {2759, 2763, 16539, 2772, 16350, 2776, 2780, 16354, 2788, 2792, 2796, 16358, 0}, {2759, 2763, 16539, 2772, 16350, 2776, 2780, 16354, 2788, 2792, 2796, 16358, 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, 16543, 16547, {16551, 16558, 16566, 16574, 16583, 16593, 16600}, {2652, 16609, 2658, 16612, 2664, 16615, 2670}, {2023, 2428, 2673, 3705, 2673, 3989, 2023}, {16618, 16627, 16637, 2696, 10819, 16643, 16649, 16655, 2723, 2733, 2741, 10831, 0}, {16618, 16627, 16637, 2696, 10819, 16643, 16649, 16655, 2723, 2733, 2741, 10831, 0}, {2759, 2763, 3761, 2772, 10819, 2776, 2780, 2784, 2788, 2792, 2796, 10844, 0}, {2759, 2763, 3761, 2772, 10819, 2776, 2780, 2784, 2788, 2792, 2796, 10844, 0}, 0, 0, 185, 187, {1681,1735,1692,16664,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, {16676, 16692, 16717, 16745, 16773, 16801, 16829}, {16848, 16858, 16868, 16878, 16888, 16898, 16908}, {16918, 16922, 16926, 16922, 16930, 16934, 16938}, {16942, 16964, 16992, 17008, 17027, 17043, 17062, 17081, 17103, 17134, 17162, 17187, 0}, {16942, 16964, 16992, 17008, 17027, 17043, 17062, 17081, 17103, 17134, 17162, 17187, 0}, {17215, 17225, 17235, 17245, 17255, 17265, 17275, 17285, 17295, 17305, 17315, 17325, 0}, {17215, 17225, 17235, 17245, 17255, 17265, 17275, 17285, 17295, 17305, 17315, 17325, 0}, 0, 1, 691, 187, {1156,1167,7419,1176,4762,4753,1692,0,0,0,0,0,0,0},{17335,17369,17402,3870,17436,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, 17448, 17453, {5932, 17458, 17469, 17479, 17489, 17499, 17513}, {17525, 17529, 17534, 17539, 17543, 17548, 17553}, {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, 17557, 17573, {17583, 17602, 17621, 17643, 17662, 17684, 17709}, {17728, 17738, 17748, 17761, 17771, 17784, 17800}, {17810, 17814, 17821, 17828, 17835, 17842, 17849}, {17853, 17869, 17888, 17904, 17923, 17930, 17940, 17956, 17972, 17991, 18013, 18029, 0}, {17853, 17869, 17888, 17904, 17923, 17930, 17940, 17956, 17972, 17991, 18013, 18029, 0}, {18048, 18055, 17888, 18065, 17923, 17930, 18081, 18094, 18101, 18114, 18130, 18140, 0}, {18048, 18055, 17888, 18065, 17923, 17930, 18081, 18094, 18101, 18114, 18130, 18140, 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}}, + {18153, 18167, 18170, {18173, 18182, 18191, 18201, 18211, 18221, 18233}, {18241, 18246, 18250, 18254, 18258, 18263, 18268}, {18272, 2430, 2430, 9924, 18272, 18275, 2023}, {18278, 18285, 18290, 2696, 18296, 18302, 18309, 18315, 18323, 18333, 18341, 18350, 0}, {18278, 18285, 18290, 2696, 18296, 18302, 18309, 18315, 18323, 18333, 18341, 18350, 0}, {2759, 18360, 3761, 2772, 18364, 18368, 18373, 18377, 18381, 18385, 2796, 18389, 0}, {2759, 18360, 3761, 2772, 18364, 18368, 18373, 18377, 18381, 18385, 2796, 18389, 0}, 0, 0, 185, 187, {198,1692,18394,7410,2277,0,0,0,0,0,0,0,0,0},{18403,18428,10151,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}}, + {18447, 18460, 18465, {18470, 18482, 18493, 18507, 18519, 18529, 18539}, {18550, 18555, 18560, 18565, 18570, 18575, 18580}, {2023, 3989, 2428, 6293, 2673, 16401, 2436}, {18585, 18602, 18615, 18629, 18642, 18655, 18668, 18682, 18694, 18708, 18722, 18736, 0}, {18585, 18602, 18615, 18629, 18642, 18655, 18668, 18682, 18694, 18708, 18722, 18736, 0}, {18749, 18756, 18761, 18766, 18770, 18775, 18780, 18785, 18790, 18797, 18802, 18808, 0}, {18749, 18756, 18761, 18766, 18770, 18775, 18780, 18785, 18790, 18797, 18802, 18808, 0}, 2, 1, 691, 187, {1156,1167,4762,1692,0,0,0,0,0,0,0,0,0,0},{18813,18837,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}}, + {20032, 1929, 1932, {20040, 20049, 20058, 20066, 20075, 20084, 20091}, {20100, 20103, 20106, 20109, 20112, 20116, 20119}, {6607, 6609, 6611, 6613, 12817, 15367, 6605}, {10796, 10804, 20122, 20128, 10819, 2706, 19196, 20135, 16313, 20142, 16330, 20149, 0}, {10796, 10804, 20122, 20128, 10819, 2706, 19196, 20135, 16313, 20142, 16330, 20149, 0}, {2759, 2763, 19192, 2772, 10819, 2776, 2780, 20157, 2788, 2792, 2796, 10844, 0}, {2759, 2763, 19192, 2772, 10819, 2776, 2780, 20157, 2788, 2792, 2796, 10844, 0}, 0, 0, 185, 187, {3773,3782,3789,3798,1735,1692,3809,0,0,0,0,0,0,0},{20161,20181,222,10709,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}}, + {20195, 1929, 1932, {20202, 20212, 20221, 20230, 20241, 20251, 20256}, {20263, 20269, 20274, 20279, 20284, 10786, 20288}, {20293, 2673, 2023, 7736, 2018, 3987, 2023}, {15059, 15066, 10332, 15073, 3730, 20295, 20300, 20305, 15098, 15107, 15115, 15122, 0}, {15059, 15066, 10332, 15073, 3730, 20295, 20300, 20305, 15098, 15107, 15115, 15122, 0}, {20312, 20317, 3761, 2772, 3730, 20295, 20300, 20321, 10770, 2792, 20325, 20330, 0}, {20312, 20317, 3761, 2772, 3730, 20295, 20300, 20321, 10770, 2792, 20325, 20330, 0}, 0, 1, 691, 187, {1156,0,0,0,0,0,0,0,0,0,0,0,0,0},{20334,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, 20352, 20380, {20402, 20421, 20440, 20465, 20484, 20518, 20543}, {20562, 20572, 20582, 20598, 20608, 20633, 20649}, {20659, 20663, 20670, 20674, 20681, 20688, 20695}, {20699, 20727, 20761, 20777, 20796, 20803, 20813, 20829, 20845, 20876, 20898, 20920, 0}, {20699, 20727, 20761, 20777, 20796, 20803, 20813, 20829, 20845, 20876, 20898, 20920, 0}, {20699, 20727, 20761, 20777, 20796, 20803, 20813, 20829, 20845, 20876, 20898, 20920, 0}, {20699, 20727, 20761, 20777, 20796, 20803, 20813, 20829, 20845, 20876, 20898, 20920, 0}, 0, 0, 2566, 187, {1139,2293,1128,20945,20958,0,0,0,0,0,0,0,0,0},{5505,1242,0,0,0,0,0,0,0,0},{4288,2321,20973,20982,0,0,0,0,0,0,0,0},{4302,2337,20990,21002,0,0,0,0,0},{278,0,0,0,0,0,0,0}}, + {1, 1929, 1932, {21482, 21501, 21520, 21542, 21561, 21583, 21608}, {21627, 21637, 21647, 21660, 21670, 21683, 21699}, {21709, 21713, 21720, 21727, 21734, 21741, 21748}, {21752, 21780, 21808, 21824, 21843, 21850, 21860, 21876, 21892, 21920, 21942, 21964, 0}, {21752, 21780, 21808, 21824, 21843, 21850, 21860, 21876, 21892, 21920, 21942, 21964, 0}, {21989, 22008, 21808, 21824, 21843, 21850, 21860, 22027, 22034, 22050, 22066, 22076, 0}, {21989, 22008, 21808, 21824, 21843, 21850, 21860, 22027, 22034, 22050, 22066, 22076, 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, 22089, {22092, 22111, 22130, 22155, 22174, 22196, 22221}, {22240, 22250, 22260, 22276, 22286, 22299, 22315}, {22325, 22329, 22336, 22340, 22347, 22354, 22361}, {22365, 22387, 22418, 22440, 22459, 22466, 22476, 22492, 22508, 22539, 22561, 22583, 0}, {22365, 22387, 22418, 22440, 22459, 22466, 22476, 22492, 22508, 22539, 22561, 22583, 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, 22608, 22633, {22658, 22677, 22699, 22724, 22740, 22762, 22781}, {22791, 22798, 22805, 22812, 22819, 22826, 22833}, {22791, 22798, 22805, 22812, 22819, 22826, 22833}, {22837, 22853, 22878, 22897, 22916, 22923, 22936, 22949, 22968, 22999, 23024, 23046, 0}, {22837, 22853, 22878, 22897, 22916, 22923, 22936, 23071, 22968, 22999, 23024, 23046, 0}, {23090, 23098, 23112, 23126, 22916, 22923, 22936, 23137, 23145, 23159, 23170, 23178, 0}, {23090, 23098, 23112, 23126, 22916, 22923, 22936, 23137, 23145, 23159, 23170, 23178, 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, {23189, 23211, 23233, 23258, 23280, 23305, 23333}, {23355, 23365, 23375, 23388, 23398, 23411, 23427}, {23437, 23441, 23448, 23452, 23459, 23466, 23473}, {23477, 23493, 23518, 23537, 23559, 23566, 23579, 23592, 23611, 23642, 23667, 23686, 0}, {23477, 23493, 23518, 23537, 23559, 23566, 23711, 23592, 23611, 23642, 23667, 23686, 0}, {23724, 23731, 23518, 23747, 23559, 23566, 23711, 23592, 23763, 23785, 23801, 23811, 0}, {23724, 23731, 23518, 23747, 23559, 23566, 23711, 23592, 23763, 23785, 23801, 23811, 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, {23827, 23846, 23865, 23887, 23906, 23928, 23953}, {23972, 23982, 23992, 24005, 24015, 24028, 24044}, {24054, 24058, 24065, 24072, 24079, 24086, 24093}, {24097, 24113, 24138, 24157, 24179, 24186, 24199, 24212, 24231, 24259, 24284, 24306, 0}, {24097, 24113, 24138, 24157, 24179, 24186, 24199, 24212, 24231, 24259, 24284, 24306, 0}, {24331, 24339, 24359, 24366, 24179, 24383, 24390, 24398, 24406, 24429, 24446, 24460, 0}, {24331, 24339, 24359, 24366, 24179, 24383, 24390, 24398, 24406, 24429, 24446, 24460, 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}}, + {20032, 1929, 1932, {24477, 24505, 24539, 24567, 24595, 24626, 24663}, {24691, 24704, 24723, 24739, 24752, 24771, 24790}, {24800, 24807, 24814, 24821, 24828, 24841, 24848}, {24852, 24871, 24899, 24921, 24940, 24953, 24963, 24976, 25001, 25032, 25057, 25073, 0}, {24852, 24871, 24899, 24921, 24940, 24953, 24963, 24976, 25001, 25032, 25057, 25073, 0}, {25092, 25102, 25121, 25131, 24940, 24953, 24963, 25147, 25154, 25179, 25195, 25205, 0}, {25092, 25102, 25121, 25131, 24940, 24953, 24963, 25147, 25154, 25179, 25195, 25205, 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,20973,20982,0,0,0,0,0,0,0,0},{4302,2337,20990,21002,0,0,0,0,0},{278,0,0,0,0,0,0,0}}, + {289, 25218, 25246, {25268, 25287, 25306, 25331, 25350, 25384, 25409}, {25428, 20572, 20582, 20598, 25438, 25463, 20649}, {0, 0, 0, 0, 0, 0, 0}, {25479, 25504, 25535, 25551, 20796, 20803, 20813, 25570, 25586, 25617, 25639, 25661, 0}, {25479, 25504, 25535, 25551, 20796, 20803, 20813, 25570, 25586, 25617, 25639, 25661, 0}, {25686, 25699, 25535, 25551, 20796, 20803, 20813, 25718, 25725, 25741, 25757, 25767, 0}, {25686, 25699, 25535, 25551, 20796, 20803, 20813, 25718, 25725, 25741, 25757, 25767, 0}, 0, 0, 2566, 187, {1128,0,0,0,0,0,0,0,0,0,0,0,0,0},{25780,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},{25799,25807,0,0,0,0,0,0}}, + {1, 1929, 1932, {17583, 17602, 25817, 17643, 17662, 17684, 17709}, {17728, 17738, 25839, 17761, 17771, 17784, 17800}, {17810, 17814, 17821, 17828, 17835, 17842, 17849}, {25852, 25877, 17888, 25908, 25927, 17930, 25934, 25947, 25963, 25988, 26010, 26038, 0}, {25852, 25877, 17888, 25908, 25927, 17930, 25934, 25947, 25963, 25988, 26010, 26038, 0}, {26060, 26073, 17888, 26092, 25927, 17930, 25934, 26108, 26115, 26134, 26150, 26172, 0}, {26060, 26073, 17888, 26092, 25927, 17930, 25934, 26108, 26115, 26134, 26150, 26172, 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}}, + {26920, 26944, 26966, {26991, 27019, 27047, 27084, 27115, 27149, 27174}, {27208, 27224, 27240, 27265, 27284, 27306, 27319}, {27341, 27348, 27355, 27362, 27369, 27376, 27380}, {27390, 27424, 27461, 27495, 27529, 27560, 27597, 27634, 27674, 27708, 27742, 27791, 0}, {27390, 27424, 27461, 27495, 27529, 27560, 27597, 27634, 27674, 27708, 27742, 27791, 0}, {27840, 27853, 27866, 27879, 27892, 27905, 27918, 27931, 27944, 27957, 27973, 27989, 0}, {27840, 27853, 27866, 27879, 27892, 27905, 27918, 27931, 27944, 27957, 27973, 27989, 0}, 0, 0, 185, 187, {1654,1663,1672,1703,1692,1681,1721,1714,1728,0,0,0,0,0},{28005,28048,28096,28128,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},{28165,1914,0,0,0,0,0,0}}, + {289, 1929, 1932, {28198, 28207, 28217, 28229, 28242, 28251, 28263}, {28275, 28279, 28284, 28288, 28292, 28296, 28300}, {2023, 28304, 2428, 2428, 15367, 6293, 2023}, {28307, 28314, 28323, 28330, 2702, 28337, 28345, 28356, 28361, 28366, 28373, 28382, 0}, {28307, 28314, 28323, 28330, 2702, 28337, 28345, 28356, 28361, 28366, 28373, 28382, 0}, {28390, 28394, 28284, 28398, 2702, 28402, 28406, 28356, 28361, 28410, 28414, 28419, 0}, {28390, 28394, 28284, 28398, 2702, 28402, 28406, 28356, 28361, 28410, 28414, 28419, 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, 28424, 28440, {28456, 28478, 28491, 28510, 28520, 28551, 28567}, {28456, 28478, 28491, 28510, 28520, 28551, 28567}, {6605, 6607, 6609, 6611, 6613, 6615, 6617}, {28580, 28593, 28612, 28625, 28638, 28651, 28670, 28689, 28702, 28718, 28731, 28756, 0}, {28580, 28593, 28612, 28625, 28638, 28651, 28670, 28689, 28702, 28718, 28731, 28756, 0}, {28580, 28593, 28612, 28625, 28638, 28651, 28670, 28689, 28702, 28718, 28731, 28756, 0}, {28580, 28593, 28612, 28625, 28638, 28651, 28670, 28689, 28702, 28718, 28731, 28756, 0}, 0, 0, 185, 187, {189,1692,0,0,0,0,0,0,0,0,0,0,0,0},{1242,10163,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},{28769,0,0,0,0,0,0,0}}, + {289, 28804, 28829, {28854, 28879, 28898, 28926, 28945, 28970, 28989}, {28854, 28879, 28898, 28926, 28945, 28970, 28989}, {29011, 29015, 29019, 29023, 29033, 29037, 29047}, {29051, 29070, 29086, 29099, 29112, 29134, 29153, 29175, 29191, 29207, 29220, 29236, 0}, {29051, 29070, 29086, 29099, 29112, 29134, 29153, 29175, 29191, 29207, 29220, 29236, 0}, {29252, 29261, 29270, 29279, 29288, 29297, 29309, 29318, 29327, 29336, 29345, 29354, 0}, {29252, 29261, 29270, 29279, 29288, 29297, 29309, 29318, 29327, 29336, 29345, 29354, 0}, 0, 0, 185, 187, {198,29363,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, 29373, 3909, 29378, 29388, 29394, 3942}, {29401, 8413, 3761, 29405, 29410, 29414, 29418}, {2673, 2436, 2428, 2428, 29423, 3989, 2023}, {29425, 29433, 4005, 4011, 29442, 29447, 29453, 4034, 29459, 29468, 29476, 29485, 0}, {29494, 29502, 4094, 1012, 8083, 29511, 29517, 4117, 8100, 8109, 8117, 29523, 0}, {29532, 2763, 3761, 29536, 2702, 29540, 29545, 20157, 18381, 29549, 2796, 3769, 0}, {29532, 2763, 3761, 29536, 2702, 29540, 29545, 20157, 18381, 29549, 2796, 3769, 0}, 2, 1, 185, 187, {198,189,1120,2286,1139,1167,1692,0,0,0,0,0,0,0},{29553,4239,4266,1242,0,0,0,0,0,0},{843,251,242,29582,0,0,0,0,0,0,0,0},{848,269,257,29594,0,0,0,0,0},{1286,0,0,0,0,0,0,0}}, + {1, 29614, 29626, {29638, 17602, 29666, 17643, 17662, 17684, 17709}, {17728, 17738, 25839, 17761, 17771, 17784, 17800}, {0, 0, 0, 0, 0, 0, 0}, {25852, 25877, 17888, 25908, 25927, 17930, 25934, 29685, 29701, 29729, 26010, 26038, 0}, {25852, 25877, 17888, 25908, 25927, 17930, 25934, 29685, 29701, 29729, 26010, 26038, 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}}, + {20032, 29751, 29763, {29772, 29788, 29804, 29832, 29848, 29891, 29916}, {29772, 29788, 29944, 29832, 29954, 29976, 29989}, {29999, 30003, 30007, 30011, 30015, 30028, 30035}, {30042, 30061, 30086, 30105, 30130, 30143, 30156, 30169, 30191, 30225, 30250, 30278, 0}, {30042, 30061, 30086, 30105, 30130, 30143, 30156, 30169, 30191, 30225, 30250, 30278, 0}, {30306, 30313, 30323, 30105, 30130, 30143, 30156, 30336, 30346, 30359, 30369, 30382, 0}, {30306, 30313, 30323, 30105, 30130, 30143, 30156, 30336, 30346, 30359, 30369, 30382, 0}, 0, 1, 2566, 187, {1692,1681,1735,198,189,0,0,0,0,0,0,0,0,0},{30395,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},{30443,0,0,0,0,0,0,0}}, + {30453, 30469, 30479, {30492, 30502, 30509, 30522, 30532, 30542, 30552}, {30492, 30502, 30562, 30522, 30532, 30542, 30552}, {30572, 30576, 30580, 30584, 30588, 30592, 30596}, {30600, 30616, 30632, 30642, 30655, 30662, 30669, 30679, 30692, 30711, 30727, 30743, 0}, {30600, 30616, 30632, 30642, 30655, 30662, 30669, 30679, 30692, 30759, 30727, 30743, 0}, {30778, 30788, 30632, 30798, 30655, 30662, 30669, 30808, 30818, 30828, 30838, 30848, 0}, {30778, 30788, 30632, 30798, 30655, 30662, 30669, 30808, 30818, 30828, 30838, 30848, 0}, 0, 0, 185, 187, {2277,1692,0,0,0,0,0,0,0,0,0,0,0,0},{30858,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, 31125, 31166, {31207, 31226, 31245, 31270, 31289, 31311, 31336}, {31355, 17738, 31365, 17761, 31381, 17784, 17800}, {31394, 17814, 31398, 17828, 31402, 17842, 17849}, {17853, 31409, 17888, 31437, 25927, 31456, 17940, 31466, 31482, 31513, 31535, 31560, 0}, {17853, 31409, 17888, 31437, 25927, 31456, 17940, 31466, 31482, 31513, 31535, 31560, 0}, {17853, 31409, 17888, 31437, 25927, 31456, 17940, 31466, 31482, 31513, 31535, 31560, 0}, {17853, 31409, 17888, 31437, 25927, 31456, 17940, 31466, 31482, 31513, 31535, 31560, 0}, 0, 0, 185, 187, {3773,3782,3789,3798,1735,1692,3809,0,0,0,0,0,0,0},{20161,20181,222,10709,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},{25807,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}, {31585, 31592, 31601, 31616, 31627, 31636, 31643, 31650, 31657, 31668, 31681, 31694, 0}, {31585, 31592, 31601, 31616, 31627, 31636, 31643, 31650, 31657, 31668, 31681, 31694, 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},{31699,31720,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}}, + {31735, 1929, 1932, {31741, 31748, 31754, 31761, 31772, 31780, 31789}, {31796, 8413, 3761, 31800, 31804, 31808, 10790}, {2436, 2436, 2428, 2428, 5694, 16401, 2023}, {3991, 31812, 31820, 4011, 4017, 31826, 31832, 4034, 31838, 31848, 31856, 31866, 0}, {3991, 31812, 31820, 4011, 4017, 31826, 31832, 4034, 31838, 31848, 31856, 31866, 0}, {31876, 31880, 3761, 29536, 3730, 31884, 31888, 20157, 18381, 2792, 31892, 16358, 0}, {31876, 31880, 3761, 29536, 3730, 31884, 31888, 20157, 18381, 2792, 31892, 16358, 0}, 0, 0, 185, 187, {3773,3782,3789,3798,1735,1692,3809,0,0,0,0,0,0,0},{20161,20181,222,10709,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, {31896, 31903, 31911, 31918, 31925, 31933, 31941}, {31948, 31951, 31954, 31957, 31960, 31963, 31966}, {2436, 2436, 2430, 2436, 12817, 3987, 12817}, {31969, 31977, 31987, 31993, 32001, 32006, 32011, 32016, 32023, 20142, 32031, 32039, 0}, {31969, 31977, 31987, 31993, 32001, 32006, 32011, 32016, 32023, 20142, 32031, 32039, 0}, {2759, 32047, 3761, 32051, 3730, 31094, 31098, 32055, 3701, 2792, 32059, 16358, 0}, {2759, 32047, 3761, 32051, 3730, 31094, 31098, 32055, 3701, 2792, 32059, 16358, 0}, 0, 0, 185, 187, {2277,2286,189,198,1735,1692,3809,0,0,0,0,0,0,0},{20161,20181,222,10709,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, 32063, 32074, {32084, 32102, 32117, 32139, 32152, 32166, 32183}, {32207, 32215, 32220, 32139, 32152, 32232, 32239}, {0, 0, 0, 0, 0, 0, 0}, {32253, 32275, 32291, 32311, 32325, 32342, 32357, 32374, 32388, 32401, 32420, 32434, 0}, {32253, 32275, 32291, 32311, 32325, 32342, 32357, 32374, 32388, 32401, 32420, 32434, 0}, {32453, 32468, 32477, 32490, 32497, 32507, 32515, 32525, 32532, 32538, 32550, 32557, 0}, {32453, 32468, 32477, 32490, 32497, 32507, 32515, 32525, 32532, 32538, 32550, 32557, 0}, 0, 0, 185, 187, {2277,2286,189,198,1735,1692,3809,0,0,0,0,0,0,0},{222,20161,20181,10709,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},{25807,0,0,0,0,0,0,0}}, + {3613, 0, 0, {32569, 32577, 15933, 15942, 15951, 32588, 32598}, {16389, 15983, 15987, 15991, 15995, 16252, 32607}, {0, 0, 0, 0, 0, 0, 0}, {32611, 32620, 32630, 32638, 10819, 3734, 32646, 32652, 32661, 32670, 32679, 32688, 0}, {32611, 32620, 32630, 32638, 10819, 3734, 32646, 32652, 32661, 32670, 32679, 32688, 0}, {2759, 2763, 16002, 32697, 10819, 2776, 2780, 20157, 18381, 2792, 32701, 16358, 0}, {2759, 2763, 16002, 32697, 10819, 2776, 2780, 20157, 18381, 2792, 32701, 16358, 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}}, + {32705, 32718, 32723, {32728, 32735, 32750, 32764, 32780, 32795, 32811}, {6289, 32826, 2530, 32830, 32834, 32838, 32842}, {2023, 12817, 2428, 2018, 2023, 2430, 12817}, {7370, 7378, 32846, 32853, 32860, 2469, 2474, 32865, 32875, 32886, 32895, 32905, 0}, {7370, 7378, 32846, 32853, 32860, 2469, 2474, 32865, 32875, 32886, 32895, 32905, 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},{32915,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, 32934, 32939, {32944, 32960, 32968, 32976, 32985, 32997, 33007}, {33017, 33023, 33029, 33033, 33037, 33045, 3701}, {0, 0, 0, 0, 0, 0, 0}, {33052, 33065, 33079, 33088, 33094, 33098, 33103, 33111, 16313, 33124, 16330, 16338, 0}, {33052, 33065, 33079, 33088, 33094, 33098, 33103, 33111, 16313, 33124, 16330, 16338, 0}, {33133, 2763, 33137, 16346, 33094, 33141, 2780, 33145, 2788, 33153, 2796, 16358, 0}, {33133, 2763, 33137, 16346, 33094, 33141, 2780, 33145, 2788, 33153, 2796, 16358, 0}, 0, 0, 185, 187, {2277,2286,189,198,1735,1692,3809,0,0,0,0,0,0,0},{20161,20181,222,10709,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}}, + {33159, 33186, 33193, {33200, 33210, 33220, 33230, 33240, 33250, 33260}, {33270, 33277, 33284, 33291, 33298, 33305, 33312}, {33319, 33323, 33327, 33331, 33335, 33339, 33343}, {33347, 33354, 33361, 33368, 33375, 33382, 33389, 33396, 33403, 33410, 33417, 33427, 0}, {33347, 33354, 33361, 33368, 33375, 33382, 33389, 33396, 33403, 33410, 33417, 33427, 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},{33437,33461,33491,33521,33538,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},{33561,1914,0,0,0,0,0,0}}, + {289, 0, 0, {28275, 8413, 33578, 33585, 33595, 33600, 33607}, {33614, 6273, 33618, 4850, 33623, 33628, 33633}, {4421, 33638, 33641, 33644, 33647, 33650, 33653}, {33656, 33663, 33578, 33674, 33680, 33684, 33693, 33700, 33705, 33714, 33719, 33722, 0}, {33656, 33663, 33578, 33674, 33680, 33684, 33693, 33700, 33705, 33714, 33719, 33722, 0}, {33728, 33732, 33739, 28398, 33680, 33744, 33749, 33700, 33754, 33714, 33719, 33759, 0}, {33728, 33732, 33739, 28398, 33680, 33744, 33749, 33700, 33754, 33714, 33719, 33759, 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}}, + {33916, 33934, 33939, {33944, 33969, 33998, 34023, 34036, 34051, 34068}, {34083, 34088, 34093, 34098, 34103, 34108, 8800}, {19417, 19417, 34113, 8811, 8814, 19417, 8811}, {34116, 34135, 34150, 34172, 34192, 34208, 34224, 34238, 34264, 34288, 34305, 34322, 0}, {34116, 34135, 34150, 34172, 34192, 34208, 34224, 34238, 34264, 34288, 34305, 34322, 0}, {34339, 34348, 34357, 34371, 34385, 34397, 34409, 34419, 34435, 34449, 34456, 34463, 0}, {34339, 34348, 34357, 34371, 34385, 34397, 34409, 34419, 34435, 34449, 34456, 34463, 0}, 0, 1, 691, 187, {1156,4753,1692,34470,34480,0,0,0,0,0,0,0,0,0},{34493,34528,34557,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},{34592,0,0,0,0,0,0,0}}, + {20032, 0, 0, {34608, 34620, 34631, 34643, 34655, 34665, 34677}, {34692, 34697, 34702, 34707, 34712, 34717, 34722}, {0, 0, 0, 0, 0, 0, 0}, {34727, 34736, 34748, 34756, 34761, 34771, 34778, 34787, 34794, 34800, 34809, 34820, 0}, {34727, 34736, 34748, 34756, 34761, 34771, 34778, 34787, 34794, 34800, 34809, 34820, 0}, {34828, 34833, 34838, 34843, 34848, 34853, 34858, 34712, 34863, 34868, 34873, 34878, 0}, {34828, 34833, 34838, 34843, 34848, 34853, 34858, 34712, 34863, 34868, 34873, 34878, 0}, 0, 0, 185, 187, {9796,2286,0,0,0,0,0,0,0,0,0,0,0,0},{34883,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, 34903, 34905, {34907, 34920, 34928, 34937, 34947, 34957, 34966}, {34978, 34982, 34986, 34990, 34994, 34998, 35002}, {2673, 2436, 2428, 7736, 12817, 5694, 2023}, {35006, 35020, 35031, 35040, 35051, 35063, 35077, 35089, 35102, 35115, 35127, 35140, 0}, {35006, 35020, 35031, 35040, 35051, 35063, 35077, 35089, 35102, 35115, 35127, 35140, 0}, {35154, 35159, 35165, 35171, 35176, 35182, 35188, 35193, 35199, 35204, 19138, 35210, 0}, {35154, 35159, 35165, 35171, 35176, 35182, 35188, 35193, 35199, 35204, 19138, 35210, 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, 35285, 35288, {35291, 35302, 35317, 35334, 35351, 35364, 35377}, {35291, 35302, 35317, 35334, 35351, 35364, 35377}, {35388, 35391, 35394, 35397, 35400, 13549, 13540}, {35403, 35427, 35436, 35445, 35456, 35465, 35478, 35487, 35492, 35503, 35525, 35549, 0}, {35403, 35427, 35436, 35445, 35456, 35465, 35478, 35487, 35492, 35503, 35525, 35549, 0}, {35403, 35427, 35436, 35445, 35456, 35465, 35478, 35487, 35492, 35503, 35525, 35549, 0}, {35403, 35427, 35436, 35445, 35456, 35465, 35478, 35487, 35492, 35503, 35525, 35549, 0}, 0, 6, 185, 187, {198,189,1692,0,0,0,0,0,0,0,0,0,0,0},{10709,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,35591,4762,1692,0,0,0,0,0,0,0,0},{2818,2300,35601,0,0,0,0,0,0,0},{251,843,35611,35620,35630,35641,8353,35646,35652,0,0,0},{269,848,35660,35673,2862,35685,35699,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}, {35706, 6273, 4845, 35711, 35717, 35722, 35726}, {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}, {35732, 5803, 35736, 1086, 35741, 2538, 2542, 1096, 1100, 1105, 1110, 35745, 0}, {35732, 5803, 35736, 1086, 35741, 2538, 2542, 1096, 1100, 1105, 1110, 35745, 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}}, + {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,35571,4762,1692,0,0,0,0,0,0,0,0},{2818,2300,35581,0,0,0,0,0,0,0},{251,843,35591,35600,35610,35621,8353,35626,35632,0,0,0},{269,848,35640,35653,2862,35665,35679,0,0},{1301,0,0,0,0,0,0,0}}, + {289, 8151, 22089, {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,13731,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}, {35686, 6273, 4845, 35691, 35697, 35702, 35706}, {2673, 2436, 2428, 29423, 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}, {35712, 5803, 35716, 1086, 35721, 2538, 2542, 1096, 1100, 1105, 1110, 35725, 0}, {35712, 5803, 35716, 1086, 35721, 2538, 2542, 1096, 1100, 1105, 1110, 35725, 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,35611,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,35750,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, 35760, 35765, {2345, 10060, 35770, 2368, 2375, 2383, 35777}, {2398, 35785, 35790, 2411, 2415, 2419, 35794}, {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}, {35798, 35806, 35816, 4011, 29467, 35823, 35829, 4034, 29484, 29493, 29501, 35835, 0}, {35798, 35806, 35816, 4011, 29467, 35823, 35829, 4034, 29484, 29493, 29501, 35835, 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,35844,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, {35853, 35864, 35888, 35918, 35935, 35957, 35966}, {15057, 15060, 15065, 15071, 15075, 7736, 15080}, {6617, 6605, 6607, 6609, 6611, 6613, 6615}, {35977, 35990, 501, 36003, 521, 36014, 36023, 542, 36032, 36049, 36064, 36077, 0}, {35977, 35990, 501, 36003, 521, 36014, 36023, 542, 36032, 36049, 36064, 36077, 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, {36090, 36105, 36120, 36135, 36152, 36169, 36178}, {36189, 36196, 36203, 36210, 36217, 19832, 36224}, {36231, 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,36234,4762,189,1692,0,0,0,0,0,0,0,0},{36245,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, 35305, 35308, {35311, 35322, 35337, 35354, 35371, 35384, 35397}, {35311, 35322, 35337, 35354, 35371, 35384, 35397}, {35408, 35411, 35414, 35417, 35420, 13574, 13565}, {36266, 36277, 13604, 36290, 36301, 36310, 36321, 36332, 36343, 36356, 36369, 36382, 0}, {36266, 36277, 13604, 36290, 36301, 36310, 36321, 36332, 36343, 36356, 36369, 36382, 0}, {36266, 36277, 13604, 36290, 36301, 36310, 36321, 36332, 36343, 36356, 36369, 36382, 0}, {36266, 36277, 13604, 36290, 36301, 36310, 36321, 36332, 36343, 36356, 36369, 36382, 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}, {36395, 2682, 2690, 2696, 2702, 2706, 2711, 2716, 2723, 2733, 2741, 2750, 0}, {36395, 2682, 2690, 2696, 2702, 2706, 2711, 2716, 2723, 2733, 2741, 2750, 0}, {36403, 2763, 2767, 2772, 2702, 2776, 2780, 2784, 2788, 2792, 2796, 2800, 0}, {36403, 2763, 2767, 2772, 2702, 2776, 2780, 2784, 2788, 2792, 2796, 2800, 0}, 2, 1, 691, 187, {1156,1167,1692,36408,7419,0,0,0,0,0,0,0,0,0},{36418,36438,0,0,0,0,0,0,0,0},{251,843,2850,36450,35641,8353,35652,0,0,0,0,0},{269,848,2862,35685,35699,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,35591,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,35730,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, 35740, 35745, {2345, 10060, 35750, 2368, 2375, 2383, 35757}, {2398, 10088, 35765, 2411, 2415, 2419, 35769}, {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}, {35773, 35781, 35791, 4011, 29442, 35798, 35804, 4034, 29459, 29468, 29476, 35810, 0}, {35773, 35781, 35791, 4011, 29442, 35798, 35804, 4034, 29459, 29468, 29476, 35810, 0}, {2759, 20317, 3761, 29536, 2702, 2776, 2780, 20157, 18381, 29549, 2796, 2800, 0}, {2759, 20317, 3761, 29536, 2702, 2776, 2780, 20157, 18381, 29549, 2796, 2800, 0}, 2, 1, 185, 187, {198,1156,1128,189,1167,1139,1681,1703,1692,1735,35819,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, 2411, 2415, 2419, 10097}, {2023, 2428, 2430, 2432, 2430, 2434, 2436}, {7370, 7378, 4887, 2459, 2465, 2469, 2474, 10102, 2486, 2496, 2504, 2513, 0}, {7370, 7378, 4887, 2459, 2465, 2469, 2474, 10102, 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, 691, 187, {4753,1156,4762,1692,0,0,0,0,0,0,0,0,0,0},{10110,10128,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, {35828, 35839, 35863, 35893, 35910, 35932, 35941}, {15032, 15035, 15040, 15046, 15050, 7736, 15055}, {6617, 6605, 6607, 6609, 6611, 6613, 6615}, {35952, 35965, 501, 35978, 521, 35989, 35998, 542, 36007, 36024, 36039, 36052, 0}, {35952, 35965, 501, 35978, 521, 35989, 35998, 542, 36007, 36024, 36039, 36052, 0}, {15206, 8135, 2530, 2534, 15154, 15210, 15214, 15218, 15222, 2554, 15226, 15230, 0}, {15206, 8135, 2530, 2534, 15154, 15210, 15214, 15218, 15222, 2554, 15226, 15230, 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, {18855, 18869, 18879, 18890, 18904, 18915, 18926}, {18939, 18944, 18949, 18956, 18962, 18968, 18974}, {2673, 2436, 2428, 7736, 2673, 12817, 2023}, {18979, 18987, 18995, 19002, 19011, 19021, 19031, 19037, 19045, 19060, 19078, 19086, 0}, {18979, 18987, 18995, 19002, 19011, 19021, 19031, 19037, 19045, 19060, 19078, 19086, 0}, {19094, 19098, 18995, 19104, 19108, 19113, 19031, 19119, 19124, 19131, 19138, 19143, 0}, {19094, 19098, 18995, 19104, 19108, 19113, 19031, 19119, 19124, 19131, 19138, 19143, 0}, 2, 0, 185, 187, {198,189,2286,4762,1692,0,0,0,0,0,0,0,0,0},{1242,5505,10151,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, {36065, 36080, 36095, 36110, 36127, 36144, 36153}, {36164, 36171, 36178, 36185, 36192, 19807, 36199}, {36206, 19414, 8811, 8814, 8808, 19411, 19821}, {13204, 13215, 8845, 13228, 8867, 13239, 13246, 8892, 13253, 13268, 13281, 13292, 0}, {13204, 13215, 8845, 13228, 8867, 13239, 13246, 8892, 13253, 13268, 13281, 13292, 0}, {13305, 13312, 13319, 13326, 8867, 13239, 13246, 13333, 13340, 13347, 13354, 13361, 0}, {13305, 13312, 13319, 13326, 8867, 13239, 13246, 13333, 13340, 13347, 13354, 13361, 0}, 0, 1, 691, 187, {1156,1167,36209,4762,189,1692,0,0,0,0,0,0,0,0},{36220,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, 20352, 20380, {20402, 20421, 20440, 20465, 20484, 20518, 20543}, {20562, 20572, 20582, 20598, 20608, 20633, 20649}, {20659, 20663, 20670, 20674, 20681, 20688, 20695}, {20699, 20727, 20761, 20777, 20796, 20803, 20813, 20829, 20845, 20876, 20898, 20920, 0}, {20699, 20727, 20761, 20777, 20796, 20803, 20813, 20829, 20845, 20876, 20898, 20920, 0}, {20699, 20727, 20761, 20777, 20796, 20803, 20813, 20829, 20845, 20876, 20898, 20920, 0}, {20699, 20727, 20761, 20777, 20796, 20803, 20813, 20829, 20845, 20876, 20898, 20920, 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,20973,20982,0,0,0,0,0,0,0,0},{4302,2337,20990,21002,0,0,0,0,0},{278,0,0,0,0,0,0,0}}, + {1, 35285, 35288, {35291, 35302, 35317, 35334, 35351, 35364, 35377}, {35291, 35302, 35317, 35334, 35351, 35364, 35377}, {35388, 35391, 35394, 35397, 35400, 13549, 13540}, {36241, 36252, 13579, 36265, 36276, 36285, 36296, 36307, 36318, 36331, 36344, 36357, 0}, {36241, 36252, 13579, 36265, 36276, 36285, 36296, 36307, 36318, 36331, 36344, 36357, 0}, {36241, 36252, 13579, 36265, 36276, 36285, 36296, 36307, 36318, 36331, 36344, 36357, 0}, {36241, 36252, 13579, 36265, 36276, 36285, 36296, 36307, 36318, 36331, 36344, 36357, 0}, 0, 6, 185, 187, {198,189,1692,0,0,0,0,0,0,0,0,0,0,0},{10709,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}, {35216, 35223, 35230, 35237, 35244, 35251, 35258}, {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}, {36370, 2682, 2690, 2696, 2702, 2706, 2711, 2716, 2723, 2733, 2741, 2750, 0}, {36370, 2682, 2690, 2696, 2702, 2706, 2711, 2716, 2723, 2733, 2741, 2750, 0}, {36378, 2763, 2767, 2772, 2702, 2776, 2780, 2784, 2788, 2792, 2796, 2800, 0}, {36378, 2763, 2767, 2772, 2702, 2776, 2780, 2784, 2788, 2792, 2796, 2800, 0}, 2, 1, 691, 187, {1156,1167,1692,36383,7419,0,0,0,0,0,0,0,0,0},{36393,36413,0,0,0,0,0,0,0,0},{251,843,2850,36425,35621,8353,35632,0,0,0,0,0},{269,848,2862,35665,35679,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, {36461, 36469, 36477, 36485, 36497, 36506, 36518}, {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}, {36529, 36540, 36547, 36555, 36562, 36569, 36576, 36584, 36590, 36598, 36606, 36614, 0}, {36529, 36540, 36547, 36555, 36562, 36569, 36576, 36584, 36590, 36598, 36606, 36614, 0}, 2, 1, 691, 187, {4753,1156,4762,1692,0,0,0,0,0,0,0,0,0,0},{36621,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, 35305, 35308, {35311, 35322, 35337, 35354, 35371, 35384, 35397}, {35311, 35322, 35337, 35354, 35371, 35384, 35397}, {35408, 35411, 35414, 35417, 35420, 13574, 13565}, {36266, 36277, 13604, 36290, 36301, 36310, 36321, 36332, 36343, 36356, 36369, 36382, 0}, {36266, 36277, 13604, 36290, 36301, 36310, 36321, 36332, 36343, 36356, 36369, 36382, 0}, {36266, 36277, 13604, 36290, 36301, 36310, 36321, 36332, 36343, 36356, 36369, 36382, 0}, {36266, 36277, 13604, 36290, 36301, 36310, 36321, 36332, 36343, 36356, 36369, 36382, 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},{36647,2818,36673,36688,0,0,0,0,0,0},{251,843,2321,35630,0,0,0,0,0,0,0,0},{269,35685,2862,35699,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,36702,3809,14921,1692,0,0,0,0,0},{3838,20186,36710,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}}, + {18447, 18460, 18465, {36436, 36444, 36452, 36460, 36472, 36481, 36493}, {18550, 18555, 18560, 18565, 18570, 18575, 18580}, {2023, 2428, 2673, 6293, 2673, 16401, 2436}, {18585, 18602, 18615, 18629, 18642, 18655, 18668, 18682, 18694, 18708, 18722, 18736, 0}, {18585, 18602, 18615, 18629, 18642, 18655, 18668, 18682, 18694, 18708, 18722, 18736, 0}, {36504, 36515, 36522, 36530, 36537, 36544, 36551, 36559, 36565, 36573, 36581, 36589, 0}, {36504, 36515, 36522, 36530, 36537, 36544, 36551, 36559, 36565, 36573, 36581, 36589, 0}, 2, 1, 691, 187, {4753,1156,4762,1692,0,0,0,0,0,0,0,0,0,0},{36596,18837,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, 35285, 35288, {35291, 35302, 35317, 35334, 35351, 35364, 35377}, {35291, 35302, 35317, 35334, 35351, 35364, 35377}, {35388, 35391, 35394, 35397, 35400, 13549, 13540}, {36241, 36252, 13579, 36265, 36276, 36285, 36296, 36307, 36318, 36331, 36344, 36357, 0}, {36241, 36252, 13579, 36265, 36276, 36285, 36296, 36307, 36318, 36331, 36344, 36357, 0}, {36241, 36252, 13579, 36265, 36276, 36285, 36296, 36307, 36318, 36331, 36344, 36357, 0}, {36241, 36252, 13579, 36265, 36276, 36285, 36296, 36307, 36318, 36331, 36344, 36357, 0}, 0, 6, 185, 187, {198,189,1692,0,0,0,0,0,0,0,0,0,0,0},{10709,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,35265,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},{36622,2818,36648,36663,0,0,0,0,0,0},{251,843,2321,35610,0,0,0,0,0,0,0,0},{269,35665,2862,35679,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,36677,3809,14896,1692,0,0,0,0,0},{3838,20161,36685,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},{29553,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, 35305, 35308, {35311, 35322, 35337, 35354, 35371, 35384, 35397}, {35311, 35322, 35337, 35354, 35371, 35384, 35397}, {35408, 35411, 35414, 35417, 35420, 13574, 13565}, {36721, 36732, 13604, 36743, 36754, 36761, 36770, 36783, 36343, 36356, 36369, 36382, 0}, {36721, 36732, 13604, 36743, 36754, 36761, 36770, 36783, 36343, 36356, 36369, 36382, 0}, {36721, 36732, 13604, 36743, 36754, 36761, 36770, 36783, 36343, 36356, 36369, 36382, 0}, {36721, 36732, 13604, 36743, 36754, 36761, 36770, 36783, 36343, 36356, 36369, 36382, 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,36790,36817,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,35591,4762,1692,7419,4753,0,0,0,0,0,0},{2818,2300,36833,0,0,0,0,0,0,0},{251,843,35630,35641,2321,0,0,0,0,0,0,0},{269,848,2862,35685,35699,0,0,0,0},{1301,0,0,0,0,0,0,0}}, + {1, 35285, 35288, {35291, 35302, 35317, 35334, 35351, 35364, 35377}, {35291, 35302, 35317, 35334, 35351, 35364, 35377}, {35388, 35391, 35394, 35397, 35400, 13549, 13540}, {36696, 36707, 13579, 36718, 36729, 36736, 36745, 36758, 36318, 36331, 36344, 36357, 0}, {36696, 36707, 13579, 36718, 36729, 36736, 36745, 36758, 36318, 36331, 36344, 36357, 0}, {36696, 36707, 13579, 36718, 36729, 36736, 36745, 36758, 36318, 36331, 36344, 36357, 0}, {36696, 36707, 13579, 36718, 36729, 36736, 36745, 36758, 36318, 36331, 36344, 36357, 0}, 0, 6, 2566, 187, {1128,1139,1692,0,0,0,0,0,0,0,0,0,0,0},{10709,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}, {35216, 35223, 35230, 35237, 35244, 35251, 35258}, {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,36765,36792,2568,1822,35265,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,35571,4762,1692,7419,4753,0,0,0,0,0,0},{2818,2300,36808,0,0,0,0,0,0,0},{251,843,35610,35621,2321,0,0,0,0,0,0,0},{269,848,2862,35665,35679,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,36845,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},{36854,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, 36877, 36887, {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, 36895, 36905, 36913, 36922, 0}, {2438, 2445, 15168, 2459, 2465, 2469, 2474, 12088, 36895, 36905, 36913, 36922, 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,36931,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, 35305, 35308, {35311, 35322, 35337, 35354, 35371, 35384, 35397}, {35311, 35322, 35337, 35354, 35371, 35384, 35397}, {35408, 35411, 35414, 35417, 35420, 13574, 13565}, {36266, 36277, 13604, 36290, 36754, 36310, 36940, 36953, 36960, 36356, 36971, 36982, 0}, {36266, 36277, 13604, 36290, 36754, 36310, 36940, 36953, 36960, 36356, 36971, 36982, 0}, {36266, 36277, 13604, 36290, 36754, 36310, 36940, 36953, 36960, 36356, 36971, 36982, 0}, {36266, 36277, 13604, 36290, 36754, 36310, 36940, 36953, 36960, 36356, 36971, 36982, 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}}, + {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,36820,14885,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},{36829,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}}, + {12084, 36852, 36862, {9187, 9196, 9208, 9215, 9223, 9233, 9239}, {9246, 9250, 9254, 9258, 9262, 9267, 9271}, {0, 0, 0, 0, 0, 0, 0}, {2438, 2445, 15143, 2459, 2465, 2469, 2474, 12063, 36870, 36880, 36888, 36897, 0}, {2438, 2445, 15143, 2459, 2465, 2469, 2474, 12063, 36870, 36880, 36888, 36897, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 12070, 2550, 2554, 2558, 2562, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 12070, 2550, 2554, 2558, 2562, 0}, 0, 1, 691, 187, {4753,4762,2266,1156,36906,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, 35285, 35288, {35291, 35302, 35317, 35334, 35351, 35364, 35377}, {35291, 35302, 35317, 35334, 35351, 35364, 35377}, {35388, 35391, 35394, 35397, 35400, 13549, 13540}, {36241, 36252, 13579, 36265, 36729, 36285, 36915, 36928, 36935, 36331, 36946, 36957, 0}, {36241, 36252, 13579, 36265, 36729, 36285, 36915, 36928, 36935, 36331, 36946, 36957, 0}, {36241, 36252, 13579, 36265, 36729, 36285, 36915, 36928, 36935, 36331, 36946, 36957, 0}, {36241, 36252, 13579, 36265, 36729, 36285, 36915, 36928, 36935, 36331, 36946, 36957, 0}, 0, 6, 2566, 187, {1128,1139,1692,0,0,0,0,0,0,0,0,0,0,0},{10709,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}}, + {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},{29553,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, 36877, 36887, {12020, 36993, 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, 36895, 36905, 36913, 36922, 0}, {2438, 2445, 15168, 2459, 2465, 2538, 2542, 12088, 36895, 36905, 36913, 36922, 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},{37004,0,0,0,0,0,0,0}}, - {1, 35305, 35308, {35311, 35322, 35337, 35354, 35371, 35384, 35397}, {35311, 35322, 35337, 35354, 35371, 35384, 35397}, {35408, 35411, 35414, 35417, 35420, 13574, 13565}, {36721, 36732, 13604, 36743, 36754, 36761, 36770, 36783, 36343, 36356, 36369, 36382, 0}, {36721, 36732, 13604, 36743, 36754, 36761, 36770, 36783, 36343, 36356, 36369, 36382, 0}, {36721, 36732, 13604, 36743, 36754, 36761, 36770, 36783, 36343, 36356, 36369, 36382, 0}, {36721, 36732, 13604, 36743, 36754, 36761, 36770, 36783, 36343, 36356, 36369, 36382, 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}}, + {1921, 36852, 36862, {11995, 36968, 9208, 12020, 9223, 9233, 9239}, {9246, 9250, 9254, 12041, 9262, 9267, 9271}, {9275, 9277, 9279, 9281, 9283, 9277, 9281}, {2438, 2445, 15143, 2459, 2465, 2538, 2542, 12063, 36870, 36880, 36888, 36897, 0}, {2438, 2445, 15143, 2459, 2465, 2538, 2542, 12063, 36870, 36880, 36888, 36897, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 12070, 2550, 2554, 2558, 2562, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 12070, 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},{36979,0,0,0,0,0,0,0}}, + {1, 35285, 35288, {35291, 35302, 35317, 35334, 35351, 35364, 35377}, {35291, 35302, 35317, 35334, 35351, 35364, 35377}, {35388, 35391, 35394, 35397, 35400, 13549, 13540}, {36696, 36707, 13579, 36718, 36729, 36736, 36745, 36758, 36318, 36331, 36344, 36357, 0}, {36696, 36707, 13579, 36718, 36729, 36736, 36745, 36758, 36318, 36331, 36344, 36357, 0}, {36696, 36707, 13579, 36718, 36729, 36736, 36745, 36758, 36318, 36331, 36344, 36357, 0}, {36696, 36707, 13579, 36718, 36729, 36736, 36745, 36758, 36318, 36331, 36344, 36357, 0}, 0, 0, 2566, 187, {1128,1139,1692,0,0,0,0,0,0,0,0,0,0,0},{10709,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, 37015, 37033, {37048, 37061, 37080, 37093, 37108, 37125, 10975}, {37136, 37143, 37150, 37157, 37164, 37171, 37178}, {456, 459, 37185, 465, 468, 459, 465}, {37188, 37201, 501, 510, 15858, 15865, 15874, 542, 37216, 37235, 37250, 37267, 0}, {37188, 37201, 501, 510, 15858, 15865, 15874, 542, 37216, 37235, 37250, 37267, 0}, {37284, 37291, 37298, 37305, 15858, 37312, 37319, 37326, 37333, 37340, 37347, 37354, 0}, {37284, 37291, 37298, 37305, 15858, 37312, 37319, 37326, 37333, 37340, 37347, 37354, 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, 35305, 35308, {35311, 35322, 35337, 35354, 35371, 35384, 35397}, {35311, 35322, 35337, 35354, 35371, 35384, 35397}, {35408, 35411, 35414, 35417, 35420, 13574, 13565}, {36266, 36277, 13604, 36290, 36301, 36310, 36321, 36332, 36343, 36356, 36369, 36382, 0}, {36266, 36277, 13604, 36290, 36301, 36310, 36321, 36332, 36343, 36356, 36369, 36382, 0}, {36266, 36277, 13604, 36290, 36301, 36310, 36321, 36332, 36343, 36356, 36369, 36382, 0}, {36266, 36277, 13604, 36290, 36301, 36310, 36321, 36332, 36343, 36356, 36369, 36382, 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, 37015, 37033, {37048, 37061, 37080, 37093, 37108, 37125, 10975}, {37136, 37143, 37150, 37157, 37164, 37171, 37178}, {456, 459, 37185, 465, 468, 459, 465}, {37188, 37201, 501, 510, 15858, 15865, 15874, 542, 37216, 37235, 37250, 37267, 0}, {37188, 37201, 501, 510, 15858, 15865, 15874, 542, 37216, 37235, 37250, 37267, 0}, {37284, 37291, 37298, 37305, 15858, 37312, 37319, 37326, 37333, 37340, 37347, 37354, 0}, {37284, 37291, 37298, 37305, 15858, 37312, 37319, 37326, 37333, 37340, 37347, 37354, 0}, 0, 1, 691, 187, {4753,4762,2266,1156,36931,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, 35305, 35308, {35311, 35322, 35337, 35354, 35371, 35384, 35397}, {35311, 35322, 35337, 35354, 35371, 35384, 35397}, {35408, 35411, 35414, 35417, 35420, 13574, 13565}, {36266, 36277, 13604, 36290, 36301, 36310, 36321, 36332, 36343, 36356, 36369, 36382, 0}, {36266, 36277, 13604, 36290, 36301, 36310, 36321, 36332, 36343, 36356, 36369, 36382, 0}, {36266, 36277, 13604, 36290, 36301, 36310, 36321, 36332, 36343, 36356, 36369, 36382, 0}, {36266, 36277, 13604, 36290, 36301, 36310, 36321, 36332, 36343, 36356, 36369, 36382, 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, 36877, 36887, {12020, 36993, 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, 36895, 36905, 36913, 36922, 0}, {2438, 2445, 15168, 2459, 2465, 2538, 2542, 12088, 36895, 36905, 36913, 36922, 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},{37004,0,0,0,0,0,0,0}}, - {1, 35305, 35308, {35311, 35322, 35337, 35354, 35371, 35384, 35397}, {35311, 35322, 35337, 35354, 35371, 35384, 35397}, {35408, 35411, 35414, 35417, 35420, 13574, 13565}, {35423, 35447, 35456, 35465, 35476, 35485, 35498, 35507, 35512, 35523, 35545, 35569, 0}, {35423, 35447, 35456, 35465, 35476, 35485, 35498, 35507, 35512, 35523, 35545, 35569, 0}, {35423, 35447, 35456, 35465, 35476, 35485, 35498, 35507, 35512, 35523, 35545, 35569, 0}, {35423, 35447, 35456, 35465, 35476, 35485, 35498, 35507, 35512, 35523, 35545, 35569, 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, 37015, 37033, {37048, 37061, 37080, 8714, 37108, 37125, 10975}, {37136, 37143, 37150, 37361, 37164, 37171, 37178}, {456, 459, 37185, 465, 468, 459, 465}, {37188, 37201, 501, 510, 15858, 37312, 37319, 542, 37216, 37235, 37250, 37267, 0}, {37188, 37201, 501, 510, 15858, 37312, 37319, 542, 37216, 37235, 37250, 37267, 0}, {37284, 37291, 37298, 37305, 15858, 37312, 37319, 37326, 37333, 37340, 37347, 37354, 0}, {37284, 37291, 37298, 37305, 15858, 37312, 37319, 37326, 37333, 37340, 37347, 37354, 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},{37004,0,0,0,0,0,0,0}}, - {1, 35305, 35308, {35311, 35322, 35337, 35354, 35371, 35384, 35397}, {35311, 35322, 35337, 35354, 35371, 35384, 35397}, {35408, 35411, 35414, 35417, 35420, 13574, 13565}, {35423, 35447, 35456, 35465, 35476, 35485, 35498, 35507, 35512, 35523, 35545, 35569, 0}, {35423, 35447, 35456, 35465, 35476, 35485, 35498, 35507, 35512, 35523, 35545, 35569, 0}, {35423, 35447, 35456, 35465, 35476, 35485, 35498, 35507, 35512, 35523, 35545, 35569, 0}, {35423, 35447, 35456, 35465, 35476, 35485, 35498, 35507, 35512, 35523, 35545, 35569, 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}}, - {37368, 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, 36877, 36887, {12020, 36993, 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, 36895, 36905, 36913, 36922, 0}, {2438, 2445, 15168, 2459, 2465, 2538, 2542, 12088, 36895, 36905, 36913, 36922, 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},{37004,0,0,0,0,0,0,0}}, - {1, 35305, 35308, {35311, 35322, 35337, 35354, 35371, 35384, 35397}, {35311, 35322, 35337, 35354, 35371, 35384, 35397}, {35408, 35411, 35414, 35417, 35420, 13574, 13565}, {35423, 35447, 35456, 35465, 35476, 35485, 35498, 35507, 35512, 35523, 35545, 35569, 0}, {35423, 35447, 35456, 35465, 35476, 35485, 35498, 35507, 35512, 35523, 35545, 35569, 0}, {35423, 35447, 35456, 35465, 35476, 35485, 35498, 35507, 35512, 35523, 35545, 35569, 0}, {35423, 35447, 35456, 35465, 35476, 35485, 35498, 35507, 35512, 35523, 35545, 35569, 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},{37381,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, 37015, 37033, {37048, 37061, 37080, 8714, 37108, 37125, 10975}, {37136, 37143, 37150, 37361, 37164, 37171, 37178}, {456, 459, 37185, 465, 468, 459, 465}, {37188, 37201, 501, 510, 15858, 37312, 37319, 542, 37216, 37235, 37250, 37267, 0}, {37188, 37201, 501, 510, 15858, 37312, 37319, 542, 37216, 37235, 37250, 37267, 0}, {37284, 37291, 37298, 37305, 15858, 37312, 37319, 37326, 37333, 37340, 37347, 37354, 0}, {37284, 37291, 37298, 37305, 15858, 37312, 37319, 37326, 37333, 37340, 37347, 37354, 0}, 0, 1, 691, 187, {9499,9509,6153,9517,9529,9539,9549,37391,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},{37004,0,0,0,0,0,0,0}}, - {1, 35305, 35308, {35311, 35322, 35337, 35354, 35371, 35384, 35397}, {35311, 35322, 35337, 35354, 35371, 35384, 35397}, {35408, 35411, 35414, 35417, 35420, 13574, 13565}, {36266, 36277, 13604, 36290, 36301, 36310, 36321, 36332, 36343, 36356, 36369, 36382, 0}, {36266, 36277, 13604, 36290, 36301, 36310, 36321, 36332, 36343, 36356, 36369, 36382, 0}, {36266, 36277, 13604, 36290, 36301, 36310, 36321, 36332, 36343, 36356, 36369, 36382, 0}, {36266, 36277, 13604, 36290, 36301, 36310, 36321, 36332, 36343, 36356, 36369, 36382, 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}}, - {37403, 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, 35305, 35308, {35311, 35322, 35337, 35354, 35371, 35384, 35397}, {35311, 35322, 35337, 35354, 35371, 35384, 35397}, {35408, 35411, 35414, 35417, 35420, 13574, 13565}, {36266, 36277, 13604, 36290, 36301, 36310, 36321, 36332, 36343, 36356, 36369, 36382, 0}, {36266, 36277, 13604, 36290, 36301, 36310, 36321, 36332, 36343, 36356, 36369, 36382, 0}, {36266, 36277, 13604, 36290, 36301, 36310, 36321, 36332, 36343, 36356, 36369, 36382, 0}, {36266, 36277, 13604, 36290, 36301, 36310, 36321, 36332, 36343, 36356, 36369, 36382, 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, 35305, 35308, {35311, 35322, 35337, 35354, 35371, 35384, 35397}, {35311, 35322, 35337, 35354, 35371, 35384, 35397}, {35408, 35411, 35414, 35417, 35420, 13574, 13565}, {36266, 36277, 13604, 36290, 36301, 36310, 36321, 36332, 36343, 36356, 36369, 36382, 0}, {36266, 36277, 13604, 36290, 36301, 36310, 36321, 36332, 36343, 36356, 36369, 36382, 0}, {36266, 36277, 13604, 36290, 36301, 36310, 36321, 36332, 36343, 36356, 36369, 36382, 0}, {36266, 36277, 13604, 36290, 36301, 36310, 36321, 36332, 36343, 36356, 36369, 36382, 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, 35305, 35308, {35311, 35322, 35337, 35354, 35371, 35384, 35397}, {35311, 35322, 35337, 35354, 35371, 35384, 35397}, {35408, 35411, 35414, 35417, 35420, 13574, 13565}, {36266, 36277, 13604, 36290, 36301, 36310, 36321, 36332, 36343, 36356, 36369, 36382, 0}, {36266, 36277, 13604, 36290, 36301, 36310, 36321, 36332, 36343, 36356, 36369, 36382, 0}, {36266, 36277, 13604, 36290, 36301, 36310, 36321, 36332, 36343, 36356, 36369, 36382, 0}, {36266, 36277, 13604, 36290, 36301, 36310, 36321, 36332, 36343, 36356, 36369, 36382, 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}}, - {37403, 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,37414,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,37414,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,37414,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},{37425,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,37414,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, 37015, 37033, {37048, 37061, 37080, 37093, 37108, 37125, 10975}, {37136, 37143, 37150, 37157, 37164, 37171, 37178}, {456, 459, 37185, 465, 468, 459, 465}, {37188, 37201, 501, 510, 15858, 15865, 15874, 542, 37216, 37235, 37250, 37267, 0}, {37188, 37201, 501, 510, 15858, 15865, 15874, 542, 37216, 37235, 37250, 37267, 0}, {37284, 37291, 37298, 37305, 15858, 37312, 37319, 37326, 37333, 37340, 37347, 37354, 0}, {37284, 37291, 37298, 37305, 15858, 37312, 37319, 37326, 37333, 37340, 37347, 37354, 0}, 0, 1, 691, 187, {4753,4762,2266,1156,36931,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, 36877, 36887, {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, 36895, 36905, 36913, 36922, 0}, {2438, 2445, 15168, 2459, 2465, 2469, 2474, 12088, 36895, 36905, 36913, 36922, 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,36931,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, 37015, 37033, {37048, 37061, 37080, 8714, 37108, 37125, 10975}, {37136, 37143, 37150, 37361, 37164, 37171, 37178}, {456, 459, 37185, 465, 468, 459, 465}, {37188, 37201, 501, 510, 15858, 37312, 37319, 542, 37216, 37235, 37250, 37267, 0}, {37188, 37201, 501, 510, 15858, 37312, 37319, 542, 37216, 37235, 37250, 37267, 0}, {37284, 37291, 37298, 37305, 15858, 37312, 37319, 37326, 37333, 37340, 37347, 37354, 0}, {37284, 37291, 37298, 37305, 15858, 37312, 37319, 37326, 37333, 37340, 37347, 37354, 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},{37004,0,0,0,0,0,0,0}}, - {1921, 36877, 36887, {12020, 36993, 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, 36895, 36905, 36913, 36922, 0}, {2438, 2445, 15168, 2459, 2465, 2538, 2542, 12088, 36895, 36905, 36913, 36922, 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},{37004,0,0,0,0,0,0,0}}, - {289, 1929, 1932, {35853, 35864, 35888, 35918, 35935, 35957, 35966}, {15057, 15060, 15065, 15071, 15075, 7736, 15080}, {6617, 6605, 6607, 6609, 6611, 6613, 6615}, {35977, 35990, 501, 36003, 521, 36014, 36023, 542, 36032, 36049, 36064, 36077, 0}, {35977, 35990, 501, 36003, 521, 36014, 36023, 542, 36032, 36049, 36064, 36077, 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}}, + {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},{29553,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, 36990, 37008, {37023, 37036, 37055, 37068, 37083, 37100, 10950}, {37111, 37118, 37125, 37132, 37139, 37146, 37153}, {456, 459, 37160, 465, 468, 459, 465}, {37163, 37176, 501, 510, 15833, 15840, 15849, 542, 37191, 37210, 37225, 37242, 0}, {37163, 37176, 501, 510, 15833, 15840, 15849, 542, 37191, 37210, 37225, 37242, 0}, {37259, 37266, 37273, 37280, 15833, 37287, 37294, 37301, 37308, 37315, 37322, 37329, 0}, {37259, 37266, 37273, 37280, 15833, 37287, 37294, 37301, 37308, 37315, 37322, 37329, 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, 35285, 35288, {35291, 35302, 35317, 35334, 35351, 35364, 35377}, {35291, 35302, 35317, 35334, 35351, 35364, 35377}, {35388, 35391, 35394, 35397, 35400, 13549, 13540}, {36241, 36252, 13579, 36265, 36276, 36285, 36296, 36307, 36318, 36331, 36344, 36357, 0}, {36241, 36252, 13579, 36265, 36276, 36285, 36296, 36307, 36318, 36331, 36344, 36357, 0}, {36241, 36252, 13579, 36265, 36276, 36285, 36296, 36307, 36318, 36331, 36344, 36357, 0}, {36241, 36252, 13579, 36265, 36276, 36285, 36296, 36307, 36318, 36331, 36344, 36357, 0}, 0, 6, 185, 187, {198,189,1692,0,0,0,0,0,0,0,0,0,0,0},{10709,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},{10709,14896,1128,20161,20181,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},{29553,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}}, + {20032, 36990, 37008, {37023, 37036, 37055, 37068, 37083, 37100, 10950}, {37111, 37118, 37125, 37132, 37139, 37146, 37153}, {456, 459, 37160, 465, 468, 459, 465}, {37163, 37176, 501, 510, 15833, 15840, 15849, 542, 37191, 37210, 37225, 37242, 0}, {37163, 37176, 501, 510, 15833, 15840, 15849, 542, 37191, 37210, 37225, 37242, 0}, {37259, 37266, 37273, 37280, 15833, 37287, 37294, 37301, 37308, 37315, 37322, 37329, 0}, {37259, 37266, 37273, 37280, 15833, 37287, 37294, 37301, 37308, 37315, 37322, 37329, 0}, 0, 1, 691, 187, {4753,4762,2266,1156,36906,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, 35285, 35288, {35291, 35302, 35317, 35334, 35351, 35364, 35377}, {35291, 35302, 35317, 35334, 35351, 35364, 35377}, {35388, 35391, 35394, 35397, 35400, 13549, 13540}, {36241, 36252, 13579, 36265, 36276, 36285, 36296, 36307, 36318, 36331, 36344, 36357, 0}, {36241, 36252, 13579, 36265, 36276, 36285, 36296, 36307, 36318, 36331, 36344, 36357, 0}, {36241, 36252, 13579, 36265, 36276, 36285, 36296, 36307, 36318, 36331, 36344, 36357, 0}, {36241, 36252, 13579, 36265, 36276, 36285, 36296, 36307, 36318, 36331, 36344, 36357, 0}, 0, 0, 185, 187, {198,189,1692,0,0,0,0,0,0,0,0,0,0,0},{10709,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},{29553,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, 36852, 36862, {11995, 36968, 9208, 12020, 9223, 9233, 9239}, {9246, 9250, 9254, 12041, 9262, 9267, 9271}, {9275, 9277, 9279, 9281, 9283, 9277, 9281}, {2438, 2445, 15143, 2459, 2465, 2538, 2542, 12063, 36870, 36880, 36888, 36897, 0}, {2438, 2445, 15143, 2459, 2465, 2538, 2542, 12063, 36870, 36880, 36888, 36897, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 12070, 2550, 2554, 2558, 2562, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 12070, 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},{36979,0,0,0,0,0,0,0}}, + {1, 35285, 35288, {35291, 35302, 35317, 35334, 35351, 35364, 35377}, {35291, 35302, 35317, 35334, 35351, 35364, 35377}, {35388, 35391, 35394, 35397, 35400, 13549, 13540}, {35403, 35427, 35436, 35445, 35456, 35465, 35478, 35487, 35492, 35503, 35525, 35549, 0}, {35403, 35427, 35436, 35445, 35456, 35465, 35478, 35487, 35492, 35503, 35525, 35549, 0}, {35403, 35427, 35436, 35445, 35456, 35465, 35478, 35487, 35492, 35503, 35525, 35549, 0}, {35403, 35427, 35436, 35445, 35456, 35465, 35478, 35487, 35492, 35503, 35525, 35549, 0}, 0, 6, 185, 187, {198,189,1692,0,0,0,0,0,0,0,0,0,0,0},{10709,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},{13731,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},{29553,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, 36990, 37008, {37023, 37036, 37055, 8714, 37083, 37100, 10950}, {37111, 37118, 37125, 37336, 37139, 37146, 37153}, {456, 459, 37160, 465, 468, 459, 465}, {37163, 37176, 501, 510, 15833, 37287, 37294, 542, 37191, 37210, 37225, 37242, 0}, {37163, 37176, 501, 510, 15833, 37287, 37294, 542, 37191, 37210, 37225, 37242, 0}, {37259, 37266, 37273, 37280, 15833, 37287, 37294, 37301, 37308, 37315, 37322, 37329, 0}, {37259, 37266, 37273, 37280, 15833, 37287, 37294, 37301, 37308, 37315, 37322, 37329, 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},{36979,0,0,0,0,0,0,0}}, + {1, 35285, 35288, {35291, 35302, 35317, 35334, 35351, 35364, 35377}, {35291, 35302, 35317, 35334, 35351, 35364, 35377}, {35388, 35391, 35394, 35397, 35400, 13549, 13540}, {35403, 35427, 35436, 35445, 35456, 35465, 35478, 35487, 35492, 35503, 35525, 35549, 0}, {35403, 35427, 35436, 35445, 35456, 35465, 35478, 35487, 35492, 35503, 35525, 35549, 0}, {35403, 35427, 35436, 35445, 35456, 35465, 35478, 35487, 35492, 35503, 35525, 35549, 0}, {35403, 35427, 35436, 35445, 35456, 35465, 35478, 35487, 35492, 35503, 35525, 35549, 0}, 0, 6, 185, 187, {198,189,1692,0,0,0,0,0,0,0,0,0,0,0},{10709,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},{13731,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}}, + {37343, 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},{29553,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, 36852, 36862, {11995, 36968, 9208, 12020, 9223, 9233, 9239}, {9246, 9250, 9254, 12041, 9262, 9267, 9271}, {9275, 9277, 9279, 9281, 9283, 9277, 9281}, {2438, 2445, 15143, 2459, 2465, 2538, 2542, 12063, 36870, 36880, 36888, 36897, 0}, {2438, 2445, 15143, 2459, 2465, 2538, 2542, 12063, 36870, 36880, 36888, 36897, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 12070, 2550, 2554, 2558, 2562, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 12070, 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},{36979,0,0,0,0,0,0,0}}, + {1, 35285, 35288, {35291, 35302, 35317, 35334, 35351, 35364, 35377}, {35291, 35302, 35317, 35334, 35351, 35364, 35377}, {35388, 35391, 35394, 35397, 35400, 13549, 13540}, {35403, 35427, 35436, 35445, 35456, 35465, 35478, 35487, 35492, 35503, 35525, 35549, 0}, {35403, 35427, 35436, 35445, 35456, 35465, 35478, 35487, 35492, 35503, 35525, 35549, 0}, {35403, 35427, 35436, 35445, 35456, 35465, 35478, 35487, 35492, 35503, 35525, 35549, 0}, {35403, 35427, 35436, 35445, 35456, 35465, 35478, 35487, 35492, 35503, 35525, 35549, 0}, 0, 1, 185, 187, {198,189,1692,0,0,0,0,0,0,0,0,0,0,0},{10709,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,10163,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},{37356,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},{29553,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, 36990, 37008, {37023, 37036, 37055, 8714, 37083, 37100, 10950}, {37111, 37118, 37125, 37336, 37139, 37146, 37153}, {456, 459, 37160, 465, 468, 459, 465}, {37163, 37176, 501, 510, 15833, 37287, 37294, 542, 37191, 37210, 37225, 37242, 0}, {37163, 37176, 501, 510, 15833, 37287, 37294, 542, 37191, 37210, 37225, 37242, 0}, {37259, 37266, 37273, 37280, 15833, 37287, 37294, 37301, 37308, 37315, 37322, 37329, 0}, {37259, 37266, 37273, 37280, 15833, 37287, 37294, 37301, 37308, 37315, 37322, 37329, 0}, 0, 1, 691, 187, {9499,9509,6153,9517,9529,9539,9549,37366,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},{36979,0,0,0,0,0,0,0}}, + {1, 35285, 35288, {35291, 35302, 35317, 35334, 35351, 35364, 35377}, {35291, 35302, 35317, 35334, 35351, 35364, 35377}, {35388, 35391, 35394, 35397, 35400, 13549, 13540}, {36241, 36252, 13579, 36265, 36276, 36285, 36296, 36307, 36318, 36331, 36344, 36357, 0}, {36241, 36252, 13579, 36265, 36276, 36285, 36296, 36307, 36318, 36331, 36344, 36357, 0}, {36241, 36252, 13579, 36265, 36276, 36285, 36296, 36307, 36318, 36331, 36344, 36357, 0}, {36241, 36252, 13579, 36265, 36276, 36285, 36296, 36307, 36318, 36331, 36344, 36357, 0}, 0, 6, 185, 187, {198,189,1692,0,0,0,0,0,0,0,0,0,0,0},{10709,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},{20161,20181,222,10709,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}}, + {37378, 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},{29553,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, 35285, 35288, {35291, 35302, 35317, 35334, 35351, 35364, 35377}, {35291, 35302, 35317, 35334, 35351, 35364, 35377}, {35388, 35391, 35394, 35397, 35400, 13549, 13540}, {36241, 36252, 13579, 36265, 36276, 36285, 36296, 36307, 36318, 36331, 36344, 36357, 0}, {36241, 36252, 13579, 36265, 36276, 36285, 36296, 36307, 36318, 36331, 36344, 36357, 0}, {36241, 36252, 13579, 36265, 36276, 36285, 36296, 36307, 36318, 36331, 36344, 36357, 0}, {36241, 36252, 13579, 36265, 36276, 36285, 36296, 36307, 36318, 36331, 36344, 36357, 0}, 0, 6, 185, 187, {198,189,1692,0,0,0,0,0,0,0,0,0,0,0},{10709,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},{29553,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, 35285, 35288, {35291, 35302, 35317, 35334, 35351, 35364, 35377}, {35291, 35302, 35317, 35334, 35351, 35364, 35377}, {35388, 35391, 35394, 35397, 35400, 13549, 13540}, {36241, 36252, 13579, 36265, 36276, 36285, 36296, 36307, 36318, 36331, 36344, 36357, 0}, {36241, 36252, 13579, 36265, 36276, 36285, 36296, 36307, 36318, 36331, 36344, 36357, 0}, {36241, 36252, 13579, 36265, 36276, 36285, 36296, 36307, 36318, 36331, 36344, 36357, 0}, {36241, 36252, 13579, 36265, 36276, 36285, 36296, 36307, 36318, 36331, 36344, 36357, 0}, 0, 6, 185, 187, {198,189,1692,0,0,0,0,0,0,0,0,0,0,0},{10709,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},{29553,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, 35285, 35288, {35291, 35302, 35317, 35334, 35351, 35364, 35377}, {35291, 35302, 35317, 35334, 35351, 35364, 35377}, {35388, 35391, 35394, 35397, 35400, 13549, 13540}, {36241, 36252, 13579, 36265, 36276, 36285, 36296, 36307, 36318, 36331, 36344, 36357, 0}, {36241, 36252, 13579, 36265, 36276, 36285, 36296, 36307, 36318, 36331, 36344, 36357, 0}, {36241, 36252, 13579, 36265, 36276, 36285, 36296, 36307, 36318, 36331, 36344, 36357, 0}, {36241, 36252, 13579, 36265, 36276, 36285, 36296, 36307, 36318, 36331, 36344, 36357, 0}, 0, 6, 185, 187, {198,189,1692,0,0,0,0,0,0,0,0,0,0,0},{10709,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, 22089, {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}}, + {37378, 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},{29553,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,37389,1692,0,0,0,0,0,0,0,0,0,0},{29553,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, 22089, {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,37389,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,37389,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},{37400,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,37389,1692,0,0,0,0,0,0,0,0,0,0},{29553,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},{20161,20181,222,10709,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}}, + {20032, 36990, 37008, {37023, 37036, 37055, 37068, 37083, 37100, 10950}, {37111, 37118, 37125, 37132, 37139, 37146, 37153}, {456, 459, 37160, 465, 468, 459, 465}, {37163, 37176, 501, 510, 15833, 15840, 15849, 542, 37191, 37210, 37225, 37242, 0}, {37163, 37176, 501, 510, 15833, 15840, 15849, 542, 37191, 37210, 37225, 37242, 0}, {37259, 37266, 37273, 37280, 15833, 37287, 37294, 37301, 37308, 37315, 37322, 37329, 0}, {37259, 37266, 37273, 37280, 15833, 37287, 37294, 37301, 37308, 37315, 37322, 37329, 0}, 0, 1, 691, 187, {4753,4762,2266,1156,36906,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}}, + {12084, 36852, 36862, {9187, 9196, 9208, 9215, 9223, 9233, 9239}, {9246, 9250, 9254, 9258, 9262, 9267, 9271}, {0, 0, 0, 0, 0, 0, 0}, {2438, 2445, 15143, 2459, 2465, 2469, 2474, 12063, 36870, 36880, 36888, 36897, 0}, {2438, 2445, 15143, 2459, 2465, 2469, 2474, 12063, 36870, 36880, 36888, 36897, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 12070, 2550, 2554, 2558, 2562, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 12070, 2550, 2554, 2558, 2562, 0}, 0, 1, 691, 187, {4753,4762,2266,1156,36906,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, 36990, 37008, {37023, 37036, 37055, 8714, 37083, 37100, 10950}, {37111, 37118, 37125, 37336, 37139, 37146, 37153}, {456, 459, 37160, 465, 468, 459, 465}, {37163, 37176, 501, 510, 15833, 37287, 37294, 542, 37191, 37210, 37225, 37242, 0}, {37163, 37176, 501, 510, 15833, 37287, 37294, 542, 37191, 37210, 37225, 37242, 0}, {37259, 37266, 37273, 37280, 15833, 37287, 37294, 37301, 37308, 37315, 37322, 37329, 0}, {37259, 37266, 37273, 37280, 15833, 37287, 37294, 37301, 37308, 37315, 37322, 37329, 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},{36979,0,0,0,0,0,0,0}}, + {1921, 36852, 36862, {11995, 36968, 9208, 12020, 9223, 9233, 9239}, {9246, 9250, 9254, 12041, 9262, 9267, 9271}, {9275, 9277, 9279, 9281, 9283, 9277, 9281}, {2438, 2445, 15143, 2459, 2465, 2538, 2542, 12063, 36870, 36880, 36888, 36897, 0}, {2438, 2445, 15143, 2459, 2465, 2538, 2542, 12063, 36870, 36880, 36888, 36897, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 12070, 2550, 2554, 2558, 2562, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 12070, 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},{36979,0,0,0,0,0,0,0}}, + {289, 1929, 1932, {35828, 35839, 35863, 35893, 35910, 35932, 35941}, {15032, 15035, 15040, 15046, 15050, 7736, 15055}, {6617, 6605, 6607, 6609, 6611, 6613, 6615}, {35952, 35965, 501, 35978, 521, 35989, 35998, 542, 36007, 36024, 36039, 36052, 0}, {35952, 35965, 501, 35978, 521, 35989, 35998, 542, 36007, 36024, 36039, 36052, 0}, {15206, 8135, 2530, 2534, 15154, 15210, 15214, 15218, 15222, 2554, 15226, 15230, 0}, {15206, 8135, 2530, 2534, 15154, 15210, 15214, 15218, 15222, 2554, 15226, 15230, 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, 35760, 35765, {2345, 10060, 35770, 2368, 2375, 2383, 35777}, {2398, 35785, 35790, 2411, 2415, 2419, 35794}, {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, 36877, 36887, {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, 36895, 36905, 36913, 36922, 0}, {2438, 2445, 15168, 2459, 2465, 2469, 2474, 12088, 36895, 36905, 36913, 36922, 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,36931,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, {36090, 36105, 36120, 36135, 36152, 36169, 36178}, {36189, 36196, 36203, 36210, 36217, 19832, 36224}, {36231, 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,36234,4762,189,1692,0,0,0,0,0,0,0,0},{36245,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, 35740, 35745, {2345, 10060, 35750, 2368, 2375, 2383, 35757}, {2398, 10088, 35765, 2411, 2415, 2419, 35769}, {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}}, + {12084, 36852, 36862, {9187, 9196, 9208, 9215, 9223, 9233, 9239}, {9246, 9250, 9254, 9258, 9262, 9267, 9271}, {0, 0, 0, 0, 0, 0, 0}, {2438, 2445, 15143, 2459, 2465, 2469, 2474, 12063, 36870, 36880, 36888, 36897, 0}, {2438, 2445, 15143, 2459, 2465, 2469, 2474, 12063, 36870, 36880, 36888, 36897, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 12070, 2550, 2554, 2558, 2562, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 12070, 2550, 2554, 2558, 2562, 0}, 0, 1, 691, 187, {4753,4762,2266,1156,36906,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, {14943, 14949, 14963, 14986, 15000, 15016, 15023}, {15032, 15035, 15040, 15046, 15050, 7736, 15055}, {6617, 6605, 6607, 6609, 6611, 6613, 6615}, {15059, 15066, 10332, 15073, 3730, 15079, 15085, 15091, 15098, 15107, 15115, 15122, 0}, {15129, 15136, 15143, 15148, 15154, 15158, 15163, 15168, 15175, 15184, 15192, 15199, 0}, {15206, 8135, 2530, 2534, 15154, 15210, 15214, 15218, 15222, 2554, 15226, 15230, 0}, {15206, 8135, 2530, 2534, 15154, 15210, 15214, 15218, 15222, 2554, 15226, 15230, 0}, 0, 1, 691, 187, {1156,1167,4762,189,1692,0,0,0,0,0,0,0,0,0},{15234,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, {36065, 36080, 36095, 36110, 36127, 36144, 36153}, {36164, 36171, 36178, 36185, 36192, 19807, 36199}, {36206, 19414, 8811, 8814, 8808, 19411, 19821}, {13204, 13215, 8845, 13228, 8867, 13239, 13246, 8892, 13253, 13268, 13281, 13292, 0}, {13204, 13215, 8845, 13228, 8867, 13239, 13246, 8892, 13253, 13268, 13281, 13292, 0}, {13305, 13312, 13319, 13326, 8867, 13239, 13246, 13333, 13340, 13347, 13354, 13361, 0}, {13305, 13312, 13319, 13326, 8867, 13239, 13246, 13333, 13340, 13347, 13354, 13361, 0}, 0, 1, 691, 187, {1156,1167,36209,4762,189,1692,0,0,0,0,0,0,0,0},{36220,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, 26188, 26193, {26198, 26205, 26216, 26229, 26242, 26253, 26266}, {26277, 26282, 26287, 26292, 26297, 26302, 26307}, {6605, 6607, 6609, 6611, 6613, 6615, 6617}, {26312, 26338, 26366, 26396, 26426, 26452, 26482, 26508, 26536, 26560, 26588, 26625, 0}, {26312, 26338, 26366, 26396, 26426, 26452, 26482, 26508, 26536, 26560, 26588, 26625, 0}, {26664, 26676, 26688, 26700, 26712, 26724, 26736, 26748, 26760, 26772, 26785, 26798, 0}, {26664, 26676, 26688, 26700, 26712, 26724, 26736, 26748, 26760, 26772, 26785, 26798, 0}, 0, 0, 2566, 187, {1692,0,0,0,0,0,0,0,0,0,0,0,0,0},{26811,26865,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},{26901,0,0,0,0,0,0,0}}, + {1327, 1340, 1347, {1354, 1364, 1374, 1384, 1394, 1404, 1414}, {35216, 35223, 35230, 35237, 35244, 35251, 35258}, {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}, {35216, 35223, 35230, 35237, 35244, 35251, 35258}, {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, 37015, 37033, {37048, 37061, 37080, 8714, 37108, 37125, 10975}, {37136, 37143, 37150, 37361, 37164, 37171, 37178}, {456, 459, 37185, 465, 468, 459, 465}, {37188, 37201, 501, 510, 15858, 37312, 37319, 542, 37216, 37235, 37250, 37267, 0}, {37188, 37201, 501, 510, 15858, 37312, 37319, 542, 37216, 37235, 37250, 37267, 0}, {37284, 37291, 37298, 37305, 15858, 37312, 37319, 37326, 37333, 37340, 37347, 37354, 0}, {37284, 37291, 37298, 37305, 15858, 37312, 37319, 37326, 37333, 37340, 37347, 37354, 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},{37004,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}} + {1921, 36990, 37008, {37023, 37036, 37055, 8714, 37083, 37100, 10950}, {37111, 37118, 37125, 37336, 37139, 37146, 37153}, {456, 459, 37160, 465, 468, 459, 465}, {37163, 37176, 501, 510, 15833, 37287, 37294, 542, 37191, 37210, 37225, 37242, 0}, {37163, 37176, 501, 510, 15833, 37287, 37294, 542, 37191, 37210, 37225, 37242, 0}, {37259, 37266, 37273, 37280, 15833, 37287, 37294, 37301, 37308, 37315, 37322, 37329, 0}, {37259, 37266, 37273, 37280, 15833, 37287, 37294, 37301, 37308, 37315, 37322, 37329, 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},{36979,0,0,0,0,0,0,0}}, + {1, 13028, 13040, {13052, 13067, 13082, 13097, 13114, 13133, 13144}, {13155, 13162, 13169, 13176, 13183, 13190, 13197}, {0, 0, 0, 0, 0, 0, 0}, {13204, 13215, 8845, 13228, 8867, 13239, 13246, 8892, 13253, 13268, 13281, 13292, 0}, {13204, 13215, 8845, 13228, 8867, 13239, 13246, 8892, 13253, 13268, 13281, 13292, 0}, {13305, 13312, 13319, 13326, 8867, 13239, 13246, 13333, 13340, 13347, 13354, 13361, 0}, {13305, 13312, 13319, 13326, 8867, 13239, 13246, 13333, 13340, 13347, 13354, 13361, 0}, 0, 1, 691, 187, {1156,1167,4762,1128,189,0,0,0,0,0,0,0,0,0},{13368,13386,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}}, + {20195, 1929, 1932, {20202, 20212, 20221, 20230, 20241, 20251, 20256}, {20263, 20269, 20274, 20279, 20284, 10786, 20288}, {20293, 2673, 2023, 7736, 2018, 3987, 2023}, {15059, 15066, 10332, 15073, 3730, 20295, 20300, 20305, 15098, 15107, 15115, 15122, 0}, {15059, 15066, 10332, 15073, 3730, 20295, 20300, 20305, 15098, 15107, 15115, 15122, 0}, {20312, 20317, 3761, 2772, 3730, 20295, 20300, 20321, 10770, 2792, 20325, 20330, 0}, {20312, 20317, 3761, 2772, 3730, 20295, 20300, 20321, 10770, 2792, 20325, 20330, 0}, 0, 1, 691, 187, {1156,0,0,0,0,0,0,0,0,0,0,0,0,0},{20334,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, 30890, 30900, {30913, 30920, 30926, 30933, 30939, 30945, 30953}, {30963, 30967, 30971, 30975, 30979, 30983, 30987}, {12817, 12817, 12817, 12817, 12817, 12817, 12817}, {30993, 31002, 31011, 31016, 31022, 31028, 31034, 31041, 31047, 31056, 31065, 31073, 0}, {30993, 31002, 31011, 31016, 31022, 31028, 31034, 31041, 31047, 31056, 31065, 31073, 0}, {31082, 31086, 3761, 31090, 3730, 31094, 31098, 31102, 31107, 31111, 31117, 31121, 0}, {31082, 31086, 3761, 31090, 3730, 31094, 31098, 31102, 31107, 31111, 31117, 31121, 0}, 0, 0, 2566, 187, {1128,1139,1692,0,0,0,0,0,0,0,0,0,0,0},{10709,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, {31896, 31903, 31911, 31918, 31925, 31933, 31941}, {31948, 31951, 31954, 31957, 31960, 31963, 31966}, {2436, 2436, 2430, 2436, 12817, 3987, 12817}, {31969, 31977, 31987, 31993, 32001, 32006, 32011, 32016, 32023, 20142, 32031, 32039, 0}, {31969, 31977, 31987, 31993, 32001, 32006, 32011, 32016, 32023, 20142, 32031, 32039, 0}, {2759, 32047, 3761, 32051, 3730, 31094, 31098, 32055, 3701, 2792, 32059, 16358, 0}, {2759, 32047, 3761, 32051, 3730, 31094, 31098, 32055, 3701, 2792, 32059, 16358, 0}, 0, 0, 185, 187, {2277,2286,189,198,1735,1692,3809,0,0,0,0,0,0,0},{20161,20181,222,10709,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 [] = { - {691, 37441, 691, 37443, 37446, 37456, 37459, 37474, 37477, 37487, 2566, 37496, 3, 2, 0, 0, 3, 2, 2, {3, -1}, {3, -1}}, - {37441, 37501, 37441, 37501, 37504, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 691, 37441, 691, 37522, 37510, 37512, 37516, 37526, 37535, 2566, 37520, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 37441, 37543, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 2, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 37441, 37543, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 2, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 37501, 37441, 37501, 37546, 37510, 37512, 37516, 37550, 37562, 2566, 37520, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 691, 37441, 691, 37574, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 12, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 691, 37441, 691, 37522, 37510, 37512, 37516, 37577, 37588, 2566, 37520, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 691, 37441, 691, 37522, 37510, 37512, 37516, 37599, 37613, 2566, 37520, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 37441, 37626, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 0, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 691, 37441, 37501, 37522, 37510, 37512, 37516, 37628, 37638, 2566, 37520, 8, 3, 0, 0, 1, 0, 2, {3, -1}, {3, -1}}, - {37441, 37501, 37441, 37501, 37522, 37510, 37647, 37516, 37477, 37487, 2566, 37520, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 37501, 37441, 37501, 37522, 37510, 37512, 37516, 37656, 37664, 2566, 37520, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 37441, 37672, 37510, 37512, 37516, 37676, 37487, 37689, 37694, 2, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 37501, 37441, 37501, 37699, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 8, 3, 1, 1, 1, 0, 2, {3, -1}, {3, -1}}, - {37441, 691, 37441, 691, 37574, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 8, 3, 1, 1, 1, 0, 2, {3, -1}, {3, -1}}, - {37441, 691, 37441, 691, 37522, 37510, 37512, 37516, 37628, 37702, 2566, 37520, 9, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 37441, 37712, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 1, 0, 1, 1, 1, 0, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 37441, 37716, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 1, 0, 0, 0, 1, 0, 2, {3, -1}, {3, -1}}, - {37441, 691, 37441, 691, 37522, 37510, 37512, 37516, 37720, 37730, 2566, 37520, 12, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 37501, 37441, 37501, 0, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 12, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 37501, 37441, 37501, 37739, 37510, 37512, 37516, 37743, 37762, 2566, 37520, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 691, 37441, 691, 37781, 37510, 37512, 37516, 37628, 37702, 2566, 37520, 9, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, - {691, 37501, 691, 37784, 37788, 37510, 37512, 37516, 37792, 37801, 2566, 37520, 2, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 691, 37441, 691, 0, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 37501, 37441, 37501, 37810, 37510, 37818, 37516, 37835, 37863, 2566, 37520, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 691, 37441, 691, 37890, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 8, 3, 1, 1, 2, 2, 2, {3, -1}, {3, -1}}, - {37441, 37501, 37441, 37501, 37522, 37510, 37512, 37516, 37550, 37562, 2566, 37520, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 691, 37441, 37501, 37893, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 8, 3, 0, 0, 1, 0, 2, {3, -1}, {3, -1}}, - {37441, 691, 37441, 37501, 37574, 37510, 37899, 37516, 37477, 37487, 2566, 37520, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 37441, 37906, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 1, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 691, 37441, 691, 37910, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 8, 3, 2, 2, 1, 2, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 37441, 37914, 37510, 37917, 37516, 37940, 37487, 37956, 37964, 3, 0, 0, 0, 1, 0, 2, {3, -1}, {3, -1}}, - {37441, 691, 37441, 691, 37972, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 0, 0, 1, 1, 1, 0, 2, {3, -1}, {3, -1}}, - {37441, 37501, 37441, 37501, 37975, 37510, 37979, 37516, 37477, 37487, 2566, 37520, 5, 1, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 37501, 37441, 37501, 37996, 37510, 0, 37516, 37477, 37487, 2566, 37520, 8, 3, 0, 0, 1, 0, 2, {3, -1}, {3, -1}}, - {37441, 691, 37441, 691, 37522, 37510, 37512, 37516, 38000, 38014, 2566, 37520, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, - {691, 37501, 37441, 37501, 37522, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 37501, 37441, 37501, 37522, 37510, 38027, 37516, 38041, 38053, 2566, 37520, 9, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 38064, 37441, 37501, 38066, 37510, 37512, 37516, 38069, 38080, 2566, 37520, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 37501, 37441, 37441, 0, 37510, 0, 37516, 37477, 37487, 2566, 37520, 8, 3, 1, 1, 1, 2, 2, {3, 0}, {3, 0}}, - {185, 37441, 185, 37443, 38090, 37456, 38099, 37474, 38110, 37487, 38125, 37964, 3, 0, 0, 0, 3, 0, 2, {3, -1}, {3, -1}}, - {37441, 691, 37441, 691, 38132, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 8, 3, 0, 0, 1, 0, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 691, 38136, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 8, 3, 0, 0, 1, 0, 2, {3, -1}, {3, -1}}, - {37441, 37501, 37441, 691, 0, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 691, 37441, 691, 37522, 37510, 37512, 37516, 38142, 38152, 2566, 37520, 8, 3, 10, 3, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 691, 37441, 691, 38161, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 37501, 10836, 37510, 0, 37516, 37477, 37487, 2566, 37520, 2, 2, 2, 2, 1, 2, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 37501, 10836, 37510, 0, 37516, 37477, 37487, 2566, 37520, 2, 2, 2, 2, 1, 2, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 37441, 10836, 37510, 38168, 37516, 37477, 37487, 2566, 37520, 2, 2, 2, 2, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 38064, 37441, 37501, 10836, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 2, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 37501, 37441, 37501, 0, 37510, 38174, 37516, 37477, 37487, 2566, 37520, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 691, 37441, 691, 37574, 37510, 37899, 37516, 37477, 37487, 2566, 37520, 12, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 37441, 38215, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}}, - {691, 37441, 691, 37441, 37522, 37510, 0, 37516, 37477, 37487, 2566, 37520, 1, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 37501, 37441, 37501, 37522, 37510, 37899, 37516, 37477, 37487, 2566, 37520, 12, 2, 2, 2, 1, 2, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 37441, 37522, 37510, 0, 37516, 37477, 37487, 2566, 37520, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 37441, 38219, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 0, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, - {2566, 37501, 37441, 37501, 0, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 37501, 37441, 37501, 0, 37510, 38222, 37516, 37477, 37487, 2566, 37520, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 37441, 38239, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 0, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 37501, 37441, 37443, 0, 37456, 37512, 37474, 37477, 37487, 2566, 37520, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 37441, 38243, 37510, 38250, 37516, 37477, 37487, 2566, 37520, 12, 2, 1, 0, 1, 2, 2, {3, 2}, {3, 2}}, - {691, 37441, 691, 37441, 0, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}}, - {691, 37441, 691, 37441, 38215, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}}, - {691, 37441, 691, 37441, 38215, 37510, 0, 37516, 37477, 37487, 2566, 37520, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}}, - {691, 37441, 691, 37441, 38215, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}}, - {691, 37441, 691, 37441, 38215, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}}, - {691, 37441, 691, 37441, 38215, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}}, - {691, 37441, 691, 37441, 38215, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 12, 2, 2, 2, 1, 2, 2, {3, 2}, {3, 2}}, - {691, 37441, 691, 37441, 38215, 37510, 0, 37516, 37477, 37487, 2566, 37520, 12, 2, 1, 1, 1, 2, 2, {3, 2}, {3, 2}}, - {38277, 37441, 691, 37441, 38215, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}}, - {37441, 37501, 37441, 37441, 0, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 37441, 37543, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 2, 0, 1, 1, 1, 2, 2, {3, 0}, {3, 0}}, - {691, 37441, 691, 37441, 38279, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 691, 38282, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 5, 1, 1, 1, 2, 2, 2, {3, -1}, {3, 0}}, - {691, 37441, 691, 691, 38286, 37510, 38290, 37516, 37477, 37487, 2566, 37520, 8, 3, 0, 0, 1, 0, 2, {3, 0}, {3, 0}}, - {37441, 691, 37441, 691, 37522, 37510, 37512, 37516, 37628, 37638, 2566, 37520, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 37441, 38215, 37510, 0, 37516, 37477, 37487, 2566, 37520, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}}, - {691, 37441, 691, 37441, 38327, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 14, 2, 0, 0, 1, 2, 2, {3, -1}, {3, 2}}, - {691, 37441, 691, 37441, 38335, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 1, 0, 1, 1, 1, 2, 1, {3, 0}, {3, 0}}, - {37441, 38064, 37441, 37501, 0, 37510, 0, 37516, 37656, 37664, 2566, 37520, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 37441, 38342, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, 2}}, - {691, 37441, 691, 37443, 38355, 37456, 0, 37516, 37477, 37487, 2566, 37520, 3, 0, 4, 2, 3, 0, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 37441, 38358, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 0, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 37441, 0, 37510, 0, 37516, 37477, 37487, 2566, 37520, 2, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 37441, 38362, 37510, 0, 37516, 37477, 37487, 2566, 37520, 9, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 37501, 10836, 37510, 0, 37516, 37477, 37487, 2566, 37520, 2, 2, 2, 2, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 691, 37441, 691, 37574, 37510, 37899, 37516, 37477, 37487, 2566, 37520, 12, 2, 0, 0, 1, 2, 2, {3, 0}, {3, 0}}, - {691, 37441, 691, 37441, 38362, 37510, 0, 37516, 37477, 37487, 2566, 37520, 2, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 37441, 37543, 37510, 0, 37516, 37477, 37487, 2566, 37520, 2, 0, 1, 1, 1, 2, 2, {3, -1}, {3, 0}}, - {37441, 37501, 37441, 37501, 37522, 37510, 0, 37516, 37477, 37487, 2566, 37520, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 37501, 37441, 37784, 0, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 37501, 37441, 37441, 37810, 37510, 0, 37516, 37477, 37487, 2566, 37520, 5, 1, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 37501, 37441, 691, 38366, 37510, 0, 37516, 37477, 37487, 2566, 37520, 8, 3, 0, 0, 1, 0, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 37441, 38279, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 1, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 37443, 37446, 37456, 37459, 37474, 37477, 37487, 2566, 37496, 3, 2, 0, 0, 3, 2, 2, {3, -1}, {3, -1}}, - {37441, 37501, 37441, 37501, 37504, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 691, 37441, 691, 37522, 37510, 37512, 37516, 37526, 37535, 2566, 37520, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 37441, 38369, 37510, 38373, 37516, 37477, 37487, 2566, 37520, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 37501, 37441, 37501, 37546, 37510, 37512, 37516, 37550, 37562, 2566, 37520, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 691, 37441, 691, 37574, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 12, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 691, 37441, 691, 37522, 37510, 37512, 37516, 37577, 37588, 2566, 37520, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 691, 37441, 691, 37522, 37510, 37512, 37516, 37599, 37613, 2566, 37520, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 37441, 37626, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 0, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 37501, 37441, 37501, 37522, 37510, 37647, 37516, 37477, 37487, 2566, 37520, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 37501, 37441, 37501, 37522, 37510, 37512, 37516, 37656, 37664, 2566, 37520, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 37441, 37672, 37510, 37512, 37516, 37676, 37487, 37689, 37694, 2, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 37501, 37441, 37501, 37699, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 8, 3, 1, 1, 1, 0, 2, {3, -1}, {3, -1}}, - {37441, 691, 37441, 691, 37574, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 8, 3, 1, 1, 1, 0, 2, {3, -1}, {3, -1}}, - {37441, 691, 37441, 691, 37522, 37510, 37512, 37516, 37628, 37702, 2566, 37520, 9, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 37441, 37712, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 1, 0, 1, 1, 1, 0, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 37441, 37716, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 1, 0, 0, 0, 1, 0, 2, {3, -1}, {3, -1}}, - {37441, 691, 37441, 691, 37522, 37510, 37512, 37516, 37720, 37730, 2566, 37520, 12, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 37501, 37441, 37501, 37574, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 12, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 37501, 37441, 37501, 37739, 37510, 37512, 37516, 37743, 37762, 2566, 37520, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 691, 37441, 691, 37781, 37510, 37512, 37516, 37628, 37702, 2566, 37520, 9, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, - {691, 37501, 691, 37784, 37788, 37510, 37512, 37516, 37792, 37801, 2566, 37520, 2, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 691, 37441, 691, 0, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 37501, 37441, 37501, 37810, 37510, 37818, 37516, 37835, 37863, 2566, 37520, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 691, 37441, 691, 37890, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 8, 3, 1, 1, 2, 2, 2, {3, -1}, {3, -1}}, - {37441, 37501, 37441, 37501, 37522, 37510, 37512, 37516, 37550, 37562, 2566, 37520, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 691, 37441, 37501, 37893, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 8, 3, 0, 0, 1, 0, 2, {3, -1}, {3, -1}}, - {37441, 691, 37441, 37501, 37574, 37510, 37899, 37516, 37477, 37487, 2566, 37520, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 37441, 37906, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 1, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 691, 37441, 691, 37910, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 8, 3, 2, 2, 1, 2, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 37441, 37914, 37510, 37917, 37516, 37940, 37487, 37956, 37964, 3, 0, 0, 0, 1, 0, 2, {3, -1}, {3, -1}}, - {37441, 691, 37441, 691, 37972, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 0, 0, 1, 1, 1, 0, 2, {3, -1}, {3, -1}}, - {37441, 37501, 37441, 37501, 37975, 37510, 37979, 37516, 37477, 37487, 2566, 37520, 5, 1, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 37501, 37441, 37501, 37996, 37510, 0, 37516, 37477, 37487, 2566, 37520, 8, 3, 0, 0, 1, 0, 2, {3, -1}, {3, -1}}, - {37441, 691, 37441, 691, 37522, 37510, 37512, 37516, 38000, 38014, 2566, 37520, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, - {691, 37501, 37441, 37501, 37522, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 37501, 37441, 37501, 37522, 37510, 38027, 37516, 38041, 38053, 2566, 37520, 9, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 38064, 37441, 37501, 38066, 37510, 37512, 37516, 38069, 38080, 2566, 37520, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 37501, 37441, 37441, 38383, 37510, 0, 37516, 37477, 37487, 2566, 37520, 8, 3, 1, 1, 1, 2, 2, {3, 0}, {3, 0}}, - {185, 37441, 185, 37443, 38090, 37456, 38099, 37474, 38110, 37487, 38125, 37964, 3, 0, 0, 0, 3, 0, 2, {3, -1}, {3, -1}}, - {37441, 691, 37441, 691, 38132, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 8, 3, 0, 0, 1, 0, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 691, 38136, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 8, 3, 0, 0, 1, 0, 2, {3, -1}, {3, -1}}, - {37441, 37501, 37441, 691, 38390, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 691, 37441, 691, 37522, 37510, 37512, 37516, 38142, 38152, 2566, 37520, 8, 3, 10, 3, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 691, 37441, 691, 38161, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 37501, 10836, 37510, 0, 37516, 37477, 37487, 2566, 37520, 2, 2, 2, 2, 1, 2, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 37501, 10836, 37510, 0, 37516, 37477, 37487, 2566, 37520, 2, 2, 2, 2, 1, 2, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 37441, 10836, 37510, 38168, 37516, 37477, 37487, 2566, 37520, 2, 2, 2, 2, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 38064, 37441, 37501, 10836, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 2, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 37501, 37441, 37501, 0, 37510, 38174, 37516, 37477, 37487, 2566, 37520, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 691, 37441, 691, 37574, 37510, 37899, 37516, 37477, 37487, 2566, 37520, 12, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 37441, 38215, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}}, - {691, 37441, 691, 37441, 37522, 37510, 0, 37516, 37477, 37487, 2566, 37520, 1, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 37501, 37441, 37501, 37574, 37510, 37899, 37516, 37477, 37487, 2566, 37520, 12, 2, 2, 2, 1, 2, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 37441, 38239, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 0, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 37501, 37441, 37443, 38395, 37456, 37512, 37474, 37477, 37487, 2566, 37520, 8, 3, 1, 1, 1, 0, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 37441, 38215, 37510, 38250, 37516, 37477, 37487, 2566, 37520, 12, 2, 1, 0, 1, 2, 2, {3, 2}, {3, 2}}, - {691, 37441, 691, 37441, 38215, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}}, - {691, 37441, 691, 37441, 38215, 37510, 0, 37516, 37477, 37487, 2566, 37520, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}}, - {691, 37441, 691, 37441, 38215, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}}, - {691, 37441, 691, 37441, 38215, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}}, - {691, 37441, 691, 37441, 38215, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}}, - {691, 37441, 691, 37441, 38215, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 12, 2, 2, 2, 1, 2, 2, {3, 2}, {3, 2}}, - {691, 37441, 691, 37441, 38215, 37510, 0, 37516, 37477, 37487, 2566, 37520, 12, 2, 1, 1, 1, 2, 2, {3, 2}, {3, 2}}, - {38277, 37441, 691, 37441, 38215, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}}, - {691, 37441, 691, 37441, 37543, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 2, 0, 1, 1, 1, 2, 2, {3, 0}, {3, 0}}, - {691, 37441, 691, 37441, 38279, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 691, 38282, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 5, 1, 1, 1, 2, 2, 2, {3, -1}, {3, 0}}, - {691, 37441, 691, 691, 38286, 37510, 38290, 37516, 37477, 37487, 2566, 37520, 8, 3, 0, 0, 1, 0, 2, {3, 0}, {3, 0}}, - {37441, 691, 37441, 691, 37522, 37510, 37512, 37516, 37628, 37638, 2566, 37520, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 37441, 38215, 37510, 0, 37516, 37477, 37487, 2566, 37520, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}}, - {691, 37441, 691, 37441, 38327, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 14, 2, 0, 0, 1, 2, 2, {3, -1}, {3, 2}}, - {691, 37441, 691, 37441, 38335, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 1, 0, 1, 1, 1, 2, 1, {3, 0}, {3, 0}}, - {691, 37441, 691, 37441, 38342, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, 2}}, - {691, 37441, 691, 37443, 38355, 37456, 0, 37516, 37477, 37487, 2566, 37520, 3, 0, 4, 2, 3, 0, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 37441, 38358, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 0, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 37441, 38362, 37510, 0, 37516, 37477, 37487, 2566, 37520, 2, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 37441, 38362, 37510, 0, 37516, 37477, 37487, 2566, 37520, 9, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 37501, 10836, 37510, 0, 37516, 37477, 37487, 2566, 37520, 2, 2, 2, 2, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 691, 37441, 691, 37574, 37510, 37899, 37516, 37477, 37487, 2566, 37520, 12, 2, 0, 0, 1, 2, 2, {3, 0}, {3, 0}}, - {691, 37441, 691, 37441, 38362, 37510, 0, 37516, 37477, 37487, 2566, 37520, 2, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 37441, 37543, 37510, 0, 37516, 37477, 37487, 2566, 37520, 2, 0, 1, 1, 1, 2, 2, {3, -1}, {3, 0}}, - {37441, 37501, 37441, 37501, 37522, 37510, 0, 37516, 37477, 37487, 2566, 37520, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 37501, 37441, 37441, 37810, 37510, 0, 37516, 37477, 37487, 2566, 37520, 5, 1, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 37501, 37441, 691, 38366, 37510, 0, 37516, 37477, 37487, 2566, 37520, 8, 3, 0, 0, 1, 0, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 37441, 38279, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 1, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 37443, 38401, 37456, 37459, 37474, 37477, 37487, 2566, 37496, 3, 2, 0, 0, 3, 0, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 37441, 37712, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 2, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, - {691, 37501, 37441, 38411, 37788, 37510, 37512, 37516, 37577, 37588, 2566, 37520, 2, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 37441, 38279, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 37441, 37626, 37510, 37512, 37516, 37628, 37638, 2566, 37520, 1, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 691, 37441, 691, 37522, 37510, 37512, 37516, 37656, 37664, 2566, 37520, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, - {691, 37501, 37441, 38411, 37788, 37510, 37512, 37516, 37628, 37702, 2566, 37520, 2, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 691, 37441, 691, 37522, 37510, 37512, 37516, 37720, 37730, 2566, 37520, 12, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 37501, 37441, 37501, 37574, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 12, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 37501, 37441, 37501, 37522, 37510, 37512, 37516, 37628, 37702, 2566, 37520, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 37501, 37441, 37501, 37522, 37510, 37899, 37516, 37477, 37487, 2566, 37520, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 37501, 37441, 691, 38413, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 37441, 37522, 37510, 0, 37516, 37477, 37487, 2566, 37520, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 37501, 37441, 37443, 38421, 37456, 37512, 37474, 37477, 37487, 2566, 37520, 8, 3, 1, 1, 1, 0, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 37441, 38428, 37510, 38250, 37516, 37477, 37487, 2566, 37520, 12, 2, 1, 0, 1, 2, 2, {3, 2}, {3, 2}}, - {691, 37441, 691, 37443, 38432, 37456, 37512, 37474, 37477, 37487, 2566, 37496, 3, 2, 0, 0, 3, 2, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 37441, 37626, 37510, 38373, 37516, 37477, 37487, 2566, 37520, 0, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 691, 37441, 691, 37522, 37510, 37512, 37516, 37577, 37588, 2566, 37520, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 37441, 37626, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 691, 37441, 691, 37522, 37510, 37512, 37516, 37628, 37638, 2566, 37520, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 37501, 37441, 37501, 37626, 37510, 37512, 37516, 37656, 37664, 2566, 37520, 15, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 37501, 37441, 37501, 37522, 37510, 37899, 37516, 37477, 37487, 2566, 37520, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 691, 38442, 37456, 37459, 37474, 37477, 37487, 2566, 37496, 3, 0, 0, 0, 3, 3, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 37441, 37626, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 0, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 691, 37441, 691, 37522, 37510, 37512, 37516, 37577, 37588, 2566, 37520, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 37441, 37626, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 1, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 37441, 8056, 37510, 37512, 37516, 37628, 37638, 2566, 37520, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, - {691, 37501, 37441, 38411, 37788, 37510, 37512, 37516, 37656, 37664, 2566, 37520, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 691, 37441, 691, 38452, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 8, 3, 0, 0, 2, 2, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 37443, 38455, 37456, 37459, 37474, 37477, 37487, 2566, 37496, 3, 2, 0, 0, 3, 2, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 37441, 38465, 37510, 38373, 37516, 37477, 37487, 2566, 37520, 0, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 691, 37441, 38411, 0, 37510, 37512, 37516, 37577, 37588, 2566, 37520, 2, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 37441, 37626, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 1, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 691, 37441, 691, 38470, 37510, 37512, 37516, 37628, 37638, 2566, 37520, 0, 0, 1, 1, 1, 0, 2, {3, -1}, {3, -1}}, - {37441, 37501, 37441, 691, 37522, 37510, 37512, 37516, 37656, 37664, 2566, 37520, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 691, 37441, 691, 38452, 37510, 0, 37516, 37477, 37487, 2566, 37520, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 37443, 38474, 37456, 37459, 37474, 37477, 37487, 2566, 37496, 3, 2, 0, 0, 3, 2, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 37441, 37522, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 37441, 38484, 37510, 37512, 37516, 37628, 37638, 2566, 37520, 14, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 37501, 37441, 37501, 37522, 37510, 37512, 37516, 37656, 37664, 2566, 37520, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 691, 37441, 691, 38452, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 691, 38488, 37456, 37459, 37474, 37477, 37487, 2566, 37496, 3, 2, 0, 0, 3, 3, 2, {3, -1}, {3, -1}}, - {37441, 37501, 37441, 37501, 10836, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 2, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 37441, 37626, 37510, 37512, 37516, 37628, 37638, 2566, 37520, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 691, 37441, 691, 38498, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 37443, 38503, 37456, 37459, 37474, 37477, 37487, 2566, 37496, 3, 2, 0, 0, 3, 3, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 37441, 37626, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 1, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 691, 37441, 691, 38513, 37510, 37512, 37516, 37628, 37638, 2566, 37520, 12, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 691, 37441, 691, 38498, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 37443, 38517, 37456, 37459, 37474, 37477, 37487, 2566, 37496, 3, 2, 0, 0, 3, 0, 2, {3, -1}, {3, -1}}, - {37441, 691, 37441, 691, 37626, 37510, 37512, 37516, 37628, 37638, 2566, 37520, 1, 0, 1, 1, 1, 0, 2, {3, -1}, {3, -1}}, - {37441, 691, 37441, 691, 38527, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 8, 3, 1, 1, 1, 0, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 37443, 38532, 37456, 37459, 37474, 37477, 37487, 2566, 37496, 3, 2, 0, 0, 3, 0, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 37441, 37626, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 0, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 37441, 38542, 37510, 37512, 37516, 37628, 37638, 2566, 37520, 12, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 691, 37441, 691, 38546, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 8, 3, 1, 1, 1, 0, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 37443, 38554, 37456, 37459, 37474, 37477, 37487, 2566, 37496, 3, 2, 0, 0, 3, 3, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 37441, 37626, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 0, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 691, 37441, 691, 37626, 37510, 37512, 37516, 37628, 37638, 2566, 37520, 2, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 691, 37441, 691, 37522, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 691, 38564, 37456, 37459, 37474, 37477, 37487, 2566, 37496, 3, 2, 0, 0, 3, 0, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 37441, 37626, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 0, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 691, 37441, 691, 37626, 37510, 37512, 37516, 37628, 37638, 2566, 37520, 14, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 691, 37441, 691, 37522, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 37443, 38574, 37456, 37459, 37474, 37477, 37487, 2566, 37496, 3, 2, 0, 0, 3, 3, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 37441, 38358, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 0, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 691, 37441, 691, 37626, 37510, 37512, 37516, 37628, 37638, 2566, 37520, 9, 2, 0, 0, 1, 0, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 37443, 38584, 37456, 37459, 37474, 37477, 37487, 2566, 37496, 3, 2, 0, 0, 3, 2, 2, {3, -1}, {3, -1}}, - {37441, 691, 37441, 691, 37626, 37510, 37512, 37516, 37628, 37638, 2566, 37520, 9, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 37443, 38594, 37456, 37459, 37474, 37477, 37487, 2566, 37496, 3, 2, 0, 0, 3, 3, 2, {3, -1}, {3, -1}}, - {37441, 691, 37441, 691, 38604, 37510, 37512, 37516, 37628, 37638, 2566, 37520, 14, 2, 0, 0, 1, 0, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 37443, 38608, 37456, 37459, 37474, 37477, 37487, 2566, 37496, 3, 2, 0, 0, 3, 2, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 37441, 38215, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 12, 2, 1, 1, 1, 2, 2, {3, 2}, {3, 2}}, - {37441, 691, 37441, 691, 38618, 37510, 37512, 37516, 37628, 37638, 2566, 37520, 14, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 37441, 37626, 37510, 37512, 37516, 37628, 37638, 2566, 37520, 0, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 37441, 37626, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 0, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 37441, 2436, 37510, 37512, 37516, 37628, 37638, 2566, 37520, 12, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 37441, 38621, 37510, 37512, 37516, 37628, 37638, 2566, 37520, 0, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 37441, 37626, 37510, 37512, 37516, 37628, 37638, 2566, 37520, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 37441, 37626, 37510, 37512, 37516, 37628, 37638, 2566, 37520, 0, 0, 1, 1, 1, 2, 2, {3, -1}, {3, 0}}, - {37441, 691, 37441, 691, 38498, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 691, 37441, 691, 38452, 37510, 0, 37516, 37477, 37487, 2566, 37520, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 691, 37441, 691, 38624, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 691, 37441, 691, 38632, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 37501, 37441, 691, 38413, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 37441, 37543, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 2, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 37501, 37441, 37501, 37574, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 12, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 691, 37441, 691, 38452, 37510, 0, 37516, 37477, 37487, 2566, 37520, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 37501, 37441, 691, 38390, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 37501, 37441, 37443, 38421, 37456, 37512, 37474, 37477, 37487, 2566, 37520, 8, 3, 1, 1, 1, 0, 2, {3, -1}, {3, -1}}, - {37441, 37501, 37441, 37441, 0, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 37441, 38637, 37510, 38373, 37516, 37477, 37487, 2566, 37520, 0, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 37441, 38637, 37510, 38373, 37516, 37477, 37487, 2566, 37520, 0, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 37501, 37441, 37501, 37574, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 12, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 691, 37441, 691, 38632, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, - {37441, 37501, 37441, 37441, 38383, 37510, 0, 37516, 37477, 37487, 2566, 37520, 8, 3, 1, 1, 1, 2, 2, {3, 0}, {3, 0}}, - {37441, 37501, 37441, 37443, 38395, 37456, 37512, 37474, 37477, 37487, 2566, 37520, 8, 3, 1, 1, 1, 0, 2, {3, -1}, {3, -1}}, - {37441, 38064, 37441, 37501, 0, 37510, 0, 37516, 37656, 37664, 2566, 37520, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, - {691, 37441, 691, 37441, 38362, 37510, 0, 37516, 37477, 37487, 2566, 37520, 2, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}} + {691, 37416, 691, 37418, 37421, 37431, 37434, 37449, 37452, 37462, 2566, 37471, 3, 2, 0, 0, 3, 2, 2, {3, -1}, {3, -1}}, + {37416, 37476, 37416, 37476, 37479, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 691, 37416, 691, 37497, 37485, 37487, 37491, 37501, 37510, 2566, 37495, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 37416, 37518, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 2, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 37416, 37518, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 2, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 37476, 37416, 37476, 37521, 37485, 37487, 37491, 37525, 37537, 2566, 37495, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 691, 37416, 691, 37549, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 12, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 691, 37416, 691, 37497, 37485, 37487, 37491, 37552, 37563, 2566, 37495, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 691, 37416, 691, 37497, 37485, 37487, 37491, 37574, 37588, 2566, 37495, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 37416, 37601, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 0, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 691, 37416, 37476, 37497, 37485, 37487, 37491, 37603, 37613, 2566, 37495, 8, 3, 0, 0, 1, 0, 2, {3, -1}, {3, -1}}, + {37416, 37476, 37416, 37476, 37497, 37485, 37622, 37491, 37452, 37462, 2566, 37495, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 37476, 37416, 37476, 37497, 37485, 37487, 37491, 37631, 37639, 2566, 37495, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 37416, 37647, 37485, 37487, 37491, 37651, 37462, 37664, 37669, 2, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 37476, 37416, 37476, 37674, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 8, 3, 1, 1, 1, 0, 2, {3, -1}, {3, -1}}, + {37416, 691, 37416, 691, 37549, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 8, 3, 1, 1, 1, 0, 2, {3, -1}, {3, -1}}, + {37416, 691, 37416, 691, 37497, 37485, 37487, 37491, 37603, 37677, 2566, 37495, 9, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 37416, 37687, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 1, 0, 1, 1, 1, 0, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 37416, 37691, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 1, 0, 0, 0, 1, 0, 2, {3, -1}, {3, -1}}, + {37416, 691, 37416, 691, 37497, 37485, 37487, 37491, 37695, 37705, 2566, 37495, 12, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 37476, 37416, 37476, 0, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 12, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 37476, 37416, 37476, 37714, 37485, 37487, 37491, 37718, 37737, 2566, 37495, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 691, 37416, 691, 37756, 37485, 37487, 37491, 37603, 37677, 2566, 37495, 9, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, + {691, 37476, 691, 37759, 37763, 37485, 37487, 37491, 37767, 37776, 2566, 37495, 2, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 691, 37416, 691, 0, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 37476, 37416, 37476, 37785, 37485, 37793, 37491, 37810, 37838, 2566, 37495, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 691, 37416, 691, 37865, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 8, 3, 1, 1, 2, 2, 2, {3, -1}, {3, -1}}, + {37416, 37476, 37416, 37476, 37497, 37485, 37487, 37491, 37525, 37537, 2566, 37495, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 691, 37416, 37476, 37868, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 8, 3, 0, 0, 1, 0, 2, {3, -1}, {3, -1}}, + {37416, 691, 37416, 37476, 37549, 37485, 37874, 37491, 37452, 37462, 2566, 37495, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 37416, 37881, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 1, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 691, 37416, 691, 37885, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 8, 3, 2, 2, 1, 2, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 37416, 37889, 37485, 37892, 37491, 37915, 37462, 37931, 37939, 3, 0, 0, 0, 1, 0, 2, {3, -1}, {3, -1}}, + {37416, 691, 37416, 691, 37947, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 0, 0, 1, 1, 1, 0, 2, {3, -1}, {3, -1}}, + {37416, 37476, 37416, 37476, 37950, 37485, 37954, 37491, 37452, 37462, 2566, 37495, 5, 1, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 37476, 37416, 37476, 37971, 37485, 0, 37491, 37452, 37462, 2566, 37495, 8, 3, 0, 0, 1, 0, 2, {3, -1}, {3, -1}}, + {37416, 691, 37416, 691, 37497, 37485, 37487, 37491, 37975, 37989, 2566, 37495, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, + {691, 37476, 37416, 37476, 37497, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 37476, 37416, 37476, 37497, 37485, 38002, 37491, 38016, 38028, 2566, 37495, 9, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 38039, 37416, 37476, 38041, 37485, 37487, 37491, 38044, 38055, 2566, 37495, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 37476, 37416, 37416, 0, 37485, 0, 37491, 37452, 37462, 2566, 37495, 8, 3, 1, 1, 1, 2, 2, {3, 0}, {3, 0}}, + {185, 37416, 185, 37418, 38065, 37431, 38074, 37449, 38085, 37462, 38100, 37939, 3, 0, 0, 0, 3, 0, 2, {3, -1}, {3, -1}}, + {37416, 691, 37416, 691, 38107, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 8, 3, 0, 0, 1, 0, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 691, 38111, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 8, 3, 0, 0, 1, 0, 2, {3, -1}, {3, -1}}, + {37416, 37476, 37416, 691, 0, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 691, 37416, 691, 37497, 37485, 37487, 37491, 38117, 38127, 2566, 37495, 8, 3, 10, 3, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 691, 37416, 691, 38136, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 37476, 10794, 37485, 0, 37491, 37452, 37462, 2566, 37495, 2, 2, 2, 2, 1, 2, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 37476, 10794, 37485, 0, 37491, 37452, 37462, 2566, 37495, 2, 2, 2, 2, 1, 2, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 37416, 10794, 37485, 38143, 37491, 37452, 37462, 2566, 37495, 2, 2, 2, 2, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 38039, 37416, 37476, 10794, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 2, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 37476, 37416, 37476, 0, 37485, 38149, 37491, 37452, 37462, 2566, 37495, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 691, 37416, 691, 37549, 37485, 37874, 37491, 37452, 37462, 2566, 37495, 12, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 37416, 38190, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}}, + {691, 37416, 691, 37416, 37497, 37485, 0, 37491, 37452, 37462, 2566, 37495, 1, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 37476, 37416, 37476, 37497, 37485, 37874, 37491, 37452, 37462, 2566, 37495, 12, 2, 2, 2, 1, 2, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 37416, 37497, 37485, 0, 37491, 37452, 37462, 2566, 37495, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 37416, 38194, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 0, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, + {2566, 37476, 37416, 37476, 0, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 37476, 37416, 37476, 0, 37485, 38197, 37491, 37452, 37462, 2566, 37495, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 37416, 38214, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 0, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 37476, 37416, 37418, 0, 37431, 37487, 37449, 37452, 37462, 2566, 37495, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 37416, 38218, 37485, 38225, 37491, 37452, 37462, 2566, 37495, 12, 2, 1, 0, 1, 2, 2, {3, 2}, {3, 2}}, + {691, 37416, 691, 37416, 0, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}}, + {691, 37416, 691, 37416, 38190, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}}, + {691, 37416, 691, 37416, 38190, 37485, 0, 37491, 37452, 37462, 2566, 37495, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}}, + {691, 37416, 691, 37416, 38190, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}}, + {691, 37416, 691, 37416, 38190, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}}, + {691, 37416, 691, 37416, 38190, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}}, + {691, 37416, 691, 37416, 38190, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 12, 2, 2, 2, 1, 2, 2, {3, 2}, {3, 2}}, + {691, 37416, 691, 37416, 38190, 37485, 0, 37491, 37452, 37462, 2566, 37495, 12, 2, 1, 1, 1, 2, 2, {3, 2}, {3, 2}}, + {38252, 37416, 691, 37416, 38190, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}}, + {37416, 37476, 37416, 37416, 0, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 37416, 37518, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 2, 0, 1, 1, 1, 2, 2, {3, 0}, {3, 0}}, + {691, 37416, 691, 37416, 38254, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 691, 38257, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 5, 1, 1, 1, 2, 2, 2, {3, -1}, {3, 0}}, + {691, 37416, 691, 691, 38261, 37485, 38265, 37491, 37452, 37462, 2566, 37495, 8, 3, 0, 0, 1, 0, 2, {3, 0}, {3, 0}}, + {37416, 691, 37416, 691, 37497, 37485, 37487, 37491, 37603, 37613, 2566, 37495, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 37416, 38190, 37485, 0, 37491, 37452, 37462, 2566, 37495, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}}, + {691, 37416, 691, 37416, 38302, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 14, 2, 0, 0, 1, 2, 2, {3, -1}, {3, 2}}, + {691, 37416, 691, 37416, 38310, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 1, 0, 1, 1, 1, 2, 1, {3, 0}, {3, 0}}, + {37416, 38039, 37416, 37476, 0, 37485, 0, 37491, 37631, 37639, 2566, 37495, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 37416, 38317, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, 2}}, + {691, 37416, 691, 37418, 38330, 37431, 0, 37491, 37452, 37462, 2566, 37495, 3, 0, 4, 2, 3, 0, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 37416, 38333, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 0, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 37416, 0, 37485, 0, 37491, 37452, 37462, 2566, 37495, 2, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 37416, 38337, 37485, 0, 37491, 37452, 37462, 2566, 37495, 9, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 37476, 10794, 37485, 0, 37491, 37452, 37462, 2566, 37495, 2, 2, 2, 2, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 691, 37416, 691, 37549, 37485, 37874, 37491, 37452, 37462, 2566, 37495, 12, 2, 0, 0, 1, 2, 2, {3, 0}, {3, 0}}, + {691, 37416, 691, 37416, 38337, 37485, 0, 37491, 37452, 37462, 2566, 37495, 2, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 37416, 37518, 37485, 0, 37491, 37452, 37462, 2566, 37495, 2, 0, 1, 1, 1, 2, 2, {3, -1}, {3, 0}}, + {37416, 37476, 37416, 37476, 37497, 37485, 0, 37491, 37452, 37462, 2566, 37495, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 37476, 37416, 37759, 0, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 37476, 37416, 37416, 37785, 37485, 0, 37491, 37452, 37462, 2566, 37495, 5, 1, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 37476, 37416, 691, 38341, 37485, 0, 37491, 37452, 37462, 2566, 37495, 8, 3, 0, 0, 1, 0, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 37416, 38254, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 1, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 37418, 37421, 37431, 37434, 37449, 37452, 37462, 2566, 37471, 3, 2, 0, 0, 3, 2, 2, {3, -1}, {3, -1}}, + {37416, 37476, 37416, 37476, 37479, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 691, 37416, 691, 37497, 37485, 37487, 37491, 37501, 37510, 2566, 37495, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 37416, 38344, 37485, 38348, 37491, 37452, 37462, 2566, 37495, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 37476, 37416, 37476, 37521, 37485, 37487, 37491, 37525, 37537, 2566, 37495, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 691, 37416, 691, 37549, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 12, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 691, 37416, 691, 37497, 37485, 37487, 37491, 37552, 37563, 2566, 37495, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 691, 37416, 691, 37497, 37485, 37487, 37491, 37574, 37588, 2566, 37495, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 37416, 37601, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 0, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 37476, 37416, 37476, 37497, 37485, 37622, 37491, 37452, 37462, 2566, 37495, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 37476, 37416, 37476, 37497, 37485, 37487, 37491, 37631, 37639, 2566, 37495, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 37416, 37647, 37485, 37487, 37491, 37651, 37462, 37664, 37669, 2, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 37476, 37416, 37476, 37674, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 8, 3, 1, 1, 1, 0, 2, {3, -1}, {3, -1}}, + {37416, 691, 37416, 691, 37549, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 8, 3, 1, 1, 1, 0, 2, {3, -1}, {3, -1}}, + {37416, 691, 37416, 691, 37497, 37485, 37487, 37491, 37603, 37677, 2566, 37495, 9, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 37416, 37687, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 1, 0, 1, 1, 1, 0, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 37416, 37691, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 1, 0, 0, 0, 1, 0, 2, {3, -1}, {3, -1}}, + {37416, 691, 37416, 691, 37497, 37485, 37487, 37491, 37695, 37705, 2566, 37495, 12, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 37476, 37416, 37476, 37549, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 12, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 37476, 37416, 37476, 37714, 37485, 37487, 37491, 37718, 37737, 2566, 37495, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 691, 37416, 691, 37756, 37485, 37487, 37491, 37603, 37677, 2566, 37495, 9, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, + {691, 37476, 691, 37759, 37763, 37485, 37487, 37491, 37767, 37776, 2566, 37495, 2, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 691, 37416, 691, 0, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 37476, 37416, 37476, 37785, 37485, 37793, 37491, 37810, 37838, 2566, 37495, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 691, 37416, 691, 37865, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 8, 3, 1, 1, 2, 2, 2, {3, -1}, {3, -1}}, + {37416, 37476, 37416, 37476, 37497, 37485, 37487, 37491, 37525, 37537, 2566, 37495, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 691, 37416, 37476, 37868, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 8, 3, 0, 0, 1, 0, 2, {3, -1}, {3, -1}}, + {37416, 691, 37416, 37476, 37549, 37485, 37874, 37491, 37452, 37462, 2566, 37495, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 37416, 37881, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 1, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 691, 37416, 691, 37885, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 8, 3, 2, 2, 1, 2, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 37416, 37889, 37485, 37892, 37491, 37915, 37462, 37931, 37939, 3, 0, 0, 0, 1, 0, 2, {3, -1}, {3, -1}}, + {37416, 691, 37416, 691, 37947, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 0, 0, 1, 1, 1, 0, 2, {3, -1}, {3, -1}}, + {37416, 37476, 37416, 37476, 37950, 37485, 37954, 37491, 37452, 37462, 2566, 37495, 5, 1, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 37476, 37416, 37476, 37971, 37485, 0, 37491, 37452, 37462, 2566, 37495, 8, 3, 0, 0, 1, 0, 2, {3, -1}, {3, -1}}, + {37416, 691, 37416, 691, 37497, 37485, 37487, 37491, 37975, 37989, 2566, 37495, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, + {691, 37476, 37416, 37476, 37497, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 37476, 37416, 37476, 37497, 37485, 38002, 37491, 38016, 38028, 2566, 37495, 9, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 38039, 37416, 37476, 38041, 37485, 37487, 37491, 38044, 38055, 2566, 37495, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 37476, 37416, 37416, 38358, 37485, 0, 37491, 37452, 37462, 2566, 37495, 8, 3, 1, 1, 1, 2, 2, {3, 0}, {3, 0}}, + {185, 37416, 185, 37418, 38065, 37431, 38074, 37449, 38085, 37462, 38100, 37939, 3, 0, 0, 0, 3, 0, 2, {3, -1}, {3, -1}}, + {37416, 691, 37416, 691, 38107, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 8, 3, 0, 0, 1, 0, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 691, 38111, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 8, 3, 0, 0, 1, 0, 2, {3, -1}, {3, -1}}, + {37416, 37476, 37416, 691, 38365, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 691, 37416, 691, 37497, 37485, 37487, 37491, 38117, 38127, 2566, 37495, 8, 3, 10, 3, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 691, 37416, 691, 38136, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 37476, 10794, 37485, 0, 37491, 37452, 37462, 2566, 37495, 2, 2, 2, 2, 1, 2, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 37476, 10794, 37485, 0, 37491, 37452, 37462, 2566, 37495, 2, 2, 2, 2, 1, 2, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 37416, 10794, 37485, 38143, 37491, 37452, 37462, 2566, 37495, 2, 2, 2, 2, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 38039, 37416, 37476, 10794, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 2, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 37476, 37416, 37476, 0, 37485, 38149, 37491, 37452, 37462, 2566, 37495, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 691, 37416, 691, 37549, 37485, 37874, 37491, 37452, 37462, 2566, 37495, 12, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 37416, 38190, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}}, + {691, 37416, 691, 37416, 37497, 37485, 0, 37491, 37452, 37462, 2566, 37495, 1, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 37476, 37416, 37476, 37549, 37485, 37874, 37491, 37452, 37462, 2566, 37495, 12, 2, 2, 2, 1, 2, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 37416, 38214, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 0, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 37476, 37416, 37418, 38370, 37431, 37487, 37449, 37452, 37462, 2566, 37495, 8, 3, 1, 1, 1, 0, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 37416, 38190, 37485, 38225, 37491, 37452, 37462, 2566, 37495, 12, 2, 1, 0, 1, 2, 2, {3, 2}, {3, 2}}, + {691, 37416, 691, 37416, 38190, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}}, + {691, 37416, 691, 37416, 38190, 37485, 0, 37491, 37452, 37462, 2566, 37495, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}}, + {691, 37416, 691, 37416, 38190, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}}, + {691, 37416, 691, 37416, 38190, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}}, + {691, 37416, 691, 37416, 38190, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}}, + {691, 37416, 691, 37416, 38190, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 12, 2, 2, 2, 1, 2, 2, {3, 2}, {3, 2}}, + {691, 37416, 691, 37416, 38190, 37485, 0, 37491, 37452, 37462, 2566, 37495, 12, 2, 1, 1, 1, 2, 2, {3, 2}, {3, 2}}, + {38252, 37416, 691, 37416, 38190, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}}, + {691, 37416, 691, 37416, 37518, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 2, 0, 1, 1, 1, 2, 2, {3, 0}, {3, 0}}, + {691, 37416, 691, 37416, 38254, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 691, 38257, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 5, 1, 1, 1, 2, 2, 2, {3, -1}, {3, 0}}, + {691, 37416, 691, 691, 38261, 37485, 38265, 37491, 37452, 37462, 2566, 37495, 8, 3, 0, 0, 1, 0, 2, {3, 0}, {3, 0}}, + {37416, 691, 37416, 691, 37497, 37485, 37487, 37491, 37603, 37613, 2566, 37495, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 37416, 38190, 37485, 0, 37491, 37452, 37462, 2566, 37495, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}}, + {691, 37416, 691, 37416, 38302, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 14, 2, 0, 0, 1, 2, 2, {3, -1}, {3, 2}}, + {691, 37416, 691, 37416, 38310, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 1, 0, 1, 1, 1, 2, 1, {3, 0}, {3, 0}}, + {691, 37416, 691, 37416, 38317, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, 2}}, + {691, 37416, 691, 37418, 38330, 37431, 0, 37491, 37452, 37462, 2566, 37495, 3, 0, 4, 2, 3, 0, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 37416, 38333, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 0, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 37416, 38337, 37485, 0, 37491, 37452, 37462, 2566, 37495, 2, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 37416, 38337, 37485, 0, 37491, 37452, 37462, 2566, 37495, 9, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 37476, 10794, 37485, 0, 37491, 37452, 37462, 2566, 37495, 2, 2, 2, 2, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 691, 37416, 691, 37549, 37485, 37874, 37491, 37452, 37462, 2566, 37495, 12, 2, 0, 0, 1, 2, 2, {3, 0}, {3, 0}}, + {691, 37416, 691, 37416, 38337, 37485, 0, 37491, 37452, 37462, 2566, 37495, 2, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 37416, 37518, 37485, 0, 37491, 37452, 37462, 2566, 37495, 2, 0, 1, 1, 1, 2, 2, {3, -1}, {3, 0}}, + {37416, 37476, 37416, 37476, 37497, 37485, 0, 37491, 37452, 37462, 2566, 37495, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 37476, 37416, 37416, 37785, 37485, 0, 37491, 37452, 37462, 2566, 37495, 5, 1, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 37476, 37416, 691, 38341, 37485, 0, 37491, 37452, 37462, 2566, 37495, 8, 3, 0, 0, 1, 0, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 37416, 38254, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 1, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 37418, 38376, 37431, 37434, 37449, 37452, 37462, 2566, 37471, 3, 2, 0, 0, 3, 0, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 37416, 37687, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 2, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, + {691, 37476, 37416, 38386, 37763, 37485, 37487, 37491, 37552, 37563, 2566, 37495, 2, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 37416, 38254, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 37416, 37601, 37485, 37487, 37491, 37603, 37613, 2566, 37495, 1, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 691, 37416, 691, 37497, 37485, 37487, 37491, 37631, 37639, 2566, 37495, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, + {691, 37476, 37416, 38386, 37763, 37485, 37487, 37491, 37603, 37677, 2566, 37495, 2, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 691, 37416, 691, 37497, 37485, 37487, 37491, 37695, 37705, 2566, 37495, 12, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 37476, 37416, 37476, 37549, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 12, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 37476, 37416, 37476, 37497, 37485, 37487, 37491, 37603, 37677, 2566, 37495, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 37476, 37416, 37476, 37497, 37485, 37874, 37491, 37452, 37462, 2566, 37495, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 37476, 37416, 691, 38388, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 37416, 37497, 37485, 0, 37491, 37452, 37462, 2566, 37495, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 37476, 37416, 37418, 38396, 37431, 37487, 37449, 37452, 37462, 2566, 37495, 8, 3, 1, 1, 1, 0, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 37416, 38403, 37485, 38225, 37491, 37452, 37462, 2566, 37495, 12, 2, 1, 0, 1, 2, 2, {3, 2}, {3, 2}}, + {691, 37416, 691, 37418, 38407, 37431, 37487, 37449, 37452, 37462, 2566, 37471, 3, 2, 0, 0, 3, 2, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 37416, 37601, 37485, 38348, 37491, 37452, 37462, 2566, 37495, 0, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 691, 37416, 691, 37497, 37485, 37487, 37491, 37552, 37563, 2566, 37495, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 37416, 37601, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 691, 37416, 691, 37497, 37485, 37487, 37491, 37603, 37613, 2566, 37495, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 37476, 37416, 37476, 37601, 37485, 37487, 37491, 37631, 37639, 2566, 37495, 15, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 37476, 37416, 37476, 37497, 37485, 37874, 37491, 37452, 37462, 2566, 37495, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 691, 38417, 37431, 37434, 37449, 37452, 37462, 2566, 37471, 3, 0, 0, 0, 3, 3, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 37416, 37601, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 0, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 691, 37416, 691, 37497, 37485, 37487, 37491, 37552, 37563, 2566, 37495, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 37416, 37601, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 1, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 37416, 8056, 37485, 37487, 37491, 37603, 37613, 2566, 37495, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, + {691, 37476, 37416, 38386, 37763, 37485, 37487, 37491, 37631, 37639, 2566, 37495, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 691, 37416, 691, 38427, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 8, 3, 0, 0, 2, 2, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 37418, 38430, 37431, 37434, 37449, 37452, 37462, 2566, 37471, 3, 2, 0, 0, 3, 2, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 37416, 38440, 37485, 38348, 37491, 37452, 37462, 2566, 37495, 0, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 691, 37416, 38386, 0, 37485, 37487, 37491, 37552, 37563, 2566, 37495, 2, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 37416, 37601, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 1, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 691, 37416, 691, 38445, 37485, 37487, 37491, 37603, 37613, 2566, 37495, 0, 0, 1, 1, 1, 0, 2, {3, -1}, {3, -1}}, + {37416, 37476, 37416, 691, 37497, 37485, 37487, 37491, 37631, 37639, 2566, 37495, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 691, 37416, 691, 38427, 37485, 0, 37491, 37452, 37462, 2566, 37495, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 37418, 38449, 37431, 37434, 37449, 37452, 37462, 2566, 37471, 3, 2, 0, 0, 3, 2, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 37416, 37497, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 37416, 38459, 37485, 37487, 37491, 37603, 37613, 2566, 37495, 14, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 37476, 37416, 37476, 37497, 37485, 37487, 37491, 37631, 37639, 2566, 37495, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 691, 37416, 691, 38427, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 691, 38463, 37431, 37434, 37449, 37452, 37462, 2566, 37471, 3, 2, 0, 0, 3, 3, 2, {3, -1}, {3, -1}}, + {37416, 37476, 37416, 37476, 10794, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 2, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 37416, 37601, 37485, 37487, 37491, 37603, 37613, 2566, 37495, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 691, 37416, 691, 38473, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 37418, 38478, 37431, 37434, 37449, 37452, 37462, 2566, 37471, 3, 2, 0, 0, 3, 3, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 37416, 37601, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 1, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 691, 37416, 691, 38488, 37485, 37487, 37491, 37603, 37613, 2566, 37495, 12, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 691, 37416, 691, 38473, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 37418, 38492, 37431, 37434, 37449, 37452, 37462, 2566, 37471, 3, 2, 0, 0, 3, 0, 2, {3, -1}, {3, -1}}, + {37416, 691, 37416, 691, 37601, 37485, 37487, 37491, 37603, 37613, 2566, 37495, 1, 0, 1, 1, 1, 0, 2, {3, -1}, {3, -1}}, + {37416, 691, 37416, 691, 38502, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 8, 3, 1, 1, 1, 0, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 37418, 38507, 37431, 37434, 37449, 37452, 37462, 2566, 37471, 3, 2, 0, 0, 3, 0, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 37416, 37601, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 0, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 37416, 38517, 37485, 37487, 37491, 37603, 37613, 2566, 37495, 12, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 691, 37416, 691, 38521, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 8, 3, 1, 1, 1, 0, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 37418, 38529, 37431, 37434, 37449, 37452, 37462, 2566, 37471, 3, 2, 0, 0, 3, 3, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 37416, 37601, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 0, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 691, 37416, 691, 37601, 37485, 37487, 37491, 37603, 37613, 2566, 37495, 2, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 691, 37416, 691, 37497, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 691, 38539, 37431, 37434, 37449, 37452, 37462, 2566, 37471, 3, 2, 0, 0, 3, 0, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 37416, 37601, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 0, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 691, 37416, 691, 37601, 37485, 37487, 37491, 37603, 37613, 2566, 37495, 14, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 691, 37416, 691, 37497, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 37418, 38549, 37431, 37434, 37449, 37452, 37462, 2566, 37471, 3, 2, 0, 0, 3, 3, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 37416, 38333, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 0, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 691, 37416, 691, 37601, 37485, 37487, 37491, 37603, 37613, 2566, 37495, 9, 2, 0, 0, 1, 0, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 37418, 38559, 37431, 37434, 37449, 37452, 37462, 2566, 37471, 3, 2, 0, 0, 3, 2, 2, {3, -1}, {3, -1}}, + {37416, 691, 37416, 691, 37601, 37485, 37487, 37491, 37603, 37613, 2566, 37495, 9, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 37418, 38569, 37431, 37434, 37449, 37452, 37462, 2566, 37471, 3, 2, 0, 0, 3, 3, 2, {3, -1}, {3, -1}}, + {37416, 691, 37416, 691, 38579, 37485, 37487, 37491, 37603, 37613, 2566, 37495, 14, 2, 0, 0, 1, 0, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 37418, 38583, 37431, 37434, 37449, 37452, 37462, 2566, 37471, 3, 2, 0, 0, 3, 2, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 37416, 38190, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 12, 2, 1, 1, 1, 2, 2, {3, 2}, {3, 2}}, + {37416, 691, 37416, 691, 38593, 37485, 37487, 37491, 37603, 37613, 2566, 37495, 14, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 37416, 37601, 37485, 37487, 37491, 37603, 37613, 2566, 37495, 0, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 37416, 37601, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 0, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 37416, 2436, 37485, 37487, 37491, 37603, 37613, 2566, 37495, 12, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 37416, 38596, 37485, 37487, 37491, 37603, 37613, 2566, 37495, 0, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 37416, 37601, 37485, 37487, 37491, 37603, 37613, 2566, 37495, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 37416, 37601, 37485, 37487, 37491, 37603, 37613, 2566, 37495, 0, 0, 1, 1, 1, 2, 2, {3, -1}, {3, 0}}, + {37416, 691, 37416, 691, 38473, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 691, 37416, 691, 38427, 37485, 0, 37491, 37452, 37462, 2566, 37495, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 691, 37416, 691, 38599, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 691, 37416, 691, 38607, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 37476, 37416, 691, 38388, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 37416, 37518, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 2, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 37476, 37416, 37476, 37549, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 12, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 691, 37416, 691, 38427, 37485, 0, 37491, 37452, 37462, 2566, 37495, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 37476, 37416, 691, 38365, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 37476, 37416, 37418, 38396, 37431, 37487, 37449, 37452, 37462, 2566, 37495, 8, 3, 1, 1, 1, 0, 2, {3, -1}, {3, -1}}, + {37416, 37476, 37416, 37416, 0, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 37416, 38612, 37485, 38348, 37491, 37452, 37462, 2566, 37495, 0, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 37416, 38612, 37485, 38348, 37491, 37452, 37462, 2566, 37495, 0, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 37476, 37416, 37476, 37549, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 12, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 691, 37416, 691, 38607, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}}, + {37416, 37476, 37416, 37416, 38358, 37485, 0, 37491, 37452, 37462, 2566, 37495, 8, 3, 1, 1, 1, 2, 2, {3, 0}, {3, 0}}, + {37416, 37476, 37416, 37418, 38370, 37431, 37487, 37449, 37452, 37462, 2566, 37495, 8, 3, 1, 1, 1, 0, 2, {3, -1}, {3, -1}}, + {37416, 38039, 37416, 37476, 0, 37485, 0, 37491, 37631, 37639, 2566, 37495, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}, + {691, 37416, 691, 37416, 38337, 37485, 0, 37491, 37452, 37462, 2566, 37495, 2, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}} }; static const CultureInfoEntry culture_entries [] = { - {0x0001, 0x007F, 768, -1, 38641, 38644, 38651, 38666, 38670, 38641, 0, {0, 0, 38674, 0}, 0, 0, { 1256, 20420, 10004, 720, 1, ';' }}, - {0x0002, 0x007F, 257, -1, 38702, 38705, 38715, 38734, 38738, 38702, 0, {38742, 0, 0, 0}, 1, 1, { 1251, 21025, 10007, 866, 0, ';' }}, - {0x0003, 0x007F, 257, -1, 38784, 38787, 38795, 38803, 38807, 38784, 0, {38811, 0, 0, 0}, 2, 2, { 1252, 500, 10000, 850, 0, ';' }}, - {0x0004, 0x0004, 257, -1, 38831, 38838, 38866, 38873, 38877, 38881, 0, {38884, 0, 0, 0}, 3, 3, { 936, 500, 10008, 936, 0, ',' }}, - {0x0004, 0x7804, 257, -1, 38891, 38899, 38866, 38873, 38877, 38881, 0, {38884, 0, 0, 0}, 4, 4, { 936, 500, 10008, 936, 0, ',' }}, - {0x0005, 0x007F, 257, -1, 38920, 38923, 38929, 38939, 38943, 38920, 0, {38947, 0, 0, 0}, 5, 5, { 1250, 500, 10029, 852, 0, ';' }}, - {0x0006, 0x007F, 257, -1, 38973, 38976, 38983, 38989, 38993, 38973, 0, {38997, 0, 0, 0}, 6, 6, { 1252, 20277, 10000, 850, 0, ';' }}, - {0x0007, 0x007F, 257, -1, 39018, 39021, 39028, 39036, 39040, 39018, 0, {39044, 0, 0, 0}, 7, 7, { 1252, 20273, 10000, 850, 0, ';' }}, - {0x0008, 0x007F, 257, -1, 39069, 39072, 39078, 39095, 39099, 39069, 0, {39103, 0, 0, 0}, 8, 8, { 1253, 20273, 10006, 737, 0, ';' }}, - {0x0009, 0x007F, 257, -1, 39145, 39148, 39148, 39156, 39160, 39145, 0, {39164, 0, 0, 0}, 9, 9, { 1252, 37, 10000, 437, 0, ',' }}, - {0x000A, 0x007F, 257, -1, 39183, 39186, 39194, 39203, 39207, 39183, 0, {39211, 0, 0, 0}, 10, 10, { 1252, 20284, 10000, 850, 0, ';' }}, - {0x000B, 0x007F, 257, -1, 39233, 39236, 39244, 39250, 39254, 39233, 0, {39258, 0, 0, 0}, 11, 11, { 1252, 20278, 10000, 850, 0, ';' }}, - {0x000C, 0x007F, 257, -1, 39283, 39286, 39293, 39303, 39307, 39283, 0, {39311, 0, 0, 0}, 12, 12, { 1252, 20297, 10000, 850, 0, ';' }}, - {0x000D, 0x007F, 257, -1, 39333, 39336, 39343, 39354, 39358, 39333, 0, {39362, 0, 0, 0}, 13, 13, { 1255, 500, 10005, 862, 1, ',' }}, - {0x000E, 0x007F, 257, -1, 39395, 39398, 39408, 39415, 39419, 39395, 0, {39423, 0, 0, 0}, 14, 14, { 1250, 500, 10029, 852, 0, ';' }}, - {0x000F, 0x007F, 257, -1, 39439, 39442, 39452, 39462, 39466, 39439, 0, {39470, 0, 0, 0}, 15, 15, { 1252, 20871, 10079, 850, 0, ';' }}, - {0x0010, 0x007F, 257, -1, 39490, 39493, 39501, 39510, 39514, 39490, 0, {39518, 0, 0, 0}, 16, 16, { 1252, 20280, 10000, 850, 0, ';' }}, - {0x0011, 0x007F, 257, -1, 39540, 39543, 39552, 39562, 39566, 39540, 0, {39570, 0, 0, 0}, 17, 17, { 932, 20290, 10001, 932, 0, ',' }}, - {0x0012, 0x007F, 257, -1, 39597, 39600, 39607, 39617, 39621, 39597, 0, {39625, 0, 0, 0}, 18, 18, { 949, 20833, 10003, 949, 0, ',' }}, - {0x0013, 0x007F, 257, -1, 39635, 39638, 39644, 39655, 39659, 39635, 0, {39663, 0, 0, 0}, 19, 19, { 1252, 500, 10000, 850, 0, ';' }}, - {0x0014, 0x007F, 257, -1, 39685, 39688, 39698, 39704, 39708, 39712, 0, {38997, 0, 0, 0}, 20, 20, { 1252, 20277, 10000, 850, 0, ';' }}, - {0x0015, 0x007F, 257, -1, 39715, 39718, 39725, 39732, 39736, 39715, 0, {39740, 0, 0, 0}, 21, 21, { 1250, 20880, 10029, 852, 0, ';' }}, - {0x0016, 0x007F, 257, -1, 39764, 39767, 39778, 39789, 39793, 39764, 0, {39797, 0, 0, 0}, 22, 22, { 1252, 500, 10000, 850, 0, ';' }}, - {0x0017, 0x007F, 257, -1, 39820, 39823, 39831, 39841, 39845, 39820, 0, {39849, 0, 0, 0}, 23, 23, { 1252, 20273, 10000, 850, 0, ';' }}, - {0x0018, 0x007F, 257, -1, 39869, 39872, 39881, 39890, 39894, 39869, 0, {39898, 0, 0, 0}, 24, 24, { 1250, 20880, 10029, 852, 0, ';' }}, - {0x0019, 0x007F, 257, -1, 39917, 39920, 39928, 39943, 39947, 39917, 0, {39951, 0, 0, 0}, 25, 25, { 1251, 20880, 10007, 866, 0, ';' }}, - {0x001A, 0x007F, 257, -1, 39997, 40000, 40009, 40018, 40022, 39997, 0, {40026, 0, 0, 0}, 26, 26, { 1250, 500, 10082, 852, 0, ';' }}, - {0x001B, 0x007F, 257, -1, 12824, 40049, 40056, 40068, 40072, 12824, 0, {40076, 0, 0, 0}, 27, 27, { 1250, 20880, 10029, 852, 0, ';' }}, - {0x001C, 0x007F, 257, -1, 40100, 40103, 40112, 40118, 40122, 40100, 0, {40126, 0, 0, 0}, 28, 28, { 1250, 20880, 10029, 852, 0, ';' }}, - {0x001D, 0x007F, 257, -1, 40146, 40149, 40157, 40165, 40169, 40146, 0, {38997, 0, 0, 0}, 29, 29, { 1252, 20278, 10000, 850, 0, ';' }}, - {0x001E, 0x007F, 512, -1, 40173, 40176, 40181, 40191, 40195, 40173, 0, {0, 40199, 0, 0}, 30, 30, { 874, 20838, 10021, 874, 0, ',' }}, - {0x001F, 0x007F, 257, -1, 12833, 40230, 40238, 40247, 40251, 12833, 0, {40255, 0, 0, 0}, 31, 31, { 1254, 20905, 10081, 857, 0, ';' }}, - {0x0020, 0x007F, 257, -1, 40269, 40272, 40277, 40286, 40290, 40269, 0, {40294, 0, 0, 0}, 32, 32, { 1256, 20420, 10004, 720, 1, ';' }}, - {0x0021, 0x007F, 257, -1, 40324, 40327, 40338, 40355, 40359, 40324, 0, {40363, 0, 0, 0}, 33, 33, { 1252, 500, 10000, 850, 0, ';' }}, - {0x0022, 0x007F, 257, -1, 40382, 40385, 40395, 40416, 40420, 40382, 0, {40424, 0, 0, 0}, 34, 34, { 1251, 500, 10017, 866, 0, ';' }}, - {0x0023, 0x007F, 257, -1, 40470, 40473, 40484, 40505, 40509, 40470, 0, {40513, 0, 0, 0}, 35, 35, { 1251, 500, 10007, 866, 0, ';' }}, - {0x0024, 0x007F, 257, -1, 40555, 40558, 40568, 40582, 40586, 40555, 0, {40590, 0, 0, 0}, 36, 36, { 1250, 20880, 10029, 852, 0, ';' }}, - {0x0025, 0x007F, 257, -1, 40612, 40615, 40624, 40630, 40634, 40612, 0, {40638, 0, 0, 0}, 37, 37, { 1257, 500, 10029, 775, 0, ';' }}, - {0x0026, 0x007F, 257, -1, 40658, 40661, 40669, 40679, 40683, 40658, 0, {40687, 0, 0, 0}, 38, 38, { 1257, 500, 10029, 775, 0, ';' }}, - {0x0027, 0x007F, 257, -1, 40706, 40709, 40720, 40730, 40734, 40706, 0, {40738, 0, 0, 0}, 39, 39, { 1257, 500, 10029, 775, 0, ';' }}, - {0x0028, 0x007F, 257, -1, 40761, 40764, 40770, 40783, 40787, 40761, 0, {0, 0, 0, 0}, 40, 40, { 1251, 20880, 10007, 866, 0, ';' }}, - {0x0029, 0x007F, 257, -1, 40791, 40794, 40802, 40813, 40817, 40791, 0, {40821, 0, 0, 0}, 41, 41, { 1256, 20420, 10004, 720, 1, ';' }}, - {0x002A, 0x007F, 257, -1, 40845, 40848, 40859, 40874, 35722, 40845, 0, {40878, 0, 0, 0}, 42, 42, { 1258, 500, 10000, 1258, 0, ',' }}, - {0x002B, 0x007F, 257, -1, 40893, 40896, 40905, 40920, 40924, 40893, 0, {40928, 0, 0, 0}, 43, 43, { 0, 500, 2, 1, 0, ',' }}, - {0x002C, 0x007F, 257, -1, 40958, 40961, 40973, 40985, 40989, 40958, 0, {40993, 0, 0, 0}, 44, 44, { 1254, 20905, 10081, 857, 0, ';' }}, - {0x002D, 0x007F, 257, -1, 41012, 41015, 41022, 41030, 41034, 41012, 0, {41038, 0, 0, 0}, 45, 45, { 1252, 500, 10000, 850, 0, ';' }}, - {0x002F, 0x007F, 257, -1, 41058, 41061, 41072, 41093, 41097, 41058, 0, {41101, 0, 0, 0}, 46, 46, { 1251, 500, 10007, 866, 0, ';' }}, - {0x0032, 0x007F, 257, -1, 41145, 41148, 41155, 41164, 41168, 41145, 0, {0, 0, 0, 0}, 47, 47, { 1252, 500, 10000, 850, 0, ',' }}, - {0x0034, 0x007F, 257, -1, 41172, 41175, 41181, 41190, 41194, 41172, 0, {0, 0, 0, 0}, 48, 48, { 1252, 500, 10000, 850, 0, ',' }}, - {0x0035, 0x007F, 257, -1, 41198, 41201, 41206, 41214, 41218, 41198, 0, {41222, 0, 0, 0}, 49, 49, { 1252, 500, 10000, 850, 0, ',' }}, - {0x0036, 0x007F, 257, -1, 41243, 41246, 41246, 41256, 41260, 41243, 0, {41264, 0, 0, 0}, 50, 50, { 1252, 500, 10000, 850, 0, ',' }}, - {0x0037, 0x007F, 257, -1, 41284, 41287, 41296, 41318, 41322, 41284, 0, {41326, 0, 0, 0}, 51, 51, { 0, 500, 2, 1, 0, ';' }}, - {0x0038, 0x007F, 257, -1, 41391, 41394, 41402, 41412, 41416, 41391, 0, {0, 0, 0, 0}, 52, 52, { 1252, 20277, 10079, 850, 0, ';' }}, - {0x0039, 0x007F, 257, -1, 41420, 41423, 41429, 41445, 41449, 41420, 0, {41453, 0, 0, 0}, 53, 53, { 0, 500, 2, 1, 0, ',' }}, - {0x003A, 0x007F, 257, -1, 41506, 41509, 41517, 41523, 41527, 41506, 0, {41531, 0, 0, 0}, 54, 54, { 0, 500, 2, 1, 0, ',' }}, - {0x003B, 0x007F, 257, -1, 41552, 41555, 41569, 41586, 41590, 41552, 0, {41594, 0, 0, 0}, 55, 55, { 1252, 20277, 10000, 850, 0, ';' }}, - {0x003C, 0x007F, 257, -1, 41613, 41616, 41622, 41630, 41634, 41613, 0, {41638, 0, 0, 0}, 56, 56, { 1252, 500, 10000, 850, 0, ',' }}, - {0x003E, 0x007F, 257, -1, 41659, 41662, 41668, 41682, 41686, 41659, 0, {41690, 0, 0, 0}, 57, 57, { 1252, 500, 10000, 850, 0, ';' }}, - {0x003F, 0x007F, 257, -1, 41707, 41710, 41717, 41737, 41741, 41707, 0, {41745, 0, 0, 0}, 58, 58, { 0, 500, 2, 1, 0, ';' }}, - {0x0040, 0x007F, 257, -1, 41787, 41790, 41797, 41814, 41818, 41787, 0, {41822, 0, 0, 0}, 59, 59, { 1251, 20880, 10007, 866, 0, ';' }}, - {0x0041, 0x007F, 257, -1, 41860, 41863, 41871, 41881, 41885, 41860, 0, {41889, 0, 0, 0}, 60, 60, { 1252, 500, 10000, 437, 0, ',' }}, - {0x0043, 0x007F, 257, -1, 41910, 41913, 41919, 41930, 41934, 41910, 0, {41938, 0, 0, 0}, 61, 61, { 1254, 500, 10029, 857, 0, ';' }}, - {0x0045, 0x007F, 257, -1, 41958, 41961, 41969, 41985, 41989, 41958, 0, {41993, 0, 0, 0}, 62, 62, { 0, 500, 2, 1, 0, ',' }}, - {0x0046, 0x007F, 257, -1, 42058, 42061, 42069, 42088, 42092, 42058, 0, {42096, 0, 0, 0}, 63, 63, { 0, 500, 2, 1, 0, ',' }}, - {0x0047, 0x007F, 257, -1, 42143, 42146, 42155, 42177, 42181, 42143, 0, {42185, 0, 0, 0}, 64, 64, { 0, 500, 2, 1, 0, ',' }}, - {0x0048, 0x007F, 257, -1, 42241, 42244, 42250, 42266, 42270, 42241, 0, {0, 0, 0, 0}, 65, 65, { 0, 500, 2, 1, 0, ',' }}, - {0x0049, 0x007F, 257, -1, 42274, 42277, 42283, 42299, 42303, 42274, 0, {42307, 0, 0, 0}, 66, 66, { 0, 500, 2, 1, 0, ',' }}, - {0x004A, 0x007F, 257, -1, 42372, 42375, 42382, 42401, 42405, 42372, 0, {42409, 0, 0, 0}, 67, 67, { 0, 500, 2, 1, 0, ',' }}, - {0x004B, 0x007F, 257, -1, 37890, 42474, 42482, 42498, 42502, 37890, 0, {42506, 0, 0, 0}, 68, 68, { 0, 500, 2, 1, 0, ',' }}, - {0x004C, 0x007F, 257, -1, 42571, 42574, 42584, 42603, 42607, 42571, 0, {42611, 0, 0, 0}, 69, 69, { 0, 500, 2, 1, 0, ',' }}, - {0x004D, 0x007F, 257, -1, 42655, 42658, 42667, 42689, 42693, 42655, 0, {42697, 0, 0, 0}, 70, 70, { 0, 500, 2, 1, 0, ',' }}, - {0x004E, 0x007F, 257, -1, 42750, 42753, 42761, 42777, 2530, 42750, 0, {42781, 0, 0, 0}, 71, 71, { 0, 500, 2, 1, 0, ',' }}, - {0x0050, 0x007F, 257, -1, 42843, 42846, 42856, 42869, 42873, 42843, 0, {42877, 0, 0, 0}, 72, 72, { 1251, 20880, 10007, 866, 0, ';' }}, - {0x0051, 0x007F, 257, -1, 42909, 42912, 42920, 42945, 42949, 42909, 0, {0, 0, 0, 0}, 73, 73, { 0, 500, 2, 1, 0, ',' }}, - {0x0052, 0x007F, 257, -1, 42953, 42956, 42962, 42970, 42974, 42953, 0, {42978, 0, 0, 0}, 74, 74, { 1252, 20285, 10000, 850, 0, ',' }}, - {0x0053, 0x007F, 257, -1, 42994, 42997, 43003, 43019, 43023, 42994, 0, {43027, 0, 0, 0}, 75, 75, { 0, 500, 2, 1, 0, ',' }}, - {0x0054, 0x007F, 257, -1, 43082, 43085, 43089, 43099, 43103, 43082, 0, {43107, 0, 0, 0}, 76, 76, { 0, 500, 2, 1, 0, ',' }}, - {0x0056, 0x007F, 257, -1, 43153, 43156, 43165, 43172, 43176, 43153, 0, {39518, 0, 0, 0}, 77, 77, { 1252, 500, 10000, 850, 0, ';' }}, - {0x0057, 0x007F, 257, -1, 43180, 43184, 43192, 43211, 43180, 43180, 0, {0, 0, 0, 0}, 78, 78, { 0, 500, 2, 1, 0, ',' }}, - {0x005B, 0x007F, 257, -1, 43215, 43218, 43226, 43242, 43246, 43215, 0, {43250, 0, 0, 0}, 79, 79, { 0, 500, 2, 1, 0, ',' }}, - {0x005E, 0x007F, 257, -1, 8151, 43309, 43317, 43330, 43334, 8151, 0, {43338, 0, 0, 0}, 80, 80, { 0, 500, 2, 1, 0, ';' }}, - {0x005F, 0x007F, 257, -1, 43383, 43387, 43411, 43421, 43383, 43383, 0, {0, 0, 0, 0}, 81, 81, { 1252, 20297, 10000, 850, 0, ';' }}, - {0x0061, 0x007F, 257, -1, 1992, 43425, 43432, 43451, 43455, 1992, 0, {43459, 0, 0, 0}, 82, 82, { 0, 500, 2, 1, 0, ',' }}, - {0x0063, 0x007F, 1024, -1, 43509, 43512, 43519, 43528, 43532, 43509, 0, {0, 0, 0, 0}, 83, 83, { 0, 500, 2, 1, 1, ';' }}, - {0x0064, 0x007F, 257, -1, 43536, 43540, 43540, 43549, 43536, 43536, 0, {43553, 0, 0, 0}, 84, 84, { 1252, 500, 10000, 437, 0, ',' }}, - {0x0068, 0x007F, 257, -1, 43576, 43579, 43579, 43585, 43589, 43576, 0, {0, 0, 0, 0}, 85, 85, { 1252, 37, 10000, 437, 0, ',' }}, - {0x006A, 0x007F, 257, -1, 43593, 43596, 43603, 43618, 43622, 43593, 0, {0, 0, 0, 0}, 86, 86, { 1252, 37, 10000, 437, 0, ',' }}, - {0x006C, 0x007F, 257, -1, 43626, 43630, 43645, 43662, 43626, 43626, 0, {0, 0, 0, 0}, 87, 87, { 1252, 500, 10000, 850, 0, ',' }}, - {0x006F, 0x007F, 257, -1, 43666, 43669, 43681, 43693, 43697, 43666, 0, {43701, 0, 0, 0}, 88, 88, { 1252, 20277, 10000, 850, 0, ';' }}, - {0x0070, 0x007F, 257, -1, 43728, 43731, 43731, 43736, 43740, 43728, 0, {0, 0, 0, 0}, 89, 89, { 1252, 37, 10000, 437, 0, ',' }}, - {0x0078, 0x007F, 257, -1, 43744, 43747, 43758, 43768, 43772, 43744, 0, {43776, 0, 0, 0}, 90, 90, { 0, 500, 2, 1, 0, ',' }}, - {0x007E, 0x007F, 257, -1, 43789, 43792, 43799, 43809, 43813, 43789, 0, {43817, 0, 0, 0}, 91, 91, { 1252, 20297, 10000, 850, 0, ';' }}, - {0x0084, 0x007F, 257, -1, 43837, 43841, 43854, 43873, 43837, 43837, 0, {43877, 0, 0, 0}, 92, 92, { 1252, 20297, 10000, 850, 0, ';' }}, - {0x0085, 0x007F, 257, -1, 43902, 43906, 43912, 43930, 43902, 43902, 0, {0, 0, 0, 0}, 93, 93, { 1251, 20880, 10007, 866, 0, ';' }}, - {0x0087, 0x007F, 257, -1, 43934, 43937, 43937, 43949, 43953, 43934, 0, {0, 0, 0, 0}, 94, 94, { 1252, 37, 10000, 437, 0, ';' }}, - {0x0091, 0x007F, 257, -1, 43957, 43960, 43976, 43986, 43990, 43957, 0, {43994, 0, 0, 0}, 95, 95, { 1252, 20285, 10000, 850, 0, ',' }}, - {0x0401, 0x0001, 768, 95, 44019, 44025, 44047, 38666, 38670, 38641, 13775, {0, 0, 38674, 0}, 96, 96, { 1256, 20420, 10004, 720, 1, ';' }}, - {0x0402, 0x0002, 257, 11, 44111, 44117, 44138, 38734, 38738, 38702, 44176, {38742, 0, 0, 0}, 97, 97, { 1251, 21025, 10007, 866, 0, ';' }}, - {0x0403, 0x0003, 257, 31, 44179, 44185, 44201, 38803, 38807, 38784, 44219, {38811, 0, 0, 0}, 98, 98, { 1252, 500, 10000, 850, 0, ';' }}, - {0x0404, 0x7C04, 257, 107, 44222, 44228, 44250, 44266, 38877, 38881, 44270, {44273, 0, 0, 0}, 99, 99, { 950, 500, 10002, 950, 0, ',' }}, - {0x0405, 0x0005, 257, 23, 44280, 44286, 44309, 38939, 38943, 38920, 44339, {38947, 0, 0, 0}, 100, 100, { 1250, 500, 10029, 852, 0, ';' }}, - {0x0406, 0x0006, 257, 25, 44342, 44348, 44365, 38989, 38993, 38973, 44381, {38997, 0, 0, 0}, 101, 101, { 1252, 20277, 10000, 850, 0, ';' }}, - {0x0407, 0x0007, 257, 24, 44384, 44390, 44407, 39036, 39040, 39018, 44429, {39044, 0, 0, 0}, 102, 102, { 1252, 20273, 10000, 850, 0, ';' }}, - {0x0408, 0x0008, 257, 39, 44432, 44438, 44453, 39095, 39099, 39069, 44485, {39103, 0, 0, 0}, 103, 103, { 1253, 20273, 10006, 737, 0, ';' }}, - {0x0409, 0x0009, 257, 109, 44488, 44494, 44494, 39156, 39160, 39145, 44518, {39164, 0, 0, 0}, 104, 104, { 1252, 37, 10000, 437, 0, ',' }}, - {0x040B, 0x000B, 257, 33, 44521, 44527, 44545, 39250, 39254, 39233, 44559, {39258, 0, 0, 0}, 105, 105, { 1252, 20278, 10000, 850, 0, ';' }}, - {0x040C, 0x000C, 257, 35, 44562, 44568, 44584, 39303, 39307, 39283, 44603, {39311, 0, 0, 0}, 106, 106, { 1252, 20297, 10000, 850, 0, ';' }}, - {0x040D, 0x000D, 257, 47, 44606, 44612, 44628, 39354, 39358, 39333, 44652, {39362, 0, 0, 0}, 107, 107, { 1255, 500, 10005, 862, 1, ',' }}, - {0x040E, 0x000E, 257, 44, 44655, 44661, 44681, 39415, 39419, 39395, 44704, {39423, 0, 0, 0}, 108, 108, { 1250, 500, 10029, 852, 0, ';' }}, - {0x040F, 0x000F, 257, 51, 44707, 44713, 44733, 39462, 39466, 39439, 44753, {39470, 0, 0, 0}, 109, 109, { 1252, 20871, 10079, 850, 0, ';' }}, - {0x0410, 0x0010, 257, 52, 44756, 44762, 44778, 39510, 39514, 39490, 44796, {39518, 0, 0, 0}, 110, 110, { 1252, 20280, 10000, 850, 0, ';' }}, - {0x0411, 0x0011, 257, 55, 44799, 44805, 44822, 39562, 39566, 39540, 44841, {39570, 0, 0, 0}, 111, 111, { 932, 20290, 10001, 932, 0, ',' }}, - {0x0412, 0x0012, 257, 58, 44844, 44850, 44871, 39617, 39621, 39597, 44896, {39625, 0, 0, 0}, 112, 112, { 949, 20833, 10003, 949, 0, ',' }}, - {0x0413, 0x0013, 257, 77, 44899, 44905, 44925, 39655, 39659, 39635, 44948, {39663, 0, 0, 0}, 113, 113, { 1252, 500, 10000, 850, 0, ';' }}, - {0x0414, 0x7C14, 257, 78, 44951, 44957, 44984, 39704, 39708, 39712, 45006, {38997, 0, 0, 0}, 114, 114, { 1252, 20277, 10000, 850, 0, ';' }}, - {0x0415, 0x0015, 257, 86, 45009, 45015, 45031, 39732, 39736, 39715, 45047, {39740, 0, 0, 0}, 115, 115, { 1250, 20880, 10029, 852, 0, ';' }}, - {0x0416, 0x0016, 257, 14, 45050, 45056, 45076, 39789, 39793, 39764, 45096, {39797, 0, 0, 0}, 116, 116, { 1252, 500, 10000, 850, 0, ';' }}, - {0x0417, 0x0017, 257, 18, 45099, 45105, 45127, 39841, 39845, 39820, 13778, {39849, 0, 0, 0}, 117, 117, { 1252, 20273, 10000, 850, 0, ';' }}, - {0x0418, 0x0018, 257, 91, 45146, 45152, 45171, 39890, 39894, 39869, 45191, {39898, 0, 0, 0}, 118, 118, { 1250, 20880, 10029, 852, 0, ';' }}, - {0x0419, 0x0019, 257, 93, 45194, 45200, 45217, 39943, 39947, 39917, 45247, {39951, 0, 0, 0}, 119, 119, { 1251, 20880, 10007, 866, 0, ';' }}, - {0x041A, 0x001A, 257, 43, 45250, 45256, 45275, 40018, 40022, 39997, 45295, {40026, 0, 0, 0}, 120, 120, { 1250, 500, 10082, 852, 0, ';' }}, - {0x041B, 0x001B, 257, 99, 45298, 45304, 45322, 40068, 40072, 12824, 45346, {40076, 0, 0, 0}, 121, 121, { 1250, 20880, 10029, 852, 0, ';' }}, - {0x041C, 0x001C, 257, 2, 45349, 45355, 45374, 40118, 40122, 40100, 45392, {40126, 0, 0, 0}, 122, 122, { 1250, 20880, 10029, 852, 0, ';' }}, - {0x041D, 0x001D, 257, 96, 45395, 45401, 45418, 40165, 40169, 40146, 45436, {38997, 0, 0, 0}, 123, 123, { 1252, 20278, 10000, 850, 0, ';' }}, - {0x041E, 0x001E, 512, 102, 45439, 45445, 45461, 40191, 40195, 40173, 45483, {0, 40199, 0, 0}, 124, 124, { 874, 20838, 10021, 874, 0, ',' }}, - {0x041F, 0x001F, 257, 105, 45486, 45492, 45509, 40247, 40251, 12833, 45529, {40255, 0, 0, 0}, 125, 125, { 1254, 20905, 10081, 857, 0, ';' }}, - {0x0420, 0x0020, 257, 85, 45532, 45538, 45554, 40286, 40290, 40269, 45580, {40294, 0, 0, 0}, 126, 126, { 1256, 20420, 10004, 720, 1, ';' }}, - {0x0421, 0x0021, 257, 45, 45583, 45589, 45612, 40355, 40359, 40324, 45641, {40363, 0, 0, 0}, 127, 127, { 1252, 500, 10000, 850, 0, ';' }}, - {0x0422, 0x0022, 257, 108, 45644, 45650, 45670, 40416, 40420, 40382, 45708, {40424, 0, 0, 0}, 128, 128, { 1251, 500, 10017, 866, 0, ';' }}, - {0x0423, 0x0023, 257, 15, 45711, 45717, 45738, 40505, 40509, 40470, 45778, {40513, 0, 0, 0}, 129, 129, { 1251, 500, 10007, 866, 0, ';' }}, - {0x0424, 0x0024, 257, 98, 45781, 45787, 45808, 40582, 40586, 40555, 45834, {40590, 0, 0, 0}, 130, 130, { 1250, 20880, 10029, 852, 0, ';' }}, - {0x0425, 0x0025, 257, 29, 45837, 45843, 45862, 40630, 40634, 40612, 45876, {40638, 0, 0, 0}, 131, 131, { 1257, 500, 10029, 775, 0, ';' }}, - {0x0426, 0x0026, 257, 66, 45879, 45885, 45902, 40679, 40683, 40658, 45922, {40687, 0, 0, 0}, 132, 132, { 1257, 500, 10029, 775, 0, ';' }}, - {0x0427, 0x0027, 257, 64, 45925, 45931, 45954, 40730, 40734, 40706, 45974, {40738, 0, 0, 0}, 133, 133, { 1257, 500, 10029, 775, 0, ';' }}, - {0x0428, 0x7C28, 257, 103, 45977, 45988, 46017, 40783, 40787, 40761, 46053, {0, 0, 0, 0}, 134, 134, { 1251, 20880, 10007, 866, 0, ';' }}, - {0x0429, 0x0029, 257, 50, 46056, 46062, 46077, 40813, 40817, 40791, 46101, {40821, 0, 0, 0}, 135, 135, { 1256, 20420, 10004, 720, 1, ';' }}, - {0x042A, 0x002A, 257, 113, 46104, 46110, 46131, 40874, 35722, 40845, 46159, {40878, 0, 0, 0}, 136, 136, { 1258, 500, 10000, 1258, 0, ',' }}, - {0x042B, 0x002B, 257, 3, 46162, 46168, 46187, 40920, 40924, 40893, 1929, {40928, 0, 0, 0}, 137, 137, { 0, 500, 2, 1, 0, ',' }}, - {0x042C, 0x782C, 257, 7, 46221, 46232, 46264, 40985, 40989, 40958, 46290, {40993, 0, 0, 0}, 138, 138, { 1254, 20905, 10081, 857, 0, ';' }}, - {0x042D, 0x002D, 257, 31, 46293, 46299, 46314, 41030, 41034, 41012, 44219, {41038, 0, 0, 0}, 139, 139, { 1252, 500, 10000, 850, 0, ';' }}, - {0x042F, 0x002F, 257, 71, 46333, 46339, 46362, 41093, 41097, 41058, 46406, {41101, 0, 0, 0}, 140, 140, { 1251, 500, 10007, 866, 0, ';' }}, - {0x0432, 0x0032, 257, 115, 46409, 46415, 41155, 41164, 41168, 41145, 46437, {0, 0, 0, 0}, 141, 141, { 1252, 500, 10000, 850, 0, ',' }}, - {0x0434, 0x0034, 257, 115, 46440, 46446, 41181, 41190, 41194, 41172, 46437, {0, 0, 0, 0}, 142, 142, { 1252, 500, 10000, 850, 0, ',' }}, - {0x0435, 0x0035, 257, 115, 46467, 46473, 46493, 41214, 41218, 41198, 46437, {41222, 0, 0, 0}, 143, 143, { 1252, 500, 10000, 850, 0, ',' }}, - {0x0436, 0x0036, 257, 115, 46518, 46524, 46549, 41256, 41260, 41243, 46437, {41264, 0, 0, 0}, 144, 144, { 1252, 500, 10000, 850, 0, ',' }}, - {0x0437, 0x0037, 257, 37, 46573, 46579, 46598, 41318, 41322, 41284, 46653, {41326, 0, 0, 0}, 145, 145, { 0, 500, 2, 1, 0, ';' }}, - {0x0438, 0x0038, 257, 34, 46656, 46662, 46686, 41412, 41416, 41391, 46707, {0, 0, 0, 0}, 146, 146, { 1252, 20277, 10079, 850, 0, ';' }}, - {0x0439, 0x0039, 257, 48, 46710, 46716, 46730, 41445, 41449, 41420, 46761, {41453, 0, 0, 0}, 147, 147, { 0, 500, 2, 1, 0, ',' }}, - {0x043A, 0x003A, 257, 73, 46764, 46770, 46786, 41523, 41527, 41506, 46800, {41531, 0, 0, 0}, 148, 148, { 0, 500, 2, 1, 0, ',' }}, - {0x043B, 0x003B, 257, 78, 46803, 46809, 46832, 41586, 41590, 41552, 45006, {41594, 0, 0, 0}, 149, 149, { 1252, 20277, 10000, 850, 0, ';' }}, - {0x0441, 0x0041, 257, 56, 46857, 46863, 46879, 41881, 41885, 41860, 46897, {41889, 0, 0, 0}, 150, 150, { 1252, 500, 10000, 437, 0, ',' }}, - {0x0443, 0x7C43, 257, 111, 46900, 46911, 46937, 41930, 41934, 41910, 46963, {41938, 0, 0, 0}, 151, 151, { 1254, 500, 10029, 857, 0, ';' }}, - {0x0445, 0x0045, 257, 48, 46966, 46972, 46988, 41985, 41989, 41958, 46761, {41993, 0, 0, 0}, 152, 152, { 0, 500, 2, 1, 0, ',' }}, - {0x0447, 0x0047, 257, 48, 47019, 47025, 47042, 42177, 42181, 42143, 46761, {42185, 0, 0, 0}, 153, 153, { 0, 500, 2, 1, 0, ',' }}, - {0x0448, 0x0048, 257, 48, 47079, 47085, 47099, 42266, 42270, 42241, 46761, {0, 0, 0, 0}, 154, 154, { 0, 500, 2, 1, 0, ',' }}, - {0x0449, 0x0049, 257, 48, 47130, 47136, 47150, 42299, 42303, 42274, 46761, {42307, 0, 0, 0}, 155, 155, { 0, 500, 2, 1, 0, ',' }}, - {0x044A, 0x004A, 257, 48, 47190, 47196, 47211, 42401, 42405, 42372, 46761, {42409, 0, 0, 0}, 156, 156, { 0, 500, 2, 1, 0, ',' }}, - {0x044B, 0x004B, 257, 48, 47258, 47264, 47280, 42498, 42502, 37890, 46761, {42506, 0, 0, 0}, 157, 157, { 0, 500, 2, 1, 0, ',' }}, - {0x044C, 0x004C, 257, 48, 47311, 47317, 47335, 42603, 42607, 42571, 46761, {42611, 0, 0, 0}, 158, 158, { 0, 500, 2, 1, 0, ',' }}, - {0x044D, 0x004D, 257, 48, 47375, 47381, 47398, 42689, 42693, 42655, 46761, {42697, 0, 0, 0}, 159, 159, { 0, 500, 2, 1, 0, ',' }}, - {0x044E, 0x004E, 257, 48, 47435, 47441, 47457, 42777, 2530, 42750, 46761, {42781, 0, 0, 0}, 160, 160, { 0, 500, 2, 1, 0, ',' }}, - {0x0451, 0x0051, 257, 20, 47488, 47494, 47510, 42945, 42949, 42909, 13857, {0, 0, 0, 0}, 161, 161, { 0, 500, 2, 1, 0, ',' }}, - {0x0452, 0x0052, 257, 36, 47556, 47562, 47585, 42970, 42974, 42953, 47612, {42978, 0, 0, 0}, 162, 162, { 1252, 20285, 10000, 850, 0, ',' }}, - {0x0453, 0x0053, 257, 57, 47615, 47621, 47638, 43019, 43023, 42994, 47678, {43027, 0, 0, 0}, 163, 163, { 0, 500, 2, 1, 0, ',' }}, - {0x0454, 0x0054, 257, 60, 47681, 47687, 47698, 43099, 43103, 43082, 47720, {43107, 0, 0, 0}, 164, 164, { 0, 500, 2, 1, 0, ',' }}, - {0x0456, 0x0056, 257, 31, 47723, 47729, 47746, 43172, 43176, 43153, 44219, {39518, 0, 0, 0}, 165, 165, { 1252, 500, 10000, 850, 0, ';' }}, - {0x0457, 0x0057, 257, 48, 47763, 47770, 47786, 43211, 43180, 43180, 46761, {0, 0, 0, 0}, 166, 166, { 0, 500, 2, 1, 0, ',' }}, - {0x045B, 0x005B, 257, 63, 47820, 47826, 47846, 43242, 43246, 43215, 47896, {43250, 0, 0, 0}, 167, 167, { 0, 500, 2, 1, 0, ',' }}, - {0x045E, 0x005E, 257, 32, 47899, 47905, 47924, 43330, 43334, 8151, 47955, {43338, 0, 0, 0}, 168, 168, { 0, 500, 2, 1, 0, ';' }}, - {0x0461, 0x0061, 257, 79, 47958, 47964, 47979, 43451, 43455, 1992, 48016, {43459, 0, 0, 0}, 169, 169, { 0, 500, 2, 1, 0, ',' }}, - {0x0463, 0x0063, 1024, 1, 48019, 48025, 48046, 43528, 43532, 43509, 48076, {0, 0, 0, 0}, 170, 170, { 0, 500, 2, 1, 1, ';' }}, - {0x0464, 0x0064, 257, 84, 48079, 48086, 48109, 43549, 43536, 43536, 48130, {43553, 0, 0, 0}, 171, 171, { 1252, 500, 10000, 437, 0, ',' }}, - {0x0468, 0x7C68, 257, 75, 48133, 48144, 48167, 43585, 43589, 43576, 48184, {0, 0, 0, 0}, 172, 172, { 1252, 37, 10000, 437, 0, ',' }}, - {0x046A, 0x006A, 257, 75, 48187, 48193, 48210, 43618, 43622, 43593, 48184, {0, 0, 0, 0}, 173, 173, { 1252, 37, 10000, 437, 0, ',' }}, - {0x046C, 0x006C, 257, 115, 48256, 48263, 43645, 43662, 43626, 43626, 46437, {0, 0, 0, 0}, 174, 174, { 1252, 500, 10000, 850, 0, ',' }}, - {0x046F, 0x006F, 257, 38, 48293, 48299, 48323, 43693, 43697, 43666, 48354, {43701, 0, 0, 0}, 175, 175, { 1252, 20277, 10000, 850, 0, ';' }}, - {0x0470, 0x0070, 257, 75, 48357, 48363, 48363, 43736, 43740, 43728, 48184, {0, 0, 0, 0}, 176, 176, { 1252, 37, 10000, 437, 0, ',' }}, - {0x0478, 0x0078, 257, 20, 48378, 48384, 48403, 43768, 43772, 43744, 13857, {43776, 0, 0, 0}, 177, 177, { 0, 500, 2, 1, 0, ',' }}, - {0x047E, 0x007E, 257, 35, 48422, 48428, 48444, 43809, 43813, 43789, 44603, {43817, 0, 0, 0}, 178, 178, { 1252, 20297, 10000, 850, 0, ';' }}, - {0x0485, 0x0085, 257, 93, 48463, 48470, 43912, 43930, 43902, 43902, 45247, {0, 0, 0, 0}, 179, 179, { 1251, 20880, 10007, 866, 0, ';' }}, - {0x0487, 0x0087, 257, 94, 48485, 48491, 48491, 43949, 43953, 43934, 48512, {0, 0, 0, 0}, 180, 180, { 1252, 37, 10000, 437, 0, ';' }}, - {0x0491, 0x0091, 257, 36, 48515, 48521, 48554, 43986, 43990, 43957, 47612, {43994, 0, 0, 0}, 181, 181, { 1252, 20285, 10000, 850, 0, ',' }}, - {0x0801, 0x0001, 257, 49, 48590, 48596, 48610, 48640, 38670, 38641, 48644, {48647, 0, 0, 0}, 182, 182, { 1256, 20420, 10004, 720, 1, ';' }}, - {0x0804, 0x0004, 257, 20, 48679, 38899, 48685, 38873, 38877, 38881, 13857, {38884, 0, 0, 0}, 183, 183, { 936, 500, 10008, 936, 0, ',' }}, - {0x0807, 0x0007, 257, 18, 48701, 48707, 48728, 48746, 39040, 39018, 13778, {39044, 0, 0, 0}, 184, 184, { 1252, 20273, 10000, 850, 0, ';' }}, - {0x0809, 0x0009, 257, 36, 48750, 48756, 48756, 48781, 39160, 39145, 47612, {39164, 0, 0, 0}, 185, 185, { 1252, 20285, 10000, 850, 0, ',' }}, - {0x080A, 0x000A, 257, 74, 48785, 48791, 48808, 48827, 39207, 39183, 48831, {39518, 0, 0, 0}, 186, 186, { 1252, 20284, 10000, 850, 0, ',' }}, - {0x080C, 0x000C, 257, 10, 48834, 48840, 48857, 48878, 39307, 39283, 48882, {39311, 0, 0, 0}, 187, 187, { 1252, 20297, 10000, 850, 0, ';' }}, - {0x0810, 0x0010, 257, 18, 48885, 48891, 48913, 48933, 39514, 39490, 13778, {39518, 0, 0, 0}, 188, 188, { 1252, 500, 10000, 850, 0, ';' }}, - {0x0813, 0x0013, 257, 10, 48937, 48943, 48959, 48980, 39659, 39635, 48882, {39663, 0, 0, 0}, 189, 189, { 1252, 500, 10000, 850, 0, ';' }}, - {0x0814, 0x7814, 257, 78, 48984, 48990, 49017, 49033, 49037, 49041, 45006, {38997, 0, 0, 0}, 190, 190, { 1252, 20277, 10000, 850, 0, ';' }}, - {0x0816, 0x0016, 257, 88, 49044, 49050, 49072, 49094, 39793, 39764, 49098, {39797, 0, 0, 0}, 191, 191, { 1252, 500, 10000, 850, 0, ';' }}, - {0x081D, 0x001D, 257, 33, 49101, 49107, 49125, 49143, 40169, 40146, 44559, {38997, 0, 0, 0}, 192, 192, { 1252, 20278, 10000, 850, 0, ';' }}, - {0x082C, 0x742C, 257, 7, 49147, 49158, 46264, 49193, 40989, 40958, 46290, {40993, 0, 0, 0}, 193, 193, { 1251, 20880, 10007, 866, 0, ';' }}, - {0x083C, 0x003C, 257, 46, 49197, 49203, 49219, 41630, 41634, 41613, 49235, {41638, 0, 0, 0}, 194, 194, { 1252, 500, 10000, 850, 0, ',' }}, - {0x0843, 0x7843, 257, 111, 49238, 49249, 46937, 41930, 41934, 41910, 46963, {49278, 0, 0, 0}, 195, 195, { 1251, 20880, 10007, 866, 0, ';' }}, - {0x0845, 0x0045, 257, 9, 49316, 49322, 49343, 49386, 41989, 41958, 49390, {41993, 0, 0, 0}, 196, 196, { 0, 500, 2, 1, 0, ',' }}, - {0x0C01, 0x0001, 257, 30, 49393, 49399, 49414, 49438, 38670, 38641, 49442, {48647, 0, 0, 0}, 197, 197, { 1256, 20420, 10004, 720, 1, ';' }}, - {0x0C04, 0x7C04, 257, 41, 49445, 49451, 49494, 49531, 38877, 38881, 49535, {44273, 0, 0, 0}, 198, 198, { 950, 500, 10002, 950, 0, ',' }}, - {0x0C07, 0x0007, 257, 5, 49538, 49544, 49561, 49583, 39040, 39018, 49587, {39044, 0, 0, 0}, 199, 199, { 1252, 20273, 10000, 850, 0, ';' }}, - {0x0C09, 0x0009, 257, 6, 49590, 49596, 49596, 49616, 39160, 39145, 49620, {39164, 0, 0, 0}, 200, 200, { 1252, 500, 10000, 850, 0, ',' }}, - {0x0C0A, 0x000A, 257, 31, 49623, 49629, 49645, 49664, 39207, 39183, 44219, {39211, 0, 0, 0}, 201, 201, { 1252, 20284, 10000, 850, 0, ';' }}, - {0x0C0C, 0x000C, 257, 17, 49668, 49674, 49690, 49709, 39307, 39283, 49713, {49716, 0, 0, 0}, 202, 202, { 1252, 20297, 10000, 850, 0, ';' }}, - {0x0C3B, 0x003B, 257, 33, 49738, 49744, 49768, 49794, 49798, 41552, 44559, {41594, 0, 0, 0}, 203, 203, { 1252, 20278, 10000, 850, 0, ';' }}, - {0x1001, 0x0001, 257, 67, 49802, 49808, 49823, 49851, 38670, 38641, 49855, {48647, 0, 0, 0}, 204, 204, { 1256, 20420, 10004, 720, 1, ';' }}, - {0x1004, 0x0004, 257, 97, 49858, 49864, 49896, 49915, 38877, 38881, 49919, {38884, 0, 0, 0}, 205, 205, { 936, 500, 10008, 936, 0, ',' }}, - {0x1007, 0x0007, 257, 65, 49922, 49928, 49948, 49968, 39040, 39018, 49972, {39044, 0, 0, 0}, 206, 206, { 1252, 20273, 10000, 850, 0, ';' }}, - {0x1009, 0x0009, 257, 17, 49975, 49981, 49981, 49998, 39160, 39145, 49713, {39164, 0, 0, 0}, 207, 207, { 1252, 37, 10000, 850, 0, ',' }}, - {0x100A, 0x000A, 257, 40, 50002, 50008, 50028, 50049, 39207, 39183, 50053, {39211, 0, 0, 0}, 208, 208, { 1252, 20284, 10000, 850, 0, ',' }}, - {0x100C, 0x000C, 257, 18, 50056, 50062, 50083, 50102, 39307, 39283, 13778, {39311, 0, 0, 0}, 209, 209, { 1252, 20297, 10000, 850, 0, ';' }}, - {0x101A, 0x001A, 257, 8, 50106, 50112, 50146, 50177, 50181, 39997, 50185, {40026, 0, 0, 0}, 210, 210, { 1250, 870, 10082, 852, 0, ';' }}, - {0x1401, 0x0001, 257, 27, 50188, 50194, 50211, 50243, 38670, 38641, 50247, {48647, 0, 0, 0}, 211, 211, { 1256, 20420, 10004, 720, 1, ';' }}, - {0x1404, 0x7C04, 257, 72, 50250, 50256, 50295, 50332, 38877, 38881, 50336, {44273, 0, 0, 0}, 212, 212, { 950, 500, 10002, 950, 0, ',' }}, - {0x1407, 0x0007, 257, 62, 50339, 50345, 50368, 50392, 39040, 39018, 50396, {39044, 0, 0, 0}, 213, 213, { 1252, 20273, 10000, 850, 0, ';' }}, - {0x1409, 0x0009, 257, 80, 50399, 50405, 50405, 50427, 39160, 39145, 50431, {39164, 0, 0, 0}, 214, 214, { 1252, 500, 10000, 850, 0, ',' }}, - {0x140A, 0x000A, 257, 22, 50434, 50440, 50461, 50483, 39207, 39183, 50487, {39211, 0, 0, 0}, 215, 215, { 1252, 20284, 10000, 850, 0, ',' }}, - {0x140C, 0x000C, 257, 65, 50490, 50496, 50516, 50539, 39307, 39283, 49972, {39311, 0, 0, 0}, 216, 216, { 1252, 20297, 10000, 850, 0, ';' }}, - {0x141A, 0x681A, 257, 8, 50543, 50554, 50594, 50625, 50629, 50633, 50185, {50636, 0, 0, 0}, 217, 217, { 1250, 870, 10082, 852, 0, ';' }}, - {0x1801, 0x0001, 257, 68, 50659, 50665, 50682, 50712, 38670, 38641, 50716, {48647, 0, 0, 0}, 218, 218, { 1256, 20420, 10004, 720, 1, ';' }}, - {0x1809, 0x0009, 257, 46, 50719, 50725, 50725, 50743, 39160, 39145, 49235, {39164, 0, 0, 0}, 219, 219, { 1252, 500, 10000, 850, 0, ',' }}, - {0x180A, 0x000A, 257, 82, 50747, 50753, 50770, 50789, 39207, 39183, 50793, {39211, 0, 0, 0}, 220, 220, { 1252, 20284, 10000, 850, 0, ',' }}, - {0x180C, 0x000C, 257, 69, 50796, 50802, 50818, 50837, 39307, 39283, 50841, {39311, 0, 0, 0}, 221, 221, { 1252, 20297, 10000, 850, 0, ';' }}, - {0x181A, 0x701A, 257, 8, 50844, 50855, 50895, 50947, 50951, 50955, 50185, {50636, 0, 0, 0}, 222, 222, { 1250, 870, 10082, 852, 0, ';' }}, - {0x1C01, 0x0001, 257, 104, 50958, 50964, 50981, 51007, 38670, 38641, 51011, {48647, 0, 0, 0}, 223, 223, { 1256, 20420, 10004, 720, 1, ';' }}, - {0x1C09, 0x0009, 257, 115, 51014, 51020, 51020, 51043, 39160, 39145, 46437, {39164, 0, 0, 0}, 224, 224, { 1252, 500, 10000, 437, 0, ',' }}, - {0x1C0A, 0x000A, 257, 26, 51047, 51053, 51082, 51115, 39207, 39183, 51119, {39211, 0, 0, 0}, 225, 225, { 1252, 20284, 10000, 850, 0, ',' }}, - {0x1C1A, 0x6C1A, 257, 8, 51122, 51133, 50895, 51176, 51180, 50955, 50185, {41101, 0, 0, 0}, 226, 226, { 1251, 21025, 10007, 855, 0, ';' }}, - {0x2001, 0x0001, 257, 81, 51184, 51190, 51204, 51232, 38670, 38641, 51236, {48647, 0, 0, 0}, 227, 227, { 1256, 20420, 10004, 720, 1, ';' }}, - {0x2009, 0x0009, 257, 53, 51239, 51245, 51245, 51263, 39160, 39145, 51267, {39164, 0, 0, 0}, 228, 228, { 1252, 500, 10000, 850, 0, ',' }}, - {0x200A, 0x000A, 257, 112, 51270, 51276, 51296, 51317, 39207, 39183, 51321, {39211, 0, 0, 0}, 229, 229, { 1252, 20284, 10000, 850, 0, ',' }}, - {0x201A, 0x641A, 257, 8, 51324, 51335, 50594, 51378, 51382, 50633, 50185, {41101, 0, 0, 0}, 230, 230, { 1251, 870, 10082, 855, 0, ';' }}, - {0x2401, 0x0001, 257, 114, 51386, 51392, 51407, 51435, 38670, 38641, 51439, {48647, 0, 0, 0}, 231, 231, { 1256, 20420, 10004, 720, 1, ';' }}, - {0x240A, 0x000A, 257, 21, 51442, 51448, 51467, 51487, 39207, 39183, 51491, {39211, 0, 0, 0}, 232, 232, { 1252, 20284, 10000, 850, 0, ',' }}, - {0x241A, 0x701A, 257, 92, 51494, 51505, 51529, 51557, 2239, 50955, 51561, {50636, 0, 0, 0}, 233, 233, { 1250, 500, 10029, 852, 0, ';' }}, - {0x2801, 0x0001, 257, 101, 51564, 51570, 51585, 51613, 38670, 38641, 51617, {48647, 0, 0, 0}, 234, 234, { 1256, 20420, 10004, 720, 1, ';' }}, - {0x2809, 0x0009, 257, 16, 51620, 51626, 51626, 51643, 39160, 39145, 51647, {39164, 0, 0, 0}, 235, 235, { 1252, 500, 10000, 850, 0, ';' }}, - {0x280A, 0x000A, 257, 83, 51650, 51656, 51671, 51688, 39207, 39183, 51692, {39211, 0, 0, 0}, 236, 236, { 1252, 20284, 10000, 850, 0, ',' }}, - {0x281A, 0x6C1A, 257, 92, 51695, 51706, 51529, 51733, 2239, 50955, 51561, {41101, 0, 0, 0}, 237, 237, { 1251, 21025, 10007, 855, 0, ';' }}, - {0x2C01, 0x0001, 257, 54, 51737, 51743, 51759, 51789, 38670, 38641, 51793, {48647, 0, 0, 0}, 238, 238, { 1256, 20420, 10004, 720, 1, ';' }}, - {0x2C09, 0x0009, 257, 106, 51796, 51802, 51802, 51832, 39160, 39145, 51836, {39164, 0, 0, 0}, 239, 239, { 1252, 500, 10000, 850, 0, ';' }}, - {0x2C0A, 0x000A, 257, 4, 51839, 51845, 51865, 51886, 39207, 39183, 51890, {39211, 0, 0, 0}, 240, 240, { 1252, 20284, 10000, 850, 0, ',' }}, - {0x2C1A, 0x701A, 257, 70, 51893, 51904, 51932, 51965, 2239, 50955, 51969, {50636, 0, 0, 0}, 241, 241, { 1250, 500, 10029, 852, 0, ';' }}, - {0x3001, 0x0001, 257, 61, 51972, 51978, 51995, 52023, 38670, 38641, 52027, {48647, 0, 0, 0}, 242, 242, { 1256, 20420, 10004, 720, 1, ';' }}, - {0x3009, 0x0009, 257, 116, 52030, 52036, 52036, 52055, 39160, 39145, 52059, {39164, 0, 0, 0}, 243, 243, { 1252, 500, 10000, 437, 0, ',' }}, - {0x300A, 0x000A, 257, 28, 52062, 52068, 52086, 52105, 39207, 39183, 52109, {39211, 0, 0, 0}, 244, 244, { 1252, 20284, 10000, 850, 0, ',' }}, - {0x301A, 0x6C1A, 257, 70, 52112, 52123, 51932, 52154, 2239, 50955, 51969, {41101, 0, 0, 0}, 245, 245, { 1251, 21025, 10007, 855, 0, ';' }}, - {0x3401, 0x0001, 257, 59, 52158, 52164, 52180, 52210, 38670, 38641, 52214, {48647, 0, 0, 0}, 246, 246, { 1256, 20420, 10004, 720, 1, ';' }}, - {0x3409, 0x0009, 257, 84, 52217, 52223, 52223, 52245, 39160, 39145, 48130, {39164, 0, 0, 0}, 247, 247, { 1252, 500, 10000, 437, 0, ',' }}, - {0x340A, 0x000A, 257, 19, 52249, 52255, 52271, 52288, 39207, 39183, 52292, {39211, 0, 0, 0}, 248, 248, { 1252, 20284, 10000, 850, 0, ',' }}, - {0x3801, 0x0001, 257, 0, 52295, 52301, 52331, 52395, 38670, 38641, 52399, {48647, 0, 0, 0}, 249, 249, { 1256, 20420, 10004, 720, 1, ';' }}, - {0x380A, 0x000A, 257, 110, 52402, 52408, 52426, 52445, 39207, 39183, 52449, {39211, 0, 0, 0}, 250, 250, { 1252, 20284, 10000, 850, 0, ',' }}, - {0x3C01, 0x0001, 257, 12, 52452, 52458, 52475, 52507, 38670, 38641, 52511, {48647, 0, 0, 0}, 251, 251, { 1256, 20420, 10004, 720, 1, ';' }}, - {0x3C0A, 0x000A, 257, 89, 52514, 52520, 52539, 52559, 39207, 39183, 52563, {39211, 0, 0, 0}, 252, 252, { 1252, 20284, 10000, 850, 0, ',' }}, - {0x4001, 0x0001, 257, 90, 52566, 52572, 52587, 52611, 38670, 38641, 52615, {48647, 0, 0, 0}, 253, 253, { 1256, 20420, 10004, 720, 1, ';' }}, - {0x4009, 0x0009, 257, 48, 52618, 52624, 52624, 52640, 39160, 39145, 46761, {39164, 0, 0, 0}, 254, 254, { 1252, 37, 10000, 437, 0, ',' }}, - {0x400A, 0x000A, 257, 13, 52644, 52650, 52668, 52687, 39207, 39183, 52691, {39211, 0, 0, 0}, 255, 255, { 1252, 20284, 10000, 850, 0, ',' }}, - {0x440A, 0x000A, 257, 100, 52694, 52700, 52722, 52745, 39207, 39183, 52749, {39211, 0, 0, 0}, 256, 256, { 1252, 20284, 10000, 850, 0, ',' }}, - {0x4809, 0x0009, 257, 97, 52752, 52758, 52758, 52778, 39160, 39145, 49919, {39164, 0, 0, 0}, 257, 257, { 1252, 37, 10000, 437, 0, ',' }}, - {0x480A, 0x000A, 257, 42, 52782, 52788, 52807, 52827, 39207, 39183, 52831, {39211, 0, 0, 0}, 258, 258, { 1252, 20284, 10000, 850, 0, ',' }}, - {0x4C0A, 0x000A, 257, 76, 52834, 52840, 52860, 52881, 39207, 39183, 52885, {39211, 0, 0, 0}, 259, 259, { 1252, 20284, 10000, 850, 0, ',' }}, - {0x500A, 0x000A, 257, 87, 52888, 52894, 52916, 52939, 39207, 39183, 52943, {39211, 0, 0, 0}, 260, 260, { 1252, 20284, 10000, 850, 0, ',' }}, - {0x540A, 0x000A, 257, 109, 52946, 52952, 52976, 53002, 39207, 39183, 44518, {39211, 0, 0, 0}, 261, 261, { 1252, 20284, 10000, 850, 0, ',' }}, - {0x641A, 0x781A, 257, -1, 53006, 53014, 53033, 51378, 51382, 50633, 0, {41101, 0, 0, 0}, 262, 262, { 1251, 870, 10082, 855, 0, ';' }}, - {0x681A, 0x781A, 257, -1, 53042, 53050, 53033, 50625, 50629, 50633, 0, {50636, 0, 0, 0}, 263, 263, { 1250, 870, 10082, 852, 0, ';' }}, - {0x6C1A, 0x7C1A, 257, -1, 53066, 53074, 53093, 51733, 2239, 50955, 0, {41101, 0, 0, 0}, 264, 264, { 1251, 21025, 10007, 855, 0, ';' }}, - {0x701A, 0x7C1A, 257, -1, 53106, 53114, 53093, 51557, 2239, 50955, 0, {50636, 0, 0, 0}, 265, 265, { 1250, 500, 10029, 852, 0, ';' }}, - {0x742C, 0x002C, 257, -1, 53130, 53138, 40973, 49193, 40989, 40958, 0, {40993, 0, 0, 0}, 266, 266, { 1251, 20880, 10007, 866, 0, ';' }}, - {0x7804, 0x007F, 257, -1, 38881, 38899, 38866, 38873, 38877, 38881, 0, {38884, 0, 0, 0}, 267, 267, { 936, 500, 10008, 936, 0, ',' }}, - {0x7814, 0x0014, 257, -1, 49041, 53161, 53179, 49033, 49037, 49041, 0, {38997, 0, 0, 0}, 268, 268, { 1252, 20277, 10000, 850, 0, ';' }}, - {0x781A, 0x007F, 257, -1, 50633, 53187, 53033, 50625, 50629, 50633, 0, {50636, 0, 0, 0}, 269, 269, { 1250, 870, 10082, 852, 0, ';' }}, - {0x782C, 0x002C, 257, -1, 53195, 53203, 40973, 40985, 40989, 40958, 0, {40993, 0, 0, 0}, 270, 270, { 1254, 20905, 10081, 857, 0, ';' }}, - {0x7843, 0x0043, 257, -1, 53223, 53231, 41919, 41930, 41934, 41910, 0, {49278, 0, 0, 0}, 271, 271, { 1251, 20880, 10007, 866, 0, ';' }}, - {0x7850, 0x0050, 257, -1, 53248, 53256, 42856, 53277, 42873, 42843, 0, {42877, 0, 0, 0}, 272, 272, { 1251, 20880, 10007, 866, 0, ';' }}, - {0x7C04, 0x7804, 257, -1, 53281, 44228, 38866, 44266, 38877, 38881, 0, {44273, 0, 0, 0}, 273, 273, { 950, 500, 10002, 950, 0, ',' }}, - {0x7C04, 0x7C04, 257, -1, 53289, 53296, 38866, 44266, 38877, 38881, 0, {44273, 0, 0, 0}, 274, 274, { 950, 500, 10002, 950, 0, ',' }}, - {0x7C14, 0x0014, 257, -1, 39712, 53325, 53343, 39704, 39708, 39712, 0, {38997, 0, 0, 0}, 275, 275, { 1252, 20277, 10000, 850, 0, ';' }}, - {0x7C1A, 0x007F, 257, -1, 50955, 53357, 53093, 53365, 2239, 50955, 0, {41101, 0, 0, 0}, 276, 276, { 1250, 500, 10029, 852, 0, ';' }}, - {0x7C28, 0x0028, 257, -1, 53369, 53377, 40770, 40783, 40787, 40761, 0, {0, 0, 0, 0}, 277, 277, { 1251, 20880, 10007, 866, 0, ';' }}, - {0x7C43, 0x0043, 257, -1, 53394, 53402, 41919, 41930, 41934, 41910, 0, {41938, 0, 0, 0}, 278, 278, { 1254, 500, 10029, 857, 0, ';' }}, - {0x7C5F, 0x005F, 257, -1, 53416, 53425, 43411, 43421, 43383, 43383, 0, {0, 0, 0, 0}, 279, 279, { 1252, 20297, 10000, 850, 0, ';' }}, - {0x7C68, 0x0068, 257, -1, 53457, 53465, 43579, 43585, 43589, 43576, 0, {0, 0, 0, 0}, 280, 280, { 1252, 37, 10000, 437, 0, ',' }} + {0x0001, 0x007F, 768, -1, 38616, 38619, 38626, 38641, 38645, 38616, 0, {0, 0, 38649, 0}, 0, 0, { 1256, 20420, 10004, 720, 1, ';' }}, + {0x0002, 0x007F, 257, -1, 38677, 38680, 38690, 38709, 38713, 38677, 0, {38717, 0, 0, 0}, 1, 1, { 1251, 21025, 10007, 866, 0, ';' }}, + {0x0003, 0x007F, 257, -1, 38759, 38762, 38770, 38778, 38782, 38759, 0, {38786, 0, 0, 0}, 2, 2, { 1252, 500, 10000, 850, 0, ';' }}, + {0x0004, 0x0004, 257, -1, 38806, 38813, 38841, 38848, 38852, 38856, 0, {38859, 0, 0, 0}, 3, 3, { 936, 500, 10008, 936, 0, ',' }}, + {0x0004, 0x7804, 257, -1, 38866, 38874, 38841, 38848, 38852, 38856, 0, {38859, 0, 0, 0}, 4, 4, { 936, 500, 10008, 936, 0, ',' }}, + {0x0005, 0x007F, 257, -1, 38895, 38898, 38904, 38914, 38918, 38895, 0, {38922, 0, 0, 0}, 5, 5, { 1250, 500, 10029, 852, 0, ';' }}, + {0x0006, 0x007F, 257, -1, 38948, 38951, 38958, 38964, 38968, 38948, 0, {38972, 0, 0, 0}, 6, 6, { 1252, 20277, 10000, 850, 0, ';' }}, + {0x0007, 0x007F, 257, -1, 38993, 38996, 39003, 39011, 39015, 38993, 0, {39019, 0, 0, 0}, 7, 7, { 1252, 20273, 10000, 850, 0, ';' }}, + {0x0008, 0x007F, 257, -1, 39044, 39047, 39053, 39070, 39074, 39044, 0, {39078, 0, 0, 0}, 8, 8, { 1253, 20273, 10006, 737, 0, ';' }}, + {0x0009, 0x007F, 257, -1, 39120, 39123, 39123, 39131, 39135, 39120, 0, {39139, 0, 0, 0}, 9, 9, { 1252, 37, 10000, 437, 0, ',' }}, + {0x000A, 0x007F, 257, -1, 39158, 39161, 39169, 39178, 39182, 39158, 0, {39186, 0, 0, 0}, 10, 10, { 1252, 20284, 10000, 850, 0, ';' }}, + {0x000B, 0x007F, 257, -1, 39208, 39211, 39219, 39225, 39229, 39208, 0, {39233, 0, 0, 0}, 11, 11, { 1252, 20278, 10000, 850, 0, ';' }}, + {0x000C, 0x007F, 257, -1, 39258, 39261, 39268, 39278, 39282, 39258, 0, {39286, 0, 0, 0}, 12, 12, { 1252, 20297, 10000, 850, 0, ';' }}, + {0x000D, 0x007F, 257, -1, 39308, 39311, 39318, 39329, 39333, 39308, 0, {39337, 0, 0, 0}, 13, 13, { 1255, 500, 10005, 862, 1, ',' }}, + {0x000E, 0x007F, 257, -1, 39370, 39373, 39383, 39390, 39394, 39370, 0, {39398, 0, 0, 0}, 14, 14, { 1250, 500, 10029, 852, 0, ';' }}, + {0x000F, 0x007F, 257, -1, 39414, 39417, 39427, 39437, 39441, 39414, 0, {39445, 0, 0, 0}, 15, 15, { 1252, 20871, 10079, 850, 0, ';' }}, + {0x0010, 0x007F, 257, -1, 39465, 39468, 39476, 39485, 39489, 39465, 0, {39493, 0, 0, 0}, 16, 16, { 1252, 20280, 10000, 850, 0, ';' }}, + {0x0011, 0x007F, 257, -1, 39515, 39518, 39527, 39537, 39541, 39515, 0, {39545, 0, 0, 0}, 17, 17, { 932, 20290, 10001, 932, 0, ',' }}, + {0x0012, 0x007F, 257, -1, 39572, 39575, 39582, 39592, 39596, 39572, 0, {39600, 0, 0, 0}, 18, 18, { 949, 20833, 10003, 949, 0, ',' }}, + {0x0013, 0x007F, 257, -1, 39610, 39613, 39619, 39630, 39634, 39610, 0, {39638, 0, 0, 0}, 19, 19, { 1252, 500, 10000, 850, 0, ';' }}, + {0x0014, 0x007F, 257, -1, 39660, 39663, 39673, 39679, 39683, 39687, 0, {38972, 0, 0, 0}, 20, 20, { 1252, 20277, 10000, 850, 0, ';' }}, + {0x0015, 0x007F, 257, -1, 39690, 39693, 39700, 39707, 39711, 39690, 0, {39715, 0, 0, 0}, 21, 21, { 1250, 20880, 10029, 852, 0, ';' }}, + {0x0016, 0x007F, 257, -1, 39739, 39742, 39753, 39764, 39768, 39739, 0, {39772, 0, 0, 0}, 22, 22, { 1252, 500, 10000, 850, 0, ';' }}, + {0x0017, 0x007F, 257, -1, 39795, 39798, 39806, 39816, 39820, 39795, 0, {39824, 0, 0, 0}, 23, 23, { 1252, 20273, 10000, 850, 0, ';' }}, + {0x0018, 0x007F, 257, -1, 39844, 39847, 39856, 39865, 39869, 39844, 0, {39873, 0, 0, 0}, 24, 24, { 1250, 20880, 10029, 852, 0, ';' }}, + {0x0019, 0x007F, 257, -1, 39892, 39895, 39903, 39918, 39922, 39892, 0, {39926, 0, 0, 0}, 25, 25, { 1251, 20880, 10007, 866, 0, ';' }}, + {0x001A, 0x007F, 257, -1, 39972, 39975, 39984, 39993, 39997, 39972, 0, {40001, 0, 0, 0}, 26, 26, { 1250, 500, 10082, 852, 0, ';' }}, + {0x001B, 0x007F, 257, -1, 12799, 40024, 40031, 40043, 40047, 12799, 0, {40051, 0, 0, 0}, 27, 27, { 1250, 20880, 10029, 852, 0, ';' }}, + {0x001C, 0x007F, 257, -1, 40075, 40078, 40087, 40093, 40097, 40075, 0, {40101, 0, 0, 0}, 28, 28, { 1250, 20880, 10029, 852, 0, ';' }}, + {0x001D, 0x007F, 257, -1, 40121, 40124, 40132, 40140, 40144, 40121, 0, {38972, 0, 0, 0}, 29, 29, { 1252, 20278, 10000, 850, 0, ';' }}, + {0x001E, 0x007F, 512, -1, 40148, 40151, 40156, 40166, 40170, 40148, 0, {0, 40174, 0, 0}, 30, 30, { 874, 20838, 10021, 874, 0, ',' }}, + {0x001F, 0x007F, 257, -1, 12808, 40205, 40213, 40222, 40226, 12808, 0, {40230, 0, 0, 0}, 31, 31, { 1254, 20905, 10081, 857, 0, ';' }}, + {0x0020, 0x007F, 257, -1, 40244, 40247, 40252, 40261, 40265, 40244, 0, {40269, 0, 0, 0}, 32, 32, { 1256, 20420, 10004, 720, 1, ';' }}, + {0x0021, 0x007F, 257, -1, 40299, 40302, 40313, 40330, 40334, 40299, 0, {40338, 0, 0, 0}, 33, 33, { 1252, 500, 10000, 850, 0, ';' }}, + {0x0022, 0x007F, 257, -1, 40357, 40360, 40370, 40391, 40395, 40357, 0, {40399, 0, 0, 0}, 34, 34, { 1251, 500, 10017, 866, 0, ';' }}, + {0x0023, 0x007F, 257, -1, 40445, 40448, 40459, 40480, 40484, 40445, 0, {40488, 0, 0, 0}, 35, 35, { 1251, 500, 10007, 866, 0, ';' }}, + {0x0024, 0x007F, 257, -1, 40530, 40533, 40543, 40557, 40561, 40530, 0, {40565, 0, 0, 0}, 36, 36, { 1250, 20880, 10029, 852, 0, ';' }}, + {0x0025, 0x007F, 257, -1, 40587, 40590, 40599, 40605, 40609, 40587, 0, {40613, 0, 0, 0}, 37, 37, { 1257, 500, 10029, 775, 0, ';' }}, + {0x0026, 0x007F, 257, -1, 40633, 40636, 40644, 40654, 40658, 40633, 0, {40662, 0, 0, 0}, 38, 38, { 1257, 500, 10029, 775, 0, ';' }}, + {0x0027, 0x007F, 257, -1, 40681, 40684, 40695, 40705, 40709, 40681, 0, {40713, 0, 0, 0}, 39, 39, { 1257, 500, 10029, 775, 0, ';' }}, + {0x0028, 0x007F, 257, -1, 40736, 40739, 40745, 40758, 40762, 40736, 0, {0, 0, 0, 0}, 40, 40, { 1251, 20880, 10007, 866, 0, ';' }}, + {0x0029, 0x007F, 257, -1, 40766, 40769, 40777, 40788, 40792, 40766, 0, {40796, 0, 0, 0}, 41, 41, { 1256, 20420, 10004, 720, 1, ';' }}, + {0x002A, 0x007F, 257, -1, 40820, 40823, 40834, 40849, 35702, 40820, 0, {40853, 0, 0, 0}, 42, 42, { 1258, 500, 10000, 1258, 0, ',' }}, + {0x002B, 0x007F, 257, -1, 40868, 40871, 40880, 40895, 40899, 40868, 0, {40903, 0, 0, 0}, 43, 43, { 0, 500, 2, 1, 0, ',' }}, + {0x002C, 0x007F, 257, -1, 40933, 40936, 40948, 40960, 40964, 40933, 0, {40968, 0, 0, 0}, 44, 44, { 1254, 20905, 10081, 857, 0, ';' }}, + {0x002D, 0x007F, 257, -1, 40987, 40990, 40997, 41005, 41009, 40987, 0, {41013, 0, 0, 0}, 45, 45, { 1252, 500, 10000, 850, 0, ';' }}, + {0x002F, 0x007F, 257, -1, 41033, 41036, 41047, 41068, 41072, 41033, 0, {41076, 0, 0, 0}, 46, 46, { 1251, 500, 10007, 866, 0, ';' }}, + {0x0032, 0x007F, 257, -1, 41120, 41123, 41130, 41139, 41143, 41120, 0, {0, 0, 0, 0}, 47, 47, { 1252, 500, 10000, 850, 0, ',' }}, + {0x0034, 0x007F, 257, -1, 41147, 41150, 41156, 41165, 41169, 41147, 0, {0, 0, 0, 0}, 48, 48, { 1252, 500, 10000, 850, 0, ',' }}, + {0x0035, 0x007F, 257, -1, 41173, 41176, 41181, 41189, 41193, 41173, 0, {41197, 0, 0, 0}, 49, 49, { 1252, 500, 10000, 850, 0, ',' }}, + {0x0036, 0x007F, 257, -1, 41218, 41221, 41221, 41231, 41235, 41218, 0, {41239, 0, 0, 0}, 50, 50, { 1252, 500, 10000, 850, 0, ',' }}, + {0x0037, 0x007F, 257, -1, 41259, 41262, 41271, 41293, 41297, 41259, 0, {41301, 0, 0, 0}, 51, 51, { 0, 500, 2, 1, 0, ';' }}, + {0x0038, 0x007F, 257, -1, 41366, 41369, 41377, 41387, 41391, 41366, 0, {0, 0, 0, 0}, 52, 52, { 1252, 20277, 10079, 850, 0, ';' }}, + {0x0039, 0x007F, 257, -1, 41395, 41398, 41404, 41420, 41424, 41395, 0, {41428, 0, 0, 0}, 53, 53, { 0, 500, 2, 1, 0, ',' }}, + {0x003A, 0x007F, 257, -1, 41481, 41484, 41492, 41498, 41502, 41481, 0, {41506, 0, 0, 0}, 54, 54, { 0, 500, 2, 1, 0, ',' }}, + {0x003B, 0x007F, 257, -1, 41527, 41530, 41544, 41561, 41565, 41527, 0, {41569, 0, 0, 0}, 55, 55, { 1252, 20277, 10000, 850, 0, ';' }}, + {0x003C, 0x007F, 257, -1, 41588, 41591, 41597, 41605, 41609, 41588, 0, {41613, 0, 0, 0}, 56, 56, { 1252, 500, 10000, 850, 0, ',' }}, + {0x003E, 0x007F, 257, -1, 41634, 41637, 41643, 41657, 41661, 41634, 0, {41665, 0, 0, 0}, 57, 57, { 1252, 500, 10000, 850, 0, ';' }}, + {0x003F, 0x007F, 257, -1, 41682, 41685, 41692, 41712, 41716, 41682, 0, {41720, 0, 0, 0}, 58, 58, { 0, 500, 2, 1, 0, ';' }}, + {0x0040, 0x007F, 257, -1, 41762, 41765, 41772, 41789, 41793, 41762, 0, {41797, 0, 0, 0}, 59, 59, { 1251, 20880, 10007, 866, 0, ';' }}, + {0x0041, 0x007F, 257, -1, 41835, 41838, 41846, 41856, 41860, 41835, 0, {41864, 0, 0, 0}, 60, 60, { 1252, 500, 10000, 437, 0, ',' }}, + {0x0043, 0x007F, 257, -1, 41885, 41888, 41894, 41905, 41909, 41885, 0, {41913, 0, 0, 0}, 61, 61, { 1254, 500, 10029, 857, 0, ';' }}, + {0x0045, 0x007F, 257, -1, 41933, 41936, 41944, 41960, 41964, 41933, 0, {41968, 0, 0, 0}, 62, 62, { 0, 500, 2, 1, 0, ',' }}, + {0x0046, 0x007F, 257, -1, 42033, 42036, 42044, 42063, 42067, 42033, 0, {42071, 0, 0, 0}, 63, 63, { 0, 500, 2, 1, 0, ',' }}, + {0x0047, 0x007F, 257, -1, 42118, 42121, 42130, 42152, 42156, 42118, 0, {42160, 0, 0, 0}, 64, 64, { 0, 500, 2, 1, 0, ',' }}, + {0x0048, 0x007F, 257, -1, 42216, 42219, 42225, 42241, 42245, 42216, 0, {0, 0, 0, 0}, 65, 65, { 0, 500, 2, 1, 0, ',' }}, + {0x0049, 0x007F, 257, -1, 42249, 42252, 42258, 42274, 42278, 42249, 0, {42282, 0, 0, 0}, 66, 66, { 0, 500, 2, 1, 0, ',' }}, + {0x004A, 0x007F, 257, -1, 42347, 42350, 42357, 42376, 42380, 42347, 0, {42384, 0, 0, 0}, 67, 67, { 0, 500, 2, 1, 0, ',' }}, + {0x004B, 0x007F, 257, -1, 37865, 42449, 42457, 42473, 42477, 37865, 0, {42481, 0, 0, 0}, 68, 68, { 0, 500, 2, 1, 0, ',' }}, + {0x004C, 0x007F, 257, -1, 42546, 42549, 42559, 42578, 42582, 42546, 0, {42586, 0, 0, 0}, 69, 69, { 0, 500, 2, 1, 0, ',' }}, + {0x004D, 0x007F, 257, -1, 42630, 42633, 42642, 42664, 42668, 42630, 0, {42672, 0, 0, 0}, 70, 70, { 0, 500, 2, 1, 0, ',' }}, + {0x004E, 0x007F, 257, -1, 42725, 42728, 42736, 42752, 2530, 42725, 0, {42756, 0, 0, 0}, 71, 71, { 0, 500, 2, 1, 0, ',' }}, + {0x0050, 0x007F, 257, -1, 42818, 42821, 42831, 42844, 42848, 42818, 0, {42852, 0, 0, 0}, 72, 72, { 1251, 20880, 10007, 866, 0, ';' }}, + {0x0051, 0x007F, 257, -1, 42884, 42887, 42895, 42920, 42924, 42884, 0, {0, 0, 0, 0}, 73, 73, { 0, 500, 2, 1, 0, ',' }}, + {0x0052, 0x007F, 257, -1, 42928, 42931, 42937, 42945, 42949, 42928, 0, {42953, 0, 0, 0}, 74, 74, { 1252, 20285, 10000, 850, 0, ',' }}, + {0x0053, 0x007F, 257, -1, 42969, 42972, 42978, 42994, 42998, 42969, 0, {43002, 0, 0, 0}, 75, 75, { 0, 500, 2, 1, 0, ',' }}, + {0x0054, 0x007F, 257, -1, 43057, 43060, 43064, 43074, 43078, 43057, 0, {43082, 0, 0, 0}, 76, 76, { 0, 500, 2, 1, 0, ',' }}, + {0x0056, 0x007F, 257, -1, 43128, 43131, 43140, 43147, 43151, 43128, 0, {39493, 0, 0, 0}, 77, 77, { 1252, 500, 10000, 850, 0, ';' }}, + {0x0057, 0x007F, 257, -1, 43155, 43159, 43167, 43186, 43155, 43155, 0, {0, 0, 0, 0}, 78, 78, { 0, 500, 2, 1, 0, ',' }}, + {0x005B, 0x007F, 257, -1, 43190, 43193, 43201, 43217, 43221, 43190, 0, {43225, 0, 0, 0}, 79, 79, { 0, 500, 2, 1, 0, ',' }}, + {0x005E, 0x007F, 257, -1, 8151, 43284, 43292, 43305, 43309, 8151, 0, {43313, 0, 0, 0}, 80, 80, { 0, 500, 2, 1, 0, ';' }}, + {0x005F, 0x007F, 257, -1, 43358, 43362, 43386, 43396, 43358, 43358, 0, {0, 0, 0, 0}, 81, 81, { 1252, 20297, 10000, 850, 0, ';' }}, + {0x0061, 0x007F, 257, -1, 1992, 43400, 43407, 43426, 43430, 1992, 0, {43434, 0, 0, 0}, 82, 82, { 0, 500, 2, 1, 0, ',' }}, + {0x0063, 0x007F, 1024, -1, 43484, 43487, 43494, 43503, 43507, 43484, 0, {0, 0, 0, 0}, 83, 83, { 0, 500, 2, 1, 1, ';' }}, + {0x0064, 0x007F, 257, -1, 43511, 43515, 43515, 43524, 43511, 43511, 0, {43528, 0, 0, 0}, 84, 84, { 1252, 500, 10000, 437, 0, ',' }}, + {0x0068, 0x007F, 257, -1, 43551, 43554, 43554, 43560, 43564, 43551, 0, {0, 0, 0, 0}, 85, 85, { 1252, 37, 10000, 437, 0, ',' }}, + {0x006A, 0x007F, 257, -1, 43568, 43571, 43578, 43593, 43597, 43568, 0, {0, 0, 0, 0}, 86, 86, { 1252, 37, 10000, 437, 0, ',' }}, + {0x006C, 0x007F, 257, -1, 43601, 43605, 43620, 43637, 43601, 43601, 0, {0, 0, 0, 0}, 87, 87, { 1252, 500, 10000, 850, 0, ',' }}, + {0x006F, 0x007F, 257, -1, 43641, 43644, 43656, 43668, 43672, 43641, 0, {43676, 0, 0, 0}, 88, 88, { 1252, 20277, 10000, 850, 0, ';' }}, + {0x0070, 0x007F, 257, -1, 43703, 43706, 43706, 43711, 43715, 43703, 0, {0, 0, 0, 0}, 89, 89, { 1252, 37, 10000, 437, 0, ',' }}, + {0x0078, 0x007F, 257, -1, 43719, 43722, 43733, 43743, 43747, 43719, 0, {43751, 0, 0, 0}, 90, 90, { 0, 500, 2, 1, 0, ',' }}, + {0x007E, 0x007F, 257, -1, 43764, 43767, 43774, 43784, 43788, 43764, 0, {43792, 0, 0, 0}, 91, 91, { 1252, 20297, 10000, 850, 0, ';' }}, + {0x0084, 0x007F, 257, -1, 43812, 43816, 43829, 43848, 43812, 43812, 0, {43852, 0, 0, 0}, 92, 92, { 1252, 20297, 10000, 850, 0, ';' }}, + {0x0085, 0x007F, 257, -1, 43877, 43881, 43887, 43905, 43877, 43877, 0, {0, 0, 0, 0}, 93, 93, { 1251, 20880, 10007, 866, 0, ';' }}, + {0x0087, 0x007F, 257, -1, 43909, 43912, 43912, 43924, 43928, 43909, 0, {0, 0, 0, 0}, 94, 94, { 1252, 37, 10000, 437, 0, ';' }}, + {0x0091, 0x007F, 257, -1, 43932, 43935, 43951, 43961, 43965, 43932, 0, {43969, 0, 0, 0}, 95, 95, { 1252, 20285, 10000, 850, 0, ',' }}, + {0x0401, 0x0001, 768, 95, 43994, 44000, 44022, 38641, 38645, 38616, 13750, {0, 0, 38649, 0}, 96, 96, { 1256, 20420, 10004, 720, 1, ';' }}, + {0x0402, 0x0002, 257, 11, 44086, 44092, 44113, 38709, 38713, 38677, 44151, {38717, 0, 0, 0}, 97, 97, { 1251, 21025, 10007, 866, 0, ';' }}, + {0x0403, 0x0003, 257, 31, 44154, 44160, 44176, 38778, 38782, 38759, 44194, {38786, 0, 0, 0}, 98, 98, { 1252, 500, 10000, 850, 0, ';' }}, + {0x0404, 0x7C04, 257, 107, 44197, 44203, 44225, 44241, 38852, 38856, 44245, {44248, 0, 0, 0}, 99, 99, { 950, 500, 10002, 950, 0, ',' }}, + {0x0405, 0x0005, 257, 23, 44255, 44261, 44284, 38914, 38918, 38895, 44314, {38922, 0, 0, 0}, 100, 100, { 1250, 500, 10029, 852, 0, ';' }}, + {0x0406, 0x0006, 257, 25, 44317, 44323, 44340, 38964, 38968, 38948, 44356, {38972, 0, 0, 0}, 101, 101, { 1252, 20277, 10000, 850, 0, ';' }}, + {0x0407, 0x0007, 257, 24, 44359, 44365, 44382, 39011, 39015, 38993, 44404, {39019, 0, 0, 0}, 102, 102, { 1252, 20273, 10000, 850, 0, ';' }}, + {0x0408, 0x0008, 257, 39, 44407, 44413, 44428, 39070, 39074, 39044, 44460, {39078, 0, 0, 0}, 103, 103, { 1253, 20273, 10006, 737, 0, ';' }}, + {0x0409, 0x0009, 257, 109, 44463, 44469, 44469, 39131, 39135, 39120, 44493, {39139, 0, 0, 0}, 104, 104, { 1252, 37, 10000, 437, 0, ',' }}, + {0x040B, 0x000B, 257, 33, 44496, 44502, 44520, 39225, 39229, 39208, 44534, {39233, 0, 0, 0}, 105, 105, { 1252, 20278, 10000, 850, 0, ';' }}, + {0x040C, 0x000C, 257, 35, 44537, 44543, 44559, 39278, 39282, 39258, 44578, {39286, 0, 0, 0}, 106, 106, { 1252, 20297, 10000, 850, 0, ';' }}, + {0x040D, 0x000D, 257, 47, 44581, 44587, 44603, 39329, 39333, 39308, 44627, {39337, 0, 0, 0}, 107, 107, { 1255, 500, 10005, 862, 1, ',' }}, + {0x040E, 0x000E, 257, 44, 44630, 44636, 44656, 39390, 39394, 39370, 44679, {39398, 0, 0, 0}, 108, 108, { 1250, 500, 10029, 852, 0, ';' }}, + {0x040F, 0x000F, 257, 51, 44682, 44688, 44708, 39437, 39441, 39414, 44728, {39445, 0, 0, 0}, 109, 109, { 1252, 20871, 10079, 850, 0, ';' }}, + {0x0410, 0x0010, 257, 52, 44731, 44737, 44753, 39485, 39489, 39465, 44771, {39493, 0, 0, 0}, 110, 110, { 1252, 20280, 10000, 850, 0, ';' }}, + {0x0411, 0x0011, 257, 55, 44774, 44780, 44797, 39537, 39541, 39515, 44816, {39545, 0, 0, 0}, 111, 111, { 932, 20290, 10001, 932, 0, ',' }}, + {0x0412, 0x0012, 257, 58, 44819, 44825, 44846, 39592, 39596, 39572, 44871, {39600, 0, 0, 0}, 112, 112, { 949, 20833, 10003, 949, 0, ',' }}, + {0x0413, 0x0013, 257, 77, 44874, 44880, 44900, 39630, 39634, 39610, 44923, {39638, 0, 0, 0}, 113, 113, { 1252, 500, 10000, 850, 0, ';' }}, + {0x0414, 0x7C14, 257, 78, 44926, 44932, 44959, 39679, 39683, 39687, 44981, {38972, 0, 0, 0}, 114, 114, { 1252, 20277, 10000, 850, 0, ';' }}, + {0x0415, 0x0015, 257, 86, 44984, 44990, 45006, 39707, 39711, 39690, 45022, {39715, 0, 0, 0}, 115, 115, { 1250, 20880, 10029, 852, 0, ';' }}, + {0x0416, 0x0016, 257, 14, 45025, 45031, 45051, 39764, 39768, 39739, 45071, {39772, 0, 0, 0}, 116, 116, { 1252, 500, 10000, 850, 0, ';' }}, + {0x0417, 0x0017, 257, 18, 45074, 45080, 45102, 39816, 39820, 39795, 13753, {39824, 0, 0, 0}, 117, 117, { 1252, 20273, 10000, 850, 0, ';' }}, + {0x0418, 0x0018, 257, 91, 45121, 45127, 45146, 39865, 39869, 39844, 45166, {39873, 0, 0, 0}, 118, 118, { 1250, 20880, 10029, 852, 0, ';' }}, + {0x0419, 0x0019, 257, 93, 45169, 45175, 45192, 39918, 39922, 39892, 45222, {39926, 0, 0, 0}, 119, 119, { 1251, 20880, 10007, 866, 0, ';' }}, + {0x041A, 0x001A, 257, 43, 45225, 45231, 45250, 39993, 39997, 39972, 45270, {40001, 0, 0, 0}, 120, 120, { 1250, 500, 10082, 852, 0, ';' }}, + {0x041B, 0x001B, 257, 99, 45273, 45279, 45297, 40043, 40047, 12799, 45321, {40051, 0, 0, 0}, 121, 121, { 1250, 20880, 10029, 852, 0, ';' }}, + {0x041C, 0x001C, 257, 2, 45324, 45330, 45349, 40093, 40097, 40075, 45367, {40101, 0, 0, 0}, 122, 122, { 1250, 20880, 10029, 852, 0, ';' }}, + {0x041D, 0x001D, 257, 96, 45370, 45376, 45393, 40140, 40144, 40121, 45411, {38972, 0, 0, 0}, 123, 123, { 1252, 20278, 10000, 850, 0, ';' }}, + {0x041E, 0x001E, 512, 102, 45414, 45420, 45436, 40166, 40170, 40148, 45458, {0, 40174, 0, 0}, 124, 124, { 874, 20838, 10021, 874, 0, ',' }}, + {0x041F, 0x001F, 257, 105, 45461, 45467, 45484, 40222, 40226, 12808, 45504, {40230, 0, 0, 0}, 125, 125, { 1254, 20905, 10081, 857, 0, ';' }}, + {0x0420, 0x0020, 257, 85, 45507, 45513, 45529, 40261, 40265, 40244, 45555, {40269, 0, 0, 0}, 126, 126, { 1256, 20420, 10004, 720, 1, ';' }}, + {0x0421, 0x0021, 257, 45, 45558, 45564, 45587, 40330, 40334, 40299, 45616, {40338, 0, 0, 0}, 127, 127, { 1252, 500, 10000, 850, 0, ';' }}, + {0x0422, 0x0022, 257, 108, 45619, 45625, 45645, 40391, 40395, 40357, 45683, {40399, 0, 0, 0}, 128, 128, { 1251, 500, 10017, 866, 0, ';' }}, + {0x0423, 0x0023, 257, 15, 45686, 45692, 45713, 40480, 40484, 40445, 45753, {40488, 0, 0, 0}, 129, 129, { 1251, 500, 10007, 866, 0, ';' }}, + {0x0424, 0x0024, 257, 98, 45756, 45762, 45783, 40557, 40561, 40530, 45809, {40565, 0, 0, 0}, 130, 130, { 1250, 20880, 10029, 852, 0, ';' }}, + {0x0425, 0x0025, 257, 29, 45812, 45818, 45837, 40605, 40609, 40587, 45851, {40613, 0, 0, 0}, 131, 131, { 1257, 500, 10029, 775, 0, ';' }}, + {0x0426, 0x0026, 257, 66, 45854, 45860, 45877, 40654, 40658, 40633, 45897, {40662, 0, 0, 0}, 132, 132, { 1257, 500, 10029, 775, 0, ';' }}, + {0x0427, 0x0027, 257, 64, 45900, 45906, 45929, 40705, 40709, 40681, 45949, {40713, 0, 0, 0}, 133, 133, { 1257, 500, 10029, 775, 0, ';' }}, + {0x0428, 0x7C28, 257, 103, 45952, 45963, 45992, 40758, 40762, 40736, 46028, {0, 0, 0, 0}, 134, 134, { 1251, 20880, 10007, 866, 0, ';' }}, + {0x0429, 0x0029, 257, 50, 46031, 46037, 46052, 40788, 40792, 40766, 46076, {40796, 0, 0, 0}, 135, 135, { 1256, 20420, 10004, 720, 1, ';' }}, + {0x042A, 0x002A, 257, 113, 46079, 46085, 46106, 40849, 35702, 40820, 46134, {40853, 0, 0, 0}, 136, 136, { 1258, 500, 10000, 1258, 0, ',' }}, + {0x042B, 0x002B, 257, 3, 46137, 46143, 46162, 40895, 40899, 40868, 1929, {40903, 0, 0, 0}, 137, 137, { 0, 500, 2, 1, 0, ',' }}, + {0x042C, 0x782C, 257, 7, 46196, 46207, 46239, 40960, 40964, 40933, 46265, {40968, 0, 0, 0}, 138, 138, { 1254, 20905, 10081, 857, 0, ';' }}, + {0x042D, 0x002D, 257, 31, 46268, 46274, 46289, 41005, 41009, 40987, 44194, {41013, 0, 0, 0}, 139, 139, { 1252, 500, 10000, 850, 0, ';' }}, + {0x042F, 0x002F, 257, 71, 46308, 46314, 46337, 41068, 41072, 41033, 46381, {41076, 0, 0, 0}, 140, 140, { 1251, 500, 10007, 866, 0, ';' }}, + {0x0432, 0x0032, 257, 115, 46384, 46390, 41130, 41139, 41143, 41120, 46412, {0, 0, 0, 0}, 141, 141, { 1252, 500, 10000, 850, 0, ',' }}, + {0x0434, 0x0034, 257, 115, 46415, 46421, 41156, 41165, 41169, 41147, 46412, {0, 0, 0, 0}, 142, 142, { 1252, 500, 10000, 850, 0, ',' }}, + {0x0435, 0x0035, 257, 115, 46442, 46448, 46468, 41189, 41193, 41173, 46412, {41197, 0, 0, 0}, 143, 143, { 1252, 500, 10000, 850, 0, ',' }}, + {0x0436, 0x0036, 257, 115, 46493, 46499, 46524, 41231, 41235, 41218, 46412, {41239, 0, 0, 0}, 144, 144, { 1252, 500, 10000, 850, 0, ',' }}, + {0x0437, 0x0037, 257, 37, 46548, 46554, 46573, 41293, 41297, 41259, 46628, {41301, 0, 0, 0}, 145, 145, { 0, 500, 2, 1, 0, ';' }}, + {0x0438, 0x0038, 257, 34, 46631, 46637, 46661, 41387, 41391, 41366, 46682, {0, 0, 0, 0}, 146, 146, { 1252, 20277, 10079, 850, 0, ';' }}, + {0x0439, 0x0039, 257, 48, 46685, 46691, 46705, 41420, 41424, 41395, 46736, {41428, 0, 0, 0}, 147, 147, { 0, 500, 2, 1, 0, ',' }}, + {0x043A, 0x003A, 257, 73, 46739, 46745, 46761, 41498, 41502, 41481, 46775, {41506, 0, 0, 0}, 148, 148, { 0, 500, 2, 1, 0, ',' }}, + {0x043B, 0x003B, 257, 78, 46778, 46784, 46807, 41561, 41565, 41527, 44981, {41569, 0, 0, 0}, 149, 149, { 1252, 20277, 10000, 850, 0, ';' }}, + {0x0441, 0x0041, 257, 56, 46832, 46838, 46854, 41856, 41860, 41835, 46872, {41864, 0, 0, 0}, 150, 150, { 1252, 500, 10000, 437, 0, ',' }}, + {0x0443, 0x7C43, 257, 111, 46875, 46886, 46912, 41905, 41909, 41885, 46938, {41913, 0, 0, 0}, 151, 151, { 1254, 500, 10029, 857, 0, ';' }}, + {0x0445, 0x0045, 257, 48, 46941, 46947, 46963, 41960, 41964, 41933, 46736, {41968, 0, 0, 0}, 152, 152, { 0, 500, 2, 1, 0, ',' }}, + {0x0447, 0x0047, 257, 48, 46994, 47000, 47017, 42152, 42156, 42118, 46736, {42160, 0, 0, 0}, 153, 153, { 0, 500, 2, 1, 0, ',' }}, + {0x0448, 0x0048, 257, 48, 47054, 47060, 47074, 42241, 42245, 42216, 46736, {0, 0, 0, 0}, 154, 154, { 0, 500, 2, 1, 0, ',' }}, + {0x0449, 0x0049, 257, 48, 47105, 47111, 47125, 42274, 42278, 42249, 46736, {42282, 0, 0, 0}, 155, 155, { 0, 500, 2, 1, 0, ',' }}, + {0x044A, 0x004A, 257, 48, 47165, 47171, 47186, 42376, 42380, 42347, 46736, {42384, 0, 0, 0}, 156, 156, { 0, 500, 2, 1, 0, ',' }}, + {0x044B, 0x004B, 257, 48, 47233, 47239, 47255, 42473, 42477, 37865, 46736, {42481, 0, 0, 0}, 157, 157, { 0, 500, 2, 1, 0, ',' }}, + {0x044C, 0x004C, 257, 48, 47286, 47292, 47310, 42578, 42582, 42546, 46736, {42586, 0, 0, 0}, 158, 158, { 0, 500, 2, 1, 0, ',' }}, + {0x044D, 0x004D, 257, 48, 47350, 47356, 47373, 42664, 42668, 42630, 46736, {42672, 0, 0, 0}, 159, 159, { 0, 500, 2, 1, 0, ',' }}, + {0x044E, 0x004E, 257, 48, 47410, 47416, 47432, 42752, 2530, 42725, 46736, {42756, 0, 0, 0}, 160, 160, { 0, 500, 2, 1, 0, ',' }}, + {0x0451, 0x0051, 257, 20, 47463, 47469, 47485, 42920, 42924, 42884, 13832, {0, 0, 0, 0}, 161, 161, { 0, 500, 2, 1, 0, ',' }}, + {0x0452, 0x0052, 257, 36, 47531, 47537, 47560, 42945, 42949, 42928, 47587, {42953, 0, 0, 0}, 162, 162, { 1252, 20285, 10000, 850, 0, ',' }}, + {0x0453, 0x0053, 257, 57, 47590, 47596, 47613, 42994, 42998, 42969, 47653, {43002, 0, 0, 0}, 163, 163, { 0, 500, 2, 1, 0, ',' }}, + {0x0454, 0x0054, 257, 60, 47656, 47662, 47673, 43074, 43078, 43057, 47695, {43082, 0, 0, 0}, 164, 164, { 0, 500, 2, 1, 0, ',' }}, + {0x0456, 0x0056, 257, 31, 47698, 47704, 47721, 43147, 43151, 43128, 44194, {39493, 0, 0, 0}, 165, 165, { 1252, 500, 10000, 850, 0, ';' }}, + {0x0457, 0x0057, 257, 48, 47738, 47745, 47761, 43186, 43155, 43155, 46736, {0, 0, 0, 0}, 166, 166, { 0, 500, 2, 1, 0, ',' }}, + {0x045B, 0x005B, 257, 63, 47795, 47801, 47821, 43217, 43221, 43190, 47871, {43225, 0, 0, 0}, 167, 167, { 0, 500, 2, 1, 0, ',' }}, + {0x045E, 0x005E, 257, 32, 47874, 47880, 47899, 43305, 43309, 8151, 47930, {43313, 0, 0, 0}, 168, 168, { 0, 500, 2, 1, 0, ';' }}, + {0x0461, 0x0061, 257, 79, 47933, 47939, 47954, 43426, 43430, 1992, 47991, {43434, 0, 0, 0}, 169, 169, { 0, 500, 2, 1, 0, ',' }}, + {0x0463, 0x0063, 1024, 1, 47994, 48000, 48021, 43503, 43507, 43484, 48051, {0, 0, 0, 0}, 170, 170, { 0, 500, 2, 1, 1, ';' }}, + {0x0464, 0x0064, 257, 84, 48054, 48061, 48084, 43524, 43511, 43511, 48105, {43528, 0, 0, 0}, 171, 171, { 1252, 500, 10000, 437, 0, ',' }}, + {0x0468, 0x7C68, 257, 75, 48108, 48119, 48142, 43560, 43564, 43551, 48159, {0, 0, 0, 0}, 172, 172, { 1252, 37, 10000, 437, 0, ',' }}, + {0x046A, 0x006A, 257, 75, 48162, 48168, 48185, 43593, 43597, 43568, 48159, {0, 0, 0, 0}, 173, 173, { 1252, 37, 10000, 437, 0, ',' }}, + {0x046C, 0x006C, 257, 115, 48231, 48238, 43620, 43637, 43601, 43601, 46412, {0, 0, 0, 0}, 174, 174, { 1252, 500, 10000, 850, 0, ',' }}, + {0x046F, 0x006F, 257, 38, 48268, 48274, 48298, 43668, 43672, 43641, 48329, {43676, 0, 0, 0}, 175, 175, { 1252, 20277, 10000, 850, 0, ';' }}, + {0x0470, 0x0070, 257, 75, 48332, 48338, 48338, 43711, 43715, 43703, 48159, {0, 0, 0, 0}, 176, 176, { 1252, 37, 10000, 437, 0, ',' }}, + {0x0478, 0x0078, 257, 20, 48353, 48359, 48378, 43743, 43747, 43719, 13832, {43751, 0, 0, 0}, 177, 177, { 0, 500, 2, 1, 0, ',' }}, + {0x047E, 0x007E, 257, 35, 48397, 48403, 48419, 43784, 43788, 43764, 44578, {43792, 0, 0, 0}, 178, 178, { 1252, 20297, 10000, 850, 0, ';' }}, + {0x0485, 0x0085, 257, 93, 48438, 48445, 43887, 43905, 43877, 43877, 45222, {0, 0, 0, 0}, 179, 179, { 1251, 20880, 10007, 866, 0, ';' }}, + {0x0487, 0x0087, 257, 94, 48460, 48466, 48466, 43924, 43928, 43909, 48487, {0, 0, 0, 0}, 180, 180, { 1252, 37, 10000, 437, 0, ';' }}, + {0x0491, 0x0091, 257, 36, 48490, 48496, 48529, 43961, 43965, 43932, 47587, {43969, 0, 0, 0}, 181, 181, { 1252, 20285, 10000, 850, 0, ',' }}, + {0x0801, 0x0001, 257, 49, 48565, 48571, 48585, 48615, 38645, 38616, 48619, {48622, 0, 0, 0}, 182, 182, { 1256, 20420, 10004, 720, 1, ';' }}, + {0x0804, 0x0004, 257, 20, 48654, 38874, 48660, 38848, 38852, 38856, 13832, {38859, 0, 0, 0}, 183, 183, { 936, 500, 10008, 936, 0, ',' }}, + {0x0807, 0x0007, 257, 18, 48676, 48682, 48703, 48721, 39015, 38993, 13753, {39019, 0, 0, 0}, 184, 184, { 1252, 20273, 10000, 850, 0, ';' }}, + {0x0809, 0x0009, 257, 36, 48725, 48731, 48731, 48756, 39135, 39120, 47587, {39139, 0, 0, 0}, 185, 185, { 1252, 20285, 10000, 850, 0, ',' }}, + {0x080A, 0x000A, 257, 74, 48760, 48766, 48783, 48802, 39182, 39158, 48806, {39493, 0, 0, 0}, 186, 186, { 1252, 20284, 10000, 850, 0, ',' }}, + {0x080C, 0x000C, 257, 10, 48809, 48815, 48832, 48853, 39282, 39258, 48857, {39286, 0, 0, 0}, 187, 187, { 1252, 20297, 10000, 850, 0, ';' }}, + {0x0810, 0x0010, 257, 18, 48860, 48866, 48888, 48908, 39489, 39465, 13753, {39493, 0, 0, 0}, 188, 188, { 1252, 500, 10000, 850, 0, ';' }}, + {0x0813, 0x0013, 257, 10, 48912, 48918, 48934, 48955, 39634, 39610, 48857, {39638, 0, 0, 0}, 189, 189, { 1252, 500, 10000, 850, 0, ';' }}, + {0x0814, 0x7814, 257, 78, 48959, 48965, 48992, 49008, 49012, 49016, 44981, {38972, 0, 0, 0}, 190, 190, { 1252, 20277, 10000, 850, 0, ';' }}, + {0x0816, 0x0016, 257, 88, 49019, 49025, 49047, 49069, 39768, 39739, 49073, {39772, 0, 0, 0}, 191, 191, { 1252, 500, 10000, 850, 0, ';' }}, + {0x081D, 0x001D, 257, 33, 49076, 49082, 49100, 49118, 40144, 40121, 44534, {38972, 0, 0, 0}, 192, 192, { 1252, 20278, 10000, 850, 0, ';' }}, + {0x082C, 0x742C, 257, 7, 49122, 49133, 46239, 49168, 40964, 40933, 46265, {40968, 0, 0, 0}, 193, 193, { 1251, 20880, 10007, 866, 0, ';' }}, + {0x083C, 0x003C, 257, 46, 49172, 49178, 49194, 41605, 41609, 41588, 49210, {41613, 0, 0, 0}, 194, 194, { 1252, 500, 10000, 850, 0, ',' }}, + {0x0843, 0x7843, 257, 111, 49213, 49224, 46912, 41905, 41909, 41885, 46938, {49253, 0, 0, 0}, 195, 195, { 1251, 20880, 10007, 866, 0, ';' }}, + {0x0845, 0x0045, 257, 9, 49291, 49297, 49318, 49361, 41964, 41933, 49365, {41968, 0, 0, 0}, 196, 196, { 0, 500, 2, 1, 0, ',' }}, + {0x0C01, 0x0001, 257, 30, 49368, 49374, 49389, 49413, 38645, 38616, 49417, {48622, 0, 0, 0}, 197, 197, { 1256, 20420, 10004, 720, 1, ';' }}, + {0x0C04, 0x7C04, 257, 41, 49420, 49426, 49469, 49506, 38852, 38856, 49510, {44248, 0, 0, 0}, 198, 198, { 950, 500, 10002, 950, 0, ',' }}, + {0x0C07, 0x0007, 257, 5, 49513, 49519, 49536, 49558, 39015, 38993, 49562, {39019, 0, 0, 0}, 199, 199, { 1252, 20273, 10000, 850, 0, ';' }}, + {0x0C09, 0x0009, 257, 6, 49565, 49571, 49571, 49591, 39135, 39120, 49595, {39139, 0, 0, 0}, 200, 200, { 1252, 500, 10000, 850, 0, ',' }}, + {0x0C0A, 0x000A, 257, 31, 49598, 49604, 49620, 49639, 39182, 39158, 44194, {39186, 0, 0, 0}, 201, 201, { 1252, 20284, 10000, 850, 0, ';' }}, + {0x0C0C, 0x000C, 257, 17, 49643, 49649, 49665, 49684, 39282, 39258, 49688, {49691, 0, 0, 0}, 202, 202, { 1252, 20297, 10000, 850, 0, ';' }}, + {0x0C3B, 0x003B, 257, 33, 49713, 49719, 49743, 49769, 49773, 41527, 44534, {41569, 0, 0, 0}, 203, 203, { 1252, 20278, 10000, 850, 0, ';' }}, + {0x1001, 0x0001, 257, 67, 49777, 49783, 49798, 49826, 38645, 38616, 49830, {48622, 0, 0, 0}, 204, 204, { 1256, 20420, 10004, 720, 1, ';' }}, + {0x1004, 0x0004, 257, 97, 49833, 49839, 49871, 49890, 38852, 38856, 49894, {38859, 0, 0, 0}, 205, 205, { 936, 500, 10008, 936, 0, ',' }}, + {0x1007, 0x0007, 257, 65, 49897, 49903, 49923, 49943, 39015, 38993, 49947, {39019, 0, 0, 0}, 206, 206, { 1252, 20273, 10000, 850, 0, ';' }}, + {0x1009, 0x0009, 257, 17, 49950, 49956, 49956, 49973, 39135, 39120, 49688, {39139, 0, 0, 0}, 207, 207, { 1252, 37, 10000, 850, 0, ',' }}, + {0x100A, 0x000A, 257, 40, 49977, 49983, 50003, 50024, 39182, 39158, 50028, {39186, 0, 0, 0}, 208, 208, { 1252, 20284, 10000, 850, 0, ',' }}, + {0x100C, 0x000C, 257, 18, 50031, 50037, 50058, 50077, 39282, 39258, 13753, {39286, 0, 0, 0}, 209, 209, { 1252, 20297, 10000, 850, 0, ';' }}, + {0x101A, 0x001A, 257, 8, 50081, 50087, 50121, 50152, 50156, 39972, 50160, {40001, 0, 0, 0}, 210, 210, { 1250, 870, 10082, 852, 0, ';' }}, + {0x1401, 0x0001, 257, 27, 50163, 50169, 50186, 50218, 38645, 38616, 50222, {48622, 0, 0, 0}, 211, 211, { 1256, 20420, 10004, 720, 1, ';' }}, + {0x1404, 0x7C04, 257, 72, 50225, 50231, 50270, 50307, 38852, 38856, 50311, {44248, 0, 0, 0}, 212, 212, { 950, 500, 10002, 950, 0, ',' }}, + {0x1407, 0x0007, 257, 62, 50314, 50320, 50343, 50367, 39015, 38993, 50371, {39019, 0, 0, 0}, 213, 213, { 1252, 20273, 10000, 850, 0, ';' }}, + {0x1409, 0x0009, 257, 80, 50374, 50380, 50380, 50402, 39135, 39120, 50406, {39139, 0, 0, 0}, 214, 214, { 1252, 500, 10000, 850, 0, ',' }}, + {0x140A, 0x000A, 257, 22, 50409, 50415, 50436, 50458, 39182, 39158, 50462, {39186, 0, 0, 0}, 215, 215, { 1252, 20284, 10000, 850, 0, ',' }}, + {0x140C, 0x000C, 257, 65, 50465, 50471, 50491, 50514, 39282, 39258, 49947, {39286, 0, 0, 0}, 216, 216, { 1252, 20297, 10000, 850, 0, ';' }}, + {0x141A, 0x681A, 257, 8, 50518, 50529, 50569, 50600, 50604, 50608, 50160, {50611, 0, 0, 0}, 217, 217, { 1250, 870, 10082, 852, 0, ';' }}, + {0x1801, 0x0001, 257, 68, 50634, 50640, 50657, 50687, 38645, 38616, 50691, {48622, 0, 0, 0}, 218, 218, { 1256, 20420, 10004, 720, 1, ';' }}, + {0x1809, 0x0009, 257, 46, 50694, 50700, 50700, 50718, 39135, 39120, 49210, {39139, 0, 0, 0}, 219, 219, { 1252, 500, 10000, 850, 0, ',' }}, + {0x180A, 0x000A, 257, 82, 50722, 50728, 50745, 50764, 39182, 39158, 50768, {39186, 0, 0, 0}, 220, 220, { 1252, 20284, 10000, 850, 0, ',' }}, + {0x180C, 0x000C, 257, 69, 50771, 50777, 50793, 50812, 39282, 39258, 50816, {39286, 0, 0, 0}, 221, 221, { 1252, 20297, 10000, 850, 0, ';' }}, + {0x181A, 0x701A, 257, 8, 50819, 50830, 50870, 50922, 50926, 50930, 50160, {50611, 0, 0, 0}, 222, 222, { 1250, 870, 10082, 852, 0, ';' }}, + {0x1C01, 0x0001, 257, 104, 50933, 50939, 50956, 50982, 38645, 38616, 50986, {48622, 0, 0, 0}, 223, 223, { 1256, 20420, 10004, 720, 1, ';' }}, + {0x1C09, 0x0009, 257, 115, 50989, 50995, 50995, 51018, 39135, 39120, 46412, {39139, 0, 0, 0}, 224, 224, { 1252, 500, 10000, 437, 0, ',' }}, + {0x1C0A, 0x000A, 257, 26, 51022, 51028, 51057, 51090, 39182, 39158, 51094, {39186, 0, 0, 0}, 225, 225, { 1252, 20284, 10000, 850, 0, ',' }}, + {0x1C1A, 0x6C1A, 257, 8, 51097, 51108, 50870, 51151, 51155, 50930, 50160, {41076, 0, 0, 0}, 226, 226, { 1251, 21025, 10007, 855, 0, ';' }}, + {0x2001, 0x0001, 257, 81, 51159, 51165, 51179, 51207, 38645, 38616, 51211, {48622, 0, 0, 0}, 227, 227, { 1256, 20420, 10004, 720, 1, ';' }}, + {0x2009, 0x0009, 257, 53, 51214, 51220, 51220, 51238, 39135, 39120, 51242, {39139, 0, 0, 0}, 228, 228, { 1252, 500, 10000, 850, 0, ',' }}, + {0x200A, 0x000A, 257, 112, 51245, 51251, 51271, 51292, 39182, 39158, 51296, {39186, 0, 0, 0}, 229, 229, { 1252, 20284, 10000, 850, 0, ',' }}, + {0x201A, 0x641A, 257, 8, 51299, 51310, 50569, 51353, 51357, 50608, 50160, {41076, 0, 0, 0}, 230, 230, { 1251, 870, 10082, 855, 0, ';' }}, + {0x2401, 0x0001, 257, 114, 51361, 51367, 51382, 51410, 38645, 38616, 51414, {48622, 0, 0, 0}, 231, 231, { 1256, 20420, 10004, 720, 1, ';' }}, + {0x240A, 0x000A, 257, 21, 51417, 51423, 51442, 51462, 39182, 39158, 51466, {39186, 0, 0, 0}, 232, 232, { 1252, 20284, 10000, 850, 0, ',' }}, + {0x241A, 0x701A, 257, 92, 51469, 51480, 51504, 51532, 2239, 50930, 51536, {50611, 0, 0, 0}, 233, 233, { 1250, 500, 10029, 852, 0, ';' }}, + {0x2801, 0x0001, 257, 101, 51539, 51545, 51560, 51588, 38645, 38616, 51592, {48622, 0, 0, 0}, 234, 234, { 1256, 20420, 10004, 720, 1, ';' }}, + {0x2809, 0x0009, 257, 16, 51595, 51601, 51601, 51618, 39135, 39120, 51622, {39139, 0, 0, 0}, 235, 235, { 1252, 500, 10000, 850, 0, ';' }}, + {0x280A, 0x000A, 257, 83, 51625, 51631, 51646, 51663, 39182, 39158, 51667, {39186, 0, 0, 0}, 236, 236, { 1252, 20284, 10000, 850, 0, ',' }}, + {0x281A, 0x6C1A, 257, 92, 51670, 51681, 51504, 51708, 2239, 50930, 51536, {41076, 0, 0, 0}, 237, 237, { 1251, 21025, 10007, 855, 0, ';' }}, + {0x2C01, 0x0001, 257, 54, 51712, 51718, 51734, 51764, 38645, 38616, 51768, {48622, 0, 0, 0}, 238, 238, { 1256, 20420, 10004, 720, 1, ';' }}, + {0x2C09, 0x0009, 257, 106, 51771, 51777, 51777, 51807, 39135, 39120, 51811, {39139, 0, 0, 0}, 239, 239, { 1252, 500, 10000, 850, 0, ';' }}, + {0x2C0A, 0x000A, 257, 4, 51814, 51820, 51840, 51861, 39182, 39158, 51865, {39186, 0, 0, 0}, 240, 240, { 1252, 20284, 10000, 850, 0, ',' }}, + {0x2C1A, 0x701A, 257, 70, 51868, 51879, 51907, 51940, 2239, 50930, 51944, {50611, 0, 0, 0}, 241, 241, { 1250, 500, 10029, 852, 0, ';' }}, + {0x3001, 0x0001, 257, 61, 51947, 51953, 51970, 51998, 38645, 38616, 52002, {48622, 0, 0, 0}, 242, 242, { 1256, 20420, 10004, 720, 1, ';' }}, + {0x3009, 0x0009, 257, 116, 52005, 52011, 52011, 52030, 39135, 39120, 52034, {39139, 0, 0, 0}, 243, 243, { 1252, 500, 10000, 437, 0, ',' }}, + {0x300A, 0x000A, 257, 28, 52037, 52043, 52061, 52080, 39182, 39158, 52084, {39186, 0, 0, 0}, 244, 244, { 1252, 20284, 10000, 850, 0, ',' }}, + {0x301A, 0x6C1A, 257, 70, 52087, 52098, 51907, 52129, 2239, 50930, 51944, {41076, 0, 0, 0}, 245, 245, { 1251, 21025, 10007, 855, 0, ';' }}, + {0x3401, 0x0001, 257, 59, 52133, 52139, 52155, 52185, 38645, 38616, 52189, {48622, 0, 0, 0}, 246, 246, { 1256, 20420, 10004, 720, 1, ';' }}, + {0x3409, 0x0009, 257, 84, 52192, 52198, 52198, 52220, 39135, 39120, 48105, {39139, 0, 0, 0}, 247, 247, { 1252, 500, 10000, 437, 0, ',' }}, + {0x340A, 0x000A, 257, 19, 52224, 52230, 52246, 52263, 39182, 39158, 52267, {39186, 0, 0, 0}, 248, 248, { 1252, 20284, 10000, 850, 0, ',' }}, + {0x3801, 0x0001, 257, 0, 52270, 52276, 52306, 52370, 38645, 38616, 52374, {48622, 0, 0, 0}, 249, 249, { 1256, 20420, 10004, 720, 1, ';' }}, + {0x380A, 0x000A, 257, 110, 52377, 52383, 52401, 52420, 39182, 39158, 52424, {39186, 0, 0, 0}, 250, 250, { 1252, 20284, 10000, 850, 0, ',' }}, + {0x3C01, 0x0001, 257, 12, 52427, 52433, 52450, 52482, 38645, 38616, 52486, {48622, 0, 0, 0}, 251, 251, { 1256, 20420, 10004, 720, 1, ';' }}, + {0x3C0A, 0x000A, 257, 89, 52489, 52495, 52514, 52534, 39182, 39158, 52538, {39186, 0, 0, 0}, 252, 252, { 1252, 20284, 10000, 850, 0, ',' }}, + {0x4001, 0x0001, 257, 90, 52541, 52547, 52562, 52586, 38645, 38616, 52590, {48622, 0, 0, 0}, 253, 253, { 1256, 20420, 10004, 720, 1, ';' }}, + {0x4009, 0x0009, 257, 48, 52593, 52599, 52599, 52615, 39135, 39120, 46736, {39139, 0, 0, 0}, 254, 254, { 1252, 37, 10000, 437, 0, ',' }}, + {0x400A, 0x000A, 257, 13, 52619, 52625, 52643, 52662, 39182, 39158, 52666, {39186, 0, 0, 0}, 255, 255, { 1252, 20284, 10000, 850, 0, ',' }}, + {0x440A, 0x000A, 257, 100, 52669, 52675, 52697, 52720, 39182, 39158, 52724, {39186, 0, 0, 0}, 256, 256, { 1252, 20284, 10000, 850, 0, ',' }}, + {0x4809, 0x0009, 257, 97, 52727, 52733, 52733, 52753, 39135, 39120, 49894, {39139, 0, 0, 0}, 257, 257, { 1252, 37, 10000, 437, 0, ',' }}, + {0x480A, 0x000A, 257, 42, 52757, 52763, 52782, 52802, 39182, 39158, 52806, {39186, 0, 0, 0}, 258, 258, { 1252, 20284, 10000, 850, 0, ',' }}, + {0x4C0A, 0x000A, 257, 76, 52809, 52815, 52835, 52856, 39182, 39158, 52860, {39186, 0, 0, 0}, 259, 259, { 1252, 20284, 10000, 850, 0, ',' }}, + {0x500A, 0x000A, 257, 87, 52863, 52869, 52891, 52914, 39182, 39158, 52918, {39186, 0, 0, 0}, 260, 260, { 1252, 20284, 10000, 850, 0, ',' }}, + {0x540A, 0x000A, 257, 109, 52921, 52927, 52951, 52977, 39182, 39158, 44493, {39186, 0, 0, 0}, 261, 261, { 1252, 20284, 10000, 850, 0, ',' }}, + {0x641A, 0x781A, 257, -1, 52981, 52989, 53008, 51353, 51357, 50608, 0, {41076, 0, 0, 0}, 262, 262, { 1251, 870, 10082, 855, 0, ';' }}, + {0x681A, 0x781A, 257, -1, 53017, 53025, 53008, 50600, 50604, 50608, 0, {50611, 0, 0, 0}, 263, 263, { 1250, 870, 10082, 852, 0, ';' }}, + {0x6C1A, 0x7C1A, 257, -1, 53041, 53049, 53068, 51708, 2239, 50930, 0, {41076, 0, 0, 0}, 264, 264, { 1251, 21025, 10007, 855, 0, ';' }}, + {0x701A, 0x7C1A, 257, -1, 53081, 53089, 53068, 51532, 2239, 50930, 0, {50611, 0, 0, 0}, 265, 265, { 1250, 500, 10029, 852, 0, ';' }}, + {0x742C, 0x002C, 257, -1, 53105, 53113, 40948, 49168, 40964, 40933, 0, {40968, 0, 0, 0}, 266, 266, { 1251, 20880, 10007, 866, 0, ';' }}, + {0x7804, 0x007F, 257, -1, 38856, 38874, 38841, 38848, 38852, 38856, 0, {38859, 0, 0, 0}, 267, 267, { 936, 500, 10008, 936, 0, ',' }}, + {0x7814, 0x0014, 257, -1, 49016, 53136, 53154, 49008, 49012, 49016, 0, {38972, 0, 0, 0}, 268, 268, { 1252, 20277, 10000, 850, 0, ';' }}, + {0x781A, 0x007F, 257, -1, 50608, 53162, 53008, 50600, 50604, 50608, 0, {50611, 0, 0, 0}, 269, 269, { 1250, 870, 10082, 852, 0, ';' }}, + {0x782C, 0x002C, 257, -1, 53170, 53178, 40948, 40960, 40964, 40933, 0, {40968, 0, 0, 0}, 270, 270, { 1254, 20905, 10081, 857, 0, ';' }}, + {0x7843, 0x0043, 257, -1, 53198, 53206, 41894, 41905, 41909, 41885, 0, {49253, 0, 0, 0}, 271, 271, { 1251, 20880, 10007, 866, 0, ';' }}, + {0x7850, 0x0050, 257, -1, 53223, 53231, 42831, 53252, 42848, 42818, 0, {42852, 0, 0, 0}, 272, 272, { 1251, 20880, 10007, 866, 0, ';' }}, + {0x7C04, 0x7804, 257, -1, 53256, 44203, 38841, 44241, 38852, 38856, 0, {44248, 0, 0, 0}, 273, 273, { 950, 500, 10002, 950, 0, ',' }}, + {0x7C04, 0x7C04, 257, -1, 53264, 53271, 38841, 44241, 38852, 38856, 0, {44248, 0, 0, 0}, 274, 274, { 950, 500, 10002, 950, 0, ',' }}, + {0x7C14, 0x0014, 257, -1, 39687, 53300, 53318, 39679, 39683, 39687, 0, {38972, 0, 0, 0}, 275, 275, { 1252, 20277, 10000, 850, 0, ';' }}, + {0x7C1A, 0x007F, 257, -1, 50930, 53332, 53068, 53340, 2239, 50930, 0, {41076, 0, 0, 0}, 276, 276, { 1250, 500, 10029, 852, 0, ';' }}, + {0x7C28, 0x0028, 257, -1, 53344, 53352, 40745, 40758, 40762, 40736, 0, {0, 0, 0, 0}, 277, 277, { 1251, 20880, 10007, 866, 0, ';' }}, + {0x7C43, 0x0043, 257, -1, 53369, 53377, 41894, 41905, 41909, 41885, 0, {41913, 0, 0, 0}, 278, 278, { 1254, 500, 10029, 857, 0, ';' }}, + {0x7C5F, 0x005F, 257, -1, 53391, 53400, 43386, 43396, 43358, 43358, 0, {0, 0, 0, 0}, 279, 279, { 1252, 20297, 10000, 850, 0, ';' }}, + {0x7C68, 0x0068, 257, -1, 53432, 53440, 43554, 43560, 43564, 43551, 0, {0, 0, 0, 0}, 280, 280, { 1252, 37, 10000, 437, 0, ',' }} }; static const CultureInfoNameEntry culture_name_entries [] = { - {41243, 50}, /* af */ - {53479, 144}, /* af-za */ + {41218, 50}, /* af */ + {53454, 144}, /* af-za */ {8151, 80}, /* am */ - {53485, 168}, /* am-et */ - {38641, 0}, /* ar */ - {53491, 249}, /* ar-ae */ - {53497, 251}, /* ar-bh */ - {53503, 211}, /* ar-dz */ - {53509, 197}, /* ar-eg */ - {53515, 182}, /* ar-iq */ - {53521, 238}, /* ar-jo */ - {53527, 246}, /* ar-kw */ - {53533, 242}, /* ar-lb */ - {53539, 204}, /* ar-ly */ - {53545, 218}, /* ar-ma */ - {53551, 227}, /* ar-om */ - {53557, 253}, /* ar-qa */ - {53563, 96}, /* ar-sa */ - {53569, 234}, /* ar-sy */ - {53575, 223}, /* ar-tn */ - {53581, 231}, /* ar-ye */ - {42655, 70}, /* as */ - {53587, 159}, /* as-in */ - {40958, 44}, /* az */ - {53593, 266}, /* az-cyrl */ - {53601, 193}, /* az-cyrl-az */ - {53612, 270}, /* az-latn */ - {53620, 138}, /* az-latn-az */ - {40470, 35}, /* be */ - {53631, 129}, /* be-by */ - {38702, 1}, /* bg */ - {53637, 97}, /* bg-bg */ - {41958, 62}, /* bn */ - {53643, 196}, /* bn-bd */ - {53649, 152}, /* bn-in */ - {42909, 73}, /* bo */ - {53655, 161}, /* bo-cn */ - {43789, 91}, /* br */ - {53661, 178}, /* br-fr */ - {50633, 269}, /* bs */ - {53667, 262}, /* bs-cyrl */ - {53675, 230}, /* bs-cyrl-ba */ - {53686, 263}, /* bs-latn */ - {53694, 217}, /* bs-latn-ba */ - {38784, 2}, /* ca */ - {53705, 98}, /* ca-es */ - {38920, 5}, /* cs */ - {53711, 100}, /* cs-cz */ - {42953, 74}, /* cy */ - {53717, 162}, /* cy-gb */ - {38973, 6}, /* da */ - {53723, 101}, /* da-dk */ - {39018, 7}, /* de */ - {53729, 199}, /* de-at */ - {53735, 184}, /* de-ch */ - {53741, 102}, /* de-de */ - {53747, 213}, /* de-li */ - {53753, 206}, /* de-lu */ - {39069, 8}, /* el */ - {53759, 103}, /* el-gr */ - {39145, 9}, /* en */ - {53765, 200}, /* en-au */ - {53771, 235}, /* en-bz */ - {53777, 207}, /* en-ca */ - {53783, 185}, /* en-gb */ - {53789, 219}, /* en-ie */ - {53795, 254}, /* en-in */ - {53801, 228}, /* en-jm */ - {53807, 214}, /* en-nz */ - {53813, 247}, /* en-ph */ - {53819, 257}, /* en-sg */ - {53825, 239}, /* en-tt */ - {53831, 104}, /* en-us */ - {53837, 224}, /* en-za */ - {53843, 243}, /* en-zw */ - {39183, 10}, /* es */ - {53849, 240}, /* es-ar */ - {53855, 255}, /* es-bo */ - {53861, 248}, /* es-cl */ - {53867, 232}, /* es-co */ - {53873, 215}, /* es-cr */ - {53879, 225}, /* es-do */ - {53885, 244}, /* es-ec */ - {53891, 201}, /* es-es */ - {53897, 208}, /* es-gt */ - {53903, 258}, /* es-hn */ - {53909, 186}, /* es-mx */ - {53915, 259}, /* es-ni */ - {53921, 220}, /* es-pa */ - {53927, 236}, /* es-pe */ - {53933, 260}, /* es-pr */ - {53939, 252}, /* es-py */ - {53945, 256}, /* es-sv */ - {53951, 261}, /* es-us */ - {53957, 250}, /* es-uy */ - {53963, 229}, /* es-ve */ - {40612, 37}, /* et */ - {53969, 131}, /* et-ee */ - {41012, 45}, /* eu */ - {53975, 139}, /* eu-es */ - {40791, 41}, /* fa */ - {53981, 135}, /* fa-ir */ - {39233, 11}, /* fi */ - {53987, 105}, /* fi-fi */ - {43536, 84}, /* fil */ - {53993, 171}, /* fil-ph */ - {41391, 52}, /* fo */ - {54000, 146}, /* fo-fo */ - {39283, 12}, /* fr */ - {54006, 187}, /* fr-be */ - {54012, 202}, /* fr-ca */ - {54018, 209}, /* fr-ch */ - {54024, 106}, /* fr-fr */ - {54030, 216}, /* fr-lu */ - {54036, 221}, /* fr-mc */ - {41613, 56}, /* ga */ - {54042, 194}, /* ga-ie */ - {43957, 95}, /* gd */ - {54048, 181}, /* gd-gb */ - {43153, 77}, /* gl */ - {54054, 165}, /* gl-es */ - {43837, 92}, /* gsw */ - {42143, 64}, /* gu */ - {54060, 153}, /* gu-in */ - {43576, 85}, /* ha */ - {54066, 280}, /* ha-latn */ - {54074, 172}, /* ha-latn-ng */ - {39333, 13}, /* he */ - {54085, 107}, /* he-il */ - {41420, 53}, /* hi */ - {54091, 147}, /* hi-in */ - {39997, 26}, /* hr */ - {54097, 210}, /* hr-ba */ - {54103, 120}, /* hr-hr */ - {39395, 14}, /* hu */ - {54109, 108}, /* hu-hu */ - {40893, 43}, /* hy */ - {54115, 137}, /* hy-am */ - {40324, 33}, /* id */ - {54121, 127}, /* id-id */ - {43728, 89}, /* ig */ - {54127, 176}, /* ig-ng */ - {43744, 90}, /* ii */ - {54133, 177}, /* ii-cn */ - {39439, 15}, /* is */ - {54139, 109}, /* is-is */ - {39490, 16}, /* it */ - {54145, 188}, /* it-ch */ - {54151, 110}, /* it-it */ - {39540, 17}, /* ja */ - {54157, 111}, /* ja-jp */ - {41284, 51}, /* ka */ - {54163, 145}, /* ka-ge */ - {41707, 58}, /* kk */ - {43666, 88}, /* kl */ - {54169, 175}, /* kl-gl */ - {42994, 75}, /* km */ - {54175, 163}, /* km-kh */ - {37890, 68}, /* kn */ - {54181, 157}, /* kn-in */ - {39597, 18}, /* ko */ - {54187, 112}, /* ko-kr */ - {43180, 78}, /* kok */ - {54193, 166}, /* kok-in */ - {41787, 59}, /* ky */ - {43082, 76}, /* lo */ - {54200, 164}, /* lo-la */ - {40706, 39}, /* lt */ - {54206, 133}, /* lt-lt */ - {40658, 38}, /* lv */ - {54212, 132}, /* lv-lv */ - {41058, 46}, /* mk */ - {54218, 140}, /* mk-mk */ - {42571, 69}, /* ml */ - {54224, 158}, /* ml-in */ - {42843, 72}, /* mn */ - {54230, 272}, /* mn-cyrl */ - {42750, 71}, /* mr */ - {54238, 160}, /* mr-in */ - {41659, 57}, /* ms */ - {41506, 54}, /* mt */ - {54244, 148}, /* mt-mt */ - {39712, 275}, /* nb */ - {54250, 114}, /* nb-no */ + {53460, 168}, /* am-et */ + {38616, 0}, /* ar */ + {53466, 249}, /* ar-ae */ + {53472, 251}, /* ar-bh */ + {53478, 211}, /* ar-dz */ + {53484, 197}, /* ar-eg */ + {53490, 182}, /* ar-iq */ + {53496, 238}, /* ar-jo */ + {53502, 246}, /* ar-kw */ + {53508, 242}, /* ar-lb */ + {53514, 204}, /* ar-ly */ + {53520, 218}, /* ar-ma */ + {53526, 227}, /* ar-om */ + {53532, 253}, /* ar-qa */ + {53538, 96}, /* ar-sa */ + {53544, 234}, /* ar-sy */ + {53550, 223}, /* ar-tn */ + {53556, 231}, /* ar-ye */ + {42630, 70}, /* as */ + {53562, 159}, /* as-in */ + {40933, 44}, /* az */ + {53568, 266}, /* az-cyrl */ + {53576, 193}, /* az-cyrl-az */ + {53587, 270}, /* az-latn */ + {53595, 138}, /* az-latn-az */ + {40445, 35}, /* be */ + {53606, 129}, /* be-by */ + {38677, 1}, /* bg */ + {53612, 97}, /* bg-bg */ + {41933, 62}, /* bn */ + {53618, 196}, /* bn-bd */ + {53624, 152}, /* bn-in */ + {42884, 73}, /* bo */ + {53630, 161}, /* bo-cn */ + {43764, 91}, /* br */ + {53636, 178}, /* br-fr */ + {50608, 269}, /* bs */ + {53642, 262}, /* bs-cyrl */ + {53650, 230}, /* bs-cyrl-ba */ + {53661, 263}, /* bs-latn */ + {53669, 217}, /* bs-latn-ba */ + {38759, 2}, /* ca */ + {53680, 98}, /* ca-es */ + {38895, 5}, /* cs */ + {53686, 100}, /* cs-cz */ + {42928, 74}, /* cy */ + {53692, 162}, /* cy-gb */ + {38948, 6}, /* da */ + {53698, 101}, /* da-dk */ + {38993, 7}, /* de */ + {53704, 199}, /* de-at */ + {53710, 184}, /* de-ch */ + {53716, 102}, /* de-de */ + {53722, 213}, /* de-li */ + {53728, 206}, /* de-lu */ + {39044, 8}, /* el */ + {53734, 103}, /* el-gr */ + {39120, 9}, /* en */ + {53740, 200}, /* en-au */ + {53746, 235}, /* en-bz */ + {53752, 207}, /* en-ca */ + {53758, 185}, /* en-gb */ + {53764, 219}, /* en-ie */ + {53770, 254}, /* en-in */ + {53776, 228}, /* en-jm */ + {53782, 214}, /* en-nz */ + {53788, 247}, /* en-ph */ + {53794, 257}, /* en-sg */ + {53800, 239}, /* en-tt */ + {53806, 104}, /* en-us */ + {53812, 224}, /* en-za */ + {53818, 243}, /* en-zw */ + {39158, 10}, /* es */ + {53824, 240}, /* es-ar */ + {53830, 255}, /* es-bo */ + {53836, 248}, /* es-cl */ + {53842, 232}, /* es-co */ + {53848, 215}, /* es-cr */ + {53854, 225}, /* es-do */ + {53860, 244}, /* es-ec */ + {53866, 201}, /* es-es */ + {53872, 208}, /* es-gt */ + {53878, 258}, /* es-hn */ + {53884, 186}, /* es-mx */ + {53890, 259}, /* es-ni */ + {53896, 220}, /* es-pa */ + {53902, 236}, /* es-pe */ + {53908, 260}, /* es-pr */ + {53914, 252}, /* es-py */ + {53920, 256}, /* es-sv */ + {53926, 261}, /* es-us */ + {53932, 250}, /* es-uy */ + {53938, 229}, /* es-ve */ + {40587, 37}, /* et */ + {53944, 131}, /* et-ee */ + {40987, 45}, /* eu */ + {53950, 139}, /* eu-es */ + {40766, 41}, /* fa */ + {53956, 135}, /* fa-ir */ + {39208, 11}, /* fi */ + {53962, 105}, /* fi-fi */ + {43511, 84}, /* fil */ + {53968, 171}, /* fil-ph */ + {41366, 52}, /* fo */ + {53975, 146}, /* fo-fo */ + {39258, 12}, /* fr */ + {53981, 187}, /* fr-be */ + {53987, 202}, /* fr-ca */ + {53993, 209}, /* fr-ch */ + {53999, 106}, /* fr-fr */ + {54005, 216}, /* fr-lu */ + {54011, 221}, /* fr-mc */ + {41588, 56}, /* ga */ + {54017, 194}, /* ga-ie */ + {43932, 95}, /* gd */ + {54023, 181}, /* gd-gb */ + {43128, 77}, /* gl */ + {54029, 165}, /* gl-es */ + {43812, 92}, /* gsw */ + {42118, 64}, /* gu */ + {54035, 153}, /* gu-in */ + {43551, 85}, /* ha */ + {54041, 280}, /* ha-latn */ + {54049, 172}, /* ha-latn-ng */ + {39308, 13}, /* he */ + {54060, 107}, /* he-il */ + {41395, 53}, /* hi */ + {54066, 147}, /* hi-in */ + {39972, 26}, /* hr */ + {54072, 210}, /* hr-ba */ + {54078, 120}, /* hr-hr */ + {39370, 14}, /* hu */ + {54084, 108}, /* hu-hu */ + {40868, 43}, /* hy */ + {54090, 137}, /* hy-am */ + {40299, 33}, /* id */ + {54096, 127}, /* id-id */ + {43703, 89}, /* ig */ + {54102, 176}, /* ig-ng */ + {43719, 90}, /* ii */ + {54108, 177}, /* ii-cn */ + {39414, 15}, /* is */ + {54114, 109}, /* is-is */ + {39465, 16}, /* it */ + {54120, 188}, /* it-ch */ + {54126, 110}, /* it-it */ + {39515, 17}, /* ja */ + {54132, 111}, /* ja-jp */ + {41259, 51}, /* ka */ + {54138, 145}, /* ka-ge */ + {41682, 58}, /* kk */ + {43641, 88}, /* kl */ + {54144, 175}, /* kl-gl */ + {42969, 75}, /* km */ + {54150, 163}, /* km-kh */ + {37865, 68}, /* kn */ + {54156, 157}, /* kn-in */ + {39572, 18}, /* ko */ + {54162, 112}, /* ko-kr */ + {43155, 78}, /* kok */ + {54168, 166}, /* kok-in */ + {41762, 59}, /* ky */ + {43057, 76}, /* lo */ + {54175, 164}, /* lo-la */ + {40681, 39}, /* lt */ + {54181, 133}, /* lt-lt */ + {40633, 38}, /* lv */ + {54187, 132}, /* lv-lv */ + {41033, 46}, /* mk */ + {54193, 140}, /* mk-mk */ + {42546, 69}, /* ml */ + {54199, 158}, /* ml-in */ + {42818, 72}, /* mn */ + {54205, 272}, /* mn-cyrl */ + {42725, 71}, /* mr */ + {54213, 160}, /* mr-in */ + {41634, 57}, /* ms */ + {41481, 54}, /* mt */ + {54219, 148}, /* mt-mt */ + {39687, 275}, /* nb */ + {54225, 114}, /* nb-no */ {1992, 82}, /* ne */ - {54256, 169}, /* ne-np */ - {39635, 19}, /* nl */ - {54262, 189}, /* nl-be */ - {54268, 113}, /* nl-nl */ - {49041, 268}, /* nn */ - {54274, 190}, /* nn-no */ - {39685, 20}, /* no */ - {43626, 87}, /* nso */ - {54280, 174}, /* nso-za */ - {42241, 65}, /* or */ - {54287, 154}, /* or-in */ - {42058, 63}, /* pa */ - {39715, 21}, /* pl */ - {54293, 115}, /* pl-pl */ - {43509, 83}, /* ps */ - {54299, 170}, /* ps-af */ - {39764, 22}, /* pt */ - {54305, 116}, /* pt-br */ - {54311, 191}, /* pt-pt */ - {39820, 23}, /* rm */ - {54317, 117}, /* rm-ch */ - {39869, 24}, /* ro */ - {54323, 118}, /* ro-ro */ - {39917, 25}, /* ru */ - {54329, 119}, /* ru-ru */ - {43934, 94}, /* rw */ - {54335, 180}, /* rw-rw */ - {43902, 93}, /* sah */ - {54341, 179}, /* sah-ru */ - {41552, 55}, /* se */ - {54348, 203}, /* se-fi */ - {54354, 149}, /* se-no */ - {43215, 79}, /* si */ - {54360, 167}, /* si-lk */ - {12824, 27}, /* sk */ - {54366, 121}, /* sk-sk */ - {40555, 36}, /* sl */ - {54372, 130}, /* sl-si */ - {40100, 28}, /* sq */ - {54378, 122}, /* sq-al */ - {50955, 276}, /* sr */ - {54384, 264}, /* sr-cyrl */ - {54392, 226}, /* sr-cyrl-ba */ - {54403, 245}, /* sr-cyrl-me */ - {54414, 237}, /* sr-cyrl-rs */ - {54425, 265}, /* sr-latn */ - {54433, 222}, /* sr-latn-ba */ - {54444, 241}, /* sr-latn-me */ - {54455, 233}, /* sr-latn-rs */ - {40146, 29}, /* sv */ - {54466, 192}, /* sv-fi */ - {54472, 123}, /* sv-se */ - {41860, 60}, /* sw */ - {54478, 150}, /* sw-ke */ - {42274, 66}, /* ta */ - {54484, 155}, /* ta-in */ - {42372, 67}, /* te */ - {54490, 156}, /* te-in */ - {40761, 40}, /* tg */ - {54496, 277}, /* tg-cyrl */ - {54504, 134}, /* tg-cyrl-tj */ - {40173, 30}, /* th */ - {54515, 124}, /* th-th */ - {41145, 47}, /* tn */ - {54521, 141}, /* tn-za */ - {12833, 31}, /* tr */ - {54527, 125}, /* tr-tr */ - {43383, 81}, /* tzm */ - {54533, 279}, /* tzm-latn */ - {40382, 34}, /* uk */ - {54542, 128}, /* uk-ua */ - {40269, 32}, /* ur */ - {54548, 126}, /* ur-pk */ - {41910, 61}, /* uz */ - {54554, 271}, /* uz-cyrl */ - {54562, 195}, /* uz-cyrl-uz */ - {54573, 278}, /* uz-latn */ - {54581, 151}, /* uz-latn-uz */ - {40845, 42}, /* vi */ - {54592, 136}, /* vi-vn */ - {41172, 48}, /* xh */ - {54598, 142}, /* xh-za */ - {43593, 86}, /* yo */ - {54604, 173}, /* yo-ng */ - {38881, 267}, /* zh */ - {54610, 3}, /* zh-chs */ - {54617, 274}, /* zh-cht */ - {54624, 183}, /* zh-cn */ - {54630, 4}, /* zh-hans */ - {54638, 273}, /* zh-hant */ - {54646, 198}, /* zh-hk */ - {54652, 212}, /* zh-mo */ - {54658, 205}, /* zh-sg */ - {54664, 99}, /* zh-tw */ - {41198, 49}, /* zu */ - {54670, 143} /* zu-za */ + {54231, 169}, /* ne-np */ + {39610, 19}, /* nl */ + {54237, 189}, /* nl-be */ + {54243, 113}, /* nl-nl */ + {49016, 268}, /* nn */ + {54249, 190}, /* nn-no */ + {39660, 20}, /* no */ + {43601, 87}, /* nso */ + {54255, 174}, /* nso-za */ + {42216, 65}, /* or */ + {54262, 154}, /* or-in */ + {42033, 63}, /* pa */ + {39690, 21}, /* pl */ + {54268, 115}, /* pl-pl */ + {43484, 83}, /* ps */ + {54274, 170}, /* ps-af */ + {39739, 22}, /* pt */ + {54280, 116}, /* pt-br */ + {54286, 191}, /* pt-pt */ + {39795, 23}, /* rm */ + {54292, 117}, /* rm-ch */ + {39844, 24}, /* ro */ + {54298, 118}, /* ro-ro */ + {39892, 25}, /* ru */ + {54304, 119}, /* ru-ru */ + {43909, 94}, /* rw */ + {54310, 180}, /* rw-rw */ + {43877, 93}, /* sah */ + {54316, 179}, /* sah-ru */ + {41527, 55}, /* se */ + {54323, 203}, /* se-fi */ + {54329, 149}, /* se-no */ + {43190, 79}, /* si */ + {54335, 167}, /* si-lk */ + {12799, 27}, /* sk */ + {54341, 121}, /* sk-sk */ + {40530, 36}, /* sl */ + {54347, 130}, /* sl-si */ + {40075, 28}, /* sq */ + {54353, 122}, /* sq-al */ + {50930, 276}, /* sr */ + {54359, 264}, /* sr-cyrl */ + {54367, 226}, /* sr-cyrl-ba */ + {54378, 245}, /* sr-cyrl-me */ + {54389, 237}, /* sr-cyrl-rs */ + {54400, 265}, /* sr-latn */ + {54408, 222}, /* sr-latn-ba */ + {54419, 241}, /* sr-latn-me */ + {54430, 233}, /* sr-latn-rs */ + {40121, 29}, /* sv */ + {54441, 192}, /* sv-fi */ + {54447, 123}, /* sv-se */ + {41835, 60}, /* sw */ + {54453, 150}, /* sw-ke */ + {42249, 66}, /* ta */ + {54459, 155}, /* ta-in */ + {42347, 67}, /* te */ + {54465, 156}, /* te-in */ + {40736, 40}, /* tg */ + {54471, 277}, /* tg-cyrl */ + {54479, 134}, /* tg-cyrl-tj */ + {40148, 30}, /* th */ + {54490, 124}, /* th-th */ + {41120, 47}, /* tn */ + {54496, 141}, /* tn-za */ + {12808, 31}, /* tr */ + {54502, 125}, /* tr-tr */ + {43358, 81}, /* tzm */ + {54508, 279}, /* tzm-latn */ + {40357, 34}, /* uk */ + {54517, 128}, /* uk-ua */ + {40244, 32}, /* ur */ + {54523, 126}, /* ur-pk */ + {41885, 61}, /* uz */ + {54529, 271}, /* uz-cyrl */ + {54537, 195}, /* uz-cyrl-uz */ + {54548, 278}, /* uz-latn */ + {54556, 151}, /* uz-latn-uz */ + {40820, 42}, /* vi */ + {54567, 136}, /* vi-vn */ + {41147, 48}, /* xh */ + {54573, 142}, /* xh-za */ + {43568, 86}, /* yo */ + {54579, 173}, /* yo-ng */ + {38856, 267}, /* zh */ + {54585, 3}, /* zh-chs */ + {54592, 274}, /* zh-cht */ + {54599, 183}, /* zh-cn */ + {54605, 4}, /* zh-hans */ + {54613, 273}, /* zh-hant */ + {54621, 198}, /* zh-hk */ + {54627, 212}, /* zh-mo */ + {54633, 205}, /* zh-sg */ + {54639, 99}, /* zh-tw */ + {41173, 49}, /* zu */ + {54645, 143} /* zu-za */ }; static const RegionInfoEntry region_entries [] = { - { 224,52399,49438,49438,54676,54697,38584,54744,54748,54776}, - { 3,48076,54800,54800,54804,54816,38355,54835,54839,54854}, - { 6,45392,54867,54867,54871,54879,37893,54889,54893,54906}, - { 7,1929,50712,50712,54920,54928,38136,54945,54949,54963}, - { 11,51890,50243,50243,54989,54989,37626,51613,54999,55014}, - { 14,49587,55029,55029,55033,55041,37522,55053,55057,55057}, - { 12,49620,55062,55062,55066,55066,37626,55076,55080,55080}, - { 5,46290,40985,40985,55098,55109,38390,55121,55125,55143}, - { 25,50185,55163,55163,55167,55190,38452,55210,55214,55250}, - { 23,49390,55270,55270,55274,55285,38428,55310,55314,55331}, - { 21,48882,40505,40505,55372,55380,37522,55053,55057,55389}, - { 35,44176,38734,38734,55394,55403,37504,55420,55424,55438}, - { 17,52511,55464,55464,55468,55476,38594,55491,55495,55510}, - { 26,52691,55534,55534,55538,55538,38618,42945,55546,55565}, - { 32,45096,55575,55575,55579,55586,37781,55593,55597,55612}, - { 29,45778,55628,55628,55632,55640,37996,55657,55661,55678}, - { 24,51647,55710,55710,55714,55714,37626,55721,55725,55725}, - { 39,49713,55739,55739,55743,55743,37626,55750,55754,55770}, - { 223,13778,55786,55786,55790,55802,37788,37788,55809,55821}, - { 46,52292,55835,55835,55839,55839,37626,55845,55849,55862}, - { 45,13857,55875,55875,55879,55885,37543,55904,55908,55921}, - { 51,51491,55940,55940,55944,55944,37626,55953,55957,55972}, - { 54,50487,55988,55988,55992,55992,38470,56003,56007,56026}, - { 75,44339,56047,56047,56051,56066,37546,56084,56088,56110}, - { 94,44429,39036,39036,56125,56133,37522,55053,55057,55057}, - { 61,44381,56145,56145,56149,56157,37574,56165,56169,56182}, - { 65,51119,56194,56194,56198,56217,37626,56239,56243,56258}, - { 4,50247,56274,56274,56278,56286,38455,56301,56305,56320}, - { 66,52109,56344,56344,56348,56348,37626,56356,56360,56370}, - { 70,45876,53002,53002,56392,56400,37522,55053,55057,55389}, - { 67,49442,56406,56406,56410,56416,38432,56423,56427,56442}, - { 217,44219,39203,39203,56460,56466,37522,55053,55057,55389}, - { 73,47955,56474,56474,56478,56487,38335,56503,56507,56522}, - { 77,44559,39250,39250,56548,56556,37522,55053,55057,55389}, - { 81,46707,56562,56562,56566,56580,37574,56165,56169,56589}, - { 84,44603,39303,39303,56602,56602,37522,55053,55057,55389}, - { 242,47612,56609,56609,56613,56628,38279,56645,56649,56672}, - { 88,46653,56694,56694,56698,56706,0,56737,56741,56755}, - { 93,48354,56790,56790,56794,56804,37574,56165,56169,56821}, - { 98,44485,56841,56841,56845,56852,37522,55053,55057,56865}, - { 99,50053,56874,56874,56878,56878,8056,56888,56892,56911}, - { 104,49535,56932,56932,56936,56956,37626,56984,56988,57005}, - { 106,52831,57012,57012,57016,57016,2436,57025,57029,57046}, - { 108,45295,40018,40018,57065,57073,37890,57082,57086,57100}, - { 109,44704,39415,39415,57114,57122,37699,57136,57140,57157}, - { 111,45641,57171,57171,57175,57175,37972,57185,57189,57207}, - { 68,49235,57224,57224,57228,57236,37522,55053,55057,55057}, - { 117,44652,57242,57242,57246,57253,37672,57264,57268,57287}, - { 113,46761,40355,40355,57294,57300,38215,57313,57317,57330}, - { 121,48644,57365,57365,57369,57374,38401,57387,57391,57403}, - { 116,46101,57425,57425,57429,57434,38090,57445,57449,57462}, - { 110,44753,39462,39462,57482,57490,37574,57498,57502,57519}, - { 118,44796,39510,39510,57535,57541,37522,55053,55057,55057}, - { 124,51267,57548,57548,57552,57552,37626,57560,57564,57564}, - { 126,51793,57580,57580,57584,57591,38554,57604,57608,57624}, - { 122,44841,39562,39562,57646,57652,37712,57659,57663,57676}, - { 129,46897,57686,57686,57690,57690,38239,57696,57700,57716}, - { 40,47678,43019,43019,57734,57743,38282,57765,57769,57784}, - { 134,44896,39617,39617,57816,57828,37716,57841,57845,57862}, - { 136,52214,57879,57879,57883,57890,38574,57903,57907,57921}, - { 138,47720,43099,43099,57943,43089,38286,57948,57952,57964}, - { 139,52027,57984,57984,57988,57996,38564,58007,58011,58026}, - { 145,50396,58048,58048,58052,58052,0,37788,55809,58066}, - { 42,47896,58084,58084,58088,58098,38327,58130,58134,58151}, - { 141,45974,58199,58199,58203,58213,38066,58221,58225,58242}, - { 147,49972,58257,58257,58261,58272,37522,55053,55057,55057}, - { 140,45922,58282,58282,58286,58293,37522,55053,55057,58301}, - { 148,49855,58306,58306,58310,58316,38442,58327,58331,58344}, - { 159,50716,42777,42777,58364,58372,38474,58385,58389,58405}, - { 158,50841,58425,58425,58429,58429,37522,55053,55057,55389}, - { 270,51969,58436,58436,58440,58451,37522,55053,55057,58469}, - { 19618,46406,58474,58474,58478,58488,38161,58474,58509,58526}, - { 151,50336,58558,58558,58562,58578,38465,58606,58610,58626}, - { 163,46800,41523,41523,58636,58636,37522,55053,55057,58642}, - { 166,48831,58647,58647,58651,58658,37626,58666,58670,58683}, - { 175,48184,58697,58697,58701,58709,38362,58718,58722,58737}, - { 182,52885,58743,58743,58747,58747,38621,58757,58761,58781}, - { 176,44948,39655,39655,58804,58816,37522,55053,55057,55057}, - { 177,45006,39704,39704,58826,58833,37574,58839,58843,58859}, - { 178,48016,58873,58873,58877,58883,38342,58899,58903,58918}, - { 183,50431,58959,58959,58963,58963,37626,58975,58979,58979}, - { 164,51236,58998,58998,59002,59007,38503,59018,59022,59033}, - { 192,50793,42088,42088,59053,59060,38484,59068,59072,59090}, - { 187,51692,59107,59107,59111,59116,38542,59122,59126,59145}, - { 201,48130,59163,59163,59167,59179,38358,59189,59193,59193}, - { 190,45580,59209,59209,59213,59222,37914,59237,59241,59257}, - { 191,45047,59285,59285,59289,59296,37739,59303,59307,59320}, - { 202,52943,59334,59334,59338,59338,37626,56356,56360,56370}, - { 193,49098,59350,59350,59354,59354,37522,55053,55057,55057}, - { 185,52563,59363,59363,59367,59367,38604,59376,59380,59399}, - { 197,52615,59418,59418,59422,59428,38608,59435,59439,59451}, - { 200,45191,59469,59469,59473,59481,0,59490,59494,59507}, - { 271,51561,53365,53365,59521,59528,38527,59541,59545,59559}, - { 203,45247,39943,39943,59572,59579,37810,59592,59596,59610}, - { 204,48512,59642,59642,59646,59646,38366,59653,59657,0}, - { 205,13775,59671,59671,59675,59688,37446,59735,59739,59751}, - { 221,45436,59771,59771,59775,59782,37574,59790,59794,59808}, - { 215,49919,59821,59821,59825,59835,37626,59845,59849,59866}, - { 212,45834,59879,59879,59883,59892,37522,55053,55057,59902}, - { 143,45346,59907,59907,59911,59920,37522,55053,55057,55057}, - { 72,52749,40582,40582,59930,59930,37626,56356,56360,56370}, - { 222,51617,59942,59942,59946,59952,38532,59963,59967,59980}, - { 227,45483,40191,40191,60000,40181,37906,60009,60013,60023}, - { 228,46053,60042,60042,60046,60057,38383,60078,60082,60101}, - { 234,51011,60114,60114,60118,60126,38488,60135,60139,60154}, - { 235,45529,60175,60175,60179,60186,37910,60195,60199,60212}, - { 225,51836,60226,60226,60230,60230,37626,60250,60254,60254}, - { 237,44270,60281,60281,60285,60292,38369,60299,60303,60321}, - { 241,45708,40416,40416,60331,60339,37975,60354,60358,60376}, - { 244,44518,60410,60410,60414,60414,37626,56356,56360,56360}, - { 246,52449,60428,60428,60432,60432,37626,60440,60444,60459}, - { 247,46963,41930,41930,60473,60484,38395,60497,60501,60516}, - { 249,51321,60535,60535,60539,60539,38513,60549,60553,60573}, - { 251,46159,60593,60593,60597,60605,38132,60616,60620,60636}, - { 261,51439,60655,60655,60659,60665,38517,60676,60680,60692}, - { 209,46437,60710,60710,60714,0,10836,60727,60731,0}, - { 264,52059,60750,60750,60754,60754,37626,56356,56360,56360} + { 224,52374,49413,49413,54651,54672,38559,54719,54723,54751}, + { 3,48051,54775,54775,54779,54791,38330,54810,54814,54829}, + { 6,45367,54842,54842,54846,54854,37868,54864,54868,54881}, + { 7,1929,50687,50687,54895,54903,38111,54920,54924,54938}, + { 11,51865,50218,50218,54964,54964,37601,51588,54974,54989}, + { 14,49562,55004,55004,55008,55016,37497,55028,55032,55032}, + { 12,49595,55037,55037,55041,55041,37601,55051,55055,55055}, + { 5,46265,40960,40960,55073,55084,38365,55096,55100,55118}, + { 25,50160,55138,55138,55142,55165,38427,55185,55189,55225}, + { 23,49365,55245,55245,55249,55260,38403,55285,55289,55306}, + { 21,48857,40480,40480,55347,55355,37497,55028,55032,55364}, + { 35,44151,38709,38709,55369,55378,37479,55395,55399,55413}, + { 17,52486,55439,55439,55443,55451,38569,55466,55470,55485}, + { 26,52666,55509,55509,55513,55513,38593,42920,55521,55540}, + { 32,45071,55550,55550,55554,55561,37756,55568,55572,55587}, + { 29,45753,55603,55603,55607,55615,37971,55632,55636,55653}, + { 24,51622,55685,55685,55689,55689,37601,55696,55700,55700}, + { 39,49688,55714,55714,55718,55718,37601,55725,55729,55745}, + { 223,13753,55761,55761,55765,55777,37763,37763,55784,55796}, + { 46,52267,55810,55810,55814,55814,37601,55820,55824,55837}, + { 45,13832,55850,55850,55854,55860,37518,55879,55883,55896}, + { 51,51466,55915,55915,55919,55919,37601,55928,55932,55947}, + { 54,50462,55963,55963,55967,55967,38445,55978,55982,56001}, + { 75,44314,56022,56022,56026,56041,37521,56059,56063,56085}, + { 94,44404,39011,39011,56100,56108,37497,55028,55032,55032}, + { 61,44356,56120,56120,56124,56132,37549,56140,56144,56157}, + { 65,51094,56169,56169,56173,56192,37601,56214,56218,56233}, + { 4,50222,56249,56249,56253,56261,38430,56276,56280,56295}, + { 66,52084,56319,56319,56323,56323,37601,56331,56335,56345}, + { 70,45851,52977,52977,56367,56375,37497,55028,55032,55364}, + { 67,49417,56381,56381,56385,56391,38407,56398,56402,56417}, + { 217,44194,39178,39178,56435,56441,37497,55028,55032,55364}, + { 73,47930,56449,56449,56453,56462,38310,56478,56482,56497}, + { 77,44534,39225,39225,56523,56531,37497,55028,55032,55364}, + { 81,46682,56537,56537,56541,56555,37549,56140,56144,56564}, + { 84,44578,39278,39278,56577,56577,37497,55028,55032,55364}, + { 242,47587,56584,56584,56588,56603,38254,56620,56624,56647}, + { 88,46628,56669,56669,56673,56681,0,56712,56716,56730}, + { 93,48329,56765,56765,56769,56779,37549,56140,56144,56796}, + { 98,44460,56816,56816,56820,56827,37497,55028,55032,56840}, + { 99,50028,56849,56849,56853,56853,8056,56863,56867,56886}, + { 104,49510,56907,56907,56911,56931,37601,56959,56963,56980}, + { 106,52806,56987,56987,56991,56991,2436,57000,57004,57021}, + { 108,45270,39993,39993,57040,57048,37865,57057,57061,57075}, + { 109,44679,39390,39390,57089,57097,37674,57111,57115,57132}, + { 111,45616,57146,57146,57150,57150,37947,57160,57164,57182}, + { 68,49210,57199,57199,57203,57211,37497,55028,55032,55032}, + { 117,44627,57217,57217,57221,57228,37647,57239,57243,57262}, + { 113,46736,40330,40330,57269,57275,38190,57288,57292,57305}, + { 121,48619,57340,57340,57344,57349,38376,57362,57366,57378}, + { 116,46076,57400,57400,57404,57409,38065,57420,57424,57437}, + { 110,44728,39437,39437,57457,57465,37549,57473,57477,57494}, + { 118,44771,39485,39485,57510,57516,37497,55028,55032,55032}, + { 124,51242,57523,57523,57527,57527,37601,57535,57539,57539}, + { 126,51768,57555,57555,57559,57566,38529,57579,57583,57599}, + { 122,44816,39537,39537,57621,57627,37687,57634,57638,57651}, + { 129,46872,57661,57661,57665,57665,38214,57671,57675,57691}, + { 40,47653,42994,42994,57709,57718,38257,57740,57744,57759}, + { 134,44871,39592,39592,57791,57803,37691,57816,57820,57837}, + { 136,52189,57854,57854,57858,57865,38549,57878,57882,57896}, + { 138,47695,43074,43074,57918,43064,38261,57923,57927,57939}, + { 139,52002,57959,57959,57963,57971,38539,57982,57986,58001}, + { 145,50371,58023,58023,58027,58027,0,37763,55784,58041}, + { 42,47871,58059,58059,58063,58073,38302,58105,58109,58126}, + { 141,45949,58174,58174,58178,58188,38041,58196,58200,58217}, + { 147,49947,58232,58232,58236,58247,37497,55028,55032,55032}, + { 140,45897,58257,58257,58261,58268,37497,55028,55032,58276}, + { 148,49830,58281,58281,58285,58291,38417,58302,58306,58319}, + { 159,50691,42752,42752,58339,58347,38449,58360,58364,58380}, + { 158,50816,58400,58400,58404,58404,37497,55028,55032,55364}, + { 270,51944,58411,58411,58415,58426,37497,55028,55032,58444}, + { 19618,46381,58449,58449,58453,58463,38136,58449,58484,58501}, + { 151,50311,58533,58533,58537,58553,38440,58581,58585,58601}, + { 163,46775,41498,41498,58611,58611,37497,55028,55032,58617}, + { 166,48806,58622,58622,58626,58633,37601,58641,58645,58658}, + { 175,48159,58672,58672,58676,58684,38337,58693,58697,58712}, + { 182,52860,58718,58718,58722,58722,38596,58732,58736,58756}, + { 176,44923,39630,39630,58779,58791,37497,55028,55032,55032}, + { 177,44981,39679,39679,58801,58808,37549,58814,58818,58834}, + { 178,47991,58848,58848,58852,58858,38317,58874,58878,58893}, + { 183,50406,58934,58934,58938,58938,37601,58950,58954,58954}, + { 164,51211,58973,58973,58977,58982,38478,58993,58997,59008}, + { 192,50768,42063,42063,59028,59035,38459,59043,59047,59065}, + { 187,51667,59082,59082,59086,59091,38517,59097,59101,59120}, + { 201,48105,59138,59138,59142,59154,38333,59164,59168,59168}, + { 190,45555,59184,59184,59188,59197,37889,59212,59216,59232}, + { 191,45022,59260,59260,59264,59271,37714,59278,59282,59295}, + { 202,52918,59309,59309,59313,59313,37601,56331,56335,56345}, + { 193,49073,59325,59325,59329,59329,37497,55028,55032,55032}, + { 185,52538,59338,59338,59342,59342,38579,59351,59355,59374}, + { 197,52590,59393,59393,59397,59403,38583,59410,59414,59426}, + { 200,45166,59444,59444,59448,59456,0,59465,59469,59482}, + { 271,51536,53340,53340,59496,59503,38502,59516,59520,59534}, + { 203,45222,39918,39918,59547,59554,37785,59567,59571,59585}, + { 204,48487,59617,59617,59621,59621,38341,59628,59632,0}, + { 205,13750,59646,59646,59650,59663,37421,59710,59714,59726}, + { 221,45411,59746,59746,59750,59757,37549,59765,59769,59783}, + { 215,49894,59796,59796,59800,59810,37601,59820,59824,59841}, + { 212,45809,59854,59854,59858,59867,37497,55028,55032,59877}, + { 143,45321,59882,59882,59886,59895,37497,55028,55032,55032}, + { 72,52724,40557,40557,59905,59905,37601,56331,56335,56345}, + { 222,51592,59917,59917,59921,59927,38507,59938,59942,59955}, + { 227,45458,40166,40166,59975,40156,37881,59984,59988,59998}, + { 228,46028,60017,60017,60021,60032,38358,60053,60057,60076}, + { 234,50986,60089,60089,60093,60101,38463,60110,60114,60129}, + { 235,45504,60150,60150,60154,60161,37885,60170,60174,60187}, + { 225,51811,60201,60201,60205,60205,37601,60225,60229,60229}, + { 237,44245,60256,60256,60260,60267,38344,60274,60278,60296}, + { 241,45683,40391,40391,60306,60314,37950,60329,60333,60351}, + { 244,44493,60385,60385,60389,60389,37601,56331,56335,56335}, + { 246,52424,60403,60403,60407,60407,37601,60415,60419,60434}, + { 247,46938,41905,41905,60448,60459,38370,60472,60476,60491}, + { 249,51296,60510,60510,60514,60514,38488,60524,60528,60548}, + { 251,46134,60568,60568,60572,60580,38107,60591,60595,60611}, + { 261,51414,60630,60630,60634,60640,38492,60651,60655,60667}, + { 209,46412,60685,60685,60689,0,10794,60702,60706,0}, + { 264,52034,60725,60725,60729,60729,37601,56331,56335,56335} }; static const RegionInfoNameEntry region_name_entries [] = { - {52399, 0}, /* AE */ - {48076, 1}, /* AF */ - {45392, 2}, /* AL */ + {52374, 0}, /* AE */ + {48051, 1}, /* AF */ + {45367, 2}, /* AL */ {1929, 3}, /* AM */ - {51890, 4}, /* AR */ - {49587, 5}, /* AT */ - {49620, 6}, /* AU */ - {46290, 7}, /* AZ */ - {50185, 8}, /* BA */ - {49390, 9}, /* BD */ - {48882, 10}, /* BE */ - {44176, 11}, /* BG */ - {52511, 12}, /* BH */ - {52691, 13}, /* BO */ - {45096, 14}, /* BR */ - {45778, 15}, /* BY */ - {51647, 16}, /* BZ */ - {49713, 17}, /* CA */ - {13778, 18}, /* CH */ - {52292, 19}, /* CL */ - {13857, 20}, /* CN */ - {51491, 21}, /* CO */ - {50487, 22}, /* CR */ - {44339, 23}, /* CZ */ - {44429, 24}, /* DE */ - {44381, 25}, /* DK */ - {51119, 26}, /* DO */ - {50247, 27}, /* DZ */ - {52109, 28}, /* EC */ - {45876, 29}, /* EE */ - {49442, 30}, /* EG */ - {44219, 31}, /* ES */ - {47955, 32}, /* ET */ - {44559, 33}, /* FI */ - {46707, 34}, /* FO */ - {44603, 35}, /* FR */ - {47612, 36}, /* GB */ - {46653, 37}, /* GE */ - {48354, 38}, /* GL */ - {44485, 39}, /* GR */ - {50053, 40}, /* GT */ - {49535, 41}, /* HK */ - {52831, 42}, /* HN */ - {45295, 43}, /* HR */ - {44704, 44}, /* HU */ - {45641, 45}, /* ID */ - {49235, 46}, /* IE */ - {44652, 47}, /* IL */ - {46761, 48}, /* IN */ - {48644, 49}, /* IQ */ - {46101, 50}, /* IR */ - {44753, 51}, /* IS */ - {44796, 52}, /* IT */ - {51267, 53}, /* JM */ - {51793, 54}, /* JO */ - {44841, 55}, /* JP */ - {46897, 56}, /* KE */ - {47678, 57}, /* KH */ - {44896, 58}, /* KR */ - {52214, 59}, /* KW */ - {47720, 60}, /* LA */ - {52027, 61}, /* LB */ - {50396, 62}, /* LI */ - {47896, 63}, /* LK */ - {45974, 64}, /* LT */ - {49972, 65}, /* LU */ - {45922, 66}, /* LV */ - {49855, 67}, /* LY */ - {50716, 68}, /* MA */ - {50841, 69}, /* MC */ - {51969, 70}, /* ME */ - {46406, 71}, /* MK */ - {50336, 72}, /* MO */ - {46800, 73}, /* MT */ - {48831, 74}, /* MX */ - {48184, 75}, /* NG */ - {52885, 76}, /* NI */ - {44948, 77}, /* NL */ - {45006, 78}, /* NO */ - {48016, 79}, /* NP */ - {50431, 80}, /* NZ */ - {51236, 81}, /* OM */ - {50793, 82}, /* PA */ - {51692, 83}, /* PE */ - {48130, 84}, /* PH */ - {45580, 85}, /* PK */ - {45047, 86}, /* PL */ - {52943, 87}, /* PR */ - {49098, 88}, /* PT */ - {52563, 89}, /* PY */ - {52615, 90}, /* QA */ - {45191, 91}, /* RO */ - {51561, 92}, /* RS */ - {45247, 93}, /* RU */ - {48512, 94}, /* RW */ - {13775, 95}, /* SA */ - {45436, 96}, /* SE */ - {49919, 97}, /* SG */ - {45834, 98}, /* SI */ - {45346, 99}, /* SK */ - {52749, 100}, /* SV */ - {51617, 101}, /* SY */ - {45483, 102}, /* TH */ - {46053, 103}, /* TJ */ - {51011, 104}, /* TN */ - {45529, 105}, /* TR */ - {51836, 106}, /* TT */ - {44270, 107}, /* TW */ - {45708, 108}, /* UA */ - {44518, 109}, /* US */ - {52449, 110}, /* UY */ - {46963, 111}, /* UZ */ - {51321, 112}, /* VE */ - {46159, 113}, /* VN */ - {51439, 114}, /* YE */ - {46437, 115}, /* ZA */ - {52059, 116} /* ZW */ + {51865, 4}, /* AR */ + {49562, 5}, /* AT */ + {49595, 6}, /* AU */ + {46265, 7}, /* AZ */ + {50160, 8}, /* BA */ + {49365, 9}, /* BD */ + {48857, 10}, /* BE */ + {44151, 11}, /* BG */ + {52486, 12}, /* BH */ + {52666, 13}, /* BO */ + {45071, 14}, /* BR */ + {45753, 15}, /* BY */ + {51622, 16}, /* BZ */ + {49688, 17}, /* CA */ + {13753, 18}, /* CH */ + {52267, 19}, /* CL */ + {13832, 20}, /* CN */ + {51466, 21}, /* CO */ + {50462, 22}, /* CR */ + {44314, 23}, /* CZ */ + {44404, 24}, /* DE */ + {44356, 25}, /* DK */ + {51094, 26}, /* DO */ + {50222, 27}, /* DZ */ + {52084, 28}, /* EC */ + {45851, 29}, /* EE */ + {49417, 30}, /* EG */ + {44194, 31}, /* ES */ + {47930, 32}, /* ET */ + {44534, 33}, /* FI */ + {46682, 34}, /* FO */ + {44578, 35}, /* FR */ + {47587, 36}, /* GB */ + {46628, 37}, /* GE */ + {48329, 38}, /* GL */ + {44460, 39}, /* GR */ + {50028, 40}, /* GT */ + {49510, 41}, /* HK */ + {52806, 42}, /* HN */ + {45270, 43}, /* HR */ + {44679, 44}, /* HU */ + {45616, 45}, /* ID */ + {49210, 46}, /* IE */ + {44627, 47}, /* IL */ + {46736, 48}, /* IN */ + {48619, 49}, /* IQ */ + {46076, 50}, /* IR */ + {44728, 51}, /* IS */ + {44771, 52}, /* IT */ + {51242, 53}, /* JM */ + {51768, 54}, /* JO */ + {44816, 55}, /* JP */ + {46872, 56}, /* KE */ + {47653, 57}, /* KH */ + {44871, 58}, /* KR */ + {52189, 59}, /* KW */ + {47695, 60}, /* LA */ + {52002, 61}, /* LB */ + {50371, 62}, /* LI */ + {47871, 63}, /* LK */ + {45949, 64}, /* LT */ + {49947, 65}, /* LU */ + {45897, 66}, /* LV */ + {49830, 67}, /* LY */ + {50691, 68}, /* MA */ + {50816, 69}, /* MC */ + {51944, 70}, /* ME */ + {46381, 71}, /* MK */ + {50311, 72}, /* MO */ + {46775, 73}, /* MT */ + {48806, 74}, /* MX */ + {48159, 75}, /* NG */ + {52860, 76}, /* NI */ + {44923, 77}, /* NL */ + {44981, 78}, /* NO */ + {47991, 79}, /* NP */ + {50406, 80}, /* NZ */ + {51211, 81}, /* OM */ + {50768, 82}, /* PA */ + {51667, 83}, /* PE */ + {48105, 84}, /* PH */ + {45555, 85}, /* PK */ + {45022, 86}, /* PL */ + {52918, 87}, /* PR */ + {49073, 88}, /* PT */ + {52538, 89}, /* PY */ + {52590, 90}, /* QA */ + {45166, 91}, /* RO */ + {51536, 92}, /* RS */ + {45222, 93}, /* RU */ + {48487, 94}, /* RW */ + {13750, 95}, /* SA */ + {45411, 96}, /* SE */ + {49894, 97}, /* SG */ + {45809, 98}, /* SI */ + {45321, 99}, /* SK */ + {52724, 100}, /* SV */ + {51592, 101}, /* SY */ + {45458, 102}, /* TH */ + {46028, 103}, /* TJ */ + {50986, 104}, /* TN */ + {45504, 105}, /* TR */ + {51811, 106}, /* TT */ + {44245, 107}, /* TW */ + {45683, 108}, /* UA */ + {44493, 109}, /* US */ + {52424, 110}, /* UY */ + {46938, 111}, /* UZ */ + {51296, 112}, /* VE */ + {46134, 113}, /* VN */ + {51414, 114}, /* YE */ + {46412, 115}, /* ZA */ + {52034, 116} /* ZW */ }; @@ -2607,17 +2607,10 @@ static const char locale_strings [] = { "m\xc3\xa5ndag\0" "tisdag\0" "l\xc3\xb6rdag\0" - "S\xc3\xb6n\0" - "M\xc3\xa5n\0" - "Tis\0" - "Ons\0" - "Tor\0" - "Fre\0" - "L\xc3\xb6r\0" - "Januari\0" - "Februari\0" - "Mars\0" - "Augusti\0" + "s\xc3\xb6n\0" + "m\xc3\xa5n\0" + "tis\0" + "l\xc3\xb6r\0" "augusti\0" "'den 'd MMMM yyyy\0" "dddd' den 'd MMMM yyyy\0" @@ -2702,6 +2695,8 @@ static const char locale_strings [] = { "Jum\0" "Sab\0" "R\0" + "Januari\0" + "Februari\0" "Maret\0" "Mei\0" "Agustus\0" @@ -4408,6 +4403,7 @@ static const char locale_strings [] = { "As\xe1\xb8\x8d\0" "Yennayer\0" "Yebrayer\0" + "Mars\0" "Ibrir\0" "Mayyu\0" "Yunyu\0" @@ -4907,7 +4903,6 @@ static const char locale_strings [] = { "e.m.\0" "tysdag\0" "laurdag\0" - "m\xc3\xa5n\0" "tys\0" "lau\0" "Janeiro\0" diff --git a/mono/metadata/domain-internals.h b/mono/metadata/domain-internals.h index db0421ec9ff..8edf619c8d5 100644 --- a/mono/metadata/domain-internals.h +++ b/mono/metadata/domain-internals.h @@ -100,13 +100,7 @@ typedef struct { * Contains information about the type arguments for generic shared methods. */ typedef struct { - /* - * If not NULL, determines whenever the class type arguments of the gshared method are references or vtypes. - * The array length is equal to class_inst->type_argv. - */ - gboolean *var_is_vt; - /* Same for method type parameters */ - gboolean *mvar_is_vt; + gboolean is_gsharedvt; } MonoGenericSharingContext; /* Simplified DWARF location list entry */ diff --git a/mono/metadata/file-mmap-posix.c b/mono/metadata/file-mmap-posix.c index 227b3cc9697..3de44d7a1db 100644 --- a/mono/metadata/file-mmap-posix.c +++ b/mono/metadata/file-mmap-posix.c @@ -408,22 +408,26 @@ void * mono_mmap_open_handle (void *input_fd, MonoString *mapName, gint64 *capacity, int access, int options, int *error) { MmapHandle *handle; - char *c_mapName = mono_string_to_utf8 (mapName); - - named_regions_lock (); - handle = (MmapHandle*)g_hash_table_lookup (named_regions, c_mapName); - if (handle) { - *error = FILE_ALREADY_EXISTS; - handle = NULL; - } else { - //XXX we're exploiting wapi HANDLE == FD equivalence. THIS IS FRAGILE, create a _wapi_handle_to_fd call + if (!mapName) { handle = open_file_map (NULL, GPOINTER_TO_INT (input_fd), FILE_MODE_OPEN, capacity, access, options, error); - handle->name = g_strdup (c_mapName); - g_hash_table_insert (named_regions, handle->name, handle); - } - named_regions_unlock (); + } else { + char *c_mapName = mono_string_to_utf8 (mapName); - g_free (c_mapName); + named_regions_lock (); + handle = (MmapHandle*)g_hash_table_lookup (named_regions, c_mapName); + if (handle) { + *error = FILE_ALREADY_EXISTS; + handle = NULL; + } else { + //XXX we're exploiting wapi HANDLE == FD equivalence. THIS IS FRAGILE, create a _wapi_handle_to_fd call + handle = open_file_map (NULL, GPOINTER_TO_INT (input_fd), FILE_MODE_OPEN, capacity, access, options, error); + handle->name = g_strdup (c_mapName); + g_hash_table_insert (named_regions, handle->name, handle); + } + named_regions_unlock (); + + g_free (c_mapName); + } return handle; } diff --git a/mono/metadata/icall.c b/mono/metadata/icall.c index d4f5a2628f0..af735ac67b9 100644 --- a/mono/metadata/icall.c +++ b/mono/metadata/icall.c @@ -2026,6 +2026,14 @@ fill_iface_array (gpointer key, gpointer value, gpointer user_data) mono_metadata_free_type (inflated); } +static guint +get_interfaces_hash (gconstpointer v1) +{ + MonoClass *k = (MonoClass*)v1; + + return k->type_token; +} + ICALL_EXPORT MonoArray* ves_icall_Type_GetInterfaces (MonoReflectionType* type) { @@ -2035,7 +2043,7 @@ ves_icall_Type_GetInterfaces (MonoReflectionType* type) FillIfaceArrayData data = { 0 }; int len; - GHashTable *iface_hash = g_hash_table_new (NULL, NULL); + GHashTable *iface_hash = g_hash_table_new (get_interfaces_hash, NULL); if (class->generic_class && class->generic_class->context.class_inst->is_open) { data.context = mono_class_get_context (class); @@ -4904,7 +4912,7 @@ mono_module_get_types (MonoDomain *domain, MonoImage *image, MonoArray **excepti if (!exportedOnly || mono_module_type_is_visible (tdef, image, i + 1)) { MonoError error; klass = mono_class_get_checked (image, (i + 1) | MONO_TOKEN_TYPE_DEF, &error); - g_assert (!mono_loader_get_last_error ()); /* Plug any leaks */ + mono_loader_assert_no_error (); /* Plug any leaks */ if (klass) { mono_array_setref (res, count, mono_type_get_object (domain, &klass->byval_arg)); diff --git a/mono/metadata/loader.c b/mono/metadata/loader.c index 05cc3f7f833..d9ae9d6fde0 100644 --- a/mono/metadata/loader.c +++ b/mono/metadata/loader.c @@ -287,6 +287,17 @@ mono_loader_get_last_error (void) return (MonoLoaderError*)mono_native_tls_get_value (loader_error_thread_id); } +void +mono_loader_assert_no_error (void) +{ + MonoLoaderError *error = mono_loader_get_last_error (); + + if (error) { + g_print ("Unhandled loader error: %x, %s %s %s\n", error->exception_type, error->msg, error->assembly_name, error->class_name); + g_assert_not_reached (); + } +} + /** * mono_loader_clear_error: * @@ -511,7 +522,7 @@ field_from_memberref (MonoImage *image, guint32 token, MonoClass **retklass, field = mono_class_get_field_from_name_full (klass, fname, sig_type); if (!field) { - g_assert (!mono_loader_get_last_error ()); + mono_loader_assert_no_error (); mono_error_set_field_load (error, klass, fname, "Could not find field '%s'", fname); } @@ -527,7 +538,7 @@ mono_field_from_token (MonoImage *image, guint32 token, MonoClass **retklass, Mo { MonoError error; MonoClassField *res = mono_field_from_token_checked (image, token, retklass, context, &error); - g_assert (!mono_loader_get_last_error ()); + mono_loader_assert_no_error (); if (!mono_error_ok (&error)) { mono_loader_set_error_from_mono_error (&error); mono_error_cleanup (&error); @@ -566,7 +577,7 @@ mono_field_from_token_checked (MonoImage *image, guint32 token, MonoClass **retk if (mono_metadata_token_table (token) == MONO_TABLE_MEMBERREF) { field = field_from_memberref (image, token, retklass, context, error); - g_assert (!mono_loader_get_last_error ()); + mono_loader_assert_no_error (); } else { type = mono_metadata_typedef_from_field (image, mono_metadata_token_index (token)); if (!type) { @@ -592,7 +603,7 @@ mono_field_from_token_checked (MonoImage *image, guint32 token, MonoClass **retk if (field && field->parent && !field->parent->generic_class && !field->parent->generic_container) mono_conc_hashtable_insert (image->field_cache, GUINT_TO_POINTER (token), field); - g_assert (!mono_loader_get_last_error ()); + mono_loader_assert_no_error (); return field; } @@ -890,7 +901,7 @@ mono_method_get_signature_full (MonoMethod *method, MonoImage *image, guint32 to MonoError error; MonoMethodSignature *res = mono_method_get_signature_checked (method, image, token, context, &error); - g_assert (!mono_loader_get_last_error ()); + mono_loader_assert_no_error (); if (!res) { g_assert (!mono_error_ok (&error)); @@ -991,7 +1002,7 @@ mono_method_get_signature (MonoMethod *method, MonoImage *image, guint32 token) MonoError error; MonoMethodSignature *res = mono_method_get_signature_checked (method, image, token, NULL, &error); - g_assert (!mono_loader_get_last_error ()); + mono_loader_assert_no_error (); if (!res) { g_assert (!mono_error_ok (&error)); @@ -1143,11 +1154,11 @@ method_from_memberref (MonoImage *image, guint32 idx, MonoGenericContext *typesp g_free (msig); } - g_assert (!mono_loader_get_last_error ()); + mono_loader_assert_no_error (); return method; fail: - g_assert (!mono_loader_get_last_error ()); + mono_loader_assert_no_error (); g_assert (!mono_error_ok (error)); return NULL; } @@ -1183,7 +1194,7 @@ method_from_methodspec (MonoImage *image, MonoGenericContext *context, guint32 i inst = mono_metadata_parse_generic_inst (image, NULL, param_count, ptr, &ptr); if (!inst) { - g_assert (!mono_loader_get_last_error ()); + mono_loader_assert_no_error (); mono_error_set_bad_image (error, image, "Cannot parse generic instance for methodspec 0x%08x", idx); return NULL; } @@ -1216,7 +1227,7 @@ method_from_methodspec (MonoImage *image, MonoGenericContext *context, guint32 i new_context.method_inst = inst; method = mono_class_inflate_generic_method_full_checked (method, klass, &new_context, error); - g_assert (!mono_loader_get_last_error ()); + mono_loader_assert_no_error (); return method; } @@ -1488,7 +1499,7 @@ mono_lookup_pinvoke_call (MonoMethod *method, const char **exc_class, const char /* * Try loading the module using a variety of names */ - for (i = 0; i < 4; ++i) { + for (i = 0; i < 5; ++i) { char *base_name = NULL, *dir_name = NULL; gboolean is_absolute = is_absolute_path (new_scope); @@ -1522,6 +1533,14 @@ mono_lookup_pinvoke_call (MonoMethod *method, const char **exc_class, const char break; } continue; + case 3: + if (!is_absolute && mono_dl_get_system_dir ()) { + dir_name = (char*)mono_dl_get_system_dir (); + file_name = g_path_get_basename (new_scope); + base_name = NULL; + } else + continue; + break; default: #ifndef TARGET_WIN32 if (!g_ascii_strcasecmp ("user32.dll", new_scope) || @@ -1784,7 +1803,7 @@ mono_get_method_from_token (MonoImage *image, guint32 token, MonoClass *klass, MonoClass *handle_class; result = mono_lookup_dynamic_token_class (image, token, TRUE, &handle_class, context); - g_assert (!mono_loader_get_last_error ()); + mono_loader_assert_no_error (); // This checks the memberref type as well if (result && handle_class != mono_defaults.methodhandle_class) { @@ -1855,7 +1874,7 @@ mono_get_method_from_token (MonoImage *image, guint32 token, MonoClass *klass, */ if (*sig & 0x10) { generic_container = mono_metadata_load_generic_params (image, token, container); - g_assert (!mono_loader_get_last_error ()); /* FIXME don't swallow this error. */ + mono_loader_assert_no_error (); /* FIXME don't swallow this error. */ } if (generic_container) { result->is_generic = TRUE; @@ -1889,7 +1908,7 @@ mono_get_method_from_token (MonoImage *image, guint32 token, MonoClass *klass, if (generic_container) mono_method_set_generic_container (result, generic_container); - g_assert (!mono_loader_get_last_error ()); + mono_loader_assert_no_error (); return result; } @@ -1905,7 +1924,7 @@ mono_get_method_full (MonoImage *image, guint32 token, MonoClass *klass, { MonoError error; MonoMethod *result = mono_get_method_checked (image, token, klass, context, &error); - g_assert (!mono_loader_get_last_error ()); + mono_loader_assert_no_error (); if (!mono_error_ok (&error)) { mono_loader_set_error_from_mono_error (&error); mono_error_cleanup (&error); @@ -2053,7 +2072,7 @@ mono_get_method_constrained (MonoImage *image, guint32 token, MonoClass *constra MonoError error; MonoMethod *result = mono_get_method_constrained_checked (image, token, constrained_class, context, cil_method, &error); - g_assert (!mono_loader_get_last_error ()); + mono_loader_assert_no_error (); if (!mono_error_ok (&error)) { mono_loader_set_error_from_mono_error (&error); mono_error_cleanup (&error); @@ -2403,7 +2422,7 @@ async_stack_walk_adapter (MonoStackFrameInfo *frame, MonoContext *ctx, gpointer if (frame->ji->async) return d->func (NULL, frame->domain, frame->ji->code_start, frame->native_offset, d->user_data); else - return d->func (mono_jit_info_get_method (frame->ji), frame->domain, frame->ji->code_start, frame->native_offset, d->user_data); + return d->func (frame->actual_method, frame->domain, frame->ji->code_start, frame->native_offset, d->user_data); break; default: g_assert_not_reached (); diff --git a/mono/metadata/metadata.c b/mono/metadata/metadata.c index 5697b59d338..696d48e781a 100644 --- a/mono/metadata/metadata.c +++ b/mono/metadata/metadata.c @@ -1979,13 +1979,13 @@ mono_metadata_parse_method_signature_full (MonoImage *m, MonoGenericContainer *c for (i = 0; i < method->param_count; ++i) { if (*ptr == MONO_TYPE_SENTINEL) { if (method->call_convention != MONO_CALL_VARARG || def) { - g_assert (!mono_loader_get_last_error ()); + mono_loader_assert_no_error (); mono_error_set_bad_image (error, m, "Found sentinel for methoddef or no vararg"); g_free (pattrs); return NULL; } if (method->sentinelpos >= 0) { - g_assert (!mono_loader_get_last_error ()); + mono_loader_assert_no_error (); mono_error_set_bad_image (error, m, "Found sentinel twice in the same signature."); g_free (pattrs); return NULL; @@ -2024,7 +2024,7 @@ mono_metadata_parse_method_signature_full (MonoImage *m, MonoGenericContainer *c * Add signature to a cache and increase ref count... */ - g_assert (!mono_loader_get_last_error ()); + mono_loader_assert_no_error (); return method; } @@ -6065,7 +6065,7 @@ mono_metadata_load_generic_param_constraints_checked (MonoImage *image, guint32 return TRUE; for (i = 0; i < container->type_argc; i++) { if (!get_constraints (image, start_row + i, &mono_generic_container_get_param_info (container, i)->constraints, container, error)) { - g_assert (!mono_loader_get_last_error ()); + mono_loader_assert_no_error (); return FALSE; } } diff --git a/mono/metadata/object-offsets.h b/mono/metadata/object-offsets.h index cc42ab867a1..2e753bcfe5d 100644 --- a/mono/metadata/object-offsets.h +++ b/mono/metadata/object-offsets.h @@ -191,6 +191,7 @@ DECL_OFFSET(MonoLMF, fregs) #elif defined(TARGET_ARM64) DECL_OFFSET(MonoLMF, pc) DECL_OFFSET(MonoLMF, gregs) +DECL_OFFSET(DynCallArgs, regs) DECL_OFFSET(DynCallArgs, fpregs) DECL_OFFSET(DynCallArgs, n_fpargs) DECL_OFFSET(DynCallArgs, n_fpret) diff --git a/mono/mini/Makefile.am.in b/mono/mini/Makefile.am.in index 64d6543aca9..d1ca2c42365 100755 --- a/mono/mini/Makefile.am.in +++ b/mono/mini/Makefile.am.in @@ -766,7 +766,7 @@ patch-libtool: chmod a+x ../../libtool # Utility target for patching libtool to get rid of the 'ranlib: file has no symbols" warnings -patch-libtool-osx: +patch-osx-libtool: sed -e 's/old_archive_cmds=.*/old_archive_cmds="libtool -no_warning_for_no_symbols -static -o \\$$oldlib \\$$oldobjs"/g' < ../../libtool > 2; mv 2 ../../libtool chmod a+x ../../libtool diff --git a/mono/mini/TestDriver.cs b/mono/mini/TestDriver.cs index c779920808f..64372e06c24 100644 --- a/mono/mini/TestDriver.cs +++ b/mono/mini/TestDriver.cs @@ -2,6 +2,7 @@ using System; using System.Reflection; using System.Collections.Generic; +[AttributeUsageAttribute(AttributeTargets.All, Inherited = true, AllowMultiple = true)] public class CategoryAttribute : Attribute { public CategoryAttribute (string category) { diff --git a/mono/mini/aot-compiler.c b/mono/mini/aot-compiler.c index c8d3372fe70..8e4bab4984a 100644 --- a/mono/mini/aot-compiler.c +++ b/mono/mini/aot-compiler.c @@ -1167,24 +1167,25 @@ arch_emit_specific_trampoline_pages (MonoAotCompile *acfg) guint8 *code; guint8 *loop_start, *loop_branch_back, *loop_end_check, *imt_found_check; int i; + int pagesize = MONO_AOT_TRAMP_PAGE_SIZE; #define COMMON_TRAMP_SIZE 16 - int count = (mono_pagesize () - COMMON_TRAMP_SIZE) / 8; + int count = (pagesize - COMMON_TRAMP_SIZE) / 8; int imm8, rot_amount; char symbol [128]; if (!acfg->aot_opts.use_trampolines_page) return; - acfg->tramp_page_size = mono_pagesize (); + acfg->tramp_page_size = pagesize; sprintf (symbol, "%sspecific_trampolines_page", acfg->user_symbol_prefix); - emit_alignment (acfg, mono_pagesize ()); + emit_alignment (acfg, pagesize); emit_global (acfg, symbol, TRUE); emit_label (acfg, symbol); /* emit the generic code first, the trampoline address + 8 is in the lr register */ code = buf; - imm8 = mono_arm_is_rotated_imm8 (mono_pagesize (), &rot_amount); + imm8 = mono_arm_is_rotated_imm8 (pagesize, &rot_amount); ARM_SUB_REG_IMM (code, ARMREG_LR, ARMREG_LR, imm8, rot_amount); ARM_LDR_IMM (code, ARMREG_R1, ARMREG_LR, -8); ARM_LDR_IMM (code, ARMREG_PC, ARMREG_LR, -4); @@ -1212,7 +1213,7 @@ arch_emit_specific_trampoline_pages (MonoAotCompile *acfg) emit_global (acfg, symbol, TRUE); emit_label (acfg, symbol); code = buf; - imm8 = mono_arm_is_rotated_imm8 (mono_pagesize (), &rot_amount); + imm8 = mono_arm_is_rotated_imm8 (pagesize, &rot_amount); ARM_SUB_REG_IMM (code, ARMREG_IP, ARMREG_IP, imm8, rot_amount); ARM_LDR_IMM (code, MONO_ARCH_RGCTX_REG, ARMREG_IP, -8); ARM_LDR_IMM (code, ARMREG_PC, ARMREG_IP, -4); @@ -1239,7 +1240,7 @@ arch_emit_specific_trampoline_pages (MonoAotCompile *acfg) emit_label (acfg, symbol); code = buf; ARM_PUSH (code, (1 << ARMREG_R0) | (1 << ARMREG_R1) | (1 << ARMREG_R2) | (1 << ARMREG_R3)); - imm8 = mono_arm_is_rotated_imm8 (mono_pagesize (), &rot_amount); + imm8 = mono_arm_is_rotated_imm8 (pagesize, &rot_amount); ARM_SUB_REG_IMM (code, ARMREG_IP, ARMREG_IP, imm8, rot_amount); ARM_LDR_IMM (code, ARMREG_R0, ARMREG_IP, -8); ARM_LDR_IMM (code, ARMREG_PC, ARMREG_IP, -4); @@ -1269,7 +1270,7 @@ arch_emit_specific_trampoline_pages (MonoAotCompile *acfg) /* Need at least two free registers, plus a slot for storing the pc */ ARM_PUSH (code, (1 << ARMREG_R0)|(1 << ARMREG_R1)|(1 << ARMREG_R2)); - imm8 = mono_arm_is_rotated_imm8 (mono_pagesize (), &rot_amount); + imm8 = mono_arm_is_rotated_imm8 (pagesize, &rot_amount); ARM_SUB_REG_IMM (code, ARMREG_IP, ARMREG_IP, imm8, rot_amount); ARM_LDR_IMM (code, ARMREG_R0, ARMREG_IP, -8); @@ -3261,7 +3262,7 @@ add_method (MonoAotCompile *acfg, MonoMethod *method) static void add_extra_method_with_depth (MonoAotCompile *acfg, MonoMethod *method, int depth) { - if (mono_method_is_generic_sharable_full (method, FALSE, TRUE, FALSE)) + if (mono_method_is_generic_sharable_full (method, TRUE, TRUE, FALSE)) method = mini_get_shared_method (method); else if ((acfg->opts & MONO_OPT_GSHAREDVT) && prefer_gsharedvt_method (acfg, method) && mono_method_is_generic_sharable_full (method, FALSE, FALSE, TRUE)) /* Use the gsharedvt version */ @@ -4249,6 +4250,24 @@ add_generic_class_with_depth (MonoAotCompile *acfg, MonoClass *klass, int depth, add_generic_class (acfg, mono_class_inflate_generic_class (enum_comparer, &ctx), FALSE, "EqualityComparer"); } } + + /* Add an instance of ObjectComparer which is created dynamically by Comparer for enums */ + if (klass->image == mono_defaults.corlib && !strcmp (klass->name_space, "System.Collections.Generic") && !strcmp (klass->name, "Comparer`1")) { + MonoClass *comparer; + MonoClass *tclass = mono_class_from_mono_type (klass->generic_class->context.class_inst->type_argv [0]); + MonoGenericContext ctx; + MonoType *args [16]; + + if (mono_class_is_enum (tclass)) { + memset (&ctx, 0, sizeof (ctx)); + args [0] = &tclass->byval_arg; + ctx.class_inst = mono_metadata_get_generic_inst (1, args); + + comparer = mono_class_from_name (mono_defaults.corlib, "System.Collections.Generic", "ObjectComparer`1"); + g_assert (comparer); + add_generic_class (acfg, mono_class_inflate_generic_class (comparer, &ctx), FALSE, "Comparer"); + } + } } static void @@ -5377,7 +5396,6 @@ static void emit_method_info (MonoAotCompile *acfg, MonoCompile *cfg) { MonoMethod *method; - GList *l; int pindex, buf_size, n_patches; GPtrArray *patches; MonoJumpInfo *patch_info; @@ -5410,16 +5428,7 @@ emit_method_info (MonoAotCompile *acfg, MonoCompile *cfg) /* Not needed when loading the method */ encode_value (0, p, &p); - /* String table */ - if (cfg->opt & MONO_OPT_SHARED) { - encode_value (g_list_length (cfg->ldstr_list), p, &p); - for (l = cfg->ldstr_list; l; l = l->next) { - encode_value ((long)l->data, p, &p); - } - } - else - /* Used only in shared mode */ - g_assert (!cfg->ldstr_list); + g_assert (!(cfg->opt & MONO_OPT_SHARED)); n_patches = 0; for (pindex = 0; pindex < patches->len; ++pindex) { @@ -5704,34 +5713,8 @@ emit_exception_debug_info (MonoAotCompile *acfg, MonoCompile *cfg, gboolean stor p += p2 - buf2; g_free (buf2); - if (gsctx && (gsctx->var_is_vt || gsctx->mvar_is_vt)) { - MonoMethodInflated *inflated; - MonoGenericContext *context; - MonoGenericInst *inst; - - g_assert (jinfo->d.method->is_inflated); - inflated = (MonoMethodInflated*)jinfo->d.method; - context = &inflated->context; - + if (gsctx && gsctx->is_gsharedvt) { encode_value (1, p, &p); - if (context->class_inst) { - inst = context->class_inst; - - encode_value (inst->type_argc, p, &p); - for (i = 0; i < inst->type_argc; ++i) - encode_value (gsctx->var_is_vt [i], p, &p); - } else { - encode_value (0, p, &p); - } - if (context->method_inst) { - inst = context->method_inst; - - encode_value (inst->type_argc, p, &p); - for (i = 0; i < inst->type_argc; ++i) - encode_value (gsctx->mvar_is_vt [i], p, &p); - } else { - encode_value (0, p, &p); - } } else { encode_value (0, p, &p); } @@ -6193,8 +6176,6 @@ emit_trampolines (MonoAotCompile *acfg) emit_trampoline (acfg, acfg->got_offset, info); } - mono_arch_get_nullified_class_init_trampoline (&info); - emit_trampoline (acfg, acfg->got_offset, info); #if defined(MONO_ARCH_MONITOR_OBJECT_REG) mono_arch_create_monitor_enter_trampoline (&info, FALSE, TRUE); emit_trampoline (acfg, acfg->got_offset, info); @@ -6936,9 +6917,9 @@ compile_method (MonoAotCompile *acfg, MonoMethod *method) if (m->is_inflated) { if (!(mono_class_generic_sharing_enabled (m->klass) && mono_method_is_generic_sharable_full (m, FALSE, FALSE, FALSE)) && - !method_has_type_vars (m)) { + (!method_has_type_vars (m) || mono_method_is_generic_sharable_full (m, TRUE, TRUE, FALSE))) { if (m->iflags & METHOD_IMPL_ATTRIBUTE_INTERNAL_CALL) { - if (mono_aot_mode_is_full (&acfg->aot_opts)) + if (mono_aot_mode_is_full (&acfg->aot_opts) && !method_has_type_vars (m)) add_extra_method_with_depth (acfg, mono_marshal_get_native_wrapper (m, TRUE, TRUE), depth + 1); } else { add_extra_method_with_depth (acfg, m, depth + 1); @@ -7300,8 +7281,10 @@ execute_system (const char * command) g_free (wstr); g_free (command); -#else +#elif defined (HAVE_SYSTEM) status = system (command); +#else + g_assert_not_reached (); #endif return status; @@ -8731,6 +8714,10 @@ collect_methods (MonoAotCompile *acfg) } */ + if (method->is_generic || method->klass->generic_container) + /* Compile the ref shared version instead */ + method = mini_get_shared_method (method); + /* Since we add the normal methods first, their index will be equal to their zero based token index */ add_method_with_index (acfg, method, i, FALSE); acfg->method_index ++; @@ -8748,14 +8735,6 @@ collect_methods (MonoAotCompile *acfg) method = mono_get_method_checked (acfg->image, token, NULL, NULL, &error); report_loader_error (acfg, &error, "Failed to load method token 0x%x due to %s\n", i, mono_error_get_message (&error)); - /* - if (strcmp (method->name, "gshared2")) - continue; - */ - /* - if (!strstr (method->klass->image->name, "mini")) - continue; - */ if (method->is_generic || method->klass->generic_container) { MonoMethod *gshared; diff --git a/mono/mini/aot-runtime.c b/mono/mini/aot-runtime.c index fceb9fb9184..75f332eb9e4 100644 --- a/mono/mini/aot-runtime.c +++ b/mono/mini/aot-runtime.c @@ -206,6 +206,9 @@ init_plt (MonoAotModule *info); static void compute_llvm_code_range (MonoAotModule *amodule, guint8 **code_start, guint8 **code_end); +static gboolean +mono_aot_init_method (MonoAotModule *amodule, guint32 method_index, MonoMethod *method, MonoClass **klass); + /*****************************************************/ /* AOT RUNTIME */ /*****************************************************/ @@ -837,7 +840,10 @@ decode_method_ref_with_target (MonoAotModule *module, MethodRef *ref, MonoMethod if (!m) return FALSE; mono_class_init (m->klass); - ref->method = mono_marshal_get_remoting_invoke_with_check (m); + if (mono_aot_only) + ref->method = m; + else + ref->method = mono_marshal_get_remoting_invoke_with_check (m); break; } case MONO_WRAPPER_PROXY_ISINST: { @@ -2835,21 +2841,9 @@ decode_exception_debug_info (MonoAotModule *amodule, MonoDomain *domain, gi->generic_sharing_context = g_new0 (MonoGenericSharingContext, 1); if (decode_value (p, &p)) { /* gsharedvt */ - int i, n; MonoGenericSharingContext *gsctx = gi->generic_sharing_context; - n = decode_value (p, &p); - if (n) { - gsctx->var_is_vt = alloc0_jit_info_data (domain, sizeof (gboolean) * n, async); - for (i = 0; i < n; ++i) - gsctx->var_is_vt [i] = decode_value (p, &p); - } - n = decode_value (p, &p); - if (n) { - gsctx->mvar_is_vt = alloc0_jit_info_data (domain, sizeof (gboolean) * n, async); - for (i = 0; i < n; ++i) - gsctx->mvar_is_vt [i] = decode_value (p, &p); - } + gsctx->is_gsharedvt = TRUE; } } @@ -3573,12 +3567,9 @@ load_method (MonoDomain *domain, MonoAotModule *amodule, MonoImage *image, MonoM { MonoClass *klass; gboolean from_plt = method == NULL; - MonoMemPool *mp; - int i, pindex, n_patches, used_strings; - gboolean keep_patches = TRUE; - guint8 *p; MonoJitInfo *jinfo = NULL; guint8 *code, *info; + gboolean res; if (mono_profiler_get_events () & MONO_PROFILE_ENTER_LEAVE) { if (mono_aot_only) @@ -3587,7 +3578,7 @@ load_method (MonoDomain *domain, MonoAotModule *amodule, MonoImage *image, MonoM return NULL; } - if ((domain != mono_get_root_domain ()) && (!(amodule->info.opts & MONO_OPT_SHARED))) + if (domain != mono_get_root_domain ()) /* Non shared AOT code can't be used in other appdomains */ return NULL; @@ -3642,85 +3633,9 @@ load_method (MonoDomain *domain, MonoAotModule *amodule, MonoImage *image, MonoM } } - p = info; - - if (method) { - klass = method->klass; - decode_klass_ref (amodule, p, &p); - } else { - klass = decode_klass_ref (amodule, p, &p); - } - - if (amodule->info.opts & MONO_OPT_SHARED) - used_strings = decode_value (p, &p); - else - used_strings = 0; - - for (i = 0; i < used_strings; i++) { - guint token = decode_value (p, &p); - mono_ldstr (mono_get_root_domain (), image, mono_metadata_token_index (token)); - } - - if (amodule->info.opts & MONO_OPT_SHARED) - keep_patches = FALSE; - - n_patches = decode_value (p, &p); - - keep_patches = FALSE; - - if (n_patches) { - MonoJumpInfo *patches; - guint32 *got_slots; - gboolean llvm; - gpointer *got; - - if (keep_patches) - mp = domain->mp; - else - mp = mono_mempool_new (); - - if ((gpointer)code >= amodule->info.jit_code_start && (gpointer)code <= amodule->info.jit_code_end) { - llvm = FALSE; - got = amodule->got; - } else { - llvm = TRUE; - got = amodule->llvm_got; - g_assert (got); - } - - patches = load_patch_info (amodule, mp, n_patches, llvm, &got_slots, p, &p); - if (patches == NULL) - goto cleanup; - - for (pindex = 0; pindex < n_patches; ++pindex) { - MonoJumpInfo *ji = &patches [pindex]; - gpointer addr; - - /* - * For SFLDA, we need to call resolve_patch_target () since the GOT slot could have - * been initialized by load_method () for a static cctor before the cctor has - * finished executing (#23242). - */ - if (!got [got_slots [pindex]] || ji->type == MONO_PATCH_INFO_SFLDA) { - addr = mono_resolve_patch_target (method, domain, code, ji, TRUE); - if (ji->type == MONO_PATCH_INFO_METHOD_JUMP) - addr = mono_create_ftnptr (domain, addr); - mono_memory_barrier (); - got [got_slots [pindex]] = addr; - if (ji->type == MONO_PATCH_INFO_METHOD_JUMP) - register_jump_target_got_slot (domain, ji->data.method, &(got [got_slots [pindex]])); - } - ji->type = MONO_PATCH_INFO_NONE; - } - - g_free (got_slots); - - if (!keep_patches) - mono_mempool_destroy (mp); - } - - if (mini_get_debug_options ()->load_aot_jit_info_eagerly) - jinfo = mono_aot_find_jit_info (domain, amodule->assembly->image, code); + res = mono_aot_init_method (amodule, method_index, method, &klass); + if (!res) + goto cleanup; if (mono_trace_is_traced (G_LOG_LEVEL_DEBUG, MONO_TRACE_AOT)) { char *full_name; @@ -3754,7 +3669,7 @@ load_method (MonoDomain *domain, MonoAotModule *amodule, MonoImage *image, MonoM MonoJitInfo *jinfo; if (!method) { - method = mono_get_method (image, token, NULL); + method = mono_get_method (amodule->assembly->image, token, NULL); g_assert (method); } mono_profiler_method_jit (method); @@ -3769,11 +3684,6 @@ load_method (MonoDomain *domain, MonoAotModule *amodule, MonoImage *image, MonoM return code; cleanup: - /* FIXME: The space in domain->mp is wasted */ - if (amodule->info.opts & MONO_OPT_SHARED) - /* No need to cache patches */ - mono_mempool_destroy (mp); - if (jinfo) g_free (jinfo); @@ -3921,6 +3831,89 @@ mono_aot_find_method_index (MonoMethod *method) return find_aot_method (method, &out_amodule); } +static gboolean +mono_aot_init_method (MonoAotModule *amodule, guint32 method_index, MonoMethod *method, MonoClass **klass) +{ + MonoDomain *domain = mono_domain_get (); + MonoMemPool *mp; + int pindex, n_patches; + guint8 *p; + MonoJitInfo *jinfo = NULL; + guint8 *code, *info; + + code = &amodule->code [amodule->code_offsets [method_index]]; + info = &amodule->blob [mono_aot_get_offset (amodule->method_info_offsets, method_index)]; + + p = info; + + if (method) { + *klass = method->klass; + decode_klass_ref (amodule, p, &p); + } else { + *klass = decode_klass_ref (amodule, p, &p); + } + + n_patches = decode_value (p, &p); + + if (n_patches) { + MonoJumpInfo *patches; + guint32 *got_slots; + gboolean llvm; + gpointer *got; + + mp = mono_mempool_new (); + + if ((gpointer)code >= amodule->info.jit_code_start && (gpointer)code <= amodule->info.jit_code_end) { + llvm = FALSE; + got = amodule->got; + } else { + llvm = TRUE; + got = amodule->llvm_got; + g_assert (got); + } + + patches = load_patch_info (amodule, mp, n_patches, llvm, &got_slots, p, &p); + if (patches == NULL) + goto cleanup; + + for (pindex = 0; pindex < n_patches; ++pindex) { + MonoJumpInfo *ji = &patches [pindex]; + gpointer addr; + + /* + * For SFLDA, we need to call resolve_patch_target () since the GOT slot could have + * been initialized by load_method () for a static cctor before the cctor has + * finished executing (#23242). + */ + if (!got [got_slots [pindex]] || ji->type == MONO_PATCH_INFO_SFLDA) { + addr = mono_resolve_patch_target (method, domain, code, ji, TRUE); + if (ji->type == MONO_PATCH_INFO_METHOD_JUMP) + addr = mono_create_ftnptr (domain, addr); + mono_memory_barrier (); + got [got_slots [pindex]] = addr; + if (ji->type == MONO_PATCH_INFO_METHOD_JUMP) + register_jump_target_got_slot (domain, ji->data.method, &(got [got_slots [pindex]])); + } + ji->type = MONO_PATCH_INFO_NONE; + } + + g_free (got_slots); + + mono_mempool_destroy (mp); + } + + if (mini_get_debug_options ()->load_aot_jit_info_eagerly) + jinfo = mono_aot_find_jit_info (domain, amodule->assembly->image, code); + + return TRUE; + + cleanup: + if (jinfo) + g_free (jinfo); + + return FALSE; +} + /* * mono_aot_get_method: * @@ -4647,16 +4640,15 @@ get_new_trampoline_from_page (int tramp_type) return code; } mono_aot_page_unlock (); - psize = mono_pagesize (); /* the trampoline template page is in the mscorlib module */ image = mono_defaults.corlib; g_assert (image); + psize = MONO_AOT_TRAMP_PAGE_SIZE; + amodule = image->aot_module; g_assert (amodule); - g_assert (amodule->info.tramp_page_size == psize); - if (tramp_type == MONO_AOT_TRAMP_SPECIFIC) tpage = load_function (amodule, "specific_trampolines_page"); else if (tramp_type == MONO_AOT_TRAMP_STATIC_RGCTX) @@ -4738,7 +4730,7 @@ get_new_specific_trampoline_from_page (gpointer tramp, gpointer arg) code = get_new_trampoline_from_page (MONO_AOT_TRAMP_SPECIFIC); - data = (gpointer*)((char*)code - mono_pagesize ()); + data = (gpointer*)((char*)code - MONO_AOT_TRAMP_PAGE_SIZE); data [0] = arg; data [1] = tramp; /*g_warning ("new trampoline at %p for data %p, tramp %p (stored at %p)", code, arg, tramp, data);*/ @@ -4754,7 +4746,7 @@ get_new_rgctx_trampoline_from_page (gpointer tramp, gpointer arg) code = get_new_trampoline_from_page (MONO_AOT_TRAMP_STATIC_RGCTX); - data = (gpointer*)((char*)code - mono_pagesize ()); + data = (gpointer*)((char*)code - MONO_AOT_TRAMP_PAGE_SIZE); data [0] = arg; data [1] = tramp; /*g_warning ("new rgctx trampoline at %p for data %p, tramp %p (stored at %p)", code, arg, tramp, data);*/ @@ -4770,7 +4762,7 @@ get_new_imt_trampoline_from_page (gpointer arg) code = get_new_trampoline_from_page (MONO_AOT_TRAMP_IMT_THUNK); - data = (gpointer*)((char*)code - mono_pagesize ()); + data = (gpointer*)((char*)code - MONO_AOT_TRAMP_PAGE_SIZE); data [0] = arg; /*g_warning ("new imt trampoline at %p for data %p, (stored at %p)", code, arg, data);*/ return code; @@ -4785,7 +4777,7 @@ get_new_gsharedvt_arg_trampoline_from_page (gpointer tramp, gpointer arg) code = get_new_trampoline_from_page (MONO_AOT_TRAMP_GSHAREDVT_ARG); - data = (gpointer*)((char*)code - mono_pagesize ()); + data = (gpointer*)((char*)code - MONO_AOT_TRAMP_PAGE_SIZE); data [0] = arg; data [1] = tramp; /*g_warning ("new rgctx trampoline at %p for data %p, tramp %p (stored at %p)", code, arg, tramp, data);*/ diff --git a/mono/mini/aot-tests.cs b/mono/mini/aot-tests.cs index 7324fe21f37..17e3cfafee9 100644 --- a/mono/mini/aot-tests.cs +++ b/mono/mini/aot-tests.cs @@ -106,6 +106,7 @@ class Tests return 0; } + [Category ("DYNCALL")] [Category ("GSHAREDVT")] static int test_0_arm64_dyncall_gsharedvt_out_hfa_double () { /* gsharedvt out trampoline with double hfa argument */ @@ -124,6 +125,7 @@ class Tests return 0; } + [Category ("DYNCALL")] [Category ("GSHAREDVT")] static int test_0_arm64_dyncall_gsharedvt_out_hfa_float () { /* gsharedvt out trampoline with double hfa argument */ @@ -240,4 +242,19 @@ class Tests return 3; return 0; } + + enum AnEnum { + A = 0, + B = 1 + } + + public static int test_0_enum_eq_comparer () { + var c = EqualityComparer.Default; + return (!c.Equals (AnEnum.A, AnEnum.B) && c.Equals (AnEnum.A, AnEnum.A)) ? 0 : 1; + } + + public static int test_0_enum_comparer () { + var c = Comparer.Default; + return c.Compare (AnEnum.A, AnEnum.A); + } } diff --git a/mono/mini/cpu-arm.md b/mono/mini/cpu-arm.md index caf10c5552f..0d63141cf8a 100644 --- a/mono/mini/cpu-arm.md +++ b/mono/mini/cpu-arm.md @@ -357,7 +357,7 @@ long_conv_to_ovf_i4_2: dest:i src1:i src2:i len:36 vcall2: len:64 clob:c vcall2_reg: src1:i len:64 clob:c vcall2_membase: src1:b len:64 clob:c -dyn_call: src1:i src2:i len:120 clob:c +dyn_call: src1:i src2:i len:136 clob:c # This is different from the original JIT opcodes float_beq: len:32 diff --git a/mono/mini/decompose.c b/mono/mini/decompose.c index 25dd97da870..5a2fdde7d91 100644 --- a/mono/mini/decompose.c +++ b/mono/mini/decompose.c @@ -299,7 +299,7 @@ decompose_long_opcode (MonoCompile *cfg, MonoInst *ins, MonoInst **repl_ins) * Sets the cfg exception if an opcode is not supported. */ MonoInst* -mono_decompose_opcode (MonoCompile *cfg, MonoInst *ins, MonoBasicBlock **out_cbb) +mono_decompose_opcode (MonoCompile *cfg, MonoInst *ins) { MonoInst *repl = NULL; int type = ins->type; @@ -556,7 +556,7 @@ mono_decompose_opcode (MonoCompile *cfg, MonoInst *ins, MonoBasicBlock **out_cbb } } - call = mono_emit_jit_icall_by_info (cfg, info, args, out_cbb); + call = mono_emit_jit_icall_by_info (cfg, info, args); call->dreg = ins->dreg; NULLIFY_INS (ins); diff --git a/mono/mini/dwarfwriter.c b/mono/mini/dwarfwriter.c index b2c99a04ad7..decdd5ec10e 100644 --- a/mono/mini/dwarfwriter.c +++ b/mono/mini/dwarfwriter.c @@ -817,7 +817,9 @@ emit_all_line_number_info (MonoDwarfWriter *w) MethodLineNumberInfo *info = l->data; MonoDebugMethodJitInfo *dmji; - dmji = mono_debug_find_method (info->method, mono_domain_get ());; + dmji = mono_debug_find_method (info->method, mono_domain_get ()); + if (!dmji) + continue; emit_line_number_info (w, info->method, info->start_symbol, info->end_symbol, info->code, info->code_size, dmji); mono_debug_free_method_jit_info (dmji); } @@ -1643,8 +1645,12 @@ emit_line_number_info (MonoDwarfWriter *w, MonoMethod *method, prev_il_offset = il_offset; loc = mono_debug_symfile_lookup_location (minfo, il_offset); - if (!(loc && loc->source_file)) + if (!loc) + continue; + if (!loc->source_file) { + mono_debug_symfile_free_location (loc); continue; + } line_diff = (gint32)loc->row - (gint32)prev_line; addr_diff = i - prev_native_offset; @@ -1875,6 +1881,9 @@ mono_dwarf_writer_emit_method (MonoDwarfWriter *w, MonoCompile *cfg, MonoMethod int file_index = add_line_number_file_name (w, loc->source_file, 0, 0); emit_uleb128 (w, file_index + 1); emit_uleb128 (w, loc->row); + + mono_debug_symfile_free_location (loc); + loc = NULL; } else { emit_uleb128 (w, 0); emit_uleb128 (w, 0); diff --git a/mono/mini/exceptions-x86.c b/mono/mini/exceptions-x86.c index b9534ae395b..2a4aae744e1 100644 --- a/mono/mini/exceptions-x86.c +++ b/mono/mini/exceptions-x86.c @@ -12,6 +12,9 @@ #include #include #include +#ifdef HAVE_UCONTEXT_H +#include +#endif #include #include diff --git a/mono/mini/graph.c b/mono/mini/graph.c index d9b0adec2f1..fed90023204 100644 --- a/mono/mini/graph.c +++ b/mono/mini/graph.c @@ -336,10 +336,14 @@ mono_draw_graph (MonoCompile *cfg, MonoGraphOptions draw_options) fclose (fp); +#ifdef HAVE_SYSTEM //com = g_strdup_printf ("dot %s -Tpng -o %s.png; eog %s.png", fn, fn, fn); com = g_strdup_printf ("dot %s -Tps -o %s.ps;gv %s.ps", fn, fn, fn); _i = system (com); g_free (com); +#else + g_assert_not_reached (); +#endif } #endif /* DISABLE_JIT */ diff --git a/mono/mini/helpers.c b/mono/mini/helpers.c index b48962fd08d..65b234486b1 100644 --- a/mono/mini/helpers.c +++ b/mono/mini/helpers.c @@ -271,6 +271,7 @@ mono_disassemble_code (MonoCompile *cfg, guint8 *code, int size, char *id) close (i); #endif +#ifdef HAVE_SYSTEM cmd = g_strdup_printf (ARCH_PREFIX AS_CMD " %s -o %s", as_file, o_file); unused = system (cmd); g_free (cmd); @@ -292,6 +293,9 @@ mono_disassemble_code (MonoCompile *cfg, guint8 *code, int size, char *id) cmd = g_strdup_printf (ARCH_PREFIX DIS_CMD " %s %s", objdump_args, o_file); unused = system (cmd); g_free (cmd); +#else + g_assert_not_reached (); +#endif /* HAVE_SYSTEM */ #ifndef HOST_WIN32 unlink (o_file); diff --git a/mono/mini/ir-emit.h b/mono/mini/ir-emit.h index fe05ecca2d3..eeea8d93814 100644 --- a/mono/mini/ir-emit.h +++ b/mono/mini/ir-emit.h @@ -754,8 +754,8 @@ handle_gsharedvt_ldaddr (MonoCompile *cfg) (b)->real_offset = cfg->real_offset; \ } while (0) -/* Emit a one-way conditional branch */ -/* +/* + * Emit a one-way conditional branch and start a new bblock. * The inst_false_bb field of the cond branch will not be set, the JIT code should be * prepared to deal with this. */ diff --git a/mono/mini/jit-icalls.c b/mono/mini/jit-icalls.c index 1e94b262df7..9b05034f316 100644 --- a/mono/mini/jit-icalls.c +++ b/mono/mini/jit-icalls.c @@ -1285,3 +1285,15 @@ mono_generic_class_init (MonoVTable *vtable) { mono_runtime_class_init (vtable); } + +gpointer +mono_fill_class_rgctx (MonoVTable *vtable, int index) +{ + return mono_class_fill_runtime_generic_context (vtable, index); +} + +gpointer +mono_fill_method_rgctx (MonoMethodRuntimeGenericContext *mrgctx, int index) +{ + return mono_method_fill_runtime_generic_context (mrgctx, index); +} diff --git a/mono/mini/jit-icalls.h b/mono/mini/jit-icalls.h index 9ec1a4f60e7..d31e06e63c5 100644 --- a/mono/mini/jit-icalls.h +++ b/mono/mini/jit-icalls.h @@ -189,5 +189,9 @@ mono_gsharedvt_constrained_call (gpointer mp, MonoMethod *cmethod, MonoClass *kl void mono_gsharedvt_value_copy (gpointer dest, gpointer src, MonoClass *klass); +gpointer mono_fill_class_rgctx (MonoVTable *vtable, int index); + +gpointer mono_fill_method_rgctx (MonoMethodRuntimeGenericContext *mrgctx, int index); + #endif /* __MONO_JIT_ICALLS_H__ */ diff --git a/mono/mini/method-to-ir.c b/mono/mini/method-to-ir.c index d27e1fda45c..ff72fe750f2 100644 --- a/mono/mini/method-to-ir.c +++ b/mono/mini/method-to-ir.c @@ -144,7 +144,7 @@ int mono_op_to_op_imm_noemul (int opcode); MONO_API MonoInst* mono_emit_native_call (MonoCompile *cfg, gconstpointer func, MonoMethodSignature *sig, MonoInst **args); static int inline_method (MonoCompile *cfg, MonoMethod *cmethod, MonoMethodSignature *fsig, MonoInst **sp, - guchar *ip, guint real_offset, gboolean inline_always, MonoBasicBlock **out_cbb); + guchar *ip, guint real_offset, gboolean inline_always); /* helper methods signatures */ static MonoMethodSignature *helper_sig_class_init_trampoline; @@ -508,7 +508,7 @@ add_widen_op (MonoCompile *cfg, MonoInst *ins, MonoInst **arg1_ref, MonoInst **a 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), &bblock); \ + *sp++ = mono_decompose_opcode ((cfg), (ins)); \ } while (0) #define ADD_UNOP(op) do { \ @@ -519,7 +519,7 @@ add_widen_op (MonoCompile *cfg, MonoInst *ins, MonoInst **arg1_ref, MonoInst **a CHECK_TYPE (ins); \ (ins)->dreg = alloc_dreg ((cfg), (ins)->type); \ MONO_ADD_INS ((cfg)->cbb, (ins)); \ - *sp++ = mono_decompose_opcode (cfg, ins, &bblock); \ + *sp++ = mono_decompose_opcode (cfg, ins); \ } while (0) #define ADD_BINCOND(next_block) do { \ @@ -534,15 +534,15 @@ add_widen_op (MonoCompile *cfg, MonoInst *ins, MonoInst **arg1_ref, MonoInst **a 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); \ + link_bblock (cfg, cfg->cbb, tblock); \ ins->inst_true_bb = tblock; \ if ((next_block)) { \ - link_bblock (cfg, bblock, (next_block)); \ + link_bblock (cfg, cfg->cbb, (next_block)); \ ins->inst_false_bb = (next_block); \ start_new_bblock = 1; \ } else { \ GET_BBLOCK (cfg, tblock, ip); \ - link_bblock (cfg, bblock, tblock); \ + link_bblock (cfg, cfg->cbb, tblock); \ ins->inst_false_bb = tblock; \ start_new_bblock = 2; \ } \ @@ -550,8 +550,8 @@ add_widen_op (MonoCompile *cfg, MonoInst *ins, MonoInst **arg1_ref, MonoInst **a handle_stack_args (cfg, stack_start, sp - stack_start); \ CHECK_UNVERIFIABLE (cfg); \ } \ - MONO_ADD_INS (bblock, cmp); \ - MONO_ADD_INS (bblock, ins); \ + MONO_ADD_INS (cfg->cbb, cmp); \ + MONO_ADD_INS (cfg->cbb, ins); \ } while (0) /* * @@ -2966,7 +2966,7 @@ direct_icalls_enabled (MonoCompile *cfg) } MonoInst* -mono_emit_jit_icall_by_info (MonoCompile *cfg, MonoJitICallInfo *info, MonoInst **args, MonoBasicBlock **out_cbb) +mono_emit_jit_icall_by_info (MonoCompile *cfg, MonoJitICallInfo *info, MonoInst **args) { /* * Call the jit icall without a wrapper if possible. @@ -2993,7 +2993,7 @@ mono_emit_jit_icall_by_info (MonoCompile *cfg, MonoJitICallInfo *info, MonoInst * an exception check. */ costs = inline_method (cfg, info->wrapper_method, NULL, - args, NULL, cfg->real_offset, TRUE, out_cbb); + args, NULL, cfg->real_offset, TRUE); g_assert (costs > 0); g_assert (!MONO_TYPE_IS_VOID (info->sig->ret)); @@ -3368,6 +3368,12 @@ mini_emit_initobj (MonoCompile *cfg, MonoInst *dest, const guchar *ip, MonoClass } } +/* + * emit_get_rgctx: + * + * Emit IR to return either the this pointer for instance method, + * or the mrgctx for static methods. + */ static MonoInst* emit_get_rgctx (MonoCompile *cfg, MonoMethod *method, int context_used) { @@ -3432,10 +3438,106 @@ mono_patch_info_rgctx_entry_new (MonoMemPool *mp, MonoMethod *method, gboolean i return res; } +/* + * emit_rgctx_fetch: + * + * Emit IR to load the value of the rgctx entry ENTRY from the rgctx + * given by RGCTX. + */ static inline MonoInst* emit_rgctx_fetch (MonoCompile *cfg, MonoInst *rgctx, MonoJumpInfoRgctxEntry *entry) { + /* Inline version, not currently used */ + // FIXME: This can be called from mono_decompose_vtype_opts (), which can't create new bblocks +#if 0 + int i, slot, depth, index, rgctx_reg, val_reg, res_reg; + gboolean mrgctx; + MonoBasicBlock *is_null_bb, *end_bb; + MonoInst *res, *ins, *call; + MonoInst *args[16]; + + slot = mini_get_rgctx_entry_slot (entry); + + mrgctx = MONO_RGCTX_SLOT_IS_MRGCTX (slot); + index = MONO_RGCTX_SLOT_INDEX (slot); + if (mrgctx) + index += MONO_SIZEOF_METHOD_RUNTIME_GENERIC_CONTEXT / sizeof (gpointer); + for (depth = 0; ; ++depth) { + int size = mono_class_rgctx_get_array_size (depth, mrgctx); + + if (index < size - 1) + break; + index -= size - 1; + } + + NEW_BBLOCK (cfg, end_bb); + NEW_BBLOCK (cfg, is_null_bb); + + if (mrgctx) { + rgctx_reg = rgctx->dreg; + } else { + rgctx_reg = alloc_preg (cfg); + + MONO_EMIT_NEW_LOAD_MEMBASE (cfg, rgctx_reg, rgctx->dreg, MONO_STRUCT_OFFSET (MonoVTable, runtime_generic_context)); + // FIXME: Avoid this check by allocating the table when the vtable is created etc. + NEW_BBLOCK (cfg, is_null_bb); + + MONO_EMIT_NEW_BIALU_IMM (cfg, OP_COMPARE_IMM, -1, rgctx_reg, 0); + MONO_EMIT_NEW_BRANCH_BLOCK (cfg, OP_PBEQ, is_null_bb); + } + + for (i = 0; i < depth; ++i) { + int array_reg = alloc_preg (cfg); + + /* load ptr to next array */ + if (mrgctx && i == 0) + MONO_EMIT_NEW_LOAD_MEMBASE (cfg, array_reg, rgctx_reg, MONO_SIZEOF_METHOD_RUNTIME_GENERIC_CONTEXT); + else + MONO_EMIT_NEW_LOAD_MEMBASE (cfg, array_reg, rgctx_reg, 0); + rgctx_reg = array_reg; + /* is the ptr null? */ + MONO_EMIT_NEW_BIALU_IMM (cfg, OP_COMPARE_IMM, -1, rgctx_reg, 0); + /* if yes, jump to actual trampoline */ + MONO_EMIT_NEW_BRANCH_BLOCK (cfg, OP_PBEQ, is_null_bb); + } + + /* fetch slot */ + val_reg = alloc_preg (cfg); + MONO_EMIT_NEW_LOAD_MEMBASE (cfg, val_reg, rgctx_reg, (index + 1) * sizeof (gpointer)); + /* is the slot null? */ + MONO_EMIT_NEW_BIALU_IMM (cfg, OP_COMPARE_IMM, -1, val_reg, 0); + /* if yes, jump to actual trampoline */ + MONO_EMIT_NEW_BRANCH_BLOCK (cfg, OP_PBEQ, is_null_bb); + + /* Fastpath */ + res_reg = alloc_preg (cfg); + MONO_INST_NEW (cfg, ins, OP_MOVE); + ins->dreg = res_reg; + ins->sreg1 = val_reg; + MONO_ADD_INS (cfg->cbb, ins); + res = ins; + MONO_EMIT_NEW_BRANCH_BLOCK (cfg, OP_BR, end_bb); + + /* Slowpath */ + MONO_START_BB (cfg, is_null_bb); + args [0] = rgctx; + EMIT_NEW_ICONST (cfg, args [1], index); + if (mrgctx) + call = mono_emit_jit_icall (cfg, mono_fill_method_rgctx, args); + else + call = mono_emit_jit_icall (cfg, mono_fill_class_rgctx, args); + MONO_INST_NEW (cfg, ins, OP_MOVE); + ins->dreg = res_reg; + ins->sreg1 = call->dreg; + MONO_ADD_INS (cfg->cbb, ins); + MONO_EMIT_NEW_BRANCH_BLOCK (cfg, OP_BR, end_bb); + + MONO_START_BB (cfg, end_bb); + + return res; +#else return mono_emit_abs_call (cfg, MONO_PATCH_INFO_RGCTX_FETCH, entry, helper_sig_rgctx_lazy_fetch_trampoline, &rgctx); +#endif } static MonoInst* @@ -3619,14 +3721,12 @@ emit_get_gsharedvt_info_klass (MonoCompile *cfg, MonoClass *klass, MonoRgctxInfo * On return the caller must check @klass for load errors. */ static void -emit_generic_class_init (MonoCompile *cfg, MonoClass *klass, MonoBasicBlock **out_bblock) +emit_generic_class_init (MonoCompile *cfg, MonoClass *klass) { MonoInst *vtable_arg; int context_used; gboolean use_op_generic_class_init = FALSE; - *out_bblock = cfg->cbb; - context_used = mini_class_check_context_used (cfg, klass); if (context_used) { @@ -3680,18 +3780,19 @@ emit_generic_class_init (MonoCompile *cfg, MonoClass *klass, MonoBasicBlock **ou mono_emit_jit_icall (cfg, mono_generic_class_init, args); MONO_START_BB (cfg, inited_bb); - *out_bblock = inited_bb; } } static void -emit_class_init (MonoCompile *cfg, MonoClass *klass, MonoBasicBlock **out_bblock) +emit_class_init (MonoCompile *cfg, MonoClass *klass) { /* This could be used as a fallback if needed */ - //emit_generic_class_init (cfg, klass, out_bblock); - - *out_bblock = cfg->cbb; + if (cfg->compile_aot) { + /* With the overhead of plt entries, the inline version is comparable in size/speed */ + emit_generic_class_init (cfg, klass); + return; + } mono_emit_abs_call (cfg, MONO_PATCH_INFO_CLASS_INIT, klass, helper_sig_class_init_trampoline, NULL); } @@ -3710,7 +3811,7 @@ emit_seq_point (MonoCompile *cfg, MonoMethod *method, guint8* ip, gboolean intr_ } static void -save_cast_details (MonoCompile *cfg, MonoClass *klass, int obj_reg, gboolean null_check, MonoBasicBlock **out_bblock) +save_cast_details (MonoCompile *cfg, MonoClass *klass, int obj_reg, gboolean null_check) { if (mini_get_debug_options ()->better_cast_details) { int vtable_reg = alloc_preg (cfg); @@ -3750,11 +3851,8 @@ save_cast_details (MonoCompile *cfg, MonoClass *klass, int obj_reg, gboolean nul } MONO_EMIT_NEW_STORE_MEMBASE (cfg, OP_STORE_MEMBASE_REG, tls_get->dreg, MONO_STRUCT_OFFSET (MonoJitTlsData, class_cast_to), to_klass_reg); - if (null_check) { + if (null_check) MONO_START_BB (cfg, is_null_bb); - if (out_bblock) - *out_bblock = cfg->cbb; - } } } @@ -3782,7 +3880,7 @@ mini_emit_check_array_type (MonoCompile *cfg, MonoInst *obj, MonoClass *array_cl context_used = mini_class_check_context_used (cfg, array_class); - save_cast_details (cfg, array_class, obj->dreg, FALSE, NULL); + save_cast_details (cfg, array_class, obj->dreg, FALSE); MONO_EMIT_NEW_LOAD_MEMBASE_FAULT (cfg, vtable_reg, obj->dreg, MONO_STRUCT_OFFSET (MonoObject, vtable)); @@ -3899,7 +3997,7 @@ handle_unbox (MonoCompile *cfg, MonoClass *klass, MonoInst **sp, int context_use MONO_EMIT_NEW_BIALU (cfg, OP_COMPARE, -1, eclass_reg, element_class->dreg); MONO_EMIT_NEW_COND_EXC (cfg, NE_UN, "InvalidCastException"); } else { - save_cast_details (cfg, klass->element_class, obj_reg, FALSE, NULL); + save_cast_details (cfg, klass->element_class, obj_reg, FALSE); mini_emit_class_check (cfg, eclass_reg, klass->element_class); reset_cast_details (cfg); } @@ -3913,7 +4011,7 @@ handle_unbox (MonoCompile *cfg, MonoClass *klass, MonoInst **sp, int context_use } static MonoInst* -handle_unbox_gsharedvt (MonoCompile *cfg, MonoClass *klass, MonoInst *obj, MonoBasicBlock **out_cbb) +handle_unbox_gsharedvt (MonoCompile *cfg, MonoClass *klass, MonoInst *obj) { MonoInst *addr, *klass_inst, *is_ref, *args[16]; MonoBasicBlock *is_ref_bb, *is_nullable_bb, *end_bb; @@ -3987,8 +4085,6 @@ handle_unbox_gsharedvt (MonoCompile *cfg, MonoClass *klass, MonoInst *obj, MonoB /* LDOBJ */ EMIT_NEW_LOAD_MEMBASE_TYPE (cfg, ins, &klass->byval_arg, addr_reg, 0); - *out_cbb = cfg->cbb; - return ins; } @@ -4091,12 +4187,10 @@ handle_alloc (MonoCompile *cfg, MonoClass *klass, gboolean for_box, int context_ * Returns NULL and set the cfg exception on error. */ static MonoInst* -handle_box (MonoCompile *cfg, MonoInst *val, MonoClass *klass, int context_used, MonoBasicBlock **out_cbb) +handle_box (MonoCompile *cfg, MonoInst *val, MonoClass *klass, int context_used) { MonoInst *alloc, *ins; - *out_cbb = cfg->cbb; - if (mono_class_is_nullable (klass)) { MonoMethod* method = mono_class_get_method_from_name (klass, "Box", 1); @@ -4193,8 +4287,6 @@ handle_box (MonoCompile *cfg, MonoInst *val, MonoClass *klass, int context_used, MONO_START_BB (cfg, end_bb); - *out_cbb = cfg->cbb; - return res; } else { alloc = handle_alloc (cfg, klass, TRUE, context_used); @@ -4268,17 +4360,16 @@ icall_is_direct_callable (MonoCompile *cfg, MonoMethod *cmethod) #define is_complex_isinst(klass) ((klass->flags & TYPE_ATTRIBUTE_INTERFACE) || klass->rank || mono_class_is_nullable (klass) || mono_class_is_marshalbyref (klass) || (klass->flags & TYPE_ATTRIBUTE_SEALED) || klass->byval_arg.type == MONO_TYPE_VAR || klass->byval_arg.type == MONO_TYPE_MVAR) static MonoInst* -emit_castclass_with_cache (MonoCompile *cfg, MonoClass *klass, MonoInst **args, MonoBasicBlock **out_bblock) +emit_castclass_with_cache (MonoCompile *cfg, MonoClass *klass, MonoInst **args) { MonoMethod *mono_castclass; MonoInst *res; mono_castclass = mono_marshal_get_castclass_with_cache (); - save_cast_details (cfg, klass, args [0]->dreg, TRUE, out_bblock); + save_cast_details (cfg, klass, args [0]->dreg, TRUE); res = mono_emit_method_call (cfg, mono_castclass, args, NULL); reset_cast_details (cfg); - *out_bblock = cfg->cbb; return res; } @@ -4292,7 +4383,7 @@ get_castclass_cache_idx (MonoCompile *cfg) } static MonoInst* -emit_castclass_with_cache_nonshared (MonoCompile *cfg, MonoInst *obj, MonoClass *klass, MonoBasicBlock **out_bblock) +emit_castclass_with_cache_nonshared (MonoCompile *cfg, MonoInst *obj, MonoClass *klass) { MonoInst *args [3]; int idx; @@ -4312,31 +4403,26 @@ emit_castclass_with_cache_nonshared (MonoCompile *cfg, MonoInst *obj, MonoClass } /*The wrapper doesn't inline well so the bloat of inlining doesn't pay off.*/ - - return emit_castclass_with_cache (cfg, klass, args, out_bblock); + return emit_castclass_with_cache (cfg, klass, args); } /* * Returns NULL and set the cfg exception on error. */ static MonoInst* -handle_castclass (MonoCompile *cfg, MonoClass *klass, MonoInst *src, guint8 *ip, MonoBasicBlock **out_bb, int *inline_costs) +handle_castclass (MonoCompile *cfg, MonoClass *klass, MonoInst *src, guint8 *ip, int *inline_costs) { MonoBasicBlock *is_null_bb; int obj_reg = src->dreg; int vtable_reg = alloc_preg (cfg); int context_used; MonoInst *klass_inst = NULL, *res; - MonoBasicBlock *bblock; - - *out_bb = cfg->cbb; context_used = mini_class_check_context_used (cfg, klass); if (!context_used && mini_class_has_reference_variant_generic_argument (cfg, klass, context_used)) { - res = emit_castclass_with_cache_nonshared (cfg, src, klass, &bblock); + res = emit_castclass_with_cache_nonshared (cfg, src, klass); (*inline_costs) += 2; - *out_bb = cfg->cbb; return res; } else if (!context_used && (mono_class_is_marshalbyref (klass) || klass->flags & TYPE_ATTRIBUTE_INTERFACE)) { MonoMethod *mono_castclass; @@ -4346,9 +4432,9 @@ handle_castclass (MonoCompile *cfg, MonoClass *klass, MonoInst *src, guint8 *ip, mono_castclass = mono_marshal_get_castclass (klass); iargs [0] = src; - save_cast_details (cfg, klass, src->dreg, TRUE, &bblock); + save_cast_details (cfg, klass, src->dreg, TRUE); costs = inline_method (cfg, mono_castclass, mono_method_signature (mono_castclass), - iargs, ip, cfg->real_offset, TRUE, &bblock); + iargs, ip, cfg->real_offset, TRUE); reset_cast_details (cfg); CHECK_CFG_EXCEPTION; g_assert (costs > 0); @@ -4357,7 +4443,6 @@ handle_castclass (MonoCompile *cfg, MonoClass *klass, MonoInst *src, guint8 *ip, (*inline_costs) += costs; - *out_bb = cfg->cbb; return src; } @@ -4378,7 +4463,7 @@ handle_castclass (MonoCompile *cfg, MonoClass *klass, MonoInst *src, guint8 *ip, /* cache */ args [2] = cache_ins; - return emit_castclass_with_cache (cfg, klass, args, out_bb); + return emit_castclass_with_cache (cfg, klass, args); } klass_inst = emit_get_rgctx_klass (cfg, context_used, klass, MONO_RGCTX_INFO_KLASS); @@ -4389,7 +4474,7 @@ handle_castclass (MonoCompile *cfg, MonoClass *klass, MonoInst *src, guint8 *ip, MONO_EMIT_NEW_BIALU_IMM (cfg, OP_COMPARE_IMM, -1, obj_reg, 0); MONO_EMIT_NEW_BRANCH_BLOCK (cfg, OP_PBEQ, is_null_bb); - save_cast_details (cfg, klass, obj_reg, FALSE, NULL); + save_cast_details (cfg, klass, obj_reg, FALSE); if (klass->flags & TYPE_ATTRIBUTE_INTERFACE) { MONO_EMIT_NEW_LOAD_MEMBASE (cfg, vtable_reg, obj_reg, MONO_STRUCT_OFFSET (MonoObject, vtable)); @@ -4424,8 +4509,6 @@ handle_castclass (MonoCompile *cfg, MonoClass *klass, MonoInst *src, guint8 *ip, reset_cast_details (cfg); - *out_bb = cfg->cbb; - return src; exception_exit: @@ -4704,7 +4787,7 @@ handle_ccastclass (MonoCompile *cfg, MonoClass *klass, MonoInst *src) MONO_EMIT_NEW_BIALU_IMM (cfg, OP_COMPARE_IMM, -1, obj_reg, 0); MONO_EMIT_NEW_BRANCH_BLOCK (cfg, OP_PBEQ, ok_result_bb); - save_cast_details (cfg, klass, obj_reg, FALSE, NULL); + save_cast_details (cfg, klass, obj_reg, FALSE); if (klass->flags & TYPE_ATTRIBUTE_INTERFACE) { #ifndef DISABLE_REMOTING @@ -4814,10 +4897,10 @@ handle_enum_has_flag (MonoCompile *cfg, MonoClass *klass, MonoInst *enum_this, M ceq->type = STACK_I4; if (!is_i4) { - load = mono_decompose_opcode (cfg, load, NULL); - and = mono_decompose_opcode (cfg, and, NULL); - cmp = mono_decompose_opcode (cfg, cmp, NULL); - ceq = mono_decompose_opcode (cfg, ceq, NULL); + load = mono_decompose_opcode (cfg, load); + and = mono_decompose_opcode (cfg, and); + cmp = mono_decompose_opcode (cfg, cmp); + ceq = mono_decompose_opcode (cfg, ceq); } return ceq; @@ -4955,10 +5038,9 @@ handle_array_new (MonoCompile *cfg, int rank, MonoInst **sp, unsigned char *ip) */ static MonoInst* handle_constrained_gsharedvt_call (MonoCompile *cfg, MonoMethod *cmethod, MonoMethodSignature *fsig, MonoInst **sp, MonoClass *constrained_class, - gboolean *ref_emit_widen, MonoBasicBlock **ref_bblock) + gboolean *ref_emit_widen) { MonoInst *ins = NULL; - MonoBasicBlock *bblock = *ref_bblock; gboolean emit_widen = *ref_emit_widen; /* @@ -5015,7 +5097,7 @@ handle_constrained_gsharedvt_call (MonoCompile *cfg, MonoMethod *cmethod, MonoMe 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); + ins = handle_unbox_gsharedvt (cfg, mono_class_from_mono_type (fsig->ret), ins); } else if (MONO_TYPE_IS_PRIMITIVE (fsig->ret) || MONO_TYPE_ISSTRUCT (fsig->ret)) { MonoInst *add; @@ -5032,7 +5114,6 @@ handle_constrained_gsharedvt_call (MonoCompile *cfg, MonoMethod *cmethod, MonoMe } *ref_emit_widen = emit_widen; - *ref_bblock = bblock; return ins; @@ -5278,7 +5359,7 @@ mini_emit_ldelema_1_ins (MonoCompile *cfg, MonoClass *klass, MonoInst *arr, Mono g_assert (cfg->generic_sharing_context); context_used = mini_class_check_context_used (cfg, klass); g_assert (context_used); - rgctx_ins = emit_get_gsharedvt_info (cfg, &klass->byval_arg, MONO_RGCTX_INFO_ARRAY_ELEMENT_SIZE); + rgctx_ins = emit_get_gsharedvt_info_klass (cfg, klass, MONO_RGCTX_INFO_ARRAY_ELEMENT_SIZE); MONO_EMIT_NEW_BIALU (cfg, OP_IMUL, mult_reg, index2_reg, rgctx_ins->dreg); } else { MONO_EMIT_NEW_BIALU_IMM (cfg, OP_MUL_IMM, mult_reg, index2_reg, size); @@ -5546,10 +5627,12 @@ emit_array_unsafe_access (MonoCompile *cfg, MonoMethodSignature *fsig, MonoInst } static gboolean -is_unsafe_mov_compatible (MonoClass *param_klass, MonoClass *return_klass) +is_unsafe_mov_compatible (MonoCompile *cfg, MonoClass *param_klass, MonoClass *return_klass) { uint32_t align; + param_klass = mono_class_from_mono_type (mini_get_underlying_type (cfg, ¶m_klass->byval_arg)); + //Only allow for valuetypes if (!param_klass->valuetype || !return_klass->valuetype) return FALSE; @@ -5580,11 +5663,11 @@ emit_array_unsafe_mov (MonoCompile *cfg, MonoMethodSignature *fsig, MonoInst **a MonoClass *return_klass = mono_class_from_mono_type (fsig->ret); //Valuetypes that are semantically equivalent - if (is_unsafe_mov_compatible (param_klass, return_klass)) + if (is_unsafe_mov_compatible (cfg, param_klass, return_klass)) return args [0]; //Arrays of valuetypes that are semantically equivalent - if (param_klass->rank == 1 && return_klass->rank == 1 && is_unsafe_mov_compatible (param_klass->element_class, return_klass->element_class)) + if (param_klass->rank == 1 && return_klass->rank == 1 && is_unsafe_mov_compatible (cfg, param_klass->element_class, return_klass->element_class)) return args [0]; return NULL; @@ -5926,7 +6009,7 @@ mini_emit_inst_for_method (MonoCompile *cfg, MonoMethod *cmethod, MonoMethodSign } if (opcode == OP_LOADI8_MEMBASE) - ins = mono_decompose_opcode (cfg, ins, NULL); + ins = mono_decompose_opcode (cfg, ins); emit_memory_barrier (cfg, MONO_MEMORY_BARRIER_ACQ); @@ -5961,7 +6044,7 @@ mini_emit_inst_for_method (MonoCompile *cfg, MonoMethod *cmethod, MonoMethodSign MONO_ADD_INS (cfg->cbb, ins); if (opcode == OP_STOREI8_MEMBASE_REG) - ins = mono_decompose_opcode (cfg, ins, NULL); + ins = mono_decompose_opcode (cfg, ins); return ins; } @@ -6795,7 +6878,7 @@ emit_init_local (MonoCompile *cfg, int local, MonoType *type, gboolean init) */ static int inline_method (MonoCompile *cfg, MonoMethod *cmethod, MonoMethodSignature *fsig, MonoInst **sp, - guchar *ip, guint real_offset, gboolean inline_always, MonoBasicBlock **out_cbb) + guchar *ip, guint real_offset, gboolean inline_always) { MonoInst *ins, *rvar = NULL; MonoMethodHeader *cheader; @@ -6967,9 +7050,6 @@ inline_method (MonoCompile *cfg, MonoMethod *cmethod, MonoMethodSignature *fsig, cfg->cbb = ebblock; } - if (out_cbb) - *out_cbb = cfg->cbb; - if (rvar) { /* * If the inlined method contains only a throw, then the ret var is not @@ -7244,8 +7324,7 @@ get_original_method (MonoMethod *method) } static void -ensure_method_is_allowed_to_access_field (MonoCompile *cfg, MonoMethod *caller, MonoClassField *field, - MonoBasicBlock *bblock, unsigned char *ip) +ensure_method_is_allowed_to_access_field (MonoCompile *cfg, MonoMethod *caller, MonoClassField *field) { /* we can't get the coreclr security level on wrappers since they don't have the attributes */ MonoException *ex = mono_security_core_clr_is_field_access_allowed (get_original_method (caller), field); @@ -7254,8 +7333,7 @@ ensure_method_is_allowed_to_access_field (MonoCompile *cfg, MonoMethod *caller, } static void -ensure_method_is_allowed_to_call_method (MonoCompile *cfg, MonoMethod *caller, MonoMethod *callee, - MonoBasicBlock *bblock, unsigned char *ip) +ensure_method_is_allowed_to_call_method (MonoCompile *cfg, MonoMethod *caller, MonoMethod *callee) { /* we can't get the coreclr security level on wrappers since they don't have the attributes */ MonoException *ex = mono_security_core_clr_is_call_allowed (get_original_method (caller), callee); @@ -7567,15 +7645,12 @@ emit_managed_static_data_access (MonoCompile *cfg, MonoInst *thread_ins, int off * handle_ctor_call: * * Handle calls made to ctors from NEWOBJ opcodes. - * - * REF_BBLOCK will point to the current bblock after the call. */ static void handle_ctor_call (MonoCompile *cfg, MonoMethod *cmethod, MonoMethodSignature *fsig, int context_used, - MonoInst **sp, guint8 *ip, MonoBasicBlock **ref_bblock, int *inline_costs) + MonoInst **sp, guint8 *ip, int *inline_costs) { MonoInst *vtable_arg = NULL, *callvirt_this_arg = NULL, *ins; - MonoBasicBlock *bblock = *ref_bblock; if (cmethod->klass->valuetype && mono_class_generic_sharing_enabled (cmethod->klass) && mono_method_is_generic_sharable (cmethod, TRUE)) { @@ -7610,11 +7685,10 @@ handle_ctor_call (MonoCompile *cfg, MonoMethod *cmethod, MonoMethodSignature *fs !mono_class_is_subclass_of (cmethod->klass, mono_defaults.exception_class, FALSE)) { int costs; - if ((costs = inline_method (cfg, cmethod, fsig, sp, ip, cfg->real_offset, FALSE, &bblock))) { + if ((costs = inline_method (cfg, cmethod, fsig, sp, ip, cfg->real_offset, FALSE))) { cfg->real_offset += 5; *inline_costs += costs - 5; - *ref_bblock = bblock; } else { INLINE_FAILURE ("inline failure"); // FIXME-VT: Clean this up @@ -7659,7 +7733,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b { MonoError error; MonoInst *ins, **sp, **stack_start; - MonoBasicBlock *bblock, *tblock = NULL, *init_localsbb = NULL; + MonoBasicBlock *tblock = NULL, *init_localsbb = NULL; MonoSimpleBasicBlock *bb = NULL, *original_bb = NULL; MonoMethod *cmethod, *method_definition; MonoInst **arg_array; @@ -7958,18 +8032,18 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b } /* FIRST CODE BLOCK */ - NEW_BBLOCK (cfg, bblock); - bblock->cil_code = ip; - cfg->cbb = bblock; + NEW_BBLOCK (cfg, tblock); + tblock->cil_code = ip; + cfg->cbb = tblock; cfg->ip = ip; - ADD_BBLOCK (cfg, bblock); + ADD_BBLOCK (cfg, tblock); if (cfg->method == method) { breakpoint_id = mono_debugger_method_has_breakpoint (method); if (breakpoint_id) { MONO_INST_NEW (cfg, ins, OP_BREAK); - MONO_ADD_INS (bblock, ins); + MONO_ADD_INS (cfg->cbb, ins); } } @@ -7978,9 +8052,9 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b cfg->bb_init = init_localsbb; init_localsbb->real_offset = cfg->real_offset; start_bblock->next_bb = init_localsbb; - init_localsbb->next_bb = bblock; + init_localsbb->next_bb = cfg->cbb; link_bblock (cfg, start_bblock, init_localsbb); - link_bblock (cfg, init_localsbb, bblock); + link_bblock (cfg, init_localsbb, cfg->cbb); cfg->cbb = init_localsbb; @@ -8056,7 +8130,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b } if (cfg->method == method) - mono_debug_init_method (cfg, bblock, breakpoint_id); + mono_debug_init_method (cfg, cfg->cbb, breakpoint_id); for (n = 0; n < header->num_locals; ++n) { if (header->locals [n]->type == MONO_TYPE_VOID && !header->locals [n]->byref) @@ -8101,7 +8175,6 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b ins_flag = 0; start_new_bblock = 0; - cfg->cbb = bblock; while (ip < end) { if (cfg->method == method) cfg->real_offset = ip - header->code; @@ -8110,42 +8183,40 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b cfg->ip = ip; context_used = 0; - + if (start_new_bblock) { - bblock->cil_length = ip - bblock->cil_code; + cfg->cbb->cil_length = ip - cfg->cbb->cil_code; if (start_new_bblock == 2) { g_assert (ip == tblock->cil_code); } else { GET_BBLOCK (cfg, tblock, ip); } - bblock->next_bb = tblock; - bblock = tblock; - cfg->cbb = bblock; + cfg->cbb->next_bb = tblock; + cfg->cbb = tblock; start_new_bblock = 0; - for (i = 0; i < bblock->in_scount; ++i) { + for (i = 0; i < cfg->cbb->in_scount; ++i) { if (cfg->verbose_level > 3) - printf ("loading %d from temp %d\n", i, (int)bblock->in_stack [i]->inst_c0); - EMIT_NEW_TEMPLOAD (cfg, ins, bblock->in_stack [i]->inst_c0); + printf ("loading %d from temp %d\n", i, (int)cfg->cbb->in_stack [i]->inst_c0); + EMIT_NEW_TEMPLOAD (cfg, ins, cfg->cbb->in_stack [i]->inst_c0); *sp++ = ins; } if (class_inits) g_slist_free (class_inits); class_inits = NULL; } else { - if ((tblock = cfg->cil_offset_to_bb [ip - cfg->cil_start]) && (tblock != bblock)) { - link_bblock (cfg, bblock, tblock); + if ((tblock = cfg->cil_offset_to_bb [ip - cfg->cil_start]) && (tblock != cfg->cbb)) { + link_bblock (cfg, cfg->cbb, tblock); if (sp != stack_start) { handle_stack_args (cfg, stack_start, sp - stack_start); sp = stack_start; CHECK_UNVERIFIABLE (cfg); } - bblock->next_bb = tblock; - bblock = tblock; - cfg->cbb = bblock; - for (i = 0; i < bblock->in_scount; ++i) { + cfg->cbb->next_bb = tblock; + cfg->cbb = tblock; + for (i = 0; i < cfg->cbb->in_scount; ++i) { if (cfg->verbose_level > 3) - printf ("loading %d from temp %d\n", i, (int)bblock->in_stack [i]->inst_c0); - EMIT_NEW_TEMPLOAD (cfg, ins, bblock->in_stack [i]->inst_c0); + printf ("loading %d from temp %d\n", i, (int)cfg->cbb->in_stack [i]->inst_c0); + EMIT_NEW_TEMPLOAD (cfg, ins, cfg->cbb->in_stack [i]->inst_c0); *sp++ = ins; } g_slist_free (class_inits); @@ -8167,7 +8238,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b if (ip_offset + op_size == bb->end) { MONO_INST_NEW (cfg, ins, OP_NOP); - MONO_ADD_INS (bblock, ins); + MONO_ADD_INS (cfg->cbb, ins); start_new_bblock = 1; } @@ -8204,7 +8275,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b mono_bitset_set_fast (seq_point_set_locs, ip - header->code); } - bblock->real_offset = cfg->real_offset; + cfg->cbb->real_offset = cfg->real_offset; if ((cfg->method == method) && cfg->coverage_info) { guint32 cil_offset = ip - header->code; @@ -8223,7 +8294,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b } if (cfg->verbose_level > 3) - printf ("converting (in B%d: stack: %d) %s", bblock->block_num, (int)(sp - stack_start), mono_disasm_code_one (NULL, method, ip, NULL)); + printf ("converting (in B%d: stack: %d) %s", cfg->cbb->block_num, (int)(sp - stack_start), mono_disasm_code_one (NULL, method, ip, NULL)); switch (*ip) { case CEE_NOP: @@ -8240,7 +8311,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b else MONO_INST_NEW (cfg, ins, OP_NOP); ip++; - MONO_ADD_INS (bblock, ins); + MONO_ADD_INS (cfg->cbb, ins); break; case CEE_BREAK: if (should_insert_brekpoint (cfg->method)) { @@ -8249,7 +8320,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b MONO_INST_NEW (cfg, ins, OP_NOP); } ip++; - MONO_ADD_INS (bblock, ins); + MONO_ADD_INS (cfg->cbb, ins); break; case CEE_LDARG_0: case CEE_LDARG_1: @@ -8405,7 +8476,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b ins->dreg = alloc_dreg (cfg, STACK_I8); ++ip; ins->inst_l = (gint64)read64 (ip); - MONO_ADD_INS (bblock, ins); + MONO_ADD_INS (cfg->cbb, ins); ip += 8; *sp++ = ins; break; @@ -8438,7 +8509,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b ins->type = cfg->r4_stack_type; ins->dreg = alloc_dreg (cfg, STACK_R8); ins->inst_p0 = f; - MONO_ADD_INS (bblock, ins); + MONO_ADD_INS (cfg->cbb, ins); } ++ip; readr4 (ip, f); @@ -8475,7 +8546,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b ins->type = STACK_R8; ins->dreg = alloc_dreg (cfg, STACK_R8); ins->inst_p0 = d; - MONO_ADD_INS (bblock, ins); + MONO_ADD_INS (cfg->cbb, ins); } ++ip; readr8 (ip, d); @@ -8555,7 +8626,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b mono_arch_emit_call (cfg, call); cfg->param_area = MAX(cfg->param_area, call->stack_usage); - MONO_ADD_INS (bblock, (MonoInst*)call); + MONO_ADD_INS (cfg->cbb, (MonoInst*)call); } else { for (i = 0; i < num_args; ++i) /* Prevent arguments from being optimized away */ @@ -8564,7 +8635,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b MONO_INST_NEW_CALL (cfg, call, OP_JMP); ins = (MonoInst*)call; ins->inst_p0 = cmethod; - MONO_ADD_INS (bblock, ins); + MONO_ADD_INS (cfg->cbb, ins); } ip += 5; @@ -8760,7 +8831,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b } if (mono_security_core_clr_enabled ()) - ensure_method_is_allowed_to_call_method (cfg, method, cil_method, bblock, ip); + ensure_method_is_allowed_to_call_method (cfg, method, cil_method); if (!virtual && (cmethod->flags & METHOD_ATTRIBUTE_ABSTRACT)) /* MS.NET seems to silently convert this to a callvirt */ @@ -8838,7 +8909,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b } 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 { - ins = handle_constrained_gsharedvt_call (cfg, cmethod, fsig, sp, constrained_class, &emit_widen, &bblock); + ins = handle_constrained_gsharedvt_call (cfg, cmethod, fsig, sp, constrained_class, &emit_widen); CHECK_CFG_EXCEPTION; g_assert (ins); goto call_end; @@ -8895,13 +8966,13 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b MONO_START_BB (cfg, is_ref_bb); EMIT_NEW_LOAD_MEMBASE_TYPE (cfg, ins, &constrained_class->byval_arg, sp [0]->dreg, 0); ins->klass = constrained_class; - sp [0] = handle_box (cfg, ins, constrained_class, mono_class_check_context_used (constrained_class), &bblock); + sp [0] = handle_box (cfg, ins, constrained_class, mono_class_check_context_used (constrained_class)); ins = (MonoInst*)mono_emit_calli (cfg, fsig, sp, addr, NULL, NULL); MONO_EMIT_NEW_BRANCH_BLOCK (cfg, OP_BR, end_bb); MONO_START_BB (cfg, end_bb); - bblock = end_bb; + cfg->cbb = end_bb; nonbox_call->dreg = ins->dreg; } else { @@ -8918,7 +8989,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b */ EMIT_NEW_LOAD_MEMBASE_TYPE (cfg, ins, &constrained_class->byval_arg, sp [0]->dreg, 0); ins->klass = constrained_class; - sp [0] = handle_box (cfg, ins, constrained_class, mono_class_check_context_used (constrained_class), &bblock); + sp [0] = handle_box (cfg, ins, constrained_class, mono_class_check_context_used (constrained_class)); CHECK_CFG_EXCEPTION; } else if (!constrained_class->valuetype) { int dreg = alloc_ireg_ref (cfg); @@ -8952,7 +9023,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b /* Enum implements some interfaces, so treat this as the first case */ EMIT_NEW_LOAD_MEMBASE_TYPE (cfg, ins, &constrained_class->byval_arg, sp [0]->dreg, 0); ins->klass = constrained_class; - sp [0] = handle_box (cfg, ins, constrained_class, mono_class_check_context_used (constrained_class), &bblock); + sp [0] = handle_box (cfg, ins, constrained_class, mono_class_check_context_used (constrained_class)); CHECK_CFG_EXCEPTION; } } @@ -8968,7 +9039,6 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b delegate_invoke = TRUE; if ((cfg->opt & MONO_OPT_INTRINS) && (ins = mini_emit_inst_for_sharable_method (cfg, cmethod, fsig, sp))) { - bblock = cfg->cbb; if (!MONO_TYPE_IS_VOID (fsig->ret)) { type_to_eval_stack_type ((cfg), fsig->ret, ins); emit_widen = FALSE; @@ -8982,7 +9052,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b * might not get called after the call was patched. */ if (cfg->generic_sharing_context && cmethod->klass != method->klass && cmethod->klass->generic_class && mono_method_is_generic_sharable (cmethod, TRUE) && mono_class_needs_cctor_run (cmethod->klass, method)) { - emit_generic_class_init (cfg, cmethod->klass, &bblock); + emit_generic_class_init (cfg, cmethod->klass); CHECK_TYPELOAD (cmethod->klass); } @@ -9096,7 +9166,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b } else { this_temp = mono_compile_create_var (cfg, type_from_stack_type (sp [0]), OP_LOCAL); NEW_TEMPSTORE (cfg, store, this_temp->inst_c0, sp [0]); - MONO_ADD_INS (bblock, store); + MONO_ADD_INS (cfg->cbb, store); /* FIXME: This should be a managed pointer */ this_arg_temp = mono_compile_create_var (cfg, &mono_defaults.int_class->byval_arg, OP_LOCAL); @@ -9145,7 +9215,6 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b /* Conversion to a JIT intrinsic */ if ((cfg->opt & MONO_OPT_INTRINS) && (ins = mini_emit_inst_for_method (cfg, cmethod, fsig, sp))) { - bblock = cfg->cbb; if (!MONO_TYPE_IS_VOID (fsig->ret)) { type_to_eval_stack_type ((cfg), fsig->ret, ins); emit_widen = FALSE; @@ -9168,7 +9237,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b always = TRUE; } - costs = inline_method (cfg, cmethod, fsig, sp, ip, cfg->real_offset, always, &bblock); + costs = inline_method (cfg, cmethod, fsig, sp, ip, cfg->real_offset, always); if (costs) { cfg->real_offset += 5; @@ -9202,14 +9271,14 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b for (i = 0; i < n; ++i) EMIT_NEW_ARGSTORE (cfg, ins, i, sp [i]); MONO_INST_NEW (cfg, ins, OP_BR); - MONO_ADD_INS (bblock, ins); + MONO_ADD_INS (cfg->cbb, ins); tblock = start_bblock->out_bb [0]; - link_bblock (cfg, bblock, tblock); + link_bblock (cfg, cfg->cbb, tblock); ins->inst_target_bb = tblock; start_new_bblock = 1; /* skip the CEE_RET, too */ - if (ip_in_bb (cfg, bblock, ip + 5)) + if (ip_in_bb (cfg, cfg->cbb, ip + 5)) skip_ret = TRUE; push_res = FALSE; goto call_end; @@ -9302,7 +9371,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b /* Inline the wrapper */ wrapper = mono_marshal_get_native_wrapper (cmethod, TRUE, cfg->compile_aot); - costs = inline_method (cfg, wrapper, fsig, sp, ip, cfg->real_offset, TRUE, &bblock); + costs = inline_method (cfg, wrapper, fsig, sp, ip, cfg->real_offset, TRUE); g_assert (costs > 0); cfg->real_offset += 5; @@ -9403,8 +9472,8 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b ins = (MonoInst*)call; ins->inst_p0 = cmethod; ins->inst_p1 = arg_array [0]; - MONO_ADD_INS (bblock, ins); - link_bblock (cfg, bblock, end_bblock); + MONO_ADD_INS (cfg->cbb, ins); + link_bblock (cfg, cfg->cbb, end_bblock); start_new_bblock = 1; // FIXME: Eliminate unreachable epilogs @@ -9414,7 +9483,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b * only reachable from this call. */ GET_BBLOCK (cfg, tblock, ip + 5); - if (tblock == bblock || tblock->in_count == 0) + if (tblock == cfg->cbb || tblock->in_count == 0) skip_ret = TRUE; push_res = FALSE; @@ -9442,7 +9511,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b imt_arg, vtable_arg); if (tail_call) { - link_bblock (cfg, bblock, end_bblock); + link_bblock (cfg, cfg->cbb, end_bblock); start_new_bblock = 1; // FIXME: Eliminate unreachable epilogs @@ -9452,7 +9521,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b * only reachable from this call. */ GET_BBLOCK (cfg, tblock, ip + 5); - if (tblock == bblock || tblock->in_count == 0) + if (tblock == cfg->cbb || tblock->in_count == 0) skip_ret = TRUE; push_res = FALSE; } @@ -9576,8 +9645,8 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b MONO_INST_NEW (cfg, ins, OP_BR); ip++; ins->inst_target_bb = end_bblock; - MONO_ADD_INS (bblock, ins); - link_bblock (cfg, bblock, end_bblock); + MONO_ADD_INS (cfg->cbb, ins); + link_bblock (cfg, cfg->cbb, end_bblock); start_new_bblock = 1; break; case CEE_BR_S: @@ -9587,14 +9656,14 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b target = ip + 1 + (signed char)(*ip); ++ip; GET_BBLOCK (cfg, tblock, target); - link_bblock (cfg, bblock, tblock); + link_bblock (cfg, cfg->cbb, tblock); ins->inst_target_bb = tblock; if (sp != stack_start) { handle_stack_args (cfg, stack_start, sp - stack_start); sp = stack_start; CHECK_UNVERIFIABLE (cfg); } - MONO_ADD_INS (bblock, ins); + MONO_ADD_INS (cfg->cbb, ins); start_new_bblock = 1; inline_costs += BRANCH_COST; break; @@ -9628,7 +9697,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b target = ip + 4 + (gint32)read32(ip); ip += 4; GET_BBLOCK (cfg, tblock, target); - link_bblock (cfg, bblock, tblock); + link_bblock (cfg, cfg->cbb, tblock); ins->inst_target_bb = tblock; if (sp != stack_start) { handle_stack_args (cfg, stack_start, sp - stack_start); @@ -9636,7 +9705,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b CHECK_UNVERIFIABLE (cfg); } - MONO_ADD_INS (bblock, ins); + MONO_ADD_INS (cfg->cbb, ins); start_new_bblock = 1; inline_costs += BRANCH_COST; @@ -9661,9 +9730,9 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b sp--; GET_BBLOCK (cfg, tblock, target); - link_bblock (cfg, bblock, tblock); + link_bblock (cfg, cfg->cbb, tblock); GET_BBLOCK (cfg, tblock, ip); - link_bblock (cfg, bblock, tblock); + link_bblock (cfg, cfg->cbb, tblock); if (sp != stack_start) { handle_stack_args (cfg, stack_start, sp - stack_start); @@ -9682,16 +9751,16 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b ins->type = STACK_I8; ins->dreg = alloc_dreg (cfg, STACK_I8); ins->inst_l = 0; - MONO_ADD_INS (bblock, ins); + MONO_ADD_INS (cfg->cbb, ins); cmp->opcode = OP_LCOMPARE; cmp->sreg2 = ins->dreg; } #endif - MONO_ADD_INS (bblock, cmp); + MONO_ADD_INS (cfg->cbb, cmp); MONO_INST_NEW (cfg, ins, is_true ? CEE_BNE_UN : CEE_BEQ); type_from_op (cfg, ins, sp [0], NULL); - MONO_ADD_INS (bblock, ins); + MONO_ADD_INS (cfg->cbb, ins); ins->inst_many_bb = mono_mempool_alloc (cfg->mempool, sizeof(gpointer)*2); GET_BBLOCK (cfg, tblock, target); ins->inst_true_bb = tblock; @@ -9764,9 +9833,9 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b * Link the current bb with the targets as well, so handle_stack_args * will set their in_stack correctly. */ - link_bblock (cfg, bblock, default_bblock); + link_bblock (cfg, cfg->cbb, default_bblock); for (i = 0; i < n; ++i) - link_bblock (cfg, bblock, targets [i]); + link_bblock (cfg, cfg->cbb, targets [i]); handle_stack_args (cfg, stack_start, sp - stack_start); sp = stack_start; @@ -9775,10 +9844,9 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b MONO_EMIT_NEW_BIALU_IMM (cfg, OP_ICOMPARE_IMM, -1, src1->dreg, n); MONO_EMIT_NEW_BRANCH_BLOCK (cfg, OP_IBGE_UN, default_bblock); - bblock = cfg->cbb; for (i = 0; i < n; ++i) - link_bblock (cfg, bblock, targets [i]); + link_bblock (cfg, cfg->cbb, targets [i]); table = mono_mempool_alloc (cfg->mempool, sizeof (MonoJumpInfoBBTable)); table->table = targets; @@ -9868,7 +9936,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b if (*ip == CEE_LDIND_R4) ins->type = cfg->r4_stack_type; ins->flags |= ins_flag; - MONO_ADD_INS (bblock, ins); + MONO_ADD_INS (cfg->cbb, ins); *sp++ = ins; if (ins_flag & MONO_INST_VOLATILE) { /* Volatile loads have acquire semantics, see 12.6.7 in Ecma 335 */ @@ -9897,7 +9965,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b ins->flags |= ins_flag; ins_flag = 0; - MONO_ADD_INS (bblock, ins); + MONO_ADD_INS (cfg->cbb, ins); if (cfg->gen_write_barriers && *ip == CEE_STIND_REF && method->wrapper_type != MONO_WRAPPER_WRITE_BARRIER && !((sp [1]->opcode == OP_PCONST) && (sp [1]->inst_p0 == 0))) emit_write_barrier (cfg, sp [0], sp [1]); @@ -9931,7 +9999,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b MONO_ADD_INS ((cfg)->cbb, (ins)); - *sp++ = mono_decompose_opcode (cfg, ins, &bblock); + *sp++ = mono_decompose_opcode (cfg, ins); ip++; break; case CEE_ADD: @@ -9991,7 +10059,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b } MONO_ADD_INS ((cfg)->cbb, (ins)); - *sp++ = mono_decompose_opcode (cfg, ins, &bblock); + *sp++ = mono_decompose_opcode (cfg, ins); ip++; break; case CEE_NEG: @@ -10146,7 +10214,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b break; } - if ((loc_index != -1) && ip_in_bb (cfg, bblock, ip + 5)) { + if ((loc_index != -1) && ip_in_bb (cfg, cfg->cbb, ip + 5)) { CHECK_LOCAL (loc_index); EMIT_NEW_LOAD_MEMBASE_TYPE (cfg, ins, &klass->byval_arg, sp [0]->dreg, 0); @@ -10165,7 +10233,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b /* Optimize the ldobj+stobj combination */ /* The reference case ends up being a load+store anyway */ /* Skip this if the operation is volatile. */ - if (((ip [5] == CEE_STOBJ) && ip_in_bb (cfg, bblock, ip + 5) && read32 (ip + 6) == token) && !generic_class_is_reference_type (cfg, klass) && !(ins_flag & MONO_INST_VOLATILE)) { + if (((ip [5] == CEE_STOBJ) && ip_in_bb (cfg, cfg->cbb, ip + 5) && read32 (ip + 6) == token) && !generic_class_is_reference_type (cfg, klass) && !(ins_flag & MONO_INST_VOLATILE)) { CHECK_STACK (1); sp --; @@ -10223,7 +10291,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b *sp = mono_emit_jit_icall (cfg, mono_ldstr, iargs); mono_ldstr (cfg->domain, image, mono_metadata_token_index (n)); } else { - if (bblock->out_of_line) { + if (cfg->cbb->out_of_line) { MonoInst *iargs [2]; if (image == mono_defaults.corlib) { @@ -10244,7 +10312,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b if (cfg->compile_aot) { NEW_LDSTRCONST (cfg, ins, image, n); *sp = ins; - MONO_ADD_INS (bblock, ins); + MONO_ADD_INS (cfg->cbb, ins); } else { NEW_PCONST (cfg, ins, NULL); @@ -10254,7 +10322,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b OUT_OF_MEMORY_FAILURE; *sp = ins; - MONO_ADD_INS (bblock, ins); + MONO_ADD_INS (cfg->cbb, ins); } } } @@ -10285,10 +10353,10 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b context_used = mini_method_check_context_used (cfg, cmethod); if (mono_security_core_clr_enabled ()) - ensure_method_is_allowed_to_call_method (cfg, method, cmethod, bblock, ip); + ensure_method_is_allowed_to_call_method (cfg, method, cmethod); if (cfg->generic_sharing_context && cmethod && cmethod->klass != method->klass && cmethod->klass->generic_class && mono_method_is_generic_sharable (cmethod, TRUE) && mono_class_needs_cctor_run (cmethod->klass, method)) { - emit_generic_class_init (cfg, cmethod->klass, &bblock); + emit_generic_class_init (cfg, cmethod->klass); CHECK_TYPELOAD (cmethod->klass); } @@ -10306,7 +10374,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b * Generate smaller code for the common newobj instruction in * argument checking code. */ - if (bblock->out_of_line && cmethod->klass->image == mono_defaults.corlib && + if (cfg->cbb->out_of_line && cmethod->klass->image == mono_defaults.corlib && is_exception_class (cmethod->klass) && n <= 2 && ((n < 1) || (!fsig->params [0]->byref && fsig->params [0]->type == MONO_TYPE_STRING)) && ((n < 2) || (!fsig->params [1]->byref && fsig->params [1]->type == MONO_TYPE_STRING))) { @@ -10402,7 +10470,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b * As a workaround, we call class cctors before allocating objects. */ if (mini_field_access_needs_cctor_run (cfg, method, cmethod->klass, vtable) && !(g_slist_find (class_inits, cmethod->klass))) { - emit_class_init (cfg, cmethod->klass, &bblock); + emit_class_init (cfg, cmethod->klass); if (cfg->verbose_level > 2) printf ("class %s.%s needs init call for ctor\n", cmethod->klass->name_space, cmethod->klass->name); class_inits = g_slist_prepend (class_inits, cmethod->klass); @@ -10417,7 +10485,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b MONO_EMIT_NEW_UNALU (cfg, OP_NOT_NULL, -1, alloc->dreg); /* Now call the actual ctor */ - handle_ctor_call (cfg, cmethod, fsig, context_used, sp, ip, &bblock, &inline_costs); + handle_ctor_call (cfg, cmethod, fsig, context_used, sp, ip, &inline_costs); CHECK_CFG_EXCEPTION; } @@ -10446,7 +10514,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b if (sp [0]->type != STACK_OBJ) UNVERIFIED; - ins = handle_castclass (cfg, klass, *sp, ip, &bblock, &inline_costs); + ins = handle_castclass (cfg, klass, *sp, ip, &inline_costs); CHECK_CFG_EXCEPTION; *sp ++ = ins; @@ -10495,7 +10563,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b iargs [0] = sp [0]; costs = inline_method (cfg, mono_isinst, mono_method_signature (mono_isinst), - iargs, ip, cfg->real_offset, TRUE, &bblock); + iargs, ip, cfg->real_offset, TRUE); CHECK_CFG_EXCEPTION; g_assert (costs > 0); @@ -10509,7 +10577,6 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b else { ins = handle_isinst (cfg, klass, *sp, context_used); CHECK_CFG_EXCEPTION; - bblock = cfg->cbb; *sp ++ = ins; ip += 5; } @@ -10530,10 +10597,10 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b context_used = mini_class_check_context_used (cfg, klass); if (mini_is_gsharedvt_klass (cfg, klass)) { - res = handle_unbox_gsharedvt (cfg, klass, *sp, &bblock); + res = handle_unbox_gsharedvt (cfg, klass, *sp); inline_costs += 2; } else if (generic_class_is_reference_type (cfg, klass)) { - res = handle_castclass (cfg, klass, *sp, ip, &bblock, &inline_costs); + res = handle_castclass (cfg, klass, *sp, ip, &inline_costs); CHECK_CFG_EXCEPTION; } else if (mono_class_is_nullable (klass)) { res = handle_unbox_nullable (cfg, *sp, klass, context_used); @@ -10597,7 +10664,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b ip [5] == CEE_PREFIX1 && ip [6] == CEE_CONSTRAINED_ && ip [11] == CEE_CALLVIRT && - ip_in_bb (cfg, bblock, ip + 5 + 6 + 5) && + ip_in_bb (cfg, cfg->cbb, ip + 5 + 6 + 5) && mono_class_is_enum (klass) && (enum_class = mini_get_class (method, read32 (ip + 7), generic_context)) && (has_flag = mini_get_method (cfg, method, read32 (ip + 12), NULL, generic_context)) && @@ -10623,7 +10690,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b // FIXME: LLVM can't handle the inconsistent bb linking if (!mono_class_is_nullable (klass) && - ip + 5 < end && ip_in_bb (cfg, bblock, ip + 5) && + ip + 5 < end && ip_in_bb (cfg, cfg->cbb, ip + 5) && (ip [5] == CEE_BRTRUE || ip [5] == CEE_BRTRUE_S || ip [5] == CEE_BRFALSE || @@ -10635,7 +10702,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b ip += 5; if (cfg->verbose_level > 3) { - printf ("converting (in B%d: stack: %d) %s", bblock->block_num, (int)(sp - stack_start), mono_disasm_code_one (NULL, method, ip, NULL)); + printf ("converting (in B%d: stack: %d) %s", cfg->cbb->block_num, (int)(sp - stack_start), mono_disasm_code_one (NULL, method, ip, NULL)); printf ("\n"); } @@ -10693,7 +10760,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b break; } - *sp++ = handle_box (cfg, val, klass, context_used, &bblock); + *sp++ = handle_box (cfg, val, klass, context_used); CHECK_CFG_EXCEPTION; ip += 5; @@ -10785,12 +10852,12 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b /* if the class is Critical then transparent code cannot access it's fields */ if (!is_instance && mono_security_core_clr_enabled ()) - ensure_method_is_allowed_to_access_field (cfg, method, field, bblock, ip); + ensure_method_is_allowed_to_access_field (cfg, method, field); /* XXX this is technically required but, so far (SL2), no [SecurityCritical] types (not many exists) have any visible *instance* field (in fact there's a single case for a static field in Marshal) XXX if (mono_security_core_clr_enabled ()) - ensure_method_is_allowed_to_access_field (cfg, method, field, bblock, ip); + ensure_method_is_allowed_to_access_field (cfg, method, field); */ /* @@ -10838,7 +10905,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b if (cfg->opt & MONO_OPT_INLINE || cfg->compile_aot) { costs = inline_method (cfg, stfld_wrapper, mono_method_signature (stfld_wrapper), - iargs, ip, cfg->real_offset, TRUE, &bblock); + iargs, ip, cfg->real_offset, TRUE); CHECK_CFG_EXCEPTION; g_assert (costs > 0); @@ -10901,7 +10968,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b EMIT_NEW_ICONST (cfg, iargs [3], klass->valuetype ? field->offset - sizeof (MonoObject) : field->offset); if (cfg->opt & MONO_OPT_INLINE || cfg->compile_aot) { costs = inline_method (cfg, wrapper, mono_method_signature (wrapper), - iargs, ip, cfg->real_offset, TRUE, &bblock); + iargs, ip, cfg->real_offset, TRUE); CHECK_CFG_EXCEPTION; g_assert (costs > 0); @@ -11073,7 +11140,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b */ if (mono_class_needs_cctor_run (klass, method)) - emit_generic_class_init (cfg, klass, &bblock); + emit_generic_class_init (cfg, klass); /* * The pointer we're computing here is @@ -11112,7 +11179,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b if (!addr) { if (mini_field_access_needs_cctor_run (cfg, method, klass, vtable)) { if (!(g_slist_find (class_inits, klass))) { - emit_class_init (cfg, klass, &bblock); + emit_class_init (cfg, klass); if (cfg->verbose_level > 2) printf ("class %s.%s needs init call for %s\n", klass->name_space, klass->name, mono_field_get_name (field)); class_inits = g_slist_prepend (class_inits, klass); @@ -11320,7 +11387,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b ins->type = STACK_I4; ins->dreg = alloc_ireg (cfg); MONO_ADD_INS (cfg->cbb, ins); - *sp = mono_decompose_opcode (cfg, ins, &bblock); + *sp = mono_decompose_opcode (cfg, ins); } if (context_used) { @@ -11382,7 +11449,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b * for small sizes open code the memcpy * ensure the rva field is big enough */ - if ((cfg->opt & MONO_OPT_INTRINS) && ip + 6 < end && ip_in_bb (cfg, bblock, ip + 6) && (len_ins->opcode == OP_ICONST) && (data_ptr = initialize_array_data (method, cfg->compile_aot, ip, klass, len_ins->inst_c0, &data_size, &field_token))) { + if ((cfg->opt & MONO_OPT_INTRINS) && ip + 6 < end && ip_in_bb (cfg, cfg->cbb, ip + 6) && (len_ins->opcode == OP_ICONST) && (data_ptr = initialize_array_data (method, cfg->compile_aot, ip, klass, len_ins->inst_c0, &data_size, &field_token))) { MonoMethod *memcpy_method = get_memcpy_method (); MonoInst *iargs [3]; int add_reg = alloc_ireg_mp (cfg); @@ -11543,9 +11610,9 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b ins->sreg1 = sp [0]->dreg; ins->dreg = alloc_freg (cfg); ins->type = STACK_R8; - MONO_ADD_INS (bblock, ins); + MONO_ADD_INS (cfg->cbb, ins); - *sp++ = mono_decompose_opcode (cfg, ins, &bblock); + *sp++ = mono_decompose_opcode (cfg, ins); ++ip; break; @@ -11704,7 +11771,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b EMIT_NEW_TEMPLOAD (cfg, ins, vtvar->inst_c0); } else { - if ((ip + 5 < end) && ip_in_bb (cfg, bblock, ip + 5) && + if ((ip + 5 < end) && ip_in_bb (cfg, cfg->cbb, ip + 5) && ((ip [5] == CEE_CALL) || (ip [5] == CEE_CALLVIRT)) && (cmethod = mini_get_method (cfg, method, read32 (ip + 6), NULL, generic_context)) && (cmethod->klass == mono_defaults.systemtype_class) && @@ -11776,13 +11843,13 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b --sp; ins->sreg1 = sp [0]->dreg; ip++; - bblock->out_of_line = TRUE; - MONO_ADD_INS (bblock, ins); + cfg->cbb->out_of_line = TRUE; + MONO_ADD_INS (cfg->cbb, ins); MONO_INST_NEW (cfg, ins, OP_NOT_REACHED); - MONO_ADD_INS (bblock, ins); + MONO_ADD_INS (cfg->cbb, ins); sp = stack_start; - link_bblock (cfg, bblock, end_bblock); + link_bblock (cfg, cfg->cbb, end_bblock); start_new_bblock = 1; break; case CEE_ENDFINALLY: @@ -11790,7 +11857,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b if (sp != stack_start) emit_seq_point (cfg, method, ip, FALSE, FALSE); MONO_INST_NEW (cfg, ins, OP_ENDFINALLY); - MONO_ADD_INS (bblock, ins); + MONO_ADD_INS (cfg->cbb, ins); ip++; start_new_bblock = 1; @@ -11859,7 +11926,6 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b MONO_EMIT_NEW_UNALU (cfg, OP_THROW, -1, exc_ins->dreg); MONO_START_BB (cfg, dont_throw); - bblock = cfg->cbb; } } @@ -11871,12 +11937,12 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b clause = tmp->data; tblock = cfg->cil_offset_to_bb [clause->handler_offset]; g_assert (tblock); - link_bblock (cfg, bblock, tblock); + link_bblock (cfg, cfg->cbb, tblock); MONO_INST_NEW (cfg, ins, OP_CALL_HANDLER); ins->inst_target_bb = tblock; ins->inst_eh_block = clause; - MONO_ADD_INS (bblock, ins); - bblock->has_call_handler = 1; + MONO_ADD_INS (cfg->cbb, ins); + cfg->cbb->has_call_handler = 1; if (COMPILE_LLVM (cfg)) { MonoBasicBlock *target_bb; @@ -11893,9 +11959,9 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b } MONO_INST_NEW (cfg, ins, OP_BR); - MONO_ADD_INS (bblock, ins); + MONO_ADD_INS (cfg->cbb, ins); GET_BBLOCK (cfg, tblock, target); - link_bblock (cfg, bblock, tblock); + link_bblock (cfg, cfg->cbb, tblock); ins->inst_target_bb = tblock; start_new_bblock = 1; @@ -12135,8 +12201,8 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b MONO_INST_NEW (cfg, ins, OP_BR); ins->inst_target_bb = end_bblock; - MONO_ADD_INS (bblock, ins); - link_bblock (cfg, bblock, end_bblock); + MONO_ADD_INS (cfg->cbb, ins); + link_bblock (cfg, cfg->cbb, end_bblock); start_new_bblock = 1; ip += 6; break; @@ -12153,7 +12219,6 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b ins = handle_cisinst (cfg, klass, sp [0]); else ins = handle_ccastclass (cfg, klass, sp [0]); - bblock = cfg->cbb; *sp++ = ins; ip += 6; break; @@ -12162,7 +12227,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b case CEE_MONO_RESTORE_LMF: #ifdef MONO_ARCH_HAVE_LMF_OPS MONO_INST_NEW (cfg, ins, (ip [1] == CEE_MONO_SAVE_LMF) ? OP_SAVE_LMF : OP_RESTORE_LMF); - MONO_ADD_INS (bblock, ins); + MONO_ADD_INS (cfg->cbb, ins); cfg->need_lmf_area = TRUE; #endif ip += 2; @@ -12177,7 +12242,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b inline_costs += 10 * num_calls++; break; case CEE_MONO_NOT_TAKEN: - bblock->out_of_line = TRUE; + cfg->cbb->out_of_line = TRUE; ip += 2; break; case CEE_MONO_TLS: { @@ -12200,7 +12265,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b } } ins->type = STACK_PTR; - MONO_ADD_INS (bblock, ins); + MONO_ADD_INS (cfg->cbb, ins); *sp++ = ins; ip += 6; break; @@ -12225,7 +12290,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b sp -= 2; ins->sreg1 = sp [0]->dreg; ins->sreg2 = sp [1]->dreg; - MONO_ADD_INS (bblock, ins); + MONO_ADD_INS (cfg->cbb, ins); cfg->param_area = MAX (cfg->param_area, MONO_ARCH_DYN_CALL_PARAM_AREA); @@ -12284,10 +12349,8 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b ins = mono_emit_jit_icall (cfg, mono_jit_thread_attach, args); MONO_EMIT_NEW_UNALU (cfg, OP_MOVE, cfg->orig_domain_var->dreg, ins->dreg); - if (next_bb) { + if (next_bb) MONO_START_BB (cfg, next_bb); - bblock = cfg->cbb; - } ip += 2; break; } @@ -12363,7 +12426,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b cmp->opcode = OP_FCOMPARE; else cmp->opcode = OP_ICOMPARE; - MONO_ADD_INS (bblock, cmp); + MONO_ADD_INS (cfg->cbb, cmp); ins->type = STACK_I4; ins->dreg = alloc_dreg (cfg, ins->type); type_from_op (cfg, ins, arg1, arg2); @@ -12377,7 +12440,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b ins->sreg2 = cmp->sreg2; NULLIFY_INS (cmp); } - MONO_ADD_INS (bblock, ins); + MONO_ADD_INS (cfg->cbb, ins); *sp++ = ins; ip += 2; break; @@ -12403,12 +12466,12 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b METHOD_ACCESS_FAILURE (method, cil_method); if (mono_security_core_clr_enabled ()) - ensure_method_is_allowed_to_call_method (cfg, method, cmethod, bblock, ip); + ensure_method_is_allowed_to_call_method (cfg, method, cmethod); /* * Optimize the common case of ldftn+delegate creation */ - if ((sp > stack_start) && (ip + 6 + 5 < end) && ip_in_bb (cfg, bblock, ip + 6) && (ip [6] == CEE_NEWOBJ)) { + if ((sp > stack_start) && (ip + 6 + 5 < end) && ip_in_bb (cfg, cfg->cbb, ip + 6) && (ip [6] == CEE_NEWOBJ)) { MonoMethod *ctor_method = mini_get_method (cfg, method, read32 (ip + 7), NULL, generic_context); if (ctor_method && (ctor_method->klass->parent == mono_defaults.multicastdelegate_class)) { MonoInst *target_ins, *handle_ins; @@ -12424,7 +12487,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b target_ins = sp [-1]; if (mono_security_core_clr_enabled ()) - ensure_method_is_allowed_to_call_method (cfg, method, ctor_method, bblock, ip); + ensure_method_is_allowed_to_call_method (cfg, method, ctor_method); if (!(cmethod->flags & METHOD_ATTRIBUTE_STATIC)) { /*LAME IMPL: We must not add a null check for virtual invoke delegates.*/ @@ -12438,7 +12501,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b if (invoke_context_used == 0) { ip += 6; if (cfg->verbose_level > 3) - g_print ("converting (in B%d: stack: %d) %s", bblock->block_num, (int)(sp - stack_start), mono_disasm_code_one (NULL, method, ip, NULL)); + g_print ("converting (in B%d: stack: %d) %s", cfg->cbb->block_num, (int)(sp - stack_start), mono_disasm_code_one (NULL, method, ip, NULL)); if ((handle_ins = handle_delegate_ctor (cfg, ctor_method->klass, target_ins, cmethod, context_used, FALSE))) { sp --; *sp = handle_ins; @@ -12474,12 +12537,12 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b context_used = mini_method_check_context_used (cfg, cmethod); if (mono_security_core_clr_enabled ()) - ensure_method_is_allowed_to_call_method (cfg, method, cmethod, bblock, ip); + ensure_method_is_allowed_to_call_method (cfg, method, cmethod); /* * Optimize the common case of ldvirtftn+delegate creation */ - if ((sp > stack_start) && (ip + 6 + 5 < end) && ip_in_bb (cfg, bblock, ip + 6) && (ip [6] == CEE_NEWOBJ) && (ip > header->code && ip [-1] == CEE_DUP)) { + if ((sp > stack_start) && (ip + 6 + 5 < end) && ip_in_bb (cfg, cfg->cbb, ip + 6) && (ip [6] == CEE_NEWOBJ) && (ip > header->code && ip [-1] == CEE_DUP)) { MonoMethod *ctor_method = mini_get_method (cfg, method, read32 (ip + 7), NULL, generic_context); if (ctor_method && (ctor_method->klass->parent == mono_defaults.multicastdelegate_class)) { MonoInst *target_ins, *handle_ins; @@ -12496,13 +12559,13 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b target_ins = sp [-1]; if (mono_security_core_clr_enabled ()) - ensure_method_is_allowed_to_call_method (cfg, method, ctor_method, bblock, ip); + ensure_method_is_allowed_to_call_method (cfg, method, ctor_method); /* FIXME: SGEN support */ if (invoke_context_used == 0) { ip += 6; if (cfg->verbose_level > 3) - g_print ("converting (in B%d: stack: %d) %s", bblock->block_num, (int)(sp - stack_start), mono_disasm_code_one (NULL, method, ip, NULL)); + g_print ("converting (in B%d: stack: %d) %s", cfg->cbb->block_num, (int)(sp - stack_start), mono_disasm_code_one (NULL, method, ip, NULL)); if ((handle_ins = handle_delegate_ctor (cfg, ctor_method->klass, target_ins, cmethod, context_used, is_virtual))) { sp -= 2; *sp = handle_ins; @@ -12636,7 +12699,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b UNVERIFIED; MONO_INST_NEW (cfg, ins, OP_ENDFILTER); ins->sreg1 = (*sp)->dreg; - MONO_ADD_INS (bblock, ins); + MONO_ADD_INS (cfg->cbb, ins); start_new_bblock = 1; ip += 2; @@ -12766,7 +12829,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b } } - bblock->flags |= BB_EXCEPTION_UNSAFE; + cfg->cbb->flags |= BB_EXCEPTION_UNSAFE; if (handler_offset == -1) UNVERIFIED; @@ -12774,13 +12837,13 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b EMIT_NEW_TEMPLOAD (cfg, load, mono_find_exvar_for_offset (cfg, handler_offset)->inst_c0); MONO_INST_NEW (cfg, ins, OP_RETHROW); ins->sreg1 = load->dreg; - MONO_ADD_INS (bblock, ins); + MONO_ADD_INS (cfg->cbb, ins); MONO_INST_NEW (cfg, ins, OP_NOT_REACHED); - MONO_ADD_INS (bblock, ins); + MONO_ADD_INS (cfg->cbb, ins); sp = stack_start; - link_bblock (cfg, bblock, end_bblock); + link_bblock (cfg, cfg->cbb, end_bblock); start_new_bblock = 1; ip += 2; break; @@ -12859,16 +12922,16 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b if (start_new_bblock != 1) UNVERIFIED; - bblock->cil_length = ip - bblock->cil_code; - if (bblock->next_bb) { + cfg->cbb->cil_length = ip - cfg->cbb->cil_code; + if (cfg->cbb->next_bb) { /* This could already be set because of inlining, #693905 */ - MonoBasicBlock *bb = bblock; + MonoBasicBlock *bb = cfg->cbb; while (bb->next_bb) bb = bb->next_bb; bb->next_bb = end_bblock; } else { - bblock->next_bb = end_bblock; + cfg->cbb->next_bb = end_bblock; } if (cfg->method == method && cfg->domainvar) { diff --git a/mono/mini/mini-amd64.c b/mono/mini/mini-amd64.c index c1332ec3bc0..744b42be16f 100644 --- a/mono/mini/mini-amd64.c +++ b/mono/mini/mini-amd64.c @@ -7851,6 +7851,39 @@ get_delegate_invoke_impl (gboolean has_target, guint32 param_count, guint32 *cod return start; } +#define MAX_VIRTUAL_DELEGATE_OFFSET 32 + +static gpointer +get_delegate_virtual_invoke_impl (gboolean load_imt_reg, int offset, guint32 *code_len) +{ + guint8 *code, *start; + int size = 20; + + if (offset / sizeof (gpointer) > MAX_VIRTUAL_DELEGATE_OFFSET) + return NULL; + + start = code = mono_global_codeman_reserve (size); + + /* Replace the this argument with the target */ + amd64_mov_reg_reg (code, AMD64_RAX, AMD64_ARG_REG1, 8); + amd64_mov_reg_membase (code, AMD64_ARG_REG1, AMD64_RAX, MONO_STRUCT_OFFSET (MonoDelegate, target), 8); + + if (load_imt_reg) { + /* Load the IMT reg */ + amd64_mov_reg_membase (code, MONO_ARCH_IMT_REG, AMD64_RAX, MONO_STRUCT_OFFSET (MonoDelegate, method), 8); + } + + /* Load the vtable */ + amd64_mov_reg_membase (code, AMD64_RAX, AMD64_ARG_REG1, MONO_STRUCT_OFFSET (MonoObject, vtable), 8); + amd64_jump_membase (code, AMD64_RAX, offset); + mono_profiler_code_buffer_new (start, code - start, MONO_PROFILER_CODE_BUFFER_DELEGATE_INVOKE, NULL); + + if (code_len) + *code_len = code - start; + + return start; +} + /* * mono_arch_get_delegate_invoke_impls: * @@ -7876,6 +7909,18 @@ mono_arch_get_delegate_invoke_impls (void) g_free (tramp_name); } + for (i = 0; i < MAX_VIRTUAL_DELEGATE_OFFSET; ++i) { + code = get_delegate_virtual_invoke_impl (TRUE, i * SIZEOF_VOID_P, &code_len); + tramp_name = g_strdup_printf ("delegate_virtual_invoke_imt_%d", i); + res = g_slist_prepend (res, mono_tramp_info_create (tramp_name, code, code_len, NULL, NULL)); + g_free (tramp_name); + + code = get_delegate_virtual_invoke_impl (FALSE, i * SIZEOF_VOID_P, &code_len); + tramp_name = g_strdup_printf ("delegate_virtual_invoke_%d", i); + res = g_slist_prepend (res, mono_tramp_info_create (tramp_name, code, code_len, NULL, NULL)); + g_free (tramp_name); + } + return res; } @@ -7937,26 +7982,7 @@ mono_arch_get_delegate_invoke_impl (MonoMethodSignature *sig, gboolean has_targe gpointer mono_arch_get_delegate_virtual_invoke_impl (MonoMethodSignature *sig, MonoMethod *method, int offset, gboolean load_imt_reg) { - guint8 *code, *start; - int size = 20; - - start = code = mono_global_codeman_reserve (size); - - /* Replace the this argument with the target */ - amd64_mov_reg_reg (code, AMD64_RAX, AMD64_ARG_REG1, 8); - amd64_mov_reg_membase (code, AMD64_ARG_REG1, AMD64_RAX, MONO_STRUCT_OFFSET (MonoDelegate, target), 8); - - if (load_imt_reg) { - /* Load the IMT reg */ - amd64_mov_reg_membase (code, MONO_ARCH_IMT_REG, AMD64_RAX, MONO_STRUCT_OFFSET (MonoDelegate, method), 8); - } - - /* Load the vtable */ - amd64_mov_reg_membase (code, AMD64_RAX, AMD64_ARG_REG1, MONO_STRUCT_OFFSET (MonoObject, vtable), 8); - amd64_jump_membase (code, AMD64_RAX, offset); - mono_profiler_code_buffer_new (start, code - start, MONO_PROFILER_CODE_BUFFER_DELEGATE_INVOKE, NULL); - - return start; + return get_delegate_virtual_invoke_impl (load_imt_reg, offset, NULL); } void diff --git a/mono/mini/mini-arm.h b/mono/mini/mini-arm.h index eb53c982951..baeb61fe853 100644 --- a/mono/mini/mini-arm.h +++ b/mono/mini/mini-arm.h @@ -179,7 +179,7 @@ typedef struct { #define PARAM_REGS 4 -#define DYN_CALL_STACK_ARGS 6 +#define DYN_CALL_STACK_ARGS 10 typedef struct { mgreg_t regs [PARAM_REGS + DYN_CALL_STACK_ARGS]; @@ -270,7 +270,7 @@ typedef struct MonoCompileArch { #define MONO_ARCH_GSHARED_SUPPORTED 1 #define MONO_ARCH_DYN_CALL_SUPPORTED 1 -#define MONO_ARCH_DYN_CALL_PARAM_AREA 24 +#define MONO_ARCH_DYN_CALL_PARAM_AREA (DYN_CALL_STACK_ARGS * sizeof (mgreg_t)) #ifndef MONO_CROSS_COMPILE #define MONO_ARCH_SOFT_DEBUG_SUPPORTED 1 diff --git a/mono/mini/mini-exceptions.c b/mono/mini/mini-exceptions.c index bc7d73d8553..c43da613f60 100644 --- a/mono/mini/mini-exceptions.c +++ b/mono/mini/mini-exceptions.c @@ -38,6 +38,10 @@ #include #endif +#ifdef HAVE_SYS_PRCTL_H +#include +#endif + #include #include #include @@ -2214,7 +2218,15 @@ mono_handle_native_sigsegv (int signal, void *ctx, MONO_SIG_HANDLER_INFO_TYPE *i * it will deadlock. Call the syscall directly instead. */ pid = mono_runtime_syscall_fork (); - +#if defined (HAVE_PRCTL) && defined(PR_SET_PTRACER) + if (pid > 0) { + // Allow gdb to attach to the process even if ptrace_scope sysctl variable is set to + // a value other than 0 (the most permissive ptrace scope). Most modern Linux + // distributions set the scope to 1 which allows attaching only to direct children of + // the current process + prctl (PR_SET_PTRACER, pid, 0, 0, 0); + } +#endif if (pid == 0) { dup2 (STDERR_FILENO, STDOUT_FILENO); diff --git a/mono/mini/mini-generic-sharing.c b/mono/mini/mini-generic-sharing.c index fd7e005a82e..ed21c85287a 100644 --- a/mono/mini/mini-generic-sharing.c +++ b/mono/mini/mini-generic-sharing.c @@ -1002,8 +1002,7 @@ class_type_info (MonoDomain *domain, MonoClass *class, MonoRgctxInfoType info_ty static gboolean ji_is_gsharedvt (MonoJitInfo *ji) { - if (ji && ji->has_generic_jit_info && (mono_jit_info_get_generic_sharing_context (ji)->var_is_vt || - mono_jit_info_get_generic_sharing_context (ji)->mvar_is_vt)) + if (ji && ji->has_generic_jit_info && (mono_jit_info_get_generic_sharing_context (ji)->is_gsharedvt)) return TRUE; else return FALSE; @@ -1018,7 +1017,6 @@ typedef struct { gint32 vcall_offset; gpointer addr; MonoMethodSignature *sig, *gsig; - MonoGenericContext gsctx; } GSharedVtTrampInfo; static guint @@ -1037,8 +1035,7 @@ tramp_info_equal (gconstpointer a, gconstpointer b) /* The signatures should be internalized */ return tramp1->is_in == tramp2->is_in && tramp1->calli == tramp2->calli && tramp1->vcall_offset == tramp2->vcall_offset && - tramp1->addr == tramp2->addr && tramp1->sig == tramp2->sig && tramp1->gsig == tramp2->gsig && - tramp1->gsctx.class_inst == tramp2->gsctx.class_inst && tramp1->gsctx.method_inst == tramp2->gsctx.method_inst; + tramp1->addr == tramp2->addr && tramp1->sig == tramp2->sig && tramp1->gsig == tramp2->gsig; } /* @@ -1063,13 +1060,13 @@ mini_get_gsharedvt_wrapper (gboolean gsharedvt_in, gpointer addr, MonoMethodSign inited = TRUE; } + memset (&tinfo, 0, sizeof (tinfo)); tinfo.is_in = gsharedvt_in; tinfo.calli = calli; tinfo.vcall_offset = vcall_offset; tinfo.addr = addr; tinfo.sig = normal_sig; tinfo.gsig = gsharedvt_sig; - memcpy (&tinfo.gsctx, gsctx, sizeof (MonoGenericSharingContext)); domain_info = domain_jit_info (domain); @@ -1131,7 +1128,7 @@ mini_get_gsharedvt_wrapper (gboolean gsharedvt_in, gpointer addr, MonoMethodSign static gpointer instantiate_info (MonoDomain *domain, MonoRuntimeGenericContextInfoTemplate *oti, - MonoGenericContext *context, MonoClass *class, guint8 *caller) + MonoGenericContext *context, MonoClass *class) { gpointer data; gboolean temporary; @@ -1283,22 +1280,11 @@ instantiate_info (MonoDomain *domain, MonoRuntimeGenericContextInfoTemplate *oti MonoMethodSignature *gsig = oti->data; MonoMethodSignature *sig = data; gpointer addr; - MonoJitInfo *caller_ji; - MonoGenericJitInfo *gji; /* * This is an indirect call to the address passed by the caller in the rgctx reg. */ - //printf ("CALLI\n"); - - g_assert (caller); - caller_ji = mini_jit_info_table_find (mono_domain_get (), mono_get_addr_from_ftnptr (caller), NULL); - g_assert (caller_ji); - gji = mono_jit_info_get_generic_jit_info (caller_ji); - g_assert (gji); - - addr = mini_get_gsharedvt_wrapper (FALSE, NULL, sig, gsig, gji->generic_sharing_context, -1, TRUE); - + addr = mini_get_gsharedvt_wrapper (FALSE, NULL, sig, gsig, NULL, -1, TRUE); return addr; } case MONO_RGCTX_INFO_METHOD_GSHAREDVT_OUT_TRAMPOLINE: @@ -1307,10 +1293,9 @@ instantiate_info (MonoDomain *domain, MonoRuntimeGenericContextInfoTemplate *oti MonoMethodSignature *call_sig; MonoMethod *method; gpointer addr; - MonoJitInfo *caller_ji, *callee_ji; + MonoJitInfo *callee_ji; gboolean virtual = oti->info_type == MONO_RGCTX_INFO_METHOD_GSHAREDVT_OUT_TRAMPOLINE_VIRT; gint32 vcall_offset; - MonoGenericJitInfo *gji, *callee_gji = NULL; gboolean callee_gsharedvt; /* This is the original generic signature used by the caller */ @@ -1342,19 +1327,9 @@ instantiate_info (MonoDomain *domain, MonoRuntimeGenericContextInfoTemplate *oti vcall_offset = -1; } - g_assert (caller); - caller_ji = mini_jit_info_table_find (mono_domain_get (), mono_get_addr_from_ftnptr (caller), NULL); - g_assert (caller_ji); - gji = mono_jit_info_get_generic_jit_info (caller_ji); - g_assert (gji); - // FIXME: This loads information in the AOT case callee_ji = mini_jit_info_table_find (mono_domain_get (), mono_get_addr_from_ftnptr (addr), NULL); callee_gsharedvt = ji_is_gsharedvt (callee_ji); - if (callee_gsharedvt) { - callee_gji = mono_jit_info_get_generic_jit_info (callee_ji); - g_assert (callee_gji); - } /* * For gsharedvt calls made out of gsharedvt methods, the callee could end up being a gsharedvt method, or a normal @@ -1375,7 +1350,7 @@ instantiate_info (MonoDomain *domain, MonoRuntimeGenericContextInfoTemplate *oti sig = mono_method_signature (method); gsig = call_sig; - addr = mini_get_gsharedvt_wrapper (FALSE, addr, sig, gsig, gji->generic_sharing_context, vcall_offset, FALSE); + addr = mini_get_gsharedvt_wrapper (FALSE, addr, sig, gsig, NULL, vcall_offset, FALSE); #if 0 if (virtual) printf ("OUT-VCALL: %s\n", mono_method_full_name (method, TRUE)); @@ -1407,12 +1382,12 @@ instantiate_info (MonoDomain *domain, MonoRuntimeGenericContextInfoTemplate *oti sig = mono_method_signature (method); gsig = mono_method_signature (jinfo_get_method (callee_ji)); - addr = mini_get_gsharedvt_wrapper (TRUE, callee_ji->code_start, sig, gsig, callee_gji->generic_sharing_context, -1, FALSE); + addr = mini_get_gsharedvt_wrapper (TRUE, callee_ji->code_start, sig, gsig, NULL, -1, FALSE); sig = mono_method_signature (method); gsig = call_sig; - addr = mini_get_gsharedvt_wrapper (FALSE, addr, sig, gsig, gji->generic_sharing_context, -1, FALSE); + addr = mini_get_gsharedvt_wrapper (FALSE, addr, sig, gsig, NULL, -1, FALSE); //printf ("OUT-IN-RGCTX: %s\n", mono_method_full_name (method, TRUE)); } @@ -1451,7 +1426,7 @@ instantiate_info (MonoDomain *domain, MonoRuntimeGenericContextInfoTemplate *oti offset += size; break; default: - res->entries [i] = instantiate_info (domain, template, context, class, NULL); + res->entries [i] = instantiate_info (domain, template, context, class); break; } } @@ -1817,7 +1792,7 @@ alloc_rgctx_array (MonoDomain *domain, int n, gboolean is_mrgctx) } static gpointer -fill_runtime_generic_context (MonoVTable *class_vtable, MonoRuntimeGenericContext *rgctx, guint8 *caller, guint32 slot, +fill_runtime_generic_context (MonoVTable *class_vtable, MonoRuntimeGenericContext *rgctx, guint32 slot, MonoGenericInst *method_inst) { gpointer info; @@ -1872,7 +1847,7 @@ fill_runtime_generic_context (MonoVTable *class_vtable, MonoRuntimeGenericContex oti = class_get_rgctx_template_oti (get_shared_class (class), method_inst ? method_inst->type_argc : 0, slot, TRUE, TRUE, &do_free); /* This might take the loader lock */ - info = instantiate_info (domain, &oti, &context, class, caller); + info = instantiate_info (domain, &oti, &context, class); /* if (method_inst) @@ -1900,13 +1875,12 @@ fill_runtime_generic_context (MonoVTable *class_vtable, MonoRuntimeGenericContex /* * mono_class_fill_runtime_generic_context: * @class_vtable: a vtable - * @caller: caller method address * @slot: a slot index to be instantiated * * Instantiates a slot in the RGCTX, returning its value. */ gpointer -mono_class_fill_runtime_generic_context (MonoVTable *class_vtable, guint8 *caller, guint32 slot) +mono_class_fill_runtime_generic_context (MonoVTable *class_vtable, guint32 slot) { static gboolean inited = FALSE; static int num_alloced = 0; @@ -1931,7 +1905,7 @@ mono_class_fill_runtime_generic_context (MonoVTable *class_vtable, guint8 *calle mono_domain_unlock (domain); - info = fill_runtime_generic_context (class_vtable, rgctx, caller, slot, 0); + info = fill_runtime_generic_context (class_vtable, rgctx, slot, 0); DEBUG (printf ("get rgctx slot: %s %d -> %p\n", mono_type_full_name (&class_vtable->klass->byval_arg), slot, info)); @@ -1941,18 +1915,16 @@ mono_class_fill_runtime_generic_context (MonoVTable *class_vtable, guint8 *calle /* * mono_method_fill_runtime_generic_context: * @mrgctx: an MRGCTX - * @caller: caller method address * @slot: a slot index to be instantiated * * Instantiates a slot in the MRGCTX. */ gpointer -mono_method_fill_runtime_generic_context (MonoMethodRuntimeGenericContext *mrgctx, guint8* caller, guint32 slot) +mono_method_fill_runtime_generic_context (MonoMethodRuntimeGenericContext *mrgctx, guint32 slot) { gpointer info; - info = fill_runtime_generic_context (mrgctx->class_vtable, (MonoRuntimeGenericContext*)mrgctx, caller, slot, - mrgctx->method_inst); + info = fill_runtime_generic_context (mrgctx->class_vtable, (MonoRuntimeGenericContext*)mrgctx, slot, mrgctx->method_inst); return info; } @@ -2734,20 +2706,12 @@ mono_generic_sharing_cleanup (void) gboolean mini_type_var_is_vt (MonoCompile *cfg, MonoType *type) { - if (type->type == MONO_TYPE_VAR) { - if (cfg->generic_sharing_context->var_is_vt && cfg->generic_sharing_context->var_is_vt [type->data.generic_param->num]) - return TRUE; - else - return FALSE; - } else if (type->type == MONO_TYPE_MVAR) { - if (cfg->generic_sharing_context->mvar_is_vt && cfg->generic_sharing_context->mvar_is_vt [type->data.generic_param->num]) - return TRUE; - else - return FALSE; + if (type->type == MONO_TYPE_VAR || type->type == MONO_TYPE_MVAR) { + return type->data.generic_param->gshared_constraint && type->data.generic_param->gshared_constraint->type == MONO_TYPE_VALUETYPE; } else { g_assert_not_reached (); + return FALSE; } - return FALSE; } gboolean @@ -2955,14 +2919,21 @@ get_shared_type (MonoType *t, MonoType *type) k = mono_class_inflate_generic_class (gclass->container_class, &context); return get_shared_gparam (t, &k->byval_arg); + } else if (MONO_TYPE_ISSTRUCT (type)) { + return type; } - g_assert (!type->byref && (((type->type >= MONO_TYPE_BOOLEAN) && (type->type <= MONO_TYPE_R8)) || (type->type == MONO_TYPE_I) || (type->type == MONO_TYPE_U) || (type->type == MONO_TYPE_VALUETYPE && type->data.klass->enumtype))); - /* Create a type variable with a constraint which encodes which types can match it */ ttype = type->type; - if (type->type == MONO_TYPE_VALUETYPE) + if (type->type == MONO_TYPE_VALUETYPE) { ttype = mono_class_enum_basetype (type->data.klass)->type; + } else if (MONO_TYPE_IS_REFERENCE (type)) { + ttype = MONO_TYPE_OBJECT; + } else if (type->type == MONO_TYPE_VAR || type->type == MONO_TYPE_MVAR) { + if (type->data.generic_param->gshared_constraint) + return get_shared_gparam (t, type->data.generic_param->gshared_constraint); + ttype = MONO_TYPE_OBJECT; + } { MonoType t2; @@ -2992,18 +2963,11 @@ get_shared_inst (MonoGenericInst *inst, MonoGenericInst *shared_inst, MonoGeneri type_argv = g_new0 (MonoType*, inst->type_argc); for (i = 0; i < inst->type_argc; ++i) { - if (all_vt) { + if (all_vt || gsharedvt) { type_argv [i] = get_gsharedvt_type (shared_inst->type_argv [i]); - } else if ((MONO_TYPE_IS_REFERENCE (inst->type_argv [i]) || inst->type_argv [i]->type == MONO_TYPE_VAR || inst->type_argv [i]->type == MONO_TYPE_MVAR)) { - g_assert (shared_inst); - type_argv [i] = get_shared_gparam (shared_inst->type_argv [i], &mono_defaults.object_class->byval_arg); - } else if (partial) { + } else { /* These types match the ones in generic_inst_is_sharable () */ type_argv [i] = get_shared_type (shared_inst->type_argv [i], inst->type_argv [i]); - } else if (gsharedvt) { - type_argv [i] = get_gsharedvt_type (shared_inst->type_argv [i]); - } else { - type_argv [i] = inst->type_argv [i]; } } @@ -3073,6 +3037,8 @@ mini_get_shared_method_full (MonoMethod *method, gboolean all_vt, gboolean is_gs res = mono_class_inflate_generic_method_checked (declaring_method, &shared_context, &error); g_assert (mono_error_ok (&error)); /* FIXME don't swallow the error */ + //printf ("%s\n", mono_method_full_name (res, 1)); + return res; } @@ -3082,6 +3048,68 @@ mini_get_shared_method (MonoMethod *method) return mini_get_shared_method_full (method, FALSE, FALSE); } +int +mini_get_rgctx_entry_slot (MonoJumpInfoRgctxEntry *entry) +{ + guint32 slot = -1; + + switch (entry->data->type) { + case MONO_PATCH_INFO_CLASS: + slot = mono_method_lookup_or_register_info (entry->method, entry->in_mrgctx, &entry->data->data.klass->byval_arg, entry->info_type, mono_method_get_context (entry->method)); + break; + case MONO_PATCH_INFO_METHOD: + case MONO_PATCH_INFO_METHODCONST: + slot = mono_method_lookup_or_register_info (entry->method, entry->in_mrgctx, entry->data->data.method, entry->info_type, mono_method_get_context (entry->method)); + break; + case MONO_PATCH_INFO_FIELD: + slot = mono_method_lookup_or_register_info (entry->method, entry->in_mrgctx, entry->data->data.field, entry->info_type, mono_method_get_context (entry->method)); + break; + case MONO_PATCH_INFO_SIGNATURE: + slot = mono_method_lookup_or_register_info (entry->method, entry->in_mrgctx, entry->data->data.sig, entry->info_type, mono_method_get_context (entry->method)); + break; + case MONO_PATCH_INFO_GSHAREDVT_CALL: { + MonoJumpInfoGSharedVtCall *call_info = g_malloc0 (sizeof (MonoJumpInfoGSharedVtCall)); //mono_domain_alloc0 (domain, sizeof (MonoJumpInfoGSharedVtCall)); + + memcpy (call_info, entry->data->data.gsharedvt, sizeof (MonoJumpInfoGSharedVtCall)); + slot = mono_method_lookup_or_register_info (entry->method, entry->in_mrgctx, call_info, entry->info_type, mono_method_get_context (entry->method)); + break; + } + case MONO_PATCH_INFO_GSHAREDVT_METHOD: { + MonoGSharedVtMethodInfo *info; + MonoGSharedVtMethodInfo *oinfo = entry->data->data.gsharedvt_method; + int i; + + /* Make a copy into the domain mempool */ + info = g_malloc0 (sizeof (MonoGSharedVtMethodInfo)); //mono_domain_alloc0 (domain, sizeof (MonoGSharedVtMethodInfo)); + info->method = oinfo->method; + info->num_entries = oinfo->num_entries; + info->entries = g_malloc0 (sizeof (MonoRuntimeGenericContextInfoTemplate) * info->num_entries); + for (i = 0; i < oinfo->num_entries; ++i) { + MonoRuntimeGenericContextInfoTemplate *otemplate = &oinfo->entries [i]; + MonoRuntimeGenericContextInfoTemplate *template = &info->entries [i]; + + memcpy (template, otemplate, sizeof (MonoRuntimeGenericContextInfoTemplate)); + } + slot = mono_method_lookup_or_register_info (entry->method, entry->in_mrgctx, info, entry->info_type, mono_method_get_context (entry->method)); + break; + } + case MONO_PATCH_INFO_VIRT_METHOD: { + MonoJumpInfoVirtMethod *info; + MonoJumpInfoVirtMethod *oinfo = entry->data->data.virt_method; + + info = g_malloc0 (sizeof (MonoJumpInfoVirtMethod)); + memcpy (info, oinfo, sizeof (MonoJumpInfoVirtMethod)); + slot = mono_method_lookup_or_register_info (entry->method, entry->in_mrgctx, info, entry->info_type, mono_method_get_context (entry->method)); + break; + } + default: + g_assert_not_reached (); + break; + } + + return slot; +} + #if defined(ENABLE_GSHAREDVT) #include "../../../mono-extensions/mono/mini/mini-generic-sharing-gsharedvt.c" diff --git a/mono/mini/mini-ppc.c b/mono/mini/mini-ppc.c index 0cf56a986d5..72e64a2c169 100644 --- a/mono/mini/mini-ppc.c +++ b/mono/mini/mini-ppc.c @@ -2147,11 +2147,8 @@ mono_arch_decompose_opts (MonoCompile *cfg, MonoInst *ins) { switch (ins->opcode) { case OP_ICONV_TO_R_UN: { -#if G_BYTE_ORDER == G_BIG_ENDIAN + // This value is OK as-is for both big and little endian because of how it is stored static const guint64 adjust_val = 0x4330000000000000ULL; -#else - static const guint64 adjust_val = 0x0000000000003043ULL; -#endif int msw_reg = mono_alloc_ireg (cfg); int adj_reg = mono_alloc_freg (cfg); int tmp_reg = mono_alloc_freg (cfg); @@ -2162,8 +2159,14 @@ mono_arch_decompose_opts (MonoCompile *cfg, MonoInst *ins) basereg = mono_alloc_ireg (cfg); MONO_EMIT_NEW_BIALU_IMM (cfg, OP_IADD_IMM, basereg, cfg->frame_reg, offset); } +#if G_BYTE_ORDER == G_BIG_ENDIAN MONO_EMIT_NEW_STORE_MEMBASE (cfg, OP_STOREI4_MEMBASE_REG, basereg, offset, msw_reg); MONO_EMIT_NEW_STORE_MEMBASE (cfg, OP_STOREI4_MEMBASE_REG, basereg, offset + 4, ins->sreg1); +#else + // For little endian the words are reversed + MONO_EMIT_NEW_STORE_MEMBASE (cfg, OP_STOREI4_MEMBASE_REG, basereg, offset + 4, msw_reg); + MONO_EMIT_NEW_STORE_MEMBASE (cfg, OP_STOREI4_MEMBASE_REG, basereg, offset, ins->sreg1); +#endif MONO_EMIT_NEW_LOAD_R8 (cfg, adj_reg, &adjust_val); MONO_EMIT_NEW_LOAD_MEMBASE_OP (cfg, OP_LOADR8_MEMBASE, tmp_reg, basereg, offset); MONO_EMIT_NEW_BIALU (cfg, OP_FSUB, ins->dreg, tmp_reg, adj_reg); @@ -2213,7 +2216,11 @@ mono_arch_decompose_opts (MonoCompile *cfg, MonoInst *ins) MONO_EMIT_NEW_BIALU_IMM (cfg, OP_IADD_IMM, basereg, cfg->frame_reg, offset); } MONO_EMIT_NEW_STORE_MEMBASE (cfg, OP_STORER8_MEMBASE_REG, basereg, offset, ins->sreg1); +#if G_BYTE_ORDER == G_BIG_ENDIAN MONO_EMIT_NEW_LOAD_MEMBASE_OP (cfg, OP_LOADI4_MEMBASE, msw_reg, basereg, offset); +#else + MONO_EMIT_NEW_LOAD_MEMBASE_OP (cfg, OP_LOADI4_MEMBASE, msw_reg, basereg, offset+4); +#endif MONO_EMIT_NEW_UNALU (cfg, OP_CHECK_FINITE, -1, msw_reg); MONO_EMIT_NEW_UNALU (cfg, OP_FMOVE, ins->dreg, ins->sreg1); ins->opcode = OP_NOP; diff --git a/mono/mini/mini-ppc.h b/mono/mini/mini-ppc.h index dc83f788509..0c611f251a5 100644 --- a/mono/mini/mini-ppc.h +++ b/mono/mini/mini-ppc.h @@ -145,6 +145,7 @@ typedef struct MonoCompileArch { #define PPC_LAST_FPARG_REG ppc_f13 #define PPC_PASS_STRUCTS_BY_VALUE 1 #define PPC_THREAD_PTR_REG ppc_r13 +#define MONO_ARCH_HAVE_SIGCTX_TO_MONOCTX 1 #else #define PPC_RET_ADDR_OFFSET 4 #define PPC_STACK_PARAM_OFFSET 8 diff --git a/mono/mini/mini-runtime.c b/mono/mini/mini-runtime.c index 615d56bcc33..264a99cdc69 100644 --- a/mono/mini/mini-runtime.c +++ b/mono/mini/mini-runtime.c @@ -260,7 +260,7 @@ mono_print_method_from_ip (void *ip) gsctx = mono_jit_info_get_generic_sharing_context (ji); shared_type = ""; if (gsctx) { - if (gsctx->var_is_vt || gsctx->mvar_is_vt) + if (gsctx->is_gsharedvt) shared_type = "gsharedvt "; else shared_type = "gshared "; @@ -1591,62 +1591,7 @@ mono_resolve_patch_target (MonoMethod *method, MonoDomain *domain, guint8 *code, case MONO_PATCH_INFO_NONE: break; case MONO_PATCH_INFO_RGCTX_FETCH: { - MonoJumpInfoRgctxEntry *entry = patch_info->data.rgctx_entry; - guint32 slot = -1; - - switch (entry->data->type) { - case MONO_PATCH_INFO_CLASS: - slot = mono_method_lookup_or_register_info (entry->method, entry->in_mrgctx, &entry->data->data.klass->byval_arg, entry->info_type, mono_method_get_context (entry->method)); - break; - case MONO_PATCH_INFO_METHOD: - case MONO_PATCH_INFO_METHODCONST: - slot = mono_method_lookup_or_register_info (entry->method, entry->in_mrgctx, entry->data->data.method, entry->info_type, mono_method_get_context (entry->method)); - break; - case MONO_PATCH_INFO_FIELD: - slot = mono_method_lookup_or_register_info (entry->method, entry->in_mrgctx, entry->data->data.field, entry->info_type, mono_method_get_context (entry->method)); - break; - case MONO_PATCH_INFO_SIGNATURE: - slot = mono_method_lookup_or_register_info (entry->method, entry->in_mrgctx, entry->data->data.sig, entry->info_type, mono_method_get_context (entry->method)); - break; - case MONO_PATCH_INFO_GSHAREDVT_CALL: { - MonoJumpInfoGSharedVtCall *call_info = g_malloc0 (sizeof (MonoJumpInfoGSharedVtCall)); //mono_domain_alloc0 (domain, sizeof (MonoJumpInfoGSharedVtCall)); - - memcpy (call_info, entry->data->data.gsharedvt, sizeof (MonoJumpInfoGSharedVtCall)); - slot = mono_method_lookup_or_register_info (entry->method, entry->in_mrgctx, call_info, entry->info_type, mono_method_get_context (entry->method)); - break; - } - case MONO_PATCH_INFO_GSHAREDVT_METHOD: { - MonoGSharedVtMethodInfo *info; - MonoGSharedVtMethodInfo *oinfo = entry->data->data.gsharedvt_method; - int i; - - /* Make a copy into the domain mempool */ - info = g_malloc0 (sizeof (MonoGSharedVtMethodInfo)); //mono_domain_alloc0 (domain, sizeof (MonoGSharedVtMethodInfo)); - info->method = oinfo->method; - info->num_entries = oinfo->num_entries; - info->entries = g_malloc0 (sizeof (MonoRuntimeGenericContextInfoTemplate) * info->num_entries); - for (i = 0; i < oinfo->num_entries; ++i) { - MonoRuntimeGenericContextInfoTemplate *otemplate = &oinfo->entries [i]; - MonoRuntimeGenericContextInfoTemplate *template = &info->entries [i]; - - memcpy (template, otemplate, sizeof (MonoRuntimeGenericContextInfoTemplate)); - } - slot = mono_method_lookup_or_register_info (entry->method, entry->in_mrgctx, info, entry->info_type, mono_method_get_context (entry->method)); - break; - } - case MONO_PATCH_INFO_VIRT_METHOD: { - MonoJumpInfoVirtMethod *info; - MonoJumpInfoVirtMethod *oinfo = entry->data->data.virt_method; - - info = g_malloc0 (sizeof (MonoJumpInfoVirtMethod)); - memcpy (info, oinfo, sizeof (MonoJumpInfoVirtMethod)); - slot = mono_method_lookup_or_register_info (entry->method, entry->in_mrgctx, info, entry->info_type, mono_method_get_context (entry->method)); - break; - } - default: - g_assert_not_reached (); - break; - } + int slot = mini_get_rgctx_entry_slot (patch_info->data.rgctx_entry); target = mono_create_rgctx_lazy_fetch_trampoline (slot); break; @@ -1741,34 +1686,21 @@ mini_init_gsctx (MonoDomain *domain, MonoMemPool *mp, MonoGenericContext *contex if (context && context->class_inst) { inst = context->class_inst; - if (domain) - gsctx->var_is_vt = mono_domain_alloc0 (domain, sizeof (gboolean) * inst->type_argc); - else if (mp) - gsctx->var_is_vt = mono_mempool_alloc0 (mp, sizeof (gboolean) * inst->type_argc); - else - gsctx->var_is_vt = g_new0 (gboolean, inst->type_argc); - for (i = 0; i < inst->type_argc; ++i) { MonoType *type = inst->type_argv [i]; if (mini_is_gsharedvt_gparam (type)) - gsctx->var_is_vt [i] = TRUE; + gsctx->is_gsharedvt = TRUE; } } if (context && context->method_inst) { inst = context->method_inst; - if (domain) - gsctx->mvar_is_vt = mono_domain_alloc0 (domain, sizeof (gboolean) * inst->type_argc); - else if (mp) - gsctx->mvar_is_vt = mono_mempool_alloc0 (mp, sizeof (gboolean) * inst->type_argc); - else - gsctx->mvar_is_vt = g_new0 (gboolean, inst->type_argc); for (i = 0; i < inst->type_argc; ++i) { MonoType *type = inst->type_argv [i]; if (mini_is_gsharedvt_gparam (type)) - gsctx->mvar_is_vt [i] = TRUE; + gsctx->is_gsharedvt = TRUE; } } } @@ -2633,10 +2565,6 @@ mono_get_delegate_virtual_invoke_impl (MonoMethodSignature *sig, MonoMethod *met if (!method) return NULL; - /* FIXME Support more cases */ - if (mono_aot_only) - return NULL; - if (MONO_TYPE_ISSTRUCT (sig->ret)) return NULL; @@ -2674,7 +2602,17 @@ mono_get_delegate_virtual_invoke_impl (MonoMethodSignature *sig, MonoMethod *met if (cache [idx]) return cache [idx]; - return cache [idx] = mono_arch_get_delegate_virtual_invoke_impl (sig, method, offset, load_imt_reg); + /* FIXME Support more cases */ + if (mono_aot_only) { + char tramp_name [256]; + + sprintf (tramp_name, "delegate_virtual_invoke%s_%d", load_imt_reg ? "_imt" : "", offset / SIZEOF_VOID_P); + cache [idx] = mono_aot_get_trampoline (tramp_name); + g_assert (cache [idx]); + } else { + cache [idx] = mono_arch_get_delegate_virtual_invoke_impl (sig, method, offset, load_imt_reg); + } + return cache [idx]; } static gpointer @@ -3417,6 +3355,8 @@ register_icalls (void) register_icall (mono_object_castclass_with_cache, "mono_object_castclass_with_cache", "object object ptr ptr", FALSE); register_icall (mono_object_isinst_with_cache, "mono_object_isinst_with_cache", "object object ptr ptr", FALSE); register_icall (mono_generic_class_init, "mono_generic_class_init", "void ptr", FALSE); + register_icall (mono_fill_class_rgctx, "mono_class_fill_rgctx", "ptr ptr int", FALSE); + register_icall (mono_fill_method_rgctx, "mono_method_fill_rgctx", "ptr ptr int", FALSE); register_icall (mono_debugger_agent_user_break, "mono_debugger_agent_user_break", "void", FALSE); register_dyn_icall (mono_create_specific_trampoline (NULL, MONO_TRAMPOLINE_GENERIC_CLASS_INIT, mono_get_root_domain (), NULL), diff --git a/mono/mini/mini-trampolines.c b/mono/mini/mini-trampolines.c index 085f56141f9..a8ed7aad6a5 100644 --- a/mono/mini/mini-trampolines.c +++ b/mono/mini/mini-trampolines.c @@ -269,8 +269,7 @@ is_generic_method_definition (MonoMethod *m) gboolean mini_jit_info_is_gsharedvt (MonoJitInfo *ji) { - if (ji && ji->has_generic_jit_info && (mono_jit_info_get_generic_sharing_context (ji)->var_is_vt || - mono_jit_info_get_generic_sharing_context (ji)->mvar_is_vt)) + if (ji && ji->has_generic_jit_info && (mono_jit_info_get_generic_sharing_context (ji)->is_gsharedvt)) return TRUE; else return FALSE; @@ -957,9 +956,9 @@ mono_rgctx_lazy_fetch_trampoline (mgreg_t *regs, guint8 *code, gpointer data, gu num_lookups++; if (mrgctx) - return mono_method_fill_runtime_generic_context (arg, code, index); + return mono_method_fill_runtime_generic_context (arg, index); else - return mono_class_fill_runtime_generic_context (arg, code, index); + return mono_class_fill_runtime_generic_context (arg, index); } void @@ -1822,7 +1821,9 @@ mini_get_nullified_class_init_trampoline (void) MonoTrampInfo *info; if (mono_aot_only) { - tramp = mono_aot_get_trampoline ("nullified_class_init_trampoline"); + /* Not used */ + g_assert_not_reached (); + tramp = NULL; } else { tramp = mono_arch_get_nullified_class_init_trampoline (&info); mono_tramp_info_register (info); diff --git a/mono/mini/mini-x86.c b/mono/mini/mini-x86.c index 53e5d6fbbd1..b53f0a6bccf 100644 --- a/mono/mini/mini-x86.c +++ b/mono/mini/mini-x86.c @@ -6161,6 +6161,42 @@ get_delegate_invoke_impl (gboolean has_target, guint32 param_count, guint32 *cod return start; } +#define MAX_VIRTUAL_DELEGATE_OFFSET 32 + +static gpointer +get_delegate_virtual_invoke_impl (gboolean load_imt_reg, int offset, guint32 *code_size) +{ + guint8 *code, *start; + int size = 24; + + /* + * The stack contains: + * + * + */ + start = code = mono_global_codeman_reserve (size); + + /* Replace the this argument with the target */ + x86_mov_reg_membase (code, X86_EAX, X86_ESP, 4, 4); + x86_mov_reg_membase (code, X86_ECX, X86_EAX, MONO_STRUCT_OFFSET (MonoDelegate, target), 4); + x86_mov_membase_reg (code, X86_ESP, 4, X86_ECX, 4); + + if (load_imt_reg) { + /* Load the IMT reg */ + x86_mov_reg_membase (code, MONO_ARCH_IMT_REG, X86_EAX, MONO_STRUCT_OFFSET (MonoDelegate, method), 4); + } + + /* Load the vtable */ + x86_mov_reg_membase (code, X86_EAX, X86_ECX, MONO_STRUCT_OFFSET (MonoObject, vtable), 4); + x86_jump_membase (code, X86_EAX, offset); + mono_profiler_code_buffer_new (start, code - start, MONO_PROFILER_CODE_BUFFER_DELEGATE_INVOKE, NULL); + + if (code_size) + *code_size = code - start; + + return start; +} + GSList* mono_arch_get_delegate_invoke_impls (void) { @@ -6180,6 +6216,18 @@ mono_arch_get_delegate_invoke_impls (void) g_free (tramp_name); } + for (i = 0; i < MAX_VIRTUAL_DELEGATE_OFFSET; ++i) { + code = get_delegate_virtual_invoke_impl (TRUE, i * SIZEOF_VOID_P, &code_len); + tramp_name = g_strdup_printf ("delegate_virtual_invoke_imt_%d", i); + res = g_slist_prepend (res, mono_tramp_info_create (tramp_name, code, code_len, NULL, NULL)); + g_free (tramp_name); + + code = get_delegate_virtual_invoke_impl (FALSE, i * SIZEOF_VOID_P, &code_len); + tramp_name = g_strdup_printf ("delegate_virtual_invoke_%d", i); + res = g_slist_prepend (res, mono_tramp_info_create (tramp_name, code, code_len, NULL, NULL)); + g_free (tramp_name); + } + return res; } @@ -6245,32 +6293,7 @@ mono_arch_get_delegate_invoke_impl (MonoMethodSignature *sig, gboolean has_targe gpointer mono_arch_get_delegate_virtual_invoke_impl (MonoMethodSignature *sig, MonoMethod *method, int offset, gboolean load_imt_reg) { - guint8 *code, *start; - int size = 24; - - /* - * The stack contains: - * - * - */ - start = code = mono_global_codeman_reserve (size); - - /* Replace the this argument with the target */ - x86_mov_reg_membase (code, X86_EAX, X86_ESP, 4, 4); - x86_mov_reg_membase (code, X86_ECX, X86_EAX, MONO_STRUCT_OFFSET (MonoDelegate, target), 4); - x86_mov_membase_reg (code, X86_ESP, 4, X86_ECX, 4); - - if (load_imt_reg) { - /* Load the IMT reg */ - x86_mov_reg_membase (code, MONO_ARCH_IMT_REG, X86_EAX, MONO_STRUCT_OFFSET (MonoDelegate, method), 4); - } - - /* Load the vtable */ - x86_mov_reg_membase (code, X86_EAX, X86_ECX, MONO_STRUCT_OFFSET (MonoObject, vtable), 4); - x86_jump_membase (code, X86_EAX, offset); - mono_profiler_code_buffer_new (start, code - start, MONO_PROFILER_CODE_BUFFER_DELEGATE_INVOKE, NULL); - - return start; + return get_delegate_virtual_invoke_impl (load_imt_reg, offset, NULL); } mgreg_t diff --git a/mono/mini/mini.c b/mono/mini/mini.c index 98f4a155c77..be741a24906 100644 --- a/mono/mini/mini.c +++ b/mono/mini/mini.c @@ -3162,21 +3162,30 @@ mini_method_compile (MonoMethod *method, guint32 opts, MonoDomain *domain, JitFl if (MONO_METHOD_COMPILE_BEGIN_ENABLED ()) MONO_PROBE_METHOD_COMPILE_BEGIN (method); + gsharedvt_method = is_gsharedvt_method (method); + /* * In AOT mode, method can be the following: - * - the generic method definition. In this case, we are compiling the fully shared - * version of the method, i.e. the version where all the type parameters are - * reference types. * - a gsharedvt method. - * - a method inflated with type parameters. This is for partial sharing. + * - a method inflated with type parameters. This is for ref/partial sharing. * - a method inflated with concrete types. */ - if (compile_aot) - try_generic_shared = mono_class_generic_sharing_enabled (method->klass) && - (opts & MONO_OPT_GSHARED) && ((method->is_generic || method->klass->generic_container) || (!method->klass->generic_class && mono_method_is_generic_sharable_full (method, TRUE, FALSE, FALSE))); - else + if (compile_aot) { + if (is_open_method (method)) { + try_generic_shared = TRUE; + method_is_gshared = TRUE; + } else { + try_generic_shared = FALSE; + } + g_assert (opts & MONO_OPT_GSHARED); + } else { try_generic_shared = mono_class_generic_sharing_enabled (method->klass) && (opts & MONO_OPT_GSHARED) && mono_method_is_generic_sharable (method, FALSE); + if (mini_is_gsharedvt_sharable_method (method)) { + if (!mono_debug_count ()) + try_generic_shared = FALSE; + } + } /* if (try_generic_shared && !mono_debug_count ()) @@ -3190,21 +3199,6 @@ mini_method_compile (MonoMethod *method, guint32 opts, MonoDomain *domain, JitFl mono_stats.generics_unsharable_methods++; } - if (mini_is_gsharedvt_sharable_method (method)) { - if (!mono_debug_count ()) - try_generic_shared = FALSE; - if (compile_aot) - try_generic_shared = FALSE; - } - - gsharedvt_method = is_gsharedvt_method (method); - if (gsharedvt_method || (compile_aot && is_open_method (method))) { - /* We are AOTing a gshared method directly */ - method_is_gshared = TRUE; - g_assert (compile_aot); - try_generic_shared = TRUE; - } - #ifdef ENABLE_LLVM try_llvm = mono_use_llvm || llvm; #endif diff --git a/mono/mini/mini.h b/mono/mini/mini.h index a7b0533d7f6..752d55eb051 100644 --- a/mono/mini/mini.h +++ b/mono/mini/mini.h @@ -125,6 +125,8 @@ #define MONO_TYPE_IS_PRIMITIVE(t) ((!(t)->byref && ((((t)->type >= MONO_TYPE_BOOLEAN && (t)->type <= MONO_TYPE_R8) || ((t)->type >= MONO_TYPE_I && (t)->type <= MONO_TYPE_U))))) +#define MONO_AOT_TRAMP_PAGE_SIZE 16384 + /* Constants used to encode different types of methods in AOT */ enum { MONO_AOT_METHODREF_MIN = 240, @@ -2204,7 +2206,7 @@ MonoInst *mono_get_got_var (MonoCompile *cfg); void mono_add_seq_point (MonoCompile *cfg, MonoBasicBlock *bb, MonoInst *ins, int native_offset); void mono_add_var_location (MonoCompile *cfg, MonoInst *var, gboolean is_reg, int reg, int offset, int from, int to); MonoInst* mono_emit_jit_icall (MonoCompile *cfg, gconstpointer func, MonoInst **args); -MonoInst* mono_emit_jit_icall_by_info (MonoCompile *cfg, MonoJitICallInfo *info, MonoInst **args, MonoBasicBlock **out_cbb); +MonoInst* mono_emit_jit_icall_by_info (MonoCompile *cfg, MonoJitICallInfo *info, MonoInst **args); MonoInst* mono_emit_method_call (MonoCompile *cfg, MonoMethod *method, MonoInst **args, MonoInst *this); void mono_create_helper_signatures (void); @@ -2432,7 +2434,7 @@ int mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoB MonoInst *return_var, MonoInst **inline_args, guint inline_offset, gboolean is_virtual_call); -MonoInst *mono_decompose_opcode (MonoCompile *cfg, MonoInst *ins, MonoBasicBlock **out_cbb); +MonoInst *mono_decompose_opcode (MonoCompile *cfg, MonoInst *ins); void mono_decompose_long_opts (MonoCompile *cfg); void mono_decompose_vtype_opts (MonoCompile *cfg); void mono_decompose_vtype_opts_llvm (MonoCompile *cfg); @@ -2750,10 +2752,10 @@ gboolean mono_class_generic_sharing_enabled (MonoClass *class); gpointer -mono_class_fill_runtime_generic_context (MonoVTable *class_vtable, guint8 *caller, guint32 slot); +mono_class_fill_runtime_generic_context (MonoVTable *class_vtable, guint32 slot); gpointer -mono_method_fill_runtime_generic_context (MonoMethodRuntimeGenericContext *mrgctx, guint8 *caller, guint32 slot); +mono_method_fill_runtime_generic_context (MonoMethodRuntimeGenericContext *mrgctx, guint32 slot); MonoMethodRuntimeGenericContext* mono_method_lookup_rgctx (MonoVTable *class_vtable, MonoGenericInst *method_inst); @@ -2835,6 +2837,7 @@ MonoType* mini_type_get_underlying_type (MonoGenericSharingContext *gsctx, MonoT MonoMethod* mini_get_shared_method (MonoMethod *method); MonoMethod* mini_get_shared_method_to_register (MonoMethod *method); MonoMethod* mini_get_shared_method_full (MonoMethod *method, gboolean all_vt, gboolean is_gsharedvt); +int mini_get_rgctx_entry_slot (MonoJumpInfoRgctxEntry *entry); int mini_type_stack_size (MonoGenericSharingContext *gsctx, MonoType *t, int *align); int mini_type_stack_size_full (MonoGenericSharingContext *gsctx, MonoType *t, guint32 *align, gboolean pinvoke); diff --git a/mono/mini/trace.c b/mono/mini/trace.c index e0fa41e3be6..3ed9254036f 100644 --- a/mono/mini/trace.c +++ b/mono/mini/trace.c @@ -432,7 +432,7 @@ mono_trace_enter_method (MonoMethod *method, char *ebp) MonoJitInfo *ji = mini_jit_info_table_find (mono_domain_get (), RETURN_ADDRESS (), NULL); if (ji) { gsctx = mono_jit_info_get_generic_sharing_context (ji); - if (gsctx && (gsctx->var_is_vt || gsctx->mvar_is_vt)) { + if (gsctx && gsctx->is_gsharedvt) { /* Needs a ctx to get precise method */ printf (") \n"); return; @@ -590,7 +590,7 @@ mono_trace_leave_method (MonoMethod *method, ...) MonoJitInfo *ji = mini_jit_info_table_find (mono_domain_get (), RETURN_ADDRESS (), NULL); if (ji) { gsctx = mono_jit_info_get_generic_sharing_context (ji); - if (gsctx && (gsctx->var_is_vt || gsctx->mvar_is_vt)) { + if (gsctx && gsctx->is_gsharedvt) { /* Needs a ctx to get precise method */ printf (") \n"); return; diff --git a/mono/tests/Makefile.am b/mono/tests/Makefile.am index 60fd4038041..f350e4fa4be 100644 --- a/mono/tests/Makefile.am +++ b/mono/tests/Makefile.am @@ -458,6 +458,11 @@ if POWERPC PLATFORM_DISABLED_TESTS=finalizer-abort.exe finalizer-exception.exe finalizer-exit.exe endif +if POWERPC64 +# These tests hang +PLATFORM_DISABLED_TESTS=monitor.exe finalizer-abort.exe finalizer-exception.exe finalizer-exit.exe +endif + if ARM PLATFORM_DISABLED_TESTS=filter-stack.exe endif @@ -731,7 +736,7 @@ test-messages: else test-messages: w32message.exe > test_messages.zero - $(with_mono_path) $(JITTEST_PROG_RUN) w32message.exe >& w32message.allout && cmp test_messages.zero w32message.allout + $(with_mono_path) $(JITTEST_PROG_RUN) w32message.exe > w32message.allout 2>&1 && cmp test_messages.zero w32message.allout endif endif diff --git a/mono/tests/finalizer-exception.cs b/mono/tests/finalizer-exception.cs index 0e48d9081c0..71f4b4cc209 100644 --- a/mono/tests/finalizer-exception.cs +++ b/mono/tests/finalizer-exception.cs @@ -18,7 +18,8 @@ public class FinalizerException { int* values = stackalloc int [20]; aptr = new IntPtr (values); if (depth <= 0) { - new FinalizerException (); + for (int i = 0; i < 10; i++) + new FinalizerException (); return; } MakeException (depth - 1); diff --git a/mono/utils/mono-compiler.h b/mono/utils/mono-compiler.h index 322b9124be9..d06a2143a02 100644 --- a/mono/utils/mono-compiler.h +++ b/mono/utils/mono-compiler.h @@ -130,30 +130,43 @@ : "=r" (offset)) #endif #elif defined(__s390x__) -# if defined(PIC) +# if defined(__PIC__) +# if !defined(__PIE__) // This only works if libmono is linked into the application -# define MONO_THREAD_VAR_OFFSET(var,offset) do { guint64 foo; \ - __asm__ ("basr %%r1,0\n\t" \ - "j 0f\n\t" \ - ".quad " #var "@TLSGD\n\t" \ +# define MONO_THREAD_VAR_OFFSET(var,offset) do { guint64 foo; \ + __asm__ ("basr %%r1,0\n\t" \ + "j 0f\n\t" \ + ".quad " #var "@TLSGD\n" \ "0:\n\t" \ - "lg %%r2,4(%%r1)\n\t" \ + "lg %%r2,4(%%r1)\n\t" \ "brasl %%r14,__tls_get_offset@PLT:tls_gdcall:"#var"\n\t" \ "lgr %0,%%r2\n\t" \ : "=r" (foo) : \ : "1", "2", "14", "cc"); \ offset = foo; } while (0) +# elif __PIE__ == 1 +# define MONO_THREAD_VAR_OFFSET(var,offset) do { guint64 foo; \ + __asm__ ("lg %0," #var "@GOTNTPOFF(%%r12)\n\t" \ + : "=r" (foo)); \ + offset = foo; } while (0) +# elif __PIE__ == 2 +# define MONO_THREAD_VAR_OFFSET(var,offset) do { guint64 foo; \ + __asm__ ("larl %%r1," #var "@INDNTPOFF\n\t" \ + "lg %0,0(%%r1)\n\t" \ + : "=r" (foo) : \ + : "1", "cc"); \ + offset = foo; } while (0) +# endif # else -# define MONO_THREAD_VAR_OFFSET(var,offset) do { guint64 foo; \ - __asm__ ("basr %%r1,0\n\t" \ - "j 0f\n\t" \ - ".quad " #var "@NTPOFF\n" \ - "0:\n\t" \ - "lg %0,4(%%r1)\n\t" \ - : "=r" (foo) : : "1"); \ +# define MONO_THREAD_VAR_OFFSET(var,offset) do { guint64 foo; \ + __asm__ ("basr %%r1,0\n\t" \ + "j 0f\n\t" \ + ".quad " #var "@NTPOFF\n" \ + "0:\n\t" \ + "lg %0,4(%%r1)\n\t" \ + : "=r" (foo) : : "1"); \ offset = foo; } while (0) # endif - #else #define MONO_THREAD_VAR_OFFSET(var,offset) (offset) = -1 #endif diff --git a/mono/utils/mono-dl-darwin.c b/mono/utils/mono-dl-darwin.c index b1cd30f9045..ff7028555c1 100644 --- a/mono/utils/mono-dl-darwin.c +++ b/mono/utils/mono-dl-darwin.c @@ -50,4 +50,15 @@ mono_dl_get_executable_path (char *buf, int buflen) return -1; } +const char* +mono_dl_get_system_dir (void) +{ +#ifdef TARGET_IOS + /* IOS9 can't load system libraries using relative paths, i.e. 'libc' doesn't work, but '/usr/lib/libc' does. */ + return "/usr/lib"; +#else + return NULL; +#endif +} + #endif diff --git a/mono/utils/mono-dl-posix.c b/mono/utils/mono-dl-posix.c index be52a3e6e4c..09eed6222e2 100644 --- a/mono/utils/mono-dl-posix.c +++ b/mono/utils/mono-dl-posix.c @@ -47,6 +47,13 @@ mono_dl_get_executable_path (char *buf, int buflen) { return readlink ("/proc/self/exe", buf, buflen - 1); } + +const char* +mono_dl_get_system_dir (void) +{ + return NULL; +} + #endif void * diff --git a/mono/utils/mono-dl-windows.c b/mono/utils/mono-dl-windows.c index 5dabce44835..19ff818f733 100644 --- a/mono/utils/mono-dl-windows.c +++ b/mono/utils/mono-dl-windows.c @@ -159,4 +159,10 @@ mono_dl_get_executable_path (char *buf, int buflen) return -1; //TODO } +const char* +mono_dl_get_system_dir (void) +{ + return NULL; +} + #endif diff --git a/mono/utils/mono-dl.h b/mono/utils/mono-dl.h index c3c59c16078..1da98cb8e1d 100644 --- a/mono/utils/mono-dl.h +++ b/mono/utils/mono-dl.h @@ -43,6 +43,7 @@ void* mono_dl_lookup_symbol (MonoDl *module, const char *name); int mono_dl_convert_flags (int flags); char* mono_dl_current_error_string (void); int mono_dl_get_executable_path (char *buf, int buflen); +const char* mono_dl_get_system_dir (void); #endif /* __MONO_UTILS_DL_H__ */ diff --git a/mono/utils/mono-semaphore.c b/mono/utils/mono-semaphore.c index 4ac92196e07..6c857fe8239 100644 --- a/mono/utils/mono-semaphore.c +++ b/mono/utils/mono-semaphore.c @@ -55,22 +55,27 @@ mono_sem_timedwait (MonoSemType *sem, guint32 timeout_ms, gboolean alertable) #endif ts.tv_sec = timeout_ms / 1000 + t.tv_sec; ts.tv_nsec = (timeout_ms % 1000) * 1000000 + t.tv_usec * 1000; - while (ts.tv_nsec > NSEC_PER_SEC) { + while (ts.tv_nsec >= NSEC_PER_SEC) { ts.tv_nsec -= NSEC_PER_SEC; ts.tv_sec++; } copy = ts; - while ((res = WAIT_BLOCK (sem, &ts)) == -1 && errno == EINTR) { +#ifdef USE_MACH_SEMA + gettimeofday (&t, NULL); + while ((res = WAIT_BLOCK (sem, &ts)) == KERN_ABORTED) +#else + while ((res = WAIT_BLOCK (sem, &ts)) == -1 && errno == EINTR) +#endif + { +#ifdef USE_MACH_SEMA struct timeval current; +#endif if (alertable) return -1; + ts = copy; #ifdef USE_MACH_SEMA - memset (¤t, 0, sizeof (current)); -#else gettimeofday (¤t, NULL); -#endif - ts = copy; ts.tv_sec -= (current.tv_sec - t.tv_sec); ts.tv_nsec -= (current.tv_usec - t.tv_usec) * 1000; if (ts.tv_nsec < 0) { @@ -85,6 +90,7 @@ mono_sem_timedwait (MonoSemType *sem, guint32 timeout_ms, gboolean alertable) ts.tv_sec = 0; ts.tv_nsec = 0; } +#endif } /* OSX might return > 0 for error */ diff --git a/mono/utils/mono-threads.h b/mono/utils/mono-threads.h index dbf019cffaf..edbf934ac9b 100644 --- a/mono/utils/mono-threads.h +++ b/mono/utils/mono-threads.h @@ -88,7 +88,7 @@ and reduce the number of casts drastically. /* Logging - enable them below if you need specific logging for the category you need */ #define MOSTLY_ASYNC_SAFE_PRINTF(...) do { \ char __buff[1024]; __buff [0] = '\0'; \ - snprintf (__buff, sizeof (__buff), __VA_ARGS__); \ + g_snprintf (__buff, sizeof (__buff), __VA_ARGS__); \ write (1, __buff, strlen (__buff)); \ } while (0) diff --git a/msvc/scripts/order.xml b/msvc/scripts/order.xml index 1f002a42068..ec5a9a9c9fc 100644 --- a/msvc/scripts/order.xml +++ b/msvc/scripts/order.xml @@ -12,7 +12,7 @@ true - /codepage:65001 -unsafe -nostdlib -nowarn:612,618 -d:INSIDE_CORLIB,MONO_CULTURE_DATA -d:LIBC -d:FEATURE_PAL,GENERICS_WORK,FEATURE_LIST_PREDICATES,FEATURE_SERIALIZATION,FEATURE_ASCII,FEATURE_LATIN1,FEATURE_UTF7,FEATURE_UTF32,MONO_HYBRID_ENCODING_SUPPORT,FEATURE_ASYNC_IO,NEW_EXPERIMENTAL_ASYNC_IO,FEATURE_UTF32,FEATURE_EXCEPTIONDISPATCHINFO,FEATURE_CORRUPTING_EXCEPTIONS,FEATURE_EXCEPTION_NOTIFICATIONS,FEATURE_STRONGNAME_MIGRATION,FEATURE_USE_LCID,FEATURE_FUSION,FEATURE_CRYPTO,FEATURE_X509_SECURESTRINGS,FEATURE_SYNCHRONIZATIONCONTEXT,FEATURE_SYNCHRONIZATIONCONTEXT_WAIT -d:FEATURE_REMOTING,MONO_COM,FEATURE_COMINTEROP -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,FEATURE_SERIALIZATION,FEATURE_ASCII,FEATURE_LATIN1,FEATURE_UTF7,FEATURE_UTF32,MONO_HYBRID_ENCODING_SUPPORT,FEATURE_ASYNC_IO,NEW_EXPERIMENTAL_ASYNC_IO,FEATURE_UTF32,FEATURE_EXCEPTIONDISPATCHINFO,FEATURE_CORRUPTING_EXCEPTIONS,FEATURE_EXCEPTION_NOTIFICATIONS,FEATURE_STRONGNAME_MIGRATION,FEATURE_USE_LCID,FEATURE_FUSION,FEATURE_CRYPTO,FEATURE_X509_SECURESTRINGS,FEATURE_SYNCHRONIZATIONCONTEXT,FEATURE_SYNCHRONIZATIONCONTEXT_WAIT -d:FEATURE_REMOTING,MONO_COM,FEATURE_COMINTEROP -resource:resources/charinfo.nlp -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 + /codepage:65001 -unsafe -nostdlib -nowarn:612,618 -d:INSIDE_CORLIB,MONO_CULTURE_DATA -d:LIBC -d:FEATURE_PAL,GENERICS_WORK,FEATURE_LIST_PREDICATES,FEATURE_SERIALIZATION,FEATURE_ASCII,FEATURE_LATIN1,FEATURE_UTF7,FEATURE_UTF32,MONO_HYBRID_ENCODING_SUPPORT,FEATURE_ASYNC_IO,NEW_EXPERIMENTAL_ASYNC_IO,FEATURE_UTF32,FEATURE_EXCEPTIONDISPATCHINFO,FEATURE_CORRUPTING_EXCEPTIONS,FEATURE_EXCEPTION_NOTIFICATIONS,FEATURE_STRONGNAME_MIGRATION,FEATURE_USE_LCID,FEATURE_FUSION,FEATURE_CRYPTO,FEATURE_X509_SECURESTRINGS,FEATURE_SYNCHRONIZATIONCONTEXT,FEATURE_SYNCHRONIZATIONCONTEXT_WAIT -d:FEATURE_REMOTING,MONO_COM,FEATURE_COMINTEROP,FEATURE_ROLE_BASED_SECURITY -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,FEATURE_SERIALIZATION,FEATURE_ASCII,FEATURE_LATIN1,FEATURE_UTF7,FEATURE_UTF32,MONO_HYBRID_ENCODING_SUPPORT,FEATURE_ASYNC_IO,NEW_EXPERIMENTAL_ASYNC_IO,FEATURE_UTF32,FEATURE_EXCEPTIONDISPATCHINFO,FEATURE_CORRUPTING_EXCEPTIONS,FEATURE_EXCEPTION_NOTIFICATIONS,FEATURE_STRONGNAME_MIGRATION,FEATURE_USE_LCID,FEATURE_FUSION,FEATURE_CRYPTO,FEATURE_X509_SECURESTRINGS,FEATURE_SYNCHRONIZATIONCONTEXT,FEATURE_SYNCHRONIZATIONCONTEXT_WAIT -d:FEATURE_REMOTING,MONO_COM,FEATURE_COMINTEROP,FEATURE_ROLE_BASED_SECURITY -resource:resources/charinfo.nlp -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 mscorlib.dll ./../../class/lib/basic/mscorlib.dll @@ -72,7 +72,7 @@ true - /codepage:65001 -unsafe -nostdlib -nowarn:612,618 -d:INSIDE_CORLIB,MONO_CULTURE_DATA -d:LIBC -d:FEATURE_PAL,GENERICS_WORK,FEATURE_LIST_PREDICATES,FEATURE_SERIALIZATION,FEATURE_ASCII,FEATURE_LATIN1,FEATURE_UTF7,FEATURE_UTF32,MONO_HYBRID_ENCODING_SUPPORT,FEATURE_ASYNC_IO,NEW_EXPERIMENTAL_ASYNC_IO,FEATURE_UTF32,FEATURE_EXCEPTIONDISPATCHINFO,FEATURE_CORRUPTING_EXCEPTIONS,FEATURE_EXCEPTION_NOTIFICATIONS,FEATURE_STRONGNAME_MIGRATION,FEATURE_USE_LCID,FEATURE_FUSION,FEATURE_CRYPTO,FEATURE_X509_SECURESTRINGS,FEATURE_SYNCHRONIZATIONCONTEXT,FEATURE_SYNCHRONIZATIONCONTEXT_WAIT -d:FEATURE_REMOTING,MONO_COM,FEATURE_COMINTEROP -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,FEATURE_SERIALIZATION,FEATURE_ASCII,FEATURE_LATIN1,FEATURE_UTF7,FEATURE_UTF32,MONO_HYBRID_ENCODING_SUPPORT,FEATURE_ASYNC_IO,NEW_EXPERIMENTAL_ASYNC_IO,FEATURE_UTF32,FEATURE_EXCEPTIONDISPATCHINFO,FEATURE_CORRUPTING_EXCEPTIONS,FEATURE_EXCEPTION_NOTIFICATIONS,FEATURE_STRONGNAME_MIGRATION,FEATURE_USE_LCID,FEATURE_FUSION,FEATURE_CRYPTO,FEATURE_X509_SECURESTRINGS,FEATURE_SYNCHRONIZATIONCONTEXT,FEATURE_SYNCHRONIZATIONCONTEXT_WAIT -d:FEATURE_REMOTING,MONO_COM,FEATURE_COMINTEROP -resource:resources/charinfo.nlp -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 + /codepage:65001 -unsafe -nostdlib -nowarn:612,618 -d:INSIDE_CORLIB,MONO_CULTURE_DATA -d:LIBC -d:FEATURE_PAL,GENERICS_WORK,FEATURE_LIST_PREDICATES,FEATURE_SERIALIZATION,FEATURE_ASCII,FEATURE_LATIN1,FEATURE_UTF7,FEATURE_UTF32,MONO_HYBRID_ENCODING_SUPPORT,FEATURE_ASYNC_IO,NEW_EXPERIMENTAL_ASYNC_IO,FEATURE_UTF32,FEATURE_EXCEPTIONDISPATCHINFO,FEATURE_CORRUPTING_EXCEPTIONS,FEATURE_EXCEPTION_NOTIFICATIONS,FEATURE_STRONGNAME_MIGRATION,FEATURE_USE_LCID,FEATURE_FUSION,FEATURE_CRYPTO,FEATURE_X509_SECURESTRINGS,FEATURE_SYNCHRONIZATIONCONTEXT,FEATURE_SYNCHRONIZATIONCONTEXT_WAIT -d:FEATURE_REMOTING,MONO_COM,FEATURE_COMINTEROP,FEATURE_ROLE_BASED_SECURITY -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,FEATURE_SERIALIZATION,FEATURE_ASCII,FEATURE_LATIN1,FEATURE_UTF7,FEATURE_UTF32,MONO_HYBRID_ENCODING_SUPPORT,FEATURE_ASYNC_IO,NEW_EXPERIMENTAL_ASYNC_IO,FEATURE_UTF32,FEATURE_EXCEPTIONDISPATCHINFO,FEATURE_CORRUPTING_EXCEPTIONS,FEATURE_EXCEPTION_NOTIFICATIONS,FEATURE_STRONGNAME_MIGRATION,FEATURE_USE_LCID,FEATURE_FUSION,FEATURE_CRYPTO,FEATURE_X509_SECURESTRINGS,FEATURE_SYNCHRONIZATIONCONTEXT,FEATURE_SYNCHRONIZATIONCONTEXT_WAIT -d:FEATURE_REMOTING,MONO_COM,FEATURE_COMINTEROP,FEATURE_ROLE_BASED_SECURITY -resource:resources/charinfo.nlp -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 mscorlib.dll ./../../class/lib/build/mscorlib.dll @@ -242,7 +242,7 @@ true - /codepage:65001 -unsafe -nostdlib -nowarn:612,618 -d:INSIDE_CORLIB,MONO_CULTURE_DATA -d:LIBC -d:FEATURE_PAL,GENERICS_WORK,FEATURE_LIST_PREDICATES,FEATURE_SERIALIZATION,FEATURE_ASCII,FEATURE_LATIN1,FEATURE_UTF7,FEATURE_UTF32,MONO_HYBRID_ENCODING_SUPPORT,FEATURE_ASYNC_IO,NEW_EXPERIMENTAL_ASYNC_IO,FEATURE_UTF32,FEATURE_EXCEPTIONDISPATCHINFO,FEATURE_CORRUPTING_EXCEPTIONS,FEATURE_EXCEPTION_NOTIFICATIONS,FEATURE_STRONGNAME_MIGRATION,FEATURE_USE_LCID,FEATURE_FUSION,FEATURE_CRYPTO,FEATURE_X509_SECURESTRINGS,FEATURE_SYNCHRONIZATIONCONTEXT,FEATURE_SYNCHRONIZATIONCONTEXT_WAIT -d:FEATURE_REMOTING,MONO_COM,FEATURE_COMINTEROP -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,FEATURE_SERIALIZATION,FEATURE_ASCII,FEATURE_LATIN1,FEATURE_UTF7,FEATURE_UTF32,MONO_HYBRID_ENCODING_SUPPORT,FEATURE_ASYNC_IO,NEW_EXPERIMENTAL_ASYNC_IO,FEATURE_UTF32,FEATURE_EXCEPTIONDISPATCHINFO,FEATURE_CORRUPTING_EXCEPTIONS,FEATURE_EXCEPTION_NOTIFICATIONS,FEATURE_STRONGNAME_MIGRATION,FEATURE_USE_LCID,FEATURE_FUSION,FEATURE_CRYPTO,FEATURE_X509_SECURESTRINGS,FEATURE_SYNCHRONIZATIONCONTEXT,FEATURE_SYNCHRONIZATIONCONTEXT_WAIT -d:FEATURE_REMOTING,MONO_COM,FEATURE_COMINTEROP -resource:resources/charinfo.nlp -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 + /codepage:65001 -unsafe -nostdlib -nowarn:612,618 -d:INSIDE_CORLIB,MONO_CULTURE_DATA -d:LIBC -d:FEATURE_PAL,GENERICS_WORK,FEATURE_LIST_PREDICATES,FEATURE_SERIALIZATION,FEATURE_ASCII,FEATURE_LATIN1,FEATURE_UTF7,FEATURE_UTF32,MONO_HYBRID_ENCODING_SUPPORT,FEATURE_ASYNC_IO,NEW_EXPERIMENTAL_ASYNC_IO,FEATURE_UTF32,FEATURE_EXCEPTIONDISPATCHINFO,FEATURE_CORRUPTING_EXCEPTIONS,FEATURE_EXCEPTION_NOTIFICATIONS,FEATURE_STRONGNAME_MIGRATION,FEATURE_USE_LCID,FEATURE_FUSION,FEATURE_CRYPTO,FEATURE_X509_SECURESTRINGS,FEATURE_SYNCHRONIZATIONCONTEXT,FEATURE_SYNCHRONIZATIONCONTEXT_WAIT -d:FEATURE_REMOTING,MONO_COM,FEATURE_COMINTEROP,FEATURE_ROLE_BASED_SECURITY -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,FEATURE_SERIALIZATION,FEATURE_ASCII,FEATURE_LATIN1,FEATURE_UTF7,FEATURE_UTF32,MONO_HYBRID_ENCODING_SUPPORT,FEATURE_ASYNC_IO,NEW_EXPERIMENTAL_ASYNC_IO,FEATURE_UTF32,FEATURE_EXCEPTIONDISPATCHINFO,FEATURE_CORRUPTING_EXCEPTIONS,FEATURE_EXCEPTION_NOTIFICATIONS,FEATURE_STRONGNAME_MIGRATION,FEATURE_USE_LCID,FEATURE_FUSION,FEATURE_CRYPTO,FEATURE_X509_SECURESTRINGS,FEATURE_SYNCHRONIZATIONCONTEXT,FEATURE_SYNCHRONIZATIONCONTEXT_WAIT -d:FEATURE_REMOTING,MONO_COM,FEATURE_COMINTEROP,FEATURE_ROLE_BASED_SECURITY -resource:resources/charinfo.nlp -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 mscorlib.dll ./../../class/lib/net_4_5/mscorlib.dll @@ -252,7 +252,7 @@ false - /codepage:65001 -unsafe -nostdlib -nowarn:612,618 -d:INSIDE_CORLIB,MONO_CULTURE_DATA -d:LIBC -d:FEATURE_PAL,GENERICS_WORK,FEATURE_LIST_PREDICATES,FEATURE_SERIALIZATION,FEATURE_ASCII,FEATURE_LATIN1,FEATURE_UTF7,FEATURE_UTF32,MONO_HYBRID_ENCODING_SUPPORT,FEATURE_ASYNC_IO,NEW_EXPERIMENTAL_ASYNC_IO,FEATURE_UTF32,FEATURE_EXCEPTIONDISPATCHINFO,FEATURE_CORRUPTING_EXCEPTIONS,FEATURE_EXCEPTION_NOTIFICATIONS,FEATURE_STRONGNAME_MIGRATION,FEATURE_USE_LCID,FEATURE_FUSION,FEATURE_CRYPTO,FEATURE_X509_SECURESTRINGS,FEATURE_SYNCHRONIZATIONCONTEXT,FEATURE_SYNCHRONIZATIONCONTEXT_WAIT -d:FEATURE_REMOTING,MONO_COM,FEATURE_COMINTEROP -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 + /codepage:65001 -unsafe -nostdlib -nowarn:612,618 -d:INSIDE_CORLIB,MONO_CULTURE_DATA -d:LIBC -d:FEATURE_PAL,GENERICS_WORK,FEATURE_LIST_PREDICATES,FEATURE_SERIALIZATION,FEATURE_ASCII,FEATURE_LATIN1,FEATURE_UTF7,FEATURE_UTF32,MONO_HYBRID_ENCODING_SUPPORT,FEATURE_ASYNC_IO,NEW_EXPERIMENTAL_ASYNC_IO,FEATURE_UTF32,FEATURE_EXCEPTIONDISPATCHINFO,FEATURE_CORRUPTING_EXCEPTIONS,FEATURE_EXCEPTION_NOTIFICATIONS,FEATURE_STRONGNAME_MIGRATION,FEATURE_USE_LCID,FEATURE_FUSION,FEATURE_CRYPTO,FEATURE_X509_SECURESTRINGS,FEATURE_SYNCHRONIZATIONCONTEXT,FEATURE_SYNCHRONIZATIONCONTEXT_WAIT -d:FEATURE_REMOTING,MONO_COM,FEATURE_COMINTEROP,FEATURE_ROLE_BASED_SECURITY -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 corlib_test_net_4_5.dll corlib_test_net_4_5.dll @@ -3152,7 +3152,7 @@ - /codepage:65001 -r:./../../class/lib/net_4_5/Microsoft.Build.Framework.dll -r:./../../class/lib/net_4_5/Microsoft.Build.Utilities.v4.0.dll -r:./../../class/lib/net_4_5/Microsoft.Build.Engine.dll -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 + /codepage:65001 -r:./../../class/lib/net_4_5/Microsoft.Build.Framework.dll -r:./../../class/lib/net_4_5/Microsoft.Build.Utilities.v4.0.dll -r:./../../class/lib/net_4_5/Microsoft.Build.Engine.dll -r:./../../class/lib/net_4_5/Microsoft.Build.Tasks.v4.0.dll -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 xbuild.exe ./../../class/lib/net_4_5/xbuild.exe @@ -3592,7 +3592,7 @@ - /codepage:65001 -r:./../../class/lib/xbuild_12/Microsoft.Build.Framework.dll -r:./../../class/lib/xbuild_12/Microsoft.Build.Utilities.v12.0.dll -r:./../../class/lib/xbuild_12/Microsoft.Build.Engine.dll -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 + /codepage:65001 -r:./../../class/lib/xbuild_12/Microsoft.Build.Framework.dll -r:./../../class/lib/xbuild_12/Microsoft.Build.Utilities.v12.0.dll -r:./../../class/lib/xbuild_12/Microsoft.Build.Engine.dll -r:./../../class/lib/xbuild_12/Microsoft.Build.Tasks.v12.0.dll -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 xbuild.exe ./../../class/lib/xbuild_12/xbuild.exe @@ -3722,7 +3722,7 @@ - /codepage:65001 -r:./../../class/lib/xbuild_14/Microsoft.Build.Framework.dll -r:./../../class/lib/xbuild_14/Microsoft.Build.Utilities.Core.dll -r:./../../class/lib/xbuild_14/Microsoft.Build.Engine.dll -d:NET_4_0 -d:NET_4_5 -d:MONO -d:DISABLE_CAS_USE -nowarn:1699 -nostdlib -lib:./../../class/lib/xbuild_14 -r:mscorlib.dll -debug -d:XBUILD_12 -d:XBUILD_14 -d:MONO -d:DISABLE_CAS_USE -lib:./../../class/lib/net_4_5 -optimize /noconfig + /codepage:65001 -r:./../../class/lib/xbuild_14/Microsoft.Build.Framework.dll -r:./../../class/lib/xbuild_14/Microsoft.Build.Utilities.Core.dll -r:./../../class/lib/xbuild_14/Microsoft.Build.Engine.dll -r:./../../class/lib/xbuild_14/Microsoft.Build.Tasks.Core.dll -d:NET_4_0 -d:NET_4_5 -d:MONO -d:DISABLE_CAS_USE -nowarn:1699 -nostdlib -lib:./../../class/lib/xbuild_14 -r:mscorlib.dll -debug -d:XBUILD_12 -d:XBUILD_14 -d:MONO -d:DISABLE_CAS_USE -lib:./../../class/lib/net_4_5 -optimize /noconfig xbuild.exe ./../../class/lib/xbuild_14/xbuild.exe diff --git a/tools/locale-builder/Driver.cs b/tools/locale-builder/Driver.cs index 17d8a32c162..a8ec6d2f0e7 100644 --- a/tools/locale-builder/Driver.cs +++ b/tools/locale-builder/Driver.cs @@ -1000,6 +1000,12 @@ namespace Mono.Tools.LocaleBuilder nodes = node.SelectNodes ("months/monthContext[@type='stand-alone']/monthWidth[@type='wide']/month"); ProcessAllNodes (nodes, df.MonthNames, AddOrReplaceValue); + if (df.MonthNames != null) { + if (ci.Name == "sv" || ci.Name == "sv-SE") { + ToLower (df.MonthNames); + } + } + // Apply global rule first if (ci.Name == "ja" || ci.Name == "ja-JP") { // Use common number style @@ -1010,6 +1016,12 @@ namespace Mono.Tools.LocaleBuilder ProcessAllNodes (nodes, df.AbbreviatedMonthNames, AddOrReplaceValue); } + if (df.AbbreviatedMonthNames != null) { + if (ci.Name == "sv" || ci.Name == "sv-SE") { + ToLower (df.AbbreviatedMonthNames); + } + } + nodes = node.SelectNodes ("months/monthContext[@type='format']/monthWidth[@type='wide']/month"); if (nodes != null) { ProcessAllNodes (nodes, df.MonthGenitiveNames, AddOrReplaceValue); @@ -1027,6 +1039,12 @@ namespace Mono.Tools.LocaleBuilder nodes = node.SelectNodes ("days/dayContext[@type='stand-alone']/dayWidth[@type='abbreviated']/day"); ProcessAllNodes (nodes, df.AbbreviatedDayNames, AddOrReplaceDayValue); + if (df.AbbreviatedDayNames != null) { + if (ci.Name == "sv" || ci.Name == "sv-SE") { + ToLower (df.AbbreviatedDayNames); + } + } + // TODO: This is not really ShortestDayNames as .NET uses it // Apply global rules first nodes = node.SelectNodes ("days/dayContext[@type='format']/dayWidth[@type='narrow']/day"); @@ -1171,6 +1189,19 @@ namespace Mono.Tools.LocaleBuilder } } + static void ToLower (string[] values) + { + if (values == null) + return; + + for (int i = 0; i < values.Length; ++i) { + if (values [i] == null) + continue; + + values [i] = values [i].ToLower (); + } + } + string GetInfinitySymbol (CultureInfoEntry ci) { // TODO: Add more diff --git a/winconfig.h b/winconfig.h index cbb134e68bb..af1960918fc 100644 --- a/winconfig.h +++ b/winconfig.h @@ -97,6 +97,9 @@ /* Define to 1 if you have the header file. */ #define HAVE_COMPLEX_H 1 +/* Define to 1 if you have the `system' function. */ +#define HAVE_SYSTEM 1 + /* Have /dev/random */ #define HAVE_CRYPT_RNG 1