aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWohlstand <admin@wohlnet.ru>2018-09-25 19:26:21 +0300
committerWohlstand <admin@wohlnet.ru>2018-09-25 19:26:21 +0300
commitbb0d23251324fadd49cbf53c1673b80ef07ffeff (patch)
tree57a9a9b754f40877add55bde772d06791f5727e1
parent36f58b5c73766e4173b1cb04168909fdbcf9a5bf (diff)
parent923ea2f4d2c26248d518c9af7cafb938cd5ee9d6 (diff)
downloadlibADLMIDI-bb0d23251324fadd49cbf53c1673b80ef07ffeff.tar.gz
libADLMIDI-bb0d23251324fadd49cbf53c1673b80ef07ffeff.tar.bz2
libADLMIDI-bb0d23251324fadd49cbf53c1673b80ef07ffeff.zip
Merge branch 'master' into stable
-rw-r--r--CMakeLists.txt1
-rw-r--r--README.md1
-rw-r--r--banks.ini8
-rw-r--r--fm_banks/adldata-cache.datbin577832 -> 561392 bytes
-rw-r--r--fm_banks/doom2/wolfinstein.op2bin11908 -> 0 bytes
-rw-r--r--fm_banks/wopl_files/GM-By-J.A.Nguyen-and-Wohlstand.woplbin16983 -> 16983 bytes
-rw-r--r--include/adlmidi.h22
-rw-r--r--libADLMIDI-test.pro1
-rw-r--r--libADLMIDI.pro1
-rw-r--r--src/adldata.cpp2082
-rw-r--r--src/adlmidi.cpp255
-rw-r--r--src/adlmidi_midiplay.cpp70
-rw-r--r--src/adlmidi_opl3.cpp151
-rw-r--r--src/adlmidi_private.hpp33
-rw-r--r--src/chips/dosbox/dbopl.cpp143
-rw-r--r--src/chips/dosbox/dbopl.h6
-rw-r--r--src/chips/dosbox_opl3.cpp2
-rw-r--r--src/cvt_xmi2mid.hpp2
-rw-r--r--src/midi_sequencer.hpp13
-rw-r--r--src/midi_sequencer_impl.hpp107
-rw-r--r--src/wopl/wopl_file.c10
-rw-r--r--test/CMakeLists.txt1
-rw-r--r--test/wopl-file/CMakeLists.txt15
-rw-r--r--test/wopl-file/wopl_file.cpp116
-rw-r--r--utils/gen_adldata/file_formats/load_bnk2.h1
-rw-r--r--utils/gen_adldata/scrapped.txt4
-rw-r--r--utils/vlc_codec/libadlmidi.c2
27 files changed, 1684 insertions, 1363 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 91baffb..aeec85e 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -226,6 +226,7 @@ if(WITH_MIDI_SEQUENCER)
list(APPEND libADLMIDI_SOURCES
${libADLMIDI_SOURCE_DIR}/src/adlmidi_sequencer.cpp
)
+ add_definitions(-DENABLE_END_SILENCE_SKIPPING)
endif()
if(NOT WITH_MUS_SUPPORT OR NOT WITH_MIDI_SEQUENCER)
diff --git a/README.md b/README.md
index b10577b..37773aa 100644
--- a/README.md
+++ b/README.md
@@ -177,6 +177,7 @@ To build that example you will need to have installed SDL2 library.
* XMIDI now supports loops
* Added working implementation of TMB's velocity offset
* Added support for full-panning stereo option (Thanks to [Christopher Snowhill](https://github.com/kode54) for a work!)
+ * Fixed inability to play high notes due physical tone frequency out of range on the OPL3 chip
## 1.3.3 2018-06-19
* Fixed an inability to load another custom bank without of library re-initialization
diff --git a/banks.ini b/banks.ini
index 33b55c5..beb605b 100644
--- a/banks.ini
+++ b/banks.ini
@@ -472,10 +472,10 @@ format = TMB
file = "fm_banks/op3_files/gmopl_wohl_mod.tmb"
prefix = "b65"
-; Jammey O'Connel's bank used in his FM Driver for Win3x/9x and was
+; Jamie O'Connell's bank used in his FM Driver for Win3x/9x and was
; pre-included with his SB-Timbre editor. Percussions are custom.
[bank-66]
-name = "SB (Jammey O'Connel's bank)"
+name = "SB (Jamie O'Connell's bank)"
format = TMB
file = "fm_banks/op3_files/gmoconel.tmb"
prefix = "b66"
@@ -484,7 +484,7 @@ prefix = "b66"
; May be listened from the setup utiltiy while testing music,
; or in the Duke Nukem 3D Beta.
[bank-67]
-name = "TMB (Default bank of Apgee Sound System)"
+name = "TMB (Default bank of Apogee Sound System)"
format = TMB
file = "fm_banks/tmb_files/default.tmb"
prefix = "3drm67"
@@ -532,7 +532,7 @@ name = "WOPL (DMXOPL3 bank by Sneakernets)"
; file = "fm_banks/doom2/DMXOPL-by-sneakernets.op2"
format = WOPL
file = "fm_banks/wopl_files/DMXOPL3-by-sneakernets-GS.wopl"
-prefix = "skeakernets"
+prefix = "sneakernets"
; Special bank required to play MUS-files from Cartooners game
[bank-73]
diff --git a/fm_banks/adldata-cache.dat b/fm_banks/adldata-cache.dat
index 86da6cc..80914a3 100644
--- a/fm_banks/adldata-cache.dat
+++ b/fm_banks/adldata-cache.dat
Binary files differ
diff --git a/fm_banks/doom2/wolfinstein.op2 b/fm_banks/doom2/wolfinstein.op2
deleted file mode 100644
index ddf4cde..0000000
--- a/fm_banks/doom2/wolfinstein.op2
+++ /dev/null
Binary files differ
diff --git a/fm_banks/wopl_files/GM-By-J.A.Nguyen-and-Wohlstand.wopl b/fm_banks/wopl_files/GM-By-J.A.Nguyen-and-Wohlstand.wopl
index 5512a07..48300e6 100644
--- a/fm_banks/wopl_files/GM-By-J.A.Nguyen-and-Wohlstand.wopl
+++ b/fm_banks/wopl_files/GM-By-J.A.Nguyen-and-Wohlstand.wopl
Binary files differ
diff --git a/include/adlmidi.h b/include/adlmidi.h
index 6ae184e..eb3edf4 100644
--- a/include/adlmidi.h
+++ b/include/adlmidi.h
@@ -329,6 +329,7 @@ extern ADLMIDI_DECLSPEC int adl_loadEmbeddedBank(struct ADL_MIDIPlayer *device,
* If you want to specify custom number of four operator channels,
* please call this function after bank change (adl_setBank() or adl_openBank()),
* otherwise, value will be overwritten by auto-calculated.
+ * If the count is specified as -1, an auto-calculated amount is used instead.
*
* @param device Instance of the library
* @param ops4 Count of four-op channels to allocate between all emulating chips
@@ -361,6 +362,13 @@ extern ADLMIDI_DECLSPEC void adl_setPercMode(struct ADL_MIDIPlayer *device, int
extern ADLMIDI_DECLSPEC void adl_setHVibrato(struct ADL_MIDIPlayer *device, int hvibro);
/**
+ * @brief Get the deep vibrato state.
+ * @param device Instance of the library
+ * @return deep vibrato state on success, <0 when any error has occurred
+ */
+extern ADLMIDI_DECLSPEC int adl_getHVibrato(struct ADL_MIDIPlayer *device);
+
+/**
* @brief Override Enable(1) or Disable(0) deep tremolo state. -1 - use bank default tremolo state
* @param device Instance of the library
* @param htremo 0 - disabled, 1 - enabled
@@ -368,6 +376,13 @@ extern ADLMIDI_DECLSPEC void adl_setHVibrato(struct ADL_MIDIPlayer *device, int
extern ADLMIDI_DECLSPEC void adl_setHTremolo(struct ADL_MIDIPlayer *device, int htremo);
/**
+ * @brief Get the deep tremolo state.
+ * @param device Instance of the library
+ * @return deep tremolo state on success, <0 when any error has occurred
+ */
+extern ADLMIDI_DECLSPEC int adl_getHTremolo(struct ADL_MIDIPlayer *device);
+
+/**
* @brief Override Enable(1) or Disable(0) scaling of modulator volumes. -1 - use bank default scaling of modulator volumes
* @param device Instance of the library
* @param smod 0 - disabled, 1 - enabled
@@ -415,6 +430,13 @@ extern ADLMIDI_DECLSPEC void adl_setLogarithmicVolumes(struct ADL_MIDIPlayer *de
extern ADLMIDI_DECLSPEC void adl_setVolumeRangeModel(struct ADL_MIDIPlayer *device, int volumeModel);
/**
+ * @brief Get the volume range model
+ * @param device Instance of the library
+ * @return volume model on success, <0 when any error has occurred
+ */
+extern ADLMIDI_DECLSPEC int adl_getVolumeRangeModel(struct ADL_MIDIPlayer *device);
+
+/**
* @brief Load WOPL bank file from File System
*
* Is recommended to call adl_reset() to apply changes to already-loaded file player or real-time.
diff --git a/libADLMIDI-test.pro b/libADLMIDI-test.pro
index d98d6bd..ec5dd1a 100644
--- a/libADLMIDI-test.pro
+++ b/libADLMIDI-test.pro
@@ -18,6 +18,7 @@ LIBS += -lSDL2 -lpthread -ldl
#DEFINES += DISABLE_EMBEDDED_BANKS
#DEFINES += ADLMIDI_USE_DOSBOX_OPL
#DEFINES += ENABLE_BEGIN_SILENCE_SKIPPING
+DEFINES += ENABLE_END_SILENCE_SKIPPING
#DEFINES += DEBUG_TRACE_ALL_EVENTS
#DEFINES += DEBUG_TRACE_ALL_CHANNELS
diff --git a/libADLMIDI.pro b/libADLMIDI.pro
index 92c6009..0044b76 100644
--- a/libADLMIDI.pro
+++ b/libADLMIDI.pro
@@ -12,6 +12,7 @@ INSTALLINCLUDESTO = ADLMIDI
include($$PWD/../audio_codec_common.pri)
DEFINES += ADLMIDI_DISABLE_CPP_EXTRAS
+DEFINES += ENABLE_END_SILENCE_SKIPPING
macx: QMAKE_CXXFLAGS_WARN_ON += -Wno-absolute-value
diff --git a/src/adldata.cpp b/src/adldata.cpp
index 6606e1f..64280aa 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[4537] =
+const adldata adl[4528] =
{ // ,---------+-------- Wave select settings
// | ,-------ч-+------ Sustain/release rates
// | | ,-----ч-ч-+---- Attack/decay rates
@@ -3969,8 +3969,8 @@ const adldata adl[4537] =
{ 0x185DC85,0x055F401, 0x91,0x0E, 0x3, +0 },
{ 0x0F6E181,0x0F6E798, 0x00,0x2B, 0x1, +0 },
{ 0x0F4F194,0x0A7E98A, 0x00,0x15, 0x1, +0 },
- { 0x0B3D407,0x0B4C202, 0xA0,0x00, 0xA, -12 },
- { 0x082D307,0x0E3A302, 0x58,0x80, 0xB, +0 },
+ { 0x0B3D407,0x0B4C202, 0x9A,0x00, 0xA, -12 },
+ { 0x082D307,0x0E3A302, 0x9A,0x00, 0xA, -12 },
{ 0x156940A,0x132F411, 0xA7,0x05, 0x5, +0 },
{ 0x027A2A0,0x023A522, 0x85,0x9E, 0x7, +0 },
{ 0x02AA5A2,0x02AA168, 0x80,0x8F, 0x7, +0 },
@@ -3982,7 +3982,8 @@ const adldata adl[4537] =
{ 0x013C321,0x00B7022, 0x22,0x00, 0xE, +0 },
{ 0x0F4F505,0x0F9F200, 0x29,0x1E, 0x6, +12 },
{ 0x0F1F101,0x0F7F100, 0x2F,0x00, 0x6, +0 },
- { 0x0F4F405,0x0F6F100, 0x20,0x19, 0x6, +12 },
+ { 0x0F4F405,0x0F6F110, 0x29,0x19, 0x6, +12 },
+ { 0x0F1F111,0x0F7F100, 0x31,0x00, 0x6, +0 },
{ 0x19F53C8,0x07FFAE4, 0x1C,0x03, 0x9, +0 },
{ 0x0049420,0x0A5C523, 0x2A,0x24, 0xE, +12 },
{ 0x0F9F200,0x0F8F101, 0x21,0x00, 0xE, +0 },
@@ -4005,15 +4006,20 @@ const adldata adl[4537] =
{ 0x0049100,0x2045240, 0x0F,0x00, 0x9, +0 },
{ 0x0157620,0x0368261, 0x94,0x00, 0xC, +12 },
{ 0x02661B1,0x0276171, 0xD3,0x80, 0xD, +0 },
+ { 0x118543A,0x5177472, 0x1E,0x00, 0x4, -12 },
{ 0x04A6121,0x00B7F21, 0x9F,0x00, 0xE, +0 },
{ 0x00A65A1,0x0067F61, 0xA2,0x00, 0xF, +0 },
{ 0x0277221,0x0067F21, 0x16,0x05, 0xC, +0 },
{ 0x0866131,0x0D6C261, 0x1A,0x00, 0xE, +0 },
- { 0x0678221,0x0179222, 0x17,0x00, 0xE, +0 },
+ { 0x0866131,0x0D6C261, 0x16,0x00, 0xF, +0 },
+ { 0x0678221,0x0179222, 0x1A,0x00, 0xE, +0 },
+ { 0x0678221,0x0179222, 0x15,0x0A, 0x7, +0 },
{ 0x00AD961,0x006A861, 0x28,0x1E, 0xE, +0 },
{ 0x0069A21,0x00ACF24, 0x25,0x00, 0xE, +0 },
{ 0x02A9B32,0x0177221, 0x90,0x00, 0x4, +0 },
{ 0x01CB632,0x01B66E1, 0x92,0x82, 0x5, +0 },
+ { 0x00457F2,0x0375761, 0xA8,0x00, 0xE, +0 },
+ { 0x2545C73,0x0776821, 0x00,0x0D, 0xE, +0 },
{ 0x00FFF61,0x00FFF22, 0x1C,0x00, 0xE, +0 },
{ 0x00FFF21,0x009CF62, 0x1C,0x00, 0xF, +0 },
{ 0x0559622,0x0187421, 0x46,0x80, 0xF, +0 },
@@ -4023,31 +4029,50 @@ const adldata adl[4537] =
{ 0x2164460,0x00450E1, 0xAB,0x01, 0xB, +0 },
{ 0x0022A55,0x0F34212, 0x97,0x86, 0x1, +0 },
{ 0x1623524,0x1023171, 0x20,0x05, 0x1, +0 },
+ { 0x155F261,0x0A5F242, 0x4D,0x00, 0x0, +0 },
+ { 0x2343161,0x00532A1, 0x9D,0x80, 0xD, +0 },
{ 0x011A131,0x0137D16, 0x87,0x08, 0x1, +0 },
- { 0x0F0A101,0x0437516, 0x0C,0x03, 0x1, +0 },
- { 0x053F201,0x052F317, 0x8F,0x09, 0x5, +0 },
+ { 0x1127533,0x4F4F211, 0x58,0x03, 0x6, +0 },
+ { 0x3F0F014,0x6F7F611, 0x40,0x43, 0xA, +0 },
+ { 0x033F201,0x373F402, 0xD1,0x8A, 0x0, +0 },
+ { 0x6A7F907,0x229A904, 0x1A,0x00, 0xA, -12 },
{ 0x055C902,0x024A601, 0x1A,0x05, 0xD, +0 },
- { 0x0175E31,0x20C7B21, 0x18,0x08, 0x7, +0 },
+ { 0x1397931,0x2099B22, 0x80,0x00, 0x6, +0 },
+ { 0x2137931,0x1079B22, 0x42,0xC2, 0xA, +0 },
{ 0x119FFA1,0x0089024, 0x0C,0x11, 0x7, +0 },
{ 0x004F007,0x004F081, 0x51,0x13, 0x7, +0 },
{ 0x026EC07,0x016F801, 0x15,0x00, 0xA, +0 },
{ 0x001FF17,0x0057A12, 0x1C,0x0B, 0xB, +0 },
+ { 0x4046306,0x005A902, 0xCA,0x08, 0x6, +0 },
+ { 0x0045413,0x005A601, 0x51,0x08, 0xA, +0 },
{ 0x09FF831,0x004FF10, 0x8B,0x05, 0x7, +0 },
+ { 0x5C8FB00,0x0B7E601, 0x00,0x00, 0x0, +0 },
+ { 0x2F0F00F,0x0F8F800, 0x00,0x40, 0xE, +12 },
{ 0x001FF0E,0x20F2F01, 0x00,0x0D, 0xE, +0 },
- { 0x2077405,0x106F403, 0x80,0x0F, 0xF, +0 },
+ { 0x0534313,0x7574A1F, 0x20,0x03, 0xE, -14 },
{ 0x003FF15,0x0934511, 0x09,0x1F, 0xF, +0 },
- { 0x000200E,0x0022F0E, 0x00,0x0F, 0xF, +0 },
+ { 0x200C327,0x6021300, 0x80,0x12, 0xE, -23 },
+ { 0x200C32B,0x6021300, 0x80,0x12, 0xE, -24 },
{ 0x060F209,0x072F214, 0x4F,0x19, 0xB, +0 },
{ 0x1111EF0,0x11311E2, 0x00,0xC5, 0xF, +0 },
{ 0x000FFEE,0x30318EE, 0x00,0x00, 0xE, +0 },
+ { 0x059F802,0x01CF600, 0x11,0x00, 0xC, +0 },
+ { 0x2159506,0x65AB701, 0x00,0x04, 0xE, +0 },
+ { 0x10F5F81,0x0164611, 0x00,0x0A, 0x6, +0 },
+ { 0x00F5F01,0x20F5F00, 0x00,0x00, 0x8, +0 },
+ { 0x0D6D725,0x3A9A909, 0x1F,0x00, 0xE, -9 },
+ { 0x0F0A00F,0x0F8F80F, 0x80,0x8C, 0xF, +0 },
+ { 0x2FDFD00,0x6FAFA00, 0x00,0x00, 0xE, +0 },
+ { 0x4F1F103,0x6FAFA07, 0x00,0x00, 0x8, +0 },
+ { 0x0F0F007,0x2F6F60F, 0x27,0x00, 0x0, +21 },
{ 0x0F7B710,0x005F011, 0x42,0x00, 0x8, +0 },
{ 0x6EF8801,0x608B502, 0x0D,0x00, 0x0, +0 },
{ 0x0F1F10F,0x007840F, 0x00,0x08, 0xC, +12 },
{ 0x6EF8800,0x608F502, 0x13,0x00, 0x0, +8 },
{ 0x0F1D101,0x0078400, 0x00,0x00, 0xE, +1 },
- { 0x254F307,0x307F905, 0x04,0x0B, 0x6, -5 },
- { 0x254F307,0x207F905, 0x04,0x0B, 0x8, +0 },
- { 0x25CD808,0x32B8A06, 0x04,0x08, 0xC, +0 },
+ { 0x254F307,0x307F905, 0x04,0x08, 0x6, -5 },
+ { 0x254F307,0x207F905, 0x04,0x08, 0x8, +0 },
+ { 0x254D307,0x3288905, 0x04,0x03, 0xA, -5 },
{ 0x2F2E327,0x3F5C525, 0x04,0x08, 0xA, -5 },
{ 0x2F2F326,0x2F5C525, 0x04,0x08, 0x8, +0 },
{ 0x292F108,0x354F201, 0x00,0x08, 0x8, +12 },
@@ -4057,17 +4082,24 @@ const adldata adl[4537] =
{ 0x251F206,0x263C504, 0x04,0x09, 0xA, +0 },
{ 0x241F287,0x353B502, 0x05,0x09, 0xA, +1 },
{ 0x292F108,0x354F201, 0x00,0x03, 0x8, +12 },
- { 0x456FB02,0x017F700, 0x81,0x00, 0x0, +12 },
- { 0x556FA01,0x117F701, 0x00,0x0D, 0x6, +10 },
- { 0x556FB02,0x117F701, 0x81,0x0D, 0x6, +10 },
- { 0x106F680,0x016F610, 0x00,0x00, 0xC, +0 },
- { 0x20F6F00,0x20F6F00, 0x00,0x00, 0x0, +0 },
- { 0x106F680,0x016F610, 0x00,0x00, 0x6, +0 },
- { 0x20F4F00,0x20F4F00, 0x00,0x00, 0x6, +0 },
- { 0x1DC5D01,0x06FF79F, 0x0B,0x00, 0xA, +12 },
- { 0x1C7C900,0x05FF49F, 0x07,0x00, 0xA, +12 },
+ { 0x456FB02,0x017F700, 0x81,0x00, 0xC, +12 },
+ { 0x556FA01,0x117F701, 0x00,0x0D, 0xA, +10 },
+ { 0x556FB02,0x117F701, 0x81,0x0D, 0xA, +10 },
+ { 0x0F00000,0x0F00000, 0x3F,0x3F, 0xC, +0 },
+ { 0x000F020,0x40A8A00, 0x0A,0x00, 0xE, +0 },
+ { 0x70F5F20,0x70F4F00, 0x00,0x00, 0x2, -12 },
+ { 0x0D1F815,0x078F512, 0x44,0x00, 0x8, +12 },
+ { 0x2D1F213,0x098F614, 0x9D,0x00, 0x0, +0 },
+ { 0x2D1F213,0x098F614, 0x9D,0x21, 0x0, -2 },
+ { 0x0985900,0x039870F, 0x07,0x00, 0x8, +13 },
+ { 0x2F3F307,0x09C9B0F, 0x1D,0x00, 0x0, +13 },
+ { 0x09C4B00,0x43A6705, 0x21,0x00, 0xC, +13 },
+ { 0x0F7F907,0x2987805, 0x1C,0x00, 0x0, +13 },
{ 0x3F0E00A,0x0F7F21F, 0x7C,0x40, 0x8, +0 },
{ 0x3E0F50A,0x0FAF31F, 0x7C,0x40, 0x9, +0 },
+ { 0x227A305,0x36A560A, 0x87,0x08, 0xE, +12 },
+ { 0x247C345,0x3697809, 0x87,0x08, 0xE, +12 },
+ { 0x037A309,0x06DF904, 0x11,0x00, 0xE, +0 },
{ 0x1F5F213,0x0F5F111, 0xC6,0x0A, 0x0, +0 },
{ 0x019F603,0x0F4F212, 0x30,0x10, 0xF, +0 },
{ 0x1069FB2,0x10F94B0, 0xC0,0x86, 0x9, +0 },
@@ -4226,7 +4258,6 @@ const adldata adl[4537] =
{ 0x0235271,0x0198161, 0x1E,0x08, 0xE, +0 },
{ 0x0235361,0x0196161, 0x1D,0x03, 0xE, +0 },
{ 0x0155331,0x0378261, 0x94,0x00, 0xA, +0 },
- { 0x118543A,0x5177472, 0x1E,0x00, 0x4, -12 },
{ 0x0365121,0x0257221, 0x1E,0x08, 0x0, +0 },
{ 0x2844521,0x20592A0, 0x23,0x03, 0x0, +0 },
{ 0x0578321,0x117C021, 0x19,0x03, 0xC, +0 },
@@ -4250,8 +4281,6 @@ const adldata adl[4537] =
{ 0x2176522,0x0277421, 0x5A,0x00, 0x6, +0 },
{ 0x1267532,0x0166531, 0x8D,0x05, 0x4, +0 },
{ 0x2F0F011,0x0987801, 0x03,0x17, 0xA, +0 },
- { 0x00457F2,0x0375761, 0xA8,0x00, 0xE, +0 },
- { 0x2545C73,0x0776821, 0x00,0x0D, 0xE, +0 },
{ 0x5543737,0x25D67A1, 0x28,0x00, 0x8, +0 },
{ 0x6243371,0x46D6331, 0x20,0x00, 0x6, +0 },
{ 0x00F31D1,0x0053271, 0xC7,0x00, 0xB, +0 },
@@ -4304,35 +4333,22 @@ const adldata adl[4537] =
{ 0x2645321,0x2445521, 0x15,0x0D, 0xA, +0 },
{ 0x0B37121,0x5F48221, 0x16,0x08, 0x2, +0 },
{ 0x2B37102,0x5F48221, 0x90,0x08, 0x6, +0 },
- { 0x1127533,0x4F4F211, 0x58,0x03, 0x6, +0 },
- { 0x3F0F014,0x6F7F611, 0x40,0x43, 0xA, +0 },
- { 0x033F201,0x373F402, 0xD1,0x8A, 0x0, +0 },
- { 0x6A7F907,0x229A904, 0x1A,0x00, 0xA, -12 },
{ 0x5E2F321,0x6E4F523, 0x1B,0x08, 0x8, +0 },
{ 0x455F71C,0x0D68501, 0xA3,0x08, 0x6, +0 },
{ 0x055F718,0x0D6E501, 0x23,0x08, 0x0, +0 },
- { 0x1397931,0x2099B22, 0x80,0x00, 0x6, +0 },
- { 0x2137931,0x1079B22, 0x42,0xC2, 0xA, +0 },
{ 0x302A130,0x0266221, 0x1E,0x00, 0xE, +0 },
{ 0x0136031,0x1169131, 0x12,0x80, 0x8, +0 },
{ 0x032A115,0x172B212, 0x00,0x80, 0x1, +5 },
{ 0x001E79A,0x067961C, 0x81,0x00, 0x4, +0 },
- { 0x4046306,0x005A902, 0xCA,0x08, 0x6, +0 },
- { 0x0045413,0x005A601, 0x51,0x08, 0xA, +0 },
{ 0x4D1F214,0x098F715, 0xA0,0x00, 0xC, +0 },
{ 0x008F312,0x004F600, 0x08,0xC8, 0x4, -12 },
{ 0x27CFA01,0x004F200, 0x08,0x08, 0x0, +0 },
- { 0x5C8FB00,0x0B7E601, 0x00,0x00, 0x0, +0 },
- { 0x2F0F00F,0x0F8F800, 0x00,0x40, 0xE, +12 },
{ 0x518F890,0x0E7F310, 0x00,0x00, 0x8, -12 },
{ 0x250F610,0x0E7F510, 0x00,0xC8, 0x6, +0 },
{ 0x2114109,0x51D2101, 0x05,0x80, 0xA, +0 },
{ 0x2114108,0x31D2101, 0x05,0x80, 0xA, +12 },
- { 0x0534313,0x7574A1F, 0x20,0x03, 0xE, -14 },
{ 0x00437D2,0x0343471, 0xA1,0x07, 0xC, +0 },
{ 0x0F0F00C,0x0F66700, 0x00,0xCD, 0xE, +0 },
- { 0x200C327,0x6021300, 0x80,0x12, 0xE, -23 },
- { 0x200C32B,0x6021300, 0x80,0x12, 0xE, -24 },
{ 0x003EBD7,0x06845D8, 0xD4,0x00, 0x7, +12 },
{ 0x62FDA20,0x614B009, 0x42,0x48, 0x4, -24 },
{ 0x62FDA20,0x614B009, 0x82,0x48, 0x4, -20 },
@@ -4341,15 +4357,7 @@ const adldata adl[4537] =
{ 0x200832F,0x6044020, 0x80,0x00, 0xE, -36 },
{ 0x200832F,0x6044020, 0x80,0x00, 0xE, -35 },
{ 0x2305431,0x6E7F600, 0x00,0x00, 0xE, +0 },
- { 0x059F802,0x01CF600, 0x11,0x00, 0xC, +0 },
- { 0x2159506,0x65AB701, 0x00,0x04, 0xE, +0 },
- { 0x10F5F81,0x0164611, 0x00,0x0A, 0x6, +0 },
- { 0x00F5F01,0x20F5F00, 0x00,0x00, 0x8, +0 },
- { 0x0D6D725,0x3A9A909, 0x1F,0x00, 0xE, -9 },
{ 0x0F0A00F,0x0F8F80F, 0x00,0x0C, 0xE, +0 },
- { 0x2FDFD00,0x6FAFA00, 0x00,0x00, 0xE, +0 },
- { 0x4F1F103,0x6FAFA07, 0x00,0x00, 0x8, +0 },
- { 0x0F0F007,0x2F6F60F, 0x27,0x00, 0x0, +21 },
{ 0x559FA00,0x047F800, 0x00,0x00, 0x4, +0 },
{ 0x3F1F102,0x0078400, 0x00,0x26, 0xC, +0 },
{ 0x048FA00,0x008F900, 0x00,0x00, 0x6, +12 },
@@ -4365,7 +4373,6 @@ const adldata adl[4537] =
{ 0x255F308,0x308F909, 0x04,0x08, 0x8, +4 },
{ 0x006C604,0x007C604, 0x08,0x08, 0x1, +0 },
{ 0x201F312,0x057AB09, 0x03,0x07, 0xC, +12 },
- { 0x254D307,0x3288905, 0x04,0x03, 0xA, -5 },
{ 0x0015500,0x007C716, 0x0C,0x00, 0x0, +0 },
{ 0x201F312,0x057AB09, 0x00,0x07, 0xC, +12 },
{ 0x0015500,0x007C718, 0x0C,0x00, 0x0, +0 },
@@ -4393,9 +4400,6 @@ const adldata adl[4537] =
{ 0x0A5F7E9,0x0D8994A, 0x29,0x08, 0xC, +10 },
{ 0x2A8F9E2,0x0779642, 0x1E,0x00, 0xE, +8 },
{ 0x0A5F7E9,0x5D8994A, 0x08,0x00, 0xC, +0 },
- { 0x456FB02,0x017F700, 0x81,0x00, 0xC, +12 },
- { 0x556FA01,0x117F701, 0x00,0x0D, 0xA, +10 },
- { 0x556FB02,0x117F701, 0x81,0x0D, 0xA, +10 },
{ 0x367FE06,0x668F701, 0x09,0x08, 0x8, +12 },
{ 0x367FD10,0x098F901, 0x00,0x0D, 0x8, +6 },
{ 0x367FE05,0x678F701, 0x09,0x08, 0x8, +12 },
@@ -4403,25 +4407,12 @@ const adldata adl[4537] =
{ 0x098600F,0x3FC8590, 0x08,0xC0, 0xE, +12 },
{ 0x009F020,0x27DA788, 0x25,0x00, 0x0, +12 },
{ 0x00FC020,0x22DA388, 0x25,0x00, 0xA, +12 },
- { 0x0F00000,0x0F00000, 0x3F,0x3F, 0xC, +0 },
- { 0x000F020,0x40A8A00, 0x0A,0x00, 0xE, +0 },
- { 0x70F5F20,0x70F4F00, 0x00,0x00, 0x2, -12 },
- { 0x0D1F815,0x078F512, 0x44,0x00, 0x8, +12 },
- { 0x2D1F213,0x098F614, 0x9D,0x00, 0x0, +0 },
- { 0x2D1F213,0x098F614, 0x9D,0x21, 0x0, -2 },
- { 0x0985900,0x039870F, 0x07,0x00, 0x8, +13 },
- { 0x2F3F307,0x09C9B0F, 0x1D,0x00, 0x0, +13 },
- { 0x09C4B00,0x43A6705, 0x21,0x00, 0xC, +13 },
- { 0x0F7F907,0x2987805, 0x1C,0x00, 0x0, +13 },
{ 0x160F2C6,0x07AF4D4, 0x4F,0x80, 0x8, +12 },
{ 0x160F286,0x0B7F294, 0x4F,0x80, 0x8, +12 },
- { 0x227A305,0x36A560A, 0x87,0x08, 0xE, +12 },
- { 0x247C345,0x3697809, 0x87,0x08, 0xE, +12 },
{ 0x4755406,0x3667601, 0x87,0x08, 0x6, +12 },
{ 0x275A346,0x3667601, 0x87,0x08, 0x6, +12 },
{ 0x6E4840B,0x6E4B409, 0x12,0x09, 0x1, +0 },
{ 0x6E4440B,0x6E46407, 0x21,0x13, 0x1, +3 },
- { 0x037A309,0x06DF904, 0x11,0x00, 0xE, +0 },
{ 0x6F9A902,0x2F7C801, 0x00,0x40, 0x8, +0 },
{ 0x4F9F901,0x4F7C713, 0x1F,0x48, 0x0, -7 },
{ 0x4B7C720,0x1F3F300, 0x0B,0x00, 0x0, +0 },
@@ -4554,7 +4545,7 @@ const adldata adl[4537] =
{ 0x07BF003,0x07BF502, 0x8A,0x80, 0x8, +0 },
{ 0x07BF003,0x07BF402, 0x8A,0x80, 0x8, +0 },
};
-const struct adlinsdata adlins[4815] =
+const struct adlinsdata adlins[4678] =
{
{ 0, 0, 0, 0, 9006, 133, 0, 0 },
{ 1, 1, 0, 0, 9206, 146, 0, 0 },
@@ -4741,11 +4732,11 @@ const struct adlinsdata adlins[4815] =
{ 174, 175, 0, 4, 6913, 0, 0, 0 },
{ 176, 177, 0, 4, 4873, 0, 0, 0 },
{ 178, 178, 0, 0, 40000, 0, 0, 0 },
- { 179, 180, 0, 4, 4653, 433, 0, 0 },
+ { 179, 180, 0, 4, 4626, 433, 0, 0 },
{ 181, 181, 0, 0, 2280, 746, 0, 0 },
{ 182, 182, 0, 0, 40000, 0, 0, 0 },
- { 183, 184, 0, 4, 626, 0, 0, 0 },
- { 185, 186, 0, 4, 4653, 1546, 0, 0 },
+ { 183, 184, 0, 4, 620, 0, 0, 0 },
+ { 185, 186, 0, 4, 4626, 1546, 0, 0 },
{ 187, 187, 0, 0, 1166, 400, 0, 0 },
{ 188, 189, 0, 4, 40000, 60, 0, 0 },
{ 190, 191, 0, 4, 40000, 60, 0, 0 },
@@ -4755,27 +4746,27 @@ const struct adlinsdata adlins[4815] =
{ 197, 198, 0, 4, 40000, 86, 0, 0 },
{ 199, 200, 0, 4, 40000, 66, 0, 0 },
{ 201, 202, 0, 4, 3713, 100, 0, 0 },
- { 203, 204, 0, 4, 14753, 126, 0, 0 },
- { 205, 206, 0, 4, 9286, 146, 0, 0 },
- { 207, 208, 0, 4, 14713, 126, 0, 0 },
- { 209, 210, 0, 4, 4653, 0, 0, 0 },
+ { 203, 204, 0, 4, 14686, 126, 0, 0 },
+ { 205, 206, 0, 4, 9233, 153, 0, 0 },
+ { 207, 208, 0, 4, 14640, 133, 0, 0 },
+ { 209, 210, 0, 4, 4626, 0, 0, 0 },
{ 211, 212, 0, 4, 40000, 66, 0, 0 },
{ 213, 213, 0, 0, 40000, 73, 0, 0 },
- { 214, 215, 0, 4, 626, 0, 0, 0 },
- { 216, 217, 0, 4, 4066, 100, 0, 0 },
- { 218, 219, 0, 4, 14586, 193, 0, 0 },
+ { 214, 215, 0, 4, 620, 0, 0, 0 },
+ { 216, 217, 0, 4, 4060, 100, 0, 0 },
+ { 218, 219, 0, 4, 14513, 193, 0, 0 },
{ 220, 221, 0, 4, 2813, 106, 0, 0 },
- { 222, 223, 0, 4, 500, 0, 0, 0 },
+ { 222, 223, 0, 4, 493, 0, 0, 0 },
{ 224, 224, 0, 0, 40000, 0, 0, 0 },
{ 225, 226, 0, 4, 7993, 93, 0, 0 },
{ 227, 227, 0, 0, 40000, 0, 0, 0 },
{ 228, 228, 0, 0, 40000, 133, 0, 0 },
- { 229, 230, 0, 4, 720, 213, 0, 0 },
+ { 229, 230, 0, 4, 713, 213, 0, 0 },
{ 231, 232, 0, 4, 40000, 146, 0, 0 },
{ 233, 234, 0, 4, 40000, 0, 0, 0 },
- { 235, 236, 0, 4, 1000, 340, 0, 0 },
- { 235, 237, 0, 4, 3280, 1120, 0, 0 },
- { 46, 238, 0, 4, 6920, 0, 0, 0 },
+ { 235, 236, 0, 4, 993, 340, 0, 0 },
+ { 235, 237, 0, 4, 3260, 1120, 0, 0 },
+ { 46, 238, 0, 4, 6720, 0, 0, 0 },
{ 239, 240, 0, 4, 40000, 140, 0, 0 },
{ 241, 242, 0, 4, 40000, 146, 0, 0 },
{ 243, 243, 0, 0, 40000, 100, 0, 0 },
@@ -4820,16 +4811,16 @@ const struct adlinsdata adlins[4815] =
{ 308, 308, 0, 0, 1186, 406, 0, 0 },
{ 309, 309, 0, 0, 40000, 1306, 0, 0 },
{ 310, 310, 0, 0, 40000, 933, 0, 0 },
- { 311, 312, 0, 4, 9146, 240, 0, 0 },
- { 313, 314, 0, 4, 7306, 326, 0, 0 },
- { 315, 316, 0, 4, 3586, 326, 0, 0 },
- { 317, 318, 0, 4, 7180, 0, 0, 0 },
- { 107, 319, 0, 4, 1180, 406, 0, 0 },
+ { 311, 312, 0, 4, 9100, 240, 0, 0 },
+ { 313, 314, 0, 4, 7280, 326, 0, 0 },
+ { 315, 316, 0, 4, 3553, 326, 0, 0 },
+ { 317, 318, 0, 4, 6966, 0, 0, 0 },
+ { 107, 319, 0, 4, 1160, 406, 0, 0 },
{ 108, 320, 0, 4, 40000, 66, 0, 0 },
{ 109, 321, 0, 4, 720, 213, 0, 0 },
{ 322, 323, 0, 4, 40000, 73, 0, 0 },
{ 324, 325, 0, 4, 613, 246, 0, 0 },
- { 326, 327, 0, 4, 1213, 386, 0, 0 },
+ { 326, 327, 0, 4, 1206, 386, 0, 0 },
{ 328, 328, 0, 0, 173, 106, 0, 0 },
{ 329, 329, 0, 0, 966, 333, 0, 0 },
{ 330, 331, 0, 4, 1906, 320, 0, 0 },
@@ -4880,12 +4871,12 @@ const struct adlinsdata adlins[4815] =
{ 372, 372, 79, 0, 2540, 1040, 0, 0 },
{ 135, 135, 14, 0, 9213, 3066, 0, 0 },
{ 373, 373, 46, 0, 1093, 60, 0, 0 },
- { 374, 375,129, 4, 1200, 433, 0, 0 },
+ { 374, 375,129, 4, 1193, 433, 0, 0 },
{ 376, 376, 58, 0, 1600, 726, 0, 0 },
{ 377, 377,164, 0, 526, 820, 0, 0 },
{ 378, 378,142, 0, 9153, 3073, 0, 0 },
{ 379, 379, 9, 0, 200, 100, 0, 0 },
- { 380, 381, 35, 4, 2353, 813, 0, 0 },
+ { 380, 381, 35, 4, 2340, 806, 0, 0 },
{ 382, 382, 28, 0, 1060, 120, 0, 0 },
{ 383, 383, 46, 0, 953, 20, 0, 0 },
{ 384, 384, 60, 0, 440, 160, 0, 0 },
@@ -6108,13 +6099,13 @@ const struct adlinsdata adlins[4815] =
{ 752, 752, 15, 0, 200, 20, 0, 0 },
{ 752, 752, 17, 0, 206, 20, 0, 0 },
{1439,1440, 0, 4, 40000, 0, 0, 0 },
- {1441,1442, 0, 4, 7360, 200, 0, 0 },
- {1443,1444, 0, 4, 11840, 320, 0, 0 },
+ {1441,1442, 0, 4, 7320, 193, 0, 0 },
+ {1443,1444, 0, 4, 11833, 320, 0, 0 },
{1445,1446, 0, 4, 9920, 326, 0, 0 },
- {1447,1448, 0, 4, 10213, 0, 0, 0 },
- {1449,1450, 0, 4, 7440, 2486, 0, 0 },
- { 181,1451, 0, 4, 2360, 733, 0, 0 },
- {1452,1453, 0, 4, 9260, 240, 0, 0 },
+ {1447,1448, 0, 4, 10133, 0, 0, 0 },
+ {1449,1450, 0, 4, 7373, 2486, 0, 0 },
+ { 181,1451, 0, 4, 2313, 733, 0, 0 },
+ {1452,1453, 0, 4, 9213, 240, 0, 0 },
{1454,1455, 0, 4, 40000, 0, 0, 0 },
{1456,1457, 0, 4, 660, 126, 0, 0 },
{1458,1459, 0, 4, 40000, 66, 0, 0 },
@@ -6128,8 +6119,8 @@ const struct adlinsdata adlins[4815] =
{ 36,1471, 0, 4, 320, 0, 0, 0 },
{1472,1473, 0, 4, 320, 0, 0, 0 },
{1474,1475, 0, 4, 7986, 93, 0, 0 },
- { 39,1476, 0, 4, 1053, 226, 0, 0 },
- {1477,1476, 0, 4, 1060, 226, 0, 0 },
+ { 39,1476, 0, 4, 1046, 226, 0, 0 },
+ {1477,1476, 0, 4, 1046, 226, 0, 0 },
{1478,1479, 0, 4, 40000, 453, 0, 0 },
{ 50,1480, 0, 4, 40000, 400, 0, 0 },
{1481,1482, 0, 4, 40000, 133, 0, 0 },
@@ -6151,19 +6142,19 @@ const struct adlinsdata adlins[4815] =
{1510,1511, 0, 4, 40000, 60, 0, 0 },
{1512,1513, 0, 4, 40000, 0, 0, 0 },
{1514,1515, 0, 4, 40000, 0, 0, 0 },
- {1516,1517, 0, 4, 40000, 773, 0, 0 },
- {1518,1519, 0, 4, 5346, 2973, 0, 0 },
+ {1516,1517, 0, 4, 40000, 766, 0, 0 },
+ {1518,1519, 0, 4, 5286, 2966, 0, 0 },
{1520,1521, 0, 4, 40000, 406, 0, 0 },
- {1522,1523, 0, 4, 9080, 360, 0, 0 },
+ {1522,1523, 0, 4, 9040, 360, 0, 0 },
{1524,1525, 0, 4, 40000, 1200, 0, 0 },
{1526,1527, 0, 4, 40000, 800, 0, 0 },
{1528,1529, 0, 4, 40000, 960, 0, 0 },
- { 111,1530, 0, 4, 1200, 433, 0, 0 },
- {1531,1532, 0, 4, 226, 386, 0, 0 },
- { 115,1533, 0, 4, 2433, 0, 0, 0 },
- {1534,1535, 0, 4, 1873, 646, 0, 0 },
- {1536,1537, 0, 4, 3013, 53, 0, 0 },
- {1538,1539, 0, 4, 1560, 720, 0, 0 },
+ { 111,1530, 0, 4, 1193, 433, 0, 0 },
+ {1531,1532, 0, 4, 220, 386, 0, 0 },
+ { 115,1533, 0, 4, 2413, 0, 0, 0 },
+ {1534,1535, 0, 4, 1853, 640, 0, 0 },
+ {1536,1537, 0, 4, 3006, 53, 0, 0 },
+ {1538,1539, 0, 4, 1506, 720, 0, 0 },
{1540, 339, 0, 6, 6, 0, 0, 0 },
{1541, 339, 0, 6, 6, 0, 0, 0 },
{1542,1543, 0, 4, 993, 93, 0, 0 },
@@ -6178,48 +6169,48 @@ const struct adlinsdata adlins[4815] =
{1550,1551, 49, 4, 520, 200, 0, 0 },
{1553,1554, 43, 4, 160, 80, 0, 0 },
{1550,1551, 51, 4, 513, 0, 0, 0 },
- { 134,1555, 43, 4, 1733, 0, 0, 0 },
+ { 134,1555, 43, 4, 1686, 0, 0, 0 },
{1550,1551, 54, 4, 506, 0, 0, 0 },
{1550,1551, 57, 4, 506, 0, 0, 0 },
- { 380, 381, 72, 4, 1580, 0, 0, 0 },
- {1550,1551, 60, 4, 520, 0, 0, 0 },
- {1556,1557, 70, 4, 826, 306, 0, 0 },
+ { 380, 381, 72, 4, 1573, 0, 0, 0 },
+ {1550,1551, 60, 4, 513, 0, 0, 0 },
+ {1556,1557, 70, 4, 766, 306, 0, 0 },
{ 374, 375, 60, 4, 973, 0, 0, 0 },
- {1558,1559, 36, 4, 1233, 0, 0, 0 },
+ {1558,1559, 36, 4, 1126, 0, 0, 0 },
{1560,1561, 65, 4, 293, 133, 0, 0 },
- {1562,1563, 84, 4, 1360, 0, 0, 0 },
+ {1562,1563, 84, 4, 1353, 0, 0, 0 },
{1564,1565, 59, 4, 380, 0, 0, 0 },
- {1566,1567, 84, 4, 1593, 566, 0, 0 },
- {1568,1569, 35, 4, 1353, 473, 0, 0 },
- {1570,1571, 44, 4, 413, 0, 0, 0 },
+ {1566,1567, 84, 4, 1586, 566, 0, 0 },
+ {1568,1569, 35, 4, 1320, 473, 0, 0 },
+ {1570,1571, 44, 4, 406, 0, 0, 0 },
{1572,1573, 67, 4, 246, 0, 0, 0 },
- {1574,1575, 66, 4, 293, 0, 0, 0 },
- { 145,1576, 59, 4, 146, 0, 0, 0 },
- {1577,1578, 51, 4, 360, 0, 0, 0 },
- {1579,1580, 45, 4, 246, 0, 0, 0 },
+ {1574,1575, 66, 4, 286, 0, 0, 0 },
+ { 145,1576, 59, 4, 140, 0, 0, 0 },
+ {1577,1578, 51, 4, 326, 0, 0, 0 },
+ {1579,1580, 45, 4, 233, 0, 0, 0 },
{1581,1582, 71, 4, 433, 0, 0, 0 },
{ 149,1583, 60, 4, 280, 0, 0, 0 },
- {1584,1585, 58, 4, 173, 0, 0, 0 },
+ {1584,1585, 58, 4, 166, 0, 0, 0 },
{1586,1587, 53, 4, 173, 0, 0, 0 },
- { 397,1588, 64, 4, 220, 80, 0, 0 },
+ { 397,1588, 64, 4, 213, 80, 0, 0 },
{1589,1590, 71, 4, 106, 53, 0, 0 },
- {1591,1592, 61, 4, 1000, 340, 0, 0 },
- {1593,1594, 61, 4, 1000, 340, 0, 0 },
+ {1591,1592, 61, 4, 973, 340, 0, 0 },
+ {1593,1594, 61, 4, 986, 340, 0, 0 },
{ 391, 392, 48, 4, 160, 46, 0, 0 },
{ 391, 393, 48, 4, 380, 60, 0, 0 },
{1595,1596, 69, 4, 120, 0, 0, 0 },
{ 159,1597, 68, 4, 120, 0, 0, 0 },
{ 159,1597, 63, 4, 140, 0, 0, 0 },
{1598,1599, 74, 4, 893, 273, 0, 0 },
- {1600,1601, 60, 4, 1013, 306, 0, 0 },
- {1602,1603, 80, 4, 220, 0, 0, 0 },
- {1604,1605, 64, 4, 1366, 0, 0, 0 },
+ {1600,1601, 60, 4, 1006, 306, 0, 0 },
+ {1602,1603, 80, 4, 213, 0, 0, 0 },
+ {1604,1605, 64, 4, 1346, 0, 0, 0 },
{1606,1607, 69, 4, 120, 73, 0, 0 },
- { 398, 399, 55, 4, 1540, 193, 0, 0 },
- {1608,1609, 75, 4, 1573, 0, 0, 0 },
+ { 398, 399, 55, 4, 1533, 193, 0, 0 },
+ {1608,1609, 75, 4, 1560, 0, 0, 0 },
{1610,1611, 68, 4, 120, 0, 0, 0 },
- {1612,1613, 48, 4, 360, 0, 0, 0 },
- {1614,1615, 53, 4, 606, 0, 0, 0 },
+ {1612,1613, 48, 4, 333, 0, 0, 0 },
+ {1614,1615, 53, 4, 593, 0, 0, 0 },
{1616,1616, 0, 0, 40000, 1586, 0, 0 },
{1617,1617, 0, 0, 40000, 1226, 0, 0 },
{1618,1618, 0, 0, 4546, 766, 0, 0 },
@@ -6828,35 +6819,35 @@ const struct adlinsdata adlins[4815] =
{2160,2160, 65, 0, 166, 73, 0, 0 },
{2161,2161, 21, 0, 480, 146, 0, 0 },
{2162, 173, 0, 4, 4220, 80, 0, 0 },
- {2163,2164, 0, 4, 4640, 3066, 0, 0 },
- {2165,2166, 0, 4, 7273, 3920, 0, 0 },
- {2167,2168, 0, 4, 3766, 1253, 0, 0 },
- {2169,2170, 0, 4, 6266, 2400, 0, 0 },
- {2171,2172, 0, 4, 18213, 0, 0, 0 },
+ {2163,2164, 0, 4, 4613, 3060, 0, 0 },
+ {2165,2166, 0, 4, 7193, 3920, 0, 0 },
+ {2167,2168, 0, 4, 3746, 1253, 0, 0 },
+ {2169,2170, 0, 4, 6226, 2393, 0, 0 },
+ {2171,2172, 0, 4, 18053, 0, 0, 0 },
{2173,2174, 0, 4, 40000, 713, 0, 0 },
{2175,2174, 0, 4, 40000, 733, 0, 0 },
{2176, 299, 0, 4, 40000, 273, 0, 0 },
{2177,2178, 0, 4, 40000, 66, 0, 0 },
{2179,2180, 0, 4, 40000, 393, 0, 0 },
{2181,2182, 0, 4, 40000, 413, 0, 0 },
- {2183,2184, 0, 4, 7406, 200, 0, 0 },
+ {2183,2184, 0, 4, 7366, 200, 0, 0 },
{ 127, 127, 65, 0, 226, 120, 0, 0 },
{ 127, 127, 72, 0, 180, 100, 0, 0 },
{ 364, 365, 52, 4, 120, 0, 0, 0 },
{2185,2186, 60, 4, 173, 0, 0, 0 },
{1550,1551, 47, 4, 520, 0, 0, 0 },
- {1556,1557, 76, 4, 833, 0, 0, 0 },
+ {1556,1557, 76, 4, 766, 0, 0, 0 },
{ 374, 375, 84, 4, 813, 0, 0, 0 },
{1564,1565, 83, 4, 220, 0, 0, 0 },
- {1568,1569, 24, 4, 1840, 620, 0, 0 },
- {1556,1557, 77, 4, 820, 300, 0, 0 },
- {1572,1573, 60, 4, 286, 0, 0, 0 },
- {1574,1575, 65, 4, 293, 0, 0, 0 },
+ {1568,1569, 24, 4, 1806, 620, 0, 0 },
+ {1556,1557, 77, 4, 760, 300, 0, 0 },
+ {1572,1573, 60, 4, 280, 0, 0, 0 },
+ {1574,1575, 65, 4, 286, 0, 0, 0 },
{ 391, 392, 44, 4, 160, 53, 0, 0 },
{ 391, 393, 40, 4, 460, 66, 0, 0 },
{1606,1607, 72, 4, 120, 73, 0, 0 },
- { 398, 399, 73, 4, 1293, 173, 0, 0 },
- {1608,1609, 70, 4, 1580, 0, 0, 0 },
+ { 398, 399, 73, 4, 1286, 173, 0, 0 },
+ {1608,1609, 70, 4, 1560, 0, 0, 0 },
{2187,2187, 0, 0, 40000, 353, 0, 0 },
{2188,2188, 0, 0, 40000, 333, 0, 0 },
{2189,2189, 0, 0, 5913, 2306, 0, 0 },
@@ -6986,30 +6977,30 @@ const struct adlinsdata adlins[4815] =
{2299,2299, 72, 0, 793, 173, 0, 0 },
{2300,2300, 84, 0, 226, 66, 0, 0 },
{ 555, 555, 66, 0, 113, 0, 0, 0 },
- {2301,2302, 35, 4, 2333, 800, 0, 0 },
+ {2301,2302, 35, 4, 2320, 800, 0, 0 },
{2303,2304, 52, 4, 120, 0, 0, 0 },
{2305,1548, 48, 4, 173, 0, 0, 0 },
{1595,1595, 58, 0, 146, 166, 0, 0 },
{2305,1548, 60, 4, 173, 0, 0, 0 },
- {2306,2307, 47, 4, 1893, 700, 0, 0 },
- {2306,2307, 43, 4, 1953, 740, 0, 0 },
- {2306,2307, 49, 4, 1880, 686, 0, 0 },
- {2306,2307, 51, 4, 1886, 706, 0, 0 },
- {2306,2307, 54, 4, 1906, 720, 0, 0 },
- {2306,2307, 57, 4, 1900, 720, 0, 0 },
- {2306,2307, 72, 4, 1593, 606, 0, 0 },
- {2306,2307, 60, 4, 1900, 720, 0, 0 },
- {2306,2307, 76, 4, 1593, 606, 0, 0 },
+ {2306,2307, 47, 4, 1886, 700, 0, 0 },
+ {2306,2307, 43, 4, 1946, 740, 0, 0 },
+ {2306,2307, 49, 4, 1873, 686, 0, 0 },
+ {2306,2307, 51, 4, 1880, 706, 0, 0 },
+ {2306,2307, 54, 4, 1900, 720, 0, 0 },
+ {2306,2307, 57, 4, 1893, 720, 0, 0 },
+ {2306,2307, 72, 4, 1586, 606, 0, 0 },
+ {2306,2307, 60, 4, 1893, 720, 0, 0 },
+ {2306,2307, 76, 4, 1586, 606, 0, 0 },
{2306,2307, 84, 4, 1593, 613, 0, 0 },
- {2306,2307, 36, 4, 2386, 920, 0, 0 },
+ {2306,2307, 36, 4, 2380, 920, 0, 0 },
{1560,2308, 65, 4, 293, 213, 0, 0 },
- {2309,2310, 84, 4, 1373, 306, 0, 0 },
+ {2309,2310, 84, 4, 1366, 306, 0, 0 },
{1564,1564, 83, 0, 220, 113, 0, 0 },
- { 380, 381, 84, 4, 1593, 566, 0, 0 },
+ { 380, 381, 84, 4, 1580, 566, 0, 0 },
{1568,1568, 24, 0, 1833, 613, 0, 0 },
- {2306,2307, 77, 4, 1593, 606, 0, 0 },
- {2311,2312, 60, 4, 286, 0, 0, 0 },
- {2313,2314, 65, 4, 513, 0, 0, 0 },
+ {2306,2307, 77, 4, 1586, 606, 0, 0 },
+ {2311,2312, 60, 4, 280, 0, 0, 0 },
+ {2313,2314, 65, 4, 506, 0, 0, 0 },
{2315,2315, 59, 0, 106, 0, 0, 0 },
{2316,2316, 51, 0, 386, 373, 0, 0 },
{1612,1612, 45, 0, 393, 380, 0, 0 },
@@ -7027,16 +7018,16 @@ const struct adlinsdata adlins[4815] =
{1595,1595, 68, 0, 126, 140, 0, 0 },
{1595,1595, 63, 0, 146, 166, 0, 0 },
{2325,2326, 74, 4, 380, 106, 0, 0 },
- {2327,2328, 60, 4, 1026, 333, 0, 0 },
- {2329,2330, 80, 4, 40000, 0, 0, 0 },
- {2331,2332, 64, 4, 1900, 640, 0, 0 },
+ {2327,2328, 60, 4, 1020, 333, 0, 0 },
+ {2329,2330, 80, 4, 453, 0, 0, 0 },
+ {2331,2332, 64, 4, 1880, 640, 0, 0 },
{ 397, 397, 72, 0, 193, 80, 0, 0 },
- {2333,2334, 78, 4, 820, 0, 0, 0 },
- {1608,1609, 82, 4, 1580, 0, 0, 0 },
+ {2333,2334, 78, 4, 793, 0, 0, 0 },
+ {1608,1609, 82, 4, 1560, 0, 0, 0 },
{2315,2315, 48, 0, 106, 0, 0, 0 },
{2316,2316, 53, 0, 386, 373, 0, 0 },
{2335,2335, 0, 0, 3586, 1133, 0, 0 },
- {2336,2337, 0, 4, 1186, 420, 0, 0 },
+ {2336,2337, 0, 4, 1180, 420, 0, 0 },
{2338,2339, 0, 4, 40000, 320, 0, 0 },
{2340,2340, 0, 0, 8826, 1346, 0, 0 },
{2341,2341, 0, 0, 3440, 753, 0, 0 },
@@ -7057,7 +7048,7 @@ const struct adlinsdata adlins[4815] =
{2360,2360, 43, 0, 253, 106, 0, 0 },
{2360,2360, 45, 0, 240, 100, 0, 0 },
{2360,2360, 47, 0, 240, 100, 0, 0 },
- {2361,2362, 0, 4, 14720, 333, 0, 0 },
+ {2361,2362, 0, 4, 14633, 333, 0, 0 },
{2363,2363, 0, 0, 7373, 1246, 0, 0 },
{2364,2364, 0, 0, 4900, 233, 0, 0 },
{2365,2365, 0, 0, 5106, 606, 0, 0 },
@@ -7092,7 +7083,7 @@ const struct adlinsdata adlins[4815] =
{2393,2393, 0, 0, 3400, 493, 0, 0 },
{2394,2394, 0, 0, 40000, 53, 0, 0 },
{2395,2395, 0, 0, 40000, 133, 0, 0 },
- {2396,2397, 0, 4, 3093, 1400, 0, 0 },
+ {2396,2397, 0, 4, 3066, 1400, 0, 0 },
{2398,2398, 0, 0, 1080, 580, 0, 0 },
{2399,2400, 0, 4, 2220, 400, 0, 0 },
{2401,2401, 0, 0, 40000, 193, 0, 0 },
@@ -7108,15 +7099,15 @@ const struct adlinsdata adlins[4815] =
{2415,2416, 0, 4, 40000, 466, 0, 0 },
{2417,2418, 0, 4, 40000, 113, 0, 0 },
{2419,2420, 0, 4, 1280, 73, 0, 0 },
- {2421,2422, 0, 4, 1113, 146, 0, 0 },
- {2423,2424, 0, 4, 3660, 113, 0, 0 },
+ {2421,2422, 0, 4, 1106, 146, 0, 0 },
+ {2423,2424, 0, 4, 3640, 113, 0, 0 },
{2425,2426, 0, 4, 40000, 80, 0, 0 },
{2427,2427, 33, 0, 300, 246, 0, 0 },
{2428,2429, 38, 4, 53, 0, 0, 0 },
{2430,2430, 38, 0, 106, 0, 0, 0 },
{2431,2431, 38, 0, 340, 20, 0, 0 },
{2432,2432, 40, 0, 73, 0, 0, 0 },
- {2433,2434, 41, 4, 300, 0, 0, 0 },
+ {2433,2434, 41, 4, 293, 0, 0, 0 },
{2435,2435, 0, 0, 133, 73, 0, 0 },
{2435,2435, 41, 0, 133, 73, 0, 0 },
{2360,2360, 48, 0, 240, 100, 0, 0 },
@@ -7300,10 +7291,10 @@ const struct adlinsdata adlins[4815] =
{2543,2543, 0, 0, 40000, 1306, 0, 0 },
{2544,2544, 0, 0, 40000, 0, 0, 0 },
{2545,2545, 0, 0, 4613, 13, 0, 0 },
- {2546,2547, 0, 4, 6933, 133, 0, 0 },
+ {2546,2547, 0, 4, 6926, 126, 0, 0 },
{2548,2549, 0, 4, 40000, 86, 0, 0 },
{2550,2550, 0, 0, 9233, 100, 0, 0 },
- {2551,2552, 0, 4, 4640, 73, 0, 0 },
+ {2551,2552, 0, 4, 4620, 73, 0, 0 },
{2553,2553, 0, 0, 40000, 73, 0, 0 },
{2554,2554, 0, 0, 40000, 0, 0, 0 },
{2555,2556, 0, 4, 40000, 73, 0, 0 },
@@ -7312,7 +7303,7 @@ const struct adlinsdata adlins[4815] =
{2559,2560, 0, 4, 40000, 40, 0, 0 },
{2561,2561, 0, 0, 40000, 186, 0, 0 },
{2562,2562, 0, 0, 4026, 66, 0, 0 },
- {2563,2564, 0, 4, 14586, 80, 0, 0 },
+ {2563,2564, 0, 4, 14513, 80, 0, 0 },
{2565,2565, 0, 0, 40000, 0, 0, 0 },
{2566,2567, 0, 4, 40000, 40, 0, 0 },
{2568,2568, 0, 0, 4020, 73, 0, 0 },
@@ -7326,7 +7317,7 @@ const struct adlinsdata adlins[4815] =
{ 239,2578, 0, 4, 40000, 133, 0, 0 },
{2579,2579, 0, 0, 40000, 80, 0, 0 },
{2580,2580, 0, 0, 40000, 140, 0, 0 },
- {2581,2582, 0, 4, 16980, 1173, 0, 0 },
+ {2581,2582, 0, 4, 16913, 1173, 0, 0 },
{2583,2584, 0, 4, 726, 100, 0, 0 },
{2585,2586, 0, 4, 40000, 73, 0, 0 },
{2587,2588, 0, 4, 40000, 73, 0, 0 },
@@ -7356,14 +7347,14 @@ const struct adlinsdata adlins[4815] =
{2624,2625, 0, 4, 40000, 0, 0, 0 },
{2626,2627, 0, 4, 40000, 73, 0, 0 },
{2628,2629, 0, 4, 40000, 0, 0, 0 },
- {1516,2630, 0, 4, 1193, 406, 0, 0 },
+ {1516,2630, 0, 4, 1186, 406, 0, 0 },
{2631,2632, 0, 4, 40000, 553, 0, 0 },
{2633,2633, 0, 0, 40000, 40, 0, 0 },
{2634,2635, 0, 4, 40000, 773, 0, 0 },
{2636,2636, 0, 0, 40000, 320, 0, 0 },
{2637,2637, 0, 0, 1880, 73, 0, 0 },
- {2638,2639, 0, 4, 486, 0, 0, 0 },
- {2640,2641, 0, 4, 17020, 1193, 0, 0 },
+ {2638,2639, 0, 4, 473, 0, 0, 0 },
+ {2640,2641, 0, 4, 16946, 1193, 0, 0 },
{2642,2642, 0, 0, 40000, 720, 0, 0 },
{2643,2644, 0, 4, 1880, 40, 0, 0 },
{2645,2645, 0, 0, 40000, 73, 0, 0 },
@@ -7414,20 +7405,20 @@ const struct adlinsdata adlins[4815] =
{2687,2687, 48, 0, 173, 20, 0, 0 },
{2688,2688, 53, 0, 980, 33, 0, 0 },
{2689,2690, 0, 4, 40000, 286, 0, 0 },
- {2691,2692, 0, 4, 2340, 100, 0, 0 },
+ {2691,2692, 0, 4, 2326, 100, 0, 0 },
{2693,2694, 0, 4, 380, 80, 0, 0 },
- {2695,2696, 0, 4, 14793, 73, 0, 0 },
+ {2695,2696, 0, 4, 14766, 73, 0, 0 },
{2697,2698, 0, 4, 40000, 40, 0, 0 },
{ 192,2699, 0, 4, 40000, 73, 0, 0 },
{2700,2701, 0, 4, 973, 126, 0, 0 },
- {2702,2703, 0, 4, 4666, 106, 0, 0 },
+ {2702,2703, 0, 4, 4626, 106, 0, 0 },
{2704,2705, 0, 4, 40000, 73, 0, 0 },
{2706,2707, 0, 4, 40000, 73, 0, 0 },
{2708,2709, 0, 4, 40000, 73, 0, 0 },
{2710,2711, 0, 4, 2053, 0, 0, 0 },
{2712,1473, 0, 4, 320, 26, 0, 0 },
{2713,2714, 0, 4, 573, 93, 0, 0 },
- {2715,2716, 0, 4, 6513, 0, 0, 0 },
+ {2715,2716, 0, 4, 6466, 0, 0, 0 },
{1478,2717, 0, 4, 40000, 146, 0, 0 },
{2718,2719, 0, 4, 40000, 66, 0, 0 },
{ 286,2720, 0, 4, 40000, 73, 0, 0 },
@@ -7437,25 +7428,25 @@ const struct adlinsdata adlins[4815] =
{2727,2724, 0, 4, 40000, 60, 0, 0 },
{1514,2728, 0, 4, 40000, 180, 0, 0 },
{2729,2730, 0, 4, 40000, 0, 0, 0 },
- {2731,2732, 0, 4, 486, 0, 0, 0 },
+ {2731,2732, 0, 4, 473, 0, 0, 0 },
{2733,2734, 0, 4, 733, 0, 0, 0 },
{2735,2736, 0, 4, 286, 40, 0, 0 },
{2737,2738, 0, 4, 40000, 73, 0, 0 },
- {2739,2740, 0, 4, 1326, 746, 0, 0 },
- {2741,2742, 0, 4, 1340, 700, 0, 0 },
+ {2739,2740, 0, 4, 1313, 746, 0, 0 },
+ {2741,2742, 0, 4, 1326, 700, 0, 0 },
{2743,2744, 0, 4, 40000, 0, 0, 0 },
{2745,2746, 0, 4, 2046, 0, 0, 0 },
{2747,2747, 35, 0, 386, 166, 0, 0 },
{2748,2748, 60, 0, 493, 193, 0, 0 },
{2749,2749, 43, 0, 126, 66, 0, 0 },
{2750,2750, 0, 0, 3740, 1260, 0, 0 },
- {2751,2752, 0, 4, 14846, 353, 0, 0 },
- {2753,2754, 0, 4, 10266, 0, 0, 0 },
- {2755,2756, 0, 4, 18286, 146, 0, 0 },
- {2757,2758, 0, 4, 14520, 333, 0, 0 },
- {2759,2760, 0, 4, 14686, 633, 0, 0 },
- {2761,2762, 0, 4, 14826, 300, 0, 0 },
- {2763,2764, 0, 4, 10493, 0, 0, 0 },
+ {2751,2752, 0, 4, 14833, 360, 0, 0 },
+ {2753,2754, 0, 4, 10206, 0, 0, 0 },
+ {2755,2756, 0, 4, 18033, 146, 0, 0 },
+ {2757,2758, 0, 4, 14433, 326, 0, 0 },
+ {2759,2760, 0, 4, 14580, 626, 0, 0 },
+ {2761,2762, 0, 4, 14720, 300, 0, 0 },
+ {2763,2764, 0, 4, 10426, 0, 0, 0 },
{2765,2766, 0, 4, 40000, 60, 0, 0 },
{2767,2768, 0, 4, 40000, 80, 0, 0 },
{2769,2770, 0, 4, 40000, 80, 0, 0 },
@@ -7465,37 +7456,37 @@ const struct adlinsdata adlins[4815] =
{2777,2778, 0, 4, 40000, 73, 0, 0 },
{2779,2780, 0, 4, 40000, 73, 0, 0 },
{2781,2782, 0, 4, 40000, 66, 0, 0 },
- {2783,2784, 0, 4, 7260, 186, 0, 0 },
- {2785,2786, 0, 4, 10386, 0, 0, 0 },
+ {2783,2784, 0, 4, 7220, 186, 0, 0 },
+ {2785,2786, 0, 4, 10300, 0, 0, 0 },
{2787,2788, 0, 4, 40000, 246, 0, 0 },
- {2789,2790, 0, 4, 9173, 746, 0, 0 },
- {2791,2792, 0, 4, 7440, 666, 0, 0 },
- {2793,2794, 0, 4, 40000, 0, 0, 0 },
+ {2789,2790, 0, 4, 9106, 746, 0, 0 },
+ {2791,2792, 0, 4, 7373, 666, 0, 0 },
+ {2793,2794, 0, 4, 1200, 426, 0, 0 },
{2795,2796, 0, 4, 40000, 413, 0, 0 },
{2795,2797, 0, 4, 40000, 1506, 0, 0 },
{2798,2799, 0, 4, 40000, 60, 0, 0 },
{2800,2801, 0, 4, 40000, 233, 0, 0 },
{2802,2803, 0, 4, 40000, 80, 0, 0 },
{2804,2805, 0, 4, 40000, 80, 0, 0 },
- {2806,2807, 0, 4, 4520, 80, 0, 0 },
+ {2806,2807, 0, 4, 4500, 80, 0, 0 },
{2808,2809, 0, 4, 40000, 73, 0, 0 },
- {2810,2811, 0, 4, 1186, 100, 0, 0 },
+ {2810,2811, 0, 4, 1180, 100, 0, 0 },
{2812,2813, 0, 4, 953, 153, 0, 0 },
- {2814,2815, 0, 4, 14786, 126, 0, 0 },
- {2816,2817, 0, 4, 14800, 193, 0, 0 },
- {2818,2819, 0, 4, 14573, 626, 0, 0 },
+ {2814,2815, 0, 4, 14693, 126, 0, 0 },
+ {2816,2817, 0, 4, 14693, 193, 0, 0 },
+ {2818,2819, 0, 4, 14473, 633, 0, 0 },
{2820,2821, 0, 4, 2200, 73, 0, 0 },
- {2822,2823, 0, 4, 373, 86, 0, 0 },
+ {2822,2823, 0, 4, 366, 86, 0, 0 },
{2824,2825, 0, 4, 12780, 200, 0, 0 },
{2826,2827, 0, 4, 40000, 73, 0, 0 },
- {2828,2829, 0, 4, 9193, 146, 0, 0 },
- {2830,2831, 0, 4, 2540, 326, 0, 0 },
+ {2828,2829, 0, 4, 9066, 146, 0, 0 },
+ {2830,2831, 0, 4, 2526, 326, 0, 0 },
{2832,2833, 0, 4, 6933, 200, 0, 0 },
{2834,2835, 0, 4, 40000, 413, 0, 0 },
- {2836,2837, 0, 4, 4826, 1313, 0, 0 },
- {2838,2839, 0, 4, 14740, 340, 0, 0 },
- {2840,2841, 0, 4, 1886, 653, 0, 0 },
- {2842,2843, 0, 4, 5280, 260, 0, 0 },
+ {2836,2837, 0, 4, 4806, 1313, 0, 0 },
+ {2838,2839, 0, 4, 14620, 340, 0, 0 },
+ {2840,2841, 0, 4, 1866, 653, 0, 0 },
+ {2842,2843, 0, 4, 5200, 260, 0, 0 },
{2844,2845, 0, 4, 40000, 240, 0, 0 },
{2846,2847, 0, 4, 40000, 240, 0, 0 },
{2848,2849, 0, 4, 40000, 240, 0, 0 },
@@ -7504,20 +7495,20 @@ const struct adlinsdata adlins[4815] =
{2854,2855, 0, 4, 40000, 146, 0, 0 },
{2856,2856, 0, 0, 2400, 1126, 0, 0 },
{2857,2857, 0, 0, 2400, 1126, 0, 0 },
- {2858,2859, 0, 4, 4613, 73, 0, 0 },
+ {2858,2859, 0, 4, 4586, 73, 0, 0 },
{2860,2861, 0, 4, 40000, 426, 0, 0 },
- {2862,2863, 0, 4, 4580, 100, 0, 0 },
+ {2862,2863, 0, 4, 4553, 100, 0, 0 },
{2864,2865, 0, 4, 40000, 80, 0, 0 },
- {2866,2867, 0, 4, 5300, 53, 0, 0 },
- {2868,2869, 0, 4, 5313, 113, 0, 0 },
- {2870,2871, 0, 4, 7080, 186, 0, 0 },
- {2872,2873, 0, 4, 4720, 106, 0, 0 },
+ {2866,2867, 0, 4, 5260, 53, 0, 0 },
+ {2868,2869, 0, 4, 5286, 113, 0, 0 },
+ {2870,2871, 0, 4, 7040, 186, 0, 0 },
+ {2872,2873, 0, 4, 4693, 106, 0, 0 },
{2874,2875, 0, 4, 40000, 73, 0, 0 },
- {2876,2877, 0, 4, 1640, 0, 0, 0 },
- {2878,2879, 0, 4, 7306, 186, 0, 0 },
- {2880,2881, 0, 4, 7373, 1246, 0, 0 },
- {2882,2883, 0, 4, 4620, 93, 0, 0 },
- {2884,2885, 0, 4, 3460, 926, 0, 0 },
+ {2876,2877, 0, 4, 1633, 0, 0, 0 },
+ {2878,2879, 0, 4, 7266, 186, 0, 0 },
+ {2880,2881, 0, 4, 7340, 1246, 0, 0 },
+ {2882,2883, 0, 4, 4600, 93, 0, 0 },
+ {2884,2885, 0, 4, 3446, 926, 0, 0 },
{2886,2887, 0, 4, 40000, 73, 0, 0 },
{2888,2888, 0, 0, 18926, 426, 0, 0 },
{2889,2889, 0, 0, 18520, 73, 0, 0 },
@@ -7528,22 +7519,22 @@ const struct adlinsdata adlins[4815] =
{2895,2895, 0, 0, 14786, 4966, 0, 0 },
{2896,2897, 0, 4, 40000, 80, 0, 0 },
{2898,2899, 0, 4, 40000, 73, 0, 0 },
- {2353,2900, 0, 4, 18520, 86, 0, 0 },
+ {2353,2900, 0, 4, 18420, 80, 0, 0 },
{2901,2901, 0, 0, 40000, 0, 0, 0 },
{2902,2903, 0, 4, 40000, 100, 0, 0 },
{2904,2905, 0, 4, 40000, 93, 0, 0 },
{2906,2907, 0, 4, 40000, 73, 0, 0 },
- {2908,2909, 0, 4, 10720, 153, 0, 0 },
+ {2908,2909, 0, 4, 10706, 160, 0, 0 },
{2910,2911, 0, 4, 40000, 73, 0, 0 },
{2912,2912, 0, 0, 40000, 40, 0, 0 },
- {2913,2914, 0, 4, 8720, 446, 0, 0 },
- {2915,2916, 0, 4, 14706, 653, 0, 0 },
- {2917,2918, 0, 4, 9213, 426, 0, 0 },
- {2919,2920, 0, 4, 9286, 240, 0, 0 },
- {2921,2922, 0, 4, 8706, 413, 0, 0 },
- {2923,2924, 0, 4, 2233, 346, 0, 0 },
- {2925,2926, 0, 4, 2373, 426, 0, 0 },
- {2927,2928, 0, 4, 2353, 233, 0, 0 },
+ {2913,2914, 0, 4, 8713, 446, 0, 0 },
+ {2915,2916, 0, 4, 14633, 653, 0, 0 },
+ {2917,2918, 0, 4, 9166, 426, 0, 0 },
+ {2919,2920, 0, 4, 9213, 240, 0, 0 },
+ {2921,2922, 0, 4, 8700, 420, 0, 0 },
+ {2923,2924, 0, 4, 2200, 346, 0, 0 },
+ {2925,2926, 0, 4, 2360, 426, 0, 0 },
+ {2927,2928, 0, 4, 2340, 233, 0, 0 },
{2929,2929, 0, 0, 40000, 140, 0, 0 },
{2930,2931, 0, 4, 40000, 100, 0, 0 },
{2932,2933, 0, 4, 40000, 73, 0, 0 },
@@ -7552,10 +7543,10 @@ const struct adlinsdata adlins[4815] =
{2938,2939, 0, 4, 40000, 246, 0, 0 },
{2940,2940, 0, 0, 553, 446, 0, 0 },
{2941,2941, 0, 0, 40000, 193, 0, 0 },
- {2942,2943, 0, 4, 1206, 406, 0, 0 },
+ {2942,2943, 0, 4, 1200, 406, 0, 0 },
{2944,2944, 0, 0, 7026, 1553, 0, 0 },
{2945,2945, 0, 0, 3426, 360, 0, 0 },
- {2946,2947, 0, 4, 7313, 646, 0, 0 },
+ {2946,2947, 0, 4, 7200, 646, 0, 0 },
{2948,2948, 0, 0, 40000, 386, 0, 0 },
{2949,2949, 0, 0, 1953, 726, 0, 0 },
{2950,2951, 0, 4, 14606, 106, 0, 0 },
@@ -7654,191 +7645,63 @@ const struct adlinsdata adlins[4815] =
{3024,3024, 74, 0, 280, 73, 0, 0 },
{3025,3025, 74, 0, 453, 100, 0, 0 },
{3026,3026, 60, 0, 666, 33, 0, 0 },
- {1439,1440, 0, 0, 13566, 273, 0, 0 },
- {1593,1594, 35, 0, 2200, 673, 0, 0 },
- {1564,1565, 35, 0, 740, 280, 0, 0 },
- {1443,1444, 0, 0, 11886, 333, 0, 0 },
- {1481,1482, 0, 0, 40000, 133, 0, 0 },
- { 185, 186, 0, 0, 5980, 1540, 0, 0 },
- { 235, 237, 0, 0, 3366, 1093, 0, 0 },
- { 239, 240, 0, 0, 40000, 133, 0, 0 },
- {1477,1476, 0, 0, 40000, 160, 0, 0 },
- { 268, 269, 0, 0, 40000, 80, 0, 0 },
- { 176, 177, 0, 0, 40000, 0, 0, 0 },
- {1490,1491, 0, 0, 40000, 60, 0, 0 },
- { 231, 232, 0, 0, 40000, 146, 0, 0 },
- { 233, 234, 0, 0, 40000, 433, 0, 0 },
- { 254, 255, 0, 0, 40000, 93, 0, 0 },
- { 192, 193, 0, 0, 40000, 66, 0, 0 },
- { 252, 253, 0, 0, 40000, 73, 0, 0 },
- { 248,3027, 0, 0, 40000, 80, 0, 0 },
- { 39,1476, 0, 0, 40000, 160, 0, 0 },
- { 241, 242, 0, 0, 40000, 146, 0, 0 },
- {1508,1509, 0, 0, 40000, 0, 0, 0 },
- { 246, 247, 0, 0, 3966, 800, 0, 0 },
- { 181,1451, 0, 0, 2153, 640, 0, 0 },
- { 209, 210, 0, 0, 4453, 100, 0, 0 },
- { 270, 271, 0, 0, 40000, 80, 0, 0 },
- { 115,1533, 0, 0, 4260, 1720, 0, 0 },
- {1454,1455, 0, 0, 40000, 0, 0, 0 },
- { 107, 319, 0, 0, 1266, 413, 0, 0 },
- { 46, 238, 0, 0, 6873, 1246, 0, 0 },
- { 216, 217, 0, 0, 4046, 100, 0, 0 },
- { 272, 273, 0, 0, 40000, 126, 0, 0 },
- {1445,3028, 0, 0, 9966, 386, 0, 0 },
- { 172, 173, 0, 0, 7340, 100, 0, 0 },
- { 174, 175, 0, 0, 6913, 100, 0, 0 },
- {1447,3029, 0, 0, 10306, 80, 0, 0 },
- {1452,3030, 0, 0, 9240, 240, 0, 0 },
- { 183, 184, 0, 0, 586, 253, 0, 0 },
- {1456,1457, 0, 0, 1386, 180, 0, 0 },
- {1458,1459, 0, 0, 40000, 60, 0, 0 },
- { 190,1460, 0, 0, 40000, 46, 0, 0 },
- {1462,1463, 0, 0, 40000, 340, 0, 0 },
- {1464,1465, 0, 0, 40000, 360, 0, 0 },
- { 195, 196, 0, 0, 40000, 66, 0, 0 },
- { 197, 198, 0, 0, 40000, 86, 0, 0 },
- { 199, 200, 0, 0, 40000, 60, 0, 0 },
- { 201, 202, 0, 0, 3713, 100, 0, 0 },
- { 203, 204, 0, 0, 14633, 126, 0, 0 },
- { 205, 206, 0, 0, 9440, 153, 0, 0 },
- { 214, 215, 0, 0, 17020, 100, 0, 0 },
- { 218, 219, 0, 0, 14000, 180, 0, 0 },
- { 220, 221, 0, 0, 2846, 100, 0, 0 },
- {1472,1473, 0, 0, 8066, 66, 0, 0 },
- {1474,1475, 0, 0, 8040, 93, 0, 0 },
- { 225, 226, 0, 0, 8066, 106, 0, 0 },
- { 229, 230, 0, 0, 40000, 160, 0, 0 },
- {1478,1479, 0, 0, 40000, 413, 0, 0 },
- { 50,1480, 0, 0, 40000, 393, 0, 0 },
- {1485,1486, 0, 0, 40000, 226, 0, 0 },
- { 258, 259, 0, 0, 40000, 73, 0, 0 },
- { 262, 263, 0, 0, 40000, 160, 0, 0 },
- { 264, 265, 0, 0, 40000, 160, 0, 0 },
- {1494,1495, 0, 0, 40000, 80, 0, 0 },
- {1496,1497, 0, 0, 40000, 73, 0, 0 },
- { 274, 275, 0, 0, 40000, 100, 0, 0 },
- {1499,1500, 0, 0, 40000, 73, 0, 0 },
- { 277, 278, 0, 0, 40000, 173, 0, 0 },
- { 279, 280, 0, 0, 40000, 160, 0, 0 },
- { 281, 282, 0, 0, 40000, 173, 0, 0 },
- {1501,1502, 0, 0, 40000, 146, 0, 0 },
- { 284, 285, 0, 0, 40000, 66, 0, 0 },
- { 286, 287, 0, 0, 40000, 86, 0, 0 },
- {1503,1504, 0, 0, 40000, 86, 0, 0 },
- {1505,1506, 0, 0, 40000, 73, 0, 0 },
- { 289, 290, 0, 0, 40000, 66, 0, 0 },
- { 291, 292, 0, 0, 40000, 160, 0, 0 },
- { 293, 294, 0, 0, 40000, 200, 0, 0 },
- { 86,1507, 0, 0, 40000, 80, 0, 0 },
- { 88, 297, 0, 0, 40000, 1346, 0, 0 },
- { 298, 299, 0, 0, 40000, 320, 0, 0 },
- { 300, 301, 0, 0, 40000, 1273, 0, 0 },
- {1514,1515, 0, 0, 40000, 100, 0, 0 },
- {1518,1519, 0, 0, 4733, 0, 0, 0 },
- {1520,1521, 0, 0, 40000, 440, 0, 0 },
- {1524,1525, 0, 0, 40000, 1180, 0, 0 },
- {1526,1527, 0, 0, 40000, 746, 0, 0 },
- {1528,1529, 0, 0, 40000, 920, 0, 0 },
- { 311, 312, 0, 0, 15306, 213, 0, 0 },
- { 313, 314, 0, 0, 7280, 340, 0, 0 },
- { 315, 316, 0, 0, 3693, 346, 0, 0 },
- { 317, 318, 0, 0, 13720, 4033, 0, 0 },
- { 108, 320, 0, 0, 40000, 66, 0, 0 },
- { 109, 321, 0, 0, 40000, 180, 0, 0 },
- { 322, 323, 0, 0, 40000, 73, 0, 0 },
- { 111,1530, 0, 0, 4053, 426, 0, 0 },
- { 324, 325, 0, 0, 626, 260, 0, 0 },
- { 326, 327, 0, 0, 1166, 400, 0, 0 },
- {1531,1532, 0, 0, 186, 340, 0, 0 },
- {1534,1535, 0, 0, 3240, 440, 0, 0 },
- { 330, 331, 0, 0, 1920, 360, 0, 0 },
- {1536,1537, 0, 0, 3020, 0, 0, 0 },
- {1538,1539, 0, 0, 1660, 846, 0, 0 },
- {1541, 339, 0, 0, 9213, 813, 0, 0 },
- {1542,1543, 0, 0, 993, 100, 0, 0 },
- {1544,3031, 0, 0, 860, 180, 0, 0 },
- {1546,3032, 0, 0, 40000, 80, 0, 0 },
- { 338, 339, 0, 0, 40000, 200, 0, 0 },
- { 340, 341, 0, 0, 40000, 0, 0, 0 },
- {1441,1442, 0, 0, 7393, 186, 0, 0 },
- { 207, 208, 0, 0, 14373, 126, 0, 0 },
- {1466,1467, 0, 0, 40000, 66, 0, 0 },
- {1468,1469, 0, 0, 40000, 46, 0, 0 },
- { 179, 180, 0, 0, 4080, 346, 0, 0 },
- {1449,1450, 0, 0, 8313, 3373, 0, 0 },
- { 35,1470, 0, 0, 40000, 0, 0, 0 },
- { 36,1471, 0, 0, 8093, 40, 0, 0 },
- { 235, 236, 0, 0, 2393, 333, 0, 0 },
- {1483,1484, 0, 0, 40000, 0, 0, 0 },
- { 55,1487, 0, 0, 40000, 80, 0, 0 },
- {1488,1489, 0, 0, 40000, 80, 0, 0 },
- {1492,1493, 0, 0, 40000, 66, 0, 0 },
- { 256, 257, 0, 0, 40000, 53, 0, 0 },
- { 260, 261, 0, 0, 40000, 86, 0, 0 },
- {1512,1513, 0, 0, 40000, 40, 0, 0 },
- {1510,1511, 0, 0, 40000, 80, 0, 0 },
- {1496,1498, 0, 0, 40000, 73, 0, 0 },
- { 295, 296, 0, 0, 40000, 340, 0, 0 },
- {1540, 339, 0, 0, 2466, 633, 0, 0 },
- { 398, 399, 35, 0, 1860, 226, 0, 0 },
- {1516,1517, 0, 0, 40000, 660, 0, 0 },
- {1550,3033, 35, 0, 213, 26, 0, 0 },
- {1556,1557, 35, 0, 1200, 426, 0, 0 },
- {1558,1559, 35, 0, 1173, 406, 0, 0 },
- {1570,1571, 35, 0, 1160, 140, 0, 0 },
- {1608,1609, 35, 0, 2100, 320, 0, 0 },
- {1595,1596, 35, 0, 220, 273, 0, 0 },
- { 159,1597, 35, 0, 220, 266, 0, 0 },
- {1610,1611, 35, 0, 220, 273, 0, 0 },
- { 397,1588, 35, 0, 253, 86, 0, 0 },
- {1606,1607, 35, 0, 133, 66, 0, 0 },
- { 145,1576, 35, 0, 180, 0, 0, 0 },
- {1612,1613, 35, 0, 526, 400, 0, 0 },
- {1577,1578, 35, 0, 506, 453, 0, 0 },
- {1614,1615, 35, 0, 773, 933, 0, 0 },
- { 305, 306, 0, 0, 40000, 1160, 0, 0 },
- {1522,1523, 0, 0, 40000, 0, 0, 0 },
- {1550,1551, 35, 0, 526, 146, 0, 0 },
- { 364, 365, 35, 0, 186, 20, 0, 0 },
- { 129,1549, 35, 0, 326, 133, 0, 0 },
- { 132,1552, 35, 0, 226, 113, 0, 0 },
- {1553,1554, 35, 0, 206, 73, 0, 0 },
- { 129,1548, 35, 0, 326, 133, 0, 0 },
- { 134,1555, 35, 0, 2580, 893, 0, 0 },
- {1560,1561, 35, 0, 600, 366, 0, 0 },
- {1562,1563, 35, 0, 40000, 0, 0, 0 },
- {1572,1573, 35, 0, 340, 133, 0, 0 },
- {1574,1575, 35, 0, 406, 226, 0, 0 },
- {1581,1582, 35, 0, 640, 213, 0, 0 },
- { 149,1583, 35, 0, 326, 20, 0, 0 },
- {1584,1585, 35, 0, 633, 240, 0, 0 },
- {1591,1592, 35, 0, 1226, 413, 0, 0 },
- {1568,1569, 35, 0, 1313, 460, 0, 0 },
- {1579,1580, 35, 0, 326, 0, 0, 0 },
- {1586,1587, 35, 0, 606, 220, 0, 0 },
- {1589,1590, 35, 0, 120, 86, 0, 0 },
- {1600,1601, 35, 0, 1326, 420, 0, 0 },
- {1602,1603, 35, 0, 706, 266, 0, 0 },
- {1604,1605, 35, 0, 4540, 1326, 0, 0 },
- { 391, 392, 35, 0, 360, 153, 0, 0 },
- { 391, 393, 35, 0, 453, 153, 0, 0 },
- {1598,1599, 35, 0, 1246, 346, 0, 0 },
- { 367, 368, 35, 0, 600, 153, 0, 0 },
- { 380, 381, 35, 0, 40000, 0, 0, 0 },
- { 374, 375, 35, 0, 40000, 0, 0, 0 },
- {1566,1567, 35, 0, 40000, 0, 0, 0 },
- {2306,2307, 35, 0, 7660, 1560, 0, 0 },
- {3034, 339, 35, 0, 5860, 426, 0, 0 },
- {2301,2302, 35, 0, 2146, 753, 0, 0 },
- {2305,1548, 35, 0, 326, 133, 0, 0 },
+ {1593,1594, 35, 4, 1220, 413, 0, 0 },
+ {1564,1565, 35, 4, 700, 0, 0, 0 },
+ { 248,3027, 0, 4, 40000, 126, 0, 0 },
+ {1445,3028, 0, 4, 9920, 326, 0, 0 },
+ {1447,3029, 0, 4, 10133, 0, 0, 0 },
+ {1452,3030, 0, 4, 9213, 240, 0, 0 },
+ {1544,3031, 0, 4, 293, 86, 0, 0 },
+ {1546,3032, 0, 4, 40000, 153, 0, 0 },
+ { 398, 399, 35, 4, 1906, 226, 0, 0 },
+ {1550,3033, 35, 4, 66, 0, 0, 0 },
+ {1556,1557, 35, 4, 1126, 426, 0, 0 },
+ {1558,1559, 35, 4, 1126, 413, 0, 0 },
+ {1570,1571, 35, 4, 493, 100, 0, 0 },
+ {1608,1609, 35, 4, 2286, 413, 0, 0 },
+ {1595,1596, 35, 4, 220, 0, 0, 0 },
+ { 159,1597, 35, 4, 220, 273, 0, 0 },
+ {1610,1611, 35, 4, 220, 0, 0, 0 },
+ { 397,1588, 35, 4, 253, 86, 0, 0 },
+ {1606,1607, 35, 4, 140, 60, 0, 0 },
+ { 145,1576, 35, 4, 160, 0, 0, 0 },
+ {1612,1613, 35, 4, 413, 0, 0, 0 },
+ {1577,1578, 35, 4, 373, 0, 0, 0 },
+ {1614,1615, 35, 4, 706, 0, 0, 0 },
+ {1550,1551, 35, 4, 620, 240, 0, 0 },
+ { 364, 365, 35, 4, 146, 0, 0, 0 },
+ { 129,1549, 35, 4, 200, 0, 0, 0 },
+ { 132,1552, 35, 4, 213, 0, 0, 0 },
+ {1553,1554, 35, 4, 206, 73, 0, 0 },
+ { 129,1548, 35, 4, 200, 0, 0, 0 },
+ { 134,1555, 35, 4, 2233, 0, 0, 0 },
+ {1560,1561, 35, 4, 353, 146, 0, 0 },
+ {1562,1563, 35, 4, 2013, 0, 0, 0 },
+ {1572,1573, 35, 4, 346, 0, 0, 0 },
+ {1574,1575, 35, 4, 360, 0, 0, 0 },
+ {1581,1582, 35, 4, 620, 0, 0, 0 },
+ { 149,1583, 35, 4, 326, 0, 0, 0 },
+ {1584,1585, 35, 4, 200, 0, 0, 0 },
+ {1591,1592, 35, 4, 1206, 413, 0, 0 },
+ {1579,1580, 35, 4, 273, 0, 0, 0 },
+ {1586,1587, 35, 4, 200, 0, 0, 0 },
+ {1589,1590, 35, 4, 120, 86, 0, 0 },
+ {1600,1601, 35, 4, 1246, 373, 0, 0 },
+ {1602,1603, 35, 4, 700, 273, 0, 0 },
+ {1604,1605, 35, 4, 2660, 926, 0, 0 },
+ {1598,1599, 35, 4, 1300, 400, 0, 0 },
+ { 374, 375, 35, 4, 1186, 0, 0, 0 },
+ {1566,1567, 35, 4, 2333, 813, 0, 0 },
+ {2306,2307, 35, 4, 2360, 906, 0, 0 },
+ {3034, 339, 35, 6, 6, 0, 0, 0 },
+ {2305,1548, 35, 4, 200, 0, 0, 0 },
{1595,1595, 35, 0, 220, 273, 0, 0 },
- {2303,2304, 35, 0, 186, 20, 0, 0 },
- {1560,2308, 35, 0, 600, 373, 0, 0 },
- {2309,2310, 35, 0, 40000, 0, 0, 0 },
+ {2303,2304, 35, 4, 146, 0, 0, 0 },
+ {1560,2308, 35, 4, 353, 233, 0, 0 },
+ {2309,2310, 35, 4, 2013, 433, 0, 0 },
{1568,1568, 35, 0, 1280, 453, 0, 0 },
- {2311,2312, 35, 0, 360, 106, 0, 0 },
- {2313,2314, 35, 0, 620, 0, 0, 0 },
+ {2311,2312, 35, 4, 346, 146, 0, 0 },
+ {2313,2314, 35, 4, 633, 240, 0, 0 },
{2315,2315, 35, 0, 106, 0, 0, 0 },
{2316,2316, 35, 0, 506, 453, 0, 0 },
{1612,1612, 35, 0, 526, 400, 0, 0 },
@@ -7849,14 +7712,14 @@ const struct adlinsdata adlins[4815] =
{2321,2321, 35, 0, 120, 26, 0, 0 },
{2322,2322, 35, 0, 1220, 406, 0, 0 },
{2323,2323, 35, 0, 2360, 786, 0, 0 },
- {2324, 392, 35, 0, 353, 146, 0, 0 },
- {2324, 393, 35, 0, 453, 146, 0, 0 },
- {2325,2326, 35, 0, 533, 140, 0, 0 },
- {2327,2328, 35, 0, 1273, 393, 0, 0 },
- {2329,2330, 35, 0, 40000, 0, 0, 0 },
- {2331,2332, 35, 0, 40000, 0, 0, 0 },
- {3035,3036, 35, 0, 4133, 433, 0, 0 },
- {3037,3038, 35, 0, 1740, 286, 0, 0 },
+ {2324, 392, 35, 4, 180, 46, 0, 0 },
+ {2324, 393, 35, 4, 460, 66, 0, 0 },
+ {2325,2326, 35, 4, 533, 133, 0, 0 },
+ {2327,2328, 35, 4, 1273, 406, 0, 0 },
+ {2329,2330, 35, 4, 613, 0, 0, 0 },
+ {2331,2332, 35, 4, 2340, 780, 0, 0 },
+ {3035,3036, 35, 4, 1193, 433, 0, 0 },
+ {3037,3038, 35, 4, 1840, 0, 0, 0 },
{1564,1564, 35, 0, 713, 273, 0, 0 },
{3039,3039, 0, 0, 40000, 0, 0, 0 },
{3040,3040, 0, 0, 6100, 146, 0, 0 },
@@ -8181,8 +8044,8 @@ const struct adlinsdata adlins[4815] =
{3355,3355, 0, 0, 953, 13, 0, 0 },
{3356,3356, 0, 0, 293, 20, 0, 0 },
{ 142, 142, 20, 0, 1893, 620, 0, 0 },
- {3357,1451, 0, 4, 2373, 780, 0, 0 },
- {3358,3359, 0, 4, 9260, 246, 0, 0 },
+ {3357,1451, 0, 4, 2340, 780, 0, 0 },
+ {3358,3359, 0, 4, 9206, 240, 0, 0 },
{3360,1455, 0, 4, 40000, 0, 0, 0 },
{3361,1463, 0, 4, 40000, 266, 0, 0 },
{ 225,3362, 0, 4, 7993, 100, 0, 0 },
@@ -8196,9 +8059,9 @@ const struct adlinsdata adlins[4815] =
{3368,3033, 54, 4, 60, 0, 0, 0 },
{3368,3033, 57, 4, 60, 0, 0, 0 },
{3368,3033, 60, 4, 60, 0, 0, 0 },
- {3369,3370, 70, 4, 840, 0, 0, 0 },
+ {3369,3370, 70, 4, 773, 0, 0, 0 },
{1564,1565, 80, 4, 220, 0, 0, 0 },
- {3371,1571, 44, 4, 420, 0, 0, 0 },
+ {3371,1571, 44, 4, 413, 0, 0, 0 },
{3372,3372, 0, 0, 8366, 666, 0, 0 },
{3373,3373, 0, 0, 8366, 666, 0, 0 },
{3374,3374, 0, 0, 3773, 73, 0, 0 },
@@ -8854,83 +8717,101 @@ const struct adlinsdata adlins[4815] =
{ 169, 169, 68, 0, 340, 320, 0, 0 },
{ 131, 131, 48, 0, 520, 200, 0, 0 },
{3061,3061, 53, 0, 40000, 0, 0, 0 },
- {3943,3944, 0, 4, 2153, 0, 0, 0 },
- {3945,3946, 0, 4, 9060, 393, 0, 0 },
- { 174,3947, 0, 4, 6953, 0, 0, 0 },
- {3948,3949, 0, 4, 9386, 140, 0, 0 },
- { 9,3950, 0, 4, 1626, 426, 0, 0 },
- {3951,3952, 0, 4, 18466, 240, 0, 0 },
- {3953,3954, 0, 4, 4666, 1486, 0, 0 },
- { 15,3955, 0, 4, 5700, 1986, 0, 0 },
+ {3943,3944, 0, 4, 2133, 0, 0, 0 },
+ {3945,3946, 0, 4, 8966, 393, 0, 0 },
+ { 174,3947, 0, 4, 6946, 0, 0, 0 },
+ {3948,3949, 0, 4, 9320, 133, 0, 0 },
+ { 9,3950, 0, 4, 1606, 426, 0, 0 },
+ {3951,3952, 0, 4, 18373, 240, 0, 0 },
+ {3953,3954, 0, 1, 7440, 1100, 0, 0.0625 },
+ { 15,3955, 0, 4, 5640, 1986, 0, 0 },
{3956,3957, 0, 4, 40000, 100, 0, 0 },
{3958,3959, 0, 4, 40000, 73, 0, 0 },
{3960,3961, 0, 4, 40000, 73, 0, 0 },
{3962,3963, 0, 4, 40000, 73, 0, 0 },
- {3964,3965, 0, 4, 18280, 153, 0, 0 },
- {3966,3965, 0, 4, 18686, 160, 0, 0 },
- { 31,3967, 0, 4, 40000, 0, 0, 0 },
- {3968,3969, 0, 4, 17966, 100, 0, 0 },
- {3970,3971, 0, 4, 40000, 66, 0, 0 },
- {3972,3971, 0, 4, 40000, 66, 0, 0 },
- {3973,3974, 0, 4, 40000, 46, 0, 0 },
- {3975,3976, 0, 4, 18693, 106, 0, 0 },
- {3977,3976, 0, 4, 18593, 106, 0, 0 },
- {3978,3979, 0, 4, 9366, 106, 0, 0 },
- {3980,3981, 0, 4, 9120, 226, 0, 0 },
- {3982,3983, 0, 4, 40000, 140, 0, 0 },
- {3984,3985, 0, 4, 40000, 800, 0, 0 },
- { 54,3986, 0, 4, 2520, 706, 0, 0 },
- {3987,3988, 0, 4, 40000, 86, 0, 0 },
- {3989,3990, 0, 4, 40000, 233, 0, 0 },
- {3991, 253, 0, 4, 40000, 66, 0, 0 },
- {3992,3992, 0, 0, 40000, 0, 0, 0 },
- {3993,3993, 0, 0, 40000, 120, 0, 0 },
- {3994,3995, 0, 4, 40000, 80, 0, 0 },
- {3996,3997, 0, 4, 40000, 73, 0, 0 },
- {3998,3999, 0, 4, 40000, 86, 0, 0 },
- {1503,4000, 0, 4, 40000, 93, 0, 0 },
- { 88,4001, 0, 4, 40000, 1220, 0, 0 },
- {3743,4002, 0, 4, 7706, 1260, 0, 0 },
- { 92,4003, 0, 4, 40000, 186, 0, 0 },
- { 93,4004, 0, 4, 40000, 813, 0, 0 },
- { 94,4005, 0, 4, 7720, 1260, 0, 0 },
- { 96,4006, 0, 4, 40000, 2460, 0, 0 },
- { 103,4007, 0, 4, 3720, 1240, 0, 0 },
- { 104,4008, 0, 4, 3020, 1226, 0, 0 },
- { 105,4009, 0, 4, 6086, 2453, 0, 0 },
- { 107,4010, 0, 4, 2100, 760, 0, 0 },
- { 108,4011, 0, 4, 40000, 73, 0, 0 },
- { 110,4012, 0, 4, 40000, 100, 0, 0 },
- { 111,4013, 0, 4, 2366, 820, 0, 0 },
- {4014,4015, 0, 4, 1026, 326, 0, 0 },
- { 115,4016, 0, 4, 1853, 0, 0, 0 },
- { 118,4017, 0, 4, 1553, 53, 0, 0 },
- { 119,4018, 0, 4, 593, 0, 0, 0 },
- { 120,4019, 0, 4, 2293, 1173, 0, 0 },
- { 121,4020, 0, 4, 10673, 3000, 0, 0 },
- { 123,4021, 0, 4, 7413, 2486, 0, 0 },
- { 124,4022, 0, 4, 40000, 1126, 0, 0 },
- { 125,4023, 0, 4, 40000, 1546, 0, 0 },
- {4024,4024, 35, 0, 706, 266, 0, 0 },
- {4025,4026, 38, 1, 273, 106, 0, 0 },
- {4027,4028, 38, 1, 366, 133, 0, 0 },
- {4029,4030, 48, 1, 280, 133, 0, -1.90625 },
- {4031,4031, 51, 0, 113, 80, 0, 0 },
- {4032,4033, 48, 1, 953, 346, 0, -1.90625 },
- {4034,4034, 61, 1, 3200, 540, 0, 0.09375 },
- {3369,1557, 70, 4, 833, 0, 0, 0 },
- {4035,4036, 79, 1, 1306, 513, 0, 0.078125 },
- {4037,4037, 62, 0, 5200, 466, 0, 0 },
- {4038,4039, 67, 1, 2153, 1080, 0, 0.078125 },
- {4040,4040, 62, 1, 3226, 573, 0, 0.09375 },
- {4041,4042, 54, 1, 286, 133, 0, 0 },
- {4041,4043, 48, 1, 286, 126, 0, 0 },
+ {3964,3965, 0, 4, 18186, 153, 0, 0 },
+ {3966,3967, 0, 4, 18453, 153, 0, 0 },
+ { 31,3968, 0, 4, 40000, 0, 0, 0 },
+ {3969,3970, 0, 4, 17886, 100, 0, 0 },
+ {3971,3972, 0, 4, 40000, 66, 0, 0 },
+ {3973,3972, 0, 4, 40000, 66, 0, 0 },
+ {3974,3975, 0, 4, 40000, 46, 0, 0 },
+ {3976,3977, 0, 4, 18553, 106, 0, 0 },
+ {3978,3977, 0, 4, 18460, 106, 0, 0 },
+ {3979,3980, 0, 4, 9366, 106, 0, 0 },
+ {3981,3982, 0, 4, 9073, 226, 0, 0 },
+ {3983,3984, 0, 4, 40000, 140, 0, 0 },
+ {3985,3986, 0, 4, 40000, 800, 0, 0 },
+ { 54,3987, 0, 4, 2513, 706, 0, 0 },
+ {3988,3989, 0, 4, 40000, 86, 0, 0 },
+ {3990,3990, 0, 0, 40000, 126, 0, 0 },
+ {3991,3992, 0, 4, 40000, 233, 0, 0 },
+ {3993, 253, 0, 4, 40000, 66, 0, 0 },
+ {3994,3995, 0, 4, 40000, 0, 0, 0 },
+ {3996,3997, 0, 4, 40000, 126, 0, 0 },
+ {3998,3999, 0, 4, 40000, 80, 0, 0 },
+ {4000,4001, 0, 4, 40000, 73, 0, 0 },
+ {4002,4003, 0, 1, 40000, 86, 0, 0.046875 },
+ {4004,4005, 0, 4, 40000, 86, 0, 0 },
+ {1503,4006, 0, 4, 40000, 93, 0, 0 },
+ { 88,4007, 0, 4, 40000, 1220, 0, 0 },
+ {3743,4008, 0, 4, 7646, 1260, 0, 0 },
+ { 92,4009, 0, 4, 40000, 186, 0, 0 },
+ { 93,4010, 0, 4, 40000, 813, 0, 0 },
+ { 94,4011, 0, 4, 7660, 1260, 0, 0 },
+ { 96,4012, 0, 4, 40000, 2460, 0, 0 },
+ {4013,4014, 0, 4, 40000, 420, 0, 0 },
+ { 103,4015, 0, 4, 3673, 1240, 0, 0 },
+ {4016,4017, 0, 1, 6286, 380, 0, 0 },
+ {4018,4019, 0, 1, 2220, 426, 0, 0.03125 },
+ { 107,4020, 0, 4, 2086, 760, 0, 0 },
+ {4021,4022, 0, 1, 40000, 100, 0, 0.0625 },
+ { 110,4023, 0, 4, 40000, 100, 0, 0 },
+ { 111,4024, 0, 4, 2300, 820, 0, 0 },
+ {4025,4026, 0, 4, 1013, 326, 0, 0 },
+ {4027,4028, 0, 1, 1220, 393, 0, 0.03125 },
+ { 115,4029, 0, 4, 1813, 0, 0, 0 },
+ {4030,4031, 0, 1, 566, 146, 0, 0 },
+ { 118,4032, 0, 4, 1553, 53, 0, 0 },
+ {4033,4033, 0, 0, 613, 60, 0, 0 },
+ { 120,4034, 0, 4, 2126, 1166, 0, 0 },
+ {4035,4036, 0, 1, 11880, 2993, 0, 0 },
+ { 123,4037, 0, 4, 7080, 2473, 0, 0 },
+ { 124,4038, 0, 4, 40000, 1126, 0, 0 },
+ { 125,4039, 0, 4, 40000, 1546, 0, 0 },
+ {4040,4040, 34, 0, 133, 40, 0, 0 },
+ {4041,4041, 28, 0, 193, 46, 0, 0 },
+ {4042,4043, 39, 1, 553, 126, 0, 0 },
+ {4042,4043, 33, 1, 553, 126, 0, 0 },
+ {4044,4045, 63, 4, 166, 0, 0, 0 },
+ {4046,4046, 15, 0, 113, 0, 0, 0 },
+ {4047,4047, 36, 0, 106, 0, 0, 0 },
+ {4047,4048, 36, 1, 480, 173, 0, 0.40625 },
+ {4049,4049, 35, 0, 706, 266, 0, 0 },
+ {4050,4051, 38, 1, 273, 106, 0, 0 },
+ {4052,4053, 38, 1, 366, 133, 0, 0 },
+ {4054,4055, 48, 1, 280, 133, 0, -1.90625 },
+ {4056,4056, 48, 0, 180, 86, 0, 0 },
+ {4057,4058, 48, 1, 953, 346, 0, -1.90625 },
+ {4059,4059, 61, 1, 3200, 540, 0, 0.09375 },
+ {3369,1557, 70, 4, 766, 0, 0, 0 },
+ {4060,4061, 79, 1, 1306, 513, 0, 0.078125 },
+ {4062,4062, 62, 0, 5200, 466, 0, 0 },
+ {4063,4064, 67, 1, 2153, 1080, 0, 0.078125 },
+ {4065,4065, 62, 1, 3226, 573, 0, 0.09375 },
+ {4066,4067, 54, 1, 286, 133, 0, 0 },
+ {4066,4068, 48, 1, 286, 126, 0, 0 },
+ {1589,1589, 71, 0, 106, 46, 0, 0 },
{ 389, 389, 42, 0, 266, 73, 0, 0 },
- {4044,4045, 48, 1, 280, 126, 0, 0 },
- {4046,4047, 48, 1, 380, 60, 0, 0 },
- {4048,4048, 16, 0, 180, 20, 0, 0 },
- {4049,4049, 16, 0, 740, 20, 0, 0 },
- {4050,4051, 64, 4, 1366, 0, 0, 0 },
+ {4069,4070, 60, 1, 120, 80, 0, 0 },
+ {4070,4071, 60, 1, 380, 80, 0, 0 },
+ {4072,4072, 73, 0, 166, 33, 0, 0 },
+ {4073,4074, 68, 1, 153, 40, 0, 0 },
+ {4075,4076, 18, 1, 200, 80, 0, 0 },
+ {4077,4078, 18, 1, 253, 73, 0, 0 },
+ {4079,4080, 64, 4, 1346, 0, 0, 0 },
+ {4081,4082, 64, 1, 373, 73, 0, 0.03125 },
+ {4083,4083, 67, 0, 106, 26, 0, 0 },
{ 844, 844,244, 2, 6, 0, 0, 0 },
{ 855, 855,244, 2, 6, 0, 0, 0 },
{ 880, 880,232, 0, 253, 80, 0, 0 },
@@ -8962,415 +8843,388 @@ const struct adlinsdata adlins[4815] =
{ 902, 902, 35, 0, 1093, 73, 0, 0 },
{ 903, 903, 35, 0, 126, 73, 0, 0 },
{3500,3500, 35, 2, 6, 0, 0, 0 },
- {4052,4052, 0, 0, 14166, 320, 0, 0 },
- {4053,4053, 0, 0, 7413, 653, 0, 0 },
- {4054,4054, 0, 0, 40000, 146, 0, 0 },
- {4055,4055, 0, 0, 40000, 113, 0, 0 },
- {4056,4056, 0, 0, 16773, 193, 0, 0 },
- {4057,4057, 0, 0, 40000, 73, 0, 0 },
- {4058,4058, 0, 0, 40000, 0, 0, 0 },
- {4059,4059, 0, 0, 966, 373, 0, 0 },
- {4060,4060, 0, 0, 40000, 80, 0, 0 },
- {4061,4061, 0, 0, 40000, 80, 0, 0 },
- {4062,4062, 0, 0, 18473, 93, 0, 0 },
- {4063,4063, 0, 0, 40000, 60, 0, 0 },
- {4064,4064, 0, 0, 40000, 73, 0, 0 },
- {4065,4065, 0, 0, 40000, 0, 0, 0 },
- {4066,4066, 0, 0, 40000, 213, 0, 0 },
- {4067,4067, 0, 0, 40000, 66, 0, 0 },
- {4068,4068, 0, 0, 1413, 1026, 0, 0 },
- {4069,4069, 0, 0, 506, 200, 0, 0 },
- {4070,4070, 0, 0, 3793, 1106, 0, 0 },
- {4071,4071, 0, 0, 40000, 220, 0, 0 },
- {4072,4072, 0, 0, 40000, 46, 0, 0 },
- {4073,4073, 0, 0, 40000, 0, 0, 0 },
- {4074,4074, 0, 0, 40000, 60, 0, 0 },
- {4075,4075, 0, 0, 40000, 0, 0, 0 },
- {4076,4076, 0, 0, 40000, 33, 0, 0 },
- {4077,4077, 0, 0, 40000, 0, 0, 0 },
- {4078,4078, 0, 0, 40000, 146, 0, 0 },
- {4079,4079, 0, 0, 40000, 66, 0, 0 },
- {4080,4080, 0, 0, 40000, 353, 0, 0 },
- {4081,4081, 0, 0, 40000, 66, 0, 0 },
- {4082,4082, 0, 0, 40000, 53, 0, 0 },
- {4083,4083, 0, 0, 40000, 73, 0, 0 },
- {4084,4084, 0, 0, 40000, 66, 0, 0 },
- {4085,4085, 0, 0, 40000, 926, 0, 0 },
- {4086,4086, 0, 0, 2833, 200, 0, 0 },
+ {4084,4084, 0, 0, 14166, 320, 0, 0 },
+ {4085,4085, 0, 0, 7413, 653, 0, 0 },
+ {4086,4086, 0, 0, 40000, 146, 0, 0 },
+ {4087,4087, 0, 0, 40000, 113, 0, 0 },
+ {4088,4088, 0, 0, 16773, 193, 0, 0 },
+ {4089,4089, 0, 0, 40000, 73, 0, 0 },
+ {4090,4090, 0, 0, 40000, 0, 0, 0 },
+ {4091,4091, 0, 0, 966, 373, 0, 0 },
+ {4092,4092, 0, 0, 40000, 80, 0, 0 },
+ {4093,4093, 0, 0, 40000, 80, 0, 0 },
+ {4094,4094, 0, 0, 18473, 93, 0, 0 },
+ {4095,4095, 0, 0, 40000, 60, 0, 0 },
+ {4096,4096, 0, 0, 40000, 73, 0, 0 },
+ {4097,4097, 0, 0, 40000, 0, 0, 0 },
+ {4098,4098, 0, 0, 40000, 213, 0, 0 },
+ {4099,4099, 0, 0, 40000, 66, 0, 0 },
+ {4100,4100, 0, 0, 1413, 1026, 0, 0 },
+ {4101,4101, 0, 0, 506, 200, 0, 0 },
+ {4102,4102, 0, 0, 3793, 1106, 0, 0 },
+ {4103,4103, 0, 0, 40000, 220, 0, 0 },
+ {4104,4104, 0, 0, 40000, 46, 0, 0 },
+ {4105,4105, 0, 0, 40000, 0, 0, 0 },
+ {4106,4106, 0, 0, 40000, 60, 0, 0 },
+ {4107,4107, 0, 0, 40000, 0, 0, 0 },
+ {4108,4108, 0, 0, 40000, 33, 0, 0 },
+ {4109,4109, 0, 0, 40000, 0, 0, 0 },
+ {4110,4110, 0, 0, 40000, 146, 0, 0 },
+ {4111,4111, 0, 0, 40000, 66, 0, 0 },
+ {4112,4112, 0, 0, 40000, 353, 0, 0 },
+ {4113,4113, 0, 0, 40000, 66, 0, 0 },
+ {4114,4114, 0, 0, 40000, 53, 0, 0 },
+ {4115,4115, 0, 0, 40000, 73, 0, 0 },
+ {4116,4116, 0, 0, 40000, 66, 0, 0 },
+ {4117,4117, 0, 0, 40000, 926, 0, 0 },
+ {4118,4118, 0, 0, 2833, 200, 0, 0 },
{ 127, 127, 36, 0, 386, 166, 0, 0 },
- {4087,4087, 36, 0, 100, 0, 0, 0 },
+ {4119,4119, 36, 0, 100, 0, 0, 0 },
{2030,2030, 36, 0, 346, 140, 0, 0 },
{3782,3782, 48, 0, 93, 0, 0, 0 },
{3783,3783, 36, 0, 146, 0, 0, 0 },
- {4088,4088, 48, 0, 1886, 653, 0, 0 },
+ {4120,4120, 48, 0, 1886, 653, 0, 0 },
{ 132, 132, 69, 0, 126, 66, 0, 0 },
- {4088,4088, 52, 0, 1853, 626, 0, 0 },
+ {4120,4120, 52, 0, 1853, 626, 0, 0 },
{ 152, 152, 48, 0, 220, 86, 0, 0 },
- {4088,4088, 55, 0, 1886, 640, 0, 0 },
+ {4120,4120, 55, 0, 1886, 640, 0, 0 },
{ 139, 139, 57, 0, 293, 133, 0, 0 },
- {4088,4088, 58, 0, 1860, 633, 0, 0 },
- {4088,4088, 60, 0, 1886, 633, 0, 0 },
- {4089,4089, 62, 0, 2660, 900, 0, 0 },
- {4088,4088, 63, 0, 1880, 646, 0, 0 },
+ {4120,4120, 58, 0, 1860, 633, 0, 0 },
+ {4120,4120, 60, 0, 1886, 633, 0, 0 },
+ {4121,4121, 62, 0, 2660, 900, 0, 0 },
+ {4120,4120, 63, 0, 1880, 646, 0, 0 },
{ 134, 134, 70, 0, 966, 360, 0, 0 },
- {4090,4090, 70, 0, 973, 346, 0, 0 },
- {4091,4091, 53, 0, 1866, 640, 0, 0 },
+ {4122,4122, 70, 0, 973, 346, 0, 0 },
+ {4123,4123, 53, 0, 1866, 640, 0, 0 },
{3516,3516, 48, 0, 180, 93, 0, 0 },
- {4092,4092, 84, 0, 1360, 473, 0, 0 },
- {4093,4093, 43, 0, 513, 206, 0, 0 },
- {4094,4094, 56, 0, 1353, 480, 0, 0 },
+ {4124,4124, 84, 0, 1360, 473, 0, 0 },
+ {4125,4125, 43, 0, 513, 206, 0, 0 },
+ {4126,4126, 56, 0, 1353, 480, 0, 0 },
{3791,3791, 24, 0, 1866, 613, 0, 0 },
{ 134, 134, 65, 0, 1346, 486, 0, 0 },
{ 146, 146, 48, 0, 173, 93, 0, 0 },
{ 146, 146, 54, 0, 173, 93, 0, 0 },
- {4095,4095, 42, 0, 246, 140, 0, 0 },
- {4095,4095, 39, 0, 240, 133, 0, 0 },
+ {4127,4127, 42, 0, 246, 140, 0, 0 },
+ {4127,4127, 39, 0, 240, 133, 0, 0 },
{3816,3816, 52, 0, 306, 113, 0, 0 },
- {4096,4096, 52, 0, 413, 86, 0, 0 },
+ {4128,4128, 52, 0, 413, 86, 0, 0 },
{ 158, 158, 60, 0, 146, 166, 0, 0 },
{ 158, 158, 66, 0, 146, 166, 0, 0 },
{ 158, 158, 59, 0, 146, 166, 0, 0 },
{3538,3538, 91, 0, 773, 233, 0, 0 },
{3547,3547,109, 0, 5300, 1786, 0, 0 },
- {4097,4097, 79, 0, 560, 313, 0, 0 },
- {4098,4098, 0, 0, 10646, 73, 0, 0 },
- {4099,4100, 0, 1, 14166, 586, 0, 0.03125 },
- {4101,4102, 0, 1, 15553, 546, 0, 0.03125 },
- {4103,4104, 0, 1, 11746, 320, 0, 0.046875 },
- {4105,4106, 0, 1, 14706, 646, 0, 0.15625 },
- {4107,4108, 0, 1, 7320, 100, 0, 0.046875 },
- {4109,4110, 0, 1, 40000, 0, 0, 0.0625 },
- {4111,4112, 0, 1, 13660, 260, 0, 0 },
- {4113,4114, 0, 1, 15026, 133, 0, 0 },
- {4115,4116, 0, 1, 40000, 0, 0, 2.5e-05 },
- {4117,4118, 0, 1, 4980, 3400, 0, 0 },
- {4119,4120, 0, 1, 7840, 2660, 0, 0.046875 },
- {4121,4122, 0, 1, 8326, 180, 0, 0 },
- {4123,4124, 0, 1, 1093, 140, 0, 0 },
- {4125,4126, 0, 1, 2280, 400, 0, 0 },
- {4127,4128, 0, 1, 4553, 1486, 0, 0.03125 },
- {4129,4129, 0, 1, 40000, 0, 0, 0.03125 },
- {4130,4131, 0, 1, 40000, 60, 0, 0.15625 },
- {4132,4133, 0, 1, 40000, 93, 0, 0.078125 },
- {4134,4135, 0, 1, 40000, 86, 0, 0.15625 },
- {4136,4137, 0, 1, 40000, 520, 0, 0.03125 },
- {4138,4139, 0, 1, 40000, 140, 0, 0.0625 },
- {4140,4141, 0, 1, 40000, 133, 0, 0.140625 },
- {4142,4143, 0, 1, 40000, 73, 0, 0 },
- {4144,4145, 0, 1, 40000, 346, 0, 0.109375 },
- {4146,4147, 0, 1, 3693, 86, 0, 0 },
- {4148,4149, 0, 1, 6586, 460, 0, 2.5e-05 },
- {4150,4151, 0, 1, 4320, 93, 0, 0 },
- {4152,4153, 0, 1, 7346, 126, 0, 0.046875 },
- {4154,4155, 0, 1, 3633, 260, 0, 0 },
- {4156,4157, 0, 1, 40000, 126, 0, -1.95312 },
- {4158,4159, 0, 1, 40000, 126, 0, -1.9375 },
- {4160,4161, 0, 1, 40000, 46, 0, 0.234375 },
- {4162,4163, 0, 1, 40000, 0, 0, 0.03125 },
- {4164,4165, 0, 1, 10320, 86, 0, 0 },
- {4166,4167, 0, 1, 12933, 133, 0, 0 },
- {4168,4169, 0, 1, 11820, 240, 0, 0.046875 },
- {4170,4171, 0, 1, 3966, 166, 0, 0 },
- {4172,4173, 0, 1, 40000, 0, 0, 0 },
- {4174,4174, 0, 0, 2666, 160, 0, 0 },
- {4175,4176, 0, 1, 15046, 93, 0, 0.078125 },
- {4177,4178, 0, 1, 40000, 100, 0, 0 },
- {4179,4179, 0, 0, 40000, 260, 0, 0 },
- {4180,4181, 0, 1, 40000, 126, 0, 2.5e-05 },
- {4182,4182, 0, 0, 40000, 233, 0, 0 },
- {4183,4184, 0, 1, 40000, 440, 0, 0.078125 },
- {4185,4186, 0, 1, 2160, 606, 0, 0.109375 },
- {4187,4188, 0, 1, 14753, 2400, 0, 0.03125 },
- {4189,4190, 0, 1, 7680, 646, 0, 0.03125 },
- {4191,4192, 0, 1, 40000, 446, 0, 0.0625 },
- {4193,4194, 0, 1, 40000, 866, 0, -0.0625 },
- {4195,4195, 0, 1, 40000, 1220, 0, 0.078125 },
- {4196,4196, 0, 1, 40000, 1960, 0, 0.0625 },
- {4197,4198, 0, 1, 40000, 433, 0, 0.125 },
- {4199,4200, 0, 1, 40000, 140, 0, 0.140625 },
- {4201,4202, 0, 1, 40000, 806, 0, 0.109375 },
- {4203,4204, 0, 1, 2040, 486, 0, 0.125 },
- {4205,4206, 0, 1, 40000, 86, 0, 0 },
- {4207,4208, 0, 1, 40000, 80, 0, 0.03125 },
- {4209,4209, 0, 0, 40000, 73, 0, 0 },
- {4210,4210, 0, 0, 40000, 126, 0, 0 },
- {4211,4212, 0, 1, 40000, 400, 0, 0.0625 },
- {4213,4214, 0, 1, 40000, 120, 0, 0.0625 },
- {4215,4216, 0, 1, 40000, 0, 0, 0.09375 },
- {4217,4217, 0, 1, 40000, 0, 0, 0.125 },
- {4218,4219, 0, 1, 40000, 186, 0, 0 },
- {4220,4220, 0, 0, 40000, 166, 0, 0 },
- {4221,4221, 0, 0, 40000, 73, 0, 0 },
- {4222,4222, 0, 0, 40000, 60, 0, 0 },
- {4223,4224, 0, 1, 40000, 140, 0, 0 },
- {4225,4225, 0, 0, 40000, 140, 0, 0 },
- {4226,4226, 0, 0, 40000, 66, 0, 0 },
- {4227,4228, 0, 1, 40000, 133, 0, 0 },
- {4229,4229, 0, 0, 40000, 86, 0, 0 },
- {4230,4230, 0, 0, 40000, 73, 0, 0 },
- {4231,4231, 0, 0, 40000, 106, 0, 0 },
- {4232,4233, 0, 1, 40000, 186, 0, 0.03125 },
- {4234,4235, 0, 1, 40000, 86, 0, 0.046875 },
- {4236,4237, 0, 1, 40000, 0, 0, 0.03125 },
- {4238,4238, 0, 0, 40000, 300, 0, 0 },
- {4239,4239, 0, 0, 40000, 66, 0, 0 },
- {4240,4241, 0, 1, 40000, 73, 0, 0.125 },
- {4242,4243, 0, 1, 40000, 86, 0, 0.109375 },
- {4244,4245, 0, 1, 40000, 146, 0, 0.109375 },
- {4246,4247, 0, 1, 40000, 66, 0, -0.03125 },
- {4248,4248, 0, 0, 40000, 60, 0, 0 },
- {4249,4250, 0, 1, 40000, 213, 0, 0.15625 },
- {4251,4252, 0, 1, 40000, 66, 0, 0.125 },
- {4253,4254, 0, 1, 40000, 100, 0, 0.03125 },
- {4255,4256, 0, 1, 40000, 1513, 0, 0.078125 },
- {4257,4258, 0, 1, 40000, 353, 0, 0.109375 },
- {4259,4260, 0, 1, 40000, 133, 0, 0.078125 },
- {4261,4262, 0, 1, 40000, 746, 0, 0.140625 },
- {4263,4264, 0, 1, 40000, 0, 0, 0.109375 },
- {4265,4266, 0, 1, 5033, 1606, 0, 0.0625 },
- {4267,4268, 0, 1, 40000, 1146, 0, 0.09375 },
- {4269,4270, 0, 1, 40000, 1586, 0, 0.109375 },
- {4271,4272, 0, 1, 40000, 0, 0, 0.09375 },
- {4273,4274, 0, 1, 40000, 1006, 0, 0.125 },
- {4275,4275, 0, 1, 2680, 793, 0, 0.109375 },
- {4276,4277, 0, 1, 40000, 0, 0, -0.046875 },
- {4278,4279, 0, 1, 9000, 3186, 0, 0.125 },
- {4280,4281, 0, 1, 40000, 1073, 0, -0.078125 },
- {4282,4283, 0, 1, 40000, 2093, 0, 0.140625 },
- {4284,4285, 0, 1, 40000, 0, 0, 0.078125 },
- {4286,4287, 0, 1, 9580, 713, 0, 0.03125 },
- {4288,4289, 0, 1, 6286, 380, 0, 0 },
- {4290,4291, 0, 1, 2220, 426, 0, 0.03125 },
- {4292,4292, 0, 0, 1166, 760, 0, 0 },
- {4293,4294, 0, 1, 1186, 240, 0, 0 },
- {4295,4296, 0, 1, 40000, 100, 0, 0.0625 },
- {4297,4297, 0, 0, 40000, 160, 0, 0 },
- {4298,4298, 0, 0, 40000, 120, 0, 0 },
- {4299,4299, 0, 0, 8673, 2413, 0, 0 },
- {4300,4300, 0, 0, 393, 126, 0, 0 },
- {4301,4302, 0, 1, 1220, 393, 0, 0.03125 },
- {4303,4303, 0, 0, 246, 93, 0, 0 },
- {4304,4305, 0, 1, 1953, 393, 0, 0 },
- {4306,4307, 0, 1, 566, 146, 0, 0 },
- {4308,4309, 0, 1, 4220, 133, 0, 0 },
- {4310,4311, 0, 1, 2873, 73, 0, 0.109375 },
- {4312,4312, 0, 0, 613, 60, 0, 0 },
- {4313,4314, 0, 1, 40000, 186, 0, 0 },
- {4315,4316, 0, 1, 11880, 2993, 0, 0 },
- {4317,4317, 0, 0, 1573, 86, 0, 0 },
- {4318,4319, 0, 1, 40000, 793, 0, 0 },
- {4320,4321, 0, 1, 40000, 173, 0, 0 },
- {4322,4323, 0, 1, 40000, 793, 0, 0 },
- {4324,4324, 0, 0, 606, 133, 0, 0 },
- {4325,4325, 34, 0, 133, 40, 0, 0 },
- {4326,4326, 28, 0, 193, 46, 0, 0 },
- {4327,4328, 39, 1, 553, 126, 0, 0 },
- {4327,4328, 33, 1, 553, 126, 0, 0 },
- {4329,4330, 63, 1, 160, 80, 0, 0 },
- {4331,4331, 15, 0, 113, 0, 0, 0 },
- {4332,4332, 36, 0, 106, 0, 0, 0 },
- {4332,4333, 36, 1, 480, 173, 0, 0.40625 },
- {4334,4335, 25, 1, 313, 153, 0, 0 },
- {4336,4335, 25, 1, 206, 100, 0, 0 },
- {4337,4338, 61, 1, 153, 93, 0, 0 },
- {4339,4340, 38, 1, 340, 133, 0, 0 },
- {4341,4342, 37, 1, 206, 93, 0, 0 },
- {4343,4344, 15, 1, 346, 153, 10, 0 },
- {4345,4346,100, 1, 146, 0, 0, 0.140625 },
- {4347,4348, 19, 1, 553, 200, 10, 0 },
- {4349,4349, 48, 0, 180, 86, 0, 0 },
- {4350,4351, 15, 1, 333, 153, 20, 0 },
- {4352,4353, 12, 1, 340, 146, 20, 0 },
- {4354,4355, 11, 1, 346, 146, 20, 0 },
- {4356,4357, 61, 1, 2706, 1033, 0, 0.09375 },
- {4358,4355, 8, 1, 340, 146, 20, 0 },
- {4359,4360, 91, 1, 1166, 366, 0, -0.046875 },
- {4361,4361, 70, 0, 966, 346, 0, 0 },
- {4362,4363, 80, 1, 300, 93, 0, 0.125 },
- {4364,4364, 58, 0, 206, 53, 0, 0 },
- {4365,4357, 62, 1, 2333, 820, 0, 0.09375 },
- {4366,4367, 31, 1, 773, 200, 0, 0 },
- {4368,4360, 91, 1, 1160, 360, 0, -0.03125 },
- {4369,4370, 41, 1, 373, 113, 0, 0 },
- {4371,4372, 35, 1, 406, 126, 0, 0 },
- {4373,4374, 29, 1, 146, 106, 0, 0 },
- {4375,4376, 41, 1, 400, 126, 0, 0 },
- {4375,4376, 37, 1, 400, 126, 0, 0 },
- {4377,4378, 54, 1, 286, 133, 0, 0 },
- {4377,4379, 48, 1, 286, 126, 0, 0 },
- {4380,4381, 77, 1, 193, 93, 0, 0 },
- {4382,4383, 72, 1, 200, 93, 0, 0 },
- {4384,4384, 40, 0, 513, 0, 0, 0 },
- {4385,4385, 38, 0, 200, 20, 0, 0 },
- {4386,4386, 36, 0, 620, 20, 0, 0 },
- {4387,4388, 60, 1, 120, 80, 0, 0 },
- {4388,4389, 60, 1, 380, 80, 0, 0 },
- {4390,4390, 73, 0, 166, 33, 0, 0 },
- {4391,4392, 68, 1, 153, 40, 0, 0 },
- {4393,4394, 18, 1, 200, 80, 0, 0 },
- {4395,4396, 18, 1, 253, 73, 0, 0 },
- {4397,4397, 90, 0, 193, 20, 0, 0 },
- {4398,4398, 90, 0, 793, 40, 0, 0 },
- {4399,4400, 64, 1, 373, 73, 0, 0.03125 },
- {4401,4402, 80, 1, 406, 153, 0, 0.03125 },
- {4403,4404, 64, 1, 1866, 606, 0, 0 },
- {4405,4405, 67, 0, 106, 26, 0, 0 },
- {4406,4407, 50, 1, 173, 0, 0, 0 },
- {4408,4408, 36, 0, 4646, 0, 0, 0 },
- {4409,4409, 0, 0, 40000, 86, 0, 0 },
- {4410,4410, 0, 0, 40000, 73, 0, 0 },
- {4411,4411, 0, 0, 2433, 700, 0, 0 },
- {4412,4412, 0, 0, 1233, 26, 0, 0 },
- {4413,4413, 0, 0, 40000, 66, 0, 0 },
- {4414,4414, 0, 0, 40000, 60, 0, 0 },
- {4415,4415, 0, 0, 40000, 60, 0, 0 },
- {4416,4416, 0, 0, 40000, 66, 0, 0 },
- {4417,4417, 0, 0, 40000, 66, 0, 0 },
- {4418,4418, 0, 0, 40000, 0, 0, 0 },
- {4418,4418, 73, 0, 40000, 0, 0, 0 },
- {4419,4419, 0, 0, 40000, 60, 0, 0 },
- {4420,4420, 0, 0, 40000, 60, 0, 0 },
- {4421,4421, 0, 0, 7326, 2486, 0, 0 },
- {4422,4422, 0, 0, 4886, 1586, 0, 0 },
- {4423,4423, 0, 0, 646, 20, 0, 0 },
- {4424,4424, 0, 0, 253, 20, 0, 0 },
- {4424,4424, 12, 0, 253, 20, 0, 0 },
- {4425,4425, 0, 0, 640, 100, 0, 0 },
- {4425,4425, 1, 0, 640, 106, 0, 0 },
- {4426,4426, 0, 0, 133, 106, 0, 0 },
- {4426,4426, 23, 0, 133, 106, 0, 0 },
- {4427,4427, 0, 0, 653, 100, 0, 0 },
- {4428,4428, 0, 0, 4166, 1546, 0, 0 },
- {4429,4429, 0, 0, 40000, 73, 0, 0 },
- {4430,4430, 0, 0, 40000, 60, 0, 0 },
- {4431,4431, 0, 0, 40000, 53, 0, 0 },
- {4432,4432, 0, 0, 40000, 0, 0, 0 },
- {4433,4433, 0, 0, 246, 20, 0, 0 },
- {4434,4434, 0, 2, 6, 0, 0, 0 },
- {4435,4435, 0, 0, 4946, 233, 0, 0 },
- {4436,4436, 0, 0, 4946, 233, 0, 0 },
- {4437,4437, 0, 0, 4953, 240, 0, 0 },
- {4438,4438, 0, 0, 4946, 233, 0, 0 },
- {4439,4439, 0, 0, 18233, 46, 0, 0 },
- {4440,4440, 0, 0, 2386, 26, 0, 0 },
- {4441,4441, 0, 0, 4640, 633, 0, 0 },
- {4442,4442, 0, 0, 18466, 100, 0, 0 },
- {4443,4443, 0, 0, 18440, 66, 0, -2 },
- {4444,4444, 0, 0, 18440, 6140, 0, -2 },
- {4445,4445, 0, 0, 1206, 433, 0, -2 },
- {4446,4446, 0, 0, 4626, 240, 0, 0 },
- {4447,4447, 0, 0, 726, 400, 0, 0 },
- {4448,4448, 0, 0, 5866, 73, 0, 0 },
- {4449,4449, 0, 0, 40000, 73, 0, 0 },
- {4450,4450, 0, 0, 40000, 73, 0, 0 },
- {4451,4451, 0, 0, 40000, 73, 0, 0 },
- {4452,4452, 0, 0, 40000, 73, 0, 0 },
- {4453,4453, 0, 0, 6500, 346, 0, 0 },
- {4454,4454, 0, 0, 6506, 346, 0, 0 },
- {4455,4455, 0, 0, 40000, 66, 0, -2 },
- {4456,4456, 0, 0, 40000, 66, 0, -2 },
- {4457,4457, 0, 0, 40000, 0, 0, 0 },
- {4458,4458, 0, 0, 40000, 46, 0, 0 },
- {4459,4459, 0, 0, 40000, 0, 0, 0 },
- {4459,4459, 0, 0, 40000, 0, 0, -2 },
- {4460,4460, 0, 0, 2386, 26, 0, 0 },
- {4461,4461, 0, 0, 40000, 73, 0, -2 },
- {4462,4462, 0, 0, 5866, 26, 0, -2 },
- {4463,4463, 0, 0, 40000, 133, 0, 0 },
- {4464,4464, 0, 0, 40000, 133, 0, 0 },
- {4465,4465, 0, 0, 40000, 126, 0, 0 },
- {4466,4466, 0, 0, 253, 20, 0, 0 },
- {4467,4467, 0, 0, 8866, 1366, 0, 0 },
- {4468,4468, 0, 0, 1040, 766, 0, 0 },
- {4469,4469, 0, 0, 40000, 146, 0, -2 },
- {4470,4470, 0, 0, 40000, 153, 0, -2 },
- {4471,4471, 0, 0, 40000, 466, 0, -2 },
- {4472,4472, 0, 0, 40000, 66, 0, 0 },
- {4473,4473, 0, 0, 2333, 566, 0, 0 },
- {4474,4474, 0, 0, 40000, 140, 0, -2 },
- {4475,4475, 0, 0, 40000, 100, 0, -2 },
- {4476,4476, 0, 0, 40000, 226, 0, -2 },
- {4477,4477, 0, 0, 40000, 0, 0, 0 },
+ {4129,4129, 79, 0, 560, 313, 0, 0 },
+ {4130,4130, 0, 0, 10646, 73, 0, 0 },
+ {4131,4132, 0, 1, 14166, 586, 0, 0.03125 },
+ {4133,4134, 0, 1, 15553, 546, 0, 0.03125 },
+ {4135,4136, 0, 1, 11746, 320, 0, 0.046875 },
+ {4137,4138, 0, 1, 14706, 646, 0, 0.15625 },
+ {4139,4140, 0, 1, 7320, 100, 0, 0.046875 },
+ {4141,4142, 0, 1, 40000, 0, 0, 0.0625 },
+ {4143,4144, 0, 1, 13660, 260, 0, 0 },
+ {4145,4146, 0, 1, 15026, 133, 0, 0 },
+ {4147,4148, 0, 1, 40000, 0, 0, 2.5e-05 },
+ {4149,4150, 0, 1, 4980, 3400, 0, 0 },
+ {4151,4152, 0, 1, 7840, 2660, 0, 0.046875 },
+ {4153,4154, 0, 1, 8326, 180, 0, 0 },
+ {4155,4156, 0, 1, 1093, 140, 0, 0 },
+ {4157,4158, 0, 1, 2280, 400, 0, 0 },
+ {4159,4160, 0, 1, 4553, 1486, 0, 0.03125 },
+ {4161,4161, 0, 1, 40000, 0, 0, 0.03125 },
+ {4162,4163, 0, 1, 40000, 60, 0, 0.15625 },
+ {4164,4165, 0, 1, 40000, 93, 0, 0.078125 },
+ {4166,4167, 0, 1, 40000, 86, 0, 0.15625 },
+ {4168,4169, 0, 1, 40000, 520, 0, 0.03125 },
+ {4170,4171, 0, 1, 40000, 140, 0, 0.0625 },
+ {4172,4173, 0, 1, 40000, 133, 0, 0.140625 },
+ {4174,4175, 0, 1, 40000, 73, 0, 0 },
+ {4176,4177, 0, 1, 40000, 346, 0, 0.109375 },
+ {4178,4179, 0, 1, 3693, 86, 0, 0 },
+ {4180,4181, 0, 1, 6586, 460, 0, 2.5e-05 },
+ {4182,4183, 0, 1, 4320, 93, 0, 0 },
+ {4184,4185, 0, 1, 7346, 126, 0, 0.046875 },
+ {4186,4187, 0, 1, 3633, 260, 0, 0 },
+ {4188,4189, 0, 1, 40000, 126, 0, -1.95312 },
+ {4190,4191, 0, 1, 40000, 126, 0, -1.9375 },
+ {4192,4193, 0, 1, 40000, 46, 0, 0.234375 },
+ {4194,4195, 0, 1, 40000, 0, 0, 0.03125 },
+ {4196,4197, 0, 1, 10320, 86, 0, 0 },
+ {4198,4199, 0, 1, 12933, 133, 0, 0 },
+ {4200,4201, 0, 1, 11820, 240, 0, 0.046875 },
+ {4202,4203, 0, 1, 3966, 166, 0, 0 },
+ {4204,4205, 0, 1, 40000, 0, 0, 0 },
+ {4206,4206, 0, 0, 2666, 160, 0, 0 },
+ {4207,4208, 0, 1, 15046, 93, 0, 0.078125 },
+ {4209,4210, 0, 1, 40000, 100, 0, 0 },
+ {4211,4211, 0, 0, 40000, 260, 0, 0 },
+ {4212,4213, 0, 1, 40000, 126, 0, 2.5e-05 },
+ {4214,4214, 0, 0, 40000, 233, 0, 0 },
+ {4215,4216, 0, 1, 40000, 440, 0, 0.078125 },
+ {4217,4218, 0, 1, 2160, 606, 0, 0.109375 },
+ {4219,4220, 0, 1, 14753, 2400, 0, 0.03125 },
+ {4221,4222, 0, 1, 7680, 646, 0, 0.03125 },
+ {4223,4224, 0, 1, 40000, 446, 0, 0.0625 },
+ {4225,4226, 0, 1, 40000, 866, 0, -0.0625 },
+ {4227,4227, 0, 1, 40000, 1220, 0, 0.078125 },
+ {4228,4228, 0, 1, 40000, 1960, 0, 0.0625 },
+ {4229,4230, 0, 1, 40000, 433, 0, 0.125 },
+ {4231,4232, 0, 1, 40000, 140, 0, 0.140625 },
+ {4233,4234, 0, 1, 40000, 806, 0, 0.109375 },
+ {4235,4236, 0, 1, 2040, 486, 0, 0.125 },
+ {4237,4238, 0, 1, 40000, 86, 0, 0 },
+ {4239,4240, 0, 1, 40000, 80, 0, 0.03125 },
+ {4241,4241, 0, 0, 40000, 73, 0, 0 },
+ {4242,4243, 0, 1, 40000, 400, 0, 0.0625 },
+ {4244,4245, 0, 1, 40000, 120, 0, 0.0625 },
+ {4246,4247, 0, 1, 40000, 0, 0, 0.09375 },
+ {4248,4248, 0, 1, 40000, 0, 0, 0.125 },
+ {4249,4250, 0, 1, 40000, 186, 0, 0 },
+ {4251,4251, 0, 0, 40000, 166, 0, 0 },
+ {4252,4252, 0, 0, 40000, 73, 0, 0 },
+ {4253,4253, 0, 0, 40000, 60, 0, 0 },
+ {4254,4255, 0, 1, 40000, 140, 0, 0 },
+ {4256,4256, 0, 0, 40000, 140, 0, 0 },
+ {4257,4257, 0, 0, 40000, 66, 0, 0 },
+ {4258,4259, 0, 1, 40000, 133, 0, 0 },
+ {4260,4260, 0, 0, 40000, 86, 0, 0 },
+ {4261,4261, 0, 0, 40000, 73, 0, 0 },
+ {4262,4262, 0, 0, 40000, 106, 0, 0 },
+ {4263,4264, 0, 1, 40000, 186, 0, 0.03125 },
+ {4265,4266, 0, 1, 40000, 0, 0, 0.03125 },
+ {4267,4267, 0, 0, 40000, 300, 0, 0 },
+ {4268,4268, 0, 0, 40000, 66, 0, 0 },
+ {4269,4270, 0, 1, 40000, 73, 0, 0.125 },
+ {4271,4272, 0, 1, 40000, 86, 0, 0.109375 },
+ {4273,4274, 0, 1, 40000, 146, 0, 0.109375 },
+ {4275,4276, 0, 1, 40000, 66, 0, -0.03125 },
+ {4277,4277, 0, 0, 40000, 60, 0, 0 },
+ {4278,4279, 0, 1, 40000, 213, 0, 0.15625 },
+ {4280,4281, 0, 1, 40000, 66, 0, 0.125 },
+ {4282,4283, 0, 1, 40000, 100, 0, 0.03125 },
+ {4284,4285, 0, 1, 40000, 1513, 0, 0.078125 },
+ {4286,4287, 0, 1, 40000, 353, 0, 0.109375 },
+ {4288,4289, 0, 1, 40000, 133, 0, 0.078125 },
+ {4290,4291, 0, 1, 40000, 746, 0, 0.140625 },
+ {4292,4293, 0, 1, 40000, 0, 0, 0.109375 },
+ {4294,4295, 0, 1, 5033, 1606, 0, 0.0625 },
+ {4296,4297, 0, 1, 40000, 1146, 0, 0.09375 },
+ {4298,4299, 0, 1, 40000, 1586, 0, 0.109375 },
+ {4300,4301, 0, 1, 40000, 0, 0, 0.09375 },
+ {4302,4303, 0, 1, 40000, 1006, 0, 0.125 },
+ {4304,4304, 0, 1, 2680, 793, 0, 0.109375 },
+ {4305,4306, 0, 1, 40000, 0, 0, -0.046875 },
+ {4307,4308, 0, 1, 9000, 3186, 0, 0.125 },
+ {4309,4310, 0, 1, 40000, 1073, 0, -0.078125 },
+ {4311,4312, 0, 1, 40000, 2093, 0, 0.140625 },
+ {4313,4314, 0, 1, 40000, 0, 0, 0.078125 },
+ {4315,4316, 0, 1, 9580, 713, 0, 0.03125 },
+ {4317,4317, 0, 0, 1166, 760, 0, 0 },
+ {4318,4319, 0, 1, 1186, 240, 0, 0 },
+ {4320,4320, 0, 0, 40000, 160, 0, 0 },
+ {4321,4321, 0, 0, 40000, 120, 0, 0 },
+ {4322,4322, 0, 0, 8673, 2413, 0, 0 },
+ {4323,4323, 0, 0, 393, 126, 0, 0 },
+ {4324,4324, 0, 0, 246, 93, 0, 0 },
+ {4325,4326, 0, 1, 1953, 393, 0, 0 },
+ {4327,4328, 0, 1, 4220, 133, 0, 0 },
+ {4329,4330, 0, 1, 2873, 73, 0, 0.109375 },
+ {4331,4332, 0, 1, 40000, 186, 0, 0 },
+ {4333,4333, 0, 0, 1573, 86, 0, 0 },
+ {4334,4335, 0, 1, 40000, 793, 0, 0 },
+ {4336,4337, 0, 1, 40000, 173, 0, 0 },
+ {4338,4339, 0, 1, 40000, 793, 0, 0 },
+ {4340,4340, 0, 0, 606, 133, 0, 0 },
+ {4044,4341, 63, 1, 160, 80, 0, 0 },
+ {4342,4343, 25, 1, 313, 153, 0, 0 },
+ {4344,4343, 25, 1, 206, 100, 0, 0 },
+ {4345,4346, 61, 1, 153, 93, 0, 0 },
+ {4347,4348, 38, 1, 340, 133, 0, 0 },
+ {4349,4350, 37, 1, 206, 93, 0, 0 },
+ {4351,4352, 15, 1, 346, 153, 10, 0 },
+ {4353,4354,100, 1, 146, 0, 0, 0.140625 },
+ {4355,4356, 19, 1, 553, 200, 10, 0 },
+ {4357,4358, 15, 1, 333, 153, 20, 0 },
+ {4359,4360, 12, 1, 340, 146, 20, 0 },
+ {4361,4362, 11, 1, 346, 146, 20, 0 },
+ {4363,4364, 61, 1, 2706, 1033, 0, 0.09375 },
+ {4365,4362, 8, 1, 340, 146, 20, 0 },
+ {4366,4367, 91, 1, 1166, 366, 0, -0.046875 },
+ {4368,4368, 70, 0, 966, 346, 0, 0 },
+ {4369,4370, 80, 1, 300, 93, 0, 0.125 },
+ {4371,4371, 58, 0, 206, 53, 0, 0 },
+ {4372,4364, 62, 1, 2333, 820, 0, 0.09375 },
+ {4373,4374, 31, 1, 773, 200, 0, 0 },
+ {4375,4367, 91, 1, 1160, 360, 0, -0.03125 },
+ {4376,4377, 41, 1, 373, 113, 0, 0 },
+ {4378,4379, 35, 1, 406, 126, 0, 0 },
+ {4380,4381, 29, 1, 146, 106, 0, 0 },
+ {4382,4383, 41, 1, 400, 126, 0, 0 },
+ {4382,4383, 37, 1, 400, 126, 0, 0 },
+ {4384,4385, 77, 1, 193, 93, 0, 0 },
+ {4386,4387, 72, 1, 200, 93, 0, 0 },
+ {4388,4388, 40, 0, 513, 0, 0, 0 },
+ {4389,4389, 38, 0, 200, 20, 0, 0 },
+ {4390,4390, 36, 0, 620, 20, 0, 0 },
+ {4391,4391, 90, 0, 193, 20, 0, 0 },
+ {4392,4392, 90, 0, 793, 40, 0, 0 },
+ {4393,4394, 80, 1, 406, 153, 0, 0.03125 },
+ {4395,4396, 64, 1, 1866, 606, 0, 0 },
+ {4397,4398, 50, 1, 173, 0, 0, 0 },
+ {4399,4399, 36, 0, 4646, 0, 0, 0 },
+ {4400,4400, 0, 0, 40000, 86, 0, 0 },
+ {4401,4401, 0, 0, 40000, 73, 0, 0 },
+ {4402,4402, 0, 0, 2433, 700, 0, 0 },
+ {4403,4403, 0, 0, 1233, 26, 0, 0 },
+ {4404,4404, 0, 0, 40000, 66, 0, 0 },
+ {4405,4405, 0, 0, 40000, 60, 0, 0 },
+ {4406,4406, 0, 0, 40000, 60, 0, 0 },
+ {4407,4407, 0, 0, 40000, 66, 0, 0 },
+ {4408,4408, 0, 0, 40000, 66, 0, 0 },
+ {4409,4409, 0, 0, 40000, 0, 0, 0 },
+ {4409,4409, 73, 0, 40000, 0, 0, 0 },
+ {4410,4410, 0, 0, 40000, 60, 0, 0 },
+ {4411,4411, 0, 0, 40000, 60, 0, 0 },
+ {4412,4412, 0, 0, 7326, 2486, 0, 0 },
+ {4413,4413, 0, 0, 4886, 1586, 0, 0 },
+ {4414,4414, 0, 0, 646, 20, 0, 0 },
+ {4415,4415, 0, 0, 253, 20, 0, 0 },
+ {4415,4415, 12, 0, 253, 20, 0, 0 },
+ {4416,4416, 0, 0, 640, 100, 0, 0 },
+ {4416,4416, 1, 0, 640, 106, 0, 0 },
+ {4417,4417, 0, 0, 133, 106, 0, 0 },
+ {4417,4417, 23, 0, 133, 106, 0, 0 },
+ {4418,4418, 0, 0, 653, 100, 0, 0 },
+ {4419,4419, 0, 0, 4166, 1546, 0, 0 },
+ {4420,4420, 0, 0, 40000, 73, 0, 0 },
+ {4421,4421, 0, 0, 40000, 60, 0, 0 },
+ {4422,4422, 0, 0, 40000, 53, 0, 0 },
+ {4423,4423, 0, 0, 40000, 0, 0, 0 },
+ {4424,4424, 0, 0, 246, 20, 0, 0 },
+ {4425,4425, 0, 2, 6, 0, 0, 0 },
+ {4426,4426, 0, 0, 4946, 233, 0, 0 },
+ {4427,4427, 0, 0, 4946, 233, 0, 0 },
+ {4428,4428, 0, 0, 4953, 240, 0, 0 },
+ {4429,4429, 0, 0, 4946, 233, 0, 0 },
+ {4430,4430, 0, 0, 18233, 46, 0, 0 },
+ {4431,4431, 0, 0, 2386, 26, 0, 0 },
+ {4432,4432, 0, 0, 4640, 633, 0, 0 },
+ {4433,4433, 0, 0, 18466, 100, 0, 0 },
+ {4434,4434, 0, 0, 18440, 66, 0, -2 },
+ {4435,4435, 0, 0, 18440, 6140, 0, -2 },
+ {4436,4436, 0, 0, 1206, 433, 0, -2 },
+ {4437,4437, 0, 0, 4626, 240, 0, 0 },
+ {4438,4438, 0, 0, 726, 400, 0, 0 },
+ {4439,4439, 0, 0, 5866, 73, 0, 0 },
+ {4440,4440, 0, 0, 40000, 73, 0, 0 },
+ {4441,4441, 0, 0, 40000, 73, 0, 0 },
+ {4442,4442, 0, 0, 40000, 73, 0, 0 },
+ {4443,4443, 0, 0, 40000, 73, 0, 0 },
+ {4444,4444, 0, 0, 6500, 346, 0, 0 },
+ {4445,4445, 0, 0, 6506, 346, 0, 0 },
+ {4446,4446, 0, 0, 40000, 66, 0, -2 },
+ {4447,4447, 0, 0, 40000, 66, 0, -2 },
+ {4448,4448, 0, 0, 40000, 0, 0, 0 },
+ {4449,4449, 0, 0, 40000, 46, 0, 0 },
+ {4450,4450, 0, 0, 40000, 0, 0, 0 },
+ {4450,4450, 0, 0, 40000, 0, 0, -2 },
+ {4451,4451, 0, 0, 2386, 26, 0, 0 },
+ {4452,4452, 0, 0, 40000, 73, 0, -2 },
+ {4453,4453, 0, 0, 5866, 26, 0, -2 },
+ {4454,4454, 0, 0, 40000, 133, 0, 0 },
+ {4455,4455, 0, 0, 40000, 133, 0, 0 },
+ {4456,4456, 0, 0, 40000, 126, 0, 0 },
+ {4457,4457, 0, 0, 253, 20, 0, 0 },
+ {4458,4458, 0, 0, 8866, 1366, 0, 0 },
+ {4459,4459, 0, 0, 1040, 766, 0, 0 },
+ {4460,4460, 0, 0, 40000, 146, 0, -2 },
+ {4461,4461, 0, 0, 40000, 153, 0, -2 },
+ {4462,4462, 0, 0, 40000, 466, 0, -2 },
+ {4463,4463, 0, 0, 40000, 66, 0, 0 },
+ {4464,4464, 0, 0, 2333, 566, 0, 0 },
+ {4465,4465, 0, 0, 40000, 140, 0, -2 },
+ {4466,4466, 0, 0, 40000, 100, 0, -2 },
+ {4467,4467, 0, 0, 40000, 226, 0, -2 },
+ {4468,4468, 0, 0, 40000, 0, 0, 0 },
{3712,3712, 0, 0, 40000, 226, 0, -2 },
- {4478,4478, 0, 0, 40000, 140, 0, -2 },
- {4479,4479, 0, 0, 40000, 66, 0, 0 },
- {4480,4480, 0, 0, 40000, 73, 0, 0 },
+ {4469,4469, 0, 0, 40000, 140, 0, -2 },
+ {4470,4470, 0, 0, 40000, 66, 0, 0 },
+ {4471,4471, 0, 0, 40000, 73, 0, 0 },
+ {4472,4472, 0, 0, 40000, 73, 0, 0 },
+ {4473,4473, 0, 0, 40000, 86, 0, -2 },
+ {4474,4474, 0, 0, 40000, 80, 0, 0 },
+ {4475,4475, 0, 0, 40000, 73, 0, -2 },
+ {4476,4476, 0, 0, 40000, 80, 0, -2 },
+ {4477,4477, 0, 0, 40000, 73, 0, -2 },
+ {4478,4478, 0, 0, 40000, 73, 0, 0 },
+ {4479,4479, 0, 0, 40000, 73, 0, 0 },
+ {4480,4480, 0, 0, 40000, 93, 0, 0 },
{4481,4481, 0, 0, 40000, 73, 0, 0 },
- {4482,4482, 0, 0, 40000, 86, 0, -2 },
- {4483,4483, 0, 0, 40000, 80, 0, 0 },
- {4484,4484, 0, 0, 40000, 73, 0, -2 },
- {4485,4485, 0, 0, 40000, 80, 0, -2 },
- {4486,4486, 0, 0, 40000, 73, 0, -2 },
- {4487,4487, 0, 0, 40000, 73, 0, 0 },
- {4488,4488, 0, 0, 40000, 73, 0, 0 },
- {4489,4489, 0, 0, 40000, 93, 0, 0 },
- {4490,4490, 0, 0, 40000, 73, 0, 0 },
- {4491,4491, 0, 0, 11946, 13, 0, 0 },
- {4492,4492, 0, 0, 40000, 73, 0, 0 },
- {4462,4462, 0, 0, 5866, 26, 0, 0 },
- {4493,4493, 0, 0, 40000, 820, 0, 0 },
- {4494,4494, 0, 0, 2153, 873, 0, 0 },
+ {4482,4482, 0, 0, 11946, 13, 0, 0 },
+ {4483,4483, 0, 0, 40000, 73, 0, 0 },
+ {4453,4453, 0, 0, 5866, 26, 0, 0 },
+ {4484,4484, 0, 0, 40000, 820, 0, 0 },
+ {4485,4485, 0, 0, 2153, 873, 0, 0 },
{1221,1221, 0, 0, 40000, 293, 0, 0.171875 },
- {4495,4495, 0, 0, 1620, 120, 0, 0 },
- {4496,4496, 0, 0, 15120, 93, 0, 0 },
- {4497,4497, 0, 0, 14613, 93, 0, 0 },
- {4498,4498, 0, 0, 2346, 793, 0, 0 },
- {4499,4499, 0, 0, 40000, 2380, 0, 0 },
- {4500,4500, 0, 0, 40000, 1280, 0, 0 },
- {4501,4501, 0, 0, 40000, 1460, 0, 0 },
- {4502,4502, 0, 0, 40000, 2513, 0, 0 },
- {4503,4503, 0, 0, 14840, 1266, 0, 0 },
- {4504,4504, 0, 0, 4513, 640, 0, 0 },
- {4505,4505, 0, 0, 4680, 806, 0, 0 },
- {4506,4506, 0, 0, 40000, 100, 0, 0 },
- {4507,4507, 0, 0, 40000, 66, 0, 0 },
- {4508,4508, 0, 0, 2420, 413, 0, 0 },
- {4509,4509, 0, 0, 406, 73, 0, -2 },
- {4510,4510, 0, 0, 1166, 400, 0, 0 },
- {4511,4511, 0, 0, 1213, 106, 0, 0 },
- {4512,4512, 0, 0, 273, 60, 0, -2 },
- {4513,4513, 0, 0, 40000, 2380, 0, 0 },
- {4514,4514, 0, 0, 40000, 440, 0, 0 },
+ {4486,4486, 0, 0, 1620, 120, 0, 0 },
+ {4487,4487, 0, 0, 15120, 93, 0, 0 },
+ {4488,4488, 0, 0, 14613, 93, 0, 0 },
+ {4489,4489, 0, 0, 2346, 793, 0, 0 },
+ {4490,4490, 0, 0, 40000, 2380, 0, 0 },
+ {4491,4491, 0, 0, 40000, 1280, 0, 0 },
+ {4492,4492, 0, 0, 40000, 1460, 0, 0 },
+ {4493,4493, 0, 0, 40000, 2513, 0, 0 },
+ {4494,4494, 0, 0, 14840, 1266, 0, 0 },
+ {4495,4495, 0, 0, 4513, 640, 0, 0 },
+ {4496,4496, 0, 0, 4680, 806, 0, 0 },
+ {4497,4497, 0, 0, 40000, 100, 0, 0 },
+ {4498,4498, 0, 0, 40000, 66, 0, 0 },
+ {4499,4499, 0, 0, 2420, 413, 0, 0 },
+ {4500,4500, 0, 0, 406, 73, 0, -2 },
+ {4501,4501, 0, 0, 1166, 400, 0, 0 },
+ {4502,4502, 0, 0, 1213, 106, 0, 0 },
+ {4503,4503, 0, 0, 273, 60, 0, -2 },
+ {4504,4504, 0, 0, 40000, 2380, 0, 0 },
+ {4505,4505, 0, 0, 40000, 440, 0, 0 },
{1261,1261, 0, 0, 40000, 2960, 0, 0 },
- {4515,4515, 37, 0, 973, 73, 0, -2 },
- {4516,4516, 48, 0, 106, 0, 0, -2 },
- {4517,4517, 48, 0, 286, 133, 0, -2 },
- {4518,4518, 62, 0, 166, 60, 0, 0 },
- {4519,4519, 44, 0, 980, 360, 0, 0 },
- {4520,4520, 80, 0, 100, 0, 0, 0 },
- {4519,4519, 50, 0, 980, 346, 0, 0 },
- {4521,4521, 48, 0, 106, 0, 0, -2 },
- {4519,4519, 55, 0, 973, 360, 0, 0 },
- {4522,4522, 61, 0, 513, 20, 0, 0 },
- {4519,4519, 58, 0, 966, 353, 0, 0 },
- {4519,4519, 63, 0, 973, 353, 0, 0 },
- {4523,4523, 71, 0, 1366, 580, 0, 0 },
- {4519,4519, 72, 0, 820, 306, 0, 0 },
- {4524,4524, 70, 0, 1886, 666, 0, 0 },
- {4523,4523, 88, 0, 1353, 560, 0, 0 },
- {4525,4525, 76, 0, 1873, 653, 0, 0 },
- {4526,4526, 84, 0, 260, 113, 0, 0 },
- {4523,4523, 68, 0, 1366, 553, 0, 0 },
- {4527,4527, 72, 0, 153, 53, 0, 0 },
- {4528,4528, 28, 0, 1193, 413, 0, 0 },
- {4524,4524, 81, 0, 1353, 480, 0, 0 },
- {4529,4529, 58, 0, 246, 120, 0, -2 },
- {4529,4529, 55, 0, 246, 120, 0, -2 },
- {4529,4529, 44, 0, 246, 120, 0, -2 },
- {4529,4529, 49, 0, 246, 120, 0, -2 },
- {4529,4529, 40, 0, 286, 133, 0, -2 },
- {4530,4530, 55, 0, 740, 560, 0, -2 },
- {4530,4530, 48, 0, 893, 693, 0, -2 },
- {4531,4531, 52, 0, 513, 206, 0, 0 },
- {4531,4531, 45, 0, 513, 206, 0, 0 },
- {4532,4532, 48, 0, 173, 100, 0, -2 },
- {4533,4533, 48, 0, 120, 266, 0, -2 },
- {4534,4534, 48, 0, 253, 60, 0, -2 },
- {4509,4509, 73, 0, 160, 20, 0, -2 },
- {4509,4509, 68, 0, 160, 20, 0, -2 },
- {4509,4509, 63, 0, 193, 20, 0, -2 },
- {4535,4535,108, 0, 406, 26, 0, 0 },
- {4536,4536,108, 0, 740, 26, 0, 0 },
+ {4506,4506, 37, 0, 973, 73, 0, -2 },
+ {4507,4507, 48, 0, 106, 0, 0, -2 },
+ {4508,4508, 48, 0, 286, 133, 0, -2 },
+ {4509,4509, 62, 0, 166, 60, 0, 0 },
+ {4510,4510, 44, 0, 980, 360, 0, 0 },
+ {4511,4511, 80, 0, 100, 0, 0, 0 },
+ {4510,4510, 50, 0, 980, 346, 0, 0 },
+ {4512,4512, 48, 0, 106, 0, 0, -2 },
+ {4510,4510, 55, 0, 973, 360, 0, 0 },
+ {4513,4513, 61, 0, 513, 20, 0, 0 },
+ {4510,4510, 58, 0, 966, 353, 0, 0 },
+ {4510,4510, 63, 0, 973, 353, 0, 0 },
+ {4514,4514, 71, 0, 1366, 580, 0, 0 },
+ {4510,4510, 72, 0, 820, 306, 0, 0 },
+ {4515,4515, 70, 0, 1886, 666, 0, 0 },
+ {4514,4514, 88, 0, 1353, 560, 0, 0 },
+ {4516,4516, 76, 0, 1873, 653, 0, 0 },
+ {4517,4517, 84, 0, 260, 113, 0, 0 },
+ {4514,4514, 68, 0, 1366, 553, 0, 0 },
+ {4518,4518, 72, 0, 153, 53, 0, 0 },
+ {4519,4519, 28, 0, 1193, 413, 0, 0 },
+ {4515,4515, 81, 0, 1353, 480, 0, 0 },
+ {4520,4520, 58, 0, 246, 120, 0, -2 },
+ {4520,4520, 55, 0, 246, 120, 0, -2 },
+ {4520,4520, 44, 0, 246, 120, 0, -2 },
+ {4520,4520, 49, 0, 246, 120, 0, -2 },
+ {4520,4520, 40, 0, 286, 133, 0, -2 },
+ {4521,4521, 55, 0, 740, 560, 0, -2 },
+ {4521,4521, 48, 0, 893, 693, 0, -2 },
+ {4522,4522, 52, 0, 513, 206, 0, 0 },
+ {4522,4522, 45, 0, 513, 206, 0, 0 },
+ {4523,4523, 48, 0, 173, 100, 0, -2 },
+ {4524,4524, 48, 0, 120, 266, 0, -2 },
+ {4525,4525, 48, 0, 253, 60, 0, -2 },
+ {4500,4500, 73, 0, 160, 20, 0, -2 },
+ {4500,4500, 68, 0, 160, 20, 0, -2 },
+ {4500,4500, 63, 0, 193, 20, 0, -2 },
+ {4526,4526,108, 0, 406, 26, 0, 0 },
+ {4527,4527,108, 0, 740, 26, 0, 0 },
};
@@ -9449,8 +9303,8 @@ const char* const banknames[76] =
"TMB (Shadow Warrior)",
"DMX (Raptor)",
"OP3 (Modded GMOPL by Wohlstand)",
- "SB (Jammey O'Connel's bank)",
- "TMB (Default bank of Apgee Sound System)",
+ "SB (Jamie O'Connell's bank)",
+ "TMB (Default bank of Apogee Sound System)",
"WOPL (4op bank by James Alan Nguyen and Wohlstand)",
"TMB (Blood)",
"TMB (Lee)",
@@ -10417,68 +10271,68 @@ const unsigned short banks[75][256] =
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
},
{
-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,
+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, 295, 295,1610,3104,3105, 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,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, 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, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
},
{
-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,
+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, 295, 295,1610,3104,3105, 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,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,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, 295, 295, 295, 295, 295, 295, 295, 295,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
},
{
-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,
+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,
},
{
-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,
+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,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
@@ -10489,14 +10343,14 @@ const unsigned short banks[75][256] =
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
},
{
-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,
+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,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
@@ -10518,114 +10372,114 @@ 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,3624, 150, 151, 152, 153, 154,
+ 139, 140, 141, 142, 143, 144, 145, 146, 147, 148,3496, 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,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,
+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,
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, 295, 295,1610,3630,3631, 295, 284,
+1602, 272, 273,1603,1604,1605, 276,1606,1607, 295, 295,1610,3502,3503, 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,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,
+ 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,
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,
},
{
-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,
+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,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 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,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, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
},
{
-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,
+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,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 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,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, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
},
{
-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,
+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,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 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,4071,4072,4073,4074,4075,4076,4077,4078,4079,4080,4081,4082,4083,
-4084,4085,4086,4087,4088,4064,4089,4090,4091,4092,4093,4094,4095,4096,4097,4098,
-4099,4100,4101, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295,3927,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,3936,3961,3962,3963,3964,3965,3966,3967,3968,3969,3970,
+3971,3972,3973, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
},
{
-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,4102,4103,3959,
-3960,3961,3962,3963,3964,3965,3966,3967,3968,3969,3970,3971,4104,3973,3974,3975,
-3968,3976,3977,3978,3979,3980,3981,3982,3983,3984,3985,3986,4105,3988,4106,3990,
-3991,3992,3992,3993,3994,3995,3996,3997,3998,3999,4000,4001,4002,4003,4004,4005,
-4107,4007,4108,4009,4010,4011,4012,4013,4014,4015,4016,4017,4018,4019,4020,4021,
-4022,4023,4024,4025,4026,4027,4028,4029,4030,4031,4109,4110,4111,4035,4036,4037,
-4038,4039,4040,4041,4112,4043,4044,4113,4046,4047,4048,4049,4050,4051,4052,4053,
-4114,4114,4114,4114,4114,4114,4114,4114,4114,4114,4114,4114,4114,4114,4114,4114,
-4114,4114,4114,4114,4114,4114,4114,4114,4114,4114,4114,4115,4115,4115,4115,4116,
-4115,4115,4115,4055,4056,4117,4058,4059,4060,4118,4062,4063,4064,4065,4066,4067,
-4068,4069,4070,4071,4072,4073,4074,4075,4076,4077,4078,4079,4080,4081,4082,4083,
-4084,4085,4086,4087,4088,4064,4089,4090,4091,4119,4120,4094,4121,4122,4097,4098,
-4099,4100,4101,4115,4115,4115,4115,4115,4123,4114,4124,4124,4124,4124,4124,4124,
-4124,4124,4124,4124,4124,4124,4124,4124,4124,4124,4124,4124,4124,4124,4124,4124,
-4124,4124,4124,4124,4124,4124,4124,4124,4124,4124,4124,4124,4124,4124,4124,4124,
+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,3974,3975,3831,
+3832,3833,3834,3835,3836,3837,3838,3839,3840,3841,3842,3843,3976,3845,3846,3847,
+3840,3848,3849,3850,3851,3852,3853,3854,3855,3856,3857,3858,3977,3860,3978,3862,
+3863,3864,3864,3865,3866,3867,3868,3869,3870,3871,3872,3873,3874,3875,3876,3877,
+3979,3879,3980,3881,3882,3883,3884,3885,3886,3887,3888,3889,3890,3891,3892,3893,
+3894,3895,3896,3897,3898,3899,3900,3901,3902,3903,3981,3982,3983,3907,3908,3909,
+3910,3911,3912,3913,3984,3915,3916,3985,3918,3919,3920,3921,3922,3923,3924,3925,
+3986,3986,3986,3986,3986,3986,3986,3986,3986,3986,3986,3986,3986,3986,3986,3986,
+3986,3986,3986,3986,3986,3986,3986,3986,3986,3986,3986,3987,3987,3987,3987,3988,
+3987,3987,3987,3927,3928,3989,3930,3931,3932,3990,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,3936,3961,3962,3963,3991,3992,3966,3993,3994,3969,3970,
+3971,3972,3973,3987,3987,3987,3987,3987,3995,3986,3996,3996,3996,3996,3996,3996,
+3996,3996,3996,3996,3996,3996,3996,3996,3996,3996,3996,3996,3996,3996,3996,3996,
+3996,3996,3996,3996,3996,3996,3996,3996,3996,3996,3996,3996,3996,3996,3996,3996,
},
{
1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,
-1238,1239,1240,1241,1242,1243,1244,1245,4125,4126,4127,1249,1250,1376,1377,1253,
-1378,1255,1256,4128,1380,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,4129,
-1270,4130,4131,4132,4133,1275,1276,1277,1278,1279,1381,1281,1282,1283,1284,1285,
+1238,1239,1240,1241,1242,1243,1244,1245,3997,3998,3999,1249,1250,1376,1377,1253,
+1378,1255,1256,4000,1380,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,4001,
+1270,4002,4003,4004,4005,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,4134,1307,1308,1309,1309,1310,1311,1312,1313,1314,1315,1316,
+1302,1303,1304,1305,4006,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,4135,1339,1340,1341,1342,1343,1344,1345,1346,1347,1348,
+1333,1334,1335,1336,1337,4007,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,4136,1352,4137,1354,4138,1355, 320,1356, 321,1357,
+ 295, 295, 295, 312,1349,1350,4008,1352,4009,1354,4010,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, 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,
@@ -10633,38 +10487,38 @@ const unsigned short banks[75][256] =
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
},
{
-4139,4140,4141,4142,4143,4144, 6, 7,4145, 9, 10,4146, 12, 13, 14, 15,
-4147,4148,4149,4150, 20,4151,4152,4153,4154,4155,4156,4157,4158,4159,4160,4161,
- 32,4162,4163,4164,4165,4166,4167,4168,4169,4170,4171,4172,4173,4174,4175, 46,
-4176,4177,4178,4179,4180,4181,4182, 54,4183,4184,4185,4186,4187,4188,4189,4190,
-4191,4192,4193, 66,4194,4195, 69,4196,4197,4198,4199, 74, 75, 76, 77, 78,
-4200,4201,4202, 82,4203,4204, 85,4205,4206, 88,4207,4208,4209,4210,4211,4212,
- 95, 96, 97,4213,4214,4215,4216, 102, 103,4217, 105, 106, 107,4218,4219,4220,
-4221, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121,4222,4223,4224, 125,4225,
+4011,4012,4013,4014,4015,4016, 6, 7,4017, 9, 10,4018, 12, 13, 14, 15,
+4019,4020,4021,4022, 20,4023,4024,4025,4026,4027,4028,4029,4030,4031,4032,4033,
+ 32,4034,4035,4036,4037,4038,4039,4040,4041,4042,4043,4044,4045,4046,4047, 46,
+4048,4049,4050,4051,4052,4053,4054, 54,4055,4056,4057,4058,4059,4060,4061,4062,
+4063,4064,4065, 66,4066,4067, 69,4068,4069,4070,4071, 74, 75, 76, 77, 78,
+4072,4073,4074, 82,4075,4076, 85,4077,4078, 88,4079,4080,4081,4082,4083,4084,
+ 95, 96, 97,4085,4086,4087,4088, 102, 103,4089, 105, 106, 107,4090,4091,4092,
+4093, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121,4094,4095,4096, 125,4097,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 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,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, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
},
{
-3415,3416, 466,3417, 713,3324,3418, 467,3419, 632,3420,3421,3422,3423,4226,3425,
-3426, 598,4227,3428,3429,3430,3431,3432,4228,4229,4230,4231, 759, 437, 438,3435,
-3436,3437, 439,3438, 440,4232, 442,4233,3440,3441,3442,3443,2306,4234,3445, 582,
-3446,3447, 452,3448,3449,4235,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,4236,3471,3472,3473,4237, 442,3475,3476,3477,3432,3478,1669,3479,3480,
-3481,3482,3483,3484,4238, 261,3485,3486,1919,2420,3487,3488, 676,3489,3490,3491,
-3492,4239,3494,3495,4240,4241, 680,3497,3498, 462,3499, 455,3500,2421,3501, 465,
+3287,3288, 466,3289, 713,3196,3290, 467,3291, 632,3292,3293,3294,3295,4098,3297,
+3298, 598,4099,3300,3301,3302,3303,3304,4100,4101,4102,4103, 759, 437, 438,3307,
+3308,3309, 439,3310, 440,4104, 442,4105,3312,3313,3314,3315,2306,4106,3317, 582,
+3318,3319, 452,3320,3321,4107,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,4108,3343,3344,3345,4109, 442,3347,3348,3349,3304,3350,1669,3351,3352,
+3353,3354,3355,3356,4110, 261,3357,3358,1919,2420,3359,3360, 676,3361,3362,3363,
+3364,4111,3366,3367,4112,4113, 680,3369,3370, 462,3371, 455,3372,2421,3373, 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,4242,3777,3776,4243,4244,4245,4246,4247,4248,4249,4250,
-4251,3786,4252,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,3644,3645,4114,3649,3648,4115,4116,4117,4118,4119,4120,4121,4122,
+4123,3658,4124,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, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
},
@@ -10679,28 +10533,28 @@ 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,4253,4254,4255, 141,4256,4257,4258,4257,4259,4257,4260,4261,
-4262,1954,4263,4264,4265,4266,4267,4268,4269,4270,4271,4272,4273,4274,4275,4276,
-4277,4278,4279,4280,4281,4282, 163,4283, 625,4284,4285,4286,4287,4288,4289,4290,
-4291,4292,4293,4294,4295,4296,4297, 127, 127, 127, 127, 127, 127, 127, 127, 127,
+ 127, 127, 127, 127,4125,4126,4127, 141,4128,4129,4130,4129,4131,4129,4132,4133,
+4134,1954,4135,4136,4137,4138,4139,4140,4141,4142,4143,4144,4145,4146,4147,4148,
+4149,4150,4151,4152,4153,4154, 163,4155, 625,4156,4157,4158,4159,4160,4161,4162,
+4163,4164,4165,4166,4167,4168,4169, 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,
},
{
-4298,4299,1553,1554, 181,4300,4301,1555, 185,4302,3625,4303,1559, 188,4304,4305,
-4306,1562,4307,4308,1565, 195,4309, 197,4310,4311, 200, 201, 28,1566,1567,4312,
-4313,4314,4315,4316,4317,4318,4319,4320,1572,1573, 214, 215, 216, 217, 218, 219,
- 220,4321,4322,1575,1576,1577,1578,4323,1579,1580,4324,1581,4325,4326,4327,4328,
- 232, 233, 234, 235,4329, 237, 238,4330,1584,1585, 240,1586, 242, 243, 244,1587,
- 246,4331,4332,1589, 249, 250, 251,1590, 252,4333, 254, 255,4334,4335,4336,4337,
-1595,4338,1596,1597,1598,1599,1600,1601,4339,4340,4341, 267,4342,4343, 270,4344,
-4345,4346, 273,1603,4347,1605, 276,4348,4349,4350,4351,1610,4352,4353,4354, 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,4355,1470,1613,4356,1615,4357,1475,4358,1477,4359,1479,4360,1481,
-1482,4361,1484,4362,4363,4364,1630,4365,2291,4366,1634,3642,1636,1637,1638,1639,
-1640,4367,4368,1643,1644,1645,1646,4369, 342,4370,4371,1651,1652,1653,4372,4373,
-1656,4374,1658,1659,1660,1661,1662,1663, 295, 295, 295, 295, 295, 295, 295, 295,
+4170,4171,1553,1554, 181,4172,4173,1555, 185,4174,3497,4175,1559, 188,4176,4177,
+4178,1562,4179,4180,1565, 195,4181, 197,4182,4183, 200, 201, 28,1566,1567,4184,
+4185,4186,4187,4188,4189,4190,4191,4192,1572,1573, 214, 215, 216, 217, 218, 219,
+ 220,4193,4194,1575,1576,3852,1578,4195,1579,1580,4196,4197,4198,4199,4200,4201,
+ 232, 233, 234, 235,4202, 237, 238,4203,1584,1585, 240,1586,4204, 243, 244,1587,
+ 246,4205,4206,1589, 249, 250, 251,1590, 252,4207, 254,3889,4208,4209,4210,4211,
+1595,4212,1596,1597,4213,1599,1600,1601,4214,4215,4216, 267,4217,4218, 270,4219,
+4220,4221,4222,1603,4223,4224, 276,4225,4226,4227,4228,1610,4229,4230,4231, 126,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,1662,1663, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,4232,4233,4234,4235,4236,
+4237,4238,4239,4240,1470,1613,4241,1615,4242,1475,4243,1477,4244,1479,4245,1481,
+1482,4246,1484,4247,4248,4249,1630,4250,2291,4251,1634,3514,1636,1637,1638,1639,
+1640,4252,4253,1643,1644, 320,4254,4255, 342,4256,4257,4258,4259,1374,4260,4261,
+1656,4262,4263,1659,1660,4264,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,
},
@@ -10712,9 +10566,9 @@ const unsigned short banks[75][256] =
2224, 909,2225, 911, 912,2226,2227, 915, 916,2228,2229, 919, 920, 921, 922, 923,
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,4377, 968,4378, 295, 295,
-4379,4380,4381,4382,4383,4384,4385, 978,4386,4387,4388,4389,4390,4391,4392,4393,
-4394,4395,4396,4397,4398,4399,4400,4401,4402,4403,4404, 975, 971, 972, 973, 974,
+ 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966,4267, 968,4268, 295, 295,
+4269,4270,4271,4272,4273,4274,4275, 978,4276,4277,4278,4279,4280,4281,4282,4283,
+4284,4285,4286,4287,4288,4289,4290,4291,4292,4293,4294, 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,
@@ -10723,62 +10577,62 @@ const unsigned short banks[75][256] =
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
},
{
-3415,4406,3324,3324,4407,3324,3324,3324,3324,3324,3324, 378,3324,3324,3822,3324,
-3324,4408,3324,4409,4410,4411,3324,3324,3324, 370,3324,4412,4413,4414,4415,4416,
-3324,4417,4418,4419,3438,3438,4420, 442,4421,3324,3324,4422,4423,4422, 676,4424,
-4425,3324,3324,4426, 51,3324,3324,3324,4427,3452,4428,3324, 59,4429,4427, 62,
-3324,4430,4430,4431, 67,3324, 664,4432,3324,2316,3324,4433, 70,3324,4434, 78,
-4435,4436, 81,3324,3324,3324,3324,3324,3324,3324,3324, 90,3324,4437, 93,4438,
-3324,3324,3324,3324,3324,3324,3324,4439,3324,3324,3324,3324,3324,3324,3324,3324,
-3324,3324,3324,3324,3324,4240,3324,4440,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,4441,4441,4442,4443,4444,4445,4446,4447,4448,4449,4450,4451,4452,
-4453,4454,4455,4456,4457,4458,4459,4460,4461,4462,4463,4464,3324,3324,4465, 154,
-4466,4467,4468,3324,3324, 160,3324,3324,3324,4469,4470,4471,4472,4473,4474,3324,
-3324,4475, 160,4476,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,
+3287,4296,3196,3196,4297,3196,3196,3196,3196,3196,3196, 378,3196,3196,3694,3196,
+3196,4298,3196,4299,4300,4301,3196,3196,3196, 370,3196,4302,4303,4304,4305,4306,
+3196,4307,4308,4309,3310,3310,4310, 442,4311,3196,3196,4312,4313,4312, 676,4314,
+4315,3196,3196,4316, 51,3196,3196,3196,4317,3324,4318,3196, 59,4319,4317, 62,
+3196,4320,4320,4321, 67,3196, 664,4322,3196,2316,3196,4323, 70,3196,4324, 78,
+4325,4326, 81,3196,3196,3196,3196,3196,3196,3196,3196, 90,3196,4327, 93,4328,
+3196,3196,3196,3196,3196,3196,3196,4329,3196,3196,3196,3196,3196,3196,3196,3196,
+3196,3196,3196,3196,3196,4112,3196,4330,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,4331,4331,4332,4333,4334,4335,4336,4337,4338,4339,4340,4341,4342,
+4343,4344,4345,4346,4347,4348,4349,4350,4351,4352,4353,4354,3196,3196,4355, 154,
+4356,4357,4358,3196,3196, 160,3196,3196,3196,4359,4360,4361,4362,4363,4364,3196,
+3196,4365, 160,4366,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,
},
{
-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,4477,4049,4050,4051,4052,4053,
-4114,4114,4114,4114,4114,4114,4114,4114,4114,4114,4114,4114,4114,4114,4114,4114,
-4114,4114,4114,4114,4114,4114,4114,4114,4114,4114,4114,4115,4115,4115,4115,4115,
-4115,4115,4115,4055,4056,4057,4058,4059,4060,4061,4062,4063,4064,4065,4066,4067,
-4068,4069,4070,4071,4072,4073,4074,4075,4076,4077,4078,4079,4080,4081,4082,4083,
-4084,4085,4086,4087,4088,4064,4089,4090,4091,4092,4093,4094,4095,4096,4097,4098,
-4099,4100,4101,4115,4115,4115,4115,4115,4123,4114,4124,4124,4124,4124,4124,4124,
-4124,4124,4124,4124,4124,4124,4124,4124,4124,4124,4124,4124,4124,4124,4124,4124,
-4124,4124,4124,4124,4124,4124,4124,4124,4124,4124,4124,4124,4124,4124,4124,4124,
+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,4367,3921,3922,3923,3924,3925,
+3986,3986,3986,3986,3986,3986,3986,3986,3986,3986,3986,3986,3986,3986,3986,3986,
+3986,3986,3986,3986,3986,3986,3986,3986,3986,3986,3986,3987,3987,3987,3987,3987,
+3987,3987,3987,3927,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,3936,3961,3962,3963,3964,3965,3966,3967,3968,3969,3970,
+3971,3972,3973,3987,3987,3987,3987,3987,3995,3986,3996,3996,3996,3996,3996,3996,
+3996,3996,3996,3996,3996,3996,3996,3996,3996,3996,3996,3996,3996,3996,3996,3996,
+3996,3996,3996,3996,3996,3996,3996,3996,3996,3996,3996,3996,3996,3996,3996,3996,
},
{
-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,4595,4596,4597,4598,4599,4600,4601,4602,4603,4604,4605,
- 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
- 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,4606,4607,4608,4609,4610,
-4611,4612,4613,4614,4615,4616,4617,4618,4357,4619,4620,4621,4622,4623,4360,4624,
-4625,4626,4627,4628,4363,4629,4630,4365,4631,4632,4633,4634,4635,4636,4637,4638,
-4639,4640,4641,4642,4643, 320,4644,4645,4646,4647,4648,4649,4650,1374,4651,4652,
-4653,4654,4655,4656,4657,4658,4659,4660, 295, 295, 295, 295, 295, 295, 295, 295,
+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,4197,4427,4428,4429,4430,
+4431,4432,4433,4434,4435,4436,4437,4438,4439,4440,4441,4442,4204,4443,4444,4445,
+4446,4447,4448,4449,4450,4451,4452,4453,4454,4455,4456,4457,4458,4459,4460,4461,
+4462,4463,4464,4465,4466,4467,4468,4469,4470,4215,4216,4471,4472,4218,4473,4474,
+4475,4476,4222,4477,4478,4224,4479,4480,4226,4481,4228,4482,4483,4484,4485,4486,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,4232,4233,4234,4235,4487,
+4237,4238,4239,4488,4489,4490,4491,4492,4242,4493,4494,4495,4244,4496,4245,4497,
+4498,4499,4500,4501,4248,4502,4503,4250,4504,4505,4506,4507,4508,4509,4510,4511,
+4512,4252,4253,4513,4514, 320,4515,4516,4517,4256,4257,4258,4259,1374,4260,4261,
+4518,4519,4263,4520,4521,4264,4522,4523, 295, 295, 295, 295, 295, 295, 295, 295,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
},
{
-4661,4662,4663,4664,4662,4665,4666,4667,4668,4669,4670,4672,4673,4674,4675,4676,
-4677,4679,4681,4674,4683,4684,4685,4686,4687,4688,4689, 295, 28, 29, 30, 31,
+4524,4525,4526,4527,4525,4528,4529,4530,4531,4532,4533,4535,4536,4537,4538,4539,
+4540,4542,4544,4537,4546,4547,4548,4549,4550,4551,4552, 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,
@@ -10787,28 +10641,28 @@ 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,4678, 128,4680, 130, 131, 132,4682, 134, 135, 136, 137, 138,
- 139, 140, 141, 142, 143, 144,4671, 146, 147, 148, 149, 150, 151, 152, 153, 154,
+ 295, 295, 295, 127,4541, 128,4543, 130, 131, 132,4545, 134, 135, 136, 137, 138,
+ 139, 140, 141, 142, 143, 144,4534, 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,
},
{
-4691,4692,4693,4694,4695,4696,4697,4698,4699,4700,4701,4702,4703,3423,4700,4704,
-3426,4705,4706,3426,4707,4708,4708,4708, 868, 869, 870,4709,4710,4711,4712,4713,
-4714,4715,4716,4716,4717,4714,4718,4719,3970,4720,4721,4721,4722,4723,4724,4725,
-4726,4727,4728,4728,4729,4235,3450,4730,4731,4732,4733,4734,4735,4731,4731,4736,
-3457, 769,3458,3459,4737,4738,4739,4740,4741,4742,4743,4744,4745,4742,1300,4746,
-4747,4748,4742,4707,4749,4731,4750,4751,3475,4752,4753,4754,4755,1314,4756,4757,
-4758,4759,4760,4753,4753,1322,4761,4762,4763,4764,4765,4764,3423,4766,3970,4767,
-4768,1334,4768,4769,4770,4771, 792,4772,1341,1342,1343,1344,4773,4774,4775,1348,
+4554,4555,4556,4557,4558,4559,4560,4561,4562,4563,4564,4565,4566,3295,4563,4567,
+3298,4568,4569,3298,4570,4571,4571,4571, 868, 869, 870,4572,4573,4574,4575,4576,
+4577,4578,4579,4579,4580,4577,4581,4582,3842,4583,4584,4584,4585,4586,4587,4588,
+4589,4590,4591,4591,4592,4107,3322,4593,4594,4595,4596,4597,4598,4594,4594,4599,
+3329, 769,3330,3331,4600,4601,4602,4603,4604,4605,4606,4607,4608,4605,1300,4609,
+4610,4611,4605,4570,4612,4594,4613,4614,3347,4615,4616,4617,4618,1314,4619,4620,
+4621,4622,4623,4616,4616,1322,4624,4625,4626,4627,4628,4627,3295,4629,3842,4630,
+4631,1334,4631,4632,4633,4634, 792,4635,1341,1342,1343,1344,4636,4637,4638,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,4776,4776,4777,4778,4777,4779,4780,4781,4782,4783,4784,4785,4786,
-4787,4788,4789,4790,4791,4792,4793,4794,4795,4788,4796,4797,4798,4799,4800,4801,
-4802,4803,4804,4805,4806,4807,4808,4805,4806,4807,4809,4810,4811,4812,1375, 295,
-4813,4814, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295,4639,4639,4640,4641,4640,4642,4643,4644,4645,4646,4647,4648,4649,
+4650,4651,4652,4653,4654,4655,4656,4657,4658,4651,4659,4660,4661,4662,4663,4664,
+4665,4666,4667,4668,4669,4670,4671,4668,4669,4670,4672,4673,4674,4675,1375, 295,
+4676,4677, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
},
@@ -10882,8 +10736,8 @@ const AdlBankSetup adlbanksetup[75] =
{3, 0, 0, 0, 0}, //Bank 63, TMB (Shadow Warrior)
{2, 0, 0, 0, 0}, //Bank 64, DMX (Raptor)
{3, 0, 0, 0, 0}, //Bank 65, OP3 (Modded GMOPL by Wohlstand)
- {3, 0, 0, 0, 0}, //Bank 66, SB (Jammey O'Connel's bank)
- {3, 0, 0, 0, 0}, //Bank 67, TMB (Default bank of Apgee Sound System)
+ {3, 0, 0, 0, 0}, //Bank 66, SB (Jamie O'Connell's bank)
+ {3, 0, 0, 0, 0}, //Bank 67, TMB (Default bank of Apogee Sound System)
{0, 1, 1, 0, 0}, //Bank 68, WOPL (4op bank by James Alan Nguyen and Wohlstand)
{3, 0, 0, 0, 0}, //Bank 69, TMB (Blood)
{3, 0, 0, 0, 0}, //Bank 70, TMB (Lee)
diff --git a/src/adlmidi.cpp b/src/adlmidi.cpp
index c7c5cf3..bde8757 100644
--- a/src/adlmidi.cpp
+++ b/src/adlmidi.cpp
@@ -60,7 +60,7 @@ ADLMIDI_EXPORT struct ADL_MIDIPlayer *adl_init(long sample_rate)
return NULL;
}
- MIDIplay *player = new MIDIplay(static_cast<unsigned long>(sample_rate));
+ MIDIplay *player = new(std::nothrow) MIDIplay(static_cast<unsigned long>(sample_rate));
if(!player)
{
free(midi_device);
@@ -76,9 +76,9 @@ ADLMIDI_EXPORT void adl_close(struct ADL_MIDIPlayer *device)
{
if(!device)
return;
- MIDIplay * play = reinterpret_cast<MIDIplay *>(device->adl_midiPlayer);
- if(play)
- delete play;
+ MidiPlayer *play = GET_MIDI_PLAYER(device);
+ assert(play);
+ delete play;
device->adl_midiPlayer = NULL;
free(device);
device = NULL;
@@ -89,8 +89,7 @@ ADLMIDI_EXPORT int adl_setDeviceIdentifier(ADL_MIDIPlayer *device, unsigned id)
if(!device || id > 0x0f)
return -1;
MidiPlayer *play = GET_MIDI_PLAYER(device);
- if(!play)
- return -1;
+ assert(play);
play->setDeviceId(static_cast<uint8_t>(id));
return 0;
}
@@ -101,6 +100,7 @@ ADLMIDI_EXPORT int adl_setNumChips(ADL_MIDIPlayer *device, int numChips)
return -2;
MidiPlayer *play = GET_MIDI_PLAYER(device);
+ assert(play);
#ifdef ADLMIDI_HW_OPL
ADL_UNUSED(numChips);
play->m_setup.numChips = 1;
@@ -124,9 +124,8 @@ ADLMIDI_EXPORT int adl_getNumChips(struct ADL_MIDIPlayer *device)
if(device == NULL)
return -2;
MidiPlayer *play = GET_MIDI_PLAYER(device);
- if(play)
- return (int)play->m_setup.numChips;
- return -2;
+ assert(play);
+ return (int)play->m_setup.numChips;
}
ADLMIDI_EXPORT int adl_setBank(ADL_MIDIPlayer *device, int bank)
@@ -134,6 +133,7 @@ ADLMIDI_EXPORT int adl_setBank(ADL_MIDIPlayer *device, int bank)
#ifdef DISABLE_EMBEDDED_BANKS
ADL_UNUSED(bank);
MidiPlayer *play = GET_MIDI_PLAYER(device);
+ assert(play);
play->setErrorString("This build of libADLMIDI has no embedded banks. "
"Please load banks by using adl_openBankFile() or "
"adl_openBankData() functions instead of adl_setBank().");
@@ -146,6 +146,7 @@ ADLMIDI_EXPORT int adl_setBank(ADL_MIDIPlayer *device, int bank)
bankno = 0;
MidiPlayer *play = GET_MIDI_PLAYER(device);
+ assert(play);
if(static_cast<uint32_t>(bankno) >= NumBanks)
{
char errBuf[150];
@@ -185,6 +186,7 @@ ADLMIDI_EXPORT int adl_reserveBanks(ADL_MIDIPlayer *device, unsigned banks)
if(!device)
return -1;
MidiPlayer *play = GET_MIDI_PLAYER(device);
+ assert(play);
OPL3::BankMap &map = play->m_synth.m_insBanks;
map.reserve(banks);
return (int)map.capacity();
@@ -201,6 +203,7 @@ ADLMIDI_EXPORT int adl_getBank(ADL_MIDIPlayer *device, const ADL_BankId *idp, in
size_t idnumber = ((id.msb << 8) | id.lsb | (id.percussive ? size_t(OPL3::PercussionTag) : 0));
MidiPlayer *play = GET_MIDI_PLAYER(device);
+ assert(play);
OPL3::BankMap &map = play->m_synth.m_insBanks;
OPL3::BankMap::iterator it;
@@ -253,6 +256,7 @@ ADLMIDI_EXPORT int adl_removeBank(ADL_MIDIPlayer *device, ADL_Bank *bank)
return -1;
MidiPlayer *play = GET_MIDI_PLAYER(device);
+ assert(play);
OPL3::BankMap &map = play->m_synth.m_insBanks;
OPL3::BankMap::iterator it = OPL3::BankMap::iterator::from_ptrs(bank->pointer);
size_t size = map.size();
@@ -266,6 +270,7 @@ ADLMIDI_EXPORT int adl_getFirstBank(ADL_MIDIPlayer *device, ADL_Bank *bank)
return -1;
MidiPlayer *play = GET_MIDI_PLAYER(device);
+ assert(play);
OPL3::BankMap &map = play->m_synth.m_insBanks;
OPL3::BankMap::iterator it = map.begin();
@@ -282,6 +287,7 @@ ADLMIDI_EXPORT int adl_getNextBank(ADL_MIDIPlayer *device, ADL_Bank *bank)
return -1;
MidiPlayer *play = GET_MIDI_PLAYER(device);
+ assert(play);
OPL3::BankMap &map = play->m_synth.m_insBanks;
OPL3::BankMap::iterator it = OPL3::BankMap::iterator::from_ptrs(bank->pointer);
@@ -295,7 +301,7 @@ ADLMIDI_EXPORT int adl_getNextBank(ADL_MIDIPlayer *device, ADL_Bank *bank)
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;
+ return -1;
OPL3::BankMap::iterator it = OPL3::BankMap::iterator::from_ptrs(bank->pointer);
cvt_FMIns_to_ADLI(*ins, it->second.ins[index]);
@@ -306,10 +312,10 @@ ADLMIDI_EXPORT int adl_getInstrument(ADL_MIDIPlayer *device, const ADL_Bank *ban
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;
+ return -1;
if(ins->version != 0)
- return 1;
+ return -1;
OPL3::BankMap::iterator it = OPL3::BankMap::iterator::from_ptrs(bank->pointer);
cvt_ADLI_to_FMIns(it->second.ins[index], *ins);
@@ -320,13 +326,12 @@ ADLMIDI_EXPORT int adl_loadEmbeddedBank(struct ADL_MIDIPlayer *device, ADL_Bank
{
if(!device)
return -1;
- MidiPlayer *play = GET_MIDI_PLAYER(device);
- if (!play)
- return -1;
#ifdef DISABLE_EMBEDDED_BANKS
ADL_UNUSED(bank);
ADL_UNUSED(num);
+ MidiPlayer *play = GET_MIDI_PLAYER(device);
+ assert(play);
play->setErrorString("This build of libADLMIDI has no embedded banks. "
"Please load banks by using adl_openBankFile() or "
"adl_openBankData() functions instead of adl_loadEmbeddedBank().");
@@ -351,7 +356,12 @@ ADLMIDI_EXPORT int adl_setNumFourOpsChn(ADL_MIDIPlayer *device, int ops4)
{
if(!device)
return -1;
+
+ if(ops4 == -1)
+ return adlRefreshNumCards(device);
+
MidiPlayer *play = GET_MIDI_PLAYER(device);
+ assert(play);
if((unsigned int)ops4 > 6 * play->m_setup.numChips)
{
char errBuff[250];
@@ -364,7 +374,7 @@ ADLMIDI_EXPORT int adl_setNumFourOpsChn(ADL_MIDIPlayer *device, int ops4)
play->m_synth.m_numFourOps = play->m_setup.numFourOps;
play->m_synth.updateChannelCategories();
- return 0; //adlRefreshNumCards(device);
+ return 0;
}
ADLMIDI_EXPORT int adl_getNumFourOpsChn(struct ADL_MIDIPlayer *device)
@@ -372,15 +382,15 @@ ADLMIDI_EXPORT int adl_getNumFourOpsChn(struct ADL_MIDIPlayer *device)
if(!device)
return -1;
MidiPlayer *play = GET_MIDI_PLAYER(device);
- if(play)
- return (int)play->m_setup.numFourOps;
- return -1;
+ assert(play);
+ return (int)play->m_setup.numFourOps;
}
ADLMIDI_EXPORT void adl_setPercMode(ADL_MIDIPlayer *device, int percmod)
{
if(!device) return;
MidiPlayer *play = GET_MIDI_PLAYER(device);
+ assert(play);
play->m_setup.rhythmMode = percmod;
play->m_synth.m_rhythmMode = play->m_setup.rhythmMode < 0 ?
(play->m_synth.m_insBankSetup.adLibPercussions) :
@@ -392,6 +402,7 @@ ADLMIDI_EXPORT void adl_setHVibrato(ADL_MIDIPlayer *device, int hvibro)
{
if(!device) return;
MidiPlayer *play = GET_MIDI_PLAYER(device);
+ assert(play);
play->m_setup.deepVibratoMode = hvibro;
play->m_synth.m_deepVibratoMode = play->m_setup.deepVibratoMode < 0 ?
play->m_synth.m_insBankSetup.deepVibrato :
@@ -399,10 +410,19 @@ ADLMIDI_EXPORT void adl_setHVibrato(ADL_MIDIPlayer *device, int hvibro)
play->m_synth.commitDeepFlags();
}
+ADLMIDI_EXPORT int adl_getHVibrato(struct ADL_MIDIPlayer *device)
+{
+ if(!device) return -1;
+ MidiPlayer *play = GET_MIDI_PLAYER(device);
+ assert(play);
+ return play->m_synth.m_deepVibratoMode;
+}
+
ADLMIDI_EXPORT void adl_setHTremolo(ADL_MIDIPlayer *device, int htremo)
{
if(!device) return;
MidiPlayer *play = GET_MIDI_PLAYER(device);
+ assert(play);
play->m_setup.deepTremoloMode = htremo;
play->m_synth.m_deepTremoloMode = play->m_setup.deepTremoloMode < 0 ?
play->m_synth.m_insBankSetup.deepTremolo :
@@ -410,13 +430,20 @@ ADLMIDI_EXPORT void adl_setHTremolo(ADL_MIDIPlayer *device, int htremo)
play->m_synth.commitDeepFlags();
}
+ADLMIDI_EXPORT int adl_getHTremolo(struct ADL_MIDIPlayer *device)
+{
+ if(!device) return -1;
+ MidiPlayer *play = GET_MIDI_PLAYER(device);
+ assert(play);
+ return play->m_synth.m_deepTremoloMode;
+}
+
ADLMIDI_EXPORT void adl_setScaleModulators(ADL_MIDIPlayer *device, int smod)
{
if(!device)
return;
MidiPlayer *play = GET_MIDI_PLAYER(device);
- if(!play)
- return;
+ assert(play);
play->m_setup.scaleModulators = smod;
play->m_synth.m_scaleModulators = play->m_setup.scaleModulators < 0 ?
play->m_synth.m_insBankSetup.scaleModulators :
@@ -428,8 +455,7 @@ ADLMIDI_EXPORT void adl_setFullRangeBrightness(struct ADL_MIDIPlayer *device, in
if(!device)
return;
MidiPlayer *play = GET_MIDI_PLAYER(device);
- if(!play)
- return;
+ assert(play);
play->m_setup.fullRangeBrightnessCC74 = (fr_brightness != 0);
}
@@ -438,8 +464,7 @@ ADLMIDI_EXPORT void adl_setLoopEnabled(ADL_MIDIPlayer *device, int loopEn)
if(!device)
return;
MidiPlayer *play = GET_MIDI_PLAYER(device);
- if(!play)
- return;
+ assert(play);
#ifndef ADLMIDI_DISABLE_MIDI_SEQUENCER
play->m_sequencer.setLoopEnabled(loopEn != 0);
#else
@@ -452,8 +477,7 @@ ADLMIDI_EXPORT void adl_setSoftPanEnabled(ADL_MIDIPlayer *device, int softPanEn)
if(!device)
return;
MidiPlayer *play = GET_MIDI_PLAYER(device);
- if(!play)
- return;
+ assert(play);
play->m_synth.m_softPanning = (softPanEn != 0);
}
@@ -463,8 +487,7 @@ ADLMIDI_EXPORT void adl_setLogarithmicVolumes(struct ADL_MIDIPlayer *device, int
if(!device)
return;
MidiPlayer *play = GET_MIDI_PLAYER(device);
- if(!play)
- return;
+ assert(play);
play->m_setup.logarithmicVolumes = (logvol != 0);
if(play->m_setup.logarithmicVolumes)
play->m_synth.setVolumeScaleModel(ADLMIDI_VolumeModel_NativeOPL3);
@@ -477,8 +500,7 @@ ADLMIDI_EXPORT void adl_setVolumeRangeModel(struct ADL_MIDIPlayer *device, int v
if(!device)
return;
MidiPlayer *play = GET_MIDI_PLAYER(device);
- if(!play)
- return;
+ assert(play);
play->m_setup.volumeScaleModel = volumeModel;
if(play->m_setup.volumeScaleModel == ADLMIDI_VolumeModel_AUTO)//Use bank default volume model
play->m_synth.m_volumeScale = (OPL3::VolumesScale)play->m_synth.m_insBankSetup.volumeModel;
@@ -486,11 +508,21 @@ ADLMIDI_EXPORT void adl_setVolumeRangeModel(struct ADL_MIDIPlayer *device, int v
play->m_synth.setVolumeScaleModel(static_cast<ADLMIDI_VolumeModels>(volumeModel));
}
+ADLMIDI_EXPORT int adl_getVolumeRangeModel(struct ADL_MIDIPlayer *device)
+{
+ if(!device)
+ return -1;
+ MidiPlayer *play = GET_MIDI_PLAYER(device);
+ assert(play);
+ return play->m_synth.getVolumeScaleModel();
+}
+
ADLMIDI_EXPORT int adl_openBankFile(struct ADL_MIDIPlayer *device, const char *filePath)
{
- if(device && device->adl_midiPlayer)
+ if(device)
{
MidiPlayer *play = GET_MIDI_PLAYER(device);
+ assert(play);
play->m_setup.tick_skip_samples_delay = 0;
if(!play->LoadBank(filePath))
{
@@ -508,11 +540,10 @@ ADLMIDI_EXPORT int adl_openBankFile(struct ADL_MIDIPlayer *device, const char *f
ADLMIDI_EXPORT int adl_openBankData(struct ADL_MIDIPlayer *device, const void *mem, unsigned long size)
{
- if(device && device->adl_midiPlayer)
+ if(device)
{
MidiPlayer *play = GET_MIDI_PLAYER(device);
- if(!play)
- return -1;
+ assert(play);
play->m_setup.tick_skip_samples_delay = 0;
if(!play->LoadBank(mem, static_cast<size_t>(size)))
{
@@ -530,11 +561,10 @@ ADLMIDI_EXPORT int adl_openBankData(struct ADL_MIDIPlayer *device, const void *m
ADLMIDI_EXPORT int adl_openFile(ADL_MIDIPlayer *device, const char *filePath)
{
- if(device && device->adl_midiPlayer)
+ if(device)
{
MidiPlayer *play = GET_MIDI_PLAYER(device);
- if(!play)
- return -1;
+ assert(play);
#ifndef ADLMIDI_DISABLE_MIDI_SEQUENCER
play->m_setup.tick_skip_samples_delay = 0;
if(!play->LoadMIDI(filePath))
@@ -558,11 +588,10 @@ ADLMIDI_EXPORT int adl_openFile(ADL_MIDIPlayer *device, const char *filePath)
ADLMIDI_EXPORT int adl_openData(ADL_MIDIPlayer *device, const void *mem, unsigned long size)
{
- if(device && device->adl_midiPlayer)
+ if(device)
{
MidiPlayer *play = GET_MIDI_PLAYER(device);
- if(!play)
- return -1;
+ assert(play);
#ifndef ADLMIDI_DISABLE_MIDI_SEQUENCER
play->m_setup.tick_skip_samples_delay = 0;
if(!play->LoadMIDI(mem, static_cast<size_t>(size)))
@@ -596,9 +625,10 @@ ADLMIDI_EXPORT const char *adl_chipEmulatorName(struct ADL_MIDIPlayer *device)
{
#ifndef ADLMIDI_HW_OPL
MidiPlayer *play = GET_MIDI_PLAYER(device);
- if(play && !play->m_synth.m_chips.empty())
+ assert(play);
+ if(!play->m_synth.m_chips.empty())
return play->m_synth.m_chips[0]->emulatorName();
- #else
+#else
return "Hardware OPL3 chip on 0x330";
#endif
}
@@ -611,8 +641,6 @@ ADLMIDI_EXPORT int adl_switchEmulator(struct ADL_MIDIPlayer *device, int emulato
{
MidiPlayer *play = GET_MIDI_PLAYER(device);
assert(play);
- if(!play)
- return -1;
if(adl_isEmulatorAvailable(emulator))
{
play->m_setup.emulator = emulator;
@@ -630,12 +658,10 @@ ADLMIDI_EXPORT int adl_setRunAtPcmRate(ADL_MIDIPlayer *device, int enabled)
if(device)
{
MidiPlayer *play = GET_MIDI_PLAYER(device);
- if(play)
- {
- play->m_setup.runAtPcmRate = (enabled != 0);
- play->partialReset();
- return 0;
- }
+ assert(play);
+ play->m_setup.runAtPcmRate = (enabled != 0);
+ play->partialReset();
+ return 0;
}
return -1;
}
@@ -675,6 +701,7 @@ ADLMIDI_EXPORT void adl_reset(struct ADL_MIDIPlayer *device)
if(!device)
return;
MidiPlayer *play = GET_MIDI_PLAYER(device);
+ assert(play);
play->partialReset();
play->resetMIDI();
}
@@ -685,8 +712,7 @@ ADLMIDI_EXPORT double adl_totalTimeLength(struct ADL_MIDIPlayer *device)
if(!device)
return -1.0;
MidiPlayer *play = GET_MIDI_PLAYER(device);
- if(!play)
- return -1.0;
+ assert(play);
return play->m_sequencer.timeLength();
#else
ADL_UNUSED(device);
@@ -700,8 +726,7 @@ ADLMIDI_EXPORT double adl_loopStartTime(struct ADL_MIDIPlayer *device)
if(!device)
return -1.0;
MidiPlayer *play = GET_MIDI_PLAYER(device);
- if(!play)
- return -1.0;
+ assert(play);
return play->m_sequencer.getLoopStart();
#else
ADL_UNUSED(device);
@@ -715,8 +740,7 @@ ADLMIDI_EXPORT double adl_loopEndTime(struct ADL_MIDIPlayer *device)
if(!device)
return -1.0;
MidiPlayer *play = GET_MIDI_PLAYER(device);
- if(!play)
- return -1.0;
+ assert(play);
return play->m_sequencer.getLoopEnd();
#else
ADL_UNUSED(device);
@@ -730,8 +754,7 @@ ADLMIDI_EXPORT double adl_positionTell(struct ADL_MIDIPlayer *device)
if(!device)
return -1.0;
MidiPlayer *play = GET_MIDI_PLAYER(device);
- if(!play)
- return -1.0;
+ assert(play);
return play->m_sequencer.tell();
#else
ADL_UNUSED(device);
@@ -747,8 +770,7 @@ ADLMIDI_EXPORT void adl_positionSeek(struct ADL_MIDIPlayer *device, double secon
if(!device)
return;
MidiPlayer *play = GET_MIDI_PLAYER(device);
- if(!play)
- return;
+ assert(play);
play->realTime_panic();
play->m_setup.delay = play->m_sequencer.seek(seconds, play->m_setup.mindelay);
play->m_setup.carry = 0.0;
@@ -764,8 +786,7 @@ ADLMIDI_EXPORT void adl_positionRewind(struct ADL_MIDIPlayer *device)
if(!device)
return;
MidiPlayer *play = GET_MIDI_PLAYER(device);
- if(!play)
- return;
+ assert(play);
play->realTime_panic();
play->m_sequencer.rewind();
#else
@@ -779,8 +800,7 @@ ADLMIDI_EXPORT void adl_setTempo(struct ADL_MIDIPlayer *device, double tempo)
if(!device || (tempo <= 0.0))
return;
MidiPlayer *play = GET_MIDI_PLAYER(device);
- if(!play)
- return;
+ assert(play);
play->m_sequencer.setTempo(tempo);
#else
ADL_UNUSED(device);
@@ -793,9 +813,8 @@ ADLMIDI_EXPORT int adl_describeChannels(struct ADL_MIDIPlayer *device, char *str
{
if(!device)
return -1;
- MIDIplay *play = reinterpret_cast<MIDIplay *>(device->adl_midiPlayer);
- if(!play)
- return -1;
+ MidiPlayer *play = GET_MIDI_PLAYER(device);
+ assert(play);
play->describeChannels(str, attr, size);
return 0;
}
@@ -807,8 +826,7 @@ ADLMIDI_EXPORT const char *adl_metaMusicTitle(struct ADL_MIDIPlayer *device)
if(!device)
return "";
MidiPlayer *play = GET_MIDI_PLAYER(device);
- if(!play)
- return "";
+ assert(play);
return play->m_sequencer.getMusicTitle().c_str();
#else
ADL_UNUSED(device);
@@ -823,8 +841,7 @@ ADLMIDI_EXPORT const char *adl_metaMusicCopyright(struct ADL_MIDIPlayer *device)
if(!device)
return "";
MidiPlayer *play = GET_MIDI_PLAYER(device);
- if(!play)
- return "";
+ assert(play);
return play->m_sequencer.getMusicCopyright().c_str();
#else
ADL_UNUSED(device);
@@ -838,8 +855,7 @@ ADLMIDI_EXPORT size_t adl_metaTrackTitleCount(struct ADL_MIDIPlayer *device)
if(!device)
return 0;
MidiPlayer *play = GET_MIDI_PLAYER(device);
- if(!play)
- return 0;
+ assert(play);
return play->m_sequencer.getTrackTitles().size();
#else
ADL_UNUSED(device);
@@ -853,6 +869,7 @@ ADLMIDI_EXPORT const char *adl_metaTrackTitle(struct ADL_MIDIPlayer *device, siz
if(!device)
return "";
MidiPlayer *play = GET_MIDI_PLAYER(device);
+ assert(play);
const std::vector<std::string> &titles = play->m_sequencer.getTrackTitles();
if(index >= titles.size())
return "INVALID";
@@ -871,8 +888,7 @@ ADLMIDI_EXPORT size_t adl_metaMarkerCount(struct ADL_MIDIPlayer *device)
if(!device)
return 0;
MidiPlayer *play = GET_MIDI_PLAYER(device);
- if(!play)
- return 0;
+ assert(play);
return play->m_sequencer.getMarkers().size();
#else
ADL_UNUSED(device);
@@ -883,23 +899,32 @@ ADLMIDI_EXPORT size_t adl_metaMarkerCount(struct ADL_MIDIPlayer *device)
ADLMIDI_EXPORT Adl_MarkerEntry adl_metaMarker(struct ADL_MIDIPlayer *device, size_t index)
{
struct Adl_MarkerEntry marker;
+
#ifndef ADLMIDI_DISABLE_MIDI_SEQUENCER
- MidiPlayer *play = GET_MIDI_PLAYER(device);
- const std::vector<MidiSequencer::MIDI_MarkerEntry> &markers = play->m_sequencer.getMarkers();
- if(!device || !play || (index >= markers.size()))
+ if(!device)
{
marker.label = "INVALID";
marker.pos_time = 0.0;
marker.pos_ticks = 0;
return marker;
}
- else
+
+ MidiPlayer *play = GET_MIDI_PLAYER(device);
+ assert(play);
+
+ const std::vector<MidiSequencer::MIDI_MarkerEntry> &markers = play->m_sequencer.getMarkers();
+ if(index >= markers.size())
{
- const MidiSequencer::MIDI_MarkerEntry &mk = markers[index];
- marker.label = mk.label.c_str();
- marker.pos_time = mk.pos_time;
- marker.pos_ticks = (unsigned long)mk.pos_ticks;
+ marker.label = "INVALID";
+ marker.pos_time = 0.0;
+ marker.pos_ticks = 0;
+ return marker;
}
+
+ const MidiSequencer::MIDI_MarkerEntry &mk = markers[index];
+ marker.label = mk.label.c_str();
+ marker.pos_time = mk.pos_time;
+ marker.pos_ticks = (unsigned long)mk.pos_ticks;
#else
ADL_UNUSED(device);
ADL_UNUSED(index);
@@ -916,6 +941,7 @@ ADLMIDI_EXPORT void adl_setRawEventHook(struct ADL_MIDIPlayer *device, ADL_RawEv
if(!device)
return;
MidiPlayer *play = GET_MIDI_PLAYER(device);
+ assert(play);
play->m_sequencerInterface.onEvent = rawEventHook;
play->m_sequencerInterface.onEvent_userData = userData;
#else
@@ -931,6 +957,7 @@ ADLMIDI_EXPORT void adl_setNoteHook(struct ADL_MIDIPlayer *device, ADL_NoteHook
if(!device)
return;
MidiPlayer *play = GET_MIDI_PLAYER(device);
+ assert(play);
play->hooks.onNote = noteHook;
play->hooks.onNote_userData = userData;
}
@@ -941,6 +968,7 @@ ADLMIDI_EXPORT void adl_setDebugMessageHook(struct ADL_MIDIPlayer *device, ADL_D
if(!device)
return;
MidiPlayer *play = GET_MIDI_PLAYER(device);
+ assert(play);
play->hooks.onDebugMessage = debugMessageHook;
play->hooks.onDebugMessage_userData = userData;
#ifndef ADLMIDI_DISABLE_MIDI_SEQUENCER
@@ -1165,6 +1193,7 @@ ADLMIDI_EXPORT int adl_playFormat(ADL_MIDIPlayer *device, int sampleCount,
return 0;
MidiPlayer *player = GET_MIDI_PLAYER(device);
+ assert(player);
MidiPlayer::Setup &setup = player->m_setup;
ssize_t gotten_len = 0;
@@ -1271,6 +1300,7 @@ ADLMIDI_EXPORT int adl_generateFormat(struct ADL_MIDIPlayer *device, int sampleC
return 0;
MidiPlayer *player = GET_MIDI_PLAYER(device);
+ assert(player);
MidiPlayer::Setup &setup = player->m_setup;
ssize_t gotten_len = 0;
@@ -1331,8 +1361,7 @@ ADLMIDI_EXPORT double adl_tickEvents(struct ADL_MIDIPlayer *device, double secon
if(!device)
return -1.0;
MidiPlayer *play = GET_MIDI_PLAYER(device);
- if(!play)
- return -1.0;
+ assert(play);
return play->Tick(seconds, granulality);
#else
ADL_UNUSED(device);
@@ -1348,8 +1377,7 @@ ADLMIDI_EXPORT int adl_atEnd(struct ADL_MIDIPlayer *device)
if(!device)
return 1;
MidiPlayer *play = GET_MIDI_PLAYER(device);
- if(!play)
- return 1;
+ assert(play);
return (int)play->m_sequencer.positionAtEnd();
#else
ADL_UNUSED(device);
@@ -1363,8 +1391,7 @@ ADLMIDI_EXPORT size_t adl_trackCount(struct ADL_MIDIPlayer *device)
if(!device)
return 0;
MidiPlayer *play = GET_MIDI_PLAYER(device);
- if(!play)
- return 0;
+ assert(play);
return play->m_sequencer.getTrackCount();
#else
ADL_UNUSED(device);
@@ -1378,8 +1405,7 @@ ADLMIDI_EXPORT int adl_setTrackOptions(struct ADL_MIDIPlayer *device, size_t tra
if(!device)
return -1;
MidiPlayer *play = GET_MIDI_PLAYER(device);
- if(!play)
- return -1;
+ assert(play);
MidiSequencer &seq = play->m_sequencer;
unsigned enableFlag = trackOptions & 3;
@@ -1420,8 +1446,7 @@ ADLMIDI_EXPORT int adl_setTriggerHandler(struct ADL_MIDIPlayer *device, ADL_Trig
if(!device)
return -1;
MidiPlayer *play = GET_MIDI_PLAYER(device);
- if(!play)
- return -1;
+ assert(play);
MidiSequencer &seq = play->m_sequencer;
seq.setTriggerHandler(handler, userData);
return 0;
@@ -1438,8 +1463,7 @@ ADLMIDI_EXPORT void adl_panic(struct ADL_MIDIPlayer *device)
if(!device)
return;
MidiPlayer *play = GET_MIDI_PLAYER(device);
- if(!play)
- return;
+ assert(play);
play->realTime_panic();
}
@@ -1448,8 +1472,7 @@ ADLMIDI_EXPORT void adl_rt_resetState(struct ADL_MIDIPlayer *device)
if(!device)
return;
MidiPlayer *play = GET_MIDI_PLAYER(device);
- if(!play)
- return;
+ assert(play);
play->realTime_ResetState();
}
@@ -1458,8 +1481,7 @@ ADLMIDI_EXPORT int adl_rt_noteOn(struct ADL_MIDIPlayer *device, ADL_UInt8 channe
if(!device)
return 0;
MidiPlayer *play = GET_MIDI_PLAYER(device);
- if(!play)
- return 0;
+ assert(play);
return (int)play->realTime_NoteOn(channel, note, velocity);
}
@@ -1468,8 +1490,7 @@ ADLMIDI_EXPORT void adl_rt_noteOff(struct ADL_MIDIPlayer *device, ADL_UInt8 chan
if(!device)
return;
MidiPlayer *play = GET_MIDI_PLAYER(device);
- if(!play)
- return;
+ assert(play);
play->realTime_NoteOff(channel, note);
}
@@ -1478,8 +1499,7 @@ ADLMIDI_EXPORT void adl_rt_noteAfterTouch(struct ADL_MIDIPlayer *device, ADL_UIn
if(!device)
return;
MidiPlayer *play = GET_MIDI_PLAYER(device);
- if(!play)
- return;
+ assert(play);
play->realTime_NoteAfterTouch(channel, note, atVal);
}
@@ -1488,8 +1508,7 @@ ADLMIDI_EXPORT void adl_rt_channelAfterTouch(struct ADL_MIDIPlayer *device, ADL_
if(!device)
return;
MidiPlayer *play = GET_MIDI_PLAYER(device);
- if(!play)
- return;
+ assert(play);
play->realTime_ChannelAfterTouch(channel, atVal);
}
@@ -1498,8 +1517,7 @@ ADLMIDI_EXPORT void adl_rt_controllerChange(struct ADL_MIDIPlayer *device, ADL_U
if(!device)
return;
MidiPlayer *play = GET_MIDI_PLAYER(device);
- if(!play)
- return;
+ assert(play);
play->realTime_Controller(channel, type, value);
}
@@ -1508,8 +1526,7 @@ ADLMIDI_EXPORT void adl_rt_patchChange(struct ADL_MIDIPlayer *device, ADL_UInt8
if(!device)
return;
MidiPlayer *play = GET_MIDI_PLAYER(device);
- if(!play)
- return;
+ assert(play);
play->realTime_PatchChange(channel, patch);
}
@@ -1518,8 +1535,7 @@ ADLMIDI_EXPORT void adl_rt_pitchBend(struct ADL_MIDIPlayer *device, ADL_UInt8 ch
if(!device)
return;
MidiPlayer *play = GET_MIDI_PLAYER(device);
- if(!play)
- return;
+ assert(play);
play->realTime_PitchBend(channel, pitch);
}
@@ -1528,8 +1544,7 @@ ADLMIDI_EXPORT void adl_rt_pitchBendML(struct ADL_MIDIPlayer *device, ADL_UInt8
if(!device)
return;
MidiPlayer *play = GET_MIDI_PLAYER(device);
- if(!play)
- return;
+ assert(play);
play->realTime_PitchBend(channel, msb, lsb);
}
@@ -1538,8 +1553,7 @@ ADLMIDI_EXPORT void adl_rt_bankChangeLSB(struct ADL_MIDIPlayer *device, ADL_UInt
if(!device)
return;
MidiPlayer *play = GET_MIDI_PLAYER(device);
- if(!play)
- return;
+ assert(play);
play->realTime_BankChangeLSB(channel, lsb);
}
@@ -1548,8 +1562,7 @@ ADLMIDI_EXPORT void adl_rt_bankChangeMSB(struct ADL_MIDIPlayer *device, ADL_UInt
if(!device)
return;
MidiPlayer *play = GET_MIDI_PLAYER(device);
- if(!play)
- return;
+ assert(play);
play->realTime_BankChangeMSB(channel, msb);
}
@@ -1558,8 +1571,7 @@ ADLMIDI_EXPORT void adl_rt_bankChange(struct ADL_MIDIPlayer *device, ADL_UInt8 c
if(!device)
return;
MidiPlayer *play = GET_MIDI_PLAYER(device);
- if(!play)
- return;
+ assert(play);
play->realTime_BankChange(channel, (uint16_t)bank);
}
@@ -1568,7 +1580,6 @@ ADLMIDI_EXPORT int adl_rt_systemExclusive(struct ADL_MIDIPlayer *device, const A
if(!device)
return -1;
MidiPlayer *play = GET_MIDI_PLAYER(device);
- if(!play)
- return -1;
+ assert(play);
return play->realTime_SysEx(msg, size);
}
diff --git a/src/adlmidi_midiplay.cpp b/src/adlmidi_midiplay.cpp
index ded81b3..42b5b01 100644
--- a/src/adlmidi_midiplay.cpp
+++ b/src/adlmidi_midiplay.cpp
@@ -100,19 +100,19 @@ inline bool isXgPercChannel(uint8_t msb, uint8_t lsb)
return (msb == 0x7E || msb == 0x7F) && (lsb == 0);
}
-void MIDIplay::AdlChannel::addAge(int64_t ms)
+void MIDIplay::AdlChannel::addAge(int64_t us)
{
- const int64_t neg = static_cast<int64_t>(-0x1FFFFFFFl);
+ const int64_t neg = 1000 * static_cast<int64_t>(-0x1FFFFFFFll);
if(users_empty())
- koff_time_until_neglible = std::max(int64_t(koff_time_until_neglible - ms), neg);
+ koff_time_until_neglible_us = std::max(koff_time_until_neglible_us - us, neg);
else
{
- koff_time_until_neglible = 0;
+ koff_time_until_neglible_us = 0;
for(LocationData *i = users_first; i; i = i->next)
{
if(!i->fixed_sustain)
- i->kon_time_until_neglible = std::max(i->kon_time_until_neglible - ms, neg);
- i->vibdelay += ms;
+ i->kon_time_until_neglible_us = std::max(i->kon_time_until_neglible_us - us, neg);
+ i->vibdelay_us += us;
}
}
}
@@ -233,7 +233,7 @@ void MIDIplay::resetMIDI()
void MIDIplay::TickIterators(double s)
{
for(uint16_t c = 0; c < m_synth.m_numChannels; ++c)
- m_chipChannels[c].addAge(static_cast<int64_t>(s * 1000.0));
+ m_chipChannels[c].addAge(static_cast<int64_t>(s * 1e6));
updateVibrato(s);
updateArpeggio(s);
#if !defined(ADLMIDI_AUDIO_TICK_HANDLER)
@@ -578,6 +578,15 @@ bool MIDIplay::realTime_NoteOn(uint8_t channel, uint8_t note, uint8_t velocity)
}
noteUpdate(channel, ir.first, Upd_All | Upd_Patch);
+
+ for(unsigned ccount = 0; ccount < MIDIchannel::NoteInfo::MaxNumPhysChans; ++ccount)
+ {
+ int32_t c = adlchannel[ccount];
+ if(c < 0)
+ continue;
+ m_chipChannels[c].addAge(0);
+ }
+
return true;
}
@@ -1113,9 +1122,9 @@ void MIDIplay::noteUpdate(size_t midCh,
if(d) // inserts if necessary
{
d->sustained = AdlChannel::LocationData::Sustain_None;
- d->vibdelay = 0;
+ d->vibdelay_us = 0;
d->fixed_sustain = (ains.ms_sound_kon == static_cast<uint16_t>(adlNoteOnMaxTime));
- d->kon_time_until_neglible = ains.ms_sound_kon;
+ d->kon_time_until_neglible_us = 1000 * ains.ms_sound_kon;
d->ins = ins;
}
}
@@ -1124,7 +1133,8 @@ void MIDIplay::noteUpdate(size_t midCh,
for(unsigned ccount = 0; ccount < info.chip_channels_count; ccount++)
{
const MIDIchannel::NoteInfo::Phys &ins = info.chip_channels[ccount];
- uint16_t c = ins.chip_chan;
+ uint16_t c = ins.chip_chan;
+ uint16_t c_slave = info.chip_channels[1].chip_chan;
if(select_adlchn >= 0 && c != select_adlchn)
continue;
@@ -1147,11 +1157,11 @@ void MIDIplay::noteUpdate(size_t midCh,
if(props_mask & Upd_Mute) // Mute the note
{
m_synth.touchNote(c, 0);
- m_chipChannels[c].koff_time_until_neglible = 0;
+ m_chipChannels[c].koff_time_until_neglible_us = 0;
}
else
{
- m_chipChannels[c].koff_time_until_neglible = ains.ms_sound_koff;
+ m_chipChannels[c].koff_time_until_neglible_us = 1000 * ains.ms_sound_koff;
}
}
}
@@ -1279,11 +1289,11 @@ void MIDIplay::noteUpdate(size_t midCh,
phase = ains.voice2_fine_tune;//0.125; // Detune the note slightly (this is what Doom does)
}
- if(vibrato && (!d || d->vibdelay >= m_midiChannels[midCh].vibdelay))
+ if(vibrato && (!d || d->vibdelay_us >= m_midiChannels[midCh].vibdelay_us))
bend += static_cast<double>(vibrato) * m_midiChannels[midCh].vibdepth * std::sin(m_midiChannels[midCh].vibpos);
#define BEND_COEFFICIENT 172.4387
- m_synth.noteOn(c, BEND_COEFFICIENT * std::exp(0.057762265 * (currentTone + bend + phase)));
+ m_synth.noteOn(c, c_slave, BEND_COEFFICIENT * std::exp(0.057762265 * (currentTone + bend + phase)));
#undef BEND_COEFFICIENT
if(hooks.onNote)
hooks.onNote(hooks.onNote_userData, c, noteTone, midiins, vol, midibend);
@@ -1321,7 +1331,8 @@ void MIDIplay::setErrorString(const std::string &err)
int64_t MIDIplay::calculateChipChannelGoodness(size_t c, const MIDIchannel::NoteInfo::Phys &ins) const
{
- int64_t s = (m_synth.m_musicMode != OPL3::MODE_CMF) ? -m_chipChannels[c].koff_time_until_neglible : 0;
+ int64_t koff_ms = m_chipChannels[c].koff_time_until_neglible_us / 1000;
+ int64_t s = (m_synth.m_musicMode != OPL3::MODE_CMF) ? -koff_ms : 0;
// Same midi-instrument = some stability
//if(c == MidCh) s += 4;
@@ -1329,10 +1340,9 @@ int64_t MIDIplay::calculateChipChannelGoodness(size_t c, const MIDIchannel::Note
{
s -= 4000;
- if(j->sustained == AdlChannel::LocationData::Sustain_None)
- s -= j->kon_time_until_neglible;
- else
- s -= (j->kon_time_until_neglible / 2);
+ int64_t kon_ms = j->kon_time_until_neglible_us / 1000;
+ s -= (j->sustained == AdlChannel::LocationData::Sustain_None) ?
+ kon_ms : (kon_ms / 2);
MIDIchannel::activenoteiterator
k = const_cast<MIDIchannel &>(m_midiChannels[j->loc.MidCh]).activenotes_find(j->loc.note);
@@ -1344,8 +1354,8 @@ int64_t MIDIplay::calculateChipChannelGoodness(size_t c, const MIDIchannel::Note
{
s += 300;
// Arpeggio candidate = even better
- if(j->vibdelay < 70
- || j->kon_time_until_neglible > 20000)
+ if(j->vibdelay_us < 70000
+ || j->kon_time_until_neglible_us > 20000000)
s += 0;
}
@@ -1376,7 +1386,7 @@ int64_t MIDIplay::calculateChipChannelGoodness(size_t c, const MIDIchannel::Note
for(AdlChannel::LocationData *m = m_chipChannels[c2].users_first; m; m = m->next)
{
if(m->sustained != AdlChannel::LocationData::Sustain_None) continue;
- if(m->vibdelay >= 200) continue;
+ if(m->vibdelay_us >= 200000) continue;
if(m->ins != j->ins) continue;
n_evacuation_stations += 1;
}
@@ -1407,8 +1417,8 @@ void MIDIplay::prepareChipChannelForNewNote(size_t c, const MIDIchannel::NoteInf
(m_midiChannels[j->loc.MidCh].activenotes_ensure_find(j->loc.note));
// Check if we can do arpeggio.
- if((j->vibdelay < 70
- || j->kon_time_until_neglible > 20000)
+ if((j->vibdelay_us < 70000
+ || j->kon_time_until_neglible_us > 20000000)
&& j->ins == ins)
{
// Do arpeggio together with this note.
@@ -1458,8 +1468,8 @@ void MIDIplay::killOrEvacuate(size_t from_channel,
for(AdlChannel::LocationData *m = adlch.users_first; m; m = m->next)
{
- if(m->vibdelay >= 200
- && m->kon_time_until_neglible < 10000) continue;
+ if(m->vibdelay_us >= 200000
+ && m->kon_time_until_neglible_us < 10000000) continue;
if(m->ins != j->ins)
continue;
if(hooks.onNote)
@@ -1590,13 +1600,13 @@ void MIDIplay::setRPN(size_t midCh, unsigned value, bool MSB)
case 0x0109 + 1*0x10000 + 1*0x20000:
if((m_synthMode & Mode_XG) != 0) // Vibrato depth
{
- m_midiChannels[midCh].vibdepth = ((value - 64) * 0.15) * 0.01;
+ m_midiChannels[midCh].vibdepth = (((int)value - 64) * 0.15) * 0.01;
}
break;
case 0x010A + 1*0x10000 + 1*0x20000:
if((m_synthMode & Mode_XG) != 0) // Vibrato delay in millisecons
{
- m_midiChannels[midCh].vibdelay = value ? int64_t(0.2092 * std::exp(0.0795 * (double)value)) : 0;
+ m_midiChannels[midCh].vibdelay_us = value ? int64_t(209.2 * std::exp(0.0795 * (double)value)) : 0;
}
break;
default:/* UI.PrintLn("%s %04X <- %d (%cSB) (ch %u)",
@@ -1702,7 +1712,7 @@ retry_arpeggio:
if(i->sustained == AdlChannel::LocationData::Sustain_None)
{
- if(i->kon_time_until_neglible <= 0l)
+ if(i->kon_time_until_neglible_us <= 0)
{
noteUpdate(
i->loc.MidCh,
@@ -1920,7 +1930,7 @@ ADLMIDI_EXPORT void AdlInstrumentTester::DoNote(int note)
opl->setPatch(static_cast<size_t>(adlchannel[c]), ains.adl[c]);
opl->touchNote(static_cast<size_t>(adlchannel[c]), 63);
opl->setPan(static_cast<size_t>(adlchannel[c]), 0x30);
- opl->noteOn(static_cast<size_t>(adlchannel[c]), hertz);
+ opl->noteOn(static_cast<size_t>(adlchannel[c]), static_cast<size_t>(adlchannel[1]), hertz);
}
#else
ADL_UNUSED(note);
diff --git a/src/adlmidi_opl3.cpp b/src/adlmidi_opl3.cpp
index 94602ba..e486dd6 100644
--- a/src/adlmidi_opl3.cpp
+++ b/src/adlmidi_opl3.cpp
@@ -168,6 +168,12 @@ OPL3::OPL3() :
m_musicMode(MODE_MIDI),
m_volumeScale(VOLUME_Generic)
{
+ m_insBankSetup.volumeModel = OPL3::VOLUME_Generic;
+ m_insBankSetup.deepTremolo = false;
+ m_insBankSetup.deepVibrato = false;
+ m_insBankSetup.adLibPercussions = false;
+ m_insBankSetup.scaleModulators = false;
+
#ifdef DISABLE_EMBEDDED_BANKS
m_embeddedBank = CustomBankTag;
#else
@@ -263,36 +269,85 @@ void OPL3::noteOff(size_t c)
writeRegI(chip, 0xB0 + g_channelsMap[cc], m_keyBlockFNumCache[c] & 0xDF);
}
-void OPL3::noteOn(size_t c, double hertz) // Hertz range: 0..131071
+void OPL3::noteOn(size_t c1, size_t c2, double hertz) // Hertz range: 0..131071
{
- size_t chip = c / 23, cc = c % 23;
- uint32_t x = 0x2000;
+ size_t chip = c1 / 23, cc1 = c1 % 23, cc2 = c2 % 23;
+ uint32_t octave = 0, ftone = 0, mul_offset = 0;
- if(hertz < 0 || hertz > 131071) // Avoid infinite loop
+ if(hertz < 0)
return;
- while(hertz >= 1023.5)
+ //Basic range until max of octaves reaching
+ while((hertz >= 1023.5) && (octave < 0x1C00))
+ {
+ hertz /= 2.0; // Calculate octave
+ octave += 0x400;
+ }
+ //Extended range, rely on frequency multiplication increment
+ while(hertz >= 1022.75)
{
hertz /= 2.0; // Calculate octave
- x += 0x400;
+ mul_offset++;
}
- x += static_cast<uint32_t>(hertz + 0.5);
- uint32_t chn = g_channelsMap[cc];
+ ftone = octave + static_cast<uint32_t>(hertz + 0.5);
+ uint32_t chn = g_channelsMap[cc1];
+ const adldata &patch1 = m_insCache[c1];
+ const adldata &patch2 = m_insCache[c2 < m_insCache.size() ? c2 : 0];
- if(cc >= 18)
+ if(cc1 < 18)
{
- m_regBD[chip ] |= (0x10 >> (cc - 18));
- writeRegI(chip , 0x0BD, m_regBD[chip ]);
- x &= ~0x2000u;
- //x |= 0x800; // for test
+ ftone += 0x2000u; /* Key-ON [KON] */
+
+ const bool natural_4op = (m_channelCategory[c1] == ChanCat_4op_Master);
+ const size_t opsCount = natural_4op ? 4 : 2;
+ const uint16_t op_addr[4] =
+ {
+ g_operatorsMap[cc1 * 2 + 0], g_operatorsMap[cc1 * 2 + 1],
+ g_operatorsMap[cc2 * 2 + 0], g_operatorsMap[cc2 * 2 + 1]
+ };
+ const uint32_t ops[4] =
+ {
+ patch1.modulator_E862 & 0xFF,
+ patch1.carrier_E862 & 0xFF,
+ patch2.modulator_E862 & 0xFF,
+ patch2.carrier_E862 & 0xFF
+ };
+
+ for(size_t op = 0; op < opsCount; op++)
+ {
+ if((op > 0) && (op_addr[op] == 0xFFF))
+ break;
+ if(mul_offset > 0)
+ {
+ uint32_t dt = ops[op] & 0xF0;
+ uint32_t mul = ops[op] & 0x0F;
+ if((mul + mul_offset) > 0x0F)
+ {
+ mul_offset = 0;
+ mul = 0x0F;
+ }
+ writeRegI(chip, 0x20 + op_addr[op], (dt | (mul + mul_offset)) & 0xFF);
+ }
+ else
+ {
+ writeRegI(chip, 0x20 + op_addr[op], ops[op] & 0xFF);
+ }
+ }
}
if(chn != 0xFFF)
{
- writeRegI(chip , 0xA0 + chn, (x & 0xFF));
- writeRegI(chip , 0xB0 + chn, (x >> 8));
- m_keyBlockFNumCache[c] = (x >> 8);
+ writeRegI(chip , 0xA0 + chn, (ftone & 0xFF));
+ writeRegI(chip , 0xB0 + chn, (ftone >> 8));
+ m_keyBlockFNumCache[c1] = (ftone >> 8);
+ }
+
+ if(cc1 >= 18)
+ {
+ m_regBD[chip ] |= (0x10 >> (cc1 - 18));
+ writeRegI(chip , 0x0BD, m_regBD[chip ]);
+ //x |= 0x800; // for test
}
}
@@ -308,15 +363,17 @@ void OPL3::touchNote(size_t c, uint8_t volume, uint8_t brightness)
uint8_t x = adli.modulator_40, y = adli.carrier_40;
uint32_t mode = 1; // 2-op AM
- if(m_channelCategory[c] == 0 || m_channelCategory[c] == 3)
+ if(m_channelCategory[c] == ChanCat_Regular ||
+ m_channelCategory[c] == ChanCat_Rhythm_Bass)
{
mode = adli.feedconn & 1; // 2-op FM or 2-op AM
}
- else if(m_channelCategory[c] == 1 || m_channelCategory[c] == 2)
+ else if(m_channelCategory[c] == ChanCat_4op_Master ||
+ m_channelCategory[c] == ChanCat_4op_Slave)
{
const adldata *i0, *i1;
- if(m_channelCategory[c] == 1)
+ if(m_channelCategory[c] == ChanCat_4op_Master)
{
i0 = &adli;
i1 = &m_insCache[c + 3];
@@ -448,31 +505,43 @@ void OPL3::silenceAll() // Silence all OPL channels.
void OPL3::updateChannelCategories()
{
- uint32_t fours = m_numFourOps;
+ const uint32_t fours = m_numFourOps;
- for(size_t chip = 0; chip < m_numChips; ++chip)
+ for(uint32_t chip = 0, fours_left = fours; chip < m_numChips; ++chip)
{
m_regBD[chip] = (m_deepTremoloMode * 0x80 + m_deepVibratoMode * 0x40 + m_rhythmMode * 0x20);
writeRegI(chip, 0x0BD, m_regBD[chip]);
- uint32_t fours_this_chip = std::min(fours, static_cast<uint32_t>(6u));
+ uint32_t fours_this_chip = std::min(fours_left, static_cast<uint32_t>(6u));
writeRegI(chip, 0x104, (1 << fours_this_chip) - 1);
- fours -= fours_this_chip;
+ fours_left -= fours_this_chip;
}
- // Mark all channels that are reserved for four-operator function
- if(m_rhythmMode == 1)
+ if(!m_rhythmMode)
{
- for(size_t a = 0; a < m_numChips; ++a)
+ for(size_t a = 0, n = m_numChips; a < n; ++a)
{
- for(size_t b = 0; b < 5; ++b)
- m_channelCategory[a * 23 + 18 + b] = static_cast<char>(b + 3);
- for(size_t b = 0; b < 3; ++b)
- m_channelCategory[a * 23 + 6 + b] = ChanCat_Rhythm_Slave;
+ for(size_t b = 0; b < 23; ++b)
+ {
+ m_channelCategory[a * 23 + b] =
+ (b >= 18) ? ChanCat_Rhythm_Slave : ChanCat_Regular;
+ }
+ }
+ }
+ else
+ {
+ for(size_t a = 0, n = m_numChips; a < n; ++a)
+ {
+ for(size_t b = 0; b < 23; ++b)
+ {
+ m_channelCategory[a * 23 + b] =
+ (b >= 18) ? static_cast<ChanCat>(ChanCat_Rhythm_Bass + (b - 18)) :
+ (b >= 6 && b < 9) ? ChanCat_Rhythm_Slave : ChanCat_Regular;
+ }
}
}
- size_t nextfour = 0;
- for(size_t a = 0; a < m_numFourOps; ++a)
+ uint32_t nextfour = 0;
+ for(uint32_t a = 0; a < fours; ++a)
{
m_channelCategory[nextfour] = ChanCat_4op_Master;
m_channelCategory[nextfour + 3] = ChanCat_4op_Slave;
@@ -562,6 +631,24 @@ void OPL3::setVolumeScaleModel(ADLMIDI_VolumeModels volumeModel)
}
}
+ADLMIDI_VolumeModels OPL3::getVolumeScaleModel()
+{
+ switch(m_volumeScale)
+ {
+ default:
+ case OPL3::VOLUME_Generic:
+ return ADLMIDI_VolumeModel_Generic;
+ case OPL3::VOLUME_NATIVE:
+ return ADLMIDI_VolumeModel_NativeOPL3;
+ case OPL3::VOLUME_DMX:
+ return ADLMIDI_VolumeModel_DMX;
+ case OPL3::VOLUME_APOGEE:
+ return ADLMIDI_VolumeModel_APOGEE;
+ case OPL3::VOLUME_9X:
+ return ADLMIDI_VolumeModel_9X;
+ }
+}
+
#ifndef ADLMIDI_HW_OPL
void OPL3::clearChips()
{
diff --git a/src/adlmidi_private.hpp b/src/adlmidi_private.hpp
index f719f01..c5b70ee 100644
--- a/src/adlmidi_private.hpp
+++ b/src/adlmidi_private.hpp
@@ -82,6 +82,7 @@ typedef int32_t ssize_t;
//#else
#include <map>
#include <set>
+#include <new> // nothrow
//#endif
#include <cstdlib>
#include <cstring>
@@ -399,10 +400,11 @@ public:
/**
* @brief On the note in specified chip channel with specified frequency of the tone
- * @param c Channel of chip (Emulated chip choosing by next formula: [c = ch + (chipId * 23)])
+ * @param c1 Channel of chip [or master 4-op channel] (Emulated chip choosing by next formula: [c = ch + (chipId * 23)])
+ * @param c2 Slave 4-op channel of chip, unused for 2op (Emulated chip choosing by next formula: [c = ch + (chipId * 23)])
* @param hertz Frequency of the tone in hertzes
*/
- void noteOn(size_t c, double hertz);
+ void noteOn(size_t c1, size_t c2, double hertz);
/**
* @brief Change setup of instrument in specified chip channel
@@ -447,6 +449,11 @@ public:
*/
void setVolumeScaleModel(ADLMIDI_VolumeModels volumeModel);
+ /**
+ * @brief Get the volume scaling model
+ */
+ ADLMIDI_VolumeModels getVolumeScaleModel();
+
#ifndef ADLMIDI_HW_OPL
/**
* @brief Clean up all running emulated chip instances
@@ -558,7 +565,7 @@ public:
//! Vibrato depth value
vibdepth;
//! Vibrato delay time
- int64_t vibdelay;
+ int64_t vibdelay_us;
//! Last LSB part of RPN value received
uint8_t lastlrpn,
//! Last MSB poart of RPN value received
@@ -801,7 +808,7 @@ public:
noteAfterTouchInUse = false;
vibspeed = 2 * 3.141592653 * 5.0;
vibdepth = 0.5 / 127;
- vibdelay = 0;
+ vibdelay_us = 0;
panning = 64;
portamento = 0;
portamentoEnable = false;
@@ -866,12 +873,12 @@ public:
//! 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;
+ int64_t kon_time_until_neglible_us;
+ int64_t vibdelay_us;
};
//! Time left until sounding will be muted after key off
- int64_t koff_time_until_neglible;
+ int64_t koff_time_until_neglible_us;
enum { users_max = 128 };
LocationData *users_first, *users_free_cells;
@@ -888,12 +895,12 @@ public:
void users_assign(const LocationData *users, size_t count);
// For channel allocation:
- AdlChannel(): koff_time_until_neglible(0)
+ AdlChannel(): koff_time_until_neglible_us(0)
{
users_clear();
}
- AdlChannel(const AdlChannel &oth): koff_time_until_neglible(oth.koff_time_until_neglible)
+ AdlChannel(const AdlChannel &oth): koff_time_until_neglible_us(oth.koff_time_until_neglible_us)
{
if(oth.users_first)
{
@@ -906,16 +913,16 @@ public:
AdlChannel &operator=(const AdlChannel &oth)
{
- koff_time_until_neglible = oth.koff_time_until_neglible;
+ koff_time_until_neglible_us = oth.koff_time_until_neglible_us;
users_assign(oth.users_first, oth.users_size);
return *this;
}
/**
- * @brief Increases age of active note in milliseconds time
- * @param ms Amount time in milliseconds
+ * @brief Increases age of active note in microseconds time
+ * @param us Amount time in microseconds
*/
- void addAge(int64_t ms);
+ void addAge(int64_t us);
};
#ifndef ADLMIDI_DISABLE_MIDI_SEQUENCER
diff --git a/src/chips/dosbox/dbopl.cpp b/src/chips/dosbox/dbopl.cpp
index 4eb79f8..2d31708 100644
--- a/src/chips/dosbox/dbopl.cpp
+++ b/src/chips/dosbox/dbopl.cpp
@@ -37,6 +37,7 @@
#include <math.h>
#include <stdlib.h>
#include <string.h>
+#include <vector>
#include "dbopl.h"
#if defined(__GNUC__) && __GNUC__ > 3
@@ -70,6 +71,36 @@
#define PI 3.14159265358979323846
#endif
+struct NoCopy {
+ NoCopy() {}
+private:
+ NoCopy(const NoCopy &);
+ NoCopy &operator=(const NoCopy &);
+};
+#if !defined(_WIN32)
+#include <pthread.h>
+struct Mutex : NoCopy {
+ Mutex() : m(PTHREAD_MUTEX_INITIALIZER) {}
+ void lock() { pthread_mutex_lock(&m); }
+ void unlock() { pthread_mutex_unlock(&m); }
+ pthread_mutex_t m;
+};
+#else
+#include <windows.h>
+struct Mutex : NoCopy {
+ Mutex() { InitializeCriticalSection(&m); }
+ ~Mutex() { DeleteCriticalSection(&m); }
+ void lock() { EnterCriticalSection(&m); }
+ void unlock() { LeaveCriticalSection(&m); }
+ CRITICAL_SECTION m;
+};
+#endif
+struct MutexHolder : NoCopy {
+ explicit MutexHolder(Mutex &m) : m(m) { m.lock(); }
+ ~MutexHolder() { m.unlock(); }
+ Mutex &m;
+};
+
namespace DBOPL {
#define OPLRATE ((double)(14318180.0 / 288.0))
@@ -222,24 +253,24 @@ static const Bit8u KslShiftTable[4] = {
// Pan law table
static const Bit16u PanLawTable[] =
{
- 65535, 65529, 65514, 65489, 65454, 65409, 65354, 65289,
- 65214, 65129, 65034, 64929, 64814, 64689, 64554, 64410,
- 64255, 64091, 63917, 63733, 63540, 63336, 63123, 62901,
- 62668, 62426, 62175, 61914, 61644, 61364, 61075, 60776,
- 60468, 60151, 59825, 59489, 59145, 58791, 58428, 58057,
- 57676, 57287, 56889, 56482, 56067, 55643, 55211, 54770,
- 54320, 53863, 53397, 52923, 52441, 51951, 51453, 50947,
- 50433, 49912, 49383, 48846, 48302, 47750, 47191,
- 46340, /* Center left */
- 46340, /* Center right */
- 45472, 44885, 44291, 43690, 43083, 42469, 41848, 41221,
- 40588, 39948, 39303, 38651, 37994, 37330, 36661, 35986,
- 35306, 34621, 33930, 33234, 32533, 31827, 31116, 30400,
- 29680, 28955, 28225, 27492, 26754, 26012, 25266, 24516,
- 23762, 23005, 22244, 21480, 20713, 19942, 19169, 18392,
- 17613, 16831, 16046, 15259, 14469, 13678, 12884, 12088,
- 11291, 10492, 9691, 8888, 8085, 7280, 6473, 5666,
- 4858, 4050, 3240, 2431, 1620, 810, 0
+ 65535, 65529, 65514, 65489, 65454, 65409, 65354, 65289,
+ 65214, 65129, 65034, 64929, 64814, 64689, 64554, 64410,
+ 64255, 64091, 63917, 63733, 63540, 63336, 63123, 62901,
+ 62668, 62426, 62175, 61914, 61644, 61364, 61075, 60776,
+ 60468, 60151, 59825, 59489, 59145, 58791, 58428, 58057,
+ 57676, 57287, 56889, 56482, 56067, 55643, 55211, 54770,
+ 54320, 53863, 53397, 52923, 52441, 51951, 51453, 50947,
+ 50433, 49912, 49383, 48846, 48302, 47750, 47191,
+ 46340, /* Center left */
+ 46340, /* Center right */
+ 45472, 44885, 44291, 43690, 43083, 42469, 41848, 41221,
+ 40588, 39948, 39303, 38651, 37994, 37330, 36661, 35986,
+ 35306, 34621, 33930, 33234, 32533, 31827, 31116, 30400,
+ 29680, 28955, 28225, 27492, 26754, 26012, 25266, 24516,
+ 23762, 23005, 22244, 21480, 20713, 19942, 19169, 18392,
+ 17613, 16831, 16046, 15259, 14469, 13678, 12884, 12088,
+ 11291, 10492, 9691, 8888, 8085, 7280, 6473, 5666,
+ 4858, 4050, 3240, 2431, 1620, 810, 0
};
//Generate a table index and table shift value using input value from a selected rate
@@ -465,7 +496,7 @@ Bits Operator::TemplateVolume( ) {
return vol;
}
//In sustain phase, but not sustaining, do regular release
- /* fall through */
+ /* fall through */
case RELEASE:
vol += RateForward( releaseAdd );;
if ( GCC_UNLIKELY(vol >= ENV_MAX) ) {
@@ -1294,21 +1325,40 @@ void Chip::GenerateBlock3_Mix( Bitu total, Bit32s* output ) {
}
}
-void Chip::Setup( Bit32u rate ) {
+struct CacheEntry {
+ Bit32u rate;
+ Bit32u freqMul[16];
+ Bit32u linearRates[76];
+ Bit32u attackRates[76];
+};
+static std::vector<CacheEntry> cache;
+static Mutex cacheMutex;
+
+static const CacheEntry *CacheLookupRateDependent( Bit32u rate )
+{
+ for ( size_t i = 0, n = cache.size(); i < n; ++i ) {
+ if (cache[i].rate == rate)
+ return &cache[i];
+ }
+ return NULL;
+}
+
+static const CacheEntry &ComputeRateDependent( Bit32u rate )
+{
+ {
+ MutexHolder lock( cacheMutex );
+ if (const CacheEntry *entry = CacheLookupRateDependent( rate ))
+ return *entry;
+ }
+
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;
+ CacheEntry entry;
+ entry.rate = rate;
+ Bit32u *freqMul = entry.freqMul;
+ Bit32u *linearRates = entry.linearRates;
+ Bit32u *attackRates = entry.attackRates;
//With higher octave this gets shifted up
//-1 since the freqCreateTable = *2
@@ -1330,6 +1380,7 @@ void Chip::Setup( Bit32u rate ) {
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++ ) {
@@ -1382,6 +1433,36 @@ void Chip::Setup( Bit32u rate ) {
//This should provide instant volume maximizing
attackRates[i] = 8 << RATE_SH;
}
+
+ MutexHolder lock( cacheMutex );
+ if (const CacheEntry *entry = CacheLookupRateDependent( rate ))
+ return *entry;
+
+ cache.push_back(entry);
+ return cache.back();
+}
+
+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;
+
+ const CacheEntry &entry = ComputeRateDependent( rate );
+ freqMul = entry.freqMul;
+ linearRates = entry.linearRates;
+ attackRates = entry.attackRates;
+
//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 );
diff --git a/src/chips/dosbox/dbopl.h b/src/chips/dosbox/dbopl.h
index 429735f..89d2019 100644
--- a/src/chips/dosbox/dbopl.h
+++ b/src/chips/dosbox/dbopl.h
@@ -227,11 +227,11 @@ struct Chip {
Bit32u noiseValue;
//Frequency scales for the different multiplications
- Bit32u freqMul[16];
+ const Bit32u *freqMul/*[16]*/;
//Rates for decay and release for rate of this chip
- Bit32u linearRates[76];
+ const Bit32u *linearRates/*[76]*/;
//Best match attack rates for the rate of this chip
- Bit32u attackRates[76];
+ const Bit32u *attackRates/*[76]*/;
//18 channels with 2 operators each
Channel chan[18];
diff --git a/src/chips/dosbox_opl3.cpp b/src/chips/dosbox_opl3.cpp
index 37f5e9c..0b9501f 100644
--- a/src/chips/dosbox_opl3.cpp
+++ b/src/chips/dosbox_opl3.cpp
@@ -76,5 +76,5 @@ void DosBoxOPL3::nativeGenerateN(int16_t *output, size_t frames)
const char *DosBoxOPL3::emulatorName()
{
- return "DosBox 0.74-r4111 OPL3";
+ return "DOSBox 0.74-r4111 OPL3";
}
diff --git a/src/cvt_xmi2mid.hpp b/src/cvt_xmi2mid.hpp
index decb25c..e8d9dbf 100644
--- a/src/cvt_xmi2mid.hpp
+++ b/src/cvt_xmi2mid.hpp
@@ -640,7 +640,7 @@ static int xmi2mid_GetVLQ2(struct xmi2mid_xmi_ctx *ctx, uint32_t *quant) {
int32_t data;
*quant = 0;
- for (i = 0; i < 4; i++) {
+ for (i = 0; xmi2mid_getsrcpos(ctx) != xmi2mid_getsrcsize(ctx); ++i) {
data = xmi2mid_read1(ctx);
if (data & 0x80) {
xmi2mid_skipsrc(ctx, -1);
diff --git a/src/midi_sequencer.hpp b/src/midi_sequencer.hpp
index a8cbfac..54ceeea 100644
--- a/src/midi_sequencer.hpp
+++ b/src/midi_sequencer.hpp
@@ -315,11 +315,24 @@ public:
Format_XMIDI
};
+ /**
+ * @brief Format of loop points implemented by CC events
+ */
+ enum LoopFormat
+ {
+ Loop_Default,
+ Loop_RPGMaker = 1,
+ Loop_EMIDI,
+ Loop_HMI
+ };
+
private:
//! Music file format type. MIDI is default.
FileFormat m_format;
//! SMF format identifier.
unsigned m_smfFormat;
+ //! Loop points format
+ LoopFormat m_loopFormat;
//! Current position
Position m_currentPosition;
diff --git a/src/midi_sequencer_impl.hpp b/src/midi_sequencer_impl.hpp
index 0fe6192..6d6b2d8 100644
--- a/src/midi_sequencer_impl.hpp
+++ b/src/midi_sequencer_impl.hpp
@@ -270,6 +270,7 @@ BW_MidiSequencer::BW_MidiSequencer() :
m_interface(NULL),
m_format(Format_MIDI),
m_smfFormat(0),
+ m_loopFormat(Loop_Default),
m_loopEnabled(false),
m_fullSongTimeLength(0.0),
m_postSongWaitDelay(1.0),
@@ -399,6 +400,7 @@ void BW_MidiSequencer::buildSmfSetupReset(size_t trackCount)
m_fullSongTimeLength = 0.0;
m_loopStartTime = -1.0;
m_loopEndTime = -1.0;
+ m_loopFormat = Loop_Default;
m_trackDisable.clear();
m_trackSolo = ~(size_t)0;
m_musTitle.clear();
@@ -614,6 +616,19 @@ bool BW_MidiSequencer::buildSmfTrackData(const std::vector<std::vector<uint8_t>
}
}
+#ifdef ENABLE_END_SILENCE_SKIPPING
+ //Have track end on its own row? Clear any delay on the row before
+ if(event.subtype == MidiEvent::ST_ENDTRACK && evtPos.events.size() == 1)
+ {
+ if (!m_trackData[tk].empty())
+ {
+ MidiTrackRow &previous = m_trackData[tk].back();
+ previous.delay = 0;
+ previous.timeDelay = 0;
+ }
+ }
+#endif
+
if((evtPos.delay > 0) || (event.subtype == MidiEvent::ST_ENDTRACK))
{
evtPos.absPos = abs_position;
@@ -1361,12 +1376,92 @@ BW_MidiSequencer::MidiEvent BW_MidiSequencer::parseEvent(const uint8_t **pptr, c
if(evType == MidiEvent::T_CTRLCHANGE)
{
//111'th loopStart controller (RPG Maker and others)
- if((m_format == Format_MIDI) && (evt.data[0] == 111))
+ if(m_format == Format_MIDI)
{
- //Change event type to custom Loop Start event and clear data
- evt.type = MidiEvent::T_SPECIAL;
- evt.subtype = MidiEvent::ST_LOOPSTART;
- evt.data.clear();
+ switch(evt.data[0])
+ {
+ case 110:
+ if(m_loopFormat == Loop_Default)
+ {
+ //Change event type to custom Loop Start event and clear data
+ evt.type = MidiEvent::T_SPECIAL;
+ evt.subtype = MidiEvent::ST_LOOPSTART;
+ evt.data.clear();
+ m_loopFormat = Loop_HMI;
+ }
+ else if(m_loopFormat == Loop_HMI)
+ {
+ // Repeating of 110'th point is BAD practice, treat as EMIDI
+ m_loopFormat = Loop_EMIDI;
+ }
+ break;
+
+ case 111:
+ if(m_loopFormat == Loop_HMI)
+ {
+ //Change event type to custom Loop End event and clear data
+ evt.type = MidiEvent::T_SPECIAL;
+ evt.subtype = MidiEvent::ST_LOOPEND;
+ evt.data.clear();
+ }
+ else if(m_loopFormat != Loop_EMIDI)
+ {
+ // Change event type to custom Loop Start event and clear data
+ evt.type = MidiEvent::T_SPECIAL;
+ evt.subtype = MidiEvent::ST_LOOPSTART;
+ evt.data.clear();
+ }
+ break;
+
+ case 113:
+ if(m_loopFormat == Loop_EMIDI)
+ {
+ //EMIDI does using of CC113 with same purpose as CC7
+ evt.data[0] = 7;
+ }
+ break;
+#if 0 //WIP
+ case 116:
+ if(m_loopFormat == Loop_EMIDI)
+ {
+ evt.type = MidiEvent::T_SPECIAL;
+ evt.subtype = MidiEvent::ST_LOOPSTACK_BEGIN;
+ evt.data[0] = evt.data[1];
+ evt.data.pop_back();
+
+ if(m_interface->onDebugMessage)
+ {
+ m_interface->onDebugMessage(
+ m_interface->onDebugMessage_userData,
+ "Stack EMIDI Loop Start at %d to %d level with %d loops",
+ m_loop.stackLevel,
+ m_loop.stackLevel + 1,
+ evt.data[0]
+ );
+ }
+ }
+ break;
+
+ case 117: // Next/Break Loop Controller
+ if(m_loopFormat == Loop_EMIDI)
+ {
+ evt.type = MidiEvent::T_SPECIAL;
+ evt.subtype = MidiEvent::ST_LOOPSTACK_END;
+ evt.data.clear();
+
+ if(m_interface->onDebugMessage)
+ {
+ m_interface->onDebugMessage(
+ m_interface->onDebugMessage_userData,
+ "Stack EMIDI Loop End at %d to %d level",
+ m_loop.stackLevel,
+ m_loop.stackLevel - 1
+ );
+ }
+ }
+ break;
+#endif
+ }
}
if(m_format == Format_XMIDI)
@@ -1502,7 +1597,7 @@ void BW_MidiSequencer::handleEvent(size_t track, const BW_MidiSequencer::MidiEve
if(m_interface->onDebugMessage)
m_interface->onDebugMessage(m_interface->onDebugMessage_userData, "Switching another device: %s", data);
if(m_interface->rt_deviceSwitch)
- m_interface->rt_deviceSwitch(m_interface->rtUserData, track, data, length);
+ m_interface->rt_deviceSwitch(m_interface->rtUserData, track, data, size_t(length));
return;
}
diff --git a/src/wopl/wopl_file.c b/src/wopl/wopl_file.c
index 25b75be..f018cbc 100644
--- a/src/wopl/wopl_file.c
+++ b/src/wopl/wopl_file.c
@@ -353,6 +353,8 @@ int WOPL_LoadInstFromMem(WOPIFile *file, void *mem, size_t length)
GO_FORWARD(2);
}
+ file->version = version;
+
{/* is drum flag */
if(length < 1)
return WOPL_ERR_UNEXPECTED_ENDING;
@@ -434,11 +436,13 @@ size_t WOPL_CalculateInstFileSize(WOPIFile *file, uint16_t version)
* is percussive instrument
*/
- if(version >= 3)
- ins_size = WOPL_INST_SIZE_V3;
+ if(version > 2)
+ /* Skip sounding delays are not part of single-instrument file
+ * two sizes of uint16_t will be subtracted */
+ ins_size = WOPL_INST_SIZE_V3 - (sizeof(uint16_t) * 2);
else
ins_size = WOPL_INST_SIZE_V2;
- final_size += ins_size * 128;
+ final_size += ins_size;
return final_size;
}
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index ee02087..9e6b247 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -3,6 +3,7 @@ set(CMAKE_CXX_STANDARD 11)
add_subdirectory(bankmap)
add_subdirectory(conversion)
+add_subdirectory(wopl-file)
add_library(Catch-objects OBJECT "common/catch_main.cpp")
target_include_directories(Catch-objects PRIVATE "common")
diff --git a/test/wopl-file/CMakeLists.txt b/test/wopl-file/CMakeLists.txt
new file mode 100644
index 0000000..082f1fe
--- /dev/null
+++ b/test/wopl-file/CMakeLists.txt
@@ -0,0 +1,15 @@
+
+set(CMAKE_CXX_STANDARD 11)
+
+include_directories (${CMAKE_CURRENT_SOURCE_DIR}/../common
+ ${CMAKE_SOURCE_DIR}/include
+ ${CMAKE_SOURCE_DIR}/src)
+
+add_executable(WoplFile
+ wopl_file.cpp
+ ${libADLMIDI_SOURCE_DIR}/src/wopl/wopl_file.c
+ $<TARGET_OBJECTS:Catch-objects>)
+
+set_target_properties(WoplFile PROPERTIES COMPILE_DEFINITIONS "GSL_THROW_ON_CONTRACT_VIOLATION")
+add_test(NAME WoplFileTest COMMAND WoplFile)
+
diff --git a/test/wopl-file/wopl_file.cpp b/test/wopl-file/wopl_file.cpp
new file mode 100644
index 0000000..04913dd
--- /dev/null
+++ b/test/wopl-file/wopl_file.cpp
@@ -0,0 +1,116 @@
+#include <catch.hpp>
+#include <stdio.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include "wopl/wopl_file.h"
+
+static const char *test_files[] = {
+ "fm_banks/wopl_files/Apogee-IMF-90.wopl",
+ "fm_banks/wopl_files/DMXOPL3-by-sneakernets-GS.wopl",
+ "fm_banks/wopl_files/GM-By-J.A.Nguyen-and-Wohlstand.wopl",
+ "fm_banks/wopl_files/lostvik.wopl",
+ "fm_banks/wopl_files/Wohlstand's-modded-FatMan.wopl"
+};
+
+static WOPLFile *LoadBankFromFile(const char *path);
+
+TEST_CASE("[WOPLFile] Load, Save, Load")
+{
+ for (int version : {1, 2}) {
+ for (const char *test_file : test_files) {
+ fprintf(stderr, "--- Test '%s' with version %d\n", test_file, version);
+
+ WOPLFile *wopl = LoadBankFromFile(test_file);
+ REQUIRE(wopl != nullptr);
+
+ size_t size = WOPL_CalculateBankFileSize(wopl, version);
+ char *mem = new char[size];
+
+ REQUIRE(WOPL_SaveBankToMem(wopl, mem, size, version, 0) == 0);
+
+ {
+ int error;
+ WOPLFile *wopl2 = WOPL_LoadBankFromMem(mem, size, &error);
+ if(!wopl2)
+ fprintf(stderr, "--- Loading error %d\n", error);
+ REQUIRE(wopl2);
+
+ if(wopl->version == version)
+ REQUIRE(WOPL_BanksCmp(wopl, wopl2) == 1);
+ else {
+ REQUIRE(wopl->banks_count_melodic == wopl2->banks_count_melodic);
+ REQUIRE(wopl->banks_count_percussion == wopl2->banks_count_percussion);
+ REQUIRE(wopl->opl_flags == wopl2->opl_flags);
+ REQUIRE(wopl->volume_model == wopl2->volume_model);
+ }
+
+ WOPL_Free(wopl2);
+ }
+
+ delete[] mem;
+
+ {
+ unsigned melo_banks = wopl->banks_count_melodic;
+ unsigned drum_banks = wopl->banks_count_percussion;
+
+ for(unsigned Bi = 0; Bi < melo_banks + drum_banks; ++Bi)
+ {
+ const WOPLBank &bank = (Bi < melo_banks) ?
+ wopl->banks_melodic[Bi] : wopl->banks_percussive[Bi - melo_banks];
+
+ for(unsigned Pi = 0; Pi < 128; ++Pi)
+ {
+ WOPIFile opli = {};
+ opli.version = version;
+ opli.is_drum = Bi >= melo_banks;
+ opli.inst = bank.ins[Pi];
+
+ size = WOPL_CalculateInstFileSize(&opli, version);
+ mem = new char[size];
+
+ REQUIRE(WOPL_SaveInstToMem(&opli, mem, size, version) == 0);
+
+ WOPIFile opli2 = {};
+ int error = WOPL_LoadInstFromMem(&opli2, mem, size);
+ if(error != 0)
+ fprintf(stderr, "--- Loading error %d\n", error);
+ REQUIRE(error == 0);
+
+ size_t compare_size = sizeof(WOPIFile) - 2 * sizeof(uint16_t);
+ REQUIRE(memcmp(&opli, &opli2, compare_size) == 0);
+
+ delete[] mem;
+ }
+ }
+ }
+
+ WOPL_Free(wopl);
+ }
+ }
+}
+
+static WOPLFile *LoadBankFromFile(const char *path)
+{
+ WOPLFile *file = nullptr;
+ FILE *fh;
+ struct stat st;
+ char *mem = nullptr;
+
+ if(!(fh = fopen(path, "rb")) || fstat(fileno(fh), &st) != 0)
+ goto fail;
+
+ mem = new char[st.st_size];
+ if(fread(mem, st.st_size, 1, fh) != 1)
+ goto fail;
+
+ int error;
+ file = WOPL_LoadBankFromMem(mem, st.st_size, &error);
+ if(!file)
+ fprintf(stderr, "--- Loading error %d\n", error);
+
+fail:
+ delete[] mem;
+ if (fh) fclose(fh);
+ return file;
+}
diff --git a/utils/gen_adldata/file_formats/load_bnk2.h b/utils/gen_adldata/file_formats/load_bnk2.h
index a55551a..b4f8da9 100644
--- a/utils/gen_adldata/file_formats/load_bnk2.h
+++ b/utils/gen_adldata/file_formats/load_bnk2.h
@@ -93,6 +93,7 @@ static bool LoadBNK2(const char *fn, unsigned bank, const char *prefix,
if(xxP24NNN & 8)
{
// dual-op
+ tmp2.real4op = true;
tmp[1].diff = true;
size_t resno = InsertIns(tmp[0], tmp[1], tmp2, std::string(1, '\377') + name, name2);
SetBank(bank, (unsigned int)gmno, resno);
diff --git a/utils/gen_adldata/scrapped.txt b/utils/gen_adldata/scrapped.txt
index 10c15cd..7ea1dc0 100644
--- a/utils/gen_adldata/scrapped.txt
+++ b/utils/gen_adldata/scrapped.txt
@@ -75,7 +75,7 @@ static const char *const banknames[] =
"TMB (Shadow Warrior)",
"DMX (Raptor)",
"OP3 (Modded GMOPL by Wohlstand)",
- "SB (Jammey O'Connel's bank)",
+ "SB (Jamie O'Connell's bank)",
"TMB (Default bank of Build Engine)",
"OP3 (4op bank by James Alan Nguyen)",
"TMB (Blood)",
@@ -254,7 +254,7 @@ LoadTMB("fm_banks/tmb_files/bloodtmb.tmb", 69, "apgblood");
LoadTMB("fm_banks/tmb_files/lee.tmb", 70, "apglee");
LoadTMB("fm_banks/tmb_files/nam.tmb", 71, "apgnam");
-LoadDoom("fm_banks/doom2/DMXOPL-by-sneakernets.op2", 72, "skeakernets");
+LoadDoom("fm_banks/doom2/DMXOPL-by-sneakernets.op2", 72, "sneakernets");
//LoadBNK("bnk_files/grassman1.bnk", 63, "b63", false);
//LoadBNK("bnk_files/grassman2.bnk", 64, "b64", false);
diff --git a/utils/vlc_codec/libadlmidi.c b/utils/vlc_codec/libadlmidi.c
index 187ee84..0440fe5 100644
--- a/utils/vlc_codec/libadlmidi.c
+++ b/utils/vlc_codec/libadlmidi.c
@@ -98,7 +98,7 @@ static const char * const emulator_type_descriptions[] =
{
N_("Nuked OPL3 1.8"),
N_("Nuked OPL3 1.7.4 (Optimized)"),
- N_("DosBox"),
+ N_("DOSBox"),
NULL
};