aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/adldata.cpp10237
-rw-r--r--src/adldata.hh58
-rw-r--r--src/adlmidi.cpp191
-rw-r--r--src/adlmidi_bankmap.h127
-rw-r--r--src/adlmidi_bankmap.tcc283
-rw-r--r--src/adlmidi_load.cpp211
-rw-r--r--src/adlmidi_midiplay.cpp506
-rw-r--r--src/adlmidi_mus2mid.c2
-rw-r--r--src/adlmidi_opl3.cpp117
-rw-r--r--src/adlmidi_private.cpp64
-rw-r--r--src/adlmidi_private.hpp274
-rw-r--r--src/adlmidi_ptr.hpp217
-rw-r--r--src/chips/dosbox/dbopl.cpp3561
-rw-r--r--src/chips/dosbox/dbopl.h517
-rw-r--r--src/chips/dosbox_opl3.cpp90
-rw-r--r--src/chips/dosbox_opl3.h21
-rw-r--r--src/chips/nuked/nukedopl3.c176
-rw-r--r--src/chips/nuked/nukedopl3.h2
-rw-r--r--src/chips/nuked/nukedopl3_174.c206
-rw-r--r--src/chips/nuked/nukedopl3_174.h2
-rw-r--r--src/chips/nuked_opl3.cpp62
-rw-r--r--src/chips/nuked_opl3.h21
-rw-r--r--src/chips/nuked_opl3_v174.cpp62
-rw-r--r--src/chips/nuked_opl3_v174.h21
-rw-r--r--src/chips/opl_chip_base.cpp52
-rw-r--r--src/chips/opl_chip_base.h81
-rw-r--r--src/chips/opl_chip_base.tcc216
-rw-r--r--src/fraction.hpp9
-rw-r--r--src/wopl/wopl_file.h8
29 files changed, 9015 insertions, 8379 deletions
diff --git a/src/adldata.cpp b/src/adldata.cpp
index 4105934..49eb36c 100644
--- a/src/adldata.cpp
+++ b/src/adldata.cpp
@@ -4,7 +4,7 @@
* FROM A NUMBER OF SOURCES, MOSTLY PC GAMES.
* PREPROCESSED, CONVERTED, AND POSTPROCESSED OFF-SCREEN.
*/
-const adldata adl[4532] =
+const adldata adl[4535] =
{ // ,---------+-------- Wave select settings
// | ,-------ч-+------ Sustain/release rates
// | | ,-----ч-ч-+---- Attack/decay rates
@@ -4172,10 +4172,10 @@ const adldata adl[4532] =
{ 0x332ED12,0x1E7D211, 0x80,0x45, 0x2, +0 },
{ 0x0F4E431,0x0F5F331, 0x97,0x86, 0x8, +0 },
{ 0x3F0F701,0x1F8F900, 0x00,0x0D, 0xE, +0 },
- { 0x0F78111,0x3F7F054, 0x40,0x45, 0x8, +0 },
- { 0x0F78140,0x3F7F040, 0x40,0x01, 0xC, +14 },
- { 0x0F78111,0x2F7F054, 0x40,0x45, 0xA, +0 },
- { 0x0F78140,0x3F7F040, 0x40,0x05, 0xC, +14 },
+ { 0x0F77111,0x3F7F011, 0x48,0x87, 0xA, +0 },
+ { 0x0F78140,0x3F7F040, 0x86,0x00, 0xC, +14 },
+ { 0x0F78140,0x3F7F040, 0x07,0x40, 0xC, +12 },
+ { 0x0F78100,0x3F7F000, 0x86,0x03, 0xC, +14 },
{ 0x6F78AE8,0x649B1F4, 0x03,0x0A, 0xA, +0 },
{ 0x6F78AE8,0x649B1F4, 0x43,0x4B, 0xA, +0 },
{ 0x0609533,0x4E5C131, 0x63,0x05, 0x0, +0 },
@@ -4213,8 +4213,8 @@ const adldata adl[4532] =
{ 0x4109033,0x2044520, 0xA8,0x85, 0xA, +0 },
{ 0x2034170,0x0043671, 0x08,0x20, 0x9, +0 },
{ 0x1022171,0x0042671, 0x0C,0x17, 0xB, +0 },
- { 0x0055021,0x0F55022, 0x1C,0x0F, 0x7, +0 },
- { 0x0F54066,0x0F55024, 0x5A,0x0F, 0x7, -12 },
+ { 0x005A061,0x0F55022, 0x69,0x06, 0x0, +0 },
+ { 0x0008060,0x0F55021, 0x33,0x08, 0x0, +12 },
{ 0x239B420,0x0076121, 0x50,0x05, 0x6, +0 },
{ 0x139B462,0x00D7161, 0x91,0x14, 0x0, +0 },
{ 0x05470F1,0x07460B1, 0x5A,0x80, 0x0, +0 },
@@ -4241,11 +4241,11 @@ const adldata adl[4532] =
{ 0x10B8020,0x11B6330, 0x87,0x00, 0x8, +12 },
{ 0x1235031,0x0077C24, 0xC0,0x08, 0x2, +0 },
{ 0x045D933,0x4076C35, 0xD0,0x26, 0x4, +0 },
- { 0x2077830,0x2076331, 0x9F,0x00, 0xA, +0 },
+ { 0x6077831,0x2076331, 0x1E,0x00, 0x6, +0 },
{ 0x0199031,0x01B6134, 0x95,0x80, 0xA, +0 },
{ 0x0177532,0x0174531, 0x93,0x03, 0xC, +0 },
{ 0x0277530,0x0174536, 0x14,0x9C, 0xE, +12 },
- { 0x08D6EF1,0x02A3571, 0xC0,0x00, 0xE, +0 },
+ { 0x08B8EF1,0x0285571, 0xC0,0x00, 0xE, +0 },
{ 0x08860A1,0x01A6561, 0x5C,0x00, 0x8, +0 },
{ 0x2176522,0x0277421, 0x5A,0x00, 0x6, +0 },
{ 0x1267532,0x0166531, 0x8D,0x05, 0x4, +0 },
@@ -4267,12 +4267,12 @@ const adldata adl[4532] =
{ 0x32B7420,0x12BF134, 0x46,0x00, 0x8, +0 },
{ 0x5029072,0x0069061, 0x96,0x0C, 0x8, +0 },
{ 0x1019031,0x0069061, 0x1A,0x0C, 0x6, +0 },
- { 0x245C224,0x2550133, 0x81,0x80, 0xB, -36 },
- { 0x2459224,0x2556133, 0x81,0x80, 0xB, -36 },
+ { 0x245C224,0x2550133, 0x81,0x80, 0x9, -36 },
+ { 0x2459224,0x2556133, 0x81,0x80, 0x9, -36 },
{ 0x132ED10,0x3E7D010, 0x87,0x0D, 0x6, +12 },
{ 0x132ED30,0x3E7D010, 0x87,0x12, 0x6, +12 },
- { 0x033513A,0x013C121, 0xA4,0x06, 0x2, +0 },
- { 0x273F325,0x0228231, 0x20,0x06, 0x4, +0 },
+ { 0x073513A,0x013C121, 0xA4,0x0A, 0x2, +0 },
+ { 0x273F325,0x0228231, 0x20,0x0A, 0x4, +0 },
{ 0x0031131,0x0054361, 0xD4,0x08, 0x4, +0 },
{ 0x20311B0,0x00543E1, 0xD9,0x08, 0x4, +0 },
{ 0x245A121,0x126A121, 0x98,0x05, 0xC, +0 },
@@ -4370,16 +4370,19 @@ const adldata adl[4532] =
{ 0x001F312,0x047BB05, 0x03,0x07, 0xC, +12 },
{ 0x0015500,0x007C71B, 0x0C,0x00, 0x0, +0 },
{ 0x201F312,0x047BB09, 0x03,0x07, 0xC, +12 },
+ { 0x291F108,0x333F401, 0x00,0x00, 0x8, +12 },
+ { 0x291F108,0x333F501, 0x00,0x00, 0x8, +12 },
{ 0x0015500,0x007C71F, 0x0C,0x00, 0x0, +0 },
- { 0x210F509,0x605FE05, 0x8A,0x8A, 0xE, +12 },
- { 0x400F509,0x605FE05, 0x07,0x8A, 0xA, +12 },
+ { 0x300F50C,0x605FE05, 0x07,0x8A, 0x0, +12 },
+ { 0x310F508,0x604FE05, 0x86,0x8A, 0x0, +11 },
{ 0x2E1F11E,0x3F3F318, 0x04,0x00, 0x8, +0 },
{ 0x2777603,0x3679601, 0x87,0x08, 0x6, +12 },
{ 0x277C643,0x3679601, 0x87,0x08, 0xE, +12 },
{ 0x366F905,0x099F701, 0x00,0x00, 0xC, +12 },
+ { 0x291F108,0x334F401, 0x00,0x00, 0x8, +12 },
{ 0x431A000,0x085B41A, 0x81,0x05, 0xA, +12 },
{ 0x459F640,0x185B418, 0x00,0x20, 0xB, +12 },
- { 0x212FD08,0x305FD03, 0x01,0x03, 0x8, +12 },
+ { 0x300F50C,0x605FE04, 0x07,0x8A, 0x0, +12 },
{ 0x2A8F9E3,0x0779643, 0x1E,0x08, 0x2, +6 },
{ 0x0A5F7E8,0x0D89949, 0xDE,0x00, 0x0, +0 },
{ 0x2A8F9E3,0x0779643, 0x1E,0x00, 0xE, +12 },
@@ -4549,4681 +4552,4811 @@ const adldata adl[4532] =
{ 0x07BF003,0x07BF502, 0x8A,0x80, 0x8, +0 },
{ 0x07BF003,0x07BF402, 0x8A,0x80, 0x8, +0 },
};
-const struct adlinsdata adlins[4673] =
+const struct adlinsdata adlins[4803] =
{
- { 0, 0, 0, 0, 1660, 1660,0.000000 },
- { 1, 1, 0, 0, 1746, 1746,0.000000 },
- { 2, 2, 0, 0, 1980, 1980,0.000000 },
- { 3, 3, 0, 0, 1553, 1553,0.000000 },
- { 4, 4, 0, 0, 1233, 1233,0.000000 },
- { 5, 5, 0, 0, 1980, 1980,0.000000 },
- { 6, 6, 0, 0, 1100, 1100,0.000000 },
- { 7, 7, 0, 0, 1233, 1233,0.000000 },
- { 8, 8, 0, 0, 940, 940,0.000000 },
- { 9, 9, 0, 0, 1100, 1100,0.000000 },
- { 10, 10, 0, 0, 460, 460,0.000000 },
- { 11, 11, 0, 0, 1740, 1740,0.000000 },
- { 12, 12, 0, 0, 66, 66,0.000000 },
- { 13, 13, 0, 0, 140, 140,0.000000 },
- { 14, 14, 0, 0, 940, 940,0.000000 },
- { 15, 15, 0, 0, 266, 266,0.000000 },
- { 16, 16, 0, 0, 40000, 33,0.000000 },
- { 17, 17, 0, 0, 40000, 6,0.000000 },
- { 18, 18, 0, 0, 40000, 13,0.000000 },
- { 19, 19, 0, 0, 40000, 193,0.000000 },
- { 20, 20, 0, 0, 40000, 193,0.000000 },
- { 21, 21, 0, 0, 40000, 6,0.000000 },
- { 22, 22, 0, 0, 40000, 66,0.000000 },
- { 23, 23, 0, 0, 40000, 66,0.000000 },
- { 24, 24, 0, 0, 1026, 1026,0.000000 },
- { 25, 25, 0, 0, 1826, 1826,0.000000 },
- { 26, 26, 0, 0, 1813, 1813,0.000000 },
- { 27, 27, 0, 0, 1080, 1080,0.000000 },
- { 28, 28, 0, 0, 40000, 0,0.000000 },
- { 29, 29, 0, 0, 40000, 13,0.000000 },
- { 30, 30, 0, 0, 40000, 13,0.000000 },
- { 31, 31, 0, 0, 4200, 4200,0.000000 },
- { 32, 32, 0, 0, 940, 940,0.000000 },
- { 33, 33, 0, 0, 40000, 20,0.000000 },
- { 34, 34, 0, 0, 1746, 1746,0.000000 },
- { 35, 35, 0, 0, 40000, 0,0.000000 },
- { 36, 36, 0, 0, 2400, 2400,0.000000 },
- { 37, 37, 0, 0, 4166, 4166,0.000000 },
- { 38, 38, 0, 0, 1740, 1740,0.000000 },
- { 39, 39, 0, 0, 40000, 26,0.000000 },
- { 40, 40, 0, 0, 40000, 86,0.000000 },
- { 41, 41, 0, 0, 40000, 6,0.000000 },
- { 42, 42, 0, 0, 40000, 133,0.000000 },
- { 43, 43, 0, 0, 40000, 126,0.000000 },
- { 44, 44, 0, 0, 333, 333,0.000000 },
- { 45, 45, 0, 0, 940, 940,0.000000 },
- { 46, 46, 0, 0, 1046, 1046,0.000000 },
- { 47, 47, 0, 0, 40000, 33,0.000000 },
- { 48, 48, 0, 0, 1766, 13,0.000000 },
- { 49, 49, 0, 0, 40000, 220,0.000000 },
- { 50, 50, 0, 0, 40000, 153,0.000000 },
- { 51, 51, 0, 0, 40000, 146,0.000000 },
- { 52, 52, 0, 0, 2300, 2300,0.000000 },
- { 53, 53, 0, 0, 40000, 140,0.000000 },
- { 54, 54, 0, 0, 233, 233,0.000000 },
- { 55, 55, 0, 0, 40000, 6,0.000000 },
- { 56, 56, 0, 0, 40000, 6,0.000000 },
- { 57, 57, 0, 0, 40000, 6,0.000000 },
- { 58, 58, 0, 0, 40000, 6,0.000000 },
- { 59, 59, 0, 0, 40000, 6,0.000000 },
- { 60, 60, 0, 0, 40000, 0,0.000000 },
- { 61, 61, 0, 0, 40000, 26,0.000000 },
- { 62, 62, 0, 0, 40000, 0,0.000000 },
- { 63, 63, 0, 0, 40000, 6,0.000000 },
- { 64, 64, 0, 0, 40000, 20,0.000000 },
- { 65, 65, 0, 0, 40000, 20,0.000000 },
- { 66, 66, 0, 0, 40000, 0,0.000000 },
- { 67, 67, 0, 0, 40000, 6,0.000000 },
- { 68, 68, 0, 0, 3940, 3940,0.000000 },
- { 69, 69, 0, 0, 40000, 6,0.000000 },
- { 70, 70, 0, 0, 40000, 60,0.000000 },
- { 71, 71, 0, 0, 40000, 6,0.000000 },
- { 72, 72, 0, 0, 40000, 6,0.000000 },
- { 73, 73, 0, 0, 40000, 13,0.000000 },
- { 74, 74, 0, 0, 40000, 0,0.000000 },
- { 75, 75, 0, 0, 40000, 73,0.000000 },
- { 76, 76, 0, 0, 40000, 53,0.000000 },
- { 77, 77, 0, 0, 40000, 53,0.000000 },
- { 78, 78, 0, 0, 40000, 53,0.000000 },
- { 79, 79, 0, 0, 40000, 0,0.000000 },
- { 80, 80, 0, 0, 40000, 0,0.000000 },
- { 81, 81, 0, 0, 40000, 33,0.000000 },
- { 82, 82, 0, 0, 40000, 6,0.000000 },
- { 83, 83, 0, 0, 40000, 6,0.000000 },
- { 84, 84, 0, 0, 40000, 73,0.000000 },
- { 85, 85, 0, 0, 40000, 133,0.000000 },
- { 86, 86, 0, 0, 40000, 20,0.000000 },
- { 87, 87, 0, 0, 40000, 233,0.000000 },
- { 88, 88, 0, 0, 40000, 413,0.000000 },
- { 89, 89, 0, 0, 1660, 86,0.000000 },
- { 90, 90, 0, 0, 40000, 553,0.000000 },
- { 91, 91, 0, 0, 40000, 100,0.000000 },
- { 92, 92, 0, 0, 613, 13,0.000000 },
- { 93, 93, 0, 0, 40000, 126,0.000000 },
- { 94, 94, 0, 0, 40000, 53,0.000000 },
- { 95, 95, 0, 0, 993, 993,0.000000 },
- { 96, 96, 0, 0, 40000, 513,0.000000 },
- { 97, 97, 0, 0, 280, 280,0.000000 },
- { 98, 98, 0, 0, 40000, 73,0.000000 },
- { 99, 99, 0, 0, 2113, 2113,0.000000 },
- { 100, 100, 0, 0, 40000, 886,0.000000 },
- { 101, 101, 0, 0, 40000, 773,0.000000 },
- { 102, 102, 0, 0, 40000, 426,0.000000 },
- { 103, 103, 0, 0, 2413, 2413,0.000000 },
- { 104, 104, 0, 0, 1126, 1126,0.000000 },
- { 105, 105, 0, 0, 1046, 1046,0.000000 },
- { 106, 106, 0, 0, 866, 866,0.000000 },
- { 107, 107, 0, 0, 280, 280,0.000000 },
- { 108, 108, 0, 0, 40000, 6,0.000000 },
- { 109, 109, 0, 0, 40000, 113,0.000000 },
- { 110, 110, 0, 0, 40000, 6,0.000000 },
- { 111, 111, 0, 0, 1126, 1126,0.000000 },
- { 112, 112, 0, 0, 140, 140,0.000000 },
- { 113, 113, 0, 0, 246, 246,0.000000 },
- { 114, 114, 0, 0, 20, 20,0.000000 },
- { 115, 115, 0, 0, 146, 146,0.000000 },
- { 116, 116, 0, 0, 146, 146,0.000000 },
- { 117, 117, 0, 0, 340, 340,0.000000 },
- { 118, 118, 0, 0, 2280, 2280,0.000000 },
- { 119, 119, 0, 0, 286, 286,0.000000 },
- { 120, 120, 0, 0, 586, 586,0.000000 },
- { 121, 121, 0, 0, 4486, 4486,0.000000 },
- { 122, 122, 0, 0, 133, 133,0.000000 },
- { 123, 123, 0, 0, 186, 186,0.000000 },
- { 124, 124, 0, 0, 146, 146,0.000000 },
- { 125, 125, 0, 0, 40000, 113,0.000000 },
- { 126, 126, 0, 0, 140, 140,0.000000 },
- { 127, 127, 35, 0, 26, 26,0.000000 },
- { 128, 128, 52, 0, 20, 20,0.000000 },
- { 129, 129, 48, 0, 73, 73,0.000000 },
- { 130, 130, 58, 0, 40, 40,0.000000 },
- { 129, 129, 60, 0, 80, 80,0.000000 },
- { 131, 131, 47, 0, 106, 106,0.000000 },
- { 132, 132, 43, 0, 20, 20,0.000000 },
- { 131, 131, 49, 0, 146, 146,0.000000 },
- { 133, 133, 43, 0, 26, 26,0.000000 },
- { 131, 131, 51, 0, 160, 160,0.000000 },
- { 134, 134, 43, 0, 160, 160,0.000000 },
- { 131, 131, 54, 0, 140, 140,0.000000 },
- { 131, 131, 57, 0, 153, 153,0.000000 },
- { 135, 135, 72, 0, 600, 600,0.000000 },
- { 131, 131, 60, 0, 160, 160,0.000000 },
- { 136, 136, 76, 0, 513, 513,0.000000 },
- { 137, 137, 84, 0, 393, 393,0.000000 },
- { 138, 138, 36, 0, 400, 400,0.000000 },
- { 139, 139, 65, 0, 86, 86,0.000000 },
- { 140, 140, 84, 0, 406, 406,0.000000 },
- { 141, 141, 83, 0, 60, 60,0.000000 },
- { 135, 135, 84, 0, 406, 406,0.000000 },
- { 142, 142, 24, 0, 46, 46,0.000000 },
- { 136, 136, 77, 0, 500, 500,0.000000 },
- { 143, 143, 60, 0, 40, 40,0.000000 },
- { 144, 144, 65, 0, 40, 40,0.000000 },
- { 145, 145, 59, 0, 13, 13,0.000000 },
- { 146, 146, 51, 0, 46, 46,0.000000 },
- { 147, 147, 45, 0, 40, 40,0.000000 },
- { 148, 148, 71, 0, 140, 140,0.000000 },
- { 149, 149, 60, 0, 160, 160,0.000000 },
- { 150, 150, 58, 0, 153, 153,0.000000 },
- { 151, 151, 53, 0, 153, 153,0.000000 },
- { 152, 152, 64, 0, 86, 86,0.000000 },
- { 153, 153, 71, 0, 13, 13,0.000000 },
- { 154, 154, 61, 0, 313, 313,0.000000 },
- { 155, 155, 61, 0, 606, 606,0.000000 },
- { 156, 156, 44, 0, 80, 80,0.000000 },
- { 157, 157, 40, 0, 320, 320,0.000000 },
- { 158, 158, 69, 0, 20, 20,0.000000 },
- { 159, 159, 68, 0, 20, 20,0.000000 },
- { 160, 160, 63, 0, 33, 33,0.000000 },
- { 161, 161, 74, 0, 93, 93,0.000000 },
- { 162, 162, 60, 0, 353, 353,0.000000 },
- { 163, 163, 80, 0, 60, 60,0.000000 },
- { 164, 164, 64, 0, 873, 873,0.000000 },
- { 165, 165, 72, 0, 33, 33,0.000000 },
- { 166, 166, 73, 0, 286, 286,0.000000 },
- { 167, 167, 70, 0, 133, 133,0.000000 },
- { 168, 168, 68, 0, 20, 20,0.000000 },
- { 169, 169, 48, 0, 40, 40,0.000000 },
- { 131, 131, 53, 0, 126, 126,0.000000 },
- { 170, 170, 0, 0, 1020, 1020,0.000000 },
- { 171, 171, 0, 0, 40000, 0,0.000000 },
- { 172, 173, 0, 0, 1740, 1740,0.000000 },
- { 174, 175, 0, 0, 1260, 1260,0.000000 },
- { 176, 177, 0, 0, 1100, 1100,0.000000 },
- { 178, 178, 0, 0, 1100, 1100,0.000000 },
- { 179, 180, 0, 0, 726, 726,0.000000 },
- { 181, 181, 0, 0, 460, 460,0.000000 },
- { 182, 182, 0, 0, 246, 246,0.000000 },
- { 183, 184, 0, 0, 120, 120,0.000000 },
- { 185, 186, 0, 0, 840, 840,0.000000 },
- { 187, 187, 0, 0, 293, 293,0.000000 },
- { 188, 189, 0, 0, 1320, 1320,0.000000 },
- { 190, 191, 0, 0, 646, 6,0.000000 },
- { 192, 193, 0, 0, 40000, 6,0.000000 },
- { 194, 194, 0, 0, 40000, 6,0.000000 },
- { 195, 196, 0, 0, 40000, 0,0.000000 },
- { 197, 198, 0, 0, 40000, 20,0.000000 },
- { 199, 200, 0, 0, 2573, 6,0.000000 },
- { 201, 202, 0, 0, 953, 953,0.000000 },
- { 203, 204, 0, 0, 1740, 1740,0.000000 },
- { 205, 206, 0, 0, 1900, 1900,0.000000 },
- { 207, 208, 0, 0, 1986, 1986,0.000000 },
- { 209, 210, 0, 0, 760, 760,0.000000 },
- { 211, 212, 0, 0, 40000, 6,0.000000 },
- { 213, 213, 0, 0, 1613, 0,0.000000 },
- { 214, 215, 0, 0, 3260, 3260,0.000000 },
- { 216, 217, 0, 0, 360, 360,0.000000 },
- { 218, 219, 0, 0, 1020, 1020,0.000000 },
- { 220, 221, 0, 0, 2126, 2126,0.000000 },
- { 222, 223, 0, 0, 300, 13,0.000000 },
- { 224, 224, 0, 0, 1740, 1740,0.000000 },
- { 225, 226, 0, 0, 1720, 1720,0.000000 },
- { 227, 227, 0, 0, 146, 146,0.000000 },
- { 228, 228, 0, 0, 186, 40,0.000000 },
- { 229, 230, 0, 0, 40000, 46,0.000000 },
- { 231, 232, 0, 0, 40000, 66,0.000000 },
- { 233, 234, 0, 0, 40000, 266,0.000000 },
- { 235, 236, 0, 0, 160, 160,0.000000 },
- { 235, 237, 0, 0, 386, 386,0.000000 },
- { 46, 238, 0, 0, 1046, 1046,0.000000 },
- { 239, 240, 0, 0, 40000, 66,0.000000 },
- { 241, 242, 0, 0, 720, 46,0.000000 },
- { 243, 243, 0, 0, 40000, 33,0.000000 },
- { 244, 244, 0, 0, 40000, 6,0.000000 },
- { 245, 245, 0, 0, 40000, 13,0.000000 },
- { 246, 247, 0, 0, 466, 466,0.000000 },
- { 248, 249, 0, 0, 1213, 13,0.000000 },
- { 250, 250, 0, 0, 60, 6,0.000000 },
- { 251, 251, 0, 0, 40000, 66,0.000000 },
- { 252, 253, 0, 0, 40000, 6,0.000000 },
- { 254, 255, 0, 0, 40000, 26,0.000000 },
- { 256, 257, 0, 0, 166, 0,0.000000 },
- { 258, 259, 0, 0, 40000, 6,0.000000 },
- { 260, 261, 0, 0, 40000, 20,0.000000 },
- { 262, 263, 0, 0, 40000, 26,0.000000 },
- { 264, 265, 0, 0, 40000, 40,0.000000 },
- { 266, 267, 0, 0, 40000, 6,0.000000 },
- { 268, 269, 0, 0, 40000, 20,0.000000 },
- { 270, 271, 0, 0, 40000, 13,0.000000 },
- { 272, 273, 0, 0, 40000, 60,0.000000 },
- { 274, 275, 0, 0, 40000, 33,0.000000 },
- { 276, 276, 0, 0, 40000, 20,0.000000 },
- { 277, 278, 0, 0, 40000, 73,0.000000 },
- { 279, 280, 0, 0, 40000, 33,0.000000 },
- { 281, 282, 0, 0, 40000, 73,0.000000 },
- { 283, 283, 0, 0, 40000, 13,0.000000 },
- { 284, 285, 0, 0, 40000, 6,0.000000 },
- { 286, 287, 0, 0, 40000, 20,0.000000 },
- { 288, 288, 0, 0, 40000, 33,0.000000 },
- { 289, 290, 0, 0, 40000, 6,0.000000 },
- { 291, 292, 0, 0, 40000, 73,0.000000 },
- { 293, 294, 0, 0, 40000, 106,0.000000 },
- { 295, 296, 0, 0, 40000, 180,0.000000 },
- { 88, 297, 0, 0, 40000, 500,0.000000 },
- { 298, 299, 0, 0, 40000, 26,0.000000 },
- { 300, 301, 0, 0, 40000, 553,0.000000 },
- { 302, 302, 0, 0, 40000, 126,0.000000 },
- { 303, 303, 0, 0, 40000, 53,0.000000 },
- { 304, 304, 0, 0, 1793, 1793,0.000000 },
- { 305, 306, 0, 0, 40000, 300,0.000000 },
- { 307, 307, 0, 0, 1900, 1900,0.000000 },
- { 308, 308, 0, 0, 146, 146,0.000000 },
- { 309, 309, 0, 0, 40000, 580,0.000000 },
- { 310, 310, 0, 0, 40000, 480,0.000000 },
- { 311, 312, 0, 0, 2273, 2273,0.000000 },
- { 313, 314, 0, 0, 1140, 1140,0.000000 },
- { 315, 316, 0, 0, 560, 560,0.000000 },
- { 317, 318, 0, 0, 1080, 1080,0.000000 },
- { 107, 319, 0, 0, 280, 280,0.000000 },
- { 108, 320, 0, 0, 40000, 6,0.000000 },
- { 109, 321, 0, 0, 40000, 46,0.000000 },
- { 322, 323, 0, 0, 40000, 6,0.000000 },
- { 324, 325, 0, 0, 146, 146,0.000000 },
- { 326, 327, 0, 0, 246, 246,0.000000 },
- { 328, 328, 0, 0, 26, 26,0.000000 },
- { 329, 329, 0, 0, 140, 140,0.000000 },
- { 330, 331, 0, 0, 40, 40,0.000000 },
- { 332, 332, 0, 0, 2313, 2313,0.000000 },
- { 333, 333, 0, 0, 86, 86,0.000000 },
- { 334, 334, 0, 0, 3440, 3440,0.000000 },
- { 335, 335, 0, 0, 146, 146,0.000000 },
- { 336, 336, 0, 0, 2406, 2406,0.000000 },
- { 337, 337, 0, 0, 40000, 146,0.000000 },
- { 338, 339, 0, 0, 40000, 113,0.000000 },
- { 340, 341, 0, 0, 40000, 0,0.000000 },
- { 342, 342, 35, 0, 446, 446,0.000000 },
- { 343, 343, 0, 0, 20, 20,0.000000 },
- { 344, 344, 35, 0, 86, 86,0.000000 },
- { 345, 345, 35, 0, 26, 26,0.000000 },
- { 346, 346, 50, 0, 153, 153,0.000000 },
- { 347, 347, 18, 0, 53, 53,0.000000 },
- { 348, 348, 72, 0, 53, 53,0.000000 },
- { 349, 349, 74, 0, 33, 33,0.000000 },
- { 350, 350, 35, 0, 66, 66,0.000000 },
- { 351, 351, 16, 0, 86, 86,0.000000 },
- { 352, 352, 0, 0, 1513, 13,0.000000 },
- { 353, 353, 38, 0, 53, 53,0.000000 },
- { 354, 354, 38, 0, 100, 100,0.000000 },
- { 355, 355, 31, 0, 33, 33,0.000000 },
- { 355, 355, 35, 0, 33, 33,0.000000 },
- { 355, 355, 38, 0, 193, 193,0.000000 },
- { 355, 355, 41, 0, 166, 166,0.000000 },
- { 355, 355, 45, 0, 126, 126,0.000000 },
- { 355, 355, 50, 0, 146, 146,0.000000 },
- { 356, 356, 36, 0, 100, 100,0.000000 },
- { 357, 357, 36, 0, 26, 26,0.000000 },
- { 358, 358, 48, 0, 73, 73,0.000000 },
- { 358, 358, 36, 0, 100, 100,0.000000 },
- { 359, 359, 36, 0, 20, 20,0.000000 },
- { 360, 360, 0, 0, 33, 33,0.000000 },
- { 361, 361, 61, 0, 60, 60,0.000000 },
- { 362, 362, 96, 0, 233, 233,0.000000 },
- { 363, 363, 38, 0, 60, 60,0.000000 },
- { 127, 127, 16, 0, 66, 66,0.000000 },
- { 364, 365, 18, 0, 13, 13,0.000000 },
- { 366, 366, 30, 0, 106, 106,0.000000 },
- { 367, 368, 35, 0, 73, 73,0.000000 },
- { 129, 129, 0, 0, 73, 73,0.000000 },
- { 369, 369, 0, 0, 66, 66,0.000000 },
- { 370, 370, 88, 0, 86, 86,0.000000 },
- { 371, 371, 88, 0, 60, 60,0.000000 },
- { 372, 372, 79, 0, 380, 380,0.000000 },
- { 135, 135, 14, 0, 860, 860,0.000000 },
- { 373, 373, 46, 0, 313, 313,0.000000 },
- { 374, 375,129, 0, 1613, 60,0.000000 },
- { 376, 376, 58, 0, 140, 140,0.000000 },
- { 377, 377,164, 0, 106, 106,0.000000 },
- { 378, 378,142, 0, 2300, 2300,0.000000 },
- { 379, 379, 9, 0, 40, 40,0.000000 },
- { 380, 381, 35, 0, 3306, 0,0.000000 },
- { 382, 382, 28, 0, 26, 26,0.000000 },
- { 383, 383, 46, 0, 320, 320,0.000000 },
- { 384, 384, 60, 0, 93, 93,0.000000 },
- { 384, 384, 54, 0, 100, 100,0.000000 },
- { 385, 385, 72, 0, 60, 60,0.000000 },
- { 385, 385, 67, 0, 60, 60,0.000000 },
- { 385, 385, 60, 0, 53, 53,0.000000 },
- { 386, 386, 1, 0, 46, 46,0.000000 },
- { 387, 387, 77, 0, 133, 133,0.000000 },
- { 387, 387, 72, 0, 133, 133,0.000000 },
- { 388, 388, 90, 0, 46, 46,0.000000 },
- { 389, 389, 39, 0, 180, 180,0.000000 },
- { 390, 390, 36, 0, 506, 506,0.000000 },
- { 391, 392, 35, 0, 20, 20,0.000000 },
- { 391, 393, 35, 0, 20, 20,0.000000 },
- { 394, 394, 60, 0, 40, 40,0.000000 },
- { 328, 328, 7, 0, 26, 26,0.000000 },
- { 395, 395, 90, 0, 80, 80,0.000000 },
- { 396, 396, 90, 0, 306, 306,0.000000 },
- { 397, 397, 35, 0, 106, 106,0.000000 },
- { 398, 399, 5, 0, 506, 506,0.000000 },
- { 400, 400,103, 0, 220, 220,0.000000 },
- { 401, 401, 3, 0, 6, 6,0.000000 },
- { 169, 169, 1, 0, 40, 40,0.000000 },
- { 131, 131, 0, 0, 40, 40,0.000000 },
- { 402, 402, 36, 0, 180, 180,0.000000 },
- { 403, 403, 60, 0, 40000, 0,0.000000 },
- { 404, 404, 37, 0, 60, 60,0.000000 },
- { 405, 405, 36, 0, 46, 46,0.000000 },
- { 406, 406, 32, 0, 40, 40,0.000000 },
- { 407, 407, 50, 0, 306, 306,0.000000 },
- { 408, 408, 50, 0, 93, 93,0.000000 },
- { 409, 409, 83, 0, 26, 26,0.000000 },
- { 410, 410, 72, 0, 93, 93,0.000000 },
- { 148, 148, 59, 0, 153, 153,0.000000 },
- { 411, 411, 64, 0, 40, 40,0.000000 },
- { 411, 411, 60, 0, 40, 40,0.000000 },
- { 412, 412, 72, 0, 26, 26,0.000000 },
- { 412, 412, 62, 0, 33, 33,0.000000 },
- { 413, 413, 83, 0, 273, 273,0.000000 },
- { 414, 414, 0, 0, 40000, 13,0.000000 },
- { 415, 415, 0, 0, 1126, 1126,0.000000 },
- { 416, 416, 0, 0, 40000, 20,0.000000 },
- { 417, 417, 0, 0, 2940, 20,0.000000 },
- { 418, 418, 0, 0, 2233, 2233,0.000000 },
- { 419, 419, 0, 0, 1233, 1233,0.000000 },
- { 420, 420, 0, 0, 940, 940,0.000000 },
- { 421, 421, 0, 0, 1580, 1580,0.000000 },
- { 422, 422, 0, 0, 1740, 1740,0.000000 },
- { 423, 423, 0, 0, 140, 140,0.000000 },
- { 424, 424, 0, 0, 940, 940,0.000000 },
- { 425, 425, 0, 0, 1080, 1080,0.000000 },
- { 426, 426, 0, 0, 2086, 2086,0.000000 },
- { 427, 427, 0, 0, 40000, 26,0.000000 },
- { 428, 428, 60, 0, 40000, 0,0.000000 },
- { 429, 429, 73, 0, 473, 473,0.000000 },
- { 429, 429, 74, 0, 473, 473,0.000000 },
- { 429, 429, 80, 0, 473, 473,0.000000 },
- { 429, 429, 84, 0, 473, 473,0.000000 },
- { 429, 429, 92, 0, 400, 400,0.000000 },
- { 430, 430, 81, 0, 280, 280,0.000000 },
- { 430, 430, 83, 0, 280, 280,0.000000 },
- { 430, 430, 95, 0, 220, 220,0.000000 },
- { 431, 431, 35, 0, 46, 46,0.000000 },
- { 432, 432, 60, 0, 40, 40,0.000000 },
- { 357, 357, 59, 0, 13, 13,0.000000 },
- { 432, 432, 44, 0, 40, 40,0.000000 },
- { 433, 433, 41, 0, 166, 166,0.000000 },
- { 434, 434, 97, 0, 26, 26,0.000000 },
- { 433, 433, 44, 0, 140, 140,0.000000 },
- { 433, 433, 48, 0, 153, 153,0.000000 },
- { 435, 435, 96, 0, 233, 233,0.000000 },
- { 433, 433, 51, 0, 160, 160,0.000000 },
- { 433, 433, 54, 0, 160, 160,0.000000 },
- { 436, 436, 40, 0, 386, 386,0.000000 },
- { 433, 433, 57, 0, 113, 113,0.000000 },
- { 437, 437, 58, 0, 120, 120,0.000000 },
- { 438, 438, 97, 0, 73, 73,0.000000 },
- { 439, 439, 50, 0, 60, 60,0.000000 },
- { 437, 437, 60, 0, 153, 153,0.000000 },
- { 440, 440, 53, 0, 53, 53,0.000000 },
- { 441, 441, 46, 0, 46, 46,0.000000 },
- { 440, 440, 57, 0, 53, 53,0.000000 },
- { 442, 442, 42, 0, 206, 206,0.000000 },
- { 442, 442, 37, 0, 206, 206,0.000000 },
- { 443, 443, 41, 0, 193, 193,0.000000 },
- { 443, 443, 37, 0, 193, 193,0.000000 },
- { 444, 444, 77, 0, 46, 46,0.000000 },
- { 444, 444, 72, 0, 46, 46,0.000000 },
- { 445, 445, 70, 0, 60, 60,0.000000 },
- { 445, 445, 90, 0, 60, 60,0.000000 },
- { 446, 446, 46, 0, 46, 46,0.000000 },
- { 447, 447, 48, 0, 246, 246,0.000000 },
- { 448, 448, 85, 0, 20, 20,0.000000 },
- { 449, 449, 66, 0, 60, 60,0.000000 },
- { 449, 449, 61, 0, 60, 60,0.000000 },
- { 450, 450, 41, 0, 106, 106,0.000000 },
- { 451, 451, 41, 0, 140, 140,0.000000 },
- { 452, 452, 81, 0, 66, 66,0.000000 },
- { 400, 400, 81, 0, 266, 266,0.000000 },
- { 400, 400, 76, 0, 266, 266,0.000000 },
- { 359, 359, 60, 0, 13, 13,0.000000 },
- { 453, 453, 53, 0, 120, 120,0.000000 },
- { 454, 454, 0, 0, 40000, 0,0.000000 },
- { 455, 455, 0, 0, 40, 40,0.000000 },
- { 456, 456, 0, 0, 1080, 1080,0.000000 },
- { 457, 457, 0, 0, 126, 126,0.000000 },
- { 458, 458, 0, 0, 40000, 26,0.000000 },
- { 459, 459, 0, 0, 40000, 6,0.000000 },
- { 460, 460, 0, 0, 700, 700,0.000000 },
- { 461, 461, 0, 0, 280, 280,0.000000 },
- { 462, 462, 0, 0, 360, 360,0.000000 },
- { 463, 463, 0, 0, 40000, 20,0.000000 },
- { 464, 464, 0, 0, 1466, 13,0.000000 },
- { 465, 465, 0, 0, 40000, 33,0.000000 },
- { 466, 466, 0, 0, 40000, 33,0.000000 },
- { 467, 467, 0, 0, 1953, 1953,0.000000 },
- { 468, 468, 0, 0, 1580, 1580,0.000000 },
- { 469, 469, 0, 0, 1340, 1340,0.000000 },
- { 470, 470, 0, 0, 40000, 0,0.000000 },
- { 471, 471, 0, 0, 40000, 53,0.000000 },
- { 472, 472, 0, 0, 1386, 1386,0.000000 },
- { 473, 473, 0, 0, 560, 13,0.000000 },
- { 474, 474, 0, 0, 40000, 66,0.000000 },
- { 475, 475, 0, 0, 593, 593,0.000000 },
- { 476, 476, 0, 0, 40000, 2446,0.000000 },
- { 477, 477, 0, 0, 60, 60,0.000000 },
- { 478, 478, 0, 0, 220, 220,0.000000 },
- { 479, 479, 0, 0, 153, 153,0.000000 },
- { 480, 480, 0, 0, 20, 20,0.000000 },
- { 481, 481, 0, 0, 40000, 0,0.000000 },
- { 482, 482, 0, 0, 753, 753,0.000000 },
- { 483, 483, 0, 0, 100, 100,0.000000 },
- { 484, 484, 0, 0, 40000, 73,0.000000 },
- { 485, 485, 0, 0, 2600, 320,0.000000 },
- { 486, 486, 0, 0, 293, 293,0.000000 },
- { 487, 487, 0, 0, 1400, 1400,0.000000 },
- { 488, 488, 0, 0, 2073, 2073,0.000000 },
- { 489, 489, 0, 0, 80, 80,0.000000 },
- { 490, 490, 0, 0, 40000, 33,0.000000 },
- { 491, 491, 50, 0, 446, 446,0.000000 },
- { 492, 492, 37, 0, 46, 46,0.000000 },
- { 493, 493, 39, 0, 180, 180,0.000000 },
- { 494, 494, 39, 0, 33, 33,0.000000 },
- { 495, 495, 86, 0, 1800, 1800,0.000000 },
- { 496, 496, 43, 0, 33, 33,0.000000 },
- { 127, 127, 24, 0, 46, 46,0.000000 },
- { 127, 127, 29, 0, 33, 33,0.000000 },
- { 497, 497, 50, 0, 153, 153,0.000000 },
- { 498, 498, 30, 0, 100, 100,0.000000 },
- { 498, 498, 33, 0, 413, 413,0.000000 },
- { 498, 498, 38, 0, 1633, 1633,0.000000 },
- { 498, 498, 42, 0, 26, 26,0.000000 },
- { 499, 499, 24, 0, 46, 46,0.000000 },
- { 499, 499, 27, 0, 66, 66,0.000000 },
- { 499, 499, 29, 0, 66, 66,0.000000 },
- { 499, 499, 32, 0, 53, 53,0.000000 },
- { 500, 500, 32, 0, 13, 13,0.000000 },
- { 501, 501, 53, 0, 86, 86,0.000000 },
- { 501, 501, 57, 0, 86, 86,0.000000 },
- { 502, 502, 60, 0, 80, 80,0.000000 },
- { 503, 503, 55, 0, 160, 160,0.000000 },
- { 486, 486, 85, 0, 266, 266,0.000000 },
- { 504, 504, 90, 0, 453, 453,0.000000 },
- { 505, 505, 84, 0, 73, 73,0.000000 },
- { 506, 506, 48, 0, 160, 160,0.000000 },
- { 507, 507, 48, 0, 40, 40,0.000000 },
- { 132, 132, 72, 0, 13, 13,0.000000 },
- { 508, 508, 72, 0, 13, 13,0.000000 },
- { 509, 509, 72, 0, 13, 13,0.000000 },
- { 510, 510, 63, 0, 533, 533,0.000000 },
- { 510, 510, 65, 0, 526, 526,0.000000 },
- { 511, 511, 79, 0, 506, 506,0.000000 },
- { 512, 512, 38, 0, 113, 113,0.000000 },
- { 513, 513, 94, 0, 100, 100,0.000000 },
- { 514, 514, 87, 0, 113, 113,0.000000 },
- { 514, 514, 94, 0, 100, 100,0.000000 },
- { 515, 515, 80, 0, 66, 66,0.000000 },
- { 516, 516, 47, 0, 140, 140,0.000000 },
- { 517, 517, 61, 0, 80, 80,0.000000 },
- { 517, 517, 68, 0, 66, 66,0.000000 },
- { 518, 518, 61, 0, 160, 160,0.000000 },
- { 518, 518, 68, 0, 126, 126,0.000000 },
- { 499, 499, 60, 0, 46, 46,0.000000 },
- { 519, 519, 60, 0, 60, 60,0.000000 },
- { 520, 520, 36, 0, 53, 53,0.000000 },
- { 520, 520, 60, 0, 40, 40,0.000000 },
- { 521, 521, 60, 0, 40, 40,0.000000 },
- { 522, 522, 68, 0, 20, 20,0.000000 },
- { 523, 523, 71, 0, 33, 33,0.000000 },
- { 523, 523, 72, 0, 33, 33,0.000000 },
- { 524, 524,101, 0, 320, 320,0.000000 },
- { 525, 525, 36, 0, 1680, 1680,0.000000 },
- { 526, 526, 25, 0, 40000, 2286,0.000000 },
- { 527, 527, 37, 0, 400, 400,0.000000 },
- { 528, 528, 36, 0, 146, 146,0.000000 },
- { 528, 528, 41, 0, 166, 166,0.000000 },
- { 529, 529, 84, 0, 73, 73,0.000000 },
- { 530, 530, 54, 0, 1326, 1326,0.000000 },
- { 481, 481, 48, 0, 40000, 0,0.000000 },
- { 531, 531, 0, 0, 2266, 2266,0.000000 },
- { 532, 532, 0, 0, 833, 833,0.000000 },
- { 533, 533, 0, 0, 246, 13,0.000000 },
- { 534, 534, 0, 0, 40000, 6,0.000000 },
- { 535, 535, 0, 0, 4140, 26,0.000000 },
- { 536, 536, 0, 0, 3886, 13,0.000000 },
- { 537, 537, 0, 0, 4886, 4886,0.000000 },
- { 538, 538, 0, 0, 1780, 1780,0.000000 },
- { 539, 539, 0, 0, 4140, 26,0.000000 },
- { 540, 540, 0, 0, 40000, 6,0.000000 },
- { 541, 541, 0, 0, 3946, 13,0.000000 },
- { 542, 542, 0, 0, 40, 40,0.000000 },
- { 543, 543, 0, 0, 40000, 13,0.000000 },
- { 544, 544, 0, 0, 4426, 4426,0.000000 },
- { 545, 545, 0, 0, 40000, 493,0.000000 },
- { 546, 546, 0, 0, 40000, 846,0.000000 },
- { 547, 547, 0, 0, 40000, 53,0.000000 },
- { 135, 135, 49, 0, 1146, 1146,0.000000 },
- { 548, 548, 35, 0, 40, 40,0.000000 },
- { 549, 549, 41, 0, 6, 6,0.000000 },
- { 366, 366, 38, 0, 106, 106,0.000000 },
- { 550, 550, 39, 0, 26, 26,0.000000 },
- { 551, 551, 49, 0, 46, 46,0.000000 },
- { 408, 408, 59, 0, 93, 93,0.000000 },
- { 552, 552, 24, 0, 26, 26,0.000000 },
- { 552, 552, 27, 0, 40, 20,0.000000 },
- { 552, 552, 29, 0, 20, 20,0.000000 },
- { 552, 552, 32, 0, 40, 13,0.000000 },
- { 553, 553, 84, 0, 113, 113,0.000000 },
- { 512, 512, 79, 0, 73, 73,0.000000 },
- { 554, 554, 61, 0, 173, 173,0.000000 },
- { 554, 554, 68, 0, 133, 133,0.000000 },
- { 555, 555, 36, 0, 33, 33,0.000000 },
- { 555, 555, 60, 0, 20, 20,0.000000 },
- { 556, 556, 36, 0, 180, 180,0.000000 },
- { 115, 115, 37, 0, 46, 46,0.000000 },
- { 557, 557, 0, 0, 1066, 1066,0.000000 },
- { 558, 558, 0, 0, 273, 273,0.000000 },
- { 559, 559, 0, 0, 186, 186,0.000000 },
- { 560, 560, 0, 0, 966, 966,0.000000 },
- { 561, 561, 0, 0, 80, 80,0.000000 },
- { 562, 562, 0, 0, 326, 326,0.000000 },
- { 563, 563, 0, 0, 40000, 33,0.000000 },
- { 564, 564, 0, 0, 380, 380,0.000000 },
- { 565, 565, 0, 0, 40, 40,0.000000 },
- { 566, 566, 0, 0, 4586, 4586,0.000000 },
- { 567, 567, 0, 0, 2680, 2680,0.000000 },
- { 568, 568, 0, 0, 40000, 6,0.000000 },
- { 569, 569, 0, 0, 80, 80,0.000000 },
- { 570, 570, 0, 0, 1206, 1206,0.000000 },
- { 571, 571, 0, 0, 593, 593,0.000000 },
- { 572, 572, 0, 0, 680, 680,0.000000 },
- { 356, 356, 0, 0, 246, 246,0.000000 },
- { 573, 573, 0, 0, 40000, 20,0.000000 },
- { 574, 574, 0, 0, 40000, 20,0.000000 },
- { 575, 575, 0, 0, 40000, 73,0.000000 },
- { 576, 576, 0, 0, 40000, 53,0.000000 },
- { 577, 577, 0, 0, 40000, 33,0.000000 },
- { 578, 578, 0, 0, 40000, 140,0.000000 },
- { 579, 579, 0, 0, 40000, 93,0.000000 },
- { 580, 580, 0, 0, 40000, 126,0.000000 },
- { 581, 581, 0, 0, 40000, 26,0.000000 },
- { 582, 582, 0, 0, 40000, 53,0.000000 },
- { 583, 583, 0, 0, 513, 513,0.000000 },
- { 584, 584, 0, 0, 40000, 66,0.000000 },
- { 585, 585, 0, 0, 313, 313,0.000000 },
- { 516, 516, 0, 0, 140, 140,0.000000 },
- { 586, 586, 0, 0, 40000, 0,0.000000 },
- { 587, 587, 0, 0, 40000, 0,0.000000 },
- { 588, 588, 0, 0, 40000, 6,0.000000 },
- { 498, 498, 26, 0, 86, 86,0.000000 },
- { 494, 494, 35, 0, 53, 53,0.000000 },
- { 350, 350, 41, 0, 80, 80,0.000000 },
- { 353, 353, 48, 0, 40, 40,0.000000 },
- { 354, 354, 67, 0, 73, 73,0.000000 },
- { 502, 502, 24, 0, 100, 100,0.000000 },
- { 346, 346, 36, 0, 46, 46,0.000000 },
- { 346, 346, 38, 0, 193, 193,0.000000 },
- { 346, 346, 40, 0, 140, 140,0.000000 },
- { 346, 346, 42, 0, 173, 173,0.000000 },
- { 346, 346, 44, 0, 140, 140,0.000000 },
- { 510, 510, 55, 0, 453, 453,0.000000 },
- { 346, 346, 46, 0, 146, 146,0.000000 },
- { 136, 136, 80, 0, 486, 486,0.000000 },
- { 486, 486, 24, 0, 346, 346,0.000000 },
- { 153, 153, 50, 0, 13, 13,0.000000 },
- { 346, 346, 24, 0, 66, 66,0.000000 },
- { 516, 516, 31, 0, 186, 186,0.000000 },
- { 498, 498, 35, 0, 40, 40,0.000000 },
- { 517, 517, 60, 0, 80, 80,0.000000 },
- { 530, 530, 36, 0, 1760, 1760,0.000000 },
- { 530, 530, 48, 0, 1360, 6,0.000000 },
- { 589, 589, 0, 0, 1660, 1660,0.000000 },
- { 139, 139, 76, 0, 73, 73,0.000000 },
- { 156, 156, 48, 0, 80, 80,0.000000 },
- { 157, 157, 48, 0, 226, 226,0.000000 },
- { 165, 165, 69, 0, 40, 40,0.000000 },
- { 167, 167, 75, 0, 133, 133,0.000000 },
- { 590, 590, 0, 0, 1226, 1226,0.000000 },
- { 591, 591, 0, 0, 2193, 2193,0.000000 },
- { 592, 592, 0, 0, 1900, 1900,0.000000 },
- { 593, 593, 0, 0, 626, 626,0.000000 },
- { 594, 594, 0, 0, 1213, 1213,0.000000 },
- { 595, 595, 0, 0, 1740, 1740,0.000000 },
- { 596, 596, 0, 0, 193, 193,0.000000 },
- { 597, 597, 0, 0, 300, 300,0.000000 },
- { 598, 598, 0, 0, 40000, 6,0.000000 },
- { 599, 599, 0, 0, 40000, 480,0.000000 },
- { 600, 600, 0, 0, 40000, 20,0.000000 },
- { 601, 601, 0, 0, 653, 653,0.000000 },
- { 602, 602, 0, 0, 126, 126,0.000000 },
- { 603, 603, 0, 0, 1080, 1080,0.000000 },
- { 604, 604, 0, 0, 4200, 4200,0.000000 },
- { 605, 605, 0, 0, 1020, 1020,0.000000 },
- { 606, 606, 0, 0, 593, 13,0.000000 },
- { 607, 607, 0, 0, 80, 60,0.000000 },
- { 608, 608, 0, 0, 40000, 113,0.000000 },
- { 609, 609, 0, 0, 120, 120,0.000000 },
- { 610, 610, 0, 0, 1580, 1580,0.000000 },
- { 611, 611, 0, 0, 460, 460,0.000000 },
- { 612, 612, 0, 0, 40000, 53,0.000000 },
- { 613, 613, 0, 0, 2320, 13,0.000000 },
- { 614, 614, 0, 0, 80, 60,0.000000 },
- { 615, 615, 0, 0, 80, 60,0.000000 },
- { 616, 616, 0, 0, 1020, 1020,0.000000 },
- { 617, 617, 0, 0, 146, 146,0.000000 },
- { 618, 618, 0, 0, 740, 740,0.000000 },
- { 619, 619, 0, 0, 146, 146,0.000000 },
- { 620, 620, 0, 0, 40000, 6,0.000000 },
- { 621, 621, 0, 0, 913, 913,0.000000 },
- { 622, 622, 0, 0, 2280, 2280,0.000000 },
- { 623, 623, 0, 0, 166, 6,0.000000 },
- { 624, 624, 0, 0, 40000, 0,0.000000 },
- { 625, 625, 0, 0, 40000, 0,0.000000 },
- { 626, 626, 0, 0, 40000, 0,0.000000 },
- { 627, 627, 0, 0, 1046, 1046,0.000000 },
- { 628, 628, 0, 0, 40000, 6,0.000000 },
- { 629, 629, 0, 0, 40000, 0,0.000000 },
- { 630, 630, 0, 0, 1953, 1953,0.000000 },
- { 631, 631, 0, 0, 40000, 106,0.000000 },
- { 632, 632, 0, 0, 533, 13,0.000000 },
- { 633, 633, 0, 0, 2273, 2273,0.000000 },
- { 634, 634, 0, 0, 646, 646,0.000000 },
- { 635, 635, 0, 0, 166, 166,0.000000 },
- { 636, 636, 0, 0, 326, 326,0.000000 },
- { 637, 637, 0, 0, 40000, 26,0.000000 },
- { 638, 638, 0, 0, 246, 246,0.000000 },
- { 346, 346, 0, 0, 140, 140,0.000000 },
- { 639, 639, 0, 0, 1226, 1226,0.000000 },
- { 404, 404, 0, 0, 146, 146,0.000000 },
- { 506, 506, 0, 0, 153, 153,0.000000 },
- { 639, 639, 60, 0, 886, 886,0.000000 },
- { 639, 639, 79, 0, 446, 446,0.000000 },
- { 640, 640, 65, 0, 800, 800,0.000000 },
- { 486, 486, 31, 0, 353, 353,0.000000 },
- { 486, 486, 36, 0, 360, 360,0.000000 },
- { 640, 640, 72, 0, 613, 613,0.000000 },
- { 136, 136, 79, 0, 493, 493,0.000000 },
- { 148, 148, 57, 0, 160, 160,0.000000 },
- { 150, 150, 53, 0, 153, 153,0.000000 },
- { 641, 641, 84, 0, 106, 106,0.000000 },
- { 520, 520, 66, 0, 40, 40,0.000000 },
- { 642, 642, 31, 0, 166, 13,0.000000 },
- { 642, 642, 29, 0, 60, 26,0.000000 },
- { 356, 356, 31, 0, 93, 93,0.000000 },
- { 356, 356, 19, 0, 220, 220,0.000000 },
- { 643, 643, 31, 0, 40000, 6,0.000000 },
- { 643, 643, 29, 0, 40000, 6,0.000000 },
- { 644, 644, 31, 0, 560, 560,0.000000 },
- { 644, 644, 35, 0, 573, 573,0.000000 },
- { 644, 644, 40, 0, 526, 526,0.000000 },
- { 644, 644, 47, 0, 540, 540,0.000000 },
- { 516, 516, 32, 0, 186, 186,0.000000 },
- { 516, 516, 43, 0, 146, 146,0.000000 },
- { 495, 495, 26, 0, 60, 60,0.000000 },
- { 495, 495, 44, 0, 380, 380,0.000000 },
- { 496, 496, 26, 0, 26, 26,0.000000 },
- { 496, 496, 51, 0, 40, 40,0.000000 },
- { 496, 496, 39, 0, 33, 33,0.000000 },
- { 495, 495, 30, 0, 46, 46,0.000000 },
- { 645, 645, 44, 0, 486, 486,0.000000 },
- { 645, 645, 43, 0, 473, 473,0.000000 },
- { 646, 646, 0, 0, 653, 653,0.000000 },
- { 647, 647, 0, 0, 2280, 2280,0.000000 },
- { 648, 648, 0, 0, 526, 526,0.000000 },
- { 649, 649, 0, 0, 40000, 40,0.000000 },
- { 650, 650, 0, 0, 40, 40,0.000000 },
- { 651, 651, 0, 0, 933, 933,0.000000 },
- { 652, 652, 0, 0, 40000, 300,0.000000 },
- { 653, 653, 0, 0, 280, 280,0.000000 },
- { 654, 654, 0, 0, 40000, 6,0.000000 },
- { 655, 655, 0, 0, 40000, 0,0.000000 },
- { 656, 656, 0, 0, 40000, 6,0.000000 },
- { 657, 657, 0, 0, 280, 280,0.000000 },
- { 658, 658, 0, 0, 513, 513,0.000000 },
- { 659, 659, 0, 0, 40000, 6,0.000000 },
- { 660, 660, 0, 0, 600, 600,0.000000 },
- { 661, 661, 0, 0, 646, 646,0.000000 },
- { 662, 662, 0, 0, 1166, 1166,0.000000 },
- { 663, 663, 0, 0, 40, 40,0.000000 },
- { 664, 664, 0, 0, 2073, 2073,0.000000 },
- { 665, 665, 0, 0, 40000, 106,0.000000 },
- { 666, 666, 0, 0, 40000, 146,0.000000 },
- { 667, 667, 0, 0, 40000, 126,0.000000 },
- { 668, 668, 0, 0, 280, 280,0.000000 },
- { 669, 669, 0, 0, 40000, 73,0.000000 },
- { 670, 670, 0, 0, 393, 393,0.000000 },
- { 671, 671, 0, 0, 760, 760,0.000000 },
- { 672, 672, 0, 0, 40000, 233,0.000000 },
- { 673, 673, 0, 0, 253, 253,0.000000 },
- { 674, 674, 0, 0, 186, 186,0.000000 },
- { 675, 675, 0, 0, 40000, 46,0.000000 },
- { 676, 676, 0, 0, 4773, 4773,0.000000 },
- { 677, 677, 0, 0, 2186, 2186,0.000000 },
- { 678, 678, 0, 0, 313, 313,0.000000 },
- { 679, 679, 0, 0, 1226, 1226,0.000000 },
- { 680, 680, 0, 0, 526, 13,0.000000 },
- { 681, 681, 0, 0, 40000, 0,0.000000 },
- { 682, 682, 0, 0, 40, 46,0.000000 },
- { 683, 683, 0, 0, 146, 146,0.000000 },
- { 684, 684, 0, 0, 2193, 2193,0.000000 },
- { 685, 685, 0, 0, 40000, 220,0.000000 },
- { 686, 686, 0, 0, 40000, 560,0.000000 },
- { 687, 687, 0, 0, 86, 86,0.000000 },
- { 688, 688, 0, 0, 40000, 1326,0.000000 },
- { 689, 689, 0, 0, 1166, 1166,0.000000 },
- { 690, 690, 0, 0, 593, 593,0.000000 },
- { 691, 691, 0, 0, 1580, 1580,0.000000 },
- { 692, 692, 0, 0, 513, 513,0.000000 },
- { 693, 693, 0, 0, 333, 333,0.000000 },
- { 694, 694, 0, 0, 1200, 1200,0.000000 },
- { 695, 695, 0, 0, 40000, 6,0.000000 },
- { 645, 645, 0, 0, 486, 486,0.000000 },
- { 696, 696, 0, 0, 40000, 6,0.000000 },
- { 697, 697, 0, 0, 333, 333,0.000000 },
- { 698, 698, 0, 0, 120, 120,0.000000 },
- { 699, 699, 0, 0, 40000, 6,0.000000 },
- { 700, 700, 0, 0, 13, 13,0.000000 },
- { 701, 701, 0, 0, 40000, 53,0.000000 },
- { 702, 702, 0, 0, 806, 806,0.000000 },
- { 703, 703, 0, 0, 40000, 6,0.000000 },
- { 704, 704, 0, 0, 40000, 6,0.000000 },
- { 705, 705, 0, 0, 40000, 0,0.000000 },
- { 706, 706, 0, 0, 40000, 6,0.000000 },
- { 707, 707, 0, 0, 40000, 166,0.000000 },
- { 708, 708, 0, 0, 40000, 26,0.000000 },
- { 709, 709, 0, 0, 40000, 146,0.000000 },
- { 710, 710, 0, 0, 1233, 6,0.000000 },
- { 711, 711, 0, 0, 146, 146,0.000000 },
- { 712, 712, 0, 0, 40000, 6,0.000000 },
- { 713, 713, 0, 0, 40000, 66,0.000000 },
- { 714, 714, 0, 0, 40000, 393,0.000000 },
- { 715, 715, 0, 0, 40000, 93,0.000000 },
- { 716, 716, 0, 0, 620, 620,0.000000 },
- { 717, 717, 0, 0, 40000, 6,0.000000 },
- { 718, 718, 0, 0, 493, 493,0.000000 },
- { 719, 719, 0, 0, 280, 280,0.000000 },
- { 720, 720, 0, 0, 760, 760,0.000000 },
- { 721, 721, 0, 0, 160, 160,0.000000 },
- { 722, 722, 0, 0, 40000, 106,0.000000 },
- { 723, 723, 0, 0, 166, 166,0.000000 },
- { 724, 724, 0, 0, 40000, 6,0.000000 },
- { 725, 725, 0, 0, 126, 126,0.000000 },
- { 726, 726, 0, 0, 593, 593,0.000000 },
- { 727, 727, 0, 0, 513, 513,0.000000 },
- { 728, 728, 0, 0, 246, 246,0.000000 },
- { 507, 507, 0, 0, 40, 40,0.000000 },
- { 512, 512, 0, 0, 93, 93,0.000000 },
- { 729, 729, 0, 0, 2406, 2406,0.000000 },
- { 730, 730, 0, 0, 2400, 2400,0.000000 },
- { 731, 731, 0, 0, 1153, 1153,0.000000 },
- { 732, 732, 0, 0, 40000, 1113,0.000000 },
- { 733, 733, 0, 0, 40000, 613,0.000000 },
- { 734, 734, 0, 0, 4453, 4453,0.000000 },
- { 735, 735, 0, 0, 160, 160,0.000000 },
- { 736, 736, 0, 0, 80, 80,0.000000 },
- { 737, 737, 0, 0, 1513, 13,0.000000 },
- { 738, 738, 38, 0, 33, 33,0.000000 },
- { 739, 739, 44, 0, 40, 40,0.000000 },
- { 500, 500, 58, 0, 13, 13,0.000000 },
- { 740, 740, 24, 0, 160, 160,0.000000 },
- { 741, 741, 60, 0, 133, 133,0.000000 },
- { 736, 736, 44, 0, 80, 80,0.000000 },
- { 742, 742, 25, 0, 146, 146,0.000000 },
- { 743, 743, 60, 0, 33, 33,0.000000 },
- { 742, 742, 30, 0, 146, 146,0.000000 },
- { 377, 377, 60, 0, 93, 93,0.000000 },
- { 742, 742, 33, 0, 173, 173,0.000000 },
- { 744, 744, 60, 0, 53, 53,0.000000 },
- { 742, 742, 35, 0, 186, 186,0.000000 },
- { 742, 742, 37, 0, 200, 200,0.000000 },
- { 745, 745, 0, 0, 313, 313,0.000000 },
- { 742, 742, 40, 0, 206, 206,0.000000 },
- { 746, 746,102, 0, 300, 300,0.000000 },
- { 747, 747, 80, 0, 433, 433,0.000000 },
- { 377, 377, 0, 0, 86, 86,0.000000 },
- { 748, 748, 56, 0, 13, 13,0.000000 },
- { 749, 749, 0, 0, 140, 140,0.000000 },
- { 746, 746,100, 0, 280, 280,0.000000 },
- { 750, 750, 40, 0, 200, 200,0.000000 },
- { 750, 750, 35, 0, 200, 200,0.000000 },
- { 751, 751, 29, 0, 53, 53,0.000000 },
- { 750, 750, 29, 0, 200, 200,0.000000 },
- { 750, 750, 22, 0, 206, 206,0.000000 },
- { 500, 500, 0, 0, 13, 13,0.000000 },
- { 752, 752, 0, 0, 46, 46,0.000000 },
- { 753, 753, 84, 0, 86, 86,0.000000 },
- { 754, 754, 84, 0, 506, 506,0.000000 },
- { 755, 755, 0, 0, 160, 160,0.000000 },
- { 755, 755, 71, 0, 133, 133,0.000000 },
- { 755, 755, 53, 0, 160, 160,0.000000 },
- { 755, 755, 48, 0, 160, 160,0.000000 },
- { 756, 756, 95, 0, 200, 200,0.000000 },
- { 757, 757, 95, 0, 613, 613,0.000000 },
- { 758, 758, 0, 0, 866, 866,0.000000 },
- { 759, 759, 0, 0, 933, 933,0.000000 },
- { 760, 760, 0, 0, 2393, 2393,0.000000 },
- { 761, 761, 0, 0, 760, 760,0.000000 },
- { 762, 762, 0, 0, 1740, 1740,0.000000 },
- { 763, 763, 0, 0, 1846, 1846,0.000000 },
- { 764, 764, 0, 0, 2106, 2106,0.000000 },
- { 765, 765, 0, 0, 1193, 1193,0.000000 },
- { 766, 766, 0, 0, 1613, 1613,0.000000 },
- { 767, 767, 0, 0, 673, 673,0.000000 },
- { 768, 768, 0, 0, 280, 280,0.000000 },
- { 769, 769, 0, 0, 1740, 1740,0.000000 },
- { 770, 770, 0, 0, 193, 193,0.000000 },
- { 771, 771, 0, 0, 140, 140,0.000000 },
- { 772, 772, 0, 0, 933, 933,0.000000 },
- { 773, 773, 0, 0, 333, 333,0.000000 },
- { 774, 774, 0, 0, 40000, 6,0.000000 },
- { 775, 775, 0, 0, 40000, 6,0.000000 },
- { 776, 776, 0, 0, 613, 13,0.000000 },
- { 777, 777, 0, 0, 40000, 80,0.000000 },
- { 778, 778, 0, 0, 40000, 26,0.000000 },
- { 779, 779, 0, 0, 40000, 20,0.000000 },
- { 780, 780, 0, 0, 40000, 20,0.000000 },
- { 781, 781, 0, 0, 40000, 66,0.000000 },
- { 782, 782, 0, 0, 940, 940,0.000000 },
- { 783, 783, 0, 0, 566, 566,0.000000 },
- { 784, 784, 0, 0, 1846, 1846,0.000000 },
- { 785, 785, 0, 0, 1120, 1120,0.000000 },
- { 786, 786, 0, 0, 300, 300,0.000000 },
- { 787, 787, 0, 0, 3000, 3000,0.000000 },
- { 788, 788, 0, 0, 3773, 3773,0.000000 },
- { 789, 789, 0, 0, 620, 620,0.000000 },
- { 790, 790, 0, 0, 846, 846,0.000000 },
- { 791, 791, 0, 0, 4846, 4846,0.000000 },
- { 792, 792, 0, 0, 1133, 1133,0.000000 },
- { 793, 793, 0, 0, 1446, 1446,0.000000 },
- { 794, 794, 0, 0, 566, 566,0.000000 },
- { 795, 795, 0, 0, 600, 600,0.000000 },
- { 796, 796, 0, 0, 1180, 1180,0.000000 },
- { 797, 797, 0, 0, 893, 893,0.000000 },
- { 798, 798, 0, 0, 40000, 20,0.000000 },
- { 799, 799, 0, 0, 40000, 20,0.000000 },
- { 800, 800, 0, 0, 166, 40,0.000000 },
- { 801, 801, 0, 0, 2286, 2286,0.000000 },
- { 802, 802, 0, 0, 40000, 86,0.000000 },
- { 803, 803, 0, 0, 120, 120,0.000000 },
- { 804, 804, 0, 0, 440, 440,0.000000 },
- { 805, 805, 0, 0, 286, 286,0.000000 },
- { 806, 806, 0, 0, 40000, 86,0.000000 },
- { 807, 807, 0, 0, 5473, 120,0.000000 },
- { 808, 808, 0, 0, 100, 13,0.000000 },
- { 809, 809, 0, 0, 40000, 53,0.000000 },
- { 810, 810, 0, 0, 1640, 6,0.000000 },
- { 811, 811, 0, 0, 40000, 53,0.000000 },
- { 812, 812, 0, 0, 1026, 13,0.000000 },
- { 813, 813, 0, 0, 186, 186,0.000000 },
- { 814, 814, 0, 0, 40, 40,0.000000 },
- { 815, 815, 0, 0, 40000, 20,0.000000 },
- { 816, 816, 0, 0, 40000, 20,0.000000 },
- { 817, 817, 0, 0, 873, 873,0.000000 },
- { 818, 818, 0, 0, 4440, 4440,0.000000 },
- { 819, 819, 0, 0, 273, 6,0.000000 },
- { 820, 820, 0, 0, 40000, 53,0.000000 },
- { 821, 821, 0, 0, 40000, 106,0.000000 },
- { 822, 822, 0, 0, 40000, 6,0.000000 },
- { 823, 823, 0, 0, 40000, 0,0.000000 },
- { 824, 824, 0, 0, 40000, 13,0.000000 },
- { 825, 825, 0, 0, 40000, 33,0.000000 },
- { 826, 826, 0, 0, 40000, 20,0.000000 },
- { 827, 827, 0, 0, 40000, 6,0.000000 },
- { 828, 828, 0, 0, 40000, 6,0.000000 },
- { 829, 829, 0, 0, 40000, 20,0.000000 },
- { 830, 830, 0, 0, 40000, 20,0.000000 },
- { 831, 831, 0, 0, 40000, 6,0.000000 },
- { 832, 832, 0, 0, 40000, 13,0.000000 },
- { 833, 833, 0, 0, 40000, 20,0.000000 },
- { 834, 834, 0, 0, 40000, 20,0.000000 },
- { 835, 835, 0, 0, 40000, 20,0.000000 },
- { 836, 836, 0, 0, 40000, 33,0.000000 },
- { 837, 837, 0, 0, 40000, 53,0.000000 },
- { 838, 838, 0, 0, 40000, 6,0.000000 },
- { 839, 839, 0, 0, 1153, 1153,0.000000 },
- { 840, 840, 0, 0, 40000, 20,0.000000 },
- { 841, 841, 0, 0, 20, 20,0.000000 },
- { 842, 842, 0, 0, 2040, 2040,0.000000 },
- { 843, 843, 0, 0, 40000, 6,0.000000 },
- { 844, 844, 0, 0, 40000, 13,0.000000 },
- { 845, 845, 0, 0, 1153, 1153,0.000000 },
- { 846, 846, 0, 0, 1526, 80,0.000000 },
- { 847, 847, 0, 0, 40000, 180,0.000000 },
- { 848, 848, 0, 0, 40000, 86,0.000000 },
- { 849, 849, 0, 0, 40000, 26,0.000000 },
- { 850, 850, 0, 0, 40000, 53,0.000000 },
- { 851, 851, 0, 0, 2886, 2886,0.000000 },
- { 852, 852, 0, 0, 40000, 73,0.000000 },
- { 853, 853, 0, 0, 40000, 126,0.000000 },
- { 854, 854, 0, 0, 1706, 1706,0.000000 },
- { 855, 855, 0, 0, 40000, 213,0.000000 },
- { 856, 856, 0, 0, 920, 920,0.000000 },
- { 857, 857, 0, 0, 993, 993,0.000000 },
- { 858, 858, 0, 0, 1613, 1613,0.000000 },
- { 859, 859, 0, 0, 1000, 106,0.000000 },
- { 860, 860, 0, 0, 40000, 20,0.000000 },
- { 861, 861, 0, 0, 40000, 213,0.000000 },
- { 862, 862, 0, 0, 766, 766,0.000000 },
- { 863, 863, 0, 0, 153, 153,0.000000 },
- { 864, 864, 0, 0, 626, 626,0.000000 },
- { 865, 865, 0, 0, 506, 506,0.000000 },
- { 866, 866, 0, 0, 300, 300,0.000000 },
- { 867, 867, 0, 0, 40000, 33,0.000000 },
- { 868, 868, 0, 0, 40000, 33,0.000000 },
- { 869, 869, 0, 0, 40000, 20,0.000000 },
- { 870, 870, 0, 0, 2106, 2106,0.000000 },
- { 871, 871, 0, 0, 93, 93,0.000000 },
- { 872, 872, 0, 0, 213, 213,0.000000 },
- { 361, 361, 0, 0, 80, 80,0.000000 },
- { 873, 873, 0, 0, 100, 100,0.000000 },
- { 874, 874, 0, 0, 80, 80,0.000000 },
- { 875, 875, 0, 0, 300, 300,0.000000 },
- { 876, 876, 0, 0, 3186, 3186,0.000000 },
- { 877, 877, 0, 0, 226, 226,0.000000 },
- { 878, 878, 0, 0, 53, 53,0.000000 },
- { 879, 879, 0, 0, 2833, 2833,0.000000 },
- { 880, 880, 0, 0, 113, 113,0.000000 },
- { 881, 881, 0, 0, 40000, 40,0.000000 },
- { 882, 882, 0, 0, 40000, 300,0.000000 },
- { 883, 883, 0, 0, 2793, 2793,0.000000 },
- { 884, 884, 36, 0, 73, 73,0.000000 },
- { 885, 885, 48, 0, 60, 60,0.000000 },
- { 885, 885, 36, 0, 73, 73,0.000000 },
- { 886, 886, 36, 0, 20, 20,0.000000 },
- { 887, 887, 32, 0, 46, 46,0.000000 },
- { 767, 767, 96, 0, 580, 580,0.000000 },
- { 888, 888, 30, 0, 53, 53,0.000000 },
- { 889, 889, 35, 0, 106, 106,0.000000 },
- { 890, 890, 60, 0, 86, 86,0.000000 },
- { 884, 884, 59, 0, 40, 40,0.000000 },
- { 890, 890, 44, 0, 80, 80,0.000000 },
- { 891, 891, 41, 0, 166, 166,0.000000 },
- { 892, 892, 47, 0, 40, 40,0.000000 },
- { 891, 891, 44, 0, 140, 140,0.000000 },
- { 891, 891, 48, 0, 153, 153,0.000000 },
- { 893, 893, 62, 0, 606, 606,0.000000 },
- { 891, 891, 51, 0, 160, 160,0.000000 },
- { 891, 891, 54, 0, 160, 160,0.000000 },
- { 894, 894, 40, 0, 386, 386,0.000000 },
- { 891, 891, 57, 0, 113, 113,0.000000 },
- { 895, 895, 97, 0, 73, 73,0.000000 },
- { 896, 896, 50, 0, 86, 86,0.000000 },
- { 376, 376, 60, 0, 153, 153,0.000000 },
- { 897, 897, 53, 0, 33, 33,0.000000 },
- { 898, 898, 46, 0, 53, 53,0.000000 },
- { 897, 897, 57, 0, 33, 33,0.000000 },
- { 899, 899, 42, 0, 193, 193,0.000000 },
- { 899, 899, 37, 0, 200, 200,0.000000 },
- { 900, 900, 41, 0, 200, 200,0.000000 },
- { 900, 900, 37, 0, 193, 193,0.000000 },
- { 871, 871, 77, 0, 46, 46,0.000000 },
- { 871, 871, 72, 0, 40, 40,0.000000 },
- { 388, 388, 70, 0, 46, 46,0.000000 },
- { 901, 901, 39, 0, 173, 173,0.000000 },
- { 902, 902, 36, 0, 1006, 1006,0.000000 },
- { 903, 903, 46, 0, 33, 33,0.000000 },
- { 904, 904, 48, 0, 680, 680,0.000000 },
- { 905, 905, 85, 0, 33, 33,0.000000 },
- { 361, 361, 66, 0, 60, 60,0.000000 },
- { 906, 906, 41, 0, 106, 106,0.000000 },
- { 907, 907, 41, 0, 93, 93,0.000000 },
- { 908, 908, 81, 0, 33, 33,0.000000 },
- { 400, 400, 10, 0, 313, 313,0.000000 },
- { 886, 886, 60, 0, 13, 13,0.000000 },
- { 873, 873, 53, 0, 166, 166,0.000000 },
- { 909, 909, 0, 0, 566, 566,0.000000 },
- { 910, 910, 0, 0, 1313, 1313,0.000000 },
- { 911, 911, 0, 0, 760, 760,0.000000 },
- { 912, 912, 0, 0, 760, 760,0.000000 },
- { 913, 913, 0, 0, 1740, 1740,0.000000 },
- { 914, 914, 0, 0, 1900, 1900,0.000000 },
- { 915, 915, 0, 0, 1173, 1173,0.000000 },
- { 916, 916, 0, 0, 1233, 1233,0.000000 },
- { 917, 917, 0, 0, 493, 493,0.000000 },
- { 362, 362, 0, 0, 246, 246,0.000000 },
- { 918, 918, 0, 0, 226, 226,0.000000 },
- { 919, 919, 0, 0, 1740, 1740,0.000000 },
- { 920, 920, 0, 0, 246, 246,0.000000 },
- { 921, 921, 0, 0, 120, 120,0.000000 },
- { 922, 922, 0, 0, 606, 606,0.000000 },
- { 923, 923, 0, 0, 333, 333,0.000000 },
- { 924, 924, 0, 0, 40000, 6,0.000000 },
- { 925, 925, 0, 0, 40000, 6,0.000000 },
- { 926, 926, 0, 0, 13, 13,0.000000 },
- { 927, 927, 0, 0, 40000, 66,0.000000 },
- { 928, 928, 0, 0, 40000, 26,0.000000 },
- { 929, 929, 0, 0, 40000, 20,0.000000 },
- { 930, 930, 0, 0, 40000, 20,0.000000 },
- { 931, 931, 0, 0, 40000, 33,0.000000 },
- { 932, 932, 0, 0, 866, 866,0.000000 },
- { 933, 933, 0, 0, 566, 566,0.000000 },
- { 934, 934, 0, 0, 1900, 1900,0.000000 },
- { 935, 935, 0, 0, 1146, 1146,0.000000 },
- { 936, 936, 0, 0, 606, 606,0.000000 },
- { 937, 937, 0, 0, 4673, 4673,0.000000 },
- { 938, 938, 0, 0, 3126, 3126,0.000000 },
- { 939, 939, 0, 0, 2406, 2406,0.000000 },
- { 940, 940, 0, 0, 440, 440,0.000000 },
- { 941, 941, 0, 0, 3200, 3200,0.000000 },
- { 942, 942, 0, 0, 1000, 1000,0.000000 },
- { 943, 943, 0, 0, 593, 593,0.000000 },
- { 944, 944, 0, 0, 546, 546,0.000000 },
- { 945, 945, 0, 0, 620, 620,0.000000 },
- { 946, 946, 0, 0, 1206, 1206,0.000000 },
- { 947, 947, 0, 0, 680, 680,0.000000 },
- { 948, 948, 0, 0, 40000, 20,0.000000 },
- { 949, 949, 0, 0, 40000, 20,0.000000 },
- { 950, 950, 0, 0, 4793, 33,0.000000 },
- { 951, 951, 0, 0, 1773, 1773,0.000000 },
- { 952, 952, 0, 0, 40000, 86,0.000000 },
- { 953, 953, 0, 0, 173, 173,0.000000 },
- { 954, 954, 0, 0, 406, 406,0.000000 },
- { 955, 955, 0, 0, 280, 280,0.000000 },
- { 956, 956, 0, 0, 5453, 33,0.000000 },
- { 957, 957, 0, 0, 2466, 100,0.000000 },
- { 958, 958, 0, 0, 973, 973,0.000000 },
- { 959, 959, 0, 0, 40000, 53,0.000000 },
- { 960, 960, 0, 0, 40000, 33,0.000000 },
- { 961, 961, 0, 0, 1026, 13,0.000000 },
- { 962, 962, 0, 0, 166, 166,0.000000 },
- { 963, 963, 0, 0, 806, 806,0.000000 },
- { 964, 964, 0, 0, 40000, 20,0.000000 },
- { 965, 965, 0, 0, 60, 20,0.000000 },
- { 966, 966, 0, 0, 1020, 1020,0.000000 },
- { 967, 967, 0, 0, 3426, 3426,0.000000 },
- { 968, 968, 0, 0, 40000, 20,0.000000 },
- { 969, 969, 0, 0, 40000, 20,0.000000 },
- { 970, 970, 0, 0, 40000, 106,0.000000 },
- { 971, 971, 0, 0, 40000, 6,0.000000 },
- { 972, 972, 0, 0, 40000, 0,0.000000 },
- { 973, 973, 0, 0, 2280, 2280,0.000000 },
- { 974, 974, 0, 0, 40000, 20,0.000000 },
- { 975, 975, 0, 0, 40000, 6,0.000000 },
- { 976, 976, 0, 0, 40000, 6,0.000000 },
- { 977, 977, 0, 0, 40000, 0,0.000000 },
- { 978, 978, 0, 0, 40000, 6,0.000000 },
- { 979, 979, 0, 0, 40000, 33,0.000000 },
- { 980, 980, 0, 0, 40000, 0,0.000000 },
- { 981, 981, 0, 0, 40000, 13,0.000000 },
- { 982, 982, 0, 0, 40000, 20,0.000000 },
- { 983, 983, 0, 0, 40000, 33,0.000000 },
- { 984, 984, 0, 0, 40000, 20,0.000000 },
- { 985, 985, 0, 0, 40000, 33,0.000000 },
- { 986, 986, 0, 0, 40000, 20,0.000000 },
- { 987, 987, 0, 0, 40000, 6,0.000000 },
- { 988, 988, 0, 0, 1133, 1133,0.000000 },
- { 989, 989, 0, 0, 40000, 20,0.000000 },
- { 990, 990, 0, 0, 1340, 1340,0.000000 },
- { 991, 991, 0, 0, 3533, 3533,0.000000 },
- { 992, 992, 0, 0, 40000, 6,0.000000 },
- { 993, 993, 0, 0, 40000, 26,0.000000 },
- { 994, 994, 0, 0, 4140, 4140,0.000000 },
- { 995, 995, 0, 0, 1206, 1206,0.000000 },
- { 996, 996, 0, 0, 40000, 173,0.000000 },
- { 997, 997, 0, 0, 380, 80,0.000000 },
- { 998, 998, 0, 0, 40000, 26,0.000000 },
- { 999, 999, 0, 0, 40000, 20,0.000000 },
- {1000,1000, 0, 0, 2893, 2893,0.000000 },
- {1001,1001, 0, 0, 40000, 73,0.000000 },
- {1002,1002, 0, 0, 40000, 126,0.000000 },
- {1003,1003, 0, 0, 4373, 4373,0.000000 },
- {1004,1004, 0, 0, 40000, 240,0.000000 },
- {1005,1005, 0, 0, 993, 993,0.000000 },
- {1006,1006, 0, 0, 760, 760,0.000000 },
- {1007,1007, 0, 0, 1380, 1380,0.000000 },
- {1008,1008, 0, 0, 726, 53,0.000000 },
- {1009,1009, 0, 0, 40000, 33,0.000000 },
- {1010,1010, 0, 0, 40000, 213,0.000000 },
- {1011,1011, 0, 0, 1046, 1046,0.000000 },
- {1012,1012, 0, 0, 273, 273,0.000000 },
- {1013,1013, 0, 0, 626, 626,0.000000 },
- {1014,1014, 0, 0, 1166, 1166,0.000000 },
- {1015,1015, 0, 0, 153, 153,0.000000 },
- {1016,1016, 0, 0, 40000, 6,0.000000 },
- {1017,1017, 0, 0, 40000, 33,0.000000 },
- {1018,1018, 0, 0, 40000, 20,0.000000 },
- {1019,1019, 0, 0, 2106, 2106,0.000000 },
- { 444, 444, 0, 0, 86, 86,0.000000 },
- {1020,1020, 0, 0, 180, 180,0.000000 },
- { 449, 449, 0, 0, 80, 80,0.000000 },
- { 453, 453, 0, 0, 20, 20,0.000000 },
- {1021,1021, 0, 0, 20, 20,0.000000 },
- {1022,1022, 0, 0, 246, 246,0.000000 },
- {1023,1023, 0, 0, 3186, 3186,0.000000 },
- {1024,1024, 0, 0, 226, 226,0.000000 },
- {1025,1025, 0, 0, 186, 186,0.000000 },
- {1026,1026, 0, 0, 2833, 2833,0.000000 },
- {1027,1027, 0, 0, 2460, 2460,0.000000 },
- {1028,1028, 0, 0, 40000, 40,0.000000 },
- {1029,1029, 0, 0, 40000, 286,0.000000 },
- {1030,1030, 0, 0, 40000, 146,0.000000 },
- {1031,1031, 0, 0, 586, 586,0.000000 },
- {1032,1032, 32, 0, 46, 46,0.000000 },
- {1033,1033, 30, 0, 26, 26,0.000000 },
- {1034,1034, 96, 0, 40, 40,0.000000 },
- {1035,1035, 60, 0, 186, 186,0.000000 },
- {1036,1036, 0, 0, 1100, 1100,0.000000 },
- {1037,1037, 0, 0, 40000, 33,0.000000 },
- {1038,1038, 0, 0, 1740, 1740,0.000000 },
- {1039,1039, 0, 0, 1793, 1793,0.000000 },
- {1040,1040, 0, 0, 160, 160,0.000000 },
- {1041,1041, 0, 0, 1206, 1206,0.000000 },
- {1042,1042, 0, 0, 353, 353,0.000000 },
- {1043,1043, 0, 0, 40000, 6,0.000000 },
- {1044,1044, 0, 0, 40000, 0,0.000000 },
- {1045,1045, 0, 0, 40000, 20,0.000000 },
- {1046,1046, 0, 0, 1186, 1186,0.000000 },
- {1047,1047, 0, 0, 1093, 1093,0.000000 },
- {1048,1048, 0, 0, 620, 620,0.000000 },
- {1049,1049, 0, 0, 4440, 4440,0.000000 },
- {1050,1050, 0, 0, 4506, 4506,0.000000 },
- {1051,1051, 0, 0, 4673, 4673,0.000000 },
- {1052,1052, 0, 0, 2386, 2386,0.000000 },
- {1053,1053, 0, 0, 40000, 146,0.000000 },
- {1054,1054, 0, 0, 1180, 1180,0.000000 },
- {1055,1055, 0, 0, 320, 320,0.000000 },
- {1056,1056, 0, 0, 633, 633,0.000000 },
- {1057,1057, 0, 0, 80, 80,0.000000 },
- {1058,1058, 0, 0, 1180, 1180,0.000000 },
- {1059,1059, 0, 0, 6120, 100,0.000000 },
- {1060,1060, 0, 0, 86, 86,0.000000 },
- {1061,1061, 0, 0, 206, 206,0.000000 },
- {1062,1062, 0, 0, 40000, 86,0.000000 },
- {1063,1063, 0, 0, 40000, 266,0.000000 },
- {1064,1064, 0, 0, 806, 806,0.000000 },
- {1065,1065, 0, 0, 40000, 20,0.000000 },
- {1066,1066, 0, 0, 40000, 53,0.000000 },
- {1067,1067, 0, 0, 40000, 53,0.000000 },
- {1068,1068, 0, 0, 40000, 26,0.000000 },
- {1069,1069, 0, 0, 40000, 20,0.000000 },
- {1070,1070, 0, 0, 40000, 20,0.000000 },
- {1071,1071, 0, 0, 40000, 6,0.000000 },
- {1072,1072, 0, 0, 40000, 26,0.000000 },
- {1073,1073, 0, 0, 40000, 13,0.000000 },
- {1074,1074, 0, 0, 40000, 60,0.000000 },
- {1075,1075, 0, 0, 213, 213,0.000000 },
- {1076,1076, 0, 0, 40000, 73,0.000000 },
- {1077,1077, 0, 0, 4513, 4513,0.000000 },
- {1078,1078, 0, 0, 313, 313,0.000000 },
- {1079,1079, 0, 0, 4273, 4273,0.000000 },
- {1080,1080, 0, 0, 40000, 26,0.000000 },
- {1081,1081, 0, 0, 3153, 3153,0.000000 },
- {1082,1082, 0, 0, 40000, 180,0.000000 },
- {1083,1083, 0, 0, 40000, 213,0.000000 },
- {1084,1084, 0, 0, 1740, 13,0.000000 },
- {1085,1085, 0, 0, 2853, 2853,0.000000 },
- {1086,1086, 0, 0, 40000, 213,0.000000 },
- {1087,1087, 0, 0, 3946, 3946,0.000000 },
- {1088,1088, 0, 0, 2253, 2253,0.000000 },
- {1089,1089, 0, 0, 40000, 260,0.000000 },
- {1090,1090, 0, 0, 166, 166,0.000000 },
- {1091,1091, 0, 0, 40000, 493,0.000000 },
- {1092,1092, 0, 0, 2126, 2126,0.000000 },
- {1093,1093, 0, 0, 40000, 480,0.000000 },
- {1094,1094, 0, 0, 40000, 213,0.000000 },
- {1095,1095, 0, 0, 146, 146,0.000000 },
- {1096,1096, 0, 0, 333, 333,0.000000 },
- {1097,1097, 0, 0, 466, 466,0.000000 },
- {1098,1098, 0, 0, 40000, 40,0.000000 },
- {1099,1099, 0, 0, 4926, 4926,0.000000 },
- {1100,1100, 0, 0, 5113, 5113,0.000000 },
- {1101,1101, 0, 0, 3060, 13,0.000000 },
- {1102,1102, 0, 0, 420, 420,0.000000 },
- {1103,1103, 0, 0, 300, 300,0.000000 },
- {1104,1104, 0, 0, 4426, 4426,0.000000 },
- {1105,1105, 0, 0, 5513, 5513,0.000000 },
- {1106,1106, 0, 0, 40000, 233,0.000000 },
- { 430, 430, 0, 0, 300, 300,0.000000 },
- {1107,1107, 35, 0, 73, 73,0.000000 },
- {1090,1090, 77, 0, 80, 80,0.000000 },
- {1090,1090, 72, 0, 80, 80,0.000000 },
- {1108,1108, 0, 0, 60, 60,0.000000 },
- {1109,1109, 0, 0, 1453, 1453,0.000000 },
- {1110,1111, 0, 1, 506, 506,0.000000 },
- {1112,1113, 0, 1, 1253, 1253,0.031250 },
- {1114,1114, 0, 0, 866, 866,0.000000 },
- {1115,1116, 0, 1, 1473, 1473,0.000000 },
- {1117,1117, 0, 0, 1600, 1600,0.000000 },
- {1118,1118, 0, 0, 680, 680,0.000000 },
- {1119,1119, 0, 0, 1133, 1133,0.000000 },
- {1120,1120, 0, 0, 1013, 1013,0.000000 },
- {1121,1121, 0, 0, 860, 860,0.000000 },
- {1122,1122, 0, 0, 1473, 1473,0.000000 },
- {1123,1123, 0, 0, 280, 280,0.000000 },
- {1124,1124, 0, 0, 53, 53,0.000000 },
- {1125,1125, 0, 0, 1260, 1260,0.000000 },
- {1126,1126, 0, 0, 906, 906,0.000000 },
- {1127,1127, 0, 0, 40000, 66,0.000000 },
- {1128,1128, 0, 0, 260, 13,0.000000 },
- {1129,1130, 0, 1, 13973, 13,0.156250 },
- {1131,1131, 0, 0, 40000, 173,0.000000 },
- {1132,1132, 0, 0, 40000, 53,0.000000 },
- {1133,1134, 0, 1, 40000, 20,-0.046875 },
- {1135,1135, 0, 0, 40000, 26,0.000000 },
- {1136,1137, 0, 1, 40000, 113,0.000025 },
- {1138,1138, 0, 0, 3366, 3366,0.000000 },
- {1139,1139, 0, 0, 400, 400,0.000000 },
- {1140,1140, 0, 0, 473, 473,0.000000 },
- {1141,1141, 0, 0, 840, 840,0.000000 },
- {1142,1142, 0, 0, 800, 800,0.000000 },
- {1143,1143, 0, 0, 2173, 0,0.000000 },
- {1144,1144, 0, 0, 40000, 0,0.000000 },
- {1145,1145, 0, 0, 1433, 1433,0.000000 },
- {1146,1146, 0, 0, 386, 386,0.000000 },
- {1147,1147, 0, 0, 1253, 1253,0.000000 },
- {1148,1148, 0, 0, 1606, 1606,0.000000 },
- {1149,1150, 0, 1, 1553, 1553,-0.031250 },
- {1151,1151, 0, 0, 40000, 6,0.000000 },
- {1152,1152, 0, 0, 1560, 1560,0.000000 },
- {1153,1153, 0, 0, 386, 386,0.000000 },
- {1154,1154, 0, 1, 40000, 20,-0.156250 },
- {1155,1155, 0, 0, 3886, 6,0.000000 },
- {1156,1156, 0, 0, 40000, 66,0.000000 },
- {1157,1157, 0, 0, 40000, 60,0.000000 },
- {1158,1158, 0, 0, 40000, 266,0.000000 },
- {1159,1160, 0, 1, 40000, 273,0.171875 },
- {1161,1161, 0, 0, 173, 173,0.000000 },
- {1162,1162, 0, 0, 993, 993,0.000000 },
- {1163,1163, 0, 0, 726, 726,0.000000 },
- {1164,1165, 0, 1, 40000, 206,-0.125000 },
- {1166,1167, 0, 1, 40000, 266,0.078125 },
- {1168,1168, 0, 1, 40000, 1073,-0.078125 },
- {1169,1170, 0, 1, 40000, 253,0.062500 },
- {1171,1172, 0, 1, 40000, 533,0.156250 },
- {1173,1173, 0, 0, 1813, 1813,0.000000 },
- {1174,1174, 0, 0, 40000, 200,0.000000 },
- {1175,1176, 0, 1, 360, 360,0.000000 },
- {1177,1177, 0, 0, 40000, 6,0.000000 },
- {1178,1178, 0, 0, 806, 6,0.000000 },
- {1179,1179, 0, 0, 1600, 1600,0.000000 },
- {1180,1180, 0, 0, 60, 60,0.000000 },
- {1181,1182, 0, 1, 3153, 3153,0.000025 },
- {1183,1184, 0, 1, 826, 6,0.046875 },
- {1185,1186, 0, 1, 3106, 3106,0.093750 },
- {1187,1188, 0, 1, 1020, 1020,0.093750 },
- {1189,1189, 0, 0, 40000, 33,0.000000 },
- {1190,1190, 0, 0, 40000, 20,0.000000 },
- {1191,1191, 0, 0, 40000, 0,0.000000 },
- {1192,1192, 0, 0, 266, 6,0.000000 },
- {1193,1193, 0, 0, 40000, 33,0.000000 },
- {1194,1194, 0, 0, 40000, 26,0.000000 },
- {1195,1195, 0, 0, 40000, 0,0.000000 },
- {1196,1196, 0, 0, 40000, 13,0.000000 },
- {1197,1197, 0, 0, 40000, 0,0.000000 },
- {1198,1198, 0, 0, 40000, 6,0.000000 },
- {1199,1199, 0, 0, 40000, 53,0.000000 },
- {1200,1200, 0, 0, 40000, 20,0.000000 },
- {1201,1201, 0, 0, 40000, 20,0.000000 },
- {1202,1202, 0, 0, 140, 140,0.000000 },
- {1203,1203, 0, 0, 40000, 93,0.000000 },
- {1204,1204, 0, 0, 40000, 6,0.000000 },
- {1205,1206, 0, 1, 40000, 86,0.031250 },
- {1207,1208, 0, 1, 40000, 100,-0.000025 },
- {1209,1209, 0, 0, 40000, 53,0.000000 },
- {1210,1211, 0, 1, 40000, 0,0.031250 },
- {1212,1212, 0, 0, 40000, 0,0.000000 },
- {1213,1214, 0, 1, 40000, 320,-0.093750 },
- {1215,1216, 0, 1, 1660, 80,-0.046875 },
- {1217,1217, 0, 0, 40000, 66,0.000000 },
- {1218,1219, 0, 1, 40000, 233,0.031250 },
- {1220,1220, 0, 1, 1960, 1960,0.031250 },
- {1221,1222, 0, 1, 17500, 46,0.171875 },
- {1223,1223, 0, 0, 2273, 2273,0.000000 },
- {1224,1224, 0, 0, 1933, 1933,0.000000 },
- {1225,1150, 0, 1, 3126, 13,-0.031250 },
- {1226,1226, 0, 0, 40000, 640,0.000000 },
- {1227,1227, 0, 0, 1080, 1080,0.000000 },
- {1228,1229, 0, 1, 40000, 33,0.125000 },
- {1230,1230, 0, 0, 1046, 1046,0.000000 },
- {1231,1232, 0, 1, 1553, 1553,-0.031250 },
- {1233,1234, 0, 1, 2066, 2066,-0.187500 },
- {1235,1235, 0, 0, 40000, 466,0.000000 },
- {1236,1236, 0, 0, 400, 400,0.000000 },
- {1237,1237, 0, 0, 2706, 2706,0.000000 },
- {1238,1238, 0, 0, 1220, 1220,0.000000 },
- {1239,1239, 0, 0, 446, 446,0.000000 },
- {1240,1241, 0, 1, 360, 360,0.000000 },
- {1242,1242, 0, 0, 4806, 4806,0.000000 },
- {1243,1243, 0, 0, 80, 80,0.000000 },
- {1244,1244, 0, 0, 40000, 80,0.000000 },
- {1245,1245, 0, 0, 40000, 86,0.000000 },
- {1246,1246, 0, 0, 40000, 40,0.000000 },
- {1247,1247, 0, 0, 1920, 1920,0.000000 },
- {1248,1248, 0, 0, 66, 66,0.000000 },
- {1249,1249, 0, 0, 40000, 233,0.000000 },
- {1250,1250, 0, 0, 113, 113,0.000000 },
- {1251,1251, 0, 0, 46, 46,0.000000 },
- {1252,1252, 0, 0, 140, 140,0.000000 },
- {1253,1253, 0, 0, 886, 886,0.000000 },
- {1254,1254, 0, 0, 1080, 1080,0.000000 },
- {1255,1255, 0, 0, 206, 206,0.000000 },
- {1256,1256, 0, 0, 280, 280,0.000000 },
- {1257,1257, 0, 0, 2873, 2873,0.000000 },
- {1258,1258, 0, 0, 313, 313,0.000000 },
- {1259,1259, 0, 0, 40000, 73,0.000000 },
- {1260,1260, 29, 0, 1320, 1320,0.000000 },
- {1261,1261, 65, 0, 40000, 1746,0.000000 },
- {1262,1262, 0, 0, 153, 153,0.000000 },
- {1263,1263, 25, 0, 33, 33,0.000000 },
- {1264,1264, 83, 0, 53, 53,0.000000 },
- {1265,1265, 32, 0, 40, 40,0.000000 },
- {1266,1266, 60, 0, 46, 46,0.000000 },
- {1267,1267, 36, 0, 46, 46,0.000000 },
- {1268,1268, 27, 0, 13, 13,0.000000 },
- {1269,1269, 31, 0, 266, 266,0.000000 },
- {1270,1270, 21, 0, 246, 246,0.000000 },
- {1270,1270, 26, 0, 253, 253,0.000000 },
- {1270,1270, 28, 0, 260, 260,0.000000 },
- {1271,1271, 60, 0, 280, 280,0.000000 },
- {1270,1270, 32, 0, 206, 206,0.000000 },
- {1272,1272, 60, 0, 260, 260,0.000000 },
- {1273,1273, 96, 0, 140, 140,0.000000 },
- {1274,1274, 72, 0, 133, 133,0.000000 },
- {1275,1275, 79, 0, 46, 46,0.000000 },
- {1276,1276, 69, 0, 126, 126,0.000000 },
- {1277,1277, 71, 0, 146, 146,0.000000 },
- {1278,1278, 22, 0, 566, 566,0.000000 },
- {1279,1279, 55, 0, 66, 66,0.000000 },
- {1279,1279, 48, 0, 80, 80,0.000000 },
- {1280,1280, 0, 0, 6, 6,0.000000 },
- {1281,1281, 49, 0, 6, 6,0.000000 },
- {1282,1282, 73, 0, 60, 60,0.000000 },
- {1282,1282, 68, 0, 60, 60,0.000000 },
- {1282,1282, 61, 0, 80, 80,0.000000 },
- {1283,1283, 0, 0, 6, 6,0.000000 },
- {1284,1284, 0, 0, 40000, 46,0.000000 },
- {1285,1285, 0, 0, 40000, 20,0.000000 },
- {1286,1286, 0, 0, 2380, 2380,0.000000 },
- {1287,1287, 0, 0, 700, 700,0.000000 },
- {1288,1289, 0, 1, 653, 6,0.000000 },
- {1290,1290, 0, 0, 80, 80,0.000000 },
- {1291,1292, 36, 1, 46, 46,0.000000 },
- {1293,1293, 69, 0, 126, 126,0.000000 },
- {1294,1294, 0, 0, 120, 120,0.000000 },
- {1295,1295, 0, 0, 40000, 0,0.000000 },
- {1296,1296, 0, 0, 1173, 1173,0.000000 },
- {1297,1297, 22, 0, 566, 566,0.000000 },
- {1298,1298, 0, 0, 40000, 0,0.000000 },
- {1299,1299, 0, 0, 993, 993,0.000000 },
- {1300,1300, 0, 0, 1900, 1900,0.000000 },
- {1301,1301, 0, 0, 1046, 1046,0.000000 },
- {1302,1302, 0, 0, 293, 293,0.000000 },
- {1303,1303, 0, 0, 40000, 33,0.000000 },
- {1304,1304, 0, 0, 40000, 6,0.000000 },
- {1305,1305, 0, 0, 40000, 20,0.000000 },
- {1306,1306, 0, 0, 40000, 193,0.000000 },
- {1307,1307, 0, 0, 40000, 153,0.000000 },
- {1308,1308, 0, 0, 40000, 6,0.000000 },
- {1309,1309, 0, 0, 40000, 46,0.000000 },
- {1310,1310, 0, 0, 40000, 73,0.000000 },
- {1311,1311, 0, 0, 920, 920,0.000000 },
- {1312,1312, 0, 0, 4580, 4580,0.000000 },
- {1313,1313, 0, 0, 1026, 1026,0.000000 },
- {1314,1314, 0, 0, 40000, 6,0.000000 },
- {1315,1315, 0, 0, 3746, 13,0.000000 },
- {1316,1316, 0, 0, 40000, 233,0.000000 },
- {1317,1317, 0, 0, 40000, 153,0.000000 },
- {1318,1318, 0, 0, 40000, 140,0.000000 },
- {1319,1319, 0, 0, 2620, 2620,0.000000 },
- {1320,1320, 0, 0, 40000, 140,0.000000 },
- {1321,1321, 0, 0, 233, 233,0.000000 },
- {1322,1322, 0, 0, 40000, 6,0.000000 },
- {1323,1323, 0, 0, 40000, 0,0.000000 },
- {1324,1324, 0, 0, 40000, 26,0.000000 },
- {1325,1325, 0, 0, 40000, 6,0.000000 },
- { 260, 260, 0, 0, 40000, 20,0.000000 },
- {1326,1326, 0, 0, 40000, 20,0.000000 },
- {1327,1327, 0, 0, 40000, 0,0.000000 },
- {1328,1328, 0, 0, 40000, 13,0.000000 },
- {1329,1329, 0, 0, 40000, 73,0.000000 },
- {1330,1330, 0, 0, 40000, 53,0.000000 },
- {1331,1331, 0, 0, 40000, 66,0.000000 },
- {1332,1332, 0, 0, 40000, 66,0.000000 },
- {1333,1333, 0, 0, 40000, 6,0.000000 },
- {1334,1334, 0, 0, 40000, 73,0.000000 },
- {1335,1335, 0, 0, 40000, 133,0.000000 },
- {1336,1336, 0, 0, 40000, 233,0.000000 },
- {1337,1337, 0, 0, 40000, 406,0.000000 },
- {1338,1338, 0, 0, 1766, 93,0.000000 },
- {1339,1339, 0, 0, 40000, 533,0.000000 },
- {1340,1340, 0, 0, 40000, 106,0.000000 },
- {1341,1341, 0, 0, 593, 13,0.000000 },
- {1342,1342, 0, 0, 940, 940,0.000000 },
- {1343,1343, 0, 0, 40000, 53,0.000000 },
- {1344,1344, 0, 0, 2006, 2006,0.000000 },
- {1345,1345, 0, 0, 40000, 933,0.000000 },
- {1346,1346, 0, 0, 973, 973,0.000000 },
- { 378, 378, 84, 0, 440, 440,0.000000 },
- {1347,1347, 24, 0, 46, 46,0.000000 },
- {1348,1348, 44, 0, 80, 80,0.000000 },
- {1349,1349, 40, 0, 306, 306,0.000000 },
- {1350,1350, 60, 0, 340, 340,0.000000 },
- {1351,1351, 0, 0, 866, 866,0.000000 },
- {1352,1352, 0, 0, 993, 993,0.000000 },
- {1353,1353, 0, 0, 633, 633,0.000000 },
- {1354,1354, 0, 0, 40000, 40,0.000000 },
- {1355,1355, 0, 0, 973, 973,0.000000 },
- {1356,1356, 0, 0, 40000, 126,0.000000 },
- {1357,1357, 0, 0, 166, 166,0.000000 },
- {1358,1358, 0, 0, 640, 640,0.000000 },
- {1359,1359, 0, 0, 100, 100,0.000000 },
- {1360,1360, 0, 0, 40000, 113,0.000000 },
- {1361,1361, 0, 0, 40000, 240,0.000000 },
- {1362,1362, 0, 0, 3793, 80,0.000000 },
- {1363,1363, 0, 0, 40000, 240,0.000000 },
- {1364,1364, 0, 0, 126, 126,0.000000 },
- {1365,1365, 0, 0, 40000, 20,0.000000 },
- {1366,1366, 0, 0, 40000, 26,0.000000 },
- {1367,1367, 0, 0, 2233, 6,0.000000 },
- {1368,1368, 0, 0, 40000, 53,0.000000 },
- {1369,1369, 0, 0, 40000, 33,0.000000 },
- {1370,1370, 0, 0, 40000, 13,0.000000 },
- {1371,1371, 0, 0, 40000, 13,0.000000 },
- {1372,1372, 0, 0, 40000, 26,0.000000 },
- {1373,1373, 0, 0, 40000, 6,0.000000 },
- {1374,1374, 0, 0, 40000, 13,0.000000 },
- {1375,1375, 0, 0, 4473, 13,0.000000 },
- {1376,1376, 0, 0, 146, 146,0.000000 },
- {1377,1377, 0, 0, 86, 86,0.000000 },
- {1378,1378, 35, 0, 73, 73,0.000000 },
- {1379,1379, 49, 0, 40, 40,0.000000 },
- {1377,1377, 48, 0, 80, 80,0.000000 },
- {1380,1380, 58, 0, 40, 40,0.000000 },
- {1377,1377, 60, 0, 86, 86,0.000000 },
- {1381,1381, 47, 0, 106, 106,0.000000 },
- {1382,1382, 60, 0, 20, 20,0.000000 },
- {1381,1381, 49, 0, 153, 153,0.000000 },
- {1383,1383, 72, 0, 80, 80,0.000000 },
- {1381,1381, 51, 0, 200, 200,0.000000 },
- {1384,1384, 84, 0, 273, 273,0.000000 },
- {1381,1381, 54, 0, 233, 233,0.000000 },
- {1381,1381, 57, 0, 260, 260,0.000000 },
- {1385,1385, 72, 0, 506, 506,0.000000 },
- {1381,1381, 60, 0, 306, 306,0.000000 },
- {1386,1386, 36, 0, 866, 866,0.000000 },
- {1387,1387, 93, 0, 66, 66,0.000000 },
- {1388,1388, 72, 0, 273, 273,0.000000 },
- {1389,1389, 84, 0, 426, 426,0.000000 },
- {1390,1390, 36, 0, 20, 20,0.000000 },
- {1391,1391, 64, 0, 86, 86,0.000000 },
- {1392,1392, 68, 0, 26, 26,0.000000 },
- {1393,1393, 0, 0, 1226, 1226,0.000000 },
- {1394,1394, 0, 0, 40000, 140,0.000000 },
- {1395,1395, 0, 0, 40000, 0,0.000000 },
- {1396,1396, 0, 0, 513, 513,0.000000 },
- {1397,1397, 0, 0, 40000, 126,0.000000 },
- {1398,1398, 0, 0, 320, 320,0.000000 },
- {1399,1399, 0, 0, 40000, 0,0.000000 },
- {1400,1400, 0, 0, 1766, 1766,0.000000 },
- {1401,1401, 0, 0, 2513, 2513,0.000000 },
- {1402,1402, 0, 0, 1300, 1300,0.000000 },
- {1403,1403, 0, 0, 46, 46,0.000000 },
- {1404,1404, 0, 0, 186, 6,0.000000 },
- {1405,1405, 0, 0, 40000, 6,0.000000 },
- {1406,1406, 0, 0, 40, 26,0.000000 },
- {1407,1407, 0, 0, 166, 166,0.000000 },
- {1408,1408, 0, 0, 2193, 2193,0.000000 },
- {1409,1409, 0, 0, 40000, 206,0.000000 },
- {1410,1410, 0, 0, 40000, 1460,0.000000 },
- {1411,1411, 0, 0, 166, 166,0.000000 },
- {1412,1412, 0, 0, 1380, 1380,0.000000 },
- {1413,1413, 0, 0, 533, 533,0.000000 },
- {1414,1414, 0, 0, 40000, 33,0.000000 },
- {1415,1415, 0, 0, 40000, 53,0.000000 },
- {1416,1416, 0, 0, 40000, 0,0.000000 },
- {1417,1417, 0, 0, 40000, 6,0.000000 },
- {1418,1418, 0, 0, 40000, 6,0.000000 },
- {1419,1419, 0, 0, 913, 913,0.000000 },
- {1420,1420, 0, 0, 1233, 6,0.000000 },
- {1421,1421, 0, 0, 126, 126,0.000000 },
- {1422,1422, 0, 0, 40000, 46,0.000000 },
- {1423,1423, 0, 0, 933, 933,0.000000 },
- {1424,1424, 0, 0, 1846, 1846,0.000000 },
- {1425,1425, 0, 0, 973, 973,0.000000 },
- {1426,1426, 0, 0, 160, 160,0.000000 },
- {1427,1427, 0, 0, 40000, 106,0.000000 },
- {1428,1428, 0, 0, 120, 120,0.000000 },
- {1429,1429, 0, 0, 40000, 6,0.000000 },
- {1430,1430, 0, 0, 93, 93,0.000000 },
- {1431,1431, 0, 0, 40, 40,0.000000 },
- {1432,1432, 0, 0, 2420, 2420,0.000000 },
- {1433,1433, 0, 0, 1153, 1153,0.000000 },
- {1434,1434, 0, 0, 2406, 2406,0.000000 },
- { 740, 740, 0, 0, 80, 80,0.000000 },
- {1435,1435, 0, 0, 40000, 3220,0.000000 },
- { 739, 739, 48, 0, 93, 93,0.000000 },
- { 500, 500, 55, 0, 13, 13,0.000000 },
- { 740, 740, 60, 0, 53, 53,0.000000 },
- { 500, 500, 41, 0, 13, 13,0.000000 },
- {1436,1436, 84, 0, 40, 40,0.000000 },
- {1437,1437, 84, 0, 73, 73,0.000000 },
- { 500, 500, 48, 0, 13, 13,0.000000 },
- {1438,1438, 15, 0, 86, 86,0.000000 },
- { 752, 752, 49, 0, 46, 46,0.000000 },
- {1438,1438, 16, 0, 93, 93,0.000000 },
- {1438,1438, 12, 0, 86, 86,0.000000 },
- { 740, 740, 55, 0, 53, 53,0.000000 },
- { 752, 752, 18, 0, 46, 46,0.000000 },
- { 752, 752, 15, 0, 46, 46,0.000000 },
- { 752, 752, 17, 0, 46, 46,0.000000 },
- {1439,1440, 0, 0, 1340, 1340,0.000000 },
- {1441,1442, 0, 0, 1113, 1113,0.000000 },
- {1443,1444, 0, 0, 2133, 2133,0.000000 },
- {1445,1446, 0, 0, 953, 953,0.000000 },
- {1447,1448, 0, 0, 100, 100,0.000000 },
- {1449,1450, 0, 0, 1313, 1313,0.000000 },
- { 181,1451, 0, 0, 473, 473,0.000000 },
- {1452,1453, 0, 0, 680, 680,0.000000 },
- {1454,1455, 0, 0, 260, 260,0.000000 },
- {1456,1457, 0, 0, 193, 193,0.000000 },
- {1458,1459, 0, 0, 1320, 1320,0.000000 },
- { 190,1460, 0, 0, 646, 6,0.000000 },
- { 192,1461, 0, 0, 40000, 6,0.000000 },
- {1462,1463, 0, 0, 40000, 113,0.000000 },
- {1464,1465, 0, 0, 40000, 133,0.000000 },
- {1466,1467, 0, 0, 40000, 6,0.000000 },
- {1468,1469, 0, 0, 40000, 0,0.000000 },
- { 35,1470, 0, 0, 1446, 1446,0.000000 },
- { 36,1471, 0, 0, 1606, 1606,0.000000 },
- {1472,1473, 0, 0, 1553, 1553,0.000000 },
- {1474,1475, 0, 0, 2133, 2133,0.000000 },
- { 39,1476, 0, 0, 40000, 26,0.000000 },
- {1477,1476, 0, 0, 40000, 46,0.000000 },
- {1478,1479, 0, 0, 40000, 240,0.000000 },
- { 50,1480, 0, 0, 40000, 153,0.000000 },
- {1481,1482, 0, 0, 40000, 46,0.000000 },
- {1483,1484, 0, 0, 2300, 2300,0.000000 },
- {1485,1486, 0, 0, 40000, 86,0.000000 },
- { 55,1487, 0, 0, 40000, 20,0.000000 },
- {1488,1489, 0, 0, 40000, 20,0.000000 },
- {1490,1491, 0, 0, 40000, 6,0.000000 },
- {1492,1493, 0, 0, 40000, 0,0.000000 },
- {1494,1495, 0, 0, 40000, 6,0.000000 },
- {1496,1497, 0, 0, 40000, 6,0.000000 },
- {1496,1498, 0, 0, 40000, 6,0.000000 },
- {1499,1500, 0, 0, 40000, 6,0.000000 },
- {1501,1502, 0, 0, 40000, 53,0.000000 },
- {1503,1504, 0, 0, 40000, 33,0.000000 },
- {1505,1506, 0, 0, 40000, 6,0.000000 },
- { 86,1507, 0, 0, 40000, 20,0.000000 },
- {1508,1509, 0, 0, 1766, 1766,0.000000 },
- {1510,1511, 0, 0, 2853, 13,0.000000 },
- {1512,1513, 0, 0, 593, 593,0.000000 },
- {1514,1515, 0, 0, 1126, 33,0.000000 },
- {1516,1517, 0, 0, 40000, 460,0.000000 },
- {1518,1519, 0, 0, 233, 233,0.000000 },
- {1520,1521, 0, 0, 40000, 213,0.000000 },
- {1522,1523, 0, 0, 1233, 1233,0.000000 },
- {1524,1525, 0, 0, 40000, 626,0.000000 },
- {1526,1527, 0, 0, 40000, 446,0.000000 },
- {1528,1529, 0, 0, 40000, 320,0.000000 },
- { 111,1530, 0, 0, 786, 786,0.000000 },
- {1531,1532, 0, 0, 20, 20,0.000000 },
- { 115,1533, 0, 0, 26, 26,0.000000 },
- {1534,1535, 0, 0, 166, 166,0.000000 },
- {1536,1537, 0, 0, 2280, 2280,0.000000 },
- {1538,1539, 0, 0, 280, 280,0.000000 },
- {1540, 339, 0, 0, 580, 580,0.000000 },
- {1541, 339, 0, 0, 4613, 4613,0.000000 },
- {1542,1543, 0, 0, 440, 440,0.000000 },
- {1544,1545, 0, 0, 153, 153,0.000000 },
- {1546,1547, 0, 0, 40000, 53,0.000000 },
- { 364, 365, 44, 0, 20, 20,0.000000 },
- { 129,1548, 48, 0, 66, 66,0.000000 },
- { 367, 368, 58, 0, 53, 53,0.000000 },
- { 129,1549, 60, 0, 73, 73,0.000000 },
- {1550,1551, 48, 0, 93, 93,0.000000 },
- { 132,1552, 43, 0, 13, 13,0.000000 },
- {1550,1551, 49, 0, 120, 120,0.000000 },
- {1553,1554, 43, 0, 26, 26,0.000000 },
- {1550,1551, 51, 0, 153, 153,0.000000 },
- { 134,1555, 43, 0, 146, 146,0.000000 },
- {1550,1551, 54, 0, 106, 106,0.000000 },
- {1550,1551, 57, 0, 100, 100,0.000000 },
- { 380, 381, 72, 0, 40000, 0,0.000000 },
- {1550,1551, 60, 0, 106, 106,0.000000 },
- {1556,1557, 70, 0, 246, 246,0.000000 },
- { 374, 375, 60, 0, 40000, 0,0.000000 },
- {1558,1559, 36, 0, 360, 360,0.000000 },
- {1560,1561, 65, 0, 113, 113,0.000000 },
- {1562,1563, 84, 0, 40000, 0,0.000000 },
- {1564,1565, 59, 0, 133, 133,0.000000 },
- {1566,1567, 84, 0, 40000, 0,0.000000 },
- {1568,1569, 35, 0, 53, 53,0.000000 },
- {1570,1571, 44, 0, 273, 273,0.000000 },
- {1572,1573, 67, 0, 66, 66,0.000000 },
- {1574,1575, 66, 0, 46, 46,0.000000 },
- { 145,1576, 59, 0, 13, 13,0.000000 },
- {1577,1578, 51, 0, 40, 40,0.000000 },
- {1579,1580, 45, 0, 40, 40,0.000000 },
- {1581,1582, 71, 0, 120, 120,0.000000 },
- { 149,1583, 60, 0, 180, 180,0.000000 },
- {1584,1585, 58, 0, 166, 166,0.000000 },
- {1586,1587, 53, 0, 140, 140,0.000000 },
- { 397,1588, 64, 0, 86, 86,0.000000 },
- {1589,1590, 71, 0, 13, 13,0.000000 },
- {1591,1592, 61, 0, 313, 313,0.000000 },
- {1593,1594, 61, 0, 513, 513,0.000000 },
- { 391, 392, 48, 0, 80, 80,0.000000 },
- { 391, 393, 48, 0, 80, 80,0.000000 },
- {1595,1596, 69, 0, 20, 20,0.000000 },
- { 159,1597, 68, 0, 20, 20,0.000000 },
- { 159,1597, 63, 0, 33, 33,0.000000 },
- {1598,1599, 74, 0, 333, 333,0.000000 },
- {1600,1601, 60, 0, 380, 380,0.000000 },
- {1602,1603, 80, 0, 60, 60,0.000000 },
- {1604,1605, 64, 0, 646, 646,0.000000 },
- {1606,1607, 69, 0, 33, 33,0.000000 },
- { 398, 399, 55, 0, 500, 500,0.000000 },
- {1608,1609, 75, 0, 346, 346,0.000000 },
- {1610,1611, 68, 0, 20, 20,0.000000 },
- {1612,1613, 48, 0, 46, 46,0.000000 },
- {1614,1615, 53, 0, 40, 40,0.000000 },
- {1616,1616, 0, 0, 40000, 873,0.000000 },
- {1617,1617, 0, 0, 40000, 446,0.000000 },
- {1618,1618, 0, 0, 1020, 1020,0.000000 },
- {1619,1619, 0, 0, 40000, 300,0.000000 },
- {1620,1620, 0, 0, 40000, 780,0.000000 },
- {1621,1621, 0, 0, 1400, 1400,0.000000 },
- {1622,1622, 0, 0, 40000, 480,0.000000 },
- {1623,1623, 0, 0, 40000, 566,0.000000 },
- {1624,1624, 0, 0, 3220, 3220,0.000000 },
- {1625,1625, 0, 0, 40000, 6,0.000000 },
- {1626,1626, 0, 0, 40000, 20,0.000000 },
- {1627,1627, 0, 0, 40000, 20,0.000000 },
- {1628,1628, 0, 0, 40000, 1180,0.000000 },
- {1629,1629, 0, 0, 40000, 20,0.000000 },
- {1630,1630, 0, 0, 40000, 6,0.000000 },
- {1631,1631, 0, 0, 40000, 6,0.000000 },
- {1632,1632, 0, 0, 40000, 280,0.000000 },
- {1633,1633, 0, 0, 40000, 6,0.000000 },
- {1634,1634, 0, 0, 40000, 6,0.000000 },
- {1635,1635, 0, 0, 40000, 6,0.000000 },
- {1636,1636, 0, 0, 340, 26,0.000000 },
- {1637,1637, 0, 0, 1000, 1000,0.000000 },
- {1638,1638, 0, 0, 40000, 200,0.000000 },
- {1639,1639, 0, 0, 460, 460,0.000000 },
- {1640,1640, 0, 0, 40000, 146,0.000000 },
- {1641,1641, 0, 0, 40000, 146,0.000000 },
- {1642,1642, 0, 0, 40000, 233,0.000000 },
- {1643,1643, 0, 0, 40000, 480,0.000000 },
- {1644,1644, 0, 0, 40000, 6,0.000000 },
- {1645,1645, 0, 0, 40000, 6,0.000000 },
- {1646,1646, 0, 0, 40000, 6,0.000000 },
- {1647,1647, 0, 0, 40000, 6,0.000000 },
- {1648,1648, 0, 0, 40000, 6,0.000000 },
- {1649,1649, 0, 0, 40000, 6,0.000000 },
- {1650,1650, 0, 0, 40000, 53,0.000000 },
- {1651,1651, 0, 0, 40000, 480,0.000000 },
- {1652,1652, 0, 0, 40000, 286,0.000000 },
- {1653,1653, 0, 0, 40000, 106,0.000000 },
- {1654,1654, 0, 0, 40000, 413,0.000000 },
- {1655,1655, 0, 0, 1213, 1213,0.000000 },
- {1656,1656, 0, 0, 513, 513,0.000000 },
- {1657,1657, 0, 0, 40000, 160,0.000000 },
- {1658,1658, 0, 0, 40000, 153,0.000000 },
- {1659,1659, 0, 0, 40000, 1973,0.000000 },
- {1660,1660, 0, 0, 40000, 3593,0.000000 },
- {1661,1661, 0, 0, 40000, 1120,0.000000 },
- {1662,1662, 0, 0, 620, 620,0.000000 },
- {1663,1663, 0, 0, 1740, 1740,0.000000 },
- {1664,1664, 0, 0, 940, 940,0.000000 },
- {1665,1665, 0, 0, 40000, 260,0.000000 },
- {1666,1666, 0, 0, 1900, 1900,0.000000 },
- {1667,1667, 0, 0, 40000, 426,0.000000 },
- {1668,1668, 12, 0, 66, 66,0.000000 },
- {1669,1669, 48, 0, 100, 100,0.000000 },
- { 736, 736, 52, 0, 80, 80,0.000000 },
- {1670,1670, 48, 0, 153, 153,0.000000 },
- {1670,1670, 36, 0, 146, 146,0.000000 },
- { 377, 377, 84, 0, 73, 73,0.000000 },
- { 730, 730, 95, 0, 600, 600,0.000000 },
- {1669,1669, 84, 0, 86, 86,0.000000 },
- { 755, 755, 20, 0, 200, 200,0.000000 },
- { 755, 755, 22, 0, 193, 193,0.000000 },
- { 755, 755, 24, 0, 200, 200,0.000000 },
- {1671,1671, 0, 0, 400, 400,0.000000 },
- {1672,1672, 0, 0, 460, 460,0.000000 },
- {1673,1673, 0, 0, 566, 566,0.000000 },
- {1674,1674, 0, 0, 40, 40,0.000000 },
- {1675,1675, 0, 0, 913, 913,0.000000 },
- {1676,1676, 0, 0, 940, 940,0.000000 },
- {1677,1677, 0, 0, 553, 553,0.000000 },
- {1678,1678, 0, 0, 653, 653,0.000000 },
- {1679,1679, 0, 0, 140, 140,0.000000 },
- {1680,1680, 0, 0, 440, 440,0.000000 },
- {1681,1681, 0, 0, 493, 493,0.000000 },
- {1682,1682, 0, 0, 40000, 213,0.000000 },
- {1683,1683, 0, 0, 246, 246,0.000000 },
- {1684,1684, 0, 0, 140, 140,0.000000 },
- {1685,1685, 0, 0, 880, 880,0.000000 },
- {1686,1686, 0, 0, 700, 700,0.000000 },
- {1687,1687, 0, 0, 40000, 0,0.000000 },
- {1688,1688, 0, 0, 40000, 6,0.000000 },
- {1689,1689, 0, 0, 86, 86,0.000000 },
- {1690,1690, 0, 0, 40000, 6,0.000000 },
- {1691,1691, 0, 0, 40000, 6,0.000000 },
- {1692,1692, 0, 0, 40000, 6,0.000000 },
- {1693,1693, 0, 0, 40000, 6,0.000000 },
- {1694,1694, 0, 0, 440, 440,0.000000 },
- {1695,1695, 0, 0, 440, 440,0.000000 },
- {1696,1696, 0, 0, 100, 0,0.000000 },
- {1697,1697, 0, 0, 1846, 1846,0.000000 },
- {1698,1698, 0, 0, 40, 40,0.000000 },
- {1699,1699, 0, 0, 6580, 6580,0.000000 },
- {1700,1700, 0, 0, 1846, 1846,0.000000 },
- {1701,1701, 0, 0, 1080, 1080,0.000000 },
- {1702,1702, 0, 0, 40000, 0,0.000000 },
- {1703,1703, 0, 0, 1020, 1020,0.000000 },
- {1704,1704, 0, 0, 40000, 53,0.000000 },
- {1705,1705, 0, 0, 40000, 0,0.000000 },
- {1706,1706, 0, 0, 40000, 0,0.000000 },
- {1707,1707, 0, 0, 40000, 53,0.000000 },
- {1708,1708, 0, 0, 40000, 0,0.000000 },
- {1709,1709, 0, 0, 40000, 26,0.000000 },
- {1710,1710, 0, 0, 626, 626,0.000000 },
- {1711,1711, 0, 0, 40000, 26,0.000000 },
- {1712,1712, 0, 0, 1226, 13,0.000000 },
- {1713,1713, 0, 0, 40000, 0,0.000000 },
- {1714,1714, 0, 0, 3980, 13,0.000000 },
- {1715,1715, 0, 0, 253, 253,0.000000 },
- {1716,1716, 0, 0, 940, 940,0.000000 },
- {1717,1717, 0, 0, 126, 126,0.000000 },
- {1718,1718, 0, 0, 3766, 13,0.000000 },
- {1719,1719, 0, 0, 660, 200,0.000000 },
- {1720,1720, 0, 0, 40000, 20,0.000000 },
- {1721,1721, 0, 0, 40000, 20,0.000000 },
- {1722,1722, 0, 0, 40000, 146,0.000000 },
- {1723,1723, 0, 0, 40000, 26,0.000000 },
- {1724,1724, 0, 0, 40000, 140,0.000000 },
- {1725,1725, 0, 0, 260, 260,0.000000 },
- {1726,1726, 0, 0, 40000, 0,0.000000 },
- {1727,1727, 0, 0, 126, 0,0.000000 },
- {1728,1728, 0, 0, 386, 6,0.000000 },
- {1729,1729, 0, 0, 40000, 33,0.000000 },
- {1730,1730, 0, 0, 126, 33,0.000000 },
- {1731,1731, 0, 0, 1580, 1580,0.000000 },
- {1732,1732, 0, 0, 40000, 6,0.000000 },
- {1733,1733, 0, 0, 40000, 6,0.000000 },
- {1734,1734, 0, 0, 40000, 6,0.000000 },
- {1735,1735, 0, 0, 40000, 13,0.000000 },
- {1736,1736, 0, 0, 40000, 13,0.000000 },
- {1737,1737, 0, 0, 40000, 20,0.000000 },
- {1738,1738, 0, 0, 40000, 13,0.000000 },
- {1739,1739, 0, 0, 40000, 13,0.000000 },
- {1740,1740, 0, 0, 40000, 73,0.000000 },
- {1741,1741, 0, 0, 40000, 6,0.000000 },
- {1742,1742, 0, 0, 40000, 6,0.000000 },
- {1743,1743, 0, 0, 40000, 20,0.000000 },
- {1744,1744, 0, 0, 993, 993,0.000000 },
- {1745,1745, 0, 0, 40000, 20,0.000000 },
- {1746,1746, 0, 0, 40000, 0,0.000000 },
- {1747,1747, 0, 0, 40000, 0,0.000000 },
- {1748,1748, 0, 0, 933, 6,0.000000 },
- {1749,1749, 0, 0, 40000, 20,0.000000 },
- {1750,1750, 0, 0, 40000, 6,0.000000 },
- {1751,1751, 0, 0, 40000, 13,0.000000 },
- {1752,1752, 0, 0, 40000, 26,0.000000 },
- {1753,1753, 0, 0, 40000, 0,0.000000 },
- {1754,1754, 0, 0, 1793, 1793,0.000000 },
- {1755,1755, 0, 0, 40000, 106,0.000000 },
- {1756,1756, 0, 0, 40000, 46,0.000000 },
- {1757,1757, 0, 0, 40000, 33,0.000000 },
- {1758,1758, 0, 0, 40000, 286,0.000000 },
- {1759,1759, 0, 0, 40000, 906,0.000000 },
- {1760,1760, 0, 0, 40000, 220,0.000000 },
- {1761,1761, 0, 0, 40000, 53,0.000000 },
- {1762,1762, 0, 0, 40000, 40,0.000000 },
- {1763,1763, 0, 0, 3446, 3446,0.000000 },
- {1764,1764, 0, 0, 860, 13,0.000000 },
- {1765,1765, 0, 0, 513, 513,0.000000 },
- {1766,1766, 0, 0, 1846, 1846,0.000000 },
- {1767,1767, 0, 0, 973, 973,0.000000 },
- {1768,1768, 0, 0, 40000, 366,0.000000 },
- {1769,1769, 0, 0, 1426, 1426,0.000000 },
- {1770,1770, 0, 0, 40000, 686,0.000000 },
- {1771,1771, 0, 0, 1060, 1060,0.000000 },
- {1772,1772, 0, 0, 13, 13,0.000000 },
- {1773,1773, 0, 0, 380, 380,0.000000 },
- {1774,1774, 0, 0, 146, 146,0.000000 },
- {1775,1775, 0, 0, 166, 166,0.000000 },
- {1776,1776, 0, 0, 40000, 6,0.000000 },
- {1777,1777, 0, 0, 40000, 0,0.000000 },
- {1778,1778, 0, 0, 40000, 66,0.000000 },
- {1779,1779, 0, 0, 1473, 1473,0.000000 },
- {1780,1780, 0, 0, 113, 113,0.000000 },
- {1781,1781, 0, 0, 353, 353,0.000000 },
- {1782,1782, 0, 0, 46, 46,0.000000 },
- {1783,1783, 0, 0, 86, 86,0.000000 },
- {1784,1784, 0, 0, 60, 60,0.000000 },
- {1785,1785, 0, 0, 2280, 2280,0.000000 },
- {1786,1786, 0, 0, 366, 366,0.000000 },
- {1787,1787, 0, 0, 1713, 1713,0.000000 },
- {1788,1788, 0, 0, 206, 206,0.000000 },
- {1789,1789, 0, 0, 40000, 6,0.000000 },
- {1790,1790, 0, 0, 40000, 0,0.000000 },
- {1791,1791, 0, 0, 40000, 553,0.000000 },
- {1792,1792, 0, 0, 160, 160,0.000000 },
- {1793,1793, 48, 0, 46, 46,0.000000 },
- {1794,1794, 48, 0, 13, 13,0.000000 },
- {1795,1795, 60, 0, 46, 46,0.000000 },
- {1796,1796, 60, 0, 33, 33,0.000000 },
- {1797,1797, 70, 0, 33, 33,0.000000 },
- {1798,1798, 51, 0, 160, 160,0.000000 },
- {1799,1799, 60, 0, 40, 40,0.000000 },
- {1798,1798, 54, 0, 140, 140,0.000000 },
- {1800,1800, 60, 0, 53, 53,0.000000 },
- {1798,1798, 56, 0, 140, 140,0.000000 },
- {1801,1801, 60, 0, 300, 300,0.000000 },
- {1798,1798, 61, 0, 166, 166,0.000000 },
- {1798,1798, 63, 0, 166, 166,0.000000 },
- {1802,1802, 48, 0, 300, 300,0.000000 },
- {1798,1798, 68, 0, 133, 133,0.000000 },
- {1803,1803, 60, 0, 393, 393,0.000000 },
- {1804,1804, 60, 0, 313, 313,0.000000 },
- {1805,1805, 66, 0, 100, 100,0.000000 },
- {1806,1806, 60, 0, 306, 306,0.000000 },
- { 379, 379, 59, 0, 40, 40,0.000000 },
- {1802,1802, 64, 0, 306, 306,0.000000 },
- {1807,1807, 48, 0, 566, 566,0.000000 },
- {1808,1808, 56, 0, 26, 26,0.000000 },
- {1809,1809, 53, 0, 73, 73,0.000000 },
- {1810,1810, 65, 0, 13, 13,0.000000 },
- {1811,1811, 49, 0, 86, 86,0.000000 },
- {1811,1811, 43, 0, 86, 86,0.000000 },
- { 386, 386, 65, 0, 86, 86,0.000000 },
- { 386, 386, 60, 0, 86, 86,0.000000 },
- {1812,1812, 70, 0, 80, 80,0.000000 },
- {1812,1812, 65, 0, 100, 100,0.000000 },
- {1813,1813, 60, 0, 40, 40,0.000000 },
- {1814,1814, 60, 0, 33, 33,0.000000 },
- {1815,1815, 56, 0, 93, 93,0.000000 },
- {1816,1816, 53, 0, 280, 280,0.000000 },
- {1817,1817, 60, 0, 60, 60,0.000000 },
- {1818,1818, 48, 0, 180, 180,0.000000 },
- {1819,1819, 69, 0, 20, 20,0.000000 },
- { 328, 328, 67, 0, 20, 20,0.000000 },
- { 328, 328, 62, 0, 20, 20,0.000000 },
- {1820,1820, 65, 0, 220, 220,0.000000 },
- {1821,1821, 60, 0, 220, 220,0.000000 },
- {1822,1822, 63, 0, 26, 26,0.000000 },
- {1823,1823, 63, 0, 606, 606,0.000000 },
- {1824,1824, 67, 0, 86, 86,0.000000 },
- {1825,1825, 60, 0, 300, 300,0.000000 },
- {1825,1825, 72, 0, 273, 273,0.000000 },
- { 401, 401, 62, 0, 6, 6,0.000000 },
- {1826,1826, 48, 0, 13, 13,0.000000 },
- {1827,1827, 53, 0, 213, 213,0.000000 },
- {1828,1828, 60, 0, 93, 93,0.000000 },
- {1829,1829, 60, 0, 40, 40,0.000000 },
- {1830,1830, 60, 0, 20, 20,0.000000 },
- {1831,1831, 60, 0, 46, 46,0.000000 },
- {1832,1832, 0, 0, 126, 0,0.000000 },
- {1833,1833, 0, 0, 1240, 1240,0.000000 },
- {1834,1834, 0, 0, 433, 433,0.000000 },
- {1835,1835, 0, 0, 40000, 0,0.000000 },
- {1836,1836, 0, 0, 40000, 153,0.000000 },
- {1837,1837, 0, 0, 146, 106,0.000000 },
- {1838,1838, 0, 0, 126, 126,0.000000 },
- {1839,1839, 0, 0, 1740, 1740,0.000000 },
- {1840,1840, 0, 0, 440, 13,0.000000 },
- {1841,1841, 0, 0, 546, 546,0.000000 },
- {1842,1842, 0, 0, 1420, 1420,0.000000 },
- { 525, 525, 0, 0, 1220, 1220,0.000000 },
- {1843,1843, 0, 0, 40000, 140,0.000000 },
- {1844,1844, 0, 0, 3873, 3873,0.000000 },
- {1845,1845, 0, 0, 546, 546,0.000000 },
- {1846,1846, 0, 0, 333, 333,0.000000 },
- {1847,1847, 0, 0, 4933, 4933,0.000000 },
- {1848,1848, 0, 0, 126, 0,0.000000 },
- {1849,1849, 0, 0, 380, 380,0.000000 },
- {1850,1850, 0, 0, 40000, 6,0.000000 },
- {1851,1851, 0, 0, 273, 273,0.000000 },
- {1852,1852, 0, 0, 233, 233,0.000000 },
- {1853,1853, 0, 0, 40000, 233,0.000000 },
- {1854,1854, 0, 0, 1466, 6,0.000000 },
- {1855,1855, 0, 0, 1380, 1380,0.000000 },
- {1856,1856, 0, 0, 40000, 106,0.000000 },
- {1857,1857, 0, 0, 40000, 133,0.000000 },
- {1858,1858, 0, 0, 913, 913,0.000000 },
- {1859,1859, 0, 0, 60, 60,0.000000 },
- {1860,1860, 0, 0, 40000, 6,0.000000 },
- {1861,1861, 0, 0, 866, 866,0.000000 },
- {1862,1862, 0, 0, 4726, 4726,0.000000 },
- {1863,1863, 0, 0, 40, 40,0.000000 },
- {1864,1864, 0, 0, 1793, 1793,0.000000 },
- {1865,1865, 0, 0, 246, 246,0.000000 },
- {1866,1866, 0, 0, 40000, 133,0.000000 },
- {1867,1867, 0, 0, 2006, 2006,0.000000 },
- {1868,1868, 0, 0, 140, 140,0.000000 },
- {1869,1869, 0, 0, 40000, 106,0.000000 },
- {1870,1870, 0, 0, 460, 460,0.000000 },
- {1871,1871, 0, 0, 146, 146,0.000000 },
- {1872,1872, 0, 0, 273, 273,0.000000 },
- {1873,1873, 0, 0, 40000, 46,0.000000 },
- {1874,1874, 41, 0, 120, 120,0.000000 },
- {1875,1875, 70, 0, 13, 13,0.000000 },
- {1876,1876, 60, 0, 40, 40,0.000000 },
- {1877,1877, 80, 0, 13, 13,0.000000 },
- {1878,1878, 84, 0, 20, 20,0.000000 },
- {1879,1879, 72, 0, 133, 133,0.000000 },
- {1880,1880, 84, 0, 266, 266,0.000000 },
- { 128, 128, 70, 0, 13, 13,0.000000 },
- { 132, 132, 60, 0, 13, 13,0.000000 },
- {1881,1882, 0, 0, 40000, 173,0.000000 },
- {1883,1883, 0, 0, 260, 260,0.000000 },
- {1884,1885, 0, 0, 40000, 6,0.000000 },
- {1886,1887, 0, 0, 40000, 20,0.000000 },
- {1888,1889, 0, 0, 40000, 6,0.000000 },
- {1890,1890, 0, 0, 1020, 53,0.000000 },
- {1891,1891, 0, 0, 40000, 100,0.000000 },
- {1892,1892, 0, 0, 786, 340,0.000000 },
- {1893,1893, 0, 0, 40000, 140,0.000000 },
- {1894,1894, 0, 0, 86, 86,0.000000 },
- {1895,1895, 0, 0, 80, 40,0.000000 },
- {1896,1896, 0, 0, 40000, 86,0.000000 },
- {1897,1897, 0, 0, 173, 173,0.000000 },
- {1898,1898, 0, 0, 886, 886,0.000000 },
- {1899,1899, 0, 0, 466, 466,0.000000 },
- {1900,1900, 0, 0, 40000, 106,0.000000 },
- {1901,1901, 0, 0, 40000, 66,0.000000 },
- {1902,1902, 0, 0, 40000, 13,0.000000 },
- {1903,1903, 0, 0, 60, 60,0.000000 },
- {1904,1904, 0, 0, 1226, 1226,0.000000 },
- {1905,1905, 0, 0, 280, 280,0.000000 },
- {1906,1906, 0, 0, 40000, 153,0.000000 },
- {1907,1907, 0, 0, 40000, 173,0.000000 },
- {1908,1908, 0, 0, 40000, 340,0.000000 },
- {1909,1909, 0, 0, 166, 166,0.000000 },
- { 501, 501, 0, 0, 86, 86,0.000000 },
- {1910,1910, 0, 0, 40000, 20,0.000000 },
- {1911,1911, 0, 0, 20, 20,0.000000 },
- {1912,1912, 0, 0, 600, 600,0.000000 },
- {1913,1913, 0, 0, 40000, 2393,0.000000 },
- {1914,1914, 0, 0, 166, 166,0.000000 },
- { 511, 511, 0, 0, 586, 586,0.000000 },
- {1915,1915, 0, 0, 73, 73,0.000000 },
- {1910,1910, 60, 0, 40000, 26,0.000000 },
- { 511, 511, 72, 0, 493, 493,0.000000 },
- {1915,1915, 84, 0, 60, 60,0.000000 },
- {1916,1916, 0, 0, 2080, 2080,0.000000 },
- {1917,1917, 0, 0, 593, 593,0.000000 },
- {1918,1918, 0, 0, 600, 600,0.000000 },
- {1919,1919, 0, 0, 940, 940,0.000000 },
- {1920,1920, 0, 0, 940, 940,0.000000 },
- {1921,1921, 0, 0, 940, 940,0.000000 },
- {1922,1922, 0, 0, 853, 853,0.000000 },
- {1923,1923, 0, 0, 893, 893,0.000000 },
- {1924,1924, 0, 0, 40000, 73,0.000000 },
- {1925,1925, 0, 0, 40000, 33,0.000000 },
- {1926,1926, 0, 0, 40000, 20,0.000000 },
- {1927,1927, 0, 0, 40000, 0,0.000000 },
- {1928,1928, 0, 0, 40000, 193,0.000000 },
- {1929,1929, 0, 0, 40000, 133,0.000000 },
- {1930,1930, 0, 0, 40000, 153,0.000000 },
- {1931,1931, 0, 0, 1146, 1146,0.000000 },
- {1932,1932, 0, 0, 960, 960,0.000000 },
- {1933,1933, 0, 0, 2406, 2406,0.000000 },
- {1934,1934, 0, 0, 2406, 2406,0.000000 },
- {1935,1935, 0, 0, 40000, 0,0.000000 },
- {1936,1936, 0, 0, 40000, 6,0.000000 },
- {1937,1937, 0, 0, 40000, 0,0.000000 },
- {1938,1938, 0, 0, 40000, 0,0.000000 },
- {1939,1939, 0, 0, 40000, 26,0.000000 },
- {1940,1940, 0, 0, 1426, 1426,0.000000 },
- {1941,1941, 0, 0, 40000, 766,0.000000 },
- {1942,1942, 0, 0, 40000, 453,0.000000 },
- {1943,1943, 0, 0, 40000, 486,0.000000 },
- {1944,1944, 0, 0, 40000, 106,0.000000 },
- {1945,1945, 0, 0, 2273, 2273,0.000000 },
- {1946,1946, 0, 0, 40000, 33,0.000000 },
- {1947,1947, 0, 0, 1226, 1226,0.000000 },
- {1948,1948, 0, 0, 40000, 6,0.000000 },
- {1949,1949, 0, 0, 40000, 1966,0.000000 },
- {1950,1950, 0, 0, 1153, 1153,0.000000 },
- {1951,1951, 0, 0, 40000, 6,0.000000 },
- {1952,1952, 0, 0, 1473, 1473,0.000000 },
- {1953,1953, 0, 0, 40000, 20,0.000000 },
- {1954,1954, 0, 0, 466, 33,0.000000 },
- {1955,1955, 0, 0, 833, 833,0.000000 },
- {1956,1956, 0, 0, 40000, 0,0.000000 },
- {1957,1957, 0, 0, 40000, 33,0.000000 },
- {1958,1958, 0, 0, 40000, 126,0.000000 },
- {1959,1959, 0, 0, 40000, 33,0.000000 },
- {1960,1960, 0, 0, 280, 280,0.000000 },
- {1961,1961, 0, 0, 40000, 266,0.000000 },
- {1962,1962, 0, 0, 40000, 46,0.000000 },
- {1963,1963, 0, 0, 40000, 266,0.000000 },
- {1964,1964, 0, 0, 40000, 0,0.000000 },
- {1965,1965, 0, 0, 40000, 113,0.000000 },
- {1966,1966, 0, 0, 800, 800,0.000000 },
- {1967,1967, 0, 0, 1206, 1206,0.000000 },
- {1968,1968, 0, 0, 1080, 1080,0.000000 },
- {1969,1969, 0, 0, 40000, 13,0.000000 },
- {1970,1970, 0, 0, 546, 546,0.000000 },
- {1971,1971, 0, 0, 40000, 6,0.000000 },
- {1972,1972, 0, 0, 40000, 20,0.000000 },
- {1973,1973, 0, 0, 1233, 20,0.000000 },
- {1974,1974, 0, 0, 40000, 0,0.000000 },
- {1975,1975, 0, 0, 40000, 0,0.000000 },
- {1976,1976, 0, 0, 466, 6,0.000000 },
- {1977,1977, 0, 0, 206, 206,0.000000 },
- {1978,1978, 0, 0, 40000, 6,0.000000 },
- {1979,1979, 0, 0, 40000, 6,0.000000 },
- {1980,1980, 0, 0, 40000, 6,0.000000 },
- {1981,1981, 0, 0, 40000, 6,0.000000 },
- {1982,1982, 0, 0, 40000, 0,0.000000 },
- {1983,1983, 0, 0, 40000, 0,0.000000 },
- {1984,1984, 0, 0, 40000, 0,0.000000 },
- {1985,1985, 0, 0, 40000, 180,0.000000 },
- {1986,1986, 0, 0, 40000, 53,0.000000 },
- {1987,1987, 0, 0, 40000, 53,0.000000 },
- {1988,1988, 0, 0, 40000, 6,0.000000 },
- {1989,1989, 0, 0, 40000, 6,0.000000 },
- {1990,1990, 0, 0, 100, 100,0.000000 },
- {1991,1991, 0, 0, 40000, 73,0.000000 },
- {1992,1992, 0, 0, 60, 60,0.000000 },
- {1993,1993, 0, 0, 40000, 0,0.000000 },
- {1994,1994, 0, 0, 40000, 0,0.000000 },
- {1995,1995, 0, 0, 40000, 0,0.000000 },
- {1996,1996, 0, 0, 40000, 6,0.000000 },
- {1997,1997, 0, 0, 40000, 0,0.000000 },
- {1998,1998, 0, 0, 40000, 0,0.000000 },
- {1999,1999, 0, 0, 40000, 0,0.000000 },
- {2000,2000, 0, 0, 40000, 233,0.000000 },
- {2001,2001, 0, 0, 40000, 233,0.000000 },
- {2002,2002, 0, 0, 620, 620,0.000000 },
- {2003,2003, 0, 0, 1740, 1740,0.000000 },
- {2004,2004, 0, 0, 1153, 1153,0.000000 },
- {2005,2005, 0, 0, 920, 920,0.000000 },
- {2006,2006, 0, 0, 153, 153,0.000000 },
- {2007,2007, 0, 0, 526, 526,0.000000 },
- {2008,2008, 0, 0, 40000, 6,0.000000 },
- {2009,2009, 0, 0, 40000, 40,0.000000 },
- {2010,2010, 0, 0, 40000, 53,0.000000 },
- {2011,2011, 0, 0, 40000, 160,0.000000 },
- {2012,2012, 0, 0, 40000, 6,0.000000 },
- {2013,2013, 0, 0, 1046, 1046,0.000000 },
- {2014,2014, 0, 0, 513, 513,0.000000 },
- {2015,2015, 0, 0, 40, 40,0.000000 },
- {2016,2016, 0, 0, 40, 40,0.000000 },
- {2017,2017, 0, 0, 93, 93,0.000000 },
- {2018,2018, 0, 0, 66, 66,0.000000 },
- {2019,2019, 0, 0, 13, 13,0.000000 },
- {2020,2020, 0, 0, 300, 300,0.000000 },
- {2021,2021, 0, 0, 40, 40,0.000000 },
- {2022,2022, 0, 0, 586, 586,0.000000 },
- {2023,2023, 0, 0, 260, 260,0.000000 },
- {2024,2024, 0, 0, 2406, 2406,0.000000 },
- {2025,2025, 0, 0, 126, 126,0.000000 },
- {2026,2026, 0, 0, 1220, 1220,0.000000 },
- {2027,2027, 0, 0, 386, 386,0.000000 },
- { 352, 352, 51, 0, 40000, 0,0.000000 },
- {2028,2028, 35, 0, 106, 106,0.000000 },
- {2028,2028, 36, 0, 93, 93,0.000000 },
- {2029,2029, 47, 0, 13, 13,0.000000 },
- {2030,2030, 38, 0, 106, 106,0.000000 },
- {2019,2019, 39, 0, 20, 20,0.000000 },
- {2031,2031, 45, 0, 80, 80,0.000000 },
- { 492, 492, 41, 0, 26, 26,0.000000 },
- {2032,2032, 42, 0, 33, 33,0.000000 },
- {2033,2033, 44, 0, 160, 160,0.000000 },
- { 492, 492, 48, 0, 40, 40,0.000000 },
- {2034,2034, 46, 0, 600, 600,0.000000 },
- { 492, 492, 53, 0, 26, 26,0.000000 },
- { 167, 167, 56, 0, 160, 160,0.000000 },
- {2035,2035, 61, 0, 93, 93,0.000000 },
- {2036,2036, 56, 0, 353, 353,0.000000 },
- {2037,2037, 60, 0, 40, 40,0.000000 },
- { 144, 144, 59, 0, 40, 40,0.000000 },
- {2038,2038, 59, 0, 13, 13,0.000000 },
- { 169, 169, 51, 0, 40, 40,0.000000 },
- { 169, 169, 45, 0, 40, 40,0.000000 },
- {2039,2039, 72, 0, 126, 126,0.000000 },
- {2040,2040, 60, 0, 153, 153,0.000000 },
- {2041,2041, 58, 0, 40, 40,0.000000 },
- {2042,2042, 53, 0, 40, 40,0.000000 },
- {2043,2043, 73, 0, 26, 26,0.000000 },
- { 158, 158, 75, 0, 20, 20,0.000000 },
- {2044,2044, 0, 0, 1226, 1226,0.000000 },
- {2045,2045, 0, 0, 493, 493,0.000000 },
- {2046,2046, 0, 0, 620, 620,0.000000 },
- {2047,2047, 0, 0, 280, 280,0.000000 },
- {2048,2048, 0, 0, 260, 260,0.000000 },
- {2049,2049, 0, 0, 40000, 1093,0.000000 },
- {2050,2050, 0, 0, 40000, 233,0.000000 },
- {2051,2051, 0, 0, 120, 120,0.000000 },
- {2052,2052, 0, 0, 40000, 926,0.000000 },
- {2053,2053, 0, 0, 40000, 926,0.000000 },
- {2054,2054, 0, 0, 40000, 233,0.000000 },
- {2055,2055, 0, 0, 40000, 280,0.000000 },
- {2056,2056, 0, 0, 40000, 6,0.000000 },
- {2057,2057, 0, 0, 40000, 153,0.000000 },
- {2058,2058, 0, 0, 286, 286,0.000000 },
- {2059,2059, 0, 0, 286, 286,0.000000 },
- {2060,2060, 0, 0, 40000, 0,0.000000 },
- {2061,2061, 0, 0, 680, 680,0.000000 },
- {2062,2062, 0, 0, 280, 280,0.000000 },
- {2063,2063, 0, 0, 40000, 200,0.000000 },
- {2064,2064, 0, 0, 40, 40,0.000000 },
- {2065,2065, 0, 0, 1580, 1580,0.000000 },
- {2066,2066, 0, 0, 140, 133,0.000000 },
- {2067,2067, 0, 0, 40000, 213,0.000000 },
- {2068,2068, 0, 0, 613, 613,0.000000 },
- {2069,2069, 0, 0, 293, 293,0.000000 },
- {2070,2070, 0, 0, 160, 160,0.000000 },
- {2071,2071, 0, 0, 146, 13,0.000000 },
- {2072,2072, 0, 0, 40000, 6,0.000000 },
- {2073,2073, 0, 0, 40000, 133,0.000000 },
- {2074,2074, 0, 0, 40000, 140,0.000000 },
- {2075,2075, 0, 0, 40000, 66,0.000000 },
- {2076,2076, 0, 0, 40000, 40,0.000000 },
- {2077,2077, 0, 0, 40000, 153,0.000000 },
- {2078,2078, 0, 0, 593, 593,0.000000 },
- {2079,2079, 0, 0, 40000, 40,0.000000 },
- {2080,2080, 0, 0, 4480, 4480,0.000000 },
- {2081,2081, 0, 0, 3600, 313,0.000000 },
- {2082,2082, 0, 0, 40000, 413,0.000000 },
- {2083,2083, 0, 0, 40000, 566,0.000000 },
- {2084,2084, 0, 0, 8420, 80,0.000000 },
- {2085,2085, 0, 0, 40000, 926,0.000000 },
- {2086,2086, 0, 0, 40000, 853,0.000000 },
- {2087,2087, 0, 0, 40000, 853,0.000000 },
- {2088,2088, 0, 0, 40000, 853,0.000000 },
- {2089,2089, 0, 0, 40000, 873,0.000000 },
- {2090,2090, 0, 0, 40000, 1780,0.000000 },
- {2091,2091, 0, 0, 40000, 1673,0.000000 },
- {2092,2092, 0, 0, 4026, 4026,0.000000 },
- {2093,2093, 0, 0, 1773, 153,0.000000 },
- {2094,2094, 0, 0, 1446, 1446,0.000000 },
- {2095,2095, 0, 0, 633, 633,0.000000 },
- {2096,2096, 0, 0, 333, 333,0.000000 },
- {2097,2097, 0, 0, 193, 193,0.000000 },
- {2098,2098, 0, 0, 86, 86,0.000000 },
- {2099,2099, 0, 0, 246, 246,0.000000 },
- {2100,2100, 0, 0, 40000, 6,0.000000 },
- {2101,2101, 0, 0, 40000, 6,0.000000 },
- {2102,2102, 0, 0, 313, 313,0.000000 },
- {2103,2103, 0, 0, 160, 160,0.000000 },
- {2104,2104, 0, 0, 46, 46,0.000000 },
- {2105,2105, 0, 0, 100, 100,0.000000 },
- {2106,2106, 0, 0, 2313, 2313,0.000000 },
- {2107,2107, 0, 0, 306, 306,0.000000 },
- {2108,2108, 0, 0, 40000, 2180,0.000000 },
- {2109,2109, 0, 0, 40000, 133,0.000000 },
- {2110,2110, 0, 0, 40000, 126,0.000000 },
- {2111,2111, 0, 0, 40000, 146,0.000000 },
- { 752, 752, 60, 0, 40, 40,0.000000 },
- { 755, 755, 12, 0, 160, 160,0.000000 },
- {2112,2112, 89, 0, 13, 13,0.000000 },
- {2113,2113, 89, 0, 206, 206,0.000000 },
- { 755, 755, 14, 0, 160, 160,0.000000 },
- { 755, 755, 16, 0, 160, 160,0.000000 },
- {2114,2114, 84, 0, 513, 513,0.000000 },
- { 755, 755, 19, 0, 160, 160,0.000000 },
- {2115,2115, 38, 0, 60, 60,0.000000 },
- {2116,2116, 36, 0, 20, 20,0.000000 },
- { 755, 755, 28, 0, 193, 193,0.000000 },
- { 755, 755, 26, 0, 200, 200,0.000000 },
- { 755, 755, 35, 0, 200, 200,0.000000 },
- { 755, 755, 30, 0, 193, 193,0.000000 },
- {2117,2117, 60, 0, 73, 73,0.000000 },
- {2104,2104, 60, 0, 40, 40,0.000000 },
- {2104,2104, 55, 0, 46, 46,0.000000 },
- { 730, 730, 94, 0, 626, 626,0.000000 },
- {2118,2118, 0, 0, 280, 280,0.000000 },
- {2119,2119, 0, 0, 1446, 1446,0.000000 },
- {2120,2120, 0, 0, 40000, 53,0.000000 },
- {2121,2121, 0, 0, 40000, 20,0.000000 },
- {2122,2122, 0, 0, 40000, 20,0.000000 },
- {2123,2123, 0, 0, 3106, 3106,0.000000 },
- {2124,2124, 0, 0, 40, 66,0.000000 },
- {2125,2125, 0, 0, 40000, 106,0.000000 },
- {2126,2126, 0, 0, 40000, 6,0.000000 },
- {2127,2127, 0, 0, 40000, 13,0.000000 },
- {2128,2128, 0, 0, 40000, 6,0.000000 },
- {2129,2129, 0, 0, 40000, 6,0.000000 },
- {2130,2130, 0, 0, 40000, 6,0.000000 },
- {2131,2131, 0, 0, 40000, 13,0.000000 },
- {2132,2132, 0, 0, 40000, 6,0.000000 },
- {2133,2133, 0, 0, 2060, 13,0.000000 },
- {2134,2134, 0, 0, 40000, 53,0.000000 },
- {2135,2135, 0, 0, 2886, 2886,0.000000 },
- {2136,2136, 0, 0, 40000, 126,0.000000 },
- {2137,2137, 0, 0, 5280, 100,0.000000 },
- {2138,2138, 0, 0, 140, 140,0.000000 },
- {2139,2139, 0, 0, 4553, 20,0.000000 },
- {2140,2140, 0, 0, 513, 513,0.000000 },
- {2141,2141, 60, 0, 40, 40,0.000000 },
- {2141,2141, 44, 0, 40, 40,0.000000 },
- {2142,2142, 47, 0, 40, 40,0.000000 },
- {2143,2143, 47, 0, 60, 60,0.000000 },
- {2144,2144, 62, 0, 606, 606,0.000000 },
- {2145,2145, 93, 0, 226, 226,0.000000 },
- {2146,2146, 50, 0, 80, 80,0.000000 },
- {2145,2145, 40, 0, 420, 420,0.000000 },
- {2147,2147, 60, 0, 20, 20,0.000000 },
- { 898, 898, 60, 0, 46, 46,0.000000 },
- {2147,2147, 57, 0, 20, 20,0.000000 },
- { 900, 900, 42, 0, 193, 193,0.000000 },
- { 900, 900, 38, 0, 193, 193,0.000000 },
- { 908, 908, 88, 0, 33, 33,0.000000 },
- {2148,2148, 0, 0, 1553, 1553,0.000000 },
- {2149,2149, 0, 0, 40000, 6,0.000000 },
- {2150,2150, 0, 0, 993, 993,0.000000 },
- {2151,2151, 0, 0, 40000, 26,0.000000 },
- {2152,2152, 0, 0, 29720, 80,0.000000 },
- {2153,2153, 0, 0, 40000, 306,0.000000 },
- {2154,2154, 0, 0, 700, 700,0.000000 },
- {2155,2155, 0, 0, 880, 880,0.000000 },
- {2156,2156, 0, 0, 40000, 6,0.000000 },
- {2157,2157, 0, 0, 1046, 1046,0.000000 },
- {2158,2158, 0, 0, 100, 100,0.000000 },
- {2159,2159, 0, 0, 40, 40,0.000000 },
- { 136, 136, 0, 0, 640, 640,0.000000 },
- { 168, 168, 0, 0, 40, 40,0.000000 },
- { 164, 164, 0, 0, 1220, 1220,0.000000 },
- { 167, 167, 0, 0, 160, 160,0.000000 },
- {2160,2160, 65, 0, 40, 40,0.000000 },
- {2161,2161, 21, 0, 200, 200,0.000000 },
- {2162, 173, 0, 0, 1513, 1513,0.000000 },
- {2163,2164, 0, 0, 653, 653,0.000000 },
- {2165,2166, 0, 0, 633, 633,0.000000 },
- {2167,2168, 0, 0, 913, 913,0.000000 },
- {2169,2170, 0, 0, 300, 300,0.000000 },
- {2171,2172, 0, 0, 1773, 1773,0.000000 },
- {2173,2174, 0, 0, 40000, 306,0.000000 },
- {2175,2174, 0, 0, 40000, 433,0.000000 },
- {2176, 299, 0, 0, 40000, 66,0.000000 },
- {2177,2178, 0, 0, 40000, 246,0.000000 },
- {2179,2180, 0, 0, 40000, 300,0.000000 },
- {2181,2182, 0, 0, 40000, 233,0.000000 },
- {2183,2184, 0, 0, 1740, 1740,0.000000 },
- { 127, 127, 65, 0, 66, 66,0.000000 },
- { 127, 127, 72, 0, 46, 46,0.000000 },
- { 364, 365, 52, 0, 20, 20,0.000000 },
- {2185,2186, 60, 0, 80, 80,0.000000 },
- {1550,1551, 47, 0, 100, 100,0.000000 },
- {1556,1557, 76, 0, 253, 253,0.000000 },
- { 374, 375, 84, 0, 40000, 0,0.000000 },
- {1564,1565, 83, 0, 73, 73,0.000000 },
- {1568,1569, 24, 0, 40, 40,0.000000 },
- {1556,1557, 77, 0, 253, 253,0.000000 },
- {1572,1573, 60, 0, 80, 80,0.000000 },
- {1574,1575, 65, 0, 46, 46,0.000000 },
- { 391, 392, 44, 0, 80, 80,0.000000 },
- { 391, 393, 40, 0, 40, 40,0.000000 },
- {1606,1607, 72, 0, 33, 33,0.000000 },
- { 398, 399, 73, 0, 400, 400,0.000000 },
- {1608,1609, 70, 0, 353, 353,0.000000 },
- {2187,2187, 0, 0, 40000, 140,0.000000 },
- {2188,2188, 0, 0, 40000, 153,0.000000 },
- {2189,2189, 0, 0, 453, 453,0.000000 },
- {2190,2190, 0, 0, 1300, 1300,0.000000 },
- {2191,2191, 0, 0, 46, 46,0.000000 },
- {2192,2192, 0, 0, 40000, 186,0.000000 },
- {2193,2193, 0, 0, 80, 80,0.000000 },
- {2194,2194, 0, 0, 40000, 6,0.000000 },
- {2195,2195, 0, 0, 186, 186,0.000000 },
- {2196,2196, 0, 0, 40000, 0,0.000000 },
- {2197,2197, 0, 0, 40000, 0,0.000000 },
- {2198,2198, 0, 0, 166, 0,0.000000 },
- {2199,2199, 0, 0, 40, 40,0.000000 },
- {2200,2200, 0, 0, 1740, 1740,0.000000 },
- { 528, 528, 0, 0, 140, 140,0.000000 },
- {2201,2201, 0, 0, 40000, 53,0.000000 },
- {2202,2202, 0, 0, 40, 40,0.000000 },
- {2203,2203, 0, 0, 80, 80,0.000000 },
- {2204,2204, 41, 0, 46, 46,0.000000 },
- {2205,2205, 84, 0, 40, 40,0.000000 },
- {2206,2206, 72, 0, 133, 133,0.000000 },
- { 741, 741, 48, 0, 133, 133,0.000000 },
- {2207,2207, 0, 0, 40, 40,0.000000 },
- {2208,2208, 0, 0, 940, 940,0.000000 },
- {2209,2209, 0, 0, 40000, 213,0.000000 },
- {2210,2210, 0, 0, 866, 866,0.000000 },
- {2211,2211, 0, 0, 40000, 0,0.000000 },
- {2212,2212, 0, 0, 40000, 6,0.000000 },
- {2213,2213, 0, 0, 1080, 1080,0.000000 },
- {2214,2214, 0, 0, 40000, 0,0.000000 },
- {2215,2215, 0, 0, 40000, 73,0.000000 },
- {2216,2216, 0, 0, 40000, 26,0.000000 },
- {2217,2217, 0, 0, 2360, 13,0.000000 },
- {2218,2218, 0, 0, 40000, 0,0.000000 },
- {2219,2219, 0, 0, 3126, 13,0.000000 },
- {2220,2220, 0, 0, 40000, 140,0.000000 },
- {2221,2221, 0, 0, 40000, 26,0.000000 },
- {2222,2222, 0, 0, 40000, 140,0.000000 },
- {2223,2223, 0, 0, 40000, 0,0.000000 },
- {2224,2224, 0, 0, 126, 0,0.000000 },
- {2225,2225, 0, 0, 40000, 6,0.000000 },
- {2226,2226, 0, 0, 40000, 33,0.000000 },
- {2227,2227, 0, 0, 40000, 6,0.000000 },
- {2228,2228, 0, 0, 40000, 6,0.000000 },
- {2229,2229, 0, 0, 40000, 0,0.000000 },
- {2230,2230, 0, 0, 40000, 6,0.000000 },
- {2231,2231, 0, 0, 40000, 20,0.000000 },
- {2232,2232, 0, 0, 40000, 6,0.000000 },
- {2233,2233, 0, 0, 40000, 26,0.000000 },
- {2234,2234, 0, 0, 40000, 266,0.000000 },
- {2235,2235, 0, 0, 40000, 40,0.000000 },
- {2236,2236, 0, 0, 3500, 3500,0.000000 },
- {2237,2237, 0, 0, 860, 20,0.000000 },
- {2238,2238, 0, 0, 513, 513,0.000000 },
- {2239,2239, 0, 0, 973, 973,0.000000 },
- {2240,2240, 0, 0, 1446, 1446,0.000000 },
- {2241,2241, 0, 0, 2280, 2280,0.000000 },
- {2242,2242, 0, 0, 1713, 1713,0.000000 },
- {2243,2243, 0, 0, 200, 200,0.000000 },
- {2244,2244, 0, 0, 40000, 6,0.000000 },
- {2245,2245, 0, 0, 40000, 0,0.000000 },
- {2246,2246, 0, 0, 140, 140,0.000000 },
- {2247,2247, 60, 0, 46, 46,0.000000 },
- {2248,2248, 60, 0, 306, 306,0.000000 },
- {2249,2249, 48, 0, 300, 300,0.000000 },
- {2250,2250, 60, 0, 360, 360,0.000000 },
- {2251,2251, 60, 0, 306, 306,0.000000 },
- {2252,2252, 66, 0, 93, 93,0.000000 },
- {2253,2253, 60, 0, 313, 313,0.000000 },
- {2249,2249, 64, 0, 300, 300,0.000000 },
- {2254,2254, 60, 0, 40, 40,0.000000 },
- {2255,2255, 60, 0, 26, 26,0.000000 },
- {2256,2256, 56, 0, 106, 106,0.000000 },
- {2257,2257, 53, 0, 313, 313,0.000000 },
- {2258,2258, 60, 0, 60, 60,0.000000 },
- {2259,2259, 48, 0, 180, 180,0.000000 },
- {2260,2260, 67, 0, 80, 80,0.000000 },
- {2261,2261, 60, 0, 320, 320,0.000000 },
- {2261,2261, 72, 0, 246, 246,0.000000 },
- {2262,2262, 60, 0, 40, 40,0.000000 },
- {2263,2263, 0, 0, 593, 593,0.000000 },
- {2264,2264, 24, 0, 13, 13,0.000000 },
- {2265,2265, 36, 0, 26, 26,0.000000 },
- { 343, 343, 36, 0, 26, 26,0.000000 },
- { 347, 347, 0, 0, 66, 66,0.000000 },
- { 347, 347, 12, 0, 53, 53,0.000000 },
- {2266,2266, 12, 0, 60, 60,0.000000 },
- {2267,2267, 24, 0, 20, 20,0.000000 },
- {2267,2267, 36, 0, 13, 13,0.000000 },
- {2268,2268, 0, 0, 66, 66,0.000000 },
- {2266,2266, 24, 0, 20, 20,0.000000 },
- {2269,2269, 88, 0, 920, 920,0.000000 },
- {2270,2270, 88, 0, 486, 486,0.000000 },
- {2271,2271, 13, 0, 100, 100,0.000000 },
- { 351, 351, 0, 0, 73, 73,0.000000 },
- {2271,2271, 15, 0, 113, 113,0.000000 },
- {2272,2272, 0, 0, 1226, 1226,0.000000 },
- {2273,2273, 0, 0, 2193, 2193,0.000000 },
- {2274,2274, 0, 0, 866, 866,0.000000 },
- {2275,2275, 0, 0, 886, 886,0.000000 },
- {2276,2276, 0, 0, 1900, 1900,0.000000 },
- {2277,2277, 0, 0, 266, 266,0.000000 },
- {2278,2278, 0, 0, 313, 313,0.000000 },
- {2279,2279, 0, 0, 40000, 1833,0.000000 },
- {2280,2280, 0, 0, 126, 126,0.000000 },
- {2281,2281, 0, 0, 4580, 4580,0.000000 },
- {2282,2282, 0, 0, 253, 253,0.000000 },
- {2283,2283, 0, 0, 120, 120,0.000000 },
- {2284,2284, 0, 0, 40000, 46,0.000000 },
- {2285,2285, 0, 0, 2320, 13,0.000000 },
- {2286,2286, 0, 0, 80, 60,0.000000 },
- {2287,2287, 0, 0, 400, 400,0.000000 },
- {2288,2288, 0, 0, 1953, 1953,0.000000 },
- {2289,2289, 0, 0, 1446, 1446,0.000000 },
- {2290,2290, 0, 0, 360, 360,0.000000 },
- {2291,2291, 0, 0, 40000, 6,0.000000 },
- {2292,2292, 0, 0, 40000, 6,0.000000 },
- {2293,2293, 0, 0, 2026, 2026,0.000000 },
- {2294,2294, 0, 0, 246, 13,0.000000 },
- {2295,2295, 0, 0, 233, 233,0.000000 },
- {2296,2296, 0, 0, 2600, 1333,0.000000 },
- {2297,2297, 79, 0, 20, 20,0.000000 },
- {2297,2297, 72, 0, 20, 20,0.000000 },
- {2298,2298, 72, 0, 13, 13,0.000000 },
- {2298,2298, 79, 0, 13, 13,0.000000 },
- { 554, 554, 60, 0, 160, 160,0.000000 },
- {2299,2299, 72, 0, 253, 253,0.000000 },
- {2300,2300, 84, 0, 106, 106,0.000000 },
- { 555, 555, 66, 0, 20, 20,0.000000 },
- {2301,2302, 35, 0, 20, 20,0.000000 },
- {2303,2304, 52, 0, 20, 20,0.000000 },
- {2305,1548, 48, 0, 66, 66,0.000000 },
- {1595,1595, 58, 0, 33, 33,0.000000 },
- {2305,1548, 60, 0, 73, 73,0.000000 },
- {2306,2307, 47, 0, 606, 606,0.000000 },
- {2306,2307, 43, 0, 313, 313,0.000000 },
- {2306,2307, 49, 0, 706, 706,0.000000 },
- {2306,2307, 51, 0, 840, 840,0.000000 },
- {2306,2307, 54, 0, 820, 820,0.000000 },
- {2306,2307, 57, 0, 780, 780,0.000000 },
- {2306,2307, 72, 0, 713, 713,0.000000 },
- {2306,2307, 60, 0, 786, 786,0.000000 },
- {2306,2307, 76, 0, 720, 720,0.000000 },
- {2306,2307, 84, 0, 720, 720,0.000000 },
- {2306,2307, 36, 0, 193, 193,0.000000 },
- {1560,2308, 65, 0, 113, 113,0.000000 },
- {2309,2310, 84, 0, 40000, 0,0.000000 },
- {1564,1564, 83, 0, 60, 60,0.000000 },
- { 380, 381, 84, 0, 40000, 0,0.000000 },
- {1568,1568, 24, 0, 40, 40,0.000000 },
- {2306,2307, 77, 0, 713, 713,0.000000 },
- {2311,2312, 60, 0, 86, 86,0.000000 },
- {2313,2314, 65, 0, 160, 160,0.000000 },
- {2315,2315, 59, 0, 13, 13,0.000000 },
- {2316,2316, 51, 0, 40, 40,0.000000 },
- {1612,1612, 45, 0, 46, 46,0.000000 },
- {2317,2317, 71, 0, 133, 133,0.000000 },
- {2318,2318, 60, 0, 153, 153,0.000000 },
- {2319,2319, 58, 0, 40, 40,0.000000 },
- {2320,2320, 53, 0, 40, 40,0.000000 },
- { 397, 397, 64, 0, 86, 86,0.000000 },
- {2321,2321, 71, 0, 13, 13,0.000000 },
- {2322,2322, 61, 0, 326, 326,0.000000 },
- {2323,2323, 61, 0, 640, 640,0.000000 },
- {2324, 392, 44, 0, 80, 80,0.000000 },
- {2324, 393, 40, 0, 40, 40,0.000000 },
- {1595,1595, 69, 0, 20, 20,0.000000 },
- {1595,1595, 68, 0, 20, 20,0.000000 },
- {1595,1595, 63, 0, 33, 33,0.000000 },
- {2325,2326, 74, 0, 200, 200,0.000000 },
- {2327,2328, 60, 0, 340, 340,0.000000 },
- {2329,2330, 80, 0, 113, 113,0.000000 },
- {2331,2332, 64, 0, 500, 500,0.000000 },
- { 397, 397, 72, 0, 73, 73,0.000000 },
- {2333,2334, 78, 0, 806, 806,0.000000 },
- {1608,1609, 82, 0, 353, 353,0.000000 },
- {2315,2315, 48, 0, 13, 13,0.000000 },
- {2316,2316, 53, 0, 40, 40,0.000000 },
- {2335,2335, 0, 0, 546, 546,0.000000 },
- {2336,2337, 0, 0, 546, 546,0.000000 },
- {2338,2339, 0, 0, 40000, 86,0.000000 },
- {2340,2340, 0, 0, 1580, 1580,0.000000 },
- {2341,2341, 0, 0, 1153, 1153,0.000000 },
- {2342,2342, 0, 0, 40000, 220,0.000000 },
- {2343,2343, 0, 0, 40000, 240,0.000000 },
- {2344,2345, 0, 0, 380, 380,0.000000 },
- {2346,2346, 0, 0, 40000, 6,0.000000 },
- {2347,2348, 0, 0, 40000, 20,0.000000 },
- {2349,2350, 0, 0, 40000, 6,0.000000 },
- {2351,2352, 0, 0, 40000, 6,0.000000 },
- {2353,2354, 0, 0, 40000, 20,0.000000 },
- {2355,2356, 0, 0, 40000, 213,0.000000 },
- {2357,2357, 14, 0, 26, 26,0.000000 },
- {2358,2358, 35, 0, 40, 40,0.000000 },
- {2357,2357, 19, 0, 26, 26,0.000000 },
- {2359,2359, 43, 0, 86, 86,0.000000 },
- {2360,2360, 41, 0, 60, 60,0.000000 },
- {2360,2360, 43, 0, 53, 53,0.000000 },
- {2360,2360, 45, 0, 60, 60,0.000000 },
- {2360,2360, 47, 0, 53, 53,0.000000 },
- {2361,2362, 0, 0, 1553, 1553,0.000000 },
- {2363,2363, 0, 0, 1213, 1213,0.000000 },
- {2364,2364, 0, 0, 2280, 2280,0.000000 },
- {2365,2365, 0, 0, 966, 966,0.000000 },
- {2366,2366, 0, 0, 500, 500,0.000000 },
- {2367,2367, 0, 0, 326, 326,0.000000 },
- {2368,2368, 0, 0, 1926, 1926,0.000000 },
- {2369,2369, 0, 0, 520, 520,0.000000 },
- {2370,2370, 0, 0, 993, 993,0.000000 },
- {2371,2371, 0, 0, 1740, 1740,0.000000 },
- {2372,2372, 0, 0, 2300, 80,0.000000 },
- {2373,2373, 0, 0, 513, 513,0.000000 },
- {2374,2374, 0, 0, 40, 40,0.000000 },
- {2375,2375, 0, 0, 1226, 1226,0.000000 },
- {2376,2376, 0, 0, 606, 606,0.000000 },
- {2377,2377, 0, 0, 40000, 6,0.000000 },
- {2378,2378, 0, 0, 993, 6,0.000000 },
- {2379,2379, 0, 0, 40000, 153,0.000000 },
- {2380,2380, 0, 0, 40000, 6,0.000000 },
- {2381,2381, 0, 0, 40000, 0,0.000000 },
- {2382,2382, 0, 0, 40000, 6,0.000000 },
- {2383,2383, 0, 0, 40000, 6,0.000000 },
- {2384,2384, 0, 0, 40000, 6,0.000000 },
- {2385,2385, 0, 0, 273, 273,0.000000 },
- {2386,2386, 0, 0, 1580, 1580,0.000000 },
- {2387,2387, 0, 0, 140, 140,0.000000 },
- { 402, 402, 0, 0, 146, 146,0.000000 },
- {2388,2388, 0, 0, 40000, 446,0.000000 },
- {2389,2389, 0, 0, 2006, 2006,0.000000 },
- {2390,2390, 0, 0, 353, 353,0.000000 },
- {2391,2391, 0, 0, 233, 233,0.000000 },
- {2392,2392, 0, 0, 226, 226,0.000000 },
- {2393,2393, 0, 0, 853, 853,0.000000 },
- {2394,2394, 0, 0, 100, 100,0.000000 },
- {2395,2395, 0, 0, 40000, 40,0.000000 },
- {2396,2397, 0, 0, 633, 20,0.000000 },
- {2398,2398, 0, 0, 40, 40,0.000000 },
- {2399,2400, 0, 0, 493, 493,0.000000 },
- {2401,2401, 0, 0, 40000, 86,0.000000 },
- {2402,2402, 0, 0, 40000, 0,0.000000 },
- {2403,2404, 0, 0, 40000, 66,0.000000 },
- {2405,2406, 0, 0, 186, 46,0.000000 },
- {2407,2408, 0, 0, 40000, 6,0.000000 },
- {2409,2409, 0, 0, 1153, 1153,0.000000 },
- {2410,2410, 0, 0, 40000, 0,0.000000 },
- {2411,2411, 0, 0, 86, 86,0.000000 },
- {2412,2413, 0, 0, 40000, 73,0.000000 },
- {2414,2414, 0, 0, 40000, 40,0.000000 },
- {2415,2416, 0, 0, 40000, 286,0.000000 },
- {2417,2418, 0, 0, 40000, 20,0.000000 },
- {2419,2420, 0, 0, 600, 600,0.000000 },
- {2421,2422, 0, 0, 253, 253,0.000000 },
- {2423,2424, 0, 0, 466, 466,0.000000 },
- {2425,2426, 0, 0, 40000, 6,0.000000 },
- {2427,2427, 33, 0, 53, 53,0.000000 },
- {2428,2429, 38, 0, 46, 46,0.000000 },
- {2430,2430, 38, 0, 13, 13,0.000000 },
- {2431,2431, 38, 0, 86, 86,0.000000 },
- {2432,2432, 40, 0, 6, 6,0.000000 },
- {2433,2434, 41, 0, 60, 60,0.000000 },
- {2435,2435, 0, 0, 20, 20,0.000000 },
- {2435,2435, 41, 0, 26, 26,0.000000 },
- {2360,2360, 48, 0, 53, 53,0.000000 },
- {2436,2436, 17, 0, 446, 446,0.000000 },
- {2360,2360, 50, 0, 46, 46,0.000000 },
- {2435,2435, 45, 0, 20, 20,0.000000 },
- {2437,2437,254, 0, 26, 26,0.000000 },
- {2438,2438, 60, 0, 80, 80,0.000000 },
- {2439,2439, 56, 0, 80, 80,0.000000 },
- {2440,2440, 60, 0, 40, 40,0.000000 },
- {2440,2440, 55, 0, 40, 40,0.000000 },
- {2441,2441, 63, 0, 86, 86,0.000000 },
- {2442,2442, 57, 0, 40, 40,0.000000 },
- {2443,2443, 0, 0, 40000, 106,0.000000 },
- {2444,2444, 0, 0, 246, 246,0.000000 },
- {2445,2445, 0, 0, 3133, 13,0.000000 },
- {2446,2446, 0, 0, 40000, 153,0.000000 },
- {2447,2447, 0, 0, 40000, 480,0.000000 },
- {2448,2448, 0, 0, 40000, 73,0.000000 },
- {2449,2449, 0, 0, 40000, 526,0.000000 },
- {2450,2450, 0, 0, 40000, 146,0.000000 },
- {2451,2451, 0, 0, 4520, 4520,0.000000 },
- {2452,2452, 0, 0, 280, 280,0.000000 },
- { 752, 752, 55, 0, 46, 46,0.000000 },
- {2453,2453, 0, 0, 646, 646,0.000000 },
- {2454,2454, 0, 0, 600, 600,0.000000 },
- {2455,2455, 0, 0, 86, 86,0.000000 },
- {2456,2456, 0, 0, 386, 386,0.000000 },
- {2457,2457, 0, 0, 40000, 0,0.000000 },
- {2458,2458, 0, 0, 1340, 1340,0.000000 },
- {2459,2459, 0, 0, 786, 786,0.000000 },
- {2460,2460, 0, 0, 680, 680,0.000000 },
- {2461,2461, 0, 0, 2113, 2113,0.000000 },
- {2462,2462, 0, 0, 3193, 13,0.000000 },
- {2463,2463, 0, 0, 726, 726,0.000000 },
- { 884, 884, 0, 0, 46, 46,0.000000 },
- { 884, 884, 28, 0, 100, 100,0.000000 },
- {2464,2464, 29, 0, 66, 66,0.000000 },
- { 886, 886, 31, 0, 20, 20,0.000000 },
- { 360, 360, 32, 0, 46, 46,0.000000 },
- { 361, 361, 33, 0, 100, 100,0.000000 },
- {2453,2453, 34, 0, 760, 760,0.000000 },
- { 888, 888, 29, 0, 46, 46,0.000000 },
- { 886, 886, 55, 0, 13, 13,0.000000 },
- { 890, 890, 48, 0, 73, 73,0.000000 },
- { 884, 884, 58, 0, 40, 40,0.000000 },
- {2465,2465, 45, 0, 46, 46,0.000000 },
- {2465,2465, 43, 0, 46, 46,0.000000 },
- {2466,2466, 73, 0, 520, 520,0.000000 },
- {2467,2467, 72, 0, 266, 266,0.000000 },
- {2468,2468, 76, 0, 160, 160,0.000000 },
- {2467,2467, 84, 0, 273, 273,0.000000 },
- {2468,2468, 36, 0, 166, 166,0.000000 },
- {2469,2469, 65, 0, 86, 86,0.000000 },
- {2470,2470, 83, 0, 73, 73,0.000000 },
- {2471,2471, 50, 0, 300, 300,0.000000 },
- {2468,2468, 77, 0, 133, 133,0.000000 },
- { 897, 897, 55, 0, 33, 33,0.000000 },
- {2472,2472, 60, 0, 46, 46,0.000000 },
- { 897, 897, 50, 0, 33, 33,0.000000 },
- {2473,2473, 42, 0, 206, 206,0.000000 },
- {2473,2473, 46, 0, 166, 166,0.000000 },
- {2474,2474, 71, 0, 133, 133,0.000000 },
- {2474,2474, 60, 0, 160, 160,0.000000 },
- {2455,2455, 58, 0, 66, 66,0.000000 },
- {2455,2455, 53, 0, 86, 86,0.000000 },
- {2475,2475, 91, 0, 40, 40,0.000000 },
- {2476,2476, 61, 0, 140, 140,0.000000 },
- {2477,2477, 61, 0, 786, 786,0.000000 },
- {2478,2478, 44, 0, 33, 33,0.000000 },
- {2479,2479, 40, 0, 840, 840,0.000000 },
- {2480,2480, 69, 0, 40, 40,0.000000 },
- { 361, 361, 68, 0, 40, 40,0.000000 },
- { 361, 361, 63, 0, 60, 60,0.000000 },
- {2481,2481, 74, 0, 73, 73,0.000000 },
- {2482,2482, 60, 0, 73, 73,0.000000 },
- { 908, 908, 80, 0, 33, 33,0.000000 },
- {2483,2483, 64, 0, 306, 306,0.000000 },
- {2483,2483, 73, 0, 260, 260,0.000000 },
- {2483,2483, 70, 0, 260, 260,0.000000 },
- { 886, 886, 68, 0, 6, 6,0.000000 },
- { 886, 886, 48, 0, 13, 13,0.000000 },
- {2484,2484, 0, 0, 440, 440,0.000000 },
- {2485,2485, 0, 0, 253, 253,0.000000 },
- {2486,2486, 0, 0, 306, 306,0.000000 },
- {2487,2487, 0, 0, 1213, 1213,0.000000 },
- {2488,2488, 0, 0, 626, 626,0.000000 },
- {2489,2489, 0, 0, 40000, 206,0.000000 },
- {2490,2490, 0, 0, 40000, 100,0.000000 },
- {2491,2491, 0, 0, 40000, 13,0.000000 },
- {2492,2492, 0, 0, 2273, 2273,0.000000 },
- {2493,2493, 0, 0, 1740, 1740,0.000000 },
- {2494,2494, 0, 0, 1953, 1953,0.000000 },
- {2495,2495, 0, 0, 1740, 1740,0.000000 },
- {2496,2496, 0, 0, 386, 386,0.000000 },
- {2497,2497, 0, 0, 233, 233,0.000000 },
- {2498,2498, 0, 0, 40000, 106,0.000000 },
- {2499,2499, 0, 0, 40000, 13,0.000000 },
- {2500,2500, 0, 0, 40000, 0,0.000000 },
- {2501,2501, 0, 0, 40000, 186,0.000000 },
- {2502,2502, 0, 0, 66, 66,0.000000 },
- {2503,2503, 0, 0, 46, 46,0.000000 },
- {2504,2504, 0, 0, 40000, 186,0.000000 },
- {2505,2505, 0, 0, 1106, 1106,0.000000 },
- {2506,2506, 0, 0, 40000, 186,0.000000 },
- {2507,2507, 0, 0, 40000, 100,0.000000 },
- {2508,2508, 0, 0, 40000, 206,0.000000 },
- {2509,2509, 0, 0, 40000, 60,0.000000 },
- {2510,2510, 0, 0, 40000, 106,0.000000 },
- {2511,2511, 0, 0, 60, 60,0.000000 },
- {2512,2512, 0, 0, 40, 40,0.000000 },
- {2513,2513, 0, 0, 1833, 26,0.000000 },
- {2514,2514, 0, 0, 806, 806,0.000000 },
- {2515,2515, 0, 0, 1106, 1106,0.000000 },
- {2516,2516, 0, 0, 40000, 6,0.000000 },
- {2517,2517, 0, 0, 40000, 180,0.000000 },
- {2518,2518, 0, 0, 40000, 340,0.000000 },
- {2519,2519, 0, 0, 1873, 6,0.000000 },
- {2520,2520, 0, 0, 2586, 2586,0.000000 },
- {2521,2521, 0, 0, 1740, 1740,0.000000 },
- {2522,2522, 0, 0, 3493, 13,0.000000 },
- {2523,2523, 0, 0, 40000, 266,0.000000 },
- {2524,2524, 0, 0, 6160, 33,0.000000 },
- {2525,2525, 0, 0, 40000, 46,0.000000 },
- {2526,2526, 0, 0, 1140, 1140,0.000000 },
- { 346, 346, 30, 0, 46, 46,0.000000 },
- { 346, 346, 31, 0, 33, 33,0.000000 },
- { 346, 346, 32, 0, 40, 40,0.000000 },
- { 346, 346, 33, 0, 46, 46,0.000000 },
- { 346, 346, 34, 0, 53, 53,0.000000 },
- { 346, 346, 35, 0, 33, 33,0.000000 },
- { 346, 346, 37, 0, 146, 146,0.000000 },
- { 346, 346, 39, 0, 186, 186,0.000000 },
- { 346, 346, 41, 0, 206, 206,0.000000 },
- { 346, 346, 43, 0, 133, 133,0.000000 },
- { 346, 346, 45, 0, 126, 126,0.000000 },
- { 346, 346, 47, 0, 153, 153,0.000000 },
- { 346, 346, 48, 0, 153, 153,0.000000 },
- { 346, 346, 49, 0, 153, 153,0.000000 },
- { 512, 512, 84, 0, 73, 73,0.000000 },
- {2206,2206, 84, 0, 140, 140,0.000000 },
- {2527,2527, 55, 0, 13, 13,0.000000 },
- {2528,2528, 36, 0, 20, 20,0.000000 },
- {2529,2529, 38, 0, 66, 66,0.000000 },
- {2530,2530, 60, 0, 86, 86,0.000000 },
- {2531,2531, 38, 0, 60, 60,0.000000 },
- {2532,2532, 17, 0, 2233, 2233,0.000000 },
- {2532,2532, 18, 0, 2266, 2266,0.000000 },
- {2532,2532, 19, 0, 2280, 2280,0.000000 },
- {2532,2532, 20, 0, 46, 46,0.000000 },
- {2532,2532, 21, 0, 46, 46,0.000000 },
- {2532,2532, 22, 0, 40, 40,0.000000 },
- {2532,2532, 23, 0, 53, 53,0.000000 },
- {2532,2532, 24, 0, 100, 100,0.000000 },
- {2532,2532, 25, 0, 46, 46,0.000000 },
- {2532,2532, 26, 0, 60, 60,0.000000 },
- {2532,2532, 27, 0, 40, 40,0.000000 },
- {2532,2532, 28, 0, 53, 53,0.000000 },
- {2532,2532, 29, 0, 126, 126,0.000000 },
- {2533,2533, 84, 0, 133, 133,0.000000 },
- {2534,2534, 48, 0, 86, 86,0.000000 },
- {2535,2535, 65, 0, 486, 486,0.000000 },
- {2536,2536, 65, 0, 526, 526,0.000000 },
- {2537,2537, 55, 0, 66, 66,0.000000 },
- {2537,2537, 41, 0, 60, 60,0.000000 },
- { 346, 346, 63, 0, 106, 106,0.000000 },
- { 346, 346, 55, 0, 106, 106,0.000000 },
- {2538,2538, 55, 0, 1200, 1200,0.000000 },
- {2538,2538, 53, 0, 1206, 1206,0.000000 },
- {2534,2534, 50, 0, 86, 86,0.000000 },
- { 506, 506, 84, 0, 133, 133,0.000000 },
- { 506, 506, 74, 0, 133, 133,0.000000 },
- { 504, 504, 84, 0, 473, 473,0.000000 },
- { 504, 504, 74, 0, 486, 486,0.000000 },
- {2539,2539, 84, 0, 133, 133,0.000000 },
- {2540,2540, 74, 0, 20, 20,0.000000 },
- {1911,1911, 48, 0, 46, 46,0.000000 },
- {1911,1911, 36, 0, 20, 20,0.000000 },
- {2541,2541, 74, 0, 133, 133,0.000000 },
- {2542,2542, 0, 0, 613, 613,0.000000 },
- {2543,2543, 0, 0, 40000, 480,0.000000 },
- {2544,2544, 0, 0, 1133, 1133,0.000000 },
- {2545,2545, 0, 0, 1200, 1200,0.000000 },
- {2546,2547, 0, 0, 1313, 1313,0.000000 },
- {2548,2549, 0, 0, 40000, 6,0.000000 },
- {2550,2550, 0, 0, 1740, 1740,0.000000 },
- {2551,2552, 0, 0, 860, 860,0.000000 },
- {2553,2553, 0, 0, 40000, 0,0.000000 },
- {2554,2554, 0, 0, 2300, 2300,0.000000 },
- {2555,2556, 0, 0, 40000, 0,0.000000 },
- {2557,2557, 0, 0, 506, 13,0.000000 },
- {2558,1467, 0, 0, 40000, 6,0.000000 },
- {2559,2560, 0, 0, 40000, 0,0.000000 },
- {2561,2561, 0, 0, 40000, 106,0.000000 },
- {2562,2562, 0, 0, 1013, 1013,0.000000 },
- {2563,2564, 0, 0, 1020, 1020,0.000000 },
- {2565,2565, 0, 0, 1746, 1746,0.000000 },
- {2566,2567, 0, 0, 1446, 1446,0.000000 },
- {2568,2568, 0, 0, 826, 826,0.000000 },
- {2569,2569, 0, 0, 2293, 2293,0.000000 },
- {2570,2570, 0, 0, 2386, 2386,0.000000 },
- {2571,2572, 0, 0, 40000, 46,0.000000 },
- {2573,2574, 0, 0, 40000, 26,0.000000 },
- {2575,2575, 0, 0, 40000, 126,0.000000 },
- { 229,2576, 0, 0, 1893, 13,0.000000 },
- {2577,2577, 0, 0, 1046, 1046,0.000000 },
- { 239,2578, 0, 0, 40000, 53,0.000000 },
- {2579,2579, 0, 0, 40000, 13,0.000000 },
- {2580,2580, 0, 0, 40000, 66,0.000000 },
- {2581,2582, 0, 0, 3466, 3466,0.000000 },
- {2583,2584, 0, 0, 233, 233,0.000000 },
- {2585,2586, 0, 0, 40000, 0,0.000000 },
- {2587,2588, 0, 0, 40000, 0,0.000000 },
- {2589,2589, 0, 0, 40000, 6,0.000000 },
- {2590,2590, 0, 0, 40000, 6,0.000000 },
- {2591,2592, 0, 0, 40000, 0,0.000000 },
- {2593,2594, 0, 0, 680, 0,0.000000 },
- {2595,2595, 0, 0, 40000, 0,0.000000 },
- {2596,2597, 0, 0, 40000, 6,0.000000 },
- {2598,2599, 0, 0, 40000, 0,0.000000 },
- {2600,2601, 0, 0, 40000, 13,0.000000 },
- {2602,2602, 0, 0, 5093, 5093,0.000000 },
- {2603,2603, 0, 0, 40000, 6,0.000000 },
- {2604,2604, 0, 0, 40000, 40,0.000000 },
- {2605,2606, 0, 0, 40000, 0,0.000000 },
- {2607,2607, 0, 0, 40000, 0,0.000000 },
- {2608,2609, 0, 0, 40000, 6,0.000000 },
- {2610,2610, 0, 0, 40000, 20,0.000000 },
- {2611,2611, 0, 0, 40000, 6,0.000000 },
- {2612,2612, 0, 0, 2253, 2253,0.000000 },
- {2613,2613, 0, 0, 973, 973,0.000000 },
- {2614,2615, 0, 0, 40000, 6,0.000000 },
- {2616,2617, 0, 0, 40000, 6,0.000000 },
- {2618,2619, 0, 0, 353, 353,0.000000 },
- {2620,2621, 0, 0, 40000, 500,0.000000 },
- {2622,2623, 0, 0, 40000, 26,0.000000 },
- {2624,2625, 0, 0, 40000, 53,0.000000 },
- {2626,2627, 0, 0, 4026, 13,0.000000 },
- {2628,2629, 0, 0, 3400, 13,0.000000 },
- {1516,2630, 0, 0, 226, 226,0.000000 },
- {2631,2632, 0, 0, 40000, 193,0.000000 },
- {2633,2633, 0, 0, 2380, 2380,0.000000 },
- {2634,2635, 0, 0, 40000, 373,0.000000 },
- {2636,2636, 0, 0, 40000, 133,0.000000 },
- {2637,2637, 0, 0, 280, 280,0.000000 },
- {2638,2639, 0, 0, 273, 273,0.000000 },
- {2640,2641, 0, 0, 3333, 3333,0.000000 },
- {2642,2642, 0, 0, 40000, 266,0.000000 },
- {2643,2644, 0, 0, 166, 166,0.000000 },
- {2645,2645, 0, 0, 40000, 6,0.000000 },
- {2646,2647, 0, 0, 40000, 0,0.000000 },
- {2648,2648, 0, 0, 586, 586,0.000000 },
- {2649,2649, 0, 0, 1660, 86,0.000000 },
- {2650,2651, 0, 0, 440, 440,0.000000 },
- {2652,2652, 0, 0, 40000, 113,0.000000 },
- {2653,2654, 0, 0, 40000, 6,0.000000 },
- {2655,2656, 0, 0, 1766, 1766,0.000000 },
- {2657,2657, 0, 0, 40000, 0,0.000000 },
- {2658,2658, 35, 0, 20, 20,0.000000 },
- {2659,2659, 35, 0, 26, 26,0.000000 },
- {2660,2660, 52, 0, 20, 20,0.000000 },
- {2661,2661, 60, 0, 80, 80,0.000000 },
- {2662,2662, 58, 0, 20, 20,0.000000 },
- {2663,2663, 60, 0, 113, 113,0.000000 },
- {2664,2664, 50, 0, 433, 433,0.000000 },
- {2665,2665, 43, 0, 40, 40,0.000000 },
- {2664,2664, 55, 0, 513, 513,0.000000 },
- {1553,1553, 43, 0, 26, 26,0.000000 },
- {2666,2666, 50, 0, 173, 173,0.000000 },
- {2667,2667, 43, 0, 173, 173,0.000000 },
- {2666,2666, 53, 0, 40, 40,0.000000 },
- {2666,2666, 57, 0, 186, 186,0.000000 },
- {2668,2668, 72, 0, 260, 260,0.000000 },
- {2666,2666, 60, 0, 220, 220,0.000000 },
- { 373, 373, 76, 0, 260, 260,0.000000 },
- {2669,2669, 84, 0, 213, 213,0.000000 },
- {2670,2670, 42, 0, 406, 406,0.000000 },
- {2671,2671, 65, 0, 86, 86,0.000000 },
- {2672,2672, 84, 0, 113, 113,0.000000 },
- {2673,2673, 84, 0, 426, 426,0.000000 },
- {2674,2674, 24, 0, 46, 46,0.000000 },
- { 383, 383, 77, 0, 246, 246,0.000000 },
- {2675,2675, 58, 0, 153, 153,0.000000 },
- {2676,2676, 53, 0, 153, 153,0.000000 },
- {2677,2677, 64, 0, 73, 73,0.000000 },
- {2678,2678, 71, 0, 26, 26,0.000000 },
- {2679,2679, 44, 0, 606, 606,0.000000 },
- {2680,2680, 40, 0, 366, 366,0.000000 },
- {2681,2681, 69, 0, 20, 20,0.000000 },
- {2682,2682, 60, 0, 360, 360,0.000000 },
- {2683,2683, 80, 0, 60, 60,0.000000 },
- {2684,2684, 64, 0, 873, 873,0.000000 },
- {2685,2685, 72, 0, 33, 33,0.000000 },
- {2686,2686, 70, 0, 273, 273,0.000000 },
- {2687,2687, 48, 0, 40, 40,0.000000 },
- {2688,2688, 53, 0, 213, 213,0.000000 },
- {2689,2690, 0, 0, 40000, 140,0.000000 },
- {2691,2692, 0, 0, 626, 626,0.000000 },
- {2693,2694, 0, 0, 40000, 0,0.000000 },
- {2695,2696, 0, 0, 2213, 2213,0.000000 },
- {2697,2698, 0, 0, 4140, 0,0.000000 },
- { 192,2699, 0, 0, 40000, 6,0.000000 },
- {2700,2701, 0, 0, 153, 153,0.000000 },
- {2702,2703, 0, 0, 253, 253,0.000000 },
- {2704,2705, 0, 0, 40000, 0,0.000000 },
- {2706,2707, 0, 0, 40000, 6,0.000000 },
- {2708,2709, 0, 0, 40000, 6,0.000000 },
- {2710,2711, 0, 0, 440, 440,0.000000 },
- {2712,1473, 0, 0, 213, 213,0.000000 },
- {2713,2714, 0, 0, 120, 120,0.000000 },
- {2715,2716, 0, 0, 140, 140,0.000000 },
- {1478,2717, 0, 0, 40000, 113,0.000000 },
- {2718,2719, 0, 0, 40000, 6,0.000000 },
- { 286,2720, 0, 0, 40000, 20,0.000000 },
- {2721,2722, 0, 0, 40000, 13,0.000000 },
- {2723,2724, 0, 0, 40000, 0,0.000000 },
- {2725,2726, 0, 0, 526, 526,0.000000 },
- {2727,2724, 0, 0, 40000, 0,0.000000 },
- {1514,2728, 0, 0, 40000, 53,0.000000 },
- {2729,2730, 0, 0, 186, 186,0.000000 },
- {2731,2732, 0, 0, 226, 226,0.000000 },
- {2733,2734, 0, 0, 266, 266,0.000000 },
- {2735,2736, 0, 0, 80, 80,0.000000 },
- {2737,2738, 0, 0, 40000, 0,0.000000 },
- {2739,2740, 0, 0, 260, 260,0.000000 },
- {2741,2742, 0, 0, 286, 286,0.000000 },
- {2743,2744, 0, 0, 193, 193,0.000000 },
- {2745,2746, 0, 0, 40000, 0,0.000000 },
- {2747,2747, 35, 0, 20, 20,0.000000 },
- {2748,2748, 60, 0, 153, 153,0.000000 },
- {2749,2749, 43, 0, 20, 20,0.000000 },
- {2750,2750, 0, 0, 626, 626,0.000000 },
- {2751,2752, 0, 0, 1553, 1553,0.000000 },
- {2753,2754, 0, 0, 1386, 1386,0.000000 },
- {2755,2756, 0, 0, 2026, 2026,0.000000 },
- {2757,2758, 0, 0, 1020, 1020,0.000000 },
- {2759,2760, 0, 0, 2486, 2486,0.000000 },
- {2761,2762, 0, 0, 2880, 2880,0.000000 },
- {2763,2764, 0, 0, 2346, 2346,0.000000 },
- {2765,2766, 0, 0, 40000, 0,0.000000 },
- {2767,2768, 0, 0, 40000, 100,0.000000 },
- {2769,2770, 0, 0, 40000, 13,0.000000 },
- {2771,2772, 0, 0, 40000, 6,0.000000 },
- {2773,2774, 0, 0, 40000, 0,0.000000 },
- {2775,2776, 0, 0, 40000, 13,0.000000 },
- {2777,2778, 0, 0, 40000, 0,0.000000 },
- {2779,2780, 0, 0, 40000, 6,0.000000 },
- {2781,2782, 0, 0, 40000, 6,0.000000 },
- {2783,2784, 0, 0, 913, 913,0.000000 },
- {2785,2786, 0, 0, 1653, 1653,0.000000 },
- {2787,2788, 0, 0, 40000, 153,0.000000 },
- {2789,2790, 0, 0, 1273, 1273,0.000000 },
- {2791,2792, 0, 0, 1166, 1166,0.000000 },
- {2793,2794, 0, 0, 386, 386,0.000000 },
- {2795,2796, 0, 0, 40000, 1993,0.000000 },
- {2795,2797, 0, 0, 2526, 1333,0.000000 },
- {2798,2799, 0, 0, 166, 6,0.000000 },
- {2800,2801, 0, 0, 13080, 213,0.000000 },
- {2802,2803, 0, 0, 40000, 6,0.000000 },
- {2804,2805, 0, 0, 40000, 6,0.000000 },
- {2806,2807, 0, 0, 493, 493,0.000000 },
- {2808,2809, 0, 0, 126, 6,0.000000 },
- {2810,2811, 0, 0, 80, 80,0.000000 },
- {2812,2813, 0, 0, 380, 380,0.000000 },
- {2814,2815, 0, 0, 2506, 2506,0.000000 },
- {2816,2817, 0, 0, 2186, 2186,0.000000 },
- {2818,2819, 0, 0, 2520, 2520,0.000000 },
- {2820,2821, 0, 0, 440, 440,0.000000 },
- {2822,2823, 0, 0, 106, 106,0.000000 },
- {2824,2825, 0, 0, 1933, 1933,0.000000 },
- {2826,2827, 0, 0, 40000, 6,0.000000 },
- {2828,2829, 0, 0, 1933, 1933,0.000000 },
- {2830,2831, 0, 0, 546, 546,0.000000 },
- {2832,2833, 0, 0, 973, 973,0.000000 },
- {2834,2835, 0, 0, 586, 26,0.000000 },
- {2836,2837, 0, 0, 786, 786,0.000000 },
- {2838,2839, 0, 0, 1920, 1920,0.000000 },
- {2840,2841, 0, 0, 333, 333,0.000000 },
- {2842,2843, 0, 0, 1120, 1120,0.000000 },
- {2844,2845, 0, 0, 40000, 153,0.000000 },
- {2846,2847, 0, 0, 40000, 153,0.000000 },
- {2848,2849, 0, 0, 40000, 153,0.000000 },
- {2850,2851, 0, 0, 40000, 213,0.000000 },
- {2852,2853, 0, 0, 40000, 240,0.000000 },
- {2854,2855, 0, 0, 40000, 93,0.000000 },
- {2856,2856, 0, 0, 333, 333,0.000000 },
- {2857,2857, 0, 0, 333, 333,0.000000 },
- {2858,2859, 0, 0, 866, 866,0.000000 },
- {2860,2861, 0, 0, 40000, 180,0.000000 },
- {2862,2863, 0, 0, 866, 866,0.000000 },
- {2864,2865, 0, 0, 40000, 6,0.000000 },
- {2866,2867, 0, 0, 946, 946,0.000000 },
- {2868,2869, 0, 0, 906, 906,0.000000 },
- {2870,2871, 0, 0, 846, 846,0.000000 },
- {2872,2873, 0, 0, 160, 160,0.000000 },
- {2874,2875, 0, 0, 586, 6,0.000000 },
- {2876,2877, 0, 0, 160, 160,0.000000 },
- {2878,2879, 0, 0, 760, 760,0.000000 },
- {2880,2881, 0, 0, 1193, 1193,0.000000 },
- {2882,2883, 0, 0, 493, 493,0.000000 },
- {2884,2885, 0, 0, 893, 893,0.000000 },
- {2886,2887, 0, 0, 40000, 0,0.000000 },
- {2888,2888, 0, 0, 4413, 4413,0.000000 },
- {2889,2889, 0, 0, 4193, 4193,0.000000 },
- {2890,2890, 0, 0, 3946, 3946,0.000000 },
- {2891,2892, 0, 0, 40000, 26,0.000000 },
- {2893,2893, 0, 0, 60, 60,0.000000 },
- {2894,2894, 0, 0, 40, 40,0.000000 },
- {2895,2895, 0, 0, 1773, 1773,0.000000 },
- {2896,2897, 0, 0, 40000, 6,0.000000 },
- {2898,2899, 0, 0, 1073, 6,0.000000 },
- {2353,2900, 0, 0, 4800, 4800,0.000000 },
- {2901,2901, 0, 0, 126, 126,0.000000 },
- {2902,2903, 0, 0, 40000, 20,0.000000 },
- {2904,2905, 0, 0, 40000, 20,0.000000 },
- {2906,2907, 0, 0, 40000, 6,0.000000 },
- {2908,2909, 0, 0, 4546, 4546,0.000000 },
- {2910,2911, 0, 0, 40000, 6,0.000000 },
- {2912,2912, 0, 0, 913, 913,0.000000 },
- {2913,2914, 0, 0, 486, 486,0.000000 },
- {2915,2916, 0, 0, 1740, 1740,0.000000 },
- {2917,2918, 0, 0, 1726, 1726,0.000000 },
- {2919,2920, 0, 0, 1740, 1740,0.000000 },
- {2921,2922, 0, 0, 1420, 1420,0.000000 },
- {2923,2924, 0, 0, 546, 546,0.000000 },
- {2925,2926, 0, 0, 513, 513,0.000000 },
- {2927,2928, 0, 0, 226, 226,0.000000 },
- {2929,2929, 0, 0, 40000, 73,0.000000 },
- {2930,2931, 0, 0, 40000, 33,0.000000 },
- {2932,2933, 0, 0, 40000, 6,0.000000 },
- {2934,2935, 0, 0, 40000, 20,0.000000 },
- {2936,2937, 0, 0, 40000, 13,0.000000 },
- {2938,2939, 0, 0, 40000, 106,0.000000 },
- {2940,2940, 0, 0, 40, 40,0.000000 },
- {2941,2941, 0, 0, 40000, 86,0.000000 },
- {2942,2943, 0, 0, 293, 293,0.000000 },
- {2944,2944, 0, 0, 53, 53,0.000000 },
- {2945,2945, 0, 0, 260, 260,0.000000 },
- {2946,2947, 0, 0, 1026, 1026,0.000000 },
- {2948,2948, 0, 0, 40000, 120,0.000000 },
- {2949,2949, 0, 0, 280, 280,0.000000 },
- {2950,2951, 0, 0, 3926, 3926,0.000000 },
- {2952,2953, 0, 0, 6373, 206,0.000000 },
- {2954,2954, 60, 0, 40000, 0,0.000000 },
- {2955,2956, 0, 0, 40000, 153,0.000000 },
- {2957,2958, 0, 0, 40000, 6,0.000000 },
- {2959,2960, 0, 0, 40000, 26,0.000000 },
- {2961,2962, 0, 0, 700, 140,0.000000 },
- {2963,2963, 0, 0, 506, 506,0.000000 },
- {2964,2964, 0, 0, 40000, 680,0.000000 },
- {2436,2436, 49, 0, 593, 593,0.000000 },
- {2357,2357, 61, 0, 26, 26,0.000000 },
- {2357,2357, 56, 0, 26, 26,0.000000 },
- {2357,2357, 58, 0, 26, 26,0.000000 },
- {2357,2357, 49, 0, 33, 33,0.000000 },
- {2357,2357, 44, 0, 26, 26,0.000000 },
- {2965,2965, 0, 0, 40000, 186,0.000000 },
- {2966,2966, 0, 0, 186, 186,0.000000 },
- {2967,2967, 0, 0, 1793, 1793,0.000000 },
- {2968,2968, 0, 0, 40000, 53,0.000000 },
- {2969,2969, 0, 0, 80, 80,0.000000 },
- {2970,2970, 84, 0, 40, 40,0.000000 },
- {2971,2971, 72, 0, 140, 140,0.000000 },
- {2972,2972, 0, 0, 2080, 2080,0.000000 },
- {2973,2973, 0, 0, 40000, 66,0.000000 },
- {2974,2974, 0, 0, 40000, 2100,0.000000 },
- {2975,2975, 0, 0, 1766, 1766,0.000000 },
- {2976,2976, 0, 0, 120, 120,0.000000 },
- {2977,2977, 0, 0, 40000, 0,0.000000 },
- {2978,2978, 0, 0, 40000, 66,0.000000 },
- {2979,2979, 0, 0, 40000, 73,0.000000 },
- {2980,2980, 0, 0, 40000, 126,0.000000 },
- {2981,2981, 0, 0, 40000, 506,0.000000 },
- {2982,2982, 0, 0, 40000, 373,0.000000 },
- {2983,2983, 0, 0, 920, 920,0.000000 },
- {2984,2984, 0, 0, 1106, 1106,0.000000 },
- {2985,2985, 0, 0, 40000, 0,0.000000 },
- {2986,2986, 0, 0, 40000, 0,0.000000 },
- {2987,2987, 0, 0, 40000, 0,0.000000 },
- {2988,2988, 0, 0, 40000, 140,0.000000 },
- {2989,2989, 0, 0, 726, 726,0.000000 },
- {2990,2990, 0, 0, 573, 573,0.000000 },
- {2991,2991, 0, 0, 40000, 146,0.000000 },
- {2992,2992, 0, 0, 40000, 66,0.000000 },
- {2993,2993, 0, 0, 146, 146,0.000000 },
- {2994,2994, 0, 0, 1380, 1380,0.000000 },
- {2995,2995, 0, 0, 40000, 113,0.000000 },
- {2996,2996, 0, 0, 1140, 1140,0.000000 },
- {2997,2997, 0, 0, 1180, 1180,0.000000 },
- {2998,2998, 0, 0, 40000, 0,0.000000 },
- {2999,2999, 0, 0, 40000, 13,0.000000 },
- {3000,3000, 0, 0, 193, 193,0.000000 },
- {3001,3001, 0, 0, 40000, 0,0.000000 },
- {3002,3002, 0, 0, 40000, 433,0.000000 },
- {3003,3003, 0, 0, 1206, 1206,0.000000 },
- {3004,3004, 0, 0, 40000, 480,0.000000 },
- {3005,3005, 0, 0, 40000, 0,0.000000 },
- {3006,3006, 0, 0, 126, 126,0.000000 },
- {3007,3007, 0, 0, 333, 333,0.000000 },
- { 350, 350, 0, 0, 66, 66,0.000000 },
- {3008,3008, 0, 0, 46, 46,0.000000 },
- {3009,3009, 0, 0, 26, 26,0.000000 },
- {3010,3010, 0, 0, 320, 320,0.000000 },
- {3011,3011, 0, 0, 2380, 2380,0.000000 },
- {3012,3012, 0, 0, 180, 180,0.000000 },
- {3013,3013, 0, 0, 260, 260,0.000000 },
- {3014,3014, 0, 0, 40000, 6,0.000000 },
- {3015,3015, 0, 0, 40000, 146,0.000000 },
- { 350, 350, 36, 0, 86, 86,0.000000 },
- { 369, 369, 37, 0, 33, 33,0.000000 },
- {3008,3008, 38, 0, 53, 53,0.000000 },
- { 369, 369, 24, 0, 33, 33,0.000000 },
- {3008,3008, 32, 0, 60, 60,0.000000 },
- { 369, 369, 48, 0, 33, 33,0.000000 },
- {3009,3009, 42, 0, 33, 33,0.000000 },
- { 369, 369, 50, 0, 100, 100,0.000000 },
- { 369, 369, 52, 0, 66, 66,0.000000 },
- { 369, 369, 54, 0, 93, 93,0.000000 },
- { 369, 369, 55, 0, 86, 86,0.000000 },
- { 369, 369, 57, 0, 100, 100,0.000000 },
- {3010,3010, 51, 0, 333, 333,0.000000 },
- { 144, 144, 61, 0, 40, 40,0.000000 },
- {3016,3016, 0, 0, 106, 106,0.000000 },
- {3016,3016, 63, 0, 86, 86,0.000000 },
- {3016,3016, 64, 0, 86, 86,0.000000 },
- {3017,3017, 40, 0, 60, 60,0.000000 },
- {3017,3017, 70, 0, 40, 40,0.000000 },
- {3018,3018, 0, 0, 40000, 6,0.000000 },
- {3019,3019, 0, 0, 40000, 0,0.000000 },
- {3020,3020, 0, 0, 40000, 6,0.000000 },
- {3021,3021, 0, 0, 40000, 6,0.000000 },
- {3022,3022, 38, 0, 46, 46,0.000000 },
- {2441,2441, 57, 0, 73, 73,0.000000 },
- {3023,3023, 63, 0, 33, 33,0.000000 },
- {3024,3024, 74, 0, 80, 80,0.000000 },
- {3025,3025, 74, 0, 206, 206,0.000000 },
- {3026,3026, 60, 0, 300, 300,0.000000 },
- {1593,1594, 35, 0, 646, 646,0.000000 },
- {1564,1565, 35, 0, 66, 66,0.000000 },
- { 248,3027, 0, 0, 40000, 33,0.000000 },
- {1445,3028, 0, 0, 1860, 1860,0.000000 },
- {1447,3029, 0, 0, 1626, 1626,0.000000 },
- {1452,3030, 0, 0, 1740, 1740,0.000000 },
- {1544,3031, 0, 0, 160, 160,0.000000 },
- {1546,3032, 0, 0, 1913, 1913,0.000000 },
- { 398, 399, 35, 0, 600, 600,0.000000 },
- {1550,3033, 35, 0, 20, 20,0.000000 },
- {1556,1557, 35, 0, 386, 386,0.000000 },
- {1558,1559, 35, 0, 346, 346,0.000000 },
- {1570,1571, 35, 0, 360, 360,0.000000 },
- {1608,1609, 35, 0, 460, 460,0.000000 },
- {1595,1596, 35, 0, 60, 60,0.000000 },
- { 159,1597, 35, 0, 60, 60,0.000000 },
- {1610,1611, 35, 0, 60, 60,0.000000 },
- { 397,1588, 35, 0, 100, 100,0.000000 },
- {1606,1607, 35, 0, 46, 46,0.000000 },
- { 145,1576, 35, 0, 6, 6,0.000000 },
- {1612,1613, 35, 0, 60, 60,0.000000 },
- {1577,1578, 35, 0, 53, 53,0.000000 },
- {1614,1615, 35, 0, 6, 6,0.000000 },
- {1550,1551, 35, 0, 20, 20,0.000000 },
- { 364, 365, 35, 0, 20, 20,0.000000 },
- { 129,1549, 35, 0, 93, 93,0.000000 },
- { 132,1552, 35, 0, 20, 20,0.000000 },
- {1553,1554, 35, 0, 33, 33,0.000000 },
- { 129,1548, 35, 0, 86, 86,0.000000 },
- { 134,1555, 35, 0, 133, 133,0.000000 },
- {1560,1561, 35, 0, 140, 140,0.000000 },
- {1562,1563, 35, 0, 40000, 0,0.000000 },
- {1572,1573, 35, 0, 66, 66,0.000000 },
- {1574,1575, 35, 0, 60, 60,0.000000 },
- {1581,1582, 35, 0, 20, 20,0.000000 },
- { 149,1583, 35, 0, 53, 53,0.000000 },
- {1584,1585, 35, 0, 206, 206,0.000000 },
- {1591,1592, 35, 0, 386, 386,0.000000 },
- {1579,1580, 35, 0, 53, 53,0.000000 },
- {1586,1587, 35, 0, 180, 180,0.000000 },
- {1589,1590, 35, 0, 20, 20,0.000000 },
- {1600,1601, 35, 0, 140, 140,0.000000 },
- {1602,1603, 35, 0, 220, 220,0.000000 },
- {1604,1605, 35, 0, 1293, 1293,0.000000 },
- {1598,1599, 35, 0, 233, 233,0.000000 },
- { 374, 375, 35, 0, 580, 580,0.000000 },
- {1566,1567, 35, 0, 1666, 0,0.000000 },
- {2306,2307, 35, 0, 140, 140,0.000000 },
- {3034, 339, 35, 0, 4293, 4293,0.000000 },
- {2305,1548, 35, 0, 80, 80,0.000000 },
- {1595,1595, 35, 0, 60, 60,0.000000 },
- {2303,2304, 35, 0, 20, 20,0.000000 },
- {1560,2308, 35, 0, 140, 140,0.000000 },
- {2309,2310, 35, 0, 40000, 0,0.000000 },
- {1568,1568, 35, 0, 20, 20,0.000000 },
- {2311,2312, 35, 0, 66, 66,0.000000 },
- {2313,2314, 35, 0, 66, 66,0.000000 },
- {2315,2315, 35, 0, 13, 13,0.000000 },
- {2316,2316, 35, 0, 53, 53,0.000000 },
- {1612,1612, 35, 0, 60, 60,0.000000 },
- {2317,2317, 35, 0, 153, 153,0.000000 },
- {2318,2318, 35, 0, 86, 86,0.000000 },
- {2319,2319, 35, 0, 46, 46,0.000000 },
- {2320,2320, 35, 0, 46, 46,0.000000 },
- {2321,2321, 35, 0, 20, 20,0.000000 },
- {2322,2322, 35, 0, 426, 426,0.000000 },
- {2323,2323, 35, 0, 826, 826,0.000000 },
- {2324, 392, 35, 0, 20, 20,0.000000 },
- {2324, 393, 35, 0, 346, 346,0.000000 },
- {2325,2326, 35, 0, 220, 220,0.000000 },
- {2327,2328, 35, 0, 180, 180,0.000000 },
- {2329,2330, 35, 0, 160, 160,0.000000 },
- {2331,2332, 35, 0, 573, 573,0.000000 },
- {3035,3036, 35, 0, 1026, 1026,0.000000 },
- {3037,3038, 35, 0, 400, 400,0.000000 },
- {1564,1564, 35, 0, 60, 60,0.000000 },
- {3039,3039, 0, 0, 2293, 2293,0.000000 },
- {3040,3040, 0, 0, 2006, 2006,0.000000 },
- {3041,3041, 0, 0, 1226, 1226,0.000000 },
- {3042,3042, 0, 0, 1026, 1026,0.000000 },
- {3043,3043, 0, 0, 760, 760,0.000000 },
- {3044,3044, 0, 0, 546, 546,0.000000 },
- {3045,3045, 0, 0, 613, 613,0.000000 },
- {3046,3046, 0, 0, 40000, 53,0.000000 },
- {3047,3047, 0, 0, 1013, 1013,0.000000 },
- {3048,3048, 0, 0, 40000, 606,0.000000 },
- {3049,3049, 0, 0, 3626, 3626,0.000000 },
- {3050,3050, 0, 0, 993, 993,0.000000 },
- {3051,3051, 0, 0, 266, 266,0.000000 },
- {3052,3052, 0, 0, 140, 140,0.000000 },
- {3053,3053, 0, 0, 2253, 2253,0.000000 },
- {3054,3054, 0, 0, 2513, 2513,0.000000 },
- {3055,3055, 0, 0, 40000, 0,0.000000 },
- {3056,3056, 0, 0, 40000, 0,0.000000 },
- {3057,3057, 0, 0, 2146, 2146,0.000000 },
- {3058,3058, 0, 0, 40000, 0,0.000000 },
- {3059,3059, 0, 0, 40000, 6,0.000000 },
- {3060,3060, 0, 0, 40000, 6,0.000000 },
- {3061,3061, 0, 0, 460, 460,0.000000 },
- {3062,3062, 0, 0, 1846, 1846,0.000000 },
- {3063,3063, 0, 0, 933, 933,0.000000 },
- {3064,3064, 0, 0, 206, 206,0.000000 },
- {3065,3065, 0, 0, 40000, 20,0.000000 },
- {3066,3066, 0, 0, 80, 80,0.000000 },
- {3067,3067, 0, 0, 1973, 1973,0.000000 },
- {3068,3068, 0, 0, 40000, 60,0.000000 },
- {3069,3069, 0, 0, 1120, 1120,0.000000 },
- {3070,3070, 0, 0, 420, 420,0.000000 },
- {3071,3071, 0, 0, 1120, 1120,0.000000 },
- {3072,3072, 0, 0, 806, 806,0.000000 },
- {3073,3073, 0, 0, 1186, 1186,0.000000 },
- {3074,3074, 0, 0, 1900, 1900,0.000000 },
- {3075,3075, 0, 0, 40000, 0,0.000000 },
- {3076,3076, 0, 0, 1046, 1046,0.000000 },
- {3077,3077, 0, 0, 600, 600,0.000000 },
- {3078,3078, 0, 0, 146, 13,0.000000 },
- {3079,3079, 0, 0, 786, 786,0.000000 },
- {3080,3080, 0, 0, 40000, 26,0.000000 },
- {3081,3081, 0, 0, 146, 13,0.000000 },
- {3082,3082, 0, 0, 40000, 46,0.000000 },
- {3083,3083, 0, 0, 100, 100,0.000000 },
- {3084,3084, 0, 0, 1580, 1580,0.000000 },
- {3085,3085, 0, 0, 280, 280,0.000000 },
- {3086,3086, 0, 0, 40000, 80,0.000000 },
- {3087,3087, 0, 0, 40000, 73,0.000000 },
- {3088,3088, 0, 0, 40000, 66,0.000000 },
- {3089,3089, 0, 0, 40000, 73,0.000000 },
- {3090,3090, 0, 0, 40000, 0,0.000000 },
- {3091,3091, 0, 0, 40000, 6,0.000000 },
- {3092,3092, 0, 0, 40000, 6,0.000000 },
- {3093,3093, 0, 0, 246, 246,0.000000 },
- {3094,3094, 0, 0, 40000, 73,0.000000 },
- {3095,3095, 0, 0, 273, 126,0.000000 },
- {3096,3096, 0, 0, 40000, 33,0.000000 },
- {3097,3097, 0, 0, 40000, 6,0.000000 },
- {3098,3098, 0, 0, 40000, 73,0.000000 },
- {3099,3099, 0, 0, 1233, 53,0.000000 },
- {3100,3100, 0, 0, 40000, 66,0.000000 },
- {3101,3101, 0, 0, 40000, 0,0.000000 },
- {3102,3102, 0, 0, 40000, 0,0.000000 },
- {3103,3103, 0, 0, 40000, 6,0.000000 },
- {3104,3104, 0, 0, 40000, 0,0.000000 },
- {3105,3105, 0, 0, 40000, 6,0.000000 },
- {3106,3106, 0, 0, 40000, 0,0.000000 },
- {3107,3107, 0, 0, 40000, 0,0.000000 },
- {3108,3108, 0, 0, 40000, 6,0.000000 },
- {3109,3109, 0, 0, 40000, 6,0.000000 },
- {3110,3110, 0, 0, 40000, 6,0.000000 },
- {3111,3111, 0, 0, 40000, 20,0.000000 },
- {3112,3112, 0, 0, 2240, 2240,0.000000 },
- {3113,3113, 0, 0, 100, 6,0.000000 },
- {3114,3114, 0, 0, 4466, 4466,0.000000 },
- {3115,3115, 0, 0, 40000, 20,0.000000 },
- {3116,3116, 0, 0, 40000, 13,0.000000 },
- {3117,3117, 0, 0, 40000, 53,0.000000 },
- {3118,3118, 0, 0, 40000, 300,0.000000 },
- {3119,3119, 0, 0, 6906, 6906,0.000000 },
- {3120,3120, 0, 0, 40000, 33,0.000000 },
- {3121,3121, 0, 0, 40000, 6,0.000000 },
- {3122,3122, 0, 0, 1953, 1953,0.000000 },
- {3123,3123, 0, 0, 973, 973,0.000000 },
- {3124,3124, 0, 0, 2240, 6,0.000000 },
- {3125,3125, 0, 0, 1986, 1986,0.000000 },
- {3126,3126, 0, 0, 1613, 1613,0.000000 },
- {3127,3127, 0, 0, 353, 353,0.000000 },
- {3128,3128, 0, 0, 66, 66,0.000000 },
- {3129,3129, 0, 0, 5586, 5586,0.000000 },
- {3130,3130, 0, 0, 173, 173,0.000000 },
- {3131,3131, 35, 0, 120, 120,0.000000 },
- {3132,3132, 35, 0, 6, 6,0.000000 },
- {3133,3133, 35, 0, 40000, 46,0.000000 },
- {3134,3134, 35, 0, 40000, 46,0.000000 },
- {3135,3135, 35, 0, 100, 100,0.000000 },
- {3061,3061, 35, 0, 140, 140,0.000000 },
- {3136,3136, 35, 0, 20, 20,0.000000 },
- { 739, 739, 35, 0, 40, 40,0.000000 },
- {3137,3137, 35, 0, 186, 186,0.000000 },
- {3138,3138, 35, 0, 160, 160,0.000000 },
- {3139,3139, 35, 0, 93, 93,0.000000 },
- {3140,3140, 35, 0, 80, 80,0.000000 },
- {3141,3141, 35, 0, 133, 133,0.000000 },
- {3142,3142, 35, 0, 66, 66,0.000000 },
- {3143,3143, 35, 0, 133, 133,0.000000 },
- {3144,3144, 35, 0, 666, 666,0.000000 },
- {3145,3145, 35, 0, 93, 93,0.000000 },
- {3146,3146, 35, 0, 1433, 1433,0.000000 },
- {3147,3147, 35, 0, 393, 393,0.000000 },
- {3148,3148, 35, 0, 93, 93,0.000000 },
- {3149,3149, 35, 0, 1480, 1480,0.000000 },
- {3150,3150, 0, 0, 1126, 1126,0.000000 },
- {3151,3151, 0, 0, 1766, 1766,0.000000 },
- {3152,3152, 0, 0, 620, 620,0.000000 },
- {3153,3153, 0, 0, 460, 460,0.000000 },
- {3154,3154, 0, 0, 1173, 1173,0.000000 },
- {3155,3155, 0, 0, 626, 626,0.000000 },
- {3156,3156, 0, 0, 1740, 1740,0.000000 },
- {3157,3157, 0, 0, 280, 280,0.000000 },
- {3158,3158, 0, 0, 46, 46,0.000000 },
- {3159,3159, 0, 0, 280, 280,0.000000 },
- {3160,3160, 0, 0, 1153, 1153,0.000000 },
- {3161,3161, 0, 0, 40000, 0,0.000000 },
- {3162,3162, 0, 0, 40000, 6,0.000000 },
- {3163,3163, 0, 0, 40000, 46,0.000000 },
- {3164,3164, 0, 0, 40000, 0,0.000000 },
- {3165,3165, 0, 0, 40000, 6,0.000000 },
- {3166,3166, 0, 0, 2280, 2280,0.000000 },
- {3167,3167, 0, 0, 40000, 0,0.000000 },
- {3168,3168, 0, 0, 486, 486,0.000000 },
- {3169,3169, 0, 0, 600, 600,0.000000 },
- {3170,3170, 0, 0, 466, 466,0.000000 },
- {3171,3171, 0, 0, 593, 593,0.000000 },
- {3172,3172, 0, 0, 1153, 1153,0.000000 },
- {3173,3173, 0, 0, 280, 280,0.000000 },
- {3174,3174, 0, 0, 586, 586,0.000000 },
- {3175,3175, 0, 0, 206, 13,0.000000 },
- {3176,3176, 0, 0, 186, 60,0.000000 },
- {3177,3177, 0, 0, 2366, 2366,0.000000 },
- {3178,3178, 0, 0, 1700, 1700,0.000000 },
- {3179,3179, 0, 0, 46, 46,0.000000 },
- {3180,3180, 0, 0, 886, 886,0.000000 },
- {3181,3181, 0, 0, 186, 186,0.000000 },
- {3182,3182, 0, 0, 40000, 186,0.000000 },
- {3183,3183, 0, 0, 560, 560,0.000000 },
- {3184,3184, 0, 0, 1466, 1466,0.000000 },
- {3185,3185, 0, 0, 1553, 1553,0.000000 },
- {3186,3186, 0, 0, 380, 380,0.000000 },
- {3187,3187, 0, 0, 146, 146,0.000000 },
- {3188,3188, 0, 0, 146, 146,0.000000 },
- {3189,3189, 0, 0, 4726, 4726,0.000000 },
- {3190,3190, 0, 0, 40000, 6,0.000000 },
- {3191,3191, 0, 0, 1766, 1766,0.000000 },
- {3192,3192, 0, 0, 40000, 0,0.000000 },
- {3193,3193, 0, 0, 806, 806,0.000000 },
- {3194,3194, 0, 0, 1133, 1133,0.000000 },
- {3195,3195, 0, 0, 40000, 6,0.000000 },
- {3196,3196, 0, 0, 40000, 0,0.000000 },
- {3197,3197, 0, 0, 40000, 6,0.000000 },
- {3198,3198, 0, 0, 40000, 20,0.000000 },
- {3199,3199, 0, 0, 40000, 6,0.000000 },
- {3200,3200, 0, 0, 213, 213,0.000000 },
- {3201,3201, 0, 0, 40000, 106,0.000000 },
- {3202,3202, 0, 0, 1113, 1113,0.000000 },
- {3203,3203, 0, 0, 1953, 1953,0.000000 },
- {3204,3204, 0, 0, 40000, 0,0.000000 },
- {3205,3205, 0, 0, 40000, 0,0.000000 },
- {3206,3206, 0, 0, 340, 340,0.000000 },
- {3207,3207, 0, 0, 40000, 6,0.000000 },
- {3208,3208, 0, 0, 1126, 1126,0.000000 },
- {3209,3209, 0, 0, 300, 300,0.000000 },
- {3210,3210, 0, 0, 40000, 46,0.000000 },
- {3211,3211, 0, 0, 40000, 113,0.000000 },
- {3212,3212, 0, 0, 1126, 1126,0.000000 },
- {3213,3213, 0, 0, 2853, 2853,0.000000 },
- {3214,3214, 0, 0, 40000, 0,0.000000 },
- {3215,3215, 0, 0, 1286, 0,0.000000 },
- {3216,3216, 0, 0, 40000, 233,0.000000 },
- {3217,3217, 0, 0, 40000, 1640,0.000000 },
- {3218,3218, 0, 0, 40000, 240,0.000000 },
- {3219,3219, 0, 0, 1766, 1766,0.000000 },
- {3220,3220, 0, 0, 40000, 1493,0.000000 },
- {3221,3221, 0, 0, 40000, 2120,0.000000 },
- {3222,3222, 0, 0, 1226, 1226,0.000000 },
- {3223,3223, 0, 0, 306, 306,0.000000 },
- {3224,3224, 0, 0, 40000, 6,0.000000 },
- {3225,3225, 0, 0, 666, 13,0.000000 },
- {3226,3226, 0, 0, 153, 153,0.000000 },
- {3227,3227, 0, 0, 626, 626,0.000000 },
- {3228,3228, 0, 0, 140, 140,0.000000 },
- {3229,3229, 0, 0, 233, 233,0.000000 },
- { 499, 499, 0, 0, 40, 40,0.000000 },
- {3230,3230, 0, 0, 46, 46,0.000000 },
- {3231,3231, 0, 0, 146, 146,0.000000 },
- {3232,3232, 0, 0, 206, 206,0.000000 },
- {3233,3233, 0, 0, 5686, 5686,0.000000 },
- {3234,3234, 0, 0, 326, 326,0.000000 },
- { 403, 403, 0, 0, 40000, 0,0.000000 },
- {3235,3235, 0, 0, 1913, 1913,0.000000 },
- {3236,3236, 0, 0, 2080, 2080,0.000000 },
- {3237,3237, 0, 0, 2026, 2026,0.000000 },
- {3238,3238, 0, 0, 1166, 1166,0.000000 },
- {3239,3239, 0, 0, 600, 600,0.000000 },
- {3240,3240, 0, 0, 1213, 1213,0.000000 },
- {3241,3241, 0, 0, 40000, 0,0.000000 },
- {3242,3242, 0, 0, 40000, 0,0.000000 },
- {3243,3243, 0, 0, 40000, 0,0.000000 },
- {3244,3244, 0, 0, 40000, 0,0.000000 },
- {3245,3245, 0, 0, 40000, 146,0.000000 },
- {3246,3246, 0, 0, 40000, 146,0.000000 },
- {3247,3247, 0, 0, 40000, 146,0.000000 },
- {3248,3248, 0, 0, 40000, 153,0.000000 },
- {3249,3249, 0, 0, 873, 873,0.000000 },
- {3250,3250, 0, 0, 553, 553,0.000000 },
- {3251,3251, 0, 0, 873, 873,0.000000 },
- {3252,3252, 0, 0, 606, 606,0.000000 },
- {3253,3253, 0, 0, 606, 606,0.000000 },
- {3254,3254, 0, 0, 600, 600,0.000000 },
- {3255,3255, 0, 0, 1013, 1013,0.000000 },
- {3256,3256, 0, 0, 626, 626,0.000000 },
- {3257,3257, 0, 0, 40000, 0,0.000000 },
- {3258,3258, 0, 0, 40000, 0,0.000000 },
- {3259,3259, 0, 0, 40000, 66,0.000000 },
- {3260,3260, 0, 0, 40000, 66,0.000000 },
- {3261,3261, 0, 0, 40000, 20,0.000000 },
- {3262,3262, 0, 0, 1120, 1120,0.000000 },
- {3263,3263, 0, 0, 1206, 1206,0.000000 },
- {3264,3264, 0, 0, 940, 940,0.000000 },
- {3265,3265, 0, 0, 3626, 3626,0.000000 },
- {3266,3266, 0, 0, 40000, 320,0.000000 },
- {3267,3267, 0, 0, 40000, 6,0.000000 },
- {3268,3268, 0, 0, 3926, 3926,0.000000 },
- {3269,3269, 0, 0, 40000, 446,0.000000 },
- {3270,3270, 0, 0, 40000, 180,0.000000 },
- {3271,3271, 0, 0, 3426, 3426,0.000000 },
- {3272,3272, 0, 0, 2253, 2253,0.000000 },
- {3273,3273, 0, 0, 40000, 2133,0.000000 },
- {3274,3274, 0, 0, 2566, 2566,0.000000 },
- {3275,3275, 0, 0, 166, 26,0.000000 },
- {3276,3276, 0, 0, 40000, 346,0.000000 },
- {3277,3277, 0, 0, 40000, 66,0.000000 },
- {3278,3278, 0, 0, 40000, 213,0.000000 },
- {3279,3279, 0, 0, 2273, 2273,0.000000 },
- {3280,3280, 0, 0, 40000, 40,0.000000 },
- {3281,3281, 0, 0, 40000, 906,0.000000 },
- {3282,3282, 0, 0, 40000, 213,0.000000 },
- {3283,3283, 0, 0, 40000, 186,0.000000 },
- {3284,3284, 0, 0, 60, 60,0.000000 },
- {3285,3285, 0, 0, 146, 146,0.000000 },
- {3286,3286, 0, 0, 146, 13,0.000000 },
- {3287,3287, 0, 0, 786, 786,0.000000 },
- {3288,3288, 0, 0, 40000, 26,0.000000 },
- {3289,3289, 0, 0, 1580, 1580,0.000000 },
- {3290,3290, 0, 0, 653, 653,0.000000 },
- {3291,3291, 0, 0, 2400, 2400,0.000000 },
- {3292,3292, 0, 0, 1926, 1926,0.000000 },
- {3293,3293, 0, 0, 2593, 2593,0.000000 },
- {3294,3294, 0, 0, 2360, 2360,0.000000 },
- {3295,3295, 0, 0, 4933, 4933,0.000000 },
- {3296,3296, 0, 0, 593, 593,0.000000 },
- {3297,3297, 0, 0, 253, 253,0.000000 },
- {3298,3298, 0, 0, 306, 306,0.000000 },
- {3299,3299, 0, 0, 613, 613,0.000000 },
- {3300,3300, 0, 0, 1900, 1900,0.000000 },
- {3301,3301, 0, 0, 1213, 1213,0.000000 },
- {3302,3302, 0, 0, 273, 273,0.000000 },
- {3303,3303, 0, 0, 566, 566,0.000000 },
- {3304,3304, 0, 0, 40000, 6,0.000000 },
- {3305,3305, 0, 0, 40000, 6,0.000000 },
- {3306,3306, 0, 0, 40000, 6,0.000000 },
- {3307,3307, 0, 0, 40000, 6,0.000000 },
- {3308,3308, 0, 0, 40000, 6,0.000000 },
- {3309,3309, 0, 0, 40000, 0,0.000000 },
- {3310,3310, 0, 0, 40000, 0,0.000000 },
- {3311,3311, 0, 0, 40000, 0,0.000000 },
- {3312,3312, 0, 0, 40000, 6,0.000000 },
- {3313,3313, 0, 0, 40000, 53,0.000000 },
- {3314,3314, 0, 0, 40000, 73,0.000000 },
- {3315,3315, 0, 0, 40000, 0,0.000000 },
- {3316,3316, 0, 0, 40000, 0,0.000000 },
- {3317,3317, 0, 0, 40000, 0,0.000000 },
- {3318,3318, 0, 0, 40000, 80,0.000000 },
- {3319,3319, 0, 0, 40, 60,0.000000 },
- {3320,3320, 0, 0, 1320, 1320,0.000000 },
- {3321,3321, 0, 0, 40000, 126,0.000000 },
- {3322,3322, 0, 0, 273, 126,0.000000 },
- {3323,3323, 0, 0, 40000, 126,0.000000 },
- {3324,3324, 0, 0, 40000, 33,0.000000 },
- {3325,3325, 0, 0, 40000, 73,0.000000 },
- {3326,3326, 0, 0, 40, 40,0.000000 },
- {3327,3327, 0, 0, 40000, 233,0.000000 },
- {3328,3328, 0, 0, 40000, 233,0.000000 },
- {3329,3329, 0, 0, 593, 593,0.000000 },
- {3330,3330, 0, 0, 40000, 213,0.000000 },
- {3331,3331, 0, 0, 40000, 606,0.000000 },
- {3332,3332, 0, 0, 2253, 2253,0.000000 },
- {3333,3333, 0, 0, 140, 140,0.000000 },
- {3334,3334, 0, 0, 40000, 926,0.000000 },
- {3335,3335, 0, 0, 40000, 33,0.000000 },
- {3336,3336, 0, 0, 40000, 1120,0.000000 },
- {3337,3337, 0, 0, 160, 160,0.000000 },
- {3338,3338, 0, 0, 40000, 6,0.000000 },
- {3339,3339, 0, 0, 40000, 1093,0.000000 },
- {3340,3340, 0, 0, 160, 160,0.000000 },
- {3341,3341, 0, 0, 1206, 1206,0.000000 },
- {3342,3342, 0, 0, 146, 146,0.000000 },
- {3343,3343, 0, 0, 146, 146,0.000000 },
- {3344,3344, 0, 0, 140, 140,0.000000 },
- {3345,3345, 0, 0, 140, 140,0.000000 },
- {3346,3346, 0, 0, 140, 140,0.000000 },
- {3347,3347, 0, 0, 80, 80,0.000000 },
- {3348,3348, 0, 0, 40000, 33,0.000000 },
- {3349,3349, 0, 0, 1186, 1186,0.000000 },
- {3350,3350, 0, 0, 40000, 1413,0.000000 },
- {3351,3351, 0, 0, 1226, 1226,0.000000 },
- {3352,3352, 0, 0, 40, 40,0.000000 },
- {3353,3353, 0, 0, 60, 60,0.000000 },
- {3354,3354, 0, 0, 100, 100,0.000000 },
- {3355,3355, 0, 0, 246, 246,0.000000 },
- {3356,3356, 0, 0, 1140, 1140,0.000000 },
- { 142, 142, 20, 0, 20, 20,0.000000 },
- {3357,1451, 0, 0, 613, 613,0.000000 },
- {3358,3359, 0, 0, 1740, 1740,0.000000 },
- {3360,1455, 0, 0, 280, 280,0.000000 },
- {3361,1463, 0, 0, 40000, 133,0.000000 },
- { 225,3362, 0, 0, 2026, 2026,0.000000 },
- {3363,1545, 0, 0, 153, 153,0.000000 },
- {3364,1547, 0, 0, 40000, 60,0.000000 },
- {3365,3366, 39, 0, 13, 13,0.000000 },
- {3367, 368, 58, 0, 46, 46,0.000000 },
- {3368,1551, 48, 0, 93, 93,0.000000 },
- {3368,3033, 49, 0, 73, 73,0.000000 },
- {3368,3033, 51, 0, 153, 153,0.000000 },
- {3368,3033, 54, 0, 140, 140,0.000000 },
- {3368,3033, 57, 0, 126, 126,0.000000 },
- {3368,3033, 60, 0, 133, 133,0.000000 },
- {3369,3370, 70, 0, 893, 893,0.000000 },
- {1564,1565, 80, 0, 66, 66,0.000000 },
- {3371,1571, 44, 0, 520, 520,0.000000 },
- {3372,3372, 0, 0, 1486, 1486,0.000000 },
- {3373,3373, 0, 0, 1806, 1806,0.000000 },
- {3374,3374, 0, 0, 633, 633,0.000000 },
- {3375,3375, 0, 0, 1273, 1273,0.000000 },
- {3376,3376, 0, 0, 1553, 1553,0.000000 },
- {3377,3377, 0, 0, 1206, 1206,0.000000 },
- {3378,3378, 0, 0, 313, 313,0.000000 },
- {3379,3379, 0, 0, 1486, 1486,0.000000 },
- {3380,3380, 0, 0, 626, 626,0.000000 },
- {3381,3381, 0, 0, 1846, 1846,0.000000 },
- {3382,3382, 0, 0, 300, 300,0.000000 },
- {3383,3383, 0, 0, 1740, 1740,0.000000 },
- {3384,3384, 0, 0, 513, 513,0.000000 },
- {3385,3385, 0, 0, 46, 46,0.000000 },
- {3386,3386, 0, 0, 1226, 1226,0.000000 },
- {3387,3387, 0, 0, 333, 333,0.000000 },
- {3388,3388, 0, 0, 40000, 300,0.000000 },
- {3389,3389, 0, 0, 40000, 533,0.000000 },
- {3390,3390, 0, 0, 40000, 126,0.000000 },
- {3391,3391, 0, 0, 40000, 0,0.000000 },
- {3392,3392, 0, 0, 40000, 33,0.000000 },
- {3393,3393, 0, 0, 40000, 6,0.000000 },
- {3394,3394, 0, 0, 40000, 6,0.000000 },
- {3395,3395, 0, 0, 3880, 6,0.000000 },
- {3396,3396, 0, 0, 1066, 1066,0.000000 },
- {3397,3397, 0, 0, 4086, 4086,0.000000 },
- {3398,3398, 0, 0, 866, 866,0.000000 },
- {3399,3399, 0, 0, 466, 466,0.000000 },
- {3400,3400, 0, 0, 420, 420,0.000000 },
- {3401,3401, 0, 0, 40000, 73,0.000000 },
- {3402,3402, 0, 0, 40000, 20,0.000000 },
- {3403,3403, 0, 0, 40000, 26,0.000000 },
- {3404,3404, 0, 0, 4266, 4266,0.000000 },
- {3405,3405, 0, 0, 40000, 0,0.000000 },
- {3406,3406, 0, 0, 253, 253,0.000000 },
- {3407,3407, 0, 0, 380, 380,0.000000 },
- {3408,3408, 0, 0, 573, 573,0.000000 },
- {3409,3409, 0, 0, 280, 280,0.000000 },
- {3410,3410, 0, 0, 40000, 6,0.000000 },
- {3411,3411, 0, 0, 1933, 1933,0.000000 },
- {3412,3412, 0, 0, 40000, 140,0.000000 },
- {3413,3413, 0, 0, 40000, 140,0.000000 },
- {3414,3414, 0, 0, 40000, 40,0.000000 },
- {3415,3415, 0, 0, 353, 353,0.000000 },
- {3416,3416, 0, 0, 40000, 166,0.000000 },
- {3417,3417, 0, 0, 273, 273,0.000000 },
- {3418,3418, 0, 0, 126, 126,0.000000 },
- {3419,3419, 0, 0, 146, 146,0.000000 },
- {3420,3420, 0, 0, 40000, 213,0.000000 },
- {3421,3421, 0, 0, 40000, 173,0.000000 },
- {3422,3422, 0, 0, 40000, 206,0.000000 },
- {3423,3423, 0, 0, 40000, 213,0.000000 },
- {3424,3424, 0, 0, 40000, 153,0.000000 },
- {3425,3425, 0, 0, 40000, 106,0.000000 },
- {3426,3426, 0, 0, 40000, 6,0.000000 },
- {3427,3427, 0, 0, 233, 233,0.000000 },
- {3428,3428, 0, 0, 40000, 6,0.000000 },
- {3429,3429, 0, 0, 11193, 13,0.000000 },
- {3430,3430, 0, 0, 40000, 126,0.000000 },
- {3431,3431, 0, 0, 40000, 13,0.000000 },
- {3432,3432, 0, 0, 40000, 6,0.000000 },
- {3433,3433, 0, 0, 40000, 0,0.000000 },
- {3434,3434, 0, 0, 40000, 0,0.000000 },
- {3435,3435, 0, 0, 40000, 0,0.000000 },
- {3436,3436, 0, 0, 40000, 0,0.000000 },
- {3437,3437, 0, 0, 40000, 0,0.000000 },
- {3438,3438, 0, 0, 40000, 0,0.000000 },
- {3439,3439, 0, 0, 6013, 6013,0.000000 },
- {3440,3440, 0, 0, 40000, 0,0.000000 },
- {3441,3441, 0, 0, 40000, 0,0.000000 },
- {3442,3442, 0, 0, 293, 293,0.000000 },
- {3443,3443, 0, 0, 40000, 6,0.000000 },
- {3444,3444, 0, 0, 40000, 20,0.000000 },
- {3445,3445, 0, 0, 40000, 0,0.000000 },
- {3446,3446, 0, 0, 40000, 0,0.000000 },
- {3447,3447, 0, 0, 40000, 0,0.000000 },
- {3448,3448, 0, 0, 40000, 0,0.000000 },
- {3449,3449, 0, 0, 40000, 20,0.000000 },
- {3450,3450, 0, 0, 40000, 153,0.000000 },
- {3451,3451, 0, 0, 440, 440,0.000000 },
- {3452,3452, 0, 0, 3253, 3253,0.000000 },
- {3453,3453, 0, 0, 3946, 3946,0.000000 },
- {3454,3454, 0, 0, 140, 140,0.000000 },
- {3455,3455, 0, 0, 40000, 20,0.000000 },
- {3456,3456, 0, 0, 40000, 33,0.000000 },
- {3457,3457, 0, 0, 40000, 20,0.000000 },
- {3458,3458, 0, 0, 40000, 26,0.000000 },
- {3459,3459, 0, 0, 40000, 20,0.000000 },
- {3460,3460, 0, 0, 786, 786,0.000000 },
- {3461,3461, 0, 0, 2560, 2560,0.000000 },
- {3462,3462, 0, 0, 40000, 26,0.000000 },
- {3463,3463, 0, 0, 40000, 580,0.000000 },
- {3464,3464, 0, 0, 40000, 2393,0.000000 },
- {3465,3465, 0, 0, 40000, 53,0.000000 },
- {3466,3466, 0, 0, 40000, 33,0.000000 },
- {3467,3467, 0, 0, 40000, 193,0.000000 },
- {3468,3468, 0, 0, 40000, 280,0.000000 },
- {3469,3469, 0, 0, 40000, 86,0.000000 },
- {3470,3470, 0, 0, 40000, 820,0.000000 },
- {3471,3471, 0, 0, 40000, 286,0.000000 },
- {3472,3472, 0, 0, 40000, 1100,0.000000 },
- {3473,3473, 0, 0, 40000, 1073,0.000000 },
- {3474,3474, 0, 0, 40000, 1173,0.000000 },
- {3475,3475, 0, 0, 340, 340,0.000000 },
- {3476,3476, 0, 0, 4846, 4846,0.000000 },
- {3477,3477, 0, 0, 40000, 0,0.000000 },
- {3478,3478, 0, 0, 4846, 4846,0.000000 },
- {3479,3479, 0, 0, 606, 606,0.000000 },
- {3480,3480, 0, 0, 106, 106,0.000000 },
- {3481,3481, 0, 0, 40000, 0,0.000000 },
- {3482,3482, 0, 0, 40000, 73,0.000000 },
- {3483,3483, 0, 0, 40000, 0,0.000000 },
- {3484,3484, 0, 0, 586, 586,0.000000 },
- {3485,3485, 0, 0, 73, 73,0.000000 },
- {3486,3486, 0, 0, 460, 460,0.000000 },
- {3487,3487, 0, 0, 40, 40,0.000000 },
- {3488,3488, 0, 0, 526, 526,0.000000 },
- {3489,3489, 0, 0, 540, 540,0.000000 },
- {3490,3490, 0, 0, 253, 253,0.000000 },
- {3491,3491, 0, 0, 2280, 2280,0.000000 },
- {3492,3492, 0, 0, 73, 73,0.000000 },
- {3493,3493, 0, 0, 40000, 73,0.000000 },
- {3494,3494, 0, 0, 40000, 2220,0.000000 },
- {3495,3495, 0, 0, 146, 146,0.000000 },
- {3496,3496, 0, 0, 40000, 13,0.000000 },
- {3497,3497, 0, 0, 380, 13,0.000000 },
- {3498,3498, 0, 0, 40000, 2220,0.000000 },
- {3499,3499, 0, 0, 40000, 146,0.000000 },
- {3500,3500, 0, 0, 1513, 13,0.000000 },
- { 739, 739, 46, 0, 53, 53,0.000000 },
- {3501,3501, 47, 0, 106, 106,0.000000 },
- {3502,3502, 64, 0, 26, 26,0.000000 },
- {3503,3503, 40, 0, 106, 106,0.000000 },
- {3504,3504, 48, 0, 13, 13,0.000000 },
- {3505,3505, 48, 0, 80, 80,0.000000 },
- {3506,3506, 46, 0, 86, 86,0.000000 },
- {3507,3507,111, 0, 33, 33,0.000000 },
- {3508,3508, 49, 0, 140, 140,0.000000 },
- {3509,3509, 56, 0, 33, 33,0.000000 },
- {3510,3510, 52, 0, 140, 140,0.000000 },
- {3511,3511, 96, 0, 440, 440,0.000000 },
- {3510,3510, 54, 0, 140, 140,0.000000 },
- {3512,3512, 57, 0, 260, 260,0.000000 },
- {3513,3513, 82, 0, 486, 486,0.000000 },
- {3510,3510, 60, 0, 153, 153,0.000000 },
- {3514,3514, 60, 0, 606, 606,0.000000 },
- {3515,3515, 92, 0, 60, 60,0.000000 },
- {3516,3516, 60, 0, 46, 46,0.000000 },
- {3517,3517, 58, 0, 40, 40,0.000000 },
- {3518,3518, 22, 0, 53, 53,0.000000 },
- {3519,3519, 60, 0, 613, 613,0.000000 },
- {3520,3520, 72, 0, 80, 80,0.000000 },
- {3521,3521, 77, 0, 80, 80,0.000000 },
- {3522,3522, 70, 0, 73, 73,0.000000 },
- {3523,3523, 75, 0, 60, 60,0.000000 },
- {3524,3524, 69, 0, 140, 140,0.000000 },
- {3525,3525, 59, 0, 113, 113,0.000000 },
- {3526,3526, 48, 0, 153, 153,0.000000 },
- {3527,3527, 89, 0, 133, 133,0.000000 },
- {3528,3528, 84, 0, 260, 260,0.000000 },
- {3529,3529, 33, 0, 93, 93,0.000000 },
- {3530,3530, 55, 0, 86, 86,0.000000 },
- {3531,3531, 58, 0, 186, 186,0.000000 },
- {3532,3532, 52, 0, 166, 166,0.000000 },
- {3533,3533, 57, 0, 46, 46,0.000000 },
- {3534,3534, 57, 0, 73, 73,0.000000 },
- {3535,3535, 85, 0, 60, 60,0.000000 },
- {3536,3536, 68, 0, 40, 40,0.000000 },
- {3536,3536, 61, 0, 60, 60,0.000000 },
- {3537,3537, 64, 0, 93, 93,0.000000 },
- {3538,3538, 44, 0, 386, 386,0.000000 },
- {3539,3539,100, 0, 80, 80,0.000000 },
- {3540,3540,100, 0, 306, 306,0.000000 },
- {3541,3541, 0, 0, 1400, 1400,0.000000 },
- {3542,3542, 0, 0, 253, 253,0.000000 },
- {3543,3543, 0, 0, 460, 460,0.000000 },
- {3544,3544, 0, 0, 1226, 1226,0.000000 },
- {3545,3545, 0, 0, 886, 886,0.000000 },
- {3546,3546, 0, 0, 40, 40,0.000000 },
- {3547,3547, 0, 0, 2406, 2406,0.000000 },
- {3548,3548, 0, 0, 1180, 1180,0.000000 },
- {3549,3549, 0, 0, 40000, 0,0.000000 },
- {3550,3550, 0, 0, 40000, 0,0.000000 },
- {3551,3551, 0, 0, 40000, 33,0.000000 },
- {3552,3552, 0, 0, 40000, 0,0.000000 },
- {3553,3553, 0, 0, 40000, 6,0.000000 },
- {3554,3554, 0, 0, 1553, 1553,0.000000 },
- {3555,3555, 0, 0, 40000, 0,0.000000 },
- {3556,3556, 0, 0, 573, 573,0.000000 },
- {3557,3557, 0, 0, 526, 526,0.000000 },
- {3558,3558, 0, 0, 940, 940,0.000000 },
- {3559,3559, 0, 0, 606, 606,0.000000 },
- {3560,3560, 0, 0, 40000, 6,0.000000 },
- {3561,3561, 0, 0, 40000, 0,0.000000 },
- {3562,3562, 0, 0, 1120, 1120,0.000000 },
- {3563,3563, 0, 0, 700, 700,0.000000 },
- {3564,3564, 0, 0, 66, 66,0.000000 },
- {3565,3565, 0, 0, 620, 620,0.000000 },
- {3566,3566, 0, 0, 286, 286,0.000000 },
- {3567,3567, 0, 0, 40000, 73,0.000000 },
- {3568,3568, 0, 0, 80, 80,0.000000 },
- {3569,3569, 0, 0, 186, 186,0.000000 },
- {3570,3570, 0, 0, 1506, 1506,0.000000 },
- {3571,3571, 0, 0, 40000, 0,0.000000 },
- {3572,3572, 0, 0, 40000, 186,0.000000 },
- {3573,3573, 0, 0, 126, 126,0.000000 },
- {3574,3574, 0, 0, 40000, 106,0.000000 },
- {3575,3575, 0, 0, 166, 166,0.000000 },
- {3576,3576, 0, 0, 80, 80,0.000000 },
- {3577,3577, 0, 0, 453, 13,0.000000 },
- {3578,3578, 0, 0, 40000, 0,0.000000 },
- {3579,3579, 0, 0, 40000, 6,0.000000 },
- {3580,3580, 0, 0, 2020, 2020,0.000000 },
- {3581,3581, 0, 0, 1646, 1646,0.000000 },
- {3582,3582, 0, 0, 166, 166,0.000000 },
- {3583,3583, 0, 0, 40000, 0,0.000000 },
- {3584,3584, 0, 0, 146, 146,0.000000 },
- {3585,3585, 0, 0, 340, 340,0.000000 },
- {3586,3586, 0, 0, 40000, 0,0.000000 },
- {3587,3587, 0, 0, 100, 13,0.000000 },
- {3588,3588, 0, 0, 5013, 5013,0.000000 },
- {3589,3589, 0, 0, 40000, 6,0.000000 },
- {3590,3590, 0, 0, 1766, 1766,0.000000 },
- {3591,3591, 0, 0, 4186, 4186,0.000000 },
- {3592,3592, 0, 0, 700, 700,0.000000 },
- {3593,3593, 0, 0, 940, 940,0.000000 },
- {3594,3594, 0, 0, 246, 246,0.000000 },
- {3595,3595, 0, 0, 40000, 6,0.000000 },
- {3596,3596, 0, 0, 40000, 6,0.000000 },
- {3597,3597, 0, 0, 40000, 6,0.000000 },
- {3598,3598, 0, 0, 40000, 0,0.000000 },
- {3599,3599, 0, 0, 40000, 306,0.000000 },
- {3600,3600, 0, 0, 40000, 53,0.000000 },
- {3601,3601, 0, 0, 40000, 6,0.000000 },
- {3602,3602, 0, 0, 40000, 233,0.000000 },
- {3603,3603, 0, 0, 120, 120,0.000000 },
- {3604,3604, 0, 0, 40000, 6,0.000000 },
- {3605,3605, 0, 0, 40000, 153,0.000000 },
- {3606,3606, 0, 0, 1086, 1086,0.000000 },
- {3607,3607, 0, 0, 1900, 1900,0.000000 },
- {3608,3608, 0, 0, 40000, 0,0.000000 },
- {3609,3609, 0, 0, 40000, 13,0.000000 },
- {3610,3610, 0, 0, 253, 253,0.000000 },
- {3611,3611, 0, 0, 40000, 6,0.000000 },
- {3612,3612, 0, 0, 40000, 126,0.000000 },
- {3613,3613, 0, 0, 3680, 3680,0.000000 },
- {3614,3614, 0, 0, 660, 660,0.000000 },
- {3615,3615, 0, 0, 40000, 206,0.000000 },
- {3616,3616, 0, 0, 40000, 106,0.000000 },
- {3617,3617, 0, 0, 546, 546,0.000000 },
- {3618,3618, 0, 0, 126, 6,0.000000 },
- {3619,3619, 0, 0, 40000, 1306,0.000000 },
- {3620,3620, 0, 0, 1240, 1240,0.000000 },
- {3621,3621, 0, 0, 1400, 1400,0.000000 },
- {3622,3622, 0, 0, 40000, 0,0.000000 },
- {3623,3623, 0, 0, 40000, 0,0.000000 },
- {3624,3624, 0, 0, 40000, 833,0.000000 },
- {3625,3625, 0, 0, 40000, 240,0.000000 },
- {3626,3626, 0, 0, 40000, 1973,0.000000 },
- {3627,3627, 0, 0, 4466, 4466,0.000000 },
- {3628,3628, 0, 0, 13, 13,0.000000 },
- {3629,3629, 0, 0, 40000, 2206,0.000000 },
- {3630,3630, 0, 0, 40000, 1180,0.000000 },
- {3631,3631, 0, 0, 4933, 4933,0.000000 },
- {3632,3632, 0, 0, 200, 200,0.000000 },
- {3633,3633, 0, 0, 1226, 1226,0.000000 },
- {3634,3634, 0, 0, 273, 273,0.000000 },
- {3635,3635, 0, 0, 353, 13,0.000000 },
- {3636,3636, 0, 0, 40000, 6,0.000000 },
- {3637,3637, 0, 0, 60, 60,0.000000 },
- {3638,3638, 0, 0, 160, 160,0.000000 },
- {3639,3639, 0, 0, 313, 313,0.000000 },
- {3640,3640, 0, 0, 46, 46,0.000000 },
- {3641,3641, 0, 0, 313, 313,0.000000 },
- {3642,3642, 0, 0, 40, 40,0.000000 },
- {3643,3643, 0, 0, 86, 86,0.000000 },
- {3644,3644, 0, 0, 46, 46,0.000000 },
- {3645,3645, 0, 0, 146, 146,0.000000 },
- {3646,3646, 0, 0, 146, 146,0.000000 },
- {3647,3647, 0, 0, 220, 220,0.000000 },
- {3648,3648, 0, 0, 86, 86,0.000000 },
- {3649,3649, 0, 0, 40000, 320,0.000000 },
- {3650,3650, 0, 0, 40000, 6,0.000000 },
- {3651,3651, 0, 0, 40000, 0,0.000000 },
- {3652,3652, 0, 0, 300, 300,0.000000 },
- {3653,3653, 0, 0, 2940, 2940,0.000000 },
- {3654,3654, 0, 0, 1233, 1233,0.000000 },
- {3655,3655, 0, 0, 3840, 3840,0.000000 },
- {3656,3656, 0, 0, 2280, 2280,0.000000 },
- {3657,3657, 0, 0, 1793, 1793,0.000000 },
- {3658,3658, 0, 0, 1120, 1120,0.000000 },
- {3659,3659, 0, 0, 1013, 1013,0.000000 },
- {3660,3660, 0, 0, 1233, 1233,0.000000 },
- {3661,3661, 0, 0, 600, 600,0.000000 },
- {3662,3662, 0, 0, 280, 280,0.000000 },
- {3663,3663, 0, 0, 266, 266,0.000000 },
- {3664,3664, 0, 0, 1740, 1740,0.000000 },
- {3665,3665, 0, 0, 246, 246,0.000000 },
- {3666,3666, 0, 0, 140, 140,0.000000 },
- {3667,3667, 0, 0, 1166, 1166,0.000000 },
- {3668,3668, 0, 0, 273, 273,0.000000 },
- {3669,3669, 0, 0, 40000, 0,0.000000 },
- {3670,3670, 0, 0, 40000, 0,0.000000 },
- {3671,3671, 0, 0, 313, 313,0.000000 },
- {3672,3672, 0, 0, 40000, 6,0.000000 },
- {3673,3673, 0, 0, 40000, 133,0.000000 },
- {3674,3674, 0, 0, 40000, 133,0.000000 },
- {3675,3675, 0, 0, 40000, 66,0.000000 },
- {3676,3676, 0, 0, 40000, 133,0.000000 },
- {3677,3677, 0, 0, 940, 940,0.000000 },
- {3678,3678, 0, 0, 760, 760,0.000000 },
- {3679,3679, 0, 0, 1200, 1200,0.000000 },
- {3680,3680, 0, 0, 566, 566,0.000000 },
- {3681,3681, 0, 0, 573, 573,0.000000 },
- {3682,3682, 0, 0, 40000, 0,0.000000 },
- {3683,3683, 0, 0, 1353, 1353,0.000000 },
- {3684,3684, 0, 0, 2226, 2226,0.000000 },
- {3685,3685, 0, 0, 866, 866,0.000000 },
- {3686,3686, 0, 0, 2293, 2293,0.000000 },
- {3687,3687, 0, 0, 2113, 2113,0.000000 },
- {3688,3688, 0, 0, 1280, 1280,0.000000 },
- {3689,3689, 0, 0, 886, 886,0.000000 },
- {3690,3690, 0, 0, 833, 833,0.000000 },
- {3691,3691, 0, 0, 886, 886,0.000000 },
- {3692,3692, 0, 0, 940, 940,0.000000 },
- {3693,3693, 0, 0, 40000, 260,0.000000 },
- {3694,3694, 0, 0, 166, 13,0.000000 },
- {3695,3695, 0, 0, 40000, 26,0.000000 },
- {3696,3696, 0, 0, 146, 146,0.000000 },
- {3697,3697, 0, 0, 40000, 86,0.000000 },
- {3698,3698, 0, 0, 940, 940,0.000000 },
- {3699,3699, 0, 0, 100, 100,0.000000 },
- {3700,3700, 0, 0, 513, 513,0.000000 },
- {3701,3701, 0, 0, 40000, 286,0.000000 },
- {3702,3702, 0, 0, 40000, 133,0.000000 },
- {3703,3703, 0, 0, 40000, 233,0.000000 },
- {3704,3704, 0, 0, 40000, 40,0.000000 },
- {3705,3705, 0, 0, 3413, 3413,0.000000 },
- {3706,3706, 0, 0, 3413, 3413,0.000000 },
- {3707,3707, 0, 0, 253, 253,0.000000 },
- {3708,3708, 0, 0, 60, 73,0.000000 },
- {3709,3709, 0, 0, 40000, 66,0.000000 },
- {3710,3710, 0, 0, 40000, 33,0.000000 },
- {3711,3711, 0, 0, 40000, 0,0.000000 },
- {3712,3712, 0, 0, 40000, 126,0.000000 },
- {3713,3713, 0, 0, 40000, 6,0.000000 },
- {3714,3714, 0, 0, 40000, 0,0.000000 },
- {3715,3715, 0, 0, 40000, 126,0.000000 },
- {3716,3716, 0, 0, 40000, 26,0.000000 },
- {3717,3717, 0, 0, 40000, 20,0.000000 },
- {3718,3718, 0, 0, 40000, 20,0.000000 },
- {3719,3719, 0, 0, 40000, 0,0.000000 },
- {3720,3720, 0, 0, 40000, 0,0.000000 },
- {3721,3721, 0, 0, 40000, 6,0.000000 },
- {3722,3722, 0, 0, 40000, 33,0.000000 },
- {3723,3723, 0, 0, 40000, 6,0.000000 },
- {3724,3724, 0, 0, 40000, 6,0.000000 },
- {3725,3725, 0, 0, 40000, 20,0.000000 },
- {3726,3726, 0, 0, 40000, 33,0.000000 },
- {3727,3727, 0, 0, 100, 100,0.000000 },
- {3728,3728, 0, 0, 40000, 26,0.000000 },
- {3729,3729, 0, 0, 40000, 26,0.000000 },
- {3730,3730, 0, 0, 40000, 53,0.000000 },
- {3731,3731, 0, 0, 40000, 0,0.000000 },
- {3732,3732, 0, 0, 40000, 0,0.000000 },
- {3733,3733, 0, 0, 40000, 26,0.000000 },
- {3734,3734, 0, 0, 40000, 13,0.000000 },
- {3735,3735, 0, 0, 40000, 6,0.000000 },
- {3736,3736, 0, 0, 3766, 3766,0.000000 },
- {3737,3737, 0, 0, 40000, 140,0.000000 },
- {3738,3738, 0, 0, 40000, 13,0.000000 },
- {3739,3739, 0, 0, 40000, 233,0.000000 },
- {3740,3740, 0, 0, 40000, 413,0.000000 },
- {3741,3741, 0, 0, 1873, 26,0.000000 },
- {3742,3742, 0, 0, 40000, 566,0.000000 },
- {3743,3743, 0, 0, 753, 753,0.000000 },
- {3744,3744, 0, 0, 1166, 13,0.000000 },
- {3745,3745, 0, 0, 40000, 566,0.000000 },
- {3746,3746, 0, 0, 40000, 53,0.000000 },
- {3747,3747, 0, 0, 1020, 1020,0.000000 },
- {3748,3748, 0, 0, 40000, 340,0.000000 },
- {3749,3749, 0, 0, 440, 440,0.000000 },
- {3750,3750, 0, 0, 40000, 106,0.000000 },
- {3751,3751, 0, 0, 2286, 2286,0.000000 },
- {3752,3752, 0, 0, 40000, 966,0.000000 },
- {3753,3753, 0, 0, 40000, 766,0.000000 },
- {3754,3754, 0, 0, 40000, 6,0.000000 },
- {3755,3755, 0, 0, 4933, 4933,0.000000 },
- {3756,3756, 0, 0, 1126, 1126,0.000000 },
- {3757,3757, 0, 0, 273, 273,0.000000 },
- {3758,3758, 0, 0, 546, 546,0.000000 },
- {3759,3759, 0, 0, 280, 280,0.000000 },
- {3760,3760, 0, 0, 40000, 6,0.000000 },
- {3761,3761, 0, 0, 40000, 6,0.000000 },
- {3762,3762, 0, 0, 40000, 0,0.000000 },
- {3763,3763, 0, 0, 1106, 1106,0.000000 },
- {3764,3764, 0, 0, 86, 86,0.000000 },
- {3765,3765, 0, 0, 280, 280,0.000000 },
- {3766,3766, 0, 0, 53, 53,0.000000 },
- {3767,3767, 0, 0, 40, 40,0.000000 },
- {3768,3768, 0, 0, 60, 60,0.000000 },
- {3769,3769, 0, 0, 253, 253,0.000000 },
- {3770,3770, 0, 0, 1213, 1213,0.000000 },
- {3771,3771, 0, 0, 293, 293,0.000000 },
- {3772,3772, 0, 0, 153, 153,0.000000 },
- {3773,3773, 0, 0, 4586, 4586,0.000000 },
- {3774,3774, 0, 0, 146, 146,0.000000 },
- {3775,3775, 0, 0, 40000, 0,0.000000 },
- {3776,3776, 0, 0, 146, 146,0.000000 },
- {3777,3777, 0, 0, 40000, 113,0.000000 },
- {3778,3778, 0, 0, 153, 153,0.000000 },
- {3779,3779, 0, 0, 1726, 13,0.000000 },
- { 738, 738, 44, 0, 40, 40,0.000000 },
- {3780,3780, 36, 0, 33, 33,0.000000 },
- {3781,3781, 32, 0, 6, 6,0.000000 },
- {2030,2030, 60, 0, 86, 86,0.000000 },
- {3782,3782, 24, 0, 6, 6,0.000000 },
- {3783,3783, 60, 0, 26, 26,0.000000 },
- {3784,3784, 44, 0, 140, 140,0.000000 },
- { 132, 132, 44, 0, 20, 20,0.000000 },
- {3785,3785, 47, 0, 153, 153,0.000000 },
- { 152, 152, 44, 0, 86, 86,0.000000 },
- {3784,3784, 50, 0, 160, 160,0.000000 },
- { 139, 139, 44, 0, 86, 86,0.000000 },
- {3784,3784, 54, 0, 160, 160,0.000000 },
- {3784,3784, 57, 0, 160, 160,0.000000 },
- {3786,3786, 60, 0, 606, 606,0.000000 },
- {3784,3784, 60, 0, 166, 166,0.000000 },
- {3787,3787, 60, 0, 606, 606,0.000000 },
- {3788,3788, 60, 0, 626, 626,0.000000 },
- {3789,3789, 60, 0, 626, 626,0.000000 },
- {3790,3790, 60, 0, 606, 606,0.000000 },
- {3791,3791, 44, 0, 300, 300,0.000000 },
- {2037,2037, 44, 0, 40, 40,0.000000 },
- { 144, 144, 44, 0, 40, 40,0.000000 },
- {2038,2038, 44, 0, 13, 13,0.000000 },
- {3792,3792, 44, 0, 33, 33,0.000000 },
- {3793,3793, 44, 0, 60, 60,0.000000 },
- {3794,3794, 45, 0, 80, 80,0.000000 },
- {3795,3795, 33, 0, 100, 100,0.000000 },
- {3796,3796, 56, 0, 153, 153,0.000000 },
- {3796,3796, 51, 0, 153, 153,0.000000 },
- {3797,3797, 44, 0, 40, 40,0.000000 },
- {3798,3798, 44, 0, 200, 200,0.000000 },
- {3534,3534, 56, 0, 73, 73,0.000000 },
- { 158, 158, 68, 0, 20, 20,0.000000 },
- {3799,3799, 51, 0, 160, 160,0.000000 },
- {3800,3800, 46, 0, 153, 153,0.000000 },
- {3801,3801, 44, 0, 160, 160,0.000000 },
- {3802,3802, 44, 0, 1233, 1233,0.000000 },
- { 152, 152, 45, 0, 80, 80,0.000000 },
- {3803,3803, 0, 0, 40000, 20,0.000000 },
- {3804,3804, 0, 0, 40000, 66,0.000000 },
- {3805,3805, 0, 0, 40000, 0,0.000000 },
- {3806,3806, 0, 0, 40000, 0,0.000000 },
- {3807,3807, 0, 0, 40000, 20,0.000000 },
- {3808,3808, 0, 0, 1226, 1226,0.000000 },
- {3809,3809, 0, 0, 546, 546,0.000000 },
- {3810,3810, 0, 0, 280, 280,0.000000 },
- {3811,3811, 0, 0, 60, 60,0.000000 },
- {3812,3812, 0, 0, 1213, 1213,0.000000 },
- {3780,3780, 45, 0, 440, 440,0.000000 },
- {3061,3061, 45, 0, 606, 606,0.000000 },
- {3813,3813, 60, 0, 20, 20,0.000000 },
- {3781,3781, 60, 0, 6, 6,0.000000 },
- {3814,3814, 44, 0, 173, 173,0.000000 },
- {3815,3815, 57, 0, 46, 46,0.000000 },
- {3816,3816, 56, 0, 73, 73,0.000000 },
- {3817,3817, 60, 0, 20, 20,0.000000 },
- {3818,3818, 60, 0, 20, 20,0.000000 },
- {3517,3517, 45, 0, 40, 40,0.000000 },
- {3819,3819, 0, 0, 820, 820,0.000000 },
- {3820,3820, 0, 0, 573, 573,0.000000 },
- {3821,3821, 0, 0, 473, 473,0.000000 },
- {3822,3822, 0, 0, 1020, 1020,0.000000 },
- {3823,3823, 0, 0, 40000, 393,0.000000 },
- {3824,3825, 0, 1, 40000, 266,0.078125 },
- {3826,3826, 0, 0, 3833, 13,0.000000 },
- {3827,3827, 0, 0, 40000, 406,0.000000 },
- {3828,1172, 0, 1, 40000, 320,0.156250 },
- {3829,3829, 0, 0, 40000, 13,0.000000 },
- {3830,3830, 0, 0, 120, 120,0.000000 },
- {3831,3831, 32, 0, 20, 20,0.000000 },
- {3832,3832, 36, 0, 46, 46,0.000000 },
- {3833,3833, 88, 0, 93, 93,0.000000 },
- {3834,3834, 0, 0, 1660, 1660,0.000000 },
- {3835,3835, 0, 0, 1746, 1746,0.000000 },
- {3836,3836, 0, 0, 1980, 1980,0.000000 },
- {3837,3837, 0, 0, 1553, 1553,0.000000 },
- {3838,3838, 0, 0, 1233, 1233,0.000000 },
- {3839,3839, 0, 0, 1980, 1980,0.000000 },
- {3840,3840, 0, 0, 940, 940,0.000000 },
- {3841,3841, 0, 0, 1740, 1740,0.000000 },
- {3842,3842, 0, 0, 40000, 133,0.000000 },
- {3843,3843, 0, 0, 40000, 26,0.000000 },
- {3844,3844, 0, 0, 40000, 60,0.000000 },
- {3845,3845, 0, 0, 40000, 320,0.000000 },
- {3846,3846, 0, 0, 40000, 53,0.000000 },
- {3847,3847, 0, 0, 40000, 160,0.000000 },
- {3848,3848, 0, 0, 40000, 106,0.000000 },
- {3849,3849, 0, 0, 1026, 1026,0.000000 },
- {3850,3850, 0, 0, 1826, 1826,0.000000 },
- {3851,3851, 0, 0, 1813, 1813,0.000000 },
- {3852,3852, 0, 0, 1013, 1013,0.000000 },
- {3853,3853, 0, 0, 40000, 0,0.000000 },
- {3854,3854, 0, 0, 40000, 53,0.000000 },
- {3855,3855, 0, 0, 40000, 53,0.000000 },
- {3856,3856, 0, 0, 4200, 4200,0.000000 },
- {3857,3857, 0, 0, 40000, 106,0.000000 },
- {3858,3858, 0, 0, 1746, 1746,0.000000 },
- {3859,3859, 0, 0, 40000, 120,0.000000 },
- {3860,3860, 0, 0, 2400, 2400,0.000000 },
- {3861,3861, 0, 0, 4606, 4606,0.000000 },
- {3862,3862, 0, 0, 1740, 1740,0.000000 },
- {3863,3863, 0, 0, 40000, 66,0.000000 },
- {3864,3864, 0, 0, 40000, 46,0.000000 },
- {3865,3865, 0, 0, 40000, 66,0.000000 },
- {3866,3866, 0, 0, 40000, 26,0.000000 },
- {3867,3867, 0, 0, 40000, 293,0.000000 },
- {3868,3868, 0, 0, 40000, 133,0.000000 },
- {3869,3869, 0, 0, 333, 333,0.000000 },
- {3870,3870, 0, 0, 993, 993,0.000000 },
- {3871,3871, 0, 0, 40000, 280,0.000000 },
- {3872,3872, 0, 0, 1766, 13,0.000000 },
- {3873,3873, 0, 0, 40000, 820,0.000000 },
- {3874,3874, 0, 0, 40000, 286,0.000000 },
- {3875,3875, 0, 0, 40000, 580,0.000000 },
- {3876,3876, 0, 0, 2300, 2300,0.000000 },
- {3877,3877, 0, 0, 40000, 146,0.000000 },
- {3878,3878, 0, 0, 40000, 6,0.000000 },
- {3879,3879, 0, 0, 40000, 66,0.000000 },
- {3880,3880, 0, 0, 40000, 6,0.000000 },
- {3881,3881, 0, 0, 40000, 6,0.000000 },
- {3882,3882, 0, 0, 40000, 126,0.000000 },
- {3883,3883, 0, 0, 40000, 33,0.000000 },
- {3884,3884, 0, 0, 40000, 53,0.000000 },
- {3885,3885, 0, 0, 40000, 93,0.000000 },
- {3886,3886, 0, 0, 40000, 73,0.000000 },
- {3887,3887, 0, 0, 40000, 66,0.000000 },
- {3888,3888, 0, 0, 40000, 86,0.000000 },
- {3889,3889, 0, 0, 40000, 46,0.000000 },
- {3890,3890, 0, 0, 3940, 13,0.000000 },
- {3891,3891, 0, 0, 40000, 33,0.000000 },
- {3892,3892, 0, 0, 40000, 53,0.000000 },
- {3893,3893, 0, 0, 40000, 53,0.000000 },
- {3894,3894, 0, 0, 40000, 73,0.000000 },
- {3895,3895, 0, 0, 40000, 126,0.000000 },
- {3896,3896, 0, 0, 40000, 60,0.000000 },
- {3897,3897, 0, 0, 40000, 106,0.000000 },
- {3898,3898, 0, 0, 40000, 6,0.000000 },
- {3899,3899, 0, 0, 40000, 266,0.000000 },
- {3900,3900, 0, 0, 40000, 53,0.000000 },
- {3901,3901, 0, 0, 40000, 233,0.000000 },
- {3902,3902, 0, 0, 1660, 180,0.000000 },
- {3903,3903, 0, 0, 40000, 566,0.000000 },
- {3904,3904, 0, 0, 40000, 100,0.000000 },
- {3905,3905, 0, 0, 593, 13,0.000000 },
- {3906,3906, 0, 0, 40000, 173,0.000000 },
- {3907,3907, 0, 0, 40000, 53,0.000000 },
- {3908,3908, 0, 0, 40000, 106,0.000000 },
- {3909,3909, 0, 0, 2133, 2133,0.000000 },
- {3910,3910, 0, 0, 40000, 846,0.000000 },
- {3911,3911, 0, 0, 40000, 773,0.000000 },
- {3912,3912, 0, 0, 1066, 1066,0.000000 },
- {3913,3913, 0, 0, 40000, 73,0.000000 },
- {3914,3914, 0, 0, 40000, 86,0.000000 },
- {3915,3915, 0, 0, 40000, 46,0.000000 },
- {3916,3916, 0, 0, 1126, 1126,0.000000 },
- {3917,3917, 0, 0, 40000, 13,0.000000 },
- {3918,3918, 0, 0, 300, 300,0.000000 },
- {3919,3919, 0, 0, 146, 146,0.000000 },
- {3920,3920, 0, 0, 140, 140,0.000000 },
- {3921,3921, 0, 0, 1920, 1920,0.000000 },
- {3922,3922, 0, 0, 40000, 0,0.000000 },
- {3923,3923, 0, 0, 533, 533,0.000000 },
- {3924,3924, 0, 0, 486, 486,0.000000 },
- {3925,3925, 0, 0, 940, 940,0.000000 },
- {3926,3926, 0, 0, 600, 600,0.000000 },
- {3927,3927, 0, 0, 253, 253,0.000000 },
- {3928,3928, 0, 0, 380, 73,0.000000 },
- {3929,3929, 0, 0, 40, 40,0.000000 },
- {3930,3930, 0, 0, 40000, 20,0.000000 },
- {3931,3931, 0, 0, 40000, 13,0.000000 },
- {3932,3932, 0, 0, 4600, 4600,0.000000 },
- {3933,3933, 0, 0, 4820, 4820,0.000000 },
- { 523, 523, 0, 0, 46, 46,0.000000 },
- {3934,3934, 0, 0, 66, 66,0.000000 },
- {3935,3935, 0, 0, 53, 53,0.000000 },
- {3936,3936, 48, 0, 26, 26,0.000000 },
- {3937,3937, 27, 0, 53, 53,0.000000 },
- {3938,3938, 40, 0, 40, 40,0.000000 },
- {3939,3939, 48, 0, 13, 13,0.000000 },
- {3938,3938, 45, 0, 46, 46,0.000000 },
- {3940,3940, 48, 0, 26, 26,0.000000 },
- {3938,3938, 47, 0, 66, 66,0.000000 },
- {3941,3941, 48, 0, 13, 13,0.000000 },
- {3938,3938, 49, 0, 73, 73,0.000000 },
- {3938,3938, 53, 0, 80, 80,0.000000 },
- {3938,3938, 56, 0, 66, 66,0.000000 },
- { 129, 129, 52, 0, 73, 73,0.000000 },
- { 130, 130, 48, 0, 40, 40,0.000000 },
- { 129, 129, 58, 0, 73, 73,0.000000 },
- { 132, 132, 47, 0, 20, 20,0.000000 },
- { 492, 492, 43, 0, 26, 26,0.000000 },
- { 132, 132, 49, 0, 20, 20,0.000000 },
- { 132, 132, 51, 0, 20, 20,0.000000 },
- { 132, 132, 54, 0, 20, 20,0.000000 },
- { 132, 132, 57, 0, 13, 13,0.000000 },
- { 492, 492, 72, 0, 140, 140,0.000000 },
- { 137, 137, 76, 0, 600, 600,0.000000 },
- { 138, 138, 84, 0, 246, 246,0.000000 },
- { 139, 139, 36, 0, 113, 113,0.000000 },
- { 140, 140, 76, 0, 586, 586,0.000000 },
- { 141, 141, 84, 0, 60, 60,0.000000 },
- { 135, 135, 83, 0, 413, 413,0.000000 },
- { 142, 142, 84, 0, 106, 106,0.000000 },
- {3942,3942, 24, 0, 600, 600,0.000000 },
- { 137, 137, 77, 0, 606, 606,0.000000 },
- { 144, 144, 60, 0, 40, 40,0.000000 },
- { 145, 145, 65, 0, 13, 13,0.000000 },
- { 146, 146, 59, 0, 40, 40,0.000000 },
- { 147, 147, 51, 0, 40, 40,0.000000 },
- { 148, 148, 45, 0, 46, 46,0.000000 },
- { 149, 149, 71, 0, 140, 140,0.000000 },
- { 150, 150, 60, 0, 146, 146,0.000000 },
- { 151, 151, 58, 0, 153, 153,0.000000 },
- { 152, 152, 53, 0, 80, 80,0.000000 },
- { 153, 153, 64, 0, 13, 13,0.000000 },
- { 154, 154, 71, 0, 273, 273,0.000000 },
- { 156, 156, 61, 0, 53, 53,0.000000 },
- { 158, 158, 48, 0, 40, 40,0.000000 },
- { 159, 159, 69, 0, 20, 20,0.000000 },
- { 160, 160, 68, 0, 20, 20,0.000000 },
- { 161, 161, 63, 0, 113, 113,0.000000 },
- { 162, 162, 74, 0, 293, 293,0.000000 },
- { 163, 163, 60, 0, 113, 113,0.000000 },
- { 164, 164, 80, 0, 440, 440,0.000000 },
- { 165, 165, 64, 0, 40, 40,0.000000 },
- { 166, 166, 69, 0, 286, 286,0.000000 },
- { 167, 167, 73, 0, 126, 126,0.000000 },
- { 168, 168, 75, 0, 20, 20,0.000000 },
- { 169, 169, 68, 0, 33, 33,0.000000 },
- { 131, 131, 48, 0, 93, 93,0.000000 },
- {3061,3061, 53, 0, 833, 833,0.000000 },
- {3943,3944, 0, 0, 546, 546,0.000000 },
- {3945,3946, 0, 0, 1813, 1813,0.000000 },
- { 174,3947, 0, 0, 1260, 1260,0.000000 },
- {3948,3949, 0, 0, 160, 160,0.000000 },
- { 9,3950, 0, 0, 1100, 1100,0.000000 },
- {3951,3952, 0, 0, 3360, 3360,0.000000 },
- {3953,3954, 0, 0, 1720, 1720,0.000000 },
- { 15,3955, 0, 0, 226, 226,0.000000 },
- {3956,3957, 0, 0, 40000, 6,0.000000 },
- {3958,3959, 0, 0, 40000, 6,0.000000 },
- {3960,3961, 0, 0, 40000, 186,0.000000 },
- {3962,3963, 0, 0, 40000, 6,0.000000 },
- {3964,3965, 0, 0, 146, 146,0.000000 },
- {3966,3965, 0, 0, 146, 146,0.000000 },
- { 31,3967, 0, 0, 3386, 3386,0.000000 },
- {3968,3969, 0, 0, 3520, 3520,0.000000 },
- {3970,3971, 0, 0, 126, 0,0.000000 },
- {3972,3971, 0, 0, 126, 0,0.000000 },
- {3973,3974, 0, 0, 1013, 1013,0.000000 },
- {3975,3976, 0, 0, 3733, 3733,0.000000 },
- {3977,3976, 0, 0, 3733, 3733,0.000000 },
- {3978,3979, 0, 0, 3020, 3020,0.000000 },
- {3980,3981, 0, 0, 686, 686,0.000000 },
- {3982,3983, 0, 0, 40000, 46,0.000000 },
- {3984,3985, 0, 0, 40000, 373,0.000000 },
- { 54,3986, 0, 0, 340, 340,0.000000 },
- {3987,3988, 0, 0, 1213, 6,0.000000 },
- {3989,3990, 0, 0, 40000, 53,0.000000 },
- {3991, 253, 0, 0, 40000, 126,0.000000 },
- {3992,3992, 0, 0, 40, 40,0.000000 },
- {3993,3993, 0, 0, 40000, 53,0.000000 },
- {3994,3995, 0, 0, 40000, 13,0.000000 },
- {3996,3997, 0, 0, 40000, 40,0.000000 },
- {3998,3999, 0, 0, 40000, 13,0.000000 },
- {1503,4000, 0, 0, 40000, 33,0.000000 },
- { 88,4001, 0, 0, 40000, 500,0.000000 },
- {3743,4002, 0, 0, 900, 900,0.000000 },
- { 92,4003, 0, 0, 1720, 13,0.000000 },
- { 93,4004, 0, 0, 1060, 80,0.000000 },
- { 94,4005, 0, 0, 40000, 53,0.000000 },
- { 96,4006, 0, 0, 1913, 533,0.000000 },
- { 103,4007, 0, 0, 1813, 1813,0.000000 },
- { 104,4008, 0, 0, 846, 846,0.000000 },
- { 105,4009, 0, 0, 900, 900,0.000000 },
- { 107,4010, 0, 0, 300, 300,0.000000 },
- { 108,4011, 0, 0, 40000, 6,0.000000 },
- { 110,4012, 0, 0, 40000, 6,0.000000 },
- { 111,4013, 0, 0, 1126, 1126,0.000000 },
- {4014,4015, 0, 0, 140, 140,0.000000 },
- { 115,4016, 0, 0, 146, 146,0.000000 },
- { 118,4017, 0, 0, 2280, 2280,0.000000 },
- { 119,4018, 0, 0, 286, 286,0.000000 },
- { 120,4019, 0, 0, 586, 586,0.000000 },
- { 121,4020, 0, 0, 4426, 4426,0.000000 },
- { 123,4021, 0, 0, 193, 193,0.000000 },
- { 124,4022, 0, 0, 146, 260,0.000000 },
- { 125,4023, 0, 0, 40000, 773,0.000000 },
- {4024,4024, 35, 0, 40, 40,0.000000 },
- {4025,4026, 38, 1, 93, 93,0.000000 },
- {4027,4028, 38, 1, 120, 120,0.000000 },
- {4029,4030, 48, 1, 73, 73,-1.906250 },
- {4031,4031, 51, 0, 26, 26,0.000000 },
- {4032,4033, 48, 1, 293, 293,-1.906250 },
- {4034,4034, 61, 1, 1873, 1873,0.093750 },
- {3369,1557, 70, 0, 906, 906,0.000000 },
- {4035,4036, 79, 1, 293, 293,0.078125 },
- {4037,4037, 62, 0, 1726, 1726,0.000000 },
- {4038,4039, 67, 1, 240, 240,0.078125 },
- {4040,4040, 62, 1, 2040, 2040,0.093750 },
- {4041,4042, 54, 1, 80, 80,0.000000 },
- {4041,4043, 48, 1, 80, 80,0.000000 },
- { 389, 389, 42, 0, 180, 180,0.000000 },
- {4044,4045, 48, 1, 80, 80,0.000000 },
- {4046,4047, 48, 1, 53, 53,0.000000 },
- {4048,4048, 16, 0, 20, 20,0.000000 },
- {4049,4049, 16, 0, 146, 146,0.000000 },
- {4050,4051, 64, 0, 646, 646,0.000000 },
- { 844, 844,244, 0, 13, 13,0.000000 },
- { 855, 855,244, 0, 246, 6,0.000000 },
- { 880, 880,232, 0, 46, 46,0.000000 },
- { 882, 882,220, 0, 5433, 5433,0.000000 },
- { 887, 887, 35, 0, 46, 46,0.000000 },
- { 884, 884, 35, 0, 73, 73,0.000000 },
- { 885, 885, 35, 0, 73, 73,0.000000 },
- { 886, 886, 35, 0, 20, 20,0.000000 },
- { 361, 361, 35, 0, 113, 113,0.000000 },
- { 767, 767, 35, 0, 760, 760,0.000000 },
- { 888, 888, 35, 0, 40, 40,0.000000 },
- {2141,2141, 35, 0, 53, 53,0.000000 },
- { 891, 891, 35, 0, 106, 106,0.000000 },
- {2142,2142, 35, 0, 53, 53,0.000000 },
- {2143,2143, 35, 0, 73, 73,0.000000 },
- {2144,2144, 35, 0, 800, 800,0.000000 },
- {2145,2145, 35, 0, 420, 420,0.000000 },
- { 376, 376, 35, 0, 146, 146,0.000000 },
- { 895, 895, 35, 0, 126, 126,0.000000 },
- {2146,2146, 35, 0, 100, 100,0.000000 },
- { 382, 382, 35, 0, 20, 20,0.000000 },
- {2147,2147, 35, 0, 20, 20,0.000000 },
- { 898, 898, 35, 0, 60, 60,0.000000 },
- { 899, 899, 35, 0, 206, 206,0.000000 },
- { 900, 900, 35, 0, 193, 193,0.000000 },
- { 871, 871, 35, 0, 120, 120,0.000000 },
- { 388, 388, 35, 0, 73, 73,0.000000 },
- { 901, 901, 35, 0, 173, 173,0.000000 },
- { 902, 902, 35, 0, 1006, 1006,0.000000 },
- { 903, 903, 35, 0, 40, 40,0.000000 },
- {3500,3500, 35, 0, 5233, 6,0.000000 },
- {4052,4052, 0, 0, 1400, 1400,0.000000 },
- {4053,4053, 0, 0, 1206, 1206,0.000000 },
- {4054,4054, 0, 0, 40000, 46,0.000000 },
- {4055,4055, 0, 0, 40000, 26,0.000000 },
- {4056,4056, 0, 0, 3600, 3600,0.000000 },
- {4057,4057, 0, 0, 40000, 6,0.000000 },
- {4058,4058, 0, 0, 960, 960,0.000000 },
- {4059,4059, 0, 0, 80, 80,0.000000 },
- {4060,4060, 0, 0, 40000, 20,0.000000 },
- {4061,4061, 0, 0, 40000, 20,0.000000 },
- {4062,4062, 0, 0, 4473, 4473,0.000000 },
- {4063,4063, 0, 0, 380, 6,0.000000 },
- {4064,4064, 0, 0, 40000, 20,0.000000 },
- {4065,4065, 0, 0, 4593, 4593,0.000000 },
- {4066,4066, 0, 0, 40000, 20,0.000000 },
- {4067,4067, 0, 0, 40000, 0,0.000000 },
- {4068,4068, 0, 0, 40, 40,0.000000 },
- {4069,4069, 0, 0, 60, 60,0.000000 },
- {4070,4070, 0, 0, 100, 100,0.000000 },
- {4071,4071, 0, 0, 40000, 40,0.000000 },
- {4072,4072, 0, 0, 126, 126,0.000000 },
- {4073,4073, 0, 0, 40, 40,0.000000 },
- {4074,4074, 0, 0, 40000, 0,0.000000 },
- {4075,4075, 0, 0, 4193, 4193,0.000000 },
- {4076,4076, 0, 0, 806, 0,0.000000 },
- {4077,4077, 0, 0, 526, 526,0.000000 },
- {4078,4078, 0, 0, 40000, 73,0.000000 },
- {4079,4079, 0, 0, 40000, 6,0.000000 },
- {4080,4080, 0, 0, 40000, 153,0.000000 },
- {4081,4081, 0, 0, 40000, 0,0.000000 },
- {4082,4082, 0, 0, 40, 6,0.000000 },
- {4083,4083, 0, 0, 3400, 0,0.000000 },
- {4084,4084, 0, 0, 2280, 0,0.000000 },
- {4085,4085, 0, 0, 40000, 426,0.000000 },
- {4086,4086, 0, 0, 1206, 1206,0.000000 },
- { 127, 127, 36, 0, 20, 20,0.000000 },
- {4087,4087, 36, 0, 6, 6,0.000000 },
- {2030,2030, 36, 0, 93, 93,0.000000 },
- {3782,3782, 48, 0, 6, 6,0.000000 },
- {3783,3783, 36, 0, 33, 33,0.000000 },
- {4088,4088, 48, 0, 246, 246,0.000000 },
- { 132, 132, 69, 0, 13, 13,0.000000 },
- {4088,4088, 52, 0, 360, 360,0.000000 },
- { 152, 152, 48, 0, 86, 86,0.000000 },
- {4088,4088, 55, 0, 493, 493,0.000000 },
- { 139, 139, 57, 0, 93, 93,0.000000 },
- {4088,4088, 58, 0, 560, 560,0.000000 },
- {4088,4088, 60, 0, 580, 580,0.000000 },
- {4089,4089, 62, 0, 840, 840,0.000000 },
- {4088,4088, 63, 0, 626, 626,0.000000 },
- { 134, 134, 70, 0, 140, 140,0.000000 },
- {4090,4090, 70, 0, 286, 286,0.000000 },
- {4091,4091, 53, 0, 613, 613,0.000000 },
- {3516,3516, 48, 0, 40, 40,0.000000 },
- {4092,4092, 84, 0, 420, 420,0.000000 },
- {4093,4093, 43, 0, 160, 160,0.000000 },
- {4094,4094, 56, 0, 326, 326,0.000000 },
- {3791,3791, 24, 0, 140, 140,0.000000 },
- { 134, 134, 65, 0, 160, 160,0.000000 },
- { 146, 146, 48, 0, 40, 40,0.000000 },
- { 146, 146, 54, 0, 40, 40,0.000000 },
- {4095,4095, 42, 0, 46, 46,0.000000 },
- {4095,4095, 39, 0, 46, 46,0.000000 },
- {3816,3816, 52, 0, 106, 106,0.000000 },
- {4096,4096, 52, 0, 200, 200,0.000000 },
- { 158, 158, 60, 0, 33, 33,0.000000 },
- { 158, 158, 66, 0, 33, 33,0.000000 },
- { 158, 158, 59, 0, 33, 33,0.000000 },
- {3538,3538, 91, 0, 273, 273,0.000000 },
- {3547,3547,109, 0, 1780, 1780,0.000000 },
- {4097,4097, 79, 0, 126, 126,0.000000 },
- {4098,4098, 0, 0, 3413, 3413,0.000000 },
- {4099,4100, 0, 1, 1613, 1613,0.031250 },
- {4101,4102, 0, 1, 2146, 2146,0.031250 },
- {4103,4104, 0, 1, 1646, 1646,0.046875 },
- {4105,4106, 0, 1, 1900, 1900,0.156250 },
- {4107,4108, 0, 1, 1473, 1473,0.046875 },
- {4109,4110, 0, 1, 1020, 1020,0.062500 },
- {4111,4112, 0, 1, 2126, 2126,0.000000 },
- {4113,4114, 0, 1, 1740, 1740,0.000000 },
- {4115,4116, 0, 1, 993, 993,0.000025 },
- {4117,4118, 0, 1, 886, 886,0.000000 },
- {4119,4120, 0, 1, 1153, 1153,0.046875 },
- {4121,4122, 0, 1, 1420, 1420,0.000000 },
- {4123,4124, 0, 1, 193, 193,0.000000 },
- {4125,4126, 0, 1, 406, 406,0.000000 },
- {4127,4128, 0, 1, 1400, 1400,0.031250 },
- {4129,4129, 0, 1, 980, 980,0.031250 },
- {4130,4131, 0, 1, 40000, 6,0.156250 },
- {4132,4133, 0, 1, 40, 13,0.078125 },
- {4134,4135, 0, 1, 7180, 13,0.156250 },
- {4136,4137, 0, 1, 40000, 180,0.031250 },
- {4138,4139, 0, 1, 40000, 46,0.062500 },
- {4140,4141, 0, 1, 40000, 46,0.140625 },
- {4142,4143, 0, 1, 40000, 6,0.000000 },
- {4144,4145, 0, 1, 40000, 153,0.109375 },
- {4146,4147, 0, 1, 920, 920,0.000000 },
- {4148,4149, 0, 1, 653, 653,0.000025 },
- {4150,4151, 0, 1, 633, 633,0.000000 },
- {4152,4153, 0, 1, 893, 893,0.046875 },
- {4154,4155, 0, 1, 440, 440,0.000000 },
- {4156,4157, 0, 1, 40000, 60,-1.906250 },
- {4158,4159, 0, 1, 40000, 60,-1.906250 },
- {4160,4161, 0, 1, 2033, 2033,0.234375 },
- {4162,4163, 0, 1, 1900, 1900,0.031250 },
- {4164,4165, 0, 1, 1453, 1453,0.000000 },
- {4166,4167, 0, 1, 2186, 2186,0.000000 },
- {4168,4169, 0, 1, 1933, 1933,0.046875 },
- {4170,4171, 0, 1, 633, 633,0.000000 },
- {4172,4173, 0, 1, 486, 486,0.000000 },
- {4174,4174, 0, 0, 313, 313,0.000000 },
- {4175,4176, 0, 1, 2533, 2533,0.078125 },
- {4177,4178, 0, 1, 2040, 13,0.000000 },
- {4179,4179, 0, 0, 40000, 66,0.000000 },
- {4180,4181, 0, 1, 40000, 60,0.000025 },
- {4182,4182, 0, 0, 40000, 133,0.000000 },
- {4183,4184, 0, 1, 40000, 173,0.078125 },
- {4185,4186, 0, 1, 333, 333,0.109375 },
- {4187,4188, 0, 1, 1813, 1813,0.031250 },
- {4189,4190, 0, 1, 1473, 1473,0.031250 },
- {4191,4192, 0, 1, 40000, 213,0.062500 },
- {4193,4194, 0, 1, 40000, 500,-0.062500 },
- {4195,4195, 0, 1, 40000, 326,0.109375 },
- {4196,4196, 0, 1, 40000, 406,0.109375 },
- {4197,4198, 0, 1, 40000, 280,0.140625 },
- {4199,4200, 0, 1, 40000, 53,0.140625 },
- {4201,4202, 0, 1, 40000, 286,0.156250 },
- {4203,4204, 0, 1, 206, 206,0.125000 },
- {4205,4206, 0, 1, 40000, 26,0.000000 },
- {4207,4208, 0, 1, 40000, 20,0.031250 },
- {4209,4209, 0, 0, 40000, 6,0.000000 },
- {4210,4210, 0, 0, 40000, 20,0.000000 },
- {4211,4212, 0, 1, 40000, 160,0.031250 },
- {4213,4214, 0, 1, 40000, 73,0.062500 },
- {4215,4216, 0, 1, 2526, 2526,0.093750 },
- {4217,4217, 0, 1, 5153, 5153,0.125000 },
- {4218,4219, 0, 1, 40000, 73,0.000000 },
- {4220,4220, 0, 0, 40000, 60,0.000000 },
- {4221,4221, 0, 0, 40000, 0,0.000000 },
- {4222,4222, 0, 0, 40000, 0,0.000000 },
- {4223,4224, 0, 1, 40000, 73,0.000000 },
- {4225,4225, 0, 0, 40000, 33,0.000000 },
- {4226,4226, 0, 0, 40000, 6,0.000000 },
- {4227,4228, 0, 1, 40000, 40,0.000000 },
- {4229,4229, 0, 0, 40000, 0,0.000000 },
- {4230,4230, 0, 0, 40000, 6,0.000000 },
- {4231,4231, 0, 0, 40000, 33,0.000000 },
- {4232,4233, 0, 1, 40000, 53,0.031250 },
- {4234,4235, 0, 1, 40000, 20,0.046875 },
- {4236,4237, 0, 1, 420, 420,0.031250 },
- {4238,4238, 0, 0, 40000, 106,0.000000 },
- {4239,4239, 0, 0, 40000, 6,0.000000 },
- {4240,4241, 0, 1, 40000, 6,0.125000 },
- {4242,4243, 0, 1, 40000, 13,0.109375 },
- {4244,4245, 0, 1, 40000, 53,0.109375 },
- {4246,4247, 0, 1, 226, 6,-0.031250 },
- {4248,4248, 0, 0, 40000, 6,0.000000 },
- {4249,4250, 0, 1, 40000, 133,0.156250 },
- {4251,4252, 0, 1, 4186, 13,0.125000 },
- {4253,4254, 0, 1, 40000, 26,0.031250 },
- {4255,4256, 0, 1, 40000, 660,0.078125 },
- {4257,4258, 0, 1, 846, 66,0.109375 },
- {4259,4260, 0, 1, 1293, 80,0.078125 },
- {4261,4262, 0, 1, 40000, 300,0.140625 },
- {4263,4264, 0, 1, 2040, 2040,0.109375 },
- {4265,4266, 0, 1, 1360, 1360,0.062500 },
- {4267,4268, 0, 1, 40000, 433,0.093750 },
- {4269,4270, 0, 1, 40000, 533,0.109375 },
- {4271,4272, 0, 1, 826, 826,0.093750 },
- {4273,4274, 0, 1, 40000, 926,0.125000 },
- {4275,4275, 0, 1, 886, 886,0.109375 },
- {4276,4277, 0, 1, 2186, 2186,-0.046875 },
- {4278,4279, 0, 1, 1486, 1486,0.125000 },
- {4280,4281, 0, 1, 40000, 393,-0.078125 },
- {4282,4283, 0, 1, 40000, 1166,0.140625 },
- {4284,4285, 0, 1, 360, 360,0.078125 },
- {4286,4287, 0, 1, 1693, 1693,0.031250 },
- {4288,4289, 0, 1, 760, 760,0.000000 },
- {4290,4291, 0, 1, 126, 126,0.031250 },
- {4292,4292, 0, 0, 300, 300,0.000000 },
- {4293,4294, 0, 1, 280, 280,0.000000 },
- {4295,4296, 0, 1, 40000, 26,0.062500 },
- {4297,4297, 0, 0, 40000, 66,0.000000 },
- {4298,4298, 0, 0, 40000, 53,0.000000 },
- {4299,4299, 0, 0, 1940, 1940,0.000000 },
- {4300,4300, 0, 0, 86, 86,0.000000 },
- {4301,4302, 0, 1, 280, 280,0.031250 },
- {4303,4303, 0, 0, 40, 40,0.000000 },
- {4304,4305, 0, 1, 53, 53,0.000000 },
- {4306,4307, 0, 1, 140, 140,0.000000 },
- {4308,4309, 0, 1, 26, 26,0.000000 },
- {4310,4311, 0, 1, 2153, 2153,0.109375 },
- {4312,4312, 0, 0, 293, 293,0.000000 },
- {4313,4314, 0, 1, 993, 26,0.000000 },
- {4315,4316, 0, 1, 5613, 5613,0.000000 },
- {4317,4317, 0, 0, 220, 220,0.000000 },
- {4318,4319, 0, 1, 10306, 526,0.000000 },
- {4320,4321, 0, 1, 1486, 13,0.000000 },
- {4322,4323, 0, 1, 40000, 660,0.000000 },
- {4324,4324, 0, 0, 120, 120,0.000000 },
- {4325,4325, 34, 0, 40, 40,0.000000 },
- {4326,4326, 28, 0, 73, 73,0.000000 },
- {4327,4328, 39, 1, 233, 233,0.000000 },
- {4327,4328, 33, 1, 193, 193,0.000000 },
- {4329,4330, 63, 1, 33, 33,0.000000 },
- {4331,4331, 15, 0, 13, 13,0.000000 },
- {4332,4332, 36, 0, 13, 13,0.000000 },
- {4332,4333, 36, 1, 133, 133,0.406250 },
- {4334,4335, 25, 1, 13, 13,0.000000 },
- {4336,4335, 25, 1, 33, 33,0.000000 },
- {4337,4338, 61, 1, 40, 40,0.000000 },
- {4339,4340, 37, 1, 53, 53,0.000000 },
- {4341,4342, 15, 1, 80, 80,0.000000 },
- {4343,4344, 48, 1, 73, 73,-1.906250 },
- {4345,4346, 19, 1, 120, 120,0.000000 },
- {4347,4347, 48, 0, 53, 53,0.000000 },
- {4348,4349, 15, 1, 33, 33,0.000000 },
- {4350,4351, 12, 1, 33, 33,0.000000 },
- {4352,4353, 11, 1, 33, 33,0.000000 },
- {4354,4353, 8, 1, 40, 40,0.000000 },
- {4355,4356, 60, 1, 246, 246,0.031250 },
- {4357,4357, 70, 0, 340, 340,0.000000 },
- {4358,4359, 80, 1, 106, 106,0.125000 },
- {4360,4360, 58, 0, 73, 73,0.000000 },
- {4361,4362, 31, 1, 313, 313,0.000000 },
- {4363,4363, 61, 0, 253, 253,0.000000 },
- {4364,4365, 41, 1, 100, 100,0.000000 },
- {4366,4367, 35, 1, 160, 160,0.000000 },
- {4368,4369, 29, 1, 40, 40,0.000000 },
- {4370,4371, 41, 1, 166, 166,0.000000 },
- {4370,4371, 37, 1, 160, 160,0.000000 },
- {4372,4373, 54, 1, 80, 80,0.000000 },
- {4372,4374, 48, 1, 80, 80,0.000000 },
- {4375,4376, 77, 1, 53, 53,0.000000 },
- {4377,4378, 72, 1, 46, 46,0.000000 },
- {4379,4379, 40, 0, 140, 140,0.000000 },
- {4380,4380, 38, 0, 73, 73,0.000000 },
- {4381,4381, 36, 0, 533, 533,0.000000 },
- {4382,4383, 60, 1, 26, 26,0.000000 },
- {4383,4384, 60, 1, 26, 26,0.000000 },
- {4385,4385, 73, 0, 60, 60,0.000000 },
- {4386,4387, 68, 1, 40, 40,0.000000 },
- {4388,4389, 18, 1, 60, 60,0.000000 },
- {4390,4391, 18, 1, 106, 106,0.000000 },
- {4392,4392, 90, 0, 80, 80,0.000000 },
- {4393,4393, 90, 0, 306, 306,0.000000 },
- {4394,4395, 64, 1, 233, 233,0.031250 },
- {4396,4397, 80, 1, 140, 140,0.031250 },
- {4398,4399, 64, 1, 606, 606,0.000000 },
- {4400,4400, 67, 0, 20, 20,0.000000 },
- {4401,4402, 50, 1, 53, 53,0.000000 },
- {4403,4403, 36, 0, 66, 66,0.000000 },
- {4404,4404, 0, 0, 40000, 20,0.000000 },
- {4405,4405, 0, 0, 40000, 0,0.000000 },
- {4406,4406, 0, 0, 360, 360,0.000000 },
- {4407,4407, 0, 0, 586, 586,0.000000 },
- {4408,4408, 0, 0, 40000, 0,0.000000 },
- {4409,4409, 0, 0, 40000, 0,0.000000 },
- {4410,4410, 0, 0, 40000, 0,0.000000 },
- {4411,4411, 0, 0, 40000, 6,0.000000 },
- {4412,4412, 0, 0, 40000, 0,0.000000 },
- {4413,4413, 0, 0, 146, 146,0.000000 },
- {4413,4413, 73, 0, 886, 886,0.000000 },
- {4414,4414, 0, 0, 40, 0,0.000000 },
- {4415,4415, 0, 0, 486, 0,0.000000 },
- {4416,4416, 0, 0, 1226, 1226,0.000000 },
- {4417,4417, 0, 0, 1480, 1480,0.000000 },
- {4418,4418, 0, 0, 46, 46,0.000000 },
- {4419,4419, 0, 0, 126, 126,0.000000 },
- {4419,4419, 12, 0, 106, 106,0.000000 },
- {4420,4420, 0, 0, 160, 160,0.000000 },
- {4420,4420, 1, 0, 153, 153,0.000000 },
- {4421,4421, 0, 0, 20, 20,0.000000 },
- {4421,4421, 23, 0, 26, 26,0.000000 },
- {4422,4422, 0, 0, 140, 140,0.000000 },
- {4423,4423, 0, 0, 486, 486,0.000000 },
- {4424,4424, 0, 0, 40000, 13,0.000000 },
- {4425,4425, 0, 0, 40000, 0,0.000000 },
- {4426,4426, 0, 0, 1226, 1226,0.000000 },
- {4427,4427, 0, 0, 766, 766,0.000000 },
- {4428,4428, 0, 0, 93, 93,0.000000 },
- {4429,4429, 0, 2, 40000, 0,0.000000 },
- {4430,4430, 0, 0, 2026, 2026,0.000000 },
- {4431,4431, 0, 0, 2026, 2026,0.000000 },
- {4432,4432, 0, 0, 1920, 1920,0.000000 },
- {4433,4433, 0, 0, 2026, 2026,0.000000 },
- {4434,4434, 0, 0, 3606, 3606,0.000000 },
- {4435,4435, 0, 0, 1226, 1226,0.000000 },
- {4436,4436, 0, 0, 873, 873,0.000000 },
- {4437,4437, 0, 0, 1766, 1766,0.000000 },
- {4438,4438, 0, 0, 4033, 4033,-2.000000 },
- {4439,4439, 0, 0, 3873, 3873,-2.000000 },
- {4440,4440, 0, 0, 300, 300,-2.000000 },
- {4441,4441, 0, 0, 993, 993,0.000000 },
- {4442,4442, 0, 0, 140, 140,0.000000 },
- {4443,4443, 0, 0, 940, 940,0.000000 },
- {4444,4444, 0, 0, 40000, 0,0.000000 },
- {4445,4445, 0, 0, 380, 380,0.000000 },
- {4446,4446, 0, 0, 40000, 0,0.000000 },
- {4447,4447, 0, 0, 40000, 0,0.000000 },
- {4448,4448, 0, 0, 960, 960,0.000000 },
- {4449,4449, 0, 0, 940, 940,0.000000 },
- {4450,4450, 0, 0, 40000, 0,-2.000000 },
- {4451,4451, 0, 0, 40000, 0,-2.000000 },
- {4452,4452, 0, 0, 160, 160,0.000000 },
- {4453,4453, 0, 0, 593, 593,0.000000 },
- {4454,4454, 0, 0, 253, 253,0.000000 },
- {4454,4454, 0, 0, 253, 253,-2.000000 },
- {4455,4455, 0, 0, 1206, 1206,0.000000 },
- {4456,4456, 0, 0, 40000, 0,-2.000000 },
- {4457,4457, 0, 0, 940, 940,-2.000000 },
- {4458,4458, 0, 0, 40000, 46,0.000000 },
- {4459,4459, 0, 0, 40000, 26,0.000000 },
- {4460,4460, 0, 0, 40000, 60,0.000000 },
- {4461,4461, 0, 0, 126, 126,0.000000 },
- {4462,4462, 0, 0, 1580, 1580,0.000000 },
- {4463,4463, 0, 0, 86, 86,0.000000 },
- {4464,4464, 0, 0, 40000, 46,-2.000000 },
- {4465,4465, 0, 0, 40000, 46,-2.000000 },
- {4466,4466, 0, 0, 40000, 240,-2.000000 },
- {4467,4467, 0, 0, 40000, 6,0.000000 },
- {4468,4468, 0, 0, 713, 713,0.000000 },
- {4469,4469, 0, 0, 40000, 73,-2.000000 },
- {4470,4470, 0, 0, 40000, 33,-2.000000 },
- {4471,4471, 0, 0, 40000, 126,-2.000000 },
- {4472,4472, 0, 0, 146, 146,0.000000 },
- {3712,3712, 0, 0, 40000, 126,-2.000000 },
- {4473,4473, 0, 0, 40000, 73,-2.000000 },
- {4474,4474, 0, 0, 40000, 0,0.000000 },
- {4475,4475, 0, 0, 40000, 0,0.000000 },
- {4476,4476, 0, 0, 40000, 0,0.000000 },
- {4477,4477, 0, 0, 40000, 20,-2.000000 },
- {4478,4478, 0, 0, 40000, 13,0.000000 },
- {4479,4479, 0, 0, 40000, 6,-2.000000 },
- {4480,4480, 0, 0, 40000, 13,-2.000000 },
- {4481,4481, 0, 0, 40000, 6,-2.000000 },
- {4482,4482, 0, 0, 40000, 6,0.000000 },
- {4483,4483, 0, 0, 40000, 0,0.000000 },
- {4484,4484, 0, 0, 40000, 20,0.000000 },
- {4485,4485, 0, 0, 40000, 0,0.000000 },
- {4486,4486, 0, 0, 4620, 4620,0.000000 },
- {4487,4487, 0, 0, 40000, 0,0.000000 },
- {4457,4457, 0, 0, 940, 940,0.000000 },
- {4488,4488, 0, 0, 40000, 480,0.000000 },
- {4489,4489, 0, 0, 100, 100,0.000000 },
- {1221,1221, 0, 0, 40000, 53,0.171875 },
- {4490,4490, 0, 0, 160, 160,0.000000 },
- {4491,4491, 0, 0, 2533, 2533,0.000000 },
- {4492,4492, 0, 0, 2506, 2506,0.000000 },
- {4493,4493, 0, 0, 613, 613,0.000000 },
- {4494,4494, 0, 0, 40000, 1120,0.000000 },
- {4495,4495, 0, 0, 40000, 360,0.000000 },
- {4496,4496, 0, 0, 40000, 1053,0.000000 },
- {4497,4497, 0, 0, 40000, 1093,0.000000 },
- {4498,4498, 0, 0, 2260, 2260,0.000000 },
- {4499,4499, 0, 0, 1226, 1226,0.000000 },
- {4500,4500, 0, 0, 993, 993,0.000000 },
- {4501,4501, 0, 0, 40000, 40,0.000000 },
- {4502,4502, 0, 0, 40000, 0,0.000000 },
- {4503,4503, 0, 0, 1206, 1206,0.000000 },
- {4504,4504, 0, 0, 106, 106,-2.000000 },
- {4505,4505, 0, 0, 246, 246,0.000000 },
- {4506,4506, 0, 0, 226, 226,0.000000 },
- {4507,4507, 0, 0, 146, 146,-2.000000 },
- {4508,4508, 0, 0, 40000, 1120,0.000000 },
- {4509,4509, 0, 0, 1866, 33,0.000000 },
- {1261,1261, 0, 0, 40000, 2140,0.000000 },
- {4510,4510, 37, 0, 160, 160,-2.000000 },
- {4511,4511, 48, 0, 13, 13,-2.000000 },
- {4512,4512, 48, 0, 80, 80,-2.000000 },
- {4513,4513, 62, 0, 40, 40,0.000000 },
- {4514,4514, 44, 0, 146, 146,0.000000 },
- {4515,4515, 80, 0, 13, 13,0.000000 },
- {4514,4514, 50, 0, 386, 386,0.000000 },
- {4516,4516, 48, 0, 13, 13,-2.000000 },
- {4514,4514, 55, 0, 246, 246,0.000000 },
- {4517,4517, 61, 0, 160, 160,0.000000 },
- {4514,4514, 58, 0, 280, 280,0.000000 },
- {4514,4514, 63, 0, 313, 313,0.000000 },
- {4518,4518, 71, 0, 300, 300,0.000000 },
- {4514,4514, 72, 0, 253, 253,0.000000 },
- {4519,4519, 70, 0, 626, 626,0.000000 },
- {4518,4518, 88, 0, 293, 293,0.000000 },
- {4520,4520, 76, 0, 606, 606,0.000000 },
- {4521,4521, 84, 0, 80, 80,0.000000 },
- {4518,4518, 68, 0, 286, 286,0.000000 },
- {4522,4522, 72, 0, 33, 33,0.000000 },
- {4523,4523, 28, 0, 253, 253,0.000000 },
- {4519,4519, 81, 0, 440, 440,0.000000 },
- {4524,4524, 58, 0, 66, 66,-2.000000 },
- {4524,4524, 55, 0, 66, 66,-2.000000 },
- {4524,4524, 44, 0, 66, 66,-2.000000 },
- {4524,4524, 49, 0, 66, 66,-2.000000 },
- {4524,4524, 40, 0, 80, 80,-2.000000 },
- {4525,4525, 55, 0, 73, 73,-2.000000 },
- {4525,4525, 48, 0, 80, 80,-2.000000 },
- {4526,4526, 52, 0, 160, 160,0.000000 },
- {4526,4526, 45, 0, 160, 160,0.000000 },
- {4527,4527, 48, 0, 46, 46,-2.000000 },
- {4528,4528, 48, 0, 20, 20,-2.000000 },
- {4529,4529, 48, 0, 153, 153,-2.000000 },
- {4504,4504, 73, 0, 53, 53,-2.000000 },
- {4504,4504, 68, 0, 53, 53,-2.000000 },
- {4504,4504, 63, 0, 73, 73,-2.000000 },
- {4530,4530,108, 0, 220, 220,0.000000 },
- {4531,4531,108, 0, 440, 440,0.000000 },
+ { 0, 0, 0, 0, 9006, 133,0 },
+ { 1, 1, 0, 0, 9206, 146,0 },
+ { 2, 2, 0, 0, 9246, 240,0 },
+ { 3, 3, 0, 0, 9440, 140,0 },
+ { 4, 4, 0, 0, 8900, 120,0 },
+ { 5, 5, 0, 0, 9400, 140,0 },
+ { 6, 6, 0, 0, 7460, 380,0 },
+ { 7, 7, 0, 0, 9226, 93,0 },
+ { 8, 8, 0, 0, 4613, 420,0 },
+ { 9, 9, 0, 0, 7286, 4713,0 },
+ { 10, 10, 0, 0, 2280, 746,0 },
+ { 11, 11, 0, 0, 9233, 240,0 },
+ { 12, 12, 0, 0, 346, 153,0 },
+ { 13, 13, 0, 0, 633, 233,0 },
+ { 14, 14, 0, 0, 4660, 1573,0 },
+ { 15, 15, 0, 0, 1166, 400,0 },
+ { 16, 16, 0, 0, 40000, 126,0 },
+ { 17, 17, 0, 0, 40000, 93,0 },
+ { 18, 18, 0, 0, 40000, 93,0 },
+ { 19, 19, 0, 0, 40000, 553,0 },
+ { 20, 20, 0, 0, 40000, 660,0 },
+ { 21, 21, 0, 0, 40000, 73,0 },
+ { 22, 22, 0, 0, 40000, 146,0 },
+ { 23, 23, 0, 0, 40000, 146,0 },
+ { 24, 24, 0, 0, 4026, 100,0 },
+ { 25, 25, 0, 0, 14286, 120,0 },
+ { 26, 26, 0, 0, 9233, 106,0 },
+ { 27, 27, 0, 0, 4480, 100,0 },
+ { 28, 28, 0, 0, 40000, 60,0 },
+ { 29, 29, 0, 0, 40000, 80,0 },
+ { 30, 30, 0, 0, 40000, 80,0 },
+ { 31, 31, 0, 0, 18226, 100,0 },
+ { 32, 32, 0, 0, 40000, 0,0 },
+ { 33, 33, 0, 0, 40000, 80,0 },
+ { 34, 34, 0, 0, 40000, 0,0 },
+ { 35, 35, 0, 0, 40000, 53,0 },
+ { 36, 36, 0, 0, 40000, 0,0 },
+ { 37, 37, 0, 0, 40000, 0,0 },
+ { 38, 38, 0, 0, 40000, 0,0 },
+ { 39, 39, 0, 0, 40000, 160,0 },
+ { 40, 40, 0, 0, 40000, 233,0 },
+ { 41, 41, 0, 0, 40000, 73,0 },
+ { 42, 42, 0, 0, 40000, 233,0 },
+ { 43, 43, 0, 0, 40000, 213,0 },
+ { 44, 44, 0, 0, 1246, 453,0 },
+ { 45, 45, 0, 0, 4580, 786,0 },
+ { 46, 46, 0, 0, 6873, 1246,0 },
+ { 47, 47, 0, 0, 40000, 100,0 },
+ { 48, 48, 0, 0, 40000, 140,0 },
+ { 49, 49, 0, 0, 40000, 393,0 },
+ { 50, 50, 0, 0, 40000, 406,0 },
+ { 51, 51, 0, 0, 40000, 373,0 },
+ { 52, 52, 0, 0, 40000, 0,0 },
+ { 53, 53, 0, 0, 40000, 360,0 },
+ { 54, 54, 0, 0, 1060, 380,0 },
+ { 55, 55, 0, 0, 40000, 80,0 },
+ { 56, 56, 0, 0, 40000, 73,0 },
+ { 57, 57, 0, 0, 40000, 66,0 },
+ { 58, 58, 0, 0, 40000, 60,0 },
+ { 59, 59, 0, 0, 40000, 73,0 },
+ { 60, 60, 0, 0, 40000, 66,0 },
+ { 61, 61, 0, 0, 40000, 86,0 },
+ { 62, 62, 0, 0, 40000, 66,0 },
+ { 63, 63, 0, 0, 40000, 73,0 },
+ { 64, 64, 0, 0, 40000, 80,0 },
+ { 65, 65, 0, 0, 40000, 80,0 },
+ { 66, 66, 0, 0, 40000, 73,0 },
+ { 67, 67, 0, 0, 40000, 73,0 },
+ { 68, 68, 0, 0, 40000, 53,0 },
+ { 69, 69, 0, 0, 40000, 73,0 },
+ { 70, 70, 0, 0, 40000, 126,0 },
+ { 71, 71, 0, 0, 40000, 73,0 },
+ { 72, 72, 0, 0, 40000, 73,0 },
+ { 73, 73, 0, 0, 40000, 73,0 },
+ { 74, 74, 0, 0, 40000, 66,0 },
+ { 75, 75, 0, 0, 40000, 153,0 },
+ { 76, 76, 0, 0, 40000, 153,0 },
+ { 77, 77, 0, 0, 40000, 146,0 },
+ { 78, 78, 0, 0, 40000, 146,0 },
+ { 79, 79, 0, 0, 40000, 66,0 },
+ { 80, 80, 0, 0, 40000, 60,0 },
+ { 81, 81, 0, 0, 40000, 86,0 },
+ { 82, 82, 0, 0, 40000, 73,0 },
+ { 83, 83, 0, 0, 40000, 66,0 },
+ { 84, 84, 0, 0, 40000, 153,0 },
+ { 85, 85, 0, 0, 40000, 233,0 },
+ { 86, 86, 0, 0, 40000, 80,0 },
+ { 87, 87, 0, 0, 40000, 400,0 },
+ { 88, 88, 0, 0, 40000, 1373,0 },
+ { 89, 89, 0, 0, 40000, 193,0 },
+ { 90, 90, 0, 0, 40000, 1273,0 },
+ { 91, 91, 0, 0, 40000, 186,0 },
+ { 92, 92, 0, 0, 40000, 86,0 },
+ { 93, 93, 0, 0, 40000, 286,0 },
+ { 94, 94, 0, 0, 40000, 140,0 },
+ { 95, 95, 0, 0, 7440, 2473,0 },
+ { 96, 96, 0, 0, 40000, 1220,0 },
+ { 97, 97, 0, 0, 4946, 2713,0 },
+ { 98, 98, 0, 0, 40000, 160,0 },
+ { 99, 99, 0, 0, 8966, 406,0 },
+ { 100, 100, 0, 0, 40000, 1353,0 },
+ { 101, 101, 0, 0, 40000, 1306,0 },
+ { 102, 102, 0, 0, 40000, 933,0 },
+ { 103, 103, 0, 0, 9086, 226,0 },
+ { 104, 104, 0, 0, 7233, 326,0 },
+ { 105, 105, 0, 0, 7286, 200,0 },
+ { 106, 106, 0, 0, 14180, 4406,0 },
+ { 107, 107, 0, 0, 1180, 406,0 },
+ { 108, 108, 0, 0, 40000, 66,0 },
+ { 109, 109, 0, 0, 40000, 213,0 },
+ { 110, 110, 0, 0, 40000, 73,0 },
+ { 111, 111, 0, 0, 4606, 413,0 },
+ { 112, 112, 0, 0, 613, 240,0 },
+ { 113, 113, 0, 0, 1166, 400,0 },
+ { 114, 114, 0, 0, 200, 353,0 },
+ { 115, 115, 0, 0, 4553, 1480,0 },
+ { 116, 116, 0, 0, 3740, 1260,0 },
+ { 117, 117, 0, 0, 7240, 2300,0 },
+ { 118, 118, 0, 0, 3020, 73,0 },
+ { 119, 119, 0, 0, 1626, 800,0 },
+ { 120, 120, 0, 0, 2466, 620,0 },
+ { 121, 121, 0, 0, 12053, 3160,0 },
+ { 122, 122, 0, 0, 466, 120,0 },
+ { 123, 123, 0, 0, 1000, 320,0 },
+ { 124, 124, 0, 0, 380, 60,0 },
+ { 125, 125, 0, 0, 40000, 200,0 },
+ { 126, 126, 0, 0, 560, 86,0 },
+ { 127, 127, 35, 0, 386, 160,0 },
+ { 128, 128, 52, 0, 126, 26,0 },
+ { 129, 129, 48, 0, 286, 126,0 },
+ { 130, 130, 58, 0, 173, 93,0 },
+ { 129, 129, 60, 0, 286, 126,0 },
+ { 131, 131, 47, 0, 520, 200,0 },
+ { 132, 132, 43, 0, 173, 93,0 },
+ { 131, 131, 49, 0, 520, 200,0 },
+ { 133, 133, 43, 0, 160, 80,0 },
+ { 131, 131, 51, 0, 526, 206,0 },
+ { 134, 134, 43, 0, 1860, 653,0 },
+ { 131, 131, 54, 0, 520, 200,0 },
+ { 131, 131, 57, 0, 520, 200,0 },
+ { 135, 135, 72, 0, 1860, 633,0 },
+ { 131, 131, 60, 0, 506, 200,0 },
+ { 136, 136, 76, 0, 1566, 546,0 },
+ { 137, 137, 84, 0, 1340, 466,0 },
+ { 138, 138, 36, 0, 1220, 433,0 },
+ { 139, 139, 65, 0, 293, 133,0 },
+ { 140, 140, 84, 0, 1333, 460,0 },
+ { 141, 141, 83, 0, 220, 113,0 },
+ { 135, 135, 84, 0, 1366, 473,0 },
+ { 142, 142, 24, 0, 1893, 633,0 },
+ { 136, 136, 77, 0, 1586, 553,0 },
+ { 143, 143, 60, 0, 173, 93,0 },
+ { 144, 144, 65, 0, 213, 126,0 },
+ { 145, 145, 59, 0, 173, 0,0 },
+ { 146, 146, 51, 0, 173, 100,0 },
+ { 147, 147, 45, 0, 260, 206,0 },
+ { 148, 148, 71, 0, 433, 180,0 },
+ { 149, 149, 60, 0, 280, 26,0 },
+ { 150, 150, 58, 0, 500, 186,0 },
+ { 151, 151, 53, 0, 513, 200,0 },
+ { 152, 152, 64, 0, 220, 86,0 },
+ { 153, 153, 71, 0, 106, 46,0 },
+ { 154, 154, 61, 0, 993, 340,0 },
+ { 155, 155, 61, 0, 1906, 640,0 },
+ { 156, 156, 44, 0, 206, 86,0 },
+ { 157, 157, 40, 0, 586, 140,0 },
+ { 158, 158, 69, 0, 126, 140,0 },
+ { 159, 159, 68, 0, 126, 140,0 },
+ { 160, 160, 63, 0, 146, 166,0 },
+ { 161, 161, 74, 0, 280, 100,0 },
+ { 162, 162, 60, 0, 1026, 320,0 },
+ { 163, 163, 80, 0, 226, 100,0 },
+ { 164, 164, 64, 0, 2713, 913,0 },
+ { 165, 165, 72, 0, 120, 66,0 },
+ { 166, 166, 73, 0, 386, 80,0 },
+ { 167, 167, 70, 0, 553, 306,0 },
+ { 168, 168, 68, 0, 126, 140,0 },
+ { 169, 169, 48, 0, 386, 373,0 },
+ { 131, 131, 53, 0, 520, 206,0 },
+ { 170, 170, 0, 0, 40000, 0,0 },
+ { 171, 171, 0, 0, 40000, 73,0 },
+ { 172, 173, 0, 4, 5886, 100,0 },
+ { 174, 175, 0, 4, 6913, 0,0 },
+ { 176, 177, 0, 4, 4873, 0,0 },
+ { 178, 178, 0, 0, 40000, 0,0 },
+ { 179, 180, 0, 4, 4653, 433,0 },
+ { 181, 181, 0, 0, 2280, 746,0 },
+ { 182, 182, 0, 0, 40000, 0,0 },
+ { 183, 184, 0, 4, 626, 0,0 },
+ { 185, 186, 0, 4, 4653, 1546,0 },
+ { 187, 187, 0, 0, 1166, 400,0 },
+ { 188, 189, 0, 4, 40000, 60,0 },
+ { 190, 191, 0, 4, 40000, 60,0 },
+ { 192, 193, 0, 4, 40000, 73,0 },
+ { 194, 194, 0, 0, 40000, 73,0 },
+ { 195, 196, 0, 4, 40000, 66,0 },
+ { 197, 198, 0, 4, 40000, 86,0 },
+ { 199, 200, 0, 4, 40000, 66,0 },
+ { 201, 202, 0, 4, 3713, 100,0 },
+ { 203, 204, 0, 4, 14753, 126,0 },
+ { 205, 206, 0, 4, 9286, 146,0 },
+ { 207, 208, 0, 4, 14713, 126,0 },
+ { 209, 210, 0, 4, 4653, 0,0 },
+ { 211, 212, 0, 4, 40000, 66,0 },
+ { 213, 213, 0, 0, 40000, 73,0 },
+ { 214, 215, 0, 4, 626, 0,0 },
+ { 216, 217, 0, 4, 4066, 100,0 },
+ { 218, 219, 0, 4, 14586, 193,0 },
+ { 220, 221, 0, 4, 2813, 106,0 },
+ { 222, 223, 0, 4, 500, 0,0 },
+ { 224, 224, 0, 0, 40000, 0,0 },
+ { 225, 226, 0, 4, 7993, 93,0 },
+ { 227, 227, 0, 0, 40000, 0,0 },
+ { 228, 228, 0, 0, 40000, 133,0 },
+ { 229, 230, 0, 4, 720, 213,0 },
+ { 231, 232, 0, 4, 40000, 146,0 },
+ { 233, 234, 0, 4, 40000, 0,0 },
+ { 235, 236, 0, 4, 1000, 340,0 },
+ { 235, 237, 0, 4, 3280, 1120,0 },
+ { 46, 238, 0, 4, 6920, 0,0 },
+ { 239, 240, 0, 4, 40000, 140,0 },
+ { 241, 242, 0, 4, 40000, 146,0 },
+ { 243, 243, 0, 0, 40000, 100,0 },
+ { 244, 244, 0, 0, 40000, 60,0 },
+ { 245, 245, 0, 0, 40000, 73,0 },
+ { 246, 247, 0, 4, 720, 106,0 },
+ { 248, 249, 0, 4, 40000, 126,0 },
+ { 250, 250, 0, 0, 40000, 0,0 },
+ { 251, 251, 0, 0, 40000, 126,0 },
+ { 252, 253, 0, 4, 40000, 66,0 },
+ { 254, 255, 0, 4, 40000, 93,0 },
+ { 256, 257, 0, 4, 40000, 73,0 },
+ { 258, 259, 0, 4, 40000, 86,0 },
+ { 260, 261, 0, 4, 40000, 93,0 },
+ { 262, 263, 0, 4, 40000, 80,0 },
+ { 264, 265, 0, 4, 40000, 200,0 },
+ { 266, 267, 0, 4, 40000, 73,0 },
+ { 268, 269, 0, 4, 40000, 80,0 },
+ { 270, 271, 0, 4, 40000, 73,0 },
+ { 272, 273, 0, 4, 40000, 126,0 },
+ { 274, 275, 0, 4, 40000, 100,0 },
+ { 276, 276, 0, 0, 40000, 113,0 },
+ { 277, 278, 0, 4, 40000, 186,0 },
+ { 279, 280, 0, 4, 40000, 160,0 },
+ { 281, 282, 0, 4, 40000, 206,0 },
+ { 283, 283, 0, 0, 40000, 80,0 },
+ { 284, 285, 0, 4, 40000, 73,0 },
+ { 286, 287, 0, 4, 40000, 73,0 },
+ { 288, 288, 0, 0, 40000, 93,0 },
+ { 289, 290, 0, 4, 40000, 66,0 },
+ { 291, 292, 0, 4, 40000, 153,0 },
+ { 293, 294, 0, 4, 40000, 153,0 },
+ { 295, 296, 0, 4, 40000, 320,0 },
+ { 88, 297, 0, 4, 40000, 1280,0 },
+ { 298, 299, 0, 4, 40000, 266,0 },
+ { 300, 301, 0, 4, 40000, 1180,0 },
+ { 302, 302, 0, 0, 40000, 286,0 },
+ { 303, 303, 0, 0, 40000, 140,0 },
+ { 304, 304, 0, 0, 13246, 2473,0 },
+ { 305, 306, 0, 4, 40000, 1073,0 },
+ { 307, 307, 0, 0, 9233, 240,0 },
+ { 308, 308, 0, 0, 1186, 406,0 },
+ { 309, 309, 0, 0, 40000, 1306,0 },
+ { 310, 310, 0, 0, 40000, 933,0 },
+ { 311, 312, 0, 4, 9146, 240,0 },
+ { 313, 314, 0, 4, 7306, 326,0 },
+ { 315, 316, 0, 4, 3586, 326,0 },
+ { 317, 318, 0, 4, 7180, 0,0 },
+ { 107, 319, 0, 4, 1180, 406,0 },
+ { 108, 320, 0, 4, 40000, 66,0 },
+ { 109, 321, 0, 4, 720, 213,0 },
+ { 322, 323, 0, 4, 40000, 73,0 },
+ { 324, 325, 0, 4, 613, 246,0 },
+ { 326, 327, 0, 4, 1213, 386,0 },
+ { 328, 328, 0, 0, 173, 106,0 },
+ { 329, 329, 0, 0, 966, 333,0 },
+ { 330, 331, 0, 4, 1906, 320,0 },
+ { 332, 332, 0, 0, 3120, 73,0 },
+ { 333, 333, 0, 0, 226, 73,0 },
+ { 334, 334, 0, 0, 6600, 806,0 },
+ { 335, 335, 0, 0, 273, 60,0 },
+ { 336, 336, 0, 0, 12053, 660,0 },
+ { 337, 337, 0, 0, 40000, 240,0 },
+ { 338, 339, 0, 6, 6, 0,0 },
+ { 340, 341, 0, 4, 560, 0,0 },
+ { 342, 342, 35, 0, 40000, 0,0 },
+ { 343, 343, 0, 0, 180, 100,0 },
+ { 344, 344, 35, 0, 340, 146,0 },
+ { 345, 345, 35, 0, 213, 33,0 },
+ { 346, 346, 50, 0, 306, 20,0 },
+ { 347, 347, 18, 0, 420, 146,0 },
+ { 348, 348, 72, 0, 173, 86,0 },
+ { 349, 349, 74, 0, 160, 93,0 },
+ { 350, 350, 35, 0, 380, 146,0 },
+ { 351, 351, 16, 0, 1206, 420,0 },
+ { 352, 352, 0, 2, 6, 0,0 },
+ { 353, 353, 38, 0, 200, 106,0 },
+ { 354, 354, 38, 0, 346, 146,0 },
+ { 355, 355, 31, 0, 406, 20,0 },
+ { 355, 355, 35, 0, 406, 66,0 },
+ { 355, 355, 38, 0, 406, 66,0 },
+ { 355, 355, 41, 0, 406, 66,0 },
+ { 355, 355, 45, 0, 306, 73,0 },
+ { 355, 355, 50, 0, 306, 73,0 },
+ { 356, 356, 36, 0, 1373, 493,0 },
+ { 357, 357, 36, 0, 146, 33,0 },
+ { 358, 358, 48, 0, 213, 86,0 },
+ { 358, 358, 36, 0, 246, 86,0 },
+ { 359, 359, 36, 0, 113, 0,0 },
+ { 360, 360, 0, 0, 133, 40,0 },
+ { 361, 361, 61, 0, 180, 26,0 },
+ { 362, 362, 96, 0, 706, 266,0 },
+ { 363, 363, 38, 0, 520, 193,0 },
+ { 127, 127, 16, 0, 620, 233,0 },
+ { 364, 365, 18, 4, 200, 0,0 },
+ { 366, 366, 30, 0, 406, 246,0 },
+ { 367, 368, 35, 4, 200, 0,0 },
+ { 129, 129, 0, 0, 353, 153,0 },
+ { 369, 369, 0, 0, 213, 13,0 },
+ { 370, 370, 88, 0, 333, 113,0 },
+ { 371, 371, 88, 0, 140, 73,0 },
+ { 372, 372, 79, 0, 2540, 1040,0 },
+ { 135, 135, 14, 0, 9213, 3066,0 },
+ { 373, 373, 46, 0, 1093, 60,0 },
+ { 374, 375,129, 4, 1200, 433,0 },
+ { 376, 376, 58, 0, 1600, 726,0 },
+ { 377, 377,164, 0, 526, 820,0 },
+ { 378, 378,142, 0, 9153, 3073,0 },
+ { 379, 379, 9, 0, 200, 100,0 },
+ { 380, 381, 35, 4, 2353, 813,0 },
+ { 382, 382, 28, 0, 1060, 120,0 },
+ { 383, 383, 46, 0, 953, 20,0 },
+ { 384, 384, 60, 0, 440, 160,0 },
+ { 384, 384, 54, 0, 513, 180,0 },
+ { 385, 385, 72, 0, 253, 120,0 },
+ { 385, 385, 67, 0, 253, 113,0 },
+ { 385, 385, 60, 0, 253, 106,0 },
+ { 386, 386, 1, 0, 966, 613,0 },
+ { 387, 387, 77, 0, 340, 86,0 },
+ { 387, 387, 72, 0, 340, 86,0 },
+ { 388, 388, 90, 0, 213, 86,0 },
+ { 389, 389, 39, 0, 266, 73,0 },
+ { 390, 390, 36, 0, 593, 73,0 },
+ { 391, 392, 35, 4, 173, 46,0 },
+ { 391, 393, 35, 4, 460, 66,0 },
+ { 394, 394, 60, 0, 173, 20,0 },
+ { 328, 328, 7, 0, 173, 0,0 },
+ { 395, 395, 90, 0, 193, 20,0 },
+ { 396, 396, 90, 0, 793, 40,0 },
+ { 397, 397, 35, 0, 253, 86,0 },
+ { 398, 399, 5, 4, 1913, 226,0 },
+ { 400, 400,103, 0, 713, 273,0 },
+ { 401, 401, 3, 0, 100, 0,0 },
+ { 169, 169, 1, 0, 466, 413,0 },
+ { 131, 131, 0, 0, 613, 226,0 },
+ { 402, 402, 36, 0, 273, 53,0 },
+ { 403, 403, 60, 0, 40000, 73,0 },
+ { 404, 404, 37, 0, 1193, 426,0 },
+ { 405, 405, 36, 0, 406, 20,0 },
+ { 406, 406, 32, 0, 146, 73,0 },
+ { 407, 407, 50, 0, 40000, 0,0 },
+ { 408, 408, 50, 0, 793, 346,0 },
+ { 409, 409, 83, 0, 120, 13,0 },
+ { 410, 410, 72, 0, 433, 0,0 },
+ { 148, 148, 59, 0, 513, 200,0 },
+ { 411, 411, 64, 0, 173, 93,0 },
+ { 411, 411, 60, 0, 173, 93,0 },
+ { 412, 412, 72, 0, 160, 93,0 },
+ { 412, 412, 62, 0, 173, 93,0 },
+ { 413, 413, 83, 0, 773, 60,0 },
+ { 414, 414, 0, 0, 40000, 80,0 },
+ { 415, 415, 0, 0, 40000, 0,0 },
+ { 416, 416, 0, 0, 40000, 73,0 },
+ { 417, 417, 0, 0, 40000, 86,0 },
+ { 418, 418, 0, 0, 40000, 0,0 },
+ { 419, 419, 0, 0, 3440, 100,0 },
+ { 420, 420, 0, 0, 3913, 420,0 },
+ { 421, 421, 0, 0, 13620, 4640,0 },
+ { 422, 422, 0, 0, 9233, 240,0 },
+ { 423, 423, 0, 0, 633, 233,0 },
+ { 424, 424, 0, 0, 4660, 1573,0 },
+ { 425, 425, 0, 0, 4480, 1413,0 },
+ { 426, 426, 0, 0, 40000, 0,0 },
+ { 427, 427, 0, 0, 40000, 86,0 },
+ { 428, 428, 60, 2, 6, 0,0 },
+ { 429, 429, 73, 0, 593, 86,0 },
+ { 429, 429, 74, 0, 593, 86,0 },
+ { 429, 429, 80, 0, 593, 86,0 },
+ { 429, 429, 84, 0, 593, 86,0 },
+ { 429, 429, 92, 0, 520, 86,0 },
+ { 430, 430, 81, 0, 786, 80,0 },
+ { 430, 430, 83, 0, 786, 80,0 },
+ { 430, 430, 95, 0, 680, 80,0 },
+ { 431, 431, 35, 0, 593, 140,0 },
+ { 432, 432, 60, 0, 213, 133,0 },
+ { 357, 357, 59, 0, 113, 0,0 },
+ { 432, 432, 44, 0, 213, 133,0 },
+ { 433, 433, 41, 0, 713, 273,0 },
+ { 434, 434, 97, 0, 113, 46,0 },
+ { 433, 433, 44, 0, 513, 206,0 },
+ { 433, 433, 48, 0, 506, 200,0 },
+ { 435, 435, 96, 0, 700, 86,0 },
+ { 433, 433, 51, 0, 520, 200,0 },
+ { 433, 433, 54, 0, 513, 206,0 },
+ { 436, 436, 40, 0, 1506, 793,0 },
+ { 433, 433, 57, 0, 380, 160,0 },
+ { 437, 437, 58, 0, 1600, 726,0 },
+ { 438, 438, 97, 0, 233, 106,0 },
+ { 439, 439, 50, 0, 186, 93,0 },
+ { 437, 437, 60, 0, 1573, 713,0 },
+ { 440, 440, 53, 0, 180, 73,0 },
+ { 441, 441, 46, 0, 173, 126,0 },
+ { 440, 440, 57, 0, 180, 40,0 },
+ { 442, 442, 42, 0, 640, 240,0 },
+ { 442, 442, 37, 0, 633, 233,0 },
+ { 443, 443, 41, 0, 626, 240,0 },
+ { 443, 443, 37, 0, 620, 233,0 },
+ { 444, 444, 77, 0, 173, 40,0 },
+ { 444, 444, 72, 0, 173, 40,0 },
+ { 445, 445, 70, 0, 233, 100,0 },
+ { 445, 445, 90, 0, 233, 93,0 },
+ { 446, 446, 46, 0, 133, 73,0 },
+ { 447, 447, 48, 0, 333, 73,0 },
+ { 448, 448, 85, 0, 106, 0,0 },
+ { 449, 449, 66, 0, 180, 26,0 },
+ { 449, 449, 61, 0, 180, 26,0 },
+ { 450, 450, 41, 0, 200, 66,0 },
+ { 451, 451, 41, 0, 253, 66,0 },
+ { 452, 452, 81, 0, 253, 26,0 },
+ { 400, 400, 81, 0, 820, 306,0 },
+ { 400, 400, 76, 0, 813, 300,0 },
+ { 359, 359, 60, 0, 100, 0,0 },
+ { 453, 453, 53, 0, 40000, 0,0 },
+ { 454, 454, 0, 2, 6, 0,0 },
+ { 455, 455, 0, 0, 200, 20,0 },
+ { 456, 456, 0, 0, 4480, 100,0 },
+ { 457, 457, 0, 0, 1180, 406,0 },
+ { 458, 458, 0, 0, 40000, 86,0 },
+ { 459, 459, 0, 0, 40000, 73,0 },
+ { 460, 460, 0, 0, 3700, 66,0 },
+ { 461, 461, 0, 0, 40000, 0,0 },
+ { 462, 462, 0, 0, 6746, 2606,0 },
+ { 463, 463, 0, 0, 40000, 213,0 },
+ { 464, 464, 0, 0, 40000, 66,0 },
+ { 465, 465, 0, 0, 40000, 100,0 },
+ { 466, 466, 0, 0, 40000, 100,0 },
+ { 467, 467, 0, 0, 5840, 806,0 },
+ { 468, 468, 0, 0, 40000, 0,0 },
+ { 469, 469, 0, 0, 40000, 0,0 },
+ { 470, 470, 0, 0, 40000, 73,0 },
+ { 471, 471, 0, 0, 40000, 133,0 },
+ { 472, 472, 0, 0, 3320, 800,0 },
+ { 473, 473, 0, 0, 40000, 173,0 },
+ { 474, 474, 0, 0, 40000, 193,0 },
+ { 475, 475, 0, 0, 2373, 800,0 },
+ { 476, 476, 0, 0, 40000, 4986,0 },
+ { 477, 477, 0, 0, 1180, 413,0 },
+ { 478, 478, 0, 0, 3673, 1200,0 },
+ { 479, 479, 0, 0, 973, 800,0 },
+ { 480, 480, 0, 0, 7233, 2286,0 },
+ { 481, 481, 0, 0, 40000, 73,0 },
+ { 482, 482, 0, 0, 2526, 73,0 },
+ { 483, 483, 0, 0, 393, 126,0 },
+ { 484, 484, 0, 0, 40000, 200,0 },
+ { 485, 485, 0, 0, 40000, 546,0 },
+ { 486, 486, 0, 0, 1186, 413,0 },
+ { 487, 487, 0, 0, 14166, 320,0 },
+ { 488, 488, 0, 0, 8326, 646,0 },
+ { 489, 489, 0, 0, 513, 206,0 },
+ { 490, 490, 0, 0, 40000, 93,0 },
+ { 491, 491, 50, 0, 1406, 353,0 },
+ { 492, 492, 37, 0, 1040, 400,0 },
+ { 493, 493, 39, 0, 406, 73,0 },
+ { 494, 494, 39, 0, 3746, 860,0 },
+ { 495, 495, 86, 0, 2133, 173,0 },
+ { 496, 496, 43, 0, 140, 66,0 },
+ { 127, 127, 24, 0, 513, 206,0 },
+ { 127, 127, 29, 0, 520, 206,0 },
+ { 497, 497, 50, 0, 340, 20,0 },
+ { 498, 498, 30, 0, 5306, 1266,0 },
+ { 498, 498, 33, 0, 3773, 886,0 },
+ { 498, 498, 38, 0, 3746, 860,0 },
+ { 498, 498, 42, 0, 3793, 906,0 },
+ { 499, 499, 24, 0, 266, 0,0 },
+ { 499, 499, 27, 0, 260, 153,0 },
+ { 499, 499, 29, 0, 260, 153,0 },
+ { 499, 499, 32, 0, 260, 153,0 },
+ { 500, 500, 32, 0, 106, 0,0 },
+ { 501, 501, 53, 0, 373, 186,0 },
+ { 501, 501, 57, 0, 380, 193,0 },
+ { 502, 502, 60, 0, 286, 133,0 },
+ { 503, 503, 55, 0, 460, 126,0 },
+ { 486, 486, 85, 0, 813, 293,0 },
+ { 504, 504, 90, 0, 1580, 546,0 },
+ { 505, 505, 84, 0, 246, 120,0 },
+ { 506, 506, 48, 0, 826, 646,0 },
+ { 507, 507, 48, 0, 266, 213,0 },
+ { 132, 132, 72, 0, 126, 66,0 },
+ { 508, 508, 72, 0, 106, 0,0 },
+ { 509, 509, 72, 0, 100, 0,0 },
+ { 510, 510, 63, 0, 1860, 633,0 },
+ { 510, 510, 65, 0, 1853, 633,0 },
+ { 511, 511, 79, 0, 1573, 553,0 },
+ { 512, 512, 38, 0, 520, 793,0 },
+ { 513, 513, 94, 0, 380, 160,0 },
+ { 514, 514, 87, 0, 433, 306,0 },
+ { 514, 514, 94, 0, 380, 273,0 },
+ { 515, 515, 80, 0, 546, 273,0 },
+ { 516, 516, 47, 0, 506, 200,0 },
+ { 517, 517, 61, 0, 286, 133,0 },
+ { 517, 517, 68, 0, 246, 120,0 },
+ { 518, 518, 61, 0, 513, 206,0 },
+ { 518, 518, 68, 0, 433, 180,0 },
+ { 499, 499, 60, 0, 220, 133,0 },
+ { 519, 519, 60, 0, 153, 46,0 },
+ { 520, 520, 36, 0, 200, 20,0 },
+ { 520, 520, 60, 0, 173, 20,0 },
+ { 521, 521, 60, 0, 173, 20,0 },
+ { 522, 522, 68, 0, 126, 26,0 },
+ { 523, 523, 71, 0, 160, 186,0 },
+ { 523, 523, 72, 0, 160, 186,0 },
+ { 524, 524,101, 0, 966, 353,0 },
+ { 525, 525, 36, 0, 3333, 480,0 },
+ { 526, 526, 25, 0, 40000, 2293,0 },
+ { 527, 527, 37, 0, 2106, 426,0 },
+ { 528, 528, 36, 0, 720, 266,0 },
+ { 528, 528, 41, 0, 713, 266,0 },
+ { 529, 529, 84, 0, 173, 60,0 },
+ { 530, 530, 54, 0, 40000, 0,0 },
+ { 481, 481, 48, 0, 40000, 73,0 },
+ { 531, 531, 0, 0, 10060, 1266,0 },
+ { 532, 532, 0, 0, 4600, 606,0 },
+ { 533, 533, 0, 0, 40000, 253,0 },
+ { 534, 534, 0, 0, 40000, 73,0 },
+ { 535, 535, 0, 0, 40000, 66,0 },
+ { 536, 536, 0, 0, 40000, 80,0 },
+ { 537, 537, 0, 0, 9413, 1393,0 },
+ { 538, 538, 0, 0, 9000, 66,0 },
+ { 539, 539, 0, 0, 40000, 0,0 },
+ { 540, 540, 0, 0, 40000, 80,0 },
+ { 541, 541, 0, 0, 40000, 120,0 },
+ { 542, 542, 0, 0, 253, 73,0 },
+ { 543, 543, 0, 0, 40000, 73,0 },
+ { 544, 544, 0, 0, 18280, 800,0 },
+ { 545, 545, 0, 0, 40000, 1133,0 },
+ { 546, 546, 0, 0, 40000, 1226,0 },
+ { 547, 547, 0, 0, 40000, 153,0 },
+ { 135, 135, 49, 0, 3633, 1186,0 },
+ { 548, 548, 35, 0, 2193, 80,0 },
+ { 549, 549, 41, 0, 73, 0,0 },
+ { 366, 366, 38, 0, 406, 246,0 },
+ { 550, 550, 39, 0, 106, 20,0 },
+ { 551, 551, 49, 0, 200, 133,0 },
+ { 408, 408, 59, 0, 780, 326,0 },
+ { 552, 552, 24, 0, 40000, 0,0 },
+ { 552, 552, 27, 0, 40000, 0,0 },
+ { 552, 552, 29, 0, 40000, 0,0 },
+ { 552, 552, 32, 0, 40000, 0,0 },
+ { 553, 553, 84, 0, 200, 33,0 },
+ { 512, 512, 79, 0, 346, 460,0 },
+ { 554, 554, 61, 0, 400, 126,0 },
+ { 554, 554, 68, 0, 353, 120,0 },
+ { 555, 555, 36, 0, 146, 86,0 },
+ { 555, 555, 60, 0, 113, 0,0 },
+ { 556, 556, 36, 0, 273, 53,0 },
+ { 115, 115, 37, 0, 4580, 1513,0 },
+ { 557, 557, 0, 0, 3806, 73,0 },
+ { 558, 558, 0, 0, 40000, 0,0 },
+ { 559, 559, 0, 0, 40000, 66,0 },
+ { 560, 560, 0, 0, 5886, 133,0 },
+ { 561, 561, 0, 0, 253, 26,0 },
+ { 562, 562, 0, 0, 3246, 753,0 },
+ { 563, 563, 0, 0, 40000, 100,0 },
+ { 564, 564, 0, 0, 1620, 366,0 },
+ { 565, 565, 0, 0, 40000, 0,0 },
+ { 566, 566, 0, 0, 40000, 0,0 },
+ { 567, 567, 0, 0, 40000, 0,0 },
+ { 568, 568, 0, 0, 40000, 80,0 },
+ { 569, 569, 0, 0, 760, 340,0 },
+ { 570, 570, 0, 0, 40000, 0,0 },
+ { 571, 571, 0, 0, 40000, 0,0 },
+ { 572, 572, 0, 0, 40000, 0,0 },
+ { 356, 356, 0, 0, 1893, 646,0 },
+ { 573, 573, 0, 0, 40000, 93,0 },
+ { 574, 574, 0, 0, 40000, 93,0 },
+ { 575, 575, 0, 0, 40000, 200,0 },
+ { 576, 576, 0, 0, 40000, 200,0 },
+ { 577, 577, 0, 0, 40000, 126,0 },
+ { 578, 578, 0, 0, 40000, 353,0 },
+ { 579, 579, 0, 0, 40000, 346,0 },
+ { 580, 580, 0, 0, 40000, 353,0 },
+ { 581, 581, 0, 0, 40000, 100,0 },
+ { 582, 582, 0, 0, 40000, 133,0 },
+ { 583, 583, 0, 0, 2286, 713,0 },
+ { 584, 584, 0, 0, 40000, 193,0 },
+ { 585, 585, 0, 0, 40000, 0,0 },
+ { 516, 516, 0, 0, 633, 240,0 },
+ { 586, 586, 0, 0, 40000, 73,0 },
+ { 587, 587, 0, 0, 40000, 73,0 },
+ { 588, 588, 0, 0, 40000, 73,0 },
+ { 498, 498, 26, 0, 5293, 1253,0 },
+ { 494, 494, 35, 0, 3800, 913,0 },
+ { 350, 350, 41, 0, 380, 153,0 },
+ { 353, 353, 48, 0, 173, 100,0 },
+ { 354, 354, 67, 0, 246, 120,0 },
+ { 502, 502, 24, 0, 340, 146,0 },
+ { 346, 346, 36, 0, 406, 73,0 },
+ { 346, 346, 38, 0, 406, 20,0 },
+ { 346, 346, 40, 0, 406, 73,0 },
+ { 346, 346, 42, 0, 406, 20,0 },
+ { 346, 346, 44, 0, 306, 20,0 },
+ { 510, 510, 55, 0, 1866, 646,0 },
+ { 346, 346, 46, 0, 306, 20,0 },
+ { 136, 136, 80, 0, 1600, 573,0 },
+ { 486, 486, 24, 0, 1193, 426,0 },
+ { 153, 153, 50, 0, 106, 40,0 },
+ { 346, 346, 24, 0, 540, 73,0 },
+ { 516, 516, 31, 0, 626, 240,0 },
+ { 498, 498, 35, 0, 3760, 880,0 },
+ { 517, 517, 60, 0, 286, 133,0 },
+ { 530, 530, 36, 0, 40000, 0,0 },
+ { 530, 530, 48, 0, 40000, 0,0 },
+ { 589, 589, 0, 0, 40000, 0,0 },
+ { 139, 139, 76, 0, 253, 106,0 },
+ { 156, 156, 48, 0, 206, 80,0 },
+ { 157, 157, 48, 0, 426, 106,0 },
+ { 165, 165, 69, 0, 120, 66,0 },
+ { 167, 167, 75, 0, 546, 306,0 },
+ { 590, 590, 0, 0, 40000, 0,0 },
+ { 591, 591, 0, 0, 15486, 1580,0 },
+ { 592, 592, 0, 0, 3446, 106,0 },
+ { 593, 593, 0, 0, 1926, 146,0 },
+ { 594, 594, 0, 0, 7293, 2380,0 },
+ { 595, 595, 0, 0, 7613, 1566,0 },
+ { 596, 596, 0, 0, 1153, 460,0 },
+ { 597, 597, 0, 0, 1166, 400,0 },
+ { 598, 598, 0, 0, 40000, 73,0 },
+ { 599, 599, 0, 0, 40000, 766,0 },
+ { 600, 600, 0, 0, 40000, 80,0 },
+ { 601, 601, 0, 0, 1840, 513,0 },
+ { 602, 602, 0, 0, 40000, 0,0 },
+ { 603, 603, 0, 0, 4480, 733,0 },
+ { 604, 604, 0, 0, 18226, 786,0 },
+ { 605, 605, 0, 0, 4333, 233,0 },
+ { 606, 606, 0, 0, 40000, 106,0 },
+ { 607, 607, 0, 0, 40000, 366,0 },
+ { 608, 608, 0, 0, 40000, 200,0 },
+ { 609, 609, 0, 0, 713, 200,0 },
+ { 610, 610, 0, 0, 8866, 1366,0 },
+ { 611, 611, 0, 0, 2300, 73,0 },
+ { 612, 612, 0, 0, 40000, 126,0 },
+ { 613, 613, 0, 0, 40000, 1413,0 },
+ { 614, 614, 0, 0, 40000, 333,0 },
+ { 615, 615, 0, 0, 40000, 333,0 },
+ { 616, 616, 0, 0, 40000, 26,0 },
+ { 617, 617, 0, 0, 40000, 40,0 },
+ { 618, 618, 0, 0, 4240, 353,0 },
+ { 619, 619, 0, 0, 40000, 0,0 },
+ { 620, 620, 0, 0, 40000, 73,0 },
+ { 621, 621, 0, 0, 9020, 60,0 },
+ { 622, 622, 0, 0, 3020, 0,0 },
+ { 623, 623, 0, 0, 40000, 60,0 },
+ { 624, 624, 0, 0, 40000, 73,0 },
+ { 625, 625, 0, 0, 40000, 60,0 },
+ { 626, 626, 0, 0, 40000, 53,0 },
+ { 627, 627, 0, 0, 40000, 0,0 },
+ { 628, 628, 0, 0, 40000, 66,0 },
+ { 629, 629, 0, 0, 40000, 66,0 },
+ { 630, 630, 0, 0, 5913, 426,0 },
+ { 631, 631, 0, 0, 40000, 246,0 },
+ { 632, 632, 0, 0, 40000, 206,0 },
+ { 633, 633, 0, 0, 40000, 0,0 },
+ { 634, 634, 0, 0, 2453, 780,0 },
+ { 635, 635, 0, 0, 4740, 240,0 },
+ { 636, 636, 0, 0, 1840, 353,0 },
+ { 637, 637, 0, 0, 40000, 86,0 },
+ { 638, 638, 0, 0, 3446, 1786,0 },
+ { 346, 346, 0, 0, 540, 20,0 },
+ { 639, 639, 0, 0, 7406, 2486,0 },
+ { 404, 404, 0, 0, 1220, 466,0 },
+ { 506, 506, 0, 0, 1000, 813,0 },
+ { 639, 639, 60, 0, 2666, 913,0 },
+ { 639, 639, 79, 0, 1366, 486,0 },
+ { 640, 640, 65, 0, 2053, 646,0 },
+ { 486, 486, 31, 0, 1206, 440,0 },
+ { 486, 486, 36, 0, 1200, 433,0 },
+ { 640, 640, 72, 0, 1713, 520,0 },
+ { 136, 136, 79, 0, 1580, 560,0 },
+ { 148, 148, 57, 0, 520, 206,0 },
+ { 150, 150, 53, 0, 500, 193,0 },
+ { 641, 641, 84, 0, 226, 66,0 },
+ { 520, 520, 66, 0, 173, 20,0 },
+ { 642, 642, 31, 0, 40000, 113,0 },
+ { 642, 642, 29, 0, 40000, 113,0 },
+ { 356, 356, 31, 0, 1366, 486,0 },
+ { 356, 356, 19, 0, 1866, 633,0 },
+ { 643, 643, 31, 0, 40000, 73,0 },
+ { 643, 643, 29, 0, 40000, 73,0 },
+ { 644, 644, 31, 0, 2286, 400,0 },
+ { 644, 644, 35, 0, 2313, 420,0 },
+ { 644, 644, 40, 0, 2353, 433,0 },
+ { 644, 644, 47, 0, 1860, 346,0 },
+ { 516, 516, 32, 0, 626, 240,0 },
+ { 516, 516, 43, 0, 506, 200,0 },
+ { 495, 495, 26, 0, 3180, 240,0 },
+ { 495, 495, 44, 0, 2553, 206,0 },
+ { 496, 496, 26, 0, 160, 73,0 },
+ { 496, 496, 51, 0, 146, 66,0 },
+ { 496, 496, 39, 0, 160, 73,0 },
+ { 495, 495, 30, 0, 3180, 240,0 },
+ { 645, 645, 44, 0, 1880, 653,0 },
+ { 645, 645, 43, 0, 1886, 653,0 },
+ { 646, 646, 0, 0, 2393, 833,0 },
+ { 647, 647, 0, 0, 4693, 26,0 },
+ { 648, 648, 0, 0, 2306, 773,0 },
+ { 649, 649, 0, 0, 40000, 120,0 },
+ { 650, 650, 0, 0, 40000, 66,0 },
+ { 651, 651, 0, 0, 5866, 1206,0 },
+ { 652, 652, 0, 0, 40000, 426,0 },
+ { 653, 653, 0, 0, 1873, 633,0 },
+ { 654, 654, 0, 0, 40000, 66,0 },
+ { 655, 655, 0, 0, 40000, 73,0 },
+ { 656, 656, 0, 0, 40000, 73,0 },
+ { 657, 657, 0, 0, 40000, 0,0 },
+ { 658, 658, 0, 0, 2040, 380,0 },
+ { 659, 659, 0, 0, 40000, 73,0 },
+ { 660, 660, 0, 0, 3720, 1260,0 },
+ { 661, 661, 0, 0, 4080, 1046,0 },
+ { 662, 662, 0, 0, 8693, 4666,0 },
+ { 663, 663, 0, 0, 1926, 73,0 },
+ { 664, 664, 0, 0, 8326, 646,0 },
+ { 665, 665, 0, 0, 40000, 240,0 },
+ { 666, 666, 0, 0, 40000, 226,0 },
+ { 667, 667, 0, 0, 40000, 220,0 },
+ { 668, 668, 0, 0, 40000, 0,0 },
+ { 669, 669, 0, 0, 40000, 193,0 },
+ { 670, 670, 0, 0, 880, 20,0 },
+ { 671, 671, 0, 0, 4873, 120,0 },
+ { 672, 672, 0, 0, 40000, 413,0 },
+ { 673, 673, 0, 0, 700, 106,0 },
+ { 674, 674, 0, 0, 700, 100,0 },
+ { 675, 675, 0, 0, 40000, 126,0 },
+ { 676, 676, 0, 0, 8113, 806,0 },
+ { 677, 677, 0, 0, 8900, 80,0 },
+ { 678, 678, 0, 0, 1893, 653,0 },
+ { 679, 679, 0, 0, 3973, 206,0 },
+ { 680, 680, 0, 0, 40000, 173,0 },
+ { 681, 681, 0, 0, 40000, 73,0 },
+ { 682, 682, 0, 0, 40000, 93,0 },
+ { 683, 683, 0, 0, 1606, 640,0 },
+ { 684, 684, 0, 0, 15486, 1580,0 },
+ { 685, 685, 0, 0, 40000, 346,0 },
+ { 686, 686, 0, 0, 40000, 786,0 },
+ { 687, 687, 0, 0, 386, 240,0 },
+ { 688, 688, 0, 0, 40000, 2066,0 },
+ { 689, 689, 0, 0, 15453, 73,0 },
+ { 690, 690, 0, 0, 1206, 240,0 },
+ { 691, 691, 0, 0, 8866, 1366,0 },
+ { 692, 692, 0, 0, 5913, 2253,0 },
+ { 693, 693, 0, 0, 773, 106,0 },
+ { 694, 694, 0, 0, 3793, 73,0 },
+ { 695, 695, 0, 0, 40000, 73,0 },
+ { 645, 645, 0, 0, 3633, 1180,0 },
+ { 696, 696, 0, 0, 40000, 80,0 },
+ { 697, 697, 0, 0, 40000, 0,0 },
+ { 698, 698, 0, 0, 40000, 66,0 },
+ { 699, 699, 0, 0, 40000, 66,0 },
+ { 700, 700, 0, 0, 106, 0,0 },
+ { 701, 701, 0, 0, 40000, 200,0 },
+ { 702, 702, 0, 0, 3913, 73,0 },
+ { 703, 703, 0, 0, 40000, 73,0 },
+ { 704, 704, 0, 0, 40000, 73,0 },
+ { 705, 705, 0, 0, 40000, 73,0 },
+ { 706, 706, 0, 0, 40000, 66,0 },
+ { 707, 707, 0, 0, 40000, 313,0 },
+ { 708, 708, 0, 0, 40000, 100,0 },
+ { 709, 709, 0, 0, 40000, 213,0 },
+ { 710, 710, 0, 0, 40000, 53,0 },
+ { 711, 711, 0, 0, 40000, 40,0 },
+ { 712, 712, 0, 0, 40000, 73,0 },
+ { 713, 713, 0, 0, 40000, 140,0 },
+ { 714, 714, 0, 0, 40000, 606,0 },
+ { 715, 715, 0, 0, 40000, 226,0 },
+ { 716, 716, 0, 0, 3746, 1273,0 },
+ { 717, 717, 0, 0, 40000, 80,0 },
+ { 718, 718, 0, 0, 2360, 806,0 },
+ { 719, 719, 0, 0, 1186, 420,0 },
+ { 720, 720, 0, 0, 12533, 1953,0 },
+ { 721, 721, 0, 0, 973, 1280,0 },
+ { 722, 722, 0, 0, 40000, 426,0 },
+ { 723, 723, 0, 0, 40000, 53,0 },
+ { 724, 724, 0, 0, 40000, 66,0 },
+ { 725, 725, 0, 0, 1246, 73,0 },
+ { 726, 726, 0, 0, 3726, 1246,0 },
+ { 727, 727, 0, 0, 2346, 813,0 },
+ { 728, 728, 0, 0, 1206, 433,0 },
+ { 507, 507, 0, 0, 306, 246,0 },
+ { 512, 512, 0, 0, 526, 840,0 },
+ { 729, 729, 0, 0, 14793, 4933,0 },
+ { 730, 730, 0, 0, 14640, 4806,0 },
+ { 731, 731, 0, 0, 5233, 633,0 },
+ { 732, 732, 0, 0, 40000, 2513,0 },
+ { 733, 733, 0, 0, 40000, 820,0 },
+ { 734, 734, 0, 0, 40000, 0,0 },
+ { 735, 735, 0, 0, 1726, 793,0 },
+ { 736, 736, 0, 0, 513, 20,0 },
+ { 737, 737, 0, 2, 6, 0,0 },
+ { 738, 738, 38, 0, 1020, 413,0 },
+ { 739, 739, 44, 0, 220, 33,0 },
+ { 500, 500, 58, 0, 100, 0,0 },
+ { 740, 740, 24, 0, 513, 206,0 },
+ { 741, 741, 60, 0, 220, 26,0 },
+ { 736, 736, 44, 0, 286, 20,0 },
+ { 742, 742, 25, 0, 626, 246,0 },
+ { 743, 743, 60, 0, 146, 86,0 },
+ { 742, 742, 30, 0, 626, 240,0 },
+ { 377, 377, 60, 0, 446, 626,0 },
+ { 742, 742, 33, 0, 620, 226,0 },
+ { 744, 744, 60, 0, 220, 113,0 },
+ { 742, 742, 35, 0, 620, 233,0 },
+ { 742, 742, 37, 0, 633, 246,0 },
+ { 745, 745, 0, 0, 1880, 640,0 },
+ { 742, 742, 40, 0, 640, 260,0 },
+ { 746, 746,102, 0, 960, 300,0 },
+ { 747, 747, 80, 0, 1106, 126,0 },
+ { 377, 377, 0, 0, 500, 760,0 },
+ { 748, 748, 56, 0, 100, 0,0 },
+ { 749, 749, 0, 0, 973, 1300,0 },
+ { 746, 746,100, 0, 960, 340,0 },
+ { 750, 750, 40, 0, 626, 240,0 },
+ { 750, 750, 35, 0, 626, 240,0 },
+ { 751, 751, 29, 0, 206, 106,0 },
+ { 750, 750, 29, 0, 633, 240,0 },
+ { 750, 750, 22, 0, 640, 233,0 },
+ { 500, 500, 0, 0, 106, 0,0 },
+ { 752, 752, 0, 0, 206, 26,0 },
+ { 753, 753, 84, 0, 166, 20,0 },
+ { 754, 754, 84, 0, 1580, 553,0 },
+ { 755, 755, 0, 0, 633, 233,0 },
+ { 755, 755, 71, 0, 440, 180,0 },
+ { 755, 755, 53, 0, 513, 200,0 },
+ { 755, 755, 48, 0, 520, 206,0 },
+ { 756, 756, 95, 0, 286, 20,0 },
+ { 757, 757, 95, 0, 1880, 20,0 },
+ { 758, 758, 0, 0, 14413, 333,0 },
+ { 759, 759, 0, 0, 14453, 360,0 },
+ { 760, 760, 0, 0, 14940, 353,0 },
+ { 761, 761, 0, 0, 7286, 340,0 },
+ { 762, 762, 0, 0, 14700, 60,0 },
+ { 763, 763, 0, 0, 14506, 340,0 },
+ { 764, 764, 0, 0, 14706, 200,0 },
+ { 765, 765, 0, 0, 40000, 0,0 },
+ { 766, 766, 0, 0, 2900, 426,0 },
+ { 767, 767, 0, 0, 2986, 753,0 },
+ { 768, 768, 0, 0, 1706, 680,0 },
+ { 769, 769, 0, 0, 14646, 1253,0 },
+ { 770, 770, 0, 0, 1713, 486,0 },
+ { 771, 771, 0, 0, 966, 346,0 },
+ { 772, 772, 0, 0, 3453, 766,0 },
+ { 773, 773, 0, 0, 2866, 486,0 },
+ { 774, 774, 0, 0, 40000, 73,0 },
+ { 775, 775, 0, 0, 40000, 73,0 },
+ { 776, 776, 0, 0, 40000, 166,0 },
+ { 777, 777, 0, 0, 40000, 126,0 },
+ { 778, 778, 0, 0, 40000, 113,0 },
+ { 779, 779, 0, 0, 40000, 113,0 },
+ { 780, 780, 0, 0, 40000, 93,0 },
+ { 781, 781, 0, 0, 40000, 200,0 },
+ { 782, 782, 0, 0, 7186, 93,0 },
+ { 783, 783, 0, 0, 6406, 120,0 },
+ { 784, 784, 0, 0, 40000, 0,0 },
+ { 785, 785, 0, 0, 40000, 0,0 },
+ { 786, 786, 0, 0, 1220, 73,0 },
+ { 787, 787, 0, 0, 40000, 0,0 },
+ { 788, 788, 0, 0, 17566, 66,0 },
+ { 789, 789, 0, 0, 2333, 26,0 },
+ { 790, 790, 0, 0, 4560, 153,0 },
+ { 791, 791, 0, 0, 40000, 0,0 },
+ { 792, 792, 0, 0, 40000, 0,0 },
+ { 793, 793, 0, 0, 40000, 0,0 },
+ { 794, 794, 0, 0, 2506, 126,0 },
+ { 795, 795, 0, 0, 2513, 126,0 },
+ { 796, 796, 0, 0, 40000, 0,0 },
+ { 797, 797, 0, 0, 3386, 80,0 },
+ { 798, 798, 0, 0, 40000, 100,0 },
+ { 799, 799, 0, 0, 40000, 100,0 },
+ { 800, 800, 0, 0, 40000, 120,0 },
+ { 801, 801, 0, 0, 40000, 0,0 },
+ { 802, 802, 0, 0, 40000, 200,0 },
+ { 803, 803, 0, 0, 1080, 180,0 },
+ { 804, 804, 0, 0, 3620, 1166,0 },
+ { 805, 805, 0, 0, 1186, 393,0 },
+ { 806, 806, 0, 0, 40000, 213,0 },
+ { 807, 807, 0, 0, 40000, 426,0 },
+ { 808, 808, 0, 0, 40000, 146,0 },
+ { 809, 809, 0, 0, 40000, 146,0 },
+ { 810, 810, 0, 0, 40000, 60,0 },
+ { 811, 811, 0, 0, 40000, 113,0 },
+ { 812, 812, 0, 0, 40000, 93,0 },
+ { 813, 813, 0, 0, 1186, 153,0 },
+ { 814, 814, 0, 0, 40000, 0,0 },
+ { 815, 815, 0, 0, 40000, 80,0 },
+ { 816, 816, 0, 0, 40000, 80,0 },
+ { 817, 817, 0, 0, 40000, 46,0 },
+ { 818, 818, 0, 0, 40000, 0,0 },
+ { 819, 819, 0, 0, 40000, 66,0 },
+ { 820, 820, 0, 0, 40000, 126,0 },
+ { 821, 821, 0, 0, 40000, 213,0 },
+ { 822, 822, 0, 0, 40000, 80,0 },
+ { 823, 823, 0, 0, 40000, 73,0 },
+ { 824, 824, 0, 0, 40000, 73,0 },
+ { 825, 825, 0, 0, 40000, 100,0 },
+ { 826, 826, 0, 0, 40000, 93,0 },
+ { 827, 827, 0, 0, 40000, 73,0 },
+ { 828, 828, 0, 0, 40000, 73,0 },
+ { 829, 829, 0, 0, 40000, 80,0 },
+ { 830, 830, 0, 0, 40000, 80,0 },
+ { 831, 831, 0, 0, 40000, 80,0 },
+ { 832, 832, 0, 0, 40000, 73,0 },
+ { 833, 833, 0, 0, 40000, 80,0 },
+ { 834, 834, 0, 0, 40000, 86,0 },
+ { 835, 835, 0, 0, 40000, 100,0 },
+ { 836, 836, 0, 0, 40000, 100,0 },
+ { 837, 837, 0, 0, 40000, 140,0 },
+ { 838, 838, 0, 0, 40000, 73,0 },
+ { 839, 839, 0, 0, 40000, 0,0 },
+ { 840, 840, 0, 0, 40000, 93,0 },
+ { 841, 841, 0, 0, 40000, 0,0 },
+ { 842, 842, 0, 0, 40000, 0,0 },
+ { 843, 843, 0, 0, 40000, 73,0 },
+ { 844, 844, 0, 0, 40000, 66,0 },
+ { 845, 845, 0, 0, 40000, 0,0 },
+ { 846, 846, 0, 0, 40000, 193,0 },
+ { 847, 847, 0, 0, 40000, 340,0 },
+ { 848, 848, 0, 0, 40000, 233,0 },
+ { 849, 849, 0, 0, 40000, 80,0 },
+ { 850, 850, 0, 0, 40000, 186,0 },
+ { 851, 851, 0, 0, 9973, 426,0 },
+ { 852, 852, 0, 0, 40000, 200,0 },
+ { 853, 853, 0, 0, 40000, 400,0 },
+ { 854, 854, 0, 0, 14633, 200,0 },
+ { 855, 855, 0, 0, 40000, 333,0 },
+ { 856, 856, 0, 0, 4620, 800,0 },
+ { 857, 857, 0, 0, 8940, 386,0 },
+ { 858, 858, 0, 0, 8966, 740,0 },
+ { 859, 859, 0, 0, 40000, 273,0 },
+ { 860, 860, 0, 0, 40000, 126,0 },
+ { 861, 861, 0, 0, 40000, 400,0 },
+ { 862, 862, 0, 0, 4480, 213,0 },
+ { 863, 863, 0, 0, 633, 100,0 },
+ { 864, 864, 0, 0, 3740, 353,0 },
+ { 865, 865, 0, 0, 2333, 406,0 },
+ { 866, 866, 0, 0, 1933, 566,0 },
+ { 867, 867, 0, 0, 40000, 93,0 },
+ { 868, 868, 0, 0, 40000, 106,0 },
+ { 869, 869, 0, 0, 40000, 100,0 },
+ { 870, 870, 0, 0, 3093, 240,0 },
+ { 871, 871, 0, 0, 513, 93,0 },
+ { 872, 872, 0, 0, 700, 180,0 },
+ { 361, 361, 0, 0, 373, 40,0 },
+ { 873, 873, 0, 0, 1046, 446,0 },
+ { 874, 874, 0, 0, 1886, 520,0 },
+ { 875, 875, 0, 0, 1226, 366,0 },
+ { 876, 876, 0, 0, 4193, 73,0 },
+ { 877, 877, 0, 0, 826, 120,0 },
+ { 878, 878, 0, 0, 280, 146,0 },
+ { 879, 879, 0, 0, 5266, 806,0 },
+ { 880, 880, 0, 0, 386, 80,0 },
+ { 881, 881, 0, 0, 40000, 100,0 },
+ { 882, 882, 0, 0, 40000, 413,0 },
+ { 883, 883, 0, 0, 40000, 0,0 },
+ { 884, 884, 36, 0, 233, 80,0 },
+ { 885, 885, 48, 0, 193, 93,0 },
+ { 885, 885, 36, 0, 226, 100,0 },
+ { 886, 886, 36, 0, 113, 0,0 },
+ { 887, 887, 32, 0, 133, 40,0 },
+ { 767, 767, 96, 0, 1760, 480,0 },
+ { 888, 888, 30, 0, 246, 40,0 },
+ { 889, 889, 35, 0, 420, 140,0 },
+ { 890, 890, 60, 0, 240, 60,0 },
+ { 884, 884, 59, 0, 146, 20,0 },
+ { 890, 890, 44, 0, 240, 60,0 },
+ { 891, 891, 41, 0, 713, 273,0 },
+ { 892, 892, 47, 0, 173, 93,0 },
+ { 891, 891, 44, 0, 513, 206,0 },
+ { 891, 891, 48, 0, 506, 200,0 },
+ { 893, 893, 62, 0, 1926, 93,0 },
+ { 891, 891, 51, 0, 520, 200,0 },
+ { 891, 891, 54, 0, 513, 206,0 },
+ { 894, 894, 40, 0, 1280, 793,0 },
+ { 891, 891, 57, 0, 380, 160,0 },
+ { 895, 895, 97, 0, 233, 106,0 },
+ { 896, 896, 50, 0, 220, 93,0 },
+ { 376, 376, 60, 0, 1573, 713,0 },
+ { 897, 897, 53, 0, 126, 73,0 },
+ { 898, 898, 46, 0, 173, 133,0 },
+ { 897, 897, 57, 0, 126, 33,0 },
+ { 899, 899, 42, 0, 626, 233,0 },
+ { 899, 899, 37, 0, 633, 240,0 },
+ { 900, 900, 41, 0, 626, 240,0 },
+ { 900, 900, 37, 0, 626, 240,0 },
+ { 871, 871, 77, 0, 173, 40,0 },
+ { 871, 871, 72, 0, 173, 40,0 },
+ { 388, 388, 70, 0, 213, 86,0 },
+ { 901, 901, 39, 0, 260, 26,0 },
+ { 902, 902, 36, 0, 1093, 73,0 },
+ { 903, 903, 46, 0, 120, 73,0 },
+ { 904, 904, 48, 0, 766, 80,0 },
+ { 905, 905, 85, 0, 126, 26,0 },
+ { 361, 361, 66, 0, 180, 26,0 },
+ { 906, 906, 41, 0, 193, 73,0 },
+ { 907, 907, 41, 0, 333, 106,0 },
+ { 908, 908, 81, 0, 160, 26,0 },
+ { 400, 400, 10, 0, 1186, 413,0 },
+ { 886, 886, 60, 0, 100, 0,0 },
+ { 873, 873, 53, 0, 846, 360,0 },
+ { 909, 909, 0, 0, 5593, 340,0 },
+ { 910, 910, 0, 0, 14646, 346,0 },
+ { 911, 911, 0, 0, 6826, 280,0 },
+ { 912, 912, 0, 0, 7000, 306,0 },
+ { 913, 913, 0, 0, 8793, 133,0 },
+ { 914, 914, 0, 0, 14680, 346,0 },
+ { 915, 915, 0, 0, 7246, 126,0 },
+ { 916, 916, 0, 0, 40000, 0,0 },
+ { 917, 917, 0, 0, 1866, 433,0 },
+ { 362, 362, 0, 0, 1106, 340,0 },
+ { 918, 918, 0, 0, 1053, 273,0 },
+ { 919, 919, 0, 0, 14513, 1213,0 },
+ { 920, 920, 0, 0, 1886, 646,0 },
+ { 921, 921, 0, 0, 926, 313,0 },
+ { 922, 922, 0, 0, 2340, 806,0 },
+ { 923, 923, 0, 0, 2966, 553,0 },
+ { 924, 924, 0, 0, 40000, 66,0 },
+ { 925, 925, 0, 0, 40000, 73,0 },
+ { 926, 926, 0, 0, 40000, 0,0 },
+ { 927, 927, 0, 0, 40000, 126,0 },
+ { 928, 928, 0, 0, 40000, 113,0 },
+ { 929, 929, 0, 0, 40000, 113,0 },
+ { 930, 930, 0, 0, 40000, 93,0 },
+ { 931, 931, 0, 0, 40000, 113,0 },
+ { 932, 932, 0, 0, 7200, 86,0 },
+ { 933, 933, 0, 0, 5373, 106,0 },
+ { 934, 934, 0, 0, 40000, 0,0 },
+ { 935, 935, 0, 0, 40000, 0,0 },
+ { 936, 936, 0, 0, 2380, 73,0 },
+ { 937, 937, 0, 0, 40000, 0,0 },
+ { 938, 938, 0, 0, 40000, 0,0 },
+ { 939, 939, 0, 0, 6013, 53,0 },
+ { 940, 940, 0, 0, 3713, 126,0 },
+ { 941, 941, 0, 0, 17566, 26,0 },
+ { 942, 942, 0, 0, 40000, 0,0 },
+ { 943, 943, 0, 0, 40000, 0,0 },
+ { 944, 944, 0, 0, 2506, 126,0 },
+ { 945, 945, 0, 0, 3733, 73,0 },
+ { 946, 946, 0, 0, 40000, 0,0 },
+ { 947, 947, 0, 0, 3386, 80,0 },
+ { 948, 948, 0, 0, 40000, 100,0 },
+ { 949, 949, 0, 0, 40000, 100,0 },
+ { 950, 950, 0, 0, 40000, 113,0 },
+ { 951, 951, 0, 0, 40000, 0,0 },
+ { 952, 952, 0, 0, 40000, 200,0 },
+ { 953, 953, 0, 0, 1140, 213,0 },
+ { 954, 954, 0, 0, 2140, 400,0 },
+ { 955, 955, 0, 0, 813, 240,0 },
+ { 956, 956, 0, 0, 40000, 100,0 },
+ { 957, 957, 0, 0, 40000, 426,0 },
+ { 958, 958, 0, 0, 40000, 0,0 },
+ { 959, 959, 0, 0, 40000, 146,0 },
+ { 960, 960, 0, 0, 40000, 120,0 },
+ { 961, 961, 0, 0, 40000, 93,0 },
+ { 962, 962, 0, 0, 1193, 153,0 },
+ { 963, 963, 0, 0, 40000, 46,0 },
+ { 964, 964, 0, 0, 40000, 80,0 },
+ { 965, 965, 0, 0, 40000, 80,0 },
+ { 966, 966, 0, 0, 40000, 20,0 },
+ { 967, 967, 0, 0, 40000, 0,0 },
+ { 968, 968, 0, 0, 40000, 93,0 },
+ { 969, 969, 0, 0, 40000, 86,0 },
+ { 970, 970, 0, 0, 40000, 213,0 },
+ { 971, 971, 0, 0, 40000, 80,0 },
+ { 972, 972, 0, 0, 40000, 73,0 },
+ { 973, 973, 0, 0, 40000, 0,0 },
+ { 974, 974, 0, 0, 40000, 93,0 },
+ { 975, 975, 0, 0, 40000, 73,0 },
+ { 976, 976, 0, 0, 40000, 73,0 },
+ { 977, 977, 0, 0, 40000, 66,0 },
+ { 978, 978, 0, 0, 40000, 66,0 },
+ { 979, 979, 0, 0, 40000, 100,0 },
+ { 980, 980, 0, 0, 40000, 73,0 },
+ { 981, 981, 0, 0, 40000, 73,0 },
+ { 982, 982, 0, 0, 40000, 80,0 },
+ { 983, 983, 0, 0, 40000, 100,0 },
+ { 984, 984, 0, 0, 40000, 100,0 },
+ { 985, 985, 0, 0, 40000, 100,0 },
+ { 986, 986, 0, 0, 40000, 80,0 },
+ { 987, 987, 0, 0, 40000, 73,0 },
+ { 988, 988, 0, 0, 40000, 0,0 },
+ { 989, 989, 0, 0, 40000, 86,0 },
+ { 990, 990, 0, 0, 40000, 0,0 },
+ { 991, 991, 0, 0, 40000, 0,0 },
+ { 992, 992, 0, 0, 40000, 80,0 },
+ { 993, 993, 0, 0, 40000, 86,0 },
+ { 994, 994, 0, 0, 40000, 0,0 },
+ { 995, 995, 0, 0, 40000, 0,0 },
+ { 996, 996, 0, 0, 40000, 333,0 },
+ { 997, 997, 0, 0, 40000, 180,0 },
+ { 998, 998, 0, 0, 40000, 80,0 },
+ { 999, 999, 0, 0, 40000, 120,0 },
+ {1000,1000, 0, 0, 10006, 460,0 },
+ {1001,1001, 0, 0, 40000, 186,0 },
+ {1002,1002, 0, 0, 40000, 400,0 },
+ {1003,1003, 0, 0, 20333, 260,0 },
+ {1004,1004, 0, 0, 40000, 373,0 },
+ {1005,1005, 0, 0, 4520, 400,0 },
+ {1006,1006, 0, 0, 8213, 306,0 },
+ {1007,1007, 0, 0, 8646, 360,0 },
+ {1008,1008, 0, 0, 40000, 160,0 },
+ {1009,1009, 0, 0, 40000, 133,0 },
+ {1010,1010, 0, 0, 40000, 400,0 },
+ {1011,1011, 0, 0, 4473, 193,0 },
+ {1012,1012, 0, 0, 1813, 0,0 },
+ {1013,1013, 0, 0, 3726, 353,0 },
+ {1014,1014, 0, 0, 4400, 373,0 },
+ {1015,1015, 0, 0, 953, 166,0 },
+ {1016,1016, 0, 0, 40000, 73,0 },
+ {1017,1017, 0, 0, 40000, 100,0 },
+ {1018,1018, 0, 0, 40000, 100,0 },
+ {1019,1019, 0, 0, 3100, 240,0 },
+ { 444, 444, 0, 0, 513, 93,0 },
+ {1020,1020, 0, 0, 626, 180,0 },
+ { 449, 449, 0, 0, 373, 80,0 },
+ { 453, 453, 0, 0, 40000, 0,0 },
+ {1021,1021, 0, 0, 1020, 340,0 },
+ {1022,1022, 0, 0, 1200, 366,0 },
+ {1023,1023, 0, 0, 4193, 73,0 },
+ {1024,1024, 0, 0, 820, 120,0 },
+ {1025,1025, 0, 0, 680, 213,0 },
+ {1026,1026, 0, 0, 5260, 806,0 },
+ {1027,1027, 0, 0, 9193, 86,0 },
+ {1028,1028, 0, 0, 40000, 100,0 },
+ {1029,1029, 0, 0, 40000, 426,0 },
+ {1030,1030, 0, 0, 40000, 260,0 },
+ {1031,1031, 0, 0, 3480, 66,0 },
+ {1032,1032, 32, 0, 133, 46,0 },
+ {1033,1033, 30, 0, 200, 40,0 },
+ {1034,1034, 96, 0, 146, 73,0 },
+ {1035,1035, 60, 0, 553, 186,0 },
+ {1036,1036, 0, 0, 13193, 260,0 },
+ {1037,1037, 0, 0, 40000, 100,0 },
+ {1038,1038, 0, 0, 7980, 66,0 },
+ {1039,1039, 0, 0, 40000, 0,0 },
+ {1040,1040, 0, 0, 980, 340,0 },
+ {1041,1041, 0, 0, 7413, 2480,0 },
+ {1042,1042, 0, 0, 2906, 520,0 },
+ {1043,1043, 0, 0, 40000, 73,0 },
+ {1044,1044, 0, 0, 40000, 53,0 },
+ {1045,1045, 0, 0, 40000, 113,0 },
+ {1046,1046, 0, 0, 5380, 113,0 },
+ {1047,1047, 0, 0, 40000, 0,0 },
+ {1048,1048, 0, 0, 2366, 73,0 },
+ {1049,1049, 0, 0, 40000, 0,0 },
+ {1050,1050, 0, 0, 18293, 80,0 },
+ {1051,1051, 0, 0, 18466, 146,0 },
+ {1052,1052, 0, 0, 9220, 73,0 },
+ {1053,1053, 0, 0, 40000, 240,0 },
+ {1054,1054, 0, 0, 40000, 0,0 },
+ {1055,1055, 0, 0, 1086, 126,0 },
+ {1056,1056, 0, 0, 3766, 73,0 },
+ {1057,1057, 0, 0, 1186, 226,0 },
+ {1058,1058, 0, 0, 3373, 73,0 },
+ {1059,1059, 0, 0, 40000, 246,0 },
+ {1060,1060, 0, 0, 340, 220,0 },
+ {1061,1061, 0, 0, 1186, 386,0 },
+ {1062,1062, 0, 0, 40000, 253,0 },
+ {1063,1063, 0, 0, 40000, 440,0 },
+ {1064,1064, 0, 0, 40000, 46,0 },
+ {1065,1065, 0, 0, 40000, 80,0 },
+ {1066,1066, 0, 0, 40000, 126,0 },
+ {1067,1067, 0, 0, 40000, 133,0 },
+ {1068,1068, 0, 0, 40000, 93,0 },
+ {1069,1069, 0, 0, 40000, 86,0 },
+ {1070,1070, 0, 0, 40000, 93,0 },
+ {1071,1071, 0, 0, 40000, 66,0 },
+ {1072,1072, 0, 0, 40000, 93,0 },
+ {1073,1073, 0, 0, 40000, 73,0 },
+ {1074,1074, 0, 0, 40000, 173,0 },
+ {1075,1075, 0, 0, 586, 193,0 },
+ {1076,1076, 0, 0, 40000, 146,0 },
+ {1077,1077, 0, 0, 18460, 73,0 },
+ {1078,1078, 0, 0, 846, 93,0 },
+ {1079,1079, 0, 0, 40000, 0,0 },
+ {1080,1080, 0, 0, 40000, 86,0 },
+ {1081,1081, 0, 0, 40000, 0,0 },
+ {1082,1082, 0, 0, 40000, 353,0 },
+ {1083,1083, 0, 0, 40000, 300,0 },
+ {1084,1084, 0, 0, 40000, 320,0 },
+ {1085,1085, 0, 0, 9920, 1553,0 },
+ {1086,1086, 0, 0, 40000, 386,0 },
+ {1087,1087, 0, 0, 40000, 0,0 },
+ {1088,1088, 0, 0, 9980, 873,0 },
+ {1089,1089, 0, 0, 40000, 386,0 },
+ {1090,1090, 0, 0, 966, 126,0 },
+ {1091,1091, 0, 0, 40000, 820,0 },
+ {1092,1092, 0, 0, 8620, 366,0 },
+ {1093,1093, 0, 0, 40000, 826,0 },
+ {1094,1094, 0, 0, 40000, 433,0 },
+ {1095,1095, 0, 0, 633, 73,0 },
+ {1096,1096, 0, 0, 3693, 126,0 },
+ {1097,1097, 0, 0, 40000, 0,0 },
+ {1098,1098, 0, 0, 40000, 153,0 },
+ {1099,1099, 0, 0, 40000, 0,0 },
+ {1100,1100, 0, 0, 40000, 0,0 },
+ {1101,1101, 0, 0, 40000, 306,0 },
+ {1102,1102, 0, 0, 3666, 3093,0 },
+ {1103,1103, 0, 0, 1873, 653,0 },
+ {1104,1104, 0, 0, 40000, 0,0 },
+ {1105,1105, 0, 0, 11293, 886,0 },
+ {1106,1106, 0, 0, 40000, 546,0 },
+ { 430, 430, 0, 0, 1146, 80,0 },
+ {1107,1107, 35, 0, 580, 80,0 },
+ {1090,1090, 77, 0, 280, 60,0 },
+ {1090,1090, 72, 0, 280, 60,0 },
+ {1108,1108, 0, 0, 10180, 600,0 },
+ {1109,1109, 0, 0, 10053, 353,0 },
+ {1110,1111, 0, 1, 9940, 480,0 },
+ {1112,1113, 0, 1, 10620, 473,0.03125 },
+ {1114,1114, 0, 0, 40000, 0,0 },
+ {1115,1116, 0, 1, 9833, 220,0 },
+ {1117,1117, 0, 0, 10286, 473,0 },
+ {1118,1118, 0, 0, 7686, 93,0 },
+ {1119,1119, 0, 0, 7220, 613,0 },
+ {1120,1120, 0, 0, 11513, 1666,0 },
+ {1121,1121, 0, 0, 5200, 1700,0 },
+ {1122,1122, 0, 0, 10173, 626,0 },
+ {1123,1123, 0, 0, 1206, 380,0 },
+ {1124,1124, 0, 0, 1953, 866,0 },
+ {1125,1125, 0, 0, 4686, 1586,0 },
+ {1126,1126, 0, 0, 3786, 893,0 },
+ {1127,1127, 0, 0, 40000, 126,0 },
+ {1128,1128, 0, 0, 40000, 120,0 },
+ {1129,1130, 0, 1, 40000, 146,0.15625 },
+ {1131,1131, 0, 0, 40000, 433,0 },
+ {1132,1132, 0, 0, 40000, 133,0 },
+ {1133,1134, 0, 1, 40000, 126,-0.046875 },
+ {1135,1135, 0, 0, 40000, 113,0 },
+ {1136,1137, 0, 1, 40000, 253,2.5e-05 },
+ {1138,1138, 0, 0, 18440, 240,0 },
+ {1139,1139, 0, 0, 5213, 886,0 },
+ {1140,1140, 0, 0, 1446, 113,0 },
+ {1141,1141, 0, 0, 5233, 106,0 },
+ {1142,1142, 0, 0, 5286, 266,0 },
+ {1143,1143, 0, 0, 40000, 66,0 },
+ {1144,1144, 0, 0, 40000, 66,0 },
+ {1145,1145, 0, 0, 10593, 106,0 },
+ {1146,1146, 0, 0, 2733, 160,0 },
+ {1147,1147, 0, 0, 10313, 93,0 },
+ {1148,1148, 0, 0, 40000, 0,0 },
+ {1149,1150, 0, 1, 40000, 0,-0.03125 },
+ {1151,1151, 0, 0, 40000, 53,0 },
+ {1152,1152, 0, 0, 10560, 246,0 },
+ {1153,1153, 0, 0, 2700, 153,0 },
+ {1154,1154, 0, 1, 40000, 100,-0.15625 },
+ {1155,1155, 0, 0, 40000, 73,0 },
+ {1156,1156, 0, 0, 40000, 220,0 },
+ {1157,1157, 0, 0, 40000, 140,0 },
+ {1158,1158, 0, 0, 40000, 380,0 },
+ {1159,1160, 0, 1, 40000, 400,0.171875 },
+ {1161,1161, 0, 0, 40000, 0,0 },
+ {1162,1162, 0, 0, 40000, 0,0 },
+ {1163,1163, 0, 0, 4733, 906,0 },
+ {1164,1165, 0, 1, 40000, 393,-0.125 },
+ {1166,1167, 0, 1, 40000, 366,0.078125 },
+ {1168,1168, 0, 1, 40000, 2453,-0.078125 },
+ {1169,1170, 0, 1, 40000, 546,0.0625 },
+ {1171,1172, 0, 1, 40000, 786,0.15625 },
+ {1173,1173, 0, 0, 40000, 0,0 },
+ {1174,1174, 0, 0, 40000, 513,0 },
+ {1175,1176, 0, 1, 2300, 533,0 },
+ {1177,1177, 0, 0, 40000, 80,0 },
+ {1178,1178, 0, 0, 40000, 60,0 },
+ {1179,1179, 0, 0, 40000, 0,0 },
+ {1180,1180, 0, 0, 10653, 86,0 },
+ {1181,1182, 0, 1, 40000, 0,2.5e-05 },
+ {1183,1184, 0, 1, 40000, 86,0.046875 },
+ {1185,1186, 0, 1, 40000, 0,0.09375 },
+ {1187,1188, 0, 1, 40000, 0,0.09375 },
+ {1189,1189, 0, 0, 40000, 133,0 },
+ {1190,1190, 0, 0, 40000, 140,0 },
+ {1191,1191, 0, 0, 40000, 73,0 },
+ {1192,1192, 0, 0, 40000, 60,0 },
+ {1193,1193, 0, 0, 40000, 106,0 },
+ {1194,1194, 0, 0, 40000, 93,0 },
+ {1195,1195, 0, 0, 40000, 66,0 },
+ {1196,1196, 0, 0, 40000, 93,0 },
+ {1197,1197, 0, 0, 40000, 60,0 },
+ {1198,1198, 0, 0, 40000, 66,0 },
+ {1199,1199, 0, 0, 40000, 120,0 },
+ {1200,1200, 0, 0, 40000, 100,0 },
+ {1201,1201, 0, 0, 40000, 86,0 },
+ {1202,1202, 0, 0, 40000, 0,0 },
+ {1203,1203, 0, 0, 40000, 233,0 },
+ {1204,1204, 0, 0, 40000, 100,0 },
+ {1205,1206, 0, 1, 40000, 266,0.03125 },
+ {1207,1208, 0, 1, 40000, 260,-2.5e-05 },
+ {1209,1209, 0, 0, 40000, 146,0 },
+ {1210,1211, 0, 1, 40000, 60,0.03125 },
+ {1212,1212, 0, 0, 40000, 53,0 },
+ {1213,1214, 0, 1, 40000, 706,-0.09375 },
+ {1215,1216, 0, 1, 40000, 660,-0.046875 },
+ {1217,1217, 0, 0, 40000, 133,0 },
+ {1218,1219, 0, 1, 40000, 426,0.03125 },
+ {1220,1220, 0, 1, 40000, 0,0.03125 },
+ {1221,1222, 0, 1, 40000, 260,0.171875 },
+ {1223,1223, 0, 0, 40000, 0,0 },
+ {1224,1224, 0, 0, 6100, 1580,0 },
+ {1225,1150, 0, 1, 40000, 73,-0.03125 },
+ {1226,1226, 0, 0, 40000, 1580,0 },
+ {1227,1227, 0, 0, 40000, 40,0 },
+ {1228,1229, 0, 1, 40000, 113,0.125 },
+ {1230,1230, 0, 0, 2666, 846,0 },
+ {1231,1232, 0, 1, 40000, 0,-0.03125 },
+ {1233,1234, 0, 1, 9233, 2413,-0.1875 },
+ {1235,1235, 0, 0, 40000, 1020,0 },
+ {1236,1236, 0, 0, 40000, 0,0 },
+ {1237,1237, 0, 0, 9633, 3073,0 },
+ {1238,1238, 0, 0, 40000, 0,0 },
+ {1239,1239, 0, 0, 2446, 386,0 },
+ {1240,1241, 0, 1, 3113, 1133,0 },
+ {1242,1242, 0, 0, 18473, 813,0 },
+ {1243,1243, 0, 0, 1206, 660,0 },
+ {1244,1244, 0, 0, 40000, 153,0 },
+ {1245,1245, 0, 0, 40000, 160,0 },
+ {1246,1246, 0, 0, 40000, 133,0 },
+ {1247,1247, 0, 0, 8660, 2386,0 },
+ {1248,1248, 0, 0, 293, 106,0 },
+ {1249,1249, 0, 0, 40000, 433,0 },
+ {1250,1250, 0, 0, 426, 80,0 },
+ {1251,1251, 0, 0, 973, 360,0 },
+ {1252,1252, 0, 0, 573, 153,0 },
+ {1253,1253, 0, 0, 3746, 126,0 },
+ {1254,1254, 0, 0, 2313, 73,0 },
+ {1255,1255, 0, 0, 1473, 106,0 },
+ {1256,1256, 0, 0, 1500, 320,0 },
+ {1257,1257, 0, 0, 5280, 1593,0 },
+ {1258,1258, 0, 0, 40000, 60,0 },
+ {1259,1259, 0, 0, 40000, 146,0 },
+ {1260,1260, 29, 0, 40000, 300,0 },
+ {1261,1261, 65, 0, 40000, 2040,0 },
+ {1262,1262, 0, 0, 626, 240,0 },
+ {1263,1263, 25, 0, 626, 226,0 },
+ {1264,1264, 83, 0, 180, 80,0 },
+ {1265,1265, 32, 0, 260, 140,0 },
+ {1266,1266, 60, 0, 40000, 0,0 },
+ {1267,1267, 36, 0, 286, 40,0 },
+ {1268,1268, 27, 0, 573, 80,0 },
+ {1269,1269, 31, 0, 693, 106,0 },
+ {1270,1270, 21, 0, 500, 146,0 },
+ {1270,1270, 26, 0, 493, 140,0 },
+ {1270,1270, 28, 0, 500, 146,0 },
+ {1271,1271, 60, 0, 2420, 1080,0 },
+ {1270,1270, 32, 0, 413, 126,0 },
+ {1272,1272, 60, 0, 806, 300,0 },
+ {1273,1273, 96, 0, 1146, 493,0 },
+ {1274,1274, 72, 0, 1246, 586,0 },
+ {1275,1275, 79, 0, 286, 106,0 },
+ {1276,1276, 69, 0, 1193, 1046,0 },
+ {1277,1277, 71, 0, 340, 93,0 },
+ {1278,1278, 22, 0, 1880, 653,0 },
+ {1279,1279, 55, 0, 246, 120,0 },
+ {1279,1279, 48, 0, 286, 133,0 },
+ {1280,1280, 0, 0, 40, 0,0 },
+ {1281,1281, 49, 2, 40, 0,0 },
+ {1282,1282, 73, 0, 166, 33,0 },
+ {1282,1282, 68, 0, 166, 33,0 },
+ {1282,1282, 61, 0, 200, 40,0 },
+ {1283,1283, 0, 0, 40, 0,0 },
+ {1284,1284, 0, 0, 40000, 100,0 },
+ {1285,1285, 0, 0, 40000, 60,0 },
+ {1286,1286, 0, 0, 40000, 0,0 },
+ {1287,1287, 0, 0, 10460, 153,0 },
+ {1288,1289, 0, 1, 40000, 0,0 },
+ {1290,1290, 0, 0, 40000, 0,0 },
+ {1291,1292, 36, 1, 353, 153,0 },
+ {1293,1293, 69, 0, 1206, 1060,0 },
+ {1294,1294, 0, 0, 40000, 0,0 },
+ {1295,1295, 0, 0, 40000, 73,0 },
+ {1296,1296, 0, 0, 40000, 0,0 },
+ {1297,1297, 22, 0, 1880, 653,0 },
+ {1298,1298, 0, 0, 40000, 73,0 },
+ {1299,1299, 0, 0, 3913, 420,0 },
+ {1300,1300, 0, 0, 9233, 240,0 },
+ {1301,1301, 0, 0, 4660, 1573,0 },
+ {1302,1302, 0, 0, 1166, 400,0 },
+ {1303,1303, 0, 0, 40000, 126,0 },
+ {1304,1304, 0, 0, 40000, 93,0 },
+ {1305,1305, 0, 0, 40000, 93,0 },
+ {1306,1306, 0, 0, 40000, 553,0 },
+ {1307,1307, 0, 0, 40000, 660,0 },
+ {1308,1308, 0, 0, 40000, 73,0 },
+ {1309,1309, 0, 0, 40000, 146,0 },
+ {1310,1310, 0, 0, 40000, 146,0 },
+ {1311,1311, 0, 0, 4026, 100,0 },
+ {1312,1312, 0, 0, 18226, 100,0 },
+ {1313,1313, 0, 0, 40000, 0,0 },
+ {1314,1314, 0, 0, 40000, 73,0 },
+ {1315,1315, 0, 0, 40000, 140,0 },
+ {1316,1316, 0, 0, 40000, 393,0 },
+ {1317,1317, 0, 0, 40000, 406,0 },
+ {1318,1318, 0, 0, 40000, 373,0 },
+ {1319,1319, 0, 0, 40000, 0,0 },
+ {1320,1320, 0, 0, 40000, 360,0 },
+ {1321,1321, 0, 0, 1060, 380,0 },
+ {1322,1322, 0, 0, 40000, 66,0 },
+ {1323,1323, 0, 0, 40000, 66,0 },
+ {1324,1324, 0, 0, 40000, 86,0 },
+ {1325,1325, 0, 0, 40000, 73,0 },
+ { 260, 260, 0, 0, 40000, 80,0 },
+ {1326,1326, 0, 0, 40000, 80,0 },
+ {1327,1327, 0, 0, 40000, 73,0 },
+ {1328,1328, 0, 0, 40000, 73,0 },
+ {1329,1329, 0, 0, 40000, 153,0 },
+ {1330,1330, 0, 0, 40000, 153,0 },
+ {1331,1331, 0, 0, 40000, 146,0 },
+ {1332,1332, 0, 0, 40000, 146,0 },
+ {1333,1333, 0, 0, 40000, 73,0 },
+ {1334,1334, 0, 0, 40000, 153,0 },
+ {1335,1335, 0, 0, 40000, 233,0 },
+ {1336,1336, 0, 0, 40000, 400,0 },
+ {1337,1337, 0, 0, 40000, 1373,0 },
+ {1338,1338, 0, 0, 40000, 193,0 },
+ {1339,1339, 0, 0, 40000, 1273,0 },
+ {1340,1340, 0, 0, 40000, 186,0 },
+ {1341,1341, 0, 0, 40000, 86,0 },
+ {1342,1342, 0, 0, 7440, 2473,0 },
+ {1343,1343, 0, 0, 40000, 160,0 },
+ {1344,1344, 0, 0, 8966, 406,0 },
+ {1345,1345, 0, 0, 40000, 1353,0 },
+ {1346,1346, 0, 0, 14180, 4406,0 },
+ { 378, 378, 84, 0, 1333, 460,0 },
+ {1347,1347, 24, 0, 1893, 633,0 },
+ {1348,1348, 44, 0, 206, 86,0 },
+ {1349,1349, 40, 0, 586, 140,0 },
+ {1350,1350, 60, 0, 1026, 320,0 },
+ {1351,1351, 0, 0, 6560, 33,0 },
+ {1352,1352, 0, 0, 7373, 2453,0 },
+ {1353,1353, 0, 0, 4660, 1573,0 },
+ {1354,1354, 0, 0, 40000, 346,0 },
+ {1355,1355, 0, 0, 7126, 86,0 },
+ {1356,1356, 0, 0, 40000, 213,0 },
+ {1357,1357, 0, 0, 1180, 340,0 },
+ {1358,1358, 0, 0, 3893, 1466,0 },
+ {1359,1359, 0, 0, 2053, 1173,0 },
+ {1360,1360, 0, 0, 40000, 200,0 },
+ {1361,1361, 0, 0, 40000, 353,0 },
+ {1362,1362, 0, 0, 40000, 273,0 },
+ {1363,1363, 0, 0, 40000, 433,0 },
+ {1364,1364, 0, 0, 1940, 426,0 },
+ {1365,1365, 0, 0, 40000, 80,0 },
+ {1366,1366, 0, 0, 40000, 106,0 },
+ {1367,1367, 0, 0, 40000, 60,0 },
+ {1368,1368, 0, 0, 40000, 140,0 },
+ {1369,1369, 0, 0, 40000, 93,0 },
+ {1370,1370, 0, 0, 40000, 73,0 },
+ {1371,1371, 0, 0, 40000, 73,0 },
+ {1372,1372, 0, 0, 40000, 93,0 },
+ {1373,1373, 0, 0, 40000, 73,0 },
+ {1374,1374, 0, 0, 40000, 80,0 },
+ {1375,1375, 0, 0, 40000, 746,0 },
+ {1376,1376, 0, 0, 2360, 813,0 },
+ {1377,1377, 0, 0, 340, 146,0 },
+ {1378,1378, 35, 0, 713, 273,0 },
+ {1379,1379, 49, 0, 173, 93,0 },
+ {1377,1377, 48, 0, 286, 126,0 },
+ {1380,1380, 58, 0, 173, 100,0 },
+ {1377,1377, 60, 0, 286, 133,0 },
+ {1381,1381, 47, 0, 973, 360,0 },
+ {1382,1382, 60, 0, 146, 86,0 },
+ {1381,1381, 49, 0, 966, 333,0 },
+ {1383,1383, 72, 0, 506, 206,0 },
+ {1381,1381, 51, 0, 953, 340,0 },
+ {1384,1384, 84, 0, 1340, 480,0 },
+ {1381,1381, 54, 0, 986, 360,0 },
+ {1381,1381, 57, 0, 980, 346,0 },
+ {1385,1385, 72, 0, 1573, 440,0 },
+ {1381,1381, 60, 0, 953, 340,0 },
+ {1386,1386, 36, 0, 2673, 900,0 },
+ {1387,1387, 93, 0, 233, 106,0 },
+ {1388,1388, 72, 0, 966, 353,0 },
+ {1389,1389, 84, 0, 1366, 473,0 },
+ {1390,1390, 36, 0, 1326, 446,0 },
+ {1391,1391, 64, 0, 220, 86,0 },
+ {1392,1392, 68, 0, 126, 220,0 },
+ {1393,1393, 0, 0, 4513, 640,0 },
+ {1394,1394, 0, 0, 40000, 353,0 },
+ {1395,1395, 0, 0, 40000, 73,0 },
+ {1396,1396, 0, 0, 2040, 380,0 },
+ {1397,1397, 0, 0, 40000, 240,0 },
+ {1398,1398, 0, 0, 3246, 753,0 },
+ {1399,1399, 0, 0, 40000, 66,0 },
+ {1400,1400, 0, 0, 40000, 0,0 },
+ {1401,1401, 0, 0, 40000, 0,0 },
+ {1402,1402, 0, 0, 7720, 1260,0 },
+ {1403,1403, 0, 0, 213, 6420,0 },
+ {1404,1404, 0, 0, 40000, 66,0 },
+ {1405,1405, 0, 0, 40000, 73,0 },
+ {1406,1406, 0, 0, 40000, 93,0 },
+ {1407,1407, 0, 0, 1606, 640,0 },
+ {1408,1408, 0, 0, 15486, 1580,0 },
+ {1409,1409, 0, 0, 40000, 353,0 },
+ {1410,1410, 0, 0, 40000, 2066,0 },
+ {1411,1411, 0, 0, 40000, 0,0 },
+ {1412,1412, 0, 0, 15453, 73,0 },
+ {1413,1413, 0, 0, 3726, 1240,0 },
+ {1414,1414, 0, 0, 40000, 86,0 },
+ {1415,1415, 0, 0, 40000, 200,0 },
+ {1416,1416, 0, 0, 40000, 53,0 },
+ {1417,1417, 0, 0, 40000, 73,0 },
+ {1418,1418, 0, 0, 40000, 66,0 },
+ {1419,1419, 0, 0, 40000, 26,0 },
+ {1420,1420, 0, 0, 40000, 53,0 },
+ {1421,1421, 0, 0, 40000, 40,0 },
+ {1422,1422, 0, 0, 40000, 126,0 },
+ {1423,1423, 0, 0, 40000, 0,0 },
+ {1424,1424, 0, 0, 13653, 0,0 },
+ {1425,1425, 0, 0, 12533, 1953,0 },
+ {1426,1426, 0, 0, 973, 1280,0 },
+ {1427,1427, 0, 0, 40000, 426,0 },
+ {1428,1428, 0, 0, 40000, 53,0 },
+ {1429,1429, 0, 0, 40000, 66,0 },
+ {1430,1430, 0, 0, 526, 840,0 },
+ {1431,1431, 0, 0, 286, 1293,0 },
+ {1432,1432, 0, 0, 14726, 4920,0 },
+ {1433,1433, 0, 0, 5233, 633,0 },
+ {1434,1434, 0, 0, 13226, 2500,0 },
+ { 740, 740, 0, 0, 513, 200,0 },
+ {1435,1435, 0, 0, 40000, 5666,0 },
+ { 739, 739, 48, 0, 213, 20,0 },
+ { 500, 500, 55, 0, 100, 0,0 },
+ { 740, 740, 60, 0, 226, 113,0 },
+ { 500, 500, 41, 0, 106, 0,0 },
+ {1436,1436, 84, 0, 160, 26,0 },
+ {1437,1437, 84, 0, 386, 493,0 },
+ { 500, 500, 48, 0, 100, 0,0 },
+ {1438,1438, 15, 0, 340, 140,0 },
+ { 752, 752, 49, 0, 173, 20,0 },
+ {1438,1438, 16, 0, 346, 146,0 },
+ {1438,1438, 12, 0, 340, 140,0 },
+ { 740, 740, 55, 0, 220, 113,0 },
+ { 752, 752, 18, 0, 206, 20,0 },
+ { 752, 752, 15, 0, 200, 20,0 },
+ { 752, 752, 17, 0, 206, 20,0 },
+ {1439,1440, 0, 4, 40000, 0,0 },
+ {1441,1442, 0, 4, 7360, 200,0 },
+ {1443,1444, 0, 4, 11840, 320,0 },
+ {1445,1446, 0, 4, 9920, 326,0 },
+ {1447,1448, 0, 4, 10213, 0,0 },
+ {1449,1450, 0, 4, 7440, 2486,0 },
+ { 181,1451, 0, 4, 2360, 733,0 },
+ {1452,1453, 0, 4, 9260, 240,0 },
+ {1454,1455, 0, 4, 40000, 0,0 },
+ {1456,1457, 0, 4, 660, 126,0 },
+ {1458,1459, 0, 4, 40000, 66,0 },
+ { 190,1460, 0, 4, 40000, 60,0 },
+ { 192,1461, 0, 4, 40000, 73,0 },
+ {1462,1463, 0, 4, 40000, 353,0 },
+ {1464,1465, 0, 4, 40000, 353,0 },
+ {1466,1467, 0, 4, 40000, 66,0 },
+ {1468,1469, 0, 4, 40000, 46,0 },
+ { 35,1470, 0, 4, 40000, 46,0 },
+ { 36,1471, 0, 4, 320, 0,0 },
+ {1472,1473, 0, 4, 320, 0,0 },
+ {1474,1475, 0, 4, 7986, 93,0 },
+ { 39,1476, 0, 4, 1053, 226,0 },
+ {1477,1476, 0, 4, 1060, 226,0 },
+ {1478,1479, 0, 4, 40000, 453,0 },
+ { 50,1480, 0, 4, 40000, 400,0 },
+ {1481,1482, 0, 4, 40000, 133,0 },
+ {1483,1484, 0, 4, 40000, 0,0 },
+ {1485,1486, 0, 4, 40000, 226,0 },
+ { 55,1487, 0, 4, 40000, 100,0 },
+ {1488,1489, 0, 4, 40000, 93,0 },
+ {1490,1491, 0, 4, 40000, 73,0 },
+ {1492,1493, 0, 4, 40000, 73,0 },
+ {1494,1495, 0, 4, 40000, 73,0 },
+ {1496,1497, 0, 4, 40000, 80,0 },
+ {1496,1498, 0, 4, 40000, 73,0 },
+ {1499,1500, 0, 4, 40000, 66,0 },
+ {1501,1502, 0, 4, 40000, 146,0 },
+ {1503,1504, 0, 4, 40000, 93,0 },
+ {1505,1506, 0, 4, 40000, 73,0 },
+ { 86,1507, 0, 4, 40000, 80,0 },
+ {1508,1509, 0, 4, 40000, 0,0 },
+ {1510,1511, 0, 4, 40000, 60,0 },
+ {1512,1513, 0, 4, 40000, 0,0 },
+ {1514,1515, 0, 4, 40000, 0,0 },
+ {1516,1517, 0, 4, 40000, 773,0 },
+ {1518,1519, 0, 4, 5346, 2973,0 },
+ {1520,1521, 0, 4, 40000, 406,0 },
+ {1522,1523, 0, 4, 9080, 360,0 },
+ {1524,1525, 0, 4, 40000, 1200,0 },
+ {1526,1527, 0, 4, 40000, 800,0 },
+ {1528,1529, 0, 4, 40000, 960,0 },
+ { 111,1530, 0, 4, 1200, 433,0 },
+ {1531,1532, 0, 4, 226, 386,0 },
+ { 115,1533, 0, 4, 2433, 0,0 },
+ {1534,1535, 0, 4, 1873, 646,0 },
+ {1536,1537, 0, 4, 3013, 53,0 },
+ {1538,1539, 0, 4, 1560, 720,0 },
+ {1540, 339, 0, 6, 6, 0,0 },
+ {1541, 339, 0, 6, 6, 0,0 },
+ {1542,1543, 0, 4, 993, 93,0 },
+ {1544,1545, 0, 4, 293, 86,0 },
+ {1546,1547, 0, 4, 40000, 153,0 },
+ { 364, 365, 44, 4, 120, 0,0 },
+ { 129,1548, 48, 4, 173, 0,0 },
+ { 367, 368, 58, 4, 173, 0,0 },
+ { 129,1549, 60, 4, 173, 0,0 },
+ {1550,1551, 48, 4, 520, 200,0 },
+ { 132,1552, 43, 4, 173, 0,0 },
+ {1550,1551, 49, 4, 520, 200,0 },
+ {1553,1554, 43, 4, 160, 80,0 },
+ {1550,1551, 51, 4, 513, 0,0 },
+ { 134,1555, 43, 4, 1733, 0,0 },
+ {1550,1551, 54, 4, 506, 0,0 },
+ {1550,1551, 57, 4, 506, 0,0 },
+ { 380, 381, 72, 4, 1580, 0,0 },
+ {1550,1551, 60, 4, 520, 0,0 },
+ {1556,1557, 70, 4, 826, 306,0 },
+ { 374, 375, 60, 4, 973, 0,0 },
+ {1558,1559, 36, 4, 1233, 0,0 },
+ {1560,1561, 65, 4, 293, 133,0 },
+ {1562,1563, 84, 4, 1360, 0,0 },
+ {1564,1565, 59, 4, 380, 0,0 },
+ {1566,1567, 84, 4, 1593, 566,0 },
+ {1568,1569, 35, 4, 1353, 473,0 },
+ {1570,1571, 44, 4, 413, 0,0 },
+ {1572,1573, 67, 4, 246, 0,0 },
+ {1574,1575, 66, 4, 293, 0,0 },
+ { 145,1576, 59, 4, 146, 0,0 },
+ {1577,1578, 51, 4, 360, 0,0 },
+ {1579,1580, 45, 4, 246, 0,0 },
+ {1581,1582, 71, 4, 433, 0,0 },
+ { 149,1583, 60, 4, 280, 0,0 },
+ {1584,1585, 58, 4, 173, 0,0 },
+ {1586,1587, 53, 4, 173, 0,0 },
+ { 397,1588, 64, 4, 220, 80,0 },
+ {1589,1590, 71, 4, 106, 53,0 },
+ {1591,1592, 61, 4, 1000, 340,0 },
+ {1593,1594, 61, 4, 1000, 340,0 },
+ { 391, 392, 48, 4, 160, 46,0 },
+ { 391, 393, 48, 4, 380, 60,0 },
+ {1595,1596, 69, 4, 120, 0,0 },
+ { 159,1597, 68, 4, 120, 0,0 },
+ { 159,1597, 63, 4, 140, 0,0 },
+ {1598,1599, 74, 4, 893, 273,0 },
+ {1600,1601, 60, 4, 1013, 306,0 },
+ {1602,1603, 80, 4, 220, 0,0 },
+ {1604,1605, 64, 4, 1366, 0,0 },
+ {1606,1607, 69, 4, 120, 73,0 },
+ { 398, 399, 55, 4, 1540, 193,0 },
+ {1608,1609, 75, 4, 1573, 0,0 },
+ {1610,1611, 68, 4, 120, 0,0 },
+ {1612,1613, 48, 4, 360, 0,0 },
+ {1614,1615, 53, 4, 606, 0,0 },
+ {1616,1616, 0, 0, 40000, 1586,0 },
+ {1617,1617, 0, 0, 40000, 1226,0 },
+ {1618,1618, 0, 0, 4546, 766,0 },
+ {1619,1619, 0, 0, 40000, 420,0 },
+ {1620,1620, 0, 0, 40000, 1573,0 },
+ {1621,1621, 0, 0, 3326, 806,0 },
+ {1622,1622, 0, 0, 40000, 746,0 },
+ {1623,1623, 0, 0, 40000, 900,0 },
+ {1624,1624, 0, 0, 12166, 1573,0 },
+ {1625,1625, 0, 0, 40000, 80,0 },
+ {1626,1626, 0, 0, 40000, 80,0 },
+ {1627,1627, 0, 0, 40000, 80,0 },
+ {1628,1628, 0, 0, 40000, 2713,0 },
+ {1629,1629, 0, 0, 40000, 86,0 },
+ {1630,1630, 0, 0, 40000, 80,0 },
+ {1631,1631, 0, 0, 40000, 80,0 },
+ {1632,1632, 0, 0, 40000, 813,0 },
+ {1633,1633, 0, 0, 40000, 80,0 },
+ {1634,1634, 0, 0, 40000, 80,0 },
+ {1635,1635, 0, 0, 40000, 80,0 },
+ {1636,1636, 0, 0, 40000, 193,0 },
+ {1637,1637, 0, 0, 2920, 733,0 },
+ {1638,1638, 0, 0, 40000, 373,0 },
+ {1639,1639, 0, 0, 2286, 226,0 },
+ {1640,1640, 0, 0, 40000, 226,0 },
+ {1641,1641, 0, 0, 40000, 226,0 },
+ {1642,1642, 0, 0, 40000, 433,0 },
+ {1643,1643, 0, 0, 40000, 813,0 },
+ {1644,1644, 0, 0, 40000, 80,0 },
+ {1645,1645, 0, 0, 40000, 80,0 },
+ {1646,1646, 0, 0, 40000, 80,0 },
+ {1647,1647, 0, 0, 40000, 80,0 },
+ {1648,1648, 0, 0, 40000, 80,0 },
+ {1649,1649, 0, 0, 40000, 80,0 },
+ {1650,1650, 0, 0, 40000, 146,0 },
+ {1651,1651, 0, 0, 40000, 1280,0 },
+ {1652,1652, 0, 0, 40000, 513,0 },
+ {1653,1653, 0, 0, 40000, 313,0 },
+ {1654,1654, 0, 0, 40000, 773,0 },
+ {1655,1655, 0, 0, 7400, 2480,0 },
+ {1656,1656, 0, 0, 3760, 1253,0 },
+ {1657,1657, 0, 0, 40000, 380,0 },
+ {1658,1658, 0, 0, 40000, 333,0 },
+ {1659,1659, 0, 0, 40000, 2926,0 },
+ {1660,1660, 0, 0, 40000, 5666,0 },
+ {1661,1661, 0, 0, 40000, 1613,0 },
+ {1662,1662, 0, 0, 3746, 1273,0 },
+ {1663,1663, 0, 0, 13653, 0,0 },
+ {1664,1664, 0, 0, 4640, 1553,0 },
+ {1665,1665, 0, 0, 40000, 680,0 },
+ {1666,1666, 0, 0, 6393, 426,0 },
+ {1667,1667, 0, 0, 40000, 713,0 },
+ {1668,1668, 12, 0, 166, 20,0 },
+ {1669,1669, 48, 0, 460, 193,0 },
+ { 736, 736, 52, 0, 286, 20,0 },
+ {1670,1670, 48, 0, 506, 200,0 },
+ {1670,1670, 36, 0, 713, 260,0 },
+ { 377, 377, 84, 0, 386, 493,0 },
+ { 730, 730, 95, 0, 1886, 653,0 },
+ {1669,1669, 84, 0, 386, 166,0 },
+ { 755, 755, 20, 0, 633, 240,0 },
+ { 755, 755, 22, 0, 626, 240,0 },
+ { 755, 755, 24, 0, 633, 246,0 },
+ {1671,1671, 0, 0, 2233, 220,0 },
+ {1672,1672, 0, 0, 2233, 240,0 },
+ {1673,1673, 0, 0, 2233, 206,0 },
+ {1674,1674, 0, 0, 2126, 173,0 },
+ {1675,1675, 0, 0, 7473, 73,0 },
+ {1676,1676, 0, 0, 40000, 0,0 },
+ {1677,1677, 0, 0, 3493, 193,0 },
+ {1678,1678, 0, 0, 1746, 73,0 },
+ {1679,1679, 0, 0, 1013, 400,0 },
+ {1680,1680, 0, 0, 3473, 1560,0 },
+ {1681,1681, 0, 0, 1073, 40,0 },
+ {1682,1682, 0, 0, 40000, 380,0 },
+ {1683,1683, 0, 0, 1166, 400,0 },
+ {1684,1684, 0, 0, 606, 146,0 },
+ {1685,1685, 0, 0, 4553, 1486,0 },
+ {1686,1686, 0, 0, 1126, 80,0 },
+ {1687,1687, 0, 0, 40000, 73,0 },
+ {1688,1688, 0, 0, 40000, 60,0 },
+ {1689,1689, 0, 0, 40000, 66,0 },
+ {1690,1690, 0, 0, 40000, 73,0 },
+ {1691,1691, 0, 0, 40000, 73,0 },
+ {1692,1692, 0, 0, 40000, 73,0 },
+ {1693,1693, 0, 0, 40000, 73,0 },
+ {1694,1694, 0, 0, 6380, 53,0 },
+ {1695,1695, 0, 0, 6380, 60,0 },
+ {1696,1696, 0, 0, 40000, 53,0 },
+ {1697,1697, 0, 0, 40000, 0,0 },
+ {1698,1698, 0, 0, 1880, 80,0 },
+ {1699,1699, 0, 0, 40000, 60,0 },
+ {1700,1700, 0, 0, 40000, 60,0 },
+ {1701,1701, 0, 0, 1460, 80,0 },
+ {1702,1702, 0, 0, 40000, 73,0 },
+ {1703,1703, 0, 0, 40000, 0,0 },
+ {1704,1704, 0, 0, 40000, 146,0 },
+ {1705,1705, 0, 0, 40000, 66,0 },
+ {1706,1706, 0, 0, 40000, 73,0 },
+ {1707,1707, 0, 0, 40000, 160,0 },
+ {1708,1708, 0, 0, 40000, 73,0 },
+ {1709,1709, 0, 0, 40000, 193,0 },
+ {1710,1710, 0, 0, 3740, 1260,0 },
+ {1711,1711, 0, 0, 40000, 180,0 },
+ {1712,1712, 0, 0, 40000, 173,0 },
+ {1713,1713, 0, 0, 40000, 113,0 },
+ {1714,1714, 0, 0, 40000, 86,0 },
+ {1715,1715, 0, 0, 1853, 633,0 },
+ {1716,1716, 0, 0, 40000, 0,0 },
+ {1717,1717, 0, 0, 1066, 306,0 },
+ {1718,1718, 0, 0, 40000, 86,0 },
+ {1719,1719, 0, 0, 40000, 586,0 },
+ {1720,1720, 0, 0, 40000, 86,0 },
+ {1721,1721, 0, 0, 40000, 93,0 },
+ {1722,1722, 0, 0, 40000, 373,0 },
+ {1723,1723, 0, 0, 40000, 113,0 },
+ {1724,1724, 0, 0, 40000, 353,0 },
+ {1725,1725, 0, 0, 420, 73,0 },
+ {1726,1726, 0, 0, 40000, 66,0 },
+ {1727,1727, 0, 0, 40000, 53,0 },
+ {1728,1728, 0, 0, 40000, 66,0 },
+ {1729,1729, 0, 0, 40000, 100,0 },
+ {1730,1730, 0, 0, 40000, 93,0 },
+ {1731,1731, 0, 0, 40000, 0,0 },
+ {1732,1732, 0, 0, 40000, 73,0 },
+ {1733,1733, 0, 0, 40000, 80,0 },
+ {1734,1734, 0, 0, 40000, 80,0 },
+ {1735,1735, 0, 0, 40000, 80,0 },
+ {1736,1736, 0, 0, 40000, 80,0 },
+ {1737,1737, 0, 0, 40000, 80,0 },
+ {1738,1738, 0, 0, 40000, 73,0 },
+ {1739,1739, 0, 0, 40000, 73,0 },
+ {1740,1740, 0, 0, 40000, 106,0 },
+ {1741,1741, 0, 0, 40000, 73,0 },
+ {1742,1742, 0, 0, 40000, 73,0 },
+ {1743,1743, 0, 0, 40000, 80,0 },
+ {1744,1744, 0, 0, 40000, 0,0 },
+ {1745,1745, 0, 0, 40000, 80,0 },
+ {1746,1746, 0, 0, 40000, 66,0 },
+ {1747,1747, 0, 0, 40000, 73,0 },
+ {1748,1748, 0, 0, 40000, 0,0 },
+ {1749,1749, 0, 0, 40000, 80,0 },
+ {1750,1750, 0, 0, 40000, 66,0 },
+ {1751,1751, 0, 0, 40000, 73,0 },
+ {1752,1752, 0, 0, 40000, 80,0 },
+ {1753,1753, 0, 0, 40000, 33,0 },
+ {1754,1754, 0, 0, 40000, 0,0 },
+ {1755,1755, 0, 0, 40000, 266,0 },
+ {1756,1756, 0, 0, 40000, 160,0 },
+ {1757,1757, 0, 0, 40000, 93,0 },
+ {1758,1758, 0, 0, 40000, 660,0 },
+ {1759,1759, 0, 0, 40000, 1453,0 },
+ {1760,1760, 0, 0, 40000, 660,0 },
+ {1761,1761, 0, 0, 40000, 120,0 },
+ {1762,1762, 0, 0, 40000, 140,0 },
+ {1763,1763, 0, 0, 9820, 393,0 },
+ {1764,1764, 0, 0, 40000, 73,0 },
+ {1765,1765, 0, 0, 3620, 1166,0 },
+ {1766,1766, 0, 0, 40000, 0,0 },
+ {1767,1767, 0, 0, 40000, 0,0 },
+ {1768,1768, 0, 0, 40000, 813,0 },
+ {1769,1769, 0, 0, 40000, 0,0 },
+ {1770,1770, 0, 0, 40000, 2386,0 },
+ {1771,1771, 0, 0, 4380, 400,0 },
+ {1772,1772, 0, 0, 853, 0,0 },
+ {1773,1773, 0, 0, 3700, 93,0 },
+ {1774,1774, 0, 0, 1580, 300,0 },
+ {1775,1775, 0, 0, 453, 140,0 },
+ {1776,1776, 0, 0, 40000, 66,0 },
+ {1777,1777, 0, 0, 40000, 73,0 },
+ {1778,1778, 0, 0, 40000, 206,0 },
+ {1779,1779, 0, 0, 4646, 1560,0 },
+ {1780,1780, 0, 0, 353, 146,0 },
+ {1781,1781, 0, 0, 1300, 400,0 },
+ {1782,1782, 0, 0, 4593, 1546,0 },
+ {1783,1783, 0, 0, 613, 226,0 },
+ {1784,1784, 0, 0, 626, 233,0 },
+ {1785,1785, 0, 0, 3020, 66,0 },
+ {1786,1786, 0, 0, 1093, 186,0 },
+ {1787,1787, 0, 0, 6053, 1240,0 },
+ {1788,1788, 0, 0, 633, 126,0 },
+ {1789,1789, 0, 0, 40000, 66,0 },
+ {1790,1790, 0, 0, 40000, 73,0 },
+ {1791,1791, 0, 0, 40000, 1253,0 },
+ {1792,1792, 0, 0, 626, 246,0 },
+ {1793,1793, 48, 0, 293, 120,0 },
+ {1794,1794, 48, 0, 100, 0,0 },
+ {1795,1795, 60, 0, 240, 133,0 },
+ {1796,1796, 60, 0, 160, 66,0 },
+ {1797,1797, 70, 0, 140, 33,0 },
+ {1798,1798, 51, 0, 526, 206,0 },
+ {1799,1799, 60, 0, 173, 93,0 },
+ {1798,1798, 54, 0, 520, 200,0 },
+ {1800,1800, 60, 0, 153, 80,0 },
+ {1798,1798, 56, 0, 520, 206,0 },
+ {1801,1801, 60, 0, 673, 206,0 },
+ {1798,1798, 61, 0, 506, 200,0 },
+ {1798,1798, 63, 0, 513, 206,0 },
+ {1802,1802, 48, 0, 673, 200,0 },
+ {1798,1798, 68, 0, 440, 180,0 },
+ {1803,1803, 60, 0, 1873, 653,0 },
+ {1804,1804, 60, 0, 673, 200,0 },
+ {1805,1805, 66, 0, 306, 120,0 },
+ {1806,1806, 60, 0, 673, 200,0 },
+ { 379, 379, 59, 0, 173, 93,0 },
+ {1802,1802, 64, 0, 673, 206,0 },
+ {1807,1807, 48, 0, 1006, 20,0 },
+ {1808,1808, 56, 0, 120, 40,0 },
+ {1809,1809, 53, 0, 286, 133,0 },
+ {1810,1810, 65, 0, 106, 0,0 },
+ {1811,1811, 49, 0, 293, 133,0 },
+ {1811,1811, 43, 0, 293, 133,0 },
+ { 386, 386, 65, 0, 1013, 673,0 },
+ { 386, 386, 60, 0, 1000, 660,0 },
+ {1812,1812, 70, 0, 260, 113,0 },
+ {1812,1812, 65, 0, 306, 120,0 },
+ {1813,1813, 60, 0, 246, 106,0 },
+ {1814,1814, 60, 0, 193, 120,0 },
+ {1815,1815, 56, 0, 206, 13,0 },
+ {1816,1816, 53, 0, 433, 73,0 },
+ {1817,1817, 60, 0, 220, 113,0 },
+ {1818,1818, 48, 0, 300, 66,0 },
+ {1819,1819, 69, 0, 126, 0,0 },
+ { 328, 328, 67, 0, 140, 93,0 },
+ { 328, 328, 62, 0, 153, 100,0 },
+ {1820,1820, 65, 0, 433, 100,0 },
+ {1821,1821, 60, 0, 426, 100,0 },
+ {1822,1822, 63, 0, 113, 46,0 },
+ {1823,1823, 63, 0, 1866, 653,0 },
+ {1824,1824, 67, 0, 273, 60,0 },
+ {1825,1825, 60, 0, 973, 360,0 },
+ {1825,1825, 72, 0, 806, 273,0 },
+ { 401, 401, 62, 0, 46, 0,0 },
+ {1826,1826, 48, 0, 126, 66,0 },
+ {1827,1827, 53, 0, 980, 353,0 },
+ {1828,1828, 60, 0, 293, 133,0 },
+ {1829,1829, 60, 0, 160, 20,0 },
+ {1830,1830, 60, 0, 126, 86,0 },
+ {1831,1831, 60, 0, 173, 93,0 },
+ {1832,1832, 0, 0, 40000, 106,0 },
+ {1833,1833, 0, 0, 3780, 73,0 },
+ {1834,1834, 0, 0, 3820, 1666,0 },
+ {1835,1835, 0, 0, 40000, 73,0 },
+ {1836,1836, 0, 0, 40000, 333,0 },
+ {1837,1837, 0, 0, 40000, 220,0 },
+ {1838,1838, 0, 0, 40000, 0,0 },
+ {1839,1839, 0, 0, 40000, 53,0 },
+ {1840,1840, 0, 0, 40000, 60,0 },
+ {1841,1841, 0, 0, 5913, 2306,0 },
+ {1842,1842, 0, 0, 7713, 2466,0 },
+ { 525, 525, 0, 0, 4660, 660,0 },
+ {1843,1843, 0, 0, 40000, 313,0 },
+ {1844,1844, 0, 0, 40000, 0,0 },
+ {1845,1845, 0, 0, 40000, 0,0 },
+ {1846,1846, 0, 0, 1246, 453,0 },
+ {1847,1847, 0, 0, 9600, 1580,0 },
+ {1848,1848, 0, 0, 40000, 106,0 },
+ {1849,1849, 0, 0, 2040, 400,0 },
+ {1850,1850, 0, 0, 40000, 73,0 },
+ {1851,1851, 0, 0, 4220, 620,0 },
+ {1852,1852, 0, 0, 40000, 0,0 },
+ {1853,1853, 0, 0, 40000, 433,0 },
+ {1854,1854, 0, 0, 40000, 66,0 },
+ {1855,1855, 0, 0, 40000, 46,0 },
+ {1856,1856, 0, 0, 40000, 240,0 },
+ {1857,1857, 0, 0, 40000, 313,0 },
+ {1858,1858, 0, 0, 40000, 26,0 },
+ {1859,1859, 0, 0, 40000, 0,0 },
+ {1860,1860, 0, 0, 40000, 73,0 },
+ {1861,1861, 0, 0, 6940, 66,0 },
+ {1862,1862, 0, 0, 40000, 0,0 },
+ {1863,1863, 0, 0, 40000, 60,0 },
+ {1864,1864, 0, 0, 8140, 1440,0 },
+ {1865,1865, 0, 0, 40000, 0,0 },
+ {1866,1866, 0, 0, 40000, 613,0 },
+ {1867,1867, 0, 0, 40000, 0,0 },
+ {1868,1868, 0, 0, 633, 233,0 },
+ {1869,1869, 0, 0, 40000, 226,0 },
+ {1870,1870, 0, 0, 2280, 746,0 },
+ {1871,1871, 0, 0, 1940, 633,0 },
+ {1872,1872, 0, 0, 4220, 620,0 },
+ {1873,1873, 0, 0, 40000, 133,0 },
+ {1874,1874, 41, 0, 380, 153,0 },
+ {1875,1875, 70, 0, 106, 0,0 },
+ {1876,1876, 60, 0, 380, 206,0 },
+ {1877,1877, 80, 0, 100, 0,0 },
+ {1878,1878, 84, 0, 120, 0,0 },
+ {1879,1879, 72, 0, 500, 433,0 },
+ {1880,1880, 84, 0, 860, 553,0 },
+ { 128, 128, 70, 0, 106, 0,0 },
+ { 132, 132, 60, 0, 146, 86,0 },
+ {1881,1882, 0, 4, 40000, 260,0 },
+ {1883,1883, 0, 0, 40000, 0,0 },
+ {1884,1885, 0, 4, 40000, 73,0 },
+ {1886,1887, 0, 4, 40000, 86,0 },
+ {1888,1889, 0, 4, 40000, 73,0 },
+ {1890,1890, 0, 0, 40000, 300,0 },
+ {1891,1891, 0, 0, 40000, 693,0 },
+ {1892,1892, 0, 0, 40000, 586,0 },
+ {1893,1893, 0, 0, 40000, 286,0 },
+ {1894,1894, 0, 0, 1620, 773,0 },
+ {1895,1895, 0, 0, 40000, 0,0 },
+ {1896,1896, 0, 0, 40000, 193,0 },
+ {1897,1897, 0, 0, 1873, 820,0 },
+ {1898,1898, 0, 0, 4520, 753,0 },
+ {1899,1899, 0, 0, 40000, 0,0 },
+ {1900,1900, 0, 0, 40000, 220,0 },
+ {1901,1901, 0, 0, 40000, 133,0 },
+ {1902,1902, 0, 0, 40000, 73,0 },
+ {1903,1903, 0, 0, 40000, 0,0 },
+ {1904,1904, 0, 0, 7326, 2420,0 },
+ {1905,1905, 0, 0, 1186, 446,0 },
+ {1906,1906, 0, 0, 40000, 553,0 },
+ {1907,1907, 0, 0, 40000, 293,0 },
+ {1908,1908, 0, 0, 40000, 586,0 },
+ {1909,1909, 0, 0, 2326, 793,0 },
+ { 501, 501, 0, 0, 480, 226,0 },
+ {1910,1910, 0, 0, 40000, 93,0 },
+ {1911,1911, 0, 0, 620, 226,0 },
+ {1912,1912, 0, 0, 2373, 800,0 },
+ {1913,1913, 0, 0, 40000, 4986,0 },
+ {1914,1914, 0, 0, 626, 240,0 },
+ { 511, 511, 0, 0, 2326, 800,0 },
+ {1915,1915, 0, 0, 340, 146,0 },
+ {1910,1910, 60, 0, 40000, 93,0 },
+ { 511, 511, 72, 0, 1566, 546,0 },
+ {1915,1915, 84, 0, 246, 120,0 },
+ {1916,1916, 0, 0, 40000, 0,0 },
+ {1917,1917, 0, 0, 2713, 666,0 },
+ {1918,1918, 0, 0, 40000, 0,0 },
+ {1919,1919, 0, 0, 40000, 46,0 },
+ {1920,1920, 0, 0, 40000, 0,0 },
+ {1921,1921, 0, 0, 40000, 53,0 },
+ {1922,1922, 0, 0, 40000, 33,0 },
+ {1923,1923, 0, 0, 2073, 193,0 },
+ {1924,1924, 0, 0, 40000, 146,0 },
+ {1925,1925, 0, 0, 40000, 100,0 },
+ {1926,1926, 0, 0, 40000, 93,0 },
+ {1927,1927, 0, 0, 40000, 73,0 },
+ {1928,1928, 0, 0, 40000, 540,0 },
+ {1929,1929, 0, 0, 40000, 520,0 },
+ {1930,1930, 0, 0, 40000, 506,0 },
+ {1931,1931, 0, 0, 7406, 200,0 },
+ {1932,1932, 0, 0, 5906, 133,0 },
+ {1933,1933, 0, 0, 7426, 240,0 },
+ {1934,1934, 0, 0, 7426, 240,0 },
+ {1935,1935, 0, 0, 40000, 66,0 },
+ {1936,1936, 0, 0, 40000, 66,0 },
+ {1937,1937, 0, 0, 40000, 53,0 },
+ {1938,1938, 0, 0, 40000, 66,0 },
+ {1939,1939, 0, 0, 40000, 66,0 },
+ {1940,1940, 0, 0, 40000, 53,0 },
+ {1941,1941, 0, 0, 40000, 2146,0 },
+ {1942,1942, 0, 0, 40000, 1126,0 },
+ {1943,1943, 0, 0, 40000, 1020,0 },
+ {1944,1944, 0, 0, 40000, 433,0 },
+ {1945,1945, 0, 0, 40000, 0,0 },
+ {1946,1946, 0, 0, 40000, 140,0 },
+ {1947,1947, 0, 0, 4660, 660,0 },
+ {1948,1948, 0, 0, 40000, 66,0 },
+ {1949,1949, 0, 0, 40000, 4193,0 },
+ {1950,1950, 0, 0, 7713, 2466,0 },
+ {1951,1951, 0, 0, 40000, 73,0 },
+ {1952,1952, 0, 0, 8100, 2093,0 },
+ {1953,1953, 0, 0, 40000, 86,0 },
+ {1954,1954, 0, 0, 40000, 80,0 },
+ {1955,1955, 0, 0, 4113, 1526,0 },
+ {1956,1956, 0, 0, 40000, 66,0 },
+ {1957,1957, 0, 0, 40000, 100,0 },
+ {1958,1958, 0, 0, 40000, 213,0 },
+ {1959,1959, 0, 0, 40000, 100,0 },
+ {1960,1960, 0, 0, 1186, 100,0 },
+ {1961,1961, 0, 0, 40000, 433,0 },
+ {1962,1962, 0, 0, 40000, 146,0 },
+ {1963,1963, 0, 0, 40000, 400,0 },
+ {1964,1964, 0, 0, 40000, 66,0 },
+ {1965,1965, 0, 0, 40000, 193,0 },
+ {1966,1966, 0, 0, 1153, 100,0 },
+ {1967,1967, 0, 0, 4800, 1400,0 },
+ {1968,1968, 0, 0, 2906, 713,0 },
+ {1969,1969, 0, 0, 40000, 73,0 },
+ {1970,1970, 0, 0, 2280, 746,0 },
+ {1971,1971, 0, 0, 40000, 66,0 },
+ {1972,1972, 0, 0, 40000, 86,0 },
+ {1973,1973, 0, 0, 40000, 86,0 },
+ {1974,1974, 0, 0, 40000, 66,0 },
+ {1975,1975, 0, 0, 40000, 66,0 },
+ {1976,1976, 0, 0, 40000, 66,0 },
+ {1977,1977, 0, 0, 40000, 46,0 },
+ {1978,1978, 0, 0, 40000, 73,0 },
+ {1979,1979, 0, 0, 40000, 73,0 },
+ {1980,1980, 0, 0, 40000, 66,0 },
+ {1981,1981, 0, 0, 40000, 66,0 },
+ {1982,1982, 0, 0, 40000, 66,0 },
+ {1983,1983, 0, 0, 40000, 73,0 },
+ {1984,1984, 0, 0, 40000, 73,0 },
+ {1985,1985, 0, 0, 40000, 253,0 },
+ {1986,1986, 0, 0, 40000, 126,0 },
+ {1987,1987, 0, 0, 40000, 126,0 },
+ {1988,1988, 0, 0, 40000, 66,0 },
+ {1989,1989, 0, 0, 40000, 66,0 },
+ {1990,1990, 0, 0, 40000, 53,0 },
+ {1991,1991, 0, 0, 40000, 140,0 },
+ {1992,1992, 0, 0, 40000, 40,0 },
+ {1993,1993, 0, 0, 40000, 73,0 },
+ {1994,1994, 0, 0, 40000, 66,0 },
+ {1995,1995, 0, 0, 40000, 73,0 },
+ {1996,1996, 0, 0, 40000, 73,0 },
+ {1997,1997, 0, 0, 40000, 73,0 },
+ {1998,1998, 0, 0, 40000, 73,0 },
+ {1999,1999, 0, 0, 40000, 66,0 },
+ {2000,2000, 0, 0, 40000, 433,0 },
+ {2001,2001, 0, 0, 40000, 433,0 },
+ {2002,2002, 0, 0, 2440, 706,0 },
+ {2003,2003, 0, 0, 13960, 4800,0 },
+ {2004,2004, 0, 0, 7393, 2480,0 },
+ {2005,2005, 0, 0, 7220, 2073,0 },
+ {2006,2006, 0, 0, 633, 233,0 },
+ {2007,2007, 0, 0, 2326, 780,0 },
+ {2008,2008, 0, 0, 40000, 73,0 },
+ {2009,2009, 0, 0, 40000, 106,0 },
+ {2010,2010, 0, 0, 40000, 126,0 },
+ {2011,2011, 0, 0, 40000, 386,0 },
+ {2012,2012, 0, 0, 40000, 66,0 },
+ {2013,2013, 0, 0, 6893, 1273,0 },
+ {2014,2014, 0, 0, 2546, 633,0 },
+ {2015,2015, 0, 0, 206, 106,0 },
+ {2016,2016, 0, 0, 213, 113,0 },
+ {2017,2017, 0, 0, 360, 140,0 },
+ {2018,2018, 0, 0, 1013, 193,0 },
+ {2019,2019, 0, 0, 266, 66,0 },
+ {2020,2020, 0, 0, 1880, 660,0 },
+ {2021,2021, 0, 0, 286, 206,0 },
+ {2022,2022, 0, 0, 3706, 1353,0 },
+ {2023,2023, 0, 0, 1106, 380,0 },
+ {2024,2024, 0, 0, 13220, 2466,0 },
+ {2025,2025, 0, 0, 333, 26,0 },
+ {2026,2026, 0, 0, 7346, 2440,0 },
+ {2027,2027, 0, 0, 1273, 453,0 },
+ { 352, 352, 51, 2, 6, 0,0 },
+ {2028,2028, 35, 0, 700, 253,0 },
+ {2028,2028, 36, 0, 706, 266,0 },
+ {2029,2029, 47, 0, 100, 0,0 },
+ {2030,2030, 38, 0, 346, 140,0 },
+ {2019,2019, 39, 0, 220, 106,0 },
+ {2031,2031, 45, 0, 286, 133,0 },
+ { 492, 492, 41, 0, 1040, 406,0 },
+ {2032,2032, 42, 0, 220, 106,0 },
+ {2033,2033, 44, 0, 500, 193,0 },
+ { 492, 492, 48, 0, 833, 346,0 },
+ {2034,2034, 46, 0, 1866, 646,0 },
+ { 492, 492, 53, 0, 873, 386,0 },
+ { 167, 167, 56, 0, 646, 353,0 },
+ {2035,2035, 61, 0, 366, 146,0 },
+ {2036,2036, 56, 0, 1346, 473,0 },
+ {2037,2037, 60, 0, 213, 126,0 },
+ { 144, 144, 59, 0, 213, 0,0 },
+ {2038,2038, 59, 0, 106, 0,0 },
+ { 169, 169, 51, 0, 380, 366,0 },
+ { 169, 169, 45, 0, 380, 366,0 },
+ {2039,2039, 72, 0, 246, 20,0 },
+ {2040,2040, 60, 0, 280, 20,0 },
+ {2041,2041, 58, 0, 373, 360,0 },
+ {2042,2042, 53, 0, 380, 366,0 },
+ {2043,2043, 73, 0, 120, 26,0 },
+ { 158, 158, 75, 0, 126, 140,0 },
+ {2044,2044, 0, 0, 6786, 1073,0 },
+ {2045,2045, 0, 0, 2046, 473,0 },
+ {2046,2046, 0, 0, 3746, 1273,0 },
+ {2047,2047, 0, 0, 1200, 3086,0 },
+ {2048,2048, 0, 0, 1200, 3080,0 },
+ {2049,2049, 0, 0, 40000, 2453,0 },
+ {2050,2050, 0, 0, 40000, 413,0 },
+ {2051,2051, 0, 0, 980, 2553,0 },
+ {2052,2052, 0, 0, 40000, 2420,0 },
+ {2053,2053, 0, 0, 40000, 2506,0 },
+ {2054,2054, 0, 0, 40000, 380,0 },
+ {2055,2055, 0, 0, 40000, 660,0 },
+ {2056,2056, 0, 0, 40000, 73,0 },
+ {2057,2057, 0, 0, 40000, 333,0 },
+ {2058,2058, 0, 0, 833, 146,0 },
+ {2059,2059, 0, 0, 1686, 620,0 },
+ {2060,2060, 0, 0, 40000, 73,0 },
+ {2061,2061, 0, 0, 40000, 0,0 },
+ {2062,2062, 0, 0, 1873, 633,0 },
+ {2063,2063, 0, 0, 40000, 380,0 },
+ {2064,2064, 0, 0, 366, 286,0 },
+ {2065,2065, 0, 0, 8866, 1366,0 },
+ {2066,2066, 0, 0, 40000, 1513,0 },
+ {2067,2067, 0, 0, 40000, 333,0 },
+ {2068,2068, 0, 0, 9600, 1573,0 },
+ {2069,2069, 0, 0, 3293, 746,0 },
+ {2070,2070, 0, 0, 40000, 53,0 },
+ {2071,2071, 0, 0, 40000, 73,0 },
+ {2072,2072, 0, 0, 40000, 73,0 },
+ {2073,2073, 0, 0, 40000, 240,0 },
+ {2074,2074, 0, 0, 40000, 240,0 },
+ {2075,2075, 0, 0, 40000, 140,0 },
+ {2076,2076, 0, 0, 40000, 113,0 },
+ {2077,2077, 0, 0, 40000, 240,0 },
+ {2078,2078, 0, 0, 3613, 1146,0 },
+ {2079,2079, 0, 0, 40000, 126,0 },
+ {2080,2080, 0, 0, 40000, 0,0 },
+ {2081,2081, 0, 0, 40000, 633,0 },
+ {2082,2082, 0, 0, 40000, 453,0 },
+ {2083,2083, 0, 0, 40000, 1146,0 },
+ {2084,2084, 0, 0, 40000, 3600,0 },
+ {2085,2085, 0, 0, 40000, 1586,0 },
+ {2086,2086, 0, 0, 40000, 1586,0 },
+ {2087,2087, 0, 0, 40000, 1586,0 },
+ {2088,2088, 0, 0, 40000, 1646,0 },
+ {2089,2089, 0, 0, 40000, 1580,0 },
+ {2090,2090, 0, 0, 40000, 4393,0 },
+ {2091,2091, 0, 0, 40000, 4540,0 },
+ {2092,2092, 0, 0, 21373, 6160,0 },
+ {2093,2093, 0, 0, 40000, 633,0 },
+ {2094,2094, 0, 0, 18420, 6146,0 },
+ {2095,2095, 0, 0, 2306, 813,0 },
+ {2096,2096, 0, 0, 2813, 333,0 },
+ {2097,2097, 0, 0, 3106, 600,0 },
+ {2098,2098, 0, 0, 1026, 1580,0 },
+ {2099,2099, 0, 0, 1873, 346,0 },
+ {2100,2100, 0, 0, 40000, 73,0 },
+ {2101,2101, 0, 0, 40000, 73,0 },
+ {2102,2102, 0, 0, 1200, 1906,0 },
+ {2103,2103, 0, 0, 980, 1313,0 },
+ {2104,2104, 0, 0, 200, 20,0 },
+ {2105,2105, 0, 0, 640, 253,0 },
+ {2106,2106, 0, 0, 3120, 240,0 },
+ {2107,2107, 0, 0, 753, 146,0 },
+ {2108,2108, 0, 0, 40000, 3060,0 },
+ {2109,2109, 0, 0, 40000, 233,0 },
+ {2110,2110, 0, 0, 40000, 246,0 },
+ {2111,2111, 0, 0, 40000, 240,0 },
+ { 752, 752, 60, 0, 173, 20,0 },
+ { 755, 755, 12, 0, 626, 240,0 },
+ {2112,2112, 89, 0, 113, 0,0 },
+ {2113,2113, 89, 0, 700, 266,0 },
+ { 755, 755, 14, 0, 626, 240,0 },
+ { 755, 755, 16, 0, 626, 246,0 },
+ {2114,2114, 84, 0, 1593, 553,0 },
+ { 755, 755, 19, 0, 626, 240,0 },
+ {2115,2115, 38, 0, 220, 166,0 },
+ {2116,2116, 36, 0, 1686, 760,0 },
+ { 755, 755, 28, 0, 626, 240,0 },
+ { 755, 755, 26, 0, 626, 240,0 },
+ { 755, 755, 35, 0, 633, 246,0 },
+ { 755, 755, 30, 0, 626, 240,0 },
+ {2117,2117, 60, 0, 180, 53,0 },
+ {2104,2104, 60, 0, 173, 20,0 },
+ {2104,2104, 55, 0, 173, 20,0 },
+ { 730, 730, 94, 0, 1886, 660,0 },
+ {2118,2118, 0, 0, 1226, 73,0 },
+ {2119,2119, 0, 0, 40000, 0,0 },
+ {2120,2120, 0, 0, 40000, 146,0 },
+ {2121,2121, 0, 0, 40000, 80,0 },
+ {2122,2122, 0, 0, 40000, 80,0 },
+ {2123,2123, 0, 0, 40000, 0,0 },
+ {2124,2124, 0, 0, 40000, 126,0 },
+ {2125,2125, 0, 0, 40000, 213,0 },
+ {2126,2126, 0, 0, 40000, 80,0 },
+ {2127,2127, 0, 0, 40000, 73,0 },
+ {2128,2128, 0, 0, 40000, 73,0 },
+ {2129,2129, 0, 0, 40000, 73,0 },
+ {2130,2130, 0, 0, 40000, 80,0 },
+ {2131,2131, 0, 0, 40000, 73,0 },
+ {2132,2132, 0, 0, 40000, 73,0 },
+ {2133,2133, 0, 0, 40000, 66,0 },
+ {2134,2134, 0, 0, 40000, 186,0 },
+ {2135,2135, 0, 0, 9966, 426,0 },
+ {2136,2136, 0, 0, 40000, 400,0 },
+ {2137,2137, 0, 0, 40000, 326,0 },
+ {2138,2138, 0, 0, 386, 80,0 },
+ {2139,2139, 0, 0, 40000, 246,0 },
+ {2140,2140, 0, 0, 3473, 73,0 },
+ {2141,2141, 60, 0, 160, 66,0 },
+ {2141,2141, 44, 0, 160, 60,0 },
+ {2142,2142, 47, 0, 173, 93,0 },
+ {2143,2143, 47, 0, 186, 80,0 },
+ {2144,2144, 62, 0, 1933, 93,0 },
+ {2145,2145, 93, 0, 1146, 473,0 },
+ {2146,2146, 50, 0, 286, 93,0 },
+ {2145,2145, 40, 0, 2013, 840,0 },
+ {2147,2147, 60, 0, 106, 73,0 },
+ { 898, 898, 60, 0, 173, 133,0 },
+ {2147,2147, 57, 0, 106, 73,0 },
+ { 900, 900, 42, 0, 620, 240,0 },
+ { 900, 900, 38, 0, 626, 240,0 },
+ { 908, 908, 88, 0, 160, 26,0 },
+ {2148,2148, 0, 0, 9440, 140,0 },
+ {2149,2149, 0, 0, 40000, 73,0 },
+ {2150,2150, 0, 0, 4613, 420,0 },
+ {2151,2151, 0, 0, 40000, 86,0 },
+ {2152,2152, 0, 0, 40000, 406,0 },
+ {2153,2153, 0, 0, 40000, 440,0 },
+ {2154,2154, 0, 0, 4340, 133,0 },
+ {2155,2155, 0, 0, 4460, 706,0 },
+ {2156,2156, 0, 0, 40000, 73,0 },
+ {2157,2157, 0, 0, 4660, 1573,0 },
+ {2158,2158, 0, 0, 966, 333,0 },
+ {2159,2159, 0, 0, 1933, 640,0 },
+ { 136, 136, 0, 0, 2326, 786,0 },
+ { 168, 168, 0, 0, 286, 366,0 },
+ { 164, 164, 0, 0, 7373, 2460,0 },
+ { 167, 167, 0, 0, 793, 426,0 },
+ {2160,2160, 65, 0, 166, 73,0 },
+ {2161,2161, 21, 0, 480, 146,0 },
+ {2162, 173, 0, 4, 4220, 80,0 },
+ {2163,2164, 0, 4, 4640, 3066,0 },
+ {2165,2166, 0, 4, 7273, 3920,0 },
+ {2167,2168, 0, 4, 3766, 1253,0 },
+ {2169,2170, 0, 4, 6266, 2400,0 },
+ {2171,2172, 0, 4, 18213, 0,0 },
+ {2173,2174, 0, 4, 40000, 713,0 },
+ {2175,2174, 0, 4, 40000, 733,0 },
+ {2176, 299, 0, 4, 40000, 273,0 },
+ {2177,2178, 0, 4, 40000, 66,0 },
+ {2179,2180, 0, 4, 40000, 393,0 },
+ {2181,2182, 0, 4, 40000, 413,0 },
+ {2183,2184, 0, 4, 7406, 200,0 },
+ { 127, 127, 65, 0, 226, 120,0 },
+ { 127, 127, 72, 0, 180, 100,0 },
+ { 364, 365, 52, 4, 120, 0,0 },
+ {2185,2186, 60, 4, 173, 0,0 },
+ {1550,1551, 47, 4, 520, 0,0 },
+ {1556,1557, 76, 4, 833, 0,0 },
+ { 374, 375, 84, 4, 813, 0,0 },
+ {1564,1565, 83, 4, 220, 0,0 },
+ {1568,1569, 24, 4, 1840, 620,0 },
+ {1556,1557, 77, 4, 820, 300,0 },
+ {1572,1573, 60, 4, 286, 0,0 },
+ {1574,1575, 65, 4, 293, 0,0 },
+ { 391, 392, 44, 4, 160, 53,0 },
+ { 391, 393, 40, 4, 460, 66,0 },
+ {1606,1607, 72, 4, 120, 73,0 },
+ { 398, 399, 73, 4, 1293, 173,0 },
+ {1608,1609, 70, 4, 1580, 0,0 },
+ {2187,2187, 0, 0, 40000, 353,0 },
+ {2188,2188, 0, 0, 40000, 333,0 },
+ {2189,2189, 0, 0, 5913, 2306,0 },
+ {2190,2190, 0, 0, 7720, 1260,0 },
+ {2191,2191, 0, 0, 213, 6420,0 },
+ {2192,2192, 0, 0, 40000, 380,0 },
+ {2193,2193, 0, 0, 1153, 760,0 },
+ {2194,2194, 0, 0, 40000, 66,0 },
+ {2195,2195, 0, 0, 4440, 66,0 },
+ {2196,2196, 0, 0, 40000, 73,0 },
+ {2197,2197, 0, 0, 40000, 53,0 },
+ {2198,2198, 0, 0, 40000, 60,0 },
+ {2199,2199, 0, 0, 40000, 60,0 },
+ {2200,2200, 0, 0, 8133, 1433,0 },
+ { 528, 528, 0, 0, 966, 346,0 },
+ {2201,2201, 0, 0, 40000, 126,0 },
+ {2202,2202, 0, 0, 286, 1293,0 },
+ {2203,2203, 0, 0, 40000, 0,0 },
+ {2204,2204, 41, 0, 246, 20,0 },
+ {2205,2205, 84, 0, 160, 26,0 },
+ {2206,2206, 72, 0, 440, 180,0 },
+ { 741, 741, 48, 0, 220, 26,0 },
+ {2207,2207, 0, 0, 2126, 173,0 },
+ {2208,2208, 0, 0, 40000, 0,0 },
+ {2209,2209, 0, 0, 40000, 380,0 },
+ {2210,2210, 0, 0, 4553, 1486,0 },
+ {2211,2211, 0, 0, 40000, 73,0 },
+ {2212,2212, 0, 0, 40000, 73,0 },
+ {2213,2213, 0, 0, 1460, 80,0 },
+ {2214,2214, 0, 0, 40000, 66,0 },
+ {2215,2215, 0, 0, 40000, 186,0 },
+ {2216,2216, 0, 0, 40000, 180,0 },
+ {2217,2217, 0, 0, 40000, 173,0 },
+ {2218,2218, 0, 0, 40000, 113,0 },
+ {2219,2219, 0, 0, 40000, 86,0 },
+ {2220,2220, 0, 0, 40000, 373,0 },
+ {2221,2221, 0, 0, 40000, 113,0 },
+ {2222,2222, 0, 0, 40000, 353,0 },
+ {2223,2223, 0, 0, 40000, 66,0 },
+ {2224,2224, 0, 0, 40000, 53,0 },
+ {2225,2225, 0, 0, 40000, 66,0 },
+ {2226,2226, 0, 0, 40000, 100,0 },
+ {2227,2227, 0, 0, 40000, 73,0 },
+ {2228,2228, 0, 0, 40000, 73,0 },
+ {2229,2229, 0, 0, 40000, 66,0 },
+ {2230,2230, 0, 0, 40000, 66,0 },
+ {2231,2231, 0, 0, 40000, 80,0 },
+ {2232,2232, 0, 0, 40000, 66,0 },
+ {2233,2233, 0, 0, 40000, 80,0 },
+ {2234,2234, 0, 0, 40000, 660,0 },
+ {2235,2235, 0, 0, 40000, 120,0 },
+ {2236,2236, 0, 0, 9820, 393,0 },
+ {2237,2237, 0, 0, 40000, 73,0 },
+ {2238,2238, 0, 0, 3620, 1166,0 },
+ {2239,2239, 0, 0, 40000, 0,0 },
+ {2240,2240, 0, 0, 40000, 0,0 },
+ {2241,2241, 0, 0, 3020, 66,0 },
+ {2242,2242, 0, 0, 6053, 1240,0 },
+ {2243,2243, 0, 0, 633, 126,0 },
+ {2244,2244, 0, 0, 40000, 66,0 },
+ {2245,2245, 0, 0, 40000, 73,0 },
+ {2246,2246, 0, 0, 626, 246,0 },
+ {2247,2247, 60, 0, 173, 93,0 },
+ {2248,2248, 60, 0, 673, 206,0 },
+ {2249,2249, 48, 0, 673, 200,0 },
+ {2250,2250, 60, 0, 1873, 653,0 },
+ {2251,2251, 60, 0, 673, 200,0 },
+ {2252,2252, 66, 0, 306, 120,0 },
+ {2253,2253, 60, 0, 673, 200,0 },
+ {2249,2249, 64, 0, 673, 206,0 },
+ {2254,2254, 60, 0, 246, 106,0 },
+ {2255,2255, 60, 0, 193, 120,0 },
+ {2256,2256, 56, 0, 206, 13,0 },
+ {2257,2257, 53, 0, 433, 73,0 },
+ {2258,2258, 60, 0, 220, 113,0 },
+ {2259,2259, 48, 0, 300, 66,0 },
+ {2260,2260, 67, 0, 273, 60,0 },
+ {2261,2261, 60, 0, 973, 360,0 },
+ {2261,2261, 72, 0, 806, 273,0 },
+ {2262,2262, 60, 0, 173, 93,0 },
+ {2263,2263, 0, 0, 2493, 866,0 },
+ {2264,2264, 24, 0, 173, 93,0 },
+ {2265,2265, 36, 0, 140, 0,0 },
+ { 343, 343, 36, 0, 146, 80,0 },
+ { 347, 347, 0, 0, 353, 133,0 },
+ { 347, 347, 12, 0, 420, 146,0 },
+ {2266,2266, 12, 0, 346, 100,0 },
+ {2267,2267, 24, 0, 106, 46,0 },
+ {2267,2267, 36, 0, 100, 0,0 },
+ {2268,2268, 0, 0, 1006, 293,0 },
+ {2266,2266, 24, 0, 293, 93,0 },
+ {2269,2269, 88, 0, 1106, 120,0 },
+ {2270,2270, 88, 0, 666, 120,0 },
+ {2271,2271, 13, 0, 760, 360,0 },
+ { 351, 351, 0, 0, 966, 346,0 },
+ {2271,2271, 15, 0, 760, 420,0 },
+ {2272,2272, 0, 0, 4513, 640,0 },
+ {2273,2273, 0, 0, 15486, 1580,0 },
+ {2274,2274, 0, 0, 6940, 66,0 },
+ {2275,2275, 0, 0, 6866, 2380,0 },
+ {2276,2276, 0, 0, 7613, 1566,0 },
+ {2277,2277, 0, 0, 1186, 420,0 },
+ {2278,2278, 0, 0, 1166, 400,0 },
+ {2279,2279, 0, 0, 40000, 2940,0 },
+ {2280,2280, 0, 0, 40000, 0,0 },
+ {2281,2281, 0, 0, 18226, 786,0 },
+ {2282,2282, 0, 0, 40000, 0,0 },
+ {2283,2283, 0, 0, 713, 200,0 },
+ {2284,2284, 0, 0, 40000, 126,0 },
+ {2285,2285, 0, 0, 40000, 353,0 },
+ {2286,2286, 0, 0, 40000, 333,0 },
+ {2287,2287, 0, 0, 40000, 0,0 },
+ {2288,2288, 0, 0, 40000, 0,0 },
+ {2289,2289, 0, 0, 40000, 0,0 },
+ {2290,2290, 0, 0, 40000, 0,0 },
+ {2291,2291, 0, 0, 40000, 73,0 },
+ {2292,2292, 0, 0, 40000, 66,0 },
+ {2293,2293, 0, 0, 15893, 153,0 },
+ {2294,2294, 0, 0, 40000, 253,0 },
+ {2295,2295, 0, 0, 2813, 333,0 },
+ {2296,2296, 0, 0, 40000, 3920,0 },
+ {2297,2297, 79, 0, 113, 0,0 },
+ {2297,2297, 72, 0, 126, 140,0 },
+ {2298,2298, 72, 0, 100, 26,0 },
+ {2298,2298, 79, 0, 100, 0,0 },
+ { 554, 554, 60, 0, 400, 126,0 },
+ {2299,2299, 72, 0, 793, 173,0 },
+ {2300,2300, 84, 0, 226, 66,0 },
+ { 555, 555, 66, 0, 113, 0,0 },
+ {2301,2302, 35, 4, 2333, 800,0 },
+ {2303,2304, 52, 4, 120, 0,0 },
+ {2305,1548, 48, 4, 173, 0,0 },
+ {1595,1595, 58, 0, 146, 166,0 },
+ {2305,1548, 60, 4, 173, 0,0 },
+ {2306,2307, 47, 4, 1893, 700,0 },
+ {2306,2307, 43, 4, 1953, 740,0 },
+ {2306,2307, 49, 4, 1880, 686,0 },
+ {2306,2307, 51, 4, 1886, 706,0 },
+ {2306,2307, 54, 4, 1906, 720,0 },
+ {2306,2307, 57, 4, 1900, 720,0 },
+ {2306,2307, 72, 4, 1593, 606,0 },
+ {2306,2307, 60, 4, 1900, 720,0 },
+ {2306,2307, 76, 4, 1593, 606,0 },
+ {2306,2307, 84, 4, 1593, 613,0 },
+ {2306,2307, 36, 4, 2386, 920,0 },
+ {1560,2308, 65, 4, 293, 213,0 },
+ {2309,2310, 84, 4, 1373, 306,0 },
+ {1564,1564, 83, 0, 220, 113,0 },
+ { 380, 381, 84, 4, 1593, 566,0 },
+ {1568,1568, 24, 0, 1833, 613,0 },
+ {2306,2307, 77, 4, 1593, 606,0 },
+ {2311,2312, 60, 4, 286, 0,0 },
+ {2313,2314, 65, 4, 513, 0,0 },
+ {2315,2315, 59, 0, 106, 0,0 },
+ {2316,2316, 51, 0, 386, 373,0 },
+ {1612,1612, 45, 0, 393, 380,0 },
+ {2317,2317, 71, 0, 446, 180,0 },
+ {2318,2318, 60, 0, 280, 20,0 },
+ {2319,2319, 58, 0, 393, 373,0 },
+ {2320,2320, 53, 0, 393, 380,0 },
+ { 397, 397, 64, 0, 220, 86,0 },
+ {2321,2321, 71, 0, 106, 46,0 },
+ {2322,2322, 61, 0, 986, 340,0 },
+ {2323,2323, 61, 0, 1893, 633,0 },
+ {2324, 392, 44, 4, 166, 46,0 },
+ {2324, 393, 40, 4, 460, 60,0 },
+ {1595,1595, 69, 0, 126, 140,0 },
+ {1595,1595, 68, 0, 126, 140,0 },
+ {1595,1595, 63, 0, 146, 166,0 },
+ {2325,2326, 74, 4, 380, 106,0 },
+ {2327,2328, 60, 4, 1026, 333,0 },
+ {2329,2330, 80, 4, 40000, 0,0 },
+ {2331,2332, 64, 4, 1900, 640,0 },
+ { 397, 397, 72, 0, 193, 80,0 },
+ {2333,2334, 78, 4, 820, 0,0 },
+ {1608,1609, 82, 4, 1580, 0,0 },
+ {2315,2315, 48, 0, 106, 0,0 },
+ {2316,2316, 53, 0, 386, 373,0 },
+ {2335,2335, 0, 0, 3586, 1133,0 },
+ {2336,2337, 0, 4, 1186, 420,0 },
+ {2338,2339, 0, 4, 40000, 320,0 },
+ {2340,2340, 0, 0, 8826, 1346,0 },
+ {2341,2341, 0, 0, 3440, 753,0 },
+ {2342,2342, 0, 0, 40000, 360,0 },
+ {2343,2343, 0, 0, 40000, 413,0 },
+ {2344,2345, 0, 4, 40000, 60,0 },
+ {2346,2346, 0, 0, 40000, 60,0 },
+ {2347,2348, 0, 4, 40000, 126,0 },
+ {2349,2350, 0, 4, 40000, 73,0 },
+ {2351,2352, 0, 4, 40000, 73,0 },
+ {2353,2354, 0, 4, 40000, 86,0 },
+ {2355,2356, 0, 4, 40000, 453,0 },
+ {2357,2357, 14, 0, 186, 20,0 },
+ {2358,2358, 35, 0, 246, 73,0 },
+ {2357,2357, 19, 0, 166, 26,0 },
+ {2359,2359, 43, 0, 286, 133,0 },
+ {2360,2360, 41, 0, 300, 113,0 },
+ {2360,2360, 43, 0, 253, 106,0 },
+ {2360,2360, 45, 0, 240, 100,0 },
+ {2360,2360, 47, 0, 240, 100,0 },
+ {2361,2362, 0, 4, 14720, 333,0 },
+ {2363,2363, 0, 0, 7373, 1246,0 },
+ {2364,2364, 0, 0, 4900, 233,0 },
+ {2365,2365, 0, 0, 5106, 606,0 },
+ {2366,2366, 0, 0, 1333, 153,0 },
+ {2367,2367, 0, 0, 2093, 840,0 },
+ {2368,2368, 0, 0, 3700, 226,0 },
+ {2369,2369, 0, 0, 3546, 0,0 },
+ {2370,2370, 0, 0, 4606, 420,0 },
+ {2371,2371, 0, 0, 14366, 606,0 },
+ {2372,2372, 0, 0, 40000, 426,0 },
+ {2373,2373, 0, 0, 3700, 200,0 },
+ {2374,2374, 0, 0, 880, 440,0 },
+ {2375,2375, 0, 0, 4660, 660,0 },
+ {2376,2376, 0, 0, 3600, 1153,0 },
+ {2377,2377, 0, 0, 40000, 73,0 },
+ {2378,2378, 0, 0, 40000, 53,0 },
+ {2379,2379, 0, 0, 40000, 333,0 },
+ {2380,2380, 0, 0, 40000, 73,0 },
+ {2381,2381, 0, 0, 40000, 73,0 },
+ {2382,2382, 0, 0, 40000, 66,0 },
+ {2383,2383, 0, 0, 40000, 73,0 },
+ {2384,2384, 0, 0, 40000, 73,0 },
+ {2385,2385, 0, 0, 840, 226,0 },
+ {2386,2386, 0, 0, 2093, 86,0 },
+ {2387,2387, 0, 0, 906, 73,0 },
+ { 402, 402, 0, 0, 273, 60,0 },
+ {2388,2388, 0, 0, 40000, 820,0 },
+ {2389,2389, 0, 0, 4740, 93,0 },
+ {2390,2390, 0, 0, 706, 106,0 },
+ {2391,2391, 0, 0, 40000, 0,0 },
+ {2392,2392, 0, 0, 3840, 2306,0 },
+ {2393,2393, 0, 0, 3400, 493,0 },
+ {2394,2394, 0, 0, 40000, 53,0 },
+ {2395,2395, 0, 0, 40000, 133,0 },
+ {2396,2397, 0, 4, 3093, 1400,0 },
+ {2398,2398, 0, 0, 1080, 580,0 },
+ {2399,2400, 0, 4, 2220, 400,0 },
+ {2401,2401, 0, 0, 40000, 193,0 },
+ {2402,2402, 0, 0, 40000, 60,0 },
+ {2403,2404, 0, 4, 40000, 146,0 },
+ {2405,2406, 0, 4, 40000, 133,0 },
+ {2407,2408, 0, 4, 40000, 66,0 },
+ {2409,2409, 0, 0, 40000, 0,0 },
+ {2410,2410, 0, 0, 40000, 73,0 },
+ {2411,2411, 0, 0, 40000, 66,0 },
+ {2412,2413, 0, 4, 40000, 153,0 },
+ {2414,2414, 0, 0, 40000, 126,0 },
+ {2415,2416, 0, 4, 40000, 466,0 },
+ {2417,2418, 0, 4, 40000, 113,0 },
+ {2419,2420, 0, 4, 1280, 73,0 },
+ {2421,2422, 0, 4, 1113, 146,0 },
+ {2423,2424, 0, 4, 3660, 113,0 },
+ {2425,2426, 0, 4, 40000, 80,0 },
+ {2427,2427, 33, 0, 300, 246,0 },
+ {2428,2429, 38, 4, 53, 0,0 },
+ {2430,2430, 38, 0, 106, 0,0 },
+ {2431,2431, 38, 0, 340, 20,0 },
+ {2432,2432, 40, 0, 73, 0,0 },
+ {2433,2434, 41, 4, 300, 0,0 },
+ {2435,2435, 0, 0, 133, 73,0 },
+ {2435,2435, 41, 0, 133, 73,0 },
+ {2360,2360, 48, 0, 240, 100,0 },
+ {2436,2436, 17, 0, 4620, 1553,0 },
+ {2360,2360, 50, 0, 240, 100,0 },
+ {2435,2435, 45, 0, 126, 66,0 },
+ {2437,2437,254, 2, 6, 0,0 },
+ {2438,2438, 60, 0, 226, 93,0 },
+ {2439,2439, 56, 0, 233, 93,0 },
+ {2440,2440, 60, 0, 140, 66,0 },
+ {2440,2440, 55, 0, 140, 60,0 },
+ {2441,2441, 63, 0, 286, 126,0 },
+ {2442,2442, 57, 0, 173, 93,0 },
+ {2443,2443, 0, 0, 40000, 280,0 },
+ {2444,2444, 0, 0, 40000, 0,0 },
+ {2445,2445, 0, 0, 40000, 746,0 },
+ {2446,2446, 0, 0, 40000, 353,0 },
+ {2447,2447, 0, 0, 40000, 1173,0 },
+ {2448,2448, 0, 0, 40000, 146,0 },
+ {2449,2449, 0, 0, 40000, 1160,0 },
+ {2450,2450, 0, 0, 40000, 353,0 },
+ {2451,2451, 0, 0, 18313, 6046,0 },
+ {2452,2452, 0, 0, 1206, 420,0 },
+ { 752, 752, 55, 0, 173, 20,0 },
+ {2453,2453, 0, 0, 2860, 806,0 },
+ {2454,2454, 0, 0, 2506, 126,0 },
+ {2455,2455, 0, 0, 520, 93,0 },
+ {2456,2456, 0, 0, 1420, 160,0 },
+ {2457,2457, 0, 0, 40000, 53,0 },
+ {2458,2458, 0, 0, 9106, 100,0 },
+ {2459,2459, 0, 0, 3706, 100,0 },
+ {2460,2460, 0, 0, 17933, 100,0 },
+ {2461,2461, 0, 0, 40000, 0,0 },
+ {2462,2462, 0, 0, 40000, 66,0 },
+ {2463,2463, 0, 0, 40000, 0,0 },
+ { 884, 884, 0, 0, 306, 73,0 },
+ { 884, 884, 28, 0, 306, 73,0 },
+ {2464,2464, 29, 0, 226, 93,0 },
+ { 886, 886, 31, 0, 113, 0,0 },
+ { 360, 360, 32, 0, 133, 40,0 },
+ { 361, 361, 33, 0, 286, 80,0 },
+ {2453,2453, 34, 0, 2873, 813,0 },
+ { 888, 888, 29, 0, 246, 46,0 },
+ { 886, 886, 55, 0, 100, 0,0 },
+ { 890, 890, 48, 0, 240, 60,0 },
+ { 884, 884, 58, 0, 146, 26,0 },
+ {2465,2465, 45, 0, 173, 93,0 },
+ {2465,2465, 43, 0, 173, 93,0 },
+ {2466,2466, 73, 0, 1633, 86,0 },
+ {2467,2467, 72, 0, 866, 553,0 },
+ {2468,2468, 76, 0, 1380, 0,0 },
+ {2467,2467, 84, 0, 873, 560,0 },
+ {2468,2468, 36, 0, 1933, 880,0 },
+ {2469,2469, 65, 0, 300, 120,0 },
+ {2470,2470, 83, 0, 193, 86,0 },
+ {2471,2471, 50, 0, 966, 126,0 },
+ {2468,2468, 77, 0, 1373, 620,0 },
+ { 897, 897, 55, 0, 126, 40,0 },
+ {2472,2472, 60, 0, 180, 140,0 },
+ { 897, 897, 50, 0, 126, 40,0 },
+ {2473,2473, 42, 0, 633, 240,0 },
+ {2473,2473, 46, 0, 513, 200,0 },
+ {2474,2474, 71, 0, 433, 180,0 },
+ {2474,2474, 60, 0, 513, 206,0 },
+ {2455,2455, 58, 0, 220, 46,0 },
+ {2455,2455, 53, 0, 286, 60,0 },
+ {2475,2475, 91, 0, 186, 100,0 },
+ {2476,2476, 61, 0, 226, 26,0 },
+ {2477,2477, 61, 0, 886, 73,0 },
+ {2478,2478, 44, 0, 120, 73,0 },
+ {2479,2479, 40, 0, 933, 73,0 },
+ {2480,2480, 69, 0, 146, 33,0 },
+ { 361, 361, 68, 0, 153, 26,0 },
+ { 361, 361, 63, 0, 180, 26,0 },
+ {2481,2481, 74, 0, 153, 73,0 },
+ {2482,2482, 60, 0, 280, 100,0 },
+ { 908, 908, 80, 0, 160, 26,0 },
+ {2483,2483, 64, 0, 986, 353,0 },
+ {2483,2483, 73, 0, 813, 306,0 },
+ {2483,2483, 70, 0, 820, 306,0 },
+ { 886, 886, 68, 0, 93, 0,0 },
+ { 886, 886, 48, 0, 106, 0,0 },
+ {2484,2484, 0, 0, 40000, 0,0 },
+ {2485,2485, 0, 0, 3226, 753,0 },
+ {2486,2486, 0, 0, 1773, 553,0 },
+ {2487,2487, 0, 0, 7473, 2460,0 },
+ {2488,2488, 0, 0, 40000, 0,0 },
+ {2489,2489, 0, 0, 40000, 353,0 },
+ {2490,2490, 0, 0, 40000, 206,0 },
+ {2491,2491, 0, 0, 40000, 86,0 },
+ {2492,2492, 0, 0, 4740, 86,0 },
+ {2493,2493, 0, 0, 6193, 193,0 },
+ {2494,2494, 0, 0, 6200, 240,0 },
+ {2495,2495, 0, 0, 40000, 0,0 },
+ {2496,2496, 0, 0, 1586, 73,0 },
+ {2497,2497, 0, 0, 560, 73,0 },
+ {2498,2498, 0, 0, 40000, 480,0 },
+ {2499,2499, 0, 0, 40000, 80,0 },
+ {2500,2500, 0, 0, 40000, 66,0 },
+ {2501,2501, 0, 0, 40000, 380,0 },
+ {2502,2502, 0, 0, 280, 100,0 },
+ {2503,2503, 0, 0, 6193, 233,0 },
+ {2504,2504, 0, 0, 40000, 380,0 },
+ {2505,2505, 0, 0, 40000, 0,0 },
+ {2506,2506, 0, 0, 40000, 380,0 },
+ {2507,2507, 0, 0, 40000, 200,0 },
+ {2508,2508, 0, 0, 40000, 320,0 },
+ {2509,2509, 0, 0, 40000, 126,0 },
+ {2510,2510, 0, 0, 40000, 293,0 },
+ {2511,2511, 0, 0, 40000, 0,0 },
+ {2512,2512, 0, 0, 40000, 40,0 },
+ {2513,2513, 0, 0, 40000, 106,0 },
+ {2514,2514, 0, 0, 3846, 73,0 },
+ {2515,2515, 0, 0, 40000, 0,0 },
+ {2516,2516, 0, 0, 40000, 73,0 },
+ {2517,2517, 0, 0, 40000, 533,0 },
+ {2518,2518, 0, 0, 40000, 1020,0 },
+ {2519,2519, 0, 0, 40000, 73,0 },
+ {2520,2520, 0, 0, 40000, 53,0 },
+ {2521,2521, 0, 0, 6153, 1433,0 },
+ {2522,2522, 0, 0, 18813, 773,0 },
+ {2523,2523, 0, 0, 40000, 433,0 },
+ {2524,2524, 0, 0, 40000, 0,0 },
+ {2525,2525, 0, 0, 40000, 133,0 },
+ {2526,2526, 0, 0, 4486, 73,0 },
+ { 346, 346, 30, 0, 540, 33,0 },
+ { 346, 346, 31, 0, 406, 20,0 },
+ { 346, 346, 32, 0, 406, 20,0 },
+ { 346, 346, 33, 0, 406, 73,0 },
+ { 346, 346, 34, 0, 406, 20,0 },
+ { 346, 346, 35, 0, 406, 20,0 },
+ { 346, 346, 37, 0, 406, 73,0 },
+ { 346, 346, 39, 0, 406, 73,0 },
+ { 346, 346, 41, 0, 406, 20,0 },
+ { 346, 346, 43, 0, 306, 20,0 },
+ { 346, 346, 45, 0, 306, 20,0 },
+ { 346, 346, 47, 0, 306, 20,0 },
+ { 346, 346, 48, 0, 306, 20,0 },
+ { 346, 346, 49, 0, 306, 20,0 },
+ { 512, 512, 84, 0, 353, 466,0 },
+ {2206,2206, 84, 0, 440, 180,0 },
+ {2527,2527, 55, 0, 100, 0,0 },
+ {2528,2528, 36, 0, 400, 160,0 },
+ {2529,2529, 38, 0, 313, 226,0 },
+ {2530,2530, 60, 0, 286, 133,0 },
+ {2531,2531, 38, 0, 200, 100,0 },
+ {2532,2532, 17, 0, 6186, 240,0 },
+ {2532,2532, 18, 0, 6186, 240,0 },
+ {2532,2532, 19, 0, 6193, 233,0 },
+ {2532,2532, 20, 0, 6193, 193,0 },
+ {2532,2532, 21, 0, 6193, 193,0 },
+ {2532,2532, 22, 0, 6193, 193,0 },
+ {2532,2532, 23, 0, 6193, 193,0 },
+ {2532,2532, 24, 0, 6193, 193,0 },
+ {2532,2532, 25, 0, 6193, 193,0 },
+ {2532,2532, 26, 0, 6193, 193,0 },
+ {2532,2532, 27, 0, 6193, 253,0 },
+ {2532,2532, 28, 0, 6193, 246,0 },
+ {2532,2532, 29, 0, 6193, 246,0 },
+ {2533,2533, 84, 0, 433, 180,0 },
+ {2534,2534, 48, 0, 280, 93,0 },
+ {2535,2535, 65, 0, 1166, 360,0 },
+ {2536,2536, 65, 0, 1853, 633,0 },
+ {2537,2537, 55, 0, 453, 366,0 },
+ {2537,2537, 41, 0, 540, 433,0 },
+ { 346, 346, 63, 0, 240, 66,0 },
+ { 346, 346, 55, 0, 240, 66,0 },
+ {2538,2538, 55, 0, 2586, 200,0 },
+ {2538,2538, 53, 0, 2586, 200,0 },
+ {2534,2534, 50, 0, 280, 93,0 },
+ { 506, 506, 84, 0, 693, 566,0 },
+ { 506, 506, 74, 0, 693, 560,0 },
+ { 504, 504, 84, 0, 1566, 546,0 },
+ { 504, 504, 74, 0, 1586, 560,0 },
+ {2539,2539, 84, 0, 440, 20,0 },
+ {2540,2540, 74, 0, 126, 26,0 },
+ {1911,1911, 48, 0, 500, 180,0 },
+ {1911,1911, 36, 0, 606, 220,0 },
+ {2541,2541, 74, 0, 686, 560,0 },
+ {2542,2542, 0, 0, 7313, 13,0 },
+ {2543,2543, 0, 0, 40000, 1306,0 },
+ {2544,2544, 0, 0, 40000, 0,0 },
+ {2545,2545, 0, 0, 4613, 13,0 },
+ {2546,2547, 0, 4, 6933, 133,0 },
+ {2548,2549, 0, 4, 40000, 86,0 },
+ {2550,2550, 0, 0, 9233, 100,0 },
+ {2551,2552, 0, 4, 4640, 73,0 },
+ {2553,2553, 0, 0, 40000, 73,0 },
+ {2554,2554, 0, 0, 40000, 0,0 },
+ {2555,2556, 0, 4, 40000, 73,0 },
+ {2557,2557, 0, 0, 40000, 60,0 },
+ {2558,1467, 0, 4, 40000, 66,0 },
+ {2559,2560, 0, 4, 40000, 40,0 },
+ {2561,2561, 0, 0, 40000, 186,0 },
+ {2562,2562, 0, 0, 4026, 66,0 },
+ {2563,2564, 0, 4, 14586, 80,0 },
+ {2565,2565, 0, 0, 40000, 0,0 },
+ {2566,2567, 0, 4, 40000, 40,0 },
+ {2568,2568, 0, 0, 4020, 73,0 },
+ {2569,2569, 0, 0, 40000, 0,0 },
+ {2570,2570, 0, 0, 40000, 0,0 },
+ {2571,2572, 0, 4, 40000, 126,0 },
+ {2573,2574, 0, 4, 40000, 100,0 },
+ {2575,2575, 0, 0, 40000, 213,0 },
+ { 229,2576, 0, 4, 40000, 166,0 },
+ {2577,2577, 0, 0, 7366, 53,0 },
+ { 239,2578, 0, 4, 40000, 133,0 },
+ {2579,2579, 0, 0, 40000, 80,0 },
+ {2580,2580, 0, 0, 40000, 140,0 },
+ {2581,2582, 0, 4, 16980, 1173,0 },
+ {2583,2584, 0, 4, 726, 100,0 },
+ {2585,2586, 0, 4, 40000, 73,0 },
+ {2587,2588, 0, 4, 40000, 73,0 },
+ {2589,2589, 0, 0, 40000, 60,0 },
+ {2590,2590, 0, 0, 40000, 80,0 },
+ {2591,2592, 0, 4, 40000, 73,0 },
+ {2593,2594, 0, 4, 40000, 60,0 },
+ {2595,2595, 0, 0, 40000, 66,0 },
+ {2596,2597, 0, 4, 40000, 66,0 },
+ {2598,2599, 0, 4, 40000, 60,0 },
+ {2600,2601, 0, 4, 40000, 173,0 },
+ {2602,2602, 0, 0, 40000, 60,0 },
+ {2603,2603, 0, 0, 40000, 73,0 },
+ {2604,2604, 0, 0, 40000, 93,0 },
+ {2605,2606, 0, 4, 40000, 73,0 },
+ {2607,2607, 0, 0, 40000, 66,0 },
+ {2608,2609, 0, 4, 40000, 66,0 },
+ {2610,2610, 0, 0, 40000, 86,0 },
+ {2611,2611, 0, 0, 40000, 60,0 },
+ {2612,2612, 0, 0, 14286, 73,0 },
+ {2613,2613, 0, 0, 40000, 0,0 },
+ {2614,2615, 0, 4, 40000, 73,0 },
+ {2616,2617, 0, 4, 40000, 66,0 },
+ {2618,2619, 0, 4, 133, 0,0 },
+ {2620,2621, 0, 4, 40000, 1280,0 },
+ {2622,2623, 0, 4, 40000, 160,0 },
+ {2624,2625, 0, 4, 40000, 0,0 },
+ {2626,2627, 0, 4, 40000, 73,0 },
+ {2628,2629, 0, 4, 40000, 0,0 },
+ {1516,2630, 0, 4, 1193, 406,0 },
+ {2631,2632, 0, 4, 40000, 553,0 },
+ {2633,2633, 0, 0, 40000, 40,0 },
+ {2634,2635, 0, 4, 40000, 773,0 },
+ {2636,2636, 0, 0, 40000, 320,0 },
+ {2637,2637, 0, 0, 1880, 73,0 },
+ {2638,2639, 0, 4, 486, 0,0 },
+ {2640,2641, 0, 4, 17020, 1193,0 },
+ {2642,2642, 0, 0, 40000, 720,0 },
+ {2643,2644, 0, 4, 1880, 40,0 },
+ {2645,2645, 0, 0, 40000, 73,0 },
+ {2646,2647, 0, 4, 40000, 46,0 },
+ {2648,2648, 0, 0, 2466, 80,0 },
+ {2649,2649, 0, 0, 40000, 193,0 },
+ {2650,2651, 0, 4, 993, 73,0 },
+ {2652,2652, 0, 0, 40000, 220,0 },
+ {2653,2654, 0, 4, 40000, 46,0 },
+ {2655,2656, 0, 4, 40000, 46,0 },
+ {2657,2657, 0, 0, 40000, 66,0 },
+ {2658,2658, 35, 0, 626, 20,0 },
+ {2659,2659, 35, 0, 306, 26,0 },
+ {2660,2660, 52, 0, 126, 26,0 },
+ {2661,2661, 60, 0, 286, 20,0 },
+ {2662,2662, 58, 0, 113, 0,0 },
+ {2663,2663, 60, 0, 380, 20,0 },
+ {2664,2664, 50, 0, 1640, 66,0 },
+ {2665,2665, 43, 0, 153, 20,0 },
+ {2664,2664, 55, 0, 1640, 20,0 },
+ {1553,1553, 43, 0, 160, 80,0 },
+ {2666,2666, 50, 0, 980, 20,0 },
+ {2667,2667, 43, 0, 446, 73,0 },
+ {2666,2666, 53, 0, 1000, 80,0 },
+ {2666,2666, 57, 0, 700, 73,0 },
+ {2668,2668, 72, 0, 773, 13,0 },
+ {2666,2666, 60, 0, 686, 20,0 },
+ { 373, 373, 76, 0, 826, 20,0 },
+ {2669,2669, 84, 0, 713, 20,0 },
+ {2670,2670, 42, 0, 1186, 20,0 },
+ {2671,2671, 65, 0, 293, 33,0 },
+ {2672,2672, 84, 0, 386, 33,0 },
+ {2673,2673, 84, 0, 1366, 20,0 },
+ {2674,2674, 24, 0, 960, 73,0 },
+ { 383, 383, 77, 0, 800, 20,0 },
+ {2675,2675, 58, 0, 426, 26,0 },
+ {2676,2676, 53, 0, 426, 20,0 },
+ {2677,2677, 64, 0, 200, 66,0 },
+ {2678,2678, 71, 0, 113, 13,0 },
+ {2679,2679, 44, 0, 766, 66,0 },
+ {2680,2680, 40, 0, 460, 60,0 },
+ {2681,2681, 69, 0, 126, 26,0 },
+ {2682,2682, 60, 0, 573, 66,0 },
+ {2683,2683, 80, 0, 226, 20,0 },
+ {2684,2684, 64, 0, 2693, 20,0 },
+ {2685,2685, 72, 0, 120, 66,0 },
+ {2686,2686, 70, 0, 820, 20,0 },
+ {2687,2687, 48, 0, 173, 20,0 },
+ {2688,2688, 53, 0, 980, 33,0 },
+ {2689,2690, 0, 4, 40000, 286,0 },
+ {2691,2692, 0, 4, 2340, 100,0 },
+ {2693,2694, 0, 4, 380, 80,0 },
+ {2695,2696, 0, 4, 14793, 73,0 },
+ {2697,2698, 0, 4, 40000, 40,0 },
+ { 192,2699, 0, 4, 40000, 73,0 },
+ {2700,2701, 0, 4, 973, 126,0 },
+ {2702,2703, 0, 4, 4666, 106,0 },
+ {2704,2705, 0, 4, 40000, 73,0 },
+ {2706,2707, 0, 4, 40000, 73,0 },
+ {2708,2709, 0, 4, 40000, 73,0 },
+ {2710,2711, 0, 4, 2053, 0,0 },
+ {2712,1473, 0, 4, 320, 26,0 },
+ {2713,2714, 0, 4, 573, 93,0 },
+ {2715,2716, 0, 4, 6513, 0,0 },
+ {1478,2717, 0, 4, 40000, 146,0 },
+ {2718,2719, 0, 4, 40000, 66,0 },
+ { 286,2720, 0, 4, 40000, 73,0 },
+ {2721,2722, 0, 4, 40000, 86,0 },
+ {2723,2724, 0, 4, 40000, 60,0 },
+ {2725,2726, 0, 4, 393, 73,0 },
+ {2727,2724, 0, 4, 40000, 60,0 },
+ {1514,2728, 0, 4, 40000, 180,0 },
+ {2729,2730, 0, 4, 40000, 0,0 },
+ {2731,2732, 0, 4, 486, 0,0 },
+ {2733,2734, 0, 4, 733, 0,0 },
+ {2735,2736, 0, 4, 286, 40,0 },
+ {2737,2738, 0, 4, 40000, 73,0 },
+ {2739,2740, 0, 4, 1326, 746,0 },
+ {2741,2742, 0, 4, 1340, 700,0 },
+ {2743,2744, 0, 4, 40000, 0,0 },
+ {2745,2746, 0, 4, 2046, 0,0 },
+ {2747,2747, 35, 0, 386, 166,0 },
+ {2748,2748, 60, 0, 493, 193,0 },
+ {2749,2749, 43, 0, 126, 66,0 },
+ {2750,2750, 0, 0, 3740, 1260,0 },
+ {2751,2752, 0, 4, 14846, 353,0 },
+ {2753,2754, 0, 4, 10266, 0,0 },
+ {2755,2756, 0, 4, 18286, 146,0 },
+ {2757,2758, 0, 4, 14520, 333,0 },
+ {2759,2760, 0, 4, 14686, 633,0 },
+ {2761,2762, 0, 4, 14826, 300,0 },
+ {2763,2764, 0, 4, 10493, 0,0 },
+ {2765,2766, 0, 4, 40000, 60,0 },
+ {2767,2768, 0, 4, 40000, 80,0 },
+ {2769,2770, 0, 4, 40000, 80,0 },
+ {2771,2772, 0, 4, 40000, 73,0 },
+ {2773,2774, 0, 4, 40000, 73,0 },
+ {2775,2776, 0, 4, 40000, 80,0 },
+ {2777,2778, 0, 4, 40000, 73,0 },
+ {2779,2780, 0, 4, 40000, 73,0 },
+ {2781,2782, 0, 4, 40000, 66,0 },
+ {2783,2784, 0, 4, 7260, 186,0 },
+ {2785,2786, 0, 4, 10386, 0,0 },
+ {2787,2788, 0, 4, 40000, 246,0 },
+ {2789,2790, 0, 4, 9173, 746,0 },
+ {2791,2792, 0, 4, 7440, 666,0 },
+ {2793,2794, 0, 4, 40000, 0,0 },
+ {2795,2796, 0, 4, 40000, 413,0 },
+ {2795,2797, 0, 4, 40000, 1506,0 },
+ {2798,2799, 0, 4, 40000, 60,0 },
+ {2800,2801, 0, 4, 40000, 233,0 },
+ {2802,2803, 0, 4, 40000, 80,0 },
+ {2804,2805, 0, 4, 40000, 80,0 },
+ {2806,2807, 0, 4, 4520, 80,0 },
+ {2808,2809, 0, 4, 40000, 73,0 },
+ {2810,2811, 0, 4, 1186, 100,0 },
+ {2812,2813, 0, 4, 953, 153,0 },
+ {2814,2815, 0, 4, 14786, 126,0 },
+ {2816,2817, 0, 4, 14800, 193,0 },
+ {2818,2819, 0, 4, 14573, 626,0 },
+ {2820,2821, 0, 4, 2200, 73,0 },
+ {2822,2823, 0, 4, 373, 86,0 },
+ {2824,2825, 0, 4, 12780, 200,0 },
+ {2826,2827, 0, 4, 40000, 73,0 },
+ {2828,2829, 0, 4, 9193, 146,0 },
+ {2830,2831, 0, 4, 2540, 326,0 },
+ {2832,2833, 0, 4, 6933, 200,0 },
+ {2834,2835, 0, 4, 40000, 413,0 },
+ {2836,2837, 0, 4, 4826, 1313,0 },
+ {2838,2839, 0, 4, 14740, 340,0 },
+ {2840,2841, 0, 4, 1886, 653,0 },
+ {2842,2843, 0, 4, 5280, 260,0 },
+ {2844,2845, 0, 4, 40000, 240,0 },
+ {2846,2847, 0, 4, 40000, 240,0 },
+ {2848,2849, 0, 4, 40000, 240,0 },
+ {2850,2851, 0, 4, 40000, 406,0 },
+ {2852,2853, 0, 4, 40000, 406,0 },
+ {2854,2855, 0, 4, 40000, 146,0 },
+ {2856,2856, 0, 0, 2400, 1126,0 },
+ {2857,2857, 0, 0, 2400, 1126,0 },
+ {2858,2859, 0, 4, 4613, 73,0 },
+ {2860,2861, 0, 4, 40000, 426,0 },
+ {2862,2863, 0, 4, 4580, 100,0 },
+ {2864,2865, 0, 4, 40000, 80,0 },
+ {2866,2867, 0, 4, 5300, 53,0 },
+ {2868,2869, 0, 4, 5313, 113,0 },
+ {2870,2871, 0, 4, 7080, 186,0 },
+ {2872,2873, 0, 4, 4720, 106,0 },
+ {2874,2875, 0, 4, 40000, 73,0 },
+ {2876,2877, 0, 4, 1640, 0,0 },
+ {2878,2879, 0, 4, 7306, 186,0 },
+ {2880,2881, 0, 4, 7373, 1246,0 },
+ {2882,2883, 0, 4, 4620, 93,0 },
+ {2884,2885, 0, 4, 3460, 926,0 },
+ {2886,2887, 0, 4, 40000, 73,0 },
+ {2888,2888, 0, 0, 18926, 426,0 },
+ {2889,2889, 0, 0, 18520, 73,0 },
+ {2890,2890, 0, 0, 18473, 73,0 },
+ {2891,2892, 0, 4, 40000, 93,0 },
+ {2893,2893, 0, 0, 8006, 133,0 },
+ {2894,2894, 0, 0, 18533, 66,0 },
+ {2895,2895, 0, 0, 14786, 4966,0 },
+ {2896,2897, 0, 4, 40000, 80,0 },
+ {2898,2899, 0, 4, 40000, 73,0 },
+ {2353,2900, 0, 4, 18520, 86,0 },
+ {2901,2901, 0, 0, 40000, 0,0 },
+ {2902,2903, 0, 4, 40000, 100,0 },
+ {2904,2905, 0, 4, 40000, 93,0 },
+ {2906,2907, 0, 4, 40000, 73,0 },
+ {2908,2909, 0, 4, 10720, 153,0 },
+ {2910,2911, 0, 4, 40000, 73,0 },
+ {2912,2912, 0, 0, 40000, 40,0 },
+ {2913,2914, 0, 4, 8720, 446,0 },
+ {2915,2916, 0, 4, 14706, 653,0 },
+ {2917,2918, 0, 4, 9213, 426,0 },
+ {2919,2920, 0, 4, 9286, 240,0 },
+ {2921,2922, 0, 4, 8706, 413,0 },
+ {2923,2924, 0, 4, 2233, 346,0 },
+ {2925,2926, 0, 4, 2373, 426,0 },
+ {2927,2928, 0, 4, 2353, 233,0 },
+ {2929,2929, 0, 0, 40000, 140,0 },
+ {2930,2931, 0, 4, 40000, 100,0 },
+ {2932,2933, 0, 4, 40000, 73,0 },
+ {2934,2935, 0, 4, 40000, 80,0 },
+ {2936,2937, 0, 4, 40000, 80,0 },
+ {2938,2939, 0, 4, 40000, 246,0 },
+ {2940,2940, 0, 0, 553, 446,0 },
+ {2941,2941, 0, 0, 40000, 193,0 },
+ {2942,2943, 0, 4, 1206, 406,0 },
+ {2944,2944, 0, 0, 7026, 1553,0 },
+ {2945,2945, 0, 0, 3426, 360,0 },
+ {2946,2947, 0, 4, 7313, 646,0 },
+ {2948,2948, 0, 0, 40000, 386,0 },
+ {2949,2949, 0, 0, 1953, 726,0 },
+ {2950,2951, 0, 4, 14606, 106,0 },
+ {2952,2953, 0, 4, 40000, 1566,0 },
+ {2954,2954, 60, 2, 6, 0,0 },
+ {2955,2956, 0, 4, 40000, 240,0 },
+ {2957,2958, 0, 4, 40000, 80,0 },
+ {2959,2960, 0, 4, 40000, 113,0 },
+ {2961,2962, 0, 4, 40000, 240,0 },
+ {2963,2963, 0, 0, 8506, 680,0 },
+ {2964,2964, 0, 0, 40000, 1593,0 },
+ {2436,2436, 49, 0, 1873, 633,0 },
+ {2357,2357, 61, 0, 113, 20,0 },
+ {2357,2357, 56, 0, 113, 26,0 },
+ {2357,2357, 58, 0, 113, 26,0 },
+ {2357,2357, 49, 0, 126, 26,0 },
+ {2357,2357, 44, 0, 126, 26,0 },
+ {2965,2965, 0, 0, 40000, 380,0 },
+ {2966,2966, 0, 0, 4440, 66,0 },
+ {2967,2967, 0, 0, 8133, 1433,0 },
+ {2968,2968, 0, 0, 40000, 126,0 },
+ {2969,2969, 0, 0, 40000, 0,0 },
+ {2970,2970, 84, 0, 160, 26,0 },
+ {2971,2971, 72, 0, 440, 180,0 },
+ {2972,2972, 0, 0, 8313, 580,0 },
+ {2973,2973, 0, 0, 40000, 160,0 },
+ {2974,2974, 0, 0, 40000, 3000,0 },
+ {2975,2975, 0, 0, 8300, 493,0 },
+ {2976,2976, 0, 0, 973, 673,0 },
+ {2977,2977, 0, 0, 40000, 73,0 },
+ {2978,2978, 0, 0, 40000, 133,0 },
+ {2979,2979, 0, 0, 40000, 140,0 },
+ {2980,2980, 0, 0, 40000, 346,0 },
+ {2981,2981, 0, 0, 40000, 1006,0 },
+ {2982,2982, 0, 0, 40000, 966,0 },
+ {2983,2983, 0, 0, 40000, 0,0 },
+ {2984,2984, 0, 0, 40000, 0,0 },
+ {2985,2985, 0, 0, 40000, 66,0 },
+ {2986,2986, 0, 0, 40000, 66,0 },
+ {2987,2987, 0, 0, 40000, 46,0 },
+ {2988,2988, 0, 0, 40000, 533,0 },
+ {2989,2989, 0, 0, 2400, 780,0 },
+ {2990,2990, 0, 0, 820, 66,0 },
+ {2991,2991, 0, 0, 40000, 240,0 },
+ {2992,2992, 0, 0, 40000, 220,0 },
+ {2993,2993, 0, 0, 40000, 0,0 },
+ {2994,2994, 0, 0, 15100, 73,0 },
+ {2995,2995, 0, 0, 40000, 200,0 },
+ {2996,2996, 0, 0, 2426, 93,0 },
+ {2997,2997, 0, 0, 4640, 1553,0 },
+ {2998,2998, 0, 0, 40000, 73,0 },
+ {2999,2999, 0, 0, 40000, 73,0 },
+ {3000,3000, 0, 0, 1133, 633,0 },
+ {3001,3001, 0, 0, 40000, 0,0 },
+ {3002,3002, 0, 0, 40000, 1006,0 },
+ {3003,3003, 0, 0, 4653, 653,0 },
+ {3004,3004, 0, 0, 40000, 1000,0 },
+ {3005,3005, 0, 0, 40000, 53,0 },
+ {3006,3006, 0, 0, 40000, 60,0 },
+ {3007,3007, 0, 0, 40000, 0,0 },
+ { 350, 350, 0, 0, 513, 200,0 },
+ {3008,3008, 0, 0, 213, 106,0 },
+ {3009,3009, 0, 0, 280, 126,0 },
+ {3010,3010, 0, 0, 1193, 426,0 },
+ {3011,3011, 0, 0, 14653, 4906,0 },
+ {3012,3012, 0, 0, 1040, 326,0 },
+ {3013,3013, 0, 0, 5740, 2326,0 },
+ {3014,3014, 0, 0, 40000, 73,0 },
+ {3015,3015, 0, 0, 40000, 240,0 },
+ { 350, 350, 36, 0, 380, 153,0 },
+ { 369, 369, 37, 0, 213, 66,0 },
+ {3008,3008, 38, 0, 213, 106,0 },
+ { 369, 369, 24, 0, 193, 13,0 },
+ {3008,3008, 32, 0, 206, 106,0 },
+ { 369, 369, 48, 0, 186, 20,0 },
+ {3009,3009, 42, 0, 220, 106,0 },
+ { 369, 369, 50, 0, 186, 73,0 },
+ { 369, 369, 52, 0, 186, 73,0 },
+ { 369, 369, 54, 0, 186, 33,0 },
+ { 369, 369, 55, 0, 186, 33,0 },
+ { 369, 369, 57, 0, 180, 33,0 },
+ {3010,3010, 51, 0, 966, 353,0 },
+ { 144, 144, 61, 0, 213, 126,0 },
+ {3016,3016, 0, 0, 8340, 520,0 },
+ {3016,3016, 63, 0, 6106, 373,0 },
+ {3016,3016, 64, 0, 6073, 380,0 },
+ {3017,3017, 40, 0, 206, 100,0 },
+ {3017,3017, 70, 0, 160, 93,0 },
+ {3018,3018, 0, 0, 40000, 73,0 },
+ {3019,3019, 0, 0, 40000, 73,0 },
+ {3020,3020, 0, 0, 40000, 73,0 },
+ {3021,3021, 0, 0, 40000, 73,0 },
+ {3022,3022, 38, 0, 246, 33,0 },
+ {2441,2441, 57, 0, 286, 126,0 },
+ {3023,3023, 63, 0, 146, 126,0 },
+ {3024,3024, 74, 0, 280, 73,0 },
+ {3025,3025, 74, 0, 453, 100,0 },
+ {3026,3026, 60, 0, 666, 33,0 },
+ {1439,1440, 0, 0, 13566, 273,0 },
+ {1593,1594, 35, 0, 2200, 673,0 },
+ {1564,1565, 35, 0, 740, 280,0 },
+ {1443,1444, 0, 0, 11886, 333,0 },
+ {1481,1482, 0, 0, 40000, 133,0 },
+ { 185, 186, 0, 0, 5980, 1540,0 },
+ { 235, 237, 0, 0, 3366, 1093,0 },
+ { 239, 240, 0, 0, 40000, 133,0 },
+ {1477,1476, 0, 0, 40000, 160,0 },
+ { 268, 269, 0, 0, 40000, 80,0 },
+ { 176, 177, 0, 0, 40000, 0,0 },
+ {1490,1491, 0, 0, 40000, 60,0 },
+ { 231, 232, 0, 0, 40000, 146,0 },
+ { 233, 234, 0, 0, 40000, 433,0 },
+ { 254, 255, 0, 0, 40000, 93,0 },
+ { 192, 193, 0, 0, 40000, 66,0 },
+ { 252, 253, 0, 0, 40000, 73,0 },
+ { 248,3027, 0, 0, 40000, 80,0 },
+ { 39,1476, 0, 0, 40000, 160,0 },
+ { 241, 242, 0, 0, 40000, 146,0 },
+ {1508,1509, 0, 0, 40000, 0,0 },
+ { 246, 247, 0, 0, 3966, 800,0 },
+ { 181,1451, 0, 0, 2153, 640,0 },
+ { 209, 210, 0, 0, 4453, 100,0 },
+ { 270, 271, 0, 0, 40000, 80,0 },
+ { 115,1533, 0, 0, 4260, 1720,0 },
+ {1454,1455, 0, 0, 40000, 0,0 },
+ { 107, 319, 0, 0, 1266, 413,0 },
+ { 46, 238, 0, 0, 6873, 1246,0 },
+ { 216, 217, 0, 0, 4046, 100,0 },
+ { 272, 273, 0, 0, 40000, 126,0 },
+ {1445,3028, 0, 0, 9966, 386,0 },
+ { 172, 173, 0, 0, 7340, 100,0 },
+ { 174, 175, 0, 0, 6913, 100,0 },
+ {1447,3029, 0, 0, 10306, 80,0 },
+ {1452,3030, 0, 0, 9240, 240,0 },
+ { 183, 184, 0, 0, 586, 253,0 },
+ {1456,1457, 0, 0, 1386, 180,0 },
+ {1458,1459, 0, 0, 40000, 60,0 },
+ { 190,1460, 0, 0, 40000, 46,0 },
+ {1462,1463, 0, 0, 40000, 340,0 },
+ {1464,1465, 0, 0, 40000, 360,0 },
+ { 195, 196, 0, 0, 40000, 66,0 },
+ { 197, 198, 0, 0, 40000, 86,0 },
+ { 199, 200, 0, 0, 40000, 60,0 },
+ { 201, 202, 0, 0, 3713, 100,0 },
+ { 203, 204, 0, 0, 14633, 126,0 },
+ { 205, 206, 0, 0, 9440, 153,0 },
+ { 214, 215, 0, 0, 17020, 100,0 },
+ { 218, 219, 0, 0, 14000, 180,0 },
+ { 220, 221, 0, 0, 2846, 100,0 },
+ {1472,1473, 0, 0, 8066, 66,0 },
+ {1474,1475, 0, 0, 8040, 93,0 },
+ { 225, 226, 0, 0, 8066, 106,0 },
+ { 229, 230, 0, 0, 40000, 160,0 },
+ {1478,1479, 0, 0, 40000, 413,0 },
+ { 50,1480, 0, 0, 40000, 393,0 },
+ {1485,1486, 0, 0, 40000, 226,0 },
+ { 258, 259, 0, 0, 40000, 73,0 },
+ { 262, 263, 0, 0, 40000, 160,0 },
+ { 264, 265, 0, 0, 40000, 160,0 },
+ {1494,1495, 0, 0, 40000, 80,0 },
+ {1496,1497, 0, 0, 40000, 73,0 },
+ { 274, 275, 0, 0, 40000, 100,0 },
+ {1499,1500, 0, 0, 40000, 73,0 },
+ { 277, 278, 0, 0, 40000, 173,0 },
+ { 279, 280, 0, 0, 40000, 160,0 },
+ { 281, 282, 0, 0, 40000, 173,0 },
+ {1501,1502, 0, 0, 40000, 146,0 },
+ { 284, 285, 0, 0, 40000, 66,0 },
+ { 286, 287, 0, 0, 40000, 86,0 },
+ {1503,1504, 0, 0, 40000, 86,0 },
+ {1505,1506, 0, 0, 40000, 73,0 },
+ { 289, 290, 0, 0, 40000, 66,0 },
+ { 291, 292, 0, 0, 40000, 160,0 },
+ { 293, 294, 0, 0, 40000, 200,0 },
+ { 86,1507, 0, 0, 40000, 80,0 },
+ { 88, 297, 0, 0, 40000, 1346,0 },
+ { 298, 299, 0, 0, 40000, 320,0 },
+ { 300, 301, 0, 0, 40000, 1273,0 },
+ {1514,1515, 0, 0, 40000, 100,0 },
+ {1518,1519, 0, 0, 4733, 0,0 },
+ {1520,1521, 0, 0, 40000, 440,0 },
+ {1524,1525, 0, 0, 40000, 1180,0 },
+ {1526,1527, 0, 0, 40000, 746,0 },
+ {1528,1529, 0, 0, 40000, 920,0 },
+ { 311, 312, 0, 0, 15306, 213,0 },
+ { 313, 314, 0, 0, 7280, 340,0 },
+ { 315, 316, 0, 0, 3693, 346,0 },
+ { 317, 318, 0, 0, 13720, 4033,0 },
+ { 108, 320, 0, 0, 40000, 66,0 },
+ { 109, 321, 0, 0, 40000, 180,0 },
+ { 322, 323, 0, 0, 40000, 73,0 },
+ { 111,1530, 0, 0, 4053, 426,0 },
+ { 324, 325, 0, 0, 626, 260,0 },
+ { 326, 327, 0, 0, 1166, 400,0 },
+ {1531,1532, 0, 0, 186, 340,0 },
+ {1534,1535, 0, 0, 3240, 440,0 },
+ { 330, 331, 0, 0, 1920, 360,0 },
+ {1536,1537, 0, 0, 3020, 0,0 },
+ {1538,1539, 0, 0, 1660, 846,0 },
+ {1541, 339, 0, 0, 9213, 813,0 },
+ {1542,1543, 0, 0, 993, 100,0 },
+ {1544,3031, 0, 0, 860, 180,0 },
+ {1546,3032, 0, 0, 40000, 80,0 },
+ { 338, 339, 0, 0, 40000, 200,0 },
+ { 340, 341, 0, 0, 40000, 0,0 },
+ {1441,1442, 0, 0, 7393, 186,0 },
+ { 207, 208, 0, 0, 14373, 126,0 },
+ {1466,1467, 0, 0, 40000, 66,0 },
+ {1468,1469, 0, 0, 40000, 46,0 },
+ { 179, 180, 0, 0, 4080, 346,0 },
+ {1449,1450, 0, 0, 8313, 3373,0 },
+ { 35,1470, 0, 0, 40000, 0,0 },
+ { 36,1471, 0, 0, 8093, 40,0 },
+ { 235, 236, 0, 0, 2393, 333,0 },
+ {1483,1484, 0, 0, 40000, 0,0 },
+ { 55,1487, 0, 0, 40000, 80,0 },
+ {1488,1489, 0, 0, 40000, 80,0 },
+ {1492,1493, 0, 0, 40000, 66,0 },
+ { 256, 257, 0, 0, 40000, 53,0 },
+ { 260, 261, 0, 0, 40000, 86,0 },
+ {1512,1513, 0, 0, 40000, 40,0 },
+ {1510,1511, 0, 0, 40000, 80,0 },
+ {1496,1498, 0, 0, 40000, 73,0 },
+ { 295, 296, 0, 0, 40000, 340,0 },
+ {1540, 339, 0, 0, 2466, 633,0 },
+ { 398, 399, 35, 0, 1860, 226,0 },
+ {1516,1517, 0, 0, 40000, 660,0 },
+ {1550,3033, 35, 0, 213, 26,0 },
+ {1556,1557, 35, 0, 1200, 426,0 },
+ {1558,1559, 35, 0, 1173, 406,0 },
+ {1570,1571, 35, 0, 1160, 140,0 },
+ {1608,1609, 35, 0, 2100, 320,0 },
+ {1595,1596, 35, 0, 220, 273,0 },
+ { 159,1597, 35, 0, 220, 266,0 },
+ {1610,1611, 35, 0, 220, 273,0 },
+ { 397,1588, 35, 0, 253, 86,0 },
+ {1606,1607, 35, 0, 133, 66,0 },
+ { 145,1576, 35, 0, 180, 0,0 },
+ {1612,1613, 35, 0, 526, 400,0 },
+ {1577,1578, 35, 0, 506, 453,0 },
+ {1614,1615, 35, 0, 773, 933,0 },
+ { 305, 306, 0, 0, 40000, 1160,0 },
+ {1522,1523, 0, 0, 40000, 0,0 },
+ {1550,1551, 35, 0, 526, 146,0 },
+ { 364, 365, 35, 0, 186, 20,0 },
+ { 129,1549, 35, 0, 326, 133,0 },
+ { 132,1552, 35, 0, 226, 113,0 },
+ {1553,1554, 35, 0, 206, 73,0 },
+ { 129,1548, 35, 0, 326, 133,0 },
+ { 134,1555, 35, 0, 2580, 893,0 },
+ {1560,1561, 35, 0, 600, 366,0 },
+ {1562,1563, 35, 0, 40000, 0,0 },
+ {1572,1573, 35, 0, 340, 133,0 },
+ {1574,1575, 35, 0, 406, 226,0 },
+ {1581,1582, 35, 0, 640, 213,0 },
+ { 149,1583, 35, 0, 326, 20,0 },
+ {1584,1585, 35, 0, 633, 240,0 },
+ {1591,1592, 35, 0, 1226, 413,0 },
+ {1568,1569, 35, 0, 1313, 460,0 },
+ {1579,1580, 35, 0, 326, 0,0 },
+ {1586,1587, 35, 0, 606, 220,0 },
+ {1589,1590, 35, 0, 120, 86,0 },
+ {1600,1601, 35, 0, 1326, 420,0 },
+ {1602,1603, 35, 0, 706, 266,0 },
+ {1604,1605, 35, 0, 4540, 1326,0 },
+ { 391, 392, 35, 0, 360, 153,0 },
+ { 391, 393, 35, 0, 453, 153,0 },
+ {1598,1599, 35, 0, 1246, 346,0 },
+ { 367, 368, 35, 0, 600, 153,0 },
+ { 380, 381, 35, 0, 40000, 0,0 },
+ { 374, 375, 35, 0, 40000, 0,0 },
+ {1566,1567, 35, 0, 40000, 0,0 },
+ {2306,2307, 35, 0, 7660, 1560,0 },
+ {3034, 339, 35, 0, 5860, 426,0 },
+ {2301,2302, 35, 0, 2146, 753,0 },
+ {2305,1548, 35, 0, 326, 133,0 },
+ {1595,1595, 35, 0, 220, 273,0 },
+ {2303,2304, 35, 0, 186, 20,0 },
+ {1560,2308, 35, 0, 600, 373,0 },
+ {2309,2310, 35, 0, 40000, 0,0 },
+ {1568,1568, 35, 0, 1280, 453,0 },
+ {2311,2312, 35, 0, 360, 106,0 },
+ {2313,2314, 35, 0, 620, 0,0 },
+ {2315,2315, 35, 0, 106, 0,0 },
+ {2316,2316, 35, 0, 506, 453,0 },
+ {1612,1612, 35, 0, 526, 400,0 },
+ {2317,2317, 35, 0, 640, 253,0 },
+ {2318,2318, 35, 0, 326, 20,0 },
+ {2319,2319, 35, 0, 453, 446,0 },
+ {2320,2320, 35, 0, 466, 453,0 },
+ {2321,2321, 35, 0, 120, 26,0 },
+ {2322,2322, 35, 0, 1220, 406,0 },
+ {2323,2323, 35, 0, 2360, 786,0 },
+ {2324, 392, 35, 0, 353, 146,0 },
+ {2324, 393, 35, 0, 453, 146,0 },
+ {2325,2326, 35, 0, 533, 140,0 },
+ {2327,2328, 35, 0, 1273, 393,0 },
+ {2329,2330, 35, 0, 40000, 0,0 },
+ {2331,2332, 35, 0, 40000, 0,0 },
+ {3035,3036, 35, 0, 4133, 433,0 },
+ {3037,3038, 35, 0, 1740, 286,0 },
+ {1564,1564, 35, 0, 713, 273,0 },
+ {3039,3039, 0, 0, 40000, 0,0 },
+ {3040,3040, 0, 0, 6100, 146,0 },
+ {3041,3041, 0, 0, 2386, 26,0 },
+ {3042,3042, 0, 0, 4320, 80,0 },
+ {3043,3043, 0, 0, 3433, 313,0 },
+ {3044,3044, 0, 0, 6620, 2446,0 },
+ {3045,3045, 0, 0, 3726, 1253,0 },
+ {3046,3046, 0, 0, 40000, 133,0 },
+ {3047,3047, 0, 0, 4566, 1253,0 },
+ {3048,3048, 0, 0, 40000, 813,0 },
+ {3049,3049, 0, 0, 18513, 1560,0 },
+ {3050,3050, 0, 0, 2186, 426,0 },
+ {3051,3051, 0, 0, 1186, 420,0 },
+ {3052,3052, 0, 0, 766, 420,0 },
+ {3053,3053, 0, 0, 14513, 4713,0 },
+ {3054,3054, 0, 0, 15493, 1580,0 },
+ {3055,3055, 0, 0, 40000, 66,0 },
+ {3056,3056, 0, 0, 40000, 60,0 },
+ {3057,3057, 0, 0, 4740, 100,0 },
+ {3058,3058, 0, 0, 40000, 66,0 },
+ {3059,3059, 0, 0, 40000, 73,0 },
+ {3060,3060, 0, 0, 40000, 73,0 },
+ {3061,3061, 0, 0, 40000, 0,0 },
+ {3062,3062, 0, 0, 8373, 633,0 },
+ {3063,3063, 0, 0, 7560, 133,0 },
+ {3064,3064, 0, 0, 40000, 0,0 },
+ {3065,3065, 0, 0, 40000, 86,0 },
+ {3066,3066, 0, 0, 340, 140,0 },
+ {3067,3067, 0, 0, 40000, 0,0 },
+ {3068,3068, 0, 0, 40000, 166,0 },
+ {3069,3069, 0, 0, 4280, 1466,0 },
+ {3070,3070, 0, 0, 2193, 73,0 },
+ {3071,3071, 0, 0, 4846, 100,0 },
+ {3072,3072, 0, 0, 12740, 93,0 },
+ {3073,3073, 0, 0, 6953, 200,0 },
+ {3074,3074, 0, 0, 13780, 73,0 },
+ {3075,3075, 0, 0, 40000, 73,0 },
+ {3076,3076, 0, 0, 5860, 600,0 },
+ {3077,3077, 0, 0, 2206, 73,0 },
+ {3078,3078, 0, 0, 40000, 140,0 },
+ {3079,3079, 0, 0, 40000, 53,0 },
+ {3080,3080, 0, 0, 40000, 120,0 },
+ {3081,3081, 0, 0, 40000, 140,0 },
+ {3082,3082, 0, 0, 40000, 126,0 },
+ {3083,3083, 0, 0, 360, 140,0 },
+ {3084,3084, 0, 0, 8880, 1373,0 },
+ {3085,3085, 0, 0, 593, 73,0 },
+ {3086,3086, 0, 0, 40000, 193,0 },
+ {3087,3087, 0, 0, 40000, 200,0 },
+ {3088,3088, 0, 0, 40000, 160,0 },
+ {3089,3089, 0, 0, 40000, 200,0 },
+ {3090,3090, 0, 0, 40000, 53,0 },
+ {3091,3091, 0, 0, 40000, 73,0 },
+ {3092,3092, 0, 0, 40000, 73,0 },
+ {3093,3093, 0, 0, 760, 213,0 },
+ {3094,3094, 0, 0, 40000, 133,0 },
+ {3095,3095, 0, 0, 40000, 220,0 },
+ {3096,3096, 0, 0, 40000, 100,0 },
+ {3097,3097, 0, 0, 40000, 73,0 },
+ {3098,3098, 0, 0, 40000, 140,0 },
+ {3099,3099, 0, 0, 40000, 140,0 },
+ {3100,3100, 0, 0, 40000, 140,0 },
+ {3101,3101, 0, 0, 40000, 73,0 },
+ {3102,3102, 0, 0, 40000, 73,0 },
+ {3103,3103, 0, 0, 40000, 73,0 },
+ {3104,3104, 0, 0, 40000, 73,0 },
+ {3105,3105, 0, 0, 40000, 66,0 },
+ {3106,3106, 0, 0, 40000, 66,0 },
+ {3107,3107, 0, 0, 40000, 73,0 },
+ {3108,3108, 0, 0, 40000, 73,0 },
+ {3109,3109, 0, 0, 40000, 73,0 },
+ {3110,3110, 0, 0, 40000, 73,0 },
+ {3111,3111, 0, 0, 40000, 86,0 },
+ {3112,3112, 0, 0, 5393, 100,0 },
+ {3113,3113, 0, 0, 40000, 60,0 },
+ {3114,3114, 0, 0, 18500, 73,0 },
+ {3115,3115, 0, 0, 40000, 93,0 },
+ {3116,3116, 0, 0, 40000, 86,0 },
+ {3117,3117, 0, 0, 40000, 173,0 },
+ {3118,3118, 0, 0, 40000, 1353,0 },
+ {3119,3119, 0, 0, 17506, 73,0 },
+ {3120,3120, 0, 0, 40000, 100,0 },
+ {3121,3121, 0, 0, 40000, 73,0 },
+ {3122,3122, 0, 0, 5620, 193,0 },
+ {3123,3123, 0, 0, 3700, 80,0 },
+ {3124,3124, 0, 0, 40000, 66,0 },
+ {3125,3125, 0, 0, 2740, 80,0 },
+ {3126,3126, 0, 0, 8333, 173,0 },
+ {3127,3127, 0, 0, 2226, 466,0 },
+ {3128,3128, 0, 0, 340, 146,0 },
+ {3129,3129, 0, 0, 19980, 6280,0 },
+ {3130,3130, 0, 0, 353, 73,0 },
+ {3131,3131, 35, 0, 566, 233,0 },
+ {3132,3132, 35, 0, 226, 46,0 },
+ {3133,3133, 35, 0, 40000, 100,0 },
+ {3134,3134, 35, 0, 40000, 100,0 },
+ {3135,3135, 35, 0, 360, 146,0 },
+ {3061,3061, 35, 0, 40000, 0,0 },
+ {3136,3136, 35, 0, 366, 20,0 },
+ { 739, 739, 35, 0, 246, 20,0 },
+ {3137,3137, 35, 0, 333, 33,0 },
+ {3138,3138, 35, 0, 420, 166,0 },
+ {3139,3139, 35, 0, 626, 240,0 },
+ {3140,3140, 35, 0, 233, 100,0 },
+ {3141,3141, 35, 0, 1166, 440,0 },
+ {3142,3142, 35, 0, 166, 66,0 },
+ {3143,3143, 35, 0, 1166, 440,0 },
+ {3144,3144, 35, 0, 813, 100,0 },
+ {3145,3145, 35, 0, 1040, 440,0 },
+ {3146,3146, 35, 0, 40000, 0,0 },
+ {3147,3147, 35, 0, 40000, 0,0 },
+ {3148,3148, 35, 0, 180, 40,0 },
+ {3149,3149, 35, 0, 40000, 0,0 },
+ {3150,3150, 0, 0, 40000, 0,0 },
+ {3151,3151, 0, 0, 4900, 240,0 },
+ {3152,3152, 0, 0, 3480, 80,0 },
+ {3153,3153, 0, 0, 3586, 86,0 },
+ {3154,3154, 0, 0, 4626, 633,0 },
+ {3155,3155, 0, 0, 4293, 2286,0 },
+ {3156,3156, 0, 0, 13653, 0,0 },
+ {3157,3157, 0, 0, 1206, 426,0 },
+ {3158,3158, 0, 0, 653, 426,0 },
+ {3159,3159, 0, 0, 40000, 0,0 },
+ {3160,3160, 0, 0, 4633, 633,0 },
+ {3161,3161, 0, 0, 40000, 73,0 },
+ {3162,3162, 0, 0, 40000, 60,0 },
+ {3163,3163, 0, 0, 40000, 146,0 },
+ {3164,3164, 0, 0, 40000, 73,0 },
+ {3165,3165, 0, 0, 40000, 73,0 },
+ {3166,3166, 0, 0, 40000, 0,0 },
+ {3167,3167, 0, 0, 40000, 66,0 },
+ {3168,3168, 0, 0, 3680, 1180,0 },
+ {3169,3169, 0, 0, 2406, 846,0 },
+ {3170,3170, 0, 0, 1560, 73,0 },
+ {3171,3171, 0, 0, 1946, 226,0 },
+ {3172,3172, 0, 0, 4333, 13,0 },
+ {3173,3173, 0, 0, 40000, 0,0 },
+ {3174,3174, 0, 0, 40000, 0,0 },
+ {3175,3175, 0, 0, 40000, 66,0 },
+ {3176,3176, 0, 0, 40000, 180,0 },
+ {3177,3177, 0, 0, 15380, 80,0 },
+ {3178,3178, 0, 0, 18213, 73,0 },
+ {3179,3179, 0, 0, 1706, 0,0 },
+ {3180,3180, 0, 0, 5733, 1266,0 },
+ {3181,3181, 0, 0, 40000, 0,0 },
+ {3182,3182, 0, 0, 40000, 366,0 },
+ {3183,3183, 0, 0, 40000, 66,0 },
+ {3184,3184, 0, 0, 4786, 73,0 },
+ {3185,3185, 0, 0, 5660, 720,0 },
+ {3186,3186, 0, 0, 1293, 406,0 },
+ {3187,3187, 0, 0, 40000, 0,0 },
+ {3188,3188, 0, 0, 2686, 233,0 },
+ {3189,3189, 0, 0, 40000, 0,0 },
+ {3190,3190, 0, 0, 40000, 73,0 },
+ {3191,3191, 0, 0, 40000, 0,0 },
+ {3192,3192, 0, 0, 40000, 73,0 },
+ {3193,3193, 0, 0, 40000, 0,0 },
+ {3194,3194, 0, 0, 3920, 73,0 },
+ {3195,3195, 0, 0, 40000, 73,0 },
+ {3196,3196, 0, 0, 40000, 66,0 },
+ {3197,3197, 0, 0, 40000, 80,0 },
+ {3198,3198, 0, 0, 40000, 86,0 },
+ {3199,3199, 0, 0, 40000, 60,0 },
+ {3200,3200, 0, 0, 40000, 0,0 },
+ {3201,3201, 0, 0, 40000, 353,0 },
+ {3202,3202, 0, 0, 3920, 73,0 },
+ {3203,3203, 0, 0, 5833, 813,0 },
+ {3204,3204, 0, 0, 40000, 60,0 },
+ {3205,3205, 0, 0, 40000, 73,0 },
+ {3206,3206, 0, 0, 1400, 406,0 },
+ {3207,3207, 0, 0, 40000, 66,0 },
+ {3208,3208, 0, 0, 9066, 2220,0 },
+ {3209,3209, 0, 0, 1473, 773,0 },
+ {3210,3210, 0, 0, 40000, 120,0 },
+ {3211,3211, 0, 0, 40000, 306,0 },
+ {3212,3212, 0, 0, 9306, 3013,0 },
+ {3213,3213, 0, 0, 40000, 60,0 },
+ {3214,3214, 0, 0, 40000, 73,0 },
+ {3215,3215, 0, 0, 40000, 73,0 },
+ {3216,3216, 0, 0, 40000, 453,0 },
+ {3217,3217, 0, 0, 40000, 3460,0 },
+ {3218,3218, 0, 0, 40000, 453,0 },
+ {3219,3219, 0, 0, 40000, 40,0 },
+ {3220,3220, 0, 0, 40000, 3926,0 },
+ {3221,3221, 0, 0, 40000, 4506,0 },
+ {3222,3222, 0, 0, 4646, 646,0 },
+ {3223,3223, 0, 0, 773, 100,0 },
+ {3224,3224, 0, 0, 40000, 73,0 },
+ {3225,3225, 0, 0, 40000, 173,0 },
+ {3226,3226, 0, 0, 1606, 653,0 },
+ {3227,3227, 0, 0, 2353, 806,0 },
+ {3228,3228, 0, 0, 980, 360,0 },
+ {3229,3229, 0, 0, 1193, 413,0 },
+ { 499, 499, 0, 0, 266, 0,0 },
+ {3230,3230, 0, 0, 973, 360,0 },
+ {3231,3231, 0, 0, 273, 53,0 },
+ {3232,3232, 0, 0, 726, 220,0 },
+ {3233,3233, 0, 0, 19933, 6093,0 },
+ {3234,3234, 0, 0, 40000, 0,0 },
+ { 403, 403, 0, 0, 40000, 73,0 },
+ {3235,3235, 0, 0, 4966, 233,0 },
+ {3236,3236, 0, 0, 4946, 240,0 },
+ {3237,3237, 0, 0, 4946, 233,0 },
+ {3238,3238, 0, 0, 4640, 1613,0 },
+ {3239,3239, 0, 0, 2360, 806,0 },
+ {3240,3240, 0, 0, 4466, 200,0 },
+ {3241,3241, 0, 0, 40000, 73,0 },
+ {3242,3242, 0, 0, 40000, 73,0 },
+ {3243,3243, 0, 0, 40000, 73,0 },
+ {3244,3244, 0, 0, 40000, 73,0 },
+ {3245,3245, 0, 0, 40000, 240,0 },
+ {3246,3246, 0, 0, 40000, 226,0 },
+ {3247,3247, 0, 0, 40000, 233,0 },
+ {3248,3248, 0, 0, 40000, 240,0 },
+ {3249,3249, 0, 0, 4306, 1253,0 },
+ {3250,3250, 0, 0, 3873, 1206,0 },
+ {3251,3251, 0, 0, 4640, 633,0 },
+ {3252,3252, 0, 0, 1233, 80,0 },
+ {3253,3253, 0, 0, 1233, 26,0 },
+ {3254,3254, 0, 0, 1233, 26,0 },
+ {3255,3255, 0, 0, 4573, 1253,0 },
+ {3256,3256, 0, 0, 3793, 1240,0 },
+ {3257,3257, 0, 0, 40000, 73,0 },
+ {3258,3258, 0, 0, 40000, 73,0 },
+ {3259,3259, 0, 0, 40000, 140,0 },
+ {3260,3260, 0, 0, 40000, 146,0 },
+ {3261,3261, 0, 0, 40000, 80,0 },
+ {3262,3262, 0, 0, 5953, 200,0 },
+ {3263,3263, 0, 0, 5926, 200,0 },
+ {3264,3264, 0, 0, 5866, 26,0 },
+ {3265,3265, 0, 0, 18573, 6153,0 },
+ {3266,3266, 0, 0, 40000, 2093,0 },
+ {3267,3267, 0, 0, 40000, 73,0 },
+ {3268,3268, 0, 0, 18626, 1553,0 },
+ {3269,3269, 0, 0, 40000, 1820,0 },
+ {3270,3270, 0, 0, 40000, 500,0 },
+ {3271,3271, 0, 0, 18206, 5900,0 },
+ {3272,3272, 0, 0, 14200, 93,0 },
+ {3273,3273, 0, 0, 40000, 2873,0 },
+ {3274,3274, 0, 0, 14960, 4913,0 },
+ {3275,3275, 0, 0, 40000, 86,0 },
+ {3276,3276, 0, 0, 40000, 826,0 },
+ {3277,3277, 0, 0, 40000, 200,0 },
+ {3278,3278, 0, 0, 40000, 340,0 },
+ {3279,3279, 0, 0, 13220, 2500,0 },
+ {3280,3280, 0, 0, 40000, 100,0 },
+ {3281,3281, 0, 0, 40000, 1026,0 },
+ {3282,3282, 0, 0, 40000, 366,0 },
+ {3283,3283, 0, 0, 40000, 386,0 },
+ {3284,3284, 0, 0, 40000, 0,0 },
+ {3285,3285, 0, 0, 40000, 0,0 },
+ {3286,3286, 0, 0, 40000, 140,0 },
+ {3287,3287, 0, 0, 40000, 53,0 },
+ {3288,3288, 0, 0, 40000, 120,0 },
+ {3289,3289, 0, 0, 8866, 1366,0 },
+ {3290,3290, 0, 0, 4193, 1400,0 },
+ {3291,3291, 0, 0, 8353, 673,0 },
+ {3292,3292, 0, 0, 8353, 673,0 },
+ {3293,3293, 0, 0, 8400, 593,0 },
+ {3294,3294, 0, 0, 8440, 666,0 },
+ {3295,3295, 0, 0, 9600, 1580,0 },
+ {3296,3296, 0, 0, 40000, 46,0 },
+ {3297,3297, 0, 0, 40000, 0,0 },
+ {3298,3298, 0, 0, 1653, 93,0 },
+ {3299,3299, 0, 0, 2706, 73,0 },
+ {3300,3300, 0, 0, 11680, 26,0 },
+ {3301,3301, 0, 0, 6500, 340,0 },
+ {3302,3302, 0, 0, 40000, 0,0 },
+ {3303,3303, 0, 0, 40000, 0,0 },
+ {3304,3304, 0, 0, 40000, 73,0 },
+ {3305,3305, 0, 0, 40000, 73,0 },
+ {3306,3306, 0, 0, 40000, 73,0 },
+ {3307,3307, 0, 0, 40000, 73,0 },
+ {3308,3308, 0, 0, 40000, 73,0 },
+ {3309,3309, 0, 0, 40000, 73,0 },
+ {3310,3310, 0, 0, 40000, 73,0 },
+ {3311,3311, 0, 0, 40000, 73,0 },
+ {3312,3312, 0, 0, 40000, 73,0 },
+ {3313,3313, 0, 0, 40000, 133,0 },
+ {3314,3314, 0, 0, 40000, 126,0 },
+ {3315,3315, 0, 0, 40000, 73,0 },
+ {3316,3316, 0, 0, 40000, 73,0 },
+ {3317,3317, 0, 0, 40000, 73,0 },
+ {3318,3318, 0, 0, 40000, 200,0 },
+ {3319,3319, 0, 0, 40000, 133,0 },
+ {3320,3320, 0, 0, 40000, 0,0 },
+ {3321,3321, 0, 0, 40000, 240,0 },
+ {3322,3322, 0, 0, 40000, 220,0 },
+ {3323,3323, 0, 0, 40000, 226,0 },
+ {3324,3324, 0, 0, 40000, 100,0 },
+ {3325,3325, 0, 0, 40000, 140,0 },
+ {3326,3326, 0, 0, 40000, 0,0 },
+ {3327,3327, 0, 0, 40000, 426,0 },
+ {3328,3328, 0, 0, 40000, 426,0 },
+ {3329,3329, 0, 0, 3680, 1220,0 },
+ {3330,3330, 0, 0, 40000, 533,0 },
+ {3331,3331, 0, 0, 40000, 813,0 },
+ {3332,3332, 0, 0, 14506, 4706,0 },
+ {3333,3333, 0, 0, 766, 420,0 },
+ {3334,3334, 0, 0, 40000, 1566,0 },
+ {3335,3335, 0, 0, 40000, 120,0 },
+ {3336,3336, 0, 0, 40000, 2380,0 },
+ {3337,3337, 0, 0, 5666, 300,0 },
+ {3338,3338, 0, 0, 40000, 73,0 },
+ {3339,3339, 0, 0, 40000, 2513,0 },
+ {3340,3340, 0, 0, 1260, 826,0 },
+ {3341,3341, 0, 0, 2420, 413,0 },
+ {3342,3342, 0, 0, 626, 240,0 },
+ {3343,3343, 0, 0, 273, 60,0 },
+ {3344,3344, 0, 0, 540, 20,0 },
+ {3345,3345, 0, 0, 540, 20,0 },
+ {3346,3346, 0, 0, 540, 20,0 },
+ {3347,3347, 0, 0, 1153, 760,0 },
+ {3348,3348, 0, 0, 40000, 100,0 },
+ {3349,3349, 0, 0, 7326, 2380,0 },
+ {3350,3350, 0, 0, 40000, 4426,0 },
+ {3351,3351, 0, 0, 7413, 2493,0 },
+ {3352,3352, 0, 0, 253, 20,0 },
+ {3353,3353, 0, 0, 246, 33,0 },
+ {3354,3354, 0, 0, 286, 13,0 },
+ {3355,3355, 0, 0, 953, 13,0 },
+ {3356,3356, 0, 0, 293, 20,0 },
+ { 142, 142, 20, 0, 1893, 620,0 },
+ {3357,1451, 0, 4, 2373, 780,0 },
+ {3358,3359, 0, 4, 9260, 246,0 },
+ {3360,1455, 0, 4, 40000, 0,0 },
+ {3361,1463, 0, 4, 40000, 266,0 },
+ { 225,3362, 0, 4, 7993, 100,0 },
+ {3363,1545, 0, 4, 293, 86,0 },
+ {3364,1547, 0, 4, 40000, 180,0 },
+ {3365,3366, 39, 4, 66, 0,0 },
+ {3367, 368, 58, 4, 173, 0,0 },
+ {3368,1551, 48, 4, 520, 200,0 },
+ {3368,3033, 49, 4, 53, 0,0 },
+ {3368,3033, 51, 4, 53, 0,0 },
+ {3368,3033, 54, 4, 60, 0,0 },
+ {3368,3033, 57, 4, 60, 0,0 },
+ {3368,3033, 60, 4, 60, 0,0 },
+ {3369,3370, 70, 4, 840, 0,0 },
+ {1564,1565, 80, 4, 220, 0,0 },
+ {3371,1571, 44, 4, 420, 0,0 },
+ {3372,3372, 0, 0, 8366, 666,0 },
+ {3373,3373, 0, 0, 8366, 666,0 },
+ {3374,3374, 0, 0, 3773, 73,0 },
+ {3375,3375, 0, 0, 8366, 666,0 },
+ {3376,3376, 0, 0, 4693, 26,0 },
+ {3377,3377, 0, 0, 7400, 80,0 },
+ {3378,3378, 0, 0, 3586, 80,0 },
+ {3379,3379, 0, 0, 8366, 666,0 },
+ {3380,3380, 0, 0, 3786, 1240,0 },
+ {3381,3381, 0, 0, 9013, 1466,0 },
+ {3382,3382, 0, 0, 1200, 73,0 },
+ {3383,3383, 0, 0, 8146, 1446,0 },
+ {3384,3384, 0, 0, 3660, 1206,0 },
+ {3385,3385, 0, 0, 200, 100,0 },
+ {3386,3386, 0, 0, 40000, 0,0 },
+ {3387,3387, 0, 0, 1213, 426,0 },
+ {3388,3388, 0, 0, 40000, 2573,0 },
+ {3389,3389, 0, 0, 40000, 3446,0 },
+ {3390,3390, 0, 0, 40000, 333,0 },
+ {3391,3391, 0, 0, 40000, 73,0 },
+ {3392,3392, 0, 0, 40000, 93,0 },
+ {3393,3393, 0, 0, 40000, 73,0 },
+ {3394,3394, 0, 0, 40000, 73,0 },
+ {3395,3395, 0, 0, 40000, 73,0 },
+ {3396,3396, 0, 0, 2193, 413,0 },
+ {3397,3397, 0, 0, 14606, 2886,0 },
+ {3398,3398, 0, 0, 10626, 4520,0 },
+ {3399,3399, 0, 0, 2413, 100,0 },
+ {3400,3400, 0, 0, 3593, 1140,0 },
+ {3401,3401, 0, 0, 40000, 146,0 },
+ {3402,3402, 0, 0, 40000, 86,0 },
+ {3403,3403, 0, 0, 40000, 86,0 },
+ {3404,3404, 0, 0, 9366, 106,0 },
+ {3405,3405, 0, 0, 40000, 73,0 },
+ {3406,3406, 0, 0, 40000, 0,0 },
+ {3407,3407, 0, 0, 40000, 0,0 },
+ {3408,3408, 0, 0, 1626, 400,0 },
+ {3409,3409, 0, 0, 4473, 2933,0 },
+ {3410,3410, 0, 0, 40000, 66,0 },
+ {3411,3411, 0, 0, 40000, 0,0 },
+ {3412,3412, 0, 0, 40000, 253,0 },
+ {3413,3413, 0, 0, 40000, 233,0 },
+ {3414,3414, 0, 0, 40000, 346,0 },
+ {3415,3415, 0, 0, 1966, 26,0 },
+ {3416,3416, 0, 0, 40000, 366,0 },
+ {3417,3417, 0, 0, 2266, 386,0 },
+ {3418,3418, 0, 0, 40000, 0,0 },
+ {3419,3419, 0, 0, 2313, 766,0 },
+ {3420,3420, 0, 0, 40000, 340,0 },
+ {3421,3421, 0, 0, 40000, 346,0 },
+ {3422,3422, 0, 0, 40000, 340,0 },
+ {3423,3423, 0, 0, 40000, 353,0 },
+ {3424,3424, 0, 0, 40000, 353,0 },
+ {3425,3425, 0, 0, 40000, 226,0 },
+ {3426,3426, 0, 0, 40000, 73,0 },
+ {3427,3427, 0, 0, 940, 253,0 },
+ {3428,3428, 0, 0, 40000, 73,0 },
+ {3429,3429, 0, 0, 40000, 80,0 },
+ {3430,3430, 0, 0, 40000, 240,0 },
+ {3431,3431, 0, 0, 40000, 80,0 },
+ {3432,3432, 0, 0, 40000, 73,0 },
+ {3433,3433, 0, 0, 40000, 73,0 },
+ {3434,3434, 0, 0, 40000, 73,0 },
+ {3435,3435, 0, 0, 40000, 73,0 },
+ {3436,3436, 0, 0, 40000, 73,0 },
+ {3437,3437, 0, 0, 40000, 73,0 },
+ {3438,3438, 0, 0, 40000, 73,0 },
+ {3439,3439, 0, 0, 40000, 73,0 },
+ {3440,3440, 0, 0, 40000, 73,0 },
+ {3441,3441, 0, 0, 40000, 73,0 },
+ {3442,3442, 0, 0, 40000, 66,0 },
+ {3443,3443, 0, 0, 40000, 73,0 },
+ {3444,3444, 0, 0, 40000, 80,0 },
+ {3445,3445, 0, 0, 40000, 66,0 },
+ {3446,3446, 0, 0, 40000, 66,0 },
+ {3447,3447, 0, 0, 40000, 66,0 },
+ {3448,3448, 0, 0, 40000, 66,0 },
+ {3449,3449, 0, 0, 40000, 80,0 },
+ {3450,3450, 0, 0, 40000, 353,0 },
+ {3451,3451, 0, 0, 40000, 0,0 },
+ {3452,3452, 0, 0, 18440, 100,0 },
+ {3453,3453, 0, 0, 18086, 100,0 },
+ {3454,3454, 0, 0, 266, 66,0 },
+ {3455,3455, 0, 0, 40000, 80,0 },
+ {3456,3456, 0, 0, 40000, 100,0 },
+ {3457,3457, 0, 0, 40000, 80,0 },
+ {3458,3458, 0, 0, 40000, 120,0 },
+ {3459,3459, 0, 0, 40000, 93,0 },
+ {3460,3460, 0, 0, 40000, 233,0 },
+ {3461,3461, 0, 0, 40000, 0,0 },
+ {3462,3462, 0, 0, 40000, 86,0 },
+ {3463,3463, 0, 0, 40000, 820,0 },
+ {3464,3464, 0, 0, 40000, 4986,0 },
+ {3465,3465, 0, 0, 40000, 146,0 },
+ {3466,3466, 0, 0, 40000, 100,0 },
+ {3467,3467, 0, 0, 40000, 3346,0 },
+ {3468,3468, 0, 0, 40000, 660,0 },
+ {3469,3469, 0, 0, 40000, 366,0 },
+ {3470,3470, 0, 0, 40000, 1480,0 },
+ {3471,3471, 0, 0, 40000, 646,0 },
+ {3472,3472, 0, 0, 40000, 2673,0 },
+ {3473,3473, 0, 0, 40000, 2500,0 },
+ {3474,3474, 0, 0, 40000, 2513,0 },
+ {3475,3475, 0, 0, 40000, 66,0 },
+ {3476,3476, 0, 0, 9600, 1580,0 },
+ {3477,3477, 0, 0, 40000, 46,0 },
+ {3478,3478, 0, 0, 10673, 100,0 },
+ {3479,3479, 0, 0, 2333, 800,0 },
+ {3480,3480, 0, 0, 3673, 1200,0 },
+ {3481,3481, 0, 0, 40000, 73,0 },
+ {3482,3482, 0, 0, 40000, 146,0 },
+ {3483,3483, 0, 0, 40000, 73,0 },
+ {3484,3484, 0, 0, 2266, 726,0 },
+ {3485,3485, 0, 0, 333, 140,0 },
+ {3486,3486, 0, 0, 2286, 746,0 },
+ {3487,3487, 0, 0, 293, 126,0 },
+ {3488,3488, 0, 0, 3700, 1213,0 },
+ {3489,3489, 0, 0, 3773, 1186,0 },
+ {3490,3490, 0, 0, 3646, 1200,0 },
+ {3491,3491, 0, 0, 3020, 73,0 },
+ {3492,3492, 0, 0, 786, 273,0 },
+ {3493,3493, 0, 0, 40000, 146,0 },
+ {3494,3494, 0, 0, 40000, 3093,0 },
+ {3495,3495, 0, 0, 273, 60,0 },
+ {3496,3496, 0, 0, 40000, 73,0 },
+ {3497,3497, 0, 0, 40000, 73,0 },
+ {3498,3498, 0, 0, 40000, 3093,0 },
+ {3499,3499, 0, 0, 40000, 240,0 },
+ {3500,3500, 0, 2, 6, 0,0 },
+ { 739, 739, 46, 0, 220, 33,0 },
+ {3501,3501, 47, 0, 973, 93,0 },
+ {3502,3502, 64, 0, 126, 66,0 },
+ {3503,3503, 40, 0, 340, 146,0 },
+ {3504,3504, 48, 0, 100, 0,0 },
+ {3505,3505, 48, 0, 286, 133,0 },
+ {3506,3506, 46, 0, 466, 166,0 },
+ {3507,3507,111, 0, 226, 113,0 },
+ {3508,3508, 49, 0, 473, 166,0 },
+ {3509,3509, 56, 0, 126, 40,0 },
+ {3510,3510, 52, 0, 520, 206,0 },
+ {3511,3511, 96, 0, 1346, 473,0 },
+ {3510,3510, 54, 0, 513, 206,0 },
+ {3512,3512, 57, 0, 973, 266,0 },
+ {3513,3513, 82, 0, 1580, 553,0 },
+ {3510,3510, 60, 0, 506, 200,0 },
+ {3514,3514, 60, 0, 1886, 646,0 },
+ {3515,3515, 92, 0, 1026, 520,0 },
+ {3516,3516, 60, 0, 180, 93,0 },
+ {3517,3517, 58, 0, 213, 213,0 },
+ {3518,3518, 22, 0, 2300, 766,0 },
+ {3519,3519, 60, 0, 1873, 653,0 },
+ {3520,3520, 72, 0, 260, 93,0 },
+ {3521,3521, 77, 0, 253, 93,0 },
+ {3522,3522, 70, 0, 206, 93,0 },
+ {3523,3523, 75, 0, 173, 93,0 },
+ {3524,3524, 69, 0, 406, 113,0 },
+ {3525,3525, 59, 0, 380, 160,0 },
+ {3526,3526, 48, 0, 373, 40,0 },
+ {3527,3527, 89, 0, 433, 180,0 },
+ {3528,3528, 84, 0, 813, 180,0 },
+ {3529,3529, 33, 0, 240, 53,0 },
+ {3530,3530, 55, 0, 220, 86,0 },
+ {3531,3531, 58, 0, 526, 200,0 },
+ {3532,3532, 52, 0, 526, 193,0 },
+ {3533,3533, 57, 0, 166, 80,0 },
+ {3534,3534, 57, 0, 240, 100,0 },
+ {3535,3535, 85, 0, 220, 113,0 },
+ {3536,3536, 68, 0, 173, 93,0 },
+ {3536,3536, 61, 0, 220, 113,0 },
+ {3537,3537, 64, 0, 346, 53,0 },
+ {3538,3538, 44, 0, 1080, 346,0 },
+ {3539,3539,100, 0, 193, 20,0 },
+ {3540,3540,100, 0, 793, 26,0 },
+ {3541,3541, 0, 0, 14166, 320,0 },
+ {3542,3542, 0, 0, 3873, 1613,0 },
+ {3543,3543, 0, 0, 3586, 86,0 },
+ {3544,3544, 0, 0, 7406, 2486,0 },
+ {3545,3545, 0, 0, 4640, 1560,0 },
+ {3546,3546, 0, 0, 446, 440,0 },
+ {3547,3547, 0, 0, 9253, 3100,0 },
+ {3548,3548, 0, 0, 4646, 646,0 },
+ {3549,3549, 0, 0, 40000, 66,0 },
+ {3550,3550, 0, 0, 40000, 73,0 },
+ {3551,3551, 0, 0, 40000, 113,0 },
+ {3552,3552, 0, 0, 40000, 73,0 },
+ {3553,3553, 0, 0, 40000, 73,0 },
+ {3554,3554, 0, 0, 40000, 0,0 },
+ {3555,3555, 0, 0, 40000, 60,0 },
+ {3556,3556, 0, 0, 3673, 1206,0 },
+ {3557,3557, 0, 0, 3706, 1293,0 },
+ {3558,3558, 0, 0, 5693, 1126,0 },
+ {3559,3559, 0, 0, 2406, 846,0 },
+ {3560,3560, 0, 0, 40000, 66,0 },
+ {3561,3561, 0, 0, 40000, 73,0 },
+ {3562,3562, 0, 0, 4333, 13,0 },
+ {3563,3563, 0, 0, 3700, 66,0 },
+ {3564,3564, 0, 0, 40000, 0,0 },
+ {3565,3565, 0, 0, 3713, 1260,0 },
+ {3566,3566, 0, 0, 1140, 126,0 },
+ {3567,3567, 0, 0, 40000, 186,0 },
+ {3568,3568, 0, 0, 40000, 0,0 },
+ {3569,3569, 0, 0, 14400, 6,0 },
+ {3570,3570, 0, 0, 14580, 66,0 },
+ {3571,3571, 0, 0, 40000, 73,0 },
+ {3572,3572, 0, 0, 40000, 353,0 },
+ {3573,3573, 0, 0, 40000, 0,0 },
+ {3574,3574, 0, 0, 40000, 173,0 },
+ {3575,3575, 0, 0, 1833, 600,0 },
+ {3576,3576, 0, 0, 40000, 0,0 },
+ {3577,3577, 0, 0, 40000, 206,0 },
+ {3578,3578, 0, 0, 40000, 46,0 },
+ {3579,3579, 0, 0, 40000, 73,0 },
+ {3580,3580, 0, 0, 9166, 2900,0 },
+ {3581,3581, 0, 0, 5640, 680,0 },
+ {3582,3582, 0, 0, 640, 220,0 },
+ {3583,3583, 0, 0, 40000, 53,0 },
+ {3584,3584, 0, 0, 40000, 26,0 },
+ {3585,3585, 0, 0, 40000, 0,0 },
+ {3586,3586, 0, 0, 40000, 66,0 },
+ {3587,3587, 0, 0, 40000, 60,0 },
+ {3588,3588, 0, 0, 40000, 0,0 },
+ {3589,3589, 0, 0, 40000, 73,0 },
+ {3590,3590, 0, 0, 40000, 0,0 },
+ {3591,3591, 0, 0, 40000, 0,0 },
+ {3592,3592, 0, 0, 3780, 73,0 },
+ {3593,3593, 0, 0, 40000, 0,0 },
+ {3594,3594, 0, 0, 3786, 73,0 },
+ {3595,3595, 0, 0, 40000, 73,0 },
+ {3596,3596, 0, 0, 40000, 66,0 },
+ {3597,3597, 0, 0, 40000, 73,0 },
+ {3598,3598, 0, 0, 40000, 53,0 },
+ {3599,3599, 0, 0, 40000, 426,0 },
+ {3600,3600, 0, 0, 40000, 133,0 },
+ {3601,3601, 0, 0, 40000, 66,0 },
+ {3602,3602, 0, 0, 40000, 433,0 },
+ {3603,3603, 0, 0, 393, 126,0 },
+ {3604,3604, 0, 0, 40000, 66,0 },
+ {3605,3605, 0, 0, 40000, 353,0 },
+ {3606,3606, 0, 0, 3813, 73,0 },
+ {3607,3607, 0, 0, 5793, 780,0 },
+ {3608,3608, 0, 0, 40000, 73,0 },
+ {3609,3609, 0, 0, 40000, 86,0 },
+ {3610,3610, 0, 0, 820, 206,0 },
+ {3611,3611, 0, 0, 40000, 66,0 },
+ {3612,3612, 0, 0, 40000, 200,0 },
+ {3613,3613, 0, 0, 18186, 720,0 },
+ {3614,3614, 0, 0, 40000, 0,0 },
+ {3615,3615, 0, 0, 40000, 493,0 },
+ {3616,3616, 0, 0, 40000, 306,0 },
+ {3617,3617, 0, 0, 2166, 600,0 },
+ {3618,3618, 0, 0, 40000, 73,0 },
+ {3619,3619, 0, 0, 40000, 3073,0 },
+ {3620,3620, 0, 0, 2333, 413,0 },
+ {3621,3621, 0, 0, 14880, 73,0 },
+ {3622,3622, 0, 0, 40000, 66,0 },
+ {3623,3623, 0, 0, 40000, 73,0 },
+ {3624,3624, 0, 0, 40000, 1873,0 },
+ {3625,3625, 0, 0, 40000, 446,0 },
+ {3626,3626, 0, 0, 40000, 3126,0 },
+ {3627,3627, 0, 0, 18446, 6140,0 },
+ {3628,3628, 0, 0, 1113, 240,0 },
+ {3629,3629, 0, 0, 40000, 3600,0 },
+ {3630,3630, 0, 0, 40000, 4726,0 },
+ {3631,3631, 0, 0, 40000, 0,0 },
+ {3632,3632, 0, 0, 2893, 606,0 },
+ {3633,3633, 0, 0, 40000, 0,0 },
+ {3634,3634, 0, 0, 40000, 0,0 },
+ {3635,3635, 0, 0, 40000, 173,0 },
+ {3636,3636, 0, 0, 40000, 60,0 },
+ {3637,3637, 0, 0, 40000, 0,0 },
+ {3638,3638, 0, 0, 986, 326,0 },
+ {3639,3639, 0, 0, 1873, 646,0 },
+ {3640,3640, 0, 0, 200, 260,0 },
+ {3641,3641, 0, 0, 1180, 393,0 },
+ {3642,3642, 0, 0, 266, 0,0 },
+ {3643,3643, 0, 0, 313, 126,0 },
+ {3644,3644, 0, 0, 406, 253,0 },
+ {3645,3645, 0, 0, 1013, 813,0 },
+ {3646,3646, 0, 0, 273, 53,0 },
+ {3647,3647, 0, 0, 720, 213,0 },
+ {3648,3648, 0, 0, 386, 120,0 },
+ {3649,3649, 0, 0, 40000, 766,0 },
+ {3650,3650, 0, 0, 40000, 66,0 },
+ {3651,3651, 0, 0, 40000, 73,0 },
+ {3652,3652, 0, 0, 1186, 426,0 },
+ {3653,3653, 0, 0, 16720, 240,0 },
+ {3654,3654, 0, 0, 8026, 246,0 },
+ {3655,3655, 0, 0, 18186, 140,0 },
+ {3656,3656, 0, 0, 14566, 200,0 },
+ {3657,3657, 0, 0, 7973, 20,0 },
+ {3658,3658, 0, 0, 4446, 86,0 },
+ {3659,3659, 0, 0, 4473, 100,0 },
+ {3660,3660, 0, 0, 8646, 153,0 },
+ {3661,3661, 0, 0, 3726, 660,0 },
+ {3662,3662, 0, 0, 1893, 653,0 },
+ {3663,3663, 0, 0, 1933, 760,0 },
+ {3664,3664, 0, 0, 9160, 240,0 },
+ {3665,3665, 0, 0, 1133, 100,0 },
+ {3666,3666, 0, 0, 633, 233,0 },
+ {3667,3667, 0, 0, 9153, 3060,0 },
+ {3668,3668, 0, 0, 2166, 406,0 },
+ {3669,3669, 0, 0, 40000, 66,0 },
+ {3670,3670, 0, 0, 40000, 73,0 },
+ {3671,3671, 0, 0, 40000, 73,0 },
+ {3672,3672, 0, 0, 40000, 73,0 },
+ {3673,3673, 0, 0, 40000, 346,0 },
+ {3674,3674, 0, 0, 40000, 353,0 },
+ {3675,3675, 0, 0, 40000, 200,0 },
+ {3676,3676, 0, 0, 40000, 320,0 },
+ {3677,3677, 0, 0, 4646, 100,0 },
+ {3678,3678, 0, 0, 4426, 133,0 },
+ {3679,3679, 0, 0, 4633, 100,0 },
+ {3680,3680, 0, 0, 2266, 133,0 },
+ {3681,3681, 0, 0, 2346, 53,0 },
+ {3682,3682, 0, 0, 40000, 66,0 },
+ {3683,3683, 0, 0, 9686, 173,0 },
+ {3684,3684, 0, 0, 14300, 66,0 },
+ {3685,3685, 0, 0, 40000, 0,0 },
+ {3686,3686, 0, 0, 40000, 0,0 },
+ {3687,3687, 0, 0, 40000, 0,0 },
+ {3688,3688, 0, 0, 8613, 73,0 },
+ {3689,3689, 0, 0, 40000, 0,0 },
+ {3690,3690, 0, 0, 40000, 0,0 },
+ {3691,3691, 0, 0, 40000, 0,0 },
+ {3692,3692, 0, 0, 40000, 0,0 },
+ {3693,3693, 0, 0, 40000, 393,0 },
+ {3694,3694, 0, 0, 40000, 126,0 },
+ {3695,3695, 0, 0, 40000, 120,0 },
+ {3696,3696, 0, 0, 40000, 0,0 },
+ {3697,3697, 0, 0, 40000, 226,0 },
+ {3698,3698, 0, 0, 7420, 1186,0 },
+ {3699,3699, 0, 0, 3280, 1726,0 },
+ {3700,3700, 0, 0, 3680, 1220,0 },
+ {3701,3701, 0, 0, 40000, 480,0 },
+ {3702,3702, 0, 0, 40000, 306,0 },
+ {3703,3703, 0, 0, 40000, 433,0 },
+ {3704,3704, 0, 0, 40000, 133,0 },
+ {3705,3705, 0, 0, 40000, 0,0 },
+ {3706,3706, 0, 0, 40000, 0,0 },
+ {3707,3707, 0, 0, 1166, 380,0 },
+ {3708,3708, 0, 0, 40000, 140,0 },
+ {3709,3709, 0, 0, 40000, 126,0 },
+ {3710,3710, 0, 0, 40000, 100,0 },
+ {3711,3711, 0, 0, 40000, 66,0 },
+ {3712,3712, 0, 0, 40000, 226,0 },
+ {3713,3713, 0, 0, 40000, 133,0 },
+ {3714,3714, 0, 0, 40000, 73,0 },
+ {3715,3715, 0, 0, 40000, 226,0 },
+ {3716,3716, 0, 0, 40000, 100,0 },
+ {3717,3717, 0, 0, 40000, 80,0 },
+ {3718,3718, 0, 0, 40000, 100,0 },
+ {3719,3719, 0, 0, 40000, 73,0 },
+ {3720,3720, 0, 0, 40000, 73,0 },
+ {3721,3721, 0, 0, 40000, 73,0 },
+ {3722,3722, 0, 0, 40000, 126,0 },
+ {3723,3723, 0, 0, 40000, 80,0 },
+ {3724,3724, 0, 0, 40000, 73,0 },
+ {3725,3725, 0, 0, 40000, 86,0 },
+ {3726,3726, 0, 0, 40000, 100,0 },
+ {3727,3727, 0, 0, 40000, 0,0 },
+ {3728,3728, 0, 0, 40000, 126,0 },
+ {3729,3729, 0, 0, 40000, 133,0 },
+ {3730,3730, 0, 0, 40000, 140,0 },
+ {3731,3731, 0, 0, 40000, 73,0 },
+ {3732,3732, 0, 0, 40000, 60,0 },
+ {3733,3733, 0, 0, 40000, 93,0 },
+ {3734,3734, 0, 0, 40000, 80,0 },
+ {3735,3735, 0, 0, 40000, 66,0 },
+ {3736,3736, 0, 0, 40000, 0,0 },
+ {3737,3737, 0, 0, 40000, 220,0 },
+ {3738,3738, 0, 0, 40000, 80,0 },
+ {3739,3739, 0, 0, 40000, 400,0 },
+ {3740,3740, 0, 0, 40000, 1373,0 },
+ {3741,3741, 0, 0, 40000, 86,0 },
+ {3742,3742, 0, 0, 40000, 1313,0 },
+ {3743,3743, 0, 0, 40000, 0,0 },
+ {3744,3744, 0, 0, 11486, 593,0 },
+ {3745,3745, 0, 0, 40000, 1246,0 },
+ {3746,3746, 0, 0, 40000, 140,0 },
+ {3747,3747, 0, 0, 14386, 2680,0 },
+ {3748,3748, 0, 0, 40000, 653,0 },
+ {3749,3749, 0, 0, 2286, 713,0 },
+ {3750,3750, 0, 0, 40000, 253,0 },
+ {3751,3751, 0, 0, 6933, 406,0 },
+ {3752,3752, 0, 0, 40000, 1313,0 },
+ {3753,3753, 0, 0, 40000, 1440,0 },
+ {3754,3754, 0, 0, 40000, 73,0 },
+ {3755,3755, 0, 0, 11100, 420,0 },
+ {3756,3756, 0, 0, 6493, 320,0 },
+ {3757,3757, 0, 0, 3486, 126,0 },
+ {3758,3758, 0, 0, 6620, 2133,0 },
+ {3759,3759, 0, 0, 1180, 413,0 },
+ {3760,3760, 0, 0, 40000, 73,0 },
+ {3761,3761, 0, 0, 40000, 73,0 },
+ {3762,3762, 0, 0, 40000, 66,0 },
+ {3763,3763, 0, 0, 4580, 413,0 },
+ {3764,3764, 0, 0, 340, 146,0 },
+ {3765,3765, 0, 0, 1166, 400,0 },
+ {3766,3766, 0, 0, 1346, 660,0 },
+ {3767,3767, 0, 0, 1260, 393,0 },
+ {3768,3768, 0, 0, 3646, 1186,0 },
+ {3769,3769, 0, 0, 2713, 400,0 },
+ {3770,3770, 0, 0, 1780, 73,0 },
+ {3771,3771, 0, 0, 800, 213,0 },
+ {3772,3772, 0, 0, 660, 173,0 },
+ {3773,3773, 0, 0, 12146, 73,0 },
+ {3774,3774, 0, 0, 273, 60,0 },
+ {3775,3775, 0, 0, 40000, 73,0 },
+ {3776,3776, 0, 0, 380, 53,0 },
+ {3777,3777, 0, 0, 40000, 200,0 },
+ {3778,3778, 0, 0, 586, 20,0 },
+ {3779,3779, 0, 2, 6, 0,0 },
+ { 738, 738, 44, 0, 840, 340,0 },
+ {3780,3780, 36, 0, 7366, 140,0 },
+ {3781,3781, 32, 0, 100, 0,0 },
+ {2030,2030, 60, 0, 293, 126,0 },
+ {3782,3782, 24, 0, 100, 0,0 },
+ {3783,3783, 60, 0, 126, 73,0 },
+ {3784,3784, 44, 0, 393, 93,0 },
+ { 132, 132, 44, 0, 173, 100,0 },
+ {3785,3785, 47, 0, 393, 93,0 },
+ { 152, 152, 44, 0, 213, 86,0 },
+ {3784,3784, 50, 0, 393, 93,0 },
+ { 139, 139, 44, 0, 293, 100,0 },
+ {3784,3784, 54, 0, 393, 93,0 },
+ {3784,3784, 57, 0, 393, 93,0 },
+ {3786,3786, 60, 0, 1900, 666,0 },
+ {3784,3784, 60, 0, 393, 93,0 },
+ {3787,3787, 60, 0, 1900, 666,0 },
+ {3788,3788, 60, 0, 1886, 666,0 },
+ {3789,3789, 60, 0, 1866, 653,0 },
+ {3790,3790, 60, 0, 1873, 633,0 },
+ {3791,3791, 44, 0, 946, 333,0 },
+ {2037,2037, 44, 0, 213, 126,0 },
+ { 144, 144, 44, 0, 213, 126,0 },
+ {2038,2038, 44, 0, 106, 0,0 },
+ {3792,3792, 44, 0, 380, 360,0 },
+ {3793,3793, 44, 0, 520, 206,0 },
+ {3794,3794, 45, 0, 273, 100,0 },
+ {3795,3795, 33, 0, 326, 106,0 },
+ {3796,3796, 56, 0, 506, 200,0 },
+ {3796,3796, 51, 0, 506, 200,0 },
+ {3797,3797, 44, 0, 126, 66,0 },
+ {3798,3798, 44, 0, 553, 186,0 },
+ {3534,3534, 56, 0, 240, 100,0 },
+ { 158, 158, 68, 0, 126, 140,0 },
+ {3799,3799, 51, 0, 513, 206,0 },
+ {3800,3800, 46, 0, 506, 200,0 },
+ {3801,3801, 44, 0, 513, 206,0 },
+ {3802,3802, 44, 0, 3720, 1260,0 },
+ { 152, 152, 45, 0, 220, 80,0 },
+ {3803,3803, 0, 0, 40000, 86,0 },
+ {3804,3804, 0, 0, 40000, 226,0 },
+ {3805,3805, 0, 0, 40000, 73,0 },
+ {3806,3806, 0, 0, 40000, 73,0 },
+ {3807,3807, 0, 0, 40000, 93,0 },
+ {3808,3808, 0, 0, 4653, 660,0 },
+ {3809,3809, 0, 0, 6686, 2246,0 },
+ {3810,3810, 0, 0, 1180, 413,0 },
+ {3811,3811, 0, 0, 966, 293,0 },
+ {3812,3812, 0, 0, 1780, 66,0 },
+ {3780,3780, 45, 0, 5900, 113,0 },
+ {3061,3061, 45, 0, 40000, 0,0 },
+ {3813,3813, 60, 0, 126, 226,0 },
+ {3781,3781, 60, 0, 93, 0,0 },
+ {3814,3814, 44, 0, 393, 86,0 },
+ {3815,3815, 57, 0, 166, 80,0 },
+ {3816,3816, 56, 0, 240, 100,0 },
+ {3817,3817, 60, 0, 113, 0,0 },
+ {3818,3818, 60, 0, 113, 0,0 },
+ {3517,3517, 45, 0, 213, 213,0 },
+ {3819,3819, 0, 0, 4033, 100,0 },
+ {3820,3820, 0, 0, 5200, 873,0 },
+ {3821,3821, 0, 0, 40000, 0,0 },
+ {3822,3822, 0, 0, 10493, 160,0 },
+ {3823,3823, 0, 0, 40000, 740,0 },
+ {3824,3825, 0, 1, 40000, 366,0.078125 },
+ {3826,3826, 0, 0, 40000, 5100,0 },
+ {3827,3827, 0, 0, 40000, 766,0 },
+ {3828,1172, 0, 1, 40000, 780,0.15625 },
+ {3829,3829, 0, 0, 40000, 60,0 },
+ {3830,3830, 0, 0, 566, 133,0 },
+ {3831,3831, 32, 0, 146, 0,0 },
+ {3832,3832, 36, 0, 273, 0,0 },
+ {3833,3833, 88, 0, 340, 120,0 },
+ {3834,3834, 0, 0, 9006, 240,0 },
+ {3835,3835, 0, 0, 9206, 246,0 },
+ {3836,3836, 0, 0, 9246, 386,0 },
+ {3837,3837, 0, 0, 9440, 220,0 },
+ {3838,3838, 0, 0, 8900, 133,0 },
+ {3839,3839, 0, 0, 9400, 253,0 },
+ {3840,3840, 0, 0, 4613, 420,0 },
+ {3841,3841, 0, 0, 9233, 426,0 },
+ {3842,3842, 0, 0, 40000, 526,0 },
+ {3843,3843, 0, 0, 40000, 640,0 },
+ {3844,3844, 0, 0, 40000, 666,0 },
+ {3845,3845, 0, 0, 40000, 1053,0 },
+ {3846,3846, 0, 0, 40000, 173,0 },
+ {3847,3847, 0, 0, 40000, 246,0 },
+ {3848,3848, 0, 0, 40000, 226,0 },
+ {3849,3849, 0, 0, 4073, 233,0 },
+ {3850,3850, 0, 0, 14286, 326,0 },
+ {3851,3851, 0, 0, 9233, 146,0 },
+ {3852,3852, 0, 0, 4480, 133,0 },
+ {3853,3853, 0, 0, 40000, 53,0 },
+ {3854,3854, 0, 0, 40000, 126,0 },
+ {3855,3855, 0, 0, 40000, 126,0 },
+ {3856,3856, 0, 0, 18226, 146,0 },
+ {3857,3857, 0, 0, 40000, 326,0 },
+ {3858,3858, 0, 0, 40000, 0,0 },
+ {3859,3859, 0, 0, 40000, 300,0 },
+ {3860,3860, 0, 0, 40000, 0,0 },
+ {3861,3861, 0, 0, 40000, 0,0 },
+ {3862,3862, 0, 0, 40000, 0,0 },
+ {3863,3863, 0, 0, 40000, 140,0 },
+ {3864,3864, 0, 0, 40000, 153,0 },
+ {3865,3865, 0, 0, 40000, 233,0 },
+ {3866,3866, 0, 0, 40000, 186,0 },
+ {3867,3867, 0, 0, 40000, 413,0 },
+ {3868,3868, 0, 0, 40000, 373,0 },
+ {3869,3869, 0, 0, 1246, 440,0 },
+ {3870,3870, 0, 0, 4620, 1513,0 },
+ {3871,3871, 0, 0, 40000, 433,0 },
+ {3872,3872, 0, 0, 40000, 453,0 },
+ {3873,3873, 0, 0, 40000, 1440,0 },
+ {3874,3874, 0, 0, 40000, 480,0 },
+ {3875,3875, 0, 0, 40000, 1360,0 },
+ {3876,3876, 0, 0, 40000, 0,0 },
+ {3877,3877, 0, 0, 40000, 353,0 },
+ {3878,3878, 0, 0, 40000, 86,0 },
+ {3879,3879, 0, 0, 40000, 126,0 },
+ {3880,3880, 0, 0, 40000, 73,0 },
+ {3881,3881, 0, 0, 40000, 80,0 },
+ {3882,3882, 0, 0, 40000, 246,0 },
+ {3883,3883, 0, 0, 40000, 93,0 },
+ {3884,3884, 0, 0, 40000, 120,0 },
+ {3885,3885, 0, 0, 40000, 180,0 },
+ {3886,3886, 0, 0, 40000, 133,0 },
+ {3887,3887, 0, 0, 40000, 133,0 },
+ {3888,3888, 0, 0, 40000, 153,0 },
+ {3889,3889, 0, 0, 40000, 93,0 },
+ {3890,3890, 0, 0, 40000, 140,0 },
+ {3891,3891, 0, 0, 40000, 100,0 },
+ {3892,3892, 0, 0, 40000, 146,0 },
+ {3893,3893, 0, 0, 40000, 126,0 },
+ {3894,3894, 0, 0, 40000, 160,0 },
+ {3895,3895, 0, 0, 40000, 226,0 },
+ {3896,3896, 0, 0, 40000, 140,0 },
+ {3897,3897, 0, 0, 40000, 200,0 },
+ {3898,3898, 0, 0, 40000, 66,0 },
+ {3899,3899, 0, 0, 40000, 446,0 },
+ {3900,3900, 0, 0, 40000, 140,0 },
+ {3901,3901, 0, 0, 40000, 400,0 },
+ {3902,3902, 0, 0, 40000, 373,0 },
+ {3903,3903, 0, 0, 40000, 1306,0 },
+ {3904,3904, 0, 0, 40000, 186,0 },
+ {3905,3905, 0, 0, 40000, 640,0 },
+ {3906,3906, 0, 0, 40000, 346,0 },
+ {3907,3907, 0, 0, 40000, 140,0 },
+ {3908,3908, 0, 0, 40000, 253,0 },
+ {3909,3909, 0, 0, 8980, 746,0 },
+ {3910,3910, 0, 0, 40000, 1266,0 },
+ {3911,3911, 0, 0, 40000, 1306,0 },
+ {3912,3912, 0, 0, 7226, 593,0 },
+ {3913,3913, 0, 0, 40000, 140,0 },
+ {3914,3914, 0, 0, 40000, 220,0 },
+ {3915,3915, 0, 0, 40000, 146,0 },
+ {3916,3916, 0, 0, 4606, 1506,0 },
+ {3917,3917, 0, 0, 40000, 80,0 },
+ {3918,3918, 0, 0, 40000, 0,0 },
+ {3919,3919, 0, 0, 40000, 0,0 },
+ {3920,3920, 0, 0, 613, 226,0 },
+ {3921,3921, 0, 0, 9073, 2946,0 },
+ {3922,3922, 0, 0, 40000, 73,0 },
+ {3923,3923, 0, 0, 3726, 200,0 },
+ {3924,3924, 0, 0, 3680, 373,0 },
+ {3925,3925, 0, 0, 7113, 186,0 },
+ {3926,3926, 0, 0, 2406, 106,0 },
+ {3927,3927, 0, 0, 40000, 0,0 },
+ {3928,3928, 0, 0, 40000, 253,0 },
+ {3929,3929, 0, 0, 40000, 0,0 },
+ {3930,3930, 0, 0, 40000, 80,0 },
+ {3931,3931, 0, 0, 40000, 86,0 },
+ {3932,3932, 0, 0, 18186, 740,0 },
+ {3933,3933, 0, 0, 18426, 813,0 },
+ { 523, 523, 0, 0, 200, 260,0 },
+ {3934,3934, 0, 0, 340, 146,0 },
+ {3935,3935, 0, 0, 366, 260,0 },
+ {3936,3936, 48, 0, 126, 0,0 },
+ {3937,3937, 27, 0, 200, 106,0 },
+ {3938,3938, 40, 0, 1073, 800,0 },
+ {3939,3939, 48, 0, 100, 0,0 },
+ {3938,3938, 45, 0, 933, 666,0 },
+ {3940,3940, 48, 0, 140, 333,0 },
+ {3938,3938, 47, 0, 933, 666,0 },
+ {3941,3941, 48, 0, 1840, 0,0 },
+ {3938,3938, 49, 0, 953, 686,0 },
+ {3938,3938, 53, 0, 906, 686,0 },
+ {3938,3938, 56, 0, 913, 693,0 },
+ { 129, 129, 52, 0, 293, 126,0 },
+ { 130, 130, 48, 0, 173, 93,0 },
+ { 129, 129, 58, 0, 286, 126,0 },
+ { 132, 132, 47, 0, 173, 100,0 },
+ { 492, 492, 43, 0, 820, 306,0 },
+ { 132, 132, 49, 0, 173, 93,0 },
+ { 132, 132, 51, 0, 173, 93,0 },
+ { 132, 132, 54, 0, 173, 93,0 },
+ { 132, 132, 57, 0, 146, 86,0 },
+ { 492, 492, 72, 0, 706, 300,0 },
+ { 137, 137, 76, 0, 1900, 666,0 },
+ { 138, 138, 84, 0, 740, 300,0 },
+ { 139, 139, 36, 0, 353, 146,0 },
+ { 140, 140, 76, 0, 1886, 680,0 },
+ { 141, 141, 84, 0, 220, 113,0 },
+ { 135, 135, 83, 0, 1353, 480,0 },
+ { 142, 142, 84, 0, 386, 160,0 },
+ {3942,3942, 24, 0, 2313, 780,0 },
+ { 137, 137, 77, 0, 1893, 660,0 },
+ { 144, 144, 60, 0, 213, 0,0 },
+ { 145, 145, 65, 0, 180, 146,0 },
+ { 146, 146, 59, 0, 173, 93,0 },
+ { 147, 147, 51, 0, 266, 213,0 },
+ { 148, 148, 45, 0, 513, 200,0 },
+ { 149, 149, 71, 0, 246, 26,0 },
+ { 150, 150, 60, 0, 500, 193,0 },
+ { 151, 151, 58, 0, 513, 200,0 },
+ { 152, 152, 53, 0, 220, 86,0 },
+ { 153, 153, 64, 0, 113, 40,0 },
+ { 154, 154, 71, 0, 840, 300,0 },
+ { 156, 156, 61, 0, 166, 80,0 },
+ { 158, 158, 48, 0, 173, 213,0 },
+ { 159, 159, 69, 0, 126, 140,0 },
+ { 160, 160, 68, 0, 126, 140,0 },
+ { 161, 161, 63, 0, 326, 113,0 },
+ { 162, 162, 74, 0, 860, 286,0 },
+ { 163, 163, 60, 0, 386, 160,0 },
+ { 164, 164, 80, 0, 1106, 273,0 },
+ { 165, 165, 64, 0, 126, 66,0 },
+ { 166, 166, 69, 0, 386, 80,0 },
+ { 167, 167, 73, 0, 546, 306,0 },
+ { 168, 168, 75, 0, 126, 140,0 },
+ { 169, 169, 68, 0, 340, 320,0 },
+ { 131, 131, 48, 0, 520, 200,0 },
+ {3061,3061, 53, 0, 40000, 0,0 },
+ {3943,3944, 0, 4, 2153, 0,0 },
+ {3945,3946, 0, 4, 9060, 393,0 },
+ { 174,3947, 0, 4, 6953, 0,0 },
+ {3948,3949, 0, 4, 9386, 140,0 },
+ { 9,3950, 0, 4, 1626, 426,0 },
+ {3951,3952, 0, 4, 18466, 240,0 },
+ {3953,3954, 0, 4, 4666, 1486,0 },
+ { 15,3955, 0, 4, 5700, 1986,0 },
+ {3956,3957, 0, 4, 40000, 100,0 },
+ {3958,3959, 0, 4, 40000, 73,0 },
+ {3960,3961, 0, 4, 40000, 73,0 },
+ {3962,3963, 0, 4, 40000, 73,0 },
+ {3964,3965, 0, 4, 18280, 153,0 },
+ {3966,3965, 0, 4, 18686, 160,0 },
+ { 31,3967, 0, 4, 40000, 0,0 },
+ {3968,3969, 0, 4, 17966, 100,0 },
+ {3970,3971, 0, 4, 40000, 66,0 },
+ {3972,3971, 0, 4, 40000, 66,0 },
+ {3973,3974, 0, 4, 40000, 46,0 },
+ {3975,3976, 0, 4, 18693, 106,0 },
+ {3977,3976, 0, 4, 18593, 106,0 },
+ {3978,3979, 0, 4, 9366, 106,0 },
+ {3980,3981, 0, 4, 9120, 226,0 },
+ {3982,3983, 0, 4, 40000, 140,0 },
+ {3984,3985, 0, 4, 40000, 800,0 },
+ { 54,3986, 0, 4, 2520, 706,0 },
+ {3987,3988, 0, 4, 40000, 86,0 },
+ {3989,3990, 0, 4, 40000, 233,0 },
+ {3991, 253, 0, 4, 40000, 66,0 },
+ {3992,3992, 0, 0, 40000, 0,0 },
+ {3993,3993, 0, 0, 40000, 120,0 },
+ {3994,3995, 0, 4, 40000, 80,0 },
+ {3996,3997, 0, 4, 40000, 73,0 },
+ {3998,3999, 0, 4, 40000, 86,0 },
+ {1503,4000, 0, 4, 40000, 93,0 },
+ { 88,4001, 0, 4, 40000, 1220,0 },
+ {3743,4002, 0, 4, 7706, 1260,0 },
+ { 92,4003, 0, 4, 40000, 186,0 },
+ { 93,4004, 0, 4, 40000, 813,0 },
+ { 94,4005, 0, 4, 7720, 1260,0 },
+ { 96,4006, 0, 4, 40000, 2460,0 },
+ { 103,4007, 0, 4, 3720, 1240,0 },
+ { 104,4008, 0, 4, 3020, 1226,0 },
+ { 105,4009, 0, 4, 6086, 2453,0 },
+ { 107,4010, 0, 4, 2100, 760,0 },
+ { 108,4011, 0, 4, 40000, 73,0 },
+ { 110,4012, 0, 4, 40000, 100,0 },
+ { 111,4013, 0, 4, 2366, 820,0 },
+ {4014,4015, 0, 4, 1026, 326,0 },
+ { 115,4016, 0, 4, 1853, 0,0 },
+ { 118,4017, 0, 4, 1553, 53,0 },
+ { 119,4018, 0, 4, 593, 0,0 },
+ { 120,4019, 0, 4, 2293, 1173,0 },
+ { 121,4020, 0, 4, 10673, 3000,0 },
+ { 123,4021, 0, 4, 7413, 2486,0 },
+ { 124,4022, 0, 4, 40000, 1126,0 },
+ { 125,4023, 0, 4, 40000, 1546,0 },
+ {4024,4024, 35, 0, 706, 266,0 },
+ {4025,4026, 38, 1, 273, 106,0 },
+ {4027,4028, 38, 1, 366, 133,0 },
+ {4029,4030, 48, 1, 280, 133,-1.90625 },
+ {4031,4031, 51, 0, 113, 80,0 },
+ {4032,4033, 48, 1, 953, 346,-1.90625 },
+ {4034,4034, 61, 1, 3200, 540,0.09375 },
+ {3369,1557, 70, 4, 833, 0,0 },
+ {4035,4036, 79, 1, 1306, 513,0.078125 },
+ {4037,4037, 62, 0, 5200, 466,0 },
+ {4038,4039, 67, 1, 2153, 1080,0.078125 },
+ {4040,4040, 62, 1, 3226, 573,0.09375 },
+ {4041,4042, 54, 1, 286, 133,0 },
+ {4041,4043, 48, 1, 286, 126,0 },
+ { 389, 389, 42, 0, 266, 73,0 },
+ {4044,4045, 48, 1, 280, 126,0 },
+ {4046,4047, 48, 1, 380, 60,0 },
+ {4048,4048, 16, 0, 180, 20,0 },
+ {4049,4049, 16, 0, 740, 20,0 },
+ {4050,4051, 64, 4, 1366, 0,0 },
+ { 844, 844,244, 2, 6, 0,0 },
+ { 855, 855,244, 2, 6, 0,0 },
+ { 880, 880,232, 0, 253, 80,0 },
+ { 882, 882,220, 0, 40000, 266,0 },
+ { 887, 887, 35, 0, 133, 46,0 },
+ { 884, 884, 35, 0, 233, 80,0 },
+ { 885, 885, 35, 0, 226, 86,0 },
+ { 886, 886, 35, 0, 113, 0,0 },
+ { 361, 361, 35, 0, 286, 73,0 },
+ { 767, 767, 35, 0, 3020, 786,0 },
+ { 888, 888, 35, 0, 246, 53,0 },
+ {2141,2141, 35, 0, 186, 73,0 },
+ { 891, 891, 35, 0, 713, 266,0 },
+ {2142,2142, 35, 0, 200, 100,0 },
+ {2143,2143, 35, 0, 220, 80,0 },
+ {2144,2144, 35, 0, 2393, 100,0 },
+ {2145,2145, 35, 0, 1980, 813,0 },
+ { 376, 376, 35, 0, 1880, 840,0 },
+ { 895, 895, 35, 0, 366, 140,0 },
+ {2146,2146, 35, 0, 346, 106,0 },
+ { 382, 382, 35, 0, 1073, 113,0 },
+ {2147,2147, 35, 0, 106, 80,0 },
+ { 898, 898, 35, 0, 206, 153,0 },
+ { 899, 899, 35, 0, 633, 240,0 },
+ { 900, 900, 35, 0, 620, 240,0 },
+ { 871, 871, 35, 0, 380, 73,0 },
+ { 388, 388, 35, 0, 286, 80,0 },
+ { 901, 901, 35, 0, 260, 26,0 },
+ { 902, 902, 35, 0, 1093, 73,0 },
+ { 903, 903, 35, 0, 126, 73,0 },
+ {3500,3500, 35, 2, 6, 0,0 },
+ {4052,4052, 0, 0, 14166, 320,0 },
+ {4053,4053, 0, 0, 7413, 653,0 },
+ {4054,4054, 0, 0, 40000, 146,0 },
+ {4055,4055, 0, 0, 40000, 113,0 },
+ {4056,4056, 0, 0, 16773, 193,0 },
+ {4057,4057, 0, 0, 40000, 73,0 },
+ {4058,4058, 0, 0, 40000, 0,0 },
+ {4059,4059, 0, 0, 966, 373,0 },
+ {4060,4060, 0, 0, 40000, 80,0 },
+ {4061,4061, 0, 0, 40000, 80,0 },
+ {4062,4062, 0, 0, 18473, 93,0 },
+ {4063,4063, 0, 0, 40000, 60,0 },
+ {4064,4064, 0, 0, 40000, 73,0 },
+ {4065,4065, 0, 0, 40000, 0,0 },
+ {4066,4066, 0, 0, 40000, 213,0 },
+ {4067,4067, 0, 0, 40000, 66,0 },
+ {4068,4068, 0, 0, 1413, 1026,0 },
+ {4069,4069, 0, 0, 506, 200,0 },
+ {4070,4070, 0, 0, 3793, 1106,0 },
+ {4071,4071, 0, 0, 40000, 220,0 },
+ {4072,4072, 0, 0, 40000, 46,0 },
+ {4073,4073, 0, 0, 40000, 0,0 },
+ {4074,4074, 0, 0, 40000, 60,0 },
+ {4075,4075, 0, 0, 40000, 0,0 },
+ {4076,4076, 0, 0, 40000, 33,0 },
+ {4077,4077, 0, 0, 40000, 0,0 },
+ {4078,4078, 0, 0, 40000, 146,0 },
+ {4079,4079, 0, 0, 40000, 66,0 },
+ {4080,4080, 0, 0, 40000, 353,0 },
+ {4081,4081, 0, 0, 40000, 66,0 },
+ {4082,4082, 0, 0, 40000, 53,0 },
+ {4083,4083, 0, 0, 40000, 73,0 },
+ {4084,4084, 0, 0, 40000, 66,0 },
+ {4085,4085, 0, 0, 40000, 926,0 },
+ {4086,4086, 0, 0, 2833, 200,0 },
+ { 127, 127, 36, 0, 386, 166,0 },
+ {4087,4087, 36, 0, 100, 0,0 },
+ {2030,2030, 36, 0, 346, 140,0 },
+ {3782,3782, 48, 0, 93, 0,0 },
+ {3783,3783, 36, 0, 146, 0,0 },
+ {4088,4088, 48, 0, 1886, 653,0 },
+ { 132, 132, 69, 0, 126, 66,0 },
+ {4088,4088, 52, 0, 1853, 626,0 },
+ { 152, 152, 48, 0, 220, 86,0 },
+ {4088,4088, 55, 0, 1886, 640,0 },
+ { 139, 139, 57, 0, 293, 133,0 },
+ {4088,4088, 58, 0, 1860, 633,0 },
+ {4088,4088, 60, 0, 1886, 633,0 },
+ {4089,4089, 62, 0, 2660, 900,0 },
+ {4088,4088, 63, 0, 1880, 646,0 },
+ { 134, 134, 70, 0, 966, 360,0 },
+ {4090,4090, 70, 0, 973, 346,0 },
+ {4091,4091, 53, 0, 1866, 640,0 },
+ {3516,3516, 48, 0, 180, 93,0 },
+ {4092,4092, 84, 0, 1360, 473,0 },
+ {4093,4093, 43, 0, 513, 206,0 },
+ {4094,4094, 56, 0, 1353, 480,0 },
+ {3791,3791, 24, 0, 1866, 613,0 },
+ { 134, 134, 65, 0, 1346, 486,0 },
+ { 146, 146, 48, 0, 173, 93,0 },
+ { 146, 146, 54, 0, 173, 93,0 },
+ {4095,4095, 42, 0, 246, 140,0 },
+ {4095,4095, 39, 0, 240, 133,0 },
+ {3816,3816, 52, 0, 306, 113,0 },
+ {4096,4096, 52, 0, 413, 86,0 },
+ { 158, 158, 60, 0, 146, 166,0 },
+ { 158, 158, 66, 0, 146, 166,0 },
+ { 158, 158, 59, 0, 146, 166,0 },
+ {3538,3538, 91, 0, 773, 233,0 },
+ {3547,3547,109, 0, 5300, 1786,0 },
+ {4097,4097, 79, 0, 560, 313,0 },
+ {4098,4098, 0, 0, 10646, 73,0 },
+ {4099,4100, 0, 1, 14166, 586,0.03125 },
+ {4101,4102, 0, 1, 15553, 546,0.03125 },
+ {4103,4104, 0, 1, 11746, 320,0.046875 },
+ {4105,4106, 0, 1, 14706, 646,0.15625 },
+ {4107,4108, 0, 1, 7320, 100,0.046875 },
+ {4109,4110, 0, 1, 40000, 0,0.0625 },
+ {4111,4112, 0, 1, 13660, 260,0 },
+ {4113,4114, 0, 1, 15026, 133,0 },
+ {4115,4116, 0, 1, 40000, 0,2.5e-05 },
+ {4117,4118, 0, 1, 4980, 3400,0 },
+ {4119,4120, 0, 1, 7840, 2660,0.046875 },
+ {4121,4122, 0, 1, 8326, 180,0 },
+ {4123,4124, 0, 1, 1093, 140,0 },
+ {4125,4126, 0, 1, 2280, 400,0 },
+ {4127,4128, 0, 1, 4553, 1486,0.03125 },
+ {4129,4129, 0, 1, 40000, 0,0.03125 },
+ {4130,4131, 0, 1, 40000, 60,0.15625 },
+ {4132,4133, 0, 1, 40000, 93,0.078125 },
+ {4134,4135, 0, 1, 40000, 86,0.15625 },
+ {4136,4137, 0, 1, 40000, 520,0.03125 },
+ {4138,4139, 0, 1, 40000, 140,0.0625 },
+ {4140,4141, 0, 1, 40000, 133,0.140625 },
+ {4142,4143, 0, 1, 40000, 73,0 },
+ {4144,4145, 0, 1, 40000, 346,0.109375 },
+ {4146,4147, 0, 1, 3693, 86,0 },
+ {4148,4149, 0, 1, 6586, 460,2.5e-05 },
+ {4150,4151, 0, 1, 4320, 93,0 },
+ {4152,4153, 0, 1, 7346, 126,0.046875 },
+ {4154,4155, 0, 1, 3633, 260,0 },
+ {4156,4157, 0, 1, 40000, 126,-1.95312 },
+ {4158,4159, 0, 1, 40000, 126,-1.9375 },
+ {4160,4161, 0, 1, 40000, 46,0.234375 },
+ {4162,4163, 0, 1, 40000, 0,0.03125 },
+ {4164,4165, 0, 1, 10320, 86,0 },
+ {4166,4167, 0, 1, 12933, 133,0 },
+ {4168,4169, 0, 1, 11820, 240,0.046875 },
+ {4170,4171, 0, 1, 3966, 166,0 },
+ {4172,4173, 0, 1, 40000, 0,0 },
+ {4174,4174, 0, 0, 2666, 160,0 },
+ {4175,4176, 0, 1, 15046, 93,0.078125 },
+ {4177,4178, 0, 1, 40000, 100,0 },
+ {4179,4179, 0, 0, 40000, 260,0 },
+ {4180,4181, 0, 1, 40000, 126,2.5e-05 },
+ {4182,4182, 0, 0, 40000, 233,0 },
+ {4183,4184, 0, 1, 40000, 440,0.078125 },
+ {4185,4186, 0, 1, 2160, 606,0.109375 },
+ {4187,4188, 0, 1, 14753, 2400,0.03125 },
+ {4189,4190, 0, 1, 7693, 0,0.03125 },
+ {4191,4192, 0, 1, 40000, 446,0.0625 },
+ {4193,4194, 0, 1, 40000, 866,-0.0625 },
+ {4195,4195, 0, 1, 40000, 1226,0.109375 },
+ {4196,4196, 0, 1, 40000, 1960,0.109375 },
+ {4197,4198, 0, 1, 40000, 433,0.125 },
+ {4199,4200, 0, 1, 40000, 140,0.140625 },
+ {4201,4202, 0, 1, 40000, 706,0.15625 },
+ {4203,4204, 0, 1, 1640, 0,0.125 },
+ {4205,4206, 0, 1, 40000, 86,0 },
+ {4207,4208, 0, 1, 40000, 80,0.03125 },
+ {4209,4209, 0, 0, 40000, 73,0 },
+ {4210,4210, 0, 0, 40000, 126,0 },
+ {4211,4212, 0, 1, 40000, 353,0.03125 },
+ {4213,4214, 0, 1, 40000, 120,0.0625 },
+ {4215,4216, 0, 1, 40000, 0,0.09375 },
+ {4217,4217, 0, 1, 40000, 0,0.125 },
+ {4218,4219, 0, 1, 40000, 186,0 },
+ {4220,4220, 0, 0, 40000, 166,0 },
+ {4221,4221, 0, 0, 40000, 73,0 },
+ {4222,4222, 0, 0, 40000, 60,0 },
+ {4223,4224, 0, 1, 40000, 140,0 },
+ {4225,4225, 0, 0, 40000, 140,0 },
+ {4226,4226, 0, 0, 40000, 66,0 },
+ {4227,4228, 0, 1, 40000, 133,0 },
+ {4229,4229, 0, 0, 40000, 86,0 },
+ {4230,4230, 0, 0, 40000, 73,0 },
+ {4231,4231, 0, 0, 40000, 106,0 },
+ {4232,4233, 0, 1, 40000, 186,0.03125 },
+ {4234,4235, 0, 1, 40000, 86,0.046875 },
+ {4236,4237, 0, 1, 40000, 0,0.03125 },
+ {4238,4238, 0, 0, 40000, 300,0 },
+ {4239,4239, 0, 0, 40000, 66,0 },
+ {4240,4241, 0, 1, 40000, 73,0.125 },
+ {4242,4243, 0, 1, 40000, 86,0.109375 },
+ {4244,4245, 0, 1, 40000, 146,0.109375 },
+ {4246,4247, 0, 1, 40000, 66,-0.03125 },
+ {4248,4248, 0, 0, 40000, 60,0 },
+ {4249,4250, 0, 1, 40000, 213,0.15625 },
+ {4251,4252, 0, 1, 40000, 66,0.125 },
+ {4253,4254, 0, 1, 40000, 100,0.03125 },
+ {4255,4256, 0, 1, 40000, 1513,0.078125 },
+ {4257,4258, 0, 1, 40000, 353,0.109375 },
+ {4259,4260, 0, 1, 40000, 133,0.078125 },
+ {4261,4262, 0, 1, 40000, 746,0.140625 },
+ {4263,4264, 0, 1, 40000, 0,0.109375 },
+ {4265,4266, 0, 1, 5033, 1606,0.0625 },
+ {4267,4268, 0, 1, 40000, 1146,0.09375 },
+ {4269,4270, 0, 1, 40000, 1586,0.109375 },
+ {4271,4272, 0, 1, 40000, 0,0.09375 },
+ {4273,4274, 0, 1, 40000, 1006,0.125 },
+ {4275,4275, 0, 1, 2680, 793,0.109375 },
+ {4276,4277, 0, 1, 40000, 0,-0.046875 },
+ {4278,4279, 0, 1, 9000, 3186,0.125 },
+ {4280,4281, 0, 1, 40000, 1073,-0.078125 },
+ {4282,4283, 0, 1, 40000, 2093,0.140625 },
+ {4284,4285, 0, 1, 5640, 440,0.078125 },
+ {4286,4287, 0, 1, 9580, 713,0.03125 },
+ {4288,4289, 0, 1, 6286, 380,0 },
+ {4290,4291, 0, 1, 2220, 426,0.03125 },
+ {4292,4292, 0, 0, 1166, 760,0 },
+ {4293,4294, 0, 1, 1186, 240,0 },
+ {4295,4296, 0, 1, 40000, 100,0.0625 },
+ {4297,4297, 0, 0, 40000, 160,0 },
+ {4298,4298, 0, 0, 40000, 120,0 },
+ {4299,4299, 0, 0, 8673, 2413,0 },
+ {4300,4300, 0, 0, 393, 126,0 },
+ {4301,4302, 0, 1, 1220, 393,0.03125 },
+ {4303,4303, 0, 0, 246, 93,0 },
+ {4304,4305, 0, 1, 1953, 393,0 },
+ {4306,4307, 0, 1, 566, 146,0 },
+ {4308,4309, 0, 1, 4220, 133,0 },
+ {4310,4311, 0, 1, 2873, 73,0.109375 },
+ {4312,4312, 0, 0, 613, 60,0 },
+ {4313,4314, 0, 1, 40000, 186,0 },
+ {4315,4316, 0, 1, 11880, 2993,0 },
+ {4317,4317, 0, 0, 1573, 86,0 },
+ {4318,4319, 0, 1, 40000, 793,0 },
+ {4320,4321, 0, 1, 40000, 173,0 },
+ {4322,4323, 0, 1, 40000, 793,0 },
+ {4324,4324, 0, 0, 606, 133,0 },
+ {4325,4325, 34, 0, 133, 40,0 },
+ {4326,4326, 28, 0, 193, 46,0 },
+ {4327,4328, 39, 1, 553, 126,0 },
+ {4327,4328, 33, 1, 553, 126,0 },
+ {4329,4330, 63, 1, 160, 80,0 },
+ {4331,4331, 15, 0, 113, 0,0 },
+ {4332,4332, 36, 0, 106, 0,0 },
+ {4332,4333, 36, 1, 480, 173,0.40625 },
+ {4334,4335, 25, 1, 313, 153,0 },
+ {4336,4335, 25, 1, 206, 100,0 },
+ {4337,4338, 61, 1, 153, 93,0 },
+ {4339,4340, 37, 1, 206, 93,0 },
+ {4341,4342, 15, 1, 346, 153,0 },
+ {4343,4344, 48, 1, 280, 133,-1.90625 },
+ {4345,4346, 19, 1, 553, 200,0 },
+ {4347,4347, 48, 0, 180, 86,0 },
+ {4348,4349, 15, 1, 333, 153,0 },
+ {4350,4351, 12, 1, 340, 146,0 },
+ {4352,4353, 11, 1, 346, 146,0 },
+ {4354,4355, 61, 1, 2706, 1033,0.09375 },
+ {4356,4353, 8, 1, 340, 146,0 },
+ {4357,4358, 91, 1, 1166, 366,-0.046875 },
+ {4359,4359, 70, 0, 966, 346,0 },
+ {4360,4361, 80, 1, 300, 93,0.125 },
+ {4362,4362, 58, 0, 206, 53,0 },
+ {4363,4355, 62, 1, 2333, 820,0.09375 },
+ {4364,4365, 31, 1, 773, 200,0 },
+ {4366,4358, 91, 1, 1160, 360,-0.03125 },
+ {4367,4368, 41, 1, 373, 113,0 },
+ {4369,4370, 35, 1, 406, 126,0 },
+ {4371,4372, 29, 1, 146, 106,0 },
+ {4373,4374, 41, 1, 400, 126,0 },
+ {4373,4374, 37, 1, 400, 126,0 },
+ {4375,4376, 54, 1, 286, 133,0 },
+ {4375,4377, 48, 1, 286, 126,0 },
+ {4378,4379, 77, 1, 193, 93,0 },
+ {4380,4381, 72, 1, 200, 93,0 },
+ {4382,4382, 40, 0, 513, 0,0 },
+ {4383,4383, 38, 0, 200, 20,0 },
+ {4384,4384, 36, 0, 620, 20,0 },
+ {4385,4386, 60, 1, 120, 80,0 },
+ {4386,4387, 60, 1, 380, 80,0 },
+ {4388,4388, 73, 0, 166, 33,0 },
+ {4389,4390, 68, 1, 153, 40,0 },
+ {4391,4392, 18, 1, 200, 80,0 },
+ {4393,4394, 18, 1, 253, 73,0 },
+ {4395,4395, 90, 0, 193, 20,0 },
+ {4396,4396, 90, 0, 793, 40,0 },
+ {4397,4398, 64, 1, 373, 73,0.03125 },
+ {4399,4400, 80, 1, 406, 153,0.03125 },
+ {4401,4402, 64, 1, 1866, 606,0 },
+ {4403,4403, 67, 0, 106, 26,0 },
+ {4404,4405, 50, 1, 173, 0,0 },
+ {4406,4406, 36, 0, 4646, 0,0 },
+ {4407,4407, 0, 0, 40000, 86,0 },
+ {4408,4408, 0, 0, 40000, 73,0 },
+ {4409,4409, 0, 0, 2433, 700,0 },
+ {4410,4410, 0, 0, 1233, 26,0 },
+ {4411,4411, 0, 0, 40000, 66,0 },
+ {4412,4412, 0, 0, 40000, 60,0 },
+ {4413,4413, 0, 0, 40000, 60,0 },
+ {4414,4414, 0, 0, 40000, 66,0 },
+ {4415,4415, 0, 0, 40000, 66,0 },
+ {4416,4416, 0, 0, 40000, 0,0 },
+ {4416,4416, 73, 0, 40000, 0,0 },
+ {4417,4417, 0, 0, 40000, 60,0 },
+ {4418,4418, 0, 0, 40000, 60,0 },
+ {4419,4419, 0, 0, 7326, 2486,0 },
+ {4420,4420, 0, 0, 4886, 1586,0 },
+ {4421,4421, 0, 0, 646, 20,0 },
+ {4422,4422, 0, 0, 253, 20,0 },
+ {4422,4422, 12, 0, 253, 20,0 },
+ {4423,4423, 0, 0, 640, 100,0 },
+ {4423,4423, 1, 0, 640, 106,0 },
+ {4424,4424, 0, 0, 133, 106,0 },
+ {4424,4424, 23, 0, 133, 106,0 },
+ {4425,4425, 0, 0, 653, 100,0 },
+ {4426,4426, 0, 0, 4166, 1546,0 },
+ {4427,4427, 0, 0, 40000, 73,0 },
+ {4428,4428, 0, 0, 40000, 60,0 },
+ {4429,4429, 0, 0, 40000, 53,0 },
+ {4430,4430, 0, 0, 40000, 0,0 },
+ {4431,4431, 0, 0, 246, 20,0 },
+ {4432,4432, 0, 2, 6, 0,0 },
+ {4433,4433, 0, 0, 4946, 233,0 },
+ {4434,4434, 0, 0, 4946, 233,0 },
+ {4435,4435, 0, 0, 4953, 240,0 },
+ {4436,4436, 0, 0, 4946, 233,0 },
+ {4437,4437, 0, 0, 18233, 46,0 },
+ {4438,4438, 0, 0, 2386, 26,0 },
+ {4439,4439, 0, 0, 4640, 633,0 },
+ {4440,4440, 0, 0, 18466, 100,0 },
+ {4441,4441, 0, 0, 18440, 66,-2 },
+ {4442,4442, 0, 0, 18440, 6140,-2 },
+ {4443,4443, 0, 0, 1206, 433,-2 },
+ {4444,4444, 0, 0, 4626, 240,0 },
+ {4445,4445, 0, 0, 726, 400,0 },
+ {4446,4446, 0, 0, 5866, 73,0 },
+ {4447,4447, 0, 0, 40000, 73,0 },
+ {4448,4448, 0, 0, 40000, 73,0 },
+ {4449,4449, 0, 0, 40000, 73,0 },
+ {4450,4450, 0, 0, 40000, 73,0 },
+ {4451,4451, 0, 0, 6500, 346,0 },
+ {4452,4452, 0, 0, 6506, 346,0 },
+ {4453,4453, 0, 0, 40000, 66,-2 },
+ {4454,4454, 0, 0, 40000, 66,-2 },
+ {4455,4455, 0, 0, 40000, 0,0 },
+ {4456,4456, 0, 0, 40000, 46,0 },
+ {4457,4457, 0, 0, 40000, 0,0 },
+ {4457,4457, 0, 0, 40000, 0,-2 },
+ {4458,4458, 0, 0, 2386, 26,0 },
+ {4459,4459, 0, 0, 40000, 73,-2 },
+ {4460,4460, 0, 0, 5866, 26,-2 },
+ {4461,4461, 0, 0, 40000, 133,0 },
+ {4462,4462, 0, 0, 40000, 133,0 },
+ {4463,4463, 0, 0, 40000, 126,0 },
+ {4464,4464, 0, 0, 253, 20,0 },
+ {4465,4465, 0, 0, 8866, 1366,0 },
+ {4466,4466, 0, 0, 1040, 766,0 },
+ {4467,4467, 0, 0, 40000, 146,-2 },
+ {4468,4468, 0, 0, 40000, 153,-2 },
+ {4469,4469, 0, 0, 40000, 466,-2 },
+ {4470,4470, 0, 0, 40000, 66,0 },
+ {4471,4471, 0, 0, 2333, 566,0 },
+ {4472,4472, 0, 0, 40000, 140,-2 },
+ {4473,4473, 0, 0, 40000, 100,-2 },
+ {4474,4474, 0, 0, 40000, 226,-2 },
+ {4475,4475, 0, 0, 40000, 0,0 },
+ {3712,3712, 0, 0, 40000, 226,-2 },
+ {4476,4476, 0, 0, 40000, 140,-2 },
+ {4477,4477, 0, 0, 40000, 66,0 },
+ {4478,4478, 0, 0, 40000, 73,0 },
+ {4479,4479, 0, 0, 40000, 73,0 },
+ {4480,4480, 0, 0, 40000, 86,-2 },
+ {4481,4481, 0, 0, 40000, 80,0 },
+ {4482,4482, 0, 0, 40000, 73,-2 },
+ {4483,4483, 0, 0, 40000, 80,-2 },
+ {4484,4484, 0, 0, 40000, 73,-2 },
+ {4485,4485, 0, 0, 40000, 73,0 },
+ {4486,4486, 0, 0, 40000, 73,0 },
+ {4487,4487, 0, 0, 40000, 93,0 },
+ {4488,4488, 0, 0, 40000, 73,0 },
+ {4489,4489, 0, 0, 11946, 13,0 },
+ {4490,4490, 0, 0, 40000, 73,0 },
+ {4460,4460, 0, 0, 5866, 26,0 },
+ {4491,4491, 0, 0, 40000, 820,0 },
+ {4492,4492, 0, 0, 2153, 873,0 },
+ {1221,1221, 0, 0, 40000, 293,0.171875 },
+ {4493,4493, 0, 0, 1620, 120,0 },
+ {4494,4494, 0, 0, 15120, 93,0 },
+ {4495,4495, 0, 0, 14613, 93,0 },
+ {4496,4496, 0, 0, 2346, 793,0 },
+ {4497,4497, 0, 0, 40000, 2380,0 },
+ {4498,4498, 0, 0, 40000, 1280,0 },
+ {4499,4499, 0, 0, 40000, 1460,0 },
+ {4500,4500, 0, 0, 40000, 2513,0 },
+ {4501,4501, 0, 0, 14840, 1266,0 },
+ {4502,4502, 0, 0, 4513, 640,0 },
+ {4503,4503, 0, 0, 4680, 806,0 },
+ {4504,4504, 0, 0, 40000, 100,0 },
+ {4505,4505, 0, 0, 40000, 66,0 },
+ {4506,4506, 0, 0, 2420, 413,0 },
+ {4507,4507, 0, 0, 406, 73,-2 },
+ {4508,4508, 0, 0, 1166, 400,0 },
+ {4509,4509, 0, 0, 1213, 106,0 },
+ {4510,4510, 0, 0, 273, 60,-2 },
+ {4511,4511, 0, 0, 40000, 2380,0 },
+ {4512,4512, 0, 0, 40000, 440,0 },
+ {1261,1261, 0, 0, 40000, 2960,0 },
+ {4513,4513, 37, 0, 973, 73,-2 },
+ {4514,4514, 48, 0, 106, 0,-2 },
+ {4515,4515, 48, 0, 286, 133,-2 },
+ {4516,4516, 62, 0, 166, 60,0 },
+ {4517,4517, 44, 0, 980, 360,0 },
+ {4518,4518, 80, 0, 100, 0,0 },
+ {4517,4517, 50, 0, 980, 346,0 },
+ {4519,4519, 48, 0, 106, 0,-2 },
+ {4517,4517, 55, 0, 973, 360,0 },
+ {4520,4520, 61, 0, 513, 20,0 },
+ {4517,4517, 58, 0, 966, 353,0 },
+ {4517,4517, 63, 0, 973, 353,0 },
+ {4521,4521, 71, 0, 1366, 580,0 },
+ {4517,4517, 72, 0, 820, 306,0 },
+ {4522,4522, 70, 0, 1886, 666,0 },
+ {4521,4521, 88, 0, 1353, 560,0 },
+ {4523,4523, 76, 0, 1873, 653,0 },
+ {4524,4524, 84, 0, 260, 113,0 },
+ {4521,4521, 68, 0, 1366, 553,0 },
+ {4525,4525, 72, 0, 153, 53,0 },
+ {4526,4526, 28, 0, 1193, 413,0 },
+ {4522,4522, 81, 0, 1353, 480,0 },
+ {4527,4527, 58, 0, 246, 120,-2 },
+ {4527,4527, 55, 0, 246, 120,-2 },
+ {4527,4527, 44, 0, 246, 120,-2 },
+ {4527,4527, 49, 0, 246, 120,-2 },
+ {4527,4527, 40, 0, 286, 133,-2 },
+ {4528,4528, 55, 0, 740, 560,-2 },
+ {4528,4528, 48, 0, 893, 693,-2 },
+ {4529,4529, 52, 0, 513, 206,0 },
+ {4529,4529, 45, 0, 513, 206,0 },
+ {4530,4530, 48, 0, 173, 100,-2 },
+ {4531,4531, 48, 0, 120, 266,-2 },
+ {4532,4532, 48, 0, 253, 60,-2 },
+ {4507,4507, 73, 0, 160, 20,-2 },
+ {4507,4507, 68, 0, 160, 20,-2 },
+ {4507,4507, 63, 0, 193, 20,-2 },
+ {4533,4533,108, 0, 406, 26,0 },
+ {4534,4534,108, 0, 740, 26,0 },
};
@@ -9339,7 +9472,7 @@ const unsigned short banks[75][256] =
232, 233, 234, 235, 236, 237, 238, 239, 71, 72, 240, 241, 242, 243, 244, 245,
246, 247, 248, 82, 249, 250, 251, 86, 252, 253, 254, 255, 91, 92, 256, 257,
258, 259, 260, 98, 99, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271,
- 111, 272, 273, 274, 115, 275, 276, 277, 278, 120, 279, 280, 281, 282, 283, 284,
+ 111, 272, 273, 274, 115, 275, 276, 277, 278, 120, 279, 280, 281, 282, 295, 284,
127, 132, 285, 286, 127, 287, 288, 289, 290, 291, 292, 127, 127, 293, 294, 295,
289, 296, 297, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308,
309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 318, 320, 318, 321, 318,
@@ -9358,86 +9491,86 @@ const unsigned short banks[75][256] =
79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110,
111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126,
- 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384,
- 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 385, 386, 387, 388, 389,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 385, 386, 387, 388, 389,
390, 391, 392, 369, 393, 308, 394, 395, 396, 397, 398, 399, 398, 400, 401, 402,
403, 404, 405, 406, 404, 406, 407, 404, 408, 404, 330, 409, 410, 411, 412, 413,
414, 415, 416, 417, 418, 419, 420, 341, 342, 421, 422, 423, 424, 425, 426, 427,
- 428, 429, 419, 430, 351, 431, 308, 432, 384, 384, 384, 384, 384, 384, 384, 384,
- 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384,
- 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384,
+ 428, 429, 419, 430, 351, 431, 308, 432, 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
},
{
- 433, 434, 435, 28, 436, 31, 30, 437, 438, 439, 440, 441, 442, 38, 46, 443,
+ 295, 434, 435, 28, 436, 31, 30, 437, 438, 439, 440, 441, 442, 38, 46, 443,
79, 84, 444, 445, 49, 89, 92, 93, 105, 446, 447, 448, 449, 450, 451, 452,
453, 454, 455, 456, 119, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467,
- 468, 469, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433,
- 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433,
- 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433,
- 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433,
- 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433,
- 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433,
- 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 304, 470, 471, 472, 473,
+ 468, 469, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 304, 470, 471, 472, 473,
474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489,
490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505,
506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 345, 517, 518, 519, 520,
- 521, 522, 523, 524, 525, 526, 527, 528, 355, 356, 357, 358, 359, 529, 433, 433,
- 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433,
- 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433,
+ 521, 522, 523, 524, 525, 526, 527, 528, 355, 356, 357, 358, 359, 529, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
},
{
- 433, 434, 435, 28, 436, 31, 30, 437, 438, 439, 440, 441, 442, 38, 46, 443,
+ 295, 434, 435, 28, 436, 31, 30, 437, 438, 439, 440, 441, 442, 38, 46, 443,
79, 84, 444, 445, 49, 89, 92, 93, 105, 446, 447, 448, 449, 450, 451, 452,
453, 454, 455, 456, 119, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467,
- 468, 433, 112, 99, 530, 531, 93, 532, 248, 107, 116, 533, 28, 78, 534, 535,
- 536, 79, 94, 38, 33, 115, 537, 538, 539, 540, 433, 433, 433, 433, 433, 433,
- 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433,
- 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433,
- 433, 433, 433, 433, 433, 433, 433, 433, 541, 542, 543, 544, 545, 546, 433, 295,
+ 468, 295, 112, 99, 530, 531, 93, 532, 248, 107, 116, 533, 28, 78, 534, 535,
+ 536, 79, 94, 38, 33, 115, 537, 538, 539, 540, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295, 541, 542, 543, 544, 545, 546, 295, 295,
547, 132, 134, 136, 138, 139, 141, 173, 156, 291, 292, 127, 548, 549, 550, 551,
- 552, 362, 553, 143, 433, 433, 433, 433, 433, 433, 433, 304, 470, 471, 472, 473,
+ 552, 362, 553, 143, 295, 295, 295, 295, 295, 295, 295, 304, 470, 471, 472, 473,
474, 475, 476, 477, 478, 479, 480, 481, 482, 554, 555, 556, 557, 487, 488, 489,
490, 491, 492, 493, 558, 495, 496, 497, 498, 499, 500, 501, 559, 503, 504, 505,
506, 507, 508, 560, 561, 511, 512, 513, 514, 562, 563, 345, 517, 518, 519, 520,
- 521, 522, 523, 524, 525, 526, 527, 528, 564, 356, 565, 358, 359, 433, 433, 433,
- 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433,
- 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 295,
+ 521, 522, 523, 524, 525, 526, 527, 528, 564, 356, 565, 358, 359, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
},
{
- 433, 434, 435, 28, 436, 31, 30, 437, 438, 439, 440, 441, 442, 38, 46, 443,
+ 295, 434, 435, 28, 436, 31, 30, 437, 438, 439, 440, 441, 442, 38, 46, 443,
79, 84, 444, 445, 49, 89, 92, 93, 105, 446, 447, 448, 449, 450, 451, 452,
453, 454, 455, 456, 119, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467,
- 468, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433,
- 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 566, 567, 568, 569,
+ 468, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 566, 567, 568, 569,
570, 34, 571, 572, 437, 51, 52, 84, 573, 574, 575, 576, 577, 85, 530, 90,
- 93, 94, 101, 578, 114, 119, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433,
- 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433,
- 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 293, 127, 548,
+ 93, 94, 101, 578, 114, 119, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 293, 127, 548,
550, 296, 297, 296, 297, 298, 299, 300, 301, 302, 303, 304, 470, 471, 472, 473,
474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489,
490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505,
506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 345, 517, 518, 519, 520,
521, 522, 523, 524, 525, 526, 527, 528, 355, 356, 357, 358, 359, 360, 361, 362,
- 164, 363, 156, 364, 292, 365, 366, 367, 368, 178, 433, 433, 433, 433, 433, 433,
- 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433,
+ 164, 363, 156, 364, 292, 365, 366, 367, 368, 178, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
},
{
- 433, 434, 435, 28, 436, 31, 30, 437, 438, 439, 440, 441, 442, 38, 46, 443,
+ 295, 434, 435, 28, 436, 31, 30, 437, 438, 439, 440, 441, 442, 38, 46, 443,
79, 84, 444, 445, 49, 89, 92, 93, 105, 446, 447, 448, 449, 450, 451, 452,
453, 454, 455, 456, 119, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467,
- 468, 433, 579, 580, 581, 433, 433, 582, 433, 433, 433, 433, 583, 584, 585, 586,
- 587, 444, 588, 589, 590, 433, 591, 592, 433, 433, 433, 433, 433, 433, 433, 433,
- 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 577, 566,
+ 468, 295, 579, 580, 581, 295, 295, 582, 295, 295, 295, 295, 583, 584, 585, 586,
+ 587, 444, 588, 589, 590, 295, 591, 592, 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 577, 566,
437, 90, 460, 28, 593, 594, 595, 596, 31, 597, 598, 28, 441, 442, 567, 530,
- 93, 572, 599, 279, 30, 435, 100, 94, 575, 38, 281, 437, 447, 51, 433, 433,
- 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433,
- 433, 433, 433, 433, 433, 433, 433, 356, 357, 358, 359, 304, 470, 471, 472, 473,
+ 93, 572, 599, 279, 30, 435, 100, 94, 575, 38, 281, 437, 447, 51, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 356, 357, 358, 359, 304, 470, 471, 472, 473,
474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489,
490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505,
506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 345, 517, 518, 519, 520,
521, 522, 523, 524, 525, 526, 527, 528, 355, 600, 601, 602, 127, 548, 296, 603,
604, 550, 605, 606, 362, 607, 135, 608, 361, 609, 610, 611, 612, 507, 146, 613,
- 547, 500, 614, 364, 173, 615, 366, 600, 616, 617, 618, 619, 620, 621, 433, 433,
+ 547, 500, 614, 364, 173, 615, 366, 600, 616, 617, 618, 619, 620, 621, 295, 295,
},
{
622, 179, 371, 180, 372, 373, 374, 375, 376, 377, 186, 378, 187, 379, 380, 190,
@@ -9465,15 +9598,15 @@ const unsigned short banks[75][256] =
659, 599, 660, 661, 662, 68, 663, 664, 71, 665, 666, 74, 75, 667, 668, 669,
577, 85, 441, 442, 38, 84, 46, 86, 530, 88, 670, 90, 91, 92, 93, 94,
258, 671, 97, 532, 99, 100, 101, 672, 536, 673, 674, 675, 676, 677, 464, 110,
- 678, 578, 113, 114, 679, 116, 680, 599, 31, 462, 279, 125, 465, 281, 433, 433,
- 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433,
- 433, 433, 433, 681, 682, 683, 500, 503, 614, 684, 685, 296, 552, 550, 605, 600,
+ 678, 578, 113, 114, 679, 116, 680, 599, 31, 462, 279, 125, 465, 281, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295, 681, 682, 683, 500, 503, 614, 684, 685, 296, 552, 550, 605, 600,
548, 602, 127, 601, 293, 549, 604, 551, 603, 298, 362, 299, 135, 300, 361, 301,
302, 547, 303, 142, 143, 144, 619, 146, 291, 686, 149, 687, 367, 368, 292, 365,
366, 364, 688, 158, 689, 690, 615, 162, 163, 164, 363, 691, 167, 168, 169, 170,
171, 172, 173, 174, 175, 176, 177, 178, 692, 693, 694, 695, 696, 697, 698, 699,
- 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 433, 433, 433, 433,
- 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433,
+ 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 295, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
},
{
712, 713, 714, 715, 716, 713, 717, 718, 719, 720, 721, 722, 723, 724, 715, 725,
@@ -9484,14 +9617,14 @@ const unsigned short banks[75][256] =
769, 770, 771, 664, 772, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782,
783, 784, 785, 786, 787, 788, 788, 789, 786, 753, 790, 780, 780, 780, 791, 791,
792, 793, 794, 795, 796, 680, 680, 797, 798, 799, 800, 801, 802, 803, 742, 804,
- 805, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806,
- 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806,
- 806, 806, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819,
+ 805, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819,
820, 821, 822, 823, 821, 824, 825, 821, 826, 821, 827, 828, 829, 830, 831, 832,
- 833, 834, 834, 835, 835, 825, 825, 836, 837, 838, 806, 839, 840, 841, 806, 806,
- 842, 843, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806,
- 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806,
- 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806,
+ 833, 834, 834, 835, 835, 825, 825, 836, 837, 838, 295, 839, 840, 841, 295, 295,
+ 842, 843, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
},
{
844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859,
@@ -9502,14 +9635,14 @@ const unsigned short banks[75][256] =
924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939,
940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955,
956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 295,
- 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384,
- 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 971, 972, 973, 974,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 971, 972, 973, 974,
975, 310, 976, 977, 978, 974, 979, 980, 981, 982, 983, 984, 983, 985, 986, 987,
988, 989, 990, 325, 989, 325, 991, 989, 992, 989, 330, 993, 994, 995, 996, 997,
998, 999,1000,1001,1002,1003, 340,1004,1005,1006,1007,1008,1009, 310,1010,1011,
-1012, 429,1003, 430,1013,1014, 974,1015, 384, 384, 384, 384, 384, 384, 384, 384,
- 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384,
- 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 295,
+1012, 429,1003, 430,1013,1014, 974,1015, 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
},
{
1016,1017,1018,1019,1020,1021,1022,1023,1024,1025,1026,1027,1028,1029,1030,1031,
@@ -9520,14 +9653,14 @@ const unsigned short banks[75][256] =
1095,1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,
1111,1112,1113,1114,1115,1116,1117,1118,1119,1120,1121,1122,1123,1124,1125,1126,
1127,1128,1129,1130,1131,1132,1133,1134,1135,1136,1137,1138,1139,1140,1141,1142,
- 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384,
- 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 305, 306, 307, 308,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 305, 306, 307, 308,
1143, 425, 311,1144, 393, 308, 394, 395, 396, 397,1145, 399,1145, 400,1146, 402,
403, 404, 405, 406, 404, 406, 407, 404, 408, 404, 330, 409, 410, 411, 412, 413,
414, 415, 416, 417, 418, 419, 420, 341, 342, 421, 422, 423, 424, 425, 426, 427,
- 428, 429, 419, 430, 351, 431, 308, 432, 384, 384, 384, 384, 384, 384, 384, 384,
- 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384,
- 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384,
+ 428, 429, 419, 430, 351, 431, 308, 432, 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
},
{
1147,1017,1018,1148,1149,1150,1022, 184,1024,1025,1026,1027,1028,1151,1152,1153,
@@ -9538,14 +9671,14 @@ const unsigned short banks[75][256] =
1188,1189,1097,1098,1190,1100,1191,1192,1103,1193,1194,1195,1196,1197,1198,1199,
1111,1200,1201,1202,1203,1116,1204,1205,1119,1206,1207,1122,1123,1124,1125,1208,
1127,1209,1210,1130,1131,1211,1212,1213,1135,1214,1215,1138,1139,1216,1217,1218,
- 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384,
- 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 385, 386, 387, 388, 389,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 385, 386, 387, 388, 389,
390, 391, 392,1219,1219, 308, 394, 395, 396, 397, 398, 399, 398, 400, 401, 402,
403, 404, 405, 406, 404, 406, 407, 404, 408, 404, 330, 409, 410, 411, 412, 413,
414, 415, 416,1220,1221, 419, 420, 341, 342, 421, 422, 423, 424, 425, 426, 427,
- 428, 429, 419, 430, 351, 431, 308, 432, 384, 384, 384, 384, 384, 384, 384, 384,
- 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384,
- 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384,
+ 428, 429, 419, 430, 351, 431, 308, 432, 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
},
{
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
@@ -9578,7 +9711,7 @@ const unsigned short banks[75][256] =
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
295, 295, 295, 312,1349,1350,1351,1352,1353,1354, 319,1355, 320,1356, 321,1357,
1358,1359,1360,1361,1362,1363,1364,1365,1366,1359,1367,1361, 332, 333, 334, 335,
- 336,1368,1369, 338, 339, 320,1370,1371,1371,1371,1371,1372,1373,1374,1375,1371,
+ 336,1368,1369, 338, 339, 320,1370, 295, 295, 295, 295,1372,1373,1374,1375, 295,
347, 348, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
@@ -9596,7 +9729,7 @@ const unsigned short banks[75][256] =
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
295, 295, 295, 312,1349,1350,1351,1352,1382,1354, 319,1355, 320,1356, 321,1357,
1358,1359,1360,1361,1362,1363,1364,1383,1366,1359,1384,1361, 332, 333, 334, 335,
- 336,1368,1369, 338, 339, 320,1370,1371,1371,1371,1371,1372,1373,1374,1375,1371,
+ 336,1368,1369, 338, 339, 320,1370, 295, 295, 295, 295,1372,1373,1374,1375, 295,
347, 348, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
@@ -9614,7 +9747,7 @@ const unsigned short banks[75][256] =
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
295, 295, 295, 312,1349,1350,1351,1352,1353,1354, 319,1355, 320,1356, 321,1357,
1358,1359,1360,1361,1362,1363,1364,1383,1366,1359,1387,1361, 332, 333, 334, 335,
- 336,1368,1369, 338, 339, 320,1370,1371,1371,1371,1371,1372,1373,1374,1375,1371,
+ 336,1368,1369, 338, 339, 320,1370, 295, 295, 295, 295,1372,1373,1374,1375, 295,
347, 348, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
@@ -9681,7 +9814,7 @@ const unsigned short banks[75][256] =
232, 233, 234, 235,1583, 237, 238, 239,1584,1585, 240,1586, 242, 243, 244,1587,
246, 247,1588,1589, 249, 250, 251,1590, 252, 253, 254, 255,1591,1592,1593,1594,
1595, 259,1596,1597,1598,1599,1600,1601, 264, 265, 266, 267, 268, 269, 270, 271,
-1602, 272, 273,1603,1604,1605, 276,1606,1607,1608,1609,1610,1611,1612, 283, 284,
+1602, 272, 273,1603,1604,1605, 276,1606,1607, 295, 295,1610,1611,1612, 295, 284,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
295, 295, 295, 127, 127,1613,1614,1615,1616,1617,1618,1619,1620,1621,1622,1623,
@@ -9790,14 +9923,14 @@ const unsigned short banks[75][256] =
2059,2060,2061,2062,2063,2064,2065,2066,2067,2068,2069,2070,2071,2071,2072,2073,
2074,2075,2076,2077,2078,2079,2080, 275,2081,2082,1527,2083,2084,2085,2086,2087,
2088,2089,2090,2091,2092,2093,2094,2095,2096,2097,2098,2099, 122,2100,2101,2102,
-2103,2103,2103,2103,2103,2103,2103,2103,2103,2103,2103,2103,2103,2103,2103,2103,
-2103,2103,2103,2103,2103,2103,2103,2103,2103,2103,2103,2103,2103,2103,2103,2103,
-2103,2103,2103,2104,2105,2106,2107,2108,2109,2110,2111,2110,2112,2113,2114,2113,
-2115, 547,2115,2116,2103,2103,2117,2103,2118,2103,2103,2103,2119,2120,2121,2122,
-2123,2124,2125,2126,2127, 160, 161, 162, 163,2128,2103,2129,2103,2103,2103,2103,
-2103,2103,2103,2103,2103,2103,2103,2103,2103,2103,2103,2103,2103,2103,2103,2103,
-2103,2103,2103,2103, 295,2103,2103,2103,2103,2103,2103,2103,2103,2103,2103,2103,
-2103,2103,2103,2103,2103,2103,2103,2103,2103,2103,2103,2103,2103,2103,2103,2103,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295,2104,2105,2106,2107,2108,2109,2110,2111,2110,2112,2113,2114,2113,
+2115, 547,2115,2116, 295, 295,2117, 295,2118, 295, 295, 295,2119,2120,2121,2122,
+2123,2124,2125,2126,2127, 160, 161, 162, 163,2128, 295,2129, 295, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
},
{
2130,2130,2130,2130,2130,2130, 727,2131,2132,2133,2134,2135,2136,2137,2138,2139,
@@ -9879,7 +10012,7 @@ const unsigned short banks[75][256] =
232, 233, 234, 235,2281, 237, 238, 239,1584,1585,2282,1586, 242, 243, 244,1587,
246, 247,1588,1589, 249, 250, 251,1590,2283, 253, 254, 255,1591,1592,1593,1594,
1595, 259,1596,1597,1598,1599,1600,1601, 264, 265, 266, 267, 268, 269, 270, 271,
-1602, 272, 273,1603,1604,1605, 276,1606,1607,1608,1609,1610,1611,1612, 283, 284,
+1602, 272, 273,1603,1604,1605, 276,1606,1607, 295, 295,1610,1611,1612, 295, 284,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,2284,
295, 295, 295,2284,2285,2286,1614,1615,2287,2288,1618,1619,1620,1621,1622,1623,
@@ -9969,7 +10102,7 @@ const unsigned short banks[75][256] =
232, 233, 234, 235,1583, 237, 238, 239,1584,1585, 240,1586, 242, 243, 244,1587,
246, 247,1588,1589, 249, 250, 251,1590, 252, 253, 254, 255,1591,1592,1593,1594,
1595, 259,1596,1597,1598,1599,1600,1601, 264, 265, 266, 267, 268, 269, 270, 271,
-1602, 272, 273,1603,1604,1605, 276,1606,1607,1608,1609,1610,1611,1612, 283, 284,
+1602, 272, 273,1603,1604,1605, 276,1606,1607, 295, 295,1610,1611,1612, 295, 284,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
295, 295, 295,2430,2430,2431,2432,2433,2434,2435,2436,2437,2436,2438,2436,2439,
@@ -10005,7 +10138,7 @@ const unsigned short banks[75][256] =
232, 233, 234, 235,1583, 237, 238, 239,1584,1585, 240,1586, 242, 243, 244,1587,
246, 247,1588,1589, 249, 250, 251,1590, 252, 253, 254, 255,1591,1592,1593,1594,
1595, 259,1596,1597,1598,1599,1600,1601, 264, 265, 266, 267, 268, 269, 270, 271,
-1602, 272, 273,1603,1604,1605, 276,1606,1607,1608,1609,1610,1611,1612, 283, 284,
+1602, 272, 273,1603,1604,1605, 276,1606,1607, 295, 295,1610,1611,1612, 295, 284,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
295, 295, 295, 127, 127,2286,1614,1615,1616,2288,1618,1619,1620,1621,1622,1623,
@@ -10045,7 +10178,7 @@ const unsigned short banks[75][256] =
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,2493,
295,2555, 295,2556,2495,2557,2558,2559,2496,2497,2560,2498,2561,2499,2562,2500,
-2563,2564,2565,2527, 295, 295,2566, 295,2567, 295, 295, 295,2570,2571, 295,2572,
+2563,2564,2565,2527, 295, 295,2566, 295, 295, 295, 295, 295,2570,2571, 295,2572,
2573, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
@@ -10131,7 +10264,7 @@ const unsigned short banks[75][256] =
232, 233, 234, 235,1583, 237, 238, 239,1584,1585, 240,2873, 242, 243, 244,2874,
246, 247,1588,1589, 249,2875,2876,2877,2878, 253, 254, 255,1591,1592,1593,2879,
1595, 259,1596,2880,1598,1599,1600,1601, 264, 265, 266,2881, 268, 108, 270,2859,
-2882,2883, 273,1603,1604,1605, 276,2884,2885,2886,1609,1610,2887,1612,2888, 284,
+2882,2883, 273,1603,1604,1605, 276,2884,2885,2886, 295,1610,2887,1612,2888, 284,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
295, 295, 295,2889,2889, 128, 129, 130,2890, 132,2891, 134, 135, 136, 137, 138,
@@ -10168,14 +10301,14 @@ const unsigned short banks[75][256] =
2968,2969,2554,2970,2489,2971,2972,2973, 657, 575,2974,2975,2976, 779,2977,2978,
2979,2980,2981,2982,2983,2984,2985,2986,2987,2988,2553,2989,2990,2991,2992,2993,
2994,2995, 680, 796,2996, 797,2662,2997,2998,2999,2514,3000,3001,1913,3002,3003,
- 295, 295, 295, 295, 295, 295, 295, 295, 295, 384, 295, 295, 295, 295, 295, 295,
- 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,3004, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
295, 295, 295,1219,1219, 308, 394, 395, 396, 397, 398, 399, 398, 400, 401, 402,
403, 404, 405, 406, 404, 406, 407, 404, 408, 404, 330, 409, 410, 411, 412, 413,
414, 415, 416,1220,1221, 419, 420, 341, 342, 421, 422, 423, 424, 425, 426, 427,
- 428, 429, 419, 430, 351, 431, 308, 432, 384, 384, 384, 384, 384, 384, 384, 384,
- 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384,
- 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384, 384,
+ 428, 429, 419, 430, 351, 431, 308, 432, 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
},
{
2501,2502,2503,2504,2505,2506,2507, 730,2508,2509,2510,2511,2512,2513,2514,2515,
@@ -10189,7 +10322,7 @@ const unsigned short banks[75][256] =
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,2493,
295,2555, 295,2556,2495,2557,2558,2559,2496,2497,2560,2498,2561,2499,2562,2500,
-2563,3011,2565,2527, 295, 295,2566, 295,2567, 295, 295, 295,3012,3013,3014,3015,
+2563,3011,2565,2527, 295, 295,2566, 295, 295, 295, 295, 295,3012,3013,3014,3015,
3016,3015,3016, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
@@ -10240,14 +10373,14 @@ const unsigned short banks[75][256] =
2059,2060,2061,2062,2063,2064,2065,2066,3089,2068,2069,2070,3090,3091,2072,2073,
2074,2075,2076,2077,2078,2079,2080, 275,2081,2082,1527,2083,2084,2085,2086,2087,
2088,2089,2090,2091,2092,2093,2094,2095,2096,2097,2098,2099, 122,2100,2101,2102,
-2103,2103,2103,2103,2103,2103,2103,2103,2103,2103,2103,2103,2103,2103,2103,2103,
-2103,2103,2103,2103,2103,2103,2103,2103,2103,2103,2103,2103,2103,2103,2103,2103,
-2103,2103,2103,2104,2105,2106,2107,2108,2109,2110,2111,2110,2112,2113,2114,2113,
-2115, 547,2115,2116,2103,2103,2117,2103,2118,2103,2103,2103,2119,2120,2121,2122,
-2123,2124,2125,2126,2127, 160, 161, 162, 163,2128,2103,2129,2103,2103,2103,2103,
-2103,2103,2103,2103,2103,2103,2103,2103,2103,2103,2103,2103,2103,2103,2103,2103,
-2103,2103,2103,2103, 295,2103,2103,2103,2103,2103,2103,2103,2103,2103,2103,2103,
-2103,2103,2103,2103,2103,2103,2103,2103,2103,2103,2103,2103,2103,2103,2103,2103,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295,2104,2105,2106,2107,2108,2109,2110,2111,2110,2112,2113,2114,2113,
+2115, 547,2115,2116, 295, 295,2117, 295,2118, 295, 295, 295,2119,2120,2121,2122,
+2123,2124,2125,2126,2127, 160, 161, 162, 163,2128, 295,2129, 295, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
},
{
2501,2502,2503,2504,2505,2506,2507, 730,2508,2509,2510,2511,2512,2513,2514,2515,
@@ -10261,75 +10394,75 @@ const unsigned short banks[75][256] =
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,2493,
295,2555, 295,3092,2495,2557,2558,2559,2496,2497,2562,2498,2561,2499,2562,2500,
-2563,3011,2565,2527, 295, 295,2566, 295,2567, 295, 295, 295,2570,2571, 295,2572,
+2563,3011,2565,2527, 295, 295,2566, 295, 295, 295, 295, 295,2570,2571, 295,2572,
3093, 295, 295, 295, 295, 295,3094, 295, 295,3095,3096, 295, 295, 295, 295, 295,
295, 295, 295, 295, 295, 295, 295,3097, 295, 295, 295, 295, 295, 295, 295, 295,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
},
{
-1551,1552,1553,3101, 181, 182, 183,3102, 185,1556,1557,3103,1559, 188, 189,1560,
-1561,1562, 193,1564,1565, 195, 196, 197, 198, 199, 200, 201, 202,1566,1567, 205,
- 206, 207, 208,1568,1569,1570,1571, 211,1572,1573, 214, 215, 216, 217, 218, 219,
- 220, 221,1574,1575,1576,1577,1578, 225,1579,1580,3100,1581,1582, 229, 230, 231,
- 232, 233, 234, 235,1583, 237, 238, 239,1584,1585, 240,1586, 242, 243, 244,1587,
- 246, 247,1588,1589, 249, 250, 251,1590, 252, 253, 254, 255,1591,1592,1593,1594,
-1595, 259,1596,1597,1598,1599,1600,1601, 264, 265, 266, 267, 268, 269, 270, 271,
-1602, 272, 273,1603,1604,1605, 276,1606,1607,1608,1609,1610,3104,3105, 283, 284,
+3098,3205,3101,3129,3130,3131,3108,3132,3209,3210,3120,3133,3124,3134,3103,3135,
+3136,3137,3113,3138,3139,3140,3141,3142,3143,3144,3145,3206,3121,3207,3208,3146,
+3127,3147,3148,3211,3212,3149,3150,3151,3116,3106,3152,3110,3111,3213,3104,3126,
+3105,3117,3153,3154,3102,3214,3155,3119,3215,3216,3115,3109,3217,3114,3112,3218,
+3156,3219,3157,3158,3159,3107,3122,3128,3160,3222,3161,3162,3163,3164,3165,3166,
+3167,3168,3169,3170,3171,3172,3173,3174,3223,3175,3176,3177,3118,3221,3220,3178,
+3226,3241,3179,3180,3242,3181,3182,3183,3184,3185,3186,3187,3125,3188,3189,3190,
+3191,3192,3193,3194,3123,3195,3196,3197,3198,3224,3199,3200,3201,3202,3203,3204,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
- 295, 295, 295, 127,3107,3122,3126, 316,3123,3121,3124,3107,3125,3107,3127,3107,
-3107, 329,3107,3108,3143,3109,3128,3129,3099,3144,1634,3110,3130,3131,3117,3119,
-3136,3132,3133,3134,3137,3115,3138,3135,3098, 343, 344,3112,3113,3113,3142,3139,
-3140,3141,3116,3106,3111,3114,3118,3120, 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295, 127,3227,3244,3248,3268,3245,3243,3246,3227,3247,3227,3249,3227,
+3227,3269,3227,3228,3270,3229,3250,3251,3100,3271,3258,3230,3252,3253,3237,3239,
+3259,3254,3255,3256,3260,3235,3261,3257,3099,3265,3266,3232,3233,3233,3267,3262,
+3263,3264,3236,3225,3231,3234,3238,3240, 295, 295, 295, 295, 295, 295, 295, 295,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
},
{
-1551,1552,1553,3101, 181, 182, 183,3102, 185,1556,1557,3103,1559, 188, 189,1560,
-1561,1562, 193,1564,1565, 195, 196, 197, 198, 199, 200, 201, 202,1566,1567, 205,
- 206, 207, 208,1568,1569,1570,1571, 211,1572,1573, 214, 215, 216, 217, 218, 219,
- 220, 221,1574,1575,1576,1577,1578, 225,1579,1580,3100,1581,1582, 229, 230, 231,
- 232, 233, 234, 235,1583, 237, 238, 239,1584,1585, 240,1586, 242, 243, 244,1587,
- 246, 247,1588,1589, 249, 250, 251,1590, 252, 253, 254, 255,1591,1592,1593,1594,
-1595, 259,1596,1597,1598,1599,1600,1601, 264, 265, 266, 267, 268, 269, 270, 271,
-1602, 272, 273,1603,1604,1605, 276,1606,1607,1608,1609,1610,3104,3105, 283, 284,
+3098,3205,3101,3129,3130,3131,3108,3132,3209,3210,3120,3133,3124,3134,3103,3135,
+3136,3137,3113,3138,3139,3140,3141,3142,3143,3144,3145,3206,3121,3207,3208,3146,
+3127,3147,3148,3211,3212,3149,3150,3151,3116,3106,3152,3110,3111,3213,3104,3126,
+3105,3117,3153,3154,3102,3214,3155,3119,3215,3216,3115,3109,3217,3114,3112,3218,
+3156,3219,3157,3158,3159,3107,3122,3128,3160,3222,3161,3162,3163,3164,3165,3166,
+3167,3168,3169,3170,3171,3172,3173,3174,3223,3175,3176,3177,3118,3221,3220,3178,
+3226,3241,3179,3180,3242,3181,3182,3183,3184,3185,3186,3187,3125,3188,3189,3190,
+3191,3192,3193,3194,3123,3195,3196,3197,3198,3224,3199,3200,3201,3202,3203,3204,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
- 295, 295, 295,2430,2430,3149,3147,3148,3147,3145,3145,3145,3145,3145,3145,3145,
-3145,3145,3145,3145,3145,3145,3150,3151,3173, 329,3152, 329,3153,3154,3155,3156,
-3157,3158,3159,3160,3161, 349,3162,3163,3164,3165,3166,3148,3148,3148,3167,3168,
-3169,3170, 349,3171,3172,3148,3155,3156,3146, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295,3274,3274,3277,3275,3276,3275,3272,3272,3272,3272,3272,3272,3272,
+3272,3272,3272,3272,3272,3272,3278,3279,3301,3269,3280,3269,3281,3282,3283,3284,
+3285,3286,3287,3288,3289, 349,3290,3291,3292,3293,3294,3276,3276,3276,3295,3296,
+3297,3298, 349,3299,3300,3276,3283,3284,3273, 295, 295, 295, 295, 295, 295, 295,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
},
{
-3174,3175,3176,3177,3178,3179,3180,3181,3182,3183,3184,3185,3186,3187,3188,3189,
-3190,3191,3192,3193,3194,3195,3196,3196,3197,3198,3199,3200,3201,3202,3203,3204,
-3205,3206,3207,3208,3209,3210,3211,3212,3213,3214,3215,3216,3217,3218,3219,3220,
-3221,3222,3223,3224,3225,3226,3227,3228,3229,3230,3231,3196,3232,3233,3234,3235,
-3196,3236,3237,3238,3196,3239,3196,3240,3196,3241,3196,3242,3196,3243,3244,3245,
-3246,3247,3248,3196,3249,3250,3196,3251,3252,3253,3254,3255,3196,3196,3256,3196,
-3257,3196,3258,3196,3259,3260,3196,3261,3196,3196,3262,3196,3196,3196,3196,3196,
-3196,3196,3196,3263,3196,3196,3196,3196,3196,3196,3264,3265,3196,3196,3196,3196,
-3266,3267, 285,3268,3269, 287, 288,3270,3271,3271,3271,3271,3271,3271,3271,3271,
-3271,3271,3271,3271,3271,3271,3271,3271,3271,3271,3271,3271,3271,3271,3271,3271,
-3271,3271,3271,3272,3273,3271,3274,3271,3275,3276,3277,3278,3279,3280,3281,3282,
-3282,3283,3280,3284,3271,3271,3285,3286,3271,3271,3271,3271,3271,3271,3271,3271,
-3271,3271,3271,3271,3271,3271,3271,3271,3271,3271,3271,3271,3271,3271,3271,3271,
-3271,3271,3271,3271,3271,3271,3271,3271,3271,3271,3271,3271,3271,3271,3271,3271,
-3271,3271,3271,3271,3271,3271,3271,3271,3271,3271,3271,3271,3271,3271,3271,3271,
-3271,3271,3271,3271,3271,3271,3271,3271,3271,3271,3271,3271,3271,3271,3271,3271,
+3302,3303,3304,3305,3306,3307,3308,3309,3310,3311,3312,3313,3314,3315,3316,3317,
+3318,3319,3320,3321,3322,3323,3324,3324,3325,3326,3327,3328,3329,3330,3331,3332,
+3333,3334,3335,3336,3337,3338,3339,3340,3341,3342,3343,3344,3345,3346,3347,3348,
+3349,3350,3351,3352,3353,3354,3355,3356,3357,3358,3359,3324,3360,3361,3362,3363,
+3324,3364,3365,3366,3324,3367,3324,3368,3324,3369,3324,3370,3324,3371,3372,3373,
+3374,3375,3376,3324,3377,3378,3324,3379,3380,3381,3382,3383,3324,3324,3384,3324,
+3385,3324,3386,3324,3387,3388,3324,3389,3324,3324,3390,3324,3324,3324,3324,3324,
+3324,3324,3324,3391,3324,3324,3324,3324,3324,3324,3392,3393,3324,3324,3324,3324,
+3394,3395, 285,3396,3397, 287, 288,3398,3399,3399,3399,3399,3399,3399,3399,3399,
+3399,3399,3399,3399,3399,3399,3399,3399,3399,3399,3399,3399,3399,3399,3399,3399,
+3399,3399,3399,3400,3401,3399,3402,3399,3403,3404,3405,3406,3407,3408,3409,3410,
+3410,3411,3408,3412,3399,3399,3413,3414,3399,3399,3399,3399,3399,3399,3399,3399,
+3399,3399,3399,3399,3399,3399,3399,3399,3399,3399,3399,3399,3399,3399,3399,3399,
+3399,3399,3399,3399,3399,3399,3399,3399,3399,3399,3399,3399,3399,3399,3399,3399,
+3399,3399,3399,3399,3399,3399,3399,3399,3399,3399,3399,3399,3399,3399,3399,3399,
+3399,3399,3399,3399,3399,3399,3399,3399,3399,3399,3399,3399,3399,3399,3399,3399,
},
{
-3287,3288, 466,3289, 713,3196,3290, 467,3291, 632,3292,3293,3294,3295,3296,3297,
-3298, 598,3299,3300,3301,3302,3303,3304,1512,3305,3294,3306, 759, 437, 437,3307,
-3308,3309, 439,3310, 440,3311, 442, 441,3312,3313,3314,3315,2306,3316,3317, 582,
-3318,3319, 452,3320,3321,3290,3322,3323,3324, 778,3325,2312, 779,3326,3327,3328,
-3329, 769,3330,3331,3332,3333, 663, 664,3334,2316,3335,3336,3337,1299,3338,3339,
-3340,3341,3342,3343,3344,3345,3346, 442,3347,3348,3349,3304,3350,1669,3351,3352,
-3353,3354,3355,3356,3353, 261,3357,3358,1919,2420,3359,3360, 676,3361,3362,3363,
-3364,3365,3366,3367, 677,3368, 677,3369,3370, 677,3371, 455,3372,2421,3373, 465,
+3415,3416, 466,3417, 713,3324,3418, 467,3419, 632,3420,3421,3422,3423,3424,3425,
+3426, 598,3427,3428,3429,3430,3431,3432,1512,3433,3422,3434, 759, 437, 437,3435,
+3436,3437, 439,3438, 440,3439, 442, 441,3440,3441,3442,3443,2306,3444,3445, 582,
+3446,3447, 452,3448,3449,3418,3450,3451,3452, 778,3453,2312, 779,3454,3455,3456,
+3457, 769,3458,3459,3460,3461, 663, 664,3462,2316,3463,3464,3465,1299,3466,3467,
+3468,3469,3470,3471,3472,3473,3474, 442,3475,3476,3477,3432,3478,1669,3479,3480,
+3481,3482,3483,3484,3481, 261,3485,3486,1919,2420,3487,3488, 676,3489,3490,3491,
+3492,3493,3494,3495, 677,3496, 677,3497,3498, 677,3499, 455,3500,2421,3501, 465,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
@@ -10340,14 +10473,14 @@ const unsigned short banks[75][256] =
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
},
{
-3374,3374,3375,3376,3377,3378,3378,3379,3380,3381,3382,3383,3384,3385,3386,3387,
-3388,3389,3390,3391,3392,3393,3394,3395,3396,3397,3398,3399,3400,3401,3402,3403,
-3404,3405,3406,3407,3408,3409,3410,3411,3412,3413,3414,3415,3416,3417,3418,3419,
-3420,3421,3422,3423,3424,3425,3426,3427,3425,3428,3429,3430,3431,3432,3433,3434,
-3435,3436,3437,3438,3439,3440,3441,3442,3443,3444,3445,3446,3335,3447,3448,3449,
-3450,3451,3452,3453,3454,3455,3456,3457,3458,3459,3460,3461,3462,3462,3463,3464,
-3465,3466,3467,3468,3469,3470,3471,3472,3473,3474,3475,3476,3477,3478,3479,3480,
-3481,3482,3481,3483,3484,3485,3486,3487,3488,3489,3490,3491,3492,3493,3494,3495,
+3502,3502,3503,3504,3505,3506,3506,3507,3508,3509,3510,3511,3512,3513,3514,3515,
+3516,3517,3518,3519,3520,3521,3522,3523,3524,3525,3526,3527,3528,3529,3530,3531,
+3532,3533,3534,3535,3536,3537,3538,3539,3540,3541,3542,3543,3544,3545,3546,3547,
+3548,3549,3550,3551,3552,3553,3554,3555,3553,3556,3557,3558,3559,3560,3561,3562,
+3563,3564,3565,3566,3567,3568,3569,3570,3571,3572,3573,3574,3463,3575,3576,3577,
+3578,3579,3580,3581,3582,3583,3584,3585,3586,3587,3588,3589,3590,3590,3591,3592,
+3593,3594,3595,3596,3597,3598,3599,3600,3601,3602,3603,3604,3605,3606,3607,3608,
+3609,3610,3609,3611,3612,3613,3614,3615,3616,3617,3618,3619,3620,3621,3622,3623,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
@@ -10369,155 +10502,155 @@ const unsigned short banks[75][256] =
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
295, 295, 295, 127, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138,
- 139, 140, 141, 142, 143, 144, 145, 146, 147, 148,3496, 150, 151, 152, 153, 154,
+ 139, 140, 141, 142, 143, 144, 145, 146, 147, 148,3624, 150, 151, 152, 153, 154,
155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170,
171, 172, 173, 174, 175, 176, 177, 178, 295, 295, 295, 295, 295, 295, 295, 295,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
},
{
-1551,1552,1553,1554, 181, 182, 183,1555, 185,1556,3497,3498,3499, 188, 189,1560,
-1561,1562,1563,3500,1565, 195, 196, 197, 198, 199, 200, 201, 202,1566,1567, 205,
- 206, 207, 208,1568,1569,1570,1571,3501,1572,1573, 214, 215, 216, 217, 218, 219,
+1551,1552,1553,1554, 181, 182, 183,1555, 185,1556,3625,3626,3627, 188, 189,1560,
+1561,1562,1563,3628,1565, 195, 196, 197, 198, 199, 200, 201, 202,1566,1567, 205,
+ 206, 207, 208,1568,1569,1570,1571,3629,1572,1573, 214, 215, 216, 217, 218, 219,
220, 221,1574,1575,1576,1577,1578, 225,1579,1580, 226,1581,1582, 229, 230, 231,
232, 233, 234, 235,1583, 237, 238, 239,1584,1585, 240,1586, 242, 243, 244,1587,
246, 247,1588,1589, 249, 250, 251,1590, 252, 253, 254, 255,1591,1592,1593,1594,
1595, 259,1596,1597,1598,1599,1600,1601, 264, 265, 266, 267, 268, 269, 270, 271,
-1602, 272, 273,1603,1604,1605, 276,1606,1607,1608,1609,1610,3502,3503, 283, 284,
+1602, 272, 273,1603,1604,1605, 276,1606,1607, 295, 295,1610,3630,3631, 295, 284,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
- 295, 295, 295, 127,3504,1613,1614,3505,1616,3506,1618,3507,1620,3508,1622,3509,
-3510,1625,3511,3512,1628,1629,1630,1631,3513,1633,1634,3514,1636,1637,1638,1639,
+ 295, 295, 295, 127,3632,1613,1614,3633,1616,3634,1618,3635,1620,3636,1622,3637,
+3638,1625,3639,3640,1628,1629,1630,1631,3641,1633,1634,3642,1636,1637,1638,1639,
1640,1641,1642,1643,1644,1645,1646,1647,1648,1649,1650,1651,1652,1653,1654,1655,
1656,1657,1658,1659,1660,1661,1662,1663, 295, 295, 295, 295, 295, 295, 295, 295,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
},
{
-3515,3516,3517,3518,3519,3520,3521,3522,3523,3524,3525,3526,3527,3528,3529,3530,
-3531,3532,3533,3534,3535,3536,3537,3538,3539,3540,3541,3542,3543,3544,3545,3546,
-3547,3548,3549,3550,3551,3552,3553,3554,3555,3556,3557,3558,3559,3560,3561,3562,
-3563,3564,3565,3566,3567,3568,3569,3570,3571,3572,3573,3574,3575,3576,3577,3578,
-3579,3580,3581,3582,3583,3584,3585,3586,3587,3588,3589,3590,3591,3592,3593,3594,
-3595,3596,3597,3598,3599,3600,3601,3602,3603,3604,3605,3606,3607,3608,3609,3610,
-3611,3612,3613,3614,3615,3616,3617,3618,3619,3620,3621,3622,3623,3624,3625,3626,
-3627,3628,3629,3630,3631,3632,3633,3634,3635,3636,3637,3638,3639,3640,3641,3642,
-3643,3643,3643,3643,3643,3643,3643,3643,3643,3643,3643,3643,3643,3643,3643,3643,
-3643,3643,3643,3643,3643,3643,3643,3643,3643,3643,3643,3643,3643,3643,3643,3643,
-3643,3643,3643,3644,3645,3646,3647,3648,3649,3650,3651,3652,3653,3654,3655,3656,
-3657,3658,3659,3660,3658,3661,3662,3658,3663,3658,3664,3665,3666,3667,3668,3669,
-3670,3671,3672,3673,3674,3675,3676,3677,3678,3679,3680,3681,3682,3683,3684,3685,
-3686,3687, 806, 806, 806, 806, 806,3643,3643,3643,3643,3643,3643,3643,3643,3643,
-3643,3643,3643,3643,3643,3643,3643,3643,3643,3643,3643,3643,3643,3643,3643,3643,
-3643,3643,3643,3643,3643,3643,3643,3643,3643,3643,3643,3643,3643,3643,3643,3643,
+3643,3644,3645,3646,3647,3648,3649,3650,3651,3652,3653,3654,3655,3656,3657,3658,
+3659,3660,3661,3662,3663,3664,3665,3666,3667,3668,3669,3670,3671,3672,3673,3674,
+3675,3676,3677,3678,3679,3680,3681,3682,3683,3684,3685,3686,3687,3688,3689,3690,
+3691,3692,3693,3694,3695,3696,3697,3698,3699,3700,3701,3702,3703,3704,3705,3706,
+3707,3708,3709,3710,3711,3712,3713,3714,3715,3716,3717,3718,3719,3720,3721,3722,
+3723,3724,3725,3726,3727,3728,3729,3730,3731,3732,3733,3734,3735,3736,3737,3738,
+3739,3740,3741,3742,3743,3744,3745,3746,3747,3748,3749,3750,3751,3752,3753,3754,
+3755,3756,3757,3758,3759,3760,3761,3762,3763,3764,3765,3766,3767,3768,3769,3770,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295,3772,3773,3774,3775,3776,3777,3778,3779,3780,3781,3782,3783,3784,
+3785,3786,3787,3788,3786,3789,3790,3786,3791,3786,3792,3793,3794,3795,3796,3797,
+3798,3799,3800,3801,3802,3803,3804,3805,3806,3807,3808,3809,3810,3811,3812,3813,
+3814,3815, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
},
{
-3287,1492,3688,3289, 713,3689,3690, 730,1914,3691,1533,3293,3692,3693,3694,3695,
-3298,3696,3697,3698,3699,3700,3701,3702,3703,3704,3705,3706, 759, 437,3707,3708,
-3308,3709,3710,3711,3712,3713, 442,3714,3715,3716,3717,3718,3719,3720,3721,3722,
-3723,2306,3724,3725,3726,3727,3728,3729,3730,3731,3732,3733,3734,3735,3736,3737,
-3738,3739,3740,3741,3742,3743,3744,3745,3746,3747,3748,3749,3750,3751,3752,3753,
-3754,3755,3756,3757,3758,3759,3760,3761,3762,3763,3764,3765,3766,3767,3768,3769,
-3770,3771,3772,3773,3774,3775,3776,3777,3778,3779,3780,3781,3782,3783,3784,3785,
-3786,3787,3788,3789,3790,3791,3792,3793,3794,3795,3371,3796,3797,2421,3798,3799,
+3415,1492,3816,3417, 713,3817,3818, 730,1914,3819,1533,3421,3820,3821,3822,3823,
+3426,3824,3825,3826,3827,3828,3829,3830,3831,3832,3833,3834, 759, 437,3835,3836,
+3436,3837,3838,3839,3840,3841, 442,3842,3843,3844,3845,3846,3847,3848,3849,3850,
+3851,2306,3852,3853,3854,3855,3856,3857,3858,3859,3860,3861,3862,3863,3864,3865,
+3866,3867,3868,3869,3870,3871,3872,3873,3874,3875,3876,3877,3878,3879,3880,3881,
+3882,3883,3884,3885,3886,3887,3888,3889,3890,3891,3892,3893,3894,3895,3896,3897,
+3898,3899,3900,3901,3902,3903,3904,3905,3906,3907,3908,3909,3910,3911,3912,3913,
+3914,3915,3916,3917,3918,3919,3920,3921,3922,3923,3499,3924,3925,2421,3926,3927,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
- 295, 295, 295,3644,3645,3646,3647,3648,3649,3650,3651,3652,3653,3654,3655,3656,
-3657,3658,3659,3660,3658,3661,3662,3658,3663,3658,3664,3665,3666,3667,3668,3669,
-3670,3671,3672,3673,3674,3675,3676,3677,3678,3679,3680,3681,3682,3683,3684,3685,
-3686,3687, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295,3772,3773,3774,3775,3776,3777,3778,3779,3780,3781,3782,3783,3784,
+3785,3786,3787,3788,3786,3789,3790,3786,3791,3786,3792,3793,3794,3795,3796,3797,
+3798,3799,3800,3801,3802,3803,3804,3805,3806,3807,3808,3809,3810,3811,3812,3813,
+3814,3815, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
},
{
-3800,3801,3802,3803,3804,3805,3806,3807,3808,3809,3810,3811,3812,3813,3814,3815,
-3816,3817,3818,3819,3820,3821,3822,3823,3824,3825,3826,3827,3828,3829,3830,3831,
-3832,3833,3834,3835,3836,3837,3838,3839,3840,3841,3842,3843,3844,3845,3846,3847,
-3840,3848,3849,3850,3851,3852,3853,3854,3855,3856,3857,3858,3859,3860,3861,3862,
-3863,3864,3864,3865,3866,3867,3868,3869,3870,3871,3872,3873,3874,3875,3876,3877,
-3878,3879,3880,3881,3882,3883,3884,3885,3886,3887,3888,3889,3890,3891,3892,3893,
-3894,3895,3896,3897,3898,3899,3900,3901,3902,3903,3904,3905,3906,3907,3908,3909,
-3910,3911,3912,3913,3914,3915,3916,3917,3918,3919,3920,3921,3922,3923,3924,3925,
-3926,3926,3926,3926,3926,3926,3926,3926,3926,3926,3926,3926,3926,3926,3926,3926,
-3926,3926,3926,3926,3926,3926,3926,3926,3926,3926,3926,3926,3926,3926,3926,3926,
-3926,3926,3926,3927,3928,3929,3930,3931,3932,3933,3934,3935,3936,3937,3938,3939,
-3940,3941,3942,3660,3943,3944,3662,3945,3663,3946,3947,3665,3948,3949,3950,3951,
-3952,3953,3954,3955,3956,3936,3676,3957,3958,3679,3959,3960,3961,3962,3684,3685,
-3963,3964,3965,3926,3926,3926,3926,3926,3926,3926,3926,3926,3926,3926,3926,3926,
-3926,3926,3926,3926,3926,3926,3926,3926,3926,3926,3926,3926,3926,3926,3926,3926,
-3926,3926,3926,3926,3926,3926,3926,3926,3926,3926,3926,3926,3926,3926,3926,3926,
+3928,3929,3930,3931,3932,3933,3934,3935,3936,3937,3938,3939,3940,3941,3942,3943,
+3944,3945,3946,3947,3948,3949,3950,3951,3952,3953,3954,3955,3956,3957,3958,3959,
+3960,3961,3962,3963,3964,3965,3966,3967,3968,3969,3970,3971,3972,3973,3974,3975,
+3968,3976,3977,3978,3979,3980,3981,3982,3983,3984,3985,3986,3987,3988,3989,3990,
+3991,3992,3992,3993,3994,3995,3996,3997,3998,3999,4000,4001,4002,4003,4004,4005,
+4006,4007,4008,4009,4010,4011,4012,4013,4014,4015,4016,4017,4018,4019,4020,4021,
+4022,4023,4024,4025,4026,4027,4028,4029,4030,4031,4032,4033,4034,4035,4036,4037,
+4038,4039,4040,4041,4042,4043,4044,4045,4046,4047,4048,4049,4050,4051,4052,4053,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295,4055,4056,4057,4058,4059,4060,4061,4062,4063,4064,4065,4066,4067,
+4068,4069,4070,3788,4071,4072,3790,4073,3791,4074,4075,3793,4076,4077,4078,4079,
+4080,4081,4082,4083,4084,4064,3804,4085,4086,3807,4087,4088,4089,4090,3812,3813,
+4091,4092,4093, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
},
{
-3800,3801,3802,3803,3804,3805,3806,3807,3808,3809,3810,3811,3812,3813,3814,3815,
-3816,3817,3818,3819,3820,3821,3822,3823,3824,3825,3826,3827,3828,3830,3966,3831,
-3832,3833,3834,3835,3836,3837,3838,3839,3840,3841,3842,3843,3967,3845,3846,3847,
-3840,3848,3849,3850,3851,3852,3853,3854,3855,3856,3857,3858,3859,3860,3968,3862,
-3863,3864,3864,3865,3866,3867,3868,3869,3870,3871,3872,3873,3874,3875,3876,3877,
-3969,3879,3970,3881,3882,3883,3884,3885,3886,3887,3888,3889,3890,3891,3892,3893,
-3894,3895,3896,3897,3898,3899,3900,3901,3902,3903,3971,3972,3973,3907,3908,3909,
-3910,3911,3912,3913,3974,3915,3916,3975,3918,3919,3920,3921,3922,3923,3924,3925,
-3976,3976,3976,3976,3976,3976,3976,3976,3976,3976,3976,3976,3976,3976,3976,3976,
-3976,3976,3976,3976,3976,3976,3976,3976,3976,3976,3976,3977,3977,3977,3977,3978,
-3977,3977,3977,3927,3928,3979,3930,3931,3932,3980,3934,3935,3936,3937,3938,3939,
-3940,3941,3942,3660,3943,3944,3662,3945,3663,3946,3947,3665,3948,3949,3950,3951,
-3952,3953,3954,3955,3956,3936,3676,3957,3958,3981,3982,3960,3983,3984,3684,3685,
-3963,3964,3965,3977,3977,3977,3977,3977,3977,3976,3985,3985,3985,3985,3985,3985,
-3985,3985,3985,3985,3985,3985,3985,3985,3985,3985,3985,3985,3985,3985,3985,3985,
-3985,3985,3985,3985,3985,3985,3985,3985,3985,3985,3985,3985,3985,3985,3985,3985,
+3928,3929,3930,3931,3932,3933,3934,3935,3936,3937,3938,3939,3940,3941,3942,3943,
+3944,3945,3946,3947,3948,3949,3950,3951,3952,3953,3954,3955,3956,3958,4094,3959,
+3960,3961,3962,3963,3964,3965,3966,3967,3968,3969,3970,3971,4095,3973,3974,3975,
+3968,3976,3977,3978,3979,3980,3981,3982,3983,3984,3985,3986,3987,3988,4096,3990,
+3991,3992,3992,3993,3994,3995,3996,3997,3998,3999,4000,4001,4002,4003,4004,4005,
+4097,4007,4098,4009,4010,4011,4012,4013,4014,4015,4016,4017,4018,4019,4020,4021,
+4022,4023,4024,4025,4026,4027,4028,4029,4030,4031,4099,4100,4101,4035,4036,4037,
+4038,4039,4040,4041,4102,4043,4044,4103,4046,4047,4048,4049,4050,4051,4052,4053,
+4104,4104,4104,4104,4104,4104,4104,4104,4104,4104,4104,4104,4104,4104,4104,4104,
+4104,4104,4104,4104,4104,4104,4104,4104,4104,4104,4104,4105,4105,4105,4105,4106,
+4105,4105,4105,4055,4056,4107,4058,4059,4060,4108,4062,4063,4064,4065,4066,4067,
+4068,4069,4070,3788,4071,4072,3790,4073,3791,4074,4075,3793,4076,4077,4078,4079,
+4080,4081,4082,4083,4084,4064,3804,4085,4086,4109,4110,4088,4111,4112,3812,3813,
+4091,4092,4093,4105,4105,4105,4105,4105,4105,4104,4113,4113,4113,4113,4113,4113,
+4113,4113,4113,4113,4113,4113,4113,4113,4113,4113,4113,4113,4113,4113,4113,4113,
+4113,4113,4113,4113,4113,4113,4113,4113,4113,4113,4113,4113,4113,4113,4113,4113,
},
{
1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,
-1238,1239,1240,1241,1242,1243,1244,1245,3986,3987,3988,1249,1250,1376,1377,1253,
-1378,1255,1256,3989,1380,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,3990,
-1270,3991,3992,3993,3994,1275,1276,1277,1278,1279,1381,1281,1282,1283,1284,1285,
+1238,1239,1240,1241,1242,1243,1244,1245,4114,4115,4116,1249,1250,1376,1377,1253,
+1378,1255,1256,4117,1380,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,4118,
+1270,4119,4120,4121,4122,1275,1276,1277,1278,1279,1381,1281,1282,1283,1284,1285,
1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,
-1302,1303,1304,1305,3995,1307,1308,1309,1309,1310,1311,1312,1313,1314,1315,1316,
+1302,1303,1304,1305,4123,1307,1308,1309,1309,1310,1311,1312,1313,1314,1315,1316,
1317,1318,1319,1320,1321,1322,1323,1324,1325,1326,1327,1328,1329,1330,1331,1332,
-1333,1334,1335,1336,1337,3996,1339,1340,1341,1342,1343,1344,1345,1346,1347,1348,
+1333,1334,1335,1336,1337,4124,1339,1340,1341,1342,1343,1344,1345,1346,1347,1348,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
- 295, 295, 295, 312,1349,1350,3997,1352,3998,1354,3999,1355, 320,1356, 321,1357,
+ 295, 295, 295, 312,1349,1350,4125,1352,4126,1354,4127,1355, 320,1356, 321,1357,
1358,1359,1360,1361,1362,1363,1364,1383,1366,1359,1384,1361, 332, 333, 334, 335,
- 336,1368,1369, 338, 339, 320,1370,1371,1371,1371,1371,1372,1373,1374,1375,1371,
+ 336,1368,1369, 338, 339, 320,1370, 295, 295, 295, 295,1372,1373,1374,1375, 295,
347, 348, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
},
{
-4000,4001,4002,4003,4004,4005, 6, 7,4006, 9, 10,4007, 12, 13, 14, 15,
-4008,4009,4010,4011, 20,4012,4013,4014,4015,4016,4017,4018,4019,4020,4021,4022,
- 32,4023,4024,4025,4026,4027,4028,4029,4030,4031,4032,4033,4034,4035,4036, 46,
-4037,4038,4039,4040,4041,4042,4043, 54,4044,4045,4046,4047,4048,4049,4050,4051,
-4052,4053,4054, 66,4055,4056, 69,4057,4058,4059,4060, 74, 75, 76, 77, 78,
-4061,4062,4063, 82,4064,4065, 85,4066,4067, 88,4068,4069,4070,4071,4072,4073,
- 95, 96, 97,4074,4075,4076,4077, 102, 103,4078, 105, 106, 107,4079,4080,4081,
-4082, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121,4083,4084,4085, 125,4086,
- 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806,
- 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806,
- 806, 806, 806,3644,3645,3646,3647,3648,3649,3650,3651,3652,3653,3654,3655,3656,
-3657,3658,3659,3660,3658,3661,3662,3658,3663,3658,3664,3665,3666,3667,3668,3669,
-3670,3671,3672,3673,3674,3675,3676,3677,3678,3679,3680,3681,3682,3683,3684,3685,
-3686,3687, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806,
- 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806,
- 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806,
+4128,4129,4130,4131,4132,4133, 6, 7,4134, 9, 10,4135, 12, 13, 14, 15,
+4136,4137,4138,4139, 20,4140,4141,4142,4143,4144,4145,4146,4147,4148,4149,4150,
+ 32,4151,4152,4153,4154,4155,4156,4157,4158,4159,4160,4161,4162,4163,4164, 46,
+4165,4166,4167,4168,4169,4170,4171, 54,4172,4173,4174,4175,4176,4177,4178,4179,
+4180,4181,4182, 66,4183,4184, 69,4185,4186,4187,4188, 74, 75, 76, 77, 78,
+4189,4190,4191, 82,4192,4193, 85,4194,4195, 88,4196,4197,4198,4199,4200,4201,
+ 95, 96, 97,4202,4203,4204,4205, 102, 103,4206, 105, 106, 107,4207,4208,4209,
+4210, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121,4211,4212,4213, 125,4214,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295,3772,3773,3774,3775,3776,3777,3778,3779,3780,3781,3782,3783,3784,
+3785,3786,3787,3788,3786,3789,3790,3786,3791,3786,3792,3793,3794,3795,3796,3797,
+3798,3799,3800,3801,3802,3803,3804,3805,3806,3807,3808,3809,3810,3811,3812,3813,
+3814,3815, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
},
{
-3287,3288, 466,3289, 713,3196,3290, 467,3291, 632,3292,3293,3294,3295,4087,3297,
-3298, 598,4088,3300,3301,3302,3303,3304,4089,4090,4091,4092, 759, 437, 438,3307,
-3308,3309, 439,3310, 440,4093, 442,4094,3312,3313,3314,3315,2306,4095,3317, 582,
-3318,3319, 452,3320,3321,4096,3322,3323,3324, 778,3325,2312, 779,3326,3327,3328,
-3329, 769,3330,3331,3332,3333, 663, 664,3334,2316,3335,3336,3337,1299,3338,3339,
-3340,3341,4097,3343,3344,3345,4098, 442,3347,3348,3349,3304,3350,1669,3351,3352,
-3353,3354,3355,3356,4099, 261,3357,3358,1919,2420,3359,3360, 676,3361,3362,3363,
-3364,4100,3366,3367,4101,4102, 680,3369,3370, 462,3371, 455,3372,2421,3373, 465,
- 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806,
- 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806,
- 806, 806, 806,3644,3645,4103,3649,3648,4104,4105,4106,4107,4108,4109,4110,4111,
-4112,3658,4113,3660,3658,3661,3662,3658,3663,3658,3664,2617,3666,3667,3668,3669,
-3670,3671,3672,3673,3674, 160,3676,3677,3678,3679,3680,3681,3682,3683,3684,3685,
-3686,3687, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806,
- 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806,
- 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806,
+3415,3416, 466,3417, 713,3324,3418, 467,3419, 632,3420,3421,3422,3423,4215,3425,
+3426, 598,4216,3428,3429,3430,3431,3432,4217,4218,4219,4220, 759, 437, 438,3435,
+3436,3437, 439,3438, 440,4221, 442,4222,3440,3441,3442,3443,2306,4223,3445, 582,
+3446,3447, 452,3448,3449,4224,3450,3451,3452, 778,3453,2312, 779,3454,3455,3456,
+3457, 769,3458,3459,3460,3461, 663, 664,3462,2316,3463,3464,3465,1299,3466,3467,
+3468,3469,4225,3471,3472,3473,4226, 442,3475,3476,3477,3432,3478,1669,3479,3480,
+3481,3482,3483,3484,4227, 261,3485,3486,1919,2420,3487,3488, 676,3489,3490,3491,
+3492,4228,3494,3495,4229,4230, 680,3497,3498, 462,3499, 455,3500,2421,3501, 465,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295,3772,3773,4231,3777,3776,4232,4233,4234,4235,4236,4237,4238,4239,
+4240,3786,4241,3788,3786,3789,3790,3786,3791,3786,3792,2617,3794,3795,3796,3797,
+3798,3799,3800,3801,3802, 160,3804,3805,3806,3807,3808,3809,3810,3811,3812,3813,
+3814,3815, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
},
{
622, 179, 371, 180, 372, 373, 374, 375, 376, 377, 186, 378, 187, 379, 380, 190,
@@ -10530,106 +10663,106 @@ const unsigned short banks[75][256] =
111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126,
127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127,
127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127,
- 127, 127, 127, 127,4114,4115,4116, 141,4117,4118,4119,4118,4120,4118,4121,4122,
-4123,1954,4124,4125,4126,4127,4128,4129,4130,4131,4132,4133,4134,4135,4136,4137,
-4138,4139,4140,4141,4142,4143, 163,4144, 625,4145,4146,4147,4148,4149,4150,4151,
-4152,4153,4154,4155,4156,4157,4158, 127, 127, 127, 127, 127, 127, 127, 127, 127,
+ 127, 127, 127, 127,4242,4243,4244, 141,4245,4246,4247,4246,4248,4246,4249,4250,
+4251,1954,4252,4253,4254,4255,4256,4257,4258,4259,4260,4261,4262,4263,4264,4265,
+4266,4267,4268,4269,4270,4271, 163,4272, 625,4273,4274,4275,4276,4277,4278,4279,
+4280,4281,4282,4283,4284,4285,4286, 127, 127, 127, 127, 127, 127, 127, 127, 127,
127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127,
127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127,
},
{
-4159,4160,1553,1554, 181,4161,4162,1555, 185,4163,3497,4164,1559, 188,4165,4166,
-4167,1562,4168,4169,1565, 195,4170, 197,4171,4172, 200, 201, 28,1566,1567,4173,
-4174,4175,4176,4177,4178,4179,4180,4181,1572,1573, 214, 215, 216, 217, 218, 219,
- 220,4182,4183,1575,1576,1577,1578,4184,1579,1580,4185,1581,4186,4187,4188,4189,
- 232, 233, 234, 235,4190, 237, 238,4191,1584,1585, 240,1586, 242, 243, 244,1587,
- 246,4192,4193,1589, 249, 250, 251,1590, 252,4194, 254, 255,4195,4196,4197,4198,
-1595,4199,1596,1597,1598,1599,1600,1601,4200,4201,4202, 267,4203,4204, 270,4205,
-4206,4207, 273,1603,4208,1605, 276,4209,4210,4211,4212,1610,4213,4214,4215, 126,
- 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806,
- 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806,
- 806, 806, 806,4216,1470,1613,4217,1615,4218,1475,4219,1477,4220,1479,4221,1481,
-1482,4222,1484,4223,4224,4225,1630,4226,2291,4227,1634,3514,1636,1637,1638,1639,
-1640,4228,4229,1643,1644,1645,1646,4230, 342,4231,4232,1651,1652,1653,4233,4234,
-1656,4235,1658,1659,1660,1661,1662,1663, 806, 806, 806, 806, 806, 806, 806, 806,
- 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806,
- 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806,
+4287,4288,1553,1554, 181,4289,4290,1555, 185,4291,3625,4292,1559, 188,4293,4294,
+4295,1562,4296,4297,1565, 195,4298, 197,4299,4300, 200, 201, 28,1566,1567,4301,
+4302,4303,4304,4305,4306,4307,4308,4309,1572,1573, 214, 215, 216, 217, 218, 219,
+ 220,4310,4311,1575,1576,1577,1578,4312,1579,1580,4313,1581,4314,4315,4316,4317,
+ 232, 233, 234, 235,4318, 237, 238,4319,1584,1585, 240,1586, 242, 243, 244,1587,
+ 246,4320,4321,1589, 249, 250, 251,1590, 252,4322, 254, 255,4323,4324,4325,4326,
+1595,4327,1596,1597,1598,1599,1600,1601,4328,4329,4330, 267,4331,4332, 270,4333,
+4334,4335, 273,1603,4336,1605, 276,4337,4338,4339,4340,1610,4341,4342,4343, 126,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295,4344,1470,1613,4345,1615,4346,1475,4347,1477,4348,1479,4349,1481,
+1482,4350,1484,4351,4352,4353,1630,4354,2291,4355,1634,3642,1636,1637,1638,1639,
+1640,4356,4357,1643,1644,1645,1646,4358, 342,4359,4360,1651,1652,1653,4361,4362,
+1656,4363,1658,1659,1660,1661,1662,1663, 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
},
{
-3643, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859,
+ 295, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859,
860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871,2216, 873, 874, 875,
876, 877, 878,2217, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891,
892, 893, 894,2218, 896, 897, 898, 899, 900,2219,2220, 903,2221, 905,2222,2223,
2224, 909,2225, 911, 912,2226,2227, 915, 916,2228,2229, 919, 920, 921, 922, 923,
-2230, 925, 926, 927, 928, 929,4236, 931, 932, 933, 934, 935,2232,2233, 938,2234,
- 940,4237, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955,
- 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966,4238, 968,4239,3643,3643,
-4240,4241,4242,4243,4244,4245,4246, 978,4247,4248,4249,4250,4251,4252,4253,4254,
-4255,4256,4257,4258,4259,4260,4261,4262,4263,4264,4265, 975, 971, 972, 973, 974,
+2230, 925, 926, 927, 928, 929, 295, 931, 932, 933, 934, 935,2232,2233, 938,2234,
+ 940, 295, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955,
+ 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966,4366, 968,4367, 295, 295,
+4368,4369,4370,4371,4372,4373,4374, 978,4375,4376,4377,4378,4379,4380,4381,4382,
+4383,4384,4385,4386,4387,4388,4389,4390,4391,4392,4393, 975, 971, 972, 973, 974,
975, 310, 976, 977, 978, 974,2239, 980,2240, 982,2241, 984,2242, 985,2243, 987,
988,2244, 990, 325,2244, 325, 991,2244,2245,2246, 330, 993,2247,2248,2249, 997,
998,2250,2251,1001,1002,1003, 340,1004,1005,1006,1007,1008,1009, 310,1010,1011,
-2252, 429,1003, 430,1013,1014, 974,1015,4266,4266,4266,4266,4266,4266,4266,4266,
-4266,4266,4266,4266,4266,4266,4266,4266,4266,4266,4266,4266,4266,4266,4266,4266,
-4266,4266,4266,4266,4266,4266,4266,4266,4266,4266,4266,4266,4266,4266,4266,4266,
+2252, 429,1003, 430,1013,1014, 974,1015, 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
},
{
-3287,4267,3196,3196,4268,3196,3196,3196,3196,3196,3196, 378,3196,3196,3694,3196,
-3196,4269,3196,4270,4271,4272,3196,3196,3196, 370,3196,4273,4274,4275,4276,4277,
-3196,4278,4279,4280,3310,3310,4281, 442,4282,3196,3196,4283,4284,4283, 676,4285,
-4286,3196,3196,4287, 51,3196,3196,3196,4288,3324,4289,3196, 59,4290,4288, 62,
-3196,4291,4291,4292, 67,3196, 664,4293,3196,2316,3196,4294, 70,3196,4295, 78,
-4296,4297, 81,3196,3196,3196,3196,3196,3196,3196,3196, 90,3196,4298, 93,4299,
-3196,3196,3196,3196,3196,3196,3196,4300,3196,3196,3196,3196,3196,3196,3196,3196,
-3196,3196,3196,3196,3196,4101,3196,4301,3196,3196,3196,3196,3196,3196,3196,3196,
-3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,
-3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,
-3196,3196,3196,4302,4302,4303,4304,4305,4306,4307,4308,4309,4310,4311,4312,4313,
-4314,4315,4316,4317,4318,4319,4320,4321,4322,4323,4324,4325,3196,3196,4326, 154,
-4327,4328,4329,3196,3196, 160,3196,3196,3196,4330,4331,4332,4333,4334,4335,3196,
-3196,4336, 160,4337,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,
-3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,
-3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,
+3415,4395,3324,3324,4396,3324,3324,3324,3324,3324,3324, 378,3324,3324,3822,3324,
+3324,4397,3324,4398,4399,4400,3324,3324,3324, 370,3324,4401,4402,4403,4404,4405,
+3324,4406,4407,4408,3438,3438,4409, 442,4410,3324,3324,4411,4412,4411, 676,4413,
+4414,3324,3324,4415, 51,3324,3324,3324,4416,3452,4417,3324, 59,4418,4416, 62,
+3324,4419,4419,4420, 67,3324, 664,4421,3324,2316,3324,4422, 70,3324,4423, 78,
+4424,4425, 81,3324,3324,3324,3324,3324,3324,3324,3324, 90,3324,4426, 93,4427,
+3324,3324,3324,3324,3324,3324,3324,4428,3324,3324,3324,3324,3324,3324,3324,3324,
+3324,3324,3324,3324,3324,4229,3324,4429,3324,3324,3324,3324,3324,3324,3324,3324,
+3324,3324,3324,3324,3324,3324,3324,3324,3324,3324,3324,3324,3324,3324,3324,3324,
+3324,3324,3324,3324,3324,3324,3324,3324,3324,3324,3324,3324,3324,3324,3324,3324,
+3324,3324,3324,4430,4430,4431,4432,4433,4434,4435,4436,4437,4438,4439,4440,4441,
+4442,4443,4444,4445,4446,4447,4448,4449,4450,4451,4452,4453,3324,3324,4454, 154,
+4455,4456,4457,3324,3324, 160,3324,3324,3324,4458,4459,4460,4461,4462,4463,3324,
+3324,4464, 160,4465,3324,3324,3324,3324,3324,3324,3324,3324,3324,3324,3324,3324,
+3324,3324,3324,3324,3324,3324,3324,3324,3324,3324,3324,3324,3324,3324,3324,3324,
+3324,3324,3324,3324,3324,3324,3324,3324,3324,3324,3324,3324,3324,3324,3324,3324,
},
{
-3800,3801,3802,3803,3804,3805,3806,3807,3808,3809,3810,3811,3812,3813,3814,3815,
-3816,3817,3818,3819,3820,3821,3822,3823,3824,3825,3826,3827,3828,3829,3830,3831,
-3832,3833,3834,3835,3836,3837,3838,3839,3840,3841,3842,3843,3844,3845,3846,3847,
-3840,3848,3849,3850,3851,3852,3853,3854,3855,3856,3857,3858,3859,3860,3861,3862,
-3863,3864,3864,3865,3866,3867,3868,3869,3870,3871,3872,3873,3874,3875,3876,3877,
-3878,3879,3880,3881,3882,3883,3884,3885,3886,3887,3888,3889,3890,3891,3892,3893,
-3894,3895,3896,3897,3898,3899,3900,3901,3902,3903,3904,3905,3906,3907,3908,3909,
-3910,3911,3912,3913,3914,3915,3916,3917,3918,3919,4338,3921,3922,3923,3924,3925,
-3976,3976,3976,3976,3976,3976,3976,3976,3976,3976,3976,3976,3976,3976,3976,3976,
-3976,3976,3976,3976,3976,3976,3976,3976,3976,3976,3976,3977,3977,3977,3977,3977,
-3977,3977,3977,3927,3928,3929,3930,3931,3932,3933,3934,3935,3936,3937,3938,3939,
-3940,3941,3942,3660,3943,3944,3662,3945,3663,3946,3947,3665,3948,3949,3950,3951,
-3952,3953,3954,3955,3956,3936,3676,3957,3958,3679,3959,3960,3961,3962,3684,3685,
-3963,3964,3965,3977,3977,3977,3977,3977,3977,3976,3985,3985,3985,3985,3985,3985,
-3985,3985,3985,3985,3985,3985,3985,3985,3985,3985,3985,3985,3985,3985,3985,3985,
-3985,3985,3985,3985,3985,3985,3985,3985,3985,3985,3985,3985,3985,3985,3985,3985,
+3928,3929,3930,3931,3932,3933,3934,3935,3936,3937,3938,3939,3940,3941,3942,3943,
+3944,3945,3946,3947,3948,3949,3950,3951,3952,3953,3954,3955,3956,3957,3958,3959,
+3960,3961,3962,3963,3964,3965,3966,3967,3968,3969,3970,3971,3972,3973,3974,3975,
+3968,3976,3977,3978,3979,3980,3981,3982,3983,3984,3985,3986,3987,3988,3989,3990,
+3991,3992,3992,3993,3994,3995,3996,3997,3998,3999,4000,4001,4002,4003,4004,4005,
+4006,4007,4008,4009,4010,4011,4012,4013,4014,4015,4016,4017,4018,4019,4020,4021,
+4022,4023,4024,4025,4026,4027,4028,4029,4030,4031,4032,4033,4034,4035,4036,4037,
+4038,4039,4040,4041,4042,4043,4044,4045,4046,4047,4466,4049,4050,4051,4052,4053,
+4104,4104,4104,4104,4104,4104,4104,4104,4104,4104,4104,4104,4104,4104,4104,4104,
+4104,4104,4104,4104,4104,4104,4104,4104,4104,4104,4104,4105,4105,4105,4105,4105,
+4105,4105,4105,4055,4056,4057,4058,4059,4060,4061,4062,4063,4064,4065,4066,4067,
+4068,4069,4070,3788,4071,4072,3790,4073,3791,4074,4075,3793,4076,4077,4078,4079,
+4080,4081,4082,4083,4084,4064,3804,4085,4086,3807,4087,4088,4089,4090,3812,3813,
+4091,4092,4093,4105,4105,4105,4105,4105,4105,4104,4113,4113,4113,4113,4113,4113,
+4113,4113,4113,4113,4113,4113,4113,4113,4113,4113,4113,4113,4113,4113,4113,4113,
+4113,4113,4113,4113,4113,4113,4113,4113,4113,4113,4113,4113,4113,4113,4113,4113,
},
{
-4339,4340,4341,4342,4343,4344,4345,4346,4347,4348,4349,4350,4351,4352,4353,4354,
-4355,4356,4357,4358,4359,4360,4361,4362,4363,4364,4365,4366,4367,4368,4369,4370,
-4371,4372,4373,4374,4375,4376,4377,4378,4379,4380,4381,4382,4383,4384,4385,4386,
-4387,4388,4389,4390,4391,4392,4393,4394,4395,4396,4397,4398,4399,4400,4401,4402,
-4403,4404,4405,4406,4407,4408,4409,4410,4411,4412,4413,4414,4415,4416,4417,4418,
-4419,4420,4421,4422,4423,4424,4425,4426,4427,4428,4429,4430,4431,4432,4433,4434,
-4435,4436,4437,4438,4439,4440,4441,4442,4443,4444,4445,4446,4447,4448,4449,4450,
-4451,4452,4453,4454,4455,4456,4457,4458,4459,4460,4461,4462,4463,4464,4465,4466,
- 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806,
- 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806,4467,4468,4469,4470,4471,
-4472,4473,4474,4475,4476,4477,4217,4478,4218,4479,4480,4481,4482,4483,4221,4484,
-4485,4222,4486,4487,4224,4488,4489,4226,4490,4227,4491,4492,4493,4494,4495,4496,
-4497,4498,4499,4500,4501, 320,4502,4503,4504,4505,4506,4507,4508,1374,4509,4510,
-4511,4512,4513,4514,4515,4516,4517,4518, 806, 806, 806, 806, 806, 806, 806, 806,
- 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806,
- 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806,
+4467,4468,4469,4470,4471,4472,4473,4474,4475,4476,4477,4478,4479,4480,4481,4482,
+4483,4484,4485,4486,4487,4488,4489,4490,4491,4492,4493,4494,4495,4496,4497,4498,
+4499,4500,4501,4502,4503,4504,4505,4506,4507,4508,4509,4510,4511,4512,4513,4514,
+4515,4516,4517,4518,4519,4520,4521,4522,4523,4524,4525,4526,4527,4528,4529,4530,
+4531,4532,4533,4534,4535,4536,4537,4538,4539,4540,4541,4542,4543,4544,4545,4546,
+4547,4548,4549,4550,4551,4552,4553,4554,4555,4556,4557,4558,4559,4560,4561,4562,
+4563,4564,4565,4566,4567,4568,4569,4570,4571,4572,4573,4574,4575,4576,4577,4578,
+4579,4580,4581,4582,4583,4584,4585,4586,4587,4588,4589,4590,4591,4592,4593,4594,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,4595,4596,4597,4598,4599,
+4600,4601,4602,4603,4604,4605,4345,4606,4346,4607,4608,4609,4610,4611,4349,4612,
+4613,4614,4615,4616,4352,4617,4618,4354,4619,4620,4621,4622,4623,4624,4625,4626,
+4627,4628,4629,4630,4631, 320,4632,4633,4634,4635,4636,4637,4638,1374,4639,4640,
+4641,4642,4643,4644,4645,4646,4647,4648, 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
},
{
-4519,4520,4521,4522,4520,4523,4524,4525,4526,4527,4528,4530,4531,4532,4533,4534,
-4535,4537,4539,4532,4541,4542,4543,4544,4545,4546,4547, 295, 28, 29, 30, 31,
+4649,4650,4651,4652,4650,4653,4654,4655,4656,4657,4658,4660,4661,4662,4663,4664,
+4665,4667,4669,4662,4671,4672,4673,4674,4675,4676,4677, 295, 28, 29, 30, 31,
32, 33, 34, 35, 36, 37, 38, 33, 39, 40, 41, 42, 43, 44, 45, 46,
47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
@@ -10638,30 +10771,30 @@ const unsigned short banks[75][256] =
111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
- 295, 295, 295, 127,4536, 128,4538, 130, 131, 132,4540, 134, 135, 136, 137, 138,
- 139, 140, 141, 142, 143, 144,4529, 146, 147, 148, 149, 150, 151, 152, 153, 154,
+ 295, 295, 295, 127,4666, 128,4668, 130, 131, 132,4670, 134, 135, 136, 137, 138,
+ 139, 140, 141, 142, 143, 144,4659, 146, 147, 148, 149, 150, 151, 152, 153, 154,
155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
},
{
-4549,4550,4551,4552,4553,4554,4555,4556,4557,4558,4559,4560,4561,3295,4558,4562,
-3298,4563,4564,3298,4565,4566,4566,4566, 868, 869, 870,4567,4568,4569,4570,4571,
-4572,4573,4574,4574,4575,4572,4576,4577,3842,4578,4579,4579,4580,4581,4582,4583,
-4584,4585,4586,4586,4587,4096,3322,4588,4589,4590,4591,4592,4593,4589,4589,4594,
-3329, 769,3330,3331,4595,4596,4597,4598,4599,4600,4601,4602,4603,4600,1300,4604,
-4605,4606,4600,4565,4607,4589,4608,4609,3347,4610,4611,4612,4613,1314,4614,4615,
-4616,4617,4618,4611,4611,1322,4619,4620,4621,4622,4623,4622,3295,4624,3842,4625,
-4626,1334,4626,4627,4628,4629, 792,4630,1341,1342,1343,1344,4631,4632,4633,1348,
- 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806,
- 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806,
- 806, 806, 806,4634,4634,4635,4636,4635,4637,4638,4639,4640,4641,4642,4643,4644,
-4645,4646,4647,4648,4649,4650,4651,4652,4653,4646,4654,4655,4656,4657,4658,4659,
-4660,4661,4662,4663,4664,4665,4666,4663,4664,4665,4667,4668,4669,4670,1375,1371,
-4671,4672, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806,
- 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806,
- 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806,
+4679,4680,4681,4682,4683,4684,4685,4686,4687,4688,4689,4690,4691,3423,4688,4692,
+3426,4693,4694,3426,4695,4696,4696,4696, 868, 869, 870,4697,4698,4699,4700,4701,
+4702,4703,4704,4704,4705,4702,4706,4707,3970,4708,4709,4709,4710,4711,4712,4713,
+4714,4715,4716,4716,4717,4224,3450,4718,4719,4720,4721,4722,4723,4719,4719,4724,
+3457, 769,3458,3459,4725,4726,4727,4728,4729,4730,4731,4732,4733,4730,1300,4734,
+4735,4736,4730,4695,4737,4719,4738,4739,3475,4740,4741,4742,4743,1314,4744,4745,
+4746,4747,4748,4741,4741,1322,4749,4750,4751,4752,4753,4752,3423,4754,3970,4755,
+4756,1334,4756,4757,4758,4759, 792,4760,1341,1342,1343,1344,4761,4762,4763,1348,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295,4764,4764,4765,4766,4765,4767,4768,4769,4770,4771,4772,4773,4774,
+4775,4776,4777,4778,4779,4780,4781,4782,4783,4776,4784,4785,4786,4787,4788,4789,
+4790,4791,4792,4793,4794,4795,4796,4793,4794,4795,4797,4798,4799,4800,1375, 295,
+4801,4802, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
},
};
@@ -10741,5 +10874,5 @@ const AdlBankSetup adlbanksetup[75] =
{3, 0, 0, 0, 0}, //Bank 71, TMB (Nam)
{0, 0, 0, 0, 0}, //Bank 72, WOPL (DMXOPL3 bank by Sneakernets)
{1, 0, 0, 0, 0}, //Bank 73, EA (Cartooners)
- {0, 1, 0, 0, 0} //Bank 74, WOPL (Apogee IMF 90-ish)
+ {0, 0, 1, 0, 0} //Bank 74, WOPL (Apogee IMF 90-ish)
};
diff --git a/src/adldata.hh b/src/adldata.hh
index e9ff00b..104db82 100644
--- a/src/adldata.hh
+++ b/src/adldata.hh
@@ -24,8 +24,16 @@
#ifndef ADLDATA_H
#define ADLDATA_H
+#include <string.h>
#include <stdint.h>
+#pragma pack(push, 1)
+#define ADLDATA_BYTE_COMPARABLE(T) \
+ inline bool operator==(const T &a, const T &b) \
+ { return !memcmp(&a, &b, sizeof(T)); } \
+ inline bool operator!=(const T &a, const T &b) \
+ { return !operator==(a, b); }
+
extern const struct adldata
{
uint32_t modulator_E862, carrier_E862; // See below
@@ -34,22 +42,46 @@ extern const struct adldata
int8_t finetune;
} adl[];
+ADLDATA_BYTE_COMPARABLE(struct adldata)
+enum { adlDefaultNumber = 189 };
extern const struct adlinsdata
{
- enum { Flag_Pseudo4op = 0x01, Flag_NoSound = 0x02 };
+ enum { Flag_Pseudo4op = 0x01, Flag_NoSound = 0x02, Flag_Real4op = 0x04 };
uint16_t adlno1, adlno2;
uint8_t tone;
uint8_t flags;
uint16_t ms_sound_kon; // Number of milliseconds it produces sound;
uint16_t ms_sound_koff;
- double voice2_fine_tune;
+ double voice2_fine_tune;
} adlins[];
+ADLDATA_BYTE_COMPARABLE(struct adlinsdata)
int maxAdlBanks();
extern const unsigned short banks[][256];
extern const char* const banknames[];
+enum { adlNoteOnMaxTime = 40000 };
+
+/**
+ * @brief Instrument data with operators included
+ */
+struct adlinsdata2
+{
+ adldata adl[2];
+ uint8_t tone;
+ uint8_t flags;
+ uint16_t ms_sound_kon; // Number of milliseconds it produces sound;
+ uint16_t ms_sound_koff;
+ double voice2_fine_tune;
+ adlinsdata2() {}
+ explicit adlinsdata2(const adlinsdata &d);
+};
+ADLDATA_BYTE_COMPARABLE(struct adlinsdata2)
+
+#undef ADLDATA_BYTE_COMPARABLE
+#pragma pack(pop)
+
/**
* @brief Bank global setup
*/
@@ -62,4 +94,26 @@ extern const struct AdlBankSetup
bool scaleModulators;
} adlbanksetup[];
+/**
+ * @brief Conversion of storage formats
+ */
+inline adlinsdata2::adlinsdata2(const adlinsdata &d)
+ : tone(d.tone), flags(d.flags),
+ ms_sound_kon(d.ms_sound_kon), ms_sound_koff(d.ms_sound_koff),
+ voice2_fine_tune(d.voice2_fine_tune)
+{
+ adl[0] = ::adl[d.adlno1];
+ adl[1] = ::adl[d.adlno2];
+}
+
+/**
+ * @brief Convert external instrument to internal instrument
+ */
+void cvt_ADLI_to_FMIns(adlinsdata2 &dst, const struct ADL_Instrument &src);
+
+/**
+ * @brief Convert internal instrument to external instrument
+ */
+void cvt_FMIns_to_ADLI(struct ADL_Instrument &dst, const adlinsdata2 &src);
+
#endif //ADLDATA_H
diff --git a/src/adlmidi.cpp b/src/adlmidi.cpp
index bf03285..a0c7d8a 100644
--- a/src/adlmidi.cpp
+++ b/src/adlmidi.cpp
@@ -120,7 +120,7 @@ ADLMIDI_EXPORT int adl_setBank(ADL_MIDIPlayer *device, int bank)
if(static_cast<uint32_t>(bankno) >= NumBanks)
{
char errBuf[150];
- snprintf(errBuf, 150, "Embedded bank number may only be 0..%" PRIu32 "!\n", (NumBanks - 1));
+ snprintf(errBuf, 150, "Embedded bank number may only be 0..%u!\n", static_cast<unsigned int>(NumBanks - 1));
play->setErrorString(errBuf);
return -1;
}
@@ -143,6 +143,142 @@ ADLMIDI_EXPORT const char *const *adl_getBankNames()
return banknames;
}
+ADLMIDI_EXPORT int adl_reserveBanks(ADL_MIDIPlayer *device, unsigned banks)
+{
+ if(!device)
+ return -1;
+ MIDIplay *play = reinterpret_cast<MIDIplay *>(device->adl_midiPlayer);
+ OPL3::BankMap &map = play->opl.dynamic_banks;
+ map.reserve(banks);
+ return (int)map.capacity();
+}
+
+ADLMIDI_EXPORT int adl_getBank(ADL_MIDIPlayer *device, const ADL_BankId *idp, int flags, ADL_Bank *bank)
+{
+ if(!device || !idp || !bank)
+ return -1;
+
+ ADL_BankId id = *idp;
+ if(id.lsb > 127 || id.msb > 127 || id.percussive > 1)
+ return -1;
+ unsigned idnumber = (id.msb << 8) | id.lsb | (id.percussive ? OPL3::PercussionTag : 0);
+
+ MIDIplay *play = reinterpret_cast<MIDIplay *>(device->adl_midiPlayer);
+ OPL3::BankMap &map = play->opl.dynamic_banks;
+
+ OPL3::BankMap::iterator it;
+ if(!(flags & ADLMIDI_Bank_Create))
+ {
+ it = map.find(idnumber);
+ if(it == map.end())
+ return -1;
+ }
+ else
+ {
+ std::pair<uint16_t, OPL3::Bank> value;
+ value.first = idnumber;
+ memset(&value.second, 0, sizeof(value.second));
+ for (unsigned i = 0; i < 128; ++i)
+ value.second.ins[i].flags = adlinsdata::Flag_NoSound;
+
+ std::pair<OPL3::BankMap::iterator, bool> ir;
+ if(flags & ADLMIDI_Bank_CreateRt)
+ {
+ ir = map.insert(value, OPL3::BankMap::do_not_expand_t());
+ if(ir.first == map.end())
+ return -1;
+ }
+ else
+ ir = map.insert(value);
+ it = ir.first;
+ }
+
+ it.to_ptrs(bank->pointer);
+ return 0;
+}
+
+ADLMIDI_EXPORT int adl_getBankId(ADL_MIDIPlayer *device, const ADL_Bank *bank, ADL_BankId *id)
+{
+ if(!device || !bank)
+ return -1;
+
+ OPL3::BankMap::iterator it = OPL3::BankMap::iterator::from_ptrs(bank->pointer);
+ unsigned idnumber = it->first;
+ id->msb = (idnumber >> 8) & 127;
+ id->lsb = idnumber & 127;
+ id->percussive = (idnumber & OPL3::PercussionTag) ? 1 : 0;
+ return 0;
+}
+
+ADLMIDI_EXPORT int adl_removeBank(ADL_MIDIPlayer *device, ADL_Bank *bank)
+{
+ if(!device || !bank)
+ return -1;
+
+ MIDIplay *play = reinterpret_cast<MIDIplay *>(device->adl_midiPlayer);
+ OPL3::BankMap &map = play->opl.dynamic_banks;
+ OPL3::BankMap::iterator it = OPL3::BankMap::iterator::from_ptrs(bank->pointer);
+ size_t size = map.size();
+ map.erase(it);
+ return (map.size() != size) ? 0 : -1;
+}
+
+ADLMIDI_EXPORT int adl_getFirstBank(ADL_MIDIPlayer *device, ADL_Bank *bank)
+{
+ if(!device)
+ return -1;
+
+ MIDIplay *play = reinterpret_cast<MIDIplay *>(device->adl_midiPlayer);
+ OPL3::BankMap &map = play->opl.dynamic_banks;
+
+ OPL3::BankMap::iterator it = map.begin();
+ if(it == map.end())
+ return -1;
+
+ it.to_ptrs(bank->pointer);
+ return 0;
+}
+
+ADLMIDI_EXPORT int adl_getNextBank(ADL_MIDIPlayer *device, ADL_Bank *bank)
+{
+ if(!device)
+ return -1;
+
+ MIDIplay *play = reinterpret_cast<MIDIplay *>(device->adl_midiPlayer);
+ OPL3::BankMap &map = play->opl.dynamic_banks;
+
+ OPL3::BankMap::iterator it = OPL3::BankMap::iterator::from_ptrs(bank->pointer);
+ if(++it == map.end())
+ return -1;
+
+ it.to_ptrs(bank->pointer);
+ return 0;
+}
+
+ADLMIDI_EXPORT int adl_getInstrument(ADL_MIDIPlayer *device, const ADL_Bank *bank, unsigned index, ADL_Instrument *ins)
+{
+ if(!device || !bank || index > 127 || !ins)
+ return 1;
+
+ OPL3::BankMap::iterator it = OPL3::BankMap::iterator::from_ptrs(bank->pointer);
+ cvt_FMIns_to_ADLI(*ins, it->second.ins[index]);
+ ins->version = 0;
+ return 0;
+}
+
+ADLMIDI_EXPORT int adl_setInstrument(ADL_MIDIPlayer *device, ADL_Bank *bank, unsigned index, const ADL_Instrument *ins)
+{
+ if(!device || !bank || index > 127 || !ins)
+ return 1;
+
+ if(ins->version != 0)
+ return 1;
+
+ OPL3::BankMap::iterator it = OPL3::BankMap::iterator::from_ptrs(bank->pointer);
+ cvt_ADLI_to_FMIns(it->second.ins[index], *ins);
+ return 0;
+}
+
ADLMIDI_EXPORT int adl_setNumFourOpsChn(ADL_MIDIPlayer *device, int ops4)
{
if(!device)
@@ -177,7 +313,9 @@ ADLMIDI_EXPORT void adl_setPercMode(ADL_MIDIPlayer *device, int percmod)
if(!device) return;
MIDIplay *play = reinterpret_cast<MIDIplay *>(device->adl_midiPlayer);
play->m_setup.AdlPercussionMode = percmod;
- play->opl.AdlPercussionMode = play->m_setup.AdlPercussionMode;
+ play->opl.AdlPercussionMode = play->m_setup.AdlPercussionMode < 0 ?
+ play->opl.dynamic_bank_setup.adLibPercussions :
+ (play->m_setup.AdlPercussionMode != 0);
play->opl.updateFlags();
}
@@ -186,7 +324,9 @@ ADLMIDI_EXPORT void adl_setHVibrato(ADL_MIDIPlayer *device, int hvibro)
if(!device) return;
MIDIplay *play = reinterpret_cast<MIDIplay *>(device->adl_midiPlayer);
play->m_setup.HighVibratoMode = hvibro;
- play->opl.HighVibratoMode = play->m_setup.HighVibratoMode;
+ play->opl.HighVibratoMode = play->m_setup.HighVibratoMode < 0 ?
+ play->opl.dynamic_bank_setup.deepVibrato :
+ (play->m_setup.HighVibratoMode != 0);
play->opl.updateDeepFlags();
}
@@ -195,7 +335,9 @@ ADLMIDI_EXPORT void adl_setHTremolo(ADL_MIDIPlayer *device, int htremo)
if(!device) return;
MIDIplay *play = reinterpret_cast<MIDIplay *>(device->adl_midiPlayer);
play->m_setup.HighTremoloMode = htremo;
- play->opl.HighTremoloMode = play->m_setup.HighTremoloMode;
+ play->opl.HighTremoloMode = play->m_setup.HighTremoloMode < 0 ?
+ play->opl.dynamic_bank_setup.deepTremolo :
+ (play->m_setup.HighTremoloMode != 0);
play->opl.updateDeepFlags();
}
@@ -204,14 +346,16 @@ ADLMIDI_EXPORT void adl_setScaleModulators(ADL_MIDIPlayer *device, int smod)
if(!device) return;
MIDIplay *play = reinterpret_cast<MIDIplay *>(device->adl_midiPlayer);
play->m_setup.ScaleModulators = smod;
- play->opl.ScaleModulators = play->m_setup.ScaleModulators;
+ play->opl.ScaleModulators = play->m_setup.ScaleModulators < 0 ?
+ play->opl.dynamic_bank_setup.scaleModulators :
+ (play->m_setup.ScaleModulators != 0);
}
ADLMIDI_EXPORT void adl_setFullRangeBrightness(struct ADL_MIDIPlayer *device, int fr_brightness)
{
if(!device) return;
MIDIplay *play = reinterpret_cast<MIDIplay *>(device->adl_midiPlayer);
- play->m_setup.fullRangeBrightnessCC74 = fr_brightness;
+ play->m_setup.fullRangeBrightnessCC74 = (fr_brightness != 0);
}
ADLMIDI_EXPORT void adl_setLoopEnabled(ADL_MIDIPlayer *device, int loopEn)
@@ -221,12 +365,16 @@ ADLMIDI_EXPORT void adl_setLoopEnabled(ADL_MIDIPlayer *device, int loopEn)
play->m_setup.loopingIsEnabled = (loopEn != 0);
}
+/* !!!DEPRECATED!!! */
ADLMIDI_EXPORT void adl_setLogarithmicVolumes(struct ADL_MIDIPlayer *device, int logvol)
{
if(!device) return;
MIDIplay *play = reinterpret_cast<MIDIplay *>(device->adl_midiPlayer);
- play->m_setup.LogarithmicVolumes = logvol;
- play->opl.LogarithmicVolumes = play->m_setup.LogarithmicVolumes;
+ play->m_setup.LogarithmicVolumes = (logvol != 0);
+ if(play->m_setup.LogarithmicVolumes)
+ play->opl.ChangeVolumeRangesModel(ADLMIDI_VolumeModel_NativeOPL3);
+ else
+ play->opl.ChangeVolumeRangesModel(static_cast<ADLMIDI_VolumeModels>(play->opl.m_volumeScale));
}
ADLMIDI_EXPORT void adl_setVolumeRangeModel(struct ADL_MIDIPlayer *device, int volumeModel)
@@ -234,7 +382,10 @@ ADLMIDI_EXPORT void adl_setVolumeRangeModel(struct ADL_MIDIPlayer *device, int v
if(!device) return;
MIDIplay *play = reinterpret_cast<MIDIplay *>(device->adl_midiPlayer);
play->m_setup.VolumeModel = volumeModel;
- play->opl.ChangeVolumeRangesModel(static_cast<ADLMIDI_VolumeModels>(volumeModel));
+ if(play->m_setup.VolumeModel == ADLMIDI_VolumeModel_AUTO)//Use bank default volume model
+ play->opl.m_volumeScale = (OPL3::VolumesScale)play->opl.dynamic_bank_setup.volumeModel;
+ else
+ play->opl.ChangeVolumeRangesModel(static_cast<ADLMIDI_VolumeModels>(volumeModel));
}
ADLMIDI_EXPORT int adl_openBankFile(struct ADL_MIDIPlayer *device, const char *filePath)
@@ -367,7 +518,11 @@ ADLMIDI_EXPORT int adl_switchEmulator(struct ADL_MIDIPlayer *device, int emulato
ADLMIDI_EXPORT const char *adl_linkedLibraryVersion()
{
+#if !defined(ADLMIDI_ENABLE_HQ_RESAMPLER)
return ADLMIDI_VERSION;
+#else
+ return ADLMIDI_VERSION " (HQ)";
+#endif
}
ADLMIDI_EXPORT const ADL_Version *adl_linkedVersion()
@@ -421,7 +576,7 @@ ADLMIDI_EXPORT void adl_reset(struct ADL_MIDIPlayer *device)
play->m_setup.tick_skip_samples_delay = 0;
play->opl.Reset(play->m_setup.emulator, play->m_setup.PCM_RATE);
play->ch.clear();
- play->ch.resize(play->opl.NumChannels);
+ play->ch.resize((size_t)play->opl.NumChannels);
}
ADLMIDI_EXPORT double adl_totalTimeLength(struct ADL_MIDIPlayer *device)
@@ -614,7 +769,7 @@ ADLMIDI_EXPORT void adl_setDebugMessageHook(struct ADL_MIDIPlayer *device, ADL_D
play->hooks.onDebugMessage_userData = userData;
}
-
+#ifndef ADLMIDI_HW_OPL
template <class Dst>
static void CopySamplesRaw(ADL_UInt8 *dstLeft, ADL_UInt8 *dstRight, const int32_t *src,
size_t frameCount, unsigned sampleOffset)
@@ -659,6 +814,8 @@ static int SendStereoAudio(int samples_requested,
right += (outputOffset / 2) * sampleOffset;
typedef int32_t(&pfnConvert)(int32_t);
+ typedef float(&ffnConvert)(int32_t);
+ typedef double(&dfnConvert)(int32_t);
switch(sampleType) {
case ADLMIDI_SampleType_S8:
@@ -723,22 +880,28 @@ static int SendStereoAudio(int samples_requested,
break;
}
case ADLMIDI_SampleType_F32:
+ {
if(containerSize != sizeof(float))
return -1;
- CopySamplesTransformed<float>(left, right, _in, toCopy / 2, sampleOffset, adl_cvtReal<float>);
+ ffnConvert cvt = adl_cvtReal<float>;
+ CopySamplesTransformed<float>(left, right, _in, toCopy / 2, sampleOffset, cvt);
break;
+ }
case ADLMIDI_SampleType_F64:
+ {
if(containerSize != sizeof(double))
return -1;
- CopySamplesTransformed<double>(left, right, _in, toCopy / 2, sampleOffset, adl_cvtReal<double>);
+ dfnConvert cvt = adl_cvtReal<double>;
+ CopySamplesTransformed<double>(left, right, _in, toCopy / 2, sampleOffset, cvt);
break;
+ }
default:
return -1;
}
return 0;
}
-
+#endif
ADLMIDI_EXPORT int adl_play(struct ADL_MIDIPlayer *device, int sampleCount, short *out)
{
diff --git a/src/adlmidi_bankmap.h b/src/adlmidi_bankmap.h
new file mode 100644
index 0000000..e4534cd
--- /dev/null
+++ b/src/adlmidi_bankmap.h
@@ -0,0 +1,127 @@
+/*
+ * libADLMIDI is a free MIDI to WAV conversion library with OPL3 emulation
+ *
+ * Original ADLMIDI code: Copyright (c) 2010-2014 Joel Yliluoma <bisqwit@iki.fi>
+ * ADLMIDI Library API: Copyright (c) 2015-2018 Vitaly Novichkov <admin@wohlnet.ru>
+ *
+ * Library is based on the ADLMIDI, a MIDI player for Linux and Windows with OPL3 emulation:
+ * http://iki.fi/bisqwit/source/adlmidi.html
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef ADLMIDI_BANKMAP_H
+#define ADLMIDI_BANKMAP_H
+
+#include <list>
+#include <utility>
+#include <stdint.h>
+#include <stddef.h>
+
+#include "adlmidi_ptr.hpp"
+
+/**
+ * A simple hash map which accepts bank numbers as keys, can be reserved to a
+ * fixed size, offers O(1) search and insertion, has a hash function to
+ * optimize for the worst case, and has some good cache locality properties.
+ */
+template <class T>
+class BasicBankMap
+{
+public:
+ typedef uint16_t key_type; /* the bank identifier */
+ typedef T mapped_type;
+ typedef std::pair<key_type, T> value_type;
+
+ BasicBankMap();
+ void reserve(size_t capacity);
+
+ size_t size() const
+ { return m_size; }
+ size_t capacity() const
+ { return m_capacity; }
+ bool empty() const
+ { return m_size == 0; }
+
+ class iterator;
+ iterator begin() const;
+ iterator end() const;
+
+ struct do_not_expand_t {};
+
+ iterator find(key_type key);
+ void erase(iterator it);
+ std::pair<iterator, bool> insert(const value_type &value);
+ std::pair<iterator, bool> insert(const value_type &value, do_not_expand_t);
+ void clear();
+
+ T &operator[](key_type key);
+
+private:
+ struct Slot;
+ enum { minimum_allocation = 4 };
+ enum
+ {
+ hash_bits = 8, /* worst case # of collisions: 128^2/2^hash_bits */
+ hash_buckets = 1 << hash_bits,
+ };
+
+public:
+ class iterator
+ {
+ public:
+ iterator();
+ value_type &operator*() const { return slot->value; }
+ value_type *operator->() const { return &slot->value; }
+ iterator &operator++();
+ bool operator==(const iterator &o) const;
+ bool operator!=(const iterator &o) const;
+ void to_ptrs(void *ptrs[3]);
+ static iterator from_ptrs(void *const ptrs[3]);
+ private:
+ Slot **buckets;
+ Slot *slot;
+ size_t index;
+ iterator(Slot **buckets, Slot *slot, size_t index);
+#ifdef _MSC_VER
+ template<class _T>
+ friend class BasicBankMap;
+#else
+ friend class BasicBankMap<T>;
+#endif
+ };
+
+private:
+ struct Slot {
+ Slot *next, *prev;
+ value_type value;
+ Slot() : next(NULL), prev(NULL) {}
+ };
+ AdlMIDI_SPtrArray<Slot *> m_buckets;
+ std::list< AdlMIDI_SPtrArray<Slot> > m_allocations;
+ Slot *m_freeslots;
+ size_t m_size;
+ size_t m_capacity;
+ static size_t hash(key_type key);
+ Slot *allocate_slot();
+ Slot *ensure_allocate_slot();
+ void free_slot(Slot *slot);
+ Slot *bucket_find(size_t index, key_type key);
+ void bucket_add(size_t index, Slot *slot);
+ void bucket_remove(size_t index, Slot *slot);
+};
+
+#include "adlmidi_bankmap.tcc"
+
+#endif // ADLMIDI_BANKMAP_H
diff --git a/src/adlmidi_bankmap.tcc b/src/adlmidi_bankmap.tcc
new file mode 100644
index 0000000..76e7001
--- /dev/null
+++ b/src/adlmidi_bankmap.tcc
@@ -0,0 +1,283 @@
+/*
+ * libADLMIDI is a free MIDI to WAV conversion library with OPL3 emulation
+ *
+ * Original ADLMIDI code: Copyright (c) 2010-2014 Joel Yliluoma <bisqwit@iki.fi>
+ * ADLMIDI Library API: Copyright (c) 2015-2018 Vitaly Novichkov <admin@wohlnet.ru>
+ *
+ * Library is based on the ADLMIDI, a MIDI player for Linux and Windows with OPL3 emulation:
+ * http://iki.fi/bisqwit/source/adlmidi.html
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "adlmidi_bankmap.h"
+#include <cassert>
+
+template <class T>
+inline BasicBankMap<T>::BasicBankMap()
+ : m_freeslots(NULL),
+ m_size(0),
+ m_capacity(0)
+{
+ m_buckets.reset(new Slot *[hash_buckets]());
+}
+
+template <class T>
+inline size_t BasicBankMap<T>::hash(key_type key)
+{
+ // disregard the 0 high bit in LSB
+ key = (key & 127) | ((key >> 8) << 7);
+ // take low part as hash value
+ return key & (hash_buckets - 1);
+}
+
+template <class T>
+void BasicBankMap<T>::reserve(size_t capacity)
+{
+ if(m_capacity >= capacity)
+ return;
+
+ size_t need = capacity - m_capacity;
+ const size_t minalloc = static_cast<size_t>(minimum_allocation);
+ need = (need < minalloc) ? minalloc : need;
+
+ AdlMIDI_SPtrArray<Slot> slotz;
+ slotz.reset(new Slot[need]);
+ m_allocations.push_back(slotz);
+ m_capacity += need;
+
+ for(size_t i = need; i-- > 0;)
+ free_slot(&slotz[i]);
+}
+
+template <class T>
+typename BasicBankMap<T>::iterator
+BasicBankMap<T>::begin() const
+{
+ iterator it(m_buckets.get(), NULL, 0);
+ while(it.index < hash_buckets && !(it.slot = m_buckets[it.index]))
+ ++it.index;
+ return it;
+}
+
+template <class T>
+typename BasicBankMap<T>::iterator
+BasicBankMap<T>::end() const
+{
+ iterator it(m_buckets.get(), NULL, hash_buckets);
+ return it;
+}
+
+template <class T>
+typename BasicBankMap<T>::iterator BasicBankMap<T>::find(key_type key)
+{
+ size_t index = hash(key);
+ Slot *slot = bucket_find(index, key);
+ if(!slot)
+ return end();
+ return iterator(m_buckets.get(), slot, index);
+}
+
+template <class T>
+void BasicBankMap<T>::erase(iterator it)
+{
+ bucket_remove(it.index, it.slot);
+ free_slot(it.slot);
+ --m_size;
+}
+
+template <class T>
+inline BasicBankMap<T>::iterator::iterator()
+ : buckets(NULL), slot(NULL), index(0)
+{
+}
+
+template <class T>
+inline BasicBankMap<T>::iterator::iterator(Slot **buckets, Slot *slot, size_t index)
+ : buckets(buckets), slot(slot), index(index)
+{
+}
+
+template <class T>
+typename BasicBankMap<T>::iterator &
+BasicBankMap<T>::iterator::operator++()
+{
+ if(slot->next)
+ slot = slot->next;
+ else {
+ Slot *slot = NULL;
+ ++index;
+ while(index < hash_buckets && !(slot = buckets[index]))
+ ++index;
+ this->slot = slot;
+ }
+ return *this;
+}
+
+template <class T>
+bool BasicBankMap<T>::iterator::operator==(const iterator &o) const
+{
+ return buckets == o.buckets && slot == o.slot && index == o.index;
+}
+
+template <class T>
+inline bool BasicBankMap<T>::iterator::operator!=(const iterator &o) const
+{
+ return !operator==(o);
+}
+
+template <class T>
+void BasicBankMap<T>::iterator::to_ptrs(void *ptrs[3])
+{
+ ptrs[0] = buckets;
+ ptrs[1] = slot;
+ ptrs[2] = (void *)index;
+}
+
+template <class T>
+typename BasicBankMap<T>::iterator
+BasicBankMap<T>::iterator::from_ptrs(void *const ptrs[3])
+{
+ iterator it;
+ it.buckets = (Slot **)ptrs[0];
+ it.slot = (Slot *)ptrs[1];
+ it.index = (size_t)ptrs[2];
+ return it;
+}
+
+template <class T>
+std::pair<typename BasicBankMap<T>::iterator, bool>
+BasicBankMap<T>::insert(const value_type &value)
+{
+ size_t index = hash(value.first);
+ Slot *slot = bucket_find(index, value.first);
+ if(slot)
+ return std::make_pair(iterator(m_buckets.get(), slot, index), false);
+ slot = allocate_slot();
+ if(!slot) {
+ reserve(m_capacity + minimum_allocation);
+ slot = ensure_allocate_slot();
+ }
+ slot->value = value;
+ bucket_add(index, slot);
+ ++m_size;
+ return std::make_pair(iterator(m_buckets.get(), slot, index), true);
+}
+
+template <class T>
+std::pair<typename BasicBankMap<T>::iterator, bool>
+BasicBankMap<T>::insert(const value_type &value, do_not_expand_t)
+{
+ size_t index = hash(value.first);
+ Slot *slot = bucket_find(index, value.first);
+ if(slot)
+ return std::make_pair(iterator(m_buckets.get(), slot, index), false);
+ slot = allocate_slot();
+ if(!slot)
+ return std::make_pair(end(), false);
+ slot->value = value;
+ bucket_add(index, slot);
+ ++m_size;
+ return std::make_pair(iterator(m_buckets.get(), slot, index), true);
+}
+
+template <class T>
+void BasicBankMap<T>::clear()
+{
+ for(size_t i = 0; i < hash_buckets; ++i) {
+ Slot *slot = m_buckets[i];
+ while (Slot *cur = slot) {
+ slot = slot->next;
+ free_slot(cur);
+ }
+ m_buckets[i] = NULL;
+ }
+ m_size = 0;
+}
+
+template <class T>
+inline T &BasicBankMap<T>::operator[](key_type key)
+{
+ return insert(value_type(key, T())).first->second;
+}
+
+template <class T>
+typename BasicBankMap<T>::Slot *
+BasicBankMap<T>::allocate_slot()
+{
+ Slot *slot = m_freeslots;
+ if(!slot)
+ return NULL;
+ Slot *next = slot->next;
+ if(next)
+ next->prev = NULL;
+ m_freeslots = next;
+ return slot;
+}
+
+template <class T>
+inline typename BasicBankMap<T>::Slot *
+BasicBankMap<T>::ensure_allocate_slot()
+{
+ Slot *slot = allocate_slot();
+ assert(slot);
+ return slot;
+}
+
+template <class T>
+void BasicBankMap<T>::free_slot(Slot *slot)
+{
+ Slot *next = m_freeslots;
+ if(next)
+ next->prev = slot;
+ slot->prev = NULL;
+ slot->next = next;
+ m_freeslots = slot;
+ m_freeslots->value.second = T();
+}
+
+template <class T>
+typename BasicBankMap<T>::Slot *
+BasicBankMap<T>::bucket_find(size_t index, key_type key)
+{
+ Slot *slot = m_buckets[index];
+ while(slot && slot->value.first != key)
+ slot = slot->next;
+ return slot;
+}
+
+template <class T>
+void BasicBankMap<T>::bucket_add(size_t index, Slot *slot)
+{
+ assert(slot);
+ Slot *next = m_buckets[index];
+ if(next)
+ next->prev = slot;
+ slot->next = next;
+ m_buckets[index] = slot;
+}
+
+template <class T>
+void BasicBankMap<T>::bucket_remove(size_t index, Slot *slot)
+{
+ assert(slot);
+ Slot *prev = slot->prev;
+ Slot *next = slot->next;
+ if(!prev)
+ m_buckets[index] = next;
+ else
+ prev->next = next;
+ if(next)
+ next->prev = prev;
+}
diff --git a/src/adlmidi_load.cpp b/src/adlmidi_load.cpp
index 703f34a..9e19ab6 100644
--- a/src/adlmidi_load.cpp
+++ b/src/adlmidi_load.cpp
@@ -72,65 +72,128 @@ bool MIDIplay::LoadBank(const void *data, size_t size)
return LoadBank(file);
}
-
-struct WOPL_Inst
-{
- bool fourOps;
- char padding[7];
- struct adlinsdata adlins;
- struct adldata op[2];
- uint16_t ms_sound_kon;
- uint16_t ms_sound_koff;
-};
-
-static void cvt_WOPLI_to_FMIns(WOPL_Inst &ins, WOPLInstrument &in)
+template <class WOPLI>
+static void cvt_generic_to_FMIns(adlinsdata2 &ins, const WOPLI &in)
{
- ins.op[0].finetune = in.note_offset1;
- ins.op[1].finetune = in.note_offset2;
-
- ins.adlins.voice2_fine_tune = 0.0;
+ ins.voice2_fine_tune = 0.0;
int8_t voice2_fine_tune = in.second_voice_detune;
if(voice2_fine_tune != 0)
{
if(voice2_fine_tune == 1)
- ins.adlins.voice2_fine_tune = 0.000025;
+ ins.voice2_fine_tune = 0.000025;
else if(voice2_fine_tune == -1)
- ins.adlins.voice2_fine_tune = -0.000025;
+ ins.voice2_fine_tune = -0.000025;
else
- ins.adlins.voice2_fine_tune = ((voice2_fine_tune * 15.625) / 1000.0);
+ ins.voice2_fine_tune = voice2_fine_tune * (15.625 / 1000.0);
}
- ins.adlins.tone = in.percussion_key_number;
+ ins.tone = in.percussion_key_number;
+ ins.flags = (in.inst_flags & WOPL_Ins_4op) && (in.inst_flags & WOPL_Ins_Pseudo4op) ? adlinsdata::Flag_Pseudo4op : 0;
+ ins.flags|= (in.inst_flags & WOPL_Ins_4op) && ((in.inst_flags & WOPL_Ins_Pseudo4op) == 0) ? adlinsdata::Flag_Real4op : 0;
+ ins.flags|= (in.inst_flags & WOPL_Ins_IsBlank) ? adlinsdata::Flag_NoSound : 0;
- ins.adlins.flags = (in.inst_flags & WOPL_Ins_4op) && (in.inst_flags & WOPL_Ins_Pseudo4op) ? adlinsdata::Flag_Pseudo4op : 0;
- ins.adlins.flags|= (in.inst_flags & WOPL_Ins_IsBlank) ? adlinsdata::Flag_NoSound : 0;
- ins.fourOps = (in.inst_flags & WOPL_Ins_4op) || (in.inst_flags & WOPL_Ins_Pseudo4op);
-
- ins.op[0].feedconn = in.fb_conn1_C0;
- ins.op[1].feedconn = in.fb_conn2_C0;
-
- for(size_t op = 0, slt = 0; op < 4; op++, slt++)
+ bool fourOps = (in.inst_flags & WOPL_Ins_4op) || (in.inst_flags & WOPL_Ins_Pseudo4op);
+ for(size_t op = 0, slt = 0; op < static_cast<size_t>(fourOps ? 4 : 2); op++, slt++)
{
- ins.op[slt].carrier_E862 =
+ ins.adl[slt].carrier_E862 =
((static_cast<uint32_t>(in.operators[op].waveform_E0) << 24) & 0xFF000000) //WaveForm
| ((static_cast<uint32_t>(in.operators[op].susrel_80) << 16) & 0x00FF0000) //SusRel
| ((static_cast<uint32_t>(in.operators[op].atdec_60) << 8) & 0x0000FF00) //AtDec
| ((static_cast<uint32_t>(in.operators[op].avekf_20) << 0) & 0x000000FF); //AVEKM
- ins.op[slt].carrier_40 = in.operators[op].ksl_l_40;//KSLL
+ ins.adl[slt].carrier_40 = in.operators[op].ksl_l_40;//KSLL
op++;
- ins.op[slt].modulator_E862 =
+ ins.adl[slt].modulator_E862 =
((static_cast<uint32_t>(in.operators[op].waveform_E0) << 24) & 0xFF000000) //WaveForm
| ((static_cast<uint32_t>(in.operators[op].susrel_80) << 16) & 0x00FF0000) //SusRel
| ((static_cast<uint32_t>(in.operators[op].atdec_60) << 8) & 0x0000FF00) //AtDec
| ((static_cast<uint32_t>(in.operators[op].avekf_20) << 0) & 0x000000FF); //AVEKM
- ins.op[slt].modulator_40 = in.operators[op].ksl_l_40;//KSLL
+ ins.adl[slt].modulator_40 = in.operators[op].ksl_l_40;//KSLL
+ }
+
+ ins.adl[0].finetune = static_cast<int8_t>(in.note_offset1);
+ ins.adl[0].feedconn = in.fb_conn1_C0;
+ if(!fourOps)
+ ins.adl[1] = ins.adl[0];
+ else
+ {
+ ins.adl[1].finetune = static_cast<int8_t>(in.note_offset2);
+ ins.adl[1].feedconn = in.fb_conn2_C0;
}
ins.ms_sound_kon = in.delay_on_ms;
ins.ms_sound_koff = in.delay_off_ms;
}
+template <class WOPLI>
+static void cvt_FMIns_to_generic(WOPLI &ins, const adlinsdata2 &in)
+{
+ ins.second_voice_detune = 0;
+ double voice2_fine_tune = in.voice2_fine_tune;
+ if(voice2_fine_tune != 0)
+ {
+ if(voice2_fine_tune > 0 && voice2_fine_tune <= 0.000025)
+ ins.second_voice_detune = 1;
+ else if(voice2_fine_tune < 0 && voice2_fine_tune >= -0.000025)
+ ins.second_voice_detune = -1;
+ else
+ {
+ long value = lround(voice2_fine_tune * (1000.0 / 15.625));
+ value = (value < -128) ? -128 : value;
+ value = (value > +127) ? +127 : value;
+ ins.second_voice_detune = static_cast<int8_t>(value);
+ }
+ }
+
+ ins.percussion_key_number = in.tone;
+ bool fourOps = (in.flags & adlinsdata::Flag_Pseudo4op) || in.adl[0] != in.adl[1];
+ ins.inst_flags = fourOps ? WOPL_Ins_4op : 0;
+ ins.inst_flags|= (in.flags & adlinsdata::Flag_Pseudo4op) ? WOPL_Ins_Pseudo4op : 0;
+ ins.inst_flags|= (in.flags & adlinsdata::Flag_NoSound) ? WOPL_Ins_IsBlank : 0;
+
+ for(size_t op = 0, slt = 0; op < static_cast<size_t>(fourOps ? 4 : 2); op++, slt++)
+ {
+ ins.operators[op].waveform_E0 = static_cast<uint8_t>(in.adl[slt].carrier_E862 >> 24);
+ ins.operators[op].susrel_80 = static_cast<uint8_t>(in.adl[slt].carrier_E862 >> 16);
+ ins.operators[op].atdec_60 = static_cast<uint8_t>(in.adl[slt].carrier_E862 >> 8);
+ ins.operators[op].avekf_20 = static_cast<uint8_t>(in.adl[slt].carrier_E862 >> 0);
+ ins.operators[op].ksl_l_40 = in.adl[slt].carrier_40;
+
+ op++;
+ ins.operators[op].waveform_E0 = static_cast<uint8_t>(in.adl[slt].carrier_E862 >> 24);
+ ins.operators[op].susrel_80 = static_cast<uint8_t>(in.adl[slt].carrier_E862 >> 16);
+ ins.operators[op].atdec_60 = static_cast<uint8_t>(in.adl[slt].carrier_E862 >> 8);
+ ins.operators[op].avekf_20 = static_cast<uint8_t>(in.adl[slt].carrier_E862 >> 0);
+ ins.operators[op].ksl_l_40 = in.adl[slt].carrier_40;
+ }
+
+ ins.note_offset1 = in.adl[0].finetune;
+ ins.fb_conn1_C0 = in.adl[0].feedconn;
+ if(!fourOps)
+ {
+ ins.operators[2] = ins.operators[0];
+ ins.operators[3] = ins.operators[1];
+ }
+ else
+ {
+ ins.note_offset2 = in.adl[1].finetune;
+ ins.fb_conn2_C0 = in.adl[1].feedconn;
+ }
+
+ ins.delay_on_ms = in.ms_sound_kon;
+ ins.delay_off_ms = in.ms_sound_koff;
+}
+
+void cvt_ADLI_to_FMIns(adlinsdata2 &ins, const ADL_Instrument &in)
+{
+ return cvt_generic_to_FMIns(ins, in);
+}
+
+void cvt_FMIns_to_ADLI(ADL_Instrument &ins, const adlinsdata2 &in)
+{
+ cvt_FMIns_to_generic(ins, in);
+}
+
bool MIDIplay::LoadBank(MIDIplay::fileReader &fr)
{
int err = 0;
@@ -187,54 +250,41 @@ bool MIDIplay::LoadBank(MIDIplay::fileReader &fr)
}
}
- m_setup.HighTremoloMode = (wopl->opl_flags & WOPL_FLAG_DEEP_TREMOLO) != 0;
- m_setup.HighVibratoMode = (wopl->opl_flags & WOPL_FLAG_DEEP_VIBRATO) != 0;
- m_setup.VolumeModel = wopl->volume_model;
-
- /* TODO: Avoid memory reallocation in nearest future! */
- opl.dynamic_melodic_banks.clear();
- opl.dynamic_percussion_banks.clear();
+ opl.dynamic_bank_setup.adLibPercussions = false;
+ opl.dynamic_bank_setup.scaleModulators = false;
+ opl.dynamic_bank_setup.deepTremolo = (wopl->opl_flags & WOPL_FLAG_DEEP_TREMOLO) != 0;
+ opl.dynamic_bank_setup.deepVibrato = (wopl->opl_flags & WOPL_FLAG_DEEP_VIBRATO) != 0;
+ opl.dynamic_bank_setup.volumeModel = wopl->volume_model;
+ m_setup.HighTremoloMode = -1;
+ m_setup.HighVibratoMode = -1;
+ m_setup.VolumeModel = ADLMIDI_VolumeModel_AUTO;
opl.setEmbeddedBank(m_setup.AdlBank);
- OPL3::BankMap *slots_banks[2] = { &opl.dynamic_melodic_banks, &opl.dynamic_percussion_banks};
uint16_t slots_counts[2] = {wopl->banks_count_melodic, wopl->banks_count_percussion};
WOPLBank *slots_src_ins[2] = { wopl->banks_melodic, wopl->banks_percussive };
- for(int ss = 0; ss < 2; ss++)
+ for(unsigned ss = 0; ss < 2; ss++)
{
- for(int i = 0; i < slots_counts[ss]; i++)
+ for(unsigned i = 0; i < slots_counts[ss]; i++)
{
- uint16_t bank = (slots_src_ins[ss][i].bank_midi_msb * 256) + slots_src_ins[ss][i].bank_midi_lsb;
- size_t offset = slots_banks[ss]->size();
- (*slots_banks[ss])[bank] = offset;
-
+ unsigned bankno =
+ (slots_src_ins[ss][i].bank_midi_msb * 256) +
+ slots_src_ins[ss][i].bank_midi_lsb +
+ (ss ? OPL3::PercussionTag : 0);
+ OPL3::Bank &bank = opl.dynamic_banks[bankno];
for(int j = 0; j < 128; j++)
{
- WOPL_Inst ins;
- std::memset(&ins, 0, sizeof(WOPL_Inst));
+ adlinsdata2 &ins = bank.ins[j];
+ std::memset(&ins, 0, sizeof(adlinsdata2));
WOPLInstrument &inIns = slots_src_ins[ss][i].ins[j];
-
- cvt_WOPLI_to_FMIns(ins, inIns);
-
- ins.adlins.ms_sound_kon = ins.ms_sound_kon;
- ins.adlins.ms_sound_koff = ins.ms_sound_koff;
- ins.adlins.adlno1 = static_cast<uint16_t>(opl.dynamic_instruments.size() | opl.DynamicInstrumentTag);
- opl.dynamic_instruments.push_back(ins.op[0]);
- ins.adlins.adlno2 = ins.adlins.adlno1;
- if(ins.fourOps)
- {
- ins.adlins.adlno2 = static_cast<uint16_t>(opl.dynamic_instruments.size() | opl.DynamicInstrumentTag);
- opl.dynamic_instruments.push_back(ins.op[1]);
- }
- opl.dynamic_metainstruments.push_back(ins.adlins);
+ cvt_generic_to_FMIns(ins, inIns);
}
}
}
opl.AdlBank = ~0u; // Use dynamic banks!
//Percussion offset is count of instruments multipled to count of melodic banks
- opl.dynamic_percussion_offset = 128 * wopl->banks_count_melodic;
applySetup();
WOPL_Free(wopl);
@@ -268,7 +318,7 @@ bool MIDIplay::LoadMIDI(MIDIplay::fileReader &fr)
errorString.clear();
#ifdef DISABLE_EMBEDDED_BANKS
- if((opl.AdlBank != ~0u) || (opl.dynamic_metainstruments.size() < 256))
+ if((opl.AdlBank != ~0u) || opl.dynamic_banks.empty())
{
errorStringOut = "Bank is not set! Please load any instruments bank by using of adl_openBankFile() or adl_openBankData() functions!";
return false;
@@ -392,8 +442,7 @@ riffskip:
#endif //ADLMIDI_DISABLE_XMI_SUPPORT
else if(std::memcmp(HeaderBuf, "CTMF", 4) == 0)
{
- opl.dynamic_instruments.clear();
- opl.dynamic_metainstruments.clear();
+ opl.dynamic_banks.clear();
// Creative Music Format (CMF).
// When playing CTMF files, use the following commandline:
// adlmidi song8.ctmf -p -v 1 1 0
@@ -415,13 +464,19 @@ riffskip:
//std::printf("%u instruments\n", ins_count);
for(unsigned i = 0; i < ins_count; ++i)
{
+ unsigned bank = i / 256;
+ bank = (bank & 127) + ((bank >> 7) << 8);
+ if(bank > 127 + (127 << 8))
+ break;
+ bank += (i % 256 < 128) ? 0 : OPL3::PercussionTag;
+
unsigned char InsData[16];
fr.read(InsData, 1, 16);
/*std::printf("Ins %3u: %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X\n",
i, InsData[0],InsData[1],InsData[2],InsData[3], InsData[4],InsData[5],InsData[6],InsData[7],
InsData[8],InsData[9],InsData[10],InsData[11], InsData[12],InsData[13],InsData[14],InsData[15]);*/
- struct adldata adl;
- struct adlinsdata adlins;
+ adlinsdata2 &adlins = opl.dynamic_banks[bank].ins[i % 128];
+ adldata adl;
adl.modulator_E862 =
((static_cast<uint32_t>(InsData[8] & 0x07) << 24) & 0xFF000000) //WaveForm
| ((static_cast<uint32_t>(InsData[6]) << 16) & 0x00FF0000) //Sustain/Release
@@ -436,15 +491,13 @@ riffskip:
adl.carrier_40 = InsData[3];
adl.feedconn = InsData[10] & 0x0F;
adl.finetune = 0;
- adlins.adlno1 = static_cast<uint16_t>(opl.dynamic_instruments.size() | opl.DynamicInstrumentTag);
- adlins.adlno2 = adlins.adlno1;
+ adlins.adl[0] = adl;
+ adlins.adl[1] = adl;
adlins.ms_sound_kon = 1000;
adlins.ms_sound_koff = 500;
adlins.tone = 0;
adlins.flags = 0;
adlins.voice2_fine_tune = 0.0;
- opl.dynamic_metainstruments.push_back(adlins);
- opl.dynamic_instruments.push_back(adl);
}
fr.seeku(mus_start, SEEK_SET);
@@ -452,10 +505,9 @@ riffskip:
DeltaTicks = (size_t)ticks;
opl.AdlBank = ~0u; // Ignore AdlBank number, use dynamic banks instead
//std::printf("CMF deltas %u ticks %u, basictempo = %u\n", deltas, ticks, basictempo);
- opl.LogarithmicVolumes = true;
opl.AdlPercussionMode = true;
opl.m_musicMode = OPL3::MODE_CMF;
- opl.m_volumeScale = OPL3::VOLUME_CMF;
+ opl.m_volumeScale = OPL3::VOLUME_NATIVE;
}
else
{
@@ -470,10 +522,9 @@ riffskip:
fr.seek(0x7D, SEEK_SET);
TrackCount = 1;
DeltaTicks = 60;
- opl.LogarithmicVolumes = true;
//opl.CartoonersVolumes = true;
opl.m_musicMode = OPL3::MODE_RSXX;
- opl.m_volumeScale = OPL3::VOLUME_CMF;
+ opl.m_volumeScale = OPL3::VOLUME_NATIVE;
}
}
@@ -531,11 +582,11 @@ riffskip:
TrackData.clear();
TrackData.resize(TrackCount, std::vector<uint8_t>());
- //CurrentPosition.track.clear();
- //CurrentPosition.track.resize(TrackCount);
InvDeltaTicks = fraction<uint64_t>(1, 1000000l * static_cast<uint64_t>(DeltaTicks));
- //Tempo = 1000000l * InvDeltaTicks;
- Tempo = fraction<uint64_t>(1, static_cast<uint64_t>(DeltaTicks));
+ if(is_CMF || is_RSXX)
+ Tempo = fraction<uint64_t>(1, static_cast<uint64_t>(DeltaTicks));
+ else
+ Tempo = fraction<uint64_t>(1, static_cast<uint64_t>(DeltaTicks) * 2);
static const unsigned char EndTag[4] = {0xFF, 0x2F, 0x00, 0x00};
size_t totalGotten = 0;
diff --git a/src/adlmidi_midiplay.cpp b/src/adlmidi_midiplay.cpp
index 7c40fa0..0623ce7 100644
--- a/src/adlmidi_midiplay.cpp
+++ b/src/adlmidi_midiplay.cpp
@@ -25,7 +25,7 @@
// Mapping from MIDI volume level to OPL level value.
-static const uint32_t DMX_volume_mapping_table[] =
+static const uint8_t DMX_volume_mapping_table[128] =
{
0, 1, 3, 5, 6, 8, 10, 11,
13, 14, 16, 17, 19, 20, 22, 23,
@@ -43,23 +43,6 @@ static const uint32_t DMX_volume_mapping_table[] =
116, 117, 117, 118, 118, 119, 119, 120,
120, 121, 121, 122, 122, 123, 123, 123,
124, 124, 125, 125, 126, 126, 127, 127,
- //Protection entries to avoid crash if value more than 127
- 127, 127, 127, 127, 127, 127, 127, 127,
- 127, 127, 127, 127, 127, 127, 127, 127,
- 127, 127, 127, 127, 127, 127, 127, 127,
- 127, 127, 127, 127, 127, 127, 127, 127,
- 127, 127, 127, 127, 127, 127, 127, 127,
- 127, 127, 127, 127, 127, 127, 127, 127,
- 127, 127, 127, 127, 127, 127, 127, 127,
- 127, 127, 127, 127, 127, 127, 127, 127,
- 127, 127, 127, 127, 127, 127, 127, 127,
- 127, 127, 127, 127, 127, 127, 127, 127,
- 127, 127, 127, 127, 127, 127, 127, 127,
- 127, 127, 127, 127, 127, 127, 127, 127,
- 127, 127, 127, 127, 127, 127, 127, 127,
- 127, 127, 127, 127, 127, 127, 127, 127,
- 127, 127, 127, 127, 127, 127, 127, 127,
- 127, 127, 127, 127, 127, 127, 127, 127,
};
static const uint8_t W9X_volume_mapping_table[32] =
@@ -117,17 +100,16 @@ inline bool isXgPercChannel(uint8_t msb, uint8_t lsb)
void MIDIplay::AdlChannel::AddAge(int64_t ms)
{
+ const int64_t neg = static_cast<int64_t>(-0x1FFFFFFFl);
if(users_empty())
- koff_time_until_neglible =
- std::max(int64_t(koff_time_until_neglible - ms), static_cast<int64_t>(-0x1FFFFFFFl));
+ koff_time_until_neglible = std::max(int64_t(koff_time_until_neglible - ms), neg);
else
{
koff_time_until_neglible = 0;
-
for(LocationData *i = users_first; i; i = i->next)
{
- i->kon_time_until_neglible =
- std::max(i->kon_time_until_neglible - ms, static_cast<int64_t>(-0x1FFFFFFFl));
+ if(!i->fixed_sustain)
+ i->kon_time_until_neglible = std::max(i->kon_time_until_neglible - ms, neg);
i->vibdelay += ms;
}
}
@@ -222,7 +204,9 @@ void MIDIplay::MidiTrackRow::sortEvents(bool *noteStates)
j = noteOffs.erase(j);
markAsOn.erase(note_i);
continue;
- } else {
+ }
+ else
+ {
//When same row has many note-offs on same row
//that means a zero-length note follows previous note
//it must be shuted down
@@ -451,17 +435,17 @@ bool MIDIplay::buildTrackData()
if(track.empty())
continue;//Empty track is useless!
- #ifdef DEBUG_TIME_CALCULATION
+#ifdef DEBUG_TIME_CALCULATION
std::fprintf(stdout, "\n============Track %" PRIuPTR "=============\n", tk);
std::fflush(stdout);
- #endif
+#endif
MidiTrackRow *posPrev = &(*(track.begin()));//First element
for(MidiTrackQueue::iterator it = track.begin(); it != track.end(); it++)
{
- #ifdef DEBUG_TIME_CALCULATION
+#ifdef DEBUG_TIME_CALCULATION
bool tempoChanged = false;
- #endif
+#endif
MidiTrackRow &pos = *it;
if((posPrev != &pos) && //Skip first event
(!tempos.empty()) && //Only when in-track tempo events are available
@@ -507,9 +491,9 @@ bool MIDIplay::buildTrackData()
//Apply next tempo
currentTempo = points[j].tempo;
- #ifdef DEBUG_TIME_CALCULATION
+#ifdef DEBUG_TIME_CALCULATION
tempoChanged = true;
- #endif
+#endif
}
//Then calculate time between last tempo change point and end point
TempoChangePoint tailTempo = points.back();
@@ -552,10 +536,10 @@ bool MIDIplay::buildTrackData()
loopEndTime = pos.time;
}
- #ifdef DEBUG_TIME_CALCULATION
+#ifdef DEBUG_TIME_CALCULATION
std::fprintf(stdout, "= %10" PRId64 " = %10f%s\n", pos.absPos, pos.time, tempoChanged ? " <----TEMPO CHANGED" : "");
std::fflush(stdout);
- #endif
+#endif
abs_position += pos.delay;
posPrev = &pos;
@@ -575,7 +559,7 @@ bool MIDIplay::buildTrackData()
//Resolve "hell of all times" of too short drum notes:
//move too short percussion note-offs far far away as possible
/********************************************************************************/
- #if 1 //Use this to record WAVEs for comparison before/after implementing of this
+#if 1 //Use this to record WAVEs for comparison before/after implementing of this
if(opl.m_musicMode == OPL3::MODE_MIDI)//Percussion fix is needed for MIDI only, not for IMF/RSXX or CMF
{
//! Minimal real time in seconds
@@ -625,8 +609,8 @@ bool MIDIplay::buildTrackData()
}
bool percussion = (et->channel == 9) ||
- banks[et->channel] == 0x7E00 || //XG SFX1/SFX2 channel (16128 signed decimal)
- banks[et->channel] == 0x7F00; //XG Percussion channel (16256 signed decimal)
+ banks[et->channel] == 0x7E00 || //XG SFX1/SFX2 channel (16128 signed decimal)
+ banks[et->channel] == 0x7F00; //XG Percussion channel (16256 signed decimal)
if(!percussion)
continue;
@@ -687,7 +671,7 @@ bool MIDIplay::buildTrackData()
#undef DRUM_NOTE_MIN_TIME
#undef DRUM_NOTE_MIN_TICKS
}
- #endif
+#endif
return true;
}
@@ -695,7 +679,8 @@ bool MIDIplay::buildTrackData()
MIDIplay::MIDIplay(unsigned long sampleRate):
- cmf_percussion_mode(false)
+ cmf_percussion_mode(false),
+ m_arpeggioCounter(0)
#ifndef ADLMIDI_DISABLE_MIDI_SEQUENCER
, fullSongTimeLength(0.0),
postSongWaitDelay(1.0),
@@ -740,16 +725,28 @@ MIDIplay::MIDIplay(unsigned long sampleRate):
void MIDIplay::applySetup()
{
m_setup.tick_skip_samples_delay = 0;
- opl.HighTremoloMode = m_setup.HighTremoloMode == -1 ? adlbanksetup[m_setup.AdlBank].deepTremolo : (bool)m_setup.HighTremoloMode;
- opl.HighVibratoMode = m_setup.HighVibratoMode == -1 ? adlbanksetup[m_setup.AdlBank].deepVibrato : (bool)m_setup.HighVibratoMode;
- opl.AdlPercussionMode = m_setup.AdlPercussionMode == -1 ? adlbanksetup[m_setup.AdlBank].adLibPercussions : (bool)m_setup.AdlPercussionMode;
- opl.ScaleModulators = m_setup.ScaleModulators == -1 ? adlbanksetup[m_setup.AdlBank].scaleModulators : (bool)m_setup.ScaleModulators;
- opl.LogarithmicVolumes = m_setup.LogarithmicVolumes;
- //opl.CartoonersVolumes = false;
+
+ if(opl.AdlBank != ~0u)
+ opl.dynamic_bank_setup = adlbanksetup[m_setup.AdlBank];
+
+ opl.HighTremoloMode = m_setup.HighTremoloMode < 0 ?
+ opl.dynamic_bank_setup.deepTremolo :
+ (m_setup.HighTremoloMode != 0);
+ opl.HighVibratoMode = m_setup.HighVibratoMode < 0 ?
+ opl.dynamic_bank_setup.deepVibrato :
+ (m_setup.HighVibratoMode != 0);
+ opl.AdlPercussionMode = m_setup.AdlPercussionMode < 0 ?
+ opl.dynamic_bank_setup.adLibPercussions :
+ (m_setup.AdlPercussionMode != 0);
+ opl.ScaleModulators = m_setup.ScaleModulators < 0 ?
+ opl.dynamic_bank_setup.scaleModulators :
+ (m_setup.ScaleModulators != 0);
+ if(m_setup.LogarithmicVolumes)
+ opl.ChangeVolumeRangesModel(ADLMIDI_VolumeModel_NativeOPL3);
opl.m_musicMode = OPL3::MODE_MIDI;
opl.ChangeVolumeRangesModel(static_cast<ADLMIDI_VolumeModels>(m_setup.VolumeModel));
if(m_setup.VolumeModel == ADLMIDI_VolumeModel_AUTO)//Use bank default volume model
- opl.m_volumeScale = (OPL3::VolumesScale)adlbanksetup[m_setup.AdlBank].volumeModel;
+ opl.m_volumeScale = (OPL3::VolumesScale)opl.dynamic_bank_setup.volumeModel;
opl.NumCards = m_setup.NumCards;
opl.NumFourOps = m_setup.NumFourOps;
@@ -758,6 +755,9 @@ void MIDIplay::applySetup()
opl.Reset(m_setup.emulator, m_setup.PCM_RATE);
ch.clear();
ch.resize(opl.NumChannels);
+
+ // Reset the arpeggio counter
+ m_arpeggioCounter = 0;
}
#ifndef ADLMIDI_DISABLE_MIDI_SEQUENCER
@@ -796,9 +796,9 @@ uint64_t MIDIplay::ReadVarLenEx(uint8_t **ptr, uint8_t *end, bool &ok)
double MIDIplay::Tick(double s, double granularity)
{
s *= tempoMultiplier;
- #ifdef ENABLE_BEGIN_SILENCE_SKIPPING
+#ifdef ENABLE_BEGIN_SILENCE_SKIPPING
if(CurrentPositionNew.began)
- #endif
+#endif
CurrentPositionNew.wait -= s;
CurrentPositionNew.absTimePosition += s;
@@ -827,7 +827,7 @@ double MIDIplay::Tick(double s, double granularity)
return CurrentPositionNew.wait;
}
-#endif
+#endif /* ADLMIDI_DISABLE_MIDI_SEQUENCER */
void MIDIplay::TickIteratos(double s)
{
@@ -944,7 +944,7 @@ void MIDIplay::setTempo(double tempo)
{
tempoMultiplier = tempo;
}
-#endif
+#endif /* ADLMIDI_DISABLE_MIDI_SEQUENCER */
void MIDIplay::realTime_ResetState()
{
@@ -964,6 +964,9 @@ void MIDIplay::realTime_ResetState()
bool MIDIplay::realTime_NoteOn(uint8_t channel, uint8_t note, uint8_t velocity)
{
+ if(note >= 128)
+ note = 127;
+
if((opl.m_musicMode == OPL3::MODE_RSXX) && (velocity != 0))
{
// Check if this is just a note after-touch
@@ -986,14 +989,16 @@ bool MIDIplay::realTime_NoteOn(uint8_t channel, uint8_t note, uint8_t velocity)
if(velocity == 0)
return false;
- size_t midiins = Ch[channel].patch;
- bool isPercussion = (channel % 16 == 9);
+ MIDIchannel &midiChan = Ch[channel];
+
+ size_t midiins = midiChan.patch;
+ bool isPercussion = (channel % 16 == 9);
bool isXgPercussion = false;
uint16_t bank = 0;
- if(Ch[channel].bank_msb || Ch[channel].bank_lsb)
+ if(midiChan.bank_msb || midiChan.bank_lsb)
{
- bank = (uint16_t(Ch[channel].bank_msb) * 256) + uint16_t(Ch[channel].bank_lsb);
+ bank = (uint16_t(midiChan.bank_msb) * 256) + uint16_t(midiChan.bank_lsb);
//0x7E00 - XG SFX1/SFX2 channel (16128 signed decimal)
//0x7F00 - XG Percussion channel (16256 signed decimal)
if(bank == 0x7E00 || bank == 0x7F00)
@@ -1001,7 +1006,7 @@ bool MIDIplay::realTime_NoteOn(uint8_t channel, uint8_t note, uint8_t velocity)
//Let XG SFX1/SFX2 bank will have LSB==1 (128...255 range in WOPN file)
//Let XG Percussion bank will use (0...127 range in WOPN file)
bank = (uint16_t)midiins + ((bank == 0x7E00) ? 128 : 0); // MIDI instrument defines the patch
- midiins = opl.dynamic_percussion_offset + note; // Percussion instrument
+ midiins = note; // Percussion instrument
isXgPercussion = true;
isPercussion = false;
}
@@ -1010,43 +1015,43 @@ bool MIDIplay::realTime_NoteOn(uint8_t channel, uint8_t note, uint8_t velocity)
if(isPercussion)
{
bank = (uint16_t)midiins; // MIDI instrument defines the patch
- midiins = opl.dynamic_percussion_offset + note; // Percussion instrument
+ midiins = note; // Percussion instrument
}
+ if(isPercussion || isXgPercussion)
+ bank += OPL3::PercussionTag;
+
+ const adlinsdata2 *ains = &OPL3::emptyInstrument;
//Set bank bank
- if(bank > 0)
+ const OPL3::Bank *bnk = NULL;
+ if((bank & ~(uint16_t)OPL3::PercussionTag) > 0)
{
- if(isPercussion || isXgPercussion)
- {
- OPL3::BankMap::iterator b = opl.dynamic_percussion_banks.find(bank);
- if(b != opl.dynamic_percussion_banks.end())
- midiins += b->second * 128;
- else
- if(hooks.onDebugMessage)
- {
- if(!caugh_missing_banks_melodic.count(bank))
- {
- hooks.onDebugMessage(hooks.onDebugMessage_userData, "[%i] Playing missing percussion MIDI bank %i (patch %i)", channel, bank, midiins);
- caugh_missing_banks_melodic.insert(bank);
- }
- }
- }
- else
+ OPL3::BankMap::iterator b = opl.dynamic_banks.find(bank);
+ if(b != opl.dynamic_banks.end())
+ bnk = &b->second;
+
+ if(bnk)
+ ains = &bnk->ins[midiins];
+ else if(hooks.onDebugMessage)
{
- OPL3::BankMap::iterator b = opl.dynamic_melodic_banks.find(bank);
- if(b != opl.dynamic_melodic_banks.end())
- midiins += b->second * 128;
- else
- if(hooks.onDebugMessage)
- {
- if(!caugh_missing_banks_percussion.count(bank))
- {
- hooks.onDebugMessage(hooks.onDebugMessage_userData, "[%i] Playing missing melodic MIDI bank %i (patch %i)", channel, bank, midiins);
- caugh_missing_banks_percussion.insert(bank);
- }
- }
+ std::set<uint16_t> &missing = (isPercussion || isXgPercussion) ?
+ caugh_missing_banks_percussion : caugh_missing_banks_melodic;
+ const char *text = (isPercussion || isXgPercussion) ?
+ "percussion" : "melodic";
+ if(missing.insert(bank).second)
+ hooks.onDebugMessage(hooks.onDebugMessage_userData, "[%i] Playing missing %s MIDI bank %i (patch %i)", channel, text, bank, midiins);
}
}
+ //Or fall back to first bank
+ if(ains->flags & adlinsdata::Flag_NoSound)
+ {
+ OPL3::BankMap::iterator b = opl.dynamic_banks.find(bank & OPL3::PercussionTag);
+ if(b != opl.dynamic_banks.end())
+ bnk = &b->second;
+
+ if(bnk)
+ ains = &bnk->ins[midiins];
+ }
/*
if(MidCh%16 == 9 || (midiins != 32 && midiins != 46 && midiins != 48 && midiins != 50))
@@ -1057,8 +1062,6 @@ bool MIDIplay::realTime_NoteOn(uint8_t channel, uint8_t note, uint8_t velocity)
//if(midiins == 56) vol = vol*6/10; // HACK
//int meta = banks[opl.AdlBank][midiins];
- size_t meta = opl.GetAdlMetaNumber(midiins);
- const adlinsdata *ains = &opl.GetAdlMetaIns(meta);
int16_t tone = note;
if(!isPercussion && !isXgPercussion && (bank > 0)) // For non-zero banks
@@ -1067,23 +1070,18 @@ bool MIDIplay::realTime_NoteOn(uint8_t channel, uint8_t note, uint8_t velocity)
{
if(hooks.onDebugMessage)
{
- if(!caugh_missing_instruments.count(static_cast<uint8_t>(midiins)))
- {
+ if(caugh_missing_instruments.insert(static_cast<uint8_t>(midiins)).second)
hooks.onDebugMessage(hooks.onDebugMessage_userData, "[%i] Caugh a blank instrument %i (offset %i) in the MIDI bank %u", channel, Ch[channel].patch, midiins, bank);
- caugh_missing_instruments.insert(static_cast<uint8_t>(midiins));
- }
}
bank = 0;
- midiins = Ch[channel].patch;
- meta = opl.GetAdlMetaNumber(midiins);
- ains = &opl.GetAdlMetaIns(meta);
+ midiins = midiChan.patch;
}
}
if(ains->tone)
{
- /*if(ains.tone < 20)
- tone += ains.tone;
+ /*if(ains->tone < 20)
+ tone += ains->tone;
else*/
if(ains->tone < 128)
tone = ains->tone;
@@ -1091,24 +1089,32 @@ bool MIDIplay::realTime_NoteOn(uint8_t channel, uint8_t note, uint8_t velocity)
tone -= ains->tone - 128;
}
- //uint16_t i[2] = { ains.adlno1, ains.adlno2 };
+ //uint16_t i[2] = { ains->adlno1, ains->adlno2 };
bool pseudo_4op = ains->flags & adlinsdata::Flag_Pseudo4op;
+#ifndef __WATCOMC__
MIDIchannel::NoteInfo::Phys voices[MIDIchannel::NoteInfo::MaxNumPhysChans] =
{
- {0, ains->adlno1, false},
- {0, ains->adlno2, pseudo_4op}
+ {0, ains->adl[0], false},
+ {0, ains->adl[1], pseudo_4op}
};
+#else /* Unfortunately, WatCom can't brace-initialize structure that incluses structure fields */
+ MIDIchannel::NoteInfo::Phys voices[MIDIchannel::NoteInfo::MaxNumPhysChans];
+ voices[0].chip_chan = 0;
+ voices[0].ains = ains->adl[0];
+ voices[0].pseudo4op = false;
+ voices[1].chip_chan = 0;
+ voices[1].ains = ains->adl[1];
+ voices[1].pseudo4op = pseudo_4op;
+#endif /* __WATCOMC__ */
if((opl.AdlPercussionMode == 1) && PercussionMap[midiins & 0xFF])
voices[1] = voices[0];//i[1] = i[0];
if(hooks.onDebugMessage)
{
- if(!caugh_missing_instruments.count(static_cast<uint8_t>(midiins)) && (ains->flags & adlinsdata::Flag_NoSound))
- {
+ if((ains->flags & adlinsdata::Flag_NoSound) &&
+ caugh_missing_instruments.insert(static_cast<uint8_t>(midiins)).second)
hooks.onDebugMessage(hooks.onDebugMessage_userData, "[%i] Playing missing instrument %i", channel, midiins);
- caugh_missing_instruments.insert(static_cast<uint8_t>(midiins));
- }
}
// Allocate AdLib channel (the physical sound channel for the note)
@@ -1132,7 +1138,7 @@ bool MIDIplay::realTime_NoteOn(uint8_t channel, uint8_t note, uint8_t velocity)
if(ccount == 1 && static_cast<int32_t>(a) == adlchannel[0]) continue;
// ^ Don't use the same channel for primary&secondary
- if(voices[0].insId == voices[1].insId || pseudo_4op/*i[0] == i[1] || pseudo_4op*/)
+ if(voices[0].ains == voices[1].ains || pseudo_4op/*i[0] == i[1] || pseudo_4op*/)
{
// Only use regular channels
uint8_t expected_mode = 0;
@@ -1177,7 +1183,7 @@ bool MIDIplay::realTime_NoteOn(uint8_t channel, uint8_t note, uint8_t velocity)
if(hooks.onDebugMessage)
hooks.onDebugMessage(hooks.onDebugMessage_userData,
"ignored unplaceable note [bank %i, inst %i, note %i, MIDI channel %i]",
- bank, Ch[channel].patch, note, channel);
+ bank, midiChan.patch, note, channel);
continue; // Could not play this note. Ignore it.
}
@@ -1196,11 +1202,12 @@ bool MIDIplay::realTime_NoteOn(uint8_t channel, uint8_t note, uint8_t velocity)
// Allocate active note for MIDI channel
std::pair<MIDIchannel::activenoteiterator, bool>
- ir = Ch[channel].activenotes_insert(note);
+ ir = midiChan.activenotes_insert(note);
ir.first->vol = velocity;
+ ir.first->vibrato = midiChan.noteAftertouch[note];
ir.first->tone = tone;
ir.first->midiins = midiins;
- ir.first->insmeta = meta;
+ ir.first->ains = ains;
ir.first->chip_channels_count = 0;
for(unsigned ccount = 0; ccount < MIDIchannel::NoteInfo::MaxNumPhysChans; ++ccount)
@@ -1224,29 +1231,28 @@ void MIDIplay::realTime_NoteOff(uint8_t channel, uint8_t note)
void MIDIplay::realTime_NoteAfterTouch(uint8_t channel, uint8_t note, uint8_t atVal)
{
channel = channel % 16;
- MIDIchannel::activenoteiterator
- i = Ch[channel].activenotes_find(note);
- if(!i)
+ MIDIchannel &chan = Ch[channel];
+ MIDIchannel::activenoteiterator i = Ch[channel].activenotes_find(note);
+ if(i)
{
- // Ignore touch if note is not active
- return;
+ i->vibrato = atVal;
+ }
+
+ uint8_t oldAtVal = chan.noteAftertouch[note % 128];
+ if(atVal != oldAtVal)
+ {
+ chan.noteAftertouch[note % 128] = atVal;
+ bool inUse = atVal != 0;
+ for(unsigned n = 0; !inUse && n < 128; ++n)
+ inUse = chan.noteAftertouch[n] != 0;
+ chan.noteAfterTouchInUse = inUse;
}
- i->vol = 127 - atVal;
- NoteUpdate(channel, i, Upd_Volume);
}
void MIDIplay::realTime_ChannelAfterTouch(uint8_t channel, uint8_t atVal)
{
- // TODO: Verify, is this correct action?
channel = channel % 16;
- for(MIDIchannel::activenoteiterator
- i = Ch[channel].activenotes_begin(); i; ++i)
- {
- // Set this pressure to all active notes on the channel
- i->vol = 127 - atVal;
- }
-
- NoteUpdate_All(channel, Upd_Volume);
+ Ch[channel].aftertouch = atVal;
}
void MIDIplay::realTime_Controller(uint8_t channel, uint8_t type, uint8_t value)
@@ -1393,14 +1399,14 @@ void MIDIplay::realTime_PatchChange(uint8_t channel, uint8_t patch)
void MIDIplay::realTime_PitchBend(uint8_t channel, uint16_t pitch)
{
channel = channel % 16;
- Ch[channel].bend = (uint32_t(pitch) - 8192) * Ch[channel].bendsense;
+ Ch[channel].bend = int(pitch) - 8192;
NoteUpdate_All(channel, Upd_Pitch);
}
void MIDIplay::realTime_PitchBend(uint8_t channel, uint8_t msb, uint8_t lsb)
{
channel = channel % 16;
- Ch[channel].bend = (int(lsb) + int(msb) * 128 - 8192) * Ch[channel].bendsense;
+ Ch[channel].bend = int(lsb) + int(msb) * 128 - 8192;
NoteUpdate_All(channel, Upd_Pitch);
}
@@ -1438,9 +1444,8 @@ void MIDIplay::NoteUpdate(uint16_t MidCh,
MIDIchannel::NoteInfo &info = *i;
const int16_t tone = info.tone;
const uint8_t vol = info.vol;
- const int midiins = info.midiins;
- const size_t insmeta = info.insmeta;
- const adlinsdata &ains = opl.GetAdlMetaIns(insmeta);
+ const int midiins = static_cast<int>(info.midiins);
+ const adlinsdata2 &ains = *info.ains;
AdlChannel::Location my_loc;
my_loc.MidCh = MidCh;
my_loc.note = info.note;
@@ -1454,11 +1459,13 @@ void MIDIplay::NoteUpdate(uint16_t MidCh,
if(props_mask & Upd_Patch)
{
- opl.Patch(c, ins.insId);
+ opl.Patch(c, ins.ains);
AdlChannel::LocationData *d = ch[c].users_find_or_create(my_loc);
- if(d) { // inserts if necessary
+ if(d) // inserts if necessary
+ {
d->sustained = false;
d->vibdelay = 0;
+ d->fixed_sustain = (ains.ms_sound_kon == static_cast<uint16_t>(adlNoteOnMaxTime));
d->kon_time_until_neglible = ains.ms_sound_kon;
d->ins = ins;
}
@@ -1492,7 +1499,9 @@ void MIDIplay::NoteUpdate(uint16_t MidCh,
{
opl.Touch_Real(c, 0);
ch[c].koff_time_until_neglible = 0;
- } else {
+ }
+ else
+ {
ch[c].koff_time_until_neglible = ains.ms_sound_koff;
}
}
@@ -1533,8 +1542,8 @@ void MIDIplay::NoteUpdate(uint16_t MidCh,
switch(opl.m_volumeScale)
{
+
case OPL3::VOLUME_Generic:
- case OPL3::VOLUME_CMF:
{
volume = vol * Ch[MidCh].volume * Ch[MidCh].expression;
@@ -1547,25 +1556,29 @@ void MIDIplay::NoteUpdate(uint16_t MidCh,
*/
//volume = (int)(volume * std::sqrt( (double) ch[c].users.size() ));
- if(opl.LogarithmicVolumes)
- volume = volume * 127 / (127 * 127 * 127) / 2;
- else
- {
- // The formula below: SOLVE(V=127^3 * 2^( (A-63.49999) / 8), A)
- volume = volume > 8725 ? static_cast<uint32_t>(std::log(static_cast<double>(volume)) * 11.541561 + (0.5 - 104.22845)) : 0;
- // The incorrect formula below: SOLVE(V=127^3 * (2^(A/63)-1), A)
- //opl.Touch_Real(c, volume>11210 ? 91.61112 * std::log(4.8819E-7*volume + 1.0)+0.5 : 0);
- }
+ // The formula below: SOLVE(V=127^3 * 2^( (A-63.49999) / 8), A)
+ volume = volume > 8725 ? static_cast<uint32_t>(std::log(static_cast<double>(volume)) * 11.541561 + (0.5 - 104.22845)) : 0;
+ // The incorrect formula below: SOLVE(V=127^3 * (2^(A/63)-1), A)
+ //opl.Touch_Real(c, volume>11210 ? 91.61112 * std::log(4.8819E-7*volume + 1.0)+0.5 : 0);
+
opl.Touch_Real(c, volume, brightness);
//opl.Touch(c, volume);
}
break;
+ case OPL3::VOLUME_NATIVE:
+ {
+ volume = vol * Ch[MidCh].volume * Ch[MidCh].expression;
+ volume = volume * 127 / (127 * 127 * 127) / 2;
+ opl.Touch_Real(c, volume, brightness);
+ }
+ break;
+
case OPL3::VOLUME_DMX:
{
volume = 2 * ((Ch[MidCh].volume * Ch[MidCh].expression) * 127 / 16129) + 1;
//volume = 2 * (Ch[MidCh].volume) + 1;
- volume = (DMX_volume_mapping_table[vol] * volume) >> 9;
+ volume = (DMX_volume_mapping_table[(vol < 128) ? vol : 127] * volume) >> 9;
opl.Touch_Real(c, volume, brightness);
}
break;
@@ -1610,26 +1623,29 @@ void MIDIplay::NoteUpdate(uint16_t MidCh,
// Don't bend a sustained note
if(!d || !d->sustained)
{
- double bend = Ch[MidCh].bend + opl.GetAdlIns(ins.insId).finetune;
+ double midibend = Ch[MidCh].bend * Ch[MidCh].bendsense;
+ double bend = midibend + ins.ains.finetune;
double phase = 0.0;
+ uint8_t vibrato = std::max(Ch[MidCh].vibrato, Ch[MidCh].aftertouch);
+ vibrato = std::max(vibrato, i->vibrato);
if((ains.flags & adlinsdata::Flag_Pseudo4op) && ins.pseudo4op)
{
phase = ains.voice2_fine_tune;//0.125; // Detune the note slightly (this is what Doom does)
}
- if(Ch[MidCh].vibrato && (!d || d->vibdelay >= Ch[MidCh].vibdelay))
- bend += Ch[MidCh].vibrato * Ch[MidCh].vibdepth * std::sin(Ch[MidCh].vibpos);
+ if(vibrato && (!d || d->vibdelay >= Ch[MidCh].vibdelay))
+ bend += static_cast<double>(vibrato) * Ch[MidCh].vibdepth * std::sin(Ch[MidCh].vibpos);
- #ifdef ADLMIDI_USE_DOSBOX_OPL
-#define BEND_COEFFICIENT 172.00093
- #else
-#define BEND_COEFFICIENT 172.4387
- #endif
- opl.NoteOn(c, BEND_COEFFICIENT * std::exp(0.057762265 * (tone + bend + phase)));
+#ifdef ADLMIDI_USE_DOSBOX_OPL
+# define BEND_COEFFICIENT 172.00093
+#else
+# define BEND_COEFFICIENT 172.4387
+#endif
+ opl.NoteOn(c, BEND_COEFFICIENT * std::exp(0.057762265 * (static_cast<double>(tone) + bend + phase)));
#undef BEND_COEFFICIENT
if(hooks.onNote)
- hooks.onNote(hooks.onNote_userData, c, tone, midiins, vol, Ch[MidCh].bend);
+ hooks.onNote(hooks.onNote_userData, c, tone, midiins, vol, midibend);
}
}
}
@@ -1650,9 +1666,9 @@ bool MIDIplay::ProcessEventsNew(bool isSeek)
const size_t TrackCount = CurrentPositionNew.track.size();
const PositionNew RowBeginPosition(CurrentPositionNew);
- #ifdef DEBUG_TIME_CALCULATION
+#ifdef DEBUG_TIME_CALCULATION
double maxTime = 0.0;
- #endif
+#endif
for(size_t tk = 0; tk < TrackCount; ++tk)
{
@@ -1670,10 +1686,10 @@ bool MIDIplay::ProcessEventsNew(bool isSeek)
for(size_t i = 0; i < track.pos->events.size(); i++)
{
const MidiEvent &evt = track.pos->events[i];
- #ifdef ENABLE_BEGIN_SILENCE_SKIPPING
+#ifdef ENABLE_BEGIN_SILENCE_SKIPPING
if(!CurrentPositionNew.began && (evt.type == MidiEvent::T_NOTEON))
CurrentPositionNew.began = true;
- #endif
+#endif
if(isSeek && (evt.type == MidiEvent::T_NOTEON))
continue;
HandleEvent(tk, evt, track.status);
@@ -1681,10 +1697,10 @@ bool MIDIplay::ProcessEventsNew(bool isSeek)
break;//Stop event handling on catching loopEnd event!
}
- #ifdef DEBUG_TIME_CALCULATION
+#ifdef DEBUG_TIME_CALCULATION
if(maxTime < track.pos->time)
maxTime = track.pos->time;
- #endif
+#endif
// Read next event time (unless the track just ended)
if(track.status >= 0)
{
@@ -1694,11 +1710,11 @@ bool MIDIplay::ProcessEventsNew(bool isSeek)
}
}
- #ifdef DEBUG_TIME_CALCULATION
+#ifdef DEBUG_TIME_CALCULATION
std::fprintf(stdout, " \r");
std::fprintf(stdout, "Time: %10f; Audio: %10f\r", maxTime, CurrentPositionNew.absTimePosition);
std::fflush(stdout);
- #endif
+#endif
// Find shortest delay from all track
uint64_t shortest = 0;
@@ -1722,9 +1738,9 @@ bool MIDIplay::ProcessEventsNew(bool isSeek)
fraction<uint64_t> t = shortest * Tempo;
- #ifdef ENABLE_BEGIN_SILENCE_SKIPPING
+#ifdef ENABLE_BEGIN_SILENCE_SKIPPING
if(CurrentPositionNew.began)
- #endif
+#endif
CurrentPositionNew.wait += t.value();
//if(shortest > 0) UI.PrintLn("Delay %ld (%g)", shortest, (double)t.valuel());
@@ -1750,9 +1766,7 @@ bool MIDIplay::ProcessEventsNew(bool isSeek)
return true;//Has events in queue
}
-#endif
-#ifndef ADLMIDI_DISABLE_MIDI_SEQUENCER
MIDIplay::MidiEvent MIDIplay::parseEvent(uint8_t **pptr, uint8_t *end, int &status)
{
uint8_t *&ptr = *pptr;
@@ -1800,6 +1814,14 @@ MIDIplay::MidiEvent MIDIplay::parseEvent(uint8_t **pptr, uint8_t *end, int &stat
evt.subtype = evtype;
evt.data.insert(evt.data.begin(), data.begin(), data.end());
+#if 0 /* Print all tempo events */
+ if(evt.subtype == MidiEvent::ST_TEMPOCHANGE)
+ {
+ if(hooks.onDebugMessage)
+ hooks.onDebugMessage(hooks.onDebugMessage_userData, "Temp Change: %02X%02X%02X", evt.data[0], evt.data[1], evt.data[2]);
+ }
+#endif
+
/* TODO: Store those meta-strings separately and give ability to read them
* by external functions (to display song title and copyright in the player) */
if(evt.subtype == MidiEvent::ST_COPYRIGHT)
@@ -1930,9 +1952,16 @@ MIDIplay::MidiEvent MIDIplay::parseEvent(uint8_t **pptr, uint8_t *end, int &stat
evt.data.push_back(*(ptr++));
evt.data.push_back(*(ptr++));
- if((evType == MidiEvent::T_NOTEON) && (evt.data[1] == 0))
+ /* TODO: Implement conversion of RSXX's note volumes out of synthesizer */
+ /*if((opl.m_musicMode == OPL3::MODE_RSXX) && (evType == MidiEvent::T_NOTEON) && (evt.data[1] != 0))
+ {
+ //NOT WORKING YET
+ evt.type = MidiEvent::T_NOTETOUCH;
+ }
+ else */if((evType == MidiEvent::T_NOTEON) && (evt.data[1] == 0))
+ {
evt.type = MidiEvent::T_NOTEOFF; // Note ON with zero velocity is Note OFF!
- //111'th loopStart controller (RPG Maker and others)
+ } //111'th loopStart controller (RPG Maker and others)
else if((evType == MidiEvent::T_CTRLCHANGE) && (evt.data[0] == 111))
{
//Change event type to custom Loop Start event and clear data
@@ -1956,7 +1985,7 @@ MIDIplay::MidiEvent MIDIplay::parseEvent(uint8_t **pptr, uint8_t *end, int &stat
return evt;
}
-#endif
+#endif /* ADLMIDI_DISABLE_MIDI_SEQUENCER */
const std::string &MIDIplay::getErrorString()
{
@@ -2045,7 +2074,7 @@ void MIDIplay::HandleEvent(size_t tk, const MIDIplay::MidiEvent &evt, int &statu
v |= 0x30;
//std::printf("OPL poke %02X, %02X\n", i, v);
//std::fflush(stdout);
- opl.PokeN(0, i, v);
+ opl.Poke(0, i, v);
return;
}
@@ -2125,15 +2154,15 @@ void MIDIplay::HandleEvent(size_t tk, const MIDIplay::MidiEvent &evt, int &statu
}
}
}
-#endif
+#endif /* ADLMIDI_DISABLE_MIDI_SEQUENCER */
-int64_t MIDIplay::CalculateAdlChannelGoodness(unsigned c, const MIDIchannel::NoteInfo::Phys &ins, uint16_t) const
+int64_t MIDIplay::CalculateAdlChannelGoodness(size_t c, const MIDIchannel::NoteInfo::Phys &ins, uint16_t) const
{
int64_t s = -ch[c].koff_time_until_neglible;
// Same midi-instrument = some stability
//if(c == MidCh) s += 4;
- for (AdlChannel::LocationData *j = ch[c].users_first; j; j = j->next)
+ for(AdlChannel::LocationData *j = ch[c].users_first; j; j = j->next)
{
s -= 4000;
@@ -2174,7 +2203,7 @@ int64_t MIDIplay::CalculateAdlChannelGoodness(unsigned c, const MIDIchannel::Not
// increase the score slightly.
unsigned n_evacuation_stations = 0;
- for(unsigned c2 = 0; c2 < opl.NumChannels; ++c2)
+ for(size_t c2 = 0; c2 < static_cast<size_t>(opl.NumChannels); ++c2)
{
if(c2 == c) continue;
@@ -2275,11 +2304,11 @@ void MIDIplay::KillOrEvacuate(size_t from_channel,
hooks.onNote(hooks.onNote_userData,
(int)from_channel,
i->tone,
- i->midiins, 0, 0.0);
+ static_cast<int>(i->midiins), 0, 0.0);
hooks.onNote(hooks.onNote_userData,
(int)c,
i->tone,
- i->midiins,
+ static_cast<int>(i->midiins),
i->vol, 0.0);
}
@@ -2358,7 +2387,12 @@ void MIDIplay::SetRPN(unsigned MidCh, unsigned value, bool MSB)
switch(addr + nrpn * 0x10000 + MSB * 0x20000)
{
case 0x0000 + 0*0x10000 + 1*0x20000: // Pitch-bender sensitivity
- Ch[MidCh].bendsense = value / 8192.0;
+ Ch[MidCh].bendsense_msb = value;
+ Ch[MidCh].updateBendSensitivity();
+ break;
+ case 0x0000 + 0*0x10000 + 0*0x20000: // Pitch-bender sensitivity LSB
+ Ch[MidCh].bendsense_lsb = value;
+ Ch[MidCh].updateBendSensitivity();
break;
case 0x0108 + 1*0x10000 + 1*0x20000: // Vibrato speed
if(value == 64) Ch[MidCh].vibspeed = 1.0;
@@ -2412,7 +2446,7 @@ void MIDIplay::UpdateVibrato(double amount)
{
for(size_t a = 0, b = Ch.size(); a < b; ++a)
{
- if(Ch[a].vibrato && !Ch[a].activenotes_empty())
+ if(Ch[a].hasVibrato() && !Ch[a].activenotes_empty())
{
NoteUpdate_All(static_cast<uint16_t>(a), Upd_Pitch);
Ch[a].vibpos += amount * Ch[a].vibspeed;
@@ -2442,9 +2476,9 @@ void MIDIplay::UpdateArpeggio(double) // amount = amount of time passed
{
// If there is an adlib channel that has multiple notes
// simulated on the same channel, arpeggio them.
- #if 0
+#if 0
const unsigned desired_arpeggio_rate = 40; // Hz (upper limit)
- #if 1
+# if 1
static unsigned cache = 0;
amount = amount; // Ignore amount. Assume we get a constant rate.
cache += MaxSamplesAtTime * desired_arpeggio_rate;
@@ -2452,17 +2486,17 @@ void MIDIplay::UpdateArpeggio(double) // amount = amount of time passed
if(cache < PCM_RATE) return;
cache %= PCM_RATE;
- #else
+# else
static double arpeggio_cache = 0;
arpeggio_cache += amount * desired_arpeggio_rate;
if(arpeggio_cache < 1.0) return;
arpeggio_cache = 0.0;
- #endif
- #endif
- static unsigned arpeggio_counter = 0;
- ++arpeggio_counter;
+# endif
+#endif
+
+ ++m_arpeggioCounter;
for(uint32_t c = 0; c < opl.NumChannels; ++c)
{
@@ -2483,8 +2517,8 @@ retry_arpeggio:
if(n_users >= 4)
rate_reduction = 1;
- for(unsigned count = (arpeggio_counter / rate_reduction) % n_users,
- n = 0; n < count; ++n)
+ for(size_t count = (m_arpeggioCounter / rate_reduction) % n_users,
+ n = 0; n < count; ++n)
i = i->next;
if(i->sustained == false)
@@ -2512,36 +2546,48 @@ retry_arpeggio:
#ifndef ADLMIDI_DISABLE_CPP_EXTRAS
+struct AdlInstrumentTester::Impl
+{
+ uint32_t cur_gm;
+ uint32_t ins_idx;
+ std::vector<uint32_t> adl_ins_list;
+ OPL3 *opl;
+ MIDIplay *play;
+};
+
ADLMIDI_EXPORT AdlInstrumentTester::AdlInstrumentTester(ADL_MIDIPlayer *device)
+ : P(new Impl)
{
- cur_gm = 0;
- ins_idx = 0;
- play = reinterpret_cast<MIDIplay *>(device->adl_midiPlayer);
- if(!play)
- return;
- opl = &play->opl;
+ MIDIplay *play = reinterpret_cast<MIDIplay *>(device->adl_midiPlayer);
+ P->cur_gm = 0;
+ P->ins_idx = 0;
+ P->play = play;
+ P->opl = play ? &play->opl : NULL;
}
ADLMIDI_EXPORT AdlInstrumentTester::~AdlInstrumentTester()
-{}
+{
+ delete P;
+}
ADLMIDI_EXPORT void AdlInstrumentTester::FindAdlList()
{
const unsigned NumBanks = (unsigned)adl_getBanksCount();
std::set<unsigned> adl_ins_set;
for(unsigned bankno = 0; bankno < NumBanks; ++bankno)
- adl_ins_set.insert(banks[bankno][cur_gm]);
- adl_ins_list.assign(adl_ins_set.begin(), adl_ins_set.end());
- ins_idx = 0;
+ adl_ins_set.insert(banks[bankno][P->cur_gm]);
+ P->adl_ins_list.assign(adl_ins_set.begin(), adl_ins_set.end());
+ P->ins_idx = 0;
NextAdl(0);
- opl->Silence();
+ P->opl->Silence();
}
ADLMIDI_EXPORT void AdlInstrumentTester::Touch(unsigned c, unsigned volume) // Volume maxes at 127*127*127
{
- if(opl->LogarithmicVolumes)
+ OPL3 *opl = P->opl;
+ if(opl->m_volumeScale == OPL3::VOLUME_NATIVE)
opl->Touch_Real(c, volume * 127 / (127 * 127 * 127) / 2);
else
{
@@ -2554,11 +2600,13 @@ ADLMIDI_EXPORT void AdlInstrumentTester::Touch(unsigned c, unsigned volume) // V
ADLMIDI_EXPORT void AdlInstrumentTester::DoNote(int note)
{
- if(adl_ins_list.empty()) FindAdlList();
- const unsigned meta = adl_ins_list[ins_idx];
- const adlinsdata &ains = opl->GetAdlMetaIns(meta);
+ MIDIplay *play = P->play;
+ OPL3 *opl = P->opl;
+ if(P->adl_ins_list.empty()) FindAdlList();
+ const unsigned meta = P->adl_ins_list[P->ins_idx];
+ const adlinsdata2 ains(adlins[meta]);
- int tone = (cur_gm & 128) ? (cur_gm & 127) : (note + 50);
+ int tone = (P->cur_gm & 128) ? (P->cur_gm & 127) : (note + 50);
if(ains.tone)
{
/*if(ains.tone < 20)
@@ -2570,16 +2618,15 @@ ADLMIDI_EXPORT void AdlInstrumentTester::DoNote(int note)
tone -= ains.tone - 128;
}
double hertz = 172.00093 * std::exp(0.057762265 * (tone + 0.0));
- int i[2] = { ains.adlno1, ains.adlno2 };
int32_t adlchannel[2] = { 0, 3 };
- if(i[0] == i[1])
+ if(ains.adl[0] == ains.adl[1])
{
adlchannel[1] = -1;
adlchannel[0] = 6; // single-op
if(play->hooks.onDebugMessage)
{
play->hooks.onDebugMessage(play->hooks.onDebugMessage_userData,
- "noteon at %d(%d) for %g Hz\n", adlchannel[0], i[0], hertz);
+ "noteon at %d for %g Hz\n", adlchannel[0], hertz);
}
}
else
@@ -2587,7 +2634,7 @@ ADLMIDI_EXPORT void AdlInstrumentTester::DoNote(int note)
if(play->hooks.onDebugMessage)
{
play->hooks.onDebugMessage(play->hooks.onDebugMessage_userData,
- "noteon at %d(%d) and %d(%d) for %g Hz\n", adlchannel[0], i[0], adlchannel[1], i[1], hertz);
+ "noteon at %d and %d for %g Hz\n", adlchannel[0], adlchannel[1], hertz);
}
}
@@ -2597,7 +2644,7 @@ ADLMIDI_EXPORT void AdlInstrumentTester::DoNote(int note)
for(unsigned c = 0; c < 2; ++c)
{
if(adlchannel[c] < 0) continue;
- opl->Patch((uint16_t)adlchannel[c], (uint16_t)i[c]);
+ opl->Patch((uint16_t)adlchannel[c], ains.adl[c]);
opl->Touch_Real((uint16_t)adlchannel[c], 127 * 127 * 100);
opl->Pan((uint16_t)adlchannel[c], 0x30);
opl->NoteOn((uint16_t)adlchannel[c], hertz);
@@ -2606,17 +2653,18 @@ ADLMIDI_EXPORT void AdlInstrumentTester::DoNote(int note)
ADLMIDI_EXPORT void AdlInstrumentTester::NextGM(int offset)
{
- cur_gm = (cur_gm + 256 + (uint32_t)offset) & 0xFF;
+ P->cur_gm = (P->cur_gm + 256 + (uint32_t)offset) & 0xFF;
FindAdlList();
}
ADLMIDI_EXPORT void AdlInstrumentTester::NextAdl(int offset)
{
- if(adl_ins_list.empty()) FindAdlList();
+ //OPL3 *opl = P->opl;
+ if(P->adl_ins_list.empty()) FindAdlList();
const unsigned NumBanks = (unsigned)adl_getBanksCount();
- ins_idx = (uint32_t)((int32_t)ins_idx + (int32_t)adl_ins_list.size() + offset) % adl_ins_list.size();
+ P->ins_idx = (uint32_t)((int32_t)P->ins_idx + (int32_t)P->adl_ins_list.size() + offset) % P->adl_ins_list.size();
- #if 0
+#if 0
UI.Color(15);
std::fflush(stderr);
std::printf("SELECTED G%c%d\t%s\n",
@@ -2625,12 +2673,12 @@ ADLMIDI_EXPORT void AdlInstrumentTester::NextAdl(int offset)
std::fflush(stdout);
UI.Color(7);
std::fflush(stderr);
- #endif
+#endif
- for(unsigned a = 0; a < adl_ins_list.size(); ++a)
+ for(unsigned a = 0, n = P->adl_ins_list.size(); a < n; ++a)
{
- const unsigned i = adl_ins_list[a];
- const adlinsdata &ains = opl->GetAdlMetaIns(i);
+ const unsigned i = P->adl_ins_list[a];
+ const adlinsdata2 ains(adlins[i]);
char ToneIndication[8] = " ";
if(ains.tone)
@@ -2645,13 +2693,13 @@ ADLMIDI_EXPORT void AdlInstrumentTester::NextAdl(int offset)
}
std::printf("%s%s%s%u\t",
ToneIndication,
- ains.adlno1 != ains.adlno2 ? "[2]" : " ",
- (ins_idx == a) ? "->" : "\t",
+ ains.adl[0] != ains.adl[1] ? "[2]" : " ",
+ (P->ins_idx == a) ? "->" : "\t",
i
);
for(unsigned bankno = 0; bankno < NumBanks; ++bankno)
- if(banks[bankno][cur_gm] == i)
+ if(banks[bankno][P->cur_gm] == i)
std::printf(" %u", bankno);
std::printf("\n");
@@ -2685,9 +2733,9 @@ ADLMIDI_EXPORT bool AdlInstrumentTester::HandleInputChar(char ch)
NextGM(+1);
break;
case 3:
- #if !((!defined(__WIN32__) || defined(__CYGWIN__)) && !defined(__DJGPP__))
+#if !((!defined(__WIN32__) || defined(__CYGWIN__)) && !defined(__DJGPP__))
case 27:
- #endif
+#endif
return false;
default:
const char *p = std::strchr(notes, ch);
@@ -2697,7 +2745,7 @@ ADLMIDI_EXPORT bool AdlInstrumentTester::HandleInputChar(char ch)
return true;
}
-#endif//ADLMIDI_DISABLE_CPP_EXTRAS
+#endif /* ADLMIDI_DISABLE_CPP_EXTRAS */
// Implement the user map data structure.
@@ -2737,13 +2785,15 @@ MIDIplay::AdlChannel::LocationData *MIDIplay::AdlChannel::users_allocate()
MIDIplay::AdlChannel::LocationData *MIDIplay::AdlChannel::users_find_or_create(Location loc)
{
LocationData *user = users_find(loc);
- if(!user) {
+ if(!user)
+ {
user = users_allocate();
if(!user)
return NULL;
LocationData *prev = user->prev, *next = user->next;
*user = LocationData();
- user->prev = prev; user->next = next;
+ user->prev = prev;
+ user->next = next;
user->loc = loc;
}
return user;
@@ -2759,7 +2809,8 @@ MIDIplay::AdlChannel::LocationData *MIDIplay::AdlChannel::users_insert(const Loc
return NULL;
LocationData *prev = user->prev, *next = user->next;
*user = x;
- user->prev = prev; user->next = next;
+ user->prev = prev;
+ user->next = next;
}
return user;
}
@@ -2792,8 +2843,10 @@ void MIDIplay::AdlChannel::users_clear()
void MIDIplay::AdlChannel::users_assign(const LocationData *users, size_t count)
{
+ ADL_UNUSED(count);//Avoid warning for release builds
assert(count <= users_max);
- if(users == users_first && users) {
+ if(users == users_first && users)
+ {
// self assignment
assert(users_size == count);
return;
@@ -2801,17 +2854,20 @@ void MIDIplay::AdlChannel::users_assign(const LocationData *users, size_t count)
users_clear();
const LocationData *src_cell = users;
// move to the last
- if(src_cell) {
+ if(src_cell)
+ {
while(src_cell->next)
src_cell = src_cell->next;
}
// push cell copies in reverse order
- while(src_cell) {
+ while(src_cell)
+ {
LocationData *dst_cell = users_allocate();
assert(dst_cell);
LocationData *prev = dst_cell->prev, *next = dst_cell->next;
*dst_cell = *src_cell;
- dst_cell->prev = prev; dst_cell->next = next;
+ dst_cell->prev = prev;
+ dst_cell->next = next;
src_cell = src_cell->prev;
}
assert(users_size == count);
diff --git a/src/adlmidi_mus2mid.c b/src/adlmidi_mus2mid.c
index 8268198..3f3e1b8 100644
--- a/src/adlmidi_mus2mid.c
+++ b/src/adlmidi_mus2mid.c
@@ -416,7 +416,7 @@ int AdlMidi_mus2midi(uint8_t *in, uint32_t insize,
memcpy(ctx.dst_ptr, temp_buffer, out_local - temp_buffer);
ctx.dst_ptr += out_local - temp_buffer;
- ctx.dstrem -= out_local - temp_buffer;
+ ctx.dstrem -= (uint32_t)(out_local - temp_buffer);
}
if (event & 128) {
diff --git a/src/adlmidi_opl3.cpp b/src/adlmidi_opl3.cpp
index 66254b6..16a481d 100644
--- a/src/adlmidi_opl3.cpp
+++ b/src/adlmidi_opl3.cpp
@@ -129,81 +129,56 @@ static const unsigned short Channels[23] =
Ports: ???
*/
-
-const adlinsdata &OPL3::GetAdlMetaIns(size_t n)
+void OPL3::setEmbeddedBank(unsigned int bank)
{
- return (n & DynamicMetaInstrumentTag) ?
- dynamic_metainstruments[n & ~DynamicMetaInstrumentTag]
- : adlins[n];
-}
+ AdlBank = bank;
+ //Embedded banks are supports 128:128 GM set only
+ dynamic_banks.clear();
-size_t OPL3::GetAdlMetaNumber(size_t midiins)
-{
- return (AdlBank == ~0u) ?
- (midiins | DynamicMetaInstrumentTag)
- : banks[AdlBank][midiins];
-}
+ if(bank >= static_cast<unsigned int>(maxAdlBanks()))
+ return;
-const adldata &OPL3::GetAdlIns(size_t insno)
-{
- return (insno & DynamicInstrumentTag)
- ? dynamic_instruments[insno & ~DynamicInstrumentTag]
- : adl[insno];
+ Bank *bank_pair[2] =
+ {
+ &dynamic_banks[0],
+ &dynamic_banks[PercussionTag]
+ };
+
+ for(unsigned i = 0; i < 256; ++i)
+ {
+ size_t meta = banks[bank][i];
+ adlinsdata2 &ins = bank_pair[i / 128]->ins[i % 128];
+ ins = adlinsdata2(adlins[meta]);
+ }
}
-void OPL3::setEmbeddedBank(unsigned int bank)
+static adlinsdata2 makeEmptyInstrument()
{
- AdlBank = bank;
- //Embedded banks are supports 128:128 GM set only
- dynamic_percussion_offset = 128;
- dynamic_melodic_banks.clear();
- dynamic_percussion_banks.clear();
+ adlinsdata2 ins;
+ memset(&ins, 0, sizeof(adlinsdata2));
+ ins.flags = adlinsdata::Flag_NoSound;
+ return ins;
}
+const adlinsdata2 OPL3::emptyInstrument = makeEmptyInstrument();
OPL3::OPL3() :
- dynamic_percussion_offset(128),
- DynamicInstrumentTag(0x8000u),
- DynamicMetaInstrumentTag(0x4000000u),
NumCards(1),
- AdlBank(0),
NumFourOps(0),
HighTremoloMode(false),
HighVibratoMode(false),
AdlPercussionMode(false),
- LogarithmicVolumes(false),
- //CartoonersVolumes(false),
m_musicMode(MODE_MIDI),
m_volumeScale(VOLUME_Generic)
-{}
-
-void OPL3::Poke(size_t card, uint32_t index, uint32_t value)
{
- #ifdef ADLMIDI_HW_OPL
- (void)card;
- unsigned o = index >> 8;
- unsigned port = OPLBase + o * 2;
-
- #ifdef __DJGPP__
- outportb(port, index);
- for(unsigned c = 0; c < 6; ++c) inportb(port);
- outportb(port + 1, value);
- for(unsigned c = 0; c < 35; ++c) inportb(port);
- #endif//__DJGPP__
-
- #ifdef __WATCOMC__
- outp(port, index);
- for(uint16_t c = 0; c < 6; ++c) inp(port);
- outp(port + 1, value);
- for(uint16_t c = 0; c < 35; ++c) inp(port);
- #endif//__WATCOMC__
-
- #else//ADLMIDI_HW_OPL
- cardsOP2[card]->writeReg(static_cast<uint16_t>(index), static_cast<uint8_t>(value));
- #endif//ADLMIDI_HW_OPL
+#ifdef DISABLE_EMBEDDED_BANKS
+ AdlBank = ~0u;
+#else
+ setEmbeddedBank(0);
+#endif
}
-void OPL3::PokeN(size_t card, uint16_t index, uint8_t value)
+void OPL3::Poke(size_t card, uint16_t index, uint8_t value)
{
#ifdef ADLMIDI_HW_OPL
(void)card;
@@ -282,10 +257,9 @@ void OPL3::Touch_Real(unsigned c, unsigned volume, uint8_t brightness)
volume = 63;
size_t card = c / 23, cc = c % 23;
- size_t i = ins[c];
+ const adldata &adli = ins[c];
uint16_t o1 = Operators[cc * 2 + 0];
uint16_t o2 = Operators[cc * 2 + 1];
- const adldata &adli = GetAdlIns(i);
uint8_t x = adli.modulator_40, y = adli.carrier_40;
uint16_t mode = 1; // 2-op AM
@@ -295,22 +269,22 @@ void OPL3::Touch_Real(unsigned c, unsigned volume, uint8_t brightness)
}
else if(four_op_category[c] == 1 || four_op_category[c] == 2)
{
- size_t i0, i1;
+ const adldata *i0, *i1;
if(four_op_category[c] == 1)
{
- i0 = i;
- i1 = ins[c + 3];
+ i0 = &adli;
+ i1 = &ins[c + 3];
mode = 2; // 4-op xx-xx ops 1&2
}
else
{
- i0 = ins[c - 3];
- i1 = i;
+ i0 = &ins[c - 3];
+ i1 = &adli;
mode = 6; // 4-op xx-xx ops 3&4
}
- mode += (GetAdlIns(i0).feedconn & 1) + (GetAdlIns(i1).feedconn & 1) * 2;
+ mode += (i0->feedconn & 1) + (i1->feedconn & 1) * 2;
}
static const bool do_ops[10][2] =
@@ -377,14 +351,13 @@ void OPL3::Touch(unsigned c, unsigned volume) // Volume maxes at 127*127*127
}
}*/
-void OPL3::Patch(uint16_t c, size_t i)
+void OPL3::Patch(uint16_t c, const adldata &adli)
{
uint16_t card = c / 23, cc = c % 23;
static const uint8_t data[4] = {0x20, 0x60, 0x80, 0xE0};
- ins[c] = i;
+ ins[c] = adli;
uint16_t o1 = Operators[cc * 2 + 0];
uint16_t o2 = Operators[cc * 2 + 1];
- const adldata &adli = GetAdlIns(i);
unsigned x = adli.modulator_E862, y = adli.carrier_E862;
for(unsigned a = 0; a < 4; ++a, x >>= 8, y >>= 8)
@@ -400,7 +373,7 @@ void OPL3::Pan(unsigned c, unsigned value)
unsigned card = c / 23, cc = c % 23;
if(Channels[cc] != 0xFFF)
- Poke(card, 0xC0 + Channels[cc], GetAdlIns(ins[c]).feedconn | value);
+ Poke(card, 0xC0 + Channels[cc], ins[c].feedconn | value);
}
void OPL3::Silence() // Silence all OPL channels.
@@ -484,9 +457,8 @@ void OPL3::ChangeVolumeRangesModel(ADLMIDI_VolumeModels volumeModel)
m_volumeScale = OPL3::VOLUME_Generic;
break;
- case ADLMIDI_VolumeModel_CMF:
- LogarithmicVolumes = true;
- m_volumeScale = OPL3::VOLUME_CMF;
+ case ADLMIDI_VolumeModel_NativeOPL3:
+ m_volumeScale = OPL3::VOLUME_NATIVE;
break;
case ADLMIDI_VolumeModel_DMX:
@@ -517,6 +489,7 @@ void OPL3::Reset(int emulator, unsigned long PCM_RATE)
#ifndef ADLMIDI_HW_OPL
ClearChips();
#endif
+ (void)emulator;
(void)PCM_RATE;
ins.clear();
pit.clear();
@@ -527,7 +500,7 @@ void OPL3::Reset(int emulator, unsigned long PCM_RATE)
#endif
NumChannels = NumCards * 23;
- ins.resize(NumChannels, 189);
+ ins.resize(NumChannels, adl[adlDefaultNumber]);
pit.resize(NumChannels, 0);
regBD.resize(NumCards, 0);
four_op_category.resize(NumChannels, 0);
@@ -571,7 +544,7 @@ void OPL3::Reset(int emulator, unsigned long PCM_RATE)
for(unsigned a = 0; a < 18; ++a) Poke(i, 0xB0 + Channels[a], 0x00);
for(unsigned a = 0; a < sizeof(data) / sizeof(*data); a += 2)
- PokeN(i, data[a], static_cast<uint8_t>(data[a + 1]));
+ Poke(i, data[a], static_cast<uint8_t>(data[a + 1]));
Poke(i, 0x0BD, regBD[i] = (HighTremoloMode * 0x80
+ HighVibratoMode * 0x40
+ AdlPercussionMode * 0x20));
diff --git a/src/adlmidi_private.cpp b/src/adlmidi_private.cpp
index 1f3cb7d..77319d7 100644
--- a/src/adlmidi_private.cpp
+++ b/src/adlmidi_private.cpp
@@ -34,19 +34,22 @@ int adlRefreshNumCards(ADL_MIDIPlayer *device)
if(play->opl.AdlBank == ~0u)
{
//For custom bank
- for(size_t a = 0; a < play->opl.dynamic_metainstruments.size(); ++a)
+ OPL3::BankMap::iterator it = play->opl.dynamic_banks.begin();
+ OPL3::BankMap::iterator end = play->opl.dynamic_banks.end();
+ for(; it != end; ++it)
{
- size_t div = (a >= play->opl.dynamic_percussion_offset) ? 1 : 0;
- ++n_total[div];
- adlinsdata &ins = play->opl.dynamic_metainstruments[a];
- if((ins.adlno1 != ins.adlno2) && ((ins.flags & adlinsdata::Flag_Pseudo4op) == 0))
- ++n_fourop[div];
+ uint16_t bank = it->first;
+ unsigned div = (bank & OPL3::PercussionTag) ? 1 : 0;
+ for(unsigned i = 0; i < 128; ++i)
+ {
+ adlinsdata2 &ins = it->second.ins[i];
+ if(ins.flags & adlinsdata::Flag_NoSound)
+ continue;
+ if((ins.adl[0] != ins.adl[1]) && ((ins.flags & adlinsdata::Flag_Pseudo4op) == 0))
+ ++n_fourop[div];
+ ++n_total[div];
+ }
}
-
- play->m_setup.NumFourOps =
- (n_fourop[0] >= 128 * 7 / 8) ? play->m_setup.NumCards * 6
- : (n_fourop[0] < 128 * 1 / 8) ? (n_fourop[1] > 0 ? 4 : 0)
- : (play->m_setup.NumCards == 1 ? 1 : play->m_setup.NumCards * 4);
}
else
{
@@ -57,27 +60,34 @@ int adlRefreshNumCards(ADL_MIDIPlayer *device)
if(insno == 198)
continue;
++n_total[a / 128];
- const adlinsdata &ins = adlins[insno];
- if((ins.adlno1 != ins.adlno2) && ((ins.flags & adlinsdata::Flag_Pseudo4op) == 0))
+ adlinsdata2 ins(adlins[insno]);
+ if(ins.flags & adlinsdata::Flag_Real4op)
++n_fourop[a / 128];
}
-
- play->m_setup.NumFourOps =
- (n_fourop[0] >= (n_total[0] % 128) * 7 / 8) ? play->m_setup.NumCards * 6
- : (n_fourop[0] < (n_total[0] % 128) * 1 / 8) ? 0
- : (play->m_setup.NumCards == 1 ? 1 : play->m_setup.NumCards * 4);
}
- play->opl.NumFourOps = play->m_setup.NumFourOps;
+ unsigned numFourOps = 0;
- if(n_fourop[0] >= n_total[0] * 15 / 16 && play->m_setup.NumFourOps == 0)
- {
- play->setErrorString("ERROR: You have selected a bank that consists almost exclusively of four-op patches.\n"
- " The results (silence + much cpu load) would be probably\n"
- " not what you want, therefore ignoring the request.\n");
- return -1;
- }
+ // All 2ops (no 4ops)
+ if((n_fourop[0] == 0) && (n_fourop[1] == 0))
+ numFourOps = 0;
+ // All 2op melodics and Some (or All) 4op drums
+ else if((n_fourop[0] == 0) && (n_fourop[1] > 0))
+ numFourOps = 2;
+ // Many 4op melodics
+ else if((n_fourop[0] >= (n_total[0] * 7) / 8))
+ numFourOps = 6;
+ // Few 4op melodics
+ else if(n_fourop[0] > 0)
+ numFourOps = 4;
+
+/* //Old formula
+ unsigned NumFourOps = ((n_fourop[0] == 0) && (n_fourop[1] == 0)) ? 0
+ : (n_fourop[0] >= (n_total[0] * 7) / 8) ? play->m_setup.NumCards * 6
+ : (play->m_setup.NumCards == 1 ? 1 : play->m_setup.NumCards * 4);
+*/
+
+ play->opl.NumFourOps = play->m_setup.NumFourOps = (numFourOps * play->m_setup.NumCards);
return 0;
}
-
diff --git a/src/adlmidi_private.hpp b/src/adlmidi_private.hpp
index 9fd6f97..2499bad 100644
--- a/src/adlmidi_private.hpp
+++ b/src/adlmidi_private.hpp
@@ -35,6 +35,9 @@
# endif
#endif
+// Require declarations of unstable API for extern "C"
+#define ADLMIDI_UNSTABLE_API
+
#ifdef _WIN32
#define NOMINMAX
#endif
@@ -88,17 +91,13 @@ typedef int32_t ssize_t;
#include <cstdarg>
#include <cstdio>
#include <cassert>
-#if !(defined(__APPLE__) && defined(__GLIBCXX__)) && !defined(__ANDROID__)
-#include <cinttypes> //PRId32, PRIu32, etc.
-#else
-#include <inttypes.h>
-#endif
#include <vector> // vector
#include <deque> // deque
#include <cmath> // exp, log, ceil
#if defined(__WATCOMC__)
#include <math.h> // round, sqrt
#endif
+#include <inttypes.h>
#include <stdio.h>
#include <stdlib.h>
#include <limits> // numeric_limit
@@ -110,11 +109,26 @@ typedef int32_t ssize_t;
#include <deque>
#include <algorithm>
-#ifdef _MSC_VER
-#pragma warning(disable:4319)
-#pragma warning(disable:4267)
-#pragma warning(disable:4244)
-#pragma warning(disable:4146)
+/*
+ * Workaround for some compilers are has no those macros in their headers!
+ */
+#ifndef INT8_MIN
+#define INT8_MIN (-0x7f - 1)
+#endif
+#ifndef INT16_MIN
+#define INT16_MIN (-0x7fff - 1)
+#endif
+#ifndef INT32_MIN
+#define INT32_MIN (-0x7fffffff - 1)
+#endif
+#ifndef INT8_MAX
+#define INT8_MAX 0x7f
+#endif
+#ifndef INT16_MAX
+#define INT16_MAX 0x7fff
+#endif
+#ifndef INT32_MAX
+#define INT32_MAX 0x7fffffff
#endif
#include "fraction.hpp"
@@ -127,6 +141,8 @@ typedef int32_t ssize_t;
#ifndef ADLMIDI_DISABLE_CPP_EXTRAS
#include "adlmidi.hpp" //Extra C++ API
#endif
+#include "adlmidi_ptr.hpp"
+#include "adlmidi_bankmap.h"
#define ADL_UNUSED(x) (void)x
@@ -144,12 +160,14 @@ inline Real adl_cvtReal(int32_t x)
{
return x * ((Real)1 / INT16_MAX);
}
+
inline int32_t adl_cvtS16(int32_t x)
{
- x = (x < INT16_MIN) ? INT16_MIN : x;
- x = (x > INT16_MAX) ? INT16_MAX : x;
+ x = (x < INT16_MIN) ? (INT16_MIN) : x;
+ x = (x > INT16_MAX) ? (INT16_MAX) : x;
return x;
}
+
inline int32_t adl_cvtS8(int32_t x)
{
return adl_cvtS16(x) / 256;
@@ -181,117 +199,6 @@ inline int32_t adl_cvtU32(int32_t x)
return (uint32_t)adl_cvtS32(x) - (uint32_t)INT32_MIN;
}
-/*
- Smart pointer for C heaps, created with malloc() call.
- FAQ: Why not std::shared_ptr? Because of Android NDK now doesn't supports it
-*/
-template<class PTR>
-class AdlMIDI_CPtr
-{
- PTR *m_p;
-public:
- AdlMIDI_CPtr() : m_p(NULL) {}
- ~AdlMIDI_CPtr()
- {
- reset(NULL);
- }
-
- void reset(PTR *p = NULL)
- {
- if(p != m_p) {
- if(m_p)
- free(m_p);
- m_p = p;
- }
- }
-
- PTR *get()
- {
- return m_p;
- }
- PTR &operator*()
- {
- return *m_p;
- }
- PTR *operator->()
- {
- return m_p;
- }
-private:
- AdlMIDI_CPtr(const AdlMIDI_CPtr &);
- AdlMIDI_CPtr &operator=(const AdlMIDI_CPtr &);
-};
-
-/*
- Shared pointer with non-atomic counter
- FAQ: Why not std::shared_ptr? Because of Android NDK now doesn't supports it
-*/
-template<class VALUE>
-class AdlMIDI_SPtr
-{
- VALUE *m_p;
- size_t *m_counter;
-public:
- AdlMIDI_SPtr() : m_p(NULL), m_counter(NULL) {}
- ~AdlMIDI_SPtr()
- {
- reset(NULL);
- }
-
- AdlMIDI_SPtr(const AdlMIDI_SPtr &other)
- : m_p(other.m_p), m_counter(other.m_counter)
- {
- if(m_counter)
- ++*m_counter;
- }
-
- AdlMIDI_SPtr &operator=(const AdlMIDI_SPtr &other)
- {
- if(this == &other)
- return *this;
- reset();
- m_p = other.m_p;
- m_counter = other.m_counter;
- if(m_counter)
- ++*m_counter;
- return *this;
- }
-
- void reset(VALUE *p = NULL)
- {
- if(p != m_p) {
- if(m_p && --*m_counter == 0)
- delete m_p;
- m_p = p;
- if(!p) {
- if(m_counter) {
- delete m_counter;
- m_counter = NULL;
- }
- }
- else
- {
- if(!m_counter)
- m_counter = new size_t;
- *m_counter = 1;
- }
- }
- }
-
- VALUE *get()
- {
- return m_p;
- }
- VALUE &operator*()
- {
- return *m_p;
- }
- VALUE *operator->()
- {
- return m_p;
- }
-};
-
class MIDIplay;
struct ADL_MIDIPlayer;
class OPL3
@@ -306,27 +213,23 @@ public:
std::vector<AdlMIDI_SPtr<OPLChipBase > > cardsOP2;
#endif
private:
- std::vector<size_t> ins; // index to adl[], cached, needed by Touch()
+ std::vector<adldata> ins; // patch data, cached, needed by Touch()
std::vector<uint8_t> pit; // value poked to B0, cached, needed by NoteOff)(
std::vector<uint8_t> regBD;
friend int adlRefreshNumCards(ADL_MIDIPlayer *device);
- //! Meta information about every instrument
- std::vector<adlinsdata> dynamic_metainstruments; // Replaces adlins[] when CMF file
- //! Raw instrument data ready to be sent to the chip
- std::vector<adldata> dynamic_instruments; // Replaces adl[] when CMF file
- size_t dynamic_percussion_offset;
-
- typedef std::map<uint16_t, size_t> BankMap;
- BankMap dynamic_melodic_banks;
- BankMap dynamic_percussion_banks;
- const unsigned DynamicInstrumentTag /* = 0x8000u*/,
- DynamicMetaInstrumentTag /* = 0x4000000u*/;
- const adlinsdata &GetAdlMetaIns(size_t n);
- size_t GetAdlMetaNumber(size_t midiins);
- const adldata &GetAdlIns(size_t insno);
+public:
+ struct Bank
+ {
+ adlinsdata2 ins[128];
+ };
+ typedef BasicBankMap<Bank> BankMap;
+ BankMap dynamic_banks;
+ AdlBankSetup dynamic_bank_setup;
public:
void setEmbeddedBank(unsigned int bank);
+ static const adlinsdata2 emptyInstrument;
+ enum { PercussionTag = 1 << 15 };
//! Total number of running concurrent emulated chips
unsigned int NumCards;
@@ -342,8 +245,8 @@ public:
bool AdlPercussionMode;
//! Carriers-only are scaled by default by volume level. This flag will tell to scale modulators too.
bool ScaleModulators;
- //! Required to play CMF files. Can be turned on by using of "CMF" volume model
- bool LogarithmicVolumes;
+ // ! Required to play CMF files. Can be turned on by using of "CMF" volume model
+ //bool LogarithmicVolumes; //[REPLACED WITH "m_volumeScale == VOLUME_NATIVE", DEPRECATED!!!]
// ! Required to play EA-MUS files [REPLACED WITH "m_musicMode", DEPRECATED!!!]
//bool CartoonersVolumes;
enum MusicMode
@@ -359,7 +262,7 @@ public:
enum VolumesScale
{
VOLUME_Generic,
- VOLUME_CMF,
+ VOLUME_NATIVE,
VOLUME_DMX,
VOLUME_APOGEE,
VOLUME_9X
@@ -375,15 +278,14 @@ public:
// 7 = percussion Hihat
// 8 = percussion slave
- void Poke(size_t card, uint32_t index, uint32_t value);
- void PokeN(size_t card, uint16_t index, uint8_t value);
+ void Poke(size_t card, uint16_t index, uint8_t value);
void NoteOff(size_t c);
void NoteOn(unsigned c, double hertz);
void Touch_Real(unsigned c, unsigned volume, uint8_t brightness = 127);
//void Touch(unsigned c, unsigned volume)
- void Patch(uint16_t c, size_t i);
+ void Patch(uint16_t c, const adldata &adli);
void Pan(unsigned c, unsigned value);
void Silence();
void updateFlags();
@@ -578,7 +480,7 @@ public:
bool eof()
{
if(fp)
- return std::feof(fp);
+ return (std::feof(fp) != 0);
else
return mp_tell >= mp_size;
}
@@ -596,9 +498,15 @@ public:
uint8_t bank_lsb, bank_msb;
uint8_t patch;
uint8_t volume, expression;
- uint8_t panning, vibrato, sustain;
+ uint8_t panning, vibrato, aftertouch, sustain;
+ //! Per note Aftertouch values
+ uint8_t noteAftertouch[128];
+ //! Is note aftertouch has any non-zero value
+ bool noteAfterTouchInUse;
char ____padding[6];
- double bend, bendsense;
+ int bend;
+ double bendsense;
+ int bendsense_lsb, bendsense_msb;
double vibpos, vibspeed, vibdepth;
int64_t vibdelay;
uint8_t lastlrpn, lastmrpn;
@@ -611,14 +519,15 @@ public:
bool active;
// Current pressure
uint8_t vol;
- char ____padding[1];
+ // Note vibrato (a part of Note Aftertouch feature)
+ uint8_t vibrato;
// Tone selected on noteon:
int16_t tone;
char ____padding2[4];
- // Patch selected on noteon; index to banks[AdlBank][]
+ // Patch selected on noteon; index to bank.ins[]
size_t midiins;
- // Index to physical adlib data structure, adlins[]
- size_t insmeta;
+ // Patch selected
+ const adlinsdata2 *ains;
enum
{
MaxNumPhysChans = 2,
@@ -629,18 +538,18 @@ public:
//! Destination chip channel
uint16_t chip_chan;
//! ins, inde to adl[]
- size_t insId;
+ adldata ains;
//! Is this voice must be detunable?
bool pseudo4op;
void assign(const Phys &oth)
{
- insId = oth.insId;
+ ains = oth.ains;
pseudo4op = oth.pseudo4op;
}
bool operator==(const Phys &oth) const
{
- return (insId == oth.insId) && (pseudo4op == oth.pseudo4op);
+ return (ains == oth.ains) && (pseudo4op == oth.pseudo4op);
}
bool operator!=(const Phys &oth) const
{
@@ -660,7 +569,7 @@ public:
ph = &chip_channels[i];
return ph;
}
- Phys *phys_find_or_create(unsigned chip_chan)
+ Phys *phys_find_or_create(uint16_t chip_chan)
{
Phys *ph = phys_find(chip_chan);
if(!ph) {
@@ -671,7 +580,7 @@ public:
}
return ph;
}
- Phys *phys_ensure_find_or_create(unsigned chip_chan)
+ Phys *phys_ensure_find_or_create(uint16_t chip_chan)
{
Phys *ph = phys_find_or_create(chip_chan);
assert(ph);
@@ -679,9 +588,9 @@ public:
}
void phys_erase_at(const Phys *ph)
{
- unsigned pos = ph - chip_channels;
- assert(pos < chip_channels_count);
- for(unsigned i = pos + 1; i < chip_channels_count; ++i)
+ intptr_t pos = ph - chip_channels;
+ assert(pos < static_cast<intptr_t>(chip_channels_count));
+ for(intptr_t i = pos + 1; i < static_cast<intptr_t>(chip_channels_count); ++i)
chip_channels[i - 1] = chip_channels[i];
--chip_channels_count;
}
@@ -707,7 +616,7 @@ public:
for(++ptr; ptr && !ptr->active;)
ptr = (ptr->note == 127) ? 0 : (ptr + 1);
return *this;
- };
+ }
activenoteiterator operator++(int)
{
activenoteiterator pos = *this;
@@ -770,7 +679,7 @@ public:
void activenotes_clear()
{
- for(unsigned i = 0; i < 128; ++i) {
+ for(uint8_t i = 0; i < 128; ++i) {
activenotes[i].note = i;
activenotes[i].active = false;
}
@@ -790,12 +699,17 @@ public:
}
void resetAllControllers()
{
- bend = 0.0;
- bendsense = 2 / 8192.0;
+ bend = 0;
+ bendsense_msb = 2;
+ bendsense_lsb = 0;
+ updateBendSensitivity();
volume = 100;
expression = 127;
sustain = 0;
vibrato = 0;
+ aftertouch = 0;
+ std::memset(noteAftertouch, 0, 128);
+ noteAfterTouchInUse = false;
vibspeed = 2 * 3.141592653 * 5.0;
vibdepth = 0.5 / 127;
vibdelay = 0;
@@ -803,6 +717,15 @@ public:
portamento = 0;
brightness = 127;
}
+ bool hasVibrato()
+ {
+ return (vibrato > 0) || (aftertouch > 0) || noteAfterTouchInUse;
+ }
+ void updateBendSensitivity()
+ {
+ int cent = bendsense_msb * 128 + bendsense_lsb;
+ bendsense = cent * (1.0 / (128 * 8192));
+ }
MIDIchannel()
{
activenotes_clear();
@@ -829,6 +752,9 @@ public:
bool sustained;
char ____padding[7];
MIDIchannel::NoteInfo::Phys ins; // a copy of that in phys[]
+ //! Has fixed sustain, don't iterate "on" timeout
+ bool fixed_sustain;
+ //! Timeout until note will be allowed to be killed by channel manager while it is on
int64_t kon_time_until_neglible;
int64_t vibdelay;
};
@@ -858,15 +784,21 @@ public:
AdlChannel(const AdlChannel &oth): koff_time_until_neglible(oth.koff_time_until_neglible)
{
- users_assign(oth.users_first, oth.users_size);
+ if(oth.users_first)
+ {
+ users_first = NULL;
+ users_assign(oth.users_first, oth.users_size);
+ }
+ else
+ users_clear();
}
AdlChannel &operator=(const AdlChannel &oth)
- {
- koff_time_until_neglible = oth.koff_time_until_neglible;
- users_assign(oth.users_first, oth.users_size);
- return *this;
- }
+ {
+ koff_time_until_neglible = oth.koff_time_until_neglible;
+ users_assign(oth.users_first, oth.users_size);
+ return *this;
+ }
void AddAge(int64_t ms);
};
@@ -1049,6 +981,8 @@ private:
char ____padding[7];
std::vector<AdlChannel> ch;
+ //! Counter of arpeggio processing
+ size_t m_arpeggioCounter;
#ifndef ADLMIDI_DISABLE_MIDI_SEQUENCER
std::vector<std::vector<uint8_t> > TrackData;
@@ -1272,7 +1206,7 @@ private:
// Determine how good a candidate this adlchannel
// would be for playing a note from this instrument.
- int64_t CalculateAdlChannelGoodness(unsigned c, const MIDIchannel::NoteInfo::Phys &ins, uint16_t /*MidCh*/) const;
+ int64_t CalculateAdlChannelGoodness(size_t c, const MIDIchannel::NoteInfo::Phys &ins, uint16_t /*MidCh*/) const;
// A new note will be played on this channel using this instrument.
// Kill existing notes on this channel (or don't, if we do arpeggio)
diff --git a/src/adlmidi_ptr.hpp b/src/adlmidi_ptr.hpp
new file mode 100644
index 0000000..7d1086b
--- /dev/null
+++ b/src/adlmidi_ptr.hpp
@@ -0,0 +1,217 @@
+/*
+ * libADLMIDI is a free MIDI to WAV conversion library with OPL3 emulation
+ *
+ * Original ADLMIDI code: Copyright (c) 2010-2014 Joel Yliluoma <bisqwit@iki.fi>
+ * ADLMIDI Library API: Copyright (c) 2015-2018 Vitaly Novichkov <admin@wohlnet.ru>
+ *
+ * Library is based on the ADLMIDI, a MIDI player for Linux and Windows with OPL3 emulation:
+ * http://iki.fi/bisqwit/source/adlmidi.html
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef ADLMIDI_PTR_HPP_THING
+#define ADLMIDI_PTR_HPP_THING
+
+#include <algorithm> // swap
+#include <stddef.h>
+#include <stdlib.h>
+
+/*
+ Generic deleters for smart pointers
+ */
+template <class T>
+struct ADLMIDI_DefaultDelete
+{
+ void operator()(T *x) { delete x; }
+};
+template <class T>
+struct ADLMIDI_DefaultArrayDelete
+{
+ void operator()(T *x) { delete[] x; }
+};
+struct ADLMIDI_CDelete
+{
+ void operator()(void *x) { free(x); }
+};
+
+/*
+ Safe unique pointer for C++98, non-copyable but swappable.
+*/
+template< class T, class Deleter = ADLMIDI_DefaultDelete<T> >
+class AdlMIDI_UPtr
+{
+ T *m_p;
+public:
+ explicit AdlMIDI_UPtr(T *p)
+ : m_p(p) {}
+ ~AdlMIDI_UPtr()
+ {
+ reset();
+ }
+
+ void reset(T *p = NULL)
+ {
+ if(p != m_p) {
+ if(m_p) {
+ Deleter del;
+ del(m_p);
+ }
+ m_p = p;
+ }
+ }
+
+ void swap(AdlMIDI_UPtr &other)
+ {
+ std::swap(m_p, other.m_p);
+ }
+
+ T *get() const
+ {
+ return m_p;
+ }
+ T &operator*() const
+ {
+ return *m_p;
+ }
+ T *operator->() const
+ {
+ return m_p;
+ }
+ T &operator[](size_t index) const
+ {
+ return m_p[index];
+ }
+private:
+ AdlMIDI_UPtr(const AdlMIDI_UPtr &);
+ AdlMIDI_UPtr &operator=(const AdlMIDI_UPtr &);
+};
+
+template <class T>
+void swap(AdlMIDI_UPtr<T> &a, AdlMIDI_UPtr<T> &b)
+{
+ a.swap(b);
+}
+
+/**
+ Unique pointer for arrays.
+ */
+template<class T>
+class AdlMIDI_UPtrArray :
+ public AdlMIDI_UPtr< T, ADLMIDI_DefaultArrayDelete<T> >
+{
+public:
+ explicit AdlMIDI_UPtrArray(T *p = NULL)
+ : AdlMIDI_UPtr< T, ADLMIDI_DefaultArrayDelete<T> >(p) {}
+};
+
+/**
+ Unique pointer for C memory.
+ */
+template<class T>
+class AdlMIDI_CPtr :
+ public AdlMIDI_UPtr< T, ADLMIDI_CDelete >
+{
+public:
+ explicit AdlMIDI_CPtr(T *p = NULL)
+ : AdlMIDI_UPtr< T, ADLMIDI_CDelete >(p) {}
+};
+
+/*
+ Shared pointer with non-atomic counter
+ FAQ: Why not std::shared_ptr? Because of Android NDK now doesn't supports it
+*/
+template< class T, class Deleter = ADLMIDI_DefaultDelete<T> >
+class AdlMIDI_SPtr
+{
+ T *m_p;
+ size_t *m_counter;
+public:
+ explicit AdlMIDI_SPtr(T *p = NULL)
+ : m_p(p), m_counter(p ? new size_t(1) : NULL) {}
+ ~AdlMIDI_SPtr()
+ {
+ reset(NULL);
+ }
+
+ AdlMIDI_SPtr(const AdlMIDI_SPtr &other)
+ : m_p(other.m_p), m_counter(other.m_counter)
+ {
+ if(m_counter)
+ ++*m_counter;
+ }
+
+ AdlMIDI_SPtr &operator=(const AdlMIDI_SPtr &other)
+ {
+ if(this == &other)
+ return *this;
+ reset();
+ m_p = other.m_p;
+ m_counter = other.m_counter;
+ if(m_counter)
+ ++*m_counter;
+ return *this;
+ }
+
+ void reset(T *p = NULL)
+ {
+ if(p != m_p) {
+ if(m_p && --*m_counter == 0) {
+ Deleter del;
+ del(m_p);
+ if(!p) {
+ delete m_counter;
+ m_counter = NULL;
+ }
+ }
+ m_p = p;
+ if(p) {
+ if(!m_counter)
+ m_counter = new size_t;
+ *m_counter = 1;
+ }
+ }
+ }
+
+ T *get() const
+ {
+ return m_p;
+ }
+ T &operator*() const
+ {
+ return *m_p;
+ }
+ T *operator->() const
+ {
+ return m_p;
+ }
+ T &operator[](size_t index) const
+ {
+ return m_p[index];
+ }
+};
+
+/**
+ Shared pointer for arrays.
+ */
+template<class T>
+class AdlMIDI_SPtrArray :
+ public AdlMIDI_SPtr< T, ADLMIDI_DefaultArrayDelete<T> >
+{
+public:
+ explicit AdlMIDI_SPtrArray(T *p = NULL)
+ : AdlMIDI_SPtr< T, ADLMIDI_DefaultArrayDelete<T> >(p) {}
+};
+
+#endif //ADLMIDI_PTR_HPP_THING
diff --git a/src/chips/dosbox/dbopl.cpp b/src/chips/dosbox/dbopl.cpp
index 3e21772..7d78c5f 100644
--- a/src/chips/dosbox/dbopl.cpp
+++ b/src/chips/dosbox/dbopl.cpp
@@ -1,10 +1,5 @@
-//#ifdef ADLMIDI_USE_DOSBOX_OPL
-
-#ifdef __MINGW32__
-typedef struct vswprintf {} swprintf;
-#endif
/*
- * Copyright (C) 2002-2010 The DOSBox Team
+ * Copyright (C) 2002-2018 The DOSBox Team
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -22,22 +17,21 @@ typedef struct vswprintf {} swprintf;
*/
/*
- DOSBox implementation of a combined Yamaha YMF262 and Yamaha YM3812 emulator.
- Enabling the opl3 bit will switch the emulator to stereo opl3 output instead of regular mono opl2
- Except for the table generation it's all integer math
- Can choose different types of generators, using muls and bigger tables, try different ones for slower platforms
- The generation was based on the MAME implementation but tried to have it use less memory and be faster in general
- MAME uses much bigger envelope tables and this will be the biggest cause of it sounding different at times
-
- //TODO Don't delay first operator 1 sample in opl3 mode
- //TODO Maybe not use class method pointers but a regular function pointers with operator as first parameter
- //TODO Fix panning for the Percussion channels, would any opl3 player use it and actually really change it though?
- //TODO Check if having the same accuracy in all frequency multipliers sounds better or not
-
- //DUNNO Keyon in 4op, switch to 2op without keyoff.
+ DOSBox implementation of a combined Yamaha YMF262 and Yamaha YM3812 emulator.
+ Enabling the opl3 bit will switch the emulator to stereo opl3 output instead of regular mono opl2
+ Except for the table generation it's all integer math
+ Can choose different types of generators, using muls and bigger tables, try different ones for slower platforms
+ The generation was based on the MAME implementation but tried to have it use less memory and be faster in general
+ MAME uses much bigger envelope tables and this will be the biggest cause of it sounding different at times
+
+ //TODO Don't delay first operator 1 sample in opl3 mode
+ //TODO Maybe not use class method pointers but a regular function pointers with operator as first parameter
+ //TODO Fix panning for the Percussion channels, would any opl3 player use it and actually really change it though?
+ //TODO Check if having the same accuracy in all frequency multipliers sounds better or not
+
+ //DUNNO Keyon in 4op, switch to 2op without keyoff.
*/
-/* $Id: dbopl.cpp,v 1.10 2009-06-10 19:54:51 harekiet Exp $ */
#include <math.h>
@@ -45,2001 +39,1580 @@ typedef struct vswprintf {} swprintf;
#include <string.h>
#include "dbopl.h"
-#define DB_MAX(x, y) ((x) > (y) ? (x) : (y))
-#define DB_MIN(x, y) ((x) < (y) ? (x) : (y))
+#if defined(__GNUC__) && __GNUC__ > 3
+#define INLINE inline __attribute__((__always_inline__))
+#elif defined(_MSC_VER)
+#define INLINE __forceinline
+#else
+#define INLINE inline
+#endif
-#define DBOPL_CLAMP(V, MIN, MAX) DB_MAX(DB_MIN(V, (MAX)), (MIN))
+#if defined(__GNUC__)
+#if !defined(__clang__)
+#define GCC_LIKELY(x) __builtin_expect(x, 1)
+#define GCC_UNLIKELY(x) __builtin_expect(x, 0)
+#else // !defined(__clang__)
+#if !defined (__c2__) && defined(__has_builtin)
+#if __has_builtin(__builtin_expect)
+#define GCC_LIKELY(x) __builtin_expect(x, 1)
+#define GCC_UNLIKELY(x) __builtin_expect(x, 0)
+#endif // __has_builtin(__builtin_expect)
+#endif // !defined (__c2__) && defined(__has_builtin)
+#endif // !defined(__clang__)
+#endif // defined(__GNUC__)
+
+#if !defined(GCC_LIKELY)
+#define GCC_LIKELY(x) (x)
+#define GCC_UNLIKELY(x) (x)
+#endif
#ifndef PI
#define PI 3.14159265358979323846
#endif
-namespace DBOPL
-{
+namespace DBOPL {
-#define OPLRATE ((double)(14318180.0 / 288.0))
+#define OPLRATE ((double)(14318180.0 / 288.0))
#define TREMOLO_TABLE 52
- //Try to use most precision for frequencies
- //Else try to keep different waves in synch
- //#define WAVE_PRECISION 1
- #ifndef WAVE_PRECISION
- //Wave bits available in the top of the 32bit range
- //Original adlib uses 10.10, we use 10.22
-#define WAVE_BITS 10
- #else
- //Need some extra bits at the top to have room for octaves and frequency multiplier
- //We support to 8 times lower rate
- //128 * 15 * 8 = 15350, 2^13.9, so need 14 bits
-#define WAVE_BITS 14
- #endif
-#define WAVE_SH ( 32 - WAVE_BITS )
-#define WAVE_MASK ( ( 1 << WAVE_SH ) - 1 )
-
- //Use the same accuracy as the waves
+//Try to use most precision for frequencies
+//Else try to keep different waves in synch
+//#define WAVE_PRECISION 1
+#ifndef WAVE_PRECISION
+//Wave bits available in the top of the 32bit range
+//Original adlib uses 10.10, we use 10.22
+#define WAVE_BITS 10
+#else
+//Need some extra bits at the top to have room for octaves and frequency multiplier
+//We support to 8 times lower rate
+//128 * 15 * 8 = 15350, 2^13.9, so need 14 bits
+#define WAVE_BITS 14
+#endif
+#define WAVE_SH ( 32 - WAVE_BITS )
+#define WAVE_MASK ( ( 1 << WAVE_SH ) - 1 )
+
+//Use the same accuracy as the waves
#define LFO_SH ( WAVE_SH - 10 )
- //LFO is controlled by our tremolo 256 sample limit
+//LFO is controlled by our tremolo 256 sample limit
#define LFO_MAX ( 256 << ( LFO_SH ) )
- //Maximum amount of attenuation bits
- //Envelope goes to 511, 9 bits
- #if (DBOPL_WAVE == WAVE_TABLEMUL )
- //Uses the value directly
-#define ENV_BITS ( 9 )
- #else
- //Add 3 bits here for more accuracy and would have to be shifted up either way
-#define ENV_BITS ( 9 )
- #endif
- //Limits of the envelope with those bits and when the envelope goes silent
-#define ENV_MIN 0
-#define ENV_EXTRA ( ENV_BITS - 9 )
-#define ENV_MAX ( 511 << ENV_EXTRA )
-#define ENV_LIMIT ( ( 12 * 256) >> ( 3 - ENV_EXTRA ) )
+//Maximum amount of attenuation bits
+//Envelope goes to 511, 9 bits
+#if (DBOPL_WAVE == WAVE_TABLEMUL )
+//Uses the value directly
+#define ENV_BITS ( 9 )
+#else
+//Add 3 bits here for more accuracy and would have to be shifted up either way
+#define ENV_BITS ( 9 )
+#endif
+//Limits of the envelope with those bits and when the envelope goes silent
+#define ENV_MIN 0
+#define ENV_EXTRA ( ENV_BITS - 9 )
+#define ENV_MAX ( 511 << ENV_EXTRA )
+#define ENV_LIMIT ( ( 12 * 256) >> ( 3 - ENV_EXTRA ) )
#define ENV_SILENT( _X_ ) ( (_X_) >= ENV_LIMIT )
- //Attack/decay/release rate counter shift
-#define RATE_SH 24
-#define RATE_MASK ( ( 1 << RATE_SH ) - 1 )
- //Has to fit within 16bit lookuptable
-#define MUL_SH 16
+//Attack/decay/release rate counter shift
+#define RATE_SH 24
+#define RATE_MASK ( ( 1 << RATE_SH ) - 1 )
+//Has to fit within 16bit lookuptable
+#define MUL_SH 16
- //Check some ranges
- #if ENV_EXTRA > 3
+//Check some ranges
+#if ENV_EXTRA > 3
#error Too many envelope bits
- #endif
+#endif
- //How much to substract from the base value for the final attenuation
- static const Bit8u KslCreateTable[16] =
- {
- //0 will always be be lower than 7 * 8
- 64, 32, 24, 19,
- 16, 12, 11, 10,
- 8, 6, 5, 4,
- 3, 2, 1, 0,
- };
+//How much to substract from the base value for the final attenuation
+static const Bit8u KslCreateTable[16] = {
+ //0 will always be be lower than 7 * 8
+ 64, 32, 24, 19,
+ 16, 12, 11, 10,
+ 8, 6, 5, 4,
+ 3, 2, 1, 0,
+};
#define M(_X_) ((Bit8u)( (_X_) * 2))
- static const Bit8u FreqCreateTable[16] =
- {
- M(0.5), M(1), M(2), M(3), M(4), M(5), M(6), M(7),
- M(8), M(9), M(10), M(10), M(12), M(12), M(15), M(15)
- };
+static const Bit8u FreqCreateTable[16] = {
+ M(0.5), M(1 ), M(2 ), M(3 ), M(4 ), M(5 ), M(6 ), M(7 ),
+ M(8 ), M(9 ), M(10), M(10), M(12), M(12), M(15), M(15)
+};
#undef M
- //We're not including the highest attack rate, that gets a special value
- static const Bit8u AttackSamplesTable[13] =
- {
- 69, 55, 46, 40,
- 35, 29, 23, 20,
- 19, 15, 11, 10,
- 9
- };
- //On a real opl these values take 8 samples to reach and are based upon larger tables
- static const Bit8u EnvelopeIncreaseTable[13] =
- {
- 4, 5, 6, 7,
- 8, 10, 12, 14,
- 16, 20, 24, 28,
- 32,
- };
-
- #if ( DBOPL_WAVE == WAVE_HANDLER ) || ( DBOPL_WAVE == WAVE_TABLELOG )
- static Bit16u ExpTable[ 256 ];
- #endif
-
- #if ( DBOPL_WAVE == WAVE_HANDLER )
- //PI table used by WAVEHANDLER
- static Bit16u SinTable[ 512 ];
- #endif
-
- #if ( DBOPL_WAVE > WAVE_HANDLER )
- //Layout of the waveform table in 512 entry intervals
- //With overlapping waves we reduce the table to half it's size
-
- // | |//\\|____|WAV7|//__|/\ |____|/\/\|
- // |\\//| | |WAV7| | \/| | |
- // |06 |0126|17 |7 |3 |4 |4 5 |5 |
-
- //6 is just 0 shifted and masked
-
- static Bit16s WaveTable[ 8 * 512 ];
- //Distance into WaveTable the wave starts
- static const Bit16u WaveBaseTable[8] =
- {
- 0x000, 0x200, 0x200, 0x800,
- 0xa00, 0xc00, 0x100, 0x400,
-
- };
- //Mask the counter with this
- static const Bit16u WaveMaskTable[8] =
- {
- 1023, 1023, 511, 511,
- 1023, 1023, 512, 1023,
- };
-
- //Where to start the counter on at keyon
- static const Bit16u WaveStartTable[8] =
- {
- 512, 0, 0, 0,
- 0, 512, 512, 256,
- };
- #endif
-
- #if ( DBOPL_WAVE == WAVE_TABLEMUL )
- static Bit16u MulTable[ 384 ];
- #endif
-
- static Bit8u KslTable[ 8 * 16 ];
- static Bit8u TremoloTable[ TREMOLO_TABLE ];
- //Start of a channel behind the chip struct start
- static Bit16u ChanOffsetTable[32];
- //Start of an operator behind the chip struct start
- static Bit16u OpOffsetTable[64];
-
- //The lower bits are the shift of the operator vibrato value
- //The highest bit is right shifted to generate -1 or 0 for negation
- //So taking the highest input value of 7 this gives 3, 7, 3, 0, -3, -7, -3, 0
- static const Bit8s VibratoTable[ 8 ] =
- {
- 1 - 0x00, 0 - 0x00, 1 - 0x00, 30 - 0x00,
- 1 - 0x80, 0 - 0x80, 1 - 0x80, 30 - 0x80
- };
-
- //Shift strength for the ksl value determined by ksl strength
- static const Bit8u KslShiftTable[4] =
- {
- 31, 1, 2, 0
- };
-
- //Generate a table index and table shift value using input value from a selected rate
- static void EnvelopeSelect(Bit8u val, Bit8u &index, Bit8u &shift)
- {
- if(val < 13 * 4) //Rate 0 - 12
- {
- shift = 12 - (val >> 2);
- index = val & 3;
- }
- else if(val < 15 * 4) //rate 13 - 14
- {
- shift = 0;
- index = val - 12 * 4;
- }
- else //rate 15 and up
- {
- shift = 0;
- index = 12;
- }
- }
-
- #if ( DBOPL_WAVE == WAVE_HANDLER )
- /*
- Generate the different waveforms out of the sine/exponetial table using handlers
- */
- static inline Bits MakeVolume(Bitu wave, Bitu volume)
- {
- Bitu total = wave + volume;
- Bitu index = total & 0xff;
- Bitu sig = ExpTable[ index ];
- Bitu exp = total >> 8;
- #if 0
-
- //Check if we overflow the 31 shift limit
- if(exp >= 32)
- LOG_MSG("WTF %d %d", total, exp);
-
- #endif
- return (sig >> exp);
- };
-
- static Bits DB_FASTCALL WaveForm0(Bitu i, Bitu volume)
- {
- Bits neg = 0 - ((i >> 9) & 1); //Create ~0 or 0
- Bitu wave = SinTable[i & 511];
- return (MakeVolume(wave, volume) ^ neg) - neg;
- }
- static Bits DB_FASTCALL WaveForm1(Bitu i, Bitu volume)
- {
- Bit32u wave = SinTable[i & 511];
- wave |= (((i ^ 512) & 512) - 1) >> (32 - 12);
- return MakeVolume(wave, volume);
- }
- static Bits DB_FASTCALL WaveForm2(Bitu i, Bitu volume)
- {
- Bitu wave = SinTable[i & 511];
- return MakeVolume(wave, volume);
- }
- static Bits DB_FASTCALL WaveForm3(Bitu i, Bitu volume)
- {
- Bitu wave = SinTable[i & 255];
- wave |= (((i ^ 256) & 256) - 1) >> (32 - 12);
- return MakeVolume(wave, volume);
- }
- static Bits DB_FASTCALL WaveForm4(Bitu i, Bitu volume)
- {
- //Twice as fast
- i <<= 1;
- Bits neg = 0 - ((i >> 9) & 1); //Create ~0 or 0
- Bitu wave = SinTable[i & 511];
- wave |= (((i ^ 512) & 512) - 1) >> (32 - 12);
- return (MakeVolume(wave, volume) ^ neg) - neg;
- }
- static Bits DB_FASTCALL WaveForm5(Bitu i, Bitu volume)
- {
- //Twice as fast
- i <<= 1;
- Bitu wave = SinTable[i & 511];
- wave |= (((i ^ 512) & 512) - 1) >> (32 - 12);
- return MakeVolume(wave, volume);
- }
- static Bits DB_FASTCALL WaveForm6(Bitu i, Bitu volume)
- {
- Bits neg = 0 - ((i >> 9) & 1); //Create ~0 or 0
- return (MakeVolume(0, volume) ^ neg) - neg;
- }
- static Bits DB_FASTCALL WaveForm7(Bitu i, Bitu volume)
- {
- //Negative is reversed here
- Bits neg = ((i >> 9) & 1) - 1;
- Bitu wave = (i << 3);
- //When negative the volume also runs backwards
- wave = ((wave ^ neg) - neg) & 4095;
- return (MakeVolume(wave, volume) ^ neg) - neg;
- }
-
- static const WaveHandler WaveHandlerTable[8] =
- {
- WaveForm0, WaveForm1, WaveForm2, WaveForm3,
- WaveForm4, WaveForm5, WaveForm6, WaveForm7
- };
-
- #endif
-
- /*
- Operator
- */
-
- //We zero out when rate == 0
- inline void Operator::UpdateAttack(const Chip *chip)
- {
- Bit8u rate = reg60 >> 4;
-
- if(rate)
- {
- Bit8u val = (rate << 2) + ksr;
- attackAdd = chip->attackRates[ val ];
- rateZero &= ~(1 << ATTACK);
- }
- else
- {
- attackAdd = 0;
- rateZero |= (1 << ATTACK);
- }
- }
- inline void Operator::UpdateDecay(const Chip *chip)
- {
- Bit8u rate = reg60 & 0xf;
-
- if(rate)
- {
- Bit8u val = (rate << 2) + ksr;
- decayAdd = chip->linearRates[ val ];
- rateZero &= ~(1 << DECAY);
- }
- else
- {
- decayAdd = 0;
- rateZero |= (1 << DECAY);
- }
- }
- inline void Operator::UpdateRelease(const Chip *chip)
- {
- Bit8u rate = reg80 & 0xf;
-
- if(rate)
- {
- Bit8u val = (rate << 2) + ksr;
- releaseAdd = chip->linearRates[ val ];
- rateZero &= ~(1 << RELEASE);
-
- if(!(reg20 & MASK_SUSTAIN))
- rateZero &= ~(1 << SUSTAIN);
- }
- else
- {
- rateZero |= (1 << RELEASE);
- releaseAdd = 0;
-
- if(!(reg20 & MASK_SUSTAIN))
- rateZero |= (1 << SUSTAIN);
- }
- }
-
- inline void Operator::UpdateAttenuation()
- {
- Bit8u kslBase = (Bit8u)((chanData >> SHIFT_KSLBASE) & 0xff);
- Bit32u tl = reg40 & 0x3f;
- Bit8u kslShift = KslShiftTable[ reg40 >> 6 ];
- //Make sure the attenuation goes to the right bits
- totalLevel = tl << (ENV_BITS - 7); //Total level goes 2 bits below max
- totalLevel += (kslBase << ENV_EXTRA) >> kslShift;
- }
-
- void Operator::UpdateFrequency()
- {
- Bit32u freq = chanData & ((1 << 10) - 1);
- Bit32u block = (chanData >> 10) & 0xff;
- #ifdef WAVE_PRECISION
- block = 7 - block;
- waveAdd = (freq * freqMul) >> block;
- #else
- waveAdd = (freq << block) * freqMul;
- #endif
-
- if(reg20 & MASK_VIBRATO)
- {
- vibStrength = (Bit8u)(freq >> 7);
- #ifdef WAVE_PRECISION
- vibrato = (vibStrength * freqMul) >> block;
- #else
- vibrato = (vibStrength << block) * freqMul;
- #endif
- }
- else
- {
- vibStrength = 0;
- vibrato = 0;
- }
- }
-
- void Operator::UpdateRates(const Chip *chip)
- {
- //Mame seems to reverse this where enabling ksr actually lowers
- //the rate, but pdf manuals says otherwise?
- Bit8u newKsr = (Bit8u)((chanData >> SHIFT_KEYCODE) & 0xff);
-
- if(!(reg20 & MASK_KSR))
- newKsr >>= 2;
-
- if(ksr == newKsr)
- return;
-
- ksr = newKsr;
- UpdateAttack(chip);
- UpdateDecay(chip);
- UpdateRelease(chip);
- }
-
- INLINE Bit32s Operator::RateForward(Bit32u add)
- {
- rateIndex += add;
- Bit32s ret = rateIndex >> RATE_SH;
- rateIndex = rateIndex & RATE_MASK;
- return ret;
- }
-
- template< Operator::State yes>
- Bits Operator::TemplateVolume()
- {
- Bit32s vol = volume;
- Bit32s change;
-
- switch(yes)
- {
- case OFF:
- return ENV_MAX;
-
- case ATTACK:
- change = RateForward(attackAdd);
-
- if(!change)
- return vol;
-
- vol += ((~vol) * change) >> 3;
-
- if(vol < ENV_MIN)
- {
- volume = ENV_MIN;
- rateIndex = 0;
- SetState(DECAY);
- return ENV_MIN;
- }
-
- break;
-
- case DECAY:
- vol += RateForward(decayAdd);
-
- if(GCC_UNLIKELY(vol >= sustainLevel))
- {
- //Check if we didn't overshoot max attenuation, then just go off
- if(GCC_UNLIKELY(vol >= ENV_MAX))
- {
- volume = ENV_MAX;
- SetState(OFF);
- return ENV_MAX;
- }
-
- //Continue as sustain
- rateIndex = 0;
- SetState(SUSTAIN);
- }
-
- break;
-
- case SUSTAIN:
- if(reg20 & MASK_SUSTAIN)
- return vol;
-
- //In sustain phase, but not sustaining, do regular release
- case RELEASE:
- vol += RateForward(releaseAdd);;
-
- if(GCC_UNLIKELY(vol >= ENV_MAX))
- {
- volume = ENV_MAX;
- SetState(OFF);
- return ENV_MAX;
- }
-
- break;
- }
-
- volume = vol;
- return vol;
- }
-
- static const VolumeHandler VolumeHandlerTable[5] =
- {
- &Operator::TemplateVolume< Operator::OFF >,
- &Operator::TemplateVolume< Operator::RELEASE >,
- &Operator::TemplateVolume< Operator::SUSTAIN >,
- &Operator::TemplateVolume< Operator::DECAY >,
- &Operator::TemplateVolume< Operator::ATTACK >
- };
-
- INLINE Bitu Operator::ForwardVolume()
- {
- return currentLevel + (this->*volHandler)();
- }
-
-
- INLINE Bitu Operator::ForwardWave()
- {
- waveIndex += waveCurrent;
- return waveIndex >> WAVE_SH;
- }
-
- void Operator::Write20(const Chip *chip, Bit8u val)
- {
- Bit8u change = (reg20 ^ val);
-
- if(!change)
- return;
-
- reg20 = val;
- //Shift the tremolo bit over the entire register, saved a branch, YES!
- tremoloMask = (Bit8s)(val) >> 7;
- tremoloMask &= ~((1 << ENV_EXTRA) - 1);
-
- //Update specific features based on changes
- if(change & MASK_KSR)
- UpdateRates(chip);
-
- //With sustain enable the volume doesn't change
- if(reg20 & MASK_SUSTAIN || (!releaseAdd))
- rateZero |= (1 << SUSTAIN);
- else
- rateZero &= ~(1 << SUSTAIN);
-
- //Frequency multiplier or vibrato changed
- if(change & (0xf | MASK_VIBRATO))
- {
- freqMul = chip->freqMul[ val & 0xf ];
- UpdateFrequency();
- }
- }
-
- void Operator::Write40(const Chip * /*chip*/, Bit8u val)
- {
- if(!(reg40 ^ val))
- return;
-
- reg40 = val;
- UpdateAttenuation();
- }
-
- void Operator::Write60(const Chip *chip, Bit8u val)
- {
- Bit8u change = reg60 ^ val;
- reg60 = val;
-
- if(change & 0x0f)
- UpdateDecay(chip);
-
- if(change & 0xf0)
- UpdateAttack(chip);
- }
-
- void Operator::Write80(const Chip *chip, Bit8u val)
- {
- Bit8u change = (reg80 ^ val);
-
- if(!change)
- return;
-
- reg80 = val;
- Bit8u sustain = val >> 4;
- //Turn 0xf into 0x1f
- sustain |= (sustain + 1) & 0x10;
- sustainLevel = sustain << (ENV_BITS - 5);
-
- if(change & 0x0f)
- UpdateRelease(chip);
- }
-
- void Operator::WriteE0(const Chip *chip, Bit8u val)
- {
- if(!(regE0 ^ val))
- return;
-
- //in opl3 mode you can always selet 7 waveforms regardless of waveformselect
- Bit8u waveForm = val & ((0x3 & chip->waveFormMask) | (0x7 & chip->opl3Active));
- regE0 = val;
- #if ( DBOPL_WAVE == WAVE_HANDLER )
- waveHandler = WaveHandlerTable[ waveForm ];
- #else
- waveBase = WaveTable + WaveBaseTable[ waveForm ];
- waveStart = WaveStartTable[ waveForm ] << WAVE_SH;
- waveMask = WaveMaskTable[ waveForm ];
- #endif
- }
-
- INLINE void Operator::SetState(Bit8u s)
- {
- state = s;
- volHandler = VolumeHandlerTable[ s ];
- }
-
- INLINE bool Operator::Silent() const
- {
- if(!ENV_SILENT(totalLevel + volume))
- return false;
-
- if(!(rateZero & (1 << state)))
- return false;
-
- return true;
- }
-
- INLINE void Operator::Prepare(const Chip *chip)
- {
- currentLevel = totalLevel + (chip->tremoloValue & tremoloMask);
- waveCurrent = waveAdd;
-
- if(vibStrength >> chip->vibratoShift)
- {
- Bit32s add = vibrato >> chip->vibratoShift;
- //Sign extend over the shift value
- Bit32s neg = chip->vibratoSign;
- //Negate the add with -1 or 0
- add = (add ^ neg) - neg;
- waveCurrent += add;
- }
- }
-
- void Operator::KeyOn(Bit8u mask)
- {
- if(!keyOn)
- {
- //Restart the frequency generator
- #if ( DBOPL_WAVE > WAVE_HANDLER )
- waveIndex = waveStart;
- #else
- waveIndex = 0;
- #endif
- rateIndex = 0;
- SetState(ATTACK);
- }
-
- keyOn |= mask;
- }
-
- void Operator::KeyOff(Bit8u mask)
- {
- keyOn &= ~mask;
-
- if(!keyOn)
- {
- if(state != OFF)
- SetState(RELEASE);
- }
- }
-
- INLINE Bits Operator::GetWave(Bitu index, Bitu vol)
- {
- #if ( DBOPL_WAVE == WAVE_HANDLER )
- return waveHandler(index, vol << (3 - ENV_EXTRA));
- #elif ( DBOPL_WAVE == WAVE_TABLEMUL )
- return (waveBase[ index & waveMask ] * MulTable[ vol >> ENV_EXTRA ]) >> MUL_SH;
- #elif ( DBOPL_WAVE == WAVE_TABLELOG )
- Bit32s wave = waveBase[ index & waveMask ];
- Bit32u total = (wave & 0x7fff) + vol << (3 - ENV_EXTRA);
- Bit32s sig = ExpTable[ total & 0xff ];
- Bit32u exp = total >> 8;
- Bit32s neg = wave >> 16;
- return ((sig ^ neg) - neg) >> exp;
- #else
+//We're not including the highest attack rate, that gets a special value
+static const Bit8u AttackSamplesTable[13] = {
+ 69, 55, 46, 40,
+ 35, 29, 23, 20,
+ 19, 15, 11, 10,
+ 9
+};
+//On a real opl these values take 8 samples to reach and are based upon larger tables
+static const Bit8u EnvelopeIncreaseTable[13] = {
+ 4, 5, 6, 7,
+ 8, 10, 12, 14,
+ 16, 20, 24, 28,
+ 32,
+};
+
+#if ( DBOPL_WAVE == WAVE_HANDLER ) || ( DBOPL_WAVE == WAVE_TABLELOG )
+static Bit16u ExpTable[ 256 ];
+#endif
+
+#if ( DBOPL_WAVE == WAVE_HANDLER )
+//PI table used by WAVEHANDLER
+static Bit16u SinTable[ 512 ];
+#endif
+
+#if ( DBOPL_WAVE > WAVE_HANDLER )
+//Layout of the waveform table in 512 entry intervals
+//With overlapping waves we reduce the table to half it's size
+
+// | |//\\|____|WAV7|//__|/\ |____|/\/\|
+// |\\//| | |WAV7| | \/| | |
+// |06 |0126|17 |7 |3 |4 |4 5 |5 |
+
+//6 is just 0 shifted and masked
+
+static Bit16s WaveTable[ 8 * 512 ];
+//Distance into WaveTable the wave starts
+static const Bit16u WaveBaseTable[8] = {
+ 0x000, 0x200, 0x200, 0x800,
+ 0xa00, 0xc00, 0x100, 0x400,
+
+};
+//Mask the counter with this
+static const Bit16u WaveMaskTable[8] = {
+ 1023, 1023, 511, 511,
+ 1023, 1023, 512, 1023,
+};
+
+//Where to start the counter on at keyon
+static const Bit16u WaveStartTable[8] = {
+ 512, 0, 0, 0,
+ 0, 512, 512, 256,
+};
+#endif
+
+#if ( DBOPL_WAVE == WAVE_TABLEMUL )
+static Bit16u MulTable[ 384 ];
+#endif
+
+static Bit8u KslTable[ 8 * 16 ];
+static Bit8u TremoloTable[ TREMOLO_TABLE ];
+//Start of a channel behind the chip struct start
+static Bit16u ChanOffsetTable[32];
+//Start of an operator behind the chip struct start
+static Bit16u OpOffsetTable[64];
+
+//The lower bits are the shift of the operator vibrato value
+//The highest bit is right shifted to generate -1 or 0 for negation
+//So taking the highest input value of 7 this gives 3, 7, 3, 0, -3, -7, -3, 0
+static const Bit8s VibratoTable[ 8 ] = {
+ 1 - 0x00, 0 - 0x00, 1 - 0x00, 30 - 0x00,
+ 1 - 0x80, 0 - 0x80, 1 - 0x80, 30 - 0x80
+};
+
+//Shift strength for the ksl value determined by ksl strength
+static const Bit8u KslShiftTable[4] = {
+ 31,1,2,0
+};
+
+//Generate a table index and table shift value using input value from a selected rate
+static void EnvelopeSelect( Bit8u val, Bit8u& index, Bit8u& shift ) {
+ if ( val < 13 * 4 ) { //Rate 0 - 12
+ shift = 12 - ( val >> 2 );
+ index = val & 3;
+ } else if ( val < 15 * 4 ) { //rate 13 - 14
+ shift = 0;
+ index = val - 12 * 4;
+ } else { //rate 15 and up
+ shift = 0;
+ index = 12;
+ }
+}
+
+#if ( DBOPL_WAVE == WAVE_HANDLER )
+/*
+ Generate the different waveforms out of the sine/exponetial table using handlers
+*/
+static inline Bits MakeVolume( Bitu wave, Bitu volume ) {
+ Bitu total = wave + volume;
+ Bitu index = total & 0xff;
+ Bitu sig = ExpTable[ index ];
+ Bitu exp = total >> 8;
+#if 0
+ //Check if we overflow the 31 shift limit
+ if ( exp >= 32 ) {
+ LOG_MSG( "WTF %d %d", total, exp );
+ }
+#endif
+ return (sig >> exp);
+};
+
+static Bits DB_FASTCALL WaveForm0( Bitu i, Bitu volume ) {
+ Bits neg = 0 - (( i >> 9) & 1);//Create ~0 or 0
+ Bitu wave = SinTable[i & 511];
+ return (MakeVolume( wave, volume ) ^ neg) - neg;
+}
+static Bits DB_FASTCALL WaveForm1( Bitu i, Bitu volume ) {
+ Bit32u wave = SinTable[i & 511];
+ wave |= ( ( (i ^ 512 ) & 512) - 1) >> ( 32 - 12 );
+ return MakeVolume( wave, volume );
+}
+static Bits DB_FASTCALL WaveForm2( Bitu i, Bitu volume ) {
+ Bitu wave = SinTable[i & 511];
+ return MakeVolume( wave, volume );
+}
+static Bits DB_FASTCALL WaveForm3( Bitu i, Bitu volume ) {
+ Bitu wave = SinTable[i & 255];
+ wave |= ( ( (i ^ 256 ) & 256) - 1) >> ( 32 - 12 );
+ return MakeVolume( wave, volume );
+}
+static Bits DB_FASTCALL WaveForm4( Bitu i, Bitu volume ) {
+ //Twice as fast
+ i <<= 1;
+ Bits neg = 0 - (( i >> 9) & 1);//Create ~0 or 0
+ Bitu wave = SinTable[i & 511];
+ wave |= ( ( (i ^ 512 ) & 512) - 1) >> ( 32 - 12 );
+ return (MakeVolume( wave, volume ) ^ neg) - neg;
+}
+static Bits DB_FASTCALL WaveForm5( Bitu i, Bitu volume ) {
+ //Twice as fast
+ i <<= 1;
+ Bitu wave = SinTable[i & 511];
+ wave |= ( ( (i ^ 512 ) & 512) - 1) >> ( 32 - 12 );
+ return MakeVolume( wave, volume );
+}
+static Bits DB_FASTCALL WaveForm6( Bitu i, Bitu volume ) {
+ Bits neg = 0 - (( i >> 9) & 1);//Create ~0 or 0
+ return (MakeVolume( 0, volume ) ^ neg) - neg;
+}
+static Bits DB_FASTCALL WaveForm7( Bitu i, Bitu volume ) {
+ //Negative is reversed here
+ Bits neg = (( i >> 9) & 1) - 1;
+ Bitu wave = (i << 3);
+ //When negative the volume also runs backwards
+ wave = ((wave ^ neg) - neg) & 4095;
+ return (MakeVolume( wave, volume ) ^ neg) - neg;
+}
+
+static const WaveHandler WaveHandlerTable[8] = {
+ WaveForm0, WaveForm1, WaveForm2, WaveForm3,
+ WaveForm4, WaveForm5, WaveForm6, WaveForm7
+};
+
+#endif
+
+/*
+ Operator
+*/
+
+//We zero out when rate == 0
+inline void Operator::UpdateAttack( const Chip* chip ) {
+ Bit8u rate = reg60 >> 4;
+ if ( rate ) {
+ Bit8u val = (rate << 2) + ksr;
+ attackAdd = chip->attackRates[ val ];
+ rateZero &= ~(1 << ATTACK);
+ } else {
+ attackAdd = 0;
+ rateZero |= (1 << ATTACK);
+ }
+}
+inline void Operator::UpdateDecay( const Chip* chip ) {
+ Bit8u rate = reg60 & 0xf;
+ if ( rate ) {
+ Bit8u val = (rate << 2) + ksr;
+ decayAdd = chip->linearRates[ val ];
+ rateZero &= ~(1 << DECAY);
+ } else {
+ decayAdd = 0;
+ rateZero |= (1 << DECAY);
+ }
+}
+inline void Operator::UpdateRelease( const Chip* chip ) {
+ Bit8u rate = reg80 & 0xf;
+ if ( rate ) {
+ Bit8u val = (rate << 2) + ksr;
+ releaseAdd = chip->linearRates[ val ];
+ rateZero &= ~(1 << RELEASE);
+ if ( !(reg20 & MASK_SUSTAIN ) ) {
+ rateZero &= ~( 1 << SUSTAIN );
+ }
+ } else {
+ rateZero |= (1 << RELEASE);
+ releaseAdd = 0;
+ if ( !(reg20 & MASK_SUSTAIN ) ) {
+ rateZero |= ( 1 << SUSTAIN );
+ }
+ }
+}
+
+inline void Operator::UpdateAttenuation( ) {
+ Bit8u kslBase = (Bit8u)((chanData >> SHIFT_KSLBASE) & 0xff);
+ Bit32u tl = reg40 & 0x3f;
+ Bit8u kslShift = KslShiftTable[ reg40 >> 6 ];
+ //Make sure the attenuation goes to the right bits
+ totalLevel = tl << ( ENV_BITS - 7 ); //Total level goes 2 bits below max
+ totalLevel += ( kslBase << ENV_EXTRA ) >> kslShift;
+}
+
+void Operator::UpdateFrequency( ) {
+ Bit32u freq = chanData & (( 1 << 10 ) - 1);
+ Bit32u block = (chanData >> 10) & 0xff;
+#ifdef WAVE_PRECISION
+ block = 7 - block;
+ waveAdd = ( freq * freqMul ) >> block;
+#else
+ waveAdd = ( freq << block ) * freqMul;
+#endif
+ if ( reg20 & MASK_VIBRATO ) {
+ vibStrength = (Bit8u)(freq >> 7);
+
+#ifdef WAVE_PRECISION
+ vibrato = ( vibStrength * freqMul ) >> block;
+#else
+ vibrato = ( vibStrength << block ) * freqMul;
+#endif
+ } else {
+ vibStrength = 0;
+ vibrato = 0;
+ }
+}
+
+void Operator::UpdateRates( const Chip* chip ) {
+ //Mame seems to reverse this where enabling ksr actually lowers
+ //the rate, but pdf manuals says otherwise?
+ Bit8u newKsr = (Bit8u)((chanData >> SHIFT_KEYCODE) & 0xff);
+ if ( !( reg20 & MASK_KSR ) ) {
+ newKsr >>= 2;
+ }
+ if ( ksr == newKsr )
+ return;
+ ksr = newKsr;
+ UpdateAttack( chip );
+ UpdateDecay( chip );
+ UpdateRelease( chip );
+}
+
+INLINE Bit32s Operator::RateForward( Bit32u add ) {
+ rateIndex += add;
+ Bit32s ret = rateIndex >> RATE_SH;
+ rateIndex = rateIndex & RATE_MASK;
+ return ret;
+}
+
+template< Operator::State yes>
+Bits Operator::TemplateVolume( ) {
+ Bit32s vol = volume;
+ Bit32s change;
+ switch ( yes ) {
+ case OFF:
+ return ENV_MAX;
+ case ATTACK:
+ change = RateForward( attackAdd );
+ if ( !change )
+ return vol;
+ vol += ( (~vol) * change ) >> 3;
+ if ( vol < ENV_MIN ) {
+ volume = ENV_MIN;
+ rateIndex = 0;
+ SetState( DECAY );
+ return ENV_MIN;
+ }
+ break;
+ case DECAY:
+ vol += RateForward( decayAdd );
+ if ( GCC_UNLIKELY(vol >= sustainLevel) ) {
+ //Check if we didn't overshoot max attenuation, then just go off
+ if ( GCC_UNLIKELY(vol >= ENV_MAX) ) {
+ volume = ENV_MAX;
+ SetState( OFF );
+ return ENV_MAX;
+ }
+ //Continue as sustain
+ rateIndex = 0;
+ SetState( SUSTAIN );
+ }
+ break;
+ case SUSTAIN:
+ if ( reg20 & MASK_SUSTAIN ) {
+ return vol;
+ }
+ //In sustain phase, but not sustaining, do regular release
+ case RELEASE:
+ vol += RateForward( releaseAdd );;
+ if ( GCC_UNLIKELY(vol >= ENV_MAX) ) {
+ volume = ENV_MAX;
+ SetState( OFF );
+ return ENV_MAX;
+ }
+ break;
+ }
+ volume = vol;
+ return vol;
+}
+
+static const VolumeHandler VolumeHandlerTable[5] = {
+ &Operator::TemplateVolume< Operator::OFF >,
+ &Operator::TemplateVolume< Operator::RELEASE >,
+ &Operator::TemplateVolume< Operator::SUSTAIN >,
+ &Operator::TemplateVolume< Operator::DECAY >,
+ &Operator::TemplateVolume< Operator::ATTACK >
+};
+
+INLINE Bitu Operator::ForwardVolume() {
+ return currentLevel + (this->*volHandler)();
+}
+
+
+INLINE Bitu Operator::ForwardWave() {
+ waveIndex += waveCurrent;
+ return waveIndex >> WAVE_SH;
+}
+
+void Operator::Write20( const Chip* chip, Bit8u val ) {
+ Bit8u change = (reg20 ^ val );
+ if ( !change )
+ return;
+ reg20 = val;
+ //Shift the tremolo bit over the entire register, saved a branch, YES!
+ tremoloMask = (Bit8s)(val) >> 7;
+ tremoloMask &= ~(( 1 << ENV_EXTRA ) -1);
+ //Update specific features based on changes
+ if ( change & MASK_KSR ) {
+ UpdateRates( chip );
+ }
+ //With sustain enable the volume doesn't change
+ if ( reg20 & MASK_SUSTAIN || ( !releaseAdd ) ) {
+ rateZero |= ( 1 << SUSTAIN );
+ } else {
+ rateZero &= ~( 1 << SUSTAIN );
+ }
+ //Frequency multiplier or vibrato changed
+ if ( change & (0xf | MASK_VIBRATO) ) {
+ freqMul = chip->freqMul[ val & 0xf ];
+ UpdateFrequency();
+ }
+}
+
+void Operator::Write40( const Chip* /*chip*/, Bit8u val ) {
+ if (!(reg40 ^ val ))
+ return;
+ reg40 = val;
+ UpdateAttenuation( );
+}
+
+void Operator::Write60( const Chip* chip, Bit8u val ) {
+ Bit8u change = reg60 ^ val;
+ reg60 = val;
+ if ( change & 0x0f ) {
+ UpdateDecay( chip );
+ }
+ if ( change & 0xf0 ) {
+ UpdateAttack( chip );
+ }
+}
+
+void Operator::Write80( const Chip* chip, Bit8u val ) {
+ Bit8u change = (reg80 ^ val );
+ if ( !change )
+ return;
+ reg80 = val;
+ Bit8u sustain = val >> 4;
+ //Turn 0xf into 0x1f
+ sustain |= ( sustain + 1) & 0x10;
+ sustainLevel = sustain << ( ENV_BITS - 5 );
+ if ( change & 0x0f ) {
+ UpdateRelease( chip );
+ }
+}
+
+void Operator::WriteE0( const Chip* chip, Bit8u val ) {
+ if ( !(regE0 ^ val) )
+ return;
+ //in opl3 mode you can always selet 7 waveforms regardless of waveformselect
+ Bit8u waveForm = val & ( ( 0x3 & chip->waveFormMask ) | (0x7 & chip->opl3Active ) );
+ regE0 = val;
+#if ( DBOPL_WAVE == WAVE_HANDLER )
+ waveHandler = WaveHandlerTable[ waveForm ];
+#else
+ waveBase = WaveTable + WaveBaseTable[ waveForm ];
+ waveStart = WaveStartTable[ waveForm ] << WAVE_SH;
+ waveMask = WaveMaskTable[ waveForm ];
+#endif
+}
+
+INLINE void Operator::SetState( Bit8u s ) {
+ state = s;
+ volHandler = VolumeHandlerTable[ s ];
+}
+
+INLINE bool Operator::Silent() const {
+ if ( !ENV_SILENT( totalLevel + volume ) )
+ return false;
+ if ( !(rateZero & ( 1 << state ) ) )
+ return false;
+ return true;
+}
+
+INLINE void Operator::Prepare( const Chip* chip ) {
+ currentLevel = totalLevel + (chip->tremoloValue & tremoloMask);
+ waveCurrent = waveAdd;
+ if ( vibStrength >> chip->vibratoShift ) {
+ Bit32s add = vibrato >> chip->vibratoShift;
+ //Sign extend over the shift value
+ Bit32s neg = chip->vibratoSign;
+ //Negate the add with -1 or 0
+ add = ( add ^ neg ) - neg;
+ waveCurrent += add;
+ }
+}
+
+void Operator::KeyOn( Bit8u mask ) {
+ if ( !keyOn ) {
+ //Restart the frequency generator
+#if ( DBOPL_WAVE > WAVE_HANDLER )
+ waveIndex = waveStart;
+#else
+ waveIndex = 0;
+#endif
+ rateIndex = 0;
+ SetState( ATTACK );
+ }
+ keyOn |= mask;
+}
+
+void Operator::KeyOff( Bit8u mask ) {
+ keyOn &= ~mask;
+ if ( !keyOn ) {
+ if ( state != OFF ) {
+ SetState( RELEASE );
+ }
+ }
+}
+
+INLINE Bits Operator::GetWave( Bitu index, Bitu vol ) {
+#if ( DBOPL_WAVE == WAVE_HANDLER )
+ return waveHandler( index, vol << ( 3 - ENV_EXTRA ) );
+#elif ( DBOPL_WAVE == WAVE_TABLEMUL )
+ return (waveBase[ index & waveMask ] * MulTable[ vol >> ENV_EXTRA ]) >> MUL_SH;
+#elif ( DBOPL_WAVE == WAVE_TABLELOG )
+ Bit32s wave = waveBase[ index & waveMask ];
+ Bit32u total = ( wave & 0x7fff ) + vol << ( 3 - ENV_EXTRA );
+ Bit32s sig = ExpTable[ total & 0xff ];
+ Bit32u exp = total >> 8;
+ Bit32s neg = wave >> 16;
+ return ((sig ^ neg) - neg) >> exp;
+#else
#error "No valid wave routine"
- #endif
- }
-
- Bits INLINE Operator::GetSample(Bits modulation)
- {
- Bitu vol = ForwardVolume();
-
- if(ENV_SILENT(vol))
- {
- //Simply forward the wave
- waveIndex += waveCurrent;
- return 0;
- }
- else
- {
- Bitu index = ForwardWave();
- index += modulation;
- return GetWave(index, vol);
- }
- }
-
- Operator::Operator()
- {
- chanData = 0;
- freqMul = 0;
- waveIndex = 0;
- waveAdd = 0;
- waveCurrent = 0;
- keyOn = 0;
- ksr = 0;
- reg20 = 0;
- reg40 = 0;
- reg60 = 0;
- reg80 = 0;
- regE0 = 0;
- SetState(OFF);
- rateZero = (1 << OFF);
- sustainLevel = ENV_MAX;
- currentLevel = ENV_MAX;
- totalLevel = ENV_MAX;
- volume = ENV_MAX;
- releaseAdd = 0;
- }
-
- /*
- Channel
- */
-
- Channel::Channel()
- {
- old[0] = old[1] = 0;
- chanData = 0;
- regB0 = 0;
- regC0 = 0;
- maskLeft = -1;
- maskRight = -1;
- feedback = 31;
- fourMask = 0;
- synthHandler = &Channel::BlockTemplate< sm2FM >;
- }
-
- void Channel::SetChanData(const Chip *chip, Bit32u data)
- {
- Bit32u change = chanData ^ data;
- chanData = data;
- Op(0)->chanData = data;
- Op(1)->chanData = data;
- //Since a frequency update triggered this, always update frequency
- Op(0)->UpdateFrequency();
- Op(1)->UpdateFrequency();
-
- if(change & (0xff << SHIFT_KSLBASE))
- {
- Op(0)->UpdateAttenuation();
- Op(1)->UpdateAttenuation();
- }
-
- if(change & (0xff << SHIFT_KEYCODE))
- {
- Op(0)->UpdateRates(chip);
- Op(1)->UpdateRates(chip);
- }
- }
-
- void Channel::UpdateFrequency(const Chip *chip, Bit8u fourOp)
- {
- //Extrace the frequency bits
- Bit32u data = chanData & 0xffff;
- Bit32u kslBase = KslTable[ data >> 6 ];
- Bit32u keyCode = (data & 0x1c00) >> 9;
-
- if(chip->reg08 & 0x40)
- {
- keyCode |= (data & 0x100) >> 8; /* notesel == 1 */
- }
- else
- {
- keyCode |= (data & 0x200) >> 9; /* notesel == 0 */
- }
-
- //Add the keycode and ksl into the highest bits of chanData
- data |= (keyCode << SHIFT_KEYCODE) | (kslBase << SHIFT_KSLBASE);
- (this + 0)->SetChanData(chip, data);
-
- if(fourOp & 0x3f)
- (this + 1)->SetChanData(chip, data);
- }
-
- void Channel::WriteA0(const Chip *chip, Bit8u val)
- {
- Bit8u fourOp = chip->reg104 & chip->opl3Active & fourMask;
-
- //Don't handle writes to silent fourop channels
- if(fourOp > 0x80)
- return;
-
- Bit32u change = (chanData ^ val) & 0xff;
-
- if(change)
- {
- chanData ^= change;
- UpdateFrequency(chip, fourOp);
- }
- }
-
- void Channel::WriteB0(const Chip *chip, Bit8u val)
- {
- Bit8u fourOp = chip->reg104 & chip->opl3Active & fourMask;
-
- //Don't handle writes to silent fourop channels
- if(fourOp > 0x80)
- return;
-
- Bitu change = (chanData ^ (val << 8)) & 0x1f00;
-
- if(change)
- {
- chanData ^= change;
- UpdateFrequency(chip, fourOp);
- }
-
- //Check for a change in the keyon/off state
- if(!((val ^ regB0) & 0x20))
- return;
-
- regB0 = val;
-
- if(val & 0x20)
- {
- Op(0)->KeyOn(0x1);
- Op(1)->KeyOn(0x1);
-
- if(fourOp & 0x3f)
- {
- (this + 1)->Op(0)->KeyOn(1);
- (this + 1)->Op(1)->KeyOn(1);
- }
- }
- else
- {
- Op(0)->KeyOff(0x1);
- Op(1)->KeyOff(0x1);
-
- if(fourOp & 0x3f)
- {
- (this + 1)->Op(0)->KeyOff(1);
- (this + 1)->Op(1)->KeyOff(1);
- }
- }
- }
-
- void Channel::WriteC0(const Chip *chip, Bit8u val)
- {
- Bit8u change = val ^ regC0;
-
- if(!change)
- return;
-
- regC0 = val;
- feedback = (val >> 1) & 7;
-
- if(feedback)
- {
- //We shift the input to the right 10 bit wave index value
- feedback = 9 - feedback;
- }
- else
- feedback = 31;
-
- //Select the new synth mode
- if(chip->opl3Active)
- {
- //4-op mode enabled for this channel
- if((chip->reg104 & fourMask) & 0x3f)
- {
- Channel *chan0, *chan1;
-
- //Check if it's the 2nd channel in a 4-op
- if(!(fourMask & 0x80))
- {
- chan0 = this;
- chan1 = this + 1;
- }
- else
- {
- chan0 = this - 1;
- chan1 = this;
- }
-
- Bit8u synth = ((chan0->regC0 & 1) << 0) | ((chan1->regC0 & 1) << 1);
-
- switch(synth)
- {
- case 0:
- chan0->synthHandler = &Channel::BlockTemplate< sm3FMFM >;
- break;
-
- case 1:
- chan0->synthHandler = &Channel::BlockTemplate< sm3AMFM >;
- break;
-
- case 2:
- chan0->synthHandler = &Channel::BlockTemplate< sm3FMAM >;
- break;
-
- case 3:
- chan0->synthHandler = &Channel::BlockTemplate< sm3AMAM >;
- break;
- }
-
- //Disable updating percussion channels
- }
- else if((fourMask & 0x40) && (chip->regBD & 0x20))
- {
- //Regular dual op, am or fm
- }
- else if(val & 1)
- synthHandler = &Channel::BlockTemplate< sm3AM >;
- else
- synthHandler = &Channel::BlockTemplate< sm3FM >;
-
- maskLeft = (val & 0x10) ? -1 : 0;
- maskRight = (val & 0x20) ? -1 : 0;
- //opl2 active
- }
- else
- {
- //Disable updating percussion channels
- if((fourMask & 0x40) && (chip->regBD & 0x20))
- {
- //Regular dual op, am or fm
- }
- else if(val & 1)
- synthHandler = &Channel::BlockTemplate< sm2AM >;
- else
- synthHandler = &Channel::BlockTemplate< sm2FM >;
- }
- }
-
- void Channel::ResetC0(const Chip *chip)
- {
- Bit8u val = regC0;
- regC0 ^= 0xff;
- WriteC0(chip, val);
- }
-
- template< bool opl3Mode>
- INLINE void Channel::GeneratePercussion(Chip *chip, Bit32s *output)
- {
- Channel *chan = this;
- //BassDrum
- Bit32s mod = (Bit32u)((old[0] + old[1])) >> feedback;
- old[0] = old[1];
- old[1] = Op(0)->GetSample(mod);
-
- //When bassdrum is in AM mode first operator is ignoed
- if(chan->regC0 & 1)
- mod = 0;
- else
- mod = old[0];
-
- Bit32s sample = Op(1)->GetSample(mod);
- //Precalculate stuff used by other outputs
- Bit32u noiseBit = chip->ForwardNoise() & 0x1;
- Bit32u c2 = Op(2)->ForwardWave();
- Bit32u c5 = Op(5)->ForwardWave();
- Bit32u phaseBit = (((c2 & 0x88) ^ ((c2 << 5) & 0x80)) | ((c5 ^ (c5 << 2)) & 0x20)) ? 0x02 : 0x00;
- //Hi-Hat
- Bit32u hhVol = Op(2)->ForwardVolume();
-
- if(!ENV_SILENT(hhVol))
- {
- Bit32u hhIndex = (phaseBit << 8) | (0x34 << (phaseBit ^ (noiseBit << 1)));
- sample += Op(2)->GetWave(hhIndex, hhVol);
- }
-
- //Snare Drum
- Bit32u sdVol = Op(3)->ForwardVolume();
-
- if(!ENV_SILENT(sdVol))
- {
- Bit32u sdIndex = (0x100 + (c2 & 0x100)) ^ (noiseBit << 8);
- sample += Op(3)->GetWave(sdIndex, sdVol);
- }
-
- //Tom-tom
- sample += Op(4)->GetSample(0);
- //Top-Cymbal
- Bit32u tcVol = Op(5)->ForwardVolume();
-
- if(!ENV_SILENT(tcVol))
- {
- Bit32u tcIndex = (1 + phaseBit) << 8;
- sample += Op(5)->GetWave(tcIndex, tcVol);
- }
-
- sample <<= 1;
-
- if(opl3Mode)
- {
- output[0] += sample;
- output[1] += sample;
- }
- else
- output[0] += sample;
- }
-
- template<SynthMode mode>
- Channel *Channel::BlockTemplate(Chip *chip, Bit32u samples, Bit32s *output)
- {
- switch(mode)
- {
- case sm2AM:
- case sm3AM:
- if(Op(0)->Silent() && Op(1)->Silent())
- {
- old[0] = old[1] = 0;
- return (this + 1);
- }
-
- break;
-
- case sm2FM:
- case sm3FM:
- if(Op(1)->Silent())
- {
- old[0] = old[1] = 0;
- return (this + 1);
- }
-
- break;
-
- case sm3FMFM:
- if(Op(3)->Silent())
- {
- old[0] = old[1] = 0;
- return (this + 2);
- }
-
- break;
-
- case sm3AMFM:
- if(Op(0)->Silent() && Op(3)->Silent())
- {
- old[0] = old[1] = 0;
- return (this + 2);
- }
-
- break;
-
- case sm3FMAM:
- if(Op(1)->Silent() && Op(3)->Silent())
- {
- old[0] = old[1] = 0;
- return (this + 2);
- }
-
- break;
-
- case sm3AMAM:
- if(Op(0)->Silent() && Op(2)->Silent() && Op(3)->Silent())
- {
- old[0] = old[1] = 0;
- return (this + 2);
- }
-
- break;
-
- default:
- break;
- }
-
- //Init the operators with the the current vibrato and tremolo values
- Op(0)->Prepare(chip);
- Op(1)->Prepare(chip);
-
- if(mode > sm4Start)
- {
- Op(2)->Prepare(chip);
- Op(3)->Prepare(chip);
- }
-
- if(mode > sm6Start)
- {
- Op(4)->Prepare(chip);
- Op(5)->Prepare(chip);
- }
-
- for(Bitu i = 0; i < samples; i++)
- {
- //Early out for percussion handlers
- if(mode == sm2Percussion)
- {
- GeneratePercussion<false>(chip, output + i);
- continue; //Prevent some unitialized value bitching
- }
- else if(mode == sm3Percussion)
- {
- GeneratePercussion<true>(chip, output + i * 2);
- continue; //Prevent some unitialized value bitching
- }
-
- //Do unsigned shift so we can shift out all bits but still stay in 10 bit range otherwise
- Bit32s mod = (Bit32u)((old[0] + old[1])) >> feedback;
- old[0] = old[1];
- old[1] = Op(0)->GetSample(mod);
- Bit32s sample;
- Bit32s out0 = old[0];
-
- if(mode == sm2AM || mode == sm3AM)
- sample = out0 + Op(1)->GetSample(0);
- else if(mode == sm2FM || mode == sm3FM)
- sample = Op(1)->GetSample(out0);
- else if(mode == sm3FMFM)
- {
- Bits next = Op(1)->GetSample(out0);
- next = Op(2)->GetSample(next);
- sample = Op(3)->GetSample(next);
- }
- else if(mode == sm3AMFM)
- {
- sample = out0;
- Bits next = Op(1)->GetSample(0);
- next = Op(2)->GetSample(next);
- sample += Op(3)->GetSample(next);
- }
- else if(mode == sm3FMAM)
- {
- sample = Op(1)->GetSample(out0);
- Bits next = Op(2)->GetSample(0);
- sample += Op(3)->GetSample(next);
- }
- else if(mode == sm3AMAM)
- {
- sample = out0;
- Bits next = Op(1)->GetSample(0);
- sample += Op(2)->GetSample(next);
- sample += Op(3)->GetSample(0);
- }
-
- switch(mode)
- {
- case sm2AM:
- case sm2FM:
- output[ i ] += sample;
- break;
-
- case sm3AM:
- case sm3FM:
- case sm3FMFM:
- case sm3AMFM:
- case sm3FMAM:
- case sm3AMAM:
- output[ i * 2 + 0 ] += sample & maskLeft;
- output[ i * 2 + 1 ] += sample & maskRight;
- break;
-
- default:
- break;
- }
- }
-
- switch(mode)
- {
- case sm2AM:
- case sm2FM:
- case sm3AM:
- case sm3FM:
- return (this + 1);
-
- case sm3FMFM:
- case sm3AMFM:
- case sm3FMAM:
- case sm3AMAM:
- return(this + 2);
-
- case sm2Percussion:
- case sm3Percussion:
- return(this + 3);
- }
-
- return 0;
- }
-
- /*
- Chip
- */
-
- Chip::Chip()
- {
- reg08 = 0;
- reg04 = 0;
- regBD = 0;
- reg104 = 0;
- opl3Active = 0;
- //Extra zeros!
- vibratoIndex = 0;
- tremoloIndex = 0;
- vibratoSign = 0;
- vibratoShift = 0;
- tremoloValue = 0;
- vibratoStrength = 0;
- tremoloStrength = 0;
- waveFormMask = 0;
- lfoCounter = 0;
- lfoAdd = 0;
- noiseCounter = 0;
- noiseAdd = 0;
- noiseValue = 0;
- memset(freqMul, 0, sizeof(Bit32u) * 16);
- memset(linearRates, 0, sizeof(Bit32u) * 76);
- memset(attackRates, 0, sizeof(Bit32u) * 76);
- }
-
- INLINE Bit32u Chip::ForwardNoise()
- {
- noiseCounter += noiseAdd;
- Bitu count = noiseCounter >> LFO_SH;
- noiseCounter &= WAVE_MASK;
-
- for(; count > 0; --count)
- {
- //Noise calculation from mame
- noiseValue ^= (0x800302) & (0 - (noiseValue & 1));
- noiseValue >>= 1;
- }
-
- return noiseValue;
- }
-
- INLINE Bit32u Chip::ForwardLFO(Bit32u samples)
- {
- //Current vibrato value, runs 4x slower than tremolo
- vibratoSign = (VibratoTable[ vibratoIndex >> 2]) >> 7;
- vibratoShift = (VibratoTable[ vibratoIndex >> 2] & 7) + vibratoStrength;
- tremoloValue = TremoloTable[ tremoloIndex ] >> tremoloStrength;
- //Check hom many samples there can be done before the value changes
- Bit32u todo = LFO_MAX - lfoCounter;
- Bit32u count = (todo + lfoAdd - 1) / lfoAdd;
-
- if(count > samples)
- {
- count = samples;
- lfoCounter += count * lfoAdd;
- }
- else
- {
- lfoCounter += count * lfoAdd;
- lfoCounter &= (LFO_MAX - 1);
- //Maximum of 7 vibrato value * 4
- vibratoIndex = (vibratoIndex + 1) & 31;
-
- //Clip tremolo to the the table size
- if(tremoloIndex + 1 < TREMOLO_TABLE)
- ++tremoloIndex;
- else
- tremoloIndex = 0;
- }
-
- return count;
- }
-
-
- void Chip::WriteBD(Bit8u val)
- {
- Bit8u change = regBD ^ val;
-
- if(!change)
- return;
-
- regBD = val;
- //TODO could do this with shift and xor?
- vibratoStrength = (val & 0x40) ? 0x00 : 0x01;
- tremoloStrength = (val & 0x80) ? 0x00 : 0x02;
-
- if(val & 0x20)
- {
- //Drum was just enabled, make sure channel 6 has the right synth
- if(change & 0x20)
- {
- if(opl3Active)
- chan[6].synthHandler = &Channel::BlockTemplate< sm3Percussion >;
- else
- chan[6].synthHandler = &Channel::BlockTemplate< sm2Percussion >;
- }
-
- //Bass Drum
- if(val & 0x10)
- {
- chan[6].op[0].KeyOn(0x2);
- chan[6].op[1].KeyOn(0x2);
- }
- else
- {
- chan[6].op[0].KeyOff(0x2);
- chan[6].op[1].KeyOff(0x2);
- }
-
- //Hi-Hat
- if(val & 0x1)
- chan[7].op[0].KeyOn(0x2);
- else
- chan[7].op[0].KeyOff(0x2);
-
- //Snare
- if(val & 0x8)
- chan[7].op[1].KeyOn(0x2);
- else
- chan[7].op[1].KeyOff(0x2);
-
- //Tom-Tom
- if(val & 0x4)
- chan[8].op[0].KeyOn(0x2);
- else
- chan[8].op[0].KeyOff(0x2);
-
- //Top Cymbal
- if(val & 0x2)
- chan[8].op[1].KeyOn(0x2);
- else
- chan[8].op[1].KeyOff(0x2);
-
- //Toggle keyoffs when we turn off the percussion
- }
- else if(change & 0x20)
- {
- //Trigger a reset to setup the original synth handler
- chan[6].ResetC0(this);
- chan[6].op[0].KeyOff(0x2);
- chan[6].op[1].KeyOff(0x2);
- chan[7].op[0].KeyOff(0x2);
- chan[7].op[1].KeyOff(0x2);
- chan[8].op[0].KeyOff(0x2);
- chan[8].op[1].KeyOff(0x2);
- }
- }
-
-
-#define REGOP( _FUNC_ ) \
- index = ( ( reg >> 3) & 0x20 ) | ( reg & 0x1f ); \
- if ( OpOffsetTable[ index ] ) { \
- Operator* regOp = (Operator*)( ((char *)this ) + OpOffsetTable[ index ] ); \
- regOp->_FUNC_( this, val ); \
- }
-
-#define REGCHAN( _FUNC_ ) \
- index = ( ( reg >> 4) & 0x10 ) | ( reg & 0xf ); \
- if ( ChanOffsetTable[ index ] ) { \
- Channel* regChan = (Channel*)( ((char *)this ) + ChanOffsetTable[ index ] ); \
- regChan->_FUNC_( this, val ); \
- }
-
- void Chip::WriteReg(Bit32u reg, Bit8u val)
- {
- Bitu index = 0;
-
- switch((reg & 0xf0) >> 4)
- {
- case 0x00 >> 4:
- if(reg == 0x01)
- waveFormMask = (val & 0x20) ? 0x7 : 0x0;
- else if(reg == 0x104)
- {
- //Only detect changes in lowest 6 bits
- if(!((reg104 ^ val) & 0x3f))
- return;
-
- //Always keep the highest bit enabled, for checking > 0x80
- reg104 = 0x80 | (val & 0x3f);
- }
- else if(reg == 0x105)
- {
- //MAME says the real opl3 doesn't reset anything on opl3 disable/enable till the next write in another register
- if(!((opl3Active ^ val) & 1))
- return;
-
- opl3Active = (val & 1) ? 0xff : 0;
-
- //Update the 0xc0 register for all channels to signal the switch to mono/stereo handlers
- for(int i = 0; i < 18; i++)
- chan[i].ResetC0(this);
- }
- else if(reg == 0x08)
- reg08 = val;
-
- case 0x10 >> 4:
- break;
-
- case 0x20 >> 4:
- case 0x30 >> 4:
- REGOP(Write20);
- break;
-
- case 0x40 >> 4:
- case 0x50 >> 4:
- REGOP(Write40);
- break;
-
- case 0x60 >> 4:
- case 0x70 >> 4:
- REGOP(Write60);
- break;
-
- case 0x80 >> 4:
- case 0x90 >> 4:
- REGOP(Write80);
- break;
-
- case 0xa0 >> 4:
- REGCHAN(WriteA0);
- break;
-
- case 0xb0 >> 4:
- if(reg == 0xbd)
- WriteBD(val);
- else
- REGCHAN(WriteB0);
-
- break;
-
- case 0xc0 >> 4:
- REGCHAN(WriteC0);
-
- case 0xd0 >> 4:
- break;
-
- case 0xe0 >> 4:
- case 0xf0 >> 4:
- REGOP(WriteE0);
- break;
- }
- }
-
-
- Bit32u Chip::WriteAddr(Bit32u port, Bit8u val)
- {
- switch(port & 3)
- {
- case 0:
- return val;
-
- case 2:
- if(opl3Active || (val == 0x05))
- return 0x100 | val;
- else
- return val;
- }
-
- return 0;
- }
-
- void Chip::GenerateBlock2(Bitu total, Bit32s *output)
- {
- while(total > 0)
- {
- Bit32u samples = ForwardLFO(total);
- memset(output, 0, sizeof(Bit32s) * samples);
- int count = 0;
-
- for(Channel *ch = chan; ch < chan + 9;)
- {
- count++;
- ch = (ch->*(ch->synthHandler))(this, samples, output);
- }
-
- total -= samples;
- output += samples;
- }
- }
-
- void Chip::GenerateBlock3(Bitu total, Bit32s *output)
- {
- while(total > 0)
- {
- Bit32u samples = ForwardLFO((Bit32u)total);
- memset(output, 0, sizeof(Bit32s) * samples * 2);
- int count = 0;
-
- for(Channel *ch = chan; ch < chan + 18;)
- {
- count++;
- ch = (ch->*(ch->synthHandler))(this, samples, output);
- }
-
- total -= samples;
- output += samples * 2;
- }
- }
-
- void Chip::GenerateBlock2_Mix(Bitu total, Bit32s *output)
- {
- while(total > 0)
- {
- Bit32u samples = ForwardLFO((Bit32u)total);
- int count = 0;
- for(Channel *ch = chan; ch < chan + 9;)
- {
- count++;
- ch = (ch->*(ch->synthHandler))(this, samples, output);
- }
-
- total -= samples;
- output += samples;
- }
- }
-
- void Chip::GenerateBlock3_Mix(Bitu total, Bit32s *output)
- {
- while(total > 0)
- {
- Bit32u samples = ForwardLFO(total);
- int count = 0;
- for(Channel *ch = chan; ch < chan + 18;)
- {
- count++;
- ch = (ch->*(ch->synthHandler))(this, samples, output);
- }
- total -= samples;
- output += samples * 2;
- }
- }
-
- void Chip::Setup(Bit32u rate)
- {
- double original = OPLRATE;
- // double original = rate;
- double scale = original / (double)rate;
- //Noise counter is run at the same precision as general waves
- noiseAdd = (Bit32u)(0.5 + scale * (1 << LFO_SH));
- noiseCounter = 0;
- noiseValue = 1; //Make sure it triggers the noise xor the first time
- //The low frequency oscillation counter
- //Every time his overflows vibrato and tremoloindex are increased
- lfoAdd = (Bit32u)(0.5 + scale * (1 << LFO_SH));
- lfoCounter = 0;
- vibratoIndex = 0;
- tremoloIndex = 0;
- //With higher octave this gets shifted up
- //-1 since the freqCreateTable = *2
- #ifdef WAVE_PRECISION
- double freqScale = (1 << 7) * scale * (1 << (WAVE_SH - 1 - 10));
-
- for(int i = 0; i < 16; i++)
- freqMul[i] = (Bit32u)(0.5 + freqScale * FreqCreateTable[ i ]);
-
- #else
- Bit32u freqScale = (Bit32u)(0.5 + scale * (1 << (WAVE_SH - 1 - 10)));
-
- for(int i = 0; i < 16; i++)
- freqMul[i] = freqScale * FreqCreateTable[ i ];
-
- #endif
-
- //-3 since the real envelope takes 8 steps to reach the single value we supply
- for(Bit8u i = 0; i < 76; i++)
- {
- Bit8u index, shift;
- EnvelopeSelect(i, index, shift);
- linearRates[i] = (Bit32u)(scale * (EnvelopeIncreaseTable[ index ] << (RATE_SH + ENV_EXTRA - shift - 3)));
- }
-
- if(rate == 48000)
- {
- /* BISQWIT ADD: Use precalculated table for this common sample-rate.
- * Because the actual generation code, below, is MOLASSES SLOW on DOS.
- */
- static const Bit32u precalculated_table[62] =
- {
- 2152, 2700, 3228, 3712, 4304, 5399, 6456, 7424, 8608, 10799, 12912, 14849, 17216, 21598,
- 25824, 29698, 34432, 43196, 51650, 59398, 68864, 86392, 103310, 118795, 137746, 172847,
- 206619, 237693, 275559, 345774, 413238, 475500, 543030, 678787, 814545, 950302, 1086060,
- 1357575, 1629090, 1900605, 2172120, 2715151, 3258181, 3801211, 4344241, 5430302,
- 6516362, 7602423, 8688483, 10860604, 13032725, 15204846, 17376967, 21721209, 26065451,
- 30409693, 34753934, 43442418, 52130902, 60819386, 69507869, 69507869
- };
-
- for(Bit8u i = 0; i < 62; i++)
- attackRates[i] = precalculated_table[i];
- }
- else if(rate == 44100)
- {
- static const Bit32u precalculated_table[62] =
- {
- 2342, 2939, 3513, 4040, 4685, 5877, 7027, 8081, 9369, 11754, 14054, 16162, 18738, 23508,
- 28108, 32325, 37478, 47018, 56219, 64649, 74965, 94044, 112448, 129292, 149929, 188132,
- 224945, 258713, 300002, 376263, 449999, 517550, 591053, 738816, 886579, 1034343, 1182106,
- 1477633, 1773159, 2068686, 2364213, 2955266, 3546319, 4137373, 4728426, 5910533,
- 7092639, 8274746, 9456853, 11821066, 14185279, 16549492, 18913706, 23642132, 28370559,
- 33098985, 37827412, 47284265, 56741118, 66197971, 75654824, 75654824
- };
-
- for(Bit8u i = 0; i < 62; i++)
- attackRates[i] = precalculated_table[i];
- }
- else if(rate == 22050)
- {
- static const Bit32u precalculated_table[62] =
- {
- 4685, 5877, 7027, 8081, 9369, 11754, 14054, 16162, 18738, 23508, 28108, 32325, 37478,
- 47018, 56219, 64649, 74965, 94044, 112448, 129292, 149929, 188132, 224945, 258713, 300002,
- 376263, 449999, 517550, 591053, 738816, 886579, 1034343, 1182106, 1477633, 1773159,
- 2068686, 2364213, 2955266, 3546319, 4137373, 4728426, 5910533, 7092639, 8274746,
- 9456853, 11821066, 14185279, 16549492, 18913706, 23642132, 28370559, 33098985,
- 37827412, 47284265, 56741118, 66197971, 75654824, 94568530, 113482236, 132395942,
- 151309648, 151309648
- };
-
- for(Bit8u i = 0; i < 62; i++)
- attackRates[i] = precalculated_table[i];
- }
- //Generate the best matching attack rate
- else for(Bit8u i = 0; i < 62; i++)
- {
- Bit8u index, shift;
- EnvelopeSelect(i, index, shift);
- //Original amount of samples the attack would take
- Bit32s original = (Bit32u)((AttackSamplesTable[ index ] << shift) / scale);
- Bit32s guessAdd = (Bit32u)(scale * (EnvelopeIncreaseTable[ index ] << (RATE_SH - shift - 3)));
- Bit32s bestAdd = guessAdd;
- Bit32u bestDiff = 1 << 30;
-
- for(Bit32u passes = 0; passes < 16; passes ++)
- {
- Bit32s volume = ENV_MAX;
- Bit32s samples = 0;
- Bit32u count = 0;
-
- while(volume > 0 && samples < original * 2)
- {
- count += guessAdd;
- Bit32s change = count >> RATE_SH;
- count &= RATE_MASK;
-
- if(GCC_UNLIKELY(change)) // less than 1 %
- volume += (~volume * change) >> 3;
-
- samples++;
- }
-
- Bit32s diff = original - samples;
- Bit32u lDiff = labs(diff);
-
- //Init last on first pass
- if(lDiff < bestDiff)
- {
- bestDiff = lDiff;
- bestAdd = guessAdd;
-
- if(!bestDiff)
- break;
- }
-
- //Below our target
- if(diff < 0)
- {
- //Better than the last time
- Bit32s mul = ((original - diff) << 12) / original;
- guessAdd = ((guessAdd * mul) >> 12);
- guessAdd++;
- }
- else if(diff > 0)
- {
- Bit32s mul = ((original - diff) << 12) / original;
- guessAdd = (guessAdd * mul) >> 12;
- guessAdd--;
- }
- }
-
- attackRates[i] = bestAdd;
- }
-
- /*fprintf(stderr, "attack rate table: ");
- for ( Bit8u i = 0; i < 62; i++ )
- fprintf(stderr, ",%u", attackRates[i]);
- fprintf(stderr, "\n");*/
-
- for(Bit8u i = 62; i < 76; i++)
- {
- //This should provide instant volume maximizing
- attackRates[i] = 8 << RATE_SH;
- }
-
- //Setup the channels with the correct four op flags
- //Channels are accessed through a table so they appear linear here
- chan[ 0].fourMask = 0x00 | (1 << 0);
- chan[ 1].fourMask = 0x80 | (1 << 0);
- chan[ 2].fourMask = 0x00 | (1 << 1);
- chan[ 3].fourMask = 0x80 | (1 << 1);
- chan[ 4].fourMask = 0x00 | (1 << 2);
- chan[ 5].fourMask = 0x80 | (1 << 2);
- chan[ 9].fourMask = 0x00 | (1 << 3);
- chan[10].fourMask = 0x80 | (1 << 3);
- chan[11].fourMask = 0x00 | (1 << 4);
- chan[12].fourMask = 0x80 | (1 << 4);
- chan[13].fourMask = 0x00 | (1 << 5);
- chan[14].fourMask = 0x80 | (1 << 5);
- //mark the percussion channels
- chan[ 6].fourMask = 0x40;
- chan[ 7].fourMask = 0x40;
- chan[ 8].fourMask = 0x40;
- //Clear Everything in opl3 mode
- WriteReg(0x105, 0x1);
-
- for(int i = 0; i < 512; i++)
- {
- if(i == 0x105)
- continue;
-
- WriteReg(i, 0xff);
- WriteReg(i, 0x0);
- }
-
- WriteReg(0x105, 0x0);
-
- //Clear everything in opl2 mode
- for(int i = 0; i < 255; i++)
- {
- WriteReg(i, 0xff);
- WriteReg(i, 0x0);
- }
- }
-
- static bool doneTables = false;
- void InitTables(void)
- {
- if(doneTables)
- return;
-
- doneTables = true;
- #if ( DBOPL_WAVE == WAVE_HANDLER ) || ( DBOPL_WAVE == WAVE_TABLELOG )
-
- //Exponential volume table, same as the real adlib
- for(int i = 0; i < 256; i++)
- {
- //Save them in reverse
- ExpTable[i] = (int)(0.5 + (pow(2.0, (255 - i) * (1.0 / 256)) - 1) * 1024);
- ExpTable[i] += 1024; //or remove the -1 oh well :)
- //Preshift to the left once so the final volume can shift to the right
- ExpTable[i] *= 2;
- }
-
- #endif
- #if ( DBOPL_WAVE == WAVE_HANDLER )
-
- //Add 0.5 for the trunc rounding of the integer cast
- //Do a PI sinetable instead of the original 0.5 PI
- for(int i = 0; i < 512; i++)
- SinTable[i] = (Bit16s)(0.5 - log10(sin((i + 0.5) * (PI / 512.0))) / log10(2.0) * 256);
-
- #endif
- #if ( DBOPL_WAVE == WAVE_TABLEMUL )
-
- //Multiplication based tables
- for(int i = 0; i < 384; i++)
- {
- int s = i * 8;
- //TODO maybe keep some of the precision errors of the original table?
- double val = (0.5 + (pow(2.0, -1.0 + (255 - s) * (1.0 / 256))) * (1 << MUL_SH));
- MulTable[i] = (Bit16u)(val);
- }
-
- //Sine Wave Base
- for(int i = 0; i < 512; i++)
- {
- WaveTable[ 0x0200 + i ] = (Bit16s)(sin((i + 0.5) * (PI / 512.0)) * 4084);
- WaveTable[ 0x0000 + i ] = -WaveTable[ 0x200 + i ];
- }
-
- //Exponential wave
- for(int i = 0; i < 256; i++)
- {
- WaveTable[ 0x700 + i ] = (Bit16s)(0.5 + (pow(2.0, -1.0 + (255 - i * 8) * (1.0 / 256))) * 4085);
- WaveTable[ 0x6ff - i ] = -WaveTable[ 0x700 + i ];
- }
-
- #endif
- #if ( DBOPL_WAVE == WAVE_TABLELOG )
-
- //Sine Wave Base
- for(int i = 0; i < 512; i++)
- {
- WaveTable[ 0x0200 + i ] = (Bit16s)(0.5 - log10(sin((i + 0.5) * (PI / 512.0))) / log10(2.0) * 256);
- WaveTable[ 0x0000 + i ] = ((Bit16s)0x8000) | WaveTable[ 0x200 + i];
- }
-
- //Exponential wave
- for(int i = 0; i < 256; i++)
- {
- WaveTable[ 0x700 + i ] = i * 8;
- WaveTable[ 0x6ff - i ] = ((Bit16s)0x8000) | i * 8;
- }
-
- #endif
- // | |//\\|____|WAV7|//__|/\ |____|/\/\|
- // |\\//| | |WAV7| | \/| | |
- // |06 |0126|27 |7 |3 |4 |4 5 |5 |
- #if (( DBOPL_WAVE == WAVE_TABLELOG ) || ( DBOPL_WAVE == WAVE_TABLEMUL ))
-
- for(int i = 0; i < 256; i++)
- {
- //Fill silence gaps
- WaveTable[ 0x400 + i ] = WaveTable[0];
- WaveTable[ 0x500 + i ] = WaveTable[0];
- WaveTable[ 0x900 + i ] = WaveTable[0];
- WaveTable[ 0xc00 + i ] = WaveTable[0];
- WaveTable[ 0xd00 + i ] = WaveTable[0];
- //Replicate sines in other pieces
- WaveTable[ 0x800 + i ] = WaveTable[ 0x200 + i ];
- //double speed sines
- WaveTable[ 0xa00 + i ] = WaveTable[ 0x200 + i * 2 ];
- WaveTable[ 0xb00 + i ] = WaveTable[ 0x000 + i * 2 ];
- WaveTable[ 0xe00 + i ] = WaveTable[ 0x200 + i * 2 ];
- WaveTable[ 0xf00 + i ] = WaveTable[ 0x200 + i * 2 ];
- }
-
- #endif
-
- //Create the ksl table
- for(int oct = 0; oct < 8; oct++)
- {
- int base = oct * 8;
-
- for(int i = 0; i < 16; i++)
- {
- int val = base - KslCreateTable[i];
-
- if(val < 0)
- val = 0;
-
- //*4 for the final range to match attenuation range
- KslTable[ oct * 16 + i ] = val * 4;
- }
- }
-
- //Create the Tremolo table, just increase and decrease a triangle wave
- for(Bit8u i = 0; i < TREMOLO_TABLE / 2; i++)
- {
- Bit8u val = i << ENV_EXTRA;
- TremoloTable[i] = val;
- TremoloTable[TREMOLO_TABLE - 1 - i] = val;
- }
-
- //Create a table with offsets of the channels from the start of the chip
- DBOPL::Chip *chip = 0;
-
- for(Bitu i = 0; i < 32; i++)
- {
- Bitu index = i & 0xf;
-
- if(index >= 9)
- {
- ChanOffsetTable[i] = 0;
- continue;
- }
-
- //Make sure the four op channels follow eachother
- if(index < 6)
- index = (index % 3) * 2 + (index / 3);
-
- //Add back the bits for highest ones
- if(i >= 16)
- index += 9;
-
- intptr_t blah = reinterpret_cast<intptr_t>(&(chip->chan[ index ]));
- ChanOffsetTable[i] = static_cast<Bit16u>(blah);
- }
-
- //Same for operators
- for(Bitu i = 0; i < 64; i++)
- {
- if(i % 8 >= 6 || ((i / 8) % 4 == 3))
- {
- OpOffsetTable[i] = 0;
- continue;
- }
-
- Bitu chNum = (i / 8) * 3 + (i % 8) % 3;
-
- //Make sure we use 16 and up for the 2nd range to match the chanoffset gap
- if(chNum >= 12)
- chNum += 16 - 12;
-
- Bitu opNum = (i % 8) / 3;
- DBOPL::Channel *chan = NULL;
- intptr_t blah = reinterpret_cast<intptr_t>(&(chan->op[opNum]));
- OpOffsetTable[i] = static_cast<Bit16u>((intptr_t)ChanOffsetTable[ chNum ] + blah);
- }
-
- #if 0
-
- //Stupid checks if table's are correct
- for(Bitu i = 0; i < 18; i++)
- {
- Bit32u find = (Bit16u)(&(chip->chan[ i ]));
-
- for(Bitu c = 0; c < 32; c++)
- {
- if(ChanOffsetTable[c] == find)
- {
- find = 0;
- break;
- }
- }
-
- if(find)
- find = find;
- }
-
- for(Bitu i = 0; i < 36; i++)
- {
- Bit32u find = (Bit16u)(&(chip->chan[ i / 2 ].op[i % 2]));
-
- for(Bitu c = 0; c < 64; c++)
- {
- if(OpOffsetTable[c] == find)
- {
- find = 0;
- break;
- }
- }
-
- if(find)
- find = find;
- }
-
- #endif
- }
-
- Bit32u Handler::WriteAddr(Bit32u port, Bit8u val)
- {
- return chip.WriteAddr(port, val);
- }
- void Handler::WriteReg(Bit32u addr, Bit8u val)
- {
- chip.WriteReg(addr, val);
- }
-
- void Handler::Generate(void(*AddSamples_m32)(Bitu, Bit32s *),
- void(*AddSamples_s32)(Bitu, Bit32s *),
- Bitu samples)
- {
- Bit32s buffer[ 512 * 2 ];
-
- if(GCC_UNLIKELY(samples > 512))
- samples = 512;
-
- if(!chip.opl3Active)
- {
- chip.GenerateBlock2(samples, buffer);
- AddSamples_m32(samples, buffer);
- }
- else
- {
- chip.GenerateBlock3(samples, buffer);
- AddSamples_s32(samples, buffer);
- }
- }
-
- void Handler::GenerateArr(Bit32s *out, Bitu *samples)
- {
- if(GCC_UNLIKELY(*samples > 512))
- *samples = 512;
-
- if(!chip.opl3Active)
- chip.GenerateBlock2(*samples, out);
- else
- chip.GenerateBlock3(*samples, out);
- }
-
- void Handler::GenerateArr(Bit32s *out, ssize_t *samples)
- {
- if(GCC_UNLIKELY(*samples > 512))
- *samples = 512;
-
- if(!chip.opl3Active)
- chip.GenerateBlock2(static_cast<Bitu>(*samples), out);
- else
- chip.GenerateBlock3(static_cast<Bitu>(*samples), out);
- }
-
- void Handler::GenerateArr(Bit16s *out, ssize_t *samples)
- {
- Bit32s out32[1024];
- if(GCC_UNLIKELY(*samples > 512))
- *samples = 512;
- memset(out32, 0, sizeof(Bit32s) * 1024);
- if(!chip.opl3Active)
- chip.GenerateBlock2(static_cast<Bitu>(*samples), out32);
- else
- chip.GenerateBlock3(static_cast<Bitu>(*samples), out32);
- ssize_t sz = *samples * 2;
- for(ssize_t i = 0; i < sz; i++)
- out[i] = static_cast<Bit16s>(DBOPL_CLAMP(out32[i], static_cast<ssize_t>(INT16_MIN), static_cast<ssize_t>(INT16_MAX)));
- }
-
- void Handler::GenerateArrMix(Bit32s *out, ssize_t *samples)
- {
- if(GCC_UNLIKELY(*samples > 512))
- *samples = 512;
- if(!chip.opl3Active)
- chip.GenerateBlock2_Mix(static_cast<Bitu>(*samples), out);
- else
- chip.GenerateBlock3_Mix(static_cast<Bitu>(*samples), out);
- }
-
- void Handler::GenerateArrMix(Bit16s *out, ssize_t *samples)
- {
- Bit32s out32[1024];
- if(GCC_UNLIKELY(*samples > 512))
- *samples = 512;
- memset(out32, 0, sizeof(Bit32s) * 1024);
- if(!chip.opl3Active)
- chip.GenerateBlock2(static_cast<Bitu>(*samples), out32);
- else
- chip.GenerateBlock3(static_cast<Bitu>(*samples), out32);
- ssize_t sz = *samples * 2;
- for(ssize_t i = 0; i < sz; i++)
- out[i] += static_cast<Bit16s>(DBOPL_CLAMP(out32[i], static_cast<ssize_t>(INT16_MIN), static_cast<ssize_t>(INT16_MAX)));
- }
-
-
- void Handler::Init(Bitu rate)
- {
- InitTables();
- chip.Setup((Bit32u)rate);
- }
-
-
-} //Namespace DBOPL
-
-//#endif //ADLMIDI_USE_DOSBOX_OPL
+#endif
+}
+
+Bits INLINE Operator::GetSample( Bits modulation ) {
+ Bitu vol = ForwardVolume();
+ if ( ENV_SILENT( vol ) ) {
+ //Simply forward the wave
+ waveIndex += waveCurrent;
+ return 0;
+ } else {
+ Bitu index = ForwardWave();
+ index += modulation;
+ return GetWave( index, vol );
+ }
+}
+
+Operator::Operator() {
+ chanData = 0;
+ freqMul = 0;
+ waveIndex = 0;
+ waveAdd = 0;
+ waveCurrent = 0;
+ keyOn = 0;
+ ksr = 0;
+ reg20 = 0;
+ reg40 = 0;
+ reg60 = 0;
+ reg80 = 0;
+ regE0 = 0;
+ SetState( OFF );
+ rateZero = (1 << OFF);
+ sustainLevel = ENV_MAX;
+ currentLevel = ENV_MAX;
+ totalLevel = ENV_MAX;
+ volume = ENV_MAX;
+ releaseAdd = 0;
+}
+
+/*
+ Channel
+*/
+
+Channel::Channel() {
+ old[0] = old[1] = 0;
+ chanData = 0;
+ regB0 = 0;
+ regC0 = 0;
+ maskLeft = -1;
+ maskRight = -1;
+ feedback = 31;
+ fourMask = 0;
+ synthHandler = &Channel::BlockTemplate< sm2FM >;
+}
+
+void Channel::SetChanData( const Chip* chip, Bit32u data ) {
+ Bit32u change = chanData ^ data;
+ chanData = data;
+ Op( 0 )->chanData = data;
+ Op( 1 )->chanData = data;
+ //Since a frequency update triggered this, always update frequency
+ Op( 0 )->UpdateFrequency();
+ Op( 1 )->UpdateFrequency();
+ if ( change & ( 0xff << SHIFT_KSLBASE ) ) {
+ Op( 0 )->UpdateAttenuation();
+ Op( 1 )->UpdateAttenuation();
+ }
+ if ( change & ( 0xff << SHIFT_KEYCODE ) ) {
+ Op( 0 )->UpdateRates( chip );
+ Op( 1 )->UpdateRates( chip );
+ }
+}
+
+void Channel::UpdateFrequency( const Chip* chip, Bit8u fourOp ) {
+ //Extrace the frequency bits
+ Bit32u data = chanData & 0xffff;
+ Bit32u kslBase = KslTable[ data >> 6 ];
+ Bit32u keyCode = ( data & 0x1c00) >> 9;
+ if ( chip->reg08 & 0x40 ) {
+ keyCode |= ( data & 0x100)>>8; /* notesel == 1 */
+ } else {
+ keyCode |= ( data & 0x200)>>9; /* notesel == 0 */
+ }
+ //Add the keycode and ksl into the highest bits of chanData
+ data |= (keyCode << SHIFT_KEYCODE) | ( kslBase << SHIFT_KSLBASE );
+ ( this + 0 )->SetChanData( chip, data );
+ if ( fourOp & 0x3f ) {
+ ( this + 1 )->SetChanData( chip, data );
+ }
+}
+
+void Channel::WriteA0( const Chip* chip, Bit8u val ) {
+ Bit8u fourOp = chip->reg104 & chip->opl3Active & fourMask;
+ //Don't handle writes to silent fourop channels
+ if ( fourOp > 0x80 )
+ return;
+ Bit32u change = (chanData ^ val ) & 0xff;
+ if ( change ) {
+ chanData ^= change;
+ UpdateFrequency( chip, fourOp );
+ }
+}
+
+void Channel::WriteB0( const Chip* chip, Bit8u val ) {
+ Bit8u fourOp = chip->reg104 & chip->opl3Active & fourMask;
+ //Don't handle writes to silent fourop channels
+ if ( fourOp > 0x80 )
+ return;
+ Bitu change = (chanData ^ ( val << 8 ) ) & 0x1f00;
+ if ( change ) {
+ chanData ^= change;
+ UpdateFrequency( chip, fourOp );
+ }
+ //Check for a change in the keyon/off state
+ if ( !(( val ^ regB0) & 0x20))
+ return;
+ regB0 = val;
+ if ( val & 0x20 ) {
+ Op(0)->KeyOn( 0x1 );
+ Op(1)->KeyOn( 0x1 );
+ if ( fourOp & 0x3f ) {
+ ( this + 1 )->Op(0)->KeyOn( 1 );
+ ( this + 1 )->Op(1)->KeyOn( 1 );
+ }
+ } else {
+ Op(0)->KeyOff( 0x1 );
+ Op(1)->KeyOff( 0x1 );
+ if ( fourOp & 0x3f ) {
+ ( this + 1 )->Op(0)->KeyOff( 1 );
+ ( this + 1 )->Op(1)->KeyOff( 1 );
+ }
+ }
+}
+
+void Channel::WriteC0(const Chip* chip, Bit8u val) {
+ Bit8u change = val ^ regC0;
+ if (!change)
+ return;
+ regC0 = val;
+ feedback = (regC0 >> 1) & 7;
+ if (feedback) {
+ //We shift the input to the right 10 bit wave index value
+ feedback = 9 - feedback;
+ }
+ else {
+ feedback = 31;
+ }
+ UpdateSynth(chip);
+}
+
+void Channel::UpdateSynth( const Chip* chip ) {
+ //Select the new synth mode
+ if ( chip->opl3Active ) {
+ //4-op mode enabled for this channel
+ if ( (chip->reg104 & fourMask) & 0x3f ) {
+ Channel* chan0, *chan1;
+ //Check if it's the 2nd channel in a 4-op
+ if ( !(fourMask & 0x80 ) ) {
+ chan0 = this;
+ chan1 = this + 1;
+ } else {
+ chan0 = this - 1;
+ chan1 = this;
+ }
+
+ Bit8u synth = ( (chan0->regC0 & 1) << 0 )| (( chan1->regC0 & 1) << 1 );
+ switch ( synth ) {
+ case 0:
+ chan0->synthHandler = &Channel::BlockTemplate< sm3FMFM >;
+ break;
+ case 1:
+ chan0->synthHandler = &Channel::BlockTemplate< sm3AMFM >;
+ break;
+ case 2:
+ chan0->synthHandler = &Channel::BlockTemplate< sm3FMAM >;
+ break;
+ case 3:
+ chan0->synthHandler = &Channel::BlockTemplate< sm3AMAM >;
+ break;
+ }
+ //Disable updating percussion channels
+ } else if ((fourMask & 0x40) && ( chip->regBD & 0x20) ) {
+
+ //Regular dual op, am or fm
+ } else if (regC0 & 1 ) {
+ synthHandler = &Channel::BlockTemplate< sm3AM >;
+ } else {
+ synthHandler = &Channel::BlockTemplate< sm3FM >;
+ }
+ maskLeft = (regC0 & 0x10 ) ? -1 : 0;
+ maskRight = (regC0 & 0x20 ) ? -1 : 0;
+ //opl2 active
+ } else {
+ //Disable updating percussion channels
+ if ( (fourMask & 0x40) && ( chip->regBD & 0x20 ) ) {
+
+ //Regular dual op, am or fm
+ } else if (regC0 & 1 ) {
+ synthHandler = &Channel::BlockTemplate< sm2AM >;
+ } else {
+ synthHandler = &Channel::BlockTemplate< sm2FM >;
+ }
+ }
+}
+
+template< bool opl3Mode>
+INLINE void Channel::GeneratePercussion( Chip* chip, Bit32s* output ) {
+ Channel* chan = this;
+
+ //BassDrum
+ Bit32s mod = (Bit32u)((old[0] + old[1])) >> feedback;
+ old[0] = old[1];
+ old[1] = static_cast<Bit32u>(Op(0)->GetSample( mod ));
+
+ //When bassdrum is in AM mode first operator is ignoed
+ if ( chan->regC0 & 1 ) {
+ mod = 0;
+ } else {
+ mod = old[0];
+ }
+ Bit32s sample = static_cast<Bit32u>(Op(1)->GetSample( mod ));
+
+
+ //Precalculate stuff used by other outputs
+ Bit32u noiseBit = chip->ForwardNoise() & 0x1;
+ Bit32u c2 = static_cast<Bit32u>(Op(2)->ForwardWave());
+ Bit32u c5 = static_cast<Bit32u>(Op(5)->ForwardWave());
+ Bit32u phaseBit = (((c2 & 0x88) ^ ((c2<<5) & 0x80)) | ((c5 ^ (c5<<2)) & 0x20)) ? 0x02 : 0x00;
+
+ //Hi-Hat
+ Bit32u hhVol = static_cast<Bit32u>(Op(2)->ForwardVolume());
+ if ( !ENV_SILENT( hhVol ) ) {
+ Bit32u hhIndex = (phaseBit<<8) | (0x34 << ( phaseBit ^ (noiseBit << 1 )));
+ sample += static_cast<Bit32u>(Op(2)->GetWave( hhIndex, hhVol ));
+ }
+ //Snare Drum
+ Bit32u sdVol = static_cast<Bit32u>(Op(3)->ForwardVolume());
+ if ( !ENV_SILENT( sdVol ) ) {
+ Bit32u sdIndex = ( 0x100 + (c2 & 0x100) ) ^ ( noiseBit << 8 );
+ sample += static_cast<Bit32u>(Op(3)->GetWave( sdIndex, sdVol ));
+ }
+ //Tom-tom
+ sample += static_cast<Bit32u>(Op(4)->GetSample( 0 ));
+
+ //Top-Cymbal
+ Bit32u tcVol = static_cast<Bit32u>(Op(5)->ForwardVolume());
+ if ( !ENV_SILENT( tcVol ) ) {
+ Bit32u tcIndex = (1 + phaseBit) << 8;
+ sample += static_cast<Bit32u>(Op(5)->GetWave( tcIndex, tcVol ));
+ }
+ sample <<= 1;
+ if ( opl3Mode ) {
+ output[0] += sample;
+ output[1] += sample;
+ } else {
+ output[0] += sample;
+ }
+}
+
+template<SynthMode mode>
+Channel* Channel::BlockTemplate( Chip* chip, Bit32u samples, Bit32s* output ) {
+ switch( mode ) {
+ case sm2AM:
+ case sm3AM:
+ if ( Op(0)->Silent() && Op(1)->Silent() ) {
+ old[0] = old[1] = 0;
+ return (this + 1);
+ }
+ break;
+ case sm2FM:
+ case sm3FM:
+ if ( Op(1)->Silent() ) {
+ old[0] = old[1] = 0;
+ return (this + 1);
+ }
+ break;
+ case sm3FMFM:
+ if ( Op(3)->Silent() ) {
+ old[0] = old[1] = 0;
+ return (this + 2);
+ }
+ break;
+ case sm3AMFM:
+ if ( Op(0)->Silent() && Op(3)->Silent() ) {
+ old[0] = old[1] = 0;
+ return (this + 2);
+ }
+ break;
+ case sm3FMAM:
+ if ( Op(1)->Silent() && Op(3)->Silent() ) {
+ old[0] = old[1] = 0;
+ return (this + 2);
+ }
+ break;
+ case sm3AMAM:
+ if ( Op(0)->Silent() && Op(2)->Silent() && Op(3)->Silent() ) {
+ old[0] = old[1] = 0;
+ return (this + 2);
+ }
+ break;
+ default:
+ break;
+ }
+ //Init the operators with the the current vibrato and tremolo values
+ Op( 0 )->Prepare( chip );
+ Op( 1 )->Prepare( chip );
+ if ( mode > sm4Start ) {
+ Op( 2 )->Prepare( chip );
+ Op( 3 )->Prepare( chip );
+ }
+ if ( mode > sm6Start ) {
+ Op( 4 )->Prepare( chip );
+ Op( 5 )->Prepare( chip );
+ }
+ for ( Bitu i = 0; i < samples; i++ ) {
+ //Early out for percussion handlers
+ if ( mode == sm2Percussion ) {
+ GeneratePercussion<false>( chip, output + i );
+ continue; //Prevent some unitialized value bitching
+ } else if ( mode == sm3Percussion ) {
+ GeneratePercussion<true>( chip, output + i * 2 );
+ continue; //Prevent some unitialized value bitching
+ }
+
+ //Do unsigned shift so we can shift out all bits but still stay in 10 bit range otherwise
+ Bit32s mod = (Bit32u)((old[0] + old[1])) >> feedback;
+ old[0] = old[1];
+ old[1] = static_cast<Bit32u>(Op(0)->GetSample( mod ));
+ Bit32s sample;
+ Bit32s out0 = old[0];
+ if ( mode == sm2AM || mode == sm3AM ) {
+ sample = static_cast<Bit32u>(out0 + Op(1)->GetSample( 0 ));
+ } else if ( mode == sm2FM || mode == sm3FM ) {
+ sample = static_cast<Bit32u>(Op(1)->GetSample( out0 ));
+ } else if ( mode == sm3FMFM ) {
+ Bits next = Op(1)->GetSample( out0 );
+ next = Op(2)->GetSample( next );
+ sample = static_cast<Bit32u>(Op(3)->GetSample( next ));
+ } else if ( mode == sm3AMFM ) {
+ sample = out0;
+ Bits next = Op(1)->GetSample( 0 );
+ next = Op(2)->GetSample( next );
+ sample += static_cast<Bit32u>(Op(3)->GetSample( next ));
+ } else if ( mode == sm3FMAM ) {
+ sample = static_cast<Bit32u>(Op(1)->GetSample( out0 ));
+ Bits next = Op(2)->GetSample( 0 );
+ sample += static_cast<Bit32u>(Op(3)->GetSample( next ));
+ } else if ( mode == sm3AMAM ) {
+ sample = out0;
+ Bits next = Op(1)->GetSample( 0 );
+ sample += static_cast<Bit32u>(Op(2)->GetSample( next ));
+ sample += static_cast<Bit32u>(Op(3)->GetSample( 0 ));
+ }
+ switch( mode ) {
+ case sm2AM:
+ case sm2FM:
+ output[ i ] += sample;
+ break;
+ case sm3AM:
+ case sm3FM:
+ case sm3FMFM:
+ case sm3AMFM:
+ case sm3FMAM:
+ case sm3AMAM:
+ output[ i * 2 + 0 ] += sample & maskLeft;
+ output[ i * 2 + 1 ] += sample & maskRight;
+ break;
+ default:
+ break;
+ }
+ }
+ switch( mode ) {
+ case sm2AM:
+ case sm2FM:
+ case sm3AM:
+ case sm3FM:
+ return ( this + 1 );
+ case sm3FMFM:
+ case sm3AMFM:
+ case sm3FMAM:
+ case sm3AMAM:
+ return( this + 2 );
+ case sm2Percussion:
+ case sm3Percussion:
+ return( this + 3 );
+ }
+ return 0;
+}
+
+/*
+ Chip
+*/
+
+Chip::Chip() {
+ reg08 = 0;
+ reg04 = 0;
+ regBD = 0;
+ reg104 = 0;
+ opl3Active = 0;
+}
+
+INLINE Bit32u Chip::ForwardNoise() {
+ noiseCounter += noiseAdd;
+ Bitu count = noiseCounter >> LFO_SH;
+ noiseCounter &= WAVE_MASK;
+ for ( ; count > 0; --count ) {
+ //Noise calculation from mame
+ noiseValue ^= ( 0x800302 ) & ( 0 - (noiseValue & 1 ) );
+ noiseValue >>= 1;
+ }
+ return noiseValue;
+}
+
+INLINE Bit32u Chip::ForwardLFO( Bit32u samples ) {
+ //Current vibrato value, runs 4x slower than tremolo
+ vibratoSign = ( VibratoTable[ vibratoIndex >> 2] ) >> 7;
+ vibratoShift = ( VibratoTable[ vibratoIndex >> 2] & 7) + vibratoStrength;
+ tremoloValue = TremoloTable[ tremoloIndex ] >> tremoloStrength;
+
+ //Check hom many samples there can be done before the value changes
+ Bit32u todo = LFO_MAX - lfoCounter;
+ Bit32u count = (todo + lfoAdd - 1) / lfoAdd;
+ if ( count > samples ) {
+ count = samples;
+ lfoCounter += count * lfoAdd;
+ } else {
+ lfoCounter += count * lfoAdd;
+ lfoCounter &= (LFO_MAX - 1);
+ //Maximum of 7 vibrato value * 4
+ vibratoIndex = ( vibratoIndex + 1 ) & 31;
+ //Clip tremolo to the the table size
+ if ( tremoloIndex + 1 < TREMOLO_TABLE )
+ ++tremoloIndex;
+ else
+ tremoloIndex = 0;
+ }
+ return count;
+}
+
+
+void Chip::WriteBD( Bit8u val ) {
+ Bit8u change = regBD ^ val;
+ if ( !change )
+ return;
+ regBD = val;
+ //TODO could do this with shift and xor?
+ vibratoStrength = (val & 0x40) ? 0x00 : 0x01;
+ tremoloStrength = (val & 0x80) ? 0x00 : 0x02;
+ if ( val & 0x20 ) {
+ //Drum was just enabled, make sure channel 6 has the right synth
+ if ( change & 0x20 ) {
+ if ( opl3Active ) {
+ chan[6].synthHandler = &Channel::BlockTemplate< sm3Percussion >;
+ } else {
+ chan[6].synthHandler = &Channel::BlockTemplate< sm2Percussion >;
+ }
+ }
+ //Bass Drum
+ if ( val & 0x10 ) {
+ chan[6].op[0].KeyOn( 0x2 );
+ chan[6].op[1].KeyOn( 0x2 );
+ } else {
+ chan[6].op[0].KeyOff( 0x2 );
+ chan[6].op[1].KeyOff( 0x2 );
+ }
+ //Hi-Hat
+ if ( val & 0x1 ) {
+ chan[7].op[0].KeyOn( 0x2 );
+ } else {
+ chan[7].op[0].KeyOff( 0x2 );
+ }
+ //Snare
+ if ( val & 0x8 ) {
+ chan[7].op[1].KeyOn( 0x2 );
+ } else {
+ chan[7].op[1].KeyOff( 0x2 );
+ }
+ //Tom-Tom
+ if ( val & 0x4 ) {
+ chan[8].op[0].KeyOn( 0x2 );
+ } else {
+ chan[8].op[0].KeyOff( 0x2 );
+ }
+ //Top Cymbal
+ if ( val & 0x2 ) {
+ chan[8].op[1].KeyOn( 0x2 );
+ } else {
+ chan[8].op[1].KeyOff( 0x2 );
+ }
+ //Toggle keyoffs when we turn off the percussion
+ } else if ( change & 0x20 ) {
+ //Trigger a reset to setup the original synth handler
+ //This makes it call
+ chan[6].UpdateSynth( this );
+ chan[6].op[0].KeyOff( 0x2 );
+ chan[6].op[1].KeyOff( 0x2 );
+ chan[7].op[0].KeyOff( 0x2 );
+ chan[7].op[1].KeyOff( 0x2 );
+ chan[8].op[0].KeyOff( 0x2 );
+ chan[8].op[1].KeyOff( 0x2 );
+ }
+}
+
+
+#define REGOP( _FUNC_ ) \
+ index = ( ( reg >> 3) & 0x20 ) | ( reg & 0x1f ); \
+ if ( OpOffsetTable[ index ] ) { \
+ Operator* regOp = (Operator*)( ((char *)this ) + OpOffsetTable[ index ] ); \
+ regOp->_FUNC_( this, val ); \
+ }
+
+#define REGCHAN( _FUNC_ ) \
+ index = ( ( reg >> 4) & 0x10 ) | ( reg & 0xf ); \
+ if ( ChanOffsetTable[ index ] ) { \
+ Channel* regChan = (Channel*)( ((char *)this ) + ChanOffsetTable[ index ] ); \
+ regChan->_FUNC_( this, val ); \
+ }
+
+//Update the 0xc0 register for all channels to signal the switch to mono/stereo handlers
+void Chip::UpdateSynths() {
+ for (int i = 0; i < 18; i++) {
+ chan[i].UpdateSynth(this);
+ }
+}
+
+
+void Chip::WriteReg( Bit32u reg, Bit8u val ) {
+ Bitu index;
+ switch ( (reg & 0xf0) >> 4 ) {
+ case 0x00 >> 4:
+ if ( reg == 0x01 ) {
+ waveFormMask = ( val & 0x20 ) ? 0x7 : 0x0;
+ } else if ( reg == 0x104 ) {
+ //Only detect changes in lowest 6 bits
+ if ( !((reg104 ^ val) & 0x3f) )
+ return;
+ //Always keep the highest bit enabled, for checking > 0x80
+ reg104 = 0x80 | ( val & 0x3f );
+ //Switch synths when changing the 4op combinations
+ UpdateSynths();
+ } else if ( reg == 0x105 ) {
+ //MAME says the real opl3 doesn't reset anything on opl3 disable/enable till the next write in another register
+ if ( !((opl3Active ^ val) & 1 ) )
+ return;
+ opl3Active = ( val & 1 ) ? 0xff : 0;
+ //Just tupdate the synths now that opl3 most have been enabled
+ //This isn't how the real card handles it but need to switch to stereo generating handlers
+ UpdateSynths();
+ } else if ( reg == 0x08 ) {
+ reg08 = val;
+ }
+ case 0x10 >> 4:
+ break;
+ case 0x20 >> 4:
+ case 0x30 >> 4:
+ REGOP( Write20 );
+ break;
+ case 0x40 >> 4:
+ case 0x50 >> 4:
+ REGOP( Write40 );
+ break;
+ case 0x60 >> 4:
+ case 0x70 >> 4:
+ REGOP( Write60 );
+ break;
+ case 0x80 >> 4:
+ case 0x90 >> 4:
+ REGOP( Write80 );
+ break;
+ case 0xa0 >> 4:
+ REGCHAN( WriteA0 );
+ break;
+ case 0xb0 >> 4:
+ if ( reg == 0xbd ) {
+ WriteBD( val );
+ } else {
+ REGCHAN( WriteB0 );
+ }
+ break;
+ case 0xc0 >> 4:
+ REGCHAN( WriteC0 );
+ case 0xd0 >> 4:
+ break;
+ case 0xe0 >> 4:
+ case 0xf0 >> 4:
+ REGOP( WriteE0 );
+ break;
+ }
+}
+
+
+Bit32u Chip::WriteAddr( Bit32u port, Bit8u val ) {
+ switch ( port & 3 ) {
+ case 0:
+ return val;
+ case 2:
+ if ( opl3Active || (val == 0x05) )
+ return 0x100 | val;
+ else
+ return val;
+ }
+ return 0;
+}
+
+void Chip::GenerateBlock2( Bitu total, Bit32s* output ) {
+ while ( total > 0 ) {
+ Bit32u samples = ForwardLFO( static_cast<Bit32u>(total) );
+ memset(output, 0, sizeof(Bit32s) * samples);
+// int count = 0;
+ for( Channel* ch = chan; ch < chan + 9; ) {
+// count++;
+ ch = (ch->*(ch->synthHandler))( this, samples, output );
+ }
+ total -= samples;
+ output += samples;
+ }
+}
+
+void Chip::GenerateBlock2_Mix( Bitu total, Bit32s* output ) {
+ while ( total > 0 ) {
+ Bit32u samples = ForwardLFO( static_cast<Bit32u>(total) );
+// int count = 0;
+ for( Channel* ch = chan; ch < chan + 9; ) {
+// count++;
+ ch = (ch->*(ch->synthHandler))( this, samples, output );
+ }
+ total -= samples;
+ output += samples;
+ }
+}
+
+void Chip::GenerateBlock3( Bitu total, Bit32s* output ) {
+ while ( total > 0 ) {
+ Bit32u samples = ForwardLFO( static_cast<Bit32u>(total) );
+ memset(output, 0, sizeof(Bit32s) * samples *2);
+// int count = 0;
+ for( Channel* ch = chan; ch < chan + 18; ) {
+// count++;
+ ch = (ch->*(ch->synthHandler))( this, samples, output );
+ }
+ total -= samples;
+ output += samples * 2;
+ }
+}
+
+void Chip::GenerateBlock3_Mix( Bitu total, Bit32s* output ) {
+ while ( total > 0 ) {
+ Bit32u samples = ForwardLFO( static_cast<Bit32u>(total) );
+// int count = 0;
+ for( Channel* ch = chan; ch < chan + 18; ) {
+// count++;
+ ch = (ch->*(ch->synthHandler))( this, samples, output );
+ }
+ total -= samples;
+ output += samples * 2;
+ }
+}
+
+void Chip::Setup( Bit32u rate ) {
+ double original = OPLRATE;
+// double original = rate;
+ double scale = original / (double)rate;
+
+ //Noise counter is run at the same precision as general waves
+ noiseAdd = (Bit32u)( 0.5 + scale * ( 1 << LFO_SH ) );
+ noiseCounter = 0;
+ noiseValue = 1; //Make sure it triggers the noise xor the first time
+ //The low frequency oscillation counter
+ //Every time his overflows vibrato and tremoloindex are increased
+ lfoAdd = (Bit32u)( 0.5 + scale * ( 1 << LFO_SH ) );
+ lfoCounter = 0;
+ vibratoIndex = 0;
+ tremoloIndex = 0;
+
+ //With higher octave this gets shifted up
+ //-1 since the freqCreateTable = *2
+#ifdef WAVE_PRECISION
+ double freqScale = ( 1 << 7 ) * scale * ( 1 << ( WAVE_SH - 1 - 10));
+ for ( int i = 0; i < 16; i++ ) {
+ freqMul[i] = (Bit32u)( 0.5 + freqScale * FreqCreateTable[ i ] );
+ }
+#else
+ Bit32u freqScale = (Bit32u)( 0.5 + scale * ( 1 << ( WAVE_SH - 1 - 10)));
+ for ( int i = 0; i < 16; i++ ) {
+ freqMul[i] = freqScale * FreqCreateTable[ i ];
+ }
+#endif
+
+ //-3 since the real envelope takes 8 steps to reach the single value we supply
+ for ( Bit8u i = 0; i < 76; i++ ) {
+ Bit8u index, shift;
+ EnvelopeSelect( i, index, shift );
+ linearRates[i] = (Bit32u)( scale * (EnvelopeIncreaseTable[ index ] << ( RATE_SH + ENV_EXTRA - shift - 3 )));
+ }
+// Bit32s attackDiffs[62];
+ //Generate the best matching attack rate
+ for ( Bit8u i = 0; i < 62; i++ ) {
+ Bit8u index, shift;
+ EnvelopeSelect( i, index, shift );
+ //Original amount of samples the attack would take
+ Bit32s original = (Bit32u)( (AttackSamplesTable[ index ] << shift) / scale);
+
+ Bit32s guessAdd = (Bit32u)( scale * (EnvelopeIncreaseTable[ index ] << ( RATE_SH - shift - 3 )));
+ Bit32s bestAdd = guessAdd;
+ Bit32u bestDiff = 1 << 30;
+ for( Bit32u passes = 0; passes < 16; passes ++ ) {
+ Bit32s volume = ENV_MAX;
+ Bit32s samples = 0;
+ Bit32u count = 0;
+ while ( volume > 0 && samples < original * 2 ) {
+ count += guessAdd;
+ Bit32s change = count >> RATE_SH;
+ count &= RATE_MASK;
+ if ( GCC_UNLIKELY(change) ) { // less than 1 %
+ volume += ( ~volume * change ) >> 3;
+ }
+ samples++;
+
+ }
+ Bit32s diff = original - samples;
+ Bit32u lDiff = labs( diff );
+ //Init last on first pass
+ if ( lDiff < bestDiff ) {
+ bestDiff = lDiff;
+ bestAdd = guessAdd;
+ //We hit an exactly matching sample count
+ if ( !bestDiff )
+ break;
+ }
+ //Linear correction factor, not exactly perfect but seems to work
+ double correct = (original - diff) / (double)original;
+ guessAdd = (Bit32u)(guessAdd * correct);
+ //Below our target
+ if ( diff < 0 ) {
+ //Always add one here for rounding, an overshoot will get corrected by another pass decreasing
+ guessAdd++;
+ }
+ }
+ attackRates[i] = bestAdd;
+ //Keep track of the diffs for some debugging
+// attackDiffs[i] = bestDiff;
+ }
+ for ( Bit8u i = 62; i < 76; i++ ) {
+ //This should provide instant volume maximizing
+ attackRates[i] = 8 << RATE_SH;
+ }
+ //Setup the channels with the correct four op flags
+ //Channels are accessed through a table so they appear linear here
+ chan[ 0].fourMask = 0x00 | ( 1 << 0 );
+ chan[ 1].fourMask = 0x80 | ( 1 << 0 );
+ chan[ 2].fourMask = 0x00 | ( 1 << 1 );
+ chan[ 3].fourMask = 0x80 | ( 1 << 1 );
+ chan[ 4].fourMask = 0x00 | ( 1 << 2 );
+ chan[ 5].fourMask = 0x80 | ( 1 << 2 );
+
+ chan[ 9].fourMask = 0x00 | ( 1 << 3 );
+ chan[10].fourMask = 0x80 | ( 1 << 3 );
+ chan[11].fourMask = 0x00 | ( 1 << 4 );
+ chan[12].fourMask = 0x80 | ( 1 << 4 );
+ chan[13].fourMask = 0x00 | ( 1 << 5 );
+ chan[14].fourMask = 0x80 | ( 1 << 5 );
+
+ //mark the percussion channels
+ chan[ 6].fourMask = 0x40;
+ chan[ 7].fourMask = 0x40;
+ chan[ 8].fourMask = 0x40;
+
+ //Clear Everything in opl3 mode
+ WriteReg( 0x105, 0x1 );
+ for ( int i = 0; i < 512; i++ ) {
+ if ( i == 0x105 )
+ continue;
+ WriteReg( i, 0xff );
+ WriteReg( i, 0x0 );
+ }
+ WriteReg( 0x105, 0x0 );
+ //Clear everything in opl2 mode
+ for ( int i = 0; i < 255; i++ ) {
+ WriteReg( i, 0xff );
+ WriteReg( i, 0x0 );
+ }
+}
+
+static bool doneTables = false;
+void InitTables( void ) {
+ if ( doneTables )
+ return;
+ doneTables = true;
+#if ( DBOPL_WAVE == WAVE_HANDLER ) || ( DBOPL_WAVE == WAVE_TABLELOG )
+ //Exponential volume table, same as the real adlib
+ for ( int i = 0; i < 256; i++ ) {
+ //Save them in reverse
+ ExpTable[i] = (int)( 0.5 + ( pow(2.0, ( 255 - i) * ( 1.0 /256 ) )-1) * 1024 );
+ ExpTable[i] += 1024; //or remove the -1 oh well :)
+ //Preshift to the left once so the final volume can shift to the right
+ ExpTable[i] *= 2;
+ }
+#endif
+#if ( DBOPL_WAVE == WAVE_HANDLER )
+ //Add 0.5 for the trunc rounding of the integer cast
+ //Do a PI sinetable instead of the original 0.5 PI
+ for ( int i = 0; i < 512; i++ ) {
+ SinTable[i] = (Bit16s)( 0.5 - log10( sin( (i + 0.5) * (PI / 512.0) ) ) / log10(2.0)*256 );
+ }
+#endif
+#if ( DBOPL_WAVE == WAVE_TABLEMUL )
+ //Multiplication based tables
+ for ( int i = 0; i < 384; i++ ) {
+ int s = i * 8;
+ //TODO maybe keep some of the precision errors of the original table?
+ double val = ( 0.5 + ( pow(2.0, -1.0 + ( 255 - s) * ( 1.0 /256 ) )) * ( 1 << MUL_SH ));
+ MulTable[i] = (Bit16u)(val);
+ }
+
+ //Sine Wave Base
+ for ( int i = 0; i < 512; i++ ) {
+ WaveTable[ 0x0200 + i ] = (Bit16s)(sin( (i + 0.5) * (PI / 512.0) ) * 4084);
+ WaveTable[ 0x0000 + i ] = -WaveTable[ 0x200 + i ];
+ }
+ //Exponential wave
+ for ( int i = 0; i < 256; i++ ) {
+ WaveTable[ 0x700 + i ] = (Bit16s)( 0.5 + ( pow(2.0, -1.0 + ( 255 - i * 8) * ( 1.0 /256 ) ) ) * 4085 );
+ WaveTable[ 0x6ff - i ] = -WaveTable[ 0x700 + i ];
+ }
+#endif
+#if ( DBOPL_WAVE == WAVE_TABLELOG )
+ //Sine Wave Base
+ for ( int i = 0; i < 512; i++ ) {
+ WaveTable[ 0x0200 + i ] = (Bit16s)( 0.5 - log10( sin( (i + 0.5) * (PI / 512.0) ) ) / log10(2.0)*256 );
+ WaveTable[ 0x0000 + i ] = ((Bit16s)0x8000) | WaveTable[ 0x200 + i];
+ }
+ //Exponential wave
+ for ( int i = 0; i < 256; i++ ) {
+ WaveTable[ 0x700 + i ] = i * 8;
+ WaveTable[ 0x6ff - i ] = ((Bit16s)0x8000) | i * 8;
+ }
+#endif
+
+ // | |//\\|____|WAV7|//__|/\ |____|/\/\|
+ // |\\//| | |WAV7| | \/| | |
+ // |06 |0126|27 |7 |3 |4 |4 5 |5 |
+
+#if (( DBOPL_WAVE == WAVE_TABLELOG ) || ( DBOPL_WAVE == WAVE_TABLEMUL ))
+ for ( int i = 0; i < 256; i++ ) {
+ //Fill silence gaps
+ WaveTable[ 0x400 + i ] = WaveTable[0];
+ WaveTable[ 0x500 + i ] = WaveTable[0];
+ WaveTable[ 0x900 + i ] = WaveTable[0];
+ WaveTable[ 0xc00 + i ] = WaveTable[0];
+ WaveTable[ 0xd00 + i ] = WaveTable[0];
+ //Replicate sines in other pieces
+ WaveTable[ 0x800 + i ] = WaveTable[ 0x200 + i ];
+ //double speed sines
+ WaveTable[ 0xa00 + i ] = WaveTable[ 0x200 + i * 2 ];
+ WaveTable[ 0xb00 + i ] = WaveTable[ 0x000 + i * 2 ];
+ WaveTable[ 0xe00 + i ] = WaveTable[ 0x200 + i * 2 ];
+ WaveTable[ 0xf00 + i ] = WaveTable[ 0x200 + i * 2 ];
+ }
+#endif
+
+ //Create the ksl table
+ for ( int oct = 0; oct < 8; oct++ ) {
+ int base = oct * 8;
+ for ( int i = 0; i < 16; i++ ) {
+ int val = base - KslCreateTable[i];
+ if ( val < 0 )
+ val = 0;
+ //*4 for the final range to match attenuation range
+ KslTable[ oct * 16 + i ] = val * 4;
+ }
+ }
+ //Create the Tremolo table, just increase and decrease a triangle wave
+ for ( Bit8u i = 0; i < TREMOLO_TABLE / 2; i++ ) {
+ Bit8u val = i << ENV_EXTRA;
+ TremoloTable[i] = val;
+ TremoloTable[TREMOLO_TABLE - 1 - i] = val;
+ }
+ //Create a table with offsets of the channels from the start of the chip
+ DBOPL::Chip* chip = 0;
+ for ( Bitu i = 0; i < 32; i++ ) {
+ Bitu index = i & 0xf;
+ if ( index >= 9 ) {
+ ChanOffsetTable[i] = 0;
+ continue;
+ }
+ //Make sure the four op channels follow eachother
+ if ( index < 6 ) {
+ index = (index % 3) * 2 + ( index / 3 );
+ }
+ //Add back the bits for highest ones
+ if ( i >= 16 )
+ index += 9;
+ Bitu blah = reinterpret_cast<Bitu>( &(chip->chan[ index ]) );
+ ChanOffsetTable[i] = static_cast<Bit16u>(blah);
+ }
+ //Same for operators
+ for ( Bitu i = 0; i < 64; i++ ) {
+ if ( i % 8 >= 6 || ( (i / 8) % 4 == 3 ) ) {
+ OpOffsetTable[i] = 0;
+ continue;
+ }
+ Bitu chNum = (i / 8) * 3 + (i % 8) % 3;
+ //Make sure we use 16 and up for the 2nd range to match the chanoffset gap
+ if ( chNum >= 12 )
+ chNum += 16 - 12;
+ Bitu opNum = ( i % 8 ) / 3;
+ DBOPL::Channel* chan = 0;
+ Bitu blah = reinterpret_cast<Bitu>( &(chan->op[opNum]) );
+ OpOffsetTable[i] = static_cast<Bit16u>(ChanOffsetTable[ chNum ] + blah);
+ }
+#if 0
+ //Stupid checks if table's are correct
+ for ( Bitu i = 0; i < 18; i++ ) {
+ Bit32u find = (Bit16u)( &(chip->chan[ i ]) );
+ for ( Bitu c = 0; c < 32; c++ ) {
+ if ( ChanOffsetTable[c] == find ) {
+ find = 0;
+ break;
+ }
+ }
+ if ( find ) {
+ find = find;
+ }
+ }
+ for ( Bitu i = 0; i < 36; i++ ) {
+ Bit32u find = (Bit16u)( &(chip->chan[ i / 2 ].op[i % 2]) );
+ for ( Bitu c = 0; c < 64; c++ ) {
+ if ( OpOffsetTable[c] == find ) {
+ find = 0;
+ break;
+ }
+ }
+ if ( find ) {
+ find = find;
+ }
+ }
+#endif
+}
+
+Bit32u Handler::WriteAddr( Bit32u port, Bit8u val ) {
+ return chip.WriteAddr( port, val );
+
+}
+void Handler::WriteReg( Bit32u addr, Bit8u val ) {
+ chip.WriteReg( addr, val );
+}
+
+#define DB_MAX(x, y) ((x) > (y) ? (x) : (y))
+#define DB_MIN(x, y) ((x) < (y) ? (x) : (y))
+
+#define DBOPL_CLAMP(V, MIN, MAX) DB_MAX(DB_MIN(V, (MAX)), (MIN))
+
+void Handler::GenerateArr(Bit32s *out, Bitu *samples)
+{
+ if(GCC_UNLIKELY(*samples > 512))
+ *samples = 512;
+ if(!chip.opl3Active)
+ chip.GenerateBlock2(*samples, out);
+ else
+ chip.GenerateBlock3(*samples, out);
+}
+
+void Handler::GenerateArr(Bit16s *out, Bitu *samples)
+{
+ Bit32s out32[1024];
+ if(GCC_UNLIKELY(*samples > 512))
+ *samples = 512;
+ memset(out32, 0, sizeof(Bit32s) * 1024);
+ if(!chip.opl3Active)
+ chip.GenerateBlock2(*samples, out32);
+ else
+ chip.GenerateBlock3(*samples, out32);
+ Bitu sz = *samples * 2;
+ for(Bitu i = 0; i < sz; i++)
+ out[i] = static_cast<Bit16s>(DBOPL_CLAMP(out32[i], INT16_MIN, INT16_MAX));
+}
+
+void Handler::GenerateArrMix(Bit32s *out, Bitu *samples)
+{
+ if(GCC_UNLIKELY(*samples > 512))
+ *samples = 512;
+ if(!chip.opl3Active)
+ chip.GenerateBlock2_Mix(*samples, out);
+ else
+ chip.GenerateBlock3_Mix(*samples, out);
+}
+
+void Handler::GenerateArrMix(Bit16s *out, Bitu *samples)
+{
+ Bit32s out32[1024];
+ if(GCC_UNLIKELY(*samples > 512))
+ *samples = 512;
+ memset(out32, 0, sizeof(Bit32s) * 1024);
+ if(!chip.opl3Active)
+ chip.GenerateBlock2(*samples, out32);
+ else
+ chip.GenerateBlock3(*samples, out32);
+ Bitu sz = *samples * 2;
+ for(Bitu i = 0; i < sz; i++)
+ out[i] += static_cast<Bit16s>(DBOPL_CLAMP(out32[i], INT16_MIN, INT16_MAX));
+}
+
+void Handler::Init( Bitu rate ) {
+ InitTables();
+ chip.Setup( static_cast<Bit32u>(rate) );
+}
+
+
+} //Namespace DBOPL
diff --git a/src/chips/dosbox/dbopl.h b/src/chips/dosbox/dbopl.h
index 13c606f..73c0aa9 100644
--- a/src/chips/dosbox/dbopl.h
+++ b/src/chips/dosbox/dbopl.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2002-2010 The DOSBox Team
+ * Copyright (C) 2002-2018 The DOSBox Team
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -16,28 +16,28 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-
-/* BEGIN MIDIPLAY GLUE */
+#include <inttypes.h>
#include <stdint.h>
-#include <stdlib.h>
#include <sys/types.h>
-typedef unsigned long Bitu;
-typedef signed long Bits;
-typedef unsigned Bit32u;
-typedef int Bit32s;
-typedef unsigned short Bit16u;
-typedef signed short Bit16s;
-typedef unsigned char Bit8u;
-typedef signed char Bit8s;
-#define INLINE inline
-#ifdef _MSC_VER
-#define GCC_UNLIKELY(x) (!!(x) == 0)
-#define GCC_LIKELY(x) (!!(x) == 1)
+
+#if defined(__GNUC__) && defined(__i386__)
+#define DB_FASTCALL __attribute__((fastcall))
+#elif defined(_MSC_VER)
+#define DB_FASTCALL __fastcall
#else
-#define GCC_UNLIKELY(x) __builtin_expect((x),0)
-#define GCC_LIKELY(x) __builtin_expect((x),1)
+#define DB_FASTCALL
#endif
-/* END MIDIPLAY GLUE */
+
+typedef uintptr_t Bitu;
+typedef intptr_t Bits;
+typedef uint64_t Bit64u;
+typedef int64_t Bit64s;
+typedef uint32_t Bit32u;
+typedef int32_t Bit32s;
+typedef uint16_t Bit16u;
+typedef int16_t Bit16s;
+typedef uint8_t Bit8u;
+typedef int8_t Bit8s;
//Use 8 handlers based on a small logatirmic wavetabe and an exponential table for volume
#define WAVE_HANDLER 10
@@ -49,267 +49,236 @@ typedef signed char Bit8s;
//Select the type of wave generator routine
#define DBOPL_WAVE WAVE_TABLEMUL
-#ifdef _WIN32
-# ifdef _MSC_VER
-# ifdef _WIN64
-typedef __int64 ssize_t;
-# else
-typedef __int32 ssize_t;
-# endif
-# else
-# ifdef _WIN64
-typedef int64_t ssize_t;
-# else
-typedef int32_t ssize_t;
-# endif
-# endif
-#endif
-
-namespace DBOPL
-{
+namespace DBOPL {
- struct Chip;
- struct Operator;
- struct Channel;
+struct Chip;
+struct Operator;
+struct Channel;
#if (DBOPL_WAVE == WAVE_HANDLER)
- typedef Bits(DB_FASTCALL *WaveHandler)(Bitu i, Bitu volume);
+typedef Bits ( DB_FASTCALL *WaveHandler) ( Bitu i, Bitu volume );
#endif
- typedef Bits(DBOPL::Operator::*VolumeHandler)();
- typedef Channel *(DBOPL::Channel::*SynthHandler)(Chip *chip, Bit32u samples, Bit32s *output);
-
- //Different synth modes that can generate blocks of data
- typedef enum
- {
- sm2AM,
- sm2FM,
- sm3AM,
- sm3FM,
- sm4Start,
- sm3FMFM,
- sm3AMFM,
- sm3FMAM,
- sm3AMAM,
- sm6Start,
- sm2Percussion,
- sm3Percussion
- } SynthMode;
-
- //Shifts for the values contained in chandata variable
- enum
- {
- SHIFT_KSLBASE = 16,
- SHIFT_KEYCODE = 24
- };
-
- struct Operator
- {
- public:
- //Masks for operator 20 values
- enum
- {
- MASK_KSR = 0x10,
- MASK_SUSTAIN = 0x20,
- MASK_VIBRATO = 0x40,
- MASK_TREMOLO = 0x80
- };
-
- typedef enum
- {
- OFF,
- RELEASE,
- SUSTAIN,
- DECAY,
- ATTACK
- } State;
-
- VolumeHandler volHandler;
+typedef Bits ( DBOPL::Operator::*VolumeHandler) ( );
+typedef Channel* ( DBOPL::Channel::*SynthHandler) ( Chip* chip, Bit32u samples, Bit32s* output );
+
+//Different synth modes that can generate blocks of data
+typedef enum {
+ sm2AM,
+ sm2FM,
+ sm3AM,
+ sm3FM,
+ sm4Start,
+ sm3FMFM,
+ sm3AMFM,
+ sm3FMAM,
+ sm3AMAM,
+ sm6Start,
+ sm2Percussion,
+ sm3Percussion,
+} SynthMode;
+
+//Shifts for the values contained in chandata variable
+enum {
+ SHIFT_KSLBASE = 16,
+ SHIFT_KEYCODE = 24,
+};
+
+struct Operator {
+public:
+ //Masks for operator 20 values
+ enum {
+ MASK_KSR = 0x10,
+ MASK_SUSTAIN = 0x20,
+ MASK_VIBRATO = 0x40,
+ MASK_TREMOLO = 0x80,
+ };
+
+ typedef enum {
+ OFF,
+ RELEASE,
+ SUSTAIN,
+ DECAY,
+ ATTACK,
+ } State;
+
+ VolumeHandler volHandler;
#if (DBOPL_WAVE == WAVE_HANDLER)
- WaveHandler waveHandler; //Routine that generate a wave
+ WaveHandler waveHandler; //Routine that generate a wave
#else
- Bit16s *waveBase;
- Bit32u waveMask;
- Bit32u waveStart;
+ Bit16s* waveBase;
+ Bit32u waveMask;
+ Bit32u waveStart;
#endif
- Bit32u waveIndex; //WAVE_BITS shifted counter of the frequency index
- Bit32u waveAdd; //The base frequency without vibrato
- Bit32u waveCurrent; //waveAdd + vibratao
-
- Bit32u chanData; //Frequency/octave and derived data coming from whatever channel controls this
- Bit32u freqMul; //Scale channel frequency with this, TODO maybe remove?
- Bit32u vibrato; //Scaled up vibrato strength
- Bit32s sustainLevel; //When stopping at sustain level stop here
- Bit32s totalLevel; //totalLevel is added to every generated volume
- Bit32u currentLevel; //totalLevel + tremolo
- Bit32s volume; //The currently active volume
-
- Bit32u attackAdd; //Timers for the different states of the envelope
- Bit32u decayAdd;
- Bit32u releaseAdd;
- Bit32u rateIndex; //Current position of the evenlope
-
- Bit8u rateZero; //Bits for the different states of the envelope having no changes
- Bit8u keyOn; //Bitmask of different values that can generate keyon
- //Registers, also used to check for changes
- Bit8u reg20, reg40, reg60, reg80, regE0;
- //Active part of the envelope we're in
- Bit8u state;
- //0xff when tremolo is enabled
- Bit8u tremoloMask;
- //Strength of the vibrato
- Bit8u vibStrength;
- //Keep track of the calculated KSR so we can check for changes
- Bit8u ksr;
- private:
- void SetState(Bit8u s);
- void UpdateAttack(const Chip *chip);
- void UpdateRelease(const Chip *chip);
- void UpdateDecay(const Chip *chip);
- public:
- void UpdateAttenuation();
- void UpdateRates(const Chip *chip);
- void UpdateFrequency();
-
- void Write20(const Chip *chip, Bit8u val);
- void Write40(const Chip *chip, Bit8u val);
- void Write60(const Chip *chip, Bit8u val);
- void Write80(const Chip *chip, Bit8u val);
- void WriteE0(const Chip *chip, Bit8u val);
-
- bool Silent() const;
- void Prepare(const Chip *chip);
-
- void KeyOn(Bit8u mask);
- void KeyOff(Bit8u mask);
-
- template< State state>
- Bits TemplateVolume();
-
- Bit32s RateForward(Bit32u add);
- Bitu ForwardWave();
- Bitu ForwardVolume();
-
- Bits GetSample(Bits modulation);
- Bits GetWave(Bitu index, Bitu vol);
- public:
- Operator();
- char ____padding[5];
- };
-
- struct Channel
- {
- Operator op[2];
- inline Operator *Op(Bitu index)
- {
- return &((this + (index >> 1))->op[ index & 1 ]);
- }
- SynthHandler synthHandler;
- Bit32u chanData; //Frequency/octave and derived values
- Bit32s old[2]; //Old data for feedback
-
- Bit8u feedback; //Feedback shift
- Bit8u regB0; //Register values to check for changes
- Bit8u regC0;
- //This should correspond with reg104, bit 6 indicates a Percussion channel, bit 7 indicates a silent channel
- Bit8u fourMask;
- Bit8s maskLeft; //Sign extended values for both channel's panning
- Bit8s maskRight;
-
- //Forward the channel data to the operators of the channel
- void SetChanData(const Chip *chip, Bit32u data);
- //Change in the chandata, check for new values and if we have to forward to operators
- void UpdateFrequency(const Chip *chip, Bit8u fourOp);
- void WriteA0(const Chip *chip, Bit8u val);
- void WriteB0(const Chip *chip, Bit8u val);
- void WriteC0(const Chip *chip, Bit8u val);
- void ResetC0(const Chip *chip);
-
- //call this for the first channel
- template< bool opl3Mode >
- void GeneratePercussion(Chip *chip, Bit32s *output);
-
- //Generate blocks of data in specific modes
- template<SynthMode mode>
- Channel *BlockTemplate(Chip *chip, Bit32u samples, Bit32s *output);
- Channel();
- char ____padding[6];
- };
-
- struct Chip
- {
- //This is used as the base counter for vibrato and tremolo
- Bit32u lfoCounter;
- Bit32u lfoAdd;
-
-
- Bit32u noiseCounter;
- Bit32u noiseAdd;
- Bit32u noiseValue;
-
- //Frequency scales for the different multiplications
- Bit32u freqMul[16];
- //Rates for decay and release for rate of this chip
- Bit32u linearRates[76];
- //Best match attack rates for the rate of this chip
- Bit32u attackRates[76];
-
- //18 channels with 2 operators each
- Channel chan[18];
-
- Bit8u reg104;
- Bit8u reg08;
- Bit8u reg04;
- Bit8u regBD;
- Bit8u vibratoIndex;
- Bit8u tremoloIndex;
- Bit8s vibratoSign;
- Bit8u vibratoShift;
- Bit8u tremoloValue;
- Bit8u vibratoStrength;
- Bit8u tremoloStrength;
- //Mask for allowed wave forms
- Bit8u waveFormMask;
- //0 or -1 when enabled
- Bit8s opl3Active;
-
- //Return the maximum amount of samples before and LFO change
- Bit32u ForwardLFO(Bit32u samples);
- Bit32u ForwardNoise();
-
- void WriteBD(Bit8u val);
- void WriteReg(Bit32u reg, Bit8u val);
-
- Bit32u WriteAddr(Bit32u port, Bit8u val);
-
- void GenerateBlock2(Bitu samples, Bit32s *output);
- void GenerateBlock3(Bitu samples, Bit32s *output);
-
- void GenerateBlock2_Mix(Bitu samples, Bit32s *output);
- void GenerateBlock3_Mix(Bitu samples, Bit32s *output);
-
- void Generate(Bit32u samples);
- void Setup(Bit32u r);
-
- Chip();
- };
-
- struct Handler
- {
- DBOPL::Chip chip;
- Bit32u WriteAddr(Bit32u port, Bit8u val);
- void WriteReg(Bit32u addr, Bit8u val);
- void Generate(void(*AddSamples_m32)(Bitu, Bit32s *),
- void(*AddSamples_s32)(Bitu, Bit32s *),
- Bitu samples);
- void GenerateArr(Bit32s *out, Bitu *samples);
- void GenerateArr(Bit32s *out, ssize_t *samples);
- void GenerateArr(Bit16s *out, ssize_t *samples);
- void GenerateArrMix(Bit32s *out, ssize_t *samples);
- void GenerateArrMix(Bit16s *out, ssize_t *samples);
- void Init(Bitu rate);
- };
-
-
-} //Namespace
+ Bit32u waveIndex; //WAVE_BITS shifted counter of the frequency index
+ Bit32u waveAdd; //The base frequency without vibrato
+ Bit32u waveCurrent; //waveAdd + vibratao
+
+ Bit32u chanData; //Frequency/octave and derived data coming from whatever channel controls this
+ Bit32u freqMul; //Scale channel frequency with this, TODO maybe remove?
+ Bit32u vibrato; //Scaled up vibrato strength
+ Bit32s sustainLevel; //When stopping at sustain level stop here
+ Bit32s totalLevel; //totalLevel is added to every generated volume
+ Bit32u currentLevel; //totalLevel + tremolo
+ Bit32s volume; //The currently active volume
+
+ Bit32u attackAdd; //Timers for the different states of the envelope
+ Bit32u decayAdd;
+ Bit32u releaseAdd;
+ Bit32u rateIndex; //Current position of the evenlope
+
+ Bit8u rateZero; //Bits for the different states of the envelope having no changes
+ Bit8u keyOn; //Bitmask of different values that can generate keyon
+ //Registers, also used to check for changes
+ Bit8u reg20, reg40, reg60, reg80, regE0;
+ //Active part of the envelope we're in
+ Bit8u state;
+ //0xff when tremolo is enabled
+ Bit8u tremoloMask;
+ //Strength of the vibrato
+ Bit8u vibStrength;
+ //Keep track of the calculated KSR so we can check for changes
+ Bit8u ksr;
+private:
+ void SetState( Bit8u s );
+ void UpdateAttack( const Chip* chip );
+ void UpdateRelease( const Chip* chip );
+ void UpdateDecay( const Chip* chip );
+public:
+ void UpdateAttenuation();
+ void UpdateRates( const Chip* chip );
+ void UpdateFrequency( );
+
+ void Write20( const Chip* chip, Bit8u val );
+ void Write40( const Chip* chip, Bit8u val );
+ void Write60( const Chip* chip, Bit8u val );
+ void Write80( const Chip* chip, Bit8u val );
+ void WriteE0( const Chip* chip, Bit8u val );
+
+ bool Silent() const;
+ void Prepare( const Chip* chip );
+
+ void KeyOn( Bit8u mask);
+ void KeyOff( Bit8u mask);
+
+ template< State state>
+ Bits TemplateVolume( );
+
+ Bit32s RateForward( Bit32u add );
+ Bitu ForwardWave();
+ Bitu ForwardVolume();
+
+ Bits GetSample( Bits modulation );
+ Bits GetWave( Bitu index, Bitu vol );
+public:
+ Operator();
+};
+
+struct Channel {
+ Operator op[2];
+ inline Operator* Op( Bitu index ) {
+ return &( ( this + (index >> 1) )->op[ index & 1 ]);
+ }
+ SynthHandler synthHandler;
+ Bit32u chanData; //Frequency/octave and derived values
+ Bit32s old[2]; //Old data for feedback
+
+ Bit8u feedback; //Feedback shift
+ Bit8u regB0; //Register values to check for changes
+ Bit8u regC0;
+ //This should correspond with reg104, bit 6 indicates a Percussion channel, bit 7 indicates a silent channel
+ Bit8u fourMask;
+ Bit8s maskLeft; //Sign extended values for both channel's panning
+ Bit8s maskRight;
+
+ //Forward the channel data to the operators of the channel
+ void SetChanData( const Chip* chip, Bit32u data );
+ //Change in the chandata, check for new values and if we have to forward to operators
+ void UpdateFrequency( const Chip* chip, Bit8u fourOp );
+ void UpdateSynth(const Chip* chip);
+ void WriteA0( const Chip* chip, Bit8u val );
+ void WriteB0( const Chip* chip, Bit8u val );
+ void WriteC0( const Chip* chip, Bit8u val );
+
+ //call this for the first channel
+ template< bool opl3Mode >
+ void GeneratePercussion( Chip* chip, Bit32s* output );
+
+ //Generate blocks of data in specific modes
+ template<SynthMode mode>
+ Channel* BlockTemplate( Chip* chip, Bit32u samples, Bit32s* output );
+ Channel();
+};
+
+struct Chip {
+ //This is used as the base counter for vibrato and tremolo
+ Bit32u lfoCounter;
+ Bit32u lfoAdd;
+
+
+ Bit32u noiseCounter;
+ Bit32u noiseAdd;
+ Bit32u noiseValue;
+
+ //Frequency scales for the different multiplications
+ Bit32u freqMul[16];
+ //Rates for decay and release for rate of this chip
+ Bit32u linearRates[76];
+ //Best match attack rates for the rate of this chip
+ Bit32u attackRates[76];
+
+ //18 channels with 2 operators each
+ Channel chan[18];
+
+ Bit8u reg104;
+ Bit8u reg08;
+ Bit8u reg04;
+ Bit8u regBD;
+ Bit8u vibratoIndex;
+ Bit8u tremoloIndex;
+ Bit8s vibratoSign;
+ Bit8u vibratoShift;
+ Bit8u tremoloValue;
+ Bit8u vibratoStrength;
+ Bit8u tremoloStrength;
+ //Mask for allowed wave forms
+ Bit8u waveFormMask;
+ //0 or -1 when enabled
+ Bit8s opl3Active;
+
+ //Return the maximum amount of samples before and LFO change
+ Bit32u ForwardLFO( Bit32u samples );
+ Bit32u ForwardNoise();
+
+ void WriteBD( Bit8u val );
+ void WriteReg(Bit32u reg, Bit8u val );
+
+ Bit32u WriteAddr( Bit32u port, Bit8u val );
+
+ void GenerateBlock2( Bitu samples, Bit32s* output );
+ void GenerateBlock2_Mix( Bitu samples, Bit32s* output );
+ void GenerateBlock3( Bitu samples, Bit32s* output );
+ void GenerateBlock3_Mix( Bitu samples, Bit32s* output );
+
+ //Update the synth handlers in all channels
+ void UpdateSynths();
+ void Generate( Bit32u samples );
+ void Setup( Bit32u r );
+
+ Chip();
+};
+
+struct Handler {
+ DBOPL::Chip chip;
+ Bit32u WriteAddr( Bit32u port, Bit8u val );
+ void WriteReg( Bit32u addr, Bit8u val );
+ void GenerateArr(Bit32s *out, Bitu *samples);
+ void GenerateArr(Bit16s *out, Bitu *samples);
+ void GenerateArrMix(Bit32s *out, Bitu *samples);
+ void GenerateArrMix(Bit16s *out, Bitu *samples);
+ void Init( Bitu rate );
+};
+
+
+} //Namespace
diff --git a/src/chips/dosbox_opl3.cpp b/src/chips/dosbox_opl3.cpp
index e748b85..af4cb08 100644
--- a/src/chips/dosbox_opl3.cpp
+++ b/src/chips/dosbox_opl3.cpp
@@ -1,22 +1,16 @@
#include "dosbox_opl3.h"
#include "dosbox/dbopl.h"
+#include <new>
#include <cstdlib>
#include <assert.h>
DosBoxOPL3::DosBoxOPL3() :
- OPLChipBase(),
- m_chip(NULL)
+ OPLChipBaseBufferedT(),
+ m_chip(new DBOPL::Handler)
{
reset();
}
-DosBoxOPL3::DosBoxOPL3(const DosBoxOPL3 &c) :
- OPLChipBase(c),
- m_chip(NULL)
-{
- setRate(c.m_rate);
-}
-
DosBoxOPL3::~DosBoxOPL3()
{
DBOPL::Handler *chip_r = reinterpret_cast<DBOPL::Handler*>(m_chip);
@@ -25,23 +19,20 @@ DosBoxOPL3::~DosBoxOPL3()
void DosBoxOPL3::setRate(uint32_t rate)
{
- OPLChipBase::setRate(rate);
- reset();
+ OPLChipBaseBufferedT::setRate(rate);
+ DBOPL::Handler *chip_r = reinterpret_cast<DBOPL::Handler*>(m_chip);
+ chip_r->~Handler();
+ new(chip_r) DBOPL::Handler;
+ chip_r->Init(49716);
}
void DosBoxOPL3::reset()
{
+ OPLChipBaseBufferedT::reset();
DBOPL::Handler *chip_r = reinterpret_cast<DBOPL::Handler*>(m_chip);
- if(m_chip && chip_r)
- delete chip_r;
- m_chip = new DBOPL::Handler;
- chip_r = reinterpret_cast<DBOPL::Handler*>(m_chip);
- chip_r->Init(m_rate);
-}
-
-void DosBoxOPL3::reset(uint32_t rate)
-{
- setRate(rate);
+ chip_r->~Handler();
+ new(chip_r) DBOPL::Handler;
+ chip_r->Init(49716);
}
void DosBoxOPL3::writeReg(uint16_t addr, uint8_t data)
@@ -50,63 +41,14 @@ void DosBoxOPL3::writeReg(uint16_t addr, uint8_t data)
chip_r->WriteReg(static_cast<Bit32u>(addr), data);
}
-int DosBoxOPL3::generate(int16_t *output, size_t frames)
-{
- DBOPL::Handler *chip_r = reinterpret_cast<DBOPL::Handler*>(m_chip);
- ssize_t left = (ssize_t)frames;
- while(left > 0)
- {
- ssize_t frames_i = left;
- chip_r->GenerateArr(output, &frames_i);
- output += (frames_i * 2);
- left -= frames_i;
- }
- return (int)frames;
-}
-
-int DosBoxOPL3::generateAndMix(int16_t *output, size_t frames)
-{
- DBOPL::Handler *chip_r = reinterpret_cast<DBOPL::Handler*>(m_chip);
- ssize_t left = (ssize_t)frames;
- while(left > 0)
- {
- ssize_t frames_i = left;
- chip_r->GenerateArrMix(output, &frames_i);
- output += (frames_i * 2);
- left -= frames_i;
- }
- return (int)frames;
-}
-
-int DosBoxOPL3::generate32(int32_t *output, size_t frames)
-{
- DBOPL::Handler *chip_r = reinterpret_cast<DBOPL::Handler*>(m_chip);
- ssize_t left = (ssize_t)frames;
- while(left > 0)
- {
- ssize_t frames_i = left;
- chip_r->GenerateArr(output, &frames_i);
- output += (frames_i * 2);
- left -= frames_i;
- }
- return (int)frames;
-}
-
-int DosBoxOPL3::generateAndMix32(int32_t *output, size_t frames)
+void DosBoxOPL3::nativeGenerateN(int16_t *output, size_t frames)
{
DBOPL::Handler *chip_r = reinterpret_cast<DBOPL::Handler*>(m_chip);
- ssize_t left = (ssize_t)frames;
- while(left > 0)
- {
- ssize_t frames_i = left;
- chip_r->GenerateArrMix(output, &frames_i);
- output += (frames_i * 2);
- left -= frames_i;
- }
- return (int)frames;
+ Bitu frames_i = frames;
+ chip_r->GenerateArr(output, &frames_i);
}
const char *DosBoxOPL3::emulatorName()
{
- return "DosBox 0.74 OPL3";
+ return "DosBox 0.74-r4111 OPL3";
}
diff --git a/src/chips/dosbox_opl3.h b/src/chips/dosbox_opl3.h
index 422e2d1..f4c68da 100644
--- a/src/chips/dosbox_opl3.h
+++ b/src/chips/dosbox_opl3.h
@@ -3,23 +3,20 @@
#include "opl_chip_base.h"
-class DosBoxOPL3 final : public OPLChipBase
+class DosBoxOPL3 final : public OPLChipBaseBufferedT<DosBoxOPL3>
{
void *m_chip;
public:
DosBoxOPL3();
- DosBoxOPL3(const DosBoxOPL3 &c);
- virtual ~DosBoxOPL3() override;
+ ~DosBoxOPL3() override;
- virtual void setRate(uint32_t rate) override;
- virtual void reset() override;
- virtual void reset(uint32_t rate) override;
- virtual void writeReg(uint16_t addr, uint8_t data) override;
- virtual int generate(int16_t *output, size_t frames) override;
- virtual int generateAndMix(int16_t *output, size_t frames) override;
- virtual int generate32(int32_t *output, size_t frames) override;
- virtual int generateAndMix32(int32_t *output, size_t frames) override;
- virtual const char *emulatorName() override;
+ void setRate(uint32_t rate) override;
+ void reset() override;
+ void writeReg(uint16_t addr, uint8_t data) override;
+ void nativePreGenerate() override {}
+ void nativePostGenerate() override {}
+ void nativeGenerateN(int16_t *output, size_t frames) override;
+ const char *emulatorName() override;
};
#endif // DOSBOX_OPL3_H
diff --git a/src/chips/nuked/nukedopl3.c b/src/chips/nuked/nukedopl3.c
index eadb6b9..87d3212 100644
--- a/src/chips/nuked/nukedopl3.c
+++ b/src/chips/nuked/nukedopl3.c
@@ -697,18 +697,18 @@ static void OPL3_ChannelUpdateRhythm(opl3_chip *chip, Bit8u data)
channel6 = &chip->channel[6];
channel7 = &chip->channel[7];
channel8 = &chip->channel[8];
- channel6->out[0] = &channel6->slots[1]->out;
- channel6->out[1] = &channel6->slots[1]->out;
+ channel6->out[0] = &channel6->slotz[1]->out;
+ channel6->out[1] = &channel6->slotz[1]->out;
channel6->out[2] = &chip->zeromod;
channel6->out[3] = &chip->zeromod;
- channel7->out[0] = &channel7->slots[0]->out;
- channel7->out[1] = &channel7->slots[0]->out;
- channel7->out[2] = &channel7->slots[1]->out;
- channel7->out[3] = &channel7->slots[1]->out;
- channel8->out[0] = &channel8->slots[0]->out;
- channel8->out[1] = &channel8->slots[0]->out;
- channel8->out[2] = &channel8->slots[1]->out;
- channel8->out[3] = &channel8->slots[1]->out;
+ channel7->out[0] = &channel7->slotz[0]->out;
+ channel7->out[1] = &channel7->slotz[0]->out;
+ channel7->out[2] = &channel7->slotz[1]->out;
+ channel7->out[3] = &channel7->slotz[1]->out;
+ channel8->out[0] = &channel8->slotz[0]->out;
+ channel8->out[1] = &channel8->slotz[0]->out;
+ channel8->out[2] = &channel8->slotz[1]->out;
+ channel8->out[3] = &channel8->slotz[1]->out;
for (chnum = 6; chnum < 9; chnum++)
{
chip->channel[chnum].chtype = ch_drum;
@@ -719,49 +719,49 @@ static void OPL3_ChannelUpdateRhythm(opl3_chip *chip, Bit8u data)
/* hh */
if (chip->rhy & 0x01)
{
- OPL3_EnvelopeKeyOn(channel7->slots[0], egk_drum);
+ OPL3_EnvelopeKeyOn(channel7->slotz[0], egk_drum);
}
else
{
- OPL3_EnvelopeKeyOff(channel7->slots[0], egk_drum);
+ OPL3_EnvelopeKeyOff(channel7->slotz[0], egk_drum);
}
/* tc */
if (chip->rhy & 0x02)
{
- OPL3_EnvelopeKeyOn(channel8->slots[1], egk_drum);
+ OPL3_EnvelopeKeyOn(channel8->slotz[1], egk_drum);
}
else
{
- OPL3_EnvelopeKeyOff(channel8->slots[1], egk_drum);
+ OPL3_EnvelopeKeyOff(channel8->slotz[1], egk_drum);
}
/* tom */
if (chip->rhy & 0x04)
{
- OPL3_EnvelopeKeyOn(channel8->slots[0], egk_drum);
+ OPL3_EnvelopeKeyOn(channel8->slotz[0], egk_drum);
}
else
{
- OPL3_EnvelopeKeyOff(channel8->slots[0], egk_drum);
+ OPL3_EnvelopeKeyOff(channel8->slotz[0], egk_drum);
}
/* sd */
if (chip->rhy & 0x08)
{
- OPL3_EnvelopeKeyOn(channel7->slots[1], egk_drum);
+ OPL3_EnvelopeKeyOn(channel7->slotz[1], egk_drum);
}
else
{
- OPL3_EnvelopeKeyOff(channel7->slots[1], egk_drum);
+ OPL3_EnvelopeKeyOff(channel7->slotz[1], egk_drum);
}
/* bd */
if (chip->rhy & 0x10)
{
- OPL3_EnvelopeKeyOn(channel6->slots[0], egk_drum);
- OPL3_EnvelopeKeyOn(channel6->slots[1], egk_drum);
+ OPL3_EnvelopeKeyOn(channel6->slotz[0], egk_drum);
+ OPL3_EnvelopeKeyOn(channel6->slotz[1], egk_drum);
}
else
{
- OPL3_EnvelopeKeyOff(channel6->slots[0], egk_drum);
- OPL3_EnvelopeKeyOff(channel6->slots[1], egk_drum);
+ OPL3_EnvelopeKeyOff(channel6->slotz[0], egk_drum);
+ OPL3_EnvelopeKeyOff(channel6->slotz[1], egk_drum);
}
}
else
@@ -770,8 +770,8 @@ static void OPL3_ChannelUpdateRhythm(opl3_chip *chip, Bit8u data)
{
chip->channel[chnum].chtype = ch_2op;
OPL3_ChannelSetupAlg(&chip->channel[chnum]);
- OPL3_EnvelopeKeyOff(chip->channel[chnum].slots[0], egk_drum);
- OPL3_EnvelopeKeyOff(chip->channel[chnum].slots[1], egk_drum);
+ OPL3_EnvelopeKeyOff(chip->channel[chnum].slotz[0], egk_drum);
+ OPL3_EnvelopeKeyOff(chip->channel[chnum].slotz[1], egk_drum);
}
}
}
@@ -785,14 +785,14 @@ static void OPL3_ChannelWriteA0(opl3_channel *channel, Bit8u data)
channel->f_num = (channel->f_num & 0x300) | data;
channel->ksv = (channel->block << 1)
| ((channel->f_num >> (0x09 - channel->chip->nts)) & 0x01);
- OPL3_EnvelopeUpdateKSL(channel->slots[0]);
- OPL3_EnvelopeUpdateKSL(channel->slots[1]);
+ OPL3_EnvelopeUpdateKSL(channel->slotz[0]);
+ OPL3_EnvelopeUpdateKSL(channel->slotz[1]);
if (channel->chip->newm && channel->chtype == ch_4op)
{
channel->pair->f_num = channel->f_num;
channel->pair->ksv = channel->ksv;
- OPL3_EnvelopeUpdateKSL(channel->pair->slots[0]);
- OPL3_EnvelopeUpdateKSL(channel->pair->slots[1]);
+ OPL3_EnvelopeUpdateKSL(channel->pair->slotz[0]);
+ OPL3_EnvelopeUpdateKSL(channel->pair->slotz[1]);
}
}
@@ -806,15 +806,15 @@ static void OPL3_ChannelWriteB0(opl3_channel *channel, Bit8u data)
channel->block = (data >> 2) & 0x07;
channel->ksv = (channel->block << 1)
| ((channel->f_num >> (0x09 - channel->chip->nts)) & 0x01);
- OPL3_EnvelopeUpdateKSL(channel->slots[0]);
- OPL3_EnvelopeUpdateKSL(channel->slots[1]);
+ OPL3_EnvelopeUpdateKSL(channel->slotz[0]);
+ OPL3_EnvelopeUpdateKSL(channel->slotz[1]);
if (channel->chip->newm && channel->chtype == ch_4op)
{
channel->pair->f_num = channel->f_num;
channel->pair->block = channel->block;
channel->pair->ksv = channel->ksv;
- OPL3_EnvelopeUpdateKSL(channel->pair->slots[0]);
- OPL3_EnvelopeUpdateKSL(channel->pair->slots[1]);
+ OPL3_EnvelopeUpdateKSL(channel->pair->slotz[0]);
+ OPL3_EnvelopeUpdateKSL(channel->pair->slotz[1]);
}
}
@@ -824,19 +824,19 @@ static void OPL3_ChannelSetupAlg(opl3_channel *channel)
{
if (channel->ch_num == 7 || channel->ch_num == 8)
{
- channel->slots[0]->mod = &channel->chip->zeromod;
- channel->slots[1]->mod = &channel->chip->zeromod;
+ channel->slotz[0]->mod = &channel->chip->zeromod;
+ channel->slotz[1]->mod = &channel->chip->zeromod;
return;
}
switch (channel->alg & 0x01)
{
case 0x00:
- channel->slots[0]->mod = &channel->slots[0]->fbmod;
- channel->slots[1]->mod = &channel->slots[0]->out;
+ channel->slotz[0]->mod = &channel->slotz[0]->fbmod;
+ channel->slotz[1]->mod = &channel->slotz[0]->out;
break;
case 0x01:
- channel->slots[0]->mod = &channel->slots[0]->fbmod;
- channel->slots[1]->mod = &channel->chip->zeromod;
+ channel->slotz[0]->mod = &channel->slotz[0]->fbmod;
+ channel->slotz[1]->mod = &channel->chip->zeromod;
break;
}
return;
@@ -854,43 +854,43 @@ static void OPL3_ChannelSetupAlg(opl3_channel *channel)
switch (channel->alg & 0x03)
{
case 0x00:
- channel->pair->slots[0]->mod = &channel->pair->slots[0]->fbmod;
- channel->pair->slots[1]->mod = &channel->pair->slots[0]->out;
- channel->slots[0]->mod = &channel->pair->slots[1]->out;
- channel->slots[1]->mod = &channel->slots[0]->out;
- channel->out[0] = &channel->slots[1]->out;
+ channel->pair->slotz[0]->mod = &channel->pair->slotz[0]->fbmod;
+ channel->pair->slotz[1]->mod = &channel->pair->slotz[0]->out;
+ channel->slotz[0]->mod = &channel->pair->slotz[1]->out;
+ channel->slotz[1]->mod = &channel->slotz[0]->out;
+ channel->out[0] = &channel->slotz[1]->out;
channel->out[1] = &channel->chip->zeromod;
channel->out[2] = &channel->chip->zeromod;
channel->out[3] = &channel->chip->zeromod;
break;
case 0x01:
- channel->pair->slots[0]->mod = &channel->pair->slots[0]->fbmod;
- channel->pair->slots[1]->mod = &channel->pair->slots[0]->out;
- channel->slots[0]->mod = &channel->chip->zeromod;
- channel->slots[1]->mod = &channel->slots[0]->out;
- channel->out[0] = &channel->pair->slots[1]->out;
- channel->out[1] = &channel->slots[1]->out;
+ channel->pair->slotz[0]->mod = &channel->pair->slotz[0]->fbmod;
+ channel->pair->slotz[1]->mod = &channel->pair->slotz[0]->out;
+ channel->slotz[0]->mod = &channel->chip->zeromod;
+ channel->slotz[1]->mod = &channel->slotz[0]->out;
+ channel->out[0] = &channel->pair->slotz[1]->out;
+ channel->out[1] = &channel->slotz[1]->out;
channel->out[2] = &channel->chip->zeromod;
channel->out[3] = &channel->chip->zeromod;
break;
case 0x02:
- channel->pair->slots[0]->mod = &channel->pair->slots[0]->fbmod;
- channel->pair->slots[1]->mod = &channel->chip->zeromod;
- channel->slots[0]->mod = &channel->pair->slots[1]->out;
- channel->slots[1]->mod = &channel->slots[0]->out;
- channel->out[0] = &channel->pair->slots[0]->out;
- channel->out[1] = &channel->slots[1]->out;
+ channel->pair->slotz[0]->mod = &channel->pair->slotz[0]->fbmod;
+ channel->pair->slotz[1]->mod = &channel->chip->zeromod;
+ channel->slotz[0]->mod = &channel->pair->slotz[1]->out;
+ channel->slotz[1]->mod = &channel->slotz[0]->out;
+ channel->out[0] = &channel->pair->slotz[0]->out;
+ channel->out[1] = &channel->slotz[1]->out;
channel->out[2] = &channel->chip->zeromod;
channel->out[3] = &channel->chip->zeromod;
break;
case 0x03:
- channel->pair->slots[0]->mod = &channel->pair->slots[0]->fbmod;
- channel->pair->slots[1]->mod = &channel->chip->zeromod;
- channel->slots[0]->mod = &channel->pair->slots[1]->out;
- channel->slots[1]->mod = &channel->chip->zeromod;
- channel->out[0] = &channel->pair->slots[0]->out;
- channel->out[1] = &channel->slots[0]->out;
- channel->out[2] = &channel->slots[1]->out;
+ channel->pair->slotz[0]->mod = &channel->pair->slotz[0]->fbmod;
+ channel->pair->slotz[1]->mod = &channel->chip->zeromod;
+ channel->slotz[0]->mod = &channel->pair->slotz[1]->out;
+ channel->slotz[1]->mod = &channel->chip->zeromod;
+ channel->out[0] = &channel->pair->slotz[0]->out;
+ channel->out[1] = &channel->slotz[0]->out;
+ channel->out[2] = &channel->slotz[1]->out;
channel->out[3] = &channel->chip->zeromod;
break;
}
@@ -900,18 +900,18 @@ static void OPL3_ChannelSetupAlg(opl3_channel *channel)
switch (channel->alg & 0x01)
{
case 0x00:
- channel->slots[0]->mod = &channel->slots[0]->fbmod;
- channel->slots[1]->mod = &channel->slots[0]->out;
- channel->out[0] = &channel->slots[1]->out;
+ channel->slotz[0]->mod = &channel->slotz[0]->fbmod;
+ channel->slotz[1]->mod = &channel->slotz[0]->out;
+ channel->out[0] = &channel->slotz[1]->out;
channel->out[1] = &channel->chip->zeromod;
channel->out[2] = &channel->chip->zeromod;
channel->out[3] = &channel->chip->zeromod;
break;
case 0x01:
- channel->slots[0]->mod = &channel->slots[0]->fbmod;
- channel->slots[1]->mod = &channel->chip->zeromod;
- channel->out[0] = &channel->slots[0]->out;
- channel->out[1] = &channel->slots[1]->out;
+ channel->slotz[0]->mod = &channel->slotz[0]->fbmod;
+ channel->slotz[1]->mod = &channel->chip->zeromod;
+ channel->out[0] = &channel->slotz[0]->out;
+ channel->out[1] = &channel->slotz[1]->out;
channel->out[2] = &channel->chip->zeromod;
channel->out[3] = &channel->chip->zeromod;
break;
@@ -964,21 +964,21 @@ static void OPL3_ChannelKeyOn(opl3_channel *channel)
{
if (channel->chtype == ch_4op)
{
- OPL3_EnvelopeKeyOn(channel->slots[0], egk_norm);
- OPL3_EnvelopeKeyOn(channel->slots[1], egk_norm);
- OPL3_EnvelopeKeyOn(channel->pair->slots[0], egk_norm);
- OPL3_EnvelopeKeyOn(channel->pair->slots[1], egk_norm);
+ OPL3_EnvelopeKeyOn(channel->slotz[0], egk_norm);
+ OPL3_EnvelopeKeyOn(channel->slotz[1], egk_norm);
+ OPL3_EnvelopeKeyOn(channel->pair->slotz[0], egk_norm);
+ OPL3_EnvelopeKeyOn(channel->pair->slotz[1], egk_norm);
}
else if (channel->chtype == ch_2op || channel->chtype == ch_drum)
{
- OPL3_EnvelopeKeyOn(channel->slots[0], egk_norm);
- OPL3_EnvelopeKeyOn(channel->slots[1], egk_norm);
+ OPL3_EnvelopeKeyOn(channel->slotz[0], egk_norm);
+ OPL3_EnvelopeKeyOn(channel->slotz[1], egk_norm);
}
}
else
{
- OPL3_EnvelopeKeyOn(channel->slots[0], egk_norm);
- OPL3_EnvelopeKeyOn(channel->slots[1], egk_norm);
+ OPL3_EnvelopeKeyOn(channel->slotz[0], egk_norm);
+ OPL3_EnvelopeKeyOn(channel->slotz[1], egk_norm);
}
}
@@ -988,21 +988,21 @@ static void OPL3_ChannelKeyOff(opl3_channel *channel)
{
if (channel->chtype == ch_4op)
{
- OPL3_EnvelopeKeyOff(channel->slots[0], egk_norm);
- OPL3_EnvelopeKeyOff(channel->slots[1], egk_norm);
- OPL3_EnvelopeKeyOff(channel->pair->slots[0], egk_norm);
- OPL3_EnvelopeKeyOff(channel->pair->slots[1], egk_norm);
+ OPL3_EnvelopeKeyOff(channel->slotz[0], egk_norm);
+ OPL3_EnvelopeKeyOff(channel->slotz[1], egk_norm);
+ OPL3_EnvelopeKeyOff(channel->pair->slotz[0], egk_norm);
+ OPL3_EnvelopeKeyOff(channel->pair->slotz[1], egk_norm);
}
else if (channel->chtype == ch_2op || channel->chtype == ch_drum)
{
- OPL3_EnvelopeKeyOff(channel->slots[0], egk_norm);
- OPL3_EnvelopeKeyOff(channel->slots[1], egk_norm);
+ OPL3_EnvelopeKeyOff(channel->slotz[0], egk_norm);
+ OPL3_EnvelopeKeyOff(channel->slotz[1], egk_norm);
}
}
else
{
- OPL3_EnvelopeKeyOff(channel->slots[0], egk_norm);
- OPL3_EnvelopeKeyOff(channel->slots[1], egk_norm);
+ OPL3_EnvelopeKeyOff(channel->slotz[0], egk_norm);
+ OPL3_EnvelopeKeyOff(channel->slotz[1], egk_norm);
}
}
@@ -1147,7 +1147,7 @@ void OPL3_Generate(opl3_chip *chip, Bit16s *buf)
if (chip->eg_timerrem || chip->eg_state)
{
- if (chip->eg_timer == 0xfffffffff)
+ if (chip->eg_timer == (uint64_t)0xfffffffffU)
{
chip->eg_timer = 0;
chip->eg_timerrem = 1;
@@ -1209,8 +1209,8 @@ void OPL3_Reset(opl3_chip *chip, Bit32u samplerate)
}
for (channum = 0; channum < 18; channum++)
{
- chip->channel[channum].slots[0] = &chip->slot[ch_slot[channum]];
- chip->channel[channum].slots[1] = &chip->slot[ch_slot[channum] + 3];
+ chip->channel[channum].slotz[0] = &chip->slot[ch_slot[channum]];
+ chip->channel[channum].slotz[1] = &chip->slot[ch_slot[channum] + 3];
chip->slot[ch_slot[channum]].channel = &chip->channel[channum];
chip->slot[ch_slot[channum] + 3].channel = &chip->channel[channum];
if ((channum % 9) < 3)
diff --git a/src/chips/nuked/nukedopl3.h b/src/chips/nuked/nukedopl3.h
index ce748b1..d57cf5f 100644
--- a/src/chips/nuked/nukedopl3.h
+++ b/src/chips/nuked/nukedopl3.h
@@ -86,7 +86,7 @@ struct _opl3_slot {
};
struct _opl3_channel {
- opl3_slot *slots[2];
+ opl3_slot *slotz[2];/*Don't use "slots" keyword to avoid conflict with Qt applications*/
opl3_channel *pair;
opl3_chip *chip;
Bit16s *out[4];
diff --git a/src/chips/nuked/nukedopl3_174.c b/src/chips/nuked/nukedopl3_174.c
index 401089c..99eab16 100644
--- a/src/chips/nuked/nukedopl3_174.c
+++ b/src/chips/nuked/nukedopl3_174.c
@@ -638,18 +638,18 @@ static void OPL3_ChannelUpdateRhythm(opl3_chip *chip, Bit8u data)
channel6 = &chip->channel[6];
channel7 = &chip->channel[7];
channel8 = &chip->channel[8];
- channel6->out[0] = &channel6->slots[1]->out;
- channel6->out[1] = &channel6->slots[1]->out;
+ channel6->out[0] = &channel6->slotz[1]->out;
+ channel6->out[1] = &channel6->slotz[1]->out;
channel6->out[2] = &chip->zeromod;
channel6->out[3] = &chip->zeromod;
- channel7->out[0] = &channel7->slots[0]->out;
- channel7->out[1] = &channel7->slots[0]->out;
- channel7->out[2] = &channel7->slots[1]->out;
- channel7->out[3] = &channel7->slots[1]->out;
- channel8->out[0] = &channel8->slots[0]->out;
- channel8->out[1] = &channel8->slots[0]->out;
- channel8->out[2] = &channel8->slots[1]->out;
- channel8->out[3] = &channel8->slots[1]->out;
+ channel7->out[0] = &channel7->slotz[0]->out;
+ channel7->out[1] = &channel7->slotz[0]->out;
+ channel7->out[2] = &channel7->slotz[1]->out;
+ channel7->out[3] = &channel7->slotz[1]->out;
+ channel8->out[0] = &channel8->slotz[0]->out;
+ channel8->out[1] = &channel8->slotz[0]->out;
+ channel8->out[2] = &channel8->slotz[1]->out;
+ channel8->out[3] = &channel8->slotz[1]->out;
for (chnum = 6; chnum < 9; chnum++)
{
chip->channel[chnum].chtype = ch_drum;
@@ -658,49 +658,49 @@ static void OPL3_ChannelUpdateRhythm(opl3_chip *chip, Bit8u data)
/*hh*/
if (chip->rhy & 0x01)
{
- OPL3_EnvelopeKeyOn(channel7->slots[0], egk_drum);
+ OPL3_EnvelopeKeyOn(channel7->slotz[0], egk_drum);
}
else
{
- OPL3_EnvelopeKeyOff(channel7->slots[0], egk_drum);
+ OPL3_EnvelopeKeyOff(channel7->slotz[0], egk_drum);
}
/*tc*/
if (chip->rhy & 0x02)
{
- OPL3_EnvelopeKeyOn(channel8->slots[1], egk_drum);
+ OPL3_EnvelopeKeyOn(channel8->slotz[1], egk_drum);
}
else
{
- OPL3_EnvelopeKeyOff(channel8->slots[1], egk_drum);
+ OPL3_EnvelopeKeyOff(channel8->slotz[1], egk_drum);
}
/*tom*/
if (chip->rhy & 0x04)
{
- OPL3_EnvelopeKeyOn(channel8->slots[0], egk_drum);
+ OPL3_EnvelopeKeyOn(channel8->slotz[0], egk_drum);
}
else
{
- OPL3_EnvelopeKeyOff(channel8->slots[0], egk_drum);
+ OPL3_EnvelopeKeyOff(channel8->slotz[0], egk_drum);
}
/*sd*/
if (chip->rhy & 0x08)
{
- OPL3_EnvelopeKeyOn(channel7->slots[1], egk_drum);
+ OPL3_EnvelopeKeyOn(channel7->slotz[1], egk_drum);
}
else
{
- OPL3_EnvelopeKeyOff(channel7->slots[1], egk_drum);
+ OPL3_EnvelopeKeyOff(channel7->slotz[1], egk_drum);
}
/*bd*/
if (chip->rhy & 0x10)
{
- OPL3_EnvelopeKeyOn(channel6->slots[0], egk_drum);
- OPL3_EnvelopeKeyOn(channel6->slots[1], egk_drum);
+ OPL3_EnvelopeKeyOn(channel6->slotz[0], egk_drum);
+ OPL3_EnvelopeKeyOn(channel6->slotz[1], egk_drum);
}
else
{
- OPL3_EnvelopeKeyOff(channel6->slots[0], egk_drum);
- OPL3_EnvelopeKeyOff(channel6->slots[1], egk_drum);
+ OPL3_EnvelopeKeyOff(channel6->slotz[0], egk_drum);
+ OPL3_EnvelopeKeyOff(channel6->slotz[1], egk_drum);
}
}
else
@@ -709,8 +709,8 @@ static void OPL3_ChannelUpdateRhythm(opl3_chip *chip, Bit8u data)
{
chip->channel[chnum].chtype = ch_2op;
OPL3_ChannelSetupAlg(&chip->channel[chnum]);
- OPL3_EnvelopeKeyOff(chip->channel[chnum].slots[0], egk_drum);
- OPL3_EnvelopeKeyOff(chip->channel[chnum].slots[1], egk_drum);
+ OPL3_EnvelopeKeyOff(chip->channel[chnum].slotz[0], egk_drum);
+ OPL3_EnvelopeKeyOff(chip->channel[chnum].slotz[1], egk_drum);
}
}
}
@@ -724,18 +724,18 @@ static void OPL3_ChannelWriteA0(opl3_channel *channel, Bit8u data)
channel->f_num = (channel->f_num & 0x300) | data;
channel->ksv = (channel->block << 1)
| ((channel->f_num >> (0x09 - channel->chip->nts)) & 0x01);
- OPL3_EnvelopeUpdateKSL(channel->slots[0]);
- OPL3_EnvelopeUpdateKSL(channel->slots[1]);
- OPL3_EnvelopeUpdateRate(channel->slots[0]);
- OPL3_EnvelopeUpdateRate(channel->slots[1]);
+ OPL3_EnvelopeUpdateKSL(channel->slotz[0]);
+ OPL3_EnvelopeUpdateKSL(channel->slotz[1]);
+ OPL3_EnvelopeUpdateRate(channel->slotz[0]);
+ OPL3_EnvelopeUpdateRate(channel->slotz[1]);
if (channel->chip->newm && channel->chtype == ch_4op)
{
channel->pair->f_num = channel->f_num;
channel->pair->ksv = channel->ksv;
- OPL3_EnvelopeUpdateKSL(channel->pair->slots[0]);
- OPL3_EnvelopeUpdateKSL(channel->pair->slots[1]);
- OPL3_EnvelopeUpdateRate(channel->pair->slots[0]);
- OPL3_EnvelopeUpdateRate(channel->pair->slots[1]);
+ OPL3_EnvelopeUpdateKSL(channel->pair->slotz[0]);
+ OPL3_EnvelopeUpdateKSL(channel->pair->slotz[1]);
+ OPL3_EnvelopeUpdateRate(channel->pair->slotz[0]);
+ OPL3_EnvelopeUpdateRate(channel->pair->slotz[1]);
}
}
@@ -749,19 +749,19 @@ static void OPL3_ChannelWriteB0(opl3_channel *channel, Bit8u data)
channel->block = (data >> 2) & 0x07;
channel->ksv = (channel->block << 1)
| ((channel->f_num >> (0x09 - channel->chip->nts)) & 0x01);
- OPL3_EnvelopeUpdateKSL(channel->slots[0]);
- OPL3_EnvelopeUpdateKSL(channel->slots[1]);
- OPL3_EnvelopeUpdateRate(channel->slots[0]);
- OPL3_EnvelopeUpdateRate(channel->slots[1]);
+ OPL3_EnvelopeUpdateKSL(channel->slotz[0]);
+ OPL3_EnvelopeUpdateKSL(channel->slotz[1]);
+ OPL3_EnvelopeUpdateRate(channel->slotz[0]);
+ OPL3_EnvelopeUpdateRate(channel->slotz[1]);
if (channel->chip->newm && channel->chtype == ch_4op)
{
channel->pair->f_num = channel->f_num;
channel->pair->block = channel->block;
channel->pair->ksv = channel->ksv;
- OPL3_EnvelopeUpdateKSL(channel->pair->slots[0]);
- OPL3_EnvelopeUpdateKSL(channel->pair->slots[1]);
- OPL3_EnvelopeUpdateRate(channel->pair->slots[0]);
- OPL3_EnvelopeUpdateRate(channel->pair->slots[1]);
+ OPL3_EnvelopeUpdateKSL(channel->pair->slotz[0]);
+ OPL3_EnvelopeUpdateKSL(channel->pair->slotz[1]);
+ OPL3_EnvelopeUpdateRate(channel->pair->slotz[0]);
+ OPL3_EnvelopeUpdateRate(channel->pair->slotz[1]);
}
}
@@ -772,12 +772,12 @@ static void OPL3_ChannelSetupAlg(opl3_channel *channel)
switch (channel->alg & 0x01)
{
case 0x00:
- channel->slots[0]->mod = &channel->slots[0]->fbmod;
- channel->slots[1]->mod = &channel->slots[0]->out;
+ channel->slotz[0]->mod = &channel->slotz[0]->fbmod;
+ channel->slotz[1]->mod = &channel->slotz[0]->out;
break;
case 0x01:
- channel->slots[0]->mod = &channel->slots[0]->fbmod;
- channel->slots[1]->mod = &channel->chip->zeromod;
+ channel->slotz[0]->mod = &channel->slotz[0]->fbmod;
+ channel->slotz[1]->mod = &channel->chip->zeromod;
break;
}
return;
@@ -795,43 +795,43 @@ static void OPL3_ChannelSetupAlg(opl3_channel *channel)
switch (channel->alg & 0x03)
{
case 0x00:
- channel->pair->slots[0]->mod = &channel->pair->slots[0]->fbmod;
- channel->pair->slots[1]->mod = &channel->pair->slots[0]->out;
- channel->slots[0]->mod = &channel->pair->slots[1]->out;
- channel->slots[1]->mod = &channel->slots[0]->out;
- channel->out[0] = &channel->slots[1]->out;
+ channel->pair->slotz[0]->mod = &channel->pair->slotz[0]->fbmod;
+ channel->pair->slotz[1]->mod = &channel->pair->slotz[0]->out;
+ channel->slotz[0]->mod = &channel->pair->slotz[1]->out;
+ channel->slotz[1]->mod = &channel->slotz[0]->out;
+ channel->out[0] = &channel->slotz[1]->out;
channel->out[1] = &channel->chip->zeromod;
channel->out[2] = &channel->chip->zeromod;
channel->out[3] = &channel->chip->zeromod;
break;
case 0x01:
- channel->pair->slots[0]->mod = &channel->pair->slots[0]->fbmod;
- channel->pair->slots[1]->mod = &channel->pair->slots[0]->out;
- channel->slots[0]->mod = &channel->chip->zeromod;
- channel->slots[1]->mod = &channel->slots[0]->out;
- channel->out[0] = &channel->pair->slots[1]->out;
- channel->out[1] = &channel->slots[1]->out;
+ channel->pair->slotz[0]->mod = &channel->pair->slotz[0]->fbmod;
+ channel->pair->slotz[1]->mod = &channel->pair->slotz[0]->out;
+ channel->slotz[0]->mod = &channel->chip->zeromod;
+ channel->slotz[1]->mod = &channel->slotz[0]->out;
+ channel->out[0] = &channel->pair->slotz[1]->out;
+ channel->out[1] = &channel->slotz[1]->out;
channel->out[2] = &channel->chip->zeromod;
channel->out[3] = &channel->chip->zeromod;
break;
case 0x02:
- channel->pair->slots[0]->mod = &channel->pair->slots[0]->fbmod;
- channel->pair->slots[1]->mod = &channel->chip->zeromod;
- channel->slots[0]->mod = &channel->pair->slots[1]->out;
- channel->slots[1]->mod = &channel->slots[0]->out;
- channel->out[0] = &channel->pair->slots[0]->out;
- channel->out[1] = &channel->slots[1]->out;
+ channel->pair->slotz[0]->mod = &channel->pair->slotz[0]->fbmod;
+ channel->pair->slotz[1]->mod = &channel->chip->zeromod;
+ channel->slotz[0]->mod = &channel->pair->slotz[1]->out;
+ channel->slotz[1]->mod = &channel->slotz[0]->out;
+ channel->out[0] = &channel->pair->slotz[0]->out;
+ channel->out[1] = &channel->slotz[1]->out;
channel->out[2] = &channel->chip->zeromod;
channel->out[3] = &channel->chip->zeromod;
break;
case 0x03:
- channel->pair->slots[0]->mod = &channel->pair->slots[0]->fbmod;
- channel->pair->slots[1]->mod = &channel->chip->zeromod;
- channel->slots[0]->mod = &channel->pair->slots[1]->out;
- channel->slots[1]->mod = &channel->chip->zeromod;
- channel->out[0] = &channel->pair->slots[0]->out;
- channel->out[1] = &channel->slots[0]->out;
- channel->out[2] = &channel->slots[1]->out;
+ channel->pair->slotz[0]->mod = &channel->pair->slotz[0]->fbmod;
+ channel->pair->slotz[1]->mod = &channel->chip->zeromod;
+ channel->slotz[0]->mod = &channel->pair->slotz[1]->out;
+ channel->slotz[1]->mod = &channel->chip->zeromod;
+ channel->out[0] = &channel->pair->slotz[0]->out;
+ channel->out[1] = &channel->slotz[0]->out;
+ channel->out[2] = &channel->slotz[1]->out;
channel->out[3] = &channel->chip->zeromod;
break;
}
@@ -841,18 +841,18 @@ static void OPL3_ChannelSetupAlg(opl3_channel *channel)
switch (channel->alg & 0x01)
{
case 0x00:
- channel->slots[0]->mod = &channel->slots[0]->fbmod;
- channel->slots[1]->mod = &channel->slots[0]->out;
- channel->out[0] = &channel->slots[1]->out;
+ channel->slotz[0]->mod = &channel->slotz[0]->fbmod;
+ channel->slotz[1]->mod = &channel->slotz[0]->out;
+ channel->out[0] = &channel->slotz[1]->out;
channel->out[1] = &channel->chip->zeromod;
channel->out[2] = &channel->chip->zeromod;
channel->out[3] = &channel->chip->zeromod;
break;
case 0x01:
- channel->slots[0]->mod = &channel->slots[0]->fbmod;
- channel->slots[1]->mod = &channel->chip->zeromod;
- channel->out[0] = &channel->slots[0]->out;
- channel->out[1] = &channel->slots[1]->out;
+ channel->slotz[0]->mod = &channel->slotz[0]->fbmod;
+ channel->slotz[1]->mod = &channel->chip->zeromod;
+ channel->out[0] = &channel->slotz[0]->out;
+ channel->out[1] = &channel->slotz[1]->out;
channel->out[2] = &channel->chip->zeromod;
channel->out[3] = &channel->chip->zeromod;
break;
@@ -905,21 +905,21 @@ static void OPL3_ChannelKeyOn(opl3_channel *channel)
{
if (channel->chtype == ch_4op)
{
- OPL3_EnvelopeKeyOn(channel->slots[0], egk_norm);
- OPL3_EnvelopeKeyOn(channel->slots[1], egk_norm);
- OPL3_EnvelopeKeyOn(channel->pair->slots[0], egk_norm);
- OPL3_EnvelopeKeyOn(channel->pair->slots[1], egk_norm);
+ OPL3_EnvelopeKeyOn(channel->slotz[0], egk_norm);
+ OPL3_EnvelopeKeyOn(channel->slotz[1], egk_norm);
+ OPL3_EnvelopeKeyOn(channel->pair->slotz[0], egk_norm);
+ OPL3_EnvelopeKeyOn(channel->pair->slotz[1], egk_norm);
}
else if (channel->chtype == ch_2op || channel->chtype == ch_drum)
{
- OPL3_EnvelopeKeyOn(channel->slots[0], egk_norm);
- OPL3_EnvelopeKeyOn(channel->slots[1], egk_norm);
+ OPL3_EnvelopeKeyOn(channel->slotz[0], egk_norm);
+ OPL3_EnvelopeKeyOn(channel->slotz[1], egk_norm);
}
}
else
{
- OPL3_EnvelopeKeyOn(channel->slots[0], egk_norm);
- OPL3_EnvelopeKeyOn(channel->slots[1], egk_norm);
+ OPL3_EnvelopeKeyOn(channel->slotz[0], egk_norm);
+ OPL3_EnvelopeKeyOn(channel->slotz[1], egk_norm);
}
}
@@ -929,21 +929,21 @@ static void OPL3_ChannelKeyOff(opl3_channel *channel)
{
if (channel->chtype == ch_4op)
{
- OPL3_EnvelopeKeyOff(channel->slots[0], egk_norm);
- OPL3_EnvelopeKeyOff(channel->slots[1], egk_norm);
- OPL3_EnvelopeKeyOff(channel->pair->slots[0], egk_norm);
- OPL3_EnvelopeKeyOff(channel->pair->slots[1], egk_norm);
+ OPL3_EnvelopeKeyOff(channel->slotz[0], egk_norm);
+ OPL3_EnvelopeKeyOff(channel->slotz[1], egk_norm);
+ OPL3_EnvelopeKeyOff(channel->pair->slotz[0], egk_norm);
+ OPL3_EnvelopeKeyOff(channel->pair->slotz[1], egk_norm);
}
else if (channel->chtype == ch_2op || channel->chtype == ch_drum)
{
- OPL3_EnvelopeKeyOff(channel->slots[0], egk_norm);
- OPL3_EnvelopeKeyOff(channel->slots[1], egk_norm);
+ OPL3_EnvelopeKeyOff(channel->slotz[0], egk_norm);
+ OPL3_EnvelopeKeyOff(channel->slotz[1], egk_norm);
}
}
else
{
- OPL3_EnvelopeKeyOff(channel->slots[0], egk_norm);
- OPL3_EnvelopeKeyOff(channel->slots[1], egk_norm);
+ OPL3_EnvelopeKeyOff(channel->slotz[0], egk_norm);
+ OPL3_EnvelopeKeyOff(channel->slotz[1], egk_norm);
}
}
@@ -997,9 +997,9 @@ static void OPL3_GenerateRhythm1(opl3_chip *chip)
channel6 = &chip->channel[6];
channel7 = &chip->channel[7];
channel8 = &chip->channel[8];
- OPL3_SlotGenerate(channel6->slots[0]);
- phase14 = (channel7->slots[0]->pg_phase >> 9) & 0x3ff;
- phase17 = (channel8->slots[1]->pg_phase >> 9) & 0x3ff;
+ OPL3_SlotGenerate(channel6->slotz[0]);
+ phase14 = (channel7->slotz[0]->pg_phase >> 9) & 0x3ff;
+ phase17 = (channel8->slotz[1]->pg_phase >> 9) & 0x3ff;
phase = 0x00;
/*hh tc phase bit*/
phasebit = ((phase14 & 0x08) | (((phase14 >> 5) ^ phase14) & 0x04)
@@ -1007,9 +1007,9 @@ static void OPL3_GenerateRhythm1(opl3_chip *chip)
/*hh*/
phase = (phasebit << 9)
| (0x34 << ((phasebit ^ (chip->noise & 0x01)) << 1));
- OPL3_SlotGeneratePhase(channel7->slots[0], phase);
+ OPL3_SlotGeneratePhase(channel7->slotz[0], phase);
/*tt*/
- OPL3_SlotGenerateZM(channel8->slots[0]);
+ OPL3_SlotGenerateZM(channel8->slotz[0]);
}
static void OPL3_GenerateRhythm2(opl3_chip *chip)
@@ -1025,19 +1025,19 @@ static void OPL3_GenerateRhythm2(opl3_chip *chip)
channel6 = &chip->channel[6];
channel7 = &chip->channel[7];
channel8 = &chip->channel[8];
- OPL3_SlotGenerate(channel6->slots[1]);
- phase14 = (channel7->slots[0]->pg_phase >> 9) & 0x3ff;
- phase17 = (channel8->slots[1]->pg_phase >> 9) & 0x3ff;
+ OPL3_SlotGenerate(channel6->slotz[1]);
+ phase14 = (channel7->slotz[0]->pg_phase >> 9) & 0x3ff;
+ phase17 = (channel8->slotz[1]->pg_phase >> 9) & 0x3ff;
phase = 0x00;
/*hh tc phase bit*/
phasebit = ((phase14 & 0x08) | (((phase14 >> 5) ^ phase14) & 0x04)
| (((phase17 >> 2) ^ phase17) & 0x08)) ? 0x01 : 0x00;
/*sd*/
phase = (0x100 << ((phase14 >> 8) & 0x01)) ^ ((chip->noise & 0x01) << 8);
- OPL3_SlotGeneratePhase(channel7->slots[1], phase);
+ OPL3_SlotGeneratePhase(channel7->slotz[1], phase);
/*tc*/
phase = 0x100 | (phasebit << 9);
- OPL3_SlotGeneratePhase(channel8->slots[1], phase);
+ OPL3_SlotGeneratePhase(channel8->slotz[1], phase);
}
void OPL3v17_Generate(opl3_chip *chip, Bit16s *buf)
@@ -1202,8 +1202,8 @@ void OPL3v17_Reset(opl3_chip *chip, Bit32u samplerate)
}
for (channum = 0; channum < 18; channum++)
{
- chip->channel[channum].slots[0] = &chip->chipslot[ch_slot[channum]];
- chip->channel[channum].slots[1] = &chip->chipslot[ch_slot[channum] + 3];
+ chip->channel[channum].slotz[0] = &chip->chipslot[ch_slot[channum]];
+ chip->channel[channum].slotz[1] = &chip->chipslot[ch_slot[channum] + 3];
chip->chipslot[ch_slot[channum]].channel = &chip->channel[channum];
chip->chipslot[ch_slot[channum] + 3].channel = &chip->channel[channum];
if ((channum % 9) < 3)
diff --git a/src/chips/nuked/nukedopl3_174.h b/src/chips/nuked/nukedopl3_174.h
index 43e4a6e..240802f 100644
--- a/src/chips/nuked/nukedopl3_174.h
+++ b/src/chips/nuked/nukedopl3_174.h
@@ -91,7 +91,7 @@ struct _opl3_slot {
};
struct _opl3_channel {
- opl3_slot *slots[2];
+ opl3_slot *slotz[2];/*Don't use "slots" keyword to avoid conflict with Qt applications*/
opl3_channel *pair;
opl3_chip *chip;
Bit16s *out[4];
diff --git a/src/chips/nuked_opl3.cpp b/src/chips/nuked_opl3.cpp
index 70fc525..48e5c17 100644
--- a/src/chips/nuked_opl3.cpp
+++ b/src/chips/nuked_opl3.cpp
@@ -3,18 +3,10 @@
#include <cstring>
NukedOPL3::NukedOPL3() :
- OPLChipBase()
+ OPLChipBaseT()
{
m_chip = new opl3_chip;
- reset(m_rate);
-}
-
-NukedOPL3::NukedOPL3(const NukedOPL3 &c):
- OPLChipBase(c)
-{
- m_chip = new opl3_chip;
- std::memset(m_chip, 0, sizeof(opl3_chip));
- reset(c.m_rate);
+ setRate(m_rate);
}
NukedOPL3::~NukedOPL3()
@@ -25,7 +17,7 @@ NukedOPL3::~NukedOPL3()
void NukedOPL3::setRate(uint32_t rate)
{
- OPLChipBase::setRate(rate);
+ OPLChipBaseT::setRate(rate);
opl3_chip *chip_r = reinterpret_cast<opl3_chip*>(m_chip);
std::memset(chip_r, 0, sizeof(opl3_chip));
OPL3_Reset(chip_r, rate);
@@ -33,12 +25,10 @@ void NukedOPL3::setRate(uint32_t rate)
void NukedOPL3::reset()
{
- setRate(m_rate);
-}
-
-void NukedOPL3::reset(uint32_t rate)
-{
- setRate(rate);
+ OPLChipBaseT::reset();
+ opl3_chip *chip_r = reinterpret_cast<opl3_chip*>(m_chip);
+ std::memset(chip_r, 0, sizeof(opl3_chip));
+ OPL3_Reset(chip_r, m_rate);
}
void NukedOPL3::writeReg(uint16_t addr, uint8_t data)
@@ -47,44 +37,10 @@ void NukedOPL3::writeReg(uint16_t addr, uint8_t data)
OPL3_WriteRegBuffered(chip_r, addr, data);
}
-int NukedOPL3::generate(int16_t *output, size_t frames)
-{
- opl3_chip *chip_r = reinterpret_cast<opl3_chip*>(m_chip);
- OPL3_GenerateStream(chip_r, output, (Bit32u)frames);
- return (int)frames;
-}
-
-int NukedOPL3::generateAndMix(int16_t *output, size_t frames)
-{
- opl3_chip *chip_r = reinterpret_cast<opl3_chip*>(m_chip);
- OPL3_GenerateStreamMix(chip_r, output, (Bit32u)frames);
- return (int)frames;
-}
-
-int NukedOPL3::generate32(int32_t *output, size_t frames)
-{
- opl3_chip *chip_r = reinterpret_cast<opl3_chip*>(m_chip);
- for(size_t i = 0; i < frames; ++i) {
- int16_t frame[2];
- OPL3_GenerateResampled(chip_r, frame);
- output[0] = (int32_t)frame[0];
- output[1] = (int32_t)frame[1];
- output += 2;
- }
- return (int)frames;
-}
-
-int NukedOPL3::generateAndMix32(int32_t *output, size_t frames)
+void NukedOPL3::nativeGenerate(int16_t *frame)
{
opl3_chip *chip_r = reinterpret_cast<opl3_chip*>(m_chip);
- for(size_t i = 0; i < frames; ++i) {
- int16_t frame[2];
- OPL3_GenerateResampled(chip_r, frame);
- output[0] += (int32_t)frame[0];
- output[1] += (int32_t)frame[1];
- output += 2;
- }
- return (int)frames;
+ OPL3_Generate(chip_r, frame);
}
const char *NukedOPL3::emulatorName()
diff --git a/src/chips/nuked_opl3.h b/src/chips/nuked_opl3.h
index ceb1dfd..25d9ed5 100644
--- a/src/chips/nuked_opl3.h
+++ b/src/chips/nuked_opl3.h
@@ -3,23 +3,20 @@
#include "opl_chip_base.h"
-class NukedOPL3 final : public OPLChipBase
+class NukedOPL3 final : public OPLChipBaseT<NukedOPL3>
{
void *m_chip;
public:
NukedOPL3();
- NukedOPL3(const NukedOPL3 &c);
- virtual ~NukedOPL3() override;
+ ~NukedOPL3() override;
- virtual void setRate(uint32_t rate) override;
- virtual void reset() override;
- virtual void reset(uint32_t rate) override;
- virtual void writeReg(uint16_t addr, uint8_t data) override;
- virtual int generate(int16_t *output, size_t frames) override;
- virtual int generateAndMix(int16_t *output, size_t frames) override;
- virtual int generate32(int32_t *output, size_t frames) override;
- virtual int generateAndMix32(int32_t *output, size_t frames) override;
- virtual const char *emulatorName() override;
+ void setRate(uint32_t rate) override;
+ void reset() override;
+ void writeReg(uint16_t addr, uint8_t data) override;
+ void nativePreGenerate() override {}
+ void nativePostGenerate() override {}
+ void nativeGenerate(int16_t *frame) override;
+ const char *emulatorName() override;
};
#endif // NUKED_OPL3_H
diff --git a/src/chips/nuked_opl3_v174.cpp b/src/chips/nuked_opl3_v174.cpp
index 0dcf925..e24b2e7 100644
--- a/src/chips/nuked_opl3_v174.cpp
+++ b/src/chips/nuked_opl3_v174.cpp
@@ -3,18 +3,10 @@
#include <cstring>
NukedOPL3v174::NukedOPL3v174() :
- OPLChipBase()
+ OPLChipBaseT()
{
m_chip = new opl3_chip;
- reset(m_rate);
-}
-
-NukedOPL3v174::NukedOPL3v174(const NukedOPL3v174 &c):
- OPLChipBase(c)
-{
- m_chip = new opl3_chip;
- std::memset(m_chip, 0, sizeof(opl3_chip));
- reset(c.m_rate);
+ setRate(m_rate);
}
NukedOPL3v174::~NukedOPL3v174()
@@ -25,7 +17,7 @@ NukedOPL3v174::~NukedOPL3v174()
void NukedOPL3v174::setRate(uint32_t rate)
{
- OPLChipBase::setRate(rate);
+ OPLChipBaseT::setRate(rate);
opl3_chip *chip_r = reinterpret_cast<opl3_chip*>(m_chip);
std::memset(chip_r, 0, sizeof(opl3_chip));
OPL3v17_Reset(chip_r, rate);
@@ -33,12 +25,10 @@ void NukedOPL3v174::setRate(uint32_t rate)
void NukedOPL3v174::reset()
{
- setRate(m_rate);
-}
-
-void NukedOPL3v174::reset(uint32_t rate)
-{
- setRate(rate);
+ OPLChipBaseT::reset();
+ opl3_chip *chip_r = reinterpret_cast<opl3_chip*>(m_chip);
+ std::memset(chip_r, 0, sizeof(opl3_chip));
+ OPL3v17_Reset(chip_r, m_rate);
}
void NukedOPL3v174::writeReg(uint16_t addr, uint8_t data)
@@ -47,44 +37,10 @@ void NukedOPL3v174::writeReg(uint16_t addr, uint8_t data)
OPL3v17_WriteReg(chip_r, addr, data);
}
-int NukedOPL3v174::generate(int16_t *output, size_t frames)
-{
- opl3_chip *chip_r = reinterpret_cast<opl3_chip*>(m_chip);
- OPL3v17_GenerateStream(chip_r, output, (Bit32u)frames);
- return (int)frames;
-}
-
-int NukedOPL3v174::generateAndMix(int16_t *output, size_t frames)
-{
- opl3_chip *chip_r = reinterpret_cast<opl3_chip*>(m_chip);
- OPL3v17_GenerateStreamMix(chip_r, output, (Bit32u)frames);
- return (int)frames;
-}
-
-int NukedOPL3v174::generate32(int32_t *output, size_t frames)
-{
- opl3_chip *chip_r = reinterpret_cast<opl3_chip*>(m_chip);
- for(size_t i = 0; i < frames; ++i) {
- int16_t frame[2];
- OPL3v17_GenerateResampled(chip_r, frame);
- output[0] = (int32_t)frame[0];
- output[1] = (int32_t)frame[1];
- output += 2;
- }
- return (int)frames;
-}
-
-int NukedOPL3v174::generateAndMix32(int32_t *output, size_t frames)
+void NukedOPL3v174::nativeGenerate(int16_t *frame)
{
opl3_chip *chip_r = reinterpret_cast<opl3_chip*>(m_chip);
- for(size_t i = 0; i < frames; ++i) {
- int16_t frame[2];
- OPL3v17_GenerateResampled(chip_r, frame);
- output[0] += (int32_t)frame[0];
- output[1] += (int32_t)frame[1];
- output += 2;
- }
- return (int)frames;
+ OPL3v17_Generate(chip_r, frame);
}
const char *NukedOPL3v174::emulatorName()
diff --git a/src/chips/nuked_opl3_v174.h b/src/chips/nuked_opl3_v174.h
index acbdcca..b9c5ba6 100644
--- a/src/chips/nuked_opl3_v174.h
+++ b/src/chips/nuked_opl3_v174.h
@@ -3,23 +3,20 @@
#include "opl_chip_base.h"
-class NukedOPL3v174 final : public OPLChipBase
+class NukedOPL3v174 final : public OPLChipBaseT<NukedOPL3v174>
{
void *m_chip;
public:
NukedOPL3v174();
- NukedOPL3v174(const NukedOPL3v174 &c);
- virtual ~NukedOPL3v174() override;
+ ~NukedOPL3v174() override;
- virtual void setRate(uint32_t rate) override;
- virtual void reset() override;
- virtual void reset(uint32_t rate) override;
- virtual void writeReg(uint16_t addr, uint8_t data) override;
- virtual int generate(int16_t *output, size_t frames) override;
- virtual int generateAndMix(int16_t *output, size_t frames) override;
- virtual int generate32(int32_t *output, size_t frames) override;
- virtual int generateAndMix32(int32_t *output, size_t frames) override;
- virtual const char *emulatorName() override;
+ void setRate(uint32_t rate) override;
+ void reset() override;
+ void writeReg(uint16_t addr, uint8_t data) override;
+ void nativePreGenerate() override {}
+ void nativePostGenerate() override {}
+ void nativeGenerate(int16_t *frame) override;
+ const char *emulatorName() override;
};
#endif // NUKED_OPL3174_H
diff --git a/src/chips/opl_chip_base.cpp b/src/chips/opl_chip_base.cpp
deleted file mode 100644
index 670a998..0000000
--- a/src/chips/opl_chip_base.cpp
+++ /dev/null
@@ -1,52 +0,0 @@
-#include "opl_chip_base.h"
-
-OPLChipBase::OPLChipBase() :
- m_rate(44100)
-{}
-
-OPLChipBase::OPLChipBase(const OPLChipBase &c):
- m_rate(c.m_rate)
-{}
-
-OPLChipBase::~OPLChipBase()
-{}
-
-void OPLChipBase::setRate(uint32_t rate)
-{
- m_rate = rate;
-}
-
-void OPLChipBase::reset(uint32_t rate)
-{
- setRate(rate);
-}
-
-int OPLChipBase::generate32(int32_t *output, size_t frames)
-{
- enum { maxFramesAtOnce = 256 };
- int16_t temp[2 * maxFramesAtOnce];
- for(size_t left = frames; left > 0;) {
- size_t count = (left < static_cast<size_t>(maxFramesAtOnce)) ? left : static_cast<size_t>(maxFramesAtOnce);
- generate(temp, count);
- for(size_t i = 0; i < 2 * count; ++i)
- output[i] = temp[i];
- left -= count;
- output += 2 * count;
- }
- return (int)frames;
-}
-
-int OPLChipBase::generateAndMix32(int32_t *output, size_t frames)
-{
- enum { maxFramesAtOnce = 256 };
- int16_t temp[2 * maxFramesAtOnce];
- for(size_t left = frames; left > 0;) {
- size_t count = (left < static_cast<size_t>(maxFramesAtOnce)) ? left : static_cast<size_t>(maxFramesAtOnce);
- generate(temp, count);
- for(size_t i = 0; i < 2 * count; ++i)
- output[i] += temp[i];
- left -= count;
- output += 2 * count;
- }
- return (int)frames;
-}
diff --git a/src/chips/opl_chip_base.h b/src/chips/opl_chip_base.h
index fb9b9e9..5721a81 100644
--- a/src/chips/opl_chip_base.h
+++ b/src/chips/opl_chip_base.h
@@ -9,24 +9,91 @@
#define override
#endif
+#if defined(ADLMIDI_ENABLE_HQ_RESAMPLER)
+class VResampler;
+#endif
+
class OPLChipBase
{
protected:
uint32_t m_rate;
public:
OPLChipBase();
- OPLChipBase(const OPLChipBase &c);
virtual ~OPLChipBase();
- virtual void setRate(uint32_t rate);
+ virtual void setRate(uint32_t rate) = 0;
virtual void reset() = 0;
- virtual void reset(uint32_t rate);
virtual void writeReg(uint16_t addr, uint8_t data) = 0;
- virtual int generate(int16_t *output, size_t frames) = 0;
- virtual int generateAndMix(int16_t *output, size_t frames) = 0;
- virtual int generate32(int32_t *output, size_t frames);
- virtual int generateAndMix32(int32_t *output, size_t frames);
+
+ virtual void nativePreGenerate() = 0;
+ virtual void nativePostGenerate() = 0;
+ virtual void nativeGenerate(int16_t *frame) = 0;
+
+ virtual void generate(int16_t *output, size_t frames) = 0;
+ virtual void generateAndMix(int16_t *output, size_t frames) = 0;
+ virtual void generate32(int32_t *output, size_t frames) = 0;
+ virtual void generateAndMix32(int32_t *output, size_t frames) = 0;
+
virtual const char* emulatorName() = 0;
+private:
+ OPLChipBase(const OPLChipBase &c);
+ OPLChipBase &operator=(const OPLChipBase &c);
+};
+
+// A base class providing F-bounded generic and efficient implementations,
+// supporting resampling of chip outputs
+template <class T>
+class OPLChipBaseT : public OPLChipBase
+{
+public:
+ OPLChipBaseT();
+ virtual ~OPLChipBaseT();
+
+ virtual void setRate(uint32_t rate) override;
+ virtual void reset() override;
+ void generate(int16_t *output, size_t frames) override;
+ void generateAndMix(int16_t *output, size_t frames) override;
+ void generate32(int32_t *output, size_t frames) override;
+ void generateAndMix32(int32_t *output, size_t frames) override;
+private:
+ void setupResampler(uint32_t rate);
+ void resetResampler();
+ void resampledGenerate(int32_t *output);
+#if defined(ADLMIDI_ENABLE_HQ_RESAMPLER)
+ VResampler *m_resampler;
+#else
+ int32_t m_oldsamples[2];
+ int32_t m_samples[2];
+ int32_t m_samplecnt;
+ int32_t m_rateratio;
+ enum { rsm_frac = 10 };
+#endif
+ // amplitude scale factors in and out of resampler, varying for chips;
+ // values are OK to "redefine", the static polymorphism will accept it.
+ enum { resamplerPreAmplify = 1, resamplerPostAttenuate = 1 };
+};
+
+// A base class which provides frame-by-frame interfaces on emulations which
+// don't have a routine for it. It produces outputs in fixed size buffers.
+// Fast register updates will suffer some latency because of buffering.
+template <class T, unsigned Buffer = 256>
+class OPLChipBaseBufferedT : public OPLChipBaseT<T>
+{
+public:
+ OPLChipBaseBufferedT()
+ : OPLChipBaseT<T>(), m_bufferIndex(0) {}
+ virtual ~OPLChipBaseBufferedT()
+ {}
+public:
+ void reset() override;
+ void nativeGenerate(int16_t *frame) override;
+protected:
+ virtual void nativeGenerateN(int16_t *output, size_t frames) = 0;
+private:
+ unsigned m_bufferIndex;
+ int16_t m_buffer[2 * Buffer];
};
+#include "opl_chip_base.tcc"
+
#endif // ONP_CHIP_BASE_H
diff --git a/src/chips/opl_chip_base.tcc b/src/chips/opl_chip_base.tcc
new file mode 100644
index 0000000..58145bc
--- /dev/null
+++ b/src/chips/opl_chip_base.tcc
@@ -0,0 +1,216 @@
+#include "opl_chip_base.h"
+#include <cmath>
+
+#if defined(ADLMIDI_ENABLE_HQ_RESAMPLER)
+#include <zita-resampler/vresampler.h>
+#endif
+
+/* OPLChipBase */
+
+inline OPLChipBase::OPLChipBase() :
+ m_rate(44100)
+{
+}
+
+inline OPLChipBase::~OPLChipBase()
+{
+}
+
+/* OPLChipBaseT */
+
+template <class T>
+OPLChipBaseT<T>::OPLChipBaseT()
+ : OPLChipBase()
+{
+#if defined(ADLMIDI_ENABLE_HQ_RESAMPLER)
+ m_resampler = new VResampler;
+#endif
+ setupResampler(m_rate);
+}
+
+template <class T>
+OPLChipBaseT<T>::~OPLChipBaseT()
+{
+#if defined(ADLMIDI_ENABLE_HQ_RESAMPLER)
+ delete m_resampler;
+#endif
+}
+
+template <class T>
+void OPLChipBaseT<T>::setRate(uint32_t rate)
+{
+ uint32_t oldRate = m_rate;
+ m_rate = rate;
+ if(rate != oldRate)
+ setupResampler(rate);
+ else
+ resetResampler();
+}
+
+template <class T>
+void OPLChipBaseT<T>::reset()
+{
+ resetResampler();
+}
+
+template <class T>
+void OPLChipBaseT<T>::generate(int16_t *output, size_t frames)
+{
+ static_cast<T *>(this)->nativePreGenerate();
+ for(size_t i = 0; i < frames; ++i)
+ {
+ int32_t frame[2];
+ static_cast<T *>(this)->resampledGenerate(frame);
+ for (unsigned c = 0; c < 2; ++c) {
+ int32_t temp = frame[c];
+ temp = (temp > -32768) ? temp : -32768;
+ temp = (temp < 32767) ? temp : 32767;
+ output[c] = (int16_t)temp;
+ }
+ output += 2;
+ }
+ static_cast<T *>(this)->nativePostGenerate();
+}
+
+template <class T>
+void OPLChipBaseT<T>::generateAndMix(int16_t *output, size_t frames)
+{
+ static_cast<T *>(this)->nativePreGenerate();
+ for(size_t i = 0; i < frames; ++i)
+ {
+ int32_t frame[2];
+ static_cast<T *>(this)->resampledGenerate(frame);
+ for (unsigned c = 0; c < 2; ++c) {
+ int32_t temp = (int32_t)output[c] + frame[c];
+ temp = (temp > -32768) ? temp : -32768;
+ temp = (temp < 32767) ? temp : 32767;
+ output[c] = (int16_t)temp;
+ }
+ output += 2;
+ }
+ static_cast<T *>(this)->nativePostGenerate();
+}
+
+template <class T>
+void OPLChipBaseT<T>::generate32(int32_t *output, size_t frames)
+{
+ static_cast<T *>(this)->nativePreGenerate();
+ for(size_t i = 0; i < frames; ++i)
+ {
+ static_cast<T *>(this)->resampledGenerate(output);
+ output += 2;
+ }
+ static_cast<T *>(this)->nativePostGenerate();
+}
+
+template <class T>
+void OPLChipBaseT<T>::generateAndMix32(int32_t *output, size_t frames)
+{
+ static_cast<T *>(this)->nativePreGenerate();
+ for(size_t i = 0; i < frames; ++i)
+ {
+ int32_t frame[2];
+ static_cast<T *>(this)->resampledGenerate(frame);
+ output[0] += frame[0];
+ output[1] += frame[1];
+ output += 2;
+ }
+ static_cast<T *>(this)->nativePostGenerate();
+}
+
+template <class T>
+void OPLChipBaseT<T>::setupResampler(uint32_t rate)
+{
+#if defined(ADLMIDI_ENABLE_HQ_RESAMPLER)
+ m_resampler->setup(rate * (1.0 / 49716), 2, 48);
+#else
+ m_oldsamples[0] = m_oldsamples[1] = 0;
+ m_samples[0] = m_samples[1] = 0;
+ m_samplecnt = 0;
+ m_rateratio = (int32_t)((rate << rsm_frac) / 49716);
+#endif
+}
+
+template <class T>
+void OPLChipBaseT<T>::resetResampler()
+{
+#if defined(ADLMIDI_ENABLE_HQ_RESAMPLER)
+ m_resampler->reset();
+#else
+ m_oldsamples[0] = m_oldsamples[1] = 0;
+ m_samples[0] = m_samples[1] = 0;
+ m_samplecnt = 0;
+#endif
+}
+
+#if defined(ADLMIDI_ENABLE_HQ_RESAMPLER)
+template <class T>
+void OPLChipBaseT<T>::resampledGenerate(int32_t *output)
+{
+ VResampler *rsm = m_resampler;
+ float scale = (float)T::resamplerPreAmplify /
+ (float)T::resamplerPostAttenuate;
+ float f_in[2];
+ float f_out[2];
+ rsm->inp_count = 0;
+ rsm->inp_data = f_in;
+ rsm->out_count = 1;
+ rsm->out_data = f_out;
+ while(rsm->process(), rsm->out_count != 0)
+ {
+ int16_t in[2];
+ static_cast<T *>(this)->nativeGenerate(in);
+ f_in[0] = scale * (float)in[0];
+ f_in[1] = scale * (float)in[1];
+ rsm->inp_count = 1;
+ rsm->inp_data = f_in;
+ rsm->out_count = 1;
+ rsm->out_data = f_out;
+ }
+ output[0] = std::lround(f_out[0]);
+ output[1] = std::lround(f_out[1]);
+}
+#else
+template <class T>
+void OPLChipBaseT<T>::resampledGenerate(int32_t *output)
+{
+ int32_t samplecnt = m_samplecnt;
+ const int32_t rateratio = m_rateratio;
+ while(samplecnt >= rateratio)
+ {
+ m_oldsamples[0] = m_samples[0];
+ m_oldsamples[1] = m_samples[1];
+ int16_t buffer[2];
+ static_cast<T *>(this)->nativeGenerate(buffer);
+ m_samples[0] = buffer[0] * T::resamplerPreAmplify;
+ m_samples[1] = buffer[1] * T::resamplerPreAmplify;
+ samplecnt -= rateratio;
+ }
+ output[0] = (int32_t)(((m_oldsamples[0] * (rateratio - samplecnt)
+ + m_samples[0] * samplecnt) / rateratio)/T::resamplerPostAttenuate);
+ output[1] = (int32_t)(((m_oldsamples[1] * (rateratio - samplecnt)
+ + m_samples[1] * samplecnt) / rateratio)/T::resamplerPostAttenuate);
+ m_samplecnt = samplecnt + (1 << rsm_frac);
+}
+#endif
+
+/* OPLChipBaseBufferedT */
+
+template <class T, unsigned Buffer>
+void OPLChipBaseBufferedT<T, Buffer>::reset()
+{
+ OPLChipBaseT<T>::reset();
+ m_bufferIndex = 0;
+}
+
+template <class T, unsigned Buffer>
+void OPLChipBaseBufferedT<T, Buffer>::nativeGenerate(int16_t *frame)
+{
+ unsigned bufferIndex = m_bufferIndex;
+ if(bufferIndex == 0)
+ static_cast<T *>(this)->nativeGenerateN(m_buffer, Buffer);
+ frame[0] = m_buffer[2 * bufferIndex];
+ frame[1] = m_buffer[2 * bufferIndex + 1];
+ bufferIndex = (bufferIndex + 1 < Buffer) ? (bufferIndex + 1) : 0;
+ m_bufferIndex = bufferIndex;
+}
diff --git a/src/fraction.hpp b/src/fraction.hpp
index 1ec10ab..1c0a38d 100644
--- a/src/fraction.hpp
+++ b/src/fraction.hpp
@@ -4,6 +4,7 @@
#include <cmath>
#include <limits>
+
/* Fraction number handling.
* Copyright (C) 1992,2001 Bisqwit (http://iki.fi/bisqwit/)
*/
@@ -82,6 +83,10 @@ public:
self &operator= (long double orig);
};
+#ifdef _MSC_VER
+#pragma warning(disable:4146)
+#endif
+
template<typename inttype>
void fraction<inttype>::Optim()
{
@@ -110,6 +115,10 @@ void fraction<inttype>::Optim()
//fprintf(stderr, "result: %d/%d\n\n", nom(), denom());
}
+#ifdef _MSC_VER
+#pragma warning(default:4146)
+#endif
+
template<typename inttype>
inline const fraction<inttype> abs(const fraction<inttype> &f)
{
diff --git a/src/wopl/wopl_file.h b/src/wopl/wopl_file.h
index f5d816b..0e38842 100644
--- a/src/wopl/wopl_file.h
+++ b/src/wopl/wopl_file.h
@@ -32,6 +32,14 @@
extern "C" {
#endif
+#if !defined(__STDC_VERSION__) || (defined(__STDC_VERSION__) && (__STDC_VERSION__ < 199901L)) \
+ || defined(__STRICT_ANSI__) || !defined(__cplusplus)
+typedef signed char int8_t;
+typedef unsigned char uint8_t;
+typedef signed short int int16_t;
+typedef unsigned short int uint16_t;
+#endif
+
/* Global OPL flags */
typedef enum WOPLFileFlags
{