[corlib] NumberFormatInfo from reference sources
authorMarek Safar <marek.safar@gmail.com>
Tue, 31 Mar 2015 14:04:11 +0000 (16:04 +0200)
committerMarek Safar <marek.safar@gmail.com>
Tue, 31 Mar 2015 14:06:07 +0000 (16:06 +0200)
16 files changed:
external/referencesource
mcs/class/corlib/ReferenceSources/CultureData.cs
mcs/class/corlib/System.Globalization/CultureInfo.cs
mcs/class/corlib/System.Globalization/DateTimeFormatInfo.cs [deleted file]
mcs/class/corlib/System.Globalization/NumberFormatInfo.cs [deleted file]
mcs/class/corlib/System/Environment.cs
mcs/class/corlib/System/NumberFormatter.cs
mcs/class/corlib/corlib.dll.sources
mono/metadata/appdomain.c
mono/metadata/culture-info-tables.h
mono/metadata/culture-info.h
mono/metadata/icall-def.h
mono/metadata/locales.c
mono/metadata/locales.h
mono/metadata/object-internals.h
tools/locale-builder/NumberFormatEntry.cs

index 6f3639cbf1a09e7c5bb6ff1a3b3e4752d00f17fc..717a29b2db63beeb88c0fa6cf5c5ef3640d604bb 160000 (submodule)
@@ -1 +1 @@
-Subproject commit 6f3639cbf1a09e7c5bb6ff1a3b3e4752d00f17fc
+Subproject commit 717a29b2db63beeb88c0fa6cf5c5ef3640d604bb
index c59175d6313d66a5ee7182e67ea6ca84ae78fe71..ac55a2c806eaf05753a2b78375fb3bc8b004244d 100644 (file)
@@ -65,6 +65,8 @@ namespace System.Globalization
                // TODO: should query runtime with culture name for a list of culture's calendars
                int calendarId;
 
+               int numberIndex;
+
                private CultureData (string name)
                {
                        this.sRealName = name;
@@ -113,7 +115,7 @@ namespace System.Globalization
                        }
                }
 
-               public static CultureData GetCultureData (string cultureName, bool useUserOverride, int datetimeIndex, int calendarId, string iso2lang)
+               public static CultureData GetCultureData (string cultureName, bool useUserOverride, int datetimeIndex, int calendarId, int numberIndex, string iso2lang)
                {
                        if (string.IsNullOrEmpty (cultureName))
                                return Invariant;
@@ -122,6 +124,7 @@ namespace System.Globalization
                        cd.fill_culture_data (datetimeIndex);
                        cd.bUseOverrides = useUserOverride;
                        cd.calendarId = calendarId;
+                       cd.numberIndex = numberIndex;
                        cd.sISO639Language = iso2lang;
                        return cd;
                }
@@ -137,7 +140,7 @@ namespace System.Globalization
 
                public CalendarData GetCalendar (int calendarId)
                {
-            // arrays are 0 based, calendarIds are 1 based
+                       // arrays are 0 based, calendarIds are 1 based
                        int calendarIndex = calendarId - 1;
 
                        // Have to have calendars
@@ -225,11 +228,17 @@ namespace System.Globalization
                        }
                }
 
-        internal String CultureName {
-            get {
-                return sRealName;
-            }
-        }
+               internal bool IsInvariantCulture {
+                       get {
+                               return string.IsNullOrEmpty (sRealName);
+                       }
+               }
+
+               internal String CultureName {
+                       get {
+                               return sRealName;
+                       }
+               }
 
         internal String SCOMPAREINFO {
                get {
@@ -522,5 +531,37 @@ namespace System.Globalization
                {
                        return str;
                }
+
+               internal void GetNFIValues (NumberFormatInfo nfi)
+               {
+                       if (this.IsInvariantCulture)
+                       {
+                               // Same as default values
+                       }
+                       else
+                       {
+                               //
+                               // We don't have information for the following four.  All cultures use
+                               // the same value of the number formatting values.
+                               //
+                               // PercentDecimalDigits
+                               // PercentDecimalSeparator
+                               // PercentGroupSize
+                               // PercentGroupSeparator
+                               //
+                               fill_number_data (nfi, numberIndex);
+                       }
+
+                       //
+                       // We don't have percent values, so use the number values
+                       //
+                       nfi.percentDecimalDigits = nfi.numberDecimalDigits;
+                       nfi.percentDecimalSeparator = nfi.numberDecimalSeparator;
+                       nfi.percentGroupSizes = nfi.numberGroupSizes;
+                       nfi.percentGroupSeparator = nfi.numberGroupSeparator;
+               }
+
+               [MethodImplAttribute (MethodImplOptions.InternalCall)]
+               extern static void fill_number_data (NumberFormatInfo nfi, int numberIndex);
        }
 }
index 641a7c650cea706132018601cf715bc21439bcc9..f5c26dc4d1b131da4a3066f08180bee6505932c4 100644 (file)
@@ -60,7 +60,7 @@ namespace System.Globalization
                int default_calendar_type;
                bool m_useUserOverride;
                [NonSerialized]
-               volatile NumberFormatInfo numInfo;
+               internal volatile NumberFormatInfo numInfo;
                internal volatile DateTimeFormatInfo dateTimeInfo;
                volatile TextInfo textInfo;
                private string m_name;
@@ -423,7 +423,7 @@ namespace System.Globalization
 
                        for (int i = 1; i < infos.Length; ++i) {
                                var ci = infos [i];
-                               infos [i].m_cultureData = CultureData.GetCultureData (ci.m_name, false, ci.datetime_index, ci.CalendarType, ci.iso2lang);
+                               infos [i].m_cultureData = CultureData.GetCultureData (ci.m_name, false, ci.datetime_index, ci.CalendarType, ci.number_index, ci.iso2lang);
                        }
 
                        return infos;
@@ -494,15 +494,10 @@ namespace System.Globalization
 
                public virtual NumberFormatInfo NumberFormat {
                        get {
-                               if (!constructed) Construct ();
-                               CheckNeutral ();
-                               if (numInfo == null){
-                                       lock (this){
-                                               if (numInfo == null) {
-                                                       numInfo = new NumberFormatInfo (m_isReadOnly);
-                                                       construct_number_format ();
-                                               }
-                                       }
+                               if (numInfo == null) {
+                                       NumberFormatInfo temp = new NumberFormatInfo(this.m_cultureData);
+                                       temp.isReadOnly = m_isReadOnly;
+                                       numInfo = temp;
                                }
 
                                return numInfo;
@@ -605,9 +600,6 @@ namespace System.Globalization
                [MethodImplAttribute (MethodImplOptions.InternalCall)]
                private extern static CultureInfo [] internal_get_cultures (bool neutral, bool specific, bool installed);
 
-               [MethodImplAttribute (MethodImplOptions.InternalCall)]
-               private extern void construct_number_format ();
-
                private void ConstructInvariant (bool read_only)
                {
                        cultureID = InvariantCultureId;
@@ -665,7 +657,7 @@ namespace System.Globalization
                                throw new CultureNotFoundException ("culture", msg);
                        }
 
-                       m_cultureData = CultureData.GetCultureData (m_name, m_useUserOverride, datetime_index, CalendarType, iso2lang);
+                       m_cultureData = CultureData.GetCultureData (m_name, m_useUserOverride, datetime_index, CalendarType, number_index, iso2lang);
                }
 
                public CultureInfo (string name) : this (name, true) {}
@@ -694,7 +686,7 @@ namespace System.Globalization
                                throw CreateNotFoundException (name);
                        }
 
-                       m_cultureData = CultureData.GetCultureData (m_name, useUserOverride, datetime_index, CalendarType, iso2lang);
+                       m_cultureData = CultureData.GetCultureData (m_name, useUserOverride, datetime_index, CalendarType, number_index, iso2lang);
                }
 
                // This is used when creating by specific name and creating by
@@ -811,7 +803,7 @@ namespace System.Globalization
                        if (ci.IsNeutralCulture)
                                ci = CreateSpecificCultureFromNeutral (ci.Name);
 
-                       ci.m_cultureData = CultureData.GetCultureData (ci.m_name, false, ci.datetime_index, ci.CalendarType, ci.iso2lang);
+                       ci.m_cultureData = CultureData.GetCultureData (ci.m_name, false, ci.datetime_index, ci.CalendarType, ci.number_index, ci.iso2lang);
                        return ci;
                }
 
diff --git a/mcs/class/corlib/System.Globalization/DateTimeFormatInfo.cs b/mcs/class/corlib/System.Globalization/DateTimeFormatInfo.cs
deleted file mode 100644 (file)
index 2eb8957..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-//
-// System.Globalization.DateTimeFormatInfo.cs
-//
-// Authors:
-//   Martin Weindel (martin.weindel@t-online.de)
-//   Marek Safar (marek.safar@gmail.com)
-//
-// (C) Martin Weindel (martin.weindel@t-online.de)
-// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
-// Copyright (C) 2012 Xamarin Inc (http://www.xamarin.com)
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System;
-using System.Collections.Generic;
-
-namespace System.Globalization
-{
-       public sealed partial class DateTimeFormatInfo : ICloneable, IFormatProvider
-       {
-               [NonSerialized]
-               private string m_fullTimeSpanPositivePattern;
-               internal String FullTimeSpanPositivePattern {
-                       get {
-                               if (m_fullTimeSpanPositivePattern == null) {
-                                       String decimalSeparator = Culture.NumberFormat.NumberDecimalSeparator;
-
-                                       m_fullTimeSpanPositivePattern = "d':'h':'mm':'ss'" + decimalSeparator + "'FFFFFFF";
-                               }
-
-                               return m_fullTimeSpanPositivePattern;
-                       }
-               }
-       }
-}
diff --git a/mcs/class/corlib/System.Globalization/NumberFormatInfo.cs b/mcs/class/corlib/System.Globalization/NumberFormatInfo.cs
deleted file mode 100644 (file)
index 6305d30..0000000
+++ /dev/null
@@ -1,1004 +0,0 @@
-//
-// System.Globalization.NumberFormatInfo.cs
-//
-// Author:
-//   Derek Holden (dholden@draper.com)
-//   Bob Smith    (bob@thestuff.net)
-//   Mohammad DAMT (mdamt@cdl2000.com)
-//
-// (C) Derek Holden
-// (C) Bob Smith     http://www.thestuff.net
-// (c) 2003, PT Cakram Datalingga Duaribu   http://www.cdl2000.com
-//
-
-//
-// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-//
-// NumberFormatInfo. One can only assume it is the class gotten
-// back from a GetFormat() method from an IFormatProvider / 
-// IFormattable implementer. There are some discrepencies with the
-// ECMA spec and the SDK docs, surprisingly. See my conversation
-// with myself on it at:
-// http://lists.ximian.com/archives/public/mono-list/2001-July/000794.html
-// 
-// Other than that this is totally ECMA compliant.
-//
-
-using System.Diagnostics.Contracts;
-using System.Runtime.InteropServices;
-
-namespace System.Globalization {
-
-       [ComVisible (true)]
-       [Serializable]
-       [StructLayout (LayoutKind.Sequential)]
-       public sealed class NumberFormatInfo : ICloneable, IFormatProvider {
-
-/* Keep in sync with object-internals.h */
-               
-#pragma warning disable 649
-               private bool isReadOnly;
-               // used for temporary storage. Used in InitPatterns ()
-               string decimalFormats;
-               string currencyFormats;
-               string percentFormats;
-               string digitPattern = "#";
-               string zeroPattern = "0";
-               
-               // Currency Related Format Info
-               private int currencyDecimalDigits;
-               private string currencyDecimalSeparator;
-               private string currencyGroupSeparator;
-               private int[] currencyGroupSizes;
-               private int currencyNegativePattern;
-               private int currencyPositivePattern;
-               private string currencySymbol;
-
-               private string nanSymbol;
-               private string negativeInfinitySymbol;
-               private string negativeSign;
-
-               // Number Related Format Info
-               private int numberDecimalDigits;
-               private string numberDecimalSeparator;
-               private string numberGroupSeparator;
-               private int[] numberGroupSizes;
-               private int numberNegativePattern;
-
-               // Percent Related Format Info
-               private int percentDecimalDigits;
-               private string percentDecimalSeparator;
-               private string percentGroupSeparator;
-               private int[] percentGroupSizes;
-               private int percentNegativePattern;
-               private int percentPositivePattern;
-               private string percentSymbol;
-
-               private string perMilleSymbol;
-               private string positiveInfinitySymbol;
-               private string positiveSign;
-#pragma warning restore 649
-               
-#pragma warning disable 169
-               internal string ansiCurrencySymbol;     // TODO, MS.NET serializes this.
-               int m_dataItem; // Unused, but MS.NET serializes this.
-               bool m_useUserOverride; // Unused, but MS.NET serializes this.
-               bool validForParseAsNumber; // Unused, but MS.NET serializes this.
-               bool validForParseAsCurrency; // Unused, but MS.NET serializes this.
-#pragma warning restore 169
-               
-#if !MOBILE
-               string[] nativeDigits = invariantNativeDigits;
-               int digitSubstitution = 1; // DigitShapes.None.
-               static readonly string [] invariantNativeDigits = new string [] {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"};
-#endif
-
-               internal NumberFormatInfo (int lcid, bool read_only)
-               {
-                       isReadOnly = read_only;
-
-                       //FIXME: should add more LCID
-                       // CultureInfo uses this one also.
-                       if (lcid != 0x007F)
-                               lcid = 0x007F;
-
-                       // The Invariant Culture Info ID.
-                       if (lcid == 0x007f) {
-                               // Currency Related Format Info
-                               currencyDecimalDigits =       2;
-                               currencyDecimalSeparator =    ".";
-                               currencyGroupSeparator =      ",";
-                               currencyGroupSizes =          new int[1] { 3 };
-                               currencyNegativePattern =     0;
-                               currencyPositivePattern =     0;
-                               currencySymbol =              "\u00a4";
-                               
-                               nanSymbol =                   "NaN";
-                               negativeInfinitySymbol =      "-Infinity";
-                               negativeSign =                "-";
-                               
-                               // Number Related Format Info
-                               numberDecimalDigits =         2;
-                               numberDecimalSeparator =      ".";
-                               numberGroupSeparator =        ",";
-                               numberGroupSizes =            new int[1] { 3 };
-                               numberNegativePattern =       1;
-                               
-                               // Percent Related Format Info
-                               percentDecimalDigits =        2;
-                               percentDecimalSeparator =     ".";
-                               percentGroupSeparator =       ",";
-                               percentGroupSizes =           new int[1] { 3 };
-                               percentNegativePattern =      0;
-                               percentPositivePattern =      0;
-                               percentSymbol=                "%";
-                               
-                               perMilleSymbol =              "\u2030";
-                               positiveInfinitySymbol =      "Infinity";
-                               positiveSign =                "+";
-                       }
-               }
-
-               internal NumberFormatInfo (bool read_only) : this (0x007f, read_only)
-               {
-               }
-               
-               public NumberFormatInfo () : this (false)
-               {
-               }
-
-               // this is called by mono/mono/metadata/locales.c
-#pragma warning disable 169            
-               void InitPatterns ()
-               {
-                       string [] partOne, partTwo;
-                       string [] posNeg = decimalFormats.Split (new char [1] {';'}, 2);
-                       
-                       if (posNeg.Length == 2) {
-                               
-                               partOne = posNeg [0].Split (new char [1] {'.'}, 2);
-                                                                                       
-                               if (partOne.Length == 2) {
-                                       // assumed same for both positive and negative
-                                       // decimal digit side
-                                       numberDecimalDigits = 0;                                        
-                                       for (int i = 0; i < partOne [1].Length; i ++) {                                         
-                                               if (partOne [1][i] == digitPattern [0]) {
-                                                       numberDecimalDigits ++;                                                 
-                                               } else
-                                                       break;                                          
-                                       }
-
-                                       // decimal grouping side
-                                       partTwo = partOne [0].Split (',');
-                                       if (partTwo.Length > 1) {
-                                               numberGroupSizes = new int [partTwo.Length - 1];
-                                               for (int i = 0; i < numberGroupSizes.Length; i ++) {
-                                                       string pat = partTwo [i + 1];
-                                                       numberGroupSizes [i] = pat.Length;
-                                               }
-                                       } else {
-                                               numberGroupSizes = new int [1] { 0 };
-                                       }
-
-                                       if (posNeg [1].StartsWith ("(") && posNeg [1].EndsWith (")")) {
-                                               numberNegativePattern = 0;
-                                       } else if (posNeg [1].StartsWith ("- ")) {
-                                               numberNegativePattern = 2;
-                                       } else if (posNeg [1].StartsWith ("-")) {
-                                               numberNegativePattern = 1;
-                                       } else if (posNeg [1].EndsWith (" -")) {
-                                               numberNegativePattern = 4;
-                                       } else if (posNeg [1].EndsWith ("-")) {
-                                               numberNegativePattern = 3;
-                                       } else {
-                                               numberNegativePattern = 1;
-                                       }
-                               }
-                       }
-
-                       posNeg = currencyFormats.Split (new char [1] {';'}, 2);                 
-                       if (posNeg.Length == 2) {
-                               partOne = posNeg [0].Split (new char [1] {'.'}, 2);
-                               
-                               if (partOne.Length == 2) {
-                                       // assumed same for both positive and negative
-                                       // decimal digit side
-                                       currencyDecimalDigits = 0;
-                                       for (int i = 0; i < partOne [1].Length; i ++) {
-                                               if (partOne [1][i] == zeroPattern [0])
-                                                       currencyDecimalDigits ++;
-                                               else
-                                                       break;
-                                       }
-
-                                       // decimal grouping side
-                                       partTwo = partOne [0].Split (',');
-                                       if (partTwo.Length > 1) {                                               
-                                               currencyGroupSizes = new int [partTwo.Length - 1];
-                                               for (int i = 0; i < currencyGroupSizes.Length; i ++) {
-                                                       string pat = partTwo [i + 1];
-                                                       currencyGroupSizes [i] = pat.Length;
-                                               }
-                                       } else {
-                                               currencyGroupSizes = new int [1] { 0 };
-                                       }
-
-                                       if (posNeg [1].StartsWith ("(\u00a4 ") && posNeg [1].EndsWith (")")) {
-                                               currencyNegativePattern = 14;
-                                       } else if (posNeg [1].StartsWith ("(\u00a4") && posNeg [1].EndsWith (")")) {
-                                               currencyNegativePattern = 0;
-                                       } else if (posNeg [1].StartsWith ("\u00a4 ") && posNeg [1].EndsWith ("-")) {
-                                               currencyNegativePattern = 11;
-                                       } else if (posNeg [1].StartsWith ("\u00a4") && posNeg [1].EndsWith ("-")) {
-                                               currencyNegativePattern = 3;
-                                       } else if (posNeg [1].StartsWith ("(") && posNeg [1].EndsWith (" \u00a4")) {
-                                               currencyNegativePattern = 15;
-                                       } else if (posNeg [1].StartsWith ("(") && posNeg [1].EndsWith ("\u00a4")) {
-                                               currencyNegativePattern = 4;
-                                       } else if (posNeg [1].StartsWith ("-") && posNeg [1].EndsWith (" \u00a4")) {
-                                               currencyNegativePattern = 8;
-                                       } else if (posNeg [1].StartsWith ("-") && posNeg [1].EndsWith ("\u00a4")) {
-                                               currencyNegativePattern = 5;
-                                       } else if (posNeg [1].StartsWith ("-\u00a4 ")) {
-                                               currencyNegativePattern = 9;
-                                       } else if (posNeg [1].StartsWith ("-\u00a4")) {
-                                               currencyNegativePattern = 1;
-                                       } else if (posNeg [1].StartsWith ("\u00a4 -")) {
-                                               currencyNegativePattern = 12;
-                                       } else if (posNeg [1].StartsWith ("\u00a4-")) {
-                                               currencyNegativePattern = 2;
-                                       } else if (posNeg [1].EndsWith (" \u00a4-")) {
-                                               currencyNegativePattern = 10;
-                                       } else if (posNeg [1].EndsWith ("\u00a4-")) {
-                                               currencyNegativePattern = 7;
-                                       } else if (posNeg [1].EndsWith ("- \u00a4")) {
-                                               currencyNegativePattern = 13;
-                                       } else if (posNeg [1].EndsWith ("-\u00a4")) {
-                                               currencyNegativePattern = 6;
-                                       } else {
-                                               currencyNegativePattern = 0;
-                                       }
-                                       
-                                       if (posNeg [0].StartsWith ("\u00a4 ")) {
-                                               currencyPositivePattern = 2;
-                                       } else if (posNeg [0].StartsWith ("\u00a4")) {
-                                               currencyPositivePattern = 0;
-                                       } else if (posNeg [0].EndsWith (" \u00a4")) {
-                                               currencyPositivePattern = 3;
-                                       } else if (posNeg [0].EndsWith ("\u00a4")) {
-                                               currencyPositivePattern = 1; 
-                                       } else {
-                                               currencyPositivePattern = 0;
-                                       }
-                               }
-                       }
-
-                       // we don't have percentNegativePattern in CLDR so 
-                       // the percentNegativePattern are just guesses
-                       if (percentFormats.StartsWith ("%")) {
-                               percentPositivePattern = 2;
-                               percentNegativePattern = 2;
-                       } else if (percentFormats.EndsWith (" %")) {
-                               percentPositivePattern = 0;
-                               percentNegativePattern = 0;
-                       } else if (percentFormats.EndsWith ("%")) {
-                               percentPositivePattern = 1;
-                               percentNegativePattern = 1;
-                       } else {
-                               percentPositivePattern = 0;
-                               percentNegativePattern = 0;
-                       }
-
-                       partOne = percentFormats.Split (new char [1] {'.'}, 2);
-                       
-                       if (partOne.Length == 2) {
-                               // assumed same for both positive and negative
-                               // decimal digit side
-                               percentDecimalDigits = 0;
-                               for (int i = 0; i < partOne [1].Length; i ++) {
-                                       if (partOne [1][i] == digitPattern [0])
-                                               percentDecimalDigits ++;
-                                       else
-                                               break;
-                               }
-
-                               // percent grouping side
-                               partTwo = partOne [0].Split (',');
-                               if (partTwo.Length > 1) {
-                                       percentGroupSizes = new int [partTwo.Length - 1];
-                                       for (int i = 0; i < percentGroupSizes.Length; i ++) {
-                                               string pat = partTwo [i + 1];
-                                               percentGroupSizes [i] = pat.Length;
-                                       }
-                               } else {
-                                       percentGroupSizes = new int [1] { 0 };
-                               }
-                       }
-                       
-               }
-#pragma warning restore 169
-
-               // =========== Currency Format Properties =========== //
-
-               public int CurrencyDecimalDigits {
-                       get {
-                               return currencyDecimalDigits;
-                       }
-                       
-                       set {
-                               if (value < 0 || value > 99) 
-                                       throw new ArgumentOutOfRangeException
-                                       ("The value specified for the property is less than 0 or greater than 99");
-                               
-                               if (isReadOnly)
-                                       throw new InvalidOperationException
-                                       ("The current instance is read-only and a set operation was attempted");
-
-                               currencyDecimalDigits = value;
-                       }
-               }
-
-               public string CurrencyDecimalSeparator {
-                       get {
-                               return currencyDecimalSeparator;
-                       }
-                       
-                       set {
-                               if (value == null) 
-                                       throw new ArgumentNullException
-                                       ("The value specified for the property is a null reference");
-                               
-                               if (isReadOnly)
-                                       throw new InvalidOperationException
-                                       ("The current instance is read-only and a set operation was attempted");
-                               
-                               currencyDecimalSeparator = value;
-                       }
-               }
-
-
-               public string CurrencyGroupSeparator {
-                       get {
-                               return currencyGroupSeparator;
-                       }
-                       
-                       set {
-                               if (value == null) 
-                                       throw new ArgumentNullException
-                                       ("The value specified for the property is a null reference");
-                       
-                               if (isReadOnly)
-                                       throw new InvalidOperationException
-                                       ("The current instance is read-only and a set operation was attempted");        
-                               
-                               currencyGroupSeparator = value;
-                       }
-               }
-
-               public int[] CurrencyGroupSizes {
-                       get {
-                               return (int []) RawCurrencyGroupSizes.Clone ();
-                       }
-                       
-                       set {
-                               RawCurrencyGroupSizes = value;
-                       }
-               }
-
-               internal int[] RawCurrencyGroupSizes {
-                       get {
-                               return currencyGroupSizes;
-                       }
-                       
-                       set {
-                               if (value == null) 
-                                       throw new ArgumentNullException
-                                       ("The value specified for the property is a null reference");
-                               
-                               if (isReadOnly)
-                                       throw new InvalidOperationException
-                                       ("The current instance is read-only and a set operation was attempted");
-                               
-                               if (value.Length == 0) {
-                                       currencyGroupSizes = EmptyArray<int>.Value;
-                                       return;
-                               }
-                               
-                               // All elements except last need to be in range 1 - 9, last can be 0.
-                               int last = value.Length - 1;
-
-                               for (int i = 0; i < last; i++)
-                                       if (value[i] < 1 || value[i] > 9)
-                                               throw new ArgumentOutOfRangeException
-                                               ("One of the elements in the array specified is not between 1 and 9");
-
-                               if (value[last] < 0 || value[last] > 9)
-                                       throw new ArgumentOutOfRangeException
-                                       ("Last element in the array specified is not between 0 and 9");
-                               
-                               currencyGroupSizes = (int[]) value.Clone();
-                       }
-               }
-
-               public int CurrencyNegativePattern {
-                       get {
-                               // See ECMA NumberFormatInfo page 8
-                               return currencyNegativePattern;
-                       }
-                       
-                       set {
-                               if (value < 0 || value > 15) 
-                                       throw new ArgumentOutOfRangeException
-                                       ("The value specified for the property is less than 0 or greater than 15");
-                               
-                               if (isReadOnly)
-                                       throw new InvalidOperationException
-                                       ("The current instance is read-only and a set operation was attempted");
-
-                               currencyNegativePattern = value;
-                       }
-               }
-
-               public int CurrencyPositivePattern {
-                       get {
-                               // See ECMA NumberFormatInfo page 11 
-                               return currencyPositivePattern;
-                       }
-                       
-                       set {
-                               if (value < 0 || value > 3) 
-                                       throw new ArgumentOutOfRangeException
-                                       ("The value specified for the property is less than 0 or greater than 3");
-                               
-                               if (isReadOnly)
-                                       throw new InvalidOperationException
-                                       ("The current instance is read-only and a set operation was attempted");
-
-                               currencyPositivePattern = value;
-                       }
-               }
-
-               public string CurrencySymbol {
-                       get {
-                               return currencySymbol;
-                       }
-                       
-                       set {
-                               if (value == null) 
-                                       throw new ArgumentNullException
-                                       ("The value specified for the property is a null reference");
-                       
-                               if (isReadOnly)
-                                       throw new InvalidOperationException
-                                       ("The current instance is read-only and a set operation was attempted");        
-                               
-                               currencySymbol = value;
-                       }
-               }
-
-               // =========== Static Read-Only Properties =========== //
-
-               public static NumberFormatInfo CurrentInfo {
-                       get {
-                               NumberFormatInfo nfi = (NumberFormatInfo) System.Threading.Thread.CurrentThread.CurrentCulture.NumberFormat;
-                               nfi.isReadOnly = true;
-                               return nfi;
-                       }                      
-               }
-
-               public static NumberFormatInfo InvariantInfo {
-                       get {
-                               // This uses invariant info, which is same as in the constructor
-                               NumberFormatInfo nfi = new NumberFormatInfo (true);
-                               return nfi;
-                       }
-               }
-
-               public bool IsReadOnly {
-                       get {
-                               return isReadOnly;
-                       }
-               }
-
-
-
-               public string NaNSymbol {
-                       get {
-                               return nanSymbol;
-                       }
-                       
-                       set {
-                               if (value == null) 
-                                       throw new ArgumentNullException
-                                       ("The value specified for the property is a null reference");
-                       
-                               if (isReadOnly)
-                                       throw new InvalidOperationException
-                                       ("The current instance is read-only and a set operation was attempted");        
-                               
-                               nanSymbol = value;
-                       }
-               }
-               
-#if !NET_2_1
-               [MonoNotSupported ("We don't have native digit info")]
-               [ComVisible (false)]
-               public string [] NativeDigits {
-                       get { return nativeDigits; }
-                       set {
-                               if (value == null)
-                                       throw new ArgumentNullException ("value");
-                               if (value.Length != 10)
-                                       throw new ArgumentException ("Argument array length must be 10");
-                               foreach (string s in value)
-                                       if (String.IsNullOrEmpty (s))
-                                               throw new ArgumentException ("Argument array contains one or more null strings");
-                               nativeDigits = value;
-                       }
-               }
-
-               [MonoNotSupported ("We don't have native digit info")]
-               [ComVisible (false)]
-               public DigitShapes DigitSubstitution {
-                       get { return (DigitShapes) digitSubstitution; }
-                       set { digitSubstitution = (int) value; }
-               }
-#endif
-               
-               public string NegativeInfinitySymbol {
-                       get {
-                               return negativeInfinitySymbol;
-                       }
-                       
-                       set {
-                               if (value == null) 
-                                       throw new ArgumentNullException
-                                       ("The value specified for the property is a null reference");
-                       
-                               if (isReadOnly)
-                                       throw new InvalidOperationException
-                                       ("The current instance is read-only and a set operation was attempted");        
-                               
-                               negativeInfinitySymbol = value;
-                       }
-               }
-
-               public string NegativeSign {
-                       get {
-                               return negativeSign;
-                       }
-                       
-                       set {
-                               if (value == null) 
-                                       throw new ArgumentNullException
-                                       ("The value specified for the property is a null reference");
-                       
-                               if (isReadOnly)
-                                       throw new InvalidOperationException
-                                       ("The current instance is read-only and a set operation was attempted");        
-                               
-                               negativeSign = value;
-                       }
-               }
-               
-               // =========== Number Format Properties =========== //
-
-               public int NumberDecimalDigits {
-                       get {
-                               return numberDecimalDigits;
-                       }
-                       
-                       set {
-                               if (value < 0 || value > 99) 
-                                       throw new ArgumentOutOfRangeException
-                                       ("The value specified for the property is less than 0 or greater than 99");
-                               
-                               if (isReadOnly)
-                                       throw new InvalidOperationException
-                                       ("The current instance is read-only and a set operation was attempted");
-
-                               numberDecimalDigits = value;
-                       }
-               }               
-
-               public string NumberDecimalSeparator {
-                       get {
-                               return numberDecimalSeparator;
-                       }
-                       
-                       set {
-                               if (value == null) 
-                                       throw new ArgumentNullException
-                                       ("The value specified for the property is a null reference");
-                               
-                               if (isReadOnly)
-                                       throw new InvalidOperationException
-                                       ("The current instance is read-only and a set operation was attempted");
-                               
-                               numberDecimalSeparator = value;
-                       }
-               }
-
-
-               public string NumberGroupSeparator {
-                       get {
-                               return numberGroupSeparator;
-                       }
-                       
-                       set {
-                               if (value == null) 
-                                       throw new ArgumentNullException
-                                       ("The value specified for the property is a null reference");
-                       
-                               if (isReadOnly)
-                                       throw new InvalidOperationException
-                                       ("The current instance is read-only and a set operation was attempted");        
-                               
-                               numberGroupSeparator = value;
-                       }
-               }
-
-               public int[] NumberGroupSizes {
-                       get {
-                               return (int []) RawNumberGroupSizes.Clone ();
-                       }
-                       
-                       set {
-                               RawNumberGroupSizes = value;
-                       }
-               }
-
-               internal int[] RawNumberGroupSizes {
-                       get {
-                               return numberGroupSizes;
-                       }
-                       
-                       set {
-                               if (value == null) 
-                                       throw new ArgumentNullException
-                                       ("The value specified for the property is a null reference");
-                               
-                               if (isReadOnly)
-                                       throw new InvalidOperationException
-                                       ("The current instance is read-only and a set operation was attempted");
-                               
-                               if (value.Length == 0) {
-                                       numberGroupSizes = EmptyArray<int>.Value;
-                                       return;
-                               }
-                               // All elements except last need to be in range 1 - 9, last can be 0.
-                               int last = value.Length - 1;
-
-                               for (int i = 0; i < last; i++)
-                                       if (value[i] < 1 || value[i] > 9)
-                                               throw new ArgumentOutOfRangeException
-                                               ("One of the elements in the array specified is not between 1 and 9");
-
-                               if (value[last] < 0 || value[last] > 9)
-                                       throw new ArgumentOutOfRangeException
-                                       ("Last element in the array specified is not between 0 and 9");
-                               
-                               numberGroupSizes = (int[]) value.Clone();
-                       }
-               }
-
-               public int NumberNegativePattern {
-                       get {
-                               // See ECMA NumberFormatInfo page 27
-                               return numberNegativePattern;
-                       }
-                       
-                       set {
-                               if (value < 0 || value > 4) 
-                                       throw new ArgumentOutOfRangeException
-                                       ("The value specified for the property is less than 0 or greater than 15");
-                               
-                               if (isReadOnly)
-                                       throw new InvalidOperationException
-                                       ("The current instance is read-only and a set operation was attempted");
-
-                               numberNegativePattern = value;
-                       }
-               }
-
-               // =========== Percent Format Properties =========== //
-
-               public int PercentDecimalDigits {
-                       get {
-                               return percentDecimalDigits;
-                       }
-                       
-                       set {
-                               if (value < 0 || value > 99) 
-                                       throw new ArgumentOutOfRangeException
-                                       ("The value specified for the property is less than 0 or greater than 99");
-                               
-                               if (isReadOnly)
-                                       throw new InvalidOperationException
-                                       ("The current instance is read-only and a set operation was attempted");
-
-                               percentDecimalDigits = value;
-                       }
-               }
-
-               public string PercentDecimalSeparator {
-                       get {
-                               return percentDecimalSeparator;
-                       }
-                       
-                       set {
-                               if (value == null) 
-                                       throw new ArgumentNullException
-                                       ("The value specified for the property is a null reference");
-                               
-                               if (isReadOnly)
-                                       throw new InvalidOperationException
-                                       ("The current instance is read-only and a set operation was attempted");
-                               
-                               percentDecimalSeparator = value;
-                       }
-               }
-
-
-               public string PercentGroupSeparator {
-                       get {
-                               return percentGroupSeparator;
-                       }
-                       
-                       set {
-                               if (value == null) 
-                                       throw new ArgumentNullException
-                                       ("The value specified for the property is a null reference");
-                       
-                               if (isReadOnly)
-                                       throw new InvalidOperationException
-                                       ("The current instance is read-only and a set operation was attempted");        
-                               
-                               percentGroupSeparator = value;
-                       }
-               }
-
-               public int[] PercentGroupSizes {
-                       get {
-                               return (int []) RawPercentGroupSizes.Clone ();
-                       }
-                       
-                       set {
-                               RawPercentGroupSizes = value;
-                       }
-               }
-
-               internal int[] RawPercentGroupSizes {
-                       get {
-                               return percentGroupSizes;
-                       }
-                       
-                       set {
-                               if (value == null) 
-                                       throw new ArgumentNullException
-                                       ("The value specified for the property is a null reference");
-                               
-                               if (isReadOnly)
-                                       throw new InvalidOperationException
-                                       ("The current instance is read-only and a set operation was attempted");
-                               
-                               if (this == CultureInfo.CurrentCulture.NumberFormat)
-                                       throw new Exception ("HERE the value was modified");
-                               
-                               if (value.Length == 0) {
-                                       percentGroupSizes = EmptyArray<int>.Value;
-                                       return;
-                               }
-
-                               // All elements except last need to be in range 1 - 9, last can be 0.
-                               int last = value.Length - 1;
-
-                               for (int i = 0; i < last; i++)
-                                       if (value[i] < 1 || value[i] > 9)
-                                               throw new ArgumentOutOfRangeException
-                                               ("One of the elements in the array specified is not between 1 and 9");
-
-                               if (value[last] < 0 || value[last] > 9)
-                                       throw new ArgumentOutOfRangeException
-                                       ("Last element in the array specified is not between 0 and 9");
-                               
-                               percentGroupSizes = (int[]) value.Clone();
-                       }
-               }
-
-               public int PercentNegativePattern {
-                       get {
-                               // See ECMA NumberFormatInfo page 8
-                               return percentNegativePattern;
-                       }
-                       
-                       set {
-                               if (value < 0 || value > 2) 
-                                       throw new ArgumentOutOfRangeException
-                                       ("The value specified for the property is less than 0 or greater than 15");
-                               
-                               if (isReadOnly)
-                                       throw new InvalidOperationException
-                                       ("The current instance is read-only and a set operation was attempted");
-
-                               percentNegativePattern = value;
-                       }
-               }
-
-               public int PercentPositivePattern {
-                       get {
-                               // See ECMA NumberFormatInfo page 11 
-                               return percentPositivePattern;
-                       }
-                       
-                       set {
-                               if (value < 0 || value > 2) 
-                                       throw new ArgumentOutOfRangeException
-                                       ("The value specified for the property is less than 0 or greater than 3");
-                               
-                               if (isReadOnly)
-                                       throw new InvalidOperationException
-                                       ("The current instance is read-only and a set operation was attempted");
-
-                               percentPositivePattern = value;
-                       }
-               }
-
-               public string PercentSymbol {
-                       get {
-                               return percentSymbol;
-                       }
-                       
-                       set {
-                               if (value == null) 
-                                       throw new ArgumentNullException
-                                       ("The value specified for the property is a null reference");
-                       
-                               if (isReadOnly)
-                                       throw new InvalidOperationException
-                                       ("The current instance is read-only and a set operation was attempted");        
-                               
-                               percentSymbol = value;
-                       }
-               }
-
-               public string PerMilleSymbol {
-                       get {
-                               return perMilleSymbol;
-                       }
-                       
-                       set {
-                               if (value == null) 
-                                       throw new ArgumentNullException
-                                       ("The value specified for the property is a null reference");
-                               
-                               if (isReadOnly)
-                                       throw new InvalidOperationException
-                                       ("The current instance is read-only and a set operation was attempted");
-                               
-                               perMilleSymbol = value;
-                       }
-               }
-
-               public string PositiveInfinitySymbol {
-                       get {
-                               return positiveInfinitySymbol;
-                       }
-                       
-                       set {
-                               if (value == null) 
-                                       throw new ArgumentNullException
-                                       ("The value specified for the property is a null reference");
-                       
-                               if (isReadOnly)
-                                       throw new InvalidOperationException
-                                       ("The current instance is read-only and a set operation was attempted");        
-                               
-                               positiveInfinitySymbol = value;
-                       }
-               }
-
-               public string PositiveSign {
-                       get {
-                               return positiveSign;
-                       }
-                       
-                       set {
-                               if (value == null) 
-                                       throw new ArgumentNullException
-                                       ("The value specified for the property is a null reference");
-                       
-                               if (isReadOnly)
-                                       throw new InvalidOperationException
-                                       ("The current instance is read-only and a set operation was attempted");        
-                               
-                               positiveSign = value;
-                       }
-               }
-
-               public object GetFormat (Type formatType) 
-               {
-                       return (formatType == typeof (NumberFormatInfo)) ? this : null;
-               }
-               
-               public object Clone () 
-               {
-                       NumberFormatInfo clone = (NumberFormatInfo) MemberwiseClone();
-                       // clone is not read only
-                       clone.isReadOnly = false;
-                       return clone;
-               }
-
-               public static NumberFormatInfo ReadOnly (NumberFormatInfo nfi)
-               {
-                       NumberFormatInfo copy = (NumberFormatInfo)nfi.Clone();
-                       copy.isReadOnly = true;
-                       return copy;
-               }                       
-
-               public static NumberFormatInfo GetInstance(IFormatProvider formatProvider)
-               {
-                       if (formatProvider != null) {
-                               NumberFormatInfo nfi;
-                               nfi = formatProvider.GetFormat (typeof (NumberFormatInfo)) as NumberFormatInfo;
-                               if (nfi != null)
-                                       return nfi;
-                       }
-                       
-                       return CurrentInfo;
-               }
-
-        // private const NumberStyles InvalidNumberStyles = unchecked((NumberStyles) 0xFFFFFC00);
-        private const NumberStyles InvalidNumberStyles = ~(NumberStyles.AllowLeadingWhite | NumberStyles.AllowTrailingWhite
-                                                           | NumberStyles.AllowLeadingSign | NumberStyles.AllowTrailingSign
-                                                           | NumberStyles.AllowParentheses | NumberStyles.AllowDecimalPoint
-                                                           | NumberStyles.AllowThousands | NumberStyles.AllowExponent
-                                                           | NumberStyles.AllowCurrencySymbol | NumberStyles.AllowHexSpecifier);
-
-        internal static void ValidateParseStyleInteger(NumberStyles style) {
-            // Check for undefined flags
-            if ((style & InvalidNumberStyles) != 0) {
-                throw new ArgumentException(Environment.GetResourceString("Argument_InvalidNumberStyles"), "style");
-            }
-            Contract.EndContractBlock();
-            if ((style & NumberStyles.AllowHexSpecifier) != 0) { // Check for hex number
-                if ((style & ~NumberStyles.HexNumber) != 0) {
-                    throw new ArgumentException(Environment.GetResourceString("Arg_InvalidHexStyle"));
-                }
-            }
-        }
-
-        internal static void ValidateParseStyleFloatingPoint(NumberStyles style) {
-            // Check for undefined flags
-            if ((style & InvalidNumberStyles) != 0) {
-                throw new ArgumentException(Environment.GetResourceString("Argument_InvalidNumberStyles"), "style");
-            }
-            Contract.EndContractBlock();
-            if ((style & NumberStyles.AllowHexSpecifier) != 0) { // Check for hex number
-                throw new ArgumentException(Environment.GetResourceString("Arg_HexStyleNotSupported"));
-            }
-        }
-       }
-}
index efa397bd7bc01f3610a38f99aeaab4ea6332bdae..ddbd37a5e27b405a9485c8495f309cbec47840cd 100644 (file)
@@ -57,7 +57,7 @@ namespace System {
                 * of icalls, do not require an increment.
                 */
 #pragma warning disable 169
-               private const int mono_corlib_version = 124;
+               private const int mono_corlib_version = 125;
 #pragma warning restore 169
 
                [ComVisible (true)]
index 4d3b0e9ccad29da8fe6ab24039b66a14a0616725..b15fa539e1e767216e8c24e0ea698cad413bd4dc 100644 (file)
@@ -1134,7 +1134,7 @@ namespace System
                                }
                        }
 
-                       AppendIntegerStringWithGroupSeparator (nfi.RawCurrencyGroupSizes, nfi.CurrencyGroupSeparator);
+                       AppendIntegerStringWithGroupSeparator (nfi.CurrencyGroupSizes, nfi.CurrencyGroupSeparator);
 
                        if (precision > 0) {
                                Append (nfi.CurrencyDecimalSeparator);
@@ -1343,7 +1343,7 @@ namespace System
                                }
                        }
 
-                       AppendIntegerStringWithGroupSeparator (nfi.RawNumberGroupSizes, nfi.NumberGroupSeparator);
+                       AppendIntegerStringWithGroupSeparator (nfi.NumberGroupSizes, nfi.NumberGroupSeparator);
 
                        if (precision > 0) {
                                Append (nfi.NumberDecimalSeparator);
@@ -1394,7 +1394,7 @@ namespace System
                                }
                        }
 
-                       AppendIntegerStringWithGroupSeparator (nfi.RawPercentGroupSizes, nfi.PercentGroupSeparator);
+                       AppendIntegerStringWithGroupSeparator (nfi.PercentGroupSizes, nfi.PercentGroupSeparator);
 
                        if (precision > 0) {
                                Append (nfi.PercentDecimalSeparator);
@@ -2168,7 +2168,7 @@ namespace System
                                int sb_int_index = 0;
                                int sb_dec_index = 0;
 
-                               int[] groups = nfi.RawNumberGroupSizes;
+                               int[] groups = nfi.NumberGroupSizes;
                                string groupSeparator = nfi.NumberGroupSeparator;
                                int intLen = 0, total = 0, groupIndex = 0, counter = 0, groupSize = 0;
                                if (UseGroup && groups.Length > 0) {
index c34d928fc9901cd6cec5512f15e121b2ec1a2ab9..4fe24842e61dffe5acbd9520590d45f4025eb4ef 100644 (file)
@@ -247,12 +247,10 @@ System.Globalization/CalendarWeekRule.cs
 System.Globalization/CompareInfo.cs
 System.Globalization/CompareOptions.cs
 System.Globalization/CultureInfo.cs
-System.Globalization/DateTimeFormatInfo.cs
 System.Globalization/DateTimeStyles.cs
 System.Globalization/DigitShapes.cs
 System.Globalization/GregorianCalendarTypes.cs
 System.Globalization/IdnMapping.cs
-System.Globalization/NumberFormatInfo.cs
 System.Globalization/RegionInfo.cs
 System.Globalization/RegionInfo.MonoTouch.cs
 System.Globalization/TextInfo.cs
@@ -1385,6 +1383,7 @@ ReferenceSources/RuntimeHandles.cs
 ../../../external/referencesource/mscorlib/system/globalization/koreancalendar.cs
 ../../../external/referencesource/mscorlib/system/globalization/koreanlunisolarcalendar.cs
 ../../../external/referencesource/mscorlib/system/globalization/numberstyles.cs
+../../../external/referencesource/mscorlib/system/globalization/numberformatinfo.cs
 ../../../external/referencesource/mscorlib/system/globalization/Persiancalendar.cs
 ../../../external/referencesource/mscorlib/system/globalization/sortversion.cs
 ../../../external/referencesource/mscorlib/system/globalization/stringinfo.cs
index 8ebbb630d54db99cb77366b9ceb7a6ce02ed28d6..b959cb96b044c12c25bc6400171af99f58e92842 100644 (file)
@@ -78,7 +78,7 @@
  * Changes which are already detected at runtime, like the addition
  * of icalls, do not require an increment.
  */
-#define MONO_CORLIB_VERSION 124
+#define MONO_CORLIB_VERSION 125
 
 typedef struct
 {
index b5fbfb658f4e6924e9cb74c80af1f3595f4cc7b8..0bcb0ddb955244a035e5114e4af7f9f1ead0869c 100644 (file)
@@ -294,287 +294,287 @@ static const DateTimeFormatEntry datetime_format_entries [] = {
 
 
 static const NumberFormatEntry number_format_entries [] = {
-       {691, 37441, 37443, 37446, 37443, 37446, 37449, 37459, 37462, 37477, 37480, 37490, 2566, 37499, 3, 2, 0, 0, 3, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 37504, 37441, 37504, 37441, 37504, 37507, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37441, 691, 37525, 37513, 37515, 37519, 37529, 37538, 2566, 37523, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 691, 37441, 37546, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 2, 0, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 691, 37441, 37546, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 2, 0, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 37504, 37441, 37504, 37441, 37504, 37549, 37513, 37515, 37519, 37553, 37565, 2566, 37523, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37441, 691, 37577, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 12, 2, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37441, 691, 37525, 37513, 37515, 37519, 37580, 37591, 2566, 37523, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37441, 691, 37525, 37513, 37515, 37519, 37602, 37616, 2566, 37523, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 691, 37441, 37629, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 0, 0, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 37504, 37441, 37504, 37525, 37513, 37515, 37519, 37631, 37641, 2566, 37523, 8, 3, 0, 0, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 37504, 37441, 37504, 37441, 37504, 37525, 37513, 37650, 37519, 37480, 37490, 2566, 37523, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 37504, 37441, 37504, 37441, 37504, 37525, 37513, 37515, 37519, 37659, 37667, 2566, 37523, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 691, 37441, 37675, 37513, 37515, 37519, 37679, 37490, 37692, 37697, 2, 2, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 37504, 37441, 37504, 37441, 37504, 37702, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 8, 3, 1, 1, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37441, 691, 37577, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 8, 3, 1, 1, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37441, 691, 37525, 37513, 37515, 37519, 37631, 37705, 2566, 37523, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 691, 37441, 37715, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 1, 0, 1, 1, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 691, 37441, 37719, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 1, 0, 0, 0, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37441, 691, 37525, 37513, 37515, 37519, 37723, 37733, 2566, 37523, 12, 2, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 37504, 37441, 37504, 37441, 37504, 0, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 12, 2, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 37504, 37441, 37504, 37441, 37504, 37742, 37513, 37515, 37519, 37746, 37765, 2566, 37523, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37441, 691, 37784, 37513, 37515, 37519, 37631, 37705, 2566, 37523, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37504, 691, 37787, 691, 37787, 37791, 37513, 37515, 37519, 37795, 37804, 2566, 37523, 2, 2, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37441, 691, 0, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 37504, 37441, 37504, 37441, 37504, 37813, 37513, 37821, 37519, 37838, 37866, 2566, 37523, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37441, 691, 37893, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 8, 3, 1, 1, 2, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 37504, 37441, 37504, 37441, 37504, 37525, 37513, 37515, 37519, 37553, 37565, 2566, 37523, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 37504, 37441, 37504, 37896, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 8, 3, 0, 0, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 37504, 37441, 37504, 37577, 37513, 37902, 37519, 37480, 37490, 2566, 37523, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 691, 37441, 37909, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 1, 0, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37441, 691, 37913, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 8, 3, 2, 2, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 691, 37441, 37917, 37513, 37920, 37519, 37943, 37490, 37959, 37967, 3, 0, 0, 0, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37441, 691, 37975, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 0, 0, 1, 1, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 37504, 37441, 37504, 37441, 37504, 37978, 37513, 37982, 37519, 37480, 37490, 2566, 37523, 5, 1, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 37504, 37441, 37504, 37441, 37504, 37999, 37513, 0, 37519, 37480, 37490, 2566, 37523, 8, 3, 0, 0, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37441, 691, 37525, 37513, 37515, 37519, 38003, 38017, 2566, 37523, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37504, 37441, 37504, 37441, 37504, 37525, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 37504, 37441, 37504, 37441, 37504, 37525, 37513, 38030, 37519, 38044, 38056, 2566, 37523, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 38067, 37441, 37504, 37441, 37504, 38069, 37513, 37515, 37519, 38072, 38083, 2566, 37523, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 37504, 37441, 37441, 37441, 37441, 0, 37513, 0, 37519, 37480, 37490, 2566, 37523, 8, 3, 1, 1, 1, 2, 2, 2, {3, 0}, {3, 0}, {3, 0}},
-       {185, 37441, 37443, 37446, 37443, 37446, 38093, 37459, 38102, 37477, 38113, 37490, 38128, 37967, 3, 0, 0, 0, 3, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37441, 691, 38135, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 8, 3, 0, 0, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 37441, 691, 37441, 691, 38139, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 8, 3, 0, 0, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 37504, 37441, 691, 37441, 691, 0, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37441, 691, 37525, 37513, 37515, 37519, 38145, 38155, 2566, 37523, 8, 3, 10, 3, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37441, 691, 38164, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 37441, 37504, 37441, 37504, 10836, 37513, 0, 37519, 37480, 37490, 2566, 37523, 2, 2, 2, 2, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 37441, 37504, 37441, 37504, 10836, 37513, 0, 37519, 37480, 37490, 2566, 37523, 2, 2, 2, 2, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 691, 37441, 10836, 37513, 38171, 37519, 37480, 37490, 2566, 37523, 2, 2, 2, 2, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 38067, 37441, 37504, 37441, 37504, 10836, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 2, 2, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 37504, 37441, 37504, 37441, 37504, 0, 37513, 38177, 37519, 37480, 37490, 2566, 37523, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37441, 691, 37577, 37513, 37902, 37519, 37480, 37490, 2566, 37523, 12, 2, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 691, 37441, 38218, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 12, 2, 0, 0, 1, 2, 2, 2, {3, 2}, {3, 2}, {3, 2}},
-       {691, 37441, 691, 37441, 691, 37441, 37525, 37513, 0, 37519, 37480, 37490, 2566, 37523, 1, 0, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 37504, 37441, 37504, 37441, 37504, 37525, 37513, 37902, 37519, 37480, 37490, 2566, 37523, 12, 2, 2, 2, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 691, 37441, 37525, 37513, 0, 37519, 37480, 37490, 2566, 37523, 1, 0, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 691, 37441, 38222, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 0, 0, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {2566, 37504, 37441, 37504, 37441, 37504, 0, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 1, 0, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 37504, 37441, 37504, 37441, 37504, 0, 37513, 38225, 37519, 37480, 37490, 2566, 37523, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 691, 37441, 38242, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 0, 0, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 37504, 37443, 37446, 37443, 37446, 0, 37459, 37515, 37477, 37480, 37490, 2566, 37523, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 37441, 37441, 37441, 37441, 38246, 37513, 38253, 37519, 37480, 37490, 2566, 37523, 12, 2, 1, 0, 1, 2, 2, 2, {3, 2}, {3, 2}, {3, 2}},
-       {691, 37441, 37443, 37441, 37443, 37441, 0, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 12, 2, 0, 0, 1, 2, 2, 2, {3, 2}, {3, 2}, {3, 2}},
-       {691, 37441, 691, 37441, 691, 37441, 38218, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 12, 2, 0, 0, 1, 2, 2, 2, {3, 2}, {3, 2}, {3, 2}},
-       {691, 37441, 691, 37441, 691, 37441, 38218, 37513, 0, 37519, 37480, 37490, 2566, 37523, 12, 2, 0, 0, 1, 2, 2, 2, {3, 2}, {3, 2}, {3, 2}},
-       {691, 37441, 691, 37441, 691, 37441, 38218, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 12, 2, 0, 0, 1, 2, 2, 2, {3, 2}, {3, 2}, {3, 2}},
-       {691, 37441, 691, 37441, 691, 37441, 38218, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 12, 2, 0, 0, 1, 2, 2, 2, {3, 2}, {3, 2}, {3, 2}},
-       {691, 37441, 691, 37441, 691, 37441, 38218, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 12, 2, 0, 0, 1, 2, 2, 2, {3, 2}, {3, 2}, {3, 2}},
-       {691, 37441, 691, 37441, 691, 37441, 38218, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 12, 2, 2, 2, 1, 2, 2, 2, {3, 2}, {3, 2}, {3, 2}},
-       {691, 37441, 37441, 37441, 37441, 37441, 38218, 37513, 0, 37519, 37480, 37490, 2566, 37523, 12, 2, 1, 1, 1, 2, 2, 2, {3, 2}, {3, 2}, {3, 2}},
-       {38280, 37441, 691, 37441, 691, 37441, 38218, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 12, 2, 0, 0, 1, 2, 2, 2, {3, 2}, {3, 2}, {3, 2}},
-       {37441, 37504, 691, 37441, 691, 37441, 0, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 691, 37441, 37546, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 2, 0, 1, 1, 1, 2, 2, 2, {3, 0}, {3, 0}, {3, 0}},
-       {691, 37441, 691, 37441, 691, 37441, 38282, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 1, 0, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 37441, 691, 37441, 691, 38285, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 5, 1, 1, 1, 2, 2, 2, 2, {3, -1}, {3, 0}, {3, 0}},
-       {691, 37441, 37441, 691, 37441, 691, 38289, 37513, 38293, 37519, 37480, 37490, 2566, 37523, 8, 3, 0, 0, 1, 0, 2, 2, {3, 0}, {3, 0}, {3, 0}},
-       {37441, 691, 37441, 691, 37441, 691, 37525, 37513, 37515, 37519, 37631, 37641, 2566, 37523, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 37441, 37441, 37441, 37441, 38218, 37513, 0, 37519, 37480, 37490, 2566, 37523, 12, 2, 0, 0, 1, 2, 2, 2, {3, 2}, {3, 2}, {3, 2}},
-       {691, 37441, 691, 37441, 691, 37441, 38330, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 14, 2, 0, 0, 1, 2, 2, 2, {3, -1}, {3, 2}, {3, 2}},
-       {691, 37441, 691, 37441, 691, 37441, 38338, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 1, 0, 1, 1, 1, 2, 1, 1, {3, 0}, {3, 0}, {3, 0}},
-       {37441, 38067, 37441, 37504, 37441, 37504, 0, 37513, 0, 37519, 37659, 37667, 2566, 37523, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 691, 37441, 38345, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 1, 0, 1, 1, 1, 2, 2, 2, {3, -1}, {3, 2}, {3, 2}},
-       {691, 37441, 37443, 37446, 37443, 37446, 38358, 37459, 0, 37519, 37480, 37490, 2566, 37523, 3, 0, 4, 2, 3, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 691, 37441, 38361, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 0, 0, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 691, 37441, 0, 37513, 0, 37519, 37480, 37490, 2566, 37523, 2, 2, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 37441, 37441, 37441, 37441, 38365, 37513, 0, 37519, 37480, 37490, 2566, 37523, 9, 2, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 37441, 37504, 37441, 37504, 10836, 37513, 0, 37519, 37480, 37490, 2566, 37523, 2, 2, 2, 2, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37441, 691, 37577, 37513, 37902, 37519, 37480, 37490, 2566, 37523, 12, 2, 0, 0, 1, 2, 2, 2, {3, 0}, {3, 0}, {3, 0}},
-       {691, 37441, 37441, 37441, 37441, 37441, 38365, 37513, 0, 37519, 37480, 37490, 2566, 37523, 2, 2, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 691, 37441, 37546, 37513, 0, 37519, 37480, 37490, 2566, 37523, 2, 0, 1, 1, 1, 2, 2, 2, {3, -1}, {3, 0}, {3, 0}},
-       {37441, 37504, 37441, 37504, 37441, 37504, 37525, 37513, 0, 37519, 37480, 37490, 2566, 37523, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 37504, 691, 37787, 691, 37787, 0, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 37504, 37441, 37441, 37441, 37441, 37813, 37513, 0, 37519, 37480, 37490, 2566, 37523, 5, 1, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 37504, 37441, 691, 37441, 691, 38369, 37513, 0, 37519, 37480, 37490, 2566, 37523, 8, 3, 0, 0, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 691, 37441, 38282, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 1, 0, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 37443, 37446, 37443, 37446, 37449, 37459, 37462, 37477, 37480, 37490, 2566, 37499, 3, 2, 0, 0, 3, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 37504, 37441, 37504, 37441, 37504, 37507, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37441, 691, 37525, 37513, 37515, 37519, 37529, 37538, 2566, 37523, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 691, 37441, 38372, 37513, 38376, 37519, 37480, 37490, 2566, 37523, 1, 0, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 37504, 37441, 37504, 37441, 37504, 37549, 37513, 37515, 37519, 37553, 37565, 2566, 37523, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37441, 691, 37577, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 12, 2, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37441, 691, 37525, 37513, 37515, 37519, 37580, 37591, 2566, 37523, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37441, 691, 37525, 37513, 37515, 37519, 37602, 37616, 2566, 37523, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 691, 37441, 37629, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 0, 0, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 37504, 37441, 37504, 37441, 37504, 37525, 37513, 37650, 37519, 37480, 37490, 2566, 37523, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 37504, 37441, 37504, 37441, 37504, 37525, 37513, 37515, 37519, 37659, 37667, 2566, 37523, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 691, 37441, 37675, 37513, 37515, 37519, 37679, 37490, 37692, 37697, 2, 2, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 37504, 37441, 37504, 37441, 37504, 37702, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 8, 3, 1, 1, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37441, 691, 37577, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 8, 3, 1, 1, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37441, 691, 37525, 37513, 37515, 37519, 37631, 37705, 2566, 37523, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 691, 37441, 37715, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 1, 0, 1, 1, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 691, 37441, 37719, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 1, 0, 0, 0, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37441, 691, 37525, 37513, 37515, 37519, 37723, 37733, 2566, 37523, 12, 2, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 37504, 37441, 37504, 37441, 37504, 37577, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 12, 2, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 37504, 37441, 37504, 37441, 37504, 37742, 37513, 37515, 37519, 37746, 37765, 2566, 37523, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37441, 691, 37784, 37513, 37515, 37519, 37631, 37705, 2566, 37523, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37504, 691, 37787, 691, 37787, 37791, 37513, 37515, 37519, 37795, 37804, 2566, 37523, 2, 2, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37441, 691, 0, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 37504, 37441, 37504, 37441, 37504, 37813, 37513, 37821, 37519, 37838, 37866, 2566, 37523, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37441, 691, 37893, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 8, 3, 1, 1, 2, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 37504, 37441, 37504, 37441, 37504, 37525, 37513, 37515, 37519, 37553, 37565, 2566, 37523, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 37504, 37441, 37504, 37896, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 8, 3, 0, 0, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 37504, 37441, 37504, 37577, 37513, 37902, 37519, 37480, 37490, 2566, 37523, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 691, 37441, 37909, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 1, 0, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37441, 691, 37913, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 8, 3, 2, 2, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 691, 37441, 37917, 37513, 37920, 37519, 37943, 37490, 37959, 37967, 3, 0, 0, 0, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37441, 691, 37975, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 0, 0, 1, 1, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 37504, 37441, 37504, 37441, 37504, 37978, 37513, 37982, 37519, 37480, 37490, 2566, 37523, 5, 1, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 37504, 37441, 37504, 37441, 37504, 37999, 37513, 0, 37519, 37480, 37490, 2566, 37523, 8, 3, 0, 0, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37441, 691, 37525, 37513, 37515, 37519, 38003, 38017, 2566, 37523, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37504, 37441, 37504, 37441, 37504, 37525, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 37504, 37441, 37504, 37441, 37504, 37525, 37513, 38030, 37519, 38044, 38056, 2566, 37523, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 38067, 37441, 37504, 37441, 37504, 38069, 37513, 37515, 37519, 38072, 38083, 2566, 37523, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 37504, 37441, 37441, 37441, 37441, 38386, 37513, 0, 37519, 37480, 37490, 2566, 37523, 8, 3, 1, 1, 1, 2, 2, 2, {3, 0}, {3, 0}, {3, 0}},
-       {185, 37441, 37443, 37446, 37443, 37446, 38093, 37459, 38102, 37477, 38113, 37490, 38128, 37967, 3, 0, 0, 0, 3, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37441, 691, 38135, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 8, 3, 0, 0, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 37441, 691, 37441, 691, 38139, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 8, 3, 0, 0, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 37504, 37441, 691, 37441, 691, 38393, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37441, 691, 37525, 37513, 37515, 37519, 38145, 38155, 2566, 37523, 8, 3, 10, 3, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37441, 691, 38164, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 37441, 37504, 37441, 37504, 10836, 37513, 0, 37519, 37480, 37490, 2566, 37523, 2, 2, 2, 2, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 37441, 37504, 37441, 37504, 10836, 37513, 0, 37519, 37480, 37490, 2566, 37523, 2, 2, 2, 2, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 691, 37441, 10836, 37513, 38171, 37519, 37480, 37490, 2566, 37523, 2, 2, 2, 2, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 38067, 37441, 37504, 37441, 37504, 10836, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 2, 2, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 37504, 37441, 37504, 37441, 37504, 0, 37513, 38177, 37519, 37480, 37490, 2566, 37523, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37441, 691, 37577, 37513, 37902, 37519, 37480, 37490, 2566, 37523, 12, 2, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 691, 37441, 38218, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 12, 2, 0, 0, 1, 2, 2, 2, {3, 2}, {3, 2}, {3, 2}},
-       {691, 37441, 691, 37441, 691, 37441, 37525, 37513, 0, 37519, 37480, 37490, 2566, 37523, 1, 0, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 37504, 37441, 37504, 37441, 37504, 37577, 37513, 37902, 37519, 37480, 37490, 2566, 37523, 12, 2, 2, 2, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 691, 37441, 38242, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 0, 0, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 37504, 37443, 37446, 37443, 37446, 38398, 37459, 37515, 37477, 37480, 37490, 2566, 37523, 8, 3, 1, 1, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 37441, 37441, 37441, 37441, 38218, 37513, 38253, 37519, 37480, 37490, 2566, 37523, 12, 2, 1, 0, 1, 2, 2, 2, {3, 2}, {3, 2}, {3, 2}},
-       {691, 37441, 691, 37441, 691, 37441, 38218, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 12, 2, 0, 0, 1, 2, 2, 2, {3, 2}, {3, 2}, {3, 2}},
-       {691, 37441, 691, 37441, 691, 37441, 38218, 37513, 0, 37519, 37480, 37490, 2566, 37523, 12, 2, 0, 0, 1, 2, 2, 2, {3, 2}, {3, 2}, {3, 2}},
-       {691, 37441, 691, 37441, 691, 37441, 38218, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 12, 2, 0, 0, 1, 2, 2, 2, {3, 2}, {3, 2}, {3, 2}},
-       {691, 37441, 691, 37441, 691, 37441, 38218, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 12, 2, 0, 0, 1, 2, 2, 2, {3, 2}, {3, 2}, {3, 2}},
-       {691, 37441, 691, 37441, 691, 37441, 38218, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 12, 2, 0, 0, 1, 2, 2, 2, {3, 2}, {3, 2}, {3, 2}},
-       {691, 37441, 691, 37441, 691, 37441, 38218, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 12, 2, 2, 2, 1, 2, 2, 2, {3, 2}, {3, 2}, {3, 2}},
-       {691, 37441, 37441, 37441, 37441, 37441, 38218, 37513, 0, 37519, 37480, 37490, 2566, 37523, 12, 2, 1, 1, 1, 2, 2, 2, {3, 2}, {3, 2}, {3, 2}},
-       {38280, 37441, 691, 37441, 691, 37441, 38218, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 12, 2, 0, 0, 1, 2, 2, 2, {3, 2}, {3, 2}, {3, 2}},
-       {691, 37441, 691, 37441, 691, 37441, 37546, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 2, 0, 1, 1, 1, 2, 2, 2, {3, 0}, {3, 0}, {3, 0}},
-       {691, 37441, 691, 37441, 691, 37441, 38282, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 1, 0, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 37441, 691, 37441, 691, 38285, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 5, 1, 1, 1, 2, 2, 2, 2, {3, -1}, {3, 0}, {3, 0}},
-       {691, 37441, 37441, 691, 37441, 691, 38289, 37513, 38293, 37519, 37480, 37490, 2566, 37523, 8, 3, 0, 0, 1, 0, 2, 2, {3, 0}, {3, 0}, {3, 0}},
-       {37441, 691, 37441, 691, 37441, 691, 37525, 37513, 37515, 37519, 37631, 37641, 2566, 37523, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 37441, 37441, 37441, 37441, 38218, 37513, 0, 37519, 37480, 37490, 2566, 37523, 12, 2, 0, 0, 1, 2, 2, 2, {3, 2}, {3, 2}, {3, 2}},
-       {691, 37441, 691, 37441, 691, 37441, 38330, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 14, 2, 0, 0, 1, 2, 2, 2, {3, -1}, {3, 2}, {3, 2}},
-       {691, 37441, 691, 37441, 691, 37441, 38338, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 1, 0, 1, 1, 1, 2, 1, 1, {3, 0}, {3, 0}, {3, 0}},
-       {691, 37441, 691, 37441, 691, 37441, 38345, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 1, 0, 1, 1, 1, 2, 2, 2, {3, -1}, {3, 2}, {3, 2}},
-       {691, 37441, 37443, 37446, 37443, 37446, 38358, 37459, 0, 37519, 37480, 37490, 2566, 37523, 3, 0, 4, 2, 3, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 691, 37441, 38361, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 0, 0, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 691, 37441, 38365, 37513, 0, 37519, 37480, 37490, 2566, 37523, 2, 2, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 37441, 37441, 37441, 37441, 38365, 37513, 0, 37519, 37480, 37490, 2566, 37523, 9, 2, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 37441, 37504, 37441, 37504, 10836, 37513, 0, 37519, 37480, 37490, 2566, 37523, 2, 2, 2, 2, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37441, 691, 37577, 37513, 37902, 37519, 37480, 37490, 2566, 37523, 12, 2, 0, 0, 1, 2, 2, 2, {3, 0}, {3, 0}, {3, 0}},
-       {691, 37441, 37441, 37441, 37441, 37441, 38365, 37513, 0, 37519, 37480, 37490, 2566, 37523, 2, 2, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 691, 37441, 37546, 37513, 0, 37519, 37480, 37490, 2566, 37523, 2, 0, 1, 1, 1, 2, 2, 2, {3, -1}, {3, 0}, {3, 0}},
-       {37441, 37504, 37441, 37504, 37441, 37504, 37525, 37513, 0, 37519, 37480, 37490, 2566, 37523, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 37504, 37441, 37441, 37441, 37441, 37813, 37513, 0, 37519, 37480, 37490, 2566, 37523, 5, 1, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 37504, 37441, 691, 37441, 691, 38369, 37513, 0, 37519, 37480, 37490, 2566, 37523, 8, 3, 0, 0, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 691, 37441, 38282, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 1, 0, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 37443, 37446, 37443, 37446, 38404, 37459, 37462, 37477, 37480, 37490, 2566, 37499, 3, 2, 0, 0, 3, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 691, 37441, 37715, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 2, 0, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37504, 691, 38414, 691, 38414, 37791, 37513, 37515, 37519, 37580, 37591, 2566, 37523, 2, 2, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 691, 37441, 38282, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 1, 0, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 691, 37441, 37629, 37513, 37515, 37519, 37631, 37641, 2566, 37523, 1, 0, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37441, 691, 37525, 37513, 37515, 37519, 37659, 37667, 2566, 37523, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37504, 691, 38414, 691, 38414, 37791, 37513, 37515, 37519, 37631, 37705, 2566, 37523, 2, 2, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37441, 691, 37525, 37513, 37515, 37519, 37723, 37733, 2566, 37523, 12, 2, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 37504, 37441, 37504, 37441, 37504, 37577, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 12, 2, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 37504, 37441, 37504, 37441, 37504, 37525, 37513, 37515, 37519, 37631, 37705, 2566, 37523, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 37504, 37441, 37504, 37441, 37504, 37525, 37513, 37902, 37519, 37480, 37490, 2566, 37523, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 37504, 37441, 691, 37441, 691, 38416, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 691, 37441, 37525, 37513, 0, 37519, 37480, 37490, 2566, 37523, 1, 0, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 37504, 37443, 37446, 37443, 37446, 38424, 37459, 37515, 37477, 37480, 37490, 2566, 37523, 8, 3, 1, 1, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 37441, 37441, 37441, 37441, 38431, 37513, 38253, 37519, 37480, 37490, 2566, 37523, 12, 2, 1, 0, 1, 2, 2, 2, {3, 2}, {3, 2}, {3, 2}},
-       {691, 37441, 37443, 37446, 37443, 37446, 38435, 37459, 37515, 37477, 37480, 37490, 2566, 37499, 3, 2, 0, 0, 3, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 691, 37441, 37629, 37513, 38376, 37519, 37480, 37490, 2566, 37523, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37441, 691, 37525, 37513, 37515, 37519, 37580, 37591, 2566, 37523, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 691, 37441, 37629, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 1, 0, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37441, 691, 37525, 37513, 37515, 37519, 37631, 37641, 2566, 37523, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 37504, 37441, 37504, 37441, 37504, 37629, 37513, 37515, 37519, 37659, 37667, 2566, 37523, 15, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 37504, 37441, 37504, 37441, 37504, 37525, 37513, 37902, 37519, 37480, 37490, 2566, 37523, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 37441, 691, 37441, 691, 38445, 37459, 37462, 37477, 37480, 37490, 2566, 37499, 3, 0, 0, 0, 3, 3, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 691, 37441, 37629, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37441, 691, 37525, 37513, 37515, 37519, 37580, 37591, 2566, 37523, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 691, 37441, 37629, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 1, 0, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 691, 37441, 8056, 37513, 37515, 37519, 37631, 37641, 2566, 37523, 1, 0, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37504, 691, 38414, 691, 38414, 37791, 37513, 37515, 37519, 37659, 37667, 2566, 37523, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37441, 691, 38455, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 8, 3, 0, 0, 2, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 37443, 37446, 37443, 37446, 38458, 37459, 37462, 37477, 37480, 37490, 2566, 37499, 3, 2, 0, 0, 3, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 691, 37441, 38468, 37513, 38376, 37519, 37480, 37490, 2566, 37523, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 691, 691, 38414, 691, 38414, 0, 37513, 37515, 37519, 37580, 37591, 2566, 37523, 2, 2, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 691, 37441, 37629, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 1, 0, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37441, 691, 38473, 37513, 37515, 37519, 37631, 37641, 2566, 37523, 0, 0, 1, 1, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 37504, 37441, 691, 37441, 691, 37525, 37513, 37515, 37519, 37659, 37667, 2566, 37523, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37441, 691, 38455, 37513, 0, 37519, 37480, 37490, 2566, 37523, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 37443, 37446, 37443, 37446, 38477, 37459, 37462, 37477, 37480, 37490, 2566, 37499, 3, 2, 0, 0, 3, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 691, 37441, 37525, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 1, 0, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 691, 37441, 38487, 37513, 37515, 37519, 37631, 37641, 2566, 37523, 14, 2, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 37504, 37441, 37504, 37441, 37504, 37525, 37513, 37515, 37519, 37659, 37667, 2566, 37523, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37441, 691, 38455, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 37441, 691, 37441, 691, 38491, 37459, 37462, 37477, 37480, 37490, 2566, 37499, 3, 2, 0, 0, 3, 3, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 37504, 37441, 37504, 37441, 37504, 10836, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 2, 2, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 691, 37441, 37629, 37513, 37515, 37519, 37631, 37641, 2566, 37523, 1, 0, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37441, 691, 38501, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 37443, 37446, 37443, 37446, 38506, 37459, 37462, 37477, 37480, 37490, 2566, 37499, 3, 2, 0, 0, 3, 3, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 691, 37441, 37629, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 1, 0, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37441, 691, 38516, 37513, 37515, 37519, 37631, 37641, 2566, 37523, 12, 2, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37441, 691, 38501, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 37443, 37446, 37443, 37446, 38520, 37459, 37462, 37477, 37480, 37490, 2566, 37499, 3, 2, 0, 0, 3, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37441, 691, 37629, 37513, 37515, 37519, 37631, 37641, 2566, 37523, 1, 0, 1, 1, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37441, 691, 38530, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 8, 3, 1, 1, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 37443, 37446, 37443, 37446, 38535, 37459, 37462, 37477, 37480, 37490, 2566, 37499, 3, 2, 0, 0, 3, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 691, 37441, 37629, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 0, 0, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 691, 37441, 38545, 37513, 37515, 37519, 37631, 37641, 2566, 37523, 12, 2, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37441, 691, 38549, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 8, 3, 1, 1, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 37443, 37446, 37443, 37446, 38557, 37459, 37462, 37477, 37480, 37490, 2566, 37499, 3, 2, 0, 0, 3, 3, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 691, 37441, 37629, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 0, 0, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37441, 691, 37629, 37513, 37515, 37519, 37631, 37641, 2566, 37523, 2, 2, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37441, 691, 37525, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 37441, 691, 37441, 691, 38567, 37459, 37462, 37477, 37480, 37490, 2566, 37499, 3, 2, 0, 0, 3, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 691, 37441, 37629, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37441, 691, 37629, 37513, 37515, 37519, 37631, 37641, 2566, 37523, 14, 2, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37441, 691, 37525, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 37443, 37446, 37443, 37446, 38577, 37459, 37462, 37477, 37480, 37490, 2566, 37499, 3, 2, 0, 0, 3, 3, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 691, 37441, 38361, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 0, 0, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37441, 691, 37629, 37513, 37515, 37519, 37631, 37641, 2566, 37523, 9, 2, 0, 0, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 37443, 37446, 37443, 37446, 38587, 37459, 37462, 37477, 37480, 37490, 2566, 37499, 3, 2, 0, 0, 3, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37441, 691, 37629, 37513, 37515, 37519, 37631, 37641, 2566, 37523, 9, 2, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 37443, 37446, 37443, 37446, 38597, 37459, 37462, 37477, 37480, 37490, 2566, 37499, 3, 2, 0, 0, 3, 3, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37441, 691, 38607, 37513, 37515, 37519, 37631, 37641, 2566, 37523, 14, 2, 0, 0, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 37443, 37446, 37443, 37446, 38611, 37459, 37462, 37477, 37480, 37490, 2566, 37499, 3, 2, 0, 0, 3, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 691, 37441, 38218, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 12, 2, 1, 1, 1, 2, 2, 2, {3, 2}, {3, 2}, {3, 2}},
-       {37441, 691, 37441, 691, 37441, 691, 38621, 37513, 37515, 37519, 37631, 37641, 2566, 37523, 14, 2, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 691, 37441, 37629, 37513, 37515, 37519, 37631, 37641, 2566, 37523, 0, 0, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 691, 37441, 37629, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 691, 37441, 2436, 37513, 37515, 37519, 37631, 37641, 2566, 37523, 12, 2, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 691, 37441, 38624, 37513, 37515, 37519, 37631, 37641, 2566, 37523, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 691, 37441, 37629, 37513, 37515, 37519, 37631, 37641, 2566, 37523, 1, 0, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 691, 37441, 37629, 37513, 37515, 37519, 37631, 37641, 2566, 37523, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1}, {3, 0}, {3, 0}},
-       {37441, 691, 37441, 691, 37441, 691, 38501, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37441, 691, 38455, 37513, 0, 37519, 37480, 37490, 2566, 37523, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37441, 691, 38627, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37441, 691, 38635, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 37504, 37441, 691, 37441, 691, 38416, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 691, 37441, 37546, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 2, 0, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 37504, 37441, 37504, 37441, 37504, 37577, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 12, 2, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37441, 691, 38455, 37513, 0, 37519, 37480, 37490, 2566, 37523, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 37504, 37441, 691, 37441, 691, 38393, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 37504, 37443, 37446, 37443, 37446, 38424, 37459, 37515, 37477, 37480, 37490, 2566, 37523, 8, 3, 1, 1, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 37504, 691, 37441, 691, 37441, 0, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 691, 37441, 38640, 37513, 38376, 37519, 37480, 37490, 2566, 37523, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 691, 37441, 38640, 37513, 38376, 37519, 37480, 37490, 2566, 37523, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 37504, 37441, 37504, 37441, 37504, 37577, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 12, 2, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37441, 691, 38635, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 37504, 37441, 37441, 37441, 37441, 38386, 37513, 0, 37519, 37480, 37490, 2566, 37523, 8, 3, 1, 1, 1, 2, 2, 2, {3, 0}, {3, 0}, {3, 0}},
-       {37441, 37504, 37443, 37446, 37443, 37446, 38398, 37459, 37515, 37477, 37480, 37490, 2566, 37523, 8, 3, 1, 1, 1, 0, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {37441, 38067, 37441, 37504, 37441, 37504, 0, 37513, 0, 37519, 37659, 37667, 2566, 37523, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 691, 37441, 38365, 37513, 0, 37519, 37480, 37490, 2566, 37523, 2, 2, 0, 0, 1, 2, 2, 2, {3, -1}, {3, -1}, {3, -1}}
+       {691, 37441, 37443, 37446, 37449, 37459, 37462, 37477, 37480, 37490, 2566, 37499, 3, 2, 0, 0, 3, 2, 2, {3, -1}, {3, -1}},
+       {37441, 37504, 37441, 37504, 37507, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 691, 37441, 691, 37525, 37513, 37515, 37519, 37529, 37538, 2566, 37523, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37441, 691, 37441, 37546, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 2, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37441, 691, 37441, 37546, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 2, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 37504, 37441, 37504, 37549, 37513, 37515, 37519, 37553, 37565, 2566, 37523, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 691, 37441, 691, 37577, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 12, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 691, 37441, 691, 37525, 37513, 37515, 37519, 37580, 37591, 2566, 37523, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 691, 37441, 691, 37525, 37513, 37515, 37519, 37602, 37616, 2566, 37523, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37441, 691, 37441, 37629, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 0, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 691, 37441, 37504, 37525, 37513, 37515, 37519, 37631, 37641, 2566, 37523, 8, 3, 0, 0, 1, 0, 2, {3, -1}, {3, -1}},
+       {37441, 37504, 37441, 37504, 37525, 37513, 37650, 37519, 37480, 37490, 2566, 37523, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 37504, 37441, 37504, 37525, 37513, 37515, 37519, 37659, 37667, 2566, 37523, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37441, 691, 37441, 37675, 37513, 37515, 37519, 37679, 37490, 37692, 37697, 2, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 37504, 37441, 37504, 37702, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 8, 3, 1, 1, 1, 0, 2, {3, -1}, {3, -1}},
+       {37441, 691, 37441, 691, 37577, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 8, 3, 1, 1, 1, 0, 2, {3, -1}, {3, -1}},
+       {37441, 691, 37441, 691, 37525, 37513, 37515, 37519, 37631, 37705, 2566, 37523, 9, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37441, 691, 37441, 37715, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 1, 0, 1, 1, 1, 0, 2, {3, -1}, {3, -1}},
+       {691, 37441, 691, 37441, 37719, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 1, 0, 0, 0, 1, 0, 2, {3, -1}, {3, -1}},
+       {37441, 691, 37441, 691, 37525, 37513, 37515, 37519, 37723, 37733, 2566, 37523, 12, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 37504, 37441, 37504, 0, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 12, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 37504, 37441, 37504, 37742, 37513, 37515, 37519, 37746, 37765, 2566, 37523, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 691, 37441, 691, 37784, 37513, 37515, 37519, 37631, 37705, 2566, 37523, 9, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37504, 691, 37787, 37791, 37513, 37515, 37519, 37795, 37804, 2566, 37523, 2, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 691, 37441, 691, 0, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 37504, 37441, 37504, 37813, 37513, 37821, 37519, 37838, 37866, 2566, 37523, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 691, 37441, 691, 37893, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 8, 3, 1, 1, 2, 2, 2, {3, -1}, {3, -1}},
+       {37441, 37504, 37441, 37504, 37525, 37513, 37515, 37519, 37553, 37565, 2566, 37523, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 691, 37441, 37504, 37896, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 8, 3, 0, 0, 1, 0, 2, {3, -1}, {3, -1}},
+       {37441, 691, 37441, 37504, 37577, 37513, 37902, 37519, 37480, 37490, 2566, 37523, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37441, 691, 37441, 37909, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 1, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 691, 37441, 691, 37913, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 8, 3, 2, 2, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37441, 691, 37441, 37917, 37513, 37920, 37519, 37943, 37490, 37959, 37967, 3, 0, 0, 0, 1, 0, 2, {3, -1}, {3, -1}},
+       {37441, 691, 37441, 691, 37975, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 0, 0, 1, 1, 1, 0, 2, {3, -1}, {3, -1}},
+       {37441, 37504, 37441, 37504, 37978, 37513, 37982, 37519, 37480, 37490, 2566, 37523, 5, 1, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 37504, 37441, 37504, 37999, 37513, 0, 37519, 37480, 37490, 2566, 37523, 8, 3, 0, 0, 1, 0, 2, {3, -1}, {3, -1}},
+       {37441, 691, 37441, 691, 37525, 37513, 37515, 37519, 38003, 38017, 2566, 37523, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37504, 37441, 37504, 37525, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 37504, 37441, 37504, 37525, 37513, 38030, 37519, 38044, 38056, 2566, 37523, 9, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 38067, 37441, 37504, 38069, 37513, 37515, 37519, 38072, 38083, 2566, 37523, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 37504, 37441, 37441, 0, 37513, 0, 37519, 37480, 37490, 2566, 37523, 8, 3, 1, 1, 1, 2, 2, {3, 0}, {3, 0}},
+       {185, 37441, 37443, 37446, 38093, 37459, 38102, 37477, 38113, 37490, 38128, 37967, 3, 0, 0, 0, 3, 0, 2, {3, -1}, {3, -1}},
+       {37441, 691, 37441, 691, 38135, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 8, 3, 0, 0, 1, 0, 2, {3, -1}, {3, -1}},
+       {691, 37441, 37441, 691, 38139, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 8, 3, 0, 0, 1, 0, 2, {3, -1}, {3, -1}},
+       {37441, 37504, 37441, 691, 0, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 691, 37441, 691, 37525, 37513, 37515, 37519, 38145, 38155, 2566, 37523, 8, 3, 10, 3, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 691, 37441, 691, 38164, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37441, 37441, 37504, 10836, 37513, 0, 37519, 37480, 37490, 2566, 37523, 2, 2, 2, 2, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37441, 37441, 37504, 10836, 37513, 0, 37519, 37480, 37490, 2566, 37523, 2, 2, 2, 2, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37441, 691, 37441, 10836, 37513, 38171, 37519, 37480, 37490, 2566, 37523, 2, 2, 2, 2, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 38067, 37441, 37504, 10836, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 2, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 37504, 37441, 37504, 0, 37513, 38177, 37519, 37480, 37490, 2566, 37523, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 691, 37441, 691, 37577, 37513, 37902, 37519, 37480, 37490, 2566, 37523, 12, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37441, 691, 37441, 38218, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}},
+       {691, 37441, 691, 37441, 37525, 37513, 0, 37519, 37480, 37490, 2566, 37523, 1, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 37504, 37441, 37504, 37525, 37513, 37902, 37519, 37480, 37490, 2566, 37523, 12, 2, 2, 2, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37441, 691, 37441, 37525, 37513, 0, 37519, 37480, 37490, 2566, 37523, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37441, 691, 37441, 38222, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 0, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {2566, 37504, 37441, 37504, 0, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 37504, 37441, 37504, 0, 37513, 38225, 37519, 37480, 37490, 2566, 37523, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37441, 691, 37441, 38242, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 0, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 37504, 37443, 37446, 0, 37459, 37515, 37477, 37480, 37490, 2566, 37523, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37441, 37441, 37441, 38246, 37513, 38253, 37519, 37480, 37490, 2566, 37523, 12, 2, 1, 0, 1, 2, 2, {3, 2}, {3, 2}},
+       {691, 37441, 37443, 37441, 0, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}},
+       {691, 37441, 691, 37441, 38218, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}},
+       {691, 37441, 691, 37441, 38218, 37513, 0, 37519, 37480, 37490, 2566, 37523, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}},
+       {691, 37441, 691, 37441, 38218, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}},
+       {691, 37441, 691, 37441, 38218, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}},
+       {691, 37441, 691, 37441, 38218, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}},
+       {691, 37441, 691, 37441, 38218, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 12, 2, 2, 2, 1, 2, 2, {3, 2}, {3, 2}},
+       {691, 37441, 37441, 37441, 38218, 37513, 0, 37519, 37480, 37490, 2566, 37523, 12, 2, 1, 1, 1, 2, 2, {3, 2}, {3, 2}},
+       {38280, 37441, 691, 37441, 38218, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}},
+       {37441, 37504, 691, 37441, 0, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37441, 691, 37441, 37546, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 2, 0, 1, 1, 1, 2, 2, {3, 0}, {3, 0}},
+       {691, 37441, 691, 37441, 38282, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37441, 37441, 691, 38285, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 5, 1, 1, 1, 2, 2, 2, {3, -1}, {3, 0}},
+       {691, 37441, 37441, 691, 38289, 37513, 38293, 37519, 37480, 37490, 2566, 37523, 8, 3, 0, 0, 1, 0, 2, {3, 0}, {3, 0}},
+       {37441, 691, 37441, 691, 37525, 37513, 37515, 37519, 37631, 37641, 2566, 37523, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37441, 37441, 37441, 38218, 37513, 0, 37519, 37480, 37490, 2566, 37523, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}},
+       {691, 37441, 691, 37441, 38330, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 14, 2, 0, 0, 1, 2, 2, {3, -1}, {3, 2}},
+       {691, 37441, 691, 37441, 38338, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 1, 0, 1, 1, 1, 2, 1, {3, 0}, {3, 0}},
+       {37441, 38067, 37441, 37504, 0, 37513, 0, 37519, 37659, 37667, 2566, 37523, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37441, 691, 37441, 38345, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, 2}},
+       {691, 37441, 37443, 37446, 38358, 37459, 0, 37519, 37480, 37490, 2566, 37523, 3, 0, 4, 2, 3, 0, 2, {3, -1}, {3, -1}},
+       {691, 37441, 691, 37441, 38361, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 0, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37441, 691, 37441, 0, 37513, 0, 37519, 37480, 37490, 2566, 37523, 2, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37441, 37441, 37441, 38365, 37513, 0, 37519, 37480, 37490, 2566, 37523, 9, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37441, 37441, 37504, 10836, 37513, 0, 37519, 37480, 37490, 2566, 37523, 2, 2, 2, 2, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 691, 37441, 691, 37577, 37513, 37902, 37519, 37480, 37490, 2566, 37523, 12, 2, 0, 0, 1, 2, 2, {3, 0}, {3, 0}},
+       {691, 37441, 37441, 37441, 38365, 37513, 0, 37519, 37480, 37490, 2566, 37523, 2, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37441, 691, 37441, 37546, 37513, 0, 37519, 37480, 37490, 2566, 37523, 2, 0, 1, 1, 1, 2, 2, {3, -1}, {3, 0}},
+       {37441, 37504, 37441, 37504, 37525, 37513, 0, 37519, 37480, 37490, 2566, 37523, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 37504, 691, 37787, 0, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 37504, 37441, 37441, 37813, 37513, 0, 37519, 37480, 37490, 2566, 37523, 5, 1, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 37504, 37441, 691, 38369, 37513, 0, 37519, 37480, 37490, 2566, 37523, 8, 3, 0, 0, 1, 0, 2, {3, -1}, {3, -1}},
+       {691, 37441, 691, 37441, 38282, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 1, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37441, 37443, 37446, 37449, 37459, 37462, 37477, 37480, 37490, 2566, 37499, 3, 2, 0, 0, 3, 2, 2, {3, -1}, {3, -1}},
+       {37441, 37504, 37441, 37504, 37507, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 691, 37441, 691, 37525, 37513, 37515, 37519, 37529, 37538, 2566, 37523, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37441, 691, 37441, 38372, 37513, 38376, 37519, 37480, 37490, 2566, 37523, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 37504, 37441, 37504, 37549, 37513, 37515, 37519, 37553, 37565, 2566, 37523, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 691, 37441, 691, 37577, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 12, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 691, 37441, 691, 37525, 37513, 37515, 37519, 37580, 37591, 2566, 37523, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 691, 37441, 691, 37525, 37513, 37515, 37519, 37602, 37616, 2566, 37523, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37441, 691, 37441, 37629, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 0, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 37504, 37441, 37504, 37525, 37513, 37650, 37519, 37480, 37490, 2566, 37523, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 37504, 37441, 37504, 37525, 37513, 37515, 37519, 37659, 37667, 2566, 37523, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37441, 691, 37441, 37675, 37513, 37515, 37519, 37679, 37490, 37692, 37697, 2, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 37504, 37441, 37504, 37702, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 8, 3, 1, 1, 1, 0, 2, {3, -1}, {3, -1}},
+       {37441, 691, 37441, 691, 37577, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 8, 3, 1, 1, 1, 0, 2, {3, -1}, {3, -1}},
+       {37441, 691, 37441, 691, 37525, 37513, 37515, 37519, 37631, 37705, 2566, 37523, 9, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37441, 691, 37441, 37715, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 1, 0, 1, 1, 1, 0, 2, {3, -1}, {3, -1}},
+       {691, 37441, 691, 37441, 37719, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 1, 0, 0, 0, 1, 0, 2, {3, -1}, {3, -1}},
+       {37441, 691, 37441, 691, 37525, 37513, 37515, 37519, 37723, 37733, 2566, 37523, 12, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 37504, 37441, 37504, 37577, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 12, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 37504, 37441, 37504, 37742, 37513, 37515, 37519, 37746, 37765, 2566, 37523, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 691, 37441, 691, 37784, 37513, 37515, 37519, 37631, 37705, 2566, 37523, 9, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37504, 691, 37787, 37791, 37513, 37515, 37519, 37795, 37804, 2566, 37523, 2, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 691, 37441, 691, 0, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 37504, 37441, 37504, 37813, 37513, 37821, 37519, 37838, 37866, 2566, 37523, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 691, 37441, 691, 37893, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 8, 3, 1, 1, 2, 2, 2, {3, -1}, {3, -1}},
+       {37441, 37504, 37441, 37504, 37525, 37513, 37515, 37519, 37553, 37565, 2566, 37523, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 691, 37441, 37504, 37896, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 8, 3, 0, 0, 1, 0, 2, {3, -1}, {3, -1}},
+       {37441, 691, 37441, 37504, 37577, 37513, 37902, 37519, 37480, 37490, 2566, 37523, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37441, 691, 37441, 37909, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 1, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 691, 37441, 691, 37913, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 8, 3, 2, 2, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37441, 691, 37441, 37917, 37513, 37920, 37519, 37943, 37490, 37959, 37967, 3, 0, 0, 0, 1, 0, 2, {3, -1}, {3, -1}},
+       {37441, 691, 37441, 691, 37975, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 0, 0, 1, 1, 1, 0, 2, {3, -1}, {3, -1}},
+       {37441, 37504, 37441, 37504, 37978, 37513, 37982, 37519, 37480, 37490, 2566, 37523, 5, 1, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 37504, 37441, 37504, 37999, 37513, 0, 37519, 37480, 37490, 2566, 37523, 8, 3, 0, 0, 1, 0, 2, {3, -1}, {3, -1}},
+       {37441, 691, 37441, 691, 37525, 37513, 37515, 37519, 38003, 38017, 2566, 37523, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37504, 37441, 37504, 37525, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 37504, 37441, 37504, 37525, 37513, 38030, 37519, 38044, 38056, 2566, 37523, 9, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 38067, 37441, 37504, 38069, 37513, 37515, 37519, 38072, 38083, 2566, 37523, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 37504, 37441, 37441, 38386, 37513, 0, 37519, 37480, 37490, 2566, 37523, 8, 3, 1, 1, 1, 2, 2, {3, 0}, {3, 0}},
+       {185, 37441, 37443, 37446, 38093, 37459, 38102, 37477, 38113, 37490, 38128, 37967, 3, 0, 0, 0, 3, 0, 2, {3, -1}, {3, -1}},
+       {37441, 691, 37441, 691, 38135, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 8, 3, 0, 0, 1, 0, 2, {3, -1}, {3, -1}},
+       {691, 37441, 37441, 691, 38139, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 8, 3, 0, 0, 1, 0, 2, {3, -1}, {3, -1}},
+       {37441, 37504, 37441, 691, 38393, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 691, 37441, 691, 37525, 37513, 37515, 37519, 38145, 38155, 2566, 37523, 8, 3, 10, 3, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 691, 37441, 691, 38164, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37441, 37441, 37504, 10836, 37513, 0, 37519, 37480, 37490, 2566, 37523, 2, 2, 2, 2, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37441, 37441, 37504, 10836, 37513, 0, 37519, 37480, 37490, 2566, 37523, 2, 2, 2, 2, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37441, 691, 37441, 10836, 37513, 38171, 37519, 37480, 37490, 2566, 37523, 2, 2, 2, 2, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 38067, 37441, 37504, 10836, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 2, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 37504, 37441, 37504, 0, 37513, 38177, 37519, 37480, 37490, 2566, 37523, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 691, 37441, 691, 37577, 37513, 37902, 37519, 37480, 37490, 2566, 37523, 12, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37441, 691, 37441, 38218, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}},
+       {691, 37441, 691, 37441, 37525, 37513, 0, 37519, 37480, 37490, 2566, 37523, 1, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 37504, 37441, 37504, 37577, 37513, 37902, 37519, 37480, 37490, 2566, 37523, 12, 2, 2, 2, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37441, 691, 37441, 38242, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 0, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 37504, 37443, 37446, 38398, 37459, 37515, 37477, 37480, 37490, 2566, 37523, 8, 3, 1, 1, 1, 0, 2, {3, -1}, {3, -1}},
+       {691, 37441, 37441, 37441, 38218, 37513, 38253, 37519, 37480, 37490, 2566, 37523, 12, 2, 1, 0, 1, 2, 2, {3, 2}, {3, 2}},
+       {691, 37441, 691, 37441, 38218, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}},
+       {691, 37441, 691, 37441, 38218, 37513, 0, 37519, 37480, 37490, 2566, 37523, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}},
+       {691, 37441, 691, 37441, 38218, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}},
+       {691, 37441, 691, 37441, 38218, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}},
+       {691, 37441, 691, 37441, 38218, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}},
+       {691, 37441, 691, 37441, 38218, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 12, 2, 2, 2, 1, 2, 2, {3, 2}, {3, 2}},
+       {691, 37441, 37441, 37441, 38218, 37513, 0, 37519, 37480, 37490, 2566, 37523, 12, 2, 1, 1, 1, 2, 2, {3, 2}, {3, 2}},
+       {38280, 37441, 691, 37441, 38218, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}},
+       {691, 37441, 691, 37441, 37546, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 2, 0, 1, 1, 1, 2, 2, {3, 0}, {3, 0}},
+       {691, 37441, 691, 37441, 38282, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37441, 37441, 691, 38285, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 5, 1, 1, 1, 2, 2, 2, {3, -1}, {3, 0}},
+       {691, 37441, 37441, 691, 38289, 37513, 38293, 37519, 37480, 37490, 2566, 37523, 8, 3, 0, 0, 1, 0, 2, {3, 0}, {3, 0}},
+       {37441, 691, 37441, 691, 37525, 37513, 37515, 37519, 37631, 37641, 2566, 37523, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37441, 37441, 37441, 38218, 37513, 0, 37519, 37480, 37490, 2566, 37523, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}},
+       {691, 37441, 691, 37441, 38330, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 14, 2, 0, 0, 1, 2, 2, {3, -1}, {3, 2}},
+       {691, 37441, 691, 37441, 38338, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 1, 0, 1, 1, 1, 2, 1, {3, 0}, {3, 0}},
+       {691, 37441, 691, 37441, 38345, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, 2}},
+       {691, 37441, 37443, 37446, 38358, 37459, 0, 37519, 37480, 37490, 2566, 37523, 3, 0, 4, 2, 3, 0, 2, {3, -1}, {3, -1}},
+       {691, 37441, 691, 37441, 38361, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 0, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37441, 691, 37441, 38365, 37513, 0, 37519, 37480, 37490, 2566, 37523, 2, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37441, 37441, 37441, 38365, 37513, 0, 37519, 37480, 37490, 2566, 37523, 9, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37441, 37441, 37504, 10836, 37513, 0, 37519, 37480, 37490, 2566, 37523, 2, 2, 2, 2, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 691, 37441, 691, 37577, 37513, 37902, 37519, 37480, 37490, 2566, 37523, 12, 2, 0, 0, 1, 2, 2, {3, 0}, {3, 0}},
+       {691, 37441, 37441, 37441, 38365, 37513, 0, 37519, 37480, 37490, 2566, 37523, 2, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37441, 691, 37441, 37546, 37513, 0, 37519, 37480, 37490, 2566, 37523, 2, 0, 1, 1, 1, 2, 2, {3, -1}, {3, 0}},
+       {37441, 37504, 37441, 37504, 37525, 37513, 0, 37519, 37480, 37490, 2566, 37523, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 37504, 37441, 37441, 37813, 37513, 0, 37519, 37480, 37490, 2566, 37523, 5, 1, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 37504, 37441, 691, 38369, 37513, 0, 37519, 37480, 37490, 2566, 37523, 8, 3, 0, 0, 1, 0, 2, {3, -1}, {3, -1}},
+       {691, 37441, 691, 37441, 38282, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 1, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37441, 37443, 37446, 38404, 37459, 37462, 37477, 37480, 37490, 2566, 37499, 3, 2, 0, 0, 3, 0, 2, {3, -1}, {3, -1}},
+       {691, 37441, 691, 37441, 37715, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 2, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37504, 691, 38414, 37791, 37513, 37515, 37519, 37580, 37591, 2566, 37523, 2, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37441, 691, 37441, 38282, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37441, 691, 37441, 37629, 37513, 37515, 37519, 37631, 37641, 2566, 37523, 1, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 691, 37441, 691, 37525, 37513, 37515, 37519, 37659, 37667, 2566, 37523, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37504, 691, 38414, 37791, 37513, 37515, 37519, 37631, 37705, 2566, 37523, 2, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 691, 37441, 691, 37525, 37513, 37515, 37519, 37723, 37733, 2566, 37523, 12, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 37504, 37441, 37504, 37577, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 12, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 37504, 37441, 37504, 37525, 37513, 37515, 37519, 37631, 37705, 2566, 37523, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 37504, 37441, 37504, 37525, 37513, 37902, 37519, 37480, 37490, 2566, 37523, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 37504, 37441, 691, 38416, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37441, 691, 37441, 37525, 37513, 0, 37519, 37480, 37490, 2566, 37523, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 37504, 37443, 37446, 38424, 37459, 37515, 37477, 37480, 37490, 2566, 37523, 8, 3, 1, 1, 1, 0, 2, {3, -1}, {3, -1}},
+       {691, 37441, 37441, 37441, 38431, 37513, 38253, 37519, 37480, 37490, 2566, 37523, 12, 2, 1, 0, 1, 2, 2, {3, 2}, {3, 2}},
+       {691, 37441, 37443, 37446, 38435, 37459, 37515, 37477, 37480, 37490, 2566, 37499, 3, 2, 0, 0, 3, 2, 2, {3, -1}, {3, -1}},
+       {691, 37441, 691, 37441, 37629, 37513, 38376, 37519, 37480, 37490, 2566, 37523, 0, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 691, 37441, 691, 37525, 37513, 37515, 37519, 37580, 37591, 2566, 37523, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37441, 691, 37441, 37629, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 691, 37441, 691, 37525, 37513, 37515, 37519, 37631, 37641, 2566, 37523, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 37504, 37441, 37504, 37629, 37513, 37515, 37519, 37659, 37667, 2566, 37523, 15, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 37504, 37441, 37504, 37525, 37513, 37902, 37519, 37480, 37490, 2566, 37523, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37441, 37441, 691, 38445, 37459, 37462, 37477, 37480, 37490, 2566, 37499, 3, 0, 0, 0, 3, 3, 2, {3, -1}, {3, -1}},
+       {691, 37441, 691, 37441, 37629, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 0, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 691, 37441, 691, 37525, 37513, 37515, 37519, 37580, 37591, 2566, 37523, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37441, 691, 37441, 37629, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 1, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37441, 691, 37441, 8056, 37513, 37515, 37519, 37631, 37641, 2566, 37523, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37504, 691, 38414, 37791, 37513, 37515, 37519, 37659, 37667, 2566, 37523, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 691, 37441, 691, 38455, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 8, 3, 0, 0, 2, 2, 2, {3, -1}, {3, -1}},
+       {691, 37441, 37443, 37446, 38458, 37459, 37462, 37477, 37480, 37490, 2566, 37499, 3, 2, 0, 0, 3, 2, 2, {3, -1}, {3, -1}},
+       {691, 37441, 691, 37441, 38468, 37513, 38376, 37519, 37480, 37490, 2566, 37523, 0, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 691, 691, 38414, 0, 37513, 37515, 37519, 37580, 37591, 2566, 37523, 2, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37441, 691, 37441, 37629, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 1, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 691, 37441, 691, 38473, 37513, 37515, 37519, 37631, 37641, 2566, 37523, 0, 0, 1, 1, 1, 0, 2, {3, -1}, {3, -1}},
+       {37441, 37504, 37441, 691, 37525, 37513, 37515, 37519, 37659, 37667, 2566, 37523, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 691, 37441, 691, 38455, 37513, 0, 37519, 37480, 37490, 2566, 37523, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37441, 37443, 37446, 38477, 37459, 37462, 37477, 37480, 37490, 2566, 37499, 3, 2, 0, 0, 3, 2, 2, {3, -1}, {3, -1}},
+       {691, 37441, 691, 37441, 37525, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37441, 691, 37441, 38487, 37513, 37515, 37519, 37631, 37641, 2566, 37523, 14, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 37504, 37441, 37504, 37525, 37513, 37515, 37519, 37659, 37667, 2566, 37523, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 691, 37441, 691, 38455, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37441, 37441, 691, 38491, 37459, 37462, 37477, 37480, 37490, 2566, 37499, 3, 2, 0, 0, 3, 3, 2, {3, -1}, {3, -1}},
+       {37441, 37504, 37441, 37504, 10836, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 2, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37441, 691, 37441, 37629, 37513, 37515, 37519, 37631, 37641, 2566, 37523, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 691, 37441, 691, 38501, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37441, 37443, 37446, 38506, 37459, 37462, 37477, 37480, 37490, 2566, 37499, 3, 2, 0, 0, 3, 3, 2, {3, -1}, {3, -1}},
+       {691, 37441, 691, 37441, 37629, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 1, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 691, 37441, 691, 38516, 37513, 37515, 37519, 37631, 37641, 2566, 37523, 12, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 691, 37441, 691, 38501, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37441, 37443, 37446, 38520, 37459, 37462, 37477, 37480, 37490, 2566, 37499, 3, 2, 0, 0, 3, 0, 2, {3, -1}, {3, -1}},
+       {37441, 691, 37441, 691, 37629, 37513, 37515, 37519, 37631, 37641, 2566, 37523, 1, 0, 1, 1, 1, 0, 2, {3, -1}, {3, -1}},
+       {37441, 691, 37441, 691, 38530, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 8, 3, 1, 1, 1, 0, 2, {3, -1}, {3, -1}},
+       {691, 37441, 37443, 37446, 38535, 37459, 37462, 37477, 37480, 37490, 2566, 37499, 3, 2, 0, 0, 3, 0, 2, {3, -1}, {3, -1}},
+       {691, 37441, 691, 37441, 37629, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 0, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37441, 691, 37441, 38545, 37513, 37515, 37519, 37631, 37641, 2566, 37523, 12, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 691, 37441, 691, 38549, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 8, 3, 1, 1, 1, 0, 2, {3, -1}, {3, -1}},
+       {691, 37441, 37443, 37446, 38557, 37459, 37462, 37477, 37480, 37490, 2566, 37499, 3, 2, 0, 0, 3, 3, 2, {3, -1}, {3, -1}},
+       {691, 37441, 691, 37441, 37629, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 0, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 691, 37441, 691, 37629, 37513, 37515, 37519, 37631, 37641, 2566, 37523, 2, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 691, 37441, 691, 37525, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37441, 37441, 691, 38567, 37459, 37462, 37477, 37480, 37490, 2566, 37499, 3, 2, 0, 0, 3, 0, 2, {3, -1}, {3, -1}},
+       {691, 37441, 691, 37441, 37629, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 0, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 691, 37441, 691, 37629, 37513, 37515, 37519, 37631, 37641, 2566, 37523, 14, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 691, 37441, 691, 37525, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37441, 37443, 37446, 38577, 37459, 37462, 37477, 37480, 37490, 2566, 37499, 3, 2, 0, 0, 3, 3, 2, {3, -1}, {3, -1}},
+       {691, 37441, 691, 37441, 38361, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 0, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 691, 37441, 691, 37629, 37513, 37515, 37519, 37631, 37641, 2566, 37523, 9, 2, 0, 0, 1, 0, 2, {3, -1}, {3, -1}},
+       {691, 37441, 37443, 37446, 38587, 37459, 37462, 37477, 37480, 37490, 2566, 37499, 3, 2, 0, 0, 3, 2, 2, {3, -1}, {3, -1}},
+       {37441, 691, 37441, 691, 37629, 37513, 37515, 37519, 37631, 37641, 2566, 37523, 9, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37441, 37443, 37446, 38597, 37459, 37462, 37477, 37480, 37490, 2566, 37499, 3, 2, 0, 0, 3, 3, 2, {3, -1}, {3, -1}},
+       {37441, 691, 37441, 691, 38607, 37513, 37515, 37519, 37631, 37641, 2566, 37523, 14, 2, 0, 0, 1, 0, 2, {3, -1}, {3, -1}},
+       {691, 37441, 37443, 37446, 38611, 37459, 37462, 37477, 37480, 37490, 2566, 37499, 3, 2, 0, 0, 3, 2, 2, {3, -1}, {3, -1}},
+       {691, 37441, 691, 37441, 38218, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 12, 2, 1, 1, 1, 2, 2, {3, 2}, {3, 2}},
+       {37441, 691, 37441, 691, 38621, 37513, 37515, 37519, 37631, 37641, 2566, 37523, 14, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37441, 691, 37441, 37629, 37513, 37515, 37519, 37631, 37641, 2566, 37523, 0, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37441, 691, 37441, 37629, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 0, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37441, 691, 37441, 2436, 37513, 37515, 37519, 37631, 37641, 2566, 37523, 12, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37441, 691, 37441, 38624, 37513, 37515, 37519, 37631, 37641, 2566, 37523, 0, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37441, 691, 37441, 37629, 37513, 37515, 37519, 37631, 37641, 2566, 37523, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37441, 691, 37441, 37629, 37513, 37515, 37519, 37631, 37641, 2566, 37523, 0, 0, 1, 1, 1, 2, 2, {3, -1}, {3, 0}},
+       {37441, 691, 37441, 691, 38501, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 691, 37441, 691, 38455, 37513, 0, 37519, 37480, 37490, 2566, 37523, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 691, 37441, 691, 38627, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 691, 37441, 691, 38635, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 37504, 37441, 691, 38416, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37441, 691, 37441, 37546, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 2, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 37504, 37441, 37504, 37577, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 12, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 691, 37441, 691, 38455, 37513, 0, 37519, 37480, 37490, 2566, 37523, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 37504, 37441, 691, 38393, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 37504, 37443, 37446, 38424, 37459, 37515, 37477, 37480, 37490, 2566, 37523, 8, 3, 1, 1, 1, 0, 2, {3, -1}, {3, -1}},
+       {37441, 37504, 691, 37441, 0, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37441, 691, 37441, 38640, 37513, 38376, 37519, 37480, 37490, 2566, 37523, 0, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37441, 691, 37441, 38640, 37513, 38376, 37519, 37480, 37490, 2566, 37523, 0, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 37504, 37441, 37504, 37577, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 12, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 691, 37441, 691, 38635, 37513, 37515, 37519, 37480, 37490, 2566, 37523, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {37441, 37504, 37441, 37441, 38386, 37513, 0, 37519, 37480, 37490, 2566, 37523, 8, 3, 1, 1, 1, 2, 2, {3, 0}, {3, 0}},
+       {37441, 37504, 37443, 37446, 38398, 37459, 37515, 37477, 37480, 37490, 2566, 37523, 8, 3, 1, 1, 1, 0, 2, {3, -1}, {3, -1}},
+       {37441, 38067, 37441, 37504, 0, 37513, 0, 37519, 37659, 37667, 2566, 37523, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37441, 691, 37441, 38365, 37513, 0, 37519, 37480, 37490, 2566, 37523, 2, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}
 };
 
 
index 67640e3226b651c2009cca9204cc4f490a5c1620..d2ce9167a1940fa764c79b60b318a9810c011947 100644 (file)
@@ -50,8 +50,6 @@ typedef struct {
 typedef struct {
        const stridx_t currency_decimal_separator;
        const stridx_t currency_group_separator;
-       const stridx_t percent_decimal_separator;
-       const stridx_t percent_group_separator;
        const stridx_t number_decimal_separator;
        const stridx_t number_group_separator;
 
@@ -72,11 +70,9 @@ typedef struct {
        const gint8 number_negative_pattern;
 
        const gint8 currency_decimal_digits;
-       const gint8 percent_decimal_digits;
        const gint8 number_decimal_digits;
 
        const gint currency_group_sizes [GROUP_SIZE];
-       const gint percent_group_sizes [GROUP_SIZE];
        const gint number_group_sizes [GROUP_SIZE];     
 } NumberFormatEntry;
 
index 498d915b731a7e9762f8cf39f2e9b9091773bf9f..bd495a1ba02e53cfba68af20c33f1a9d1d2d42f4 100644 (file)
@@ -280,11 +280,11 @@ ICALL(COMPINF_6, "internal_index(string,int,int,string,System.Globalization.Comp
 
 ICALL_TYPE(CULDATA, "System.Globalization.CultureData", CULDATA_1)
 ICALL(CULDATA_1, "fill_culture_data", ves_icall_System_Globalization_CultureData_fill_culture_data)
+ICALL(CULDATA_2, "fill_number_data", ves_icall_System_Globalization_CultureData_fill_number_data)
 
 ICALL_TYPE(CULINF, "System.Globalization.CultureInfo", CULINF_5)
 ICALL(CULINF_5, "construct_internal_locale_from_lcid", ves_icall_System_Globalization_CultureInfo_construct_internal_locale_from_lcid)
 ICALL(CULINF_6, "construct_internal_locale_from_name", ves_icall_System_Globalization_CultureInfo_construct_internal_locale_from_name)
-ICALL(CULINF_8, "construct_number_format", ves_icall_System_Globalization_CultureInfo_construct_number_format)
 ICALL(CULINF_7, "get_current_locale_name", ves_icall_System_Globalization_CultureInfo_get_current_locale_name)
 ICALL(CULINF_9, "internal_get_cultures", ves_icall_System_Globalization_CultureInfo_internal_get_cultures)
 //ICALL(CULINF_10, "internal_is_lcid_neutral", ves_icall_System_Globalization_CultureInfo_internal_is_lcid_neutral)
index a2152bb4f470cf0f6fea7684814a1b85233df713..623c243f25d0160c4c83b7ee8597a7f95773117c 100644 (file)
@@ -226,22 +226,17 @@ ves_icall_System_Globalization_CultureData_fill_culture_data (MonoCultureData *t
 }
 
 void
-ves_icall_System_Globalization_CultureInfo_construct_number_format (MonoCultureInfo *this)
+ves_icall_System_Globalization_CultureData_fill_number_data (MonoNumberFormatInfo* number, gint32 number_index)
 {
        MonoDomain *domain;
-       MonoNumberFormatInfo *number;
        const NumberFormatEntry *nfe;
 
-       g_assert (this->number_format != 0);
-       if (this->number_index < 0)
-               return;
+       g_assert (number_index != 0);
 
-       number = this->number_format;
-       nfe = &number_format_entries [this->number_index];
+       nfe = &number_format_entries [number_index];
 
        domain = mono_domain_get ();
 
-       number->readOnly = this->is_read_only;
        number->currencyDecimalDigits = nfe->currency_decimal_digits;
        MONO_OBJECT_SETREF (number, currencyDecimalSeparator, mono_string_new (domain,
                        idx2string (nfe->currency_decimal_separator)));
@@ -263,13 +258,6 @@ ves_icall_System_Globalization_CultureInfo_construct_number_format (MonoCultureI
        MONO_OBJECT_SETREF (number, numberGroupSizes, create_group_sizes_array (nfe->number_group_sizes,
                        GROUP_SIZE));
        number->numberNegativePattern = nfe->number_negative_pattern;
-       number->percentDecimalDigits = nfe->percent_decimal_digits;
-       MONO_OBJECT_SETREF (number, percentDecimalSeparator, mono_string_new (domain,
-                       idx2string (nfe->percent_decimal_separator)));
-       MONO_OBJECT_SETREF (number, percentGroupSeparator, mono_string_new (domain,
-                       idx2string (nfe->percent_group_separator)));
-       MONO_OBJECT_SETREF (number, percentGroupSizes, create_group_sizes_array (nfe->percent_group_sizes,
-                       GROUP_SIZE));
        number->percentNegativePattern = nfe->percent_negative_pattern;
        number->percentPositivePattern = nfe->percent_positive_pattern;
        MONO_OBJECT_SETREF (number, percentSymbol, mono_string_new (domain, idx2string (nfe->percent_symbol)));
index 36890c3bbe2bcaa46d8f55c95051a71778df5c76..67234f64f6d76b0bbe08a9b337b72d76ef72c1d4 100644 (file)
@@ -28,12 +28,12 @@ typedef enum {
 
 extern MonoBoolean ves_icall_System_Globalization_CalendarData_fill_calendar_data (MonoCalendarData *this_obj, MonoString *name, gint32 calendar_index);
 extern void ves_icall_System_Globalization_CultureData_fill_culture_data (MonoCultureData *this_obj, gint32 datetime_index);
+extern void ves_icall_System_Globalization_CultureData_fill_number_data (MonoNumberFormatInfo* number, gint32 number_index);
 extern void ves_icall_System_Globalization_CultureInfo_construct_internal_locale (MonoCultureInfo *this_obj, MonoString *locale);
 extern MonoString* ves_icall_System_Globalization_CultureInfo_get_current_locale_name (void);
 extern MonoBoolean ves_icall_System_Globalization_CultureInfo_construct_internal_locale_from_lcid (MonoCultureInfo *this_obj, gint lcid);
 extern MonoBoolean ves_icall_System_Globalization_CultureInfo_construct_internal_locale_from_name (MonoCultureInfo *this_obj, MonoString *name);
 extern MonoArray *ves_icall_System_Globalization_CultureInfo_internal_get_cultures (MonoBoolean neutral, MonoBoolean specific, MonoBoolean installed);
-extern void ves_icall_System_Globalization_CultureInfo_construct_number_format (MonoCultureInfo *this_obj);
 extern void ves_icall_System_Globalization_CompareInfo_construct_compareinfo (MonoCompareInfo *comp, MonoString *locale);
 extern int ves_icall_System_Globalization_CompareInfo_internal_compare (MonoCompareInfo *this_obj, MonoString *str1, gint32 off1, gint32 len1, MonoString *str2, gint32 off2, gint32 len2, gint32 options);
 extern void ves_icall_System_Globalization_CompareInfo_free_internal_collator (MonoCompareInfo *this_obj);
index 6041aa1ae648969e0cf4377647a4c3286b5c9a04..68bff49ed7769baec13ae60ef00d62970a8710e1 100644 (file)
@@ -475,37 +475,34 @@ typedef struct {
 typedef struct 
 {
        MonoObject obj;
-       MonoBoolean readOnly;
-       MonoString *decimalFormats;
-       MonoString *currencyFormats;
-       MonoString *percentFormats;
-       MonoString *digitPattern;
-       MonoString *zeroPattern;
-       gint32 currencyDecimalDigits;
-       MonoString *currencyDecimalSeparator;
-       MonoString *currencyGroupSeparator;
+       MonoArray *numberGroupSizes;
        MonoArray *currencyGroupSizes;
-       gint32 currencyNegativePattern;
-       gint32 currencyPositivePattern;
-       MonoString *currencySymbol;
-       MonoString *naNSymbol;
-       MonoString *negativeInfinitySymbol;
+       MonoArray *percentGroupSizes;
+       MonoString *positiveSign;
        MonoString *negativeSign;
-       guint32 numberDecimalDigits;
        MonoString *numberDecimalSeparator;
        MonoString *numberGroupSeparator;
-       MonoArray *numberGroupSizes;
-       gint32 numberNegativePattern;
-       gint32 percentDecimalDigits;
+       MonoString *currencyGroupSeparator;
+       MonoString *currencyDecimalSeparator;
+       MonoString *currencySymbol;
+       MonoString *ansiCurrencySymbol; /* unused */
+       MonoString *naNSymbol;
+       MonoString *positiveInfinitySymbol;
+       MonoString *negativeInfinitySymbol;
        MonoString *percentDecimalSeparator;
        MonoString *percentGroupSeparator;
-       MonoArray *percentGroupSizes;
-       gint32 percentNegativePattern;
-       gint32 percentPositivePattern;
        MonoString *percentSymbol;
        MonoString *perMilleSymbol;
-       MonoString *positiveInfinitySymbol;
-       MonoString *positiveSign;
+       MonoString *nativeDigits; /* unused */
+       gint32 dataItem; /* unused */
+       guint32 numberDecimalDigits;
+       gint32 currencyDecimalDigits;
+       gint32 currencyPositivePattern;
+       gint32 currencyNegativePattern;
+       gint32 numberNegativePattern;
+       gint32 percentPositivePattern;
+       gint32 percentNegativePattern;
+       gint32 percentDecimalDigits;
 } MonoNumberFormatInfo;
 
 typedef struct {
index 5d4f1d0d817f0f7df47dd1b0a64d11396c3a2682..6800e0124ab7ee839065d67d89f18a1675310022 100644 (file)
@@ -89,8 +89,6 @@ namespace Mono.Tools.LocaleBuilder
 
                        builder.Append (EncodeStringIdx (CurrencyDecimalSeparator) + ", ");
                        builder.Append (EncodeStringIdx (CurrencyGroupSeparator) + ", ");
-                       builder.Append (EncodeStringIdx (PercentDecimalSeparator) + ", ");
-                       builder.Append (EncodeStringIdx (PercentGroupSeparator) + ", ");
                        builder.Append (EncodeStringIdx (NumberDecimalSeparator) + ", ");
                        builder.Append (EncodeStringIdx (NumberGroupSeparator) + ", ");
 
@@ -111,13 +109,10 @@ namespace Mono.Tools.LocaleBuilder
                        builder.Append (NumberNegativePattern + ", ");
 
                        builder.Append (CurrencyDecimalDigits + ", ");
-                       builder.Append (PercentDecimalDigits + ", ");
                        builder.Append (NumberDecimalDigits + ", ");
 
                        AppendGroupSizes (builder, CurrencyGroupSizes);
                        builder.Append (", ");
-                       AppendGroupSizes (builder, PercentGroupSizes);
-                       builder.Append (", ");
                        AppendGroupSizes (builder, NumberGroupSizes);
 
                        builder.Append ('}');