Merge branch 'master' of https://github.com/tildearrow/furnace into nmk112

This commit is contained in:
cam900 2023-11-02 21:19:26 +09:00
commit 31977ab7c6
111 changed files with 2630 additions and 574 deletions

View file

@ -110,7 +110,7 @@ option(WITH_DEMOS "Install demo songs" ON)
option(WITH_INSTRUMENTS "Install instruments" ON)
option(WITH_WAVETABLES "Install wavetables" ON)
set(DEPENDENCIES_INCLUDE_DIRS "")
set(DEPENDENCIES_INCLUDE_DIRS extern/IconFontCppHeaders src/icon)
if (ANDROID AND NOT TERMUX)
set(DEPENDENCIES_DEFINES "IS_MOBILE")
@ -919,7 +919,6 @@ if (BUILD_GUI)
list(APPEND DEPENDENCIES_INCLUDE_DIRS
extern/imgui_patched
extern/imgui_patched/backends
extern/IconFontCppHeaders
extern/igfd
)
if (WIN32 OR APPLE)

11
TODO.md
View file

@ -4,13 +4,18 @@
# THE REAL TO-DO LIST
because I want to focus for a couple hours
- Amiga's Period Modulation not working
- Song is silent after playing an order after loop point
- Crash when opening one-column chan osc with 48 channels
- Select loaded instrument on open - rewrite because I want a setting...
- re-engineer volume handling? Sound Unit cries at me
- finish status view
- finish auto-clone
once you have done all of this (maybe not the first one) and merged the two or so pending pull requests, release 0.6.1
Furnace is like alcohol...
# and then
- new oscilloscope renderer - custom code that uses texture and fixes two issues: too many vertices, and broken anti-aliasing
- new pattern renderer - performance improvements

Binary file not shown.

BIN
demos/c64/deadlock.fur Normal file

Binary file not shown.

View file

@ -26,4 +26,6 @@ once familiar with the tracker, look to [9-guides](../9-guides/README.md) for us
## tutorial?
[How to Learn Chiptune Trackers](https://www.youtube.com/watch?v=Q37XuOLz0jw): video tutorial created by Button Masher. covers the basic mechanics of chiptune tracking using Furnace for demonstration.
[Furnace Tutorials](https://youtube.com/playlist?list=PLCELB6AsTZUnwv0PC5AAGHjvg47F44YQ1): video tutorials created by Spinning Square Waves. be noted that these may not apply to the current version.

View file

@ -55,5 +55,12 @@ everything from the wavetables list applies here also, with the addition of one
samples are saved as standard wave (.wav) files.
- right-clicking the Save button brings up a menu with the following options:
- **save raw sample...**: saves the selected sample as raw data.
right-clicking the Save button brings up a menu with the following options:
- **save raw sample...**: saves the selected sample as raw data.
right-clicking a sample in the list brings up a menu:
- **make instrument**: creates a new instrument which is set to use the selected sample.
- **duplicate**: makes a copy of the selected sample.
- **replace...**: opens a file dialog to choose a replacement sample.
- **save**: opens a file dialog to choose where to save the sample.
- **delete**: removes the sample.

View file

@ -49,6 +49,7 @@ items in _italic_ don't appear in basic mode and are only available in advanced
- macOS: `~/Library/Application Support/Furnace/backups`
- Linux/other: `~/.config/furnace/backups`
- this directory grows in size as you use Furnace. remember to delete old backups periodically to save space.
- **do NOT rely on the backup system as auto-save!** you should save a restored backup because Furnace will not save backups of backups.
- **exit**: closes Furnace.

View file

@ -47,6 +47,7 @@ settings are saved when clicking the **OK** or **Apply** buttons at the bottom o
- **When creating new song**:
- **Display system preset selector**
- **Start with initial system**
- **Default author name**
### Start-up
@ -92,7 +93,7 @@ settings are saved when clicking the **OK** or **Apply** buttons at the bottom o
- setting this to a high value increases latency.
- **Exclusive mode**: enables Exclusive Mode, which may offer latency improvements.
- only available on WASAPI devices in the PortAudio backend!
- **Low-latency mode (experimental!)**: reduces latency by running the engine faster than the tick rate. useful for live playback/jam mode.
- **Low-latency mode**: reduces latency by running the engine faster than the tick rate. useful for live playback/jam mode.
- only enable if your buffer size is small (10ms or less).
- **Force mono audio**: use if you're unable to hear stereo audio (e.g. single speaker or hearing loss in one ear).
- **want:** displays requested audio configuration.
@ -104,6 +105,7 @@ settings are saved when clicking the **OK** or **Apply** buttons at the bottom o
- **Software clipping**: clips output to nominal range (-1.0 to 1.0) before passing it to the audio device.
- this avoids activating Windows' built-in limiter.
- this option shall be enabled when using PortAudio backend with a DirectSound device.
- **DC offset correction**: apply a filter to remove DC bias, where the output is overall above or below zero. default is on.
### Metronome
@ -299,6 +301,9 @@ below all the binds, select a key from the dropdown list to add it. it will appe
- applies when playback is stopped.
- **Don't scroll when moving cursor**
- **Move cursor with scroll wheel**
- **No**
- **Yes**
- **Inverted**
## Appearance

View file

@ -38,18 +38,39 @@ clicking on a channel name mutes that channel.
double-clicking or right-clicking it enables solo mode, in which only that channel will be audible.
clicking the `++` at the top left corner of the pattern view cycles through three channel bar view modes:
- **Compact**: shows only channel names.
- **Expanded**: as shown above. adds buttons:
clicking the `++` at the top left corner of the pattern view pops up a small menu to set view modes:
- **Effect columns/collapse**: displays extra options for collapsing channels and adding/removing effect columns:
- **-**: collapse visible columns. changes to **+** when columns are hidden; click to expand them.
- **<**: disables the last effect column and hides it. effects are not deleted...
- **>**: adds an effects column. if one previously existed, its contents will be preserved.
- **>**: adds an effect column. if one previously existed, its contents will be preserved.
- **Pattern names**: displays pattern names (per channel). pattern names are also visible when hovering over a pattern in the order list.
right-clicking the `++` toggles the visualizer, which is active only during playback.
- **Channel group hints**: display indicators when channels are paired in some way (e.g. OPL3 4-op mode).
- **Visualizer**: during playback, show visual effects in the pattern view.
- also can be toggled by right-clicking on the `++` button.
- **Channel status**: displays icons that indicate activity in the channel. see the "channel status" section below.
to rename and/or hide channels, open [the Channels window](../8-advanced/channels.md) via the window menu.
### channel status
- note status:
- ![note off](status-note-off.png) note off
- ![note on](status-note-on.png) note on
- ![macro released](status-note-on-rel.png) note on but macro released (`REL`)
- ![note released](status-note-off-rel.png) note released (`===`)
- pitch alteration:
- ![no effect](status-pitch-none.png) nothing
- ![pitch up](status-pitch-up.png) pitch slide up
- ![pitch down](status-pitch-down.png) pitch slide down
- ![portamento](status-pitch-porta.png) portamento
- ![arpeggio](status-pitch-arpeg.png) arpeggio
- volume alteration:
- ![no effect](status-volume-none.png) nothing
- ![volume up](status-volume-up.png) volume slide up
- ![volume down](status-volume-down.png) volume slide down
- ![tremolo](status-volume-tremolo.png) tremolo
- other icons may be present depending on the used chips.
## input

Binary file not shown.

After

Width:  |  Height:  |  Size: 282 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 261 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 299 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 302 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 257 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 267 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 362 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 486 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 304 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 271 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 166 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 414 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 305 B

View file

@ -96,24 +96,37 @@ every macro can be defined though one of three methods, selectable with the left
- ![ADSR](macro-button-ADSR.png) **ADSR:** this is a traditional ADSR envelope, defined by the rate of increase and decrease of value over time.
- ![LFO](macro-button-LFO.png) **LFO:** the Low Frequency Oscillator generates a repeating wave of values.
some macros are "bitmap" style. they represent a number of "bits" that can be toggled individually, and the values listed represent the sum of which bits are turned on.
### sequence
![sequence macro editor](macro-seq.png)
![clipped sequence macro editor](macro-seq-clip.png)
![bitmask sequence macro editor](macro-seq-bitmask.png)
the number between the macro type label and the macro type button is the macro length in steps. the `-` and `+` buttons change the length of the macro. start out by adding at least a few steps.
the values of the macro can be drawn in the "bar graph" box.
- arpeggio and pitch macros may have values above or below the visible area; small chevrons will be shown until they are scrolled into view.
- bitmask-style macros show labels for each of their bits, and these are edited as toggles.
just beneath the box is a shorter bar that controls looping.
arpeggio macros have a short bar for setting whether to interpret the values as being "relative" or "fixed".
- by default, values are offsets **relative** to the note.
- if clicked on, a value becomes **fixed** and will be played at its corresponding note without regard to the note entered into the pattern.
- values are counted from `C-0`. for example, a fixed value of 48 produces a `C-4` note.
- fixed values are especially useful for noise instruments with preset periods.
below this is a short bar that controls macro loop and release.
- click to set the start point of a loop; the end point is the last value or release point. it appears as half-height bars. right-click to remove the loop.
- shift-click to set the release point. when played, the macro will hold here until the note is released. it appears as a full-height bar. right-click to remove the release point.
finally, the sequence of values can be directly edited in the text box at the bottom.
- the loop start is entered as a `|`.
- the release point is entered as a `/`.
- in arpeggio macros, a value starting with a `@` is an absolute note (instead of a relative shift). no matter the note entered in the pattern, `@` values will be played at that exact note. this is especially useful for noise instruments with preset periods.
- in arpeggio macros, a value starting with a `@` is a fixed value as described above.
- in bitmask-style macros, the values are added up in binary and converted to decimal. see [the hexadecimal guide](../1-intro/hex.md) for more info.
### ADSR

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

View file

@ -159,3 +159,14 @@ in there, you can modify certain data pertaining to your sample, such as the:
- **Create instrument from sample**: creates a new instrument with its sample set to the current sample.
- **Zoom**: shows and sets sample view zoom level.
- **Zoom mode**: switches between "Auto" (entire sample fits in window) and "100%" (each horizontal pixel represents one sample point).
in the sample viewer:
- left-click and drag to select a region of the sample.
- right-click to display a menu:
- **cut**: puts the selection in the sample clipboard and deletes it from the sample.
- **copy**: copies the selection into the sample clipboard.
- **paste**: inserts the sample clipboard at the start of the selection.
- **paste (replace)**: replaces the selection with the sample clipboard.
- **paste (mix)**: mixes the sample clipboard into the existing sample, beginning at the start of the selection.
- **set loop to selection**: changes loop region to match selection.
- **create wavetable from selection**: copies the selection into a new wavetable entry.

View file

@ -47,6 +47,7 @@ two versions of aforementioned chip exist - 6581 (original chip) and 8580 (impro
- if `y` is not 0: now
- this effect is not necessary if the instrument's duty macro is absolute.
- `1Exy`: **change additional parameters.**
- _this effect only exists for compatibility reasons, and its use is discouraged._
- `x` may be one of the following:
- `0`: attack (`y` from `0` to `F`)
- `1`: decay (`y` from `0` to `F`)
@ -55,9 +56,26 @@ two versions of aforementioned chip exist - 6581 (original chip) and 8580 (impro
- `4`: ring modulation (`y` is `0` or `1`)
- `5`: oscillator sync (`y` is `0` or `1`)
- `6`: disable channel 3 (`y` is `0` or `1`)
- `20xy`: **set attack/decay.**
- `x` is the attack.
- `y` is the decay.
- `21xy`: **set sustain/release.**
- `x` is the sustain.
- `y` is the release.
- `3xxx`: **set duty cycle.** `xxx` range is `000` to `FFF`.
- `4xxx`: **set cutoff.** `xxx` range is `000` to `7FF`.
## info
this chip uses the [C64](../4-instrument/c64.md) instrument editor.
## channel status
the following icons are displayed when channel status is enabled in the pattern view:
- channel is silent:
- ![not muted](status-C64-none.png) it's not
- ![gate bit disabled](status-C64-gate-off.png) gate bit disabled
- ![gate bit disabled and test bit enabled](status-C64-gate-off-test-on.png) gate bit disabled and test bit enabled
- ![text bit enabled](status-C64-test-on.png) test bit enabled
- ![ch3off enabled in filter mode](status-C64-ch3off.png) ch3off enabled in filter mode

View file

@ -19,8 +19,16 @@ furthermore, it has some PCM and LFO!
- when LFO is enabled, channel 2 is muted and its output is passed to channel 1's frequency.
- `13xx`: **set LFO speed.**
- `17xx`: **toggle LEGACY sample mode.**
- **this effect exists only for compatibility reasons! its use is NOT recommented. use Sample type instruments instead.**
- **this effect exists only for compatibility reasons! its use is NOT recommended. use Sample type instruments instead.**
## info
this chip uses the [PC Engine](../4-instrument/pce.md) instrument editor.
## channel status
the following icons are displayed when channel status is enabled in the pattern view:
- noise mode (channels 5 and 6 only):
- ![noise mode off](status-PCE-noise-off.png) off
- ![noise mode on](status-PCE-noise-on.png) on

View file

@ -65,6 +65,20 @@ Furnace also allows the SNES to use wavetables (and the wavetable synthesizer) i
this chip uses the [SNES](../4-instrument/snes.md) instrument editor.
## channel status
the following icons are displayed when channel status is enabled in the pattern view:
- envelope/gain status:
- ![direct gain, envelope off](status-SNES-gain-direct.png) direct gain
- ![linear gain decrease](status-SNES-gain-dec-lin.png) linear gain decrease
- ![logarithmic gain decrease](status-SNES-gain-dec-log.png) logarithmic gain decrease
- ![linear gain increase](status-SNES-gain-inc-lin.png) linear gain increase
- ![bent-line gain increase](status-SNES-gain-inc-bent.png) bent-line gain increase
- ![envelope attack](status-SNES-env-A.png) envelope attack
- ![envelope decay](status-SNES-env-D.png) envelope decay
- ![envelope sustain](status-SNES-env-S.png) envelope sustain
- ![envelope release](status-SNES-env-R.png) envelope release
## ADSR

Binary file not shown.

After

Width:  |  Height:  |  Size: 1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1,007 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 562 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 707 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 775 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 688 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 762 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 778 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 319 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 586 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 884 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 612 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 334 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 494 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 815 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 707 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 337 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 456 B

View file

@ -24,3 +24,17 @@ it has 4 wavetable channels. some of them have additional capabilities:
## info
this chip uses the [WonderSwan](../4-instrument/wonderswan.md) instrument editor.
## channel status
the following icons are displayed when channel status is enabled in the pattern view:
- PCM mode (channel 2):
- ![PCM mode off](status-Swan-PCM-off.png) off
- ![PCM mode on](status-Swan-PCM-on.png) on
- sweep (channel 3):
- ![sweep mode off](status-Swan-sweep-off.png) disabled
- ![sweep mode on](status-Swan-sweep-on.png) enabled
- noise mode (channel 4):
- ![noise mode off](status-Swan-noise-off.png) off
- ![noise mode on](status-Swan-noise-on.png) on

View file

@ -23,3 +23,7 @@ as listed in the "Window" menu:
- [register view](regview.md)
- [log viewer](log-viewer.md)
- [stats](stats.md)
other:
- [command line usage](command-line.md)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 508 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 626 B

After

Width:  |  Height:  |  Size: 639 B

View file

@ -8,7 +8,7 @@ the **chip manager** window does exactly what it says.
to move a chip around, click and drag the ![crossed-arrows](chip-manager-move.png) button to its left.
to replace a chip with a different one, click the ![down-angle](chip-manager-change.png) and select the replacement.
to replace a chip with a different one, click the **Change** button and select the replacement.
to remove a chip entirely, click the ![X](chip-manager-remove.png) button.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 86 KiB

After

Width:  |  Height:  |  Size: 84 KiB

View file

@ -0,0 +1,100 @@
# command line usage
## NAME
Furnace - a chiptune tracker
## SYNOPSIS
`furnace [params...] [file]`
## DESCRIPTION
Furnace is a chiptune tracker that supports many systems and sound chips from the 8/16-bit era.
even though it is primarily controlled by using its graphical user interface, Furnace also offers a command line interface, which is described here.
## USAGE
starting Furnace without arguments will start the graphical user interface (GUI), as long as Furnace has been compiled with GUI enabled.
passing the path to a file will open that file at start-up. if Furnace cannot open that file, it will report an error and quit.
the following parameters may be used:
**general**
- `-help`: display the following help.
- `-console`: enable command-line interface (CLI) player.
- see the COMMAND LINE INTERFACE section for more information
- `-loglevel <level>`: set the logging level to one of the following:
- `error`: critical errors only
- `warning`: errors and warnings
- `info`: errors, warnings, and useful information
- `debug`: all of the above, including debug information
- `trace`: like debug, but with even more details (default)
- `-info`: get information about a song.
- you must provide a file, otherwise Furnace will quit.
- `-version`: display version information.
- `-warranty`: view warranty disclaimer.
**engine**
- `-audio sdl|jack|portaudio`: override audio backend to one of the following:
- `sdl`: SDL (default)
- `jack`: JACK Audio Connection Kit
- `portaudio`: PortAudio
- `-view <type>`: set visualization of data to one of the following:
- `pattern`: order and pattern
- `commands`: engine commands
- `nothing`: guess (default)
- `-loops <count>`: set number of loops
- `-1` means loop forever.
- `-subsong <number>`: set sub-song to play.
- `-safemode`: enable safe mode (software rendering without audio).
- `-safeaudio`: enable safe mode (software rendering with audio).
- `-benchmark render|seek`: run performance test and output total time.
- `render`: measure render time
- `seek`: measure time to seek through the entire song
- you must provide a file, otherwise Furnace will quit.
**audio export**
- `-output path`: export audio in .wav format to `path`.
- you must provide a file, otherwise Furnace will quit.
- `-outmode one|persys|perchan`: set audio export output mode.
- `one`: single file (default)
- `persys`: one file per chip (`_sXX` will be appended to file name, where `XX` is the chip number)
- `perchan`: one file per channel (`_cXX` will be appended to file name, where `XX` is the channel number)
**VGM export**
- `-vgmout path`: output VGM data to `path`.
- you must provide a file, otherwise Furnace will quit.
- `-direct`: enable VGM export direct stream mode.
- this mode is useful for DualPCM export.
- note that this will increase file size by a huge amount!
**export (other)**
- `-zsmout path`: output Zsound Music data for Commander X16.
- you must provide a file, otherwise Furnace will quit.
- `-cmdout path`: output command stream dump to `path`.
- you must provide a file, otherwise Furnace will quit.
- `-binary`: set command stream output format to binary.
## COMMAND LINE INTERFACE
Furnace provides a command-line interface (CLI) player which may be activated through the `-console` option.
the following controls may be used:
- `Left`/`H`: go to previous order.
- `Right`/`L`: go to next order.
- `Space`: pause/resume playback.
## SEE ALSO
the Furnace user manual in the `manual.pdf` file.

View file

@ -234,6 +234,7 @@ size | description
| - 0xce: Namco C140 - 24 channels
| - 0xcf: Namco C219 - 16 channels
| - 0xd0: Namco C352 - 32 channels (UNAVAILABLE)
| - 0xd1: ESFM - 18 channels (UNAVAILABLE)
| - 0xde: YM2610B extended - 19 channels
| - 0xe0: QSound - 19 channels
| - 0xfc: Pong - 1 channel
@ -633,7 +634,9 @@ size | description
1 | osc sync
1 | to filter
1 | init filter
1 | vol macro is cutoff
1 | vol macro is cutoff (<187) or reserved
| - from version 187 onwards, volume and cutoff macros are separate.
| - if this is on and the version is less than 187, move the volume macro into the ALG one.
1 | resonance
1 | low pass
1 | band pass
@ -1121,6 +1124,24 @@ size | description
- `val[14]`: loop
- `val[15]`: global (not sure how will I implement this)
## C64 compatibility note (>=187)
in Furnace dev187 the volume and cutoff macros have been separated, as noted above.
however, there are two other changes as well: **inverted relative (non-absolute) cutoff macro**; and a new, improved Special macro.
if version is less than 187, you must convert the Special macro:
1. do not continue if ex4 is not a Sequence type macro!
2. move bit 0 of ex4 macro data into bit 3.
3. set bit 0 on all steps of ex4 macro to 1.
4. if ex3 is not a Sequence type macro, stop here.
5. if ex3 macro length is 0, stop here.
6. merge the ex3 macro (former Special) into ex4 (former Test).
- use the largest size (between ex3 and ex4).
- if the ex3 macro is shorter than the ex4 one, use the last value of ex3, and vice-versa.
- if the ex4 macro length is 0, expand it to the largest size, and set all steps to 1.
don't worry about loop or release...
# wavetable
```

View file

@ -295,7 +295,9 @@ size | description
1 | flags 1
| - bit 7: dutyIsAbs
| - bit 6: initFilter
| - bit 5: volIsCutoff
| - bit 5: volIsCutoff (<187)
| - from version 187 onwards, volume and cutoff macros are separate.
| - if this is on and the version is less than 187, move the volume macro into the ALG one.
| - bit 4: toFilter
| - bit 3: noise on
| - bit 2: pulse on
@ -322,6 +324,24 @@ size | description
| - bit 0-10: cutoff
```
## C64 compatibility note (>=187)
in Furnace dev187 the volume and cutoff macros have been separated, as noted above.
however, there are two other changes as well: **inverted relative (non-absolute) cutoff macro**; and a new, improved Special macro.
if version is less than 187, you must convert the Special macro:
1. do not continue if ex4 is not a Sequence type macro!
2. move bit 0 of ex4 macro data into bit 3.
3. set bit 0 on all steps of ex4 macro to 1.
4. if ex3 is not a Sequence type macro, stop here.
5. if ex3 macro length is 0, stop here.
6. merge the ex3 macro (former Special) into ex4 (former Test).
- use the largest size (between ex3 and ex4).
- if the ex3 macro is shorter than the ex4 one, use the last value of ex3, and vice-versa.
- if the ex4 macro length is 0, expand it to the largest size, and set all steps to 1.
don't worry about loop or release...
# Game Boy data (GB)
```
@ -556,6 +576,31 @@ size | description
size | description
-----|------------------------------------
1 | switch roles of phase reset timer and frequency
1 | hardware sequence length (>=185)
??? | hardware sequence...
| - length: 5*hwSeqLen
```
a value in the hardware sequence has the following format:
```
size | description
-----|------------------------------------
1 | command
| - 0: set volume sweep
| - 1: set frequency sweep
| - 2: set cutoff sweep
| - 3: wait
| - 4: wait for release
| - 5: loop
| - 6: loop until release
1 | sweep bound
1 | sweep amount/command data
| - if "set sweep", this is amount.
| - for wait: length in ticks
| - for wait for release: nothing
| - for loop/loop until release: position
2 | sweep period
```
# ES5506 data (ES)

View file

@ -21,7 +21,7 @@ OS2Version: 0
OS2_WeightWidthSlopeOnly: 0
OS2_UseTypoMetrics: 0
CreationTime: 1691897631
ModificationTime: 1697616170
ModificationTime: 1698523374
PfmFamily: 81
TTFWeight: 400
TTFWidth: 5
@ -53,7 +53,7 @@ FitToEm: 0
WinInfo: 57552 16 10
BeginPrivate: 0
EndPrivate
BeginChars: 65536 75
BeginChars: 65536 95
StartChar: space
Encoding: 32 32 0
@ -5717,49 +5717,49 @@ SplineSet
635 935 l 5
203 935 l 5
203 1027 l 5
118 675 m 29
118 578 l 29
955.375 578 l 5
1029.47460938 364.203125 l 5
1080.17480469 426.109375 l 5
1142.57519531 257.4921875 l 5
1191.32519531 371.125976562 l 5
1238.125 165.8515625 l 5
1300.52539062 393.122070312 l 5
1359.02539062 132.860351562 l 5
1417.52539062 217.170898438 l 5
1472.125 77.8740234375 l 5
1497.47460938 184.1796875 l 5
1546.22460938 -39.423828125 l 5
1561.82519531 106.947265625 l 5
1616.42480469 -193.381835938 l 5
1671.27539062 67.0830078125 l 5
1710.02539062 557.821289062 l 5
1710.02539062 695.178710938 l 5
1671.27539062 1185.91699219 l 5
1616.42480469 1446.38183594 l 5
1561.82519531 1109.14160156 l 5
1546.22460938 1292.42382812 l 5
1497.47460938 1068.8203125 l 5
1472.125 1175.12597656 l 5
1417.52539062 1035.82910156 l 5
1359.02539062 1120.13964844 l 5
1300.52539062 859.877929688 l 5
1238.125 1087.1484375 l 5
1191.32519531 881.874023438 l 5
1142.57519531 995.5078125 l 5
1080.17480469 826.890625 l 5
1029.47460938 888.796875 l 5
955.375 675 l 5
118 675 l 29
805 318 m 5
373 318 l 5
373 478 l 5
83 272 l 5
373 66 l 5
373 226 l 5
805 226 l 5
805 318 l 5
118 675 m 25
118 578 l 25
955.375 578 l 1
1029.47460938 364.203125 l 1
1080.17480469 426.109375 l 1
1142.57519531 257.4921875 l 1
1191.32519531 371.125976562 l 1
1238.125 165.8515625 l 1
1300.52539062 393.122070312 l 1
1359.02539062 132.860351562 l 1
1417.52539062 217.170898438 l 1
1472.125 77.8740234375 l 1
1497.47460938 184.1796875 l 1
1546.22460938 -39.423828125 l 1
1561.82519531 106.947265625 l 1
1616.42480469 -193.381835938 l 1
1671.27539062 67.0830078125 l 1
1710.02539062 557.821289062 l 1
1710.02539062 695.178710938 l 1
1671.27539062 1185.91699219 l 1
1616.42480469 1446.38183594 l 1
1561.82519531 1109.14160156 l 1
1546.22460938 1292.42382812 l 1
1497.47460938 1068.8203125 l 1
1472.125 1175.12597656 l 1
1417.52539062 1035.82910156 l 1
1359.02539062 1120.13964844 l 1
1300.52539062 859.877929688 l 1
1238.125 1087.1484375 l 1
1191.32519531 881.874023438 l 1
1142.57519531 995.5078125 l 1
1080.17480469 826.890625 l 1
1029.47460938 888.796875 l 1
955.375 675 l 1
118 675 l 25
805 318 m 1
373 318 l 1
373 478 l 1
83 272 l 1
373 66 l 1
373 226 l 1
805 226 l 1
805 318 l 1
EndSplineSet
EndChar
@ -6028,7 +6028,7 @@ EndChar
StartChar: uniE144
Encoding: 57668 57668 74
Width: 1792
Flags: HWO
Flags: HW
LayerCount: 2
Fore
SplineSet
@ -6056,5 +6056,681 @@ SplineSet
1551.17675781 680.580078125 1569.90136719 713.986328125 1612.40039062 713.986328125 c 0
EndSplineSet
EndChar
StartChar: uniE145
Encoding: 57669 57669 75
Width: 1792
Flags: HW
LayerCount: 2
Fore
SplineSet
522.990195527 -133 m 4
522.990195527 -160.625937316 500.62567195 -182.990195527 473 -182.990195527 c 6
120 -182.990195527 l 6
92.3740626842 -182.990195527 70.009804473 -160.62567195 70.009804473 -133 c 4
70.009804473 -105.374062684 92.3743280499 -83.009804473 120 -83.009804473 c 6
473 -83.009804473 l 6
500.625937316 -83.009804473 522.990195527 -105.37432805 522.990195527 -133 c 4
120 10.009804473 m 4
92.3740626842 10.009804473 70.009804473 32.3743280499 70.009804473 60 c 4
70.009804473 64.8134431008 70.699727686 69.6268862016 72.079574112 74.2784931335 c 6
425.079574112 1264.27849313 l 6
431.263927162 1285.12659548 450.525009059 1299.99019553 473 1299.99019553 c 4
479.835355796 1299.99019553 499.699888713 1298.26011808 513.435208596 1279.42115066 c 6
899.438504977 749.990195527 l 5
1295 749.990195527 l 6
1301.13102947 749.990195527 1323.80711626 748.43031074 1337.51061627 726.339026088 c 6
1734.51061627 86.3390260882 l 6
1739.49700244 78.300519415 1741.99019553 69.1502597075 1741.99019553 60 c 4
1741.99019553 32.3740626842 1719.62567195 10.009804473 1692 10.009804473 c 4
1685.86897053 10.009804473 1663.19288374 11.5696892605 1649.48938373 33.6609739118 c 6
1267.16049977 650.009804473 l 5
874 650.009804473 l 6
867.164644204 650.009804473 847.300111287 651.739881916 833.564791404 670.578849337 c 6
492.17532648 1138.81876382 l 5
167.920425888 45.7215068665 l 6
161.736072838 24.8734045156 142.474990941 10.009804473 120 10.009804473 c 4
291 1363.99509776 m 4
304.812968658 1363.99509776 315.995097764 1352.81283598 315.995097764 1339 c 4
315.995097764 1336.72748524 302.589006251 1222.55285612 289.855072456 1113.33612268 c 4
289.58961524 1110.82609608 288.953231482 1108.42736209 288.001699464 1106.19569974 c 4
285.999860964 1101.49353775 282.607669759 1097.55307198 278.356613679 1094.86460664 c 4
274.495333198 1092.4207025 269.916875116 1091.00599258 265.005682215 1091.00490287 c 6
265 1091.00490224 l 6
261.605274126 1091.00490224 258.210548251 1091.69122514 255.042904102 1093.06387093 c 6
45.042904102 1184.06387093 l 6
36.1517873883 1187.91668818 30.0049022365 1196.77638349 30.0049022365 1207 c 4
30.0049022365 1220.81296866 41.187164025 1231.99509776 55 1231.99509776 c 4
58.3947258743 1231.99509776 61.7894517486 1231.30877486 64.957095898 1229.93612907 c 6
204.490746756 1169.47154703 l 5
41.4497078318 1446.31845966 l 6
39.1531707682 1450.21802507 38.0049022365 1454.60901253 38.0049022365 1459 c 4
38.0049022365 1472.81296866 49.187164025 1483.99509776 63 1483.99509776 c 4
65.9338592397 1483.99509776 77.7382982208 1483.24844096 84.5502921682 1471.68154034 c 6
248.788761019 1192.80136799 l 5
266.174214397 1341.91506427 l 6
267.637145507 1354.46251187 278.267491735 1363.99509776 291 1363.99509776 c 4
EndSplineSet
EndChar
StartChar: uniE146
Encoding: 57670 57670 76
Width: 1792
Flags: HW
LayerCount: 2
Fore
SplineSet
923.990195527 -133 m 0
923.990195527 -160.625937316 901.62567195 -182.990195527 874 -182.990195527 c 2
473 -182.990195527 l 2
445.374062684 -182.990195527 423.009804473 -160.62567195 423.009804473 -133 c 0
423.009804473 -105.374062684 445.37432805 -83.009804473 473 -83.009804473 c 2
874 -83.009804473 l 2
901.625937316 -83.009804473 923.990195527 -105.37432805 923.990195527 -133 c 0
120 10.009804473 m 0
92.3740626842 10.009804473 70.009804473 32.3743280499 70.009804473 60 c 0
70.009804473 64.8134431008 70.699727686 69.6268862016 72.079574112 74.2784931335 c 2
425.079574112 1264.27849313 l 2
431.263927162 1285.12659548 450.525009059 1299.99019553 473 1299.99019553 c 0
479.835355796 1299.99019553 499.699888713 1298.26011808 513.435208596 1279.42115066 c 2
899.438504977 749.990195527 l 1
1295 749.990195527 l 2
1301.13102947 749.990195527 1323.80711626 748.43031074 1337.51061627 726.339026088 c 2
1734.51061627 86.3390260882 l 2
1739.49700244 78.300519415 1741.99019553 69.1502597075 1741.99019553 60 c 0
1741.99019553 32.3740626842 1719.62567195 10.009804473 1692 10.009804473 c 0
1685.86897053 10.009804473 1663.19288374 11.5696892605 1649.48938373 33.6609739118 c 2
1267.16049977 650.009804473 l 1
874 650.009804473 l 2
867.164644204 650.009804473 847.300111287 651.739881916 833.564791404 670.578849337 c 2
492.17532648 1138.81876382 l 1
167.920425888 45.7215068665 l 2
161.736072838 24.8734045156 142.474990941 10.009804473 120 10.009804473 c 0
987 1293.13572276 m 0
1000.81296866 1293.13572276 1011.99509776 1281.95346098 1011.99509776 1268.140625 c 0
1011.99509776 1263.69241786 1010.81670769 1259.24421072 1008.45992755 1255.30688847 c 2
935.698971275 1133.74980006 l 1
1236.81087137 1237.76397869 l 2
1239.45825701 1238.67847474 1242.22912851 1239.13572276 1245 1239.13572276 c 0
1258.81296866 1239.13572276 1269.99509776 1227.95346098 1269.99509776 1214.140625 c 0
1269.99509776 1203.27422071 1263.04780398 1193.92278939 1253.18912863 1190.51727131 c 2
939.748292604 1082.24426351 l 1
1077.25037188 1004.93905019 l 2
1079.69668307 1003.56370656 1089.99509776 996.953556381 1089.99509776 983.140625 c 0
1089.99509776 969.327656342 1078.81283598 958.145527236 1065 958.145527236 c 0
1060.77011153 958.145527236 1056.54022306 959.211084762 1052.74962812 961.342199814 c 2
866.749628119 1065.91348888 l 2
866.618722401 1065.98708554 866.465332358 1066.07567196 866.292238034 1066.17954775 c 0
863.033869485 1068.10546545 860.2515148 1070.74998574 858.162663277 1073.89560304 c 0
855.849429066 1077.31041594 854.004904086 1081.86612897 854.004902236 1087.71191406 c 0
854.004902236 1090.53137826 854.472612732 1093.24885041 855.337535819 1095.7869306 c 0
855.896115778 1097.42970853 856.630294239 1099.02574468 857.540072447 1100.54565059 c 2
965.540072447 1280.97436153 l 2
967.067066953 1283.52541385 973.701841651 1293.13572276 987 1293.13572276 c 0
EndSplineSet
EndChar
StartChar: uniE147
Encoding: 57671 57671 77
Width: 1792
Flags: HW
LayerCount: 2
Fore
SplineSet
1344.99019553 -133 m 0
1344.99019553 -160.625937316 1322.62567195 -182.990195527 1295 -182.990195527 c 2
874 -182.990195527 l 2
846.374062684 -182.990195527 824.009804473 -160.62567195 824.009804473 -133 c 0
824.009804473 -105.374062684 846.37432805 -83.009804473 874 -83.009804473 c 2
1295 -83.009804473 l 2
1322.62593732 -83.009804473 1344.99019553 -105.37432805 1344.99019553 -133 c 0
120 10.009804473 m 0
92.3740626842 10.009804473 70.009804473 32.3743280499 70.009804473 60 c 0
70.009804473 64.8134431008 70.699727686 69.6268862016 72.079574112 74.2784931335 c 2
425.079574112 1264.27849313 l 2
431.263927162 1285.12659548 450.525009059 1299.99019553 473 1299.99019553 c 0
479.835355796 1299.99019553 499.699888713 1298.26011808 513.435208596 1279.42115066 c 2
899.438504977 749.990195527 l 1
1295 749.990195527 l 2
1301.13102947 749.990195527 1323.80711626 748.43031074 1337.51061627 726.339026088 c 2
1734.51061627 86.3390260882 l 2
1739.49700244 78.300519415 1741.99019553 69.1502597075 1741.99019553 60 c 0
1741.99019553 32.3740626842 1719.62567195 10.009804473 1692 10.009804473 c 0
1685.86897053 10.009804473 1663.19288374 11.5696892605 1649.48938373 33.6609739118 c 2
1267.16049977 650.009804473 l 1
874 650.009804473 l 2
867.164644204 650.009804473 847.300111287 651.739881916 833.564791404 670.578849337 c 2
492.17532648 1138.81876382 l 1
167.920425888 45.7215068665 l 2
161.736072838 24.8734045156 142.474990941 10.009804473 120 10.009804473 c 0
1084.00495181 1430.66194045 m 2
1084.00495181 1444.57909512 1095.22502858 1455.70701183 1109 1455.70701183 c 0
1122.79340754 1455.70701183 1133.96768049 1444.55520556 1133.99504819 1430.76188767 c 2
1134.84372708 1003.00652189 l 1
1191.01019316 1078.20250251 1280.58910304 1196.65635616 1282.32233047 1198.38958359 c 0
1287.20061596 1203.26786908 1293.60030798 1205.70701183 1300 1205.70701183 c 0
1313.81296866 1205.70701183 1324.99509776 1194.52475004 1324.99509776 1180.71191406 c 0
1324.99509776 1175.39825496 1323.31356069 1170.08459585 1319.95048655 1165.64179831 c 2
1319.95048655 1165.64179831 1169.74933909 967.202659181 1136.79718212 921.589936639 c 1
1134.99509776 926.711914062 l 0
1134.99509776 914.405239676 1126.88992674 905.533770837 1116.96812187 902.69947513 c 0
1114.75667886 902.059674388 1112.41866713 901.716818782 1110 901.716816299 c 0
1109.21533751 901.716816299 1108.43915082 901.752904718 1107.67300982 901.823514982 c 0
1102.42285625 902.229856341 1097.16630151 904.09245251 1092.05299755 909.205756573 c 0
1083.69666264 917.562091485 1049.14355642 964.844828621 1007.26491083 1021.09775066 c 0
955.99749067 1089.96201665 899.880227391 1165.86808633 899.880227391 1165.86808633 c 2
896.630010621 1170.26443217 895.004902236 1175.48817312 895.004902236 1180.71191406 c 0
895.004902236 1194.52488272 906.187164025 1205.70701183 920 1205.70701183 c 0
923.445371477 1205.70701183 933.259523451 1204.83513145 940.119772609 1195.5557418 c 2
940.119772609 1195.5557418 1029.57692545 1075.08662563 1084.85734273 1001.0569193 c 1
1084.00495181 1430.66194045 l 2
EndSplineSet
EndChar
StartChar: uniE148
Encoding: 57672 57672 78
Width: 1792
Flags: HW
LayerCount: 2
Fore
SplineSet
1741.99019553 -133 m 0
1741.99019553 -160.625937316 1719.62567195 -182.990195527 1692 -182.990195527 c 2
1295 -182.990195527 l 2
1267.37406268 -182.990195527 1245.00980447 -160.62567195 1245.00980447 -133 c 0
1245.00980447 -105.374062684 1267.37432805 -83.009804473 1295 -83.009804473 c 2
1692 -83.009804473 l 2
1719.62593732 -83.009804473 1741.99019553 -105.37432805 1741.99019553 -133 c 0
120 10.009804473 m 0
92.3740626842 10.009804473 70.009804473 32.3743280499 70.009804473 60 c 0
70.009804473 64.8134431008 70.699727686 69.6268862016 72.079574112 74.2784931335 c 2
425.079574112 1264.27849313 l 2
431.263927162 1285.12659548 450.525009059 1299.99019553 473 1299.99019553 c 0
479.835355796 1299.99019553 499.699888713 1298.26011808 513.435208596 1279.42115066 c 2
899.438504977 749.990195527 l 1
1295 749.990195527 l 2
1301.13102947 749.990195527 1323.80711626 748.43031074 1337.51061627 726.339026088 c 2
1734.51061627 86.3390260882 l 2
1739.49700244 78.300519415 1741.99019553 69.1502597075 1741.99019553 60 c 0
1741.99019553 32.3740626842 1719.62567195 10.009804473 1692 10.009804473 c 0
1685.86897053 10.009804473 1663.19288374 11.5696892605 1649.48938373 33.6609739118 c 2
1267.16049977 650.009804473 l 1
874 650.009804473 l 2
867.164644204 650.009804473 847.300111287 651.739881916 833.564791404 670.578849337 c 2
492.17532648 1138.81876382 l 1
167.920425888 45.7215068665 l 2
161.736072838 24.8734045156 142.474990941 10.009804473 120 10.009804473 c 0
1647.27476051 1191.59987793 m 0
1650.59441446 1201.62267929 1660.02764304 1208.70701183 1671 1208.70701183 c 0
1684.81296866 1208.70701183 1695.99509776 1197.52475004 1695.99509776 1183.71191406 c 0
1695.99509776 1181.04593052 1695.57181167 1178.37994697 1694.72523949 1175.8239502 c 0
1653.66887383 1051.86530771 1594.4265485 873.585135594 1560.31492304 774.14523513 c 1
1723.338566 880.654015196 l 2
1727.47427684 883.356012949 1732.23713842 884.707011826 1737 884.707011826 c 0
1750.81296866 884.707011826 1761.99509776 873.524750038 1761.99509776 859.711914062 c 0
1761.99509776 851.02772187 1757.55561844 843.274013429 1750.661434 838.769812929 c 2
1526.70849225 692.453890982 l 2
1523.19152841 689.855872872 1518.3636137 687.716816299 1512 687.716816299 c 0
1507.04339917 687.716816299 1502.42555525 689.15668701 1498.5415823 691.64129618 c 0
1494.3486555 694.321072629 1491.00027694 698.22285387 1489.01330483 702.872514023 c 0
1488.81598153 703.3333405 1488.63210474 703.801314398 1488.4621627 704.275941682 c 2
1389.5442774 973.052821943 l 2
1388.51802729 975.841319716 1388.00490224 978.776616889 1388.00490224 981.711914062 c 0
1388.00490224 995.52488272 1399.18716402 1006.70701183 1413 1006.70701183 c 0
1423.6987823 1006.70701183 1432.92175444 999.973404506 1436.4557226 990.371006182 c 2
1511.5898978 786.218550321 l 1
1532.32115736 846.743221881 1572.08799988 964.611311617 1647.27476051 1191.59987793 c 0
EndSplineSet
EndChar
StartChar: uniE149
Encoding: 57673 57673 79
Width: 1792
Flags: H
LayerCount: 2
Fore
SplineSet
1484 1461.6171875 m 5
1484 1103.6171875 l 5
1667 1173.6171875 l 5
1441 884.6171875 l 5
1215 1173.6171875 l 5
1398 1103.6171875 l 5
1398 1461.6171875 l 5
1484 1461.6171875 l 5
1666.98529329 -56.2001953125 m 0
1666.98529329 -97.6391012863 1633.43850793 -131.185488603 1592 -131.185488603 c 0
1572.80092394 -131.185488603 1553.60184788 -123.868060369 1538.96699141 -109.233203901 c 2
146.966991411 1282.7667961 l 2
132.332134943 1297.40165257 125.014706709 1316.60072863 125.014706709 1335.79980469 c 0
125.014706709 1377.23871066 158.561492075 1410.78509798 200 1410.78509798 c 0
219.199076061 1410.78509798 238.398152121 1403.46766974 253.033008589 1388.83281328 c 2
1645.03300859 -3.16718672351 l 2
1659.66786506 -17.8020431912 1666.98529329 -37.0011192519 1666.98529329 -56.2001953125 c 0
EndSplineSet
EndChar
StartChar: uniE14A
Encoding: 57674 57674 80
Width: 1792
Flags: HW
LayerCount: 2
Fore
SplineSet
1484 1461.6171875 m 1
1484 1103.6171875 l 1
1667 1173.6171875 l 1
1441 884.6171875 l 1
1215 1173.6171875 l 1
1398 1103.6171875 l 1
1398 1461.6171875 l 1
1484 1461.6171875 l 1
1666.98529329 -56.2001953125 m 0
1666.98529329 -97.6391012863 1633.43850793 -131.185488603 1592 -131.185488603 c 0
1591.52523691 -131.185488603 1591.05047382 -131.181014029 1590.57577974 -131.17206488 c 0
1204.22474011 -123.888399549 871.515114873 8.26117947017 618.582599933 261.19369441 c 0
371.118582643 508.6577117 203.65752734 866.213710135 126.078697051 1323.16817722 c 0
125.369370157 1327.34625121 125.014706709 1331.57302795 125.014706709 1335.79980469 c 0
125.014706709 1377.23871066 158.561492075 1410.78509798 200 1410.78509798 c 0
236.80294028 1410.78509798 267.845706788 1384.21788054 273.921302949 1348.43143216 c 0
347.777920162 913.401527306 505.150856207 586.757472492 724.648617111 367.259711588 c 0
948.32678825 143.58154045 1240.28993931 25.4291221611 1593.42422026 18.7716742555 c 0
1634.28501058 18.0013480719 1666.98529329 -15.3022691437 1666.98529329 -56.2001953125 c 0
EndSplineSet
EndChar
StartChar: uniE14B
Encoding: 57675 57675 81
Width: 1792
Flags: HW
LayerCount: 2
Fore
SplineSet
1398 -160.3828125 m 5
1398 197.6171875 l 5
1215 127.6171875 l 5
1441 416.6171875 l 5
1667 127.6171875 l 5
1484 197.6171875 l 5
1484 -160.3828125 l 5
1398 -160.3828125 l 5
200 -131.185488603 m 0
158.561094026 -131.185488603 125.014706709 -97.6387032376 125.014706709 -56.2001953125 c 0
125.014706709 -37.0011192519 132.332134943 -17.8020431912 146.966991411 -3.16718672351 c 2
1538.96699141 1388.83281328 l 2
1553.60184788 1403.46766974 1572.80092394 1410.78509798 1592 1410.78509798 c 0
1633.43890597 1410.78509798 1666.98529329 1377.23831261 1666.98529329 1335.79980469 c 0
1666.98529329 1316.60072863 1659.66786506 1297.40165257 1645.03300859 1282.7667961 c 2
253.033008589 -109.233203901 l 2
238.398152121 -123.868060369 219.199076061 -131.185488603 200 -131.185488603 c 0
EndSplineSet
EndChar
StartChar: uniE14C
Encoding: 57676 57676 82
Width: 1792
Flags: HW
LayerCount: 2
Fore
SplineSet
1398 -160.3828125 m 1
1398 197.6171875 l 1
1215 127.6171875 l 1
1441 416.6171875 l 1
1667 127.6171875 l 1
1484 197.6171875 l 1
1484 -160.3828125 l 1
1398 -160.3828125 l 1
200 -131.185488603 m 0
158.561094026 -131.185488603 125.014706709 -97.6387032376 125.014706709 -56.2001953125 c 0
125.014706709 -46.3359567044 126.9463412 -36.4717180962 130.809610181 -27.2265159787 c 0
180.222951228 91.0247182868 222.892032868 202.02925922 262.91073691 306.157577084 c 0
385.479688717 625.080917548 482.300015367 877.006560584 669.496680182 1064.2032254 c 0
860.176064791 1254.88261001 1135.57605261 1366.88874873 1584.71163148 1410.43269233 c 0
1587.13489866 1410.66762943 1589.56744933 1410.78509798 1592 1410.78509798 c 0
1633.43890597 1410.78509798 1666.98529329 1377.23831261 1666.98529329 1335.79980469 c 0
1666.98529329 1297.0734414 1637.60142618 1264.88138924 1599.28836852 1261.16691704 c 0
983.643746929 1201.47982935 759.100861728 1016.28364015 593.588205401 701.489986386 c 0
527.530145003 575.852112797 469.624761613 425.83922682 402.895181451 252.209442936 c 0
362.875526167 148.078649948 319.626145727 35.5241040949 269.190389819 -85.1738746463 c 0
257.838987207 -112.338954786 231.005903287 -131.185488603 200 -131.185488603 c 0
EndSplineSet
EndChar
StartChar: uniE14D
Encoding: 57677 57677 83
Width: 1792
Flags: HW
LayerCount: 2
Fore
SplineSet
1195.09712219 749.990195527 m 1
1295 749.990195527 l 2
1301.13102947 749.990195527 1323.80711626 748.43031074 1337.51061627 726.339026088 c 2
1734.51061627 86.3390260882 l 2
1739.49700244 78.300519415 1741.99019553 69.1502597075 1741.99019553 60 c 0
1741.99019553 32.3740626842 1719.62567195 10.009804473 1692 10.009804473 c 0
1685.86897053 10.009804473 1663.19288374 11.5696892605 1649.48938373 33.6609739118 c 2
1267.16049977 650.009804473 l 1
1131.95161768 650.009804473 l 1
1195.09712219 749.990195527 l 1
1131.95161768 650.009804473 m 1025
731.259986684 810.89716005 m 1
492.17532648 1138.81876382 l 1
167.920425888 45.7215068665 l 2
161.736072838 24.8734045156 142.474990941 10.009804473 120 10.009804473 c 0
92.3740626842 10.009804473 70.009804473 32.3743280499 70.009804473 60 c 0
70.009804473 64.8134431008 70.699727686 69.6268862016 72.079574112 74.2784931335 c 2
425.079574112 1264.27849313 l 2
431.263927162 1285.12659548 450.525009059 1299.99019553 473 1299.99019553 c 0
479.835355796 1299.99019553 499.699888713 1298.26011808 513.435208596 1279.42115066 c 2
790.499437572 899.407869025 l 1
731.259986684 810.89716005 l 1
1350.99804688 1459.29681673 m 0
1392.43695285 1459.29681673 1425.98334017 1425.75003136 1425.98334017 1384.31152344 c 0
1425.98334017 1370.32875638 1422.10197898 1356.34598932 1414.3392566 1344.1264358 c 2
463.339256601 -152.873564196 l 2
458.314262729 -160.783570323 438.406450284 -187.673769853 399.998046875 -187.673769853 c 0
358.559140901 -187.673769853 325.012753584 -154.126984488 325.012753584 -112.688476563 c 0
325.012753584 -98.7057095056 328.894114773 -84.7229424487 336.656837149 -72.5033889291 c 2
1287.65683715 1424.49661107 l 2
1292.68183102 1432.4066172 1312.58964347 1459.29681673 1350.99804688 1459.29681673 c 0
EndSplineSet
EndChar
StartChar: uniE14E
Encoding: 57678 57678 84
Width: 1792
Flags: HW
LayerCount: 2
Fore
SplineSet
120 10 m 0
106 10 94.1666666667 14.8333333333 84.5 24.5 c 128
74.8333333333 34.1666666667 70 46 70 60 c 0
70 64.6666666667 70.6666666667 69.3333333333 72 74 c 2
425 1264 l 2
428.333333333 1274.66666667 434.333333333 1283.33333333 443 1290 c 128
451.666666667 1296.66666667 461.666666667 1300 473 1300 c 0
489.666666667 1300 503 1293 513 1279 c 2
899 750 l 1
1295 750 l 2
1313.66666667 750 1328 742 1338 726 c 2
1735 86 l 2
1739.66666667 78 1742 69.3333333333 1742 60 c 0
1742 46 1737.16666667 34.1666666667 1727.5 24.5 c 128
1717.83333333 14.8333333333 1706 10 1692 10 c 0
1673.33333333 10 1659 18 1649 34 c 2
1267 650 l 1
874 650 l 2
857.333333333 650 844 657 834 671 c 2
492 1139 l 1
168 46 l 2
164.666666667 35.3333333333 158.666666667 26.6666666667 150 20 c 128
141.333333333 13.3333333333 131.333333333 10 120 10 c 0
EndSplineSet
EndChar
StartChar: uniE14F
Encoding: 57679 57679 85
Width: 1792
Flags: HW
LayerCount: 2
Fore
SplineSet
651.5 1454 m 128
651.833333333 1454 671 1435 709 1397 c 0
710.333333333 1395.66666667 733 1164 777 702 c 1
827 1285 l 1
884 1341 l 1
941 1285 l 1
1055 528 l 1
1099 925 l 1
1156 981 l 1
1213 925 l 1
1276 510 l 1
1299 1361 l 1
1356 1417 l 1
1413 1361 l 1
1553 881 l 1
1592 572 l 1
1661 1170 l 1
1773 1157 l 1
1641 17 l 1
1584 -40 l 1
1527 17 l 1
1451 881 l 1
1404 1032 l 1
1373 -115 l 1
1316 -172 l 1
1259 -115 l 1
1165 498 l 1
1121 97 l 1
1064 40 l 1
1007 97 l 1
900 809 l 1
837 77 l 1
780 20 l 1
723 77 l 1
723 82.3333333333 699.666666667 328.333333333 653 815 c 1
651 778.333333333 648 730 644 670 c 0
637 561 637 561 637 561 c 1
497 0 l 1
440 -57 l 1
383 0 l 1
289 877 l 1
217 -59 l 1
160 -116 l 1
103 -59 l 1
19 1381 l 1
132 1387 l 1
168 777 l 1
175 877 l 1
263 1113 263 1113 263 1113 c 1
320 1169 l 1
377 1113 l 1
462 316 l 1
523 561 l 2
523.666666667 561 528.333333333 629.333333333 537 766 c 128
545.666666667 902.666666667 555.666666667 1040.16666667 567 1178.5 c 128
578.333333333 1316.83333333 587.333333333 1389.66666667 594 1397 c 2
650 1453 l 2
650.666666667 1453.66666667 651.166666667 1454 651.5 1454 c 128
EndSplineSet
EndChar
StartChar: uniE150
Encoding: 57680 57680 86
Width: 1792
Flags: HW
LayerCount: 2
Fore
SplineSet
404 70 m 1
1632 70 l 1
1632 -50 l 1
284 -50 l 1
284 1210 l 1
160 1210 l 1
160 1330 l 1
404 1330 l 1
404 70 l 1
EndSplineSet
EndChar
StartChar: uniE151
Encoding: 57681 57681 87
Width: 1792
Flags: HW
LayerCount: 2
Fore
SplineSet
588 70 m 1
1632 70 l 1
1632 -50 l 1
468 -50 l 1
468 1210 l 1
160 1210 l 1
160 1330 l 1
588 1330 l 1
588 70 l 1
EndSplineSet
EndChar
StartChar: uniE152
Encoding: 57682 57682 88
Width: 1792
Flags: HW
LayerCount: 2
Fore
SplineSet
772 70 m 1
1632 70 l 1
1632 -50 l 1
652 -50 l 1
652 1210 l 1
160 1210 l 1
160 1330 l 1
772 1330 l 1
772 70 l 1
EndSplineSet
EndChar
StartChar: uniE153
Encoding: 57683 57683 89
Width: 1792
Flags: HW
LayerCount: 2
Fore
SplineSet
956 70 m 1
1632 70 l 1
1632 -50 l 1
836 -50 l 1
836 1210 l 1
160 1210 l 1
160 1330 l 1
956 1330 l 1
956 70 l 1
EndSplineSet
EndChar
StartChar: uniE154
Encoding: 57684 57684 90
Width: 1792
Flags: HW
LayerCount: 2
Fore
SplineSet
1140 70 m 1
1632 70 l 1
1632 -50 l 1
1020 -50 l 1
1020 1210 l 1
160 1210 l 1
160 1330 l 1
1140 1330 l 1
1140 70 l 1
EndSplineSet
EndChar
StartChar: uniE155
Encoding: 57685 57685 91
Width: 1792
Flags: HW
LayerCount: 2
Fore
SplineSet
1324 70 m 1
1632 70 l 1
1632 -50 l 1
1204 -50 l 1
1204 1210 l 1
160 1210 l 1
160 1330 l 1
1324 1330 l 1
1324 70 l 1
EndSplineSet
EndChar
StartChar: uniE156
Encoding: 57686 57686 92
Width: 1792
Flags: HW
LayerCount: 2
Fore
SplineSet
1508 70 m 1
1632 70 l 1
1632 -50 l 1
1388 -50 l 1
1388 1210 l 1
160 1210 l 1
160 1330 l 1
1508 1330 l 1
1508 70 l 1
EndSplineSet
EndChar
StartChar: uniE157
Encoding: 57687 57687 93
Width: 1792
Flags: HW
LayerCount: 2
Fore
SplineSet
896 1330 m 0
912.666666667 1330 926.833333333 1324.16666667 938.5 1312.5 c 128
950.166666667 1300.83333333 956 1286.66666667 956 1270 c 0
956 1082 956 1082 956 705.5 c 128
956 329 956 329 956 140 c 1
1593 686 l 2
1604.33333333 695.333333333 1617.33333333 700 1632 700 c 0
1648.66666667 700 1662.83333333 694.166666667 1674.5 682.5 c 128
1686.16666667 670.833333333 1692 656.666666667 1692 640 c 0
1692 621.333333333 1685 606 1671 594 c 2
935 -36 l 2
923.666666667 -45.3333333333 910.666666667 -50 896 -50 c 0
879.333333333 -50 865.166666667 -44.1666666667 853.5 -32.5 c 128
841.833333333 -20.8333333333 836 -6.66666666667 836 10 c 2
836 1140 l 1
199 594 l 2
187.666666667 584.666666667 174.666666667 580 160 580 c 0
143.333333333 580 129.166666667 585.833333333 117.5 597.5 c 128
105.833333333 609.166666667 100 623.333333333 100 640 c 0
100 658.666666667 107 674 121 686 c 2
857 1316 l 2
868.333333333 1325.33333333 881.333333333 1330 896 1330 c 0
EndSplineSet
EndChar
StartChar: uniE158
Encoding: 57688 57688 94
Width: 1792
Flags: HW
LayerCount: 2
Fore
SplineSet
1632 700 m 0
1648.66666667 700 1662.83333333 694.166666667 1674.5 682.5 c 128
1686.16666667 670.833333333 1692 656.666666667 1692 640 c 0
1692 627.333333333 1688.33333333 615.666666667 1681 605 c 2
1313 85 l 2
1301 68.3333333333 1284.66666667 60 1264 60 c 128
1243.33333333 60 1227 68.3333333333 1215 85 c 2
528 1056 l 1
209 605 l 2
197 588.333333333 180.666666667 580 160 580 c 0
143.333333333 580 129.166666667 585.833333333 117.5 597.5 c 128
105.833333333 609.166666667 100 623.333333333 100 640 c 0
100 652.666666667 103.666666667 664.333333333 111 675 c 2
111 675 111 675 479 1195 c 0
491 1211.66666667 507.333333333 1220 528 1220 c 128
548.666666667 1220 565 1211.66666667 577 1195 c 2
1264 224 l 1
1583 675 l 2
1595 691.666666667 1611.33333333 700 1632 700 c 0
EndSplineSet
EndChar
EndChars
EndSplineFont

Binary file not shown.

View file

@ -1,3 +1,24 @@
YOU SHALL READ THE FOLLOWING TEXT BEFORE PROCEEDING!!!
IF YOU DO NOT READ IT, YOU MAY NOT BE ABLE TO USE FURNACE AT ALL.
if you are using a recent version of macOS, you may get an error saying that Furnace is damaged.
in that case, open Terminal, and type this:
```
xattr -d com.apple.quarantine /path/to/Furnace.app
```
(replace `/path/to/Furnace.app` with the path where Furnace.app is located, e.g. `/Applications/Furnace.app`)
you may need to reboot after doing this before launching Furnace.
END OF MACOS ISSUE ACKNOWLEDGEMENT - license text follows.
------------------
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991

View file

@ -67,6 +67,7 @@ struct blip_t
int avail;
int size;
int integrator;
unsigned char hipass;
};
typedef int buf_t;
@ -119,6 +120,7 @@ blip_t* blip_new( int size )
{
m->factor = time_unit / blip_max_ratio;
m->size = size;
m->hipass = 1;
blip_clear( m );
check_assumptions();
}
@ -135,6 +137,10 @@ void blip_delete( blip_t* m )
}
}
void blip_set_dc( blip_t* m, unsigned char enable ) {
m->hipass=enable;
}
void blip_set_rates( blip_t* m, double clock_rate, double sample_rate )
{
double factor = time_unit * sample_rate / clock_rate;
@ -231,7 +237,9 @@ int blip_read_samples( blip_t* m, short out [], int count, int stereo )
out += step;
/* High-pass filter */
sum -= s << (delta_bits - bass_shift);
if (m->hipass) {
sum -= s << (delta_bits - bass_shift);
}
}
while ( in != end );
m->integrator = sum;

View file

@ -5,6 +5,9 @@ Sample buffer that resamples from input clock rate to output sample rate */
#ifndef BLIP_BUF_H
#define BLIP_BUF_H
// MODIFIED by tildearrow:
// - add option to disable high-pass filter
#ifdef __cplusplus
extern "C" {
#endif
@ -18,6 +21,9 @@ so that there are blip_max_ratio clocks per sample. Returns pointer to new
buffer, or NULL if insufficient memory. */
blip_t* blip_new( int sample_count );
/** (tildearrow) sets whether to enable high-pass filter. */
void blip_set_dc( blip_t*, unsigned char enable );
/** Sets approximate input clock rate and output sample rate. For every
clock_rate input clocks, approximately sample_rate samples are generated. */
void blip_set_rates( blip_t*, double clock_rate, double sample_rate );

View file

@ -4,6 +4,11 @@ Author : Shay Green <gblargg@gmail.com>
Website : http://www.slack.net/~ant/
License : GNU Lesser General Public License (LGPL)
MODIFICATION DISCLAIMER
-----------------------
I have modified this library in order to add a function that disables the DC offset correction high-pass filter.
- tildearrow
Contents
--------

View file

@ -30,7 +30,7 @@
template<typename T> struct SharedChannel {
int freq, baseFreq, baseNoteOverride, pitch, pitch2, arpOff;
int ins, note;
bool active, insChanged, freqChanged, fixedArp, keyOn, keyOff, portaPause, inPorta;
bool active, insChanged, freqChanged, fixedArp, keyOn, keyOff, portaPause, inPorta, volChanged;
T vol, outVol;
DivMacroInt std;
void handleArp(int offset=0) {
@ -79,6 +79,7 @@ template<typename T> struct SharedChannel {
keyOff(false),
portaPause(false),
inPorta(false),
volChanged(false),
vol(initVol),
outVol(initVol),
std() {}

View file

@ -238,6 +238,9 @@ enum DivDispatchCmds {
DIV_CMD_EXTERNAL, // (value)
DIV_CMD_C64_AD, // (value)
DIV_CMD_C64_SR, // (value)
DIV_ALWAYS_SET_VOLUME, // () -> alwaysSetVol
DIV_CMD_MAX
@ -385,7 +388,23 @@ struct DivChannelModeHints {
// - 1: volume
// - 2: pitch
// - 3: panning
// - 4: ???
// - 4: chip primary
// - 5: chip secondary
// - 6: mixing
// - 7: DSP
// - 8: note
// - 9: misc 1
// - 10: misc 2
// - 11: misc 3
// - 12: attack
// - 13: decay
// - 14: sustain
// - 15: release
// - 16: dec linear
// - 17: dec exp
// - 18: inc linear
// - 19: inc bent
// - 20: direct
unsigned char type[4];
// up to 4
unsigned char count;

View file

@ -96,8 +96,13 @@ void DivDispatchContainer::setRates(double gotRate) {
rateMemory=gotRate;
}
void DivDispatchContainer::setQuality(bool lowQual) {
void DivDispatchContainer::setQuality(bool lowQual, bool dcHiPass) {
lowQuality=lowQual;
hiPass=dcHiPass;
for (int i=0; i<DIV_MAX_OUTPUTS; i++) {
if (bb[i]==NULL) continue;
blip_set_dc(bb[i],dcHiPass);
}
}
void DivDispatchContainer::grow(size_t size) {
@ -123,6 +128,7 @@ void DivDispatchContainer::grow(size_t size) {
logE("not enough memory!"); \
return; \
} \
blip_set_dc(bb[i],hiPass); \
blip_set_rates(bb[i],dispatch->rate,rateMemory); \
\
if (bbIn[i]==NULL) bbIn[i]=new short[bbInLen]; \
@ -165,9 +171,11 @@ void DivDispatchContainer::fillBuf(size_t runtotal, size_t offset, size_t size)
if (dcOffCompensation && runtotal>0) {
dcOffCompensation=false;
for (int i=0; i<outs; i++) {
if (bbIn[i]==NULL) continue;
prevSample[i]=bbIn[i][0];
if (hiPass) {
for (int i=0; i<outs; i++) {
if (bbIn[i]==NULL) continue;
prevSample[i]=bbIn[i][0];
}
}
}
if (lowQuality) {
@ -214,7 +222,7 @@ void DivDispatchContainer::clear() {
prevSample[i]=0;
}
if (dispatch->getDCOffRequired()) {
if (dispatch->getDCOffRequired() && hiPass) {
dcOffCompensation=true;
}
}
@ -621,6 +629,7 @@ void DivDispatchContainer::init(DivSystem sys, DivEngine* eng, int chanCount, do
bbOut[i]=new short[bbInLen];
memset(bbIn[i],0,bbInLen*sizeof(short));
memset(bbOut[i],0,bbInLen*sizeof(short));
blip_set_dc(bb[i],hiPass);
}
}

View file

@ -1081,7 +1081,7 @@ bool DivEngine::addSystem(DivSystem which) {
song.patchbay.push_back((i<<20)|j);
}
} else {
song.patchbay.reserve(outs);
if (outs>0) song.patchbay.reserve(outs);
for (unsigned int j=0; j<outs; j++) {
song.patchbay.push_back((i<<20)|(j<<16)|j);
}
@ -1189,11 +1189,11 @@ bool DivEngine::swapSystem(int src, int dest, bool preserveOrder) {
// prepare swap list
int index=0;
swapList.reserve(song.systemLen);
if (song.systemLen>0) swapList.reserve(song.systemLen);
for (int i=0; i<song.systemLen; i++) {
chanList.clear();
const int channelCount=getChannelCount(song.system[i]);
chanList.reserve(channelCount);
if (channelCount>0) chanList.reserve(channelCount);
for (int j=0; j<channelCount; j++) {
chanList.push_back(index);
index++;
@ -1424,6 +1424,11 @@ DivChannelPair DivEngine::getChanPaired(int ch) {
return disCont[dispatchOfChan[ch]].dispatch->getPaired(dispatchChanOfChan[ch]);
}
DivChannelModeHints DivEngine::getChanModeHints(int ch) {
if (ch<0 || ch>=chans) return DivChannelModeHints();
return disCont[dispatchOfChan[ch]].dispatch->getModeHints(dispatchChanOfChan[ch]);
}
unsigned char* DivEngine::getRegisterPool(int sys, int& size, int& depth) {
if (sys<0 || sys>=song.systemLen) return NULL;
if (disCont[sys].dispatch==NULL) return NULL;
@ -3348,7 +3353,7 @@ bool DivEngine::switchMaster(bool full) {
if (initAudioBackend()) {
for (int i=0; i<song.systemLen; i++) {
disCont[i].setRates(got.rate);
disCont[i].setQuality(lowQuality);
disCont[i].setQuality(lowQuality,dcHiPass);
}
if (!output->setRun(true)) {
logE("error while activating audio!");
@ -3447,10 +3452,14 @@ void DivEngine::initDispatch(bool isRender) {
BUSY_BEGIN;
logV("initializing dispatch...");
if (isRender) logI("render cores set");
lowQuality=getConfInt("audioQuality",0);
dcHiPass=getConfInt("audioHiPass",1);
for (int i=0; i<song.systemLen; i++) {
disCont[i].init(song.system[i],this,getChannelCount(song.system[i]),got.rate,song.systemFlags[i],isRender);
disCont[i].setRates(got.rate);
disCont[i].setQuality(lowQuality);
disCont[i].setQuality(lowQuality,dcHiPass);
}
if (song.patchbayAuto) {
saveLock.lock();
@ -3529,7 +3538,6 @@ bool DivEngine::initAudioBackend() {
}
#endif
lowQuality=getConfInt("audioQuality",0);
forceMono=getConfInt("forceMono",0);
clampSamples=getConfInt("clampSamples",0);
lowLatency=getConfInt("lowLatency",0);
@ -3777,6 +3785,7 @@ bool DivEngine::init() {
logE("not enough memory!");
return false;
}
blip_set_dc(samp_bb,0);
samp_bbOut=new short[32768];

View file

@ -54,8 +54,8 @@ class DivWorkPool;
#define DIV_UNSTABLE
#define DIV_VERSION "dev184"
#define DIV_ENGINE_VERSION 184
#define DIV_VERSION "dev187"
#define DIV_ENGINE_VERSION 187
// for imports
#define DIV_VERSION_MOD 0xff01
#define DIV_VERSION_FC 0xff02
@ -205,7 +205,7 @@ struct DivDispatchContainer {
short* bbInMapped[DIV_MAX_OUTPUTS];
short* bbIn[DIV_MAX_OUTPUTS];
short* bbOut[DIV_MAX_OUTPUTS];
bool lowQuality, dcOffCompensation;
bool lowQuality, dcOffCompensation, hiPass;
double rateMemory;
// used in multi-thread
@ -213,7 +213,7 @@ struct DivDispatchContainer {
unsigned int size;
void setRates(double gotRate);
void setQuality(bool lowQual);
void setQuality(bool lowQual, bool dcHiPass);
void grow(size_t size);
void acquire(size_t offset, size_t count);
void flush(size_t count);
@ -230,6 +230,7 @@ struct DivDispatchContainer {
lastAvail(0),
lowQuality(false),
dcOffCompensation(false),
hiPass(true),
rateMemory(0.0),
cycles(0),
size(0) {
@ -389,6 +390,7 @@ class DivEngine {
int chans;
bool active;
bool lowQuality;
bool dcHiPass;
bool playing;
bool freelance;
bool shallStop, shallStopSched;
@ -1017,6 +1019,9 @@ class DivEngine {
// get channel pairs
DivChannelPair getChanPaired(int chan);
// get channel mode hints
DivChannelModeHints getChanModeHints(int chan);
// get register pool
unsigned char* getRegisterPool(int sys, int& size, int& depth);
@ -1221,6 +1226,7 @@ class DivEngine {
chans(0),
active(false),
lowQuality(false),
dcHiPass(true),
playing(false),
freelance(false),
shallStop(false),

View file

@ -343,7 +343,7 @@ bool DivEngine::loadDMF(unsigned char* file, size_t len) {
ds.insLen=16;
}
logI("reading instruments (%d)...",ds.insLen);
ds.ins.reserve(ds.insLen);
if (ds.insLen>0) ds.ins.reserve(ds.insLen);
for (int i=0; i<ds.insLen; i++) {
DivInstrument* ins=new DivInstrument;
unsigned char mode=0;
@ -601,6 +601,8 @@ bool DivEngine::loadDMF(unsigned char* file, size_t len) {
}
if (ds.system[0]==DIV_SYSTEM_C64_6581 || ds.system[0]==DIV_SYSTEM_C64_8580) {
bool volIsCutoff=false;
ins->c64.triOn=reader.readC();
ins->c64.sawOn=reader.readC();
ins->c64.pulseOn=reader.readC();
@ -617,9 +619,9 @@ bool DivEngine::loadDMF(unsigned char* file, size_t len) {
ins->c64.oscSync=reader.readC();
ins->c64.toFilter=reader.readC();
if (ds.version<0x11) {
ins->c64.volIsCutoff=reader.readI();
volIsCutoff=reader.readI();
} else {
ins->c64.volIsCutoff=reader.readC();
volIsCutoff=reader.readC();
}
ins->c64.initFilter=reader.readC();
@ -631,10 +633,16 @@ bool DivEngine::loadDMF(unsigned char* file, size_t len) {
ins->c64.ch3off=reader.readC();
// weird storage
if (ins->c64.volIsCutoff) {
for (int j=0; j<ins->std.volMacro.len; j++) {
ins->std.volMacro.val[j]-=18;
if (volIsCutoff) {
// move to alg (new cutoff)
ins->std.algMacro.len=ins->std.volMacro.len;
ins->std.algMacro.loop=ins->std.volMacro.loop;
ins->std.algMacro.rel=ins->std.volMacro.rel;
for (int j=0; j<ins->std.algMacro.len; j++) {
ins->std.algMacro.val[j]=-(ins->std.volMacro.val[j]-18);
}
ins->std.volMacro.len=0;
memset(ins->std.volMacro.val,0,256*sizeof(int));
}
for (int j=0; j<ins->std.dutyMacro.len; j++) {
ins->std.dutyMacro.val[j]-=12;
@ -671,7 +679,7 @@ bool DivEngine::loadDMF(unsigned char* file, size_t len) {
if (ds.version>0x0b) {
ds.waveLen=(unsigned char)reader.readC();
logI("reading wavetables (%d)...",ds.waveLen);
ds.wave.reserve(ds.waveLen);
if (ds.waveLen>0) ds.wave.reserve(ds.waveLen);
for (int i=0; i<ds.waveLen; i++) {
DivWavetable* wave=new DivWavetable;
wave->len=(unsigned char)reader.readI();
@ -841,7 +849,7 @@ bool DivEngine::loadDMF(unsigned char* file, size_t len) {
// it appears this byte stored the YMU759 sample rate
ymuSampleRate=reader.readC();
}
ds.sample.reserve(ds.sampleLen);
if (ds.sampleLen>0) ds.sample.reserve(ds.sampleLen);
for (int i=0; i<ds.sampleLen; i++) {
DivSample* sample=new DivSample;
int length=reader.readI();
@ -1054,9 +1062,11 @@ bool DivEngine::loadDMF(unsigned char* file, size_t len) {
ds.systemFlags[0].set("dpcmMode",false);
}
// C64 no key priority
// C64 no key priority, reset time and multiply relative
if (ds.system[0]==DIV_SYSTEM_C64_8580 || ds.system[0]==DIV_SYSTEM_C64_6581) {
ds.systemFlags[0].set("keyPriority",false);
ds.systemFlags[0].set("initResetTime",1);
ds.systemFlags[0].set("multiplyRel",true);
}
// OPM broken pitch
@ -1953,6 +1963,7 @@ bool DivEngine::loadFur(unsigned char* file, size_t len) {
}
logD("systems:");
ds.systemLen=0;
for (int i=0; i<DIV_MAX_CHIPS; i++) {
unsigned char sysID=reader.readC();
ds.system[i]=systemFromFileFur(sysID);
@ -1973,6 +1984,13 @@ bool DivEngine::loadFur(unsigned char* file, size_t len) {
tchans=DIV_MAX_CHANS;
logW("too many channels!");
}
logV("system len: %d",ds.systemLen);
if (ds.systemLen<1) {
logE("zero chips!");
lastError="zero chips!";
delete[] file;
return false;
}
// system volume
for (int i=0; i<DIV_MAX_CHIPS; i++) {
@ -2361,7 +2379,7 @@ bool DivEngine::loadFur(unsigned char* file, size_t len) {
// patchbay
unsigned int conns=reader.readI();
ds.patchbay.reserve(conns);
if (conns>0) ds.patchbay.reserve(conns);
for (unsigned int i=0; i<conns; i++) {
ds.patchbay.push_back((unsigned int)reader.readI());
}
@ -3008,6 +3026,25 @@ bool DivEngine::loadFur(unsigned char* file, size_t len) {
}
}
// C64 1Exy compat
if (ds.version<186) {
for (int i=0; i<ds.systemLen; i++) {
if (ds.system[i]==DIV_SYSTEM_C64_8580 || ds.system[i]==DIV_SYSTEM_C64_6581) {
ds.systemFlags[i].set("no1EUpdate",true);
}
}
}
// C64 original reset time and multiply relative
if (ds.version<187) {
for (int i=0; i<ds.systemLen; i++) {
if (ds.system[i]==DIV_SYSTEM_C64_8580 || ds.system[i]==DIV_SYSTEM_C64_6581) {
ds.systemFlags[i].set("initResetTime",1);
ds.systemFlags[i].set("multiplyRel",true);
}
}
}
if (active) quitDispatch();
BUSY_BEGIN_SOFT;
saveLock.lock();
@ -3149,8 +3186,8 @@ bool DivEngine::loadMod(unsigned char* file, size_t len) {
ds.sampleLen=ds.sample.size();
// orders
ds.subsong[0]->ordersLen=ordCount=reader.readC();
if (ds.subsong[0]->ordersLen<1 || ds.subsong[0]->ordersLen>127) {
ds.subsong[0]->ordersLen=ordCount=(unsigned char)reader.readC();
if (ds.subsong[0]->ordersLen<1 || ds.subsong[0]->ordersLen>128) {
logD("invalid order count!");
throw EndOfFileException(&reader,reader.tell());
}
@ -6052,21 +6089,41 @@ SafeWriter* DivEngine::saveDMF(unsigned char version) {
}
}
} else { // STD
bool volIsCutoff=false;
if (sys!=DIV_SYSTEM_GB) {
int realVolMacroLen=i->std.volMacro.len;
if (realVolMacroLen>127) realVolMacroLen=127;
w->writeC(realVolMacroLen);
if ((sys==DIV_SYSTEM_C64_6581 || sys==DIV_SYSTEM_C64_8580) && i->c64.volIsCutoff) {
for (int j=0; j<realVolMacroLen; j++) {
w->writeI(i->std.volMacro.val[j]+18);
if (sys==DIV_SYSTEM_C64_6581 || sys==DIV_SYSTEM_C64_8580) {
if (i->std.algMacro.len>0) volIsCutoff=true;
if (volIsCutoff) {
if (i->std.volMacro.len>0) {
addWarning(".dmf only supports volume or cutoff macro in C64, but not both. volume macro will be lost.");
}
realVolMacroLen=i->std.algMacro.len;
if (realVolMacroLen>127) realVolMacroLen=127;
w->writeC(realVolMacroLen);
for (int j=0; j<realVolMacroLen; j++) {
w->writeI((-i->std.algMacro.val[j])+18);
}
} else {
w->writeC(realVolMacroLen);
for (int j=0; j<realVolMacroLen; j++) {
w->writeI(i->std.volMacro.val[j]);
}
}
} else {
w->writeC(realVolMacroLen);
for (int j=0; j<realVolMacroLen; j++) {
w->writeI(i->std.volMacro.val[j]);
}
}
if (realVolMacroLen>0) {
w->writeC(i->std.volMacro.loop);
if (volIsCutoff) {
w->writeC(i->std.algMacro.loop);
} else {
w->writeC(i->std.volMacro.loop);
}
}
}
@ -6157,7 +6214,7 @@ SafeWriter* DivEngine::saveDMF(unsigned char version) {
w->writeC(i->c64.oscSync);
w->writeC(i->c64.toFilter);
w->writeC(i->c64.volIsCutoff);
w->writeC(volIsCutoff);
w->writeC(i->c64.initFilter);
w->writeC(i->c64.res);

View file

@ -349,6 +349,8 @@ void DivEngine::loadDMP(SafeReader& reader, std::vector<DivInstrument*>& ret, St
}
if (ins->type==DIV_INS_C64) {
bool volIsCutoff=false;
ins->c64.triOn=reader.readC();
ins->c64.sawOn=reader.readC();
ins->c64.pulseOn=reader.readC();
@ -365,9 +367,9 @@ void DivEngine::loadDMP(SafeReader& reader, std::vector<DivInstrument*>& ret, St
ins->c64.oscSync=reader.readC();
ins->c64.toFilter=reader.readC();
if (version<0x07) { // TODO: UNSURE
ins->c64.volIsCutoff=reader.readI();
volIsCutoff=reader.readI();
} else {
ins->c64.volIsCutoff=reader.readC();
volIsCutoff=reader.readC();
}
ins->c64.initFilter=reader.readC();
@ -379,10 +381,16 @@ void DivEngine::loadDMP(SafeReader& reader, std::vector<DivInstrument*>& ret, St
ins->c64.ch3off=reader.readC();
// weird storage
if (ins->c64.volIsCutoff) {
for (int j=0; j<ins->std.volMacro.len; j++) {
ins->std.volMacro.val[j]-=18;
if (volIsCutoff) {
// move to alg (new cutoff)
ins->std.algMacro.len=ins->std.volMacro.len;
ins->std.algMacro.loop=ins->std.volMacro.loop;
ins->std.algMacro.rel=ins->std.volMacro.rel;
for (int j=0; j<ins->std.algMacro.len; j++) {
ins->std.algMacro.val[j]=-(ins->std.volMacro.val[j]-18);
}
ins->std.volMacro.len=0;
memset(ins->std.volMacro.val,0,256*sizeof(int));
}
for (int j=0; j<ins->std.dutyMacro.len; j++) {
ins->std.dutyMacro.val[j]-=12;

View file

@ -101,7 +101,6 @@ bool DivInstrumentC64::operator==(const DivInstrumentC64& other) {
_C(ringMod) &&
_C(oscSync) &&
_C(toFilter) &&
_C(volIsCutoff) &&
_C(initFilter) &&
_C(dutyIsAbs) &&
_C(filterIsAbs) &&
@ -196,7 +195,10 @@ bool DivInstrumentWaveSynth::operator==(const DivInstrumentWaveSynth& other) {
}
bool DivInstrumentSoundUnit::operator==(const DivInstrumentSoundUnit& other) {
return _C(switchRoles);
return (
_C(switchRoles) &&
_C(hwSeqLen)
);
}
bool DivInstrumentES5506::operator==(const DivInstrumentES5506& other) {
@ -388,7 +390,6 @@ void DivInstrument::writeFeature64(SafeWriter* w) {
w->writeC(
(c64.dutyIsAbs?0x80:0)|
(c64.initFilter?0x40:0)|
(c64.volIsCutoff?0x20:0)|
(c64.toFilter?0x10:0)|
(c64.noiseOn?8:0)|
(c64.pulseOn?4:0)|
@ -691,6 +692,14 @@ void DivInstrument::writeFeatureSU(SafeWriter* w) {
w->writeC(su.switchRoles);
w->writeC(su.hwSeqLen);
for (int i=0; i<su.hwSeqLen; i++) {
w->writeC(su.hwSeq[i].cmd);
w->writeC(su.hwSeq[i].bound);
w->writeC(su.hwSeq[i].val);
w->writeS(su.hwSeq[i].speed);
}
FEATURE_END;
}
@ -1312,7 +1321,7 @@ void DivInstrument::putInsData(SafeWriter* w) {
w->writeC(c64.oscSync);
w->writeC(c64.toFilter);
w->writeC(c64.initFilter);
w->writeC(c64.volIsCutoff);
w->writeC(0); // this was volIsCutoff
w->writeC(c64.res);
w->writeC(c64.lp);
w->writeC(c64.bp);
@ -2083,13 +2092,13 @@ void DivInstrument::readFeatureMA(SafeReader& reader, short version) {
READ_FEAT_END;
}
void DivInstrument::readFeature64(SafeReader& reader, short version) {
void DivInstrument::readFeature64(SafeReader& reader, bool& volIsCutoff, short version) {
READ_FEAT_BEGIN;
unsigned char next=reader.readC();
c64.dutyIsAbs=next&128;
c64.initFilter=next&64;
c64.volIsCutoff=next&32;
volIsCutoff=next&32;
c64.toFilter=next&16;
c64.noiseOn=next&8;
c64.pulseOn=next&4;
@ -2536,6 +2545,16 @@ void DivInstrument::readFeatureSU(SafeReader& reader, short version) {
su.switchRoles=reader.readC();
if (version>=185) {
su.hwSeqLen=reader.readC();
for (int i=0; i<su.hwSeqLen; i++) {
su.hwSeq[i].cmd=reader.readC();
su.hwSeq[i].bound=reader.readC();
su.hwSeq[i].val=reader.readC();
su.hwSeq[i].speed=reader.readS();
}
}
READ_FEAT_END;
}
@ -2581,6 +2600,7 @@ void DivInstrument::readFeatureNE(SafeReader& reader, short version) {
DivDataErrors DivInstrument::readInsDataNew(SafeReader& reader, short version, bool fui, DivSong* song) {
unsigned char featCode[2];
bool volIsCutoff=false;
int dataLen=reader.size()-4;
if (!fui) {
@ -2609,7 +2629,7 @@ DivDataErrors DivInstrument::readInsDataNew(SafeReader& reader, short version, b
} else if (memcmp(featCode,"MA",2)==0) { // macros
readFeatureMA(reader,version);
} else if (memcmp(featCode,"64",2)==0) { // C64
readFeature64(reader,version);
readFeature64(reader,volIsCutoff,version);
} else if (memcmp(featCode,"GB",2)==0) { // Game Boy
readFeatureGB(reader,version);
} else if (memcmp(featCode,"SM",2)==0) { // sample
@ -2658,6 +2678,24 @@ DivDataErrors DivInstrument::readInsDataNew(SafeReader& reader, short version, b
}
}
// <187 C64 cutoff macro compatibility
if (type==DIV_INS_C64 && volIsCutoff && version<187) {
memcpy(&std.algMacro,&std.volMacro,sizeof(DivInstrumentMacro));
std.algMacro.macroType=DIV_MACRO_ALG;
std.volMacro=DivInstrumentMacro(DIV_MACRO_VOL,true);
if (!c64.filterIsAbs) {
for (int i=0; i<std.algMacro.len; i++) {
std.algMacro.val[i]=-std.algMacro.val[i];
}
}
}
// <187 special/test/gate merge
if (type==DIV_INS_C64 && version<187) {
convertC64SpecialMacro();
}
return DIV_DATA_SUCCESS;
}
@ -2665,6 +2703,7 @@ DivDataErrors DivInstrument::readInsDataNew(SafeReader& reader, short version, b
for (int macroValPos=0; macroValPos<y; macroValPos++) x[macroValPos]=reader.readI();
DivDataErrors DivInstrument::readInsDataOld(SafeReader &reader, short version) {
bool volIsCutoff=false;
reader.readI(); // length. ignored.
reader.readS(); // format version. ignored.
@ -2747,7 +2786,7 @@ DivDataErrors DivInstrument::readInsDataOld(SafeReader &reader, short version) {
c64.oscSync=reader.readC();
c64.toFilter=reader.readC();
c64.initFilter=reader.readC();
c64.volIsCutoff=reader.readC();
volIsCutoff=reader.readC();
c64.res=reader.readC();
c64.lp=reader.readC();
c64.bp=reader.readC();
@ -2805,7 +2844,7 @@ DivDataErrors DivInstrument::readInsDataOld(SafeReader &reader, short version) {
}
}
if (type==DIV_INS_C64 && version<87) {
if (c64.volIsCutoff && !c64.filterIsAbs) for (int j=0; j<std.volMacro.len; j++) {
if (volIsCutoff && !c64.filterIsAbs) for (int j=0; j<std.volMacro.len; j++) {
std.volMacro.val[j]-=18;
}
if (!c64.dutyIsAbs) for (int j=0; j<std.dutyMacro.len; j++) {
@ -3391,6 +3430,24 @@ DivDataErrors DivInstrument::readInsDataOld(SafeReader &reader, short version) {
}
}
// <187 C64 cutoff macro compatibility
if (type==DIV_INS_C64 && volIsCutoff && version<187) {
memcpy(&std.algMacro,&std.volMacro,sizeof(DivInstrumentMacro));
std.algMacro.macroType=DIV_MACRO_ALG;
std.volMacro=DivInstrumentMacro(DIV_MACRO_VOL,true);
if (!c64.filterIsAbs) {
for (int i=0; i<std.algMacro.len; i++) {
std.algMacro.val[i]=-std.algMacro.val[i];
}
}
}
// <187 special/test/gate merge
if (type==DIV_INS_C64 && version<187) {
convertC64SpecialMacro();
}
return DIV_DATA_SUCCESS;
}
@ -3420,6 +3477,42 @@ DivDataErrors DivInstrument::readInsData(SafeReader& reader, short version, DivS
return readInsDataOld(reader,version);
}
void DivInstrument::convertC64SpecialMacro() {
// merge special and test/gate macros into new special macro
int maxLen=MAX(std.ex3Macro.len,std.ex4Macro.len);
// skip if ex4 is not a sequence macro
if (std.ex4Macro.open&6) return;
// move ex4 macro up and fill in gate
for (int i=0; i<std.ex4Macro.len; i++) {
std.ex4Macro.val[i]=(std.ex4Macro.val[i]&1)?9:1;
}
// merge ex3 into ex4 if viable to
if (std.ex3Macro.len>0 && !(std.ex3Macro.open&6)) {
if (std.ex4Macro.len>0 && std.ex4Macro.len<maxLen) {
for (int i=std.ex4Macro.len; i<maxLen; i++) {
std.ex4Macro.val[i]=std.ex3Macro.val[std.ex4Macro.len-1];
}
} else {
for (int i=0; i<maxLen; i++) {
std.ex4Macro.val[i]=1;
}
}
for (int i=0; i<maxLen; i++) {
if (i>=std.ex3Macro.len) {
std.ex4Macro.val[i]|=(std.ex3Macro.val[std.ex3Macro.len-1]&3)<<1;
} else {
std.ex4Macro.val[i]|=(std.ex3Macro.val[i]&3)<<1;
}
}
}
std.ex4Macro.len=maxLen;
std.ex3Macro=DivInstrumentMacro(DIV_MACRO_EX3);
}
bool DivInstrument::save(const char* path, bool oldFormat, DivSong* song, bool writeInsName) {
SafeWriter* w=new SafeWriter();
w->init();
@ -3611,7 +3704,7 @@ bool DivInstrument::saveDMP(const char* path) {
w->writeC(c64.ringMod);
w->writeC(c64.oscSync);
w->writeC(c64.toFilter);
w->writeC(c64.volIsCutoff);
w->writeC(0); // this was volIsCutoff...
w->writeC(c64.initFilter);
w->writeC(c64.res);
w->writeC((c64.cut*100)/2047);

View file

@ -385,7 +385,7 @@ struct DivInstrumentGB {
DIV_GB_HWCMD_MAX
};
struct HWSeqCommand {
struct HWSeqCommandGB {
unsigned char cmd;
unsigned short data;
} hwSeq[256];
@ -403,7 +403,7 @@ struct DivInstrumentGB {
hwSeqLen(0),
softEnv(false),
alwaysInit(false) {
memset(hwSeq,0,256*sizeof(int));
memset(hwSeq,0,256*sizeof(HWSeqCommandGB));
}
};
@ -412,7 +412,7 @@ struct DivInstrumentC64 {
unsigned char a, d, s, r;
unsigned short duty;
unsigned char ringMod, oscSync;
bool toFilter, volIsCutoff, initFilter, dutyIsAbs, filterIsAbs, noTest;
bool toFilter, initFilter, dutyIsAbs, filterIsAbs, noTest;
unsigned char res;
unsigned short cut;
bool hp, lp, bp, ch3off;
@ -435,7 +435,6 @@ struct DivInstrumentC64 {
ringMod(0),
oscSync(0),
toFilter(false),
volIsCutoff(false),
initFilter(false),
dutyIsAbs(false),
filterIsAbs(false),
@ -663,6 +662,25 @@ struct DivInstrumentWaveSynth {
struct DivInstrumentSoundUnit {
bool switchRoles;
unsigned char hwSeqLen;
enum HWSeqCommands: unsigned char {
DIV_SU_HWCMD_VOL=0,
DIV_SU_HWCMD_PITCH,
DIV_SU_HWCMD_CUT,
DIV_SU_HWCMD_WAIT,
DIV_SU_HWCMD_WAIT_REL,
DIV_SU_HWCMD_LOOP,
DIV_SU_HWCMD_LOOP_REL,
DIV_SU_HWCMD_MAX
};
struct HWSeqCommandSU {
unsigned char cmd;
unsigned char bound;
unsigned char val;
unsigned short speed;
unsigned short padding;
} hwSeq[256];
bool operator==(const DivInstrumentSoundUnit& other);
bool operator!=(const DivInstrumentSoundUnit& other) {
@ -670,7 +688,10 @@ struct DivInstrumentSoundUnit {
}
DivInstrumentSoundUnit():
switchRoles(false) {}
switchRoles(false),
hwSeqLen(0) {
memset(hwSeq,0,256*sizeof(HWSeqCommandSU));
}
};
struct DivInstrumentES5506 {
@ -794,7 +815,7 @@ struct DivInstrument {
void readFeatureNA(SafeReader& reader, short version);
void readFeatureFM(SafeReader& reader, short version);
void readFeatureMA(SafeReader& reader, short version);
void readFeature64(SafeReader& reader, short version);
void readFeature64(SafeReader& reader, bool& volIsCutoff, short version);
void readFeatureGB(SafeReader& reader, short version);
void readFeatureSM(SafeReader& reader, short version);
void readFeatureOx(SafeReader& reader, int op, short version);
@ -813,6 +834,8 @@ struct DivInstrument {
DivDataErrors readInsDataOld(SafeReader& reader, short version);
DivDataErrors readInsDataNew(SafeReader& reader, short version, bool fui, DivSong* song);
void convertC64SpecialMacro();
/**
* save the instrument to a SafeWriter.

View file

@ -20,6 +20,7 @@
#include "c64.h"
#include "../engine.h"
#include "sound/c64_fp/siddefs-fp.h"
#include "IconsFontAwesome4.h"
#include <math.h>
#include "../../ta-log.h"
@ -158,21 +159,10 @@ void DivPlatformC64::tick(bool sysTick) {
chan[i].std.next();
if (chan[i].std.vol.had) {
DivInstrument* ins=parent->getIns(chan[i].ins,DIV_INS_C64);
if (ins->c64.volIsCutoff) {
if (ins->c64.filterIsAbs) {
filtCut=MIN(2047,chan[i].std.vol.val);
} else {
filtCut-=((signed char)chan[i].std.vol.val)*7;
if (filtCut>2047) filtCut=2047;
if (filtCut<0) filtCut=0;
}
willUpdateFilter=true;
} else {
vol=MIN(15,chan[i].std.vol.val);
willUpdateFilter=true;
}
vol=MIN(15,chan[i].std.vol.val);
willUpdateFilter=true;
}
if (NEW_ARP_STRAT) {
chan[i].handleArp();
} else if (chan[i].std.arp.had) {
@ -186,14 +176,18 @@ void DivPlatformC64::tick(bool sysTick) {
if (ins->c64.dutyIsAbs) {
chan[i].duty=chan[i].std.duty.val;
} else {
chan[i].duty-=((signed char)chan[i].std.duty.val)*4;
if (multiplyRel) {
chan[i].duty-=((signed char)chan[i].std.duty.val)*4;
} else {
chan[i].duty-=chan[i].std.duty.val;
}
}
rWrite(i*7+2,chan[i].duty&0xff);
rWrite(i*7+3,chan[i].duty>>8);
}
if (chan[i].std.wave.had) {
chan[i].wave=chan[i].std.wave.val;
rWrite(i*7+4,(chan[i].wave<<4)|(chan[i].test<<3)|(chan[i].ring<<2)|(chan[i].sync<<1)|(int)(chan[i].active));
rWrite(i*7+4,(chan[i].wave<<4)|(chan[i].test<<3)|(chan[i].ring<<2)|(chan[i].sync<<1)|(int)(chan[i].active && chan[i].gate));
}
if (chan[i].std.pitch.had) {
if (chan[i].std.pitch.mode) {
@ -204,6 +198,21 @@ void DivPlatformC64::tick(bool sysTick) {
}
chan[i].freqChanged=true;
}
if (chan[i].std.alg.had) { // new cutoff macro
DivInstrument* ins=parent->getIns(chan[i].ins,DIV_INS_C64);
if (ins->c64.filterIsAbs) {
filtCut=MIN(2047,chan[i].std.alg.val);
} else {
if (multiplyRel) {
filtCut+=((signed char)chan[i].std.alg.val)*7;
} else {
filtCut+=chan[i].std.alg.val;
}
if (filtCut>2047) filtCut=2047;
if (filtCut<0) filtCut=0;
}
willUpdateFilter=true;
}
if (chan[i].std.ex1.had) {
filtControl=chan[i].std.ex1.val&15;
willUpdateFilter=true;
@ -212,15 +221,33 @@ void DivPlatformC64::tick(bool sysTick) {
filtRes=chan[i].std.ex2.val&15;
willUpdateFilter=true;
}
if (chan[i].std.ex3.had) {
chan[i].sync=chan[i].std.ex3.val&1;
chan[i].ring=chan[i].std.ex3.val&2;
chan[i].freqChanged=true;
rWrite(i*7+4,(chan[i].wave<<4)|(chan[i].test<<3)|(chan[i].ring<<2)|(chan[i].sync<<1)|(int)(chan[i].active));
}
if (chan[i].std.ex4.had) {
chan[i].test=chan[i].std.ex4.val&1;
rWrite(i*7+4,(chan[i].wave<<4)|(chan[i].test<<3)|(chan[i].ring<<2)|(chan[i].sync<<1)|(int)(chan[i].active));
chan[i].gate=chan[i].std.ex4.val&1;
chan[i].sync=chan[i].std.ex4.val&2;
chan[i].ring=chan[i].std.ex4.val&4;
chan[i].test=chan[i].std.ex4.val&8;
chan[i].freqChanged=true;
rWrite(i*7+4,(chan[i].wave<<4)|(chan[i].test<<3)|(chan[i].ring<<2)|(chan[i].sync<<1)|(int)(chan[i].active && chan[i].gate));
}
if (chan[i].std.ex5.had) {
chan[i].attack=chan[i].std.ex5.val&15;
rWrite(i*7+5,(chan[i].attack<<4)|(chan[i].decay));
}
if (chan[i].std.ex6.had) {
chan[i].decay=chan[i].std.ex6.val&15;
rWrite(i*7+5,(chan[i].attack<<4)|(chan[i].decay));
}
if (chan[i].std.ex7.had) {
chan[i].sustain=chan[i].std.ex7.val&15;
rWrite(i*7+6,(chan[i].sustain<<4)|(chan[i].release));
}
if (chan[i].std.ex8.had) {
chan[i].release=chan[i].std.ex8.val&15;
rWrite(i*7+6,(chan[i].sustain<<4)|(chan[i].release));
}
if (sysTick) {
@ -243,7 +270,7 @@ void DivPlatformC64::tick(bool sysTick) {
if (chan[i].keyOn) {
rWrite(i*7+5,(chan[i].attack<<4)|(chan[i].decay));
rWrite(i*7+6,(chan[i].sustain<<4)|(chan[i].release));
rWrite(i*7+4,(chan[i].wave<<4)|(chan[i].test<<3)|(chan[i].ring<<2)|(chan[i].sync<<1)|1);
rWrite(i*7+4,(chan[i].wave<<4)|(chan[i].test<<3)|(chan[i].ring<<2)|(chan[i].sync<<1)|(chan[i].gate?1:0));
}
if (chan[i].keyOff) {
rWrite(i*7+5,(chan[i].attack<<4)|(chan[i].decay));
@ -387,7 +414,7 @@ int DivPlatformC64::dispatch(DivCommand c) {
break;
case DIV_CMD_WAVE:
chan[c.chan].wave=c.value;
rWrite(c.chan*7+4,(chan[c.chan].wave<<4)|(chan[c.chan].test<<3)|(chan[c.chan].ring<<2)|(chan[c.chan].sync<<1)|(int)(chan[c.chan].active));
rWrite(c.chan*7+4,(chan[c.chan].wave<<4)|(chan[c.chan].test<<3)|(chan[c.chan].ring<<2)|(chan[c.chan].sync<<1)|(int)(chan[c.chan].active && chan[c.chan].gate));
break;
case DIV_CMD_LEGATO:
chan[c.chan].baseFreq=NOTE_FREQUENCY(c.value+((HACKY_LEGATO_MESS)?(chan[c.chan].std.arp.val):(0)));
@ -396,7 +423,7 @@ int DivPlatformC64::dispatch(DivCommand c) {
break;
case DIV_CMD_PRE_PORTA:
if (chan[c.chan].active && c.value2) {
if (parent->song.resetMacroOnPorta || !chan[c.chan].inPorta) {
if (parent->song.resetMacroOnPorta || parent->song.preNoteNoEffect) {
chan[c.chan].macroInit(parent->getIns(chan[c.chan].ins,DIV_INS_C64));
chan[c.chan].keyOn=true;
}
@ -457,23 +484,35 @@ int DivPlatformC64::dispatch(DivCommand c) {
switch (c.value>>4) {
case 0:
chan[c.chan].attack=c.value&15;
if (!no1EUpdate) {
rWrite(c.chan*7+5,(chan[c.chan].attack<<4)|(chan[c.chan].decay));
}
break;
case 1:
chan[c.chan].decay=c.value&15;
if (!no1EUpdate) {
rWrite(c.chan*7+5,(chan[c.chan].attack<<4)|(chan[c.chan].decay));
}
break;
case 2:
chan[c.chan].sustain=c.value&15;
if (!no1EUpdate) {
rWrite(c.chan*7+6,(chan[c.chan].sustain<<4)|(chan[c.chan].release));
}
break;
case 3:
chan[c.chan].release=c.value&15;
if (!no1EUpdate) {
rWrite(c.chan*7+6,(chan[c.chan].sustain<<4)|(chan[c.chan].release));
}
break;
case 4:
chan[c.chan].ring=c.value;
rWrite(c.chan*7+4,(chan[c.chan].wave<<4)|(chan[c.chan].test<<3)|(chan[c.chan].ring<<2)|(chan[c.chan].sync<<1)|(int)(chan[c.chan].active));
rWrite(c.chan*7+4,(chan[c.chan].wave<<4)|(chan[c.chan].test<<3)|(chan[c.chan].ring<<2)|(chan[c.chan].sync<<1)|(int)(chan[c.chan].active && chan[c.chan].gate));
break;
case 5:
chan[c.chan].sync=c.value;
rWrite(c.chan*7+4,(chan[c.chan].wave<<4)|(chan[c.chan].test<<3)|(chan[c.chan].ring<<2)|(chan[c.chan].sync<<1)|(int)(chan[c.chan].active));
rWrite(c.chan*7+4,(chan[c.chan].wave<<4)|(chan[c.chan].test<<3)|(chan[c.chan].ring<<2)|(chan[c.chan].sync<<1)|(int)(chan[c.chan].active && chan[c.chan].gate));
break;
case 6:
filtControl&=7;
@ -481,6 +520,16 @@ int DivPlatformC64::dispatch(DivCommand c) {
break;
}
break;
case DIV_CMD_C64_AD:
chan[c.chan].attack=c.value>>4;
chan[c.chan].decay=c.value&15;
rWrite(c.chan*7+5,(chan[c.chan].attack<<4)|(chan[c.chan].decay));
break;
case DIV_CMD_C64_SR:
chan[c.chan].sustain=c.value>>4;
chan[c.chan].release=c.value&15;
rWrite(c.chan*7+6,(chan[c.chan].sustain<<4)|(chan[c.chan].release));
break;
case DIV_CMD_MACRO_OFF:
chan[c.chan].std.mask(c.value,true);
break;
@ -546,6 +595,24 @@ DivMacroInt* DivPlatformC64::getChanMacroInt(int ch) {
return &chan[ch].std;
}
DivChannelModeHints DivPlatformC64::getModeHints(int ch) {
DivChannelModeHints ret;
ret.count=1;
ret.hint[0]=ICON_FA_BELL_SLASH_O;
ret.type[0]=0;
if (ch==2 && (filtControl&8)) {
ret.type[0]=7;
} else if (chan[ch].test && !chan[ch].gate) {
ret.type[0]=5;
} else if (chan[ch].test) {
ret.type[0]=6;
} else if (!chan[ch].gate) {
ret.type[0]=4;
}
return ret;
}
DivDispatchOscBuffer* DivPlatformC64::getOscBuffer(int ch) {
return oscBuf[ch];
}
@ -594,7 +661,18 @@ void DivPlatformC64::reset() {
needInitTables=false;
} else if (sidCore==1) {
sid_fp->reset();
sid_fp->clockSilent(16000);
for (int i=0; i<3; i++) {
sid_fp->write(i*7+5,testAD);
sid_fp->write(i*7+6,testSR);
sid_fp->write(i*7+4,8);
}
sid_fp->clockSilent(30000);
for (int i=0; i<3; i++) {
sid_fp->write(i*7+5,testAD);
sid_fp->write(i*7+6,testSR);
sid_fp->write(i*7+4,0);
}
sid_fp->clockSilent(30000);
} else {
sid->reset();
}
@ -605,7 +683,7 @@ void DivPlatformC64::reset() {
filtControl=7;
filtRes=0;
filtCut=2047;
resetTime=1;
resetTime=initResetTime;
vol=15;
chanOrder[0]=0;
@ -652,8 +730,12 @@ void DivPlatformC64::setFlags(const DivConfig& flags) {
if (sidCore==1) sid_fp->setSamplingParameters(chipClock,reSIDfp::DECIMATE,rate,0);
}
keyPriority=flags.getBool("keyPriority",true);
no1EUpdate=flags.getBool("no1EUpdate",false);
multiplyRel=flags.getBool("multiplyRel",false);
testAD=((flags.getInt("testAttack",0)&15)<<4)|(flags.getInt("testDecay",0)&15);
testSR=((flags.getInt("testSustain",0)&15)<<4)|(flags.getInt("testRelease",0)&15);
initResetTime=flags.getInt("initResetTime",2);
if (initResetTime<0) initResetTime=1;
// init fake filter table
// taken from dSID

View file

@ -26,13 +26,17 @@
#include "sound/c64_fp/SID.h"
#include "sound/c64_d/dsid.h"
// TODO:
// - ex3 (special) unify with ex4 (gate/test)
// - ex4 (test) compatibility
class DivPlatformC64: public DivDispatch {
struct Channel: public SharedChannel<signed char> {
int prevFreq, testWhen;
unsigned char sweep, wave, attack, decay, sustain, release;
short duty;
bool sweepChanged, filter;
bool resetMask, resetFilter, resetDuty, ring, sync, test;
bool resetMask, resetFilter, resetDuty, gate, ring, sync, test;
Channel():
SharedChannel<signed char>(15),
prevFreq(65535),
@ -49,6 +53,7 @@ class DivPlatformC64: public DivDispatch {
resetMask(false),
resetFilter(false),
resetDuty(false),
gate(true),
ring(false),
sync(false),
test(false) {}
@ -70,9 +75,9 @@ class DivPlatformC64: public DivDispatch {
unsigned char filtControl, filtRes, vol;
unsigned char writeOscBuf;
unsigned char sidCore;
int filtCut, resetTime;
int filtCut, resetTime, initResetTime;
bool keyPriority, sidIs6581, needInitTables;
bool keyPriority, sidIs6581, needInitTables, no1EUpdate, multiplyRel;
unsigned char chanOrder[3];
unsigned char testAD, testSR;
@ -108,6 +113,7 @@ class DivPlatformC64: public DivDispatch {
bool isVolGlobal();
float getPostAmp();
DivMacroInt* getChanMacroInt(int ch);
DivChannelModeHints getModeHints(int chan);
void notifyInsDeletion(void* ins);
void poke(unsigned int addr, unsigned short val);
void poke(std::vector<DivRegWrite>& wlist);

View file

@ -191,22 +191,22 @@ void DivPlatformES5506::tick(bool sysTick) {
const int nextVol=VOL_SCALE_LOG((0xfff*chan[i].vol)/0xff,(0xfff*chan[i].std.vol.val)/chan[i].volMacroMax,0xfff);
if (chan[i].outVol!=nextVol) {
chan[i].outVol=nextVol;
chan[i].volChanged.lVol=1;
chan[i].volChanged.rVol=1;
chan[i].volChangedES.lVol=1;
chan[i].volChangedES.rVol=1;
}
}
if (chan[i].std.panL.had) {
const int nextLVol=VOL_SCALE_LOG((0xfff*chan[i].lVol)/0xff,(0xfff*chan[i].std.panL.val)/chan[i].panMacroMax,0xfff);
if (chan[i].outLVol!=nextLVol) {
chan[i].outLVol=nextLVol;
chan[i].volChanged.lVol=1;
chan[i].volChangedES.lVol=1;
}
}
if (chan[i].std.panR.had) {
const int nextRVol=VOL_SCALE_LOG((0xfff*chan[i].rVol)/0xff,(0xfff*chan[i].std.panR.val)/chan[i].panMacroMax,0xfff);
if (chan[i].outRVol!=nextRVol) {
chan[i].outRVol=nextRVol;
chan[i].volChanged.rVol=1;
chan[i].volChangedES.rVol=1;
}
}
// arpeggio/pitch macros, frequency related
@ -340,7 +340,7 @@ void DivPlatformES5506::tick(bool sysTick) {
if (chan[i].ca!=ca) {
chan[i].ca=ca;
if (!chan[i].keyOn) {
chan[i].volChanged.ca=1;
chan[i].volChangedES.ca=1;
}
}
}
@ -360,9 +360,9 @@ void DivPlatformES5506::tick(bool sysTick) {
}
}
// update registers
if (chan[i].volChanged.changed) {
if (chan[i].volChangedES.changed) {
// calculate volume (16 bit)
if (chan[i].volChanged.lVol) {
if (chan[i].volChangedES.lVol) {
chan[i].resLVol=VOL_SCALE_LOG(chan[i].outVol,chan[i].outLVol,0xfff);
chan[i].resLVol-=volScale;
if (chan[i].resLVol<0) chan[i].resLVol=0;
@ -371,7 +371,7 @@ void DivPlatformES5506::tick(bool sysTick) {
pageWrite(0x00|i,0x02,chan[i].resLVol);
}
}
if (chan[i].volChanged.rVol) {
if (chan[i].volChangedES.rVol) {
chan[i].resRVol=VOL_SCALE_LOG(chan[i].outVol,chan[i].outRVol,0xfff);
chan[i].resRVol-=volScale;
if (chan[i].resRVol<0) chan[i].resRVol=0;
@ -380,10 +380,10 @@ void DivPlatformES5506::tick(bool sysTick) {
pageWrite(0x00|i,0x04,chan[i].resRVol);
}
}
if (chan[i].volChanged.ca) {
if (chan[i].volChangedES.ca) {
pageWriteMask(0x00|i,0x5f,0x00,(chan[i].ca<<10),0x1c00);
}
chan[i].volChanged.changed=0;
chan[i].volChangedES.changed=0;
}
if (chan[i].pcmChanged.changed) {
if (chan[i].pcmChanged.index) {
@ -750,7 +750,7 @@ int DivPlatformES5506::dispatch(DivCommand c) {
chan[c.chan].freqChanged=true;
chan[c.chan].pcmChanged.changed=0xff;
chan[c.chan].noteChanged.changed=0xff;
chan[c.chan].volChanged.changed=0xff;
chan[c.chan].volChangedES.changed=0xff;
}
if (!chan[c.chan].std.vol.will) {
chan[c.chan].outVol=(0xfff*chan[c.chan].vol)/0xff;
@ -787,7 +787,7 @@ int DivPlatformES5506::dispatch(DivCommand c) {
chan[c.chan].vol=c.value;
if (!chan[c.chan].std.vol.has) {
chan[c.chan].outVol=(0xfff*c.value)/0xff;
chan[c.chan].volChanged.changed=0xff;
chan[c.chan].volChangedES.changed=0xff;
}
}
break;
@ -797,14 +797,14 @@ int DivPlatformES5506::dispatch(DivCommand c) {
case DIV_CMD_PANNING: {
if (chan[c.chan].ca!=0) {
chan[c.chan].ca=0;
chan[c.chan].volChanged.ca=1;
chan[c.chan].volChangedES.ca=1;
}
// Left volume
if (chan[c.chan].lVol!=c.value) {
chan[c.chan].lVol=c.value;
if (!chan[c.chan].std.panL.has) {
chan[c.chan].outLVol=(0xfff*c.value)/0xff;
chan[c.chan].volChanged.lVol=1;
chan[c.chan].volChangedES.lVol=1;
}
}
// Right volume
@ -812,7 +812,7 @@ int DivPlatformES5506::dispatch(DivCommand c) {
chan[c.chan].rVol=c.value2;
if (!chan[c.chan].std.panR.has) {
chan[c.chan].outRVol=(0xfff*c.value2)/0xff;
chan[c.chan].volChanged.rVol=1;
chan[c.chan].volChangedES.rVol=1;
}
}
break;
@ -821,7 +821,7 @@ int DivPlatformES5506::dispatch(DivCommand c) {
unsigned char ca=CLAMP(c.value>>1,0,5);
if (chan[c.chan].ca!=ca) {
chan[c.chan].ca=ca;
chan[c.chan].volChanged.ca=1;
chan[c.chan].volChangedES.ca=1;
}
if ((c.value&1)==0) {
// Left volume
@ -829,7 +829,7 @@ int DivPlatformES5506::dispatch(DivCommand c) {
chan[c.chan].lVol=c.value2;
if (!chan[c.chan].std.panL.has) {
chan[c.chan].outLVol=(0xfff*c.value2)/0xff;
chan[c.chan].volChanged.lVol=1;
chan[c.chan].volChangedES.lVol=1;
}
}
}
@ -839,7 +839,7 @@ int DivPlatformES5506::dispatch(DivCommand c) {
chan[c.chan].rVol=c.value2;
if (!chan[c.chan].std.panR.has) {
chan[c.chan].outRVol=(0xfff*c.value2)/0xff;
chan[c.chan].volChanged.rVol=1;
chan[c.chan].volChangedES.rVol=1;
}
}
}
@ -1041,7 +1041,7 @@ void DivPlatformES5506::forceIns() {
chan[i].insChanged=true;
chan[i].freqChanged=true;
chan[i].noteChanged.changed=0xff;
chan[i].volChanged.changed=0xff;
chan[i].volChangedES.changed=0xff;
chan[i].filterChanged.changed=0xff;
chan[i].envChanged.changed=0xff;
chan[i].pcmChanged.changed=0xff;

View file

@ -97,7 +97,7 @@ class DivPlatformES5506: public DivDispatch, public es550x_intf {
VolChanged() :
changed(0) {}
} volChanged;
} volChangedES;
struct FilterChanged { // Filter changed flags
union { // pack flag bits in single byte
@ -198,7 +198,7 @@ class DivPlatformES5506: public DivDispatch, public es550x_intf {
isReverseLoop(false),
cr(0),
noteChanged(NoteChanged()),
volChanged(VolChanged()),
volChangedES(VolChanged()),
filterChanged(FilterChanged()),
envChanged(EnvChanged()),
pcmChanged(PCMChanged()),

View file

@ -800,7 +800,7 @@ DivMacroInt* DivPlatformGenesisExt::getChanMacroInt(int ch) {
}
unsigned short DivPlatformGenesisExt::getPan(int ch) {
if (ch==csmChan) return 0;
if (ch==4+csmChan) return 0;
if (ch>=4+extChanOffs) return DivPlatformGenesis::getPan(ch-3);
if (ch>=extChanOffs) {
if (extMode) {

View file

@ -19,6 +19,7 @@
#include "pce.h"
#include "../engine.h"
#include "furIcons.h"
#include <math.h>
//#define rWrite(a,v) pendingWrites[a]=v;
@ -512,6 +513,18 @@ unsigned short DivPlatformPCE::getPan(int ch) {
return ((chan[ch].pan&0xf0)<<4)|(chan[ch].pan&15);
}
DivChannelModeHints DivPlatformPCE::getModeHints(int ch) {
DivChannelModeHints ret;
if (ch<4) return ret;
ret.count=1;
ret.hint[0]=ICON_FUR_NOISE;
ret.type[0]=0;
if (chan[ch].noise) ret.type[0]=4;
return ret;
}
DivSamplePos DivPlatformPCE::getSamplePos(int ch) {
if (ch>=6) return DivSamplePos();
if (!chan[ch].pcm) return DivSamplePos();

View file

@ -83,6 +83,7 @@ class DivPlatformPCE: public DivDispatch {
void* getChanState(int chan);
DivMacroInt* getChanMacroInt(int ch);
unsigned short getPan(int chan);
DivChannelModeHints getModeHints(int chan);
DivSamplePos getSamplePos(int ch);
DivDispatchOscBuffer* getOscBuffer(int chan);
unsigned char* getRegisterPool();

View file

@ -20,6 +20,7 @@
#include "snes.h"
#include "../engine.h"
#include "../../ta-log.h"
#include "furIcons.h"
#include <math.h>
#define CHIP_FREQBASE 131072
@ -710,6 +711,63 @@ DivChannelPair DivPlatformSNES::getPaired(int ch) {
return DivChannelPair();
}
DivChannelModeHints DivPlatformSNES::getModeHints(int ch) {
DivChannelModeHints ret;
ret.count=1;
ret.hint[0]="-";
ret.type[0]=0;
const SPC_DSP::voice_t* v=dsp.get_voice(ch);
if (v!=NULL) {
if (v->regs[5]&128) {
switch (v->env_mode) {
case SPC_DSP::env_attack:
ret.hint[0]=ICON_FUR_ADSR_A;
ret.type[0]=12;
break;
case SPC_DSP::env_decay:
ret.hint[0]=ICON_FUR_ADSR_D;
ret.type[0]=13;
break;
case SPC_DSP::env_sustain:
ret.hint[0]=ICON_FUR_ADSR_S;
ret.type[0]=14;
break;
case SPC_DSP::env_release:
ret.hint[0]=ICON_FUR_ADSR_R;
ret.type[0]=15;
break;
}
} else {
if (v->regs[7]&128) {
switch (v->regs[7]&0x60) {
case 0:
ret.hint[0]=ICON_FUR_DEC_LINEAR;
ret.type[0]=16;
break;
case 32:
ret.hint[0]=ICON_FUR_DEC_EXP;
ret.type[0]=17;
break;
case 64:
ret.hint[0]=ICON_FUR_INC_LINEAR;
ret.type[0]=18;
break;
case 96:
ret.hint[0]=ICON_FUR_INC_BENT;
ret.type[0]=19;
break;
}
} else {
ret.hint[0]=ICON_FUR_VOL_DIRECT;
ret.type[0]=20;
}
}
}
return ret;
}
DivSamplePos DivPlatformSNES::getSamplePos(int ch) {
if (ch>=8) return DivSamplePos();
if (!chan[ch].active) return DivSamplePos();

View file

@ -102,6 +102,7 @@ class DivPlatformSNES: public DivDispatch {
DivMacroInt* getChanMacroInt(int ch);
unsigned short getPan(int chan);
DivChannelPair getPaired(int chan);
DivChannelModeHints getModeHints(int chan);
DivSamplePos getSamplePos(int ch);
DivDispatchOscBuffer* getOscBuffer(int chan);
unsigned char* getRegisterPool();

View file

@ -134,6 +134,79 @@ void DivPlatformSoundUnit::tick(bool sysTick) {
}
writeControlUpper(i);
}
// run hardware sequence
if (chan[i].active) {
if (--chan[i].hwSeqDelay<=0) {
chan[i].hwSeqDelay=0;
DivInstrument* ins=parent->getIns(chan[i].ins,DIV_INS_SU);
int hwSeqCount=0;
while (chan[i].hwSeqPos<ins->su.hwSeqLen && hwSeqCount<8) {
bool leave=false;
unsigned char bound=ins->su.hwSeq[chan[i].hwSeqPos].bound;
unsigned char val=ins->su.hwSeq[chan[i].hwSeqPos].val;
unsigned short speed=ins->su.hwSeq[chan[i].hwSeqPos].speed;
switch (ins->su.hwSeq[chan[i].hwSeqPos].cmd) {
case DivInstrumentSoundUnit::DIV_SU_HWCMD_VOL:
chan[i].volSweepP=speed;
chan[i].volSweepV=val;
chan[i].volSweepB=bound;
chan[i].volSweep=(val>0);
chWrite(i,0x14,chan[i].volSweepP&0xff);
chWrite(i,0x15,chan[i].volSweepP>>8);
chWrite(i,0x16,chan[i].volSweepV);
chWrite(i,0x17,chan[i].volSweepB);
writeControlUpper(i);
break;
case DivInstrumentSoundUnit::DIV_SU_HWCMD_PITCH:
chan[i].freqSweepP=speed;
chan[i].freqSweepV=val;
chan[i].freqSweepB=bound;
chan[i].freqSweep=(val>0);
chWrite(i,0x10,chan[i].freqSweepP&0xff);
chWrite(i,0x11,chan[i].freqSweepP>>8);
chWrite(i,0x12,chan[i].freqSweepV);
chWrite(i,0x13,chan[i].freqSweepB);
writeControlUpper(i);
break;
case DivInstrumentSoundUnit::DIV_SU_HWCMD_CUT:
chan[i].cutSweepP=speed;
chan[i].cutSweepV=val;
chan[i].cutSweepB=bound;
chan[i].cutSweep=(val>0);
chWrite(i,0x18,chan[i].cutSweepP&0xff);
chWrite(i,0x19,chan[i].cutSweepP>>8);
chWrite(i,0x1a,chan[i].cutSweepV);
chWrite(i,0x1b,chan[i].cutSweepB);
writeControlUpper(i);
break;
case DivInstrumentSoundUnit::DIV_SU_HWCMD_WAIT:
chan[i].hwSeqDelay=(val+1)*parent->tickMult;
leave=true;
break;
case DivInstrumentSoundUnit::DIV_SU_HWCMD_WAIT_REL:
if (!chan[i].released) {
chan[i].hwSeqPos--;
leave=true;
}
break;
case DivInstrumentSoundUnit::DIV_SU_HWCMD_LOOP:
chan[i].hwSeqPos=val-1;
break;
case DivInstrumentSoundUnit::DIV_SU_HWCMD_LOOP_REL:
if (!chan[i].released) {
chan[i].hwSeqPos=val-1;
}
break;
}
chan[i].hwSeqPos++;
if (leave) break;
hwSeqCount++;
}
}
}
if (chan[i].freqChanged || chan[i].keyOn || chan[i].keyOff) {
//DivInstrument* ins=parent->getIns(chan[i].ins,DIV_INS_SU);
chan[i].freq=parent->calcFreq(chan[i].baseFreq,chan[i].pitch,chan[i].fixedArp?chan[i].baseNoteOverride:chan[i].arpOff,chan[i].fixedArp,chan[i].switchRoles,2,chan[i].pitch2,chipClock,chan[i].switchRoles?CHIP_DIVIDER:CHIP_FREQBASE);
@ -160,8 +233,7 @@ void DivPlatformSoundUnit::tick(bool sysTick) {
}
if (chan[i].keyOn) {
if (chan[i].pcm) {
DivInstrument* ins=parent->getIns(chan[i].ins,DIV_INS_SU);
int sNum=ins->amiga.getSample(chan[i].note);
int sNum=chan[i].sample;
DivSample* sample=parent->getSample(sNum);
if (sample!=NULL && sNum>=0 && sNum<parent->song.sampleLen) {
unsigned int sampleEnd=sampleOffSU[sNum]+(sample->getLoopEndPosition());
@ -220,6 +292,9 @@ int DivPlatformSoundUnit::dispatch(DivCommand c) {
}
chan[c.chan].active=true;
chan[c.chan].keyOn=true;
chan[c.chan].released=false;
chan[c.chan].hwSeqPos=0;
chan[c.chan].hwSeqDelay=0;
chWrite(c.chan,0x02,chan[c.chan].vol);
chan[c.chan].macroInit(ins);
if (!parent->song.brokenOutVol && !chan[c.chan].std.vol.will) {
@ -231,11 +306,14 @@ int DivPlatformSoundUnit::dispatch(DivCommand c) {
case DIV_CMD_NOTE_OFF:
chan[c.chan].active=false;
chan[c.chan].keyOff=true;
chan[c.chan].hwSeqPos=0;
chan[c.chan].hwSeqDelay=0;
chan[c.chan].macroInit(NULL);
break;
case DIV_CMD_NOTE_OFF_ENV:
case DIV_CMD_ENV_RELEASE:
chan[c.chan].std.release();
chan[c.chan].released=true;
break;
case DIV_CMD_INSTRUMENT:
if (chan[c.chan].ins!=c.value || c.value2==1) {

View file

@ -30,12 +30,14 @@ class DivPlatformSoundUnit: public DivDispatch {
signed char pan;
unsigned char duty;
bool noise, pcm, phaseReset, filterPhaseReset, switchRoles;
bool pcmLoop, timerSync, freqSweep, volSweep, cutSweep;
bool pcmLoop, timerSync, freqSweep, volSweep, cutSweep, released;
unsigned short freqSweepP, volSweepP, cutSweepP;
unsigned char freqSweepB, volSweepB, cutSweepB;
unsigned char freqSweepV, volSweepV, cutSweepV;
unsigned short syncTimer;
signed short wave;
unsigned short hwSeqPos;
short hwSeqDelay;
Channel():
SharedChannel<signed char>(127),
cutoff(16383),
@ -56,6 +58,7 @@ class DivPlatformSoundUnit: public DivDispatch {
freqSweep(false),
volSweep(false),
cutSweep(false),
released(false),
freqSweepP(0),
volSweepP(0),
cutSweepP(0),
@ -66,7 +69,9 @@ class DivPlatformSoundUnit: public DivDispatch {
volSweepV(0),
cutSweepV(0),
syncTimer(0),
wave(0) {}
wave(0),
hwSeqPos(0),
hwSeqDelay(0) {}
};
Channel chan[8];
DivDispatchOscBuffer* oscBuf[8];

View file

@ -19,6 +19,8 @@
#include "swan.h"
#include "../engine.h"
#include "furIcons.h"
#include "IconsFontAwesome4.h"
#include <math.h>
#define rWrite(a,v) if (!skipRegisterWrites) {writes.push(QueuedWrite(a,v)); if (dumpWrites) {addWrite(a,v);}}
@ -480,6 +482,30 @@ unsigned short DivPlatformSwan::getPan(int ch) {
return ((chan[ch].pan&0xf0)<<4)|(chan[ch].pan&15);
}
DivChannelModeHints DivPlatformSwan::getModeHints(int ch) {
DivChannelModeHints ret;
switch (ch) {
case 1: // PCM
ret.count=1;
ret.hint[0]=ICON_FA_VOLUME_UP;
ret.type[0]=pcm?4:0;
break;
case 2: // sweep
ret.count=1;
ret.hint[0]=ICON_FUR_SAW;
ret.type[0]=sweep?2:0;
break;
case 3: // noise
ret.count=1;
ret.hint[0]=ICON_FUR_NOISE;
ret.type[0]=noise?4:0;
break;
}
return ret;
}
DivDispatchOscBuffer* DivPlatformSwan::getOscBuffer(int ch) {
return oscBuf[ch];
}

View file

@ -63,6 +63,7 @@ class DivPlatformSwan: public DivDispatch {
void* getChanState(int chan);
DivMacroInt* getChanMacroInt(int ch);
unsigned short getPan(int chan);
DivChannelModeHints getModeHints(int chan);
DivDispatchOscBuffer* getOscBuffer(int chan);
unsigned char* getRegisterPool();
int getRegisterPoolSize();

View file

@ -239,6 +239,9 @@ const char* cmdName[]={
"EXTERNAL",
"C64_AD",
"C64_SR",
"ALWAYS_SET_VOLUME"
};
@ -1263,11 +1266,11 @@ void DivEngine::nextRow() {
for (int j=0; j<curPat[i].effectCols; j++) {
if (!song.preNoteNoEffect) {
if (pat->data[curRow][4+(j<<1)]==0x03) {
if (pat->data[curRow][4+(j<<1)]==0x03 && pat->data[curRow][5+(j<<1)]!=0 && pat->data[curRow][5+(j<<1)]!=-1) {
doPreparePreNote=false;
break;
}
if (pat->data[curRow][4+(j<<1)]==0x06) {
if (pat->data[curRow][4+(j<<1)]==0x06 && pat->data[curRow][5+(j<<1)]!=0 && pat->data[curRow][5+(j<<1)]!=-1) {
doPreparePreNote=false;
break;
}
@ -1294,11 +1297,11 @@ void DivEngine::nextRow() {
int addition=0;
for (int j=0; j<curPat[i].effectCols; j++) {
if (pat->data[curRow][4+(j<<1)]==0x03) {
if (pat->data[curRow][4+(j<<1)]==0x03 && pat->data[curRow][5+(j<<1)]!=0 && pat->data[curRow][5+(j<<1)]!=-1) {
doPrepareCut=false;
break;
}
if (pat->data[curRow][4+(j<<1)]==0x06) {
if (pat->data[curRow][4+(j<<1)]==0x06 && pat->data[curRow][5+(j<<1)]!=0 && pat->data[curRow][5+(j<<1)]!=-1) {
doPrepareCut=false;
break;
}

View file

@ -597,7 +597,9 @@ void DivEngine::registerSystems() {
{0x1a, {DIV_CMD_C64_RESET_MASK, "1Axx: Disable envelope reset for this channel (1 disables; 0 enables)"}},
{0x1b, {DIV_CMD_C64_FILTER_RESET, "1Bxy: Reset cutoff (x: on new note; y: now)"}},
{0x1c, {DIV_CMD_C64_DUTY_RESET, "1Cxy: Reset pulse width (x: on new note; y: now)"}},
{0x1e, {DIV_CMD_C64_EXTENDED, "1Exy: Change additional parameters"}},
{0x1e, {DIV_CMD_C64_EXTENDED, "1Exy: Change other parameters (LEGACY)"}},
{0x20, {DIV_CMD_C64_AD, "20xy: Set attack/decay (x: attack; y: decay)"}},
{0x21, {DIV_CMD_C64_SR, "21xy: Set sustain/release (x: sustain; y: release)"}},
};
const EffectHandler c64FineDutyHandler(DIV_CMD_C64_FINE_DUTY, "3xxx: Set pulse width (0 to FFF)", effectValLong<12>);
const EffectHandler c64FineCutoffHandler(DIV_CMD_C64_FINE_CUTOFF, "4xxx: Set cutoff (0 to 7FF)", effectValLong<11>);

View file

@ -111,7 +111,7 @@ void DivEngine::runExportThread() {
if (initAudioBackend()) {
for (int i=0; i<song.systemLen; i++) {
disCont[i].setRates(got.rate);
disCont[i].setQuality(lowQuality);
disCont[i].setQuality(lowQuality,dcHiPass);
}
if (!output->setRun(true)) {
logE("error while activating audio!");
@ -223,7 +223,7 @@ void DivEngine::runExportThread() {
if (initAudioBackend()) {
for (int i=0; i<song.systemLen; i++) {
disCont[i].setRates(got.rate);
disCont[i].setQuality(lowQuality);
disCont[i].setQuality(lowQuality,dcHiPass);
}
if (!output->setRun(true)) {
logE("error while activating audio!");
@ -349,7 +349,7 @@ void DivEngine::runExportThread() {
if (initAudioBackend()) {
for (int i=0; i<song.systemLen; i++) {
disCont[i].setRates(got.rate);
disCont[i].setQuality(lowQuality);
disCont[i].setQuality(lowQuality,dcHiPass);
}
if (!output->setRun(true)) {
logE("error while activating audio!");

View file

@ -40,6 +40,7 @@ const char* aboutLine[]={
"djtuBIG-MaliceX",
"Eknous",
"laoo",
"LTVA1",
"MooingLemur",
"OPNA2608",
"superctr",
@ -105,6 +106,7 @@ const char* aboutLine[]={
"jaezu",
"Laggy",
"LovelyA72",
"LTVA1",
"LunaMoth",
"Lunathir",
"LVintageNerd",

View file

@ -202,6 +202,8 @@ void FurnaceGUI::waveListItem(int i, float* wavePreview, int dir, int asset) {
void FurnaceGUI::sampleListItem(int i, int dir, int asset) {
bool memWarning=false;
ImGui::PushID(i);
DivSample* sample=e->song.sample[i];
for (int j=0; j<e->song.systemLen; j++) {
DivDispatch* dispatch=e->getDispatch(j);
@ -243,7 +245,32 @@ void FurnaceGUI::sampleListItem(int i, int dir, int asset) {
}
ImGui::PopStyleColor();
}
if (ImGui::BeginPopupContextItem("SampleRightMenu")) {
curSample=i;
samplePos=0;
updateSampleTex=true;
lastAssetType=2;
ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_TEXT]);
if (ImGui::MenuItem("make instrument")) {
doAction(GUI_ACTION_SAMPLE_MAKE_INS);
}
if (ImGui::MenuItem("duplicate")) {
doAction(GUI_ACTION_SAMPLE_LIST_DUPLICATE);
}
if (ImGui::MenuItem("replace...")) {
doAction((curSample>=0 && curSample<(int)e->song.sample.size())?GUI_ACTION_SAMPLE_LIST_OPEN_REPLACE:GUI_ACTION_SAMPLE_LIST_OPEN);
}
if (ImGui::MenuItem("save")) {
doAction(GUI_ACTION_SAMPLE_LIST_SAVE);
}
if (ImGui::MenuItem("delete")) {
doAction(GUI_ACTION_SAMPLE_LIST_DELETE);
}
ImGui::PopStyleColor();
ImGui::EndPopup();
}
if (wantScrollList && curSample==i) ImGui::SetScrollHereY();
ImGui::PopID();
}
void FurnaceGUI::drawInsList(bool asChild) {

View file

@ -238,6 +238,7 @@
ImGui::TextColored(ch->mask?colorOn:colorOff,">> Mask");
void putDispatchChip(void* data, int type) {
<<<<<<< HEAD
ImVec4 colorOn=ImVec4(1.0f,1.0f,0.0f,1.0f);
ImVec4 colorOff=ImVec4(0.3f,0.3f,0.3f,1.0f);
switch (type) {
@ -1118,4 +1119,10 @@ void putDispatchChan(void* data, int chanNum, int type) {
ImGui::Text("Unimplemented chip! Help!");
break;
}
=======
ImGui::Text("I will finish later...");
}
void putDispatchChan(void* data, int chanNum, int type) {
ImGui::Text("I will finish later...");
>>>>>>> 89f8970e74cece7142e27a60f50d30b8d46b02cd
}

View file

@ -97,6 +97,7 @@ void FurnaceGUI::doAction(int what) {
if (!e->isPlaying()) {
play();
}
e->setRepeatPattern(false);
break;
case GUI_ACTION_PLAY_REPEAT:
play();
@ -671,12 +672,14 @@ void FurnaceGUI::doAction(int what) {
if (e->moveInsUp(curIns)) {
curIns--;
wantScrollList=true;
MARK_MODIFIED;
}
break;
case GUI_ACTION_INS_LIST_MOVE_DOWN:
if (e->moveInsDown(curIns)) {
curIns++;
wantScrollList=true;
MARK_MODIFIED;
}
break;
case GUI_ACTION_INS_LIST_DELETE:
@ -751,12 +754,14 @@ void FurnaceGUI::doAction(int what) {
if (e->moveWaveUp(curWave)) {
curWave--;
wantScrollList=true;
MARK_MODIFIED;
}
break;
case GUI_ACTION_WAVE_LIST_MOVE_DOWN:
if (e->moveWaveDown(curWave)) {
curWave++;
wantScrollList=true;
MARK_MODIFIED;
}
break;
case GUI_ACTION_WAVE_LIST_DELETE:
@ -851,6 +856,7 @@ void FurnaceGUI::doAction(int what) {
curSample--;
wantScrollList=true;
updateSampleTex=true;
MARK_MODIFIED;
}
break;
case GUI_ACTION_SAMPLE_LIST_MOVE_DOWN:
@ -858,6 +864,7 @@ void FurnaceGUI::doAction(int what) {
curSample++;
wantScrollList=true;
updateSampleTex=true;
MARK_MODIFIED;
}
break;
case GUI_ACTION_SAMPLE_LIST_DELETE:

View file

@ -83,6 +83,8 @@ void FurnaceGUI::makeUndo(ActionType action) {
s.selStart=selStart;
s.selEnd=selEnd;
s.order=curOrder;
s.oldOrdersLen=oldOrdersLen;
s.newOrdersLen=e->curSubSong->ordersLen;
s.nibble=curNibble;
size_t subSong=e->getCurrentSubSong();
switch (action) {
@ -94,8 +96,6 @@ void FurnaceGUI::makeUndo(ActionType action) {
}
}
}
s.oldOrdersLen=oldOrdersLen;
s.newOrdersLen=e->curSubSong->ordersLen;
if (oldOrdersLen!=e->curSubSong->ordersLen) {
doPush=true;
}

View file

@ -1,328 +1,366 @@
#include "fonts.h"
// File: 'icons.ttf' (29112 bytes)
// File: 'icons.ttf' (31848 bytes)
// Exported using binary_to_compressed_c.cpp
const unsigned int furIcons_compressed_size = 15318;
const unsigned int furIcons_compressed_data[15320/4] =
const unsigned int furIcons_compressed_size = 17176;
const unsigned int furIcons_compressed_data[17176/4] =
{
0x0000bc57, 0x00000000, 0xb8710000, 0x00000400, 0x00010037, 0x000e0000, 0x00030080, 0x54464660, 0xa9a8a24d, 0x7100006a, 0x2815829c, 0x4544471c,
0x00150046, 0x200f8214, 0x2b0f8380, 0x322f534f, 0x7852fa8c, 0x68010000, 0x562c0f82, 0x70616d63, 0x3fd0dec7, 0x64020000, 0xe62c1382, 0x20747663,
0x6f043b00, 0x4c040000, 0x04261f82, 0x70736167, 0x5982ffff, 0x82710021, 0x08002933, 0x66796c67, 0x82a68389, 0xf02c1f82, 0x8c670000, 0x64616568,
0x8e89f224, 0xec202b82, 0x36210382, 0x23108268, 0x05068209, 0x24204b82, 0x24280f82, 0x78746d68, 0xdd13df29, 0xc0200f82, 0xa4280f82, 0x61636f6c,
0xb4e91903, 0x50203f82, 0x9e270f82, 0x7078616d, 0x82039800, 0x4801213b, 0x202c0f82, 0x656d616e, 0xccc485ad, 0x7c6c0000, 0xe9263382, 0x74736f70,
0xaf83e3e7, 0xaf826e20, 0x840e0321, 0x820120eb, 0x36a92979, 0x3c0f5f27, 0x070b00f5, 0x00253682, 0xfffde000, 0x2b08839f, 0xaa4155e1, 0x68fe80fc,
0xe0050007, 0x08220f82, 0x05820200, 0x33820283, 0xff000622, 0x07290982, 0x0080fc00, 0x00000700, 0x8b0c8201, 0x84042002, 0x034e2511, 0x000800bb,
0x0000bc57, 0x00000000, 0x687c0000, 0x00000400, 0x00010037, 0x000e0000, 0x00030080, 0x54464660, 0x81b6a24d, 0x7c00002e, 0x2815824c, 0x4544471c,
0x00150046, 0x200f8214, 0x2b0f8330, 0x322f534f, 0x8c52fa8c, 0x68010000, 0x562b0f82, 0x70616d63, 0x13d444cb, 0x82020000, 0x0e022d13, 0x20747663,
0x6f043b00, 0x9c040000, 0x04261f82, 0x70736167, 0x5982ffff, 0x287c0022, 0x082b0f82, 0x66796c67, 0x8d352477, 0x82050000, 0xfc70293f, 0x64616568,
0x52610025, 0xec201b82, 0x36210382, 0x23108268, 0x05068209, 0x24205f82, 0x24270f82, 0x78746d68, 0x8218da2d, 0xc001212f, 0xcc280f82, 0x61636f6c,
0xa00d4029, 0x03825f82, 0x6dc60028, 0x00707861, 0x3b8203ac, 0x82480121, 0x6e202c1f, 0xae656d61, 0x00ccc486, 0x82647600, 0x70e93043, 0xb374736f,
0x00c25c09, 0x00507800, 0x84d60300, 0x00012deb, 0x0bac9800, 0x3c0f5f95, 0x070b00f5, 0x00253682, 0xfffde000, 0x2b08839f, 0x6e1963e1, 0x68fe80fc,
0xe0050007, 0x08220f82, 0x05820200, 0x33820283, 0xff000622, 0x07290982, 0x0080fc00, 0x00000700, 0x8b0c8201, 0x84042002, 0x03622511, 0x000800bb,
0x02210083, 0x83238300, 0x00402225, 0x820b822e, 0x00072b0d, 0x05009001, 0x8c040000, 0x1182e604, 0x0785fa20, 0x005c032b, 0x00cf0159, 0x05000200,
0x85158209, 0x10012102, 0x05840785, 0x72754629, 0x00400054, 0x8544e120, 0x84062083, 0x8404856a, 0x833b208b, 0x82072026, 0x25038304, 0x090280fc,
0x85158209, 0x10012102, 0x05840785, 0x72754629, 0x00400054, 0x8558e120, 0x84062083, 0x8404856a, 0x833b208b, 0x82072026, 0x25038304, 0x090280fc,
0x0c829100, 0x20005222, 0xa52c7982, 0x4b003500, 0x91002900, 0x78006d01, 0x60349b82, 0x52004700, 0x0a001701, 0x8f004a00, 0x1b003201, 0x2e004f00,
0xca263182, 0x36011801, 0x1b82a900, 0x33002825, 0x82004d01, 0x38238291, 0x01220003, 0x007a017c, 0x01390039, 0x00ce0127, 0x014c0013, 0x00220073,
0x240d8247, 0x0085000b, 0x260f82b5, 0x012e005b, 0x845c004b, 0x822a2001, 0x82532005, 0x004b2e03, 0x0053005e, 0x015c00c8, 0x002e0156, 0x208d826b,
0x20038603, 0x22b7861c, 0x840300e0, 0x001c2409, 0x82c40004, 0x00082e1b, 0x00020008, 0xe0200000, 0xff44e1f4, 0x260984ff, 0xff00e1f0, 0x82e3ffff,
0x8400200b, 0x0006222b, 0x260b820e, 0x00050004, 0x82070006, 0x8209202f, 0x000b24a1, 0x820d000c, 0x000f2617, 0x00110010, 0x2ca18212, 0x00150014,
0x00170016, 0x00190018, 0x08df821a, 0x1d001c38, 0x1f001e00, 0x21002000, 0x23002200, 0x25002400, 0x27002600, 0x29002800, 0x2b002a00, 0x2d002c00,
0x2f002e00, 0x31003000, 0x33003200, 0x35003400, 0x37003600, 0xf5823800, 0x003a2608, 0x003c003b, 0x003e003d, 0x0040003f, 0x00420041, 0x00440043,
0x00460045, 0x00480047, 0x004a0049, 0x004c004b, 0x209e824d, 0x82a28506, 0x0100229f, 0x21058202, 0x008d0002, 0x82000121, 0x40128df0, 0x3b22d20d,
0xd5826f04, 0x85002c21, 0x3c920801, 0xc6008400, 0x24056404, 0xd406c405, 0xea075807, 0x3409ce08, 0xb00a7609, 0x880bfe0a, 0x2e0cee0b, 0x6a0de60c,
0x640ed80d, 0xa40fca0e, 0xbc105a10, 0xc6117e11, 0x0c139212, 0xd8138c13, 0x48159814, 0x12173816, 0x1e1b8017, 0x341cae1b, 0xea1dc01c, 0xbc1f081f,
0x34218020, 0xfc218a21, 0xc8238622, 0xca272a27, 0x5229b028, 0x0a2ac629, 0xa42bbe2a, 0x162ef42b, 0x682e442e, 0xf02f8e2e, 0x6a300c30, 0x1e31d230,
0xac315631, 0xec31de31, 0x6433ba32, 0x9d82c633, 0x00022108, 0x0200003b, 0x00aa0415, 0x00070003, 0x0001b12e, 0x07b23c2f, 0x32ed0004, 0xdc0506b1,
0x0203b23c, 0x00220a82, 0x168303b1, 0x16830520, 0x0607b227, 0xb23cfc01, 0x37178301, 0x11211133, 0x21112125, 0xfeda013b, 0xfe640161, 0xfbaa049c,
0x34043b56, 0xfc255783, 0x03f5ff80, 0x20098280, 0x2e598201, 0x25210500, 0x0533fd21, 0x07b3f99a, 0x820b0b00, 0x03250815, 0x0f000902, 0xfd03f704,
0x25001b00, 0x00002f00, 0x32213001, 0x0e141516, 0x07060701, 0x16171615, 0x15011e17, 0x2f0b8214, 0x2123010e, 0x36322137, 0x2634013d, 0x33352123,
0x4d080985, 0x0a02012b, 0x8e7dbd01, 0x2020311f, 0x25251e1e, 0x132b1f20, 0x5f232214, 0xa217fe38, 0x483f1801, 0xe8fe3f48, 0x42423dfc, 0xfd03fc3d,
0x4f38778d, 0x030c0d32, 0x0d0d0208, 0x3f581c1c, 0x2735363c, 0x428b2c27, 0x423e313e, 0x2e393e88, 0x8f833e3a, 0x91003008, 0x6f066300, 0x0f00a903,
0x2b001700, 0x30250000, 0x30213027, 0x36233007, 0x16333712, 0x30011712, 0x30070623, 0x30012633, 0x30270011, 0x85133033, 0x02062f03, 0x02301107,
0xc7fe4cea, 0xbf2f8a49, 0x0382ab2f, 0x8dfe3408, 0xf73d3c06, 0xfe84023c, 0xcc9b17f7, 0x3794cb04, 0xe3631dce, 0x2e028ce3, 0xd2fd8c8c, 0xb9c9028c,
0xf0fdb9b9, 0xd4014a01, 0x018bfe28, 0x9afe6175, 0x82b3fe32, 0x03002182, 0xab3a0482, 0x61030007, 0x8c035803, 0x0000ba03, 0x27022637, 0x021d3033,
0x17041d17, 0x0290031d, 0x11a31491, 0x26f14782, 0x86957191, 0x17011e26, 0x37013e33, 0x86067341, 0x033d220d, 0x20028937, 0x850b8a04, 0x8211a317,
0x9126f129, 0x2e86a171, 0x07020633, 0x27022623, 0x2327012e, 0x8207010e, 0x22052d0d, 0x013e2726, 0x33011e37, 0x26343532, 0x26291883, 0x34352627,
0x16323336, 0x2b218217, 0x2223012e, 0x17141506, 0x011e1716, 0x15230285, 0x82250614, 0x2223223b, 0x26288227, 0x37342627, 0x823e3736, 0x2021823c,
0x352c8407, 0x1614011d, 0x3e373233, 0x23013d02, 0x23113335, 0x185e188e, 0x00cc0168, 0x040e0434, 0x030e040c, 0x7b0e390e, 0x030e390f, 0x030d030f,
0x61cc040e, 0x18640127, 0x0e7a1962, 0x205c833a, 0x3b5c820c, 0x020f3c0f, 0x276e4bf0, 0x1d0c2f0b, 0x2a77314d, 0x0a240934, 0x702a2b5a, 0x24634865,
0x3c081382, 0x3731401a, 0x31161637, 0x30092409, 0x13161544, 0x0c430274, 0x34484f09, 0x20212b2c, 0x12121213, 0x3d5f2222, 0x1e38375a, 0x3c461153,
0x48505048, 0x271a1a1e, 0x5adf7c16, 0xbe0170b7, 0x10b8cd70, 0x47014d00, 0x19681a2d, 0x44196719, 0x44441001, 0x8244f0fe, 0x6819220a, 0x5b01101a,
0x47414701, 0x70af084d, 0x457042fe, 0x1a451301, 0x67191967, 0xedfe451a, 0x36380b45, 0x290b2a0b, 0x2f2c6d2c, 0x0207020d, 0x512d2c15, 0x3431615c,
0x250b290a, 0x2a342d24, 0x020c1516, 0x1f0b0208, 0x293f1717, 0x306e6865, 0x2a13133e, 0xb8424229, 0x2a2a4242, 0x47262728, 0x5c393131, 0x5c52a452,
0x31210908, 0xfe573b1e, 0x0700009e, 0x02ff5200, 0x1a05ae06, 0x24001a00, 0x49003800, 0x78005300, 0x00008000, 0x35262205, 0x023e3734, 0x07063337,
0x010e0706, 0x013e3307, 0x15163233, 0x32270614, 0x2334013d, 0x14011d22, 0x27022603, 0x17121633, 0x36331716, 0x82123637, 0x0702272a, 0x21112321,
0x27831732, 0x23130727, 0x2327012e, 0x07794837, 0x22011527, 0x012e2726, 0x222a8234, 0x82333637, 0x06172123, 0x080b5845, 0x1e373698, 0x010e1701,
0x15011105, 0x35011101, 0x6d6ba201, 0x4f3a0f10, 0x2a3b8a31, 0x251d1e2a, 0x47110c09, 0x6e5f5131, 0x6c6d6d6a, 0x2183211f, 0x1450136b, 0x0e0c0e0e,
0x144e140e, 0x20832169, 0x01658f01, 0x2b2c5609, 0x71803a39, 0x78175608, 0x2626249b, 0xad029b24, 0x21225d3a, 0x22212323, 0x563b2e2e, 0x0d1f3333,
0x353e1249, 0x444c4c44, 0x0f124236, 0x69200e38, 0x2801e4fe, 0xd8fe72fe, 0x3c7f84fd, 0x606f3c3d, 0x28292d22, 0x32562829, 0x676a312f, 0x7755776a,
0x02827719, 0x18035608, 0x6fbf0170, 0x46e7fe46, 0x4e4f4f4e, 0x46190146, 0x7041fe6f, 0x34339e02, 0x11604d60, 0xc913e7fe, 0x2a265536, 0xde262a3e,
0x2a278efe, 0x84b6842a, 0x14142a2a, 0x074a2525, 0x5f323929, 0x5e53a152, 0x21083b36, 0xb24e4a09, 0x100134fe, 0x0192fe82, 0x82effecd, 0x3f008200,
0x00200004, 0x03e006ab, 0x000b0061, 0x004a0015, 0x37000074, 0x21301130, 0x06141632, 0x0119012b, 0x2008b749, 0x05ce4601, 0x16171622, 0xd0461282,
0x012e2806, 0x023e3435, 0x46173233, 0x072c08d1, 0x16141506, 0x011e011f, 0x020e1415, 0x2105cd46, 0x2485022e, 0x46171621, 0x36230cc6, 0x46013e37,
0xd10806c8, 0x5d200121, 0xb45d6666, 0x2f2e2aad, 0xdd02ad29, 0x0c2a7655, 0x2b230d32, 0x4141362b, 0x270a3b2e, 0x2162620a, 0x4c36563d, 0x0d283738,
0x4b1a0d32, 0x20203938, 0x643c3734, 0x5a3f205d, 0x0a04dd02, 0x663c4c5e, 0x4d2a294a, 0x7d5a426c, 0x51135923, 0x6161503d, 0x1d1c2050, 0x8a191616,
0x02b75ff3, 0x6db96d9e, 0x6a01f5fe, 0x292e282b, 0x3db6fd2b, 0x0c2f0b34, 0x3a17162b, 0x0c2e2731, 0x12020702, 0x482c515c, 0x1a1b1b31, 0x0b2d0b32,
0x18172921, 0x0b292a2c, 0x505d130c, 0x1d374d2f, 0x2d403171, 0x54548257, 0x502e5881, 0x3b2f3447, 0x5d6e5d66, 0x10080966, 0x34202f0f, 0x009bfe5d,
0x002e0005, 0x03d206ab, 0x00120061, 0x002a001f, 0x00460134, 0x68422500, 0x013e2807, 0x14021e32, 0x4227020e, 0x222a0583, 0x14011d06, 0x21110516,
0x5e411732, 0x2e052c0f, 0x1d232701, 0x0f1d1707, 0x870e1d17, 0x820b8502, 0x11013305, 0x16331123, 0x011e1712, 0x053d3317, 0x270f3d27, 0x02870e3d,
0x042d0b88, 0x23113311, 0x33010226, 0x2223603c, 0x3a028223, 0x44607a5f, 0x61442323, 0x4f4f483c, 0x014f4f90, 0x560901df, 0x56572b2c, 0x82259aa3,
0x029a2600, 0x09220863, 0x0732440c, 0x21756228, 0x23082285, 0x10880d08, 0x85217623, 0x074c42ac, 0x5428282d, 0x5484b684, 0x525d5a27, 0x845d52a2,
0x024f3304, 0xc134339e, 0x01f1fe67, 0x3d2a2569, 0x15b22629, 0x7f441553, 0x284dae4d, 0x0270fe02, 0xf4fe439e, 0x80884043, 0xfd900126, 0x0c014362,
0x3a055f43, 0x065400a5, 0x00b8035b, 0x0048002f, 0x005e0054, 0x23302500, 0x2223010e, 0x4435022e, 0x3e43078a, 0x49062008, 0x362106e3, 0x35018237,
0x3523013d, 0x01231121, 0x15163221, 0x0e070614, 0x1e150701, 0x0b821702, 0x020e0730, 0x33372123, 0x3d363732, 0x26273401, 0x5d4d012b, 0xe541080a,
0x60740e04, 0x345c804a, 0x43303035, 0x9c715343, 0x124a122b, 0x634d6518, 0x28637979, 0x1b1b2424, 0x01ac1010, 0x0601772f, 0x77697201, 0x3415141b,
0x353d1a1a, 0x10111311, 0xfe2f4f39, 0x35e98768, 0x0800821e, 0xd2e9356a, 0x33373733, 0x503de2d2, 0x6aa26d38, 0x3738a268, 0x59631c1c, 0x3b0b2b0b,
0x88757f49, 0x0b0a7f75, 0x1e1d1413, 0xfe754127, 0x76460341, 0x15422f62, 0x07031415, 0x242f1601, 0x2c323525, 0x7525412d, 0x29331c1b, 0x711c1b34,
0x30273033, 0x00000033, 0x00350005, 0x03cb06ab, 0x001f0061, 0x00530046, 0x00660060, 0x26222500, 0x2c131b44, 0x011e3736, 0x06070617, 0x012e2221,
0x23218227, 0x013e3736, 0x82050646, 0x32072a14, 0x033e1716, 0x021e3233, 0x10584315, 0x2135a808, 0x37123635, 0x15331133, 0x33251523, 0x010e2311,
0x96834e01, 0x41694926, 0x5b217658, 0x4d3b4811, 0x3d4d5959, 0x3a0f124c, 0x3c3d210e, 0x5738fc01, 0x2c10113c, 0x29552323, 0x2d2d3990, 0x16172221,
0x0104020d, 0x30251c0b, 0x35482a20, 0x573e211d, 0x41413b35, 0x02424275, 0x2dc9fea1, 0x5b8e2eb5, 0xdbbefe5b, 0xac8e2307, 0x8154a9b1, 0x4b4d2e58,
0x6a393032, 0x6a5d665d, 0x2309313f, 0x29294909, 0x30304424, 0x3680493d, 0x291c5336, 0x29282627, 0x01362d2d, 0x1b231501, 0x4d371c0f, 0x3c53332f,
0x3d3e5821, 0x843e3d0d, 0x4d2f0804, 0x014a5d83, 0x3afe4a2a, 0x01d88355, 0x00ed3b63, 0xff4b0008, 0x05b50608, 0x000c0015, 0x001c0016, 0x005c0028,
0x00720068, 0x1700009b, 0x44301130, 0x01211235, 0x23ec8311, 0x15211133, 0xa6450187, 0x2d754c06, 0x2406b44c, 0x13331323, 0x2a0b8503, 0x2533010f,
0x2337013e, 0x8207010e, 0x82138202, 0x1e232702, 0x23111701, 0xaf4c3311, 0x82332005, 0x2902821e, 0xb0231133, 0x2c560901, 0x5644582c, 0xca013007,
0x0186f466, 0x01e1fe85, 0x01fdfe03, 0x4be7fa1f, 0x25210cdd, 0x07dd4b09, 0x0c2e0c22, 0x0811dd4b, 0x22093830, 0x2309e109, 0x81c96408, 0x0e04f1ca,
0x0e030d03, 0x02b03b04, 0x010402d0, 0x071f080b, 0x15165716, 0x1f081557, 0x05010b08, 0x12786201, 0x0b821248, 0x03820920, 0x47125408, 0xf8627712,
0x33349f02, 0xf1fe67c2, 0x29266901, 0xfd25293e, 0xfd9f02bc, 0x9f025abb, 0xcf58c45a, 0x3957035a, 0x0b2b0b35, 0x2c6e2c2a, 0x08020c2f, 0x2c2d1402,
0x31605d51, 0x0a290a34, 0x342d2524, 0x0b16162a, 0x0a030802, 0x3f171720, 0x0b696429, 0x821f7c1f, 0x33408202, 0x11e00161, 0x41101041, 0x1390d311,
0x4b13144c, 0x2db62d13, 0x13220282, 0x0b821349, 0x0263fe29, 0x279d279f, 0x82165816, 0x2c088202, 0x000061fd, 0x29000400, 0xd706ab00, 0x05534703,
0x46003a22, 0x471a5347, 0x1d261140, 0x16171401, 0x04433233, 0x41252007, 0x21080adc, 0x5e200129, 0xb35d6665, 0x2e2e29ad, 0x0f03ad29, 0x49269584,
0x3b574169, 0x3d0f223b, 0x3b48110f, 0x00822c4e, 0x4c3c4e35, 0x0f3a0e13, 0x013d3c22, 0xfeae012d, 0xfe2301bf, 0x474101dd, 0xb1341005, 0x598154a9,
0x4b26272d, 0x30082208, 0x5d353539, 0x35355d66, 0x2a07c642, 0x609e020b, 0x60c460ba, 0x51030000, 0x082e825f, 0x02ff6d01, 0x1a059305, 0x55004400,
0x91826d00, 0xab009e29, 0xe300d500, 0x47250000, 0x232c0558, 0x2e070622, 0x37362701, 0x3637013e, 0x22051b44, 0x52020e07, 0x0621098f, 0x2a018207,
0x022e2223, 0x17163727, 0x481e1716, 0x352109d6, 0x06644401, 0x023e3737, 0x10163233, 0x3e322706, 0x34013d02, 0x0e22022e, 0x1d060701, 0x05a14f01,
0x02252582, 0x37363435, 0x05f24835, 0x42823220, 0x2405634a, 0x15011e15, 0x476b8214, 0x13200ce1, 0x200bee47, 0x211e8325, 0x99822307, 0x22230282,
0x82062726, 0x2223232d, 0x4f822e27, 0xb0833720, 0x4c853320, 0xc9880720, 0x55087382, 0x3e4b0216, 0x30313a3c, 0x300c1743, 0x14130f0c, 0x2b202133,
0x213a502f, 0x2f240a0a, 0x1a191d1a, 0x22161313, 0x2c2d1f1f, 0x36472f36, 0x0c500f2a, 0x11120e0e, 0x413e1c2e, 0x02473f45, 0x3c5c3e98, 0x0e0f0f0e,
0x7d3e5c3c, 0x237d7676, 0x0e0e1e31, 0x3145311e, 0x0082071f, 0x100fb308, 0x3bf8fd31, 0x4a1f3d59, 0x1e3e343c, 0x29685337, 0x0f0f3829, 0x4a3d343f,
0x5a3c1010, 0x42423c3a, 0x3d424279, 0x6f3b3b37, 0x52033a3a, 0x56451616, 0x5b389029, 0x0d2d2122, 0x0a010501, 0x30260e0e, 0x24242a20, 0x11101d35,
0x36561f1f, 0x3c2c2b38, 0x3bec1011, 0x3b3a4241, 0x35994141, 0x312e0729, 0x2a0a262c, 0x1415160a, 0x17090a1d, 0x2028412d, 0x1928191a, 0x0d060406,
0x3914150d, 0x1a482c25, 0x140e0e19, 0x3e172c21, 0x0c111114, 0x343a0d0c, 0x5c363407, 0x582f6afe, 0x52534040, 0x2f594041, 0xb6b8feb7, 0x49331c5c,
0x482c752c, 0x341c1c34, 0x09822424, 0x23252e08, 0x031c1a1a, 0x47341d06, 0x1151432a, 0x3a4e1307, 0x192d4026, 0x202d0c0d, 0x4e3a2620, 0x51110713,
0x24232a43, 0x38571d34, 0x37321332, 0x27048237, 0x303a0138, 0x302e102e, 0x2a080484, 0x4041491f, 0x291b556b, 0x5a28284e, 0x14010136, 0x0f1b1212,
0x4c360f0e, 0x2b2a3230, 0x12221e1d, 0x30304413, 0x0e3c3f93, 0x823e3e3c, 0x003f2104, 0x04370082, 0xb7007800, 0x56038806, 0x27000f00, 0x40003700,
0x30010000, 0x84233011, 0x30352a03, 0x30153021, 0x30353013, 0x830f8a33, 0x8233201b, 0x30212217, 0x54278227, 0x0e3c0c81, 0x2e330701, 0x6cac0101,
0x53fc01c8, 0x24015b5b, 0x2b025c5c, 0x6f3afb3c, 0x88269926, 0x43080382, 0x1005d7fe, 0x10c61041, 0xfdf50240, 0x603e02c2, 0x58c2fd60, 0x5858ee01,
0xb55812fe, 0xbe0170b5, 0x42fe7070, 0x313a0270, 0xc53131c5, 0x00050000, 0x06ab0008, 0x006103f8, 0x003e0034, 0x00500046, 0x37000058, 0x2a329f4b,
0x23072327, 0x12163313, 0x86230117, 0x081190a1, 0x7655fd42, 0x0d310d2a, 0x372b2b23, 0x3a2e4140, 0x620a280a, 0x563c2262, 0x38384c36, 0x0d320d27,
0x3a374b1a, 0x36341f20, 0x215d653c, 0xd0025a3e, 0x6e3bfa3d, 0x982689e4, 0x04d7fe26, 0xc5104011, 0x28034010, 0xac201391, 0x242c824b, 0x02b5b50b,
0x0a00419e, 0x8ef7fd21, 0x82002010, 0x00033400, 0x06ab0060, 0x006103a0, 0x002b0015, 0x2500004b, 0x46300330, 0x06240eaa, 0x35210702, 0x2013b141,
0x1d874805, 0xdb3c012d, 0x12471270, 0x040b2b0a, 0x820b2b0b, 0x256d2509, 0x4b012595, 0x2605c741, 0x96838401, 0x48684a26, 0xb7281461, 0xdd379e02,
0x279b2737, 0x08820282, 0xd641c383, 0x480b2007, 0xcb821741, 0x4700042a, 0xb906b700, 0x0b005603, 0x2122cd82, 0x3f462900, 0x0a1b4618, 0x23110128,
0x21352311, 0x4c4d4815, 0x2e292807, 0x02ad292e, 0x46ad0114, 0x01250702, 0x01c86c7b, 0x0f0846fc, 0xea45c120, 0x3e022106, 0x82057942, 0x4f06207f,
0x1e340893, 0x3d002700, 0x58004e00, 0x00007e00, 0x26272205, 0x36373435, 0x30250184, 0x07020e33, 0x05944f06, 0x954f1720, 0x1d222408, 0x4f011401,
0x12560694, 0x4f06200a, 0x0e212d96, 0x12974f01, 0x6b7a033f, 0x0f103736, 0x28271d1d, 0x553b8a31, 0x0a12123a, 0x3147110c, 0x6e2f3051, 0xfed96d6a,
0x06924f09, 0x05130426, 0x0512050c, 0x2212944f, 0x4f144d14, 0x0e221794, 0x954f0e3a, 0x42fd350e, 0x3d3c7f42, 0x3038363d, 0x522d232f, 0x332a2b50,
0x3535312f, 0x2213904f, 0x821a691a, 0x11924f02, 0x2eb62e22, 0x2215924f, 0x4f082008, 0x003c0d93, 0xff170106, 0x05e90508, 0x000b0015, 0x002d0017,
0x0055004b, 0x0500005f, 0x33301130, 0x21220382, 0x07841530, 0xc6500b87, 0x34353305, 0x013e3736, 0x1e171632, 0x07061401, 0x3227010e, 0x01823736,
0x34013d2b, 0x2e272627, 0x06222301, 0x46018207, 0x052107bf, 0x12d14f11, 0x016ccc24, 0x03826311, 0x10fd2208, 0x26266a42, 0x26262929, 0x256b836a,
0x262a2a26, 0x26416b25, 0x0d161740, 0x160d0c0c, 0x28264017, 0x220b873f, 0x48f4013f, 0xf8250c83, 0xc1fd9f02, 0x2b048460, 0x2c2d5703, 0x5455822b,
0x2d2c2b82, 0xa9200983, 0x612d0883, 0x2519191b, 0x2e692e25, 0x19192525, 0x2f0c8c1b, 0x6e9f0256, 0xf5fe6eb8, 0x282c6a01, 0x002c282e, 0x0036f082,
0x06ab000a, 0x006103f6, 0x00300012, 0x0044003a, 0x2500004a, 0x40502e22, 0x07494f06, 0x112fe6af, 0x15211133, 0x6a422c01, 0x4c29294c, 0x8541426a,
0x21e09b07, 0x6449665d, 0x02220808, 0x10016d13, 0x82572dac, 0x58825454, 0x82582d2d, 0x2d5782a8, 0x191a1b60, 0x6a2e2425, 0x1925242e, 0x0c8c1b1a,
0x6d505520, 0x02c1280e, 0x60c2fd9e, 0x82040000, 0x06ab2ccb, 0x006103b6, 0x00220013, 0x4366002d, 0x302306d3, 0x88213015, 0x30112603, 0x32333001,
0x24e88317, 0x2b060701, 0x05ba5201, 0x2b262724, 0x4d581101, 0x077e5106, 0x27262724, 0x0282012e, 0x37343522, 0x230d8051, 0x17141506, 0x08068051,
0x07060724, 0x014a010e, 0x01cafea3, 0x01edfe13, 0x3441edc3, 0x29294a34, 0x4134344a, 0x5c4beded, 0x804b2e2e, 0xde45dc02, 0x2a242705, 0x4140372b,
0xdf451717, 0x11112405, 0x4535563d, 0x2b0807e0, 0x3f3a384a, 0x3c361a1a, 0x10115d65, 0xb759201f, 0xba609e02, 0x02dcfe60, 0x5415159e, 0x547da87d,
0x5e601515, 0x2f5b6c5b, 0x6b22fe2f, 0x210ad645, 0x5a511717, 0x24242107, 0x08095b51, 0x2a2c2f29, 0x0c0b1514, 0x2f515c13, 0x1c1b2627, 0x0400001d,
0x63008f00, 0xa9037106, 0x2f001500, 0x43003900, 0x30250000, 0x50333001, 0x535a06ec, 0x02062806, 0x32210107, 0x49141516, 0xdf840bd4, 0x37212322,
0x4f08a252, 0x012e0906, 0x8dedfea2, 0x0f165916, 0x0f050b36, 0x09820b38, 0xb92f8937, 0x01c2012f, 0x1b776873, 0x19193429, 0x1b1a1f1e, 0x1c111024,
0x06f54e1d, 0x4e3c3c21, 0x633407f3, 0xfe454603, 0xc53645ec, 0x25c83729, 0x45140145, 0x8cd2fd8c, 0x3605e44e, 0x0703142a, 0x170b0b01, 0x32354918,
0x21202d2c, 0x33377525, 0x4e373429, 0x013409e3, 0x0508ff32, 0x001405ce, 0x00330026, 0x008a0078, 0x0500009b, 0x202ec44e, 0x41d14a01, 0x27012e32,
0x11231123, 0x011e1333, 0x33113317, 0x35212311, 0x0e260482, 0x27260702, 0x10823736, 0x02153008, 0x3d573870, 0x222c1010, 0x902a5523, 0x222d2d39,
0x0c171721, 0x0a010501, 0x1f31251c, 0x1e35472b, 0x35573d22, 0x7542423a, 0x44024141, 0x4a393b3f, 0x13210888, 0x06884a34, 0x230a0b22, 0x0807884a,
0x1f1f233c, 0x2f362c2c, 0x0f293747, 0x0e0e0d4f, 0x1d2d1211, 0x4045413e, 0x08b2fd47, 0x68030e34, 0x340edb79, 0x79670308, 0x08bc4301, 0x123e3417,
0x56554002, 0x25f8a3a5, 0x3c303044, 0x284f8149, 0x1447080d, 0x1d0f1b24, 0x332f4d36, 0x59223c53, 0x3c0d3d3e, 0x0d3c3f3f, 0x3d013e3d, 0x2e072935,
0x0a262b31, 0x14160a2a, 0x09091e14, 0x28402d17, 0x271a1a20, 0x06050619, 0x15140e0c, 0x482c2538, 0x0e0e1a1a, 0x172b2115, 0x4a10153f, 0x35080659,
0x035c3633, 0x1b63104a, 0x9e0200fe, 0x631b8dfe, 0xfd010210, 0xf5015a62, 0x13433818, 0x5d5c3a02, 0x005abcfd, 0x001b0003, 0x03e506ab, 0x00390061,
0x007f005c, 0x47492500, 0x0568430d, 0x26272622, 0x54106943, 0x07260aea, 0x010e0706, 0x1d472221, 0x013e2305, 0xd0513233, 0x5636200f, 0x22a2055b,
0x54100127, 0x320d2a77, 0x0570490c, 0x2c069143, 0x11113131, 0x4c36573c, 0x0c273837, 0x0b734933, 0x10112308, 0x025a1f1f, 0x13958429, 0x68252413,
0x22765742, 0x120f3d0f, 0x584e3a48, 0x4c3c4e58, 0x0f3a0f12, 0x1e9e7922, 0x430b8b49, 0x2e2306b4, 0x432c512e, 0x17230bb5, 0x552a2d17, 0x272d0611,
0x1d1c1b26, 0x4154a9b1, 0x2e2c2c40, 0x053b4e4d, 0x200a0051, 0x281a9a52, 0x00050000, 0x06ab004f, 0x092b55b1, 0x55400021, 0x0122342b, 0x02823521,
0x15212808, 0x21070206, 0x603d5401, 0x23232222, 0x79602222, 0x24244460, 0x483c6044, 0x4f904e4e, 0x01de014f, 0x2c2b5709, 0x57a35757, 0x032e0589,
0x0141fe60, 0x01cdfe42, 0x36d636a6, 0xd9544c01, 0xfd2a082b, 0xea015bbc, 0xfe525b59, 0x070052ba, 0x08ff2e00, 0x1505d206, 0x33001c00, 0x53004700,
0x73005d00, 0x00009100, 0x30070637, 0x034c3015, 0x30113205, 0x36373633, 0x06333037, 0x17121607, 0x01012e23, 0x0ae54511, 0x230cf145, 0x33302726,
0x20062949, 0x22cf8233, 0x57013011, 0x2e21187d, 0x2df34701, 0x42f73608, 0x046d6d1a, 0x5a5a1848, 0x32ae417f, 0x278316ba, 0x01a50192, 0x01c0fead,
0x01ddfe23, 0x74220140, 0x6d1b7c73, 0x6c1b031b, 0xa418781b, 0x014afb2d, 0x65655e20, 0x075d505e, 0x14481720, 0x41230829, 0x02d01e4b, 0x5cacfe9f,
0x4d6d6d1e, 0xe8fe4bce, 0xfee13d21, 0x609f02e2, 0x60c460bb, 0xcbcc0801, 0x8232c732, 0xfe292702, 0xf6fe4ee2, 0xf8476203, 0xb5fd210d, 0x212d3748,
0x83620000, 0x0005358f, 0x0608ffca, 0x00150536, 0x0017000f, 0x00660033, 0x05000092, 0x2a11054e, 0x33300706, 0x012e0526, 0x4e302327, 0x33260549,
0x011e1330, 0xe7493317, 0x30232106, 0x21106359, 0x62592726, 0x05ad5a0a, 0x230d6159, 0x33270226, 0x16214282, 0x078e5317, 0x27069c53, 0x33373637,
0x23070206, 0x262f6c82, 0x07062327, 0x0207010e, 0x3afb3df8, 0x4e98266e, 0x30340770, 0x0230c631, 0x08340e19, 0xdb796802, 0x030e3408, 0x5bfc7967,
0x48057c44, 0x2e35050e, 0x621e1e3a, 0x563d2262, 0x38374c36, 0x1a490327, 0x1f3a384a, 0x07eb4d20, 0x90015e08, 0x6e1a6a1a, 0x18092e0d, 0x24080317,
0x0f360b0a, 0x0a360e79, 0x03092309, 0x6b232331, 0x7a1b6e1c, 0x1910390d, 0x19190219, 0xf80d3b10, 0x0170b6b6, 0xfe7070bf, 0x3b027041, 0x34949494,
0xfd0f641b, 0xfe9f02ff, 0x1b640f8d, 0x61fd0102, 0x343d5703, 0x2b0b2f0c, 0x313a1616, 0x060b2e27, 0x06945905, 0x321b1a35, 0x28224102, 0x2a2c1717,
0x130d0a2a, 0x4d2f515c, 0x830b1e36, 0xdb3b334b, 0x1e706f2d, 0xdc2b2998, 0x2bdc3c3c, 0xde259425, 0x5f83a2a1, 0x3fea3223, 0x37008266, 0x0032ea3f,
0xff180104, 0x05e8050e, 0x001b000f, 0x0043003a, 0x25000057, 0x221a7d41, 0x54233021, 0x072405fc, 0x37013e23, 0x98430a82, 0x010e2708, 0x01011e07,
0xc5433311, 0x41112007, 0x33200676, 0xb5432782, 0xcd360806, 0x030c320c, 0x0ddb7867, 0x68030c31, 0x7f3f0379, 0x021b6d1b, 0x781b6b1b, 0x23249124,
0x1980238b, 0x1a021966, 0x24781a67, 0x9325248c, 0x016cd9fb, 0x26010111, 0x8043269a, 0x77230807, 0x81279a27, 0xfd185f17, 0xfe9e02ff, 0x175f188e,
0x62fd0002, 0x2c2cb22d, 0xe5392db2, 0x36db3639, 0x8229a729, 0xda363e02, 0x03e63936, 0xfd9e0229, 0x080160c2, 0x430f0144, 0x3131c732, 0xfe4332c7,
0xf6fe43f2, 0x22008200, 0x82360106, 0x82ca20f3, 0x00142ff3, 0x002a001e, 0x00460032, 0x05000052, 0x57442330, 0x14152205, 0x20cb8206, 0x0f195d17,
0x07232722, 0x50083065, 0x0221070b, 0x0e3f4f03, 0x21030222, 0x3a0b704e, 0x21016da3, 0x4142685a, 0x79186118, 0x85165a16, 0x2f2e2aac, 0xb603ac29,
0x423bfa3d, 0x10340a66, 0x10c51040, 0x6e79fd40, 0x4811716e, 0x0a2b0b11, 0x0b2c0b04, 0x6e240982, 0x68016f70, 0x08099c4e, 0x9e02f220, 0x5f485d6c,
0x2fbc2f14, 0x5b2db52d, 0x282e292b, 0x96fed52b, 0x0170b6b6, 0xfe6f6fbf, 0xfd507041, 0x59012506, 0x4f014f01, 0x240b554f, 0xb1feb1fe, 0x07ae5402,
0x00020030, 0x066300a9, 0x00a90357, 0x0033001d, 0xd3412500, 0x51062005, 0xb641058d, 0x0516210e, 0x49050d50, 0x40080819, 0x15303330, 0xa0760330,
0x04139027, 0x18966464, 0xbc3335c2, 0x7f20a017, 0x81200220, 0xbe179620, 0x2d018a33, 0x411c0aeb, 0x5003164f, 0xccce4195, 0x20ed4163, 0x0127a7a7,
0x014f5333, 0xd0342426, 0x34028234, 0x4fdbfe24, 0x0271d7d7, 0x54461e72, 0xa1480217, 0x712bfd47, 0xe71e1000, 0x06348101, 0x02ff2801, 0x1a05d805,
0x25000f00, 0x56004300, 0x7c007400, 0x4f11d353, 0x0120335b, 0x512ba14e, 0x022807a6, 0x01c76d67, 0x417301fb, 0x2107704f, 0x824f6b82, 0x416b2205,
0x09794f27, 0x40272725, 0x820d1616, 0x16162c00, 0x41d0fd40, 0x29294c6b, 0x87416b4c, 0x41262107, 0x41341c87, 0x163f2826, 0x0d0d0c17, 0x3f16170c,
0xc86ced02, 0x4c01fc01, 0x3605cf51, 0x2b2db7fd, 0x5554822c, 0x2d2c2c81, 0x812c2c2d, 0x2b2c82a9, 0x4e1a612d, 0x252106c0, 0x05c04e24, 0x4e252421,
0x1a2406cd, 0x572d0103, 0x58232e83, 0x82582d2d, 0x8a57202c, 0x09c24f2b, 0x2205f94e, 0x52e8011a, 0x07360833, 0xfdfe3300, 0x0905c206, 0x16000c00,
0x61003c00, 0x9c008600, 0xb95aa200, 0x0f8b6119, 0x2014f451, 0x06835a01, 0x5a010b21, 0x24a51a7f, 0x1614112c, 0x11353632, 0x07141133, 0x934d020e,
0x5b112005, 0x0124063e, 0x2b2c5709, 0x2a08284a, 0x5e3aad02, 0x23232121, 0x612f2121, 0x1d5205b2, 0x390e390c, 0x0269200e, 0x010501c3, 0x081f080b,
0x1f078282, 0x04010b08, 0x13786201, 0x29058b5a, 0x12082007, 0x62771247, 0x2282c0fb, 0x1d820c20, 0x08828226, 0x020c081e, 0x12222283, 0x33821249,
0x20080825, 0x82481207, 0x64013322, 0x65388e38, 0x58350c0c, 0x0c36577f, 0x6636020c, 0xc15af8f4, 0xb120080f, 0x842a2b27, 0x2b2a83b6, 0x25251413,
0x0820084a, 0x535e3239, 0x365e53a1, 0x0821093c, 0xa8014f4a, 0x2305925a, 0x1001f0fe, 0x2117905a, 0x23a1ff04, 0x9f023208, 0x4d514efe, 0xb201514d,
0x32445efe, 0x1f1f4132, 0x44323241, 0x61fda201, 0xbbfd9f02, 0x0000005a, 0xff4d0104, 0x05b30502, 0x0017001a, 0x008b0051, 0x059f529d, 0x4a09bb50,
0xaa5009d5, 0x23414d14, 0x4d0efe48, 0x0120297a, 0x2110f14e, 0x5a468501, 0x4b013809, 0x0c2a7654, 0x2a240c32, 0x4240362c, 0x0a3b1717, 0x31610a28,
0x48111031, 0x0c2306d9, 0x621a0c33, 0x3b290653, 0x10105d65, 0xfd5a1f20, 0x2332848b, 0x2b2b230d, 0x272e3286, 0x3131620a, 0x563c1111, 0x37384c36,
0x32890d28, 0x82643c21, 0x1f1f2b32, 0x0ce2015b, 0x68020d31, 0x0682db79, 0x79670323, 0x069246f2, 0x343d0b32, 0x2b0c2e0c, 0x31391616, 0x0b171827,
0x12020702, 0x250d5e4d, 0x17172822, 0x5e4d2b2c, 0x6203210b, 0x012133b1, 0x0f3c487e, 0x0000002f, 0x00cf0002, 0x03310654, 0x003400b8, 0x10d94e4a,
0x666a2620, 0x08805c05, 0x52095e4a, 0x0e220740, 0x35430102, 0x2787080d, 0x1135022e, 0x946a0202, 0x0f3f0f34, 0x4436352d, 0x493a5250, 0x3d7b2525,
0x6b4c2a3d, 0x46465e44, 0x21045b31, 0x2847465d, 0x44202128, 0x29747e4b, 0xf901704e, 0x8551c552, 0x764b1110, 0x4b3b3bae, 0x404d5521, 0x360f3a0f,
0x3d481b1c, 0x070e3a31, 0x393a1706, 0x3e593865, 0x3e212121, 0x322a0351, 0x34381c1d, 0x100d1a1a, 0x3a657318, 0x03254461, 0x6bfcfd54, 0x026b6c6c,
0x5c11fe04, 0x2b574443, 0x86581615, 0x82ef015c, 0x732d10db, 0x0a393d07, 0xf60608ff, 0x0e001505, 0x2b001800, 0x53004900, 0x63005d00, 0x30010000,
0x09505c33, 0x7e5a2b20, 0x2b262306, 0xe24c1101, 0x146b5c2c, 0x1133113a, 0x76021521, 0x256841ed, 0x25292925, 0xed416825, 0x5c5c4bed, 0x49fe804b,
0x3c3a985b, 0x292ba701, 0x7ea77e2a, 0x602b292a, 0x5b6b5b5f, 0x0221fe5f, 0x82572df7, 0x57825455, 0x2007822d, 0x290682a9, 0x19191b61, 0x692f2425,
0xbf4c242f, 0x5c0c8807, 0xfd2e0e82, 0xfd9f02c0, 0x050061c2, 0xab000300, 0xa756fd06, 0x5659200a, 0x052034a7, 0x2024bd4c, 0x11c05608, 0x200dae6b,
0x06c056a4, 0x744c9620, 0x83072105, 0x2007744c, 0x0f006761, 0x3a2bd456, 0x134c13a7, 0xfe124b13, 0x121101ef, 0x4a13124a, 0x0263fe13, 0x279c279e,
0x82165916, 0x22088202, 0x820062fd, 0x00033100, 0x06ab0022, 0x006103de, 0x0033001b, 0x1300006c, 0x561c4153, 0x114c15e7, 0x012e2114, 0x5c105259,
0xd7200fbc, 0x28054d53, 0x0c320cdb, 0x01796803, 0x0abc5640, 0xb85c4c20, 0x2a02212f, 0x240a214b, 0xfd010218, 0x09a14b62, 0x5c080f6e, 0x250827b5,
0x01070000, 0x0502ff7c, 0x001a0584, 0x005b0037, 0x00750068, 0x00a9009c, 0x010000d5, 0x010e2130, 0x37363307, 0x8866023e, 0x07012e07, 0x27222306,
0x2627012e, 0x17163727, 0x7917821e, 0x22220515, 0x14820706, 0x37013e23, 0x3a5e6621, 0x6b07bf66, 0x1e220d24, 0x246b3301, 0x35212117, 0x29607182,
0x23262405, 0x83020e22, 0x233c8283, 0x17163202, 0xc9790182, 0x08c28206, 0x26032137, 0x0c03d7fe, 0x0d0b0602, 0x1c2b200d, 0x1f364b2b, 0x2d3d1010,
0x232d392c, 0x13143423, 0x0e0c4f10, 0x1c2b230d, 0x3b41413b, 0x0f12342b, 0x11040f3c, 0x017c0104, 0x245d6669, 0xfe3b3b37, 0x3c583717, 0x232c1110,
0x90295523, 0x212d2e38, 0x0c171622, 0x097d6b01, 0x6b221e21, 0x5908067d, 0x50034141, 0x8f2339fe, 0x1b1b3324, 0x291c323a, 0x1006141f, 0x120b103f,
0x664c3812, 0x0e1c1b50, 0x1d2d190f, 0x691a201e, 0x0152011a, 0x289e274e, 0x17101014, 0x4e361c0c, 0x2a2a3231, 0x0a10113d, 0x1516210a, 0x10143e18,
0x410d1911, 0x413a0b3a, 0x09021421, 0x3ef93e02, 0x4e6657fd, 0xd1012137, 0x2d0be66b, 0x28282726, 0x01352d2e, 0x1b231401, 0xe66b1d10, 0x683f0812,
0x2e207f20, 0x0c2e2a2a, 0x1c113831, 0x19061627, 0x1d1d2006, 0x1a1e1b2e, 0x2b25241b, 0x1c3e4528, 0x5a171c1c, 0x00000017, 0xff7a0106, 0x05860502,
0x0028001a, 0x006c0036, 0x009f0092, 0x680000ca, 0x3f680c40, 0x21252226, 0x18834206, 0x37013e24, 0x345f031e, 0x07386906, 0x25211322, 0x6d14a75e,
0x2122196b, 0x88613635, 0x1e454206, 0x45685220, 0x5a393505, 0x0d2c2222, 0x0e0a0403, 0x1f30260e, 0x3424242b, 0x1e11111e, 0x08054468, 0x10103d45,
0x41413bec, 0x42423a3b, 0xd6fe3403, 0x0b070c05, 0x2a210c0d, 0x364a2b1d, 0x3e0f101f, 0x2d392c2d, 0x13352322, 0x340e1014, 0x221b0d0d, 0x403c1c2b,
0x342b3c40, 0x0f3c0e12, 0x7c011207, 0x583810fd, 0x8211103c, 0x29552c23, 0x2e2d3890, 0x17162221, 0x6d03030c, 0xcd5e07c7, 0x41412205, 0x05494275,
0x336b6b25, 0x423b1c1b, 0x0f210548, 0x07484240, 0x0e1b1c2e, 0x1e2c190f, 0x691b201d, 0xb352011a, 0x222d3068, 0x42a449f2, 0x0a241475, 0x21140a2a,
0x230b7642, 0xb9010174, 0x212d3b42, 0x3a42605f, 0x06003824, 0x08ff3900, 0x1505c706, 0x1c000f00, 0x32002800, 0x7a005700, 0x58050000, 0x303407d1,
0x16333013, 0x26031712, 0x06233027, 0x30073007, 0x01012e33, 0x5315536e, 0x25750f99, 0x14735313, 0x1e171625, 0x44331701, 0x113c0588, 0x0a1e0423,
0x06e20624, 0xc9640a24, 0x21872182, 0x0c0b0af1, 0xb13c0a0b, 0x9bfc290b, 0x080d306e, 0x3bad0230, 0x2421215d, 0x2f212124, 0x33553b2e, 0x4a0d1f34,
0x44343f11, 0x35444c4c, 0x380e1243, 0x026a1f0e, 0x010501c4, 0x0421090c, 0x22038282, 0x0c820c09, 0x3678623e, 0x05210937, 0x05171808, 0x62771552,
0x187f23f8, 0x02237f18, 0x41fe709f, 0x31e00170, 0xd3240082, 0xa5018c24, 0x211d4e53, 0x4d532907, 0x52163f12, 0x01f0fe09, 0x16510810, 0xfe124b14,
0x769f0263, 0x0e5d1975, 0xb10b4242, 0x0061fd2f, 0x67410700, 0x00162c08, 0x002a0020, 0x003f0035, 0x7f870064, 0x06230807, 0x6c321507, 0x0e20061c,
0x2305a571, 0x34013d36, 0x200ca371, 0x13ff7301, 0x76057856, 0x75411e9b, 0x02220822, 0x4e100198, 0x1d343750, 0x0a221817, 0x39281609, 0x66d5fe22,
0x262625a7, 0x2197a725, 0x97212525, 0x7d413bfd, 0xa7013f50, 0x48415459, 0x0b0b0c05, 0x211c1c28, 0x1c33472b, 0x2c2b275a, 0x2457272c, 0x23292b28,
0x85411d01, 0x00003451, 0xff270105, 0x05d90502, 0x002a001a, 0x003c0034, 0x827d0071, 0x09597314, 0x33023e24, 0x71761632, 0x10e76a19, 0x650e7b54,
0x5d65085e, 0x0d7c5d0d, 0x210a0c5b, 0x8676f402, 0x7302261f, 0x6f3afb3c, 0x07ed6be5, 0xc6114026, 0xb6fd4010, 0x6b12ea76, 0x6426135d, 0x5a3f215e,
0xd3542e01, 0x768c2009, 0x59210796, 0x0896762d, 0x0808652e, 0x1f2f1010, 0x9bfe5d34, 0x9e02b6b6, 0x200b345b, 0x0a51544e, 0x020b2f22, 0x540ef376,
0x5c250982, 0x374d2f51, 0x09fd6f1d, 0x0200003d, 0x16ffce01, 0x0e043205, 0x3b002100, 0x30050000, 0x26272223, 0x2e353035, 0x82262701, 0x05b04208,
0x1617322f, 0x15011e17, 0x15070214, 0x3e322733, 0x05987401, 0x23022e22, 0x0808436f, 0x04021e28, 0x28558e70, 0x2f885527, 0x3e191b2f, 0x50503938,
0x395050c4, 0xa0bb3e38, 0x603af09a, 0x13131244, 0x3a604412, 0x09855f3b, 0x2cea5f31, 0x0b4c492b, 0x5b41414d, 0xc27f735c, 0x82224142, 0x42413400,
0xfee17fc2, 0xf2671cfc, 0x37374c28, 0x37459e45, 0x8a284c37, 0x0300290a, 0xb7001300, 0x5603ed06, 0x3d220782, 0x61675100, 0x61032005, 0x944b0f5f,
0x30032206, 0x07535803, 0x30233023, 0x0f2b6c11, 0x30231123, 0x22018221, 0x84013035, 0x21230805, 0x02061530, 0xe3302107, 0x5d1772cf, 0x5b170d17,
0x8a227017, 0x01090322, 0x080c0105, 0x8282081e, 0x44071f08, 0x12360597, 0x20071249, 0x1f080808, 0x12481208, 0x9a026277, 0x410141fe, 0x7662cefe,
0x01b73206, 0x329b0103, 0xc83131c8, 0xeefe4432, 0x01fdfe45, 0x21874b9d, 0x28097d62, 0x00040000, 0x06ab004c, 0x26e382b4, 0x001e0014, 0x835f0028,
0x1ddb5de5, 0x2107a642, 0x994a0111, 0x5db92032, 0x192106e4, 0x08e45d60, 0xac2a2e24, 0x56681302, 0x58032707, 0x0c03d7fe, 0x244a0703, 0x0e132123,
0x2006244a, 0x0eec5db7, 0x292e2827, 0x96fed52b, 0x065a6802, 0x9e28402a, 0x10101427, 0x351d0c17, 0x210fc549, 0xc5491011, 0x8200200e, 0x01043000,
0x0502ff73, 0x001a058d, 0x007d004c, 0x72e000b4, 0x17201717, 0x2106e24a, 0x01840607, 0x011e1522, 0x8405f24a, 0x2306220d, 0x05115722, 0x82372721,
0x0c227217, 0x210a324b, 0x596b2627, 0x06364b06, 0x36370123, 0x85558632, 0x010e2354, 0x68412107, 0x8a012033, 0x1d514964, 0x67500221, 0x62081192,
0x1d1d2828, 0x0a0a1110, 0x17181212, 0x13331d1a, 0x110b0b13, 0x2c1f2011, 0x232f362c, 0x141c1b24, 0x0d4f0f15, 0x2d12111c, 0x45423d1d, 0x80034740,
0x8f2439fe, 0x1b1c3323, 0x1b321e1d, 0x0b0f0f2a, 0x4010050a, 0x13110b0f, 0x66262637, 0x0e1c1b51, 0x1616190e, 0x1a201e1d, 0x52011b69, 0xd6fea7fd,
0x49030b03, 0x37350893, 0x3e100f1e, 0x2d392d2c, 0x14342322, 0x0d4e0f14, 0x2c220e0d, 0x0692491b, 0x4c3b0f21, 0x02240507, 0x2438fe50, 0x2107b34b,
0xb34b1e2a, 0x854b2008, 0x4b18205e, 0x357208b3, 0x0c270810, 0x2116170b, 0x1a20291f, 0x0c141419, 0x0604060d, 0x1d14151a, 0x242c251c, 0x0e191a24,
0x110a0a0e, 0x17161511, 0x7222143e, 0x7520093d, 0x2609614b, 0x0e111c1c, 0x4b13140e, 0x0d210764, 0x05654b0e, 0x1f442923, 0x05664b1f, 0x4c460521,
0x62202b22, 0x2028bb4b, 0x06274f04, 0x0f005628, 0x37002e00, 0x5b5e8f03, 0x243f6f13, 0x02260526, 0x011d3327, 0x22354618, 0x158a4518, 0x5fa638c9,
0x461826a6, 0x1520194a, 0x153d4618, 0x3d370122, 0x14774518, 0x45181494, 0x119111b3, 0x26a638a6, 0x35215fcc, 0x3f461833, 0x3a012810, 0xc901b266,
0x706b0601, 0x282105f6, 0x12f67027, 0x18eb0123, 0x0346185f, 0x03012d4f, 0x040c040e, 0x380e040e, 0x390e7c0e, 0x46180782, 0x01285204, 0x18621964,
0x0f390f7a, 0x0b3a6b82, 0x0f030e04, 0xfc020f3d, 0x4502bbfd, 0xb0fd5959, 0x3c7f4242, 0x38373c3d, 0x7a71302f, 0x34302107, 0x200a7a71, 0xda45104a,
0x002f5503, 0x00050000, 0x06ab0047, 0x006103b9, 0x822f001e, 0x0058280b, 0x01000070, 0x6c07010e, 0xc67a0ad7, 0x82332005, 0x06d96c14, 0x20243e7b,
0x3925a405, 0x3d0f1001, 0x046c6c10, 0x1e104010, 0x287e1e79, 0xad2b289f, 0x8822832b, 0xd27a6302, 0x06062718, 0x31100f07, 0x209e5202, 0xf0012208,
0xcf124612, 0xacfe9e02, 0x25145115, 0xbc2f2491, 0xfefe412f, 0xfed13441, 0x40592ef0, 0x40525340, 0x06797a41, 0x49341b35, 0x482c762b, 0x341b1b34,
0x762c2424, 0x1b23252b, 0xa35c1b1a, 0x00002224, 0x08934e06, 0x42002f3a, 0x8d006300, 0xa0009800, 0x30050000, 0x30353021, 0x36373637, 0x34353035,
0x2a0adb49, 0x013e3736, 0x17011e32, 0x4a141516, 0x07250581, 0x2107010e, 0x052a5605, 0x82343521, 0x3637211d, 0x8306937c, 0x05554d3d, 0x82272621,
0x85222001, 0x05dd752f, 0x16171623, 0x51421801, 0x22f74e08, 0xf2791220, 0x4503240c, 0x53d639fe, 0x5a550911, 0x1c1c2c05, 0x3750664c, 0x0c0d0f0e,
0x531d1716, 0x01260613, 0x2e2e3f49, 0x00820e3c, 0x2e3c2308, 0x767c3f2e, 0x19227c76, 0x070f1018, 0x0f070606, 0x45191810, 0x100f1918, 0x06070706,
0x18190f10, 0x0e4f89fe, 0x3d742620, 0x726e3afb, 0x0c0f4f72, 0xbf68f22c, 0x2f292a2e, 0x1138310c, 0xc349261d, 0x17172a06, 0x24351e1b, 0x23282b25,
0x07c34922, 0x18176722, 0x33072e7c, 0xfeb71817, 0x0e5cb6b8, 0x231a1a0e, 0x2c752d24, 0x1a1a2424, 0x0e29a182, 0x24231b1a, 0x242d752c, 0x210e8323,
0x2d4f7703, 0x4f01231f, 0x2f4f4f01, 0x0020080a, 0x01060000, 0x0568fe0b, 0x000f05f5, 0x0039001f, 0x004b0041, 0x006f0055, 0x23300100, 0x013d2622,
0x2014fd4e, 0x1afd4e06, 0x2007f667, 0x12877701, 0x41180520, 0x2e080d65, 0x33112311, 0x37363313, 0x02231133, 0x35395fe5, 0x201f5b38, 0x262a1211,
0x82353625, 0x26263536, 0x676b7c29, 0x2d4027a1, 0x0d0c0c0d, 0x8227402d, 0x0d0c2d09, 0x402d0c0d, 0xc76ded02, 0x3bfbfb01, 0x2b0cff79, 0x09051504,
0x62190923, 0x19621818, 0x05390882, 0x06b48067, 0x677b595a, 0x313a68fe, 0x2b340732, 0x4c3e3d2b, 0x2b2c8155, 0x3d008217, 0x55812c2b, 0x4513ad96,
0x25331aa2, 0x2e6a2d25, 0x1b332425, 0x2524331b, 0x252d6a2e, 0xec673325, 0x24012108, 0x2d09e276, 0x2b282e29, 0x1249123e, 0x2d2db32c, 0x08822cb3,
0x02fffd39, 0xababfe9e, 0x0062fdaa, 0x00020000, 0x06540085, 0x00b8037b, 0x644d0034, 0x1a41357f, 0x133d0813, 0x01231133, 0x359469b7, 0x2c103e10,
0x51443536, 0x26493951, 0x3e3d7a25, 0x436c4c2a, 0x3145465f, 0x5d21035b, 0x27284846, 0x4a442120, 0x4e29757e, 0x06fa0371, 0x130b2c0b, 0x81242381,
0x27088213, 0xe1a18206, 0x829ae007, 0x2a2d8c64, 0x5a178f02, 0x40ec2217, 0x8222ec40, 0x7ffd3808, 0x56fe4603, 0xbafcaa01, 0x00030000, 0x066300b5,
0x00a9034b, 0x7b15000b, 0x092119ad, 0x11d57601, 0x6801b63c, 0x747f7f74, 0x3934d8e1, 0x03d83439, 0x8cedfe5a, 0x0a175817, 0x0f050f37, 0x09820a38,
0xba2e8834, 0x4603632e, 0xfe89e689, 0x36c501b2, 0x36323a32, 0xa17631fd, 0xc8252205, 0x0aa17637, 0x00820020, 0x20071b50, 0x06bf4561, 0xbd457e20,
0x34ce4e46, 0x10152108, 0x6d6d0f3d, 0x10401003, 0x7f1e781f, 0x2b27a028, 0x22832bac, 0x3f630287, 0x0e0f3b5c, 0x5c3b0f0e, 0x28054344, 0x0d0d1f31,
0x3145311f, 0x053b441f, 0x1a033122, 0x45325050, 0x01213edf, 0x2c7150ef, 0x5b01053a, 0xa50502ff, 0x34001a05, 0x48003e00, 0xa2008100, 0x22050000,
0x37362726, 0x54079f79, 0x0225103f, 0x23012e07, 0x0f3f5422, 0x14654b18, 0x01694589, 0x0d597629, 0x2a0eb157, 0x010e1716, 0x76555002, 0x7f26252a,
0x0b2314c7, 0x7f091e1a, 0x01210dc8, 0x0545442d, 0x2aacb335, 0xac2a2e2e, 0x76542cfe, 0x2425262b, 0x40372b2a, 0x69161842, 0x0d211140, 0x0e406919,
0x08057476, 0x69242521, 0x22755841, 0x48112e2d, 0x58584e3b, 0x134b3d4e, 0x79224d0a, 0x23343dfd, 0x16162b23, 0x54273139, 0x0a230e8c, 0x54081b16,
0x4b18128d, 0x292507bf, 0x012b282e, 0x693d8918, 0x2a082650, 0x4055a9b1, 0x2d2c2d40, 0x19194b4d, 0x5d6a3930, 0x3e695d66, 0x492f0631, 0x00000052,
0x002e0004, 0x03d206b7, 0x000f0056, 0x18360027, 0x5e15e741, 0x132015d5, 0x25182d61, 0x01c86c62, 0xad5570fc, 0xed832b09, 0x25256940, 0x25252828,
0xf6604069, 0x18812005, 0x2009e841, 0x05bb7002, 0x2a9e0227, 0xa87d2a2a, 0x2705827d, 0x6c5b5e60, 0x22fe5e5b, 0x002d9e82, 0xff4b0106, 0x05b50502,
0x0015001a, 0x30ab821e, 0x016e0049, 0x050000d8, 0x21303530, 0x12363530, 0x053d7437, 0x2330152e, 0x25301530, 0x11303330, 0x010e2330, 0x2007145e,
0xd344183e, 0x48012008, 0x2e23073d, 0x7e062201, 0x1e240719, 0x26220102, 0x6d08006a, 0x07220681, 0x46181d06, 0x352b0e81, 0x0f231133, 0x0e0f1501,
0x840d0f15, 0x91088205, 0x2e05270b, 0x35372701, 0x02840b3f, 0x05840a20, 0x06200b88, 0x073c1793, 0x15331133, 0xc9fea102, 0x8e2db52d, 0xbffe5c5c,
0x8e2307db, 0x5c3eaf02, 0x1d0f0e3c, 0x09bd4418, 0x00820720, 0x310f0f26, 0x0f103145, 0x07390982, 0xeefd311f, 0x49279683, 0x3b584168, 0x3c0f213b,
0x3b481110, 0x2d2d2c4d, 0xd849182c, 0xbc2f220a, 0x3b4c1808, 0x222eeb2e, 0xd20b2c0b, 0xd202206e, 0x01012453, 0x18f2a3a6, 0x290ea54a, 0x582fe2fe,
0x51524140, 0x45185883, 0x243b07aa, 0x2b752c25, 0x1a1a2425, 0x1a1a1c1c, 0x752b2524, 0x3324252c, 0xb106031c, 0x188055a9, 0x2c0f6148, 0x09313e34,
0x29490923, 0x015a0b29, 0xd0b1d4f5, 0x280a2254, 0x8953d00a, 0x55b64150, 0xfd235f86, 0x82005abc, 0x02350800, 0x5f025c00, 0x7105a406, 0x1b000300,
0x21130000, 0x27012115, 0x33351737, 0x07173715, 0x17231533, 0x23152707, 0x37270735, 0x065c3523, 0x04b8f948, 0x8c2a8cc2, 0x2103823c, 0x0887c6c6,
0x46a50224, 0x118c2202, 0x00261a84, 0x5c000100, 0x5b8225ff, 0x1400d622, 0x38085982, 0x3e012c32, 0x34113505, 0x022c032e, 0x019d5c23, 0xf6050134,
0x5b7fadc7, 0xaa6f3c2e, 0xfef8fecc, 0xada9fee5, 0x5633a502, 0x7a837e72, 0xf90e4766, 0x7d5b154f, 0x68869190, 0x24478d3e, 0x012c2201, 0x2047832e,
0x2747823e, 0x9da40633, 0xfbfeccfe, 0x01254889, 0x011b0108, 0x82489657, 0x000532ef, 0x0638ff2a, 0x009405d6, 0x00400004, 0x014b0044, 0x2b9b8208,
0x21072130, 0x030e2204, 0x07040e07, 0x2e06eb57, 0x33363435, 0x041e1732, 0x37033e32, 0x8337043e, 0x1716240c, 0x83141516, 0x032e391e, 0x21152103,
0x05231501, 0x25352325, 0x33023e34, 0x36171632, 0x17031e32, 0x14212682, 0x21058306, 0x05833236, 0x013e1725, 0x82033e37, 0x84362047, 0x22288340,
0x8631011e, 0x2317840c, 0x021e3233, 0x5b852983, 0x85141521, 0x27262961, 0x3435012e, 0x27022e35, 0x0e2e6e83, 0x27222301, 0x0607010e, 0x07062722,
0x0c86030e, 0x02200683, 0xb0840e82, 0x03862683, 0x82022e21, 0x273b08ba, 0x35010e34, 0x2627010e, 0x16172627, 0x06273435, 0x36373437, 0x5c262223,
0xfe46e401, 0x54e00462, 0x2f4f5061, 0x3c15070f, 0x522c5b40, 0x4da7934b, 0x151d0835, 0x2f0f0f1b, 0x9a61504f, 0xddd4081b, 0x62fee401, 0x019610fe,
0x96000100, 0x0e047afc, 0x1b131a24, 0x171f0e0b, 0x0202080c, 0x11151b11, 0x04070602, 0x10072e38, 0x020c0e10, 0x06030810, 0x0a0c130c, 0x530b0609,
0x040d1339, 0x0c11282c, 0x2f411e18, 0x0d151d0c, 0x241a0e04, 0x27142013, 0x11140c1e, 0x0909090a, 0x2c21492f, 0x121a1301, 0x1004180f, 0x25210f06,
0x2a100f14, 0x10171c19, 0x21091224, 0x132e0e0d, 0x18133b1a, 0x0d060707, 0x0e290938, 0x111a141b, 0x122f340d, 0x19100807, 0x160b0a11, 0x1c101010,
0x22180f17, 0x08221a0c, 0x030d1611, 0x06171601, 0x021a0327, 0x01100801, 0x08020103, 0x021a1207, 0x2fbb6eb9, 0x173c5242, 0x424a1d09, 0xa72d184b,
0x0f0d4d4e, 0x17161d15, 0x2f42523c, 0x90081897, 0x016e5801, 0xf0f0fa25, 0x1d0da0fa, 0x1b151a29, 0x1d110e07, 0x26170e11, 0x0c020b3a, 0x0505070d,
0x0b091037, 0x08040910, 0x040d670c, 0x3b1f2741, 0x0e186037, 0x121d1107, 0x15092617, 0x5201100f, 0x04380443, 0x34010512, 0x10171108, 0x0b122d0c,
0x3e080403, 0x2f070b42, 0x0b24111d, 0x14111045, 0x1d0f331c, 0x0a5d090e, 0x18180c4d, 0x022d410c, 0x17211617, 0x0c110508, 0x2226141b, 0x19220e05,
0x02071703, 0x02030c0c, 0x04110205, 0x04020202, 0x24038201, 0x171a0702, 0x07b34300, 0x00492508, 0x000f000b, 0x33150100, 0x23152315, 0x33352335,
0x15210135, 0xb4980521, 0xb4b464b4, 0x480628fb, 0x4905b8f9, 0x64380b83, 0x465cfdb4, 0x53000500, 0x8c063eff, 0x0600a705, 0x2c002800, 0x37003000,
0x11293d82, 0x33010b33, 0x07232711, 0x20018327, 0x26058403, 0x1b35020b, 0x82173702, 0x84132001, 0x33172905, 0x2b153321, 0x37333502, 0x2e082d85,
0xcea0a104, 0xc936a0ce, 0x303f334a, 0x3a3a3f2f, 0x10311937, 0x27273736, 0x31103637, 0x3a3a3719, 0x3f302f3f, 0x01c94a33, 0xbc8a8af2, 0x83887373,
0x0247082c, 0x01b00108, 0xfedefe22, 0x3ed63a50, 0xe3cd72a9, 0x8b54fcfe, 0xfe92df6a, 0x010401d4, 0xeb0189eb, 0xaffe0401, 0x8b6adfb7, 0xe3fcfe54,
0x3ea972cd, 0x3a6161d6, 0xdefe50fe, 0xb0012201, 0x00030000, 0x0637ff5c, 0x82e005a4, 0x000d22bb, 0x26b7833b, 0x23010923, 0x84110311, 0x2f012206,
0x85bf8501, 0x840f2005, 0x020f220f, 0x23c4821f, 0x011f013f, 0x0586c485, 0xc8340328, 0x14011401, 0x068598c8, 0x38d8023d, 0x4b604e72, 0x5a5a6048,
0x184b2754, 0x394b4554, 0x155a364b, 0x39252539, 0x82365a15, 0x5445310c, 0x54274b18, 0x48605a5a, 0x724e604b, 0xfcfe5d01, 0x04229484, 0xb9825d02,
0x3008d183, 0x1bc8fefc, 0x2d420438, 0x21665951, 0x48582a37, 0x645a7084, 0x8f523b4b, 0x4a656c43, 0x4b3b528f, 0x84705a64, 0x372a5848, 0x51596621,
0x3804422d, 0x3b008200, 0xff4b0002, 0x05b50622, 0x000900d0, 0x0500002a, 0x15012d15, 0x010d3521, 0x17130135, 0x3f20ad8b, 0x0324d98d, 0x6d010307,
0x04227e83, 0x7a820126, 0xd3fa2608, 0x1f6d6e4e, 0x756d3262, 0x615e7d75, 0x4994667d, 0x7d669449, 0x757d5e61, 0x62326d75, 0x4e6e6d1f, 0xcecea03e,
0x080383a0, 0xfe540333, 0x73eccd7e, 0x426e54b0, 0x59a1b2cc, 0x36993184, 0x84319935, 0xccb2a159, 0xb0546e42, 0xcd090190, 0x00007efe, 0xff5e0002,
0x05a2066a, 0x000b007b, 0x0e5b421f, 0x03270330, 0x27020b27, 0x021b3711, 0x13371337, 0x69421521, 0xc7fe2106, 0x86877487, 0x42a70221, 0xfc330777,
0x629dfef0, 0xfeb2f7fe, 0xfe6501be, 0x07058467, 0x8267fe84, 0xb2be2f09, 0xfe62f7fe, 0x0300749d, 0x3eff5300, 0x9342af06, 0x002f2c06, 0x35211300,
0x2135010d, 0x41211503, 0x80420507, 0x021b2205, 0x42798235, 0x072109a0, 0x20268503, 0x075442cb, 0x45035522, 0x21068c42, 0x8c42363b, 0x3b36210b,
0x20068c42, 0x074b4296, 0xa0030428, 0xfea0cece, 0x864261fc, 0x9bfe2126, 0x00202f83, 0x04280082, 0x5effc800, 0xa6053806, 0x0f2bb582, 0x1f001b00,
0x35250000, 0x43031521, 0x0b8b0b7f, 0x1123112e, 0xcc016c04, 0x64b4b4b4, 0xc0fcb4b4, 0x02270684, 0x64a05a31, 0x439c0464, 0xfe210595, 0x2507855c,
0xb8f90e02, 0x62824806, 0x47010021, 0x0221058f, 0x2c6382a5, 0x15211300, 0x48065c21, 0xa502b8f9, 0x3a1c8246, 0xff560105, 0x05aa0508, 0x000f0015,
0x00450039, 0x008f0065, 0x33350500, 0x5e062311, 0x332a0571, 0x01153311, 0x020e0714, 0x8b552307, 0x012e2105, 0x0e211a82, 0x52501802, 0x18042012,
0x4b0a8650, 0x146308e8, 0x3736280d, 0x0617011e, 0x67250607, 0x26210fce, 0x10136a27, 0x21070632, 0xbc9c0115, 0x0b376507, 0x6e3d0b2c, 0x1c02a3a5,
0x2c05da67, 0x22215b38, 0x04020d2d, 0x0e0f0a01, 0x20501825, 0xd9fe3212, 0x75424275, 0x8456fe41, 0x69492695, 0x22765741, 0x06104e5b, 0x08aa5218,
0xe2025f08, 0x07cf39fe, 0x3b1b1c33, 0x1e2a1b32, 0x332c0515, 0x3713120a, 0x1c50664c, 0x190e0f1b, 0x201e1d2c, 0x52014f4f, 0xf5015bf8, 0x270a3b6b,
0xfd77430a, 0xa5015bbc, 0x6b414049, 0x4d2a1b55, 0x36592928, 0x12140101, 0x0f101a12, 0x304c370e, 0x1e2a2b31, 0x1312211e, 0x92303044, 0x3c0e3c3e,
0x04823f3f, 0xb2ca0131, 0x588154a9, 0x314b4d2d, 0x5d6a392f, 0x4a6a5d65, 0x682f088b, 0x292f07b8, 0x310c2e2a, 0x271d1038, 0x69141116, 0x1b390d9f,
0x43441c1d, 0x0000005c, 0xff2e0104, 0x05c70508, 0x00130015, 0x004d0035, 0x13037986, 0x01301123, 0x10b55230, 0x30333023, 0x22038613, 0x82233011,
0x15514e21, 0x2137276d, 0x8e612e01, 0x05c43708, 0x18092309, 0x62181962, 0x08240918, 0xb3816805, 0x687bb406, 0x3a6d2bfc, 0x02f8323b, 0x60bb609f,
0x0102dcfe, 0x2d124812, 0xb32c2cb3, 0x2b08822d, 0x9f02fffd, 0x5501abfe, 0x620361fd, 0xc3222084, 0x41180b61, 0x17200ac4, 0x0805ec78, 0x2c515c45,
0x1b312424, 0x0b321b1a, 0x28220b2d, 0x152a2c2e, 0x130d0a15, 0x262f515c, 0x1e1b1b27, 0x6b000100, 0x9506d300, 0x44003104, 0x32010000, 0x07141516,
0x0607020e, 0x052e2223, 0x26272627, 0x06072223, 0x83010e07, 0x26450810, 0x36373435, 0x33063e37, 0x17051e32, 0x33161716, 0x013e3732, 0x023e013f,
0x2a1e4c06, 0x66240b07, 0x2a6e7232, 0x2f444252, 0x49131b36, 0x305d7021, 0x12594643, 0x14110d10, 0x04122a1e, 0x381c140a, 0x4d404330, 0x08218b26,
0x2a483231, 0x03161557, 0xca021f0b, 0x0f111e2a, 0x32934116, 0x472a1e72, 0x242e5539, 0x43a83184, 0x151e9846, 0x1e2a0a08, 0x1106141c, 0x3a522e22,
0x891d2a44, 0x2a48281d, 0x0728287c, 0x8400130e, 0x000e2200, 0x84c982ae, 0x2004820a, 0x240b8602, 0x000d0001, 0x240b861f, 0x00070002, 0x240b863d,
0x00260003, 0x200b8693, 0x20238204, 0x240b86d6, 0x010f0005, 0x2b0b8604, 0x010c0006, 0x0003002e, 0x00090401, 0x0b850085, 0x1a000124, 0x17860300,
0x0e000224, 0x0b862d00, 0x4c000324, 0x0b864500, 0x23820420, 0x0b86ba20, 0x1e000524, 0x0b86e400, 0x18000624, 0x4c831401, 0x75004630, 0x6e007200,
0x63006100, 0x20006500, 0x07824900, 0x0f826f20, 0x0000732e, 0x6e727546, 0x20656361, 0x6e6f6349, 0x52200e82, 0x67201f82, 0x6c202d82, 0x72282b82,
0x65520000, 0x616c7567, 0x46210882, 0x212f8300, 0x07830074, 0x67007222, 0x3a204584, 0x59994982, 0x83002021, 0x0031221f, 0x22b28238, 0x82300031,
0x82322005, 0x00322205, 0x2a738233, 0x46746e6f, 0x6567726f, 0x8c203a20, 0x280f827f, 0x312d3831, 0x30322d30, 0xa8278332, 0x825620b6, 0x00722490,
0x84690073, 0x822020a6, 0x00302468, 0x842e0031, 0x00303007, 0x72655600, 0x6e6f6973, 0x31303020, 0x8230302e, 0x41b68d10, 0x0d41110e, 0x00002406,
0x8b000200, 0x8b012000, 0x200b840c, 0x0805824e, 0x020001a0, 0x02010300, 0x04010301, 0x06010501, 0x08010701, 0x0a010901, 0x0c010b01, 0x0e010d01,
0x10010f01, 0x12011101, 0x14011301, 0x16011501, 0x18011701, 0x1a011901, 0x1c011b01, 0x1e011d01, 0x20011f01, 0x22012101, 0x24012301, 0x26012501,
0x28012701, 0x2a012901, 0x2c012b01, 0x2e012d01, 0x30012f01, 0x32013101, 0x34013301, 0x36013501, 0x38013701, 0x3a013901, 0x3c013b01, 0x3e013d01,
0x40013f01, 0x42014101, 0x44014301, 0x46014501, 0x48014701, 0x4a014901, 0x75074b01, 0x3045696e, 0x07863046, 0x07863120, 0x07863220, 0x07863320,
0x07843420, 0x85303121, 0x30312127, 0x31212785, 0x21278530, 0x27853031, 0x87303121, 0x86352027, 0x8636202f, 0x86372007, 0x86382007, 0x86392007,
0x86412007, 0x86422007, 0x86432007, 0x86442007, 0x86452007, 0x85462007, 0x30312107, 0x31200786, 0x7f860786, 0x7f863120, 0x7f863120, 0x7f863120,
0x7f863120, 0x7f863120, 0x7f863120, 0x7f863120, 0x7f863120, 0x7f863120, 0x7f863120, 0x7f863120, 0x7f863120, 0x7f863120, 0x85303221, 0x31322177,
0x7f860786, 0x7f863220, 0x7f863220, 0x7f863220, 0x7f863220, 0x7f863220, 0x7f863220, 0x7f863220, 0x7f863220, 0x7f863220, 0x7f863220, 0x7f863220,
0x7f863220, 0x7f863220, 0x85303321, 0x31332177, 0x7f860786, 0x7f863320, 0x7f863320, 0x7f863320, 0x7f863320, 0x7f863320, 0x7f863320, 0x7f863320,
0x7f863320, 0x7f863320, 0x7f863320, 0x7f863320, 0x7f863320, 0x7f863320, 0x85303421, 0x31342177, 0x7f860786, 0x7f863420, 0x00343422, 0x01230083,
0x4400ffff, 0x002607f1, 0x14000c00, 0x16820400, 0x00000224, 0x03860100, 0x00240985, 0x206855e0, 0x002c1182, 0x9ffffde0, 0x00000000, 0xaa4155e1,
0xc915fa05, 0x00001e86,
0x240d8247, 0x0085000b, 0x260f82b5, 0x012e005b, 0x845c004b, 0x822a2001, 0x82532005, 0x004b3203, 0x0053005e, 0x015c00c8, 0x002e0156, 0x001e006b,
0x21018446, 0x0185007d, 0x13220d83, 0x018ca000, 0x64006422, 0x0320b582, 0x1c200386, 0x0123df85, 0x84030008, 0x001c2409, 0x82ec0004, 0x00082e1b,
0x00020008, 0xe0200000, 0xff58e1f4, 0x260984ff, 0xff00e1f0, 0x82e3ffff, 0x8400200b, 0x0006222b, 0x260b820e, 0x00050004, 0x82070006, 0x8209202f,
0x000b24c9, 0x820d000c, 0x000f2617, 0x00110010, 0x32c98212, 0x00150014, 0x00170016, 0x00190018, 0x001b001a, 0x821d001c, 0x1f8408a7, 0x21002000,
0x23002200, 0x25002400, 0x27002600, 0x29002800, 0x2b002a00, 0x2d002c00, 0x2f002e00, 0x31003000, 0x33003200, 0x35003400, 0x37003600, 0x39003800,
0x3b003a00, 0x3d003c00, 0x3f003e00, 0x41004000, 0x43004200, 0x45004400, 0x47004600, 0x49004800, 0x4b004a00, 0x4d004c00, 0x4f004e00, 0x51005000,
0x53005200, 0x55005400, 0x57005600, 0x59005800, 0x5b005a00, 0x5d005c00, 0x5f005e00, 0x61006000, 0x0620c682, 0xc782ca85, 0x02010022, 0x02210582,
0x23008d00, 0x03000001, 0x0d40118d, 0x043b22d3, 0x21d6826f, 0x0185002c, 0x003cba08, 0x04c60084, 0x05240564, 0x07d406c4, 0x08ea0758, 0x093409ce,
0x0ab00a76, 0x0b880bfe, 0x0c2e0cee, 0x0d6a0de6, 0x0e640ed8, 0x10a40fca, 0x11bc105a, 0x12c6117e, 0x130c1392, 0x14d8138c, 0x16481598, 0x17121738,
0x1b1e1b80, 0x1c341cae, 0x1fea1dc0, 0x20bc1f08, 0x21342180, 0x22fc218a, 0x27c82386, 0x28ca272a, 0x295229b0, 0x2a0a2ac6, 0x2ba42bbe, 0x2e162ef4,
0x2e682e44, 0x30f02f8e, 0x306a300c, 0x311e31d2, 0x31ac3156, 0x32ec31de, 0x336433ba, 0x344034c6, 0x353a35bc, 0x36de35b6, 0x3642361a, 0x37e43690,
0x378e371c, 0x37b437a0, 0x37dc37c8, 0x380438f0, 0x384c3816, 0x08c5827e, 0x3b000221, 0x15020000, 0x0300aa04, 0x2e000700, 0x2f0001b1, 0x0407b23c,
0xb132ed00, 0x3cdc0506, 0x820203b2, 0xb100220a, 0x20168303, 0x27168305, 0x010607b2, 0x01b23cfc, 0x33371783, 0x25112111, 0x3b211121, 0x61feda01,
0x9cfe6401, 0x56fbaa04, 0x8334043b, 0x80fc2557, 0x8003f5ff, 0x01200982, 0x002e5982, 0x21252105, 0x9a0533fd, 0x0007b3f9, 0x15820b0b, 0x02032508,
0x040f0009, 0x00fd03f7, 0x0025001b, 0x0100002f, 0x16322130, 0x010e1415, 0x15070607, 0x17161716, 0x1415011e, 0x0e2f0b82, 0x37212301, 0x3d363221,
0x23263401, 0x85333521, 0x2b4d0809, 0x010a0201, 0x1f8e7dbd, 0x1e202031, 0x2025251e, 0x14132b1f, 0x385f2322, 0x01a217fe, 0x48483f18, 0xfce8fe3f,
0x3d42423d, 0x8dfd03fc, 0x324f3877, 0x08030c0d, 0x1c0d0d02, 0x3c3f581c, 0x27273536, 0x3e428b2c, 0x88423e31, 0x3a2e393e, 0x088f833e, 0x00910030,
0x036f0663, 0x000f00a9, 0x002b0017, 0x27302500, 0x07302130, 0x12362330, 0x12163337, 0x23300117, 0x33300706, 0x11300126, 0x33302700, 0x03851330,
0x0702062f, 0xea023011, 0x49c7fe4c, 0x2fbf2f8a, 0x080382ab, 0x068dfe34, 0x3cf73d3c, 0xf7fe8402, 0x04cc9b17, 0xce3794cb, 0xe3e3631d, 0x8c2e028c,
0x8cd2fd8c, 0xb9b9c902, 0x01f0fdb9, 0x28d4014a, 0x75018bfe, 0x329afe61, 0x8282b3fe, 0x82030021, 0x07ab3a04, 0x03610300, 0x038c0358, 0x370000ba,
0x33270226, 0x17021d30, 0x1d17041d, 0x91029003, 0x8211a314, 0x9126f147, 0x26869571, 0x3317011e, 0x4137013e, 0x0d860673, 0x37033d22, 0x04200289,
0x17850b8a, 0x298211a3, 0x719126f1, 0x332e86a1, 0x23070206, 0x2e270226, 0x0e232701, 0x0d820701, 0x2622052d, 0x37013e27, 0x3233011e, 0x83263435,
0x27262918, 0x36343526, 0x17163233, 0x2e2b2182, 0x06222301, 0x16171415, 0x85011e17, 0x14152302, 0x3b822506, 0x27222322, 0x27262882, 0x36373426,
0x3c823e37, 0x07202182, 0x1d352c84, 0x33161401, 0x023e3732, 0x3523013d, 0x8e231133, 0x68185e18, 0x3400cc01, 0x0c040e04, 0x0e030e04, 0x0f7b0e39,
0x0f030e39, 0x0e030d03, 0x2761cc04, 0x62186401, 0x3a0e7a19, 0x0c205c83, 0x0f3b5c82, 0xf0020f3c, 0x0b276e4b, 0x4d1d0c2f, 0x342a7731, 0x5a0a2409,
0x65702a2b, 0x82246348, 0x1a3c0813, 0x37373140, 0x09311616, 0x44300924, 0x74131615, 0x090c4302, 0x2c34484f, 0x1320212b, 0x22121212, 0x5a3d5f22,
0x531e3837, 0x483c4611, 0x1e485050, 0x16271a1a, 0xb75adf7c, 0x70be0170, 0x0010b8cd, 0x2d47014d, 0x1919681a, 0x01441967, 0xfe444410, 0x0a8244f0,
0x1a681922, 0x015b0110, 0x4d474147, 0xfe70af08, 0x01457042, 0x671a4513, 0x1a671919, 0x45edfe45, 0x0b36380b, 0x2c290b2a, 0x0d2f2c6d, 0x15020702,
0x5c512d2c, 0x0a343161, 0x24250b29, 0x162a342d, 0x08020c15, 0x171f0b02, 0x65293f17, 0x3e306e68, 0x292a1313, 0x42b84242, 0x282a2a42, 0x31472627,
0x525c3931, 0x085c52a4, 0x1e312109, 0x9efe573b, 0x00070000, 0x0602ff52, 0x001a05ae, 0x0024001a, 0x00490038, 0x00780053, 0x05000080, 0x34352622,
0x37023e37, 0x06070633, 0x07010e07, 0x33013e33, 0x14151632, 0x3d322706, 0x22233401, 0x0314011d, 0x33270226, 0x16171216, 0x37363317, 0x2a821236,
0x21070227, 0x32211123, 0x27278317, 0x2e231307, 0x37232701, 0x27077948, 0x26220115, 0x34012e27, 0x37222a82, 0x23823336, 0x45061721, 0x98080b58,
0x011e3736, 0x05010e17, 0x01150111, 0x01350111, 0x106d6ba2, 0x314f3a0f, 0x2a2a3b8a, 0x09251d1e, 0x3147110c, 0x6a6e5f51, 0x1f6c6d6d, 0x6b218321,
0x0e145013, 0x0e0e0c0e, 0x69144e14, 0x01208321, 0x0901658f, 0x392b2c56, 0x0871803a, 0x9b781756, 0x24262624, 0x3aad029b, 0x2321225d, 0x2e222123,
0x33563b2e, 0x490d1f33, 0x44353e12, 0x36444c4c, 0x380f1242, 0xfe69200e, 0xfe2801e4, 0xfdd8fe72, 0x3d3c7f84, 0x22606f3c, 0x2928292d, 0x2f325628,
0x6a676a31, 0x19775577, 0x08028277, 0x70180356, 0x466fbf01, 0x4e46e7fe, 0x464e4f4f, 0x6f461901, 0x027041fe, 0x6034339e, 0xfe11604d, 0x36c913e7,
0x3e2a2655, 0xfede262a, 0x2a2a278e, 0x2a84b684, 0x2514142a, 0x29074a25, 0x525f3239, 0x365e53a1, 0x0921083b, 0xfeb24e4a, 0x82100134, 0xcd0192fe,
0x0082effe, 0x043f0082, 0xab002000, 0x6103e006, 0x15000b00, 0x74004a00, 0x30370000, 0x32213011, 0x2b061416, 0x49011901, 0x012008b7, 0x2205ce46,
0x82161716, 0x06d04612, 0x35012e28, 0x33023e34, 0xd1461732, 0x06072c08, 0x1f161415, 0x15011e01, 0x46020e14, 0x2e2105cd, 0x21248502, 0xc6461716,
0x3736230c, 0xc846013e, 0x21d10806, 0x665d2001, 0xadb45d66, 0x292f2e2a, 0x55dd02ad, 0x320c2a76, 0x2b2b230d, 0x2e414136, 0x0a270a3b, 0x3d216262,
0x384c3656, 0x320d2837, 0x384b1a0d, 0x34202039, 0x5d643c37, 0x025a3f20, 0x5e0a04dd, 0x4a663c4c, 0x6c4d2a29, 0x237d5a42, 0x3d511359, 0x50616150,
0x161d1c20, 0xf38a1916, 0x9e02b75f, 0xfe6db96d, 0x2b6a01f5, 0x2b292e28, 0x343db6fd, 0x2b0c2f0b, 0x313a1716, 0x020c2e27, 0x5c120207, 0x31482c51,
0x321a1b1b, 0x210b2d0b, 0x2c181729, 0x0c0b292a, 0x2f505d13, 0x711d374d, 0x572d4031, 0x81545482, 0x47502e58, 0x663b2f34, 0x665d6e5d, 0x0f100809,
0x5d34202f, 0x05009bfe, 0xab002e00, 0x6103d206, 0x1f001200, 0x34002a00, 0x00004601, 0x07684225, 0x32013e28, 0x0e14021e, 0x83422702, 0x06222a05,
0x1614011d, 0x32211105, 0x0f5e4117, 0x012e052c, 0x071d2327, 0x170f1d17, 0x02870e1d, 0x05820b85, 0x23110133, 0x12163311, 0x17011e17, 0x27053d33,
0x3d270f3d, 0x8802870e, 0x11042d0b, 0x26231133, 0x3c330102, 0x23222360, 0x5f3a0282, 0x2344607a, 0x3c614423, 0x904f4f48, 0xdf014f4f, 0x2c560901,
0xa356572b, 0x0082259a, 0x63029a26, 0x0c092208, 0x28073244, 0x85217562, 0x08230822, 0x2310880d, 0xac852176, 0x2d074c42, 0x84542828, 0x275484b6,
0xa2525d5a, 0x04845d52, 0x9e024f33, 0x67c13433, 0x6901f1fe, 0x293d2a25, 0x5315b226, 0x4d7f4415, 0x02284dae, 0x9e0270fe, 0x43f4fe43, 0x26808840,
0x62fd9001, 0x430c0143, 0xa53a055f, 0x5b065400, 0x2f00b803, 0x54004800, 0x00005e00, 0x0e233025, 0x2e222301, 0x8a443502, 0x083e4307, 0xe3490620,
0x37362106, 0x3d350182, 0x21352301, 0x21012311, 0x14151632, 0x010e0706, 0x021e1507, 0x300b8217, 0x23020e07, 0x32333721, 0x013d3637, 0x2b262734,
0x0a5d4d01, 0x04e54108, 0x4a60740e, 0x35345c80, 0x43433030, 0x2b9c7153, 0x18124a12, 0x79634d65, 0x24286379, 0x101b1b24, 0x2f01ac10, 0x01060177,
0x1b776972, 0x1a341514, 0x11353d1a, 0x39101113, 0x68fe2f4f, 0x1e35e987, 0x6a080082, 0x33d2e935, 0xd2333737, 0x38503de2, 0x686aa26d, 0x1c3738a2,
0x0b59631c, 0x493b0b2b, 0x7588757f, 0x130b0a7f, 0x271e1d14, 0x41fe7541, 0x62764603, 0x1515422f, 0x01070314, 0x25242f16, 0x2d2c3235, 0x1b752541,
0x3429331c, 0x33711c1b, 0x33302730, 0x05000000, 0xab003500, 0x6103cb06, 0x46001f00, 0x60005300, 0x00006600, 0x44262225, 0x362c131b, 0x17011e37,
0x21060706, 0x27012e22, 0x36232182, 0x46013e37, 0x14820506, 0x1632072a, 0x33033e17, 0x15021e32, 0x08105843, 0x352135a8, 0x33371236, 0x23153311,
0x11332515, 0x01010e23, 0x2696834e, 0x58416949, 0x115b2176, 0x594d3b48, 0x4c3d4d59, 0x0e3a0f12, 0x013c3d21, 0x3c5738fc, 0x232c1011, 0x90295523,
0x212d2d39, 0x0d161722, 0x0b010402, 0x2030251c, 0x1d35482a, 0x35573e21, 0x7541413b, 0xa1024242, 0xb52dc9fe, 0x5b5b8e2e, 0x07dbbefe, 0xb1ac8e23,
0x588154a9, 0x324b4d2e, 0x5d6a3930, 0x3f6a5d66, 0x09230931, 0x24292949, 0x3d303044, 0x36368049, 0x27291c53, 0x2d292826, 0x0101362d, 0x0f1b2315,
0x2f4d371c, 0x213c5333, 0x0d3d3e58, 0x04843e3d, 0x834d2f08, 0x2a014a5d, 0x553afe4a, 0x6301d883, 0x0800ed3b, 0x08ff4b00, 0x1505b506, 0x16000c00,
0x28001c00, 0x68005c00, 0x9b007200, 0x30170000, 0x35443011, 0x11012112, 0x3323ec83, 0x87152111, 0x06a64501, 0x4c2d754c, 0x232406b4, 0x03133313,
0x0f2a0b85, 0x3e253301, 0x0e233701, 0x02820701, 0x02821382, 0x011e2327, 0x11231117, 0x05af4c33, 0x1e823320, 0x33290282, 0x01b02311, 0x2c2c5609,
0x07564458, 0x66ca0130, 0x850186f4, 0x0301e1fe, 0x1f01fdfe, 0xdd4be7fa, 0x0925210c, 0x2207dd4b, 0x4b0c2e0c, 0x300811dd, 0x09220938, 0x082309e1,
0xca81c964, 0x030e04f1, 0x040e030d, 0xd002b03b, 0x0b010402, 0x16071f08, 0x57151657, 0x081f0815, 0x0105010b, 0x48127862, 0x200b8212, 0x08038209,
0x12471254, 0x02f86277, 0xc233349f, 0x01f1fe67, 0x3e292669, 0xbcfd2529, 0xbbfd9f02, 0x5a9f025a, 0x5acf58c4, 0x35395703, 0x2a0b2b0b, 0x2f2c6e2c,
0x0208020c, 0x512c2d14, 0x3431605d, 0x240a290a, 0x2a342d25, 0x020b1616, 0x200a0308, 0x293f1717, 0x1f0b6964, 0x02821f7c, 0x61334082, 0x4111e001,
0x11411010, 0x4c1390d3, 0x134b1314, 0x822db62d, 0x49132202, 0x290b8213, 0x9f0263fe, 0x16279d27, 0x02821658, 0xfd2c0882, 0x00000061, 0x00290004,
0x03d706ab, 0x22055347, 0x4746003a, 0x40471a53, 0x011d2611, 0x33161714, 0x07044332, 0xdc412520, 0x2921080a, 0x655e2001, 0xadb35d66, 0x292e2e29,
0x840f03ad, 0x69492695, 0x3b3b5741, 0x0f3d0f22, 0x4e3b4811, 0x3500822c, 0x134c3c4e, 0x220f3a0e, 0x2d013d3c, 0xbffeae01, 0xddfe2301, 0x05474101,
0xa9b13410, 0x2d598154, 0x084b2627, 0x39300822, 0x665d3535, 0x4235355d, 0x0b2a07c6, 0xba609e02, 0x0060c460, 0x5f510300, 0x01082e82, 0x0502ff6d,
0x001a0593, 0x00550044, 0x2991826d, 0x00ab009e, 0x00e300d5, 0x58472500, 0x22232c05, 0x012e0706, 0x3e373627, 0x44363701, 0x0722051b, 0x8f52020e,
0x07062109, 0x232a0182, 0x27022e22, 0x16171637, 0xd6481e17, 0x01352109, 0x37066444, 0x33023e37, 0x06101632, 0x023e3227, 0x2e34013d, 0x010e2202,
0x011d0607, 0x8205a14f, 0x35022525, 0x35373634, 0x2005f248, 0x4a428232, 0x15240563, 0x1415011e, 0xe1476b82, 0x4713200c, 0x25200bee, 0x07211e83,
0x82998223, 0x26222302, 0x2d820627, 0x27222323, 0x204f822e, 0x20b08337, 0x204c8533, 0x82c98807, 0x16550873, 0x3c3e4b02, 0x4330313a, 0x0c300c17,
0x3314130f, 0x2f2b2021, 0x0a213a50, 0x1a2f240a, 0x131a191d, 0x1f221613, 0x362c2d1f, 0x2a36472f, 0x0e0c500f, 0x2e11120e, 0x45413e1c, 0x9802473f,
0x0e3c5c3e, 0x3c0e0f0f, 0x767d3e5c, 0x31237d76, 0x1e0e0e1e, 0x1f314531, 0x08008207, 0x31100fb3, 0x593bf8fd, 0x3c4a1f3d, 0x371e3e34, 0x29296853,
0x3f0f0f38, 0x104a3d34, 0x3a5a3c10, 0x7942423c, 0x373d4242, 0x3a6f3b3b, 0x1652033a, 0x29564516, 0x225b3890, 0x010d2d21, 0x0e0a0105, 0x2030260e,
0x3524242a, 0x1f11101d, 0x3836561f, 0x113c2c2b, 0x413bec10, 0x413b3a42, 0x29359941, 0x2c312e07, 0x0a2a0a26, 0x1d141516, 0x2d17090a, 0x1a202841,
0x06192819, 0x0d0d0604, 0x25391415, 0x191a482c, 0x21140e0e, 0x143e172c, 0x0c0c1111, 0x07343a0d, 0xfe5c3634, 0x40582f6a, 0x41525340, 0xb72f5940,
0x5cb6b8fe, 0x2c49331c, 0x34482c75, 0x24341c1c, 0x08098224, 0x1a23252e, 0x06031c1a, 0x2a47341d, 0x07115143, 0x263a4e13, 0x0d192d40, 0x20202d0c,
0x134e3a26, 0x43511107, 0x3424232a, 0x3238571d, 0x37373213, 0x38270482, 0x2e303a01, 0x84302e10, 0x1f2a0804, 0x6b404149, 0x4e291b55, 0x365a2828,
0x12140101, 0x0e0f1b12, 0x304c360f, 0x1d2b2a32, 0x1312221e, 0x93303044, 0x3c0e3c3f, 0x04823e3e, 0x82003f21, 0x00043700, 0x06b70078, 0x00560388,
0x0027000f, 0x00400037, 0x11300100, 0x03842330, 0x2130352a, 0x13301530, 0x33303530, 0x1b830f8a, 0x17823320, 0x27302122, 0x81542782, 0x010e3c0c,
0x012e3307, 0xc86cac01, 0x5b53fc01, 0x5c24015b, 0x3c2b025c, 0x266f3afb, 0x82882699, 0xfe430803, 0x411005d7, 0x4010c610, 0xc2fdf502, 0x60603e02,
0x0158c2fd, 0xfe5858ee, 0xb5b55812, 0x70be0170, 0x7042fe70, 0xc5313a02, 0x00c53131, 0x08000500, 0xf806ab00, 0x34006103, 0x46003e00, 0x58005000,
0x4b370000, 0x272a329f, 0x13230723, 0x17121633, 0xa1862301, 0x42081190, 0x2a7655fd, 0x230d310d, 0x40372b2b, 0x0a3a2e41, 0x62620a28, 0x36563c22,
0x2738384c, 0x1a0d320d, 0x203a374b, 0x3c36341f, 0x3e215d65, 0x3dd0025a, 0xe46e3bfa, 0x26982689, 0x1104d7fe, 0x10c51040, 0x91280340, 0x4bac2013,
0x0b242c82, 0x9e02b5b5, 0x210a0041, 0x108ef7fd, 0x00820020, 0x60000334, 0xa006ab00, 0x15006103, 0x4b002b00, 0x30250000, 0xaa463003, 0x0206240e,
0x41352107, 0x052013b1, 0x2d1d8748, 0x70db3c01, 0x0a124712, 0x0b040b2b, 0x09820b2b, 0x95256d25, 0x414b0125, 0x012605c7, 0x26968384, 0x6148684a,
0x02b72814, 0x37dd379e, 0x82279b27, 0x83088202, 0x07d641c3, 0x41480b20, 0x2acb8217, 0x00470004, 0x03b906b7, 0x820b0056, 0x002122cd, 0x183f4629,
0x280a1b46, 0x11231101, 0x15213523, 0x074c4d48, 0x2e2e2928, 0x1402ad29, 0x0246ad01, 0x7b012507, 0xfc01c86c, 0x200f0846, 0x06ea45c1, 0x423e0221,
0x7f820579, 0x934f0620, 0x001e3408, 0x003d0027, 0x0058004e, 0x0500007e, 0x35262722, 0x84363734, 0x33302501, 0x0607020e, 0x2005944f, 0x08954f17,
0x011d2224, 0x944f0114, 0x0a125606, 0x964f0620, 0x010e212d, 0x3f12974f, 0x366b7a03, 0x1d0f1037, 0x3128271d, 0x3a553b8a, 0x0c0a1212, 0x51314711,
0x6a6e2f30, 0x09fed96d, 0x2606924f, 0x0c051304, 0x4f051205, 0x14221294, 0x944f144d, 0x3a0e2217, 0x0e954f0e, 0x4242fd35, 0x3d3d3c7f, 0x2f303836,
0x50522d23, 0x2f332a2b, 0x4f353531, 0x1a221390, 0x02821a69, 0x2211924f, 0x4f2eb62e, 0x08221592, 0x934f0820, 0x06003c0d, 0x08ff1701, 0x1505e905,
0x17000b00, 0x4b002d00, 0x5f005500, 0x30050000, 0x82333011, 0x30212203, 0x87078415, 0x05c6500b, 0x36343533, 0x32013e37, 0x011e1716, 0x0e070614,
0x36322701, 0x2b018237, 0x2734013d, 0x012e2726, 0x07062223, 0xbf460182, 0x11052107, 0x2412d14f, 0x11016ccc, 0x08038263, 0x4210fd22, 0x2926266a,
0x6a262629, 0x26256b83, 0x25262a2a, 0x4026416b, 0x0c0d1617, 0x17160d0c, 0x3f282640, 0x3f220b87, 0x8348f401, 0x02f8250c, 0x60c1fd9f, 0x032b0484,
0x2b2c2d57, 0x82545582, 0x832d2c2b, 0x83a92009, 0x1b612d08, 0x25251919, 0x252e692e, 0x1b191925, 0x562f0c8c, 0xb86e9f02, 0x01f5fe6e, 0x2e282c6a,
0x82002c28, 0x0a0036f0, 0xf606ab00, 0x12006103, 0x3a003000, 0x4a004400, 0x22250000, 0x0640502e, 0xaf07494f, 0x33112fe6, 0x01152111, 0x4c6a422c,
0x6a4c2929, 0x07854142, 0x5d21e09b, 0x08644966, 0x13022208, 0xac10016d, 0x5482572d, 0x2d588254, 0xa882582d, 0x602d5782, 0x25191a1b, 0x2e6a2e24,
0x1a192524, 0x200c8c1b, 0x0e6d5055, 0x9e02c128, 0x0060c2fd, 0xcb820400, 0xb606ab2c, 0x13006103, 0x2d002200, 0xd3436600, 0x15302306, 0x03882130,
0x01301126, 0x17323330, 0x0124e883, 0x012b0607, 0x2405ba52, 0x012b2627, 0x064d5811, 0x24077e51, 0x2e272627, 0x22028201, 0x51373435, 0x06230d80,
0x51171415, 0x24080680, 0x0e070607, 0xa3014a01, 0x1301cafe, 0xc301edfe, 0x343441ed, 0x4a29294a, 0xed413434, 0x2e5c4bed, 0x02804b2e, 0x05de45dc,
0x2b2a2427, 0x17414037, 0x05df4517, 0x3d111124, 0xe0453556, 0x4a2b0807, 0x1a3f3a38, 0x653c361a, 0x1f10115d, 0x02b75920, 0x60ba609e, 0x9e02dcfe,
0x7d541515, 0x15547da8, 0x5b5e6015, 0x2f2f5b6c, 0x456b22fe, 0x17210ad6, 0x075a5117, 0x51242421, 0x2908095b, 0x142a2c2f, 0x130c0b15, 0x272f515c,
0x1d1c1b26, 0x00040000, 0x0663008f, 0x00a90371, 0x002f0015, 0x00430039, 0x01302500, 0xec503330, 0x06535a06, 0x07020628, 0x16322101, 0xd4491415,
0x22df840b, 0x52372123, 0x064f08a2, 0xa2012e09, 0x168dedfe, 0x360f1659, 0x380f050b, 0x3709820b, 0x2fb92f89, 0x7301c201, 0x291b7768, 0x1e191934,
0x241b1a1f, 0x1d1c1110, 0x2106f54e, 0xf34e3c3c, 0x03633407, 0xecfe4546, 0x29c53645, 0x4525c837, 0x8c451401, 0x4e8cd2fd, 0x2a3605e4, 0x01070314,
0x18170b0b, 0x2c323549, 0x2521202d, 0x29333775, 0xe34e3734, 0x32013409, 0xce0508ff, 0x26001405, 0x78003300, 0x9b008a00, 0x4e050000, 0x01202ec4,
0x3241d14a, 0x2327012e, 0x33112311, 0x17011e13, 0x11331133, 0x82352123, 0x020e2604, 0x36272607, 0x08108237, 0x70021530, 0x103d5738, 0x23222c10,
0x39902a55, 0x21222d2d, 0x010c1717, 0x1c0a0105, 0x2b1f3125, 0x221e3547, 0x3a35573d, 0x41754242, 0x3f440241, 0x884a393b, 0x34132108, 0x2206884a,
0x4a230a0b, 0x3c080788, 0x2c1f1f23, 0x472f362c, 0x4f0f2937, 0x110e0e0d, 0x3e1d2d12, 0x47404541, 0x3408b2fd, 0x7968030e, 0x08340edb, 0x01796703,
0x1708bc43, 0x02123e34, 0xa5565540, 0x4425f8a3, 0x493c3030, 0x0d284f81, 0x24144708, 0x361d0f1b, 0x53332f4d, 0x3e59223c, 0x3f3c0d3d, 0x3d0d3c3f,
0x353d013e, 0x312e0729, 0x2a0a262b, 0x1414160a, 0x1709091e, 0x2028402d, 0x19271a1a, 0x0c060506, 0x3815140e, 0x1a482c25, 0x150e0e1a, 0x3f172b21,
0x594a1015, 0x33350806, 0x4a035c36, 0xfe1b6310, 0xfe9e0200, 0x10631b8d, 0x62fd0102, 0x18f5015a, 0x02134338, 0xfd5d5c3a, 0x03005abc, 0xab001b00,
0x6103e506, 0x5c003900, 0x00007f00, 0x0d474925, 0x22056843, 0x43262726, 0xea541069, 0x0607260a, 0x21010e07, 0x051d4722, 0x33013e23, 0x0fd05132,
0x5b563620, 0x2722a205, 0x77541001, 0x0c320d2a, 0x43057049, 0x312c0691, 0x3c111131, 0x374c3657, 0x330c2738, 0x080b7349, 0x1f101123, 0x29025a1f,
0x13139584, 0x42682524, 0x0f227657, 0x48120f3d, 0x58584e3a, 0x124c3c4e, 0x220f3a0f, 0x491e9e79, 0xb4430b8b, 0x2e2e2306, 0xb5432c51, 0x1717230b,
0x11552a2d, 0x26272d06, 0xb11d1c1b, 0x404154a9, 0x4d2e2c2c, 0x51053b4e, 0x52200a00, 0x00281a9a, 0x4f000500, 0xb106ab00, 0x21092b55, 0x2b554000,
0x21012234, 0x08028235, 0x06152128, 0x01210702, 0x22603d54, 0x22232322, 0x60796022, 0x44242444, 0x4e483c60, 0x4f4f904e, 0x0901de01, 0x572c2b57,
0x8957a357, 0x60032e05, 0x420141fe, 0xa601cdfe, 0x0136d636, 0x2bd9544c, 0xbcfd2a08, 0x59ea015b, 0xbafe525b, 0x00070052, 0x0608ff2e, 0x001505d2,
0x0033001c, 0x00530047, 0x0073005d, 0x37000091, 0x15300706, 0x05034c30, 0x33301132, 0x37363736, 0x07063330, 0x23171216, 0x1101012e, 0x450ae545,
0x26230cf1, 0x49333027, 0x33200629, 0x1122cf82, 0x7d570130, 0x012e2118, 0x082df347, 0x1a42f736, 0x48046d6d, 0x7f5a5a18, 0xba32ae41, 0x92278316,
0xad01a501, 0x2301c0fe, 0x4001ddfe, 0x73742201, 0x1b6d1b7c, 0x1b6c1b03, 0x2da41878, 0x20014afb, 0x5e65655e, 0x20075d50, 0x29144817, 0x4b412308,
0x9f02d01e, 0x1e5cacfe, 0xce4d6d6d, 0x21e8fe4b, 0xe2fee13d, 0xbb609f02, 0x0160c460, 0x32cbcc08, 0x028232c7, 0xe2fe2927, 0x03f6fe4e, 0x0df84762,
0x48b5fd21, 0x00212d37, 0x8f836200, 0xca000535, 0x360608ff, 0x0f001505, 0x33001700, 0x92006600, 0x4e050000, 0x062a1105, 0x26333007, 0x27012e05,
0x494e3023, 0x30332605, 0x17011e13, 0x06e74933, 0x59302321, 0x26211063, 0x0a625927, 0x5905ad5a, 0x26230d61, 0x82332702, 0x17162142, 0x53078e53,
0x3727069c, 0x06333736, 0x82230702, 0x27262f6c, 0x0e070623, 0xf8020701, 0x6e3afb3d, 0x704e9826, 0x31303407, 0x190230c6, 0x0208340e, 0x08db7968,
0x67030e34, 0x445bfc79, 0x0e48057c, 0x3a2e3505, 0x62621e1e, 0x36563d22, 0x2738374c, 0x4a1a4903, 0x201f3a38, 0x0807eb4d, 0x1a90015e, 0x0d6e1a6a,
0x1718092e, 0x0a240803, 0x790f360b, 0x090a360e, 0x31030923, 0x1c6b2323, 0x0d7a1b6e, 0x19191039, 0x10191902, 0xb6f80d3b, 0xbf0170b6, 0x41fe7070,
0x943b0270, 0x1b349494, 0xfffd0f64, 0x8dfe9f02, 0x021b640f, 0x0361fd01, 0x0c343d57, 0x162b0b2f, 0x27313a16, 0x05060b2e, 0x35069459, 0x02321b1a,
0x17282241, 0x2a2a2c17, 0x5c130d0a, 0x364d2f51, 0x4b830b1e, 0x2ddb3b33, 0x981e706f, 0x3cdc2b29, 0x252bdc3c, 0xa1de2594, 0x235f83a2, 0x663fea32,
0x3f370082, 0x040032ea, 0x0eff1801, 0x0f05e805, 0x3a001b00, 0x57004300, 0x41250000, 0x21221a7d, 0xfc542330, 0x23072405, 0x8237013e, 0x0898430a,
0x07010e27, 0x1101011e, 0x07c54333, 0x76411120, 0x82332006, 0x06b54327, 0x0ccd3608, 0x67030c32, 0x310ddb78, 0x7968030c, 0x1b7f3f03, 0x1b021b6d,
0x24781b6b, 0x8b232491, 0x66198023, 0x671a0219, 0x8c24781a, 0xfb932524, 0x11016cd9, 0x9a260101, 0x07804326, 0x27772308, 0x1781279a, 0xfffd185f,
0x8efe9e02, 0x02175f18, 0x2d62fd00, 0xb22c2cb2, 0x39e5392d, 0x2936db36, 0x028229a7, 0x36da363e, 0x2903e639, 0xc2fd9e02, 0x44080160, 0x32430f01,
0xc73131c7, 0xf2fe4332, 0x00f6fe43, 0x06220082, 0xf3823601, 0xf382ca20, 0x1e00142f, 0x32002a00, 0x52004600, 0x30050000, 0x05574423, 0x06141522,
0x1720cb82, 0x220f195d, 0x65072327, 0x0b500830, 0x03022107, 0x220e3f4f, 0x4e210302, 0xa33a0b70, 0x5a21016d, 0x18414268, 0x16791861, 0xac85165a,
0x292f2e2a, 0x3db603ac, 0x66423bfa, 0x4010340a, 0x4010c510, 0x6e6e79fd, 0x11481171, 0x040a2b0b, 0x820b2c0b, 0x706e2409, 0x4e68016f, 0x2008099c,
0x6c9e02f2, 0x145f485d, 0x2d2fbc2f, 0x2b5b2db5, 0x2b282e29, 0xb696fed5, 0xbf0170b6, 0x41fe6f6f, 0x06fd5070, 0x01590125, 0x4f4f014f, 0xfe240b55,
0x02b1feb1, 0x3007ae54, 0xa9000200, 0x57066300, 0x1d00a903, 0x00003300, 0x05d34125, 0x8d510620, 0x0eb64105, 0x50051621, 0x1949050d, 0x30400808,
0x30153033, 0x27a07603, 0x64041390, 0xc2189664, 0x17bc3335, 0x207f20a0, 0x20812002, 0x33be1796, 0xeb2d018a, 0x4f411c0a, 0x95500316, 0x63ccce41,
0xa720ed41, 0x330127a7, 0x26014f53, 0x34d03424, 0x24340282, 0xd74fdbfe, 0x720271d7, 0x1754461e, 0x47a14802, 0x00712bfd, 0x01e71e10, 0x01063481,
0x0502ff28, 0x001a05d8, 0x0025000f, 0x00560043, 0x537c0074, 0x5b4f11d3, 0x4e012033, 0xa6512ba1, 0x67022807, 0xfb01c76d, 0x4f417301, 0x82210770,
0x05824f6b, 0x27416b22, 0x2509794f, 0x16402727, 0x00820d16, 0x4016162c, 0x6b41d0fd, 0x4c29294c, 0x0787416b, 0x87412621, 0x2641341c, 0x17163f28,
0x0c0d0d0c, 0x023f1617, 0x01c86ced, 0x514c01fc, 0xfd3605cf, 0x2c2b2db7, 0x81555482, 0x2d2d2c2c, 0xa9812c2c, 0x2d2b2c82, 0xc04e1a61, 0x24252106,
0x2105c04e, 0xcd4e2524, 0x031a2406, 0x83572d01, 0x2d58232e, 0x2c82582d, 0x2b8a5720, 0x4e09c24f, 0x1a2205f9, 0x3352e801, 0x00073608, 0x06fdfe33,
0x000905c2, 0x0016000c, 0x0061003c, 0x009c0086, 0x19b95aa2, 0x510f8b61, 0x012014f4, 0x2106835a, 0x7f5a010b, 0x2c24a51a, 0x32161411, 0x33113536,
0x0e071411, 0x05934d02, 0x3e5b1120, 0x09012406, 0x4a2b2c57, 0x022a0828, 0x215e3aad, 0x21232321, 0xb2612f21, 0x0c1d5205, 0x0e390e39, 0xc3026920,
0x0b010501, 0x82081f08, 0x081f0782, 0x0104010b, 0x5a137862, 0x0729058b, 0x47120820, 0xfb627712, 0x202282c0, 0x261d820c, 0x1e088282, 0x83020c08,
0x49122222, 0x25338212, 0x07200808, 0x22824812, 0x38640133, 0x0c65388e, 0x7f58350c, 0x0c0c3657, 0xf4663602, 0x0fc15af8, 0x27b12008, 0xb6842a2b,
0x132b2a83, 0x4a252514, 0x39082008, 0xa1535e32, 0x3c365e53, 0x4a082109, 0x5aa8014f, 0xfe230592, 0x5a1001f0, 0x04211790, 0x0823a1ff, 0xfe9f0232,
0x4d4d514e, 0xfeb20151, 0x3232445e, 0x411f1f41, 0x01443232, 0x0261fda2, 0x5abbfd9f, 0x04000000, 0x02ff4d01, 0x1a05b305, 0x51001700, 0x9d008b00,
0x50059f52, 0xd54a09bb, 0x14aa5009, 0x4823414d, 0x7a4d0efe, 0x4e012029, 0x012110f1, 0x095a4685, 0x544b0138, 0x320c2a76, 0x2c2a240c, 0x17424036,
0x280a3b17, 0x3131610a, 0xd9481110, 0x330c2306, 0x53621a0c, 0x653b2906, 0x2010105d, 0x8bfd5a1f, 0x0d233284, 0x862b2b23, 0x0a272e32, 0x11313162,
0x36563c11, 0x2837384c, 0x2132890d, 0x3282643c, 0x5b1f1f2b, 0x310ce201, 0x7968020d, 0x230682db, 0xf2796703, 0x32069246, 0x0c343d0b, 0x162b0c2e,
0x27313916, 0x020b1718, 0x4d120207, 0x22250d5e, 0x2c171728, 0x0b5e4d2b, 0xb1620321, 0x7e012133, 0x2f0f3c48, 0x02000000, 0x5400cf00, 0xb8033106,
0x4a003400, 0x2010d94e, 0x05666a26, 0x4a08805c, 0x4052095e, 0x020e2207, 0x0d354301, 0x2e278708, 0x02113502, 0x34946a02, 0x2d0f3f0f, 0x50443635,
0x25493a52, 0x3d3d7b25, 0x446b4c2a, 0x3146465e, 0x5d21045b, 0x28284746, 0x4b442021, 0x4e29747e, 0x52f90170, 0x108551c5, 0xae764b11, 0x214b3b3b,
0x0f404d55, 0x1c360f3a, 0x313d481b, 0x06070e3a, 0x65393a17, 0x213e5938, 0x513e2121, 0x1d322a03, 0x1a34381c, 0x18100d1a, 0x613a6573, 0x54032544,
0x6c6bfcfd, 0x04026b6c, 0x435c11fe, 0x152b5744, 0x5c865816, 0xdb82ef01, 0x07732d10, 0xff0a393d, 0x05f60608, 0x000e0015, 0x002b0018, 0x00530049,
0x0063005d, 0x33300100, 0x2009505c, 0x067e5a2b, 0x012b2623, 0x2ce24c11, 0x3a146b5c, 0x21113311, 0xed760215, 0x25256841, 0x25252929, 0xeded4168,
0x4b5c5c4b, 0x5b49fe80, 0x013c3a98, 0x2a292ba7, 0x2a7ea77e, 0x5f602b29, 0x5f5b6b5b, 0xf70221fe, 0x5582572d, 0x2d578254, 0xa9200782, 0x61290682,
0x2519191b, 0x2f692f24, 0x07bf4c24, 0x825c0c88, 0xc0fd2e0e, 0xc2fd9f02, 0x00050061, 0x06ab0003, 0x0aa756fd, 0xa7565920, 0x4c052034, 0x082024bd,
0x6b11c056, 0xa4200dae, 0x2006c056, 0x05744c96, 0x4c830721, 0x61200774, 0x560f0067, 0xa73a2bd4, 0x13134c13, 0xeffe124b, 0x4a121101, 0x134a1312,
0x9e0263fe, 0x16279c27, 0x02821659, 0xfd220882, 0x00820062, 0x22000331, 0xde06ab00, 0x1b006103, 0x6c003300, 0x53130000, 0xe7561c41, 0x14114c15,
0x59012e21, 0xbc5c1052, 0x53d7200f, 0xdb28054d, 0x030c320c, 0x40017968, 0x200abc56, 0x2fb85c4c, 0x4b2a0221, 0x18240a21, 0x62fd0102, 0x6e09a14b,
0xb55c080f, 0x00250827, 0x7c010700, 0x840502ff, 0x37001a05, 0x68005b00, 0x9c007500, 0xd500a900, 0x30010000, 0x07010e21, 0x3e373633, 0x07886602,
0x0607012e, 0x2e272223, 0x27262701, 0x1e171637, 0x15791782, 0x06222205, 0x23148207, 0x2137013e, 0x663a5e66, 0x246b07bf, 0x011e220d, 0x17246b33,
0x82352121, 0x05296071, 0x22232624, 0x8383020e, 0x02233c82, 0x82171632, 0x06c97901, 0x3708c282, 0xfe260321, 0x020c03d7, 0x0d0d0b06, 0x2b1c2b20,
0x101f364b, 0x2c2d3d10, 0x23232d39, 0x10131434, 0x0d0e0c4f, 0x3b1c2b23, 0x2b3b4141, 0x3c0f1234, 0x0411040f, 0x69017c01, 0x37245d66, 0x17fe3b3b,
0x103c5837, 0x23232c11, 0x38902955, 0x22212d2e, 0x010c1716, 0x21097d6b, 0x7d6b221e, 0x41590806, 0xfe500341, 0x248f2339, 0x3a1b1b33, 0x1f291c32,
0x3f100614, 0x12120b10, 0x50664c38, 0x0f0e1c1b, 0x1e1d2d19, 0x1a691a20, 0x4e015201, 0x14289e27, 0x0c171010, 0x314e361c, 0x3d2a2a32, 0x0a0a1011,
0x18151621, 0x1110143e, 0x3a410d19, 0x21413a0b, 0x02090214, 0xfd3ef93e, 0x374e6657, 0x6bd10121, 0x262d0be6, 0x2e282827, 0x0101352d, 0x101b2314,
0x12e66b1d, 0x20683f08, 0x2a2e207f, 0x310c2e2a, 0x271c1138, 0x06190616, 0x2e1d1d20, 0x1b1a1e1b, 0x282b2524, 0x1c1c3e45, 0x175a171c, 0x06000000,
0x02ff7a01, 0x1a058605, 0x36002800, 0x92006c00, 0xca009f00, 0x40680000, 0x263f680c, 0x06212522, 0x24188342, 0x1e37013e, 0x06345f03, 0x22073869,
0x5e252113, 0x6b6d14a7, 0x35212219, 0x06886136, 0x201e4542, 0x05456852, 0x225a3935, 0x030d2c22, 0x0e0e0a04, 0x2b1f3026, 0x1e342424, 0x681e1111,
0x45080544, 0xec10103d, 0x3b41413b, 0x0342423a, 0x05d6fe34, 0x0d0b070c, 0x1d2a210c, 0x1f364a2b, 0x2d3e0f10, 0x222d392c, 0x14133523, 0x0d340e10,
0x2b221b0d, 0x40403c1c, 0x12342b3c, 0x070f3c0e, 0xfd7c0112, 0x3c583810, 0x23821110, 0x9029552c, 0x212e2d38, 0x0c171622, 0xc76d0303, 0x05cd5e07,
0x75414122, 0x25054942, 0x1b336b6b, 0x48423b1c, 0x400f2105, 0x2e074842, 0x0f0e1b1c, 0x1d1e2c19, 0x1a691b20, 0x68b35201, 0xf2222d30, 0x7542a449,
0x2a0a2414, 0x4221140a, 0x74230b76, 0x42b90101, 0x5f212d3b, 0x243a4260, 0x00060038, 0x0608ff39, 0x001505c7, 0x001c000f, 0x00320028, 0x007a0057,
0xd1580500, 0x13303407, 0x12163330, 0x27260317, 0x07062330, 0x33300730, 0x6e01012e, 0x99531553, 0x1325750f, 0x25147353, 0x011e1716, 0x88443317,
0x23113c05, 0x240a1e04, 0x2406e206, 0x82c9640a, 0xf1218721, 0x0b0c0b0a, 0x0bb13c0a, 0x6e9bfc29, 0x30080d30, 0x5d3bad02, 0x24242121, 0x2e2f2121,
0x3433553b, 0x114a0d1f, 0x4c44343f, 0x4335444c, 0x0e380e12, 0xc4026a1f, 0x0c010501, 0x82042109, 0x09220382, 0x3e0c820c, 0x37367862, 0x08052109,
0x52051718, 0xf8627715, 0x18187f23, 0x9f02237f, 0x7041fe70, 0x8231e001, 0x24d32400, 0x53a5018c, 0x07211d4e, 0x124d5329, 0x0952163f, 0x1001f0fe,
0x14165108, 0x63fe124b, 0x75769f02, 0x420e5d19, 0x2fb10b42, 0x000061fd, 0x08674107, 0x2000162c, 0x35002a00, 0x64003f00, 0x077f8700, 0x07062308,
0x1c6c3215, 0x710e2006, 0x362305a5, 0x7134013d, 0x01200ca3, 0x5613ff73, 0x9b760578, 0x2275411e, 0x98022208, 0x504e1001, 0x171d3437, 0x090a2218,
0x22392816, 0xa766d5fe, 0x25262625, 0x252197a7, 0xfd972125, 0x507d413b, 0x59a7013f, 0x05484154, 0x280b0b0c, 0x2b211c1c, 0x5a1c3347, 0x2c2c2b27,
0x28245727, 0x0123292b, 0x5185411d, 0x05000034, 0x02ff2701, 0x1a05d905, 0x34002a00, 0x71003c00, 0x14827d00, 0x24095973, 0x3233023e, 0x19717616,
0x5410e76a, 0x5e650e7b, 0x0d5d6508, 0x5b0d7c5d, 0x02210a0c, 0x1f8676f4, 0x3c730226, 0xe56f3afb, 0x2607ed6b, 0x10c61140, 0x76b6fd40, 0x5d6b12ea,
0x5e642613, 0x015a3f21, 0x09d3542e, 0x96768c20, 0x2d592107, 0x2e089676, 0x10080865, 0x341f2f10, 0xb69bfe5d, 0x5b9e02b6, 0x4e200b34, 0x220a5154,
0x76020b2f, 0x82540ef3, 0x515c2509, 0x1d374d2f, 0x3d09fd6f, 0x01020000, 0x0516ffce, 0x000e0432, 0x003b0021, 0x23300500, 0x35262722, 0x012e3530,
0x08822627, 0x2f05b042, 0x17161732, 0x1415011e, 0x33150702, 0x013e3227, 0x22059874, 0x6f23022e, 0x28080843, 0x7004021e, 0x2728558e, 0x2f2f8855,
0x383e191b, 0xc4505039, 0x38395050, 0x9aa0bb3e, 0x44603af0, 0x12131312, 0x3b3a6044, 0x3109855f, 0x2b2cea5f, 0x4d0b4c49, 0x5c5b4141, 0x42c27f73,
0x00822241, 0xc2424134, 0xfcfee17f, 0x28f2671c, 0x4537374c, 0x3737459e, 0x0a8a284c, 0x00030029, 0x06b70013, 0x825603ed, 0x003d2207, 0x05616751,
0x5f610320, 0x06944b0f, 0x03300322, 0x23075358, 0x11302330, 0x230f2b6c, 0x21302311, 0x35220182, 0x05840130, 0x30212308, 0x07020615, 0xcfe33021,
0x175d1772, 0x175b170d, 0x228a2270, 0x05010903, 0x1e080c01, 0x08828208, 0x9744071f, 0x49123605, 0x08200712, 0x081f0808, 0x77124812, 0xfe9a0262,
0xfe410141, 0x067662ce, 0x0301b732, 0xc8329b01, 0x32c83131, 0x45eefe44, 0x9d01fdfe, 0x6221874b, 0x0028097d, 0x4c000400, 0xb406ab00, 0x1426e382,
0x28001e00, 0xe5835f00, 0x421ddb5d, 0x112107a6, 0x32994a01, 0xe45db920, 0x60192106, 0x2408e45d, 0x02ac2a2e, 0x07566813, 0xfe580327, 0x030c03d7,
0x23244a07, 0x4a0e1321, 0xb7200624, 0x270eec5d, 0x2b292e28, 0x0296fed5, 0x2a065a68, 0x279e2840, 0x17101014, 0x49351d0c, 0x11210fc5, 0x0ec54910,
0x00820020, 0x73010430, 0x8d0502ff, 0x4c001a05, 0xb4007d00, 0x1772e000, 0x4a172017, 0x072106e2, 0x22018406, 0x4a011e15, 0x0d8405f2, 0x22230622,
0x21051157, 0x17823727, 0x4b0c2272, 0x27210a32, 0x06596b26, 0x2306364b, 0x32363701, 0x54855586, 0x07010e23, 0x33684121, 0x648a0120, 0x211d5149,
0x92675002, 0x28620811, 0x101d1d28, 0x120a0a11, 0x1a171812, 0x1313331d, 0x11110b0b, 0x2c2c1f20, 0x24232f36, 0x15141c1b, 0x1c0d4f0f, 0x1d2d1211,
0x4045423d, 0xfe800347, 0x238f2439, 0x1d1b1c33, 0x2a1b321e, 0x0a0b0f0f, 0x0f401005, 0x3713110b, 0x51662626, 0x0e0e1c1b, 0x1d161619, 0x691a201e,
0xfd52011b, 0x03d6fea7, 0x9349030b, 0x1e373508, 0x2c3e100f, 0x222d392d, 0x14143423, 0x0d0d4e0f, 0x1b2c220e, 0x21069249, 0x074c3b0f, 0x50022405,
0x4b2438fe, 0x2a2107b3, 0x08b34b1e, 0x5e854b20, 0xb34b1820, 0x10357208, 0x0b0c2708, 0x1f211617, 0x191a2029, 0x0d0c1414, 0x1a060406, 0x1c1d1415,
0x24242c25, 0x0e0e191a, 0x11110a0a, 0x3e171615, 0x3d722214, 0x4b752009, 0x1c260961, 0x0e0e111c, 0x644b1314, 0x0e0d2107, 0x2305654b, 0x1f1f4429,
0x2105664b, 0x224c4605, 0x4b62202b, 0x042028bb, 0x2806274f, 0x000f0056, 0x0337002e, 0x135b5e8f, 0x26243f6f, 0x27022605, 0x18011d33, 0x18223546,
0xc9158a45, 0xa65fa638, 0x4a461826, 0x18152019, 0x22153d46, 0x183d3701, 0x94147745, 0xb3451814, 0xa6119111, 0xcc26a638, 0x3335215f, 0x103f4618,
0x663a0128, 0x01c901b2, 0xf6706b06, 0x27282105, 0x2312f670, 0x5f18eb01, 0x4f034618, 0x0e03012d, 0x0e040c04, 0x0e380e04, 0x82390e7c, 0x04461807,
0x64012852, 0x7a186219, 0x820f390f, 0x040b3a6b, 0x3d0f030e, 0xfdfc020f, 0x594502bb, 0x42b0fd59, 0x3d3c7f42, 0x2f38373c, 0x077a7130, 0x71343021,
0x4a200a7a, 0x03da4510, 0x00002f55, 0x47000500, 0xb906ab00, 0x1e006103, 0x0b822f00, 0x70005828, 0x0e010000, 0xd76c0701, 0x05c67a0a, 0x14823320,
0x7b06d96c, 0x0520243e, 0x013925a4, 0x103d0f10, 0x10046c6c, 0x791e1040, 0x9f287e1e, 0x2bad2b28, 0x02882283, 0x18d27a63, 0x07060627, 0x0231100f,
0x08209e52, 0x12f00122, 0x02cf1246, 0x15acfe9e, 0x91251451, 0x2fbc2f24, 0x41fefe41, 0xf0fed134, 0x4040592e, 0x41405253, 0x3506797a, 0x2b49341b,
0x34482c76, 0x24341b1b, 0x2b762c24, 0x1a1b2325, 0x24a35c1b, 0x06000022, 0x3a08934e, 0x0042002f, 0x008d0063, 0x00a00098, 0x21300500, 0x37303530,
0x35363736, 0x49343530, 0x362a0adb, 0x32013e37, 0x1617011e, 0x814a1415, 0x0e072505, 0x05210701, 0x21052a56, 0x1d823435, 0x7c363721, 0x3d830693,
0x2105554d, 0x01822726, 0x2f852220, 0x2305dd75, 0x01161716, 0x08514218, 0x2022f74e, 0x0cf27912, 0xfe450324, 0x1153d639, 0x055a5509, 0x4c1c1c2c,
0x0e375066, 0x160c0d0f, 0x13531d17, 0x49012606, 0x3c2e2e3f, 0x0800820e, 0x2e2e3c23, 0x76767c3f, 0x1819227c, 0x06070f10, 0x100f0706, 0x18451918,
0x06100f19, 0x10060707, 0xfe18190f, 0x200e4f89, 0xfb3d7426, 0x72726e3a, 0x2c0c0f4f, 0x2ebf68f2, 0x0c2f292a, 0x1d113831, 0x06c34926, 0x1b17172a,
0x2524351e, 0x2223282b, 0x2207c349, 0x7c181767, 0x1733072e, 0xb8feb718, 0x0e0e5cb6, 0x24231a1a, 0x242c752d, 0x821a1a24, 0x1a0e29a1, 0x2c24231b,
0x23242d75, 0x03210e83, 0x1f2d4f77, 0x014f0123, 0x0a2f4f4f, 0x00002008, 0x0b010600, 0xf50568fe, 0x1f000f05, 0x41003900, 0x55004b00, 0x00006f00,
0x22233001, 0x4e013d26, 0x062014fd, 0x671afd4e, 0x012007f6, 0x20128777, 0x65411805, 0x112e080d, 0x13331123, 0x33373633, 0xe5022311, 0x3835395f,
0x11201f5b, 0x25262a12, 0x36823536, 0x29262635, 0xa1676b7c, 0x0d2d4027, 0x2d0d0c0c, 0x09822740, 0x0d0d0c2d, 0x02402d0c, 0x01c76ded, 0x793bfbfb,
0x042b0cff, 0x23090515, 0x18621909, 0x82196218, 0x67053908, 0x5a06b480, 0xfe677b59, 0x32313a68, 0x2b2b3407, 0x554c3e3d, 0x172b2c81, 0x2b3d0082,
0x9655812c, 0xa24513ad, 0x2525331a, 0x252e6a2d, 0x1b1b3324, 0x2e252433, 0x25252d6a, 0x08ec6733, 0x76240121, 0x292d09e2, 0x3e2b282e, 0x2c124912,
0xb32d2db3, 0x3908822c, 0x9e02fffd, 0xaaababfe, 0x000062fd, 0x85000200, 0x7b065400, 0x3400b803, 0x7f644d00, 0x131a4135, 0x33133d08, 0xb7012311,
0x10359469, 0x362c103e, 0x51514435, 0x25264939, 0x2a3e3d7a, 0x5f436c4c, 0x5b314546, 0x465d2103, 0x20272848, 0x7e4a4421, 0x714e2975, 0x0b06fa03,
0x81130b2c, 0x13812423, 0x06270882, 0x07e1a182, 0x64829ae0, 0x022a2d8c, 0x175a178f, 0x4040ec22, 0x088222ec, 0x037ffd38, 0x0156fe46, 0x00bafcaa,
0xb5000300, 0x4b066300, 0x0b00a903, 0xad7b1500, 0x01092119, 0x3c11d576, 0x746801b6, 0xe1747f7f, 0x393934d8, 0x5a03d834, 0x178cedfe, 0x370a1758,
0x380f050f, 0x3409820a, 0x2eba2e88, 0x89460363, 0xb2fe89e6, 0x3236c501, 0xfd36323a, 0x05a17631, 0x37c82522, 0x200aa176, 0x50008200, 0x6120071b,
0x2006bf45, 0x46bd457e, 0x0834ce4e, 0x3d101521, 0x036d6d0f, 0x1f104010, 0x287f1e78, 0xac2b27a0, 0x8722832b, 0x5c3f6302, 0x0e0e0f3b, 0x445c3b0f,
0x31280543, 0x1f0d0d1f, 0x1f314531, 0x22053b44, 0x501a0331, 0xdf453250, 0xef01213e, 0x3a2c7150, 0xff5b0105, 0x05a50502, 0x0034001a, 0x0048003e,
0x00a20081, 0x26220500, 0x79373627, 0x3f54079f, 0x07022510, 0x2223012e, 0x180f3f54, 0x8914654b, 0x29016945, 0x570d5976, 0x162a0eb1, 0x02010e17,
0x2a765550, 0xc77f2625, 0x1a0b2314, 0xc87f091e, 0x2d01210d, 0x35054544, 0x2e2aacb3, 0xfeac2a2e, 0x2b76542c, 0x2a242526, 0x4240372b, 0x40691618,
0x190d2111, 0x760e4069, 0x21080574, 0x41692425, 0x2d227558, 0x3b48112e, 0x4e58584e, 0x0a134b3d, 0xfd79224d, 0x2323343d, 0x3916162b, 0x8c542731,
0x160a230e, 0x8d54081b, 0xbf4b1812, 0x2e292507, 0x18012b28, 0x50693d89, 0xb12a0826, 0x404055a9, 0x4d2d2c2d, 0x3019194b, 0x665d6a39, 0x313e695d,
0x52492f06, 0x04000000, 0xb7002e00, 0x5603d206, 0x27000f00, 0x41183600, 0xd55e15e7, 0x61132015, 0x6225182d, 0xfc01c86c, 0x09ad5570, 0x40ed832b,
0x28252569, 0x69252528, 0x05f66040, 0x41188120, 0x022009e8, 0x2705bb70, 0x2a2a9e02, 0x7da87d2a, 0x60270582, 0x5b6c5b5e, 0x8222fe5e, 0x06002d9e,
0x02ff4b01, 0x1a05b505, 0x1e001500, 0x4930ab82, 0xd8016e00, 0x30050000, 0x30213035, 0x37123635, 0x2e053d74, 0x30233015, 0x30253015, 0x30113033,
0x5e010e23, 0x3e200714, 0x08d34418, 0x3d480120, 0x012e2307, 0x197e0622, 0x021e2407, 0x6a262201, 0x816d0800, 0x06072206, 0x8146181d, 0x33352b0e,
0x010f2311, 0x150e0f15, 0x05840d0f, 0x0b910882, 0x012e0527, 0x3f353727, 0x2002840b, 0x8805840a, 0x9306200b, 0x33073c17, 0x02153311, 0x2dc9fea1,
0x5c8e2db5, 0xdbbffe5c, 0x028e2307, 0x3c5c3eaf, 0x181d0f0e, 0x2009bd44, 0x26008207, 0x45310f0f, 0x820f1031, 0x1f073909, 0x83eefd31, 0x68492796,
0x3b3b5841, 0x103c0f21, 0x4d3b4811, 0x2c2d2d2c, 0x0ad84918, 0x08bc2f22, 0x2e3b4c18, 0x0b222eeb, 0x6ed20b2c, 0x53d20220, 0xa6010124, 0x4a18f2a3,
0xfe290ea5, 0x40582fe2, 0x83515241, 0xaa451858, 0x25243b07, 0x252b752c, 0x1c1a1a24, 0x241a1a1c, 0x2c752b25, 0x1c332425, 0xa9b10603, 0x48188055,
0x342c0f61, 0x2309313e, 0x29294909, 0xf5015a0b, 0x54d0b1d4, 0x0a280a22, 0x508953d0, 0x8655b641, 0xbcfd235f, 0x0082005a, 0x00023508, 0x065f025c,
0x007105a4, 0x001b0003, 0x15211300, 0x37270121, 0x15333517, 0x33071737, 0x07172315, 0x35231527, 0x23372707, 0x48065c35, 0xc204b8f9, 0x3c8c2a8c,
0xc6210382, 0x240887c6, 0x0246a502, 0x84118c22, 0x0000261a, 0xff5c0001, 0x225b8225, 0x821400d6, 0x32380859, 0x053e012c, 0x2e341135, 0x23022c03,
0x34019d5c, 0xc7f60501, 0x2e5b7fad, 0xccaa6f3c, 0xe5fef8fe, 0x02ada9fe, 0x725633a5, 0x667a837e, 0x4ff90e47, 0x907d5b15, 0x3e688691, 0x0124478d,
0x2e012c22, 0x3e204783, 0x33274782, 0xfe9da406, 0x89fbfecc, 0x08012548, 0x57011b01, 0xef824896, 0x2a000532, 0xd60638ff, 0x04009405, 0x44004000,
0x08014b00, 0x302b9b82, 0x04210721, 0x07030e22, 0x5707040e, 0x352e06eb, 0x32333634, 0x32041e17, 0x3e37033e, 0x0c833704, 0x16171624, 0x1e831415,
0x03032e39, 0x01211521, 0x25052315, 0x34253523, 0x3233023e, 0x32361716, 0x8217031e, 0x06142126, 0x36210583, 0x25058332, 0x37013e17, 0x4782033e,
0x40843620, 0x1e222883, 0x0c863101, 0x33231784, 0x83021e32, 0x215b8529, 0x61851415, 0x2e272629, 0x35343501, 0x8327022e, 0x010e2e6e, 0x0e272223,
0x22060701, 0x0e070627, 0x830c8603, 0x82022006, 0x83b0840e, 0x21038626, 0xba82022e, 0x34273b08, 0x0e35010e, 0x27262701, 0x35161726, 0x37062734,
0x23363734, 0x015c2622, 0x62fe46e4, 0x6154e004, 0x0f2f4f50, 0x403c1507, 0x4b522c5b, 0x354da793, 0x1b151d08, 0x4f2f0f0f, 0x1b9a6150, 0x01ddd408,
0xfe62fee4, 0x00019610, 0xfc960001, 0x240e047a, 0x0b1b131a, 0x0c171f0e, 0x11020208, 0x0211151b, 0x38040706, 0x1010072e, 0x10020c0e, 0x0c060308,
0x090a0c13, 0x39530b06, 0x2c040d13, 0x180c1128, 0x0c2f411e, 0x040d151d, 0x13241a0e, 0x1e271420, 0x0a11140c, 0x2f090909, 0x012c2149, 0x0f121a13,
0x06100418, 0x1425210f, 0x192a100f, 0x2410171c, 0x0d210912, 0x1a132e0e, 0x0718133b, 0x380d0607, 0x1b0e2909, 0x0d111a14, 0x07122f34, 0x11191008,
0x10160b0a, 0x171c1010, 0x0c22180f, 0x1108221a, 0x01030d16, 0x27061716, 0x01021a03, 0x03011008, 0x07080201, 0xb9021a12, 0x422fbb6e, 0x09173c52,
0x4b424a1d, 0x4ea72d18, 0x150f0d4d, 0x3c17161d, 0x972f4252, 0x01900818, 0x25016e58, 0xfaf0f0fa, 0x291d0da0, 0x071b151a, 0x111d110e, 0x3a26170e,
0x0d0c020b, 0x37050507, 0x100b0910, 0x0c080409, 0x41040d67, 0x373b1f27, 0x070e1860, 0x17121d11, 0x0f150926, 0x43520110, 0x12043804, 0x08340105,
0x0c101711, 0x030b122d, 0x423e0804, 0x1d2f070b, 0x450b2411, 0x1c141110, 0x0e1d0f33, 0x4d0a5d09, 0x0c18180c, 0x17022d41, 0x08172116, 0x1b0c1105,
0x05222614, 0x0319220e, 0x0c020717, 0x0502030c, 0x02041102, 0x01040202, 0x02240382, 0x00171a07, 0x0807b343, 0x0b004925, 0x00000f00, 0x15331501,
0x35231523, 0x35333523, 0x21152101, 0xb4b49805, 0xfbb4b464, 0xf9480628, 0x834905b8, 0xb464380b, 0x00465cfd, 0xff530005, 0x058c063e, 0x000600a7,
0x002c0028, 0x82370030, 0x3311293d, 0x1133010b, 0x27072327, 0x03200183, 0x0b260584, 0x021b3502, 0x01821737, 0x05841320, 0x21331729, 0x022b1533,
0x85373335, 0x042e082d, 0xcecea0a1, 0x4ac936a0, 0x2f303f33, 0x373a3a3f, 0x36103119, 0x37272737, 0x19311036, 0x3f3a3a37, 0x333f302f, 0xf201c94a,
0x73bc8a8a, 0x2c838873, 0x08024708, 0x2201b001, 0x50fedefe, 0xa93ed63a, 0xfee3cd72, 0x6a8b54fc, 0xd4fe92df, 0xeb010401, 0x01eb0189, 0xb7affe04,
0x548b6adf, 0xcde3fcfe, 0xd63ea972, 0xfe3a6161, 0x01defe50, 0x00b00122, 0x5c000300, 0xa40637ff, 0xbb82e005, 0x3b000d22, 0x2326b783, 0x11230109,
0x06841103, 0x012f0122, 0x0585bf85, 0x0f840f20, 0x1f020f22, 0x3f23c482, 0x85011f01, 0x280586c4, 0x01c83403, 0xc8140114, 0x3d068598, 0x7238d802,
0x484b604e, 0x545a5a60, 0x54184b27, 0x4b394b45, 0x39155a36, 0x15392525, 0x0c82365a, 0x18544531, 0x5a54274b, 0x4b48605a, 0x01724e60, 0x84fcfe5d,
0x02042294, 0x83b9825d, 0xfc3008d1, 0x381bc8fe, 0x512d4204, 0x37216659, 0x8448582a, 0x4b645a70, 0x438f523b, 0x8f4a656c, 0x644b3b52, 0x4884705a,
0x21372a58, 0x2d515966, 0x00380442, 0x023b0082, 0x22ff4b00, 0xd005b506, 0x2a000900, 0x15050000, 0x2115012d, 0x35010d35, 0x8b171301, 0x8d3f20ad,
0x070324d9, 0x836d0103, 0x2604227e, 0x087a8201, 0x4ed3fa26, 0x621f6d6e, 0x75756d32, 0x7d615e7d, 0x49499466, 0x617d6694, 0x75757d5e, 0x1f62326d,
0x3e4e6e6d, 0xa0cecea0, 0x33080383, 0x7efe5403, 0xb073eccd, 0xcc426e54, 0x8459a1b2, 0x35369931, 0x59843199, 0x42ccb2a1, 0x90b0546e, 0xfecd0901,
0x0200007e, 0x6aff5e00, 0x7b05a206, 0x1f000b00, 0x300e5b42, 0x27032703, 0x1127020b, 0x37021b37, 0x21133713, 0x06694215, 0x87c7fe21, 0x21868774,
0x7742a702, 0xf0fc3307, 0xfe629dfe, 0xbefeb2f7, 0x67fe6501, 0x84070584, 0x098267fe, 0xfeb2be2f, 0x9dfe62f7, 0x00030074, 0x063eff53, 0x069342af,
0x00002f2c, 0x0d352113, 0x03213501, 0x07412115, 0x05804205, 0x35021b22, 0xa0427982, 0x03072109, 0xcb202685, 0x22075442, 0x42450355, 0x3b21068c,
0x0b8c4236, 0x423b3621, 0x9620068c, 0x28074b42, 0xcea00304, 0xfcfea0ce, 0x26864261, 0x839bfe21, 0x8200202f, 0x00042800, 0x065effc8, 0x82a60538,
0x000f2bb5, 0x001f001b, 0x21352500, 0x7f430315, 0x2e0b8b0b, 0x04112311, 0xb4cc016c, 0xb464b4b4, 0x84c0fcb4, 0x31022706, 0x6464a05a, 0x95439c04,
0x5cfe2105, 0x02250785, 0x06b8f90e, 0x21628248, 0x8f470100, 0xa5022105, 0x002c6382, 0x21152113, 0xf948065c, 0x46a502b8, 0x053a1c82, 0x08ff5601,
0x1505aa05, 0x39000f00, 0x65004500, 0x00008f00, 0x11333505, 0x715e0623, 0x11332a05, 0x14011533, 0x07020e07, 0x058b5523, 0x82012e21, 0x020e211a,
0x12525018, 0x50180420, 0xe84b0a86, 0x0d146308, 0x1e373628, 0x07061701, 0xce672506, 0x2726210f, 0x3210136a, 0x15210706, 0x07bc9c01, 0x2c0b3765,
0xa56e3d0b, 0x671c02a3, 0x382c05da, 0x2d22215b, 0x0104020d, 0x250e0f0a, 0x12205018, 0x75d9fe32, 0x41754242, 0x958456fe, 0x41694926, 0x5b227657,
0x1806104e, 0x0808aa52, 0xfee2025f, 0x3307cf39, 0x323b1b1c, 0x151e2a1b, 0x0a332c05, 0x4c371312, 0x1b1c5066, 0x2c190e0f, 0x4f201e1d, 0xf852014f,
0x6bf5015b, 0x0a270a3b, 0xbcfd7743, 0x49a5015b, 0x556b4140, 0x284d2a1b, 0x01365929, 0x12121401, 0x0e0f101a, 0x31304c37, 0x1e1e2a2b, 0x44131221,
0x3e923030, 0x3f3c0e3c, 0x3104823f, 0xa9b2ca01, 0x2d588154, 0x2f314b4d, 0x655d6a39, 0x8b4a6a5d, 0xb8682f08, 0x2a292f07, 0x38310c2e, 0x16271d10,
0x9f691411, 0x1d1b390d, 0x5c43441c, 0x04000000, 0x08ff2e01, 0x1505c705, 0x35001300, 0x86004d00, 0x23130379, 0x30013011, 0x2310b552, 0x13303330,
0x11220386, 0x21822330, 0x6d15514e, 0x01213727, 0x088e612e, 0x0905c437, 0x62180923, 0x18621819, 0x05082409, 0x06b38168, 0xfc687bb4, 0x3b3a6d2b,
0x9f02f832, 0xfe60bb60, 0x120102dc, 0xb32d1248, 0x2db32c2c, 0xfd2b0882, 0xfe9f02ff, 0xfd5501ab, 0x84620361, 0x61c32220, 0xc441180b, 0x7817200a,
0x450805ec, 0x242c515c, 0x1a1b3124, 0x2d0b321b, 0x2e28220b, 0x15152a2c, 0x5c130d0a, 0x27262f51, 0x001e1b1b, 0x006b0001, 0x049506d3, 0x00440031,
0x16320100, 0x0e071415, 0x23060702, 0x27052e22, 0x23262726, 0x07060722, 0x1083010e, 0x35264508, 0x37363734, 0x3233063e, 0x1617051e, 0x32331617,
0x3f013e37, 0x06023e01, 0x072a1e4c, 0x3266240b, 0x522a6e72, 0x362f4442, 0x2149131b, 0x43305d70, 0x10125946, 0x1e14110d, 0x0a04122a, 0x30381c14,
0x264d4043, 0x3108218b, 0x572a4832, 0x0b031615, 0x2aca021f, 0x160f111e, 0x72329341, 0x39472a1e, 0x84242e55, 0x4643a831, 0x08151e98, 0x1c1e2a0a,
0x22110614, 0x443a522e, 0x1d891d2a, 0x7c2a4828, 0x0e072828, 0x00820013, 0x1e00033e, 0xce0649ff, 0x0b00cc05, 0x4e002b00, 0x14040000, 0x22212306,
0x33363426, 0x22253221, 0x0127b883, 0x3233013e, 0x82210117, 0x82e28203, 0x012729de, 0x09272221, 0x13010e01, 0x0620f384, 0x1582e682, 0x82012f21,
0x3336252c, 0x03011f32, 0x17210885, 0x08e48213, 0x1d0b0238, 0x159ffe15, 0x01151d1d, 0x8afe1561, 0x01021d15, 0x111a0561, 0x82010f19, 0x0f1c8c01,
0x1d078d01, 0xfe0f1c15, 0x1977fe82, 0xfeaafe0f, 0x9a1a05bc, 0x011a0f0a, 0x54820301, 0x05055408, 0x0a0f0fd2, 0xa38b0505, 0x0e0a0f03, 0x0111a408,
0x1d2a700e, 0x5d1d2a1d, 0x0707151d, 0x1410a604, 0x18effd15, 0x0e0c80fd, 0x02181d15, 0xd4011568, 0x1410bbfb, 0x0a0f4a05, 0x0403e101, 0x02040407,
0x0a10075b, 0x013d020f, 0x0a070615, 0xe9fe0c0f, 0x840d0995, 0x844620f3, 0x841420f3, 0xad5020f3, 0x830120f3, 0x010f22f3, 0x24e98225, 0x07141516,
0x06734b05, 0x30012f25, 0x82272623, 0x363726f8, 0x0336013f, 0x20f5829c, 0x23f5846f, 0xf9fc1591, 0x033ef5a2, 0x040f0a52, 0x042d0148, 0x110f0a04,
0x0d89c7fe, 0x05070a0f, 0x030501ba, 0x02010104, 0xf7a3076c, 0x0b0e033d, 0x68790607, 0x120b0e01, 0x074d6d05, 0x030f0a0f, 0x06050369, 0x02040408,
0x8a0cb403, 0x84b020f7, 0xae5220f7, 0x363421f7, 0x1322f982, 0x06833736, 0x06071424, 0x04822707, 0x83222321, 0x262722f4, 0x06f14131, 0x05171623,
0x20f98241, 0x23f9845b, 0x54fb15a5, 0xb32ef9a3, 0x010f140f, 0x1408068d, 0x2196050f, 0xf1831202, 0x0607092b, 0x0f056b4f, 0x5a070d0a, 0x08faa337,
0x0f0a8d29, 0x54fe0a0f, 0x0f0806bd, 0xc706090a, 0x0513052d, 0x06060101, 0x0906916a, 0x790a0f0a, 0x0300004a, 0x49ff4600, 0x4105e206, 0xec4135f3,
0x07022206, 0x21098537, 0x854d010f, 0x23342105, 0x2406eb42, 0x0636011f, 0x20f982ce, 0x23f98473, 0xc7f9158d, 0x053ef9a2, 0x0a1206e6, 0x285f010f,
0x0a0707a3, 0x07e00b0f, 0x07060708, 0x02620103, 0x06110a0f, 0xf8a22a4c, 0x9e045108, 0x040a0f11, 0x74e2fe04, 0x0a0f046b, 0x0493070e, 0x01070404,
0x05040d01, 0xcc110f0a, 0x0000007d, 0xff7d0002, 0x0583067c, 0x000600b6, 0x01000012, 0x010b3711, 0x14001117, 0x01272206, 0x32363426, 0xcc050117,
0xb7e2e2b7, 0x3e2c0d01, 0x1690fa16, 0x05350582, 0xfeb60570, 0xdffe469a, 0x01462101, 0x3e31fa66, 0x7005162c, 0x21058216, 0x4f8d90fa, 0x4f881f20,
0x06140129, 0x2c312223, 0x41002701, 0x1626060f, 0x00011217, 0x5c891e05, 0xfe011f38, 0xbd14fedd, 0x017588fe, 0x291c1f2c, 0x57016c05, 0x12025201,
0x6b8c2b1f, 0x2c1f1238, 0x01bdc605, 0x06ae0278, 0x242c1f07, 0xfe82fd1b, 0x0aaefea9, 0xc7842c01, 0xc7825f20, 0xc7858320, 0x07110534, 0x1127011b,
0x34262224, 0x32360137, 0x01071416, 0xc7837605, 0x8a1bfb21, 0x01a02bae, 0x21014666, 0xfe46dffe, 0xd8841d9a, 0xc583de83, 0x4f87c785, 0x00002f22,
0xf0444f86, 0x37362605, 0x3637063e, 0x06e24324, 0x06070626, 0x07020e04, 0x06220282, 0x65860e07, 0xfcfa2808, 0x31062c1f, 0x3f232253, 0x4938402a,
0xb6019227, 0x04034c01, 0x1d272c1f, 0xd0e2feb6, 0x1f3472a3, 0x532b2f46, 0x8c260833, 0x1f240881, 0xd7760e0f, 0x5699595a, 0x275d557b, 0x0120a892,
0x2b1d1f2c, 0x5c431203, 0x3b649586, 0xd96f789f, 0x00191578, 0x04340082, 0x44ff4600, 0xb405ce06, 0x0e000d00, 0x30002000, 0x33010000, 0x270a7d45,
0x03253123, 0x23010e01, 0x280a9d45, 0x16320109, 0x01071415, 0x23148606, 0x64ab0436, 0x280a5d45, 0xef6ffe87, 0x1a05bcfe, 0x0a954211, 0x31021529,
0xfc0c2c1f, 0x82291649, 0xb7032406, 0x45ee0216, 0xa126094a, 0xbbfb4801, 0x66451410, 0x84fe2a08, 0x1f2c3002, 0x27fa1216, 0x22068323, 0x8223d905,
0x010025a6, 0x09004600, 0x1425a782, 0x00001f00, 0x1e2b4637, 0x10437820, 0x450a2022, 0x00201bd7, 0x13286f82, 0xed0654ff, 0x3f00ae05, 0x32267e82,
0x011b1617, 0x03881737, 0x03170226, 0x27032707, 0x0b230482, 0x83270701, 0x03342503, 0x07300706, 0x2c081086, 0x37133703, 0x17013f30, 0x1a323713,
0x02013f01, 0x0239018b, 0x39393242, 0x39392c72, 0x3939173f, 0x7045278c, 0x4c393984, 0x39391f2f, 0x2413825e, 0x39393f6b, 0x20408246, 0x080e828c,
0x39394824, 0x07247154, 0x55393958, 0x221a013d, 0xae05380a, 0x4bfd0239, 0x38384702, 0x8d010bfd, 0x61fe3838, 0x05825303, 0xcbfe2026, 0xfb0d5602,
0x032a3282, 0x85fb9760, 0x65023939, 0x05826ffe, 0x24fdc831, 0x02083939, 0x6d5a37da, 0x3939cffd, 0x82fc6d03, 0xa005314a, 0x649efd06, 0xfc3838ec,
0x9a01f5e3, 0x380b9f01, 0xe382d482, 0xffa02008, 0x056006ce, 0x00070032, 0x15212500, 0x35231121, 0x04940133, 0x7cbcfacc, 0x047846f4, 0x920078ec,
0x35212c23, 0x044c0221, 0xfe74fb14, 0x86ac01cc, 0x29279625, 0x5c030403, 0x14fe2cfc, 0x279e6402, 0xa402bc28, 0x5cfde4fc, 0x279d1c03, 0x01740429,
0xfc9cfdec, 0x9dd403a4, 0x2c052927, 0x54fe3401, 0x8c04ecfb, 0x33232796, 0x82112315, 0xe40527c7, 0x34fbf47c, 0xeb884405, 0xceff6428, 0x32059c06,
0xd0821f00, 0x15163226, 0x01011930, 0x42058445, 0x112006ed, 0x2c09f442, 0x23198003, 0x16117d02, 0xfd152319, 0x21068320, 0x0c8483fd, 0x11e00233,
0x19233205, 0xcafdccfd, 0x230e2202, 0xfd121c19, 0x2306828a, 0xdefd6a04, 0x02220d84, 0x7b410e76, 0x00642805, 0x049c063b, 0x851a00c4, 0x8214206b,
0x27222262, 0x37608709, 0x32360130, 0x36010917, 0x23196006, 0x1290fe0b, 0x51fd123e, 0x1f12c1fe, 0x01210d82, 0x330d8270, 0x3f01af02, 0x23bc0212,
0xfd101319, 0x031919f8, 0x193dfecb, 0x02280c83, 0xfc191908, 0x19c30135, 0x00256483, 0x00ae000e, 0x83098401, 0x86022004, 0x0001220b, 0x85e1820d,
0x00022417, 0x863d0007, 0x00032417, 0x86930026, 0x8204200b, 0x86d62023, 0x0005240b, 0x8604010f, 0x00062b0b, 0x002e010c, 0x04010003, 0x00850009,
0x01200b85, 0x0320c782, 0x02201786, 0x2d207782, 0x03240b86, 0x45004c00, 0x04200b86, 0xba202382, 0x05240b86, 0xe4001e00, 0x06240b86, 0x14011800,
0x46304c83, 0x72007500, 0x61006e00, 0x65006300, 0x49002000, 0x6f200782, 0x732e0f82, 0x75460000, 0x63616e72, 0x63492065, 0x0e826e6f, 0x1f825220,
0x2d826720, 0x2b826c20, 0x00007228, 0x75676552, 0x0882616c, 0x83004621, 0x0074212f, 0x72220783, 0x45846700, 0x49823a20, 0x20215999, 0x281f8300,
0x00380032, 0x0031002d, 0x20058230, 0x22058232, 0x82330032, 0x6e6f2a73, 0x726f4674, 0x3a206567, 0x827f8c20, 0x3832280f, 0x2d30312d, 0x83323032,
0x20b6a827, 0x24908256, 0x00730072, 0x20a68469, 0x20688220, 0x20748230, 0x3007842e, 0x56000030, 0x69737265, 0x30206e6f, 0x302e3130, 0x8d108230,
0x110e41b6, 0x24060d41, 0x02000000, 0x20008b00, 0x840c8b01, 0x8262200b, 0x01c80805, 0x03000200, 0x03010201, 0x05010401, 0x07010601, 0x09010801,
0x0b010a01, 0x0d010c01, 0x0f010e01, 0x11011001, 0x13011201, 0x15011401, 0x17011601, 0x19011801, 0x1b011a01, 0x1d011c01, 0x1f011e01, 0x21012001,
0x23012201, 0x25012401, 0x27012601, 0x29012801, 0x2b012a01, 0x2d012c01, 0x2f012e01, 0x31013001, 0x33013201, 0x35013401, 0x37013601, 0x39013801,
0x3b013a01, 0x3d013c01, 0x3f013e01, 0x41014001, 0x43014201, 0x45014401, 0x47014601, 0x49014801, 0x4b014a01, 0x4d014c01, 0x4f014e01, 0x51015001,
0x53015201, 0x55015401, 0x57015601, 0x59015801, 0x5b015a01, 0x5d015c01, 0x5f015e01, 0x696e7507, 0x30463045, 0x31200786, 0x32200786, 0x33200786,
0x34200786, 0x31210784, 0x21278530, 0x27853031, 0x85303121, 0x30312127, 0x31212785, 0x20278730, 0x202f8635, 0x20078636, 0x20078637, 0x20078638,
0x20078639, 0x20078641, 0x20078642, 0x20078643, 0x20078644, 0x20078645, 0x21078546, 0x07863031, 0x07863120, 0x31207f86, 0x31207f86, 0x31207f86,
0x31207f86, 0x31207f86, 0x31207f86, 0x31207f86, 0x31207f86, 0x31207f86, 0x31207f86, 0x31207f86, 0x31207f86, 0x31207f86, 0x32217f86, 0x21778530,
0x07863132, 0x32207f86, 0x32207f86, 0x32207f86, 0x32207f86, 0x32207f86, 0x32207f86, 0x32207f86, 0x32207f86, 0x32207f86, 0x32207f86, 0x32207f86,
0x32207f86, 0x32207f86, 0x33217f86, 0x21778530, 0x07863133, 0x33207f86, 0x33207f86, 0x33207f86, 0x33207f86, 0x33207f86, 0x33207f86, 0x33207f86,
0x33207f86, 0x33207f86, 0x33207f86, 0x33207f86, 0x33207f86, 0x33207f86, 0x34217f86, 0x21778530, 0x07863134, 0x34207f86, 0x34207f86, 0x34207f86,
0x34207f86, 0x34207f86, 0x34207f86, 0x34207f86, 0x34207f86, 0x34207f86, 0x34207f86, 0x34207f86, 0x34207f86, 0x34207f86, 0x35217f86, 0x21778530,
0x07863135, 0x35207f86, 0x35207f86, 0x35207f86, 0x35207f86, 0x35207f86, 0x35227f86, 0x00830038, 0xffff0123, 0x07b94500, 0x0c000026, 0x04001400,
0x02241682, 0x01000000, 0x09850386, 0x55e00024, 0x11822068, 0xfde0002c, 0x00009fff, 0x63e10000, 0xfa056e19, 0x72e94484,
};

View file

@ -2237,6 +2237,9 @@ int FurnaceGUI::load(String path) {
if (settings.playOnLoad==2 || (settings.playOnLoad==1 && wasPlaying)) {
play();
}
} else {
// warn the user
showWarning("you have loaded a backup!\nif you need to, please save it somewhere.\n\nDO NOT RELY ON THE BACKUP SYSTEM FOR AUTO-SAVE!\nFurnace will not save backups of backups.",GUI_WARN_GENERIC);
}
return 0;
}

View file

@ -310,7 +310,26 @@ enum FurnaceGUIColors {
GUI_COLOR_PATTERN_STATUS_REL,
GUI_COLOR_PATTERN_STATUS_REL_ON,
GUI_COLOR_PATTERN_STATUS_ON,
GUI_COLOR_PATTERN_STATUS_VOLUME,
GUI_COLOR_PATTERN_STATUS_PITCH,
GUI_COLOR_PATTERN_STATUS_PANNING,
GUI_COLOR_PATTERN_STATUS_SYS1,
GUI_COLOR_PATTERN_STATUS_SYS2,
GUI_COLOR_PATTERN_STATUS_MIXING,
GUI_COLOR_PATTERN_STATUS_DSP,
GUI_COLOR_PATTERN_STATUS_NOTE,
GUI_COLOR_PATTERN_STATUS_MISC1,
GUI_COLOR_PATTERN_STATUS_MISC2,
GUI_COLOR_PATTERN_STATUS_MISC3,
GUI_COLOR_PATTERN_STATUS_ATTACK,
GUI_COLOR_PATTERN_STATUS_DECAY,
GUI_COLOR_PATTERN_STATUS_SUSTAIN,
GUI_COLOR_PATTERN_STATUS_RELEASE,
GUI_COLOR_PATTERN_STATUS_DEC_LINEAR,
GUI_COLOR_PATTERN_STATUS_DEC_EXP,
GUI_COLOR_PATTERN_STATUS_INC,
GUI_COLOR_PATTERN_STATUS_BENT,
GUI_COLOR_PATTERN_STATUS_DIRECT,
GUI_COLOR_PATTERN_PAIR,
GUI_COLOR_SAMPLE_BG,
@ -1445,6 +1464,7 @@ class FurnaceGUI {
int mainFontSize, patFontSize, headFontSize, iconSize;
int audioEngine;
int audioQuality;
int audioHiPass;
int audioChans;
int arcadeCore;
int ym2612Core;
@ -1637,6 +1657,7 @@ class FurnaceGUI {
iconSize(16),
audioEngine(DIV_AUDIO_SDL),
audioQuality(0),
audioHiPass(1),
audioChans(2),
arcadeCore(0),
ym2612Core(0),

View file

@ -993,6 +993,26 @@ const FurnaceGUIColorDef guiColors[GUI_COLOR_MAX]={
D(GUI_COLOR_PATTERN_STATUS_REL,"",ImVec4(0.7f,0.1f,0.1f,1.0f)),
D(GUI_COLOR_PATTERN_STATUS_REL_ON,"",ImVec4(1.0f,0.8f,0.1f,1.0f)),
D(GUI_COLOR_PATTERN_STATUS_ON,"",ImVec4(0.3f,1.0f,0.1f,1.0f)),
D(GUI_COLOR_PATTERN_STATUS_VOLUME,"",ImVec4(0.0f,1.0f,0.0f,1.0f)),
D(GUI_COLOR_PATTERN_STATUS_PITCH,"",ImVec4(1.0f,1.0f,0.0f,1.0f)),
D(GUI_COLOR_PATTERN_STATUS_PANNING,"",ImVec4(0.0f,1.0f,1.0f,1.0f)),
D(GUI_COLOR_PATTERN_STATUS_SYS1,"",ImVec4(0.5f,1.0f,0.0f,1.0f)),
D(GUI_COLOR_PATTERN_STATUS_SYS2,"",ImVec4(0.0f,1.0f,0.5f,1.0f)),
D(GUI_COLOR_PATTERN_STATUS_MIXING,"",ImVec4(1.0f,0.3f,1.0f,1.0f)),
D(GUI_COLOR_PATTERN_STATUS_DSP,"",ImVec4(0.3f,0.6f,1.0f,1.0f)),
D(GUI_COLOR_PATTERN_STATUS_NOTE,"",ImVec4(0.3f,0.3f,1.0f,1.0f)),
D(GUI_COLOR_PATTERN_STATUS_MISC1,"",ImVec4(1.0f,0.5f,0.0f,1.0f)),
D(GUI_COLOR_PATTERN_STATUS_MISC2,"",ImVec4(0.7f,0.5f,1.0f,1.0f)),
D(GUI_COLOR_PATTERN_STATUS_MISC3,"",ImVec4(1.0f,0.1f,0.1f,1.0f)),
D(GUI_COLOR_PATTERN_STATUS_ATTACK,"",ImVec4(1.0f,0.1f,0.1f,1.0f)),
D(GUI_COLOR_PATTERN_STATUS_DECAY,"",ImVec4(0.1f,0.4f,0.5f,1.0f)),
D(GUI_COLOR_PATTERN_STATUS_SUSTAIN,"",ImVec4(0.1f,1.0f,1.0f,1.0f)),
D(GUI_COLOR_PATTERN_STATUS_RELEASE,"",ImVec4(1.0f,0.1f,1.0f,1.0f)),
D(GUI_COLOR_PATTERN_STATUS_DEC_LINEAR,"",ImVec4(0.0f,0.6f,0.7f,1.0f)),
D(GUI_COLOR_PATTERN_STATUS_DEC_EXP,"",ImVec4(1.0f,0.3f,0.0f,1.0f)),
D(GUI_COLOR_PATTERN_STATUS_INC,"",ImVec4(0.1f,0.1f,1.0f,1.0f)),
D(GUI_COLOR_PATTERN_STATUS_BENT,"",ImVec4(1.0f,1.0f,0.1f,1.0f)),
D(GUI_COLOR_PATTERN_STATUS_DIRECT,"",ImVec4(1.0f,0.5f,0.2f,1.0f)),
D(GUI_COLOR_PATTERN_PAIR,"",ImVec4(0.6f,0.8f,1.0f,1.0f)),

Some files were not shown because too many files have changed in this diff Show more